openclaw-code-agent 4.3.1 → 4.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,31 +1,35 @@
1
- var ny=Object.defineProperty;var p=(t,e)=>()=>(t&&(e=t(t=0)),e);var Eo=(t,e)=>{for(var n in e)ny(t,n,{get:e[n],enumerable:!0})};var _e={};Eo(_e,{HasPropertyKey:()=>$o,IsArray:()=>ce,IsAsyncIterator:()=>fa,IsBigInt:()=>Rr,IsBoolean:()=>Nt,IsDate:()=>yn,IsFunction:()=>ga,IsIterator:()=>ha,IsNull:()=>ya,IsNumber:()=>ze,IsObject:()=>j,IsRegExp:()=>Tr,IsString:()=>Q,IsSymbol:()=>Sa,IsUint8Array:()=>Ft,IsUndefined:()=>me});function $o(t,e){return e in t}function fa(t){return j(t)&&!ce(t)&&!Ft(t)&&Symbol.asyncIterator in t}function ce(t){return Array.isArray(t)}function Rr(t){return typeof t=="bigint"}function Nt(t){return typeof t=="boolean"}function yn(t){return t instanceof globalThis.Date}function ga(t){return typeof t=="function"}function ha(t){return j(t)&&!ce(t)&&!Ft(t)&&Symbol.iterator in t}function ya(t){return t===null}function ze(t){return typeof t=="number"}function j(t){return typeof t=="object"&&t!==null}function Tr(t){return t instanceof globalThis.RegExp}function Q(t){return typeof t=="string"}function Sa(t){return typeof t=="symbol"}function Ft(t){return t instanceof globalThis.Uint8Array}function me(t){return t===void 0}var Fe=p(()=>{});function ry(t){return t.map(e=>Oo(e))}function oy(t){return new Date(t.getTime())}function iy(t){return new Uint8Array(t)}function sy(t){return new RegExp(t.source,t.flags)}function ay(t){let e={};for(let n of Object.getOwnPropertyNames(t))e[n]=Oo(t[n]);for(let n of Object.getOwnPropertySymbols(t))e[n]=Oo(t[n]);return e}function Oo(t){return ce(t)?ry(t):yn(t)?oy(t):Ft(t)?iy(t):Tr(t)?sy(t):j(t)?ay(t):t}function ee(t){return Oo(t)}var Be=p(()=>{Fe()});function Kn(t,e){return e===void 0?ee(t):ee({...e,...t})}var Do=p(()=>{Be()});var ka=p(()=>{Do();Be()});function pu(t){return t!==null&&typeof t=="object"}function cu(t){return globalThis.Array.isArray(t)&&!globalThis.ArrayBuffer.isView(t)}function mu(t){return t===void 0}function fu(t){return typeof t=="number"}var gu=p(()=>{});var hu=p(()=>{gu()});var No,yu=p(()=>{hu();(function(t){t.InstanceMode="default",t.ExactOptionalPropertyTypes=!1,t.AllowArrayObject=!1,t.AllowNaN=!1,t.AllowNullVoid=!1;function e(s,a){return t.ExactOptionalPropertyTypes?a in s:s[a]!==void 0}t.IsExactOptionalProperty=e;function n(s){let a=pu(s);return t.AllowArrayObject?a:a&&!cu(s)}t.IsObjectLike=n;function r(s){return n(s)&&!(s instanceof Date)&&!(s instanceof Uint8Array)}t.IsRecordLike=r;function o(s){return t.AllowNaN?fu(s):Number.isFinite(s)}t.IsNumberLike=o;function i(s){let a=mu(s);return t.AllowNullVoid?a||s===null:a}t.IsVoidLike=i})(No||(No={}))});function dy(t){return globalThis.Object.freeze(t).map(e=>Mr(e))}function ly(t){let e={};for(let n of Object.getOwnPropertyNames(t))e[n]=Mr(t[n]);for(let n of Object.getOwnPropertySymbols(t))e[n]=Mr(t[n]);return globalThis.Object.freeze(e)}function Mr(t){return ce(t)?dy(t):yn(t)?t:Ft(t)?t:Tr(t)?t:j(t)?ly(t):t}var Su=p(()=>{Fe()});function h(t,e){let n=e!==void 0?{...e,...t}:t;switch(No.InstanceMode){case"freeze":return Mr(n);case"clone":return ee(n);default:return n}}var R=p(()=>{yu();Su();Be()});var Lt=p(()=>{R()});var Ie,ku=p(()=>{Ie=class extends Error{constructor(e){super(e)}}});var Tt=p(()=>{ku()});var Se,yt,Ae,it,w,Cr=p(()=>{Se=Symbol.for("TypeBox.Transform"),yt=Symbol.for("TypeBox.Readonly"),Ae=Symbol.for("TypeBox.Optional"),it=Symbol.for("TypeBox.Hint"),w=Symbol.for("TypeBox.Kind")});var M=p(()=>{Cr()});function Vn(t){return j(t)&&t[yt]==="Readonly"}function Ue(t){return j(t)&&t[Ae]==="Optional"}function va(t){return N(t,"Any")}function Pa(t){return N(t,"Argument")}function St(t){return N(t,"Array")}function Sn(t){return N(t,"AsyncIterator")}function kn(t){return N(t,"BigInt")}function Wt(t){return N(t,"Boolean")}function kt(t){return N(t,"Computed")}function vt(t){return N(t,"Constructor")}function uy(t){return N(t,"Date")}function Pt(t){return N(t,"Function")}function wt(t){return N(t,"Integer")}function oe(t){return N(t,"Intersect")}function vn(t){return N(t,"Iterator")}function N(t,e){return j(t)&&w in t&&t[w]===e}function Fo(t){return Nt(t)||ze(t)||Q(t)}function Qe(t){return N(t,"Literal")}function Je(t){return N(t,"MappedKey")}function te(t){return N(t,"MappedResult")}function Qt(t){return N(t,"Never")}function py(t){return N(t,"Not")}function _r(t){return N(t,"Null")}function It(t){return N(t,"Number")}function fe(t){return N(t,"Object")}function Pn(t){return N(t,"Promise")}function wn(t){return N(t,"Record")}function de(t){return N(t,"Ref")}function wa(t){return N(t,"RegExp")}function Bt(t){return N(t,"String")}function Er(t){return N(t,"Symbol")}function Ye(t){return N(t,"TemplateLiteral")}function cy(t){return N(t,"This")}function Jt(t){return j(t)&&Se in t}function Xe(t){return N(t,"Tuple")}function $r(t){return N(t,"Undefined")}function F(t){return N(t,"Union")}function my(t){return N(t,"Uint8Array")}function fy(t){return N(t,"Unknown")}function gy(t){return N(t,"Unsafe")}function hy(t){return N(t,"Void")}function yy(t){return j(t)&&w in t&&Q(t[w])}function Ze(t){return va(t)||Pa(t)||St(t)||Wt(t)||kn(t)||Sn(t)||kt(t)||vt(t)||uy(t)||Pt(t)||wt(t)||oe(t)||vn(t)||Qe(t)||Je(t)||te(t)||Qt(t)||py(t)||_r(t)||It(t)||fe(t)||Pn(t)||wn(t)||de(t)||wa(t)||Bt(t)||Er(t)||Ye(t)||cy(t)||Xe(t)||$r(t)||F(t)||my(t)||fy(t)||gy(t)||hy(t)||yy(t)}var B=p(()=>{Fe();M()});var f={};Eo(f,{IsAny:()=>Iu,IsArgument:()=>bu,IsArray:()=>xu,IsAsyncIterator:()=>Au,IsBigInt:()=>Ru,IsBoolean:()=>Tu,IsComputed:()=>Mu,IsConstructor:()=>Cu,IsDate:()=>_u,IsFunction:()=>Eu,IsImport:()=>Iy,IsInteger:()=>$u,IsIntersect:()=>Ou,IsIterator:()=>Du,IsKind:()=>ap,IsKindOf:()=>D,IsLiteral:()=>Dr,IsLiteralBoolean:()=>by,IsLiteralNumber:()=>Fu,IsLiteralString:()=>Nu,IsLiteralValue:()=>Lu,IsMappedKey:()=>Wu,IsMappedResult:()=>Bu,IsNever:()=>Uu,IsNot:()=>Ku,IsNull:()=>Vu,IsNumber:()=>qu,IsObject:()=>ju,IsOptional:()=>wy,IsPromise:()=>Gu,IsProperties:()=>Lo,IsReadonly:()=>Py,IsRecord:()=>Hu,IsRecursive:()=>xy,IsRef:()=>zu,IsRegExp:()=>Qu,IsSchema:()=>be,IsString:()=>Ju,IsSymbol:()=>Yu,IsTemplateLiteral:()=>Xu,IsThis:()=>Zu,IsTransform:()=>ep,IsTuple:()=>tp,IsUint8Array:()=>rp,IsUndefined:()=>np,IsUnion:()=>Aa,IsUnionLiteral:()=>Ay,IsUnknown:()=>op,IsUnsafe:()=>ip,IsVoid:()=>sp,TypeGuardUnknownTypeError:()=>Ia});function vu(t){try{return new RegExp(t),!0}catch{return!1}}function ba(t){if(!Q(t))return!1;for(let e=0;e<t.length;e++){let n=t.charCodeAt(e);if(n>=7&&n<=13||n===27||n===127)return!1}return!0}function Pu(t){return xa(t)||be(t)}function Or(t){return me(t)||Rr(t)}function J(t){return me(t)||ze(t)}function xa(t){return me(t)||Nt(t)}function G(t){return me(t)||Q(t)}function ky(t){return me(t)||Q(t)&&ba(t)&&vu(t)}function vy(t){return me(t)||Q(t)&&ba(t)}function wu(t){return me(t)||be(t)}function Py(t){return j(t)&&t[yt]==="Readonly"}function wy(t){return j(t)&&t[Ae]==="Optional"}function Iu(t){return D(t,"Any")&&G(t.$id)}function bu(t){return D(t,"Argument")&&ze(t.index)}function xu(t){return D(t,"Array")&&t.type==="array"&&G(t.$id)&&be(t.items)&&J(t.minItems)&&J(t.maxItems)&&xa(t.uniqueItems)&&wu(t.contains)&&J(t.minContains)&&J(t.maxContains)}function Au(t){return D(t,"AsyncIterator")&&t.type==="AsyncIterator"&&G(t.$id)&&be(t.items)}function Ru(t){return D(t,"BigInt")&&t.type==="bigint"&&G(t.$id)&&Or(t.exclusiveMaximum)&&Or(t.exclusiveMinimum)&&Or(t.maximum)&&Or(t.minimum)&&Or(t.multipleOf)}function Tu(t){return D(t,"Boolean")&&t.type==="boolean"&&G(t.$id)}function Mu(t){return D(t,"Computed")&&Q(t.target)&&ce(t.parameters)&&t.parameters.every(e=>be(e))}function Cu(t){return D(t,"Constructor")&&t.type==="Constructor"&&G(t.$id)&&ce(t.parameters)&&t.parameters.every(e=>be(e))&&be(t.returns)}function _u(t){return D(t,"Date")&&t.type==="Date"&&G(t.$id)&&J(t.exclusiveMaximumTimestamp)&&J(t.exclusiveMinimumTimestamp)&&J(t.maximumTimestamp)&&J(t.minimumTimestamp)&&J(t.multipleOfTimestamp)}function Eu(t){return D(t,"Function")&&t.type==="Function"&&G(t.$id)&&ce(t.parameters)&&t.parameters.every(e=>be(e))&&be(t.returns)}function Iy(t){return D(t,"Import")&&$o(t,"$defs")&&j(t.$defs)&&Lo(t.$defs)&&$o(t,"$ref")&&Q(t.$ref)&&t.$ref in t.$defs}function $u(t){return D(t,"Integer")&&t.type==="integer"&&G(t.$id)&&J(t.exclusiveMaximum)&&J(t.exclusiveMinimum)&&J(t.maximum)&&J(t.minimum)&&J(t.multipleOf)}function Lo(t){return j(t)&&Object.entries(t).every(([e,n])=>ba(e)&&be(n))}function Ou(t){return D(t,"Intersect")&&!(Q(t.type)&&t.type!=="object")&&ce(t.allOf)&&t.allOf.every(e=>be(e)&&!ep(e))&&G(t.type)&&(xa(t.unevaluatedProperties)||wu(t.unevaluatedProperties))&&G(t.$id)}function Du(t){return D(t,"Iterator")&&t.type==="Iterator"&&G(t.$id)&&be(t.items)}function D(t,e){return j(t)&&w in t&&t[w]===e}function Nu(t){return Dr(t)&&Q(t.const)}function Fu(t){return Dr(t)&&ze(t.const)}function by(t){return Dr(t)&&Nt(t.const)}function Dr(t){return D(t,"Literal")&&G(t.$id)&&Lu(t.const)}function Lu(t){return Nt(t)||ze(t)||Q(t)}function Wu(t){return D(t,"MappedKey")&&ce(t.keys)&&t.keys.every(e=>ze(e)||Q(e))}function Bu(t){return D(t,"MappedResult")&&Lo(t.properties)}function Uu(t){return D(t,"Never")&&j(t.not)&&Object.getOwnPropertyNames(t.not).length===0}function Ku(t){return D(t,"Not")&&be(t.not)}function Vu(t){return D(t,"Null")&&t.type==="null"&&G(t.$id)}function qu(t){return D(t,"Number")&&t.type==="number"&&G(t.$id)&&J(t.exclusiveMaximum)&&J(t.exclusiveMinimum)&&J(t.maximum)&&J(t.minimum)&&J(t.multipleOf)}function ju(t){return D(t,"Object")&&t.type==="object"&&G(t.$id)&&Lo(t.properties)&&Pu(t.additionalProperties)&&J(t.minProperties)&&J(t.maxProperties)}function Gu(t){return D(t,"Promise")&&t.type==="Promise"&&G(t.$id)&&be(t.item)}function Hu(t){return D(t,"Record")&&t.type==="object"&&G(t.$id)&&Pu(t.additionalProperties)&&j(t.patternProperties)&&(e=>{let n=Object.getOwnPropertyNames(e.patternProperties);return n.length===1&&vu(n[0])&&j(e.patternProperties)&&be(e.patternProperties[n[0]])})(t)}function xy(t){return j(t)&&it in t&&t[it]==="Recursive"}function zu(t){return D(t,"Ref")&&G(t.$id)&&Q(t.$ref)}function Qu(t){return D(t,"RegExp")&&G(t.$id)&&Q(t.source)&&Q(t.flags)&&J(t.maxLength)&&J(t.minLength)}function Ju(t){return D(t,"String")&&t.type==="string"&&G(t.$id)&&J(t.minLength)&&J(t.maxLength)&&ky(t.pattern)&&vy(t.format)}function Yu(t){return D(t,"Symbol")&&t.type==="symbol"&&G(t.$id)}function Xu(t){return D(t,"TemplateLiteral")&&t.type==="string"&&Q(t.pattern)&&t.pattern[0]==="^"&&t.pattern[t.pattern.length-1]==="$"}function Zu(t){return D(t,"This")&&G(t.$id)&&Q(t.$ref)}function ep(t){return j(t)&&Se in t}function tp(t){return D(t,"Tuple")&&t.type==="array"&&G(t.$id)&&ze(t.minItems)&&ze(t.maxItems)&&t.minItems===t.maxItems&&(me(t.items)&&me(t.additionalItems)&&t.minItems===0||ce(t.items)&&t.items.every(e=>be(e)))}function np(t){return D(t,"Undefined")&&t.type==="undefined"&&G(t.$id)}function Ay(t){return Aa(t)&&t.anyOf.every(e=>Nu(e)||Fu(e))}function Aa(t){return D(t,"Union")&&G(t.$id)&&j(t)&&ce(t.anyOf)&&t.anyOf.every(e=>be(e))}function rp(t){return D(t,"Uint8Array")&&t.type==="Uint8Array"&&G(t.$id)&&J(t.minByteLength)&&J(t.maxByteLength)}function op(t){return D(t,"Unknown")&&G(t.$id)}function ip(t){return D(t,"Unsafe")}function sp(t){return D(t,"Void")&&t.type==="void"&&G(t.$id)}function ap(t){return j(t)&&w in t&&Q(t[w])&&!Sy.includes(t[w])}function be(t){return j(t)&&(Iu(t)||bu(t)||xu(t)||Tu(t)||Ru(t)||Au(t)||Mu(t)||Cu(t)||_u(t)||Eu(t)||$u(t)||Ou(t)||Du(t)||Dr(t)||Wu(t)||Bu(t)||Uu(t)||Ku(t)||Vu(t)||qu(t)||ju(t)||Gu(t)||Hu(t)||zu(t)||Qu(t)||Ju(t)||Yu(t)||Xu(t)||Zu(t)||tp(t)||np(t)||Aa(t)||rp(t)||op(t)||ip(t)||sp(t)||ap(t))}var Ia,Sy,dp=p(()=>{Fe();M();Tt();Ia=class extends Ie{},Sy=["Argument","Any","Array","AsyncIterator","BigInt","Boolean","Computed","Constructor","Date","Enum","Function","Integer","Intersect","Iterator","Literal","MappedKey","MappedResult","Not","Null","Number","Object","Promise","Record","Ref","RegExp","String","Symbol","TemplateLiteral","This","Tuple","Undefined","Union","Uint8Array","Unknown","Void"]});var Ra=p(()=>{B();dp();Fe()});var lp=p(()=>{});var up=p(()=>{lp()});var Ta,Nr,Ma,Ry,hR,Yt,Xt,pp,cp=p(()=>{Ta="(true|false)",Nr="(0|[1-9][0-9]*)",Ma="(.*)",Ry="(?!.*)",hR=`^${Ta}$`,Yt=`^${Nr}$`,Xt=`^${Ma}$`,pp=`^${Ry}$`});var Fr=p(()=>{cp()});var mp=p(()=>{});var fp=p(()=>{});var gp=p(()=>{mp();fp()});function hp(t,e){return t.includes(e)}function yp(t){return[...new Set(t)]}function Cy(t,e){return t.filter(n=>e.includes(n))}function _y(t,e){return t.reduce((n,r)=>Cy(n,r),e)}function Sp(t){return t.length===1?t[0]:t.length>1?_y(t.slice(1),t[0]):[]}function kp(t){let e=[];for(let n of t)e.push(...n);return e}var vp=p(()=>{});var Lr=p(()=>{vp()});function Zt(t){return h({[w]:"Any"},t)}var Pp=p(()=>{Lt();M()});var Wr=p(()=>{Pp()});function qn(t,e){return h({[w]:"Array",type:"array",items:t},e)}var wp=p(()=>{R();M()});var Br=p(()=>{wp()});function Ip(t){return h({[w]:"Argument",index:t})}var bp=p(()=>{R();M()});var Ca=p(()=>{bp()});function jn(t,e){return h({[w]:"AsyncIterator",type:"AsyncIterator",items:t},e)}var xp=p(()=>{M();R()});var Ur=p(()=>{xp()});function Z(t,e,n){return h({[w]:"Computed",target:t,parameters:e},n)}var Ap=p(()=>{Lt();Cr()});var en=p(()=>{Ap()});function Ey(t,e){let{[e]:n,...r}=t;return r}function ie(t,e){return e.reduce((n,r)=>Ey(n,r),t)}var Wo=p(()=>{});var Kt=p(()=>{Wo()});function L(t){return h({[w]:"Never",not:{}},t)}var Rp=p(()=>{R();M()});var Re=p(()=>{Rp()});var Tp=p(()=>{});function U(t){return h({[w]:"MappedResult",properties:t})}var _a=p(()=>{R();M()});function Gn(t,e,n){return h({[w]:"Constructor",type:"Constructor",parameters:t,returns:e},n)}var Mp=p(()=>{R();M()});var Kr=p(()=>{Mp()});function Mt(t,e,n){return h({[w]:"Function",type:"Function",parameters:t,returns:e},n)}var Cp=p(()=>{R();M()});var In=p(()=>{Cp()});function Vr(t,e){return h({[w]:"Union",anyOf:t},e)}var Ea=p(()=>{R();M()});function $y(t){return t.some(e=>Ue(e))}function _p(t){return t.map(e=>Ue(e)?Oy(e):e)}function Oy(t){return ie(t,[Ae])}function Dy(t,e){return $y(t)?Ee(Vr(_p(t),e)):Vr(_p(t),e)}function Ct(t,e){return t.length===1?h(t[0],e):t.length===0?L(e):Dy(t,e)}var Ep=p(()=>{R();M();Kt();Re();Vt();Ea();B()});var $p=p(()=>{});function V(t,e){return t.length===0?L(e):t.length===1?h(t[0],e):Vr(t,e)}var Op=p(()=>{Re();R();Ea()});var ke=p(()=>{Ep();$p();Op()});function Ny(t){return t.replace(/\\\$/g,"$").replace(/\\\*/g,"*").replace(/\\\^/g,"^").replace(/\\\|/g,"|").replace(/\\\(/g,"(").replace(/\\\)/g,")")}function $a(t,e,n){return t[e]===n&&t.charCodeAt(e-1)!==92}function qt(t,e){return $a(t,e,"(")}function qr(t,e){return $a(t,e,")")}function Dp(t,e){return $a(t,e,"|")}function Fy(t){if(!(qt(t,0)&&qr(t,t.length-1)))return!1;let e=0;for(let n=0;n<t.length;n++)if(qt(t,n)&&(e+=1),qr(t,n)&&(e-=1),e===0&&n!==t.length-1)return!1;return!0}function Ly(t){return t.slice(1,t.length-1)}function Wy(t){let e=0;for(let n=0;n<t.length;n++)if(qt(t,n)&&(e+=1),qr(t,n)&&(e-=1),Dp(t,n)&&e===0)return!0;return!1}function By(t){for(let e=0;e<t.length;e++)if(qt(t,e))return!0;return!1}function Uy(t){let[e,n]=[0,0],r=[];for(let i=0;i<t.length;i++)if(qt(t,i)&&(e+=1),qr(t,i)&&(e-=1),Dp(t,i)&&e===0){let s=t.slice(n,i);s.length>0&&r.push(Hn(s)),n=i+1}let o=t.slice(n);return o.length>0&&r.push(Hn(o)),r.length===0?{type:"const",const:""}:r.length===1?r[0]:{type:"or",expr:r}}function Ky(t){function e(o,i){if(!qt(o,i))throw new Bo("TemplateLiteralParser: Index must point to open parens");let s=0;for(let a=i;a<o.length;a++)if(qt(o,a)&&(s+=1),qr(o,a)&&(s-=1),s===0)return[i,a];throw new Bo("TemplateLiteralParser: Unclosed group parens in expression")}function n(o,i){for(let s=i;s<o.length;s++)if(qt(o,s))return[i,s];return[i,o.length]}let r=[];for(let o=0;o<t.length;o++)if(qt(t,o)){let[i,s]=e(t,o),a=t.slice(i,s+1);r.push(Hn(a)),o=s}else{let[i,s]=n(t,o),a=t.slice(i,s);a.length>0&&r.push(Hn(a)),o=s-1}return r.length===0?{type:"const",const:""}:r.length===1?r[0]:{type:"and",expr:r}}function Hn(t){return Fy(t)?Hn(Ly(t)):Wy(t)?Uy(t):By(t)?Ky(t):{type:"const",const:Ny(t)}}function zn(t){return Hn(t.slice(1,t.length-1))}var Bo,Uo=p(()=>{Tt();Bo=class extends Ie{}});function Vy(t){return t.type==="or"&&t.expr.length===2&&t.expr[0].type==="const"&&t.expr[0].const==="0"&&t.expr[1].type==="const"&&t.expr[1].const==="[1-9][0-9]*"}function qy(t){return t.type==="or"&&t.expr.length===2&&t.expr[0].type==="const"&&t.expr[0].const==="true"&&t.expr[1].type==="const"&&t.expr[1].const==="false"}function jy(t){return t.type==="const"&&t.const===".*"}function bn(t){return Vy(t)||jy(t)?!1:qy(t)?!0:t.type==="and"?t.expr.every(e=>bn(e)):t.type==="or"?t.expr.every(e=>bn(e)):t.type==="const"?!0:(()=>{throw new Oa("Unknown expression type")})()}function Np(t){let e=zn(t.pattern);return bn(e)}var Oa,Da=p(()=>{Uo();Tt();Oa=class extends Ie{}});function*Fp(t){if(t.length===1)return yield*t[0];for(let e of t[0])for(let n of Fp(t.slice(1)))yield`${e}${n}`}function*Gy(t){return yield*Fp(t.expr.map(e=>[...jr(e)]))}function*Hy(t){for(let e of t.expr)yield*jr(e)}function*zy(t){return yield t.const}function*jr(t){return t.type==="and"?yield*Gy(t):t.type==="or"?yield*Hy(t):t.type==="const"?yield*zy(t):(()=>{throw new Na("Unknown expression")})()}function Ko(t){let e=zn(t.pattern);return bn(e)?[...jr(e)]:[]}var Na,Fa=p(()=>{Da();Uo();Tt();Na=class extends Ie{}});function K(t,e){return h({[w]:"Literal",const:t,type:typeof t},e)}var Lp=p(()=>{R();M()});var Ke=p(()=>{Lp()});function Vo(t){return h({[w]:"Boolean",type:"boolean"},t)}var Wp=p(()=>{M();Lt()});var qo=p(()=>{Wp()});function Qn(t){return h({[w]:"BigInt",type:"bigint"},t)}var Bp=p(()=>{M();Lt()});var Gr=p(()=>{Bp()});function st(t){return h({[w]:"Number",type:"number"},t)}var Up=p(()=>{R();M()});var xn=p(()=>{Up()});function bt(t){return h({[w]:"String",type:"string"},t)}var Kp=p(()=>{R();M()});var Jn=p(()=>{Kp()});function*Qy(t){let e=t.trim().replace(/"|'/g,"");return e==="boolean"?yield Vo():e==="number"?yield st():e==="bigint"?yield Qn():e==="string"?yield bt():yield(()=>{let n=e.split("|").map(r=>K(r.trim()));return n.length===0?L():n.length===1?n[0]:Ct(n)})()}function*Jy(t){if(t[1]!=="{"){let e=K("$"),n=La(t.slice(1));return yield*[e,...n]}for(let e=2;e<t.length;e++)if(t[e]==="}"){let n=Qy(t.slice(2,e)),r=La(t.slice(e+1));return yield*[...n,...r]}yield K(t)}function*La(t){for(let e=0;e<t.length;e++)if(t[e]==="$"){let n=K(t.slice(0,e)),r=Jy(t.slice(e));return yield*[n,...r]}yield K(t)}function Vp(t){return[...La(t)]}var Wa=p(()=>{Ke();qo();Gr();xn();Jn();ke();Re()});function Yy(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function qp(t,e){return Ye(t)?t.pattern.slice(1,t.pattern.length-1):F(t)?`(${t.anyOf.map(n=>qp(n,e)).join("|")})`:It(t)?`${e}${Nr}`:wt(t)?`${e}${Nr}`:kn(t)?`${e}${Nr}`:Bt(t)?`${e}${Ma}`:Qe(t)?`${e}${Yy(t.const.toString())}`:Wt(t)?`${e}${Ta}`:(()=>{throw new Ba(`Unexpected Kind '${t[w]}'`)})()}function Ua(t){return`^${t.map(e=>qp(e,"")).join("")}$`}var Ba,Ka=p(()=>{Fr();M();Tt();B();Ba=class extends Ie{}});function An(t){let n=Ko(t).map(r=>K(r));return Ct(n)}var jp=p(()=>{ke();Ke();Fa()});function jo(t,e){let n=Q(t)?Ua(Vp(t)):Ua(t);return h({[w]:"TemplateLiteral",type:"string",pattern:n},e)}var Gp=p(()=>{R();Wa();Ka();Fe();M()});var jt=p(()=>{Da();Fa();Wa();Uo();Ka();jp();Gp()});function Xy(t){return Ko(t).map(n=>n.toString())}function Zy(t){let e=[];for(let n of t)e.push(...Ve(n));return e}function eS(t){return[t.toString()]}function Ve(t){return[...new Set(Ye(t)?Xy(t):F(t)?Zy(t.anyOf):Qe(t)?eS(t.const):It(t)?["[number]"]:wt(t)?["[number]"]:[])]}var Go=p(()=>{jt();B()});function tS(t,e,n){let r={};for(let o of Object.getOwnPropertyNames(e))r[o]=tn(t,Ve(e[o]),n);return r}function nS(t,e,n){return tS(t,e.properties,n)}function Hp(t,e,n){let r=nS(t,e,n);return U(r)}var Va=p(()=>{we();Go();_t()});function Qp(t,e){return t.map(n=>Jp(n,e))}function rS(t){return t.filter(e=>!Qt(e))}function oS(t,e){return Ho(rS(Qp(t,e)))}function iS(t){return t.some(e=>Qt(e))?[]:t}function sS(t,e){return Ct(iS(Qp(t,e)))}function aS(t,e){return e in t?t[e]:e==="[number]"?Ct(t):L()}function dS(t,e){return e==="[number]"?t:L()}function lS(t,e){return e in t?t[e]:L()}function Jp(t,e){return oe(t)?oS(t.allOf,e):F(t)?sS(t.anyOf,e):Xe(t)?aS(t.items??[],e):St(t)?dS(t.items,e):fe(t)?lS(t.properties,e):L()}function qa(t,e){return e.map(n=>Jp(t,n))}function zp(t,e){return Ct(qa(t,e))}function tn(t,e,n){if(de(t)||de(e)){let r="Index types using Ref parameters require both Type and Key to be of TSchema";if(!Ze(t)||!Ze(e))throw new Ie(r);return Z("Index",[t,e])}return te(e)?Hp(t,e,n):Je(e)?Yp(t,e,n):h(Ze(e)?zp(t,Ve(e)):zp(t,e),n)}var ja=p(()=>{R();Tt();en();Re();at();ke();Go();Ga();Va();B()});function uS(t,e,n){return{[e]:tn(t,[e],ee(n))}}function pS(t,e,n){return e.reduce((r,o)=>({...r,...uS(t,o,n)}),{})}function cS(t,e,n){return pS(t,e.keys,n)}function Yp(t,e,n){let r=cS(t,e,n);return U(r)}var Ga=p(()=>{ja();we();Be()});var _t=p(()=>{Ga();Va();Go();ja()});function Yn(t,e){return h({[w]:"Iterator",type:"Iterator",items:t},e)}var Xp=p(()=>{R();M()});var Hr=p(()=>{Xp()});function mS(t){return globalThis.Object.keys(t).filter(e=>!Ue(t[e]))}function fS(t,e){let n=mS(t),r=n.length>0?{[w]:"Object",type:"object",required:n,properties:t}:{[w]:"Object",type:"object",properties:t};return h(r,e)}var H,Zp=p(()=>{R();M();B();H=fS});var et=p(()=>{Zp()});function zo(t,e){return h({[w]:"Promise",type:"Promise",item:t},e)}var ec=p(()=>{R();M()});var Qo=p(()=>{ec()});function gS(t){return h(ie(t,[yt]))}function hS(t){return h({...t,[yt]:"Readonly"})}function yS(t,e){return e===!1?gS(t):hS(t)}function qe(t,e){let n=e??!0;return te(t)?tc(t,n):yS(t,n)}var Ha=p(()=>{R();M();Kt();za();B()});function SS(t,e){let n={};for(let r of globalThis.Object.getOwnPropertyNames(t))n[r]=qe(t[r],e);return n}function kS(t,e){return SS(t.properties,e)}function tc(t,e){let n=kS(t,e);return U(n)}var za=p(()=>{we();Ha()});var Rn=p(()=>{za();Ha()});function dt(t,e){return h(t.length>0?{[w]:"Tuple",type:"array",items:t,additionalItems:!1,minItems:t.length,maxItems:t.length}:{[w]:"Tuple",type:"array",minItems:t.length,maxItems:t.length},e)}var nc=p(()=>{R();M()});var nn=p(()=>{nc()});function rc(t,e){return t in e?lt(t,e[t]):U(e)}function vS(t){return{[t]:K(t)}}function PS(t){let e={};for(let n of t)e[n]=K(n);return e}function wS(t,e){return hp(e,t)?vS(t):PS(e)}function IS(t,e){let n=wS(t,e);return rc(t,n)}function zr(t,e){return e.map(n=>lt(t,n))}function bS(t,e){let n={};for(let r of globalThis.Object.getOwnPropertyNames(e))n[r]=lt(t,e[r]);return n}function lt(t,e){let n={...e};return Ue(e)?Ee(lt(t,ie(e,[Ae]))):Vn(e)?qe(lt(t,ie(e,[yt]))):te(e)?rc(t,e.properties):Je(e)?IS(t,e.keys):vt(e)?Gn(zr(t,e.parameters),lt(t,e.returns),n):Pt(e)?Mt(zr(t,e.parameters),lt(t,e.returns),n):Sn(e)?jn(lt(t,e.items),n):vn(e)?Yn(lt(t,e.items),n):oe(e)?$e(zr(t,e.allOf),n):F(e)?V(zr(t,e.anyOf),n):Xe(e)?dt(zr(t,e.items??[]),n):fe(e)?H(bS(t,e.properties),n):St(e)?qn(lt(t,e.items),n):Pn(e)?zo(lt(t,e.item),n):e}function xS(t,e){let n={};for(let r of t)n[r]=lt(r,e);return n}function oc(t,e,n){let r=Ze(t)?Ve(t):t,o=e({[w]:"MappedKey",keys:r}),i=xS(r,o);return H(i,n)}var ic=p(()=>{M();Kt();Br();Ur();Kr();In();_t();at();Hr();Ke();et();Vt();Qo();Rn();nn();ke();Lr();_a();B()});var we=p(()=>{Tp();_a();ic()});function AS(t){return h(ie(t,[Ae]))}function RS(t){return h({...t,[Ae]:"Optional"})}function TS(t,e){return e===!1?AS(t):RS(t)}function Ee(t,e){let n=e??!0;return te(t)?sc(t,n):TS(t,n)}var Qa=p(()=>{R();M();Kt();Ja();B()});function MS(t,e){let n={};for(let r of globalThis.Object.getOwnPropertyNames(t))n[r]=Ee(t[r],e);return n}function CS(t,e){return MS(t.properties,e)}function sc(t,e){let n=CS(t,e);return U(n)}var Ja=p(()=>{we();Qa()});var Vt=p(()=>{Ja();Qa()});function Qr(t,e={}){let n=t.every(o=>fe(o)),r=Ze(e.unevaluatedProperties)?{unevaluatedProperties:e.unevaluatedProperties}:{};return h(e.unevaluatedProperties===!1||Ze(e.unevaluatedProperties)||n?{...r,[w]:"Intersect",type:"object",allOf:t}:{...r,[w]:"Intersect",allOf:t},e)}var Ya=p(()=>{R();M();B()});function _S(t){return t.every(e=>Ue(e))}function ES(t){return ie(t,[Ae])}function ac(t){return t.map(e=>Ue(e)?ES(e):e)}function $S(t,e){return _S(t)?Ee(Qr(ac(t),e)):Qr(ac(t),e)}function Ho(t,e={}){if(t.length===1)return h(t[0],e);if(t.length===0)return L(e);if(t.some(n=>Jt(n)))throw new Error("Cannot intersect transform types");return $S(t,e)}var dc=p(()=>{M();R();Kt();Re();Vt();Ya();B()});var lc=p(()=>{});function $e(t,e){if(t.length===1)return h(t[0],e);if(t.length===0)return L(e);if(t.some(n=>Jt(n)))throw new Error("Cannot intersect transform types");return Qr(t,e)}var uc=p(()=>{R();Re();Ya();B()});var at=p(()=>{dc();lc();uc()});function Et(...t){let[e,n]=typeof t[0]=="string"?[t[0],t[1]]:[t[0].$id,t[1]];if(typeof e!="string")throw new Ie("Ref: $ref must be a string");return h({[w]:"Ref",$ref:e},n)}var pc=p(()=>{Tt();R();M()});var Tn=p(()=>{pc()});function OS(t,e){return Z("Awaited",[Z(t,e)])}function DS(t){return Z("Awaited",[Et(t)])}function NS(t){return $e(cc(t))}function FS(t){return V(cc(t))}function LS(t){return Xn(t)}function cc(t){return t.map(e=>Xn(e))}function Xn(t,e){return h(kt(t)?OS(t.target,t.parameters):oe(t)?NS(t.allOf):F(t)?FS(t.anyOf):Pn(t)?LS(t.item):de(t)?DS(t.$ref):t,e)}var mc=p(()=>{R();en();at();ke();Tn();B()});var Jo=p(()=>{mc()});function fc(t){let e=[];for(let n of t)e.push(Jr(n));return e}function WS(t){let e=fc(t);return kp(e)}function BS(t){let e=fc(t);return Sp(e)}function US(t){return t.map((e,n)=>n.toString())}function KS(t){return["[number]"]}function VS(t){return globalThis.Object.getOwnPropertyNames(t)}function qS(t){return jS?globalThis.Object.getOwnPropertyNames(t).map(n=>n[0]==="^"&&n[n.length-1]==="$"?n.slice(1,n.length-1):n):[]}function Jr(t){return oe(t)?WS(t.allOf):F(t)?BS(t.anyOf):Xe(t)?US(t.items??[]):St(t)?KS(t.items):fe(t)?VS(t.properties):wn(t)?qS(t.patternProperties):[]}var jS,Xa=p(()=>{Lr();B();jS=!1});function GS(t,e){return Z("KeyOf",[Z(t,e)])}function HS(t){return Z("KeyOf",[Et(t)])}function zS(t,e){let n=Jr(t),r=QS(n),o=Ct(r);return h(o,e)}function QS(t){return t.map(e=>e==="[number]"?st():K(e))}function Zn(t,e){return kt(t)?GS(t.target,t.parameters):de(t)?HS(t.$ref):te(t)?gc(t,e):zS(t,e)}var Za=p(()=>{R();Ke();xn();en();Tn();Xa();ke();ed();B()});function JS(t,e){let n={};for(let r of globalThis.Object.getOwnPropertyNames(t))n[r]=Zn(t[r],ee(e));return n}function YS(t,e){return JS(t.properties,e)}function gc(t,e){let n=YS(t,e);return U(n)}var ed=p(()=>{we();Za();Be()});var hc=p(()=>{});var Yr=p(()=>{ed();hc();Xa();Za()});function XS(t){let e=[];for(let n of t)e.push(...Jr(n));return yp(e)}function ZS(t){return t.filter(e=>!Qt(e))}function ek(t,e){let n=[];for(let r of t)n.push(...qa(r,[e]));return ZS(n)}function tk(t,e){let n={};for(let r of e)n[r]=Ho(ek(t,r));return n}function yc(t,e){let n=XS(t),r=tk(t,n);return H(r,e)}var Sc=p(()=>{at();_t();Yr();et();Lr();B()});var td=p(()=>{Sc()});function Yo(t){return h({[w]:"Date",type:"Date"},t)}var kc=p(()=>{M();R()});var Xo=p(()=>{kc()});function Zo(t){return h({[w]:"Null",type:"null"},t)}var vc=p(()=>{R();M()});var ei=p(()=>{vc()});function ti(t){return h({[w]:"Symbol",type:"symbol"},t)}var Pc=p(()=>{R();M()});var ni=p(()=>{Pc()});function ri(t){return h({[w]:"Undefined",type:"undefined"},t)}var wc=p(()=>{R();M()});var oi=p(()=>{wc()});function ii(t){return h({[w]:"Uint8Array",type:"Uint8Array"},t)}var Ic=p(()=>{R();M()});var si=p(()=>{Ic()});function rn(t){return h({[w]:"Unknown"},t)}var bc=p(()=>{R();M()});var er=p(()=>{bc()});function nk(t){return t.map(e=>nd(e,!1))}function rk(t){let e={};for(let n of globalThis.Object.getOwnPropertyNames(t))e[n]=qe(nd(t[n],!1));return e}function ai(t,e){return e===!0?t:qe(t)}function nd(t,e){return fa(t)?ai(Zt(),e):ha(t)?ai(Zt(),e):ce(t)?qe(dt(nk(t))):Ft(t)?ii():yn(t)?Yo():j(t)?ai(H(rk(t)),e):ga(t)?ai(Mt([],rn()),e):me(t)?ri():ya(t)?Zo():Sa(t)?ti():Rr(t)?Qn():ze(t)?K(t):Nt(t)?K(t):Q(t)?K(t):H({})}function xc(t,e){return h(nd(t,!0),e)}var Ac=p(()=>{Wr();Gr();Xo();In();Ke();ei();et();ni();nn();Rn();oi();si();er();Lt();Fe()});var rd=p(()=>{Ac()});function Rc(t,e){return vt(t)?dt(t.parameters,e):L(e)}var Tc=p(()=>{nn();Re();B()});var od=p(()=>{Tc()});function Mc(t,e){if(me(t))throw new Error("Enum undefined or empty");let n=globalThis.Object.getOwnPropertyNames(t).filter(i=>isNaN(i)).map(i=>t[i]),o=[...new Set(n)].map(i=>K(i));return V(o,{...e,[it]:"Enum"})}var Cc=p(()=>{Ke();M();ke();Fe()});var id=p(()=>{Cc()});function ut(t){return t===y.False?t:y.True}function tr(t){throw new ad(t)}function ve(t){return f.IsNever(t)||f.IsIntersect(t)||f.IsUnion(t)||f.IsUnknown(t)||f.IsAny(t)}function Pe(t,e){return f.IsNever(e)?Fc(t,e):f.IsIntersect(e)?di(t,e):f.IsUnion(e)?pd(t,e):f.IsUnknown(e)?Uc(t,e):f.IsAny(e)?ud(t,e):tr("StructuralRight")}function ud(t,e){return y.True}function ok(t,e){return f.IsIntersect(e)?di(t,e):f.IsUnion(e)&&e.anyOf.some(n=>f.IsAny(n)||f.IsUnknown(n))?y.True:f.IsUnion(e)?y.Union:f.IsUnknown(e)||f.IsAny(e)?y.True:y.Union}function ik(t,e){return f.IsUnknown(t)?y.False:f.IsAny(t)?y.Union:f.IsNever(t)?y.True:y.False}function sk(t,e){return f.IsObject(e)&&li(e)?y.True:ve(e)?Pe(t,e):f.IsArray(e)?ut(z(t.items,e.items)):y.False}function ak(t,e){return ve(e)?Pe(t,e):f.IsAsyncIterator(e)?ut(z(t.items,e.items)):y.False}function dk(t,e){return ve(e)?Pe(t,e):f.IsObject(e)?Oe(t,e):f.IsRecord(e)?pt(t,e):f.IsBigInt(e)?y.True:y.False}function Dc(t,e){return f.IsLiteralBoolean(t)||f.IsBoolean(t)?y.True:y.False}function lk(t,e){return ve(e)?Pe(t,e):f.IsObject(e)?Oe(t,e):f.IsRecord(e)?pt(t,e):f.IsBoolean(e)?y.True:y.False}function uk(t,e){return ve(e)?Pe(t,e):f.IsObject(e)?Oe(t,e):f.IsConstructor(e)?t.parameters.length>e.parameters.length?y.False:t.parameters.every((n,r)=>ut(z(e.parameters[r],n))===y.True)?ut(z(t.returns,e.returns)):y.False:y.False}function pk(t,e){return ve(e)?Pe(t,e):f.IsObject(e)?Oe(t,e):f.IsRecord(e)?pt(t,e):f.IsDate(e)?y.True:y.False}function ck(t,e){return ve(e)?Pe(t,e):f.IsObject(e)?Oe(t,e):f.IsFunction(e)?t.parameters.length>e.parameters.length?y.False:t.parameters.every((n,r)=>ut(z(e.parameters[r],n))===y.True)?ut(z(t.returns,e.returns)):y.False:y.False}function Nc(t,e){return f.IsLiteral(t)&&_e.IsNumber(t.const)||f.IsNumber(t)||f.IsInteger(t)?y.True:y.False}function mk(t,e){return f.IsInteger(e)||f.IsNumber(e)?y.True:ve(e)?Pe(t,e):f.IsObject(e)?Oe(t,e):f.IsRecord(e)?pt(t,e):y.False}function di(t,e){return e.allOf.every(n=>z(t,n)===y.True)?y.True:y.False}function fk(t,e){return t.allOf.some(n=>z(n,e)===y.True)?y.True:y.False}function gk(t,e){return ve(e)?Pe(t,e):f.IsIterator(e)?ut(z(t.items,e.items)):y.False}function hk(t,e){return f.IsLiteral(e)&&e.const===t.const?y.True:ve(e)?Pe(t,e):f.IsObject(e)?Oe(t,e):f.IsRecord(e)?pt(t,e):f.IsString(e)?Bc(t,e):f.IsNumber(e)?Lc(t,e):f.IsInteger(e)?Nc(t,e):f.IsBoolean(e)?Dc(t,e):y.False}function Fc(t,e){return y.False}function yk(t,e){return y.True}function _c(t){let[e,n]=[t,0];for(;f.IsNot(e);)e=e.not,n+=1;return n%2===0?e:rn()}function Sk(t,e){return f.IsNot(t)?z(_c(t),e):f.IsNot(e)?z(t,_c(e)):tr("Invalid fallthrough for Not")}function kk(t,e){return ve(e)?Pe(t,e):f.IsObject(e)?Oe(t,e):f.IsRecord(e)?pt(t,e):f.IsNull(e)?y.True:y.False}function Lc(t,e){return f.IsLiteralNumber(t)||f.IsNumber(t)||f.IsInteger(t)?y.True:y.False}function vk(t,e){return ve(e)?Pe(t,e):f.IsObject(e)?Oe(t,e):f.IsRecord(e)?pt(t,e):f.IsInteger(e)||f.IsNumber(e)?y.True:y.False}function je(t,e){return Object.getOwnPropertyNames(t.properties).length===e}function Ec(t){return li(t)}function $c(t){return je(t,0)||je(t,1)&&"description"in t.properties&&f.IsUnion(t.properties.description)&&t.properties.description.anyOf.length===2&&(f.IsString(t.properties.description.anyOf[0])&&f.IsUndefined(t.properties.description.anyOf[1])||f.IsString(t.properties.description.anyOf[1])&&f.IsUndefined(t.properties.description.anyOf[0]))}function sd(t){return je(t,0)}function Oc(t){return je(t,0)}function Pk(t){return je(t,0)}function wk(t){return je(t,0)}function Ik(t){return li(t)}function bk(t){let e=st();return je(t,0)||je(t,1)&&"length"in t.properties&&ut(z(t.properties.length,e))===y.True}function xk(t){return je(t,0)}function li(t){let e=st();return je(t,0)||je(t,1)&&"length"in t.properties&&ut(z(t.properties.length,e))===y.True}function Ak(t){let e=Mt([Zt()],Zt());return je(t,0)||je(t,1)&&"then"in t.properties&&ut(z(t.properties.then,e))===y.True}function Wc(t,e){return z(t,e)===y.False||f.IsOptional(t)&&!f.IsOptional(e)?y.False:y.True}function Oe(t,e){return f.IsUnknown(t)?y.False:f.IsAny(t)?y.Union:f.IsNever(t)||f.IsLiteralString(t)&&Ec(e)||f.IsLiteralNumber(t)&&sd(e)||f.IsLiteralBoolean(t)&&Oc(e)||f.IsSymbol(t)&&$c(e)||f.IsBigInt(t)&&Pk(e)||f.IsString(t)&&Ec(e)||f.IsSymbol(t)&&$c(e)||f.IsNumber(t)&&sd(e)||f.IsInteger(t)&&sd(e)||f.IsBoolean(t)&&Oc(e)||f.IsUint8Array(t)&&Ik(e)||f.IsDate(t)&&wk(e)||f.IsConstructor(t)&&xk(e)||f.IsFunction(t)&&bk(e)?y.True:f.IsRecord(t)&&f.IsString(dd(t))?e[it]==="Record"?y.True:y.False:f.IsRecord(t)&&f.IsNumber(dd(t))&&je(e,0)?y.True:y.False}function Rk(t,e){return ve(e)?Pe(t,e):f.IsRecord(e)?pt(t,e):f.IsObject(e)?(()=>{for(let n of Object.getOwnPropertyNames(e.properties)){if(!(n in t.properties)&&!f.IsOptional(e.properties[n]))return y.False;if(f.IsOptional(e.properties[n]))return y.True;if(Wc(t.properties[n],e.properties[n])===y.False)return y.False}return y.True})():y.False}function Tk(t,e){return ve(e)?Pe(t,e):f.IsObject(e)&&Ak(e)?y.True:f.IsPromise(e)?ut(z(t.item,e.item)):y.False}function dd(t){return Yt in t.patternProperties?st():Xt in t.patternProperties?bt():tr("Unknown record key pattern")}function ld(t){return Yt in t.patternProperties?t.patternProperties[Yt]:Xt in t.patternProperties?t.patternProperties[Xt]:tr("Unable to get record value schema")}function pt(t,e){let[n,r]=[dd(e),ld(e)];return f.IsLiteralString(t)&&f.IsNumber(n)&&ut(z(t,r))===y.True?y.True:f.IsUint8Array(t)&&f.IsNumber(n)||f.IsString(t)&&f.IsNumber(n)||f.IsArray(t)&&f.IsNumber(n)?z(t,r):f.IsObject(t)?(()=>{for(let o of Object.getOwnPropertyNames(t.properties))if(Wc(r,t.properties[o])===y.False)return y.False;return y.True})():y.False}function Mk(t,e){return ve(e)?Pe(t,e):f.IsObject(e)?Oe(t,e):f.IsRecord(e)?z(ld(t),ld(e)):y.False}function Ck(t,e){let n=f.IsRegExp(t)?bt():t,r=f.IsRegExp(e)?bt():e;return z(n,r)}function Bc(t,e){return f.IsLiteral(t)&&_e.IsString(t.const)||f.IsString(t)?y.True:y.False}function _k(t,e){return ve(e)?Pe(t,e):f.IsObject(e)?Oe(t,e):f.IsRecord(e)?pt(t,e):f.IsString(e)?y.True:y.False}function Ek(t,e){return ve(e)?Pe(t,e):f.IsObject(e)?Oe(t,e):f.IsRecord(e)?pt(t,e):f.IsSymbol(e)?y.True:y.False}function $k(t,e){return f.IsTemplateLiteral(t)?z(An(t),e):f.IsTemplateLiteral(e)?z(t,An(e)):tr("Invalid fallthrough for TemplateLiteral")}function Ok(t,e){return f.IsArray(e)&&t.items!==void 0&&t.items.every(n=>z(n,e.items)===y.True)}function Dk(t,e){return f.IsNever(t)?y.True:f.IsUnknown(t)?y.False:f.IsAny(t)?y.Union:y.False}function Nk(t,e){return ve(e)?Pe(t,e):f.IsObject(e)&&li(e)||f.IsArray(e)&&Ok(t,e)?y.True:f.IsTuple(e)?_e.IsUndefined(t.items)&&!_e.IsUndefined(e.items)||!_e.IsUndefined(t.items)&&_e.IsUndefined(e.items)?y.False:_e.IsUndefined(t.items)&&!_e.IsUndefined(e.items)||t.items.every((n,r)=>z(n,e.items[r])===y.True)?y.True:y.False:y.False}function Fk(t,e){return ve(e)?Pe(t,e):f.IsObject(e)?Oe(t,e):f.IsRecord(e)?pt(t,e):f.IsUint8Array(e)?y.True:y.False}function Lk(t,e){return ve(e)?Pe(t,e):f.IsObject(e)?Oe(t,e):f.IsRecord(e)?pt(t,e):f.IsVoid(e)?Uk(t,e):f.IsUndefined(e)?y.True:y.False}function pd(t,e){return e.anyOf.some(n=>z(t,n)===y.True)?y.True:y.False}function Wk(t,e){return t.anyOf.every(n=>z(n,e)===y.True)?y.True:y.False}function Uc(t,e){return y.True}function Bk(t,e){return f.IsNever(e)?Fc(t,e):f.IsIntersect(e)?di(t,e):f.IsUnion(e)?pd(t,e):f.IsAny(e)?ud(t,e):f.IsString(e)?Bc(t,e):f.IsNumber(e)?Lc(t,e):f.IsInteger(e)?Nc(t,e):f.IsBoolean(e)?Dc(t,e):f.IsArray(e)?ik(t,e):f.IsTuple(e)?Dk(t,e):f.IsObject(e)?Oe(t,e):f.IsUnknown(e)?y.True:y.False}function Uk(t,e){return f.IsUndefined(t)||f.IsUndefined(t)?y.True:y.False}function Kk(t,e){return f.IsIntersect(e)?di(t,e):f.IsUnion(e)?pd(t,e):f.IsUnknown(e)?Uc(t,e):f.IsAny(e)?ud(t,e):f.IsObject(e)?Oe(t,e):f.IsVoid(e)?y.True:y.False}function z(t,e){return f.IsTemplateLiteral(t)||f.IsTemplateLiteral(e)?$k(t,e):f.IsRegExp(t)||f.IsRegExp(e)?Ck(t,e):f.IsNot(t)||f.IsNot(e)?Sk(t,e):f.IsAny(t)?ok(t,e):f.IsArray(t)?sk(t,e):f.IsBigInt(t)?dk(t,e):f.IsBoolean(t)?lk(t,e):f.IsAsyncIterator(t)?ak(t,e):f.IsConstructor(t)?uk(t,e):f.IsDate(t)?pk(t,e):f.IsFunction(t)?ck(t,e):f.IsInteger(t)?mk(t,e):f.IsIntersect(t)?fk(t,e):f.IsIterator(t)?gk(t,e):f.IsLiteral(t)?hk(t,e):f.IsNever(t)?yk(t,e):f.IsNull(t)?kk(t,e):f.IsNumber(t)?vk(t,e):f.IsObject(t)?Rk(t,e):f.IsRecord(t)?Mk(t,e):f.IsString(t)?_k(t,e):f.IsSymbol(t)?Ek(t,e):f.IsTuple(t)?Nk(t,e):f.IsPromise(t)?Tk(t,e):f.IsUint8Array(t)?Fk(t,e):f.IsUndefined(t)?Lk(t,e):f.IsUnion(t)?Wk(t,e):f.IsUnknown(t)?Bk(t,e):f.IsVoid(t)?Kk(t,e):tr(`Unknown left type operand '${t[w]}'`)}function on(t,e){return z(t,e)}var ad,y,cd=p(()=>{Wr();In();xn();Jn();er();jt();Fr();M();Tt();Ra();ad=class extends Ie{};(function(t){t[t.Union=0]="Union",t[t.True=1]="True",t[t.False=2]="False"})(y||(y={}))});function Vk(t,e,n,r,o){let i={};for(let s of globalThis.Object.getOwnPropertyNames(t))i[s]=nr(t[s],e,n,r,ee(o));return i}function qk(t,e,n,r,o){return Vk(t.properties,e,n,r,o)}function Kc(t,e,n,r,o){let i=qk(t,e,n,r,o);return U(i)}var md=p(()=>{we();ui();Be()});function jk(t,e,n,r){let o=on(t,e);return o===y.Union?V([n,r]):o===y.True?n:r}function nr(t,e,n,r,o){return te(t)?Kc(t,e,n,r,o):Je(t)?h(Vc(t,e,n,r,o)):h(jk(t,e,n,r),o)}var ui=p(()=>{R();ke();cd();fd();md();B()});function Gk(t,e,n,r,o){return{[t]:nr(K(t),e,n,r,ee(o))}}function Hk(t,e,n,r,o){return t.reduce((i,s)=>({...i,...Gk(s,e,n,r,o)}),{})}function zk(t,e,n,r,o){return Hk(t.keys,e,n,r,o)}function Vc(t,e,n,r,o){let i=zk(t,e,n,r,o);return U(i)}var fd=p(()=>{we();Ke();ui();Be()});var qc=p(()=>{});var Xr=p(()=>{cd();fd();md();qc();ui()});function jc(t,e){return rr(An(t),e)}var gd=p(()=>{pi();jt()});function Qk(t,e){let n=t.filter(r=>on(r,e)===y.False);return n.length===1?n[0]:V(n)}function rr(t,e,n={}){return Ye(t)?h(jc(t,e),n):te(t)?h(Gc(t,e),n):h(F(t)?Qk(t.anyOf,e):on(t,e)!==y.False?L():t,n)}var pi=p(()=>{R();ke();Re();Xr();hd();gd();B()});function Jk(t,e){let n={};for(let r of globalThis.Object.getOwnPropertyNames(t))n[r]=rr(t[r],e);return n}function Yk(t,e){return Jk(t.properties,e)}function Gc(t,e){let n=Yk(t,e);return U(n)}var hd=p(()=>{we();pi()});var yd=p(()=>{hd();gd();pi()});function Hc(t,e){return or(An(t),e)}var Sd=p(()=>{ci();jt()});function Xk(t,e){let n=t.filter(r=>on(r,e)!==y.False);return n.length===1?n[0]:V(n)}function or(t,e,n){return Ye(t)?h(Hc(t,e),n):te(t)?h(zc(t,e),n):h(F(t)?Xk(t.anyOf,e):on(t,e)!==y.False?t:L(),n)}var ci=p(()=>{R();ke();Re();Xr();kd();Sd();B()});function Zk(t,e){let n={};for(let r of globalThis.Object.getOwnPropertyNames(t))n[r]=or(t[r],e);return n}function ev(t,e){return Zk(t.properties,e)}function zc(t,e){let n=ev(t,e);return U(n)}var kd=p(()=>{we();ci()});var vd=p(()=>{kd();Sd();ci()});function Qc(t,e){return vt(t)?h(t.returns,e):L(e)}var Jc=p(()=>{R();Re();B()});var Pd=p(()=>{Jc()});function mi(t){return qe(Ee(t))}var Yc=p(()=>{Rn();Vt()});var fi=p(()=>{Yc()});function Mn(t,e,n){return h({[w]:"Record",type:"object",patternProperties:{[t]:e}},n)}function wd(t,e,n){let r={};for(let o of t)r[o]=e;return H(r,{...n,[it]:"Record"})}function tv(t,e,n){return Np(t)?wd(Ve(t),e,n):Mn(t.pattern,e,n)}function nv(t,e,n){return wd(Ve(V(t)),e,n)}function rv(t,e,n){return wd([t.toString()],e,n)}function ov(t,e,n){return Mn(t.source,e,n)}function iv(t,e,n){let r=me(t.pattern)?Xt:t.pattern;return Mn(r,e,n)}function sv(t,e,n){return Mn(Xt,e,n)}function av(t,e,n){return Mn(pp,e,n)}function dv(t,e,n){return H({true:e,false:e},n)}function lv(t,e,n){return Mn(Yt,e,n)}function uv(t,e,n){return Mn(Yt,e,n)}function gi(t,e,n={}){return F(t)?nv(t.anyOf,e,n):Ye(t)?tv(t,e,n):Qe(t)?rv(t.const,e,n):Wt(t)?dv(t,e,n):wt(t)?lv(t,e,n):It(t)?uv(t,e,n):wa(t)?ov(t,e,n):Bt(t)?iv(t,e,n):va(t)?sv(t,e,n):Qt(t)?av(t,e,n):L(n)}function hi(t){return globalThis.Object.getOwnPropertyNames(t.patternProperties)[0]}function Xc(t){let e=hi(t);return e===Xt?bt():e===Yt?st():bt({pattern:e})}function yi(t){return t.patternProperties[hi(t)]}var Zc=p(()=>{R();M();Re();xn();et();Jn();ke();jt();Fr();_t();Fe();B()});var Zr=p(()=>{Zc()});function pv(t,e){return e.parameters=eo(t,e.parameters),e.returns=xt(t,e.returns),e}function cv(t,e){return e.parameters=eo(t,e.parameters),e.returns=xt(t,e.returns),e}function mv(t,e){return e.allOf=eo(t,e.allOf),e}function fv(t,e){return e.anyOf=eo(t,e.anyOf),e}function gv(t,e){return me(e.items)||(e.items=eo(t,e.items)),e}function hv(t,e){return e.items=xt(t,e.items),e}function yv(t,e){return e.items=xt(t,e.items),e}function Sv(t,e){return e.items=xt(t,e.items),e}function kv(t,e){return e.item=xt(t,e.item),e}function vv(t,e){let n=bv(t,e.properties);return{...e,...H(n)}}function Pv(t,e){let n=xt(t,Xc(e)),r=xt(t,yi(e)),o=gi(n,r);return{...e,...o}}function wv(t,e){return e.index in t?t[e.index]:rn()}function Iv(t,e){let n=Vn(e),r=Ue(e),o=xt(t,e);return n&&r?mi(o):n&&!r?qe(o):!n&&r?Ee(o):o}function bv(t,e){return globalThis.Object.getOwnPropertyNames(e).reduce((n,r)=>({...n,[r]:Iv(t,e[r])}),{})}function eo(t,e){return e.map(n=>xt(t,n))}function xt(t,e){return vt(e)?pv(t,e):Pt(e)?cv(t,e):oe(e)?mv(t,e):F(e)?fv(t,e):Xe(e)?gv(t,e):St(e)?hv(t,e):Sn(e)?yv(t,e):vn(e)?Sv(t,e):Pn(e)?kv(t,e):fe(e)?vv(t,e):wn(e)?Pv(t,e):Pa(e)?wv(t,e):e}function em(t,e){return xt(e,Kn(t))}var tm=p(()=>{Do();er();fi();Rn();Vt();et();Zr();Fe();B()});var Id=p(()=>{tm()});function nm(t){return h({[w]:"Integer",type:"integer"},t)}var rm=p(()=>{R();M()});var bd=p(()=>{rm()});function xv(t,e,n){return{[t]:At(K(t),e,ee(n))}}function Av(t,e,n){return t.reduce((o,i)=>({...o,...xv(i,e,n)}),{})}function Rv(t,e,n){return Av(t.keys,e,n)}function om(t,e,n){let r=Rv(t,e,n);return U(r)}var xd=p(()=>{we();Cn();Ke();Be()});function Tv(t){let[e,n]=[t.slice(0,1),t.slice(1)];return[e.toLowerCase(),n].join("")}function Mv(t){let[e,n]=[t.slice(0,1),t.slice(1)];return[e.toUpperCase(),n].join("")}function Cv(t){return t.toUpperCase()}function _v(t){return t.toLowerCase()}function Ev(t,e,n){let r=zn(t.pattern);if(!bn(r))return{...t,pattern:im(t.pattern,e)};let s=[...jr(r)].map(l=>K(l)),a=sm(s,e),d=V(a);return jo([d],n)}function im(t,e){return typeof t=="string"?e==="Uncapitalize"?Tv(t):e==="Capitalize"?Mv(t):e==="Uppercase"?Cv(t):e==="Lowercase"?_v(t):t:t.toString()}function sm(t,e){return t.map(n=>At(n,e))}function At(t,e,n={}){return Je(t)?om(t,e,n):Ye(t)?Ev(t,e,n):F(t)?V(sm(t.anyOf,e),n):Qe(t)?K(im(t.const,e),n):h(t,n)}var Cn=p(()=>{R();jt();xd();Ke();ke();B()});function am(t,e={}){return At(t,"Capitalize",e)}var dm=p(()=>{Cn()});function lm(t,e={}){return At(t,"Lowercase",e)}var um=p(()=>{Cn()});function pm(t,e={}){return At(t,"Uncapitalize",e)}var cm=p(()=>{Cn()});function mm(t,e={}){return At(t,"Uppercase",e)}var fm=p(()=>{Cn()});var Ad=p(()=>{dm();xd();Cn();um();cm();fm()});function $v(t,e,n){let r={};for(let o of globalThis.Object.getOwnPropertyNames(t))r[o]=sn(t[o],e,ee(n));return r}function Ov(t,e,n){return $v(t.properties,e,n)}function gm(t,e,n){let r=Ov(t,e,n);return U(r)}var Rd=p(()=>{we();Si();Be()});function Dv(t,e){return t.map(n=>Td(n,e))}function Nv(t,e){return t.map(n=>Td(n,e))}function Fv(t,e){let{[e]:n,...r}=t;return r}function Lv(t,e){return e.reduce((n,r)=>Fv(n,r),t)}function Wv(t,e,n){let r=ie(t,[Se,"$id","required","properties"]),o=Lv(n,e);return H(o,r)}function Bv(t){let e=t.reduce((n,r)=>Fo(r)?[...n,K(r)]:n,[]);return V(e)}function Td(t,e){return oe(t)?$e(Dv(t.allOf,e)):F(t)?V(Nv(t.anyOf,e)):fe(t)?Wv(t,e,t.properties):H({})}function sn(t,e,n){let r=ce(e)?Bv(e):e,o=Ze(e)?Ve(e):e,i=de(t),s=de(e);return te(t)?gm(t,o,n):Je(e)?hm(t,e,n):i&&s?Z("Omit",[t,r],n):!i&&s?Z("Omit",[t,r],n):i&&!s?Z("Omit",[t,r],n):h({...Td(t,o),...n})}var Si=p(()=>{R();Wo();Cr();en();Ke();_t();at();ke();et();Md();Rd();B();Fe()});function Uv(t,e,n){return{[e]:sn(t,[e],ee(n))}}function Kv(t,e,n){return e.reduce((r,o)=>({...r,...Uv(t,o,n)}),{})}function Vv(t,e,n){return Kv(t,e.keys,n)}function hm(t,e,n){let r=Vv(t,e,n);return U(r)}var Md=p(()=>{we();Si();Be()});var ki=p(()=>{Md();Rd();Si()});function qv(t,e,n){let r={};for(let o of globalThis.Object.getOwnPropertyNames(t))r[o]=an(t[o],e,ee(n));return r}function jv(t,e,n){return qv(t.properties,e,n)}function ym(t,e,n){let r=jv(t,e,n);return U(r)}var Cd=p(()=>{we();vi();Be()});function Gv(t,e){return t.map(n=>_d(n,e))}function Hv(t,e){return t.map(n=>_d(n,e))}function zv(t,e){let n={};for(let r of e)r in t&&(n[r]=t[r]);return n}function Qv(t,e,n){let r=ie(t,[Se,"$id","required","properties"]),o=zv(n,e);return H(o,r)}function Jv(t){let e=t.reduce((n,r)=>Fo(r)?[...n,K(r)]:n,[]);return V(e)}function _d(t,e){return oe(t)?$e(Gv(t.allOf,e)):F(t)?V(Hv(t.anyOf,e)):fe(t)?Qv(t,e,t.properties):H({})}function an(t,e,n){let r=ce(e)?Jv(e):e,o=Ze(e)?Ve(e):e,i=de(t),s=de(e);return te(t)?ym(t,o,n):Je(e)?Sm(t,e,n):i&&s?Z("Pick",[t,r],n):!i&&s?Z("Pick",[t,r],n):i&&!s?Z("Pick",[t,r],n):h({..._d(t,o),...n})}var vi=p(()=>{R();Wo();en();at();Ke();et();ke();_t();Cr();B();Fe();Ed();Cd()});function Yv(t,e,n){return{[e]:an(t,[e],ee(n))}}function Xv(t,e,n){return e.reduce((r,o)=>({...r,...Yv(t,o,n)}),{})}function Zv(t,e,n){return Xv(t,e.keys,n)}function Sm(t,e,n){let r=Zv(t,e,n);return U(r)}var Ed=p(()=>{we();vi();Be()});var Pi=p(()=>{Ed();Cd();vi()});function eP(t,e){return Z("Partial",[Z(t,e)])}function tP(t){return Z("Partial",[Et(t)])}function nP(t){let e={};for(let n of globalThis.Object.getOwnPropertyNames(t))e[n]=Ee(t[n]);return e}function rP(t,e){let n=ie(t,[Se,"$id","required","properties"]),r=nP(e);return H(r,n)}function km(t){return t.map(e=>vm(e))}function vm(t){return kt(t)?eP(t.target,t.parameters):de(t)?tP(t.$ref):oe(t)?$e(km(t.allOf)):F(t)?V(km(t.anyOf)):fe(t)?rP(t,t.properties):kn(t)||Wt(t)||wt(t)||Qe(t)||_r(t)||It(t)||Bt(t)||Er(t)||$r(t)?t:H({})}function ir(t,e){return te(t)?Pm(t,e):h({...vm(t),...e})}var $d=p(()=>{R();en();Vt();et();at();ke();Tn();Kt();M();Od();B()});function oP(t,e){let n={};for(let r of globalThis.Object.getOwnPropertyNames(t))n[r]=ir(t[r],ee(e));return n}function iP(t,e){return oP(t.properties,e)}function Pm(t,e){let n=iP(t,e);return U(n)}var Od=p(()=>{we();$d();Be()});var wi=p(()=>{Od();$d()});function sP(t,e){return Z("Required",[Z(t,e)])}function aP(t){return Z("Required",[Et(t)])}function dP(t){let e={};for(let n of globalThis.Object.getOwnPropertyNames(t))e[n]=ie(t[n],[Ae]);return e}function lP(t,e){let n=ie(t,[Se,"$id","required","properties"]),r=dP(e);return H(r,n)}function wm(t){return t.map(e=>Im(e))}function Im(t){return kt(t)?sP(t.target,t.parameters):de(t)?aP(t.$ref):oe(t)?$e(wm(t.allOf)):F(t)?V(wm(t.anyOf)):fe(t)?lP(t,t.properties):kn(t)||Wt(t)||wt(t)||Qe(t)||_r(t)||It(t)||Bt(t)||Er(t)||$r(t)?t:H({})}function sr(t,e){return te(t)?bm(t,e):h({...Im(t),...e})}var Dd=p(()=>{R();en();et();at();ke();Tn();M();Kt();Nd();B()});function uP(t,e){let n={};for(let r of globalThis.Object.getOwnPropertyNames(t))n[r]=sr(t[r],e);return n}function pP(t,e){return uP(t.properties,e)}function bm(t,e){let n=pP(t,e);return U(n)}var Nd=p(()=>{we();Dd()});var Ii=p(()=>{Nd();Dd()});function cP(t,e){return e.map(n=>de(n)?Fd(t,n.$ref):tt(t,n))}function Fd(t,e){return e in t?de(t[e])?Fd(t,t[e].$ref):tt(t,t[e]):L()}function mP(t){return Xn(t[0])}function fP(t){return tn(t[0],t[1])}function gP(t){return Zn(t[0])}function hP(t){return ir(t[0])}function yP(t){return sn(t[0],t[1])}function SP(t){return an(t[0],t[1])}function kP(t){return sr(t[0])}function vP(t,e,n){let r=cP(t,n);return e==="Awaited"?mP(r):e==="Index"?fP(r):e==="KeyOf"?gP(r):e==="Partial"?hP(r):e==="Omit"?yP(r):e==="Pick"?SP(r):e==="Required"?kP(r):L()}function PP(t,e){return qn(tt(t,e))}function wP(t,e){return jn(tt(t,e))}function IP(t,e,n){return Gn(to(t,e),tt(t,n))}function bP(t,e,n){return Mt(to(t,e),tt(t,n))}function xP(t,e){return $e(to(t,e))}function AP(t,e){return Yn(tt(t,e))}function RP(t,e){return H(globalThis.Object.keys(e).reduce((n,r)=>({...n,[r]:tt(t,e[r])}),{}))}function TP(t,e){let[n,r]=[tt(t,yi(e)),hi(e)],o=Kn(e);return o.patternProperties[r]=n,o}function MP(t,e){return de(e)?{...Fd(t,e.$ref),[Se]:e[Se]}:e}function CP(t,e){return dt(to(t,e))}function _P(t,e){return V(to(t,e))}function to(t,e){return e.map(n=>tt(t,n))}function tt(t,e){return Ue(e)?h(tt(t,ie(e,[Ae])),e):Vn(e)?h(tt(t,ie(e,[yt])),e):Jt(e)?h(MP(t,e),e):St(e)?h(PP(t,e.items),e):Sn(e)?h(wP(t,e.items),e):kt(e)?h(vP(t,e.target,e.parameters)):vt(e)?h(IP(t,e.parameters,e.returns),e):Pt(e)?h(bP(t,e.parameters,e.returns),e):oe(e)?h(xP(t,e.allOf),e):vn(e)?h(AP(t,e.items),e):fe(e)?h(RP(t,e.properties),e):wn(e)?h(TP(t,e)):Xe(e)?h(CP(t,e.items||[]),e):F(e)?h(_P(t,e.anyOf),e):e}function EP(t,e){return e in t?tt(t,t[e]):L()}function xm(t){return globalThis.Object.getOwnPropertyNames(t).reduce((e,n)=>({...e,[n]:EP(t,n)}),{})}var Am=p(()=>{Lt();ka();Kt();Br();Jo();Ur();Kr();_t();In();at();Hr();Yr();et();ki();Pi();Re();wi();Zr();Ii();nn();ke();M();B()});function Rm(t){return new Ld(t)}var Ld,Tm=p(()=>{Lt();M();Am();Ld=class{constructor(e){let n=xm(e),r=this.WithIdentifiers(n);this.$defs=r}Import(e,n){let r={...this.$defs,[e]:h(this.$defs[e],n)};return h({[w]:"Import",$defs:r,$ref:e})}WithIdentifiers(e){return globalThis.Object.getOwnPropertyNames(e).reduce((n,r)=>({...n,[r]:{...e[r],$id:r}}),{})}}});var Wd=p(()=>{Tm()});function Mm(t,e){return h({[w]:"Not",not:t},e)}var Cm=p(()=>{R();M()});var Bd=p(()=>{Cm()});function _m(t,e){return Pt(t)?dt(t.parameters,e):L()}var Em=p(()=>{nn();Re();B()});var Ud=p(()=>{Em()});function $m(t,e={}){me(e.$id)&&(e.$id=`T${$P++}`);let n=Kn(t({[w]:"This",$ref:`${e.$id}`}));return n.$id=e.$id,h({[it]:"Recursive",...n},e)}var $P,Om=p(()=>{Do();R();Fe();M();$P=0});var Kd=p(()=>{Om()});function Dm(t,e){let n=Q(t)?new globalThis.RegExp(t):t;return h({[w]:"RegExp",type:"RegExp",source:n.source,flags:n.flags},e)}var Nm=p(()=>{R();Fe();M()});var Vd=p(()=>{Nm()});function OP(t){return oe(t)?t.allOf:F(t)?t.anyOf:Xe(t)?t.items??[]:[]}function Fm(t){return OP(t)}var Lm=p(()=>{B()});var qd=p(()=>{Lm()});function Wm(t,e){return Pt(t)?h(t.returns,e):L(e)}var Bm=p(()=>{R();Re();B()});var jd=p(()=>{Bm()});var Um=p(()=>{});var Km=p(()=>{});var Vm=p(()=>{Um();Km()});var qm=p(()=>{});var jm=p(()=>{qm()});function Gm(t){return new Gd(t)}var Gd,Hd,Hm=p(()=>{M();B();Gd=class{constructor(e){this.schema=e}Decode(e){return new Hd(this.schema,e)}},Hd=class{constructor(e,n){this.schema=e,this.decode=n}EncodeTransform(e,n){let i={Encode:s=>n[Se].Encode(e(s)),Decode:s=>this.decode(n[Se].Decode(s))};return{...n,[Se]:i}}EncodeSchema(e,n){let r={Decode:this.decode,Encode:e};return{...n,[Se]:r}}Encode(e){return Jt(this.schema)?this.EncodeTransform(e,this.schema):this.EncodeSchema(e,this.schema)}}});var zd=p(()=>{Hm()});function zm(t={}){return h({[w]:t[w]??"Unsafe"},t)}var Qm=p(()=>{R();M()});var Qd=p(()=>{Qm()});function Jm(t){return h({[w]:"Void",type:"void"},t)}var Ym=p(()=>{R();M()});var Jd=p(()=>{Ym()});var Yd={};Eo(Yd,{Any:()=>Zt,Argument:()=>Ip,Array:()=>qn,AsyncIterator:()=>jn,Awaited:()=>Xn,BigInt:()=>Qn,Boolean:()=>Vo,Capitalize:()=>am,Composite:()=>yc,Const:()=>xc,Constructor:()=>Gn,ConstructorParameters:()=>Rc,Date:()=>Yo,Enum:()=>Mc,Exclude:()=>rr,Extends:()=>nr,Extract:()=>or,Function:()=>Mt,Index:()=>tn,InstanceType:()=>Qc,Instantiate:()=>em,Integer:()=>nm,Intersect:()=>$e,Iterator:()=>Yn,KeyOf:()=>Zn,Literal:()=>K,Lowercase:()=>lm,Mapped:()=>oc,Module:()=>Rm,Never:()=>L,Not:()=>Mm,Null:()=>Zo,Number:()=>st,Object:()=>H,Omit:()=>sn,Optional:()=>Ee,Parameters:()=>_m,Partial:()=>ir,Pick:()=>an,Promise:()=>zo,Readonly:()=>qe,ReadonlyOptional:()=>mi,Record:()=>gi,Recursive:()=>$m,Ref:()=>Et,RegExp:()=>Dm,Required:()=>sr,Rest:()=>Fm,ReturnType:()=>Wm,String:()=>bt,Symbol:()=>ti,TemplateLiteral:()=>jo,Transform:()=>Gm,Tuple:()=>dt,Uint8Array:()=>ii,Uncapitalize:()=>pm,Undefined:()=>ri,Union:()=>V,Unknown:()=>rn,Unsafe:()=>zm,Uppercase:()=>mm,Void:()=>Jm});var Xm=p(()=>{Wr();Ca();Br();Ur();Jo();Gr();qo();td();rd();Kr();od();Xo();id();yd();Xr();vd();In();_t();Pd();Id();bd();at();Ad();Hr();Yr();Ke();we();Wd();Re();Bd();ei();xn();et();ki();Vt();Ud();wi();Pi();Qo();Rn();fi();Zr();Kd();Tn();Vd();Ii();qd();jd();Jn();ni();jt();zd();nn();si();oi();ke();er();Qd();Jd()});var m,Zm=p(()=>{Xm();m=Yd});var De=p(()=>{ka();Lt();Tt();Ra();up();Fr();gp();Lr();M();Wr();Br();Ca();Ur();Jo();Gr();qo();td();rd();Kr();od();Xo();id();yd();Xr();vd();In();_t();Pd();Id();bd();at();Hr();Ad();Yr();Ke();Wd();we();Re();Bd();ei();xn();et();ki();Vt();Ud();wi();Pi();Qo();Rn();fi();Zr();Kd();Tn();Vd();Ii();qd();jd();Vm();jm();Jn();ni();jt();zd();nn();si();oi();ke();er();Qd();Jd();Zm()});function Xd(t){v=t}function Zd(t){ge=t}var v,ge,Y=p(()=>{v=null,ge=null});function ef(t){let e=t.chatId.trim(),n=t.topicId.trim();return!/^-?\d+$/.test(e)||!/^\d+$/.test(n)?null:`${e}:topic:${n}`}function WP(t){let e=t.conversationId.trim(),n=e.match(/^(-?\d+):topic:(\d+)$/i);if(n?.[1]&&n[2]){let i=ef({chatId:n[1],topicId:n[2]});return i?{chatId:n[1],topicId:n[2],canonicalConversationId:i}:null}if(!/^\d+$/.test(e))return null;let r=t.parentConversationId?.trim();if(!r||!/^-?\d+$/.test(r))return null;let o=ef({chatId:r,topicId:e});return o?{chatId:r,topicId:e,canonicalConversationId:o}:null}function BP(t){if(!t)return;let e=t.match(/^agent:[^:]+:discord:(direct|dm|channel|group):/i);if(!e?.[1])return;let n=e[1].toLowerCase();return n==="direct"||n==="dm"?"user":"channel"}function UP(t,e){if(!/^\d+$/.test(t))return t;let n=BP(e);return n?`${n}:${t}`:`channel:${t}`}function KP(t){if(!(!t?.provider||!t.target)&&!(t.provider==="system"||t.target==="system"))return t.accountId?`${t.provider}|${t.accountId}|${t.target}`:`${t.provider}|${t.target}`}function VP(t){let e=t.toLowerCase(),n=[":thread:",":topic:"];for(let r of n){let o=e.lastIndexOf(r);if(o===-1)continue;let i=t.slice(0,o).trim(),s=t.slice(o+r.length).trim()||void 0;return{id:i||t,threadId:s}}return{id:t}}function qP(t){let e=t?.trim();if(!e)return;let n=e.split(":").filter(Boolean);if(n[0]?.trim().toLowerCase()==="agent")for(let r=2;r<=n.length-3;r+=1){let o=n[r]?.trim().toLowerCase();if(!o||!LP.has(o))continue;let i=n[r+1]?.trim().toLowerCase(),s=n.slice(r+2).join(":").trim();if(!(!i||!s))return{provider:o,kind:i,rawId:s}}}function jP(t,e=WP){try{return e({conversationId:t})}catch{return null}}function el(t){return{provider:"system",target:"system",sessionKey:t?.trim()||void 0}}function tl(t,e){return{...t,threadId:e??t.threadId}}function HP(t,e,n){return t==="telegram"&&n?.provider==="telegram"&&!!n.target&&e!==n.target}function zP(t){let e=t?.trim();if(!e)return;let n=qP(e);if(!n)return;let{provider:r,kind:o,rawId:i}=n,s=VP(i),a=null;if(r==="telegram")try{a=GP.safeParseTelegramTopicConversation(i)}catch{a=null}let d=a?.chatId??s.id,l=a?.topicId??s.threadId,u=r==="discord"?o==="direct"||o==="dm"?`user:${d}`:`channel:${d}`:d;return{provider:r,target:u,threadId:l,sessionKey:e}}function nl(t){let e=t?.match(/:topic:(\d+)$/);return e?parseInt(e[1],10):void 0}function tf(t){return!!(t?.provider&&t.target&&t.provider!=="system"&&t.target!=="system")}function no(t,e,n){let r=zP(n),o=e!=null?String(e):void 0,i=t?.trim();if(!i||i.toLowerCase()==="unknown")return r?tl(r,o):el(n);let s=i.split("|").map(k=>k.trim());if(s.length<2)return r?tl(r,o):el(n);let[a,d,l]=s,u=s.length>=3?l:d,c=s.length>=3?d:void 0,g=a?.toLowerCase();if(!g||!u)return r?tl(r,o):el(n);let S=g==="discord"?UP(u,n):u;return HP(g,S,r)?{provider:g,accountId:c,target:r.target,threadId:o??r.threadId,sessionKey:n?.trim()||void 0}:{provider:g,accountId:c,target:S,threadId:o??(r?.provider===g?r.threadId:void 0),sessionKey:n?.trim()||void 0}}function _n(t){return no(KP(t.route)??t.originChannel,t.route?.threadId??t.originThreadId,t.route?.sessionKey??t.originSessionKey)??t.route}function xi(t){let e=_n(t);return tf(e)?e:void 0}function QP(t){return Object.fromEntries(Object.entries(t).filter(e=>!!e[1]))}function Ai(t){let e=_n(t);if(!tf(e))return"";let n=QP({provider:e?.provider,accountId:e?.accountId,target:e?.target,threadId:e?.threadId??(t.originThreadId!=null?String(t.originThreadId):void 0),sessionKey:e?.sessionKey??t.originSessionKey});return Object.keys(n).length===0?"":["Session origin route (authoritative for human follow-ups):",`originRoute: ${JSON.stringify(n)}`,"Routing rule: Send any human follow-up for this wake to originRoute. If originRoute differs from the current chat, do not use a plain final assistant reply; use a routed send path that preserves provider/target/threadId."].join(`
2
- `)}var LP,GP,Gt=p(()=>{LP=new Set(["telegram","discord","slack","system","mattermost","feishu","line","whatsapp","signal","matrix","googlechat","bluebubbles","imessage","msteams"]);GP={safeParseTelegramTopicConversation:jP}});import{readFileSync as JP}from"fs";import{homedir as YP}from"os";import{join as XP}from"path";function rf(){if(ro!==void 0)return ro;try{let t=JP(XP(YP(),".claude.json"),"utf-8");ro=JSON.parse(t).mcpServers??{}}catch{ro={}}return ro}function of(t){let e=t.defaultHarness??nf,n={};for(let[r,o]of Object.entries(Ri))n[r]={...o,allowedModels:o.allowedModels?[...o.allowedModels]:void 0};for(let[r,o]of Object.entries(t.harnesses??{})){let i=n[r]??{},s={...i,defaultModel:o.defaultModel??i.defaultModel,reasoningEffort:o.reasoningEffort??i.reasoningEffort,fastMode:o.fastMode??i.fastMode};o.allowedModels!==void 0?s.allowedModels=o.allowedModels?[...o.allowedModels]:o.allowedModels:o.defaultModel!==void 0&&(s.allowedModels=void 0),n[r]=s}if(t.defaultModel!==void 0){let r=n[e]??{};n[e]={...r,defaultModel:t.harnesses?.[e]?.defaultModel??t.defaultModel,allowedModels:t.harnesses?.[e]?.allowedModels!==void 0?r.allowedModels:t.allowedModels},console.warn(`[openclaw-code-agent] config.defaultModel is deprecated; use harnesses.${e}.defaultModel instead.`)}if(t.model!==void 0){let r=n.codex??{};n.codex={...r,defaultModel:t.harnesses?.codex?.defaultModel??t.model,allowedModels:t.harnesses?.codex?.allowedModels!==void 0?r.allowedModels:t.allowedModels},console.warn("[openclaw-code-agent] config.model is deprecated; use harnesses.codex.defaultModel instead.")}if(t.reasoningEffort!==void 0){let r=n.codex??{};n.codex={...r,reasoningEffort:t.harnesses?.codex?.reasoningEffort??t.reasoningEffort},console.warn("[openclaw-code-agent] config.reasoningEffort is deprecated; use harnesses.codex.reasoningEffort instead.")}if(t.allowedModels!==void 0){console.warn("[openclaw-code-agent] config.allowedModels is deprecated; use harnesses.<name>.allowedModels instead.");for(let[r,o]of Object.entries(n))t.harnesses?.[r]?.allowedModels===void 0&&(n[r]={...o,allowedModels:void 0})}E={maxSessions:t.maxSessions??20,defaultWorkdir:t.defaultWorkdir,idleTimeoutMinutes:t.idleTimeoutMinutes??15,sessionGcAgeMinutes:t.sessionGcAgeMinutes??1440,maxPersistedSessions:t.maxPersistedSessions??1e4,fallbackChannel:t.fallbackChannel,agentChannels:t.agentChannels,maxAutoResponds:t.maxAutoResponds??10,permissionMode:t.permissionMode??"plan",planApproval:t.planApproval??"delegate",defaultHarness:e,harnesses:n,allowedModels:t.allowedModels,defaultWorktreeStrategy:t.defaultWorktreeStrategy??"delegate",worktreeDir:t.worktreeDir}}function Le(){return E.defaultHarness??nf}function il(t){let e=Ri[t],n=E.harnesses[t];return{...e,...n,allowedModels:n?.allowedModels??e?.allowedModels}}function ar(t){return il(t).defaultModel}function Ti(t){return E.harnesses[t]?.allowedModels??E.allowedModels}function dn(t){return il(t).reasoningEffort}function dr(t){return t==="codex"?il(t).fastMode:void 0}function $t(t){return t==null?void 0:String(t).trim()||void 0}function sl(t){return{channel:$t(t?.deliveryContext?.channel),to:$t(t?.deliveryContext?.to),accountId:$t(t?.deliveryContext?.accountId),threadId:$t(t?.deliveryContext?.threadId)}}function sf(t,e,n){if(!(!t||!e))return n?`${t}|${n}|${e}`:`${t}|${e}`}function rl(t){return $t(t?.requesterSenderId??t?.senderId)}function ol(t){return($t(t.deliveryContext?.channel)??t.messageChannel??t.channel)?.toLowerCase()!=="telegram"?!1:!!nl(t.sessionKey)}function Mi(t){let e=sl(t),n=sf(e.channel,e.to,e.accountId);if(n)return n;if(t.messageChannel){let r=t.messageChannel.split("|");if(r.length>=3)return t.messageChannel;if(t.agentAccountId&&r.length>=2)return`${r[0]}|${t.agentAccountId}|${r.slice(1).join("|")}`;let o=$t(t.chatId);if(r.length===1&&o)return`${r[0]}|${o}`;let i=rl(t);if(r.length===1&&i&&!ol(t))return`${r[0]}|${i}`}if(t.workspaceDir){let r=io(t.workspaceDir);if(r)return r}if(t.messageChannel&&t.messageChannel.includes("|"))return t.messageChannel}function oo(t,e){if(e&&String(e).includes("|"))return String(e);let n=sl(t),r=sf(n.channel,n.to,n.accountId);if(r)return r;if(t?.channelId&&String(t.channelId).includes("|"))return String(t.channelId);if(t?.messageChannel){let a=String(t.messageChannel);if(a.includes("|"))return a;let d=$t(t.chatId);if(d)return`${a}|${d}`;let l=rl(t);if(l&&!ol(t))return`${a}|${l}`}let o=$t(t?.channel),i=$t(t?.chatId);if(o&&i)return`${o}|${i}`;let s=rl(t);return o&&s&&!ol(t)?`${o}|${s}`:t?.id&&/^-?\d+$/.test(String(t.id))?`telegram|${t.id}`:E.fallbackChannel??"unknown"}function al(t){return sl(t).threadId??t?.messageThreadId??void 0}function lr(t,e,n){return no(oo(t,e),al(t),n??t?.sessionKey)}function io(t){let e=E.agentChannels;if(!e)return;let n=i=>i.replace(/\/+$/,""),r=n(t),o=Object.entries(e).sort((i,s)=>s[0].length-i[0].length);for(let[i,s]of o)if(r===n(i)||r.startsWith(n(i)+"/"))return s}function af(t){return nl(t)}var ro,nf,Ri,E,Te=p(()=>{Gt();nf="claude-code",Ri={"claude-code":{defaultModel:"anthropic/claude-sonnet-4-7",allowedModels:["sonnet","opus"]},codex:{defaultModel:"gpt-5.5",allowedModels:["gpt-5.5","gpt-5.5-pro"],reasoningEffort:"medium"}};E={maxSessions:20,idleTimeoutMinutes:15,sessionGcAgeMinutes:1440,maxPersistedSessions:1e4,maxAutoResponds:10,permissionMode:"plan",planApproval:"delegate",defaultWorktreeStrategy:"delegate",harnesses:{"claude-code":{...Ri["claude-code"]},codex:{...Ri.codex}}}});function Ci(t){return{type:"backend_ref",ref:t}}function _i(t){return{type:"run_started",...t?{runId:t}:{}}}function so(t){return{type:"text_delta",text:t}}function df(t,e){return{type:"tool_call",name:t,input:e}}function Ei(t){return{type:"pending_input",state:t}}function cr(t){return t?{type:"pending_input_resolved",requestId:t}:{type:"pending_input_resolved"}}function $i(t,e){return{type:"plan_artifact",artifact:t,finalized:e}}function Oi(t){return t?{type:"settings_changed",permissionMode:t}:{type:"settings_changed"}}function En(t){return{type:"run_completed",data:t}}var pr,dl=p(()=>{pr=class{queue=[];resolvePending=null;done=!1;enqueue(e){this.queue.push(e),this.flush()}close(){this.done=!0,this.flush()}flush(){this.resolvePending&&(this.resolvePending(),this.resolvePending=null)}messages(){let e=this;return(async function*(){for(;;){for(;e.queue.length>0;)yield e.queue.shift();if(e.done)return;await new Promise(n=>{e.resolvePending=n})}})()}}});import*as Ni from"@anthropic-ai/claude-agent-sdk";function ZP(t){if(typeof t.result=="string"&&t.result.length>0)return t.result;if(Array.isArray(t.errors)){let e=t.errors.filter(n=>typeof n=="string"&&n.length>0);if(e.length>0)return e.join(`
3
- `)}}function ew(t,e,n){let o=(Array.isArray(n.questions)?n.questions:[])[0]??{},i=typeof o.question=="string"?o.question:void 0,s=Array.isArray(o.options)?o.options.map(a=>{if(!a||typeof a!="object")return"";let d=a.label;return typeof d=="string"?d:""}).filter(Boolean):[];return{requestId:`${t||"claude"}-ask-${e}`,kind:"question",promptText:i,options:s,allowsFreeText:s.length===0||o.multiSelect===!0}}var Di,lf=p(()=>{dl();Di=class{constructor(e={}){this.deps=e}deps;name="claude-code";backendKind="claude-code";supportedPermissionModes=["default","plan","bypassPermissions"];capabilities={nativePendingInput:!1,nativePlanArtifacts:!1,worktrees:"plugin-managed"};launch(e){let n=new pr,r=!1,o="",i=!1,s=0,a=e.resumeSessionId??"",d=e.canUseTool,l={cwd:e.cwd,model:e.model,...e.reasoningEffort?{effort:e.reasoningEffort}:{},permissionMode:e.permissionMode,allowDangerouslySkipPermissions:!0,allowedTools:e.allowedTools,systemPrompt:e.systemPrompt,includePartialMessages:!0,abortController:e.abortController,mcpServers:e.mcpServers,...d?{canUseTool:async(k,I)=>{if(k!=="AskUserQuestion")return{behavior:"allow"};let P=ew(a,++s,I);n.enqueue(Ei(P));try{let b=await d(k,I);return n.enqueue(cr(P.requestId)),b}catch(b){throw n.enqueue(cr(P.requestId)),b}}}:{}};e.resumeSessionId&&(l.resume=e.resumeSessionId,l.forkSession=e.forkSession??!1);let u=e.prompt,c=this.deps.query??Ni.query,g=this.deps.startup??Ni.startup,S=(async()=>{if(typeof g!="function")return c({prompt:u,options:l});let k=await g({options:l});try{return k.query(u)}catch(I){throw await k.close?.(),I}})();return(async()=>{try{let k=await S;for await(let I of k){let P=I;if(P.type==="system"&&P.subtype==="init"){a=P.session_id??a,n.enqueue(Ci({kind:"claude-code",conversationId:a}));continue}if(P.type==="system"&&P.subtype==="status"&&P.permissionMode){n.enqueue(Oi(P.permissionMode));continue}if(P.type==="assistant"){r||(r=!0,n.enqueue(_i()));for(let b of P.message?.content??[]){if(b.type==="text"){o+=o?`
4
- ${b.text}`:b.text,n.enqueue(so(b.text));continue}b.type==="tool_use"&&((b.name==="ExitPlanMode"||b.name==="set_permission_mode")&&(i=!0),b.name!=="AskUserQuestion"&&n.enqueue(df(b.name,b.input)))}continue}if(P.type==="result"){let b=o.trim();if(b&&(e.permissionMode==="plan"||i)){let A={explanation:void 0,steps:[],markdown:b};n.enqueue($i(A,!0))}n.enqueue(En({success:P.subtype==="success",duration_ms:P.duration_ms??0,total_cost_usd:P.total_cost_usd??0,num_turns:P.num_turns??0,result:ZP(P),session_id:P.session_id??a})),o="",i=!1,r=!1}}}finally{n.close()}})().catch(k=>{n.enqueue(En({success:!1,duration_ms:0,total_cost_usd:0,num_turns:0,result:k instanceof Error?k.message:String(k),session_id:a})),n.close()}),{messages:n.messages(),async setPermissionMode(k){let I=await S;typeof I.setPermissionMode=="function"&&await I.setPermissionMode(k)},async streamInput(k){let I=await S;typeof I.streamInput=="function"&&await I.streamInput(k)},async interrupt(){let k=await S;typeof k.interrupt=="function"&&await k.interrupt()}}}buildUserMessage(e,n){return{type:"user",message:{role:"user",content:e},parent_tool_use_id:null,session_id:n}}}});import{spawn as tw}from"node:child_process";import nw from"node:readline";function rw(t){return t instanceof Error?t.message:String(t)}function ow(t){try{let e=JSON.parse(t);return!e||typeof e!="object"||Array.isArray(e)?null:e}catch{return null}}async function iw(t,e){if(t.id!=null&&(Object.hasOwn(t,"result")||Object.hasOwn(t,"error"))){let r=String(t.id),o=e.pending.get(r);if(!o)return;if(clearTimeout(o.timer),e.pending.delete(r),t.error){o.reject(new Error(`codex app server rpc error (${t.error.code??"unknown"}): ${t.error.message??"unknown error"}`));return}o.resolve(t.result);return}let n=t.method?.trim();if(n){if(t.id==null){await e.onNotification(n,t.params);return}try{let r=await e.onRequest(n,t.params);e.respond({jsonrpc:"2.0",id:t.id,result:r??{}})}catch(r){e.respond({jsonrpc:"2.0",id:t.id,error:{code:-32603,message:rw(r)}})}}}var Fi,uf=p(()=>{Fi=class{constructor(e,n,r){this.command=e;this.args=n;this.requestTimeoutMs=r}command;args;requestTimeoutMs;process=null;pending=new Map;counter=0;onNotification=()=>{};onRequest=async()=>({});setNotificationHandler(e){this.onNotification=e}setRequestHandler(e){this.onRequest=e}async connect(){if(this.process)return;let e=tw(this.command,["app-server",...this.args],{stdio:["pipe","pipe","pipe"],env:process.env});if(!e.stdin||!e.stdout||!e.stderr)throw new Error("codex app server stdio pipes unavailable");this.process=e,nw.createInterface({input:e.stdout}).on("line",r=>{this.handleLine(r)}),e.stderr.on("data",()=>{}),e.on("close",()=>{this.flushPending(new Error("codex app server stdio closed")),this.process=null})}async close(){this.flushPending(new Error("codex app server stdio closed"));let e=this.process;this.process=null,e&&e.kill()}async notify(e,n){this.write({jsonrpc:"2.0",method:e,params:n??{}})}async request(e,n,r){let o=`rpc-${++this.counter}`,i=new Promise((s,a)=>{let d=setTimeout(()=>{this.pending.delete(o),a(new Error(`codex app server timeout: ${e}`))},Math.max(100,r??this.requestTimeoutMs));d.unref?.(),this.pending.set(o,{resolve:s,reject:a,timer:d})});return this.write({jsonrpc:"2.0",id:o,method:e,params:n??{}}),await i}write(e){if(!this.process?.stdin)throw new Error("codex app server stdio not connected");this.process.stdin.write(`${JSON.stringify(e)}
5
- `)}async handleLine(e){let n=ow(e);n&&await iw(n,{pending:this.pending,onNotification:this.onNotification,onRequest:this.onRequest,respond:r=>this.write(r)})}flushPending(e){for(let[n,r]of this.pending)clearTimeout(r.timer),r.reject(e),this.pending.delete(n)}}});function X(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:null}function le(t,e,n){for(let r of e){let o=t?.[r];if(typeof o!="string")continue;let i=n?.trim===!1?o:o.trim();if(i)return i}}function sw(t){return t instanceof Error?t.message:String(t)}function pf(t){return t?t.split(",").map(e=>e.trim()).filter(Boolean):[]}function ln(t){if(typeof t=="string")return t;if(Array.isArray(t))return t.map(n=>ln(n)).join("");let e=X(t);if(!e)return"";for(let n of["delta","text","content","message","input","output","parts"]){let r=ln(e[n]);if(r)return r}for(let n of["item","turn","thread","response","result","data"]){let r=ln(e[n]);if(r)return r}return""}function ao(t){let e=X(t);if(!e)return{};let n=X(e.thread)??X(e.session),r=X(e.turn)??X(e.run),o=X(e.item),i=X(e.serverRequest);return{threadId:le(e,["threadId","thread_id","conversationId","conversation_id"])??le(n,["id","threadId","thread_id","conversationId"]),runId:le(e,["turnId","turn_id","runId","run_id"])??le(r,["id","turnId","turn_id","runId","run_id"]),requestId:le(e,["requestId","request_id","serverRequestId"])??le(i,["id","requestId","request_id"]),itemId:le(e,["itemId","item_id"])??le(o,["id","itemId","item_id"])}}function Li(t,e,n=0){if(n>6)return;if(Array.isArray(t)){for(let i of t){let s=Li(i,e,n+1);if(s)return s}return}let r=X(t);if(!r)return;let o=le(r,e);if(o)return o;for(let i of Object.values(r)){let s=Li(i,e,n+1);if(s)return s}}function lo(t){return{threadId:ao(t).threadId,cwd:Li(t,["cwd","workdir","directory"])}}function cf(t){let e=t?.trim();return!!(e&&/[/\\]worktrees[/\\][^/\\]+[/\\][^/\\]+/.test(e))}function mf(t){let e=t?.trim();if(!e)return;let n=e.split(/[/\\]+/).filter(Boolean),r=n.lastIndexOf("worktrees");if(!(r<0||r+1>=n.length))return n[r+1]}function Wi(t){let e=X(t);if(!e)return;let n=X(e.item)??e;return le(n,["id","itemId","item_id","messageId","message_id"])}function aw(t,e=!1){let n=X(t);if(!n)return"";let r=X(n.item)??n;return le(r,["type"])?.toLowerCase()!=="agentmessage"?"":e?ln(r):le(r,["text"],{trim:!1})??ln(r)}function ff(t,e){let n=t.trim().toLowerCase();return n==="item/agentmessage/delta"?{mode:"delta",text:ln(e),itemId:Wi(e)}:n==="item/completed"?{mode:"snapshot",text:aw(e),itemId:Wi(e)}:{mode:"ignore",text:""}}function gf(t){return{itemId:Wi(t),delta:ln(t)}}function hf(t){let e=X(t),n=X(e?.plan),o=(Array.isArray(e?.plan)?e.plan:Array.isArray(n?.steps)?n.steps:[]).map(i=>{let s=X(i),a=le(s,["step","title","text"]);if(!a)return null;let d=le(s,["status"])?.toLowerCase()??"pending";return{step:a,status:d==="inprogress"||d==="in_progress"?"inProgress":d==="completed"?"completed":"pending"}}).filter(Boolean);return{explanation:le(n,["explanation"])??le(e,["explanation"]),steps:o}}function yf(t){let e=X(t);if(!e)return{};let n=X(e.item)??e;return le(n,["type"])?.toLowerCase()!=="plan"?{}:{itemId:Wi(n),text:le(n,["text"],{trim:!1})??ln(n)}}function Sf(t,e){let n=t.trim().toLowerCase();if(n==="turn/failed")return"failed";if(n==="turn/cancelled")return"interrupted";let r=X(e)??{},o=X(r.turn)??r,i=le(o,["status"])?.toLowerCase();return i==="failed"?"failed":i==="interrupted"||i==="cancelled"?"interrupted":"completed"}function kf(t,e){let n=X(e)??{},r=X(n.turn)??n,o=X(r.error)??X(n.error);if(o)return le(o,["message","text","summary","reason"])}function dw(t,e){let n=sw(t).toLowerCase();return n.includes("method not found")||n.includes("unknown method")?!0:n.includes("unknown variant")?e?n.includes(`unknown variant \`${e.toLowerCase()}\``):!0:!1}function uw(t){return lw.has(t.trim().toLowerCase())}function pw(t){let e=X(t);return e?!!le(e,["threadId","thread_id"]):!1}async function uo(t){if(t.payloads.length===0)throw new Error(`codex app server request skipped: no payloads for ${t.methods.join(", ")||"<none>"}`);let e;for(let n of t.methods)for(let r of t.payloads){if(uw(n)&&!pw(r))throw new Error(`codex app server request missing threadId: ${n}`);try{return await t.client.request(n,r,t.timeoutMs)}catch(o){if(e=o,!dw(o,n))continue}}throw e instanceof Error?e:new Error(String(e))}function vf(t){let e={cwd:t.cwd};return t.model?.trim()&&(e.model=t.model.trim()),t.reasoningEffort?.trim()&&(e.reasoningEffort=t.reasoningEffort.trim()),t.fastMode===!0&&(e.service_tier="fast"),t.approvalPolicy?.trim()&&(e.approvalPolicy=t.approvalPolicy.trim()),t.sandbox?.trim()&&(e.sandbox=t.sandbox.trim()),[e]}function Pf(t){let e={threadId:t.threadId,persistExtendedHistory:!1};return t.model?.trim()&&(e.model=t.model.trim()),t.reasoningEffort?.trim()&&(e.reasoningEffort=t.reasoningEffort.trim()),t.fastMode===!0&&(e.service_tier="fast"),t.cwd?.trim()&&(e.cwd=t.cwd.trim()),t.approvalPolicy?.trim()&&(e.approvalPolicy=t.approvalPolicy.trim()),t.sandbox?.trim()&&(e.sandbox=t.sandbox.trim()),[e]}function cw(t){return[{type:"text",text:t}]}function mw(t,e,n,r){let o=e?.trim(),i=n?.trim(),s=r?.trim();if(t!=="plan")return o||i||s?{mode:"default",settings:{...o?{model:o}:{},...i?{reasoningEffort:i}:{},developerInstructions:s??null}}:void 0;if(!(!o&&!i&&!s))return{mode:"plan",settings:{...o?{model:o}:{},...i?{reasoningEffort:i}:{},developerInstructions:s??null}}}function wf(t){let e={threadId:t.threadId,input:cw(t.prompt)};t.model?.trim()&&(e.model=t.model.trim()),t.fastMode===!0&&(e.service_tier="fast"),t.approvalPolicy?.trim()&&(e.approvalPolicy=t.approvalPolicy.trim()),t.sandbox?.trim()&&(e.sandbox=t.sandbox.trim());let n=mw(t.permissionMode??"default",t.model,t.reasoningEffort,t.systemPrompt);return n?[{...e,collaborationMode:n}]:[e]}function If(t){return[{threadId:t.threadId,turnId:t.turnId}]}function fw(t){let e=X(t);if(!e)return[];let n=e.options??e.choices??e.availableDecisions??e.decisions;return Array.isArray(n)?n.map(r=>typeof r=="string"?r.trim():le(X(r),["label","title","text","value","name","id"])??"").filter(Boolean):[]}function gw(t){let e=t.trim().toLowerCase();return e.includes("session")?"acceptForSession":/cancel|abort|stop/.test(e)?"cancel":/deny|decline|reject|block|no/.test(e)?"decline":/approve|allow|accept|yes/.test(e)?"accept":t.trim()}function bf(t,e,n){let r=t.trim().toLowerCase(),o=fw(n),i=Li(n,["question","prompt","message","text","summary","reason"])??void 0,s=r.includes("requestapproval"),a=s?o.map(d=>({kind:"approval",label:d,decision:gw(d),responseDecision:d})):o.map(d=>({kind:"option",label:d,value:d}));return{requestId:e,kind:s?"approval":"question",promptText:i,options:o,actions:a,allowsFreeText:!0}}function xf(t){let e=t.trim().toLowerCase();return e.includes("requestuserinput")||e.includes("requestapproval")}function ll(t,e){let n=t==="bypassPermissions"?"never":e?.trim()||"never";return{approvalPolicy:n,sandbox:n==="never"?"danger-full-access":void 0}}var lw,Af=p(()=>{lw=new Set(["thread/resume","turn/start","turn/steer","turn/interrupt"])});function Rf(t){return t instanceof Error?t.message:String(t)}function vw(t){if(typeof t=="string")return t;if(!t||typeof t!="object")return String(t);let e=t;return typeof e.message?.content=="string"?e.message.content:typeof e.text=="string"?e.text:String(t)}var hw,$n,yw,Sw,kw,Bi,Tf=p(()=>{uf();dl();Af();hw="1.0",$n=6e4,yw="OPENCLAW_CODEX_APP_SERVER_COMMAND",Sw="OPENCLAW_CODEX_APP_SERVER_ARGS",kw="OPENCLAW_CODEX_APP_SERVER_TIMEOUT_MS";Bi=class{constructor(e={}){this.deps=e}deps;name="codex";backendKind="codex-app-server";supportedPermissionModes=["default","plan","bypassPermissions"];capabilities={nativePendingInput:!0,nativePlanArtifacts:!0,worktrees:"native-restore"};launch(e){let n={command:process.env[yw]?.trim()||"codex",args:pf(process.env[Sw]),requestTimeoutMs:Number.parseInt(process.env[kw]??String($n),10)||$n},r=this.deps.createClient?.(n)??new Fi(n.command,n.args,n.requestTimeoutMs),o=new pr,i=e.resumeSessionId,s,a=e.backendRef?.worktreePath,d=e.backendRef?.worktreeId,l=e.permissionMode??"default",u,c=0,g="",S=[],k,I=new Map,P=new Set,b=W=>{let $=W?.trim();if(!$)return;let O=e.originalWorkdir?.trim()||e.cwd.trim();e.worktreeStrategy&&e.worktreeStrategy!=="off"&&$!==O&&cf($)&&(a=$,d=mf($))},A=()=>{i&&o.enqueue(Ci({kind:"codex-app-server",conversationId:i,...s?{runId:s}:{},...d?{worktreeId:d}:{},...a?{worktreePath:a}:{}}))};r.setNotificationHandler(async(W,$)=>{let O=W.trim().toLowerCase(),pe=ao($),ht=lo($);if(pe.threadId&&i&&pe.threadId!==i)return;if(pe.threadId&&(i=pe.threadId),pe.runId&&(s=pe.runId),b(ht.cwd),(pe.threadId||pe.runId||ht.cwd)&&A(),O==="serverrequest/resolved"){u&&(o.enqueue(cr(u.requestId)),u=void 0);return}if(O==="turn/plan/updated"){let Ce=hf($);g=Ce.explanation??g,Ce.steps.length>0&&(S=Ce.steps);return}if(O==="item/plan/delta"){let Ce=gf($);if(Ce.itemId&&Ce.delta){let zt=I.get(Ce.itemId)??"";I.set(Ce.itemId,`${zt}${Ce.delta}`)}return}if(O==="item/completed"){let Ce=yf($);if(Ce.text?.trim()){let zt={explanation:g||void 0,steps:S,markdown:Ce.text.trim()};o.enqueue($i(zt,!0));return}}let ae=ff(O,$);if(ae.mode==="delta"&&ae.text){ae.itemId&&P.add(ae.itemId),o.enqueue(so(ae.text));return}ae.mode==="snapshot"&&ae.text&&(!ae.itemId||!P.has(ae.itemId))&&o.enqueue(so(ae.text)),(O==="turn/completed"||O==="turn/failed"||O==="turn/cancelled")&&k&&(k.method=W,k.params=$,k.resolve())}),r.setRequestHandler(async(W,$)=>{if(!xf(W))return{};let O=ao($),pe=lo($);if(O.threadId&&i&&O.threadId!==i)return{};O.threadId&&(i=O.threadId),O.runId&&(s=O.runId),b(pe.cwd),(O.threadId||O.runId||pe.cwd)&&A();let ht=O.requestId??`${i??"codex"}-${Date.now().toString(36)}`,ae=bf(W,ht,$),Ce=W.trim().toLowerCase(),zt=ae.options,_o=ae.actions??[],ey=await new Promise(ty=>{u={requestId:ht,methodLower:Ce,state:ae,options:zt,actions:_o,resolveResponse:ty},o.enqueue(Ei(ae))});return u=void 0,o.enqueue(cr(ht)),ey});let T=async()=>{await r.connect(),await r.request("initialize",{protocolVersion:hw,clientInfo:{name:"openclaw-code-agent",version:"3.1.0"},capabilities:{experimentalApi:!0}},$n),await r.notify("initialized",{})},C=async()=>{let W=ll(l,e.codexApprovalPolicy);if(i){let pe=await uo({client:r,methods:["thread/resume"],payloads:Pf({threadId:i,model:e.model,reasoningEffort:e.reasoningEffort,fastMode:e.fastMode,approvalPolicy:W.approvalPolicy,sandbox:W.sandbox}),timeoutMs:$n}),ht=lo(pe);i=ht.threadId??i,b(ht.cwd),A();return}let $=await uo({client:r,methods:["thread/start","thread/new"],payloads:vf({cwd:e.cwd,model:e.model,reasoningEffort:e.reasoningEffort,fastMode:e.fastMode,approvalPolicy:W.approvalPolicy,sandbox:W.sandbox}),timeoutMs:$n}),O=lo($);if(i=O.threadId,!i)throw new Error("Codex App Server did not return a thread id.");b(O.cwd),A()},ye=async W=>{await C(),o.enqueue(_i()),c+=1,g="",S=[],I.clear(),P.clear();let $="",O,pe,ht=new Promise(ae=>{pe=ae});k={resolve:pe};try{let ae=ll(l,e.codexApprovalPolicy),Ce=await uo({client:r,methods:["turn/start"],payloads:wf({threadId:i,prompt:W,model:e.model,reasoningEffort:e.reasoningEffort,fastMode:e.fastMode,systemPrompt:e.systemPrompt,permissionMode:l,approvalPolicy:ae.approvalPolicy,sandbox:ae.sandbox}),timeoutMs:$n}),zt=ao(Ce);zt.runId&&(s=zt.runId,A()),await ht,$=k?.method??"turn/failed",O=k?.params;let _o=Sf($,O);o.enqueue(En({success:_o==="completed",outcome:_o,duration_ms:0,total_cost_usd:0,num_turns:c,result:kf($,O),session_id:i}))}catch(ae){o.enqueue(En({success:!1,duration_ms:0,total_cost_usd:0,num_turns:c,result:Rf(ae),session_id:i??""}))}finally{k=void 0}},Ht=async W=>u?(u.methodLower.includes("requestapproval")?u.resolveResponse({decision:W.trim()||"decline"}):u.resolveResponse({text:W.trim()}),!0):!1,Dt=async W=>{let $=u;if(!$)return!1;let O=$.actions[W];if(O?.kind==="approval")return $.resolveResponse({decision:O.responseDecision,...O.proposedExecpolicyAmendment?{proposedExecpolicyAmendment:O.proposedExecpolicyAmendment}:{}}),!0;let pe=$.options[W];return pe?($.methodLower.includes("requestapproval")?$.resolveResponse({decision:pe}):$.resolveResponse({option:pe,index:W}),!0):!1},uu=typeof e.prompt=="string"?(async function*(){yield{type:"user",text:e.prompt,session_id:e.resumeSessionId??""}})():e.prompt;return(async()=>{try{await T();for await(let W of uu){let $=vw(W).trim();!$||await Ht($)||await ye($)}}catch(W){o.enqueue(En({success:!1,duration_ms:0,total_cost_usd:0,num_turns:c,result:Rf(W),session_id:i??e.resumeSessionId??""}))}finally{await r.close().catch(()=>{}),o.close()}})(),{messages:o.messages(),async setPermissionMode(W){l=W,o.enqueue(Oi(W))},async submitPendingInputOption(W){return Dt(W)},async submitPendingInputText(W){return Ht(W)},async interrupt(){!i||!s||await uo({client:r,methods:["turn/interrupt"],payloads:If({threadId:i,turnId:s}),timeoutMs:$n}).catch(()=>{})}}}buildUserMessage(e,n){return{type:"user",text:e,session_id:n}}}});function Mf(t){ul.set(t.name,t)}function po(t){let e=ul.get(t);if(!e)throw new Error(`Unknown agent harness: "${t}". Available: ${[...ul.keys()].join(", ")}`);return e}function Cf(){return po(Le())}var ul,pl=p(()=>{lf();Tf();Te();ul=new Map;Mf(new Di);Mf(new Bi)});function _(t){return t.backendRef?.conversationId??t.harnessSessionId}function ne(t){return t.id??t.sessionId??t.name??_(t)??t.harnessSessionId}function Pw(t){return t.harnessSessionId}function Ge(t){let e=[ne(t),_(t),Pw(t)].filter(n=>!!n);return[...new Set(e)]}function cl(t){return t.harnessName??t.persistedHarness??Le()}function co(t){if(t.backendRef?.kind==="codex-app-server")return"native-restore";try{return po(cl(t)).capabilities.worktrees}catch{return"plugin-managed"}}function ml(t){return t==="native-execution"}function Ui(t){return t==="native-restore"}function ww(t){return!!(t.backendRef?.worktreePath||t.backendRef?.worktreeId)}function We(t){let e=co(t);return(ml(e)||Ui(e))&&ww(t)}var he=p(()=>{Te();pl()});import{execFileSync as xe}from"child_process";import*as ns from"fs";import{tmpdir as Hw}from"os";import{dirname as Zf,join as zw}from"path";function Qw(t){try{return xe("git",["rev-parse","--show-toplevel"],{cwd:t,timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()||void 0}catch{return}}function rs(t){if(process.env.OPENCLAW_WORKTREE_DIR)return process.env.OPENCLAW_WORKTREE_DIR;if(E.worktreeDir)return E.worktreeDir;if(t){let e=Qw(t);if(e)return zw(e,".worktrees")}return Hw()}function eg(t){return t.replace(/[^a-zA-Z0-9._-]/g,"-").replace(/\.{2,}/g,"-").replace(/^[-.]|[-.]$/g,"").slice(0,100)||"session"}function os(t){try{let e=xe("git",["-C",t,"rev-parse","--git-common-dir"],{cwd:t,timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim();return e&&e.endsWith("/.git")?Zf(e):void 0}catch{return}}function Jw(){if(es!==void 0)return es;try{return xe("git",["--version"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),es=!0,!0}catch{return es=!1,!1}}function un(){if(ts!==void 0)return ts;try{return xe("gh",["--version"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),ts=!0,!0}catch{return ts=!1,!1}}function kl(t){if(!Jw())return!1;try{return xe("git",["rev-parse","--git-dir"],{cwd:t,timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),!0}catch{return!1}}function tg(t){try{let e=Xw(t);if(!e)return console.warn(`[worktree] Failed to resolve free-space probe path for ${rs(t)}`),!0;let n=ns.statfsSync(e),r=n.bavail*n.bsize;return Zw(r)}catch(e){return console.warn(`[worktree] Failed to check free space: ${e instanceof Error?e.message:String(e)}`),!0}}function ho(t,e){try{return xe("git",["-C",t,"rev-parse","--verify",e],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),!0}catch{return!1}}function Yw(t){let e=t;for(;;){if(ns.existsSync(e))return e;let n=Zf(e);if(n===e)return;e=n}}function Xw(t){return Yw(rs(t))}function Zw(t){return t>=104857600}function pn(t){let e=process.env.OPENCLAW_WORKTREE_BASE_BRANCH?.trim();if(e)return e;try{let r=xe("git",["-C",t,"rev-parse","--abbrev-ref","origin/HEAD"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim().replace(/^origin\//,"");if(r)return r}catch{}try{return xe("git",["-C",t,"rev-parse","--verify","main"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),"main"}catch{}try{return xe("git",["-C",t,"rev-parse","--verify","master"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),"master"}catch{return"main"}}function is(t){try{let n=xe("git",["-C",t,"rev-parse","--abbrev-ref","HEAD"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim();if(n==="HEAD"){console.warn(`[worktree] Worktree ${t} is in detached HEAD state \u2014 cannot determine branch name`);return}return n||void 0}catch{return}}function yo(t,e,n){try{let r=xe("git",["-C",t,"rev-list","--count",`${n}..${e}`],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]});return parseInt(r.trim(),10)>0}catch{return!1}}function ng(t,e,n){try{let r=xe("git",["-C",t,"rev-list","--left-right","--count",`${e}...${n}`],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim(),[o,i]=r.split(/\s+/);return{ahead:parseInt(o??"0",10)||0,behind:parseInt(i??"0",10)||0}}catch{return}}function rg(t,e,n){try{return xe("git",["-C",t,"merge-base","--is-ancestor",e,n],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),!0}catch{return!1}}function og(t,e,n){try{let r=xe("git",["-C",t,"merge-tree","--write-tree",n,e],{timeout:15e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim(),o=xe("git",["-C",t,"rev-parse",`${n}^{tree}`],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim();return!!r&&r===o}catch{return!1}}function Ot(t,e){try{return xe("git",["-C",t,"branch","-D",e],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),!0}catch(n){return console.warn(`[worktree] Failed to delete branch ${e}: ${n instanceof Error?n.message:String(n)}`),!1}}function ig(t,e){if(e)return e;let n;try{n=xe("git",["-C",t,"remote","get-url","origin"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()||void 0}catch{}try{let r=xe("git",["-C",t,"remote","get-url","upstream"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim();if(r&&r!==n){let o=r.match(/[:/]([^/]+\/[^/]+?)(?:\.git)?$/);if(o)return o[1]}}catch{}}var es,ts,So=p(()=>{Te()});import{execFileSync as yr}from"child_process";import{appendFileSync as eI,existsSync as dg,mkdirSync as sg,readFileSync as tI,rmSync as vl}from"fs";import{relative as nI,sep as ag}from"path";function rI(t,e){return!!(t&&typeof t=="object"&&"code"in t&&t.code===e)}function oI(t){try{return yr("git",["-C",t,"rev-parse","--show-toplevel"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()||void 0}catch{return}}function iI(t,e){let n=oI(t);if(!n)return;let r=nI(n,e);if(!r||r.startsWith("..")||r.includes(`..${ag}`))return;let o=`${n}/.git/info/exclude`,i=`${r.split(ag).join("/").replace(/\/$/,"")}/`;try{let s=dg(o)?tI(o,"utf-8"):"";s.split(/\r?\n/).map(d=>d.trim()).some(d=>d===i||d===`/${i}`)||eI(o,`${s.endsWith(`
6
- `)||s.length===0?"":`
1
+ var QP=Object.defineProperty;var Be=(t,e)=>()=>(t&&(e=t(t=0)),e);var Tt=(t,e)=>{for(var r in e)QP(t,r,{get:e[r],enumerable:!0})};function Po(t,e){return e?{...e,...t}:t}function YP(t){return{...t,[Nu]:!0}}function ZP(t){return{const:t,type:typeof t}}var Nu,f,tt=Be(()=>{Nu=Symbol("optionalSchema");f={Object(t,e){let r=Object.entries(t).filter(([,o])=>!o[Nu]).map(([o])=>o),n=Object.fromEntries(Object.entries(t).map(([o,i])=>{let{[Nu]:a,...u}=i;return[o,u]}));return{...e,type:"object",...r.length>0?{required:r}:{},properties:n}},String(t){return Po({type:"string"},t)},Number(t){return Po({type:"number"},t)},Boolean(t){return Po({type:"boolean"},t)},Array(t,e){return Po({type:"array",items:t},e)},Literal:ZP,Union(t,e){return Po({anyOf:t},e)},Optional:YP}});function qu(t){k=t}function Bu(t){Ce=t}var k,Ce,le=Be(()=>{k=null,Ce=null});function ym(t){let e=t.chatId.trim(),r=t.topicId.trim();return!/^-?\d+$/.test(e)||!/^\d+$/.test(r)?null:`${e}:topic:${r}`}function nw(t){let e=t.conversationId.trim(),r=e.match(/^(-?\d+):topic:(\d+)$/i);if(r?.[1]&&r[2]){let i=ym({chatId:r[1],topicId:r[2]});return i?{chatId:r[1],topicId:r[2],canonicalConversationId:i}:null}if(!/^\d+$/.test(e))return null;let n=t.parentConversationId?.trim();if(!n||!/^-?\d+$/.test(n))return null;let o=ym({chatId:n,topicId:e});return o?{chatId:n,topicId:e,canonicalConversationId:o}:null}function ow(t){if(!t)return;let e=t.match(/^agent:[^:]+:discord:(direct|dm|channel|group):/i);if(!e?.[1])return;let r=e[1].toLowerCase();return r==="direct"||r==="dm"?"user":"channel"}function iw(t,e){if(!/^\d+$/.test(t))return t;let r=ow(e);return r?`${r}:${t}`:`channel:${t}`}function sw(t){if(!(!t?.provider||!t.target)&&!(t.provider==="system"||t.target==="system"))return t.accountId?`${t.provider}|${t.accountId}|${t.target}`:`${t.provider}|${t.target}`}function aw(t){let e=t.toLowerCase(),r=[":thread:",":topic:"];for(let n of r){let o=e.lastIndexOf(n);if(o===-1)continue;let i=t.slice(0,o).trim(),a=t.slice(o+n.length).trim()||void 0;return{id:i||t,threadId:a}}return{id:t}}function uw(t){let e=t?.trim();if(!e)return;let r=e.split(":").filter(Boolean);if(r[0]?.trim().toLowerCase()==="agent")for(let n=2;n<=r.length-3;n+=1){let o=r[n]?.trim().toLowerCase();if(!o||!rw.has(o))continue;let i=r[n+1]?.trim().toLowerCase(),a=r.slice(n+2).join(":").trim();if(!(!i||!a))return{provider:o,kind:i,rawId:a}}}function pw(t,e=nw){try{return e({conversationId:t})}catch{return null}}function Uu(t){return{provider:"system",target:"system",sessionKey:t?.trim()||void 0}}function Ku(t,e){return{...t,threadId:e??t.threadId}}function lw(t,e,r){return t==="telegram"&&r?.provider==="telegram"&&!!r.target&&e!==r.target}function mw(t){let e=t?.trim();if(!e)return;let r=uw(e);if(!r)return;let{provider:n,kind:o,rawId:i}=r,a=aw(i),u=null;if(n==="telegram")try{u=dw.safeParseTelegramTopicConversation(i)}catch{u=null}let p=u?.chatId??a.id,d=u?.topicId??a.threadId,l=n==="discord"?o==="direct"||o==="dm"?`user:${p}`:`channel:${p}`:p;return{provider:n,target:l,threadId:d,sessionKey:e}}function ju(t){let e=t?.match(/:topic:(\d+)$/);return e?parseInt(e[1],10):void 0}function Sm(t){return!!(t?.provider&&t.target&&t.provider!=="system"&&t.target!=="system")}function wo(t,e,r){let n=mw(r),o=e!=null?String(e):void 0,i=t?.trim();if(!i||i.toLowerCase()==="unknown")return n?Ku(n,o):Uu(r);let a=i.split("|").map(y=>y.trim());if(a.length<2)return n?Ku(n,o):Uu(r);let[u,p,d]=a,l=a.length>=3?d:p,m=a.length>=3?p:void 0,c=u?.toLowerCase();if(!c||!l)return n?Ku(n,o):Uu(r);let h=c==="discord"?iw(l,r):l;return lw(c,h,n)?{provider:c,accountId:m,target:n.target,threadId:o??n.threadId,sessionKey:r?.trim()||void 0}:{provider:c,accountId:m,target:h,threadId:o??(n?.provider===c?n.threadId:void 0),sessionKey:r?.trim()||void 0}}function en(t){return wo(sw(t.route)??t.originChannel,t.route?.threadId??t.originThreadId,t.route?.sessionKey??t.originSessionKey)??t.route}function $i(t){let e=en(t);return Sm(e)?e:void 0}function cw(t){return Object.fromEntries(Object.entries(t).filter(e=>!!e[1]))}function Mi(t){let e=en(t);if(!Sm(e))return"";let r=cw({provider:e?.provider,accountId:e?.accountId,target:e?.target,threadId:e?.threadId??(t.originThreadId!=null?String(t.originThreadId):void 0),sessionKey:e?.sessionKey??t.originSessionKey});return Object.keys(r).length===0?"":["Session origin route (authoritative for human follow-ups):",`originRoute: ${JSON.stringify(r)}`,"Routing rule: Send any human follow-up for this wake to originRoute. If originRoute differs from the current chat, do not use a plain final assistant reply; use a routed send path that preserves provider/target/threadId."].join(`
2
+ `)}var rw,dw,ir=Be(()=>{rw=new Set(["telegram","discord","slack","system","mattermost","feishu","line","whatsapp","signal","matrix","googlechat","bluebubbles","imessage","msteams"]);dw={safeParseTelegramTopicConversation:pw}});import{readFileSync as fw}from"fs";import{homedir as gw}from"os";import{join as hw}from"path";function Im(){if(vo!==void 0)return vo;try{let t=fw(hw(gw(),".claude.json"),"utf-8");vo=JSON.parse(t).mcpServers??{}}catch{vo={}}return vo}function xm(t){let e=t.defaultHarness??km,r={};for(let[n,o]of Object.entries(Oi))r[n]={...o,allowedModels:o.allowedModels?[...o.allowedModels]:void 0};for(let[n,o]of Object.entries(t.harnesses??{})){let i=r[n]??{},a={...i,defaultModel:o.defaultModel??i.defaultModel,reasoningEffort:o.reasoningEffort??i.reasoningEffort,fastMode:o.fastMode??i.fastMode};o.allowedModels!==void 0?a.allowedModels=o.allowedModels?[...o.allowedModels]:o.allowedModels:o.defaultModel!==void 0&&(a.allowedModels=void 0),r[n]=a}if(t.defaultModel!==void 0){let n=r[e]??{};r[e]={...n,defaultModel:t.harnesses?.[e]?.defaultModel??t.defaultModel,allowedModels:t.harnesses?.[e]?.allowedModels!==void 0?n.allowedModels:t.allowedModels},console.warn(`[openclaw-code-agent] config.defaultModel is deprecated; use harnesses.${e}.defaultModel instead.`)}if(t.model!==void 0){let n=r.codex??{};r.codex={...n,defaultModel:t.harnesses?.codex?.defaultModel??t.model,allowedModels:t.harnesses?.codex?.allowedModels!==void 0?n.allowedModels:t.allowedModels},console.warn("[openclaw-code-agent] config.model is deprecated; use harnesses.codex.defaultModel instead.")}if(t.reasoningEffort!==void 0){let n=r.codex??{};r.codex={...n,reasoningEffort:t.harnesses?.codex?.reasoningEffort??t.reasoningEffort},console.warn("[openclaw-code-agent] config.reasoningEffort is deprecated; use harnesses.codex.reasoningEffort instead.")}if(t.allowedModels!==void 0){console.warn("[openclaw-code-agent] config.allowedModels is deprecated; use harnesses.<name>.allowedModels instead.");for(let[n,o]of Object.entries(r))t.harnesses?.[n]?.allowedModels===void 0&&(r[n]={...o,allowedModels:void 0})}j={maxSessions:t.maxSessions??20,defaultWorkdir:t.defaultWorkdir,idleTimeoutMinutes:t.idleTimeoutMinutes??15,sessionGcAgeMinutes:t.sessionGcAgeMinutes??1440,maxPersistedSessions:t.maxPersistedSessions??1e4,fallbackChannel:t.fallbackChannel,agentChannels:t.agentChannels,maxAutoResponds:t.maxAutoResponds??10,permissionMode:t.permissionMode??"plan",planApproval:t.planApproval??"delegate",defaultHarness:e,harnesses:r,allowedModels:t.allowedModels,defaultWorktreeStrategy:t.defaultWorktreeStrategy??"delegate",worktreeDir:t.worktreeDir}}function dt(){return j.defaultHarness??km}function Vu(t){let e=Oi[t],r=j.harnesses[t];return{...e,...r,allowedModels:r?.allowedModels??e?.allowedModels}}function $n(t){return Vu(t).defaultModel}function _i(t){return j.harnesses[t]?.allowedModels??j.allowedModels}function Ir(t){return Vu(t).reasoningEffort}function Mn(t){return t==="codex"?Vu(t).fastMode:void 0}function zt(t){return t==null?void 0:String(t).trim()||void 0}function Hu(t){return{channel:zt(t?.deliveryContext?.channel),to:zt(t?.deliveryContext?.to),accountId:zt(t?.deliveryContext?.accountId),threadId:zt(t?.deliveryContext?.threadId)}}function Pm(t,e,r){if(!(!t||!e))return r?`${t}|${r}|${e}`:`${t}|${e}`}function Wu(t){return zt(t?.requesterSenderId??t?.senderId)}function Gu(t){return(zt(t.deliveryContext?.channel)??t.messageChannel??t.channel)?.toLowerCase()!=="telegram"?!1:!!ju(t.sessionKey)}function Di(t){let e=Hu(t),r=Pm(e.channel,e.to,e.accountId);if(r)return r;if(t.messageChannel){let n=t.messageChannel.split("|");if(n.length>=3)return t.messageChannel;if(t.agentAccountId&&n.length>=2)return`${n[0]}|${t.agentAccountId}|${n.slice(1).join("|")}`;let o=zt(t.chatId);if(n.length===1&&o)return`${n[0]}|${o}`;let i=Wu(t);if(n.length===1&&i&&!Gu(t))return`${n[0]}|${i}`}if(t.workspaceDir){let n=Ao(t.workspaceDir);if(n)return n}if(t.messageChannel&&t.messageChannel.includes("|"))return t.messageChannel}function bo(t,e){if(e&&String(e).includes("|"))return String(e);let r=Hu(t),n=Pm(r.channel,r.to,r.accountId);if(n)return n;if(t?.channelId&&String(t.channelId).includes("|"))return String(t.channelId);if(t?.messageChannel){let u=String(t.messageChannel);if(u.includes("|"))return u;let p=zt(t.chatId);if(p)return`${u}|${p}`;let d=Wu(t);if(d&&!Gu(t))return`${u}|${d}`}let o=zt(t?.channel),i=zt(t?.chatId);if(o&&i)return`${o}|${i}`;let a=Wu(t);return o&&a&&!Gu(t)?`${o}|${a}`:t?.id&&/^-?\d+$/.test(String(t.id))?`telegram|${t.id}`:j.fallbackChannel??"unknown"}function zu(t){return Hu(t).threadId??t?.messageThreadId??void 0}function On(t,e,r){return wo(bo(t,e),zu(t),r??t?.sessionKey)}function Ao(t){let e=j.agentChannels;if(!e)return;let r=i=>i.replace(/\/+$/,""),n=r(t),o=Object.entries(e).sort((i,a)=>a[0].length-i[0].length);for(let[i,a]of o)if(n===r(i)||n.startsWith(r(i)+"/"))return a}function wm(t){return ju(t)}var vo,km,Oi,j,ze=Be(()=>{ir();km="claude-code",Oi={"claude-code":{defaultModel:"anthropic/claude-sonnet-4-7",allowedModels:["sonnet","opus"]},codex:{defaultModel:"gpt-5.5",allowedModels:["gpt-5.5","gpt-5.5-pro"],reasoningEffort:"medium"}};j={maxSessions:20,idleTimeoutMinutes:15,sessionGcAgeMinutes:1440,maxPersistedSessions:1e4,maxAutoResponds:10,permissionMode:"plan",planApproval:"delegate",defaultWorktreeStrategy:"delegate",harnesses:{"claude-code":{...Oi["claude-code"]},codex:{...Oi.codex}}}});function Fi(t){return{type:"backend_ref",ref:t}}function Li(t){return{type:"run_started",...t?{runId:t}:{}}}function To(t){return{type:"text_delta",text:t}}function vm(t,e){return{type:"tool_call",name:t,input:e}}function Ni(t){return{type:"pending_input",state:t}}function Fn(t){return t?{type:"pending_input_resolved",requestId:t}:{type:"pending_input_resolved"}}function qi(t,e){return{type:"plan_artifact",artifact:t,finalized:e}}function Bi(t){return t?{type:"settings_changed",permissionMode:t}:{type:"settings_changed"}}function tn(t){return{type:"run_completed",data:t}}var Dn,Ju=Be(()=>{Dn=class{queue=[];resolvePending=null;done=!1;enqueue(e){this.queue.push(e),this.flush()}close(){this.done=!0,this.flush()}flush(){this.resolvePending&&(this.resolvePending(),this.resolvePending=null)}messages(){let e=this;return(async function*(){for(;;){for(;e.queue.length>0;)yield e.queue.shift();if(e.done)return;await new Promise(r=>{e.resolvePending=r})}})()}}});import*as Ki from"@anthropic-ai/claude-agent-sdk";function yw(t){if(typeof t.result=="string"&&t.result.length>0)return t.result;if(Array.isArray(t.errors)){let e=t.errors.filter(r=>typeof r=="string"&&r.length>0);if(e.length>0)return e.join(`
3
+ `)}}function Sw(t,e,r){let o=(Array.isArray(r.questions)?r.questions:[])[0]??{},i=typeof o.question=="string"?o.question:void 0,a=Array.isArray(o.options)?o.options.map(u=>{if(!u||typeof u!="object")return"";let p=u.label;return typeof p=="string"?p:""}).filter(Boolean):[];return{requestId:`${t||"claude"}-ask-${e}`,kind:"question",promptText:i,options:a,allowsFreeText:a.length===0||o.multiSelect===!0}}var Ui,bm=Be(()=>{Ju();Ui=class{constructor(e={}){this.deps=e}deps;name="claude-code";backendKind="claude-code";supportedPermissionModes=["default","plan","bypassPermissions"];capabilities={nativePendingInput:!1,nativePlanArtifacts:!1,worktrees:"plugin-managed"};launch(e){let r=new Dn,n=!1,o="",i=!1,a=0,u=e.resumeSessionId??"",p=e.canUseTool,d={cwd:e.cwd,model:e.model,...e.reasoningEffort?{effort:e.reasoningEffort}:{},permissionMode:e.permissionMode,allowDangerouslySkipPermissions:!0,allowedTools:e.allowedTools,systemPrompt:e.systemPrompt,includePartialMessages:!0,abortController:e.abortController,mcpServers:e.mcpServers,...p?{canUseTool:async(y,S)=>{if(y!=="AskUserQuestion")return{behavior:"allow"};let I=Sw(u,++a,S);r.enqueue(Ni(I));try{let w=await p(y,S);return r.enqueue(Fn(I.requestId)),w}catch(w){throw r.enqueue(Fn(I.requestId)),w}}}:{}};e.resumeSessionId&&(d.resume=e.resumeSessionId,d.forkSession=e.forkSession??!1);let l=e.prompt,m=this.deps.query??Ki.query,c=this.deps.startup??Ki.startup,h=(async()=>{if(typeof c!="function")return m({prompt:l,options:d});let y=await c({options:d});try{return y.query(l)}catch(S){throw await y.close?.(),S}})();return(async()=>{try{let y=await h;for await(let S of y){let I=S;if(I.type==="system"&&I.subtype==="init"){u=I.session_id??u,r.enqueue(Fi({kind:"claude-code",conversationId:u}));continue}if(I.type==="system"&&I.subtype==="status"&&I.permissionMode){r.enqueue(Bi(I.permissionMode));continue}if(I.type==="assistant"){n||(n=!0,r.enqueue(Li()));for(let w of I.message?.content??[]){if(w.type==="text"){o+=o?`
4
+ ${w.text}`:w.text,r.enqueue(To(w.text));continue}w.type==="tool_use"&&((w.name==="ExitPlanMode"||w.name==="set_permission_mode")&&(i=!0),w.name!=="AskUserQuestion"&&r.enqueue(vm(w.name,w.input)))}continue}if(I.type==="result"){let w=o.trim();if(w&&(e.permissionMode==="plan"||i)){let R={explanation:void 0,steps:[],markdown:w};r.enqueue(qi(R,!0))}r.enqueue(tn({success:I.subtype==="success",duration_ms:I.duration_ms??0,total_cost_usd:I.total_cost_usd??0,num_turns:I.num_turns??0,result:yw(I),session_id:I.session_id??u})),o="",i=!1,n=!1}}}finally{r.close()}})().catch(y=>{r.enqueue(tn({success:!1,duration_ms:0,total_cost_usd:0,num_turns:0,result:y instanceof Error?y.message:String(y),session_id:u})),r.close()}),{messages:r.messages(),async setPermissionMode(y){let S=await h;typeof S.setPermissionMode=="function"&&await S.setPermissionMode(y)},async streamInput(y){let S=await h;typeof S.streamInput=="function"&&await S.streamInput(y)},async interrupt(){let y=await h;typeof y.interrupt=="function"&&await y.interrupt()}}}buildUserMessage(e,r){return{type:"user",message:{role:"user",content:e},parent_tool_use_id:null,session_id:r}}}});import{spawn as kw}from"node:child_process";import Iw from"node:readline";function xw(t){return t instanceof Error?t.message:String(t)}function Pw(t){try{let e=JSON.parse(t);return!e||typeof e!="object"||Array.isArray(e)?null:e}catch{return null}}async function ww(t,e){if(t.id!=null&&(Object.hasOwn(t,"result")||Object.hasOwn(t,"error"))){let n=String(t.id),o=e.pending.get(n);if(!o)return;if(clearTimeout(o.timer),e.pending.delete(n),t.error){o.reject(new Error(`codex app server rpc error (${t.error.code??"unknown"}): ${t.error.message??"unknown error"}`));return}o.resolve(t.result);return}let r=t.method?.trim();if(r){if(t.id==null){await e.onNotification(r,t.params);return}try{let n=await e.onRequest(r,t.params);e.respond({jsonrpc:"2.0",id:t.id,result:n??{}})}catch(n){e.respond({jsonrpc:"2.0",id:t.id,error:{code:-32603,message:xw(n)}})}}}var ji,Am=Be(()=>{ji=class{constructor(e,r,n){this.command=e;this.args=r;this.requestTimeoutMs=n}command;args;requestTimeoutMs;process=null;pending=new Map;counter=0;onNotification=()=>{};onRequest=async()=>({});setNotificationHandler(e){this.onNotification=e}setRequestHandler(e){this.onRequest=e}async connect(){if(this.process)return;let e=kw(this.command,["app-server",...this.args],{stdio:["pipe","pipe","pipe"],env:process.env});if(!e.stdin||!e.stdout||!e.stderr)throw new Error("codex app server stdio pipes unavailable");this.process=e,Iw.createInterface({input:e.stdout}).on("line",n=>{this.handleLine(n)}),e.stderr.on("data",()=>{}),e.on("close",()=>{this.flushPending(new Error("codex app server stdio closed")),this.process=null})}async close(){this.flushPending(new Error("codex app server stdio closed"));let e=this.process;this.process=null,e&&e.kill()}async notify(e,r){this.write({jsonrpc:"2.0",method:e,params:r??{}})}async request(e,r,n){let o=`rpc-${++this.counter}`,i=new Promise((a,u)=>{let p=setTimeout(()=>{this.pending.delete(o),u(new Error(`codex app server timeout: ${e}`))},Math.max(100,n??this.requestTimeoutMs));p.unref?.(),this.pending.set(o,{resolve:a,reject:u,timer:p})});return this.write({jsonrpc:"2.0",id:o,method:e,params:r??{}}),await i}write(e){if(!this.process?.stdin)throw new Error("codex app server stdio not connected");this.process.stdin.write(`${JSON.stringify(e)}
5
+ `)}async handleLine(e){let r=Pw(e);r&&await ww(r,{pending:this.pending,onNotification:this.onNotification,onRequest:this.onRequest,respond:n=>this.write(n)})}flushPending(e){for(let[r,n]of this.pending)clearTimeout(n.timer),n.reject(e),this.pending.delete(r)}}});function me(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:null}function we(t,e,r){for(let n of e){let o=t?.[n];if(typeof o!="string")continue;let i=r?.trim===!1?o:o.trim();if(i)return i}}function vw(t){return t instanceof Error?t.message:String(t)}function Tm(t){return t?t.split(",").map(e=>e.trim()).filter(Boolean):[]}function xr(t){if(typeof t=="string")return t;if(Array.isArray(t))return t.map(r=>xr(r)).join("");let e=me(t);if(!e)return"";for(let r of["delta","text","content","message","input","output","parts"]){let n=xr(e[r]);if(n)return n}for(let r of["item","turn","thread","response","result","data"]){let n=xr(e[r]);if(n)return n}return""}function Ro(t){let e=me(t);if(!e)return{};let r=me(e.thread)??me(e.session),n=me(e.turn)??me(e.run),o=me(e.item),i=me(e.serverRequest);return{threadId:we(e,["threadId","thread_id","conversationId","conversation_id"])??we(r,["id","threadId","thread_id","conversationId"]),runId:we(e,["turnId","turn_id","runId","run_id"])??we(n,["id","turnId","turn_id","runId","run_id"]),requestId:we(e,["requestId","request_id","serverRequestId"])??we(i,["id","requestId","request_id"]),itemId:we(e,["itemId","item_id"])??we(o,["id","itemId","item_id"])}}function Wi(t,e,r=0){if(r>6)return;if(Array.isArray(t)){for(let i of t){let a=Wi(i,e,r+1);if(a)return a}return}let n=me(t);if(!n)return;let o=we(n,e);if(o)return o;for(let i of Object.values(n)){let a=Wi(i,e,r+1);if(a)return a}}function Co(t){return{threadId:Ro(t).threadId,cwd:Wi(t,["cwd","workdir","directory"])}}function Rm(t){let e=t?.trim();return!!(e&&/[/\\]worktrees[/\\][^/\\]+[/\\][^/\\]+/.test(e))}function Cm(t){let e=t?.trim();if(!e)return;let r=e.split(/[/\\]+/).filter(Boolean),n=r.lastIndexOf("worktrees");if(!(n<0||n+1>=r.length))return r[n+1]}function Gi(t){let e=me(t);if(!e)return;let r=me(e.item)??e;return we(r,["id","itemId","item_id","messageId","message_id"])}function bw(t,e=!1){let r=me(t);if(!r)return"";let n=me(r.item)??r;return we(n,["type"])?.toLowerCase()!=="agentmessage"?"":e?xr(n):we(n,["text"],{trim:!1})??xr(n)}function Em(t,e){let r=t.trim().toLowerCase();return r==="item/agentmessage/delta"?{mode:"delta",text:xr(e),itemId:Gi(e)}:r==="item/completed"?{mode:"snapshot",text:bw(e),itemId:Gi(e)}:{mode:"ignore",text:""}}function $m(t){return{itemId:Gi(t),delta:xr(t)}}function Mm(t){let e=me(t),r=me(e?.plan),o=(Array.isArray(e?.plan)?e.plan:Array.isArray(r?.steps)?r.steps:[]).map(i=>{let a=me(i),u=we(a,["step","title","text"]);if(!u)return null;let p=we(a,["status"])?.toLowerCase()??"pending";return{step:u,status:p==="inprogress"||p==="in_progress"?"inProgress":p==="completed"?"completed":"pending"}}).filter(Boolean);return{explanation:we(r,["explanation"])??we(e,["explanation"]),steps:o}}function Om(t){let e=me(t);if(!e)return{};let r=me(e.item)??e;return we(r,["type"])?.toLowerCase()!=="plan"?{}:{itemId:Gi(r),text:we(r,["text"],{trim:!1})??xr(r)}}function _m(t,e){let r=t.trim().toLowerCase();if(r==="turn/failed")return"failed";if(r==="turn/cancelled")return"interrupted";let n=me(e)??{},o=me(n.turn)??n,i=we(o,["status"])?.toLowerCase();return i==="failed"?"failed":i==="interrupted"||i==="cancelled"?"interrupted":"completed"}function Dm(t,e){let r=me(e)??{},n=me(r.turn)??r,o=me(n.error)??me(r.error);if(o)return we(o,["message","text","summary","reason"])}function Aw(t,e){let r=vw(t).toLowerCase();return r.includes("method not found")||r.includes("unknown method")?!0:r.includes("unknown variant")?e?r.includes(`unknown variant \`${e.toLowerCase()}\``):!0:!1}function Rw(t){return Tw.has(t.trim().toLowerCase())}function Cw(t){let e=me(t);return e?!!we(e,["threadId","thread_id"]):!1}async function Eo(t){if(t.payloads.length===0)throw new Error(`codex app server request skipped: no payloads for ${t.methods.join(", ")||"<none>"}`);let e;for(let r of t.methods)for(let n of t.payloads){if(Rw(r)&&!Cw(n))throw new Error(`codex app server request missing threadId: ${r}`);try{return await t.client.request(r,n,t.timeoutMs)}catch(o){if(e=o,!Aw(o,r))continue}}throw e instanceof Error?e:new Error(String(e))}function Fm(t){let e={cwd:t.cwd};return t.model?.trim()&&(e.model=t.model.trim()),t.reasoningEffort?.trim()&&(e.reasoningEffort=t.reasoningEffort.trim()),t.fastMode===!0&&(e.service_tier="fast"),t.approvalPolicy?.trim()&&(e.approvalPolicy=t.approvalPolicy.trim()),t.sandbox?.trim()&&(e.sandbox=t.sandbox.trim()),[e]}function Lm(t){let e={threadId:t.threadId,persistExtendedHistory:!1};return t.model?.trim()&&(e.model=t.model.trim()),t.reasoningEffort?.trim()&&(e.reasoningEffort=t.reasoningEffort.trim()),t.fastMode===!0&&(e.service_tier="fast"),t.cwd?.trim()&&(e.cwd=t.cwd.trim()),t.approvalPolicy?.trim()&&(e.approvalPolicy=t.approvalPolicy.trim()),t.sandbox?.trim()&&(e.sandbox=t.sandbox.trim()),[e]}function Ew(t){return[{type:"text",text:t}]}function $w(t,e,r,n){let o=e?.trim(),i=r?.trim(),a=n?.trim();if(t!=="plan")return o||i||a?{mode:"default",settings:{...o?{model:o}:{},...i?{reasoningEffort:i}:{},developerInstructions:a??null}}:void 0;if(!(!o&&!i&&!a))return{mode:"plan",settings:{...o?{model:o}:{},...i?{reasoningEffort:i}:{},developerInstructions:a??null}}}function Nm(t){let e={threadId:t.threadId,input:Ew(t.prompt)};t.model?.trim()&&(e.model=t.model.trim()),t.fastMode===!0&&(e.service_tier="fast"),t.approvalPolicy?.trim()&&(e.approvalPolicy=t.approvalPolicy.trim()),t.sandbox?.trim()&&(e.sandbox=t.sandbox.trim());let r=$w(t.permissionMode??"default",t.model,t.reasoningEffort,t.systemPrompt);return r?[{...e,collaborationMode:r}]:[e]}function qm(t){return[{threadId:t.threadId,turnId:t.turnId}]}function Mw(t){let e=me(t);if(!e)return[];let r=e.options??e.choices??e.availableDecisions??e.decisions;return Array.isArray(r)?r.map(n=>typeof n=="string"?n.trim():we(me(n),["label","title","text","value","name","id"])??"").filter(Boolean):[]}function Ow(t){let e=t.trim().toLowerCase();return e.includes("session")?"acceptForSession":/cancel|abort|stop/.test(e)?"cancel":/deny|decline|reject|block|no/.test(e)?"decline":/approve|allow|accept|yes/.test(e)?"accept":t.trim()}function Bm(t,e,r){let n=t.trim().toLowerCase(),o=Mw(r),i=Wi(r,["question","prompt","message","text","summary","reason"])??void 0,a=n.includes("requestapproval"),u=a?o.map(p=>({kind:"approval",label:p,decision:Ow(p),responseDecision:p})):o.map(p=>({kind:"option",label:p,value:p}));return{requestId:e,kind:a?"approval":"question",promptText:i,options:o,actions:u,allowsFreeText:!0}}function Um(t){let e=t.trim().toLowerCase();return e.includes("requestuserinput")||e.includes("requestapproval")}function Qu(t,e){let r=t==="bypassPermissions"?"never":e?.trim()||"never";return{approvalPolicy:r,sandbox:r==="never"?"danger-full-access":void 0}}var Tw,Km=Be(()=>{Tw=new Set(["thread/resume","turn/start","turn/steer","turn/interrupt"])});function jm(t){return t instanceof Error?t.message:String(t)}function Nw(t){if(typeof t=="string")return t;if(!t||typeof t!="object")return String(t);let e=t;return typeof e.message?.content=="string"?e.message.content:typeof e.text=="string"?e.text:String(t)}var _w,rn,Dw,Fw,Lw,Vi,Wm=Be(()=>{Am();Ju();Km();_w="1.0",rn=6e4,Dw="OPENCLAW_CODEX_APP_SERVER_COMMAND",Fw="OPENCLAW_CODEX_APP_SERVER_ARGS",Lw="OPENCLAW_CODEX_APP_SERVER_TIMEOUT_MS";Vi=class{constructor(e={}){this.deps=e}deps;name="codex";backendKind="codex-app-server";supportedPermissionModes=["default","plan","bypassPermissions"];capabilities={nativePendingInput:!0,nativePlanArtifacts:!0,worktrees:"native-restore"};launch(e){let r={command:process.env[Dw]?.trim()||"codex",args:Tm(process.env[Fw]),requestTimeoutMs:Number.parseInt(process.env[Lw]??String(rn),10)||rn},n=this.deps.createClient?.(r)??new ji(r.command,r.args,r.requestTimeoutMs),o=new Dn,i=e.resumeSessionId,a,u=e.backendRef?.worktreePath,p=e.backendRef?.worktreeId,d=e.permissionMode??"default",l,m=0,c="",h=[],y,S=new Map,I=new Set,w=ne=>{let W=ne?.trim();if(!W)return;let H=e.originalWorkdir?.trim()||e.cwd.trim();e.worktreeStrategy&&e.worktreeStrategy!=="off"&&W!==H&&Rm(W)&&(u=W,p=Cm(W))},R=()=>{i&&o.enqueue(Fi({kind:"codex-app-server",conversationId:i,...a?{runId:a}:{},...p?{worktreeId:p}:{},...u?{worktreePath:u}:{}}))};n.setNotificationHandler(async(ne,W)=>{let H=ne.trim().toLowerCase(),Re=Ro(W),Ft=Co(W);if(Re.threadId&&i&&Re.threadId!==i)return;if(Re.threadId&&(i=Re.threadId),Re.runId&&(a=Re.runId),w(Ft.cwd),(Re.threadId||Re.runId||Ft.cwd)&&R(),H==="serverrequest/resolved"){l&&(o.enqueue(Fn(l.requestId)),l=void 0);return}if(H==="turn/plan/updated"){let et=Mm(W);c=et.explanation??c,et.steps.length>0&&(h=et.steps);return}if(H==="item/plan/delta"){let et=$m(W);if(et.itemId&&et.delta){let kr=S.get(et.itemId)??"";S.set(et.itemId,`${kr}${et.delta}`)}return}if(H==="item/completed"){let et=Om(W);if(et.text?.trim()){let kr={explanation:c||void 0,steps:h,markdown:et.text.trim()};o.enqueue(qi(kr,!0));return}}let Pe=Em(H,W);if(Pe.mode==="delta"&&Pe.text){Pe.itemId&&I.add(Pe.itemId),o.enqueue(To(Pe.text));return}Pe.mode==="snapshot"&&Pe.text&&(!Pe.itemId||!I.has(Pe.itemId))&&o.enqueue(To(Pe.text)),(H==="turn/completed"||H==="turn/failed"||H==="turn/cancelled")&&y&&(y.method=ne,y.params=W,y.resolve())}),n.setRequestHandler(async(ne,W)=>{if(!Um(ne))return{};let H=Ro(W),Re=Co(W);if(H.threadId&&i&&H.threadId!==i)return{};H.threadId&&(i=H.threadId),H.runId&&(a=H.runId),w(Re.cwd),(H.threadId||H.runId||Re.cwd)&&R();let Ft=H.requestId??`${i??"codex"}-${Date.now().toString(36)}`,Pe=Bm(ne,Ft,W),et=ne.trim().toLowerCase(),kr=Pe.options,Ci=Pe.actions??[],zP=await new Promise(JP=>{l={requestId:Ft,methodLower:et,state:Pe,options:kr,actions:Ci,resolveResponse:JP},o.enqueue(Ni(Pe))});return l=void 0,o.enqueue(Fn(Ft)),zP});let $=async()=>{await n.connect(),await n.request("initialize",{protocolVersion:_w,clientInfo:{name:"openclaw-code-agent",version:"3.1.0"},capabilities:{experimentalApi:!0}},rn),await n.notify("initialized",{})},C=async()=>{let ne=Qu(d,e.codexApprovalPolicy);if(i){let Re=await Eo({client:n,methods:["thread/resume"],payloads:Lm({threadId:i,model:e.model,reasoningEffort:e.reasoningEffort,fastMode:e.fastMode,approvalPolicy:ne.approvalPolicy,sandbox:ne.sandbox}),timeoutMs:rn}),Ft=Co(Re);i=Ft.threadId??i,w(Ft.cwd),R();return}let W=await Eo({client:n,methods:["thread/start","thread/new"],payloads:Fm({cwd:e.cwd,model:e.model,reasoningEffort:e.reasoningEffort,fastMode:e.fastMode,approvalPolicy:ne.approvalPolicy,sandbox:ne.sandbox}),timeoutMs:rn}),H=Co(W);if(i=H.threadId,!i)throw new Error("Codex App Server did not return a thread id.");w(H.cwd),R()},Ie=async ne=>{await C(),o.enqueue(Li()),m+=1,c="",h=[],S.clear(),I.clear();let W="",H,Re,Ft=new Promise(Pe=>{Re=Pe});y={resolve:Re};try{let Pe=Qu(d,e.codexApprovalPolicy),et=await Eo({client:n,methods:["turn/start"],payloads:Nm({threadId:i,prompt:ne,model:e.model,reasoningEffort:e.reasoningEffort,fastMode:e.fastMode,systemPrompt:e.systemPrompt,permissionMode:d,approvalPolicy:Pe.approvalPolicy,sandbox:Pe.sandbox}),timeoutMs:rn}),kr=Ro(et);kr.runId&&(a=kr.runId,R()),await Ft,W=y?.method??"turn/failed",H=y?.params;let Ci=_m(W,H);o.enqueue(tn({success:Ci==="completed",outcome:Ci,duration_ms:0,total_cost_usd:0,num_turns:m,result:Dm(W,H),session_id:i}))}catch(Pe){o.enqueue(tn({success:!1,duration_ms:0,total_cost_usd:0,num_turns:m,result:jm(Pe),session_id:i??""}))}finally{y=void 0}},Sr=async ne=>l?(l.methodLower.includes("requestapproval")?l.resolveResponse({decision:ne.trim()||"decline"}):l.resolveResponse({text:ne.trim()}),!0):!1,or=async ne=>{let W=l;if(!W)return!1;let H=W.actions[ne];if(H?.kind==="approval")return W.resolveResponse({decision:H.responseDecision,...H.proposedExecpolicyAmendment?{proposedExecpolicyAmendment:H.proposedExecpolicyAmendment}:{}}),!0;let Re=W.options[ne];return Re?(W.methodLower.includes("requestapproval")?W.resolveResponse({decision:Re}):W.resolveResponse({option:Re,index:ne}),!0):!1},hm=typeof e.prompt=="string"?(async function*(){yield{type:"user",text:e.prompt,session_id:e.resumeSessionId??""}})():e.prompt;return(async()=>{try{await $();for await(let ne of hm){let W=Nw(ne).trim();!W||await Sr(W)||await Ie(W)}}catch(ne){o.enqueue(tn({success:!1,duration_ms:0,total_cost_usd:0,num_turns:m,result:jm(ne),session_id:i??e.resumeSessionId??""}))}finally{await n.close().catch(()=>{}),o.close()}})(),{messages:o.messages(),async setPermissionMode(ne){d=ne,o.enqueue(Bi(ne))},async submitPendingInputOption(ne){return or(ne)},async submitPendingInputText(ne){return Sr(ne)},async interrupt(){!i||!a||await Eo({client:n,methods:["turn/interrupt"],payloads:qm({threadId:i,turnId:a}),timeoutMs:rn}).catch(()=>{})}}}buildUserMessage(e,r){return{type:"user",text:e,session_id:r}}}});function Gm(t){Yu.set(t.name,t)}function $o(t){let e=Yu.get(t);if(!e)throw new Error(`Unknown agent harness: "${t}". Available: ${[...Yu.keys()].join(", ")}`);return e}function Vm(){return $o(dt())}var Yu,Zu=Be(()=>{bm();Wm();ze();Yu=new Map;Gm(new Ui);Gm(new Vi)});function U(t){return t.backendRef?.conversationId??t.harnessSessionId}function Se(t){return t.id??t.sessionId??t.name??U(t)??t.harnessSessionId}function qw(t){return t.harnessSessionId}function ct(t){let e=[Se(t),U(t),qw(t)].filter(r=>!!r);return[...new Set(e)]}function Xu(t){return t.harnessName??t.persistedHarness??dt()}function Mo(t){if(t.backendRef?.kind==="codex-app-server")return"native-restore";try{return $o(Xu(t)).capabilities.worktrees}catch{return"plugin-managed"}}function ep(t){return t==="native-execution"}function Hi(t){return t==="native-restore"}function Bw(t){return!!(t.backendRef?.worktreePath||t.backendRef?.worktreeId)}function lt(t){let e=Mo(t);return(ep(e)||Hi(e))&&Bw(t)}var Ee=Be(()=>{ze();Zu()});import{execFileSync as We}from"child_process";import*as us from"fs";import{tmpdir as mv}from"os";import{dirname as gc,join as cv}from"path";function fv(t){try{return We("git",["rev-parse","--show-toplevel"],{cwd:t,timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()||void 0}catch{return}}function ps(t){if(process.env.OPENCLAW_WORKTREE_DIR)return process.env.OPENCLAW_WORKTREE_DIR;if(j.worktreeDir)return j.worktreeDir;if(t){let e=fv(t);if(e)return cv(e,".worktrees")}return mv()}function hc(t){return t.replace(/[^a-zA-Z0-9._-]/g,"-").replace(/\.{2,}/g,"-").replace(/^[-.]|[-.]$/g,"").slice(0,100)||"session"}function ds(t){try{let e=We("git",["-C",t,"rev-parse","--git-common-dir"],{cwd:t,timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim();return e&&e.endsWith("/.git")?gc(e):void 0}catch{return}}function gv(){if(ss!==void 0)return ss;try{return We("git",["--version"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),ss=!0,!0}catch{return ss=!1,!1}}function Pr(){if(as!==void 0)return as;try{return We("gh",["--version"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),as=!0,!0}catch{return as=!1,!1}}function sp(t){if(!gv())return!1;try{return We("git",["rev-parse","--git-dir"],{cwd:t,timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),!0}catch{return!1}}function yc(t){try{let e=yv(t);if(!e)return console.warn(`[worktree] Failed to resolve free-space probe path for ${ps(t)}`),!0;let r=us.statfsSync(e),n=r.bavail*r.bsize;return Sv(n)}catch(e){return console.warn(`[worktree] Failed to check free space: ${e instanceof Error?e.message:String(e)}`),!0}}function Fo(t,e){try{return We("git",["-C",t,"rev-parse","--verify",e],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),!0}catch{return!1}}function hv(t){let e=t;for(;;){if(us.existsSync(e))return e;let r=gc(e);if(r===e)return;e=r}}function yv(t){return hv(ps(t))}function Sv(t){return t>=104857600}function wr(t){let e=process.env.OPENCLAW_WORKTREE_BASE_BRANCH?.trim();if(e)return e;try{let n=We("git",["-C",t,"rev-parse","--abbrev-ref","origin/HEAD"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim().replace(/^origin\//,"");if(n)return n}catch{}try{return We("git",["-C",t,"rev-parse","--verify","main"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),"main"}catch{}try{return We("git",["-C",t,"rev-parse","--verify","master"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),"master"}catch{return"main"}}function ls(t){try{let r=We("git",["-C",t,"rev-parse","--abbrev-ref","HEAD"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim();if(r==="HEAD"){console.warn(`[worktree] Worktree ${t} is in detached HEAD state \u2014 cannot determine branch name`);return}return r||void 0}catch{return}}function Lo(t,e,r){try{let n=We("git",["-C",t,"rev-list","--count",`${r}..${e}`],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]});return parseInt(n.trim(),10)>0}catch{return!1}}function Sc(t,e,r){try{let n=We("git",["-C",t,"rev-list","--left-right","--count",`${e}...${r}`],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim(),[o,i]=n.split(/\s+/);return{ahead:parseInt(o??"0",10)||0,behind:parseInt(i??"0",10)||0}}catch{return}}function kc(t,e,r){try{return We("git",["-C",t,"merge-base","--is-ancestor",e,r],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),!0}catch{return!1}}function Ic(t,e,r){try{let n=We("git",["-C",t,"merge-tree","--write-tree",r,e],{timeout:15e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim(),o=We("git",["-C",t,"rev-parse",`${r}^{tree}`],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim();return!!n&&n===o}catch{return!1}}function Jt(t,e){try{return We("git",["-C",t,"branch","-D",e],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),!0}catch(r){return console.warn(`[worktree] Failed to delete branch ${e}: ${r instanceof Error?r.message:String(r)}`),!1}}function xc(t,e){if(e)return e;let r;try{r=We("git",["-C",t,"remote","get-url","origin"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()||void 0}catch{}try{let n=We("git",["-C",t,"remote","get-url","upstream"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim();if(n&&n!==r){let o=n.match(/[:/]([^/]+\/[^/]+?)(?:\.git)?$/);if(o)return o[1]}}catch{}}var ss,as,No=Be(()=>{ze()});import{execFileSync as Un}from"child_process";import{appendFileSync as kv,existsSync as vc,mkdirSync as Pc,readFileSync as Iv,rmSync as ap}from"fs";import{relative as xv,sep as wc}from"path";function Pv(t,e){return!!(t&&typeof t=="object"&&"code"in t&&t.code===e)}function wv(t){try{return Un("git",["-C",t,"rev-parse","--show-toplevel"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()||void 0}catch{return}}function vv(t,e){let r=wv(t);if(!r)return;let n=xv(r,e);if(!n||n.startsWith("..")||n.includes(`..${wc}`))return;let o=`${r}/.git/info/exclude`,i=`${n.split(wc).join("/").replace(/\/$/,"")}/`;try{let a=vc(o)?Iv(o,"utf-8"):"";a.split(/\r?\n/).map(p=>p.trim()).some(p=>p===i||p===`/${i}`)||kv(o,`${a.endsWith(`
6
+ `)||a.length===0?"":`
7
7
  `}${i}
8
- `,"utf-8")}catch(s){console.warn(`[worktree] Failed to add ${i} to ${o}: ${s instanceof Error?s.message:String(s)}`)}}function Pl(t,e,n={}){let r=eg(e),o=rs(t);iI(t,o),sg(o,{recursive:!0});let i=n.allowExistingBranch===!0,s,a,d=10,l=!1;for(let c=0;c<d;c++){let g=c===0?"":`-${Math.random().toString(16).slice(2,6)}`,S=`${o}/openclaw-worktree-${r}${g}`,k=`agent/${r}${g}`;if(!i&&ho(t,k))continue;let I=!1;do{I=!1;try{sg(S,{recursive:!1}),s=S,a=k;break}catch(P){if(rI(P,"EEXIST")){if(i&&c===0&&!l)try{vl(S,{recursive:!0,force:!0}),l=!0,I=!0}catch(b){throw new Error(`Failed to recreate existing worktree branch ${k}: could not clear blocked path ${S}: ${b instanceof Error?b.message:String(b)}`)}else if(i&&c===0)throw new Error(`Failed to recreate existing worktree branch ${k}: path ${S} remains blocked after one cleanup attempt`);continue}throw P}}while(I);if(s&&a)break}if(!s||!a)throw new Error(`Failed to create unique worktree directory and branch after ${d} attempts`);let u=ho(t,a);try{u?yr("git",["-C",t,"worktree","add",s,a],{timeout:15e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}):yr("git",["-C",t,"worktree","add","-b",a,s],{timeout:15e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]})}catch(c){try{vl(s,{recursive:!0,force:!0})}catch{}throw c}return s}function Sr(t){if(!dg(t))return[];try{let e=yr("git",["-C",t,"status","--porcelain","--untracked-files=all"],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim();return e?e.split(`
9
- `).map(n=>n.trim()).filter(Boolean):[]}catch{return[]}}function kr(t){return Sr(t).length>0}function nt(t,e,n={}){let r=n.destructive===!0,o=Sr(e);if(o.length>0&&!r)return console.warn(`[worktree] Refusing implicit cleanup for dirty worktree ${e}: ${o[0]}`),!1;try{return yr("git",["-C",t,"worktree","remove",...r?["--force"]:[],e],{timeout:15e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),!0}catch(i){if(console.warn(`[worktree] git worktree remove failed for ${e}: ${i instanceof Error?i.message:String(i)}`),!r)return!1;try{return vl(e,{recursive:!0,force:!0}),console.info(`[worktree] Fallback rmSync succeeded for ${e}`),!0}catch(s){return console.error(`[worktree] Both git worktree remove and rmSync failed for ${e}: ${s instanceof Error?s.message:String(s)}`),!1}}}function ss(t){try{yr("git",["-C",t,"worktree","prune"],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]})}catch{}}var wl=p(()=>{So()});import{execFileSync as re}from"child_process";import{existsSync as sI}from"fs";function Nn(t,e,n){try{let r=re("git",["-C",t,"rev-list","--count",`${n}..${e}`],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),o=parseInt(r.trim(),10),s=re("git",["-C",t,"diff","--shortstat",`${n}...${e}`],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim(),a=0,d=0,l=0,u=s.match(/(\d+)\s+files?\s+changed/);u&&(a=parseInt(u[1],10));let c=s.match(/(\d+)\s+insertions?\(/);c&&(d=parseInt(c[1],10));let g=s.match(/(\d+)\s+deletions?\(/);g&&(l=parseInt(g[1],10));let k=re("git",["-C",t,"diff","--name-only","--diff-filter=ACMR",`${n}...${e}`],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim().split(`
10
- `).map(b=>b.trim()).filter(Boolean),P=re("git",["-C",t,"log",`${n}..${e}`,"--format=%h|%s|%an","-n","5"],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim().split(`
11
- `).filter(Boolean).map(b=>{let[A,T,C]=b.split("|");return{hash:A||"",message:T||"",author:C||""}});return{commits:o,filesChanged:a,insertions:d,deletions:l,changedFiles:k,commitMessages:P}}catch(r){console.warn(`[worktree] Failed to get diff summary: ${r instanceof Error?r.message:String(r)}`);return}}function as(t,e,n="origin"){try{return re("git",["-C",t,"push",n,e],{timeout:6e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),!0}catch(r){return console.warn(`[worktree] Failed to push branch ${e}: ${r instanceof Error?r.message:String(r)}`),!1}}function lg(t){try{return re("git",["-C",t,"status","--porcelain"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).split(`
12
- `).some(n=>n.length>0&&!n.startsWith("??")&&!n.startsWith("!!"))}catch{return!1}}function ds(t,e,n,r="merge",o){let i=!1,s,a=d=>{if(i)try{re("git",["-C",d,"stash","pop"],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]})}catch{}};try{if(r==="squash"){if(re("git",["-C",t,"checkout",n],{timeout:15e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),lg(t)){let g;try{g=re("git",["-C",t,"stash","push","-m",`pre-merge stash before ${e}`],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]})}catch(S){return{success:!1,dirtyError:!0,error:`Auto-stash failed: ${S instanceof Error?S.message:String(S)}. Commit or stash changes manually, then retry.`}}if(!g.includes("No local changes to save")){i=!0;try{s=re("git",["-C",t,"stash","list","--format=%gd","-n","1"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()||void 0}catch{}}}re("git",["-C",t,"merge","--squash",e],{timeout:3e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),re("git",["-C",t,"commit","-m",`Squash merge ${e}`],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]});let c=!1;if(i)try{re("git",["-C",t,"stash","pop"],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]})}catch{c=!0}return{success:!0,stashed:i||void 0,stashRef:s,stashPopConflict:c||void 0}}let d=o&&sI(o),l=d?o:t;if(d||re("git",["-C",t,"checkout",e],{timeout:15e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),lg(t)){let c;try{c=re("git",["-C",t,"stash","push","-m",`pre-merge stash before ${e}`],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]})}catch(g){try{re("git",["-C",t,"checkout",n],{timeout:15e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]})}catch{}return{success:!1,dirtyError:!0,error:`Auto-stash failed: ${g instanceof Error?g.message:String(g)}. Commit or stash changes manually, then retry.`}}if(!c.includes("No local changes to save")){i=!0;try{s=re("git",["-C",t,"stash","list","--format=%gd","-n","1"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()||void 0}catch{}}}try{re("git",["-C",l,"rebase",n],{timeout:6e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]})}catch{try{re("git",["-C",l,"rebase","--abort"],{timeout:15e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]})}catch{}try{re("git",["-C",t,"checkout",n],{timeout:15e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]})}catch{}return a(t),{success:!1,rebaseConflict:!0,stashed:i||void 0,stashRef:s,error:[`Rebase of ${e} onto ${n} hit conflicts.`,"To resolve manually:",` cd ${l}`,` git rebase ${n}`," # resolve conflicts in each file, then:"," git add <file>"," git rebase --continue"," # repeat until rebase finishes, then re-run agent_merge."].join(`
13
- `)}}re("git",["-C",t,"checkout",n],{timeout:15e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),re("git",["-C",t,"merge","--ff-only",e],{timeout:3e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]});let u=!1;if(i)try{re("git",["-C",t,"stash","pop"],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]})}catch{u=!0}return{success:!0,fastForward:!0,stashed:i||void 0,stashRef:s,stashPopConflict:u||void 0}}catch(d){try{re("git",["-C",t,"checkout",n],{timeout:15e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]})}catch{}return a(t),{success:!1,error:d instanceof Error?d.message:String(d),stashed:i||void 0,stashRef:s}}}var ug=p(()=>{});import{execFileSync as ls}from"child_process";function pg(t,e,n,r,o,i){if(!un())return{success:!1,error:"GitHub CLI (gh) is not available"};try{let s;if(i)try{let c=ls("git",["-C",t,"remote","get-url","origin"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim().match(/[:/]([^/]+)\/[^/]+(?:\.git)?$/);c&&(s=c[1])}catch{}let a=["pr","create","--base",n];return i&&a.push("--repo",i),s?a.push("--head",`${s}:${e}`):a.push("--head",e),r&&o?a.push("--title",r,"--body",o):a.push("--fill-verbose"),{success:!0,prUrl:ls("gh",a,{cwd:t,timeout:3e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()}}catch(s){return{success:!1,error:s instanceof Error?s.message:String(s)}}}function ko(t,e,n){if(!un())return{exists:!1,state:"none"};try{let r=["pr","list","--head",e,"--state","all","--json","url,number,title,state","--jq",".[0]"];n&&r.push("--repo",n);let i=ls("gh",r,{cwd:t,timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim();if(!i)return{exists:!1,state:"none"};let s=JSON.parse(i),a=s.state.toLowerCase();return{exists:!0,state:a==="open"?"open":a==="merged"?"merged":a==="closed"?"closed":"none",url:s.url,number:s.number,title:s.title}}catch(r){return console.warn(`[worktree] Failed to sync PR status for ${e}: ${r instanceof Error?r.message:String(r)}`),{exists:!1,state:"none"}}}function cg(t,e,n,r){if(!un())return!1;try{let o=["pr","comment",String(e),"--body",n];return r&&o.push("--repo",r),ls("gh",o,{cwd:t,timeout:3e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),!0}catch(o){return console.warn(`[worktree] Failed to comment on PR #${e}: ${o instanceof Error?o.message:String(o)}`),!1}}function Fn(t){if(t.kind==="merge"){let e=t.filesChanged!==void 0?` (${t.filesChanged} files, +${t.insertions??0}/-${t.deletions??0})`:"";return`\u2705 Merged: ${t.branch} \u2192 ${t.base??"main"}${e}`}return t.kind==="pr-updated"?`\u2705 PR updated: ${t.prUrl??""}`:t.targetRepo?`\u2705 PR opened against ${t.targetRepo}: ${t.prUrl??""}`:`\u2705 PR opened: ${t.prUrl??""}`}var Il=p(()=>{So()});import{existsSync as bl}from"fs";function mg(){return new Date().toISOString()}function aI(t){return t.worktreeLifecycle??{state:t.worktreePath||t.worktreeBranch?"provisioned":"none",updatedAt:mg(),baseBranch:t.worktreeBaseBranch,targetRepo:t.worktreePrTargetRepo,pushRemote:t.worktreePushRemote}}function dI(t){return t.worktreeLifecycle?.baseBranch??t.worktreeBaseBranch??(bl(t.workdir)?pn(t.workdir):void 0)}function Ln(t,e={}){let n=aI(t),r=mg(),o=new Set,i=bl(t.workdir),s=!!(t.worktreePath&&bl(t.worktreePath)),a=t.worktreeBranch,d=dI(t),l=!1,u=!1,c=!1,g=!1,S,k,I=t.worktreePrUrl?"open":"none",P=t.worktreePrUrl,b=t.worktreePrNumber;if(i||o.add("repo_missing"),a||o.add("branch_missing"),!s&&t.worktreePath&&o.add("worktree_missing"),e.activeSession&&o.add("active_session"),n.state==="pending_decision"&&o.add("pending_decision"),n.state==="merge_conflict_resolving"&&o.add("merge_conflict_resolving"),i&&a&&(l=ho(t.workdir,a),l||o.add("branch_missing")),s&&t.worktreePath&&(u=kr(t.worktreePath),u&&o.add("dirty_worktree_entries")),i&&l&&d){let Dt=ng(t.workdir,a,d);S=Dt?.ahead,k=Dt?.behind,c=rg(t.workdir,a,d),c?o.add("topology_merged"):(g=og(t.workdir,a,d),g&&o.add("merge_noop_content_already_on_base"),!g&&(S??0)>0&&o.add("unique_content"))}else d||o.add("base_branch_missing");if(e.includePrSync&&i&&a){let Dt=ko(t.workdir,a,t.worktreePrTargetRepo??n.targetRepo);I=Dt.state,P=Dt.url??P,b=Dt.number??b}I==="open"&&o.add("pr_open"),I==="merged"&&!c&&!g&&o.add("pr_merged_not_reflected_locally");let A=n.state;c?A="merged":g?A="released":!l&&n.state==="pending_decision"&&(A="cleanup_failed");let T=A==="merged"||A==="released",C=e.activeSession||u||!T&&n.state==="pending_decision"||n.state==="merge_conflict_resolving"||n.state==="pr_open"||I==="open"||o.has("pr_merged_not_reflected_locally"),ye=!C&&(A==="merged"||A==="released"||n.state==="dismissed"||n.state==="no_change"),Ht={checkedAt:r,repoExists:i,branchExists:l,worktreeExists:s,activeSession:e.activeSession===!0,dirtyTracked:u,topologyMerged:c,releaseNoopMerge:g,branchAheadCount:S,baseAheadCount:k,prState:I,prUrl:P,prNumber:b,reasons:[...o]};return{lifecycle:n,evidence:Ht,derivedState:A,cleanupSafe:ye,preserve:C,reasons:[...o]}}var vo=p(()=>{So();Il();wl()});var rt=p(()=>{So();wl();ug();Il();vo()});function vr(t,e){let n=t.resolve(e),r=t.getPersistedSession(e),o=n?ne(n):r?ne(r):void 0;return{activeSession:n,persistedSession:r,persistedRef:o,sessionName:n?.name??r?.name??e,worktreePath:n?.worktreePath??r?.worktreePath,originalWorkdir:n?.originalWorkdir??r?.workdir,branchName:n?.worktreeBranch??r?.worktreeBranch,notificationTarget:n??(r?{id:o??e,name:r.name,harnessSessionId:r.harnessSessionId,backendRef:r.backendRef,route:r.route,originChannel:r.originChannel,originThreadId:r.originThreadId,originSessionKey:r.originSessionKey}:void 0)}}function Cg(t){return t.persistedSession?Ge(t.persistedSession):[]}function VI(t,e){let n=[e.id,e.backendConversationId,e.harnessSessionId,e.name],r,o;for(let i of n)if(i&&(r??=t.resolve(i),o??=t.getPersistedSession(i),r&&o))break;return{activeSession:r,persistedSession:o}}function Ss(t,e,n={}){let{activeSession:r,persistedSession:o}=VI(t,e),i=Ln({workdir:e.workdir,worktreePath:e.worktreePath,worktreeBranch:e.worktreeBranch,worktreeBaseBranch:n.baseBranch??o?.worktreeBaseBranch,worktreePrTargetRepo:o?.worktreePrTargetRepo,worktreePushRemote:o?.worktreePushRemote,worktreePrUrl:o?.worktreePrUrl,worktreePrNumber:o?.worktreePrNumber,worktreeLifecycle:o?.worktreeLifecycle},{activeSession:!!(r&&(r.status==="starting"||r.status==="running")),includePrSync:!!(o?.worktreeLifecycle?.state==="pr_open"||o?.worktreePrUrl)});return{activeSession:r,persistedSession:o,resolvedLifecycle:i}}function ks(t){let e=t.list("all").filter(o=>o.worktreePath),n=t.listPersistedSessions().filter(o=>o.worktreePath),r=new Map;for(let o of n){if(!o.worktreePath)continue;let i=_(o),s=o.sessionId??i??o.harnessSessionId;s&&r.set(s,{id:o.sessionId??i??o.harnessSessionId,name:o.name,worktreePath:o.worktreePath,worktreeBranch:o.worktreeBranch,worktreeStrategy:o.worktreeStrategy,workdir:o.workdir,worktreeMerged:o.worktreeMerged,worktreeMergedAt:o.worktreeMergedAt,worktreePrUrl:o.worktreePrUrl,backendConversationId:i,harnessSessionId:o.harnessSessionId})}for(let o of e)o.worktreePath&&r.set(o.id,{id:o.id,name:o.name,worktreePath:o.worktreePath,worktreeBranch:o.worktreeBranch,worktreeStrategy:o.worktreeStrategy,workdir:o.originalWorkdir??o.workdir,worktreeMerged:void 0,worktreeMergedAt:void 0,worktreePrUrl:void 0,backendConversationId:_(o),harnessSessionId:o.harnessSessionId});return Array.from(r.values())}function vs(t,e){return t.id===e||t.name===e||t.backendConversationId===e||t.harnessSessionId===e}function Bn(t){switch(t){case"none":return"none";case"provisioned":return"active";case"pending_decision":return"needs decision";case"merge_conflict_resolving":return"conflict resolving";case"pr_open":return"pr open";case"merged":return"merged";case"released":return"released";case"dismissed":return"dismissed";case"no_change":return"no change";case"cleanup_failed":return"cleanup failed";default:return t}}function Ps(t){switch(t){case"active_session":return"active session";case"pending_decision":return"pending decision";case"merge_conflict_resolving":return"conflict resolving";case"dirty_tracked_changes":case"dirty_worktree_entries":return"dirty worktree";case"unique_content":return"still has unique content";case"topology_merged":return"merged by ancestry";case"merge_noop_content_already_on_base":return"content already on base";case"pr_open":return"PR open";case"pr_merged_not_reflected_locally":return"merged PR not reflected locally";case"repo_missing":return"repo missing";case"branch_missing":return"branch missing";case"worktree_missing":return"worktree missing";case"base_branch_missing":return"base branch missing";default:return t.replaceAll("_"," ")}}var wo=p(()=>{he();vo()});var _g={};Eo(_g,{buildPrOutcomeDetailLines:()=>El,makeAgentPrTool:()=>Io});import{existsSync as GI}from"fs";function HI(t){return!t||typeof t!="object"?!1:typeof t.session=="string"}function El(t){return[t.action==="opened"?`Opened PR for branch ${t.branchName} into ${t.baseBranch}.`:`Updated PR for branch ${t.branchName} into ${t.baseBranch}.`,...t.prUrl?[`PR URL: ${t.prUrl}.`]:[],...t.prNumber?[`PR number: #${t.prNumber}.`]:[],...t.targetRepo?[`Target repository: ${t.targetRepo}.`]:[],...t.commits!==void 0?[`Pushed ${t.commits} new commits (+${t.insertions??0}/-${t.deletions??0}).`]:[]]}function Io(t){return{name:"agent_pr",description:"Create or update a GitHub PR for a worktree branch. Handles full PR lifecycle: creates new PRs, updates existing open PRs with comments, and handles merged/closed PRs. Pushes the branch, syncs PR state, and persists metadata.",parameters:m.Object({session:m.String({description:"Session name or ID to create/update PR for"}),title:m.Optional(m.String({description:"PR title (default: auto-generated from session name)"})),body:m.Optional(m.String({description:"PR body (default: auto-generated from commit summary)"})),base_branch:m.Optional(m.String({description:"Base branch for the PR (default: detected from repo)"})),force_new:m.Optional(m.Boolean({description:"Force creation of a new PR even if one exists (default: false)"})),target_repo:m.Optional(m.String({description:"Target repository for cross-repo PRs (e.g. 'openai/codex'). Auto-detected from 'upstream' remote if not set."}))}),async execute(e,n){if(!v)return{content:[{type:"text",text:"Error: SessionManager not initialized. The code-agent service must be running."}],meta:{success:!1,state:"error"}};if(!HI(n))return{content:[{type:"text",text:"Error: Invalid parameters. Expected { session, title?, body?, base_branch?, force_new? }."}],meta:{success:!1,state:"error"}};if(!un())return{content:[{type:"text",text:"Error: GitHub CLI (gh) is not available. Install it and authenticate to create PRs."}],meta:{success:!1,state:"error"}};let r=vr(v,n.session),o=r.activeSession,i=r.persistedSession;if(!o&&!i)return{content:[{type:"text",text:`Error: Session "${n.session}" not found.`}],meta:{success:!1,state:"error"}};let{worktreePath:s,originalWorkdir:a,sessionName:d,branchName:l}=r;if(!s||!a)return{content:[{type:"text",text:`Error: Session "${n.session}" does not have a worktree.`}],meta:{success:!1,state:"error"}};if(!l)return{content:[{type:"text",text:`Error: Cannot determine branch name for worktree ${s}. The worktree may have been removed and no persisted branch name is available.`}],meta:{success:!1,state:"error"}};GI(s)||console.info(`[agent_pr] Worktree directory ${s} no longer exists; proceeding with branch "${l}" via originalWorkdir (${a})`);let u=n.base_branch??pn(a),c=r.persistedRef,g=ig(a,n.target_repo??i?.worktreePrTargetRepo);if(!as(a,l))return{content:[{type:"text",text:`\u274C Failed to push ${l} \u2014 cannot create/update PR`}],meta:{success:!1,state:"error"}};let S=ko(a,l,g);if(n.force_new&&S.exists)return{content:[{type:"text",text:`\u26A0\uFE0F Cannot create new PR: A PR already exists for ${l} (${S.state}).
8
+ `,"utf-8")}catch(a){console.warn(`[worktree] Failed to add ${i} to ${o}: ${a instanceof Error?a.message:String(a)}`)}}function up(t,e,r={}){let n=hc(e),o=ps(t);vv(t,o),Pc(o,{recursive:!0});let i=r.allowExistingBranch===!0,a,u,p=10,d=!1;for(let m=0;m<p;m++){let c=m===0?"":`-${Math.random().toString(16).slice(2,6)}`,h=`${o}/openclaw-worktree-${n}${c}`,y=`agent/${n}${c}`;if(!i&&Fo(t,y))continue;let S=!1;do{S=!1;try{Pc(h,{recursive:!1}),a=h,u=y;break}catch(I){if(Pv(I,"EEXIST")){if(i&&m===0&&!d)try{ap(h,{recursive:!0,force:!0}),d=!0,S=!0}catch(w){throw new Error(`Failed to recreate existing worktree branch ${y}: could not clear blocked path ${h}: ${w instanceof Error?w.message:String(w)}`)}else if(i&&m===0)throw new Error(`Failed to recreate existing worktree branch ${y}: path ${h} remains blocked after one cleanup attempt`);continue}throw I}}while(S);if(a&&u)break}if(!a||!u)throw new Error(`Failed to create unique worktree directory and branch after ${p} attempts`);let l=Fo(t,u);try{l?Un("git",["-C",t,"worktree","add",a,u],{timeout:15e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}):Un("git",["-C",t,"worktree","add","-b",u,a],{timeout:15e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]})}catch(m){try{ap(a,{recursive:!0,force:!0})}catch{}throw m}return a}function Kn(t){if(!vc(t))return[];try{let e=Un("git",["-C",t,"status","--porcelain","--untracked-files=all"],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim();return e?e.split(`
9
+ `).map(r=>r.trim()).filter(Boolean):[]}catch{return[]}}function jn(t){return Kn(t).length>0}function kt(t,e,r={}){let n=r.destructive===!0,o=Kn(e);if(o.length>0&&!n)return console.warn(`[worktree] Refusing implicit cleanup for dirty worktree ${e}: ${o[0]}`),!1;try{return Un("git",["-C",t,"worktree","remove",...n?["--force"]:[],e],{timeout:15e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),!0}catch(i){if(console.warn(`[worktree] git worktree remove failed for ${e}: ${i instanceof Error?i.message:String(i)}`),!n)return!1;try{return ap(e,{recursive:!0,force:!0}),console.info(`[worktree] Fallback rmSync succeeded for ${e}`),!0}catch(a){return console.error(`[worktree] Both git worktree remove and rmSync failed for ${e}: ${a instanceof Error?a.message:String(a)}`),!1}}}function ms(t){try{Un("git",["-C",t,"worktree","prune"],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]})}catch{}}var pp=Be(()=>{No()});import{execFileSync as ke}from"child_process";import{existsSync as bv}from"fs";function sn(t,e,r){try{let n=ke("git",["-C",t,"rev-list","--count",`${r}..${e}`],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),o=parseInt(n.trim(),10),a=ke("git",["-C",t,"diff","--shortstat",`${r}...${e}`],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim(),u=0,p=0,d=0,l=a.match(/(\d+)\s+files?\s+changed/);l&&(u=parseInt(l[1],10));let m=a.match(/(\d+)\s+insertions?\(/);m&&(p=parseInt(m[1],10));let c=a.match(/(\d+)\s+deletions?\(/);c&&(d=parseInt(c[1],10));let y=ke("git",["-C",t,"diff","--name-only","--diff-filter=ACMR",`${r}...${e}`],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim().split(`
10
+ `).map(w=>w.trim()).filter(Boolean),I=ke("git",["-C",t,"log",`${r}..${e}`,"--format=%h|%s|%an","-n","5"],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim().split(`
11
+ `).filter(Boolean).map(w=>{let[R,$,C]=w.split("|");return{hash:R||"",message:$||"",author:C||""}});return{commits:o,filesChanged:u,insertions:p,deletions:d,changedFiles:y,commitMessages:I}}catch(n){console.warn(`[worktree] Failed to get diff summary: ${n instanceof Error?n.message:String(n)}`);return}}function cs(t,e,r="origin"){try{return ke("git",["-C",t,"push",r,e],{timeout:6e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),!0}catch(n){return console.warn(`[worktree] Failed to push branch ${e}: ${n instanceof Error?n.message:String(n)}`),!1}}function bc(t){try{return ke("git",["-C",t,"status","--porcelain"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).split(`
12
+ `).some(r=>r.length>0&&!r.startsWith("??")&&!r.startsWith("!!"))}catch{return!1}}function fs(t,e,r,n="merge",o){let i=!1,a,u=p=>{if(i)try{ke("git",["-C",p,"stash","pop"],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]})}catch{}};try{if(n==="squash"){if(ke("git",["-C",t,"checkout",r],{timeout:15e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),bc(t)){let c;try{c=ke("git",["-C",t,"stash","push","-m",`pre-merge stash before ${e}`],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]})}catch(h){return{success:!1,dirtyError:!0,error:`Auto-stash failed: ${h instanceof Error?h.message:String(h)}. Commit or stash changes manually, then retry.`}}if(!c.includes("No local changes to save")){i=!0;try{a=ke("git",["-C",t,"stash","list","--format=%gd","-n","1"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()||void 0}catch{}}}ke("git",["-C",t,"merge","--squash",e],{timeout:3e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),ke("git",["-C",t,"commit","-m",`Squash merge ${e}`],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]});let m=!1;if(i)try{ke("git",["-C",t,"stash","pop"],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]})}catch{m=!0}return{success:!0,stashed:i||void 0,stashRef:a,stashPopConflict:m||void 0}}let p=o&&bv(o),d=p?o:t;if(p||ke("git",["-C",t,"checkout",e],{timeout:15e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),bc(t)){let m;try{m=ke("git",["-C",t,"stash","push","-m",`pre-merge stash before ${e}`],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]})}catch(c){try{ke("git",["-C",t,"checkout",r],{timeout:15e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]})}catch{}return{success:!1,dirtyError:!0,error:`Auto-stash failed: ${c instanceof Error?c.message:String(c)}. Commit or stash changes manually, then retry.`}}if(!m.includes("No local changes to save")){i=!0;try{a=ke("git",["-C",t,"stash","list","--format=%gd","-n","1"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()||void 0}catch{}}}try{ke("git",["-C",d,"rebase",r],{timeout:6e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]})}catch{try{ke("git",["-C",d,"rebase","--abort"],{timeout:15e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]})}catch{}try{ke("git",["-C",t,"checkout",r],{timeout:15e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]})}catch{}return u(t),{success:!1,rebaseConflict:!0,stashed:i||void 0,stashRef:a,error:[`Rebase of ${e} onto ${r} hit conflicts.`,"To resolve manually:",` cd ${d}`,` git rebase ${r}`," # resolve conflicts in each file, then:"," git add <file>"," git rebase --continue"," # repeat until rebase finishes, then re-run agent_merge."].join(`
13
+ `)}}ke("git",["-C",t,"checkout",r],{timeout:15e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),ke("git",["-C",t,"merge","--ff-only",e],{timeout:3e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]});let l=!1;if(i)try{ke("git",["-C",t,"stash","pop"],{timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]})}catch{l=!0}return{success:!0,fastForward:!0,stashed:i||void 0,stashRef:a,stashPopConflict:l||void 0}}catch(p){try{ke("git",["-C",t,"checkout",r],{timeout:15e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]})}catch{}return u(t),{success:!1,error:p instanceof Error?p.message:String(p),stashed:i||void 0,stashRef:a}}}var Ac=Be(()=>{});import{execFileSync as gs}from"child_process";function Tc(t,e,r,n,o,i){if(!Pr())return{success:!1,error:"GitHub CLI (gh) is not available"};try{let a;if(i)try{let m=gs("git",["-C",t,"remote","get-url","origin"],{timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim().match(/[:/]([^/]+)\/[^/]+(?:\.git)?$/);m&&(a=m[1])}catch{}let u=["pr","create","--base",r];return i&&u.push("--repo",i),a?u.push("--head",`${a}:${e}`):u.push("--head",e),n&&o?u.push("--title",n,"--body",o):u.push("--fill-verbose"),{success:!0,prUrl:gs("gh",u,{cwd:t,timeout:3e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()}}catch(a){return{success:!1,error:a instanceof Error?a.message:String(a)}}}function qo(t,e,r){if(!Pr())return{exists:!1,state:"none"};try{let n=["pr","list","--head",e,"--state","all","--json","url,number,title,state","--jq",".[0]"];r&&n.push("--repo",r);let i=gs("gh",n,{cwd:t,timeout:1e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim();if(!i)return{exists:!1,state:"none"};let a=JSON.parse(i),u=a.state.toLowerCase();return{exists:!0,state:u==="open"?"open":u==="merged"?"merged":u==="closed"?"closed":"none",url:a.url,number:a.number,title:a.title}}catch(n){return console.warn(`[worktree] Failed to sync PR status for ${e}: ${n instanceof Error?n.message:String(n)}`),{exists:!1,state:"none"}}}function Rc(t,e,r,n){if(!Pr())return!1;try{let o=["pr","comment",String(e),"--body",r];return n&&o.push("--repo",n),gs("gh",o,{cwd:t,timeout:3e4,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}),!0}catch(o){return console.warn(`[worktree] Failed to comment on PR #${e}: ${o instanceof Error?o.message:String(o)}`),!1}}function an(t){if(t.kind==="merge"){let e=t.filesChanged!==void 0?` (${t.filesChanged} files, +${t.insertions??0}/-${t.deletions??0})`:"";return`\u2705 Merged: ${t.branch} \u2192 ${t.base??"main"}${e}`}return t.kind==="pr-updated"?`\u2705 PR updated: ${t.prUrl??""}`:t.targetRepo?`\u2705 PR opened against ${t.targetRepo}: ${t.prUrl??""}`:`\u2705 PR opened: ${t.prUrl??""}`}var dp=Be(()=>{No()});import{existsSync as lp}from"fs";function Cc(){return new Date().toISOString()}function Av(t){return t.worktreeLifecycle??{state:t.worktreePath||t.worktreeBranch?"provisioned":"none",updatedAt:Cc(),baseBranch:t.worktreeBaseBranch,targetRepo:t.worktreePrTargetRepo,pushRemote:t.worktreePushRemote}}function Tv(t){return t.worktreeLifecycle?.baseBranch??t.worktreeBaseBranch??(lp(t.workdir)?wr(t.workdir):void 0)}function un(t,e={}){let r=Av(t),n=Cc(),o=new Set,i=lp(t.workdir),a=!!(t.worktreePath&&lp(t.worktreePath)),u=t.worktreeBranch,p=Tv(t),d=!1,l=!1,m=!1,c=!1,h,y,S=t.worktreePrUrl?"open":"none",I=t.worktreePrUrl,w=t.worktreePrNumber;if(i||o.add("repo_missing"),u||o.add("branch_missing"),!a&&t.worktreePath&&o.add("worktree_missing"),e.activeSession&&o.add("active_session"),r.state==="pending_decision"&&o.add("pending_decision"),r.state==="merge_conflict_resolving"&&o.add("merge_conflict_resolving"),i&&u&&(d=Fo(t.workdir,u),d||o.add("branch_missing")),a&&t.worktreePath&&(l=jn(t.worktreePath),l&&o.add("dirty_worktree_entries")),i&&d&&p){let or=Sc(t.workdir,u,p);h=or?.ahead,y=or?.behind,m=kc(t.workdir,u,p),m?o.add("topology_merged"):(c=Ic(t.workdir,u,p),c&&o.add("merge_noop_content_already_on_base"),!c&&(h??0)>0&&o.add("unique_content"))}else p||o.add("base_branch_missing");if(e.includePrSync&&i&&u){let or=qo(t.workdir,u,t.worktreePrTargetRepo??r.targetRepo);S=or.state,I=or.url??I,w=or.number??w}S==="open"&&o.add("pr_open"),S==="merged"&&!m&&!c&&o.add("pr_merged_not_reflected_locally");let R=r.state;m?R="merged":c?R="released":!d&&r.state==="pending_decision"&&(R="cleanup_failed");let $=R==="merged"||R==="released",C=e.activeSession||l||!$&&r.state==="pending_decision"||r.state==="merge_conflict_resolving"||r.state==="pr_open"||S==="open"||o.has("pr_merged_not_reflected_locally"),Ie=!C&&(R==="merged"||R==="released"||r.state==="dismissed"||r.state==="no_change"),Sr={checkedAt:n,repoExists:i,branchExists:d,worktreeExists:a,activeSession:e.activeSession===!0,dirtyTracked:l,topologyMerged:m,releaseNoopMerge:c,branchAheadCount:h,baseAheadCount:y,prState:S,prUrl:I,prNumber:w,reasons:[...o]};return{lifecycle:r,evidence:Sr,derivedState:R,cleanupSafe:Ie,preserve:C,reasons:[...o]}}var Bo=Be(()=>{No();dp();pp()});var It=Be(()=>{No();pp();Ac();dp();Bo()});function Wn(t,e){let r=t.resolve(e),n=t.getPersistedSession(e),o=r?Se(r):n?Se(n):void 0;return{activeSession:r,persistedSession:n,persistedRef:o,sessionName:r?.name??n?.name??e,prompt:r?.prompt??n?.prompt,worktreePath:r?.worktreePath??n?.worktreePath,originalWorkdir:r?.originalWorkdir??n?.workdir,branchName:r?.worktreeBranch??n?.worktreeBranch,notificationTarget:r??(n?{id:o??e,name:n.name,harnessSessionId:n.harnessSessionId,backendRef:n.backendRef,route:n.route,originChannel:n.originChannel,originThreadId:n.originThreadId,originSessionKey:n.originSessionKey}:void 0)}}function Vc(t){return t.persistedSession?ct(t.persistedSession):[]}function db(t,e){let r=[e.id,e.backendConversationId,e.harnessSessionId,e.name],n,o;for(let i of r)if(i&&(n??=t.resolve(i),o??=t.getPersistedSession(i),n&&o))break;return{activeSession:n,persistedSession:o}}function bs(t,e,r={}){let{activeSession:n,persistedSession:o}=db(t,e),i=un({workdir:e.workdir,worktreePath:e.worktreePath,worktreeBranch:e.worktreeBranch,worktreeBaseBranch:r.baseBranch??o?.worktreeBaseBranch,worktreePrTargetRepo:o?.worktreePrTargetRepo,worktreePushRemote:o?.worktreePushRemote,worktreePrUrl:o?.worktreePrUrl,worktreePrNumber:o?.worktreePrNumber,worktreeLifecycle:o?.worktreeLifecycle},{activeSession:!!(n&&(n.status==="starting"||n.status==="running")),includePrSync:!!(o?.worktreeLifecycle?.state==="pr_open"||o?.worktreePrUrl)});return{activeSession:n,persistedSession:o,resolvedLifecycle:i}}function As(t){let e=t.list("all").filter(o=>o.worktreePath),r=t.listPersistedSessions().filter(o=>o.worktreePath),n=new Map;for(let o of r){if(!o.worktreePath)continue;let i=U(o),a=o.sessionId??i??o.harnessSessionId;a&&n.set(a,{id:o.sessionId??i??o.harnessSessionId,name:o.name,worktreePath:o.worktreePath,worktreeBranch:o.worktreeBranch,worktreeStrategy:o.worktreeStrategy,workdir:o.workdir,worktreeMerged:o.worktreeMerged,worktreeMergedAt:o.worktreeMergedAt,worktreePrUrl:o.worktreePrUrl,backendConversationId:i,harnessSessionId:o.harnessSessionId})}for(let o of e)o.worktreePath&&n.set(o.id,{id:o.id,name:o.name,worktreePath:o.worktreePath,worktreeBranch:o.worktreeBranch,worktreeStrategy:o.worktreeStrategy,workdir:o.originalWorkdir??o.workdir,worktreeMerged:void 0,worktreeMergedAt:void 0,worktreePrUrl:void 0,backendConversationId:U(o),harnessSessionId:o.harnessSessionId});return Array.from(n.values())}function Ts(t,e){return t.id===e||t.name===e||t.backendConversationId===e||t.harnessSessionId===e}function dn(t){switch(t){case"none":return"none";case"provisioned":return"active";case"pending_decision":return"needs decision";case"merge_conflict_resolving":return"conflict resolving";case"pr_open":return"pr open";case"merged":return"merged";case"released":return"released";case"dismissed":return"dismissed";case"no_change":return"no change";case"cleanup_failed":return"cleanup failed";default:return t}}function Rs(t){switch(t){case"active_session":return"active session";case"pending_decision":return"pending decision";case"merge_conflict_resolving":return"conflict resolving";case"dirty_tracked_changes":case"dirty_worktree_entries":return"dirty worktree";case"unique_content":return"still has unique content";case"topology_merged":return"merged by ancestry";case"merge_noop_content_already_on_base":return"content already on base";case"pr_open":return"PR open";case"pr_merged_not_reflected_locally":return"merged PR not reflected locally";case"repo_missing":return"repo missing";case"branch_missing":return"branch missing";case"worktree_missing":return"worktree missing";case"base_branch_missing":return"base branch missing";default:return t.replaceAll("_"," ")}}var Ko=Be(()=>{Ee();Bo()});var tf={};Tt(tf,{buildPrMetadata:()=>Xc,buildPrOutcomeDetailLines:()=>kp,formatPrBody:()=>ef,makeAgentPrTool:()=>Wo});import{existsSync as cb}from"fs";function fb(t){return!t||typeof t!="object"?!1:typeof t.session=="string"}function kp(t){return[t.action==="opened"?`Opened PR for branch ${t.branchName} into ${t.baseBranch}.`:`Updated PR for branch ${t.branchName} into ${t.baseBranch}.`,...t.prUrl?[`PR URL: ${t.prUrl}.`]:[],...t.prNumber?[`PR number: #${t.prNumber}.`]:[],...t.targetRepo?[`Target repository: ${t.targetRepo}.`]:[],...t.commits!==void 0?[`Pushed ${t.commits} new commits (+${t.insertions??0}/-${t.deletions??0}).`]:[]]}function Yc(t,e={preserveBlankLines:!0}){return t?.replace(/\r\n/g,`
14
+ `).split(`
15
+ `).map(n=>n.trim()).reduce((n,o)=>o?(n.push(o),n):(e.preserveBlankLines&&n[n.length-1]!==""&&n.push(o),n),[]).join(e.preserveBlankLines?`
16
+ `:" ").replace(/[ \t]+/g," ").trim()||void 0}function gb(t,e){return t.length<=e?t:`${t.slice(0,Math.max(0,e-3)).trimEnd()}...`}function Ip(t){return t.replace(/\b[A-Za-z0-9_-]*(?:api[_-]?key|token|secret|password|passwd|pwd|credential|credentials|authorization|auth)[A-Za-z0-9_-]*\b\s*[:=]\s*["']?[^"'\s,;)]+/gi,"[redacted credential]").replace(/\b(?:api key|token|secret|password|credential|credentials)\s+\[redacted credential\]/gi,"[redacted credential]").replace(/\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9_]{16,}\b/g,"[redacted token]").replace(/\bgithub_pat_[A-Za-z0-9_]{20,}\b/g,"[redacted token]").replace(/\bsk-[A-Za-z0-9_-]{20,}\b/g,"[redacted token]").replace(/\bxox[baprs]-[A-Za-z0-9-]{20,}\b/g,"[redacted token]").replace(/\bAKIA[0-9A-Z]{16}\b/g,"[redacted token]").replace(/\beyJ[A-Za-z0-9_-]{20,}\.[A-Za-z0-9_-]{20,}\.[A-Za-z0-9_-]{10,}\b/g,"[redacted token]").replace(/\bhttps?:\/\/\S+/gi,"[redacted link]").replace(/\b[A-Z]:\\(?:Users|Documents and Settings)\\[^\s`'")]+/gi,"[redacted path]").replace(/(?:^|[\s(])\/(?:home|Users|var|etc|private|tmp)\/[^\s`'").]+/g,e=>`${e.startsWith(" ")||e.startsWith("(")?e[0]:""}[redacted path]`).replace(new RegExp(`\\b[A-Za-z0-9_-]{${Qc},}\\b`,"g"),"[redacted token]")}function Hc(t){return/\b[A-Za-z0-9_-]*(?:api[_-]?key|token|secret|password|passwd|pwd|credential|credentials|authorization|auth)[A-Za-z0-9_-]*\b\s*[:=]\s*["']?[^"'\s,;)]+/i.test(t)||/\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9_]{16,}\b/.test(t)||/\bgithub_pat_[A-Za-z0-9_]{20,}\b/.test(t)||/\bsk-[A-Za-z0-9_-]{20,}\b/.test(t)||/\bxox[baprs]-[A-Za-z0-9-]{20,}\b/.test(t)||/\bAKIA[0-9A-Z]{16}\b/.test(t)||/\beyJ[A-Za-z0-9_-]{20,}\.[A-Za-z0-9_-]{20,}\.[A-Za-z0-9_-]{10,}\b/.test(t)||/\bhttps?:\/\/\S+/i.test(t)||/\b[A-Z]:\\(?:Users|Documents and Settings)\\[^\s`'")]+/i.test(t)||/(?:^|[\s(])\/(?:home|Users|var|etc|private|tmp)\/[^\s`'").]+/.test(t)||new RegExp(`\\b[A-Za-z0-9_-]{${Qc},}\\b`).test(t)}function hb(t){let e=Yc(t);if(!e)return;let r=e.match(/^[^.!?]+[.!?]/)?.[0]??e,n=Ip(r).replace(/\s+/g," ").trim();return n?gb(n,180):void 0}function Zc(t){return Ip(t.trim()).replace(/\s+/g," ").trim()}function yb(t,e){return t?.commitMessages.map(r=>Zc(r.message)).filter(Boolean).slice(0,e)??[]}function Sb(){return["Not recorded by agent_pr. Review CI/checks and session output before merging."]}function kb(){return["Generated PR metadata omits full task prompts and redacts sensitive-looking prompt details.","Review touched areas for behavior, security, and privacy impact."]}function Ib(t){let e=hb(t.prompt),r=t.diffSummary;return{sessionName:t.sessionName,objective:e,stats:r?{commits:r.commits,filesChanged:r.filesChanged,insertions:r.insertions,deletions:r.deletions}:void 0,changedFiles:r?.changedFiles??[],commitSubjects:yb(r,5),validation:Sb(),notes:kb()}}function $s(t,e,r){return Array.isArray(t)&&t.length>0&&t.length<=e&&t.every(n=>typeof n=="string"&&n.trim().length>0&&n.length<=r)}function xb(t,e){let r=Yc(t);if(!r)return[];let n=e?.toLowerCase();return r.split(/[.!?\n]/).map(o=>o.trim()).filter(o=>o.length>=24).filter(o=>!n||o.toLowerCase()!==n.replace(/[.!?]$/,"")).map(o=>o.toLowerCase())}function zc(t,e,r){let n=t.toLowerCase();return xb(e,r.objective).some(o=>n.includes(o))}function Jc(t){return/^(?:node|next|nuxt|vue|express|nest|three|d3|chart|ember|backbone|require)\.js$/i.test(t)}function Pb(t,e){let r=new Set(e.changedFiles);if([...t.matchAll(/(?:^|[^\w.-])((?:\.?[\w-][\w.-]*\/)+(?:\.?[\w-][\w.-]*))(?![\w.-])/g)].map(c=>c[1]).some(c=>/\.[A-Za-z0-9]+$/.test(c)&&!r.has(c)))return!0;let o=new Set(e.changedFiles.filter(c=>!c.includes("/"))),i=String.raw`\.[a-z0-9][\w.-]*`,a=t.matchAll(new RegExp(`[\\\`"'](${i})[\\\`"']`,"g"));for(let c of a)if(!o.has(c[1]))return!0;let u=t.matchAll(new RegExp(String.raw`\b(?:file|files|path|paths|changed|changes|updated?|updates?|modified?|modifies|touched?|touches|added?|adds?|removed?|removes?|deleted?|deletes?)\s+(?:the\s+)?(${i})(?![\w.-])`,"gi"));for(let c of u)if(!o.has(c[1]))return!0;if(o.size===0)return!1;let p=new Set([...o].map(c=>c.match(/\.([A-Za-z0-9]+)$/)?.[1]?.toLowerCase()).filter(c=>!!c)),d=String.raw`[A-Za-z0-9][\w.-]*\.([A-Za-z0-9]+)`,l=t.matchAll(new RegExp(`[\\\`"'](${d})[\\\`"']`,"g"));for(let c of l){let h=c[1],y=c[2]?.toLowerCase();if(y!==void 0&&p.has(y)&&!o.has(h)&&!Jc(h))return!0}return[...t.matchAll(new RegExp(String.raw`\b(?:file|files|path|paths|changed|changes|updated?|updates?|modified?|modifies|touched?|touches|added?|adds?|removed?|removes?|deleted?|deletes?)\s+(?:the\s+)?(${d})\b`,"gi"))].some(c=>{let h=c[1],y=c[2]?.toLowerCase();return y!==void 0&&p.has(y)&&!o.has(h)&&!Jc(h)})}function jo(t){return Ip(t).replace(/\s+/g," ").trim()}function wb(t,e,r){if(!t||typeof t!="object")return;let n=t;if(typeof n.title!="string"||n.title.trim().length===0||n.title.length>90||!$s(n.summary,5,180)||!$s(n.changes,10,160)||!$s(n.validation,5,160)||!$s(n.notes,5,180)||[n.title,...n.summary,...n.changes,...n.validation,...n.notes].some(u=>Hc(u)||zc(u,r,e)))return;let i={title:jo(n.title),summary:n.summary.map(jo),changes:n.changes.map(jo),validation:n.validation.map(jo),notes:n.notes.map(jo)},a=[i.title,...i.summary,...i.changes,...i.validation,...i.notes];if(!a.some(u=>!u||Hc(u)||zc(u,r,e))&&!a.some(u=>Pb(u,e)))return i}async function Xc(t){let e=Ib(t);if(!t.provider)return{ok:!1,error:"PR metadata generation requires an LLM metadata provider. Pass explicit title and body, or configure a provider before creating the PR.",evidence:e};try{let r=await t.provider.generatePrMetadata(e),n=wb(r,e,t.prompt);return n?{ok:!0,metadata:n,evidence:e}:{ok:!1,error:"LLM-generated PR metadata failed schema or safety validation. Pass explicit title/body or retry after correcting the provider output.",evidence:e}}catch(r){return console.warn(`[agent_pr] PR metadata provider failed: ${r instanceof Error?r.message:String(r)}`),{ok:!1,error:"PR metadata provider failed. Pass explicit title/body or retry after the provider is healthy.",evidence:e}}}function ef(t){let e=[`OpenClaw Code Agent session: ${t.sessionName}`,"","## Summary",...t.metadata.summary.map(r=>`- ${r}`),"","## Changes",...t.metadata.changes.map(r=>`- ${r}`),""];if(t.diffSummary){let r=t.diffSummary.commitMessages.slice(0,5).map(o=>`- ${o.hash} ${Zc(o.message)} (${o.author})`),n=t.diffSummary.commits>5?[`- ...and ${t.diffSummary.commits-5} more`]:[];r.length>0&&e.push("## Commits",...r,...n,"")}return e.push("## Validation",...t.metadata.validation.map(r=>`- ${r}`),"","## Notes / Risks",...t.metadata.notes.map(r=>`- ${r}`),""),e.push("---","Generated with [openclaw-code-agent](https://github.com/goldmar/openclaw-code-agent)"),e.join(`
17
+ `)}function Wo(t,e={}){return{name:"agent_pr",description:"Create or update a GitHub PR for a worktree branch. Handles full PR lifecycle: creates new PRs, updates existing open PRs with comments, and handles merged/closed PRs. Pushes the branch, syncs PR state, and persists metadata.",parameters:f.Object({session:f.String({description:"Session name or ID to create/update PR for"}),title:f.Optional(f.String({description:"PR title (default: auto-generated from session name)"})),body:f.Optional(f.String({description:"PR body (default: auto-generated from commit summary)"})),base_branch:f.Optional(f.String({description:"Base branch for the PR (default: detected from repo)"})),force_new:f.Optional(f.Boolean({description:"Force creation of a new PR even if one exists (default: false)"})),target_repo:f.Optional(f.String({description:"Target repository for cross-repo PRs (e.g. 'openai/codex'). Auto-detected from 'upstream' remote if not set."}))}),async execute(r,n){if(!k)return{content:[{type:"text",text:"Error: SessionManager not initialized. The code-agent service must be running."}],meta:{success:!1,state:"error"}};if(!fb(n))return{content:[{type:"text",text:"Error: Invalid parameters. Expected { session, title?, body?, base_branch?, force_new? }."}],meta:{success:!1,state:"error"}};if(!Pr())return{content:[{type:"text",text:"Error: GitHub CLI (gh) is not available. Install it and authenticate to create PRs."}],meta:{success:!1,state:"error"}};let o=Wn(k,n.session),i=o.activeSession,a=o.persistedSession;if(!i&&!a)return{content:[{type:"text",text:`Error: Session "${n.session}" not found.`}],meta:{success:!1,state:"error"}};let{worktreePath:u,originalWorkdir:p,sessionName:d,branchName:l}=o;if(!u||!p)return{content:[{type:"text",text:`Error: Session "${n.session}" does not have a worktree.`}],meta:{success:!1,state:"error"}};if(!l)return{content:[{type:"text",text:`Error: Cannot determine branch name for worktree ${u}. The worktree may have been removed and no persisted branch name is available.`}],meta:{success:!1,state:"error"}};cb(u)||console.info(`[agent_pr] Worktree directory ${u} no longer exists; proceeding with branch "${l}" via originalWorkdir (${p})`);let m=n.base_branch??wr(p),c=o.persistedRef,h=xc(p,n.target_repo??a?.worktreePrTargetRepo);if(!cs(p,l))return{content:[{type:"text",text:`\u274C Failed to push ${l} \u2014 cannot create/update PR`}],meta:{success:!1,state:"error"}};let y=qo(p,l,h);if(n.force_new&&y.exists)return{content:[{type:"text",text:`\u26A0\uFE0F Cannot create new PR: A PR already exists for ${l} (${y.state}).
14
18
 
15
- Existing PR: ${S.url}
19
+ Existing PR: ${y.url}
16
20
 
17
- To create a new PR, you must first close/merge the existing PR manually or use a different branch.`}],meta:{success:!1,state:"error"}};if(S.exists&&S.state==="open"){let k=Nn(a,l,u);if(k&&k.commits>0){let I=k.commitMessages.slice(0,5).map(T=>`\u2022 ${T.hash} ${T.message} (${T.author})`).join(`
18
- `),P=k.commits>5?`
19
- ...and ${k.commits-5} more commits`:"",b=["\u{1F504} **New commits pushed**","",`${k.commits} new commits (+${k.insertions} / -${k.deletions})`,"","### Latest commits:",I+P,"","---","\u{1F916} [openclaw-code-agent](https://github.com/goldmar/openclaw-code-agent)"].join(`
20
- `);if(cg(a,S.number,b,g)){c&&v.updatePersistedSession(c,{worktreePrUrl:S.url,worktreePrNumber:S.number,lifecycle:"terminal",worktreeState:"pr_open",pendingWorktreeDecisionSince:void 0,lastWorktreeReminderAt:void 0,worktreeLifecycle:{state:"pr_open",updatedAt:new Date().toISOString(),baseBranch:u,targetRepo:g,pushRemote:i?.worktreePushRemote}});let T=Fn({kind:"pr-updated",branch:l,prUrl:S.url});return v.notifyWorktreeOutcome(r.notificationTarget,T,{detailLines:El({action:"updated",branchName:l,baseBranch:u,prUrl:S.url,prNumber:S.number,targetRepo:g,commits:k.commits,insertions:k.insertions,deletions:k.deletions})}),{content:[{type:"text",text:`${T}
21
+ To create a new PR, you must first close/merge the existing PR manually or use a different branch.`}],meta:{success:!1,state:"error"}};if(y.exists&&y.state==="open"){let S=sn(p,l,m);if(S&&S.commits>0){let I=S.commitMessages.slice(0,5).map(C=>`\u2022 ${C.hash} ${C.message} (${C.author})`).join(`
22
+ `),w=S.commits>5?`
23
+ ...and ${S.commits-5} more commits`:"",R=["\u{1F504} **New commits pushed**","",`${S.commits} new commits (+${S.insertions} / -${S.deletions})`,"","### Latest commits:",I+w,"","---","\u{1F916} [openclaw-code-agent](https://github.com/goldmar/openclaw-code-agent)"].join(`
24
+ `);if(Rc(p,y.number,R,h)){c&&k.updatePersistedSession(c,{worktreePrUrl:y.url,worktreePrNumber:y.number,lifecycle:"terminal",worktreeState:"pr_open",pendingWorktreeDecisionSince:void 0,lastWorktreeReminderAt:void 0,worktreeLifecycle:{state:"pr_open",updatedAt:new Date().toISOString(),baseBranch:m,targetRepo:h,pushRemote:a?.worktreePushRemote}});let C=an({kind:"pr-updated",branch:l,prUrl:y.url});return k.notifyWorktreeOutcome(o.notificationTarget,C,{detailLines:kp({action:"updated",branchName:l,baseBranch:m,prUrl:y.url,prNumber:y.number,targetRepo:h,commits:S.commits,insertions:S.insertions,deletions:S.deletions})}),{content:[{type:"text",text:`${C}
21
25
 
22
- \u{1F4DD} Added comment detailing ${k.commits} new commits (+${k.insertions} / -${k.deletions})`}],meta:{success:!0,state:"pr_updated"}}}else return{content:[{type:"text",text:`\u26A0\uFE0F Pushed to ${S.url} but failed to add comment.
26
+ \u{1F4DD} Added comment detailing ${S.commits} new commits (+${S.insertions} / -${S.deletions})`}],meta:{success:!0,state:"pr_updated"}}}else return{content:[{type:"text",text:`\u26A0\uFE0F Pushed to ${y.url} but failed to add comment.
23
27
 
24
- ${k.commits} new commits (+${k.insertions} / -${k.deletions})`}],meta:{success:!0,state:"pr_open"}}}else return c&&v.updatePersistedSession(c,{worktreePrUrl:S.url,worktreePrNumber:S.number,lifecycle:"terminal",worktreeState:"pr_open",pendingWorktreeDecisionSince:void 0,lastWorktreeReminderAt:void 0,worktreeLifecycle:{state:"pr_open",updatedAt:new Date().toISOString(),baseBranch:u,targetRepo:g,pushRemote:i?.worktreePushRemote}}),{content:[{type:"text",text:`\u2139\uFE0F PR already exists and is up to date: ${S.url}
28
+ ${S.commits} new commits (+${S.insertions} / -${S.deletions})`}],meta:{success:!0,state:"pr_open"}}}else return c&&k.updatePersistedSession(c,{worktreePrUrl:y.url,worktreePrNumber:y.number,lifecycle:"terminal",worktreeState:"pr_open",pendingWorktreeDecisionSince:void 0,lastWorktreeReminderAt:void 0,worktreeLifecycle:{state:"pr_open",updatedAt:new Date().toISOString(),baseBranch:m,targetRepo:h,pushRemote:a?.worktreePushRemote}}),{content:[{type:"text",text:`\u2139\uFE0F PR already exists and is up to date: ${y.url}
25
29
 
26
- No new commits to push.`}],meta:{success:!0,state:"pr_open"}}}else{if(S.exists&&S.state==="merged")return c&&v.updatePersistedSession(c,{worktreePrUrl:S.url,worktreePrNumber:S.number,worktreeMerged:!0,worktreeMergedAt:new Date().toISOString(),lifecycle:"terminal",worktreeState:"merged",pendingWorktreeDecisionSince:void 0,lastWorktreeReminderAt:void 0,worktreeDisposition:"merged",worktreeLifecycle:{state:"merged",updatedAt:new Date().toISOString(),resolvedAt:new Date().toISOString(),resolutionSource:"agent_pr",baseBranch:u,targetRepo:g,pushRemote:i?.worktreePushRemote}}),{content:[{type:"text",text:`\u2705 PR was already merged: ${S.url}
30
+ No new commits to push.`}],meta:{success:!0,state:"pr_open"}}}else{if(y.exists&&y.state==="merged")return c&&k.updatePersistedSession(c,{worktreePrUrl:y.url,worktreePrNumber:y.number,worktreeMerged:!0,worktreeMergedAt:new Date().toISOString(),lifecycle:"terminal",worktreeState:"merged",pendingWorktreeDecisionSince:void 0,lastWorktreeReminderAt:void 0,worktreeDisposition:"merged",worktreeLifecycle:{state:"merged",updatedAt:new Date().toISOString(),resolvedAt:new Date().toISOString(),resolutionSource:"agent_pr",baseBranch:m,targetRepo:h,pushRemote:a?.worktreePushRemote}}),{content:[{type:"text",text:`\u2705 PR was already merged: ${y.url}
27
31
 
28
- The worktree branch ${l} can be cleaned up with agent_merge(delete_branch=true).`}],meta:{success:!0,state:"merged"}};if(S.exists&&S.state==="closed")return{content:[{type:"text",text:`\u26A0\uFE0F A PR exists but was closed without merging: ${S.url}
32
+ The worktree branch ${l} can be cleaned up with agent_merge(delete_branch=true).`}],meta:{success:!0,state:"merged"}};if(y.exists&&y.state==="closed")return{content:[{type:"text",text:`\u26A0\uFE0F A PR exists but was closed without merging: ${y.url}
29
33
 
30
34
  What would you like to do?
31
35
 
@@ -33,192 +37,190 @@ What would you like to do?
33
37
  2. Close and delete the branch with agent_merge(delete_branch=true), then start a new session/worktree
34
38
  3. Manually delete the closed PR on GitHub, then call agent_pr(force_new=true) to create a fresh PR
35
39
 
36
- (This tool cannot automatically reopen or recreate PRs to avoid unintended actions.)`}],meta:{success:!1,state:"closed"}};{let k=n.title??`[openclaw-code-agent] ${d}`,I=n.body;if(!I){let b=Nn(a,l,u);if(b){let A=b.commitMessages.slice(0,5).map(C=>`\u2022 ${C.hash} ${C.message} (${C.author})`).join(`
37
- `),T=b.commits>5?`
38
- ...and ${b.commits-5} more`:"";I=[`Automated changes from OpenClaw Code Agent session: ${d}`,"","## Summary",`${b.commits} commits, ${b.filesChanged} files changed (+${b.insertions} / -${b.deletions})`,"","## Commits",A+T,"","---","\u{1F916} Generated with [openclaw-code-agent](https://github.com/goldmar/openclaw-code-agent)"].join(`
39
- `)}else I=`Automated changes from OpenClaw Code Agent session: ${d}`}let P=pg(a,l,u,k,I,g);if(P.success&&P.prUrl){let b=ko(a,l,g);c&&v.updatePersistedSession(c,{worktreePrUrl:P.prUrl,worktreePrNumber:b.number,lifecycle:"terminal",pendingWorktreeDecisionSince:void 0,lastWorktreeReminderAt:void 0,worktreeState:"pr_open",worktreeDisposition:"pr-opened",worktreeLifecycle:{state:"pr_open",updatedAt:new Date().toISOString(),baseBranch:u,targetRepo:g,pushRemote:i?.worktreePushRemote}});let A=Fn({kind:"pr-opened",branch:l,targetRepo:g,prUrl:P.prUrl});return v.notifyWorktreeOutcome(r.notificationTarget,A,{detailLines:El({action:"opened",branchName:l,baseBranch:u,prUrl:P.prUrl,prNumber:b.number,targetRepo:g})}),{content:[{type:"text",text:A}],meta:{success:!0,state:"created"}}}else return{content:[{type:"text",text:`\u274C Failed to create PR: ${P.error??"unknown error"}`}],meta:{success:!1,state:"error"}}}}}}}var bs=p(()=>{De();Y();rt();wo()});import{readdirSync as EA,statSync as $A,rmSync as OA}from"fs";import{execFileSync as DA}from"child_process";import{join as Zh}from"path";De();Y();function DP(t){return t.length>80?`${t.slice(0,80)}...`:t}function NP(t){return t.worktreePath?!t.originalWorkdir||t.originalWorkdir===t.worktreePath?`${t.worktreePath} (worktree)`:`${t.worktreePath} (worktree of ${t.originalWorkdir})`:t.workdir}function FP(t){let e=["Session launched successfully.",` Name: ${t.sessionName}`,` ID: ${t.sessionId}`,` Harness: ${t.harness}`,` Permission mode: ${t.permissionMode}`,` Plan approval: ${t.planApproval}`,` Worktree strategy: ${t.worktreeStrategy??"off"}`,` Resolved workdir: ${NP(t)}`,` Model: ${t.model??"default"}`,` Prompt: "${DP(t.prompt)}"`];return t.reasoningEffort&&e.push(` Reasoning effort: ${t.reasoningEffort}`),t.fastMode&&e.push(" Fast mode: enabled"),t.resumeSessionId?e.push(` Resume: ${t.resumeSessionId}${t.forkSession?" (forked)":""}`):t.forceNewSession&&e.push(" Force new session: true"),t.clearedPersistedCodexResume&&e.push(" Thread state: historical Codex state cleared; starting a fresh thread."),e.push(" Mode: multi-turn (use agent_respond to send follow-up messages)"),e.push("","Use agent_sessions to check status, agent_output to see output."),e.join(`
40
- `)}function bi(t,e){return FP({...t,sessionId:e.id,sessionName:e.name,model:e.model,reasoningEffort:e.reasoningEffort,fastMode:e.fastMode,worktreeStrategy:e.worktreeStrategy??"off",worktreePath:e.worktreePath,originalWorkdir:e.originalWorkdir})}Te();function ur(t){let{requestedResumeSessionId:e,activeSession:n,persistedSession:r}=t;return e?n?{resumeSessionId:e,clearedPersistedCodexResume:!1}:r?.harness==="codex"&&r.backendRef?.kind!=="codex-app-server"?{resumeSessionId:void 0,clearedPersistedCodexResume:!0}:{resumeSessionId:e,clearedPersistedCodexResume:!1}:{resumeSessionId:void 0,clearedPersistedCodexResume:!1}}he();function fl(t){return"id"in t?t.id:t.sessionId}function mo(t){return t.status==="completed"||t.killReason==="done"}function Iw(t){return mo(t)&&t.backendRef?.kind==="codex-app-server"&&!!_(t)}function bw(t){return(t.killReason==="shutdown"||t.killReason==="startup-timeout")&&!_(t)}function fo(t){if(t.status==="running")return{kind:"direct",reason:"already_running"};let e=fl(t);if(mo(t)&&!Iw(t))return{kind:"unavailable",reason:"completed",stableSessionId:e};let n=_(t);if(n){let r="harnessName"in t?void 0:t,{resumeSessionId:o,clearedPersistedCodexResume:i}=ur({requestedResumeSessionId:n,activeSession:"harnessName"in t?{harnessSessionId:n}:void 0,persistedSession:r?{harness:r.harness,backendRef:r.backendRef}:void 0});return o?{kind:"resume",resumeSessionId:o,stableSessionId:e,clearedPersistedCodexResume:i}:{kind:"unavailable",reason:"legacy_non_resumable",stableSessionId:e,clearedPersistedCodexResume:i}}return bw(t)?{kind:"relaunch",stableSessionId:e}:{kind:"unavailable",reason:"missing_backend_state",stableSessionId:e}}Te();import{existsSync as Of}from"fs";function Ki(t,e){if(!e||e.length===0)return!0;if(!t)return!1;let n=t.toLowerCase();return e.some(r=>n.includes(r.toLowerCase()))}he();function _f(t){return t==null?void 0:String(t).trim()||void 0}function xw(t){return t.trim().replace(/^['"`](.*)['"`]$/s,"$1").trim()}function Aw(t){let e=t.split(/\n\s*\n/,1)[0]?.split(`
41
- `).map(n=>n.trim()).filter(Boolean)??[];if(e.length!==0)for(let n of e){let r=n.match(/^(Workdir|Repo):\s*(.+)$/),o=xw(r?.[2]??"");if(o.startsWith("/")&&Of(o))return o}}function Ef(t,e){return t.workdir!==e.workdir?!1:e.originSessionKey&&t.originSessionKey?t.originSessionKey===e.originSessionKey:!e.originChannel||!t.originChannel?!1:t.originChannel===e.originChannel&&_f(t.originThreadId)===_f(e.originThreadId)}function $f(t){return t.slice(0,3).map(e=>` - ${e.name} [${e.ref}] | status=${e.status}${e.lifecycle?` | lifecycle=${e.lifecycle}`:""}`).join(`
42
- `)}function Rw(t,e){let n=[],r=[],o=new Set;for(let i of t.list?.("all")??[]){if(!Ef(i,e))continue;let s=i.id;if(!o.has(s)){if(o.add(s),i.isExplicitlyResumable){n.push({ref:i.id,name:i.name,status:i.status,lifecycle:i.lifecycle,resumable:!0});continue}(i.status==="starting"||i.status==="running")&&r.push({ref:i.id,name:i.name,status:i.status,lifecycle:i.lifecycle,resumable:!1})}}for(let i of t.listPersistedSessions?.()??[]){if(!i.resumable||!Ef(i,e))continue;let s=ne(i)??i.harnessSessionId,a=i.sessionId??_(i)??i.harnessSessionId;!s||!a||o.has(a)||(o.add(a),n.push({ref:s,name:i.name,status:i.status,lifecycle:i.lifecycle,resumable:!0}))}return{resumable:n,active:r}}function Vi(t,e,n){let r=t.workdir||Aw(t.prompt)||e.workspaceDir||E.defaultWorkdir||process.cwd();if(!Of(r))return{kind:"error",text:`Error: Working directory does not exist: ${r}`};let o=t.harness??Le(),i=ar(o),s=t.model??i,a=t.model!==void 0;if(!s)return{kind:"error",text:`Error: No default model configured for harness "${o}". Set plugins.entries["openclaw-code-agent"].config.harnesses.${o}.defaultModel or pass model explicitly.`};let d=Ti(o);if(d&&d.length>0&&!Ki(s,d))return{kind:"error",text:a?`Error: Model "${s}" is not allowed. Permitted models: ${d.join(", ")}`:`Error: Default model "${s||"undefined"}" is not in allowedModels (${d.join(", ")}). Update your plugin config to set a compatible defaultModel.`};let l=Mi(e),u=oo(e,l||io(r)),c=e.sessionKey||void 0,g=af(c)??al(e);if(!t.resume_session_id&&!t.force_new_session){let C=Rw(n,{workdir:r,originSessionKey:c,originChannel:u,originThreadId:g});if(C.resumable.length>0||C.active.length>0){let ye=C.resumable.length>0?["Linked resumable session(s) already exist for this thread/workdir:",$f(C.resumable),"","Resume the latest one with:",` agent_respond(session='${C.resumable[0].ref}', message='<next instruction>')`,"Fork from it with:",` agent_launch(prompt='<new task>', resume_session_id='${C.resumable[0].ref}', fork_session=true)`].join(`
43
- `):"",Ht=C.active.length>0?[C.resumable.length>0?"Linked active session(s):":"Linked active session(s) already exist for this thread/workdir:",$f(C.active),"","Send a follow-up instead of launching a duplicate:",` agent_respond(session='${C.active[0].ref}', message='<next instruction>')`].join(`
44
- `):"";return{kind:"blocked",text:["Resume-first protection blocked a fresh launch.","",ye,Ht,["If you intentionally want a brand-new independent session here, call:"," agent_launch(prompt='<new task>', force_new_session=true)"].join(`
40
+ (This tool cannot automatically reopen or recreate PRs to avoid unintended actions.)`}],meta:{success:!1,state:"closed"}};{let S=!n.title||!n.body?sn(p,l,m):void 0,I;if(!n.title||!n.body){let C=await Xc({sessionName:d,prompt:o.prompt,diffSummary:S,provider:e.metadataProvider});if(C.ok===!1)return{content:[{type:"text",text:`\u274C ${C.error}`}],meta:{success:!1,state:"error"}};I=C.metadata}let w=n.title??I.title,R=n.body;R||(R=ef({sessionName:d,metadata:I,diffSummary:S}));let $=Tc(p,l,m,w,R,h);if($.success&&$.prUrl){let C=qo(p,l,h);c&&k.updatePersistedSession(c,{worktreePrUrl:$.prUrl,worktreePrNumber:C.number,lifecycle:"terminal",pendingWorktreeDecisionSince:void 0,lastWorktreeReminderAt:void 0,worktreeState:"pr_open",worktreeDisposition:"pr-opened",worktreeLifecycle:{state:"pr_open",updatedAt:new Date().toISOString(),baseBranch:m,targetRepo:h,pushRemote:a?.worktreePushRemote}});let Ie=an({kind:"pr-opened",branch:l,targetRepo:h,prUrl:$.prUrl});return k.notifyWorktreeOutcome(o.notificationTarget,Ie,{detailLines:kp({action:"opened",branchName:l,baseBranch:m,prUrl:$.prUrl,prNumber:C.number,targetRepo:h})}),{content:[{type:"text",text:Ie}],meta:{success:!0,state:"created"}}}else return{content:[{type:"text",text:`\u274C Failed to create PR: ${$.error??"unknown error"}`}],meta:{success:!1,state:"error"}}}}}}}var Qc,Ms=Be(()=>{tt();le();It();Ko();Qc=32});import{readdirSync as Z_,statSync as X_,rmSync as e0}from"fs";import{execFileSync as t0}from"child_process";import{join as HP}from"path";tt();le();function XP(t){return t.length>80?`${t.slice(0,80)}...`:t}function ew(t){return t.worktreePath?!t.originalWorkdir||t.originalWorkdir===t.worktreePath?`${t.worktreePath} (worktree)`:`${t.worktreePath} (worktree of ${t.originalWorkdir})`:t.workdir}function tw(t){let e=["Session launched successfully.",` Name: ${t.sessionName}`,` ID: ${t.sessionId}`,` Harness: ${t.harness}`,` Permission mode: ${t.permissionMode}`,` Plan approval: ${t.planApproval}`,` Worktree strategy: ${t.worktreeStrategy??"off"}`,` Resolved workdir: ${ew(t)}`,` Model: ${t.model??"default"}`,` Prompt: "${XP(t.prompt)}"`];return t.reasoningEffort&&e.push(` Reasoning effort: ${t.reasoningEffort}`),t.fastMode&&e.push(" Fast mode: enabled"),t.resumeSessionId?e.push(` Resume: ${t.resumeSessionId}${t.forkSession?" (forked)":""}`):t.forceNewSession&&e.push(" Force new session: true"),t.clearedPersistedCodexResume&&e.push(" Thread state: historical Codex state cleared; starting a fresh thread."),e.push(" Mode: multi-turn (use agent_respond to send follow-up messages)"),e.push("","Use agent_sessions to check status, agent_output to see output."),e.join(`
41
+ `)}function Ei(t,e){return tw({...t,sessionId:e.id,sessionName:e.name,model:e.model,reasoningEffort:e.reasoningEffort,fastMode:e.fastMode,worktreeStrategy:e.worktreeStrategy??"off",worktreePath:e.worktreePath,originalWorkdir:e.originalWorkdir})}ze();function _n(t){let{requestedResumeSessionId:e,activeSession:r,persistedSession:n}=t;return e?r?{resumeSessionId:e,clearedPersistedCodexResume:!1}:n?.harness==="codex"&&n.backendRef?.kind!=="codex-app-server"?{resumeSessionId:void 0,clearedPersistedCodexResume:!0}:{resumeSessionId:e,clearedPersistedCodexResume:!1}:{resumeSessionId:void 0,clearedPersistedCodexResume:!1}}Ee();function tp(t){return"id"in t?t.id:t.sessionId}function Oo(t){return t.status==="completed"||t.killReason==="done"}function Uw(t){return Oo(t)&&t.backendRef?.kind==="codex-app-server"&&!!U(t)}function Kw(t){return(t.killReason==="shutdown"||t.killReason==="startup-timeout")&&!U(t)}function _o(t){if(t.status==="running")return{kind:"direct",reason:"already_running"};let e=tp(t);if(Oo(t)&&!Uw(t))return{kind:"unavailable",reason:"completed",stableSessionId:e};let r=U(t);if(r){let n="harnessName"in t?void 0:t,{resumeSessionId:o,clearedPersistedCodexResume:i}=_n({requestedResumeSessionId:r,activeSession:"harnessName"in t?{harnessSessionId:r}:void 0,persistedSession:n?{harness:n.harness,backendRef:n.backendRef}:void 0});return o?{kind:"resume",resumeSessionId:o,stableSessionId:e,clearedPersistedCodexResume:i}:{kind:"unavailable",reason:"legacy_non_resumable",stableSessionId:e,clearedPersistedCodexResume:i}}return Kw(t)?{kind:"relaunch",stableSessionId:e}:{kind:"unavailable",reason:"missing_backend_state",stableSessionId:e}}ze();import{existsSync as Qm}from"fs";function zi(t,e){if(!e||e.length===0)return!0;if(!t)return!1;let r=t.toLowerCase();return e.some(n=>r.includes(n.toLowerCase()))}Ee();function Hm(t){return t==null?void 0:String(t).trim()||void 0}function jw(t){return t.trim().replace(/^['"`](.*)['"`]$/s,"$1").trim()}function Ww(t){let e=t.split(/\n\s*\n/,1)[0]?.split(`
42
+ `).map(r=>r.trim()).filter(Boolean)??[];if(e.length!==0)for(let r of e){let n=r.match(/^(Workdir|Repo):\s*(.+)$/),o=jw(n?.[2]??"");if(o.startsWith("/")&&Qm(o))return o}}function zm(t,e){return t.workdir!==e.workdir?!1:e.originSessionKey&&t.originSessionKey?t.originSessionKey===e.originSessionKey:!e.originChannel||!t.originChannel?!1:t.originChannel===e.originChannel&&Hm(t.originThreadId)===Hm(e.originThreadId)}function Jm(t){return t.slice(0,3).map(e=>` - ${e.name} [${e.ref}] | status=${e.status}${e.lifecycle?` | lifecycle=${e.lifecycle}`:""}`).join(`
43
+ `)}function Gw(t,e){let r=[],n=[],o=new Set;for(let i of t.list?.("all")??[]){if(!zm(i,e))continue;let a=i.id;if(!o.has(a)){if(o.add(a),i.isExplicitlyResumable){r.push({ref:i.id,name:i.name,status:i.status,lifecycle:i.lifecycle,resumable:!0});continue}(i.status==="starting"||i.status==="running")&&n.push({ref:i.id,name:i.name,status:i.status,lifecycle:i.lifecycle,resumable:!1})}}for(let i of t.listPersistedSessions?.()??[]){if(!i.resumable||!zm(i,e))continue;let a=Se(i)??i.harnessSessionId,u=i.sessionId??U(i)??i.harnessSessionId;!a||!u||o.has(u)||(o.add(u),r.push({ref:a,name:i.name,status:i.status,lifecycle:i.lifecycle,resumable:!0}))}return{resumable:r,active:n}}function Ji(t,e,r){let n=t.workdir||Ww(t.prompt)||e.workspaceDir||j.defaultWorkdir||process.cwd();if(!Qm(n))return{kind:"error",text:`Error: Working directory does not exist: ${n}`};let o=t.harness??dt(),i=$n(o),a=t.model??i,u=t.model!==void 0;if(!a)return{kind:"error",text:`Error: No default model configured for harness "${o}". Set plugins.entries["openclaw-code-agent"].config.harnesses.${o}.defaultModel or pass model explicitly.`};let p=_i(o);if(p&&p.length>0&&!zi(a,p))return{kind:"error",text:u?`Error: Model "${a}" is not allowed. Permitted models: ${p.join(", ")}`:`Error: Default model "${a||"undefined"}" is not in allowedModels (${p.join(", ")}). Update your plugin config to set a compatible defaultModel.`};let d=Di(e),l=bo(e,d||Ao(n)),m=e.sessionKey||void 0,c=wm(m)??zu(e);if(!t.resume_session_id&&!t.force_new_session){let C=Gw(r,{workdir:n,originSessionKey:m,originChannel:l,originThreadId:c});if(C.resumable.length>0||C.active.length>0){let Ie=C.resumable.length>0?["Linked resumable session(s) already exist for this thread/workdir:",Jm(C.resumable),"","Resume the latest one with:",` agent_respond(session='${C.resumable[0].ref}', message='<next instruction>')`,"Fork from it with:",` agent_launch(prompt='<new task>', resume_session_id='${C.resumable[0].ref}', fork_session=true)`].join(`
44
+ `):"",Sr=C.active.length>0?[C.resumable.length>0?"Linked active session(s):":"Linked active session(s) already exist for this thread/workdir:",Jm(C.active),"","Send a follow-up instead of launching a duplicate:",` agent_respond(session='${C.active[0].ref}', message='<next instruction>')`].join(`
45
+ `):"";return{kind:"blocked",text:["Resume-first protection blocked a fresh launch.","",Ie,Sr,["If you intentionally want a brand-new independent session here, call:"," agent_launch(prompt='<new task>', force_new_session=true)"].join(`
45
46
  `)].filter(Boolean).join(`
46
47
 
47
- `)}}}let S=t.resume_session_id,k=S?n.resolve?.(S):void 0,I=S?n.getPersistedSession?.(S):void 0;if(S){let C=n.resolveBackendConversationId?.(S)??n.resolveHarnessSessionId?.(S);if(!C)return{kind:"error",text:`Error: Could not resolve resume_session_id "${S}" to a session ID. Use agent_sessions to list available sessions.`};S=C}let{resumeSessionId:P,clearedPersistedCodexResume:b}=ur({requestedResumeSessionId:S,activeSession:k?{harnessSessionId:k.backendConversationId??k.harnessSessionId}:void 0,persistedSession:I?{harness:I.harness,backendRef:I.backendRef}:void 0}),A=t.permission_mode??E.permissionMode,T=t.plan_approval??E.planApproval;return{kind:"resolved",workdir:r,harness:o,resolvedModel:s,permissionMode:A,planApproval:T,originChannel:u,originThreadId:g,originSessionKey:c,route:lr(e,u,c),resumeSessionId:P,resolvedResumeId:S,clearedPersistedCodexResume:b,reasoningEffort:dn(o),fastMode:dr(o)}}he();function Rt(t){let e=Math.floor(t/1e3),n=Math.floor(e/60),r=e%60;return n>0?`${n}m${r}s`:`${r}s`}var Tw=new Set(["a","an","the","is","are","was","were","be","been","being","have","has","had","do","does","did","will","would","could","should","may","might","shall","can","need","must","i","me","my","we","our","you","your","it","its","he","she","to","of","in","for","on","with","at","by","from","as","into","through","about","that","this","these","those","and","or","but","if","then","so","not","no","please","just","also","very","all","some","any","each","make","write","create","build","implement","add","update"]);function Nf(t){let n=t.toLowerCase().replace(/[^a-z0-9\s-]/g," ").split(/\s+/).filter(r=>r.length>1&&!Tw.has(r)).slice(0,3);return n.length===0?"session":n.join("-")}var Df={starting:"\u{1F7E1}",running:"\u{1F7E2}",completed:"\u2705",failed:"\u274C",killed:"\u26D4",awaiting_plan_decision:"\u{1F4CB}",awaiting_user_input:"\u2753",awaiting_worktree_decision:"\u{1F33F}",suspended:"\u23F8\uFE0F",terminal:"\u{1F3C1}"};function Ff(t){let e=Df[t.phase]??Df[t.status]??"\u2753",n=Rt(t.duration),r=t.multiTurn?"multi-turn":"single",o=t.prompt.length>80?t.prompt.slice(0,80)+"...":t.prompt,i=t.costUsd>0?` | $${t.costUsd.toFixed(2)}`:"",s=[`${e} ${t.name} [${t.id}] (${n}${i}) \u2014 ${r}`,` \u{1F4C1} ${t.workdir}`,` \u{1F4DD} "${o}"`];if(t.worktreePath&&t.worktreeBranch){let d=` \u{1F33F} Worktree: ${t.worktreeBranch}`;t.worktreeMerged?d+=" [merged \u2713]":t.worktreePrUrl?d+=` [PR: ${t.worktreePrUrl}]`:d+=" [not merged]",s.push(d)}t.phase!==t.status&&s.push(` \u2699\uFE0F Phase: ${t.phase}`),t.lifecycle&&t.lifecycle!==t.phase&&s.push(` \u{1F504} Lifecycle: ${t.lifecycle}`),(t.requestedPermissionMode||t.currentPermissionMode||t.approvalExecutionState)&&s.push(` \u{1F510} Approval: ${t.approvalExecutionState??"unknown"} (requested=${t.requestedPermissionMode??"unknown"}, effective=${t.currentPermissionMode??"unknown"})`),t.resumable&&s.push(" \u21A9\uFE0F Resumable: yes"),t.harness&&s.push(` \u{1F9F0} Harness: ${t.harness}`);let a=_(t);return a&&s.push(` \u{1F517} Backend ID: ${a}`),t.resumeSessionId&&s.push(` \u21A9\uFE0F Resumed from: ${t.resumeSessionId}${t.forkSession?" (forked)":""}`),s.join(`
48
- `)}function qi(t,e){let n=t.sessionsWithDuration>0?t.totalDurationMs/t.sessionsWithDuration:0,{completed:r,failed:o,killed:i}=t.sessionsByStatus,s=["\u{1F4CA} OpenClaw Code Agent Stats","","\u{1F4CB} Sessions",` Launched: ${t.totalLaunched}`,` Running: ${e}`,` Completed: ${r}`,` Failed: ${o}`,` Killed: ${i}`,"",`\u23F1\uFE0F Average duration: ${n>0?Rt(n):"n/a"}`];if(t.mostExpensive){let a=t.mostExpensive;s.push("","\u{1F3C6} Notable session",` ${a.name} [${a.id}]`,` \u{1F4DD} "${a.prompt}"`)}return s.join(`
49
- `)}function Me(t,e){return e<=0?"":t.length<=e?t:e<=3?".".repeat(e):t.slice(0,e-3)+"..."}function ji(t,e){let n=t.split(`
50
- `),r=[],o=0;for(let i=n.length-1;i>=0;i--){let s=n[i].length+(r.length>0?1:0);if(o+s>e&&r.length>0)break;r.unshift(n[i]),o+=s}return r.join(`
51
- `)}function Lf(t,e){let n=t.split(`
52
- `),r=[],o=0;for(let i=0;i<n.length;i++){let s=n[i].length+(r.length>0?1:0);if(o+s>e&&r.length>0)break;r.push(n[i]),o+=s}return r.join(`
53
- `)}var On,go,mr=!1;function Wf(t){try{return t?.config?.current?.()}catch{return}}function fr(t,e){if(t&&typeof t=="object"){On=t,arguments.length>=2?(go=e,mr=!0):mr||(go=Wf(On),mr=!0);return}On=void 0,go=void 0,mr=!1}function Bf(){return On}function Uf(){return On?.tasks?.managedFlows??On?.taskFlow}function Kf(){return mr||(go=Wf(On),mr=!0),go}var Mw="openclaw-code-agent",Cw=160,Gi={create(){},progress(){},finalize(){}};function Hi(t,e){let n=e instanceof Error?e.message:String(e);console.warn(`[SessionTaskLifecycle] ${t} failed: ${n}`)}function _w(t,e){if(e.applied===!1){let n=e.code?` (${e.code})`:"";console.warn(`[SessionTaskLifecycle] ${t} mutation was not applied${n}`)}}function Ew(t){let e=t.prompt.trim().replace(/\s+/g," ");return Me(e||t.name,Cw)}function $w(t){if(t.status==="starting"||t.lifecycle==="starting")return"Starting";if(t.lifecycle==="active")return"Running";if(t.lifecycle==="awaiting_plan_decision")return"Waiting for plan approval";if(t.lifecycle==="awaiting_user_input")return"Waiting for input";if(t.lifecycle==="awaiting_worktree_decision")return"Waiting for worktree decision";if(t.lifecycle==="suspended")return"Suspended after idle timeout"}function Ow(t){if(t.status==="completed")return"succeeded";if(t.status==="failed")return"failed";if(t.status==="killed")return t.killReason==="idle-timeout"||t.killReason==="startup-timeout"?"timed_out":"cancelled"}function gl(t,e){return t==="completed"?"Completed":t==="failed"?"Failed":e==="idle-timeout"?"Timed out after idle timeout":e==="startup-timeout"?"Timed out during startup":e==="shutdown"?"Cancelled during shutdown":e==="user"?"Cancelled by user":"Cancelled"}function Dw(t){return t.lifecycle==="awaiting_plan_decision"||t.lifecycle==="awaiting_user_input"||t.lifecycle==="awaiting_worktree_decision"||t.lifecycle==="suspended"}function hl(t,e,n){return{phase:e,integration:"phase-1-managed-task-flow",sessionId:t.id,sessionName:t.name,sessionStatus:t.status,sessionLifecycle:t.lifecycle,summary:n}}function Nw(t){if(!t||typeof t!="object")return!1;let e=t;return typeof e.createManaged=="function"&&typeof e.resume=="function"&&typeof e.setWaiting=="function"&&typeof e.finish=="function"&&typeof e.fail=="function"}function Vf(t,e){if(e.applied)return e.flow;let n=e.current;return n?.flowId&&typeof n.revision=="number"?n:t}var yl=class{constructor(e){this.taskFlow=e}taskFlow;flow;finalized=!1;lastProgressKey;create(e){if(this.flow||this.finalized)return;let n="Starting",r=Date.now();try{this.flow=this.taskFlow.createManaged({controllerId:Mw,goal:Ew(e),status:"running",notifyPolicy:"silent",currentStep:n,stateJson:hl(e,"created",n),createdAt:e.startedAt,updatedAt:r}),this.lastProgressKey=this.progressKey(e,n)}catch(o){Hi("create",o)}}progress(e){if(!this.flow||this.finalized)return;let n=$w(e);if(!n)return;let r=this.progressKey(e,n);if(r!==this.lastProgressKey)try{let o=hl(e,"progress",n),i=Date.now(),s=Dw(e)?this.taskFlow.setWaiting({flowId:this.flow.flowId,expectedRevision:this.flow.revision,currentStep:n,stateJson:o,waitJson:{reason:n,sessionId:e.id},blockedSummary:n,updatedAt:i}):this.taskFlow.resume({flowId:this.flow.flowId,expectedRevision:this.flow.revision,status:"running",currentStep:n,stateJson:o,updatedAt:i});this.flow=Vf(this.flow,s),this.lastProgressKey=r}catch(o){Hi("progress",o)}}finalize(e){if(!this.flow||this.finalized)return;let n=Ow(e);if(!n)return;let r=n==="succeeded"?"Completed":n==="failed"?"Failed":gl(e.status,e.killReason);try{let o=e.completedAt??Date.now(),i={...hl(e,"terminal",r),terminalStatus:n,terminalSummary:gl(e.status,e.killReason),...e.status==="failed"&&e.error?{error:e.error}:{}},s=n==="succeeded"?this.taskFlow.finish({flowId:this.flow.flowId,expectedRevision:this.flow.revision,stateJson:i,updatedAt:o,endedAt:o}):this.taskFlow.fail({flowId:this.flow.flowId,expectedRevision:this.flow.revision,stateJson:i,blockedSummary:gl(e.status,e.killReason),updatedAt:o,endedAt:o});_w("finalize",s),this.flow=Vf(this.flow,s),this.finalized=!0}catch(o){Hi("finalize",o)}}progressKey(e,n){return`${e.status}:${e.lifecycle}:${n}`}};function zi(t){if(!t.sessionKey?.trim())return Gi;try{let e=Uf()?.fromToolContext;if(typeof e!="function")return Gi;let n=e(t);return Nw(n)?new yl(n):Gi}catch(e){return Hi("resolve",e),Gi}}function Fw(t){return t instanceof Error?t.message:String(t)}function qf(t,e){return t?("id"in t?t.id:t.sessionId)??e??"unknown-session":e??"unknown-session"}function Lw(t){return!t||typeof t!="object"?!1:typeof t.prompt=="string"}function Ww(t){return!!t&&typeof t=="object"&&typeof t.formatLaunchResult=="function"}function jf(t){return{name:"agent_launch",description:"Launch a coding agent session in background to execute a development task. Sessions are multi-turn \u2014 they stay open for follow-up messages via agent_respond. Supports resuming previous sessions. Returns a session ID and name for tracking.",parameters:m.Object({prompt:m.String({description:"The task prompt to execute"}),name:m.Optional(m.String({description:"Short human-readable name for the session (kebab-case, e.g. 'fix-auth'). Auto-generated from prompt if omitted."})),workdir:m.Optional(m.String({description:"Working directory (defaults to cwd)"})),model:m.Optional(m.String({description:"Model name to use"})),system_prompt:m.Optional(m.String({description:"Additional system prompt"})),allowed_tools:m.Optional(m.Array(m.String(),{description:"List of allowed tools"})),resume_session_id:m.Optional(m.String({description:"Session reference to continue or fork from. Prefer the plugin session ID shown by agent_launch or agent_sessions; persisted backend conversation IDs also resolve when available."})),fork_session:m.Optional(m.Boolean({description:"When resuming, fork to a new session instead of continuing the existing one. Use with resume_session_id."})),force_new_session:m.Optional(m.Boolean({description:"Bypass resume-first protection and start a brand-new linked session even when a resumable or active linked session already exists."})),permission_mode:m.Optional(m.Union([m.Literal("default"),m.Literal("plan"),m.Literal("bypassPermissions")],{description:"Permission mode: 'default' (plugin-managed interactive execution), 'plan' (present the plan first and block implementation until approval), 'bypassPermissions' (fully autonomous execution). Defaults to plugin config ('plan' by default)."})),plan_approval:m.Optional(m.Union([m.Literal("ask"),m.Literal("delegate"),m.Literal("approve")],{description:"Plan approval policy for this session: 'ask' (send the full plan to the user with Approve/Revise/Reject buttons), 'delegate' (orchestrator must review the full plan, then either approve directly or escalate back to the user with the same buttons), 'approve' (auto-approve after verification). Overrides the plugin-level planApproval setting."})),harness:m.Optional(m.String({description:"Agent harness to use (e.g. 'claude-code'). Defaults to 'claude-code'."})),worktree_strategy:m.Optional(m.Union([m.Literal("off"),m.Literal("manual"),m.Literal("ask"),m.Literal("delegate"),m.Literal("auto-merge"),m.Literal("auto-pr")],{description:"Worktree strategy: 'off' (no worktree), 'manual' (create worktree but no auto merge-back), 'ask' (prompt user with Merge/Open PR/Later/Discard buttons), 'delegate' (orchestrator decides), 'auto-merge' (merge automatically), 'auto-pr' (open/update a PR automatically). Defaults to the plugin config when unset."})),worktree_base_branch:m.Optional(m.String({description:"Base branch for worktree merge/PR operations (default: auto-detected or 'main')"})),worktree_pr_target_repo:m.Optional(m.String({description:"Target repository for cross-repo PRs (e.g. 'openai/codex' for fork-to-upstream workflow). If not set, auto-detected from 'upstream' remote or defaults to 'origin'."}))}),async execute(e,n){if(!v)return{content:[{type:"text",text:"Error: SessionManager not initialized. The code-agent service must be running."}]};if(!Lw(n))return{content:[{type:"text",text:"Error: Invalid parameters. Expected at least { prompt }."}]};n.agentId&&console.warn(`[agent_launch] \u26A0\uFE0F agentId="${n.agentId}" was passed as a parameter \u2014 this is WRONG. agentId is only for sessions_spawn (OpenClaw sub-agents), not agent_launch (CC sessions). The field is being ignored. ctx.agentId="${t.agentId}" will be used for origin routing instead.`);try{let r=Vi(n,t,v);if(r.kind!=="resolved")return{content:[{type:"text",text:r.text}]};let{workdir:o,harness:i,resolvedModel:s,permissionMode:a,planApproval:d,originChannel:l,originThreadId:u,originSessionKey:c,route:g,resumeSessionId:S,resolvedResumeId:k,clearedPersistedCodexResume:I,reasoningEffort:P,fastMode:b}=r,A=n.resume_session_id?v.resolve(n.resume_session_id)??v.getPersistedSession(n.resume_session_id):void 0,T=!n.fork_session&&A?fo(A):void 0;if(T?.kind==="direct")return{content:[{type:"text",text:`Session ${A.name} [${qf(A,n.resume_session_id)}] is already running. Use agent_respond(session='${n.resume_session_id}', message='<next instruction>') instead of agent_launch(resume_session_id=...).`}]};if(T?.kind==="unavailable")return{content:[{type:"text",text:`Resume unavailable for session ${A.name} [${qf(A,n.resume_session_id)}] (${T.reason}). Use agent_launch(prompt='<new task>') for a fresh session or set fork_session=true to fork from prior context.`}]};let C=v.spawn({prompt:n.prompt,sessionIdOverride:n.fork_session?void 0:T?.kind==="resume"||T?.kind==="relaunch"?T.stableSessionId:void 0,name:n.name,workdir:o,model:s,reasoningEffort:P,fastMode:b,systemPrompt:n.system_prompt,allowedTools:n.allowed_tools,resumeSessionId:T?.kind==="resume"?T.resumeSessionId:S,resumeWorktreeFrom:k,forkSession:S?n.fork_session:!1,multiTurn:!0,permissionMode:a,planApproval:d,codexApprovalPolicy:i==="codex"?"never":void 0,originChannel:l,originThreadId:u,originAgentId:t.agentId||void 0,originSessionKey:c,route:g,harness:i,taskLifecycle:zi(t),worktreeStrategy:n.worktree_strategy,worktreeBaseBranch:n.worktree_base_branch,worktreePrTargetRepo:n.worktree_pr_target_repo});return{content:[{type:"text",text:Ww(v)?v.formatLaunchResult({prompt:n.prompt,workdir:o,harness:i,permissionMode:a??E.permissionMode,planApproval:d,forceNewSession:n.force_new_session,resumeSessionId:n.resume_session_id,forkSession:n.fork_session,clearedPersistedCodexResume:I},C):bi({prompt:n.prompt,workdir:o,harness:i,permissionMode:a??E.permissionMode,planApproval:d,resumeSessionId:n.resume_session_id,forkSession:n.fork_session,forceNewSession:n.force_new_session,clearedPersistedCodexResume:I},{id:C.id,name:C.name,model:C.model,reasoningEffort:C.reasoningEffort??dn(i),fastMode:C.fastMode??b,worktreeStrategy:C.worktreeStrategy??n.worktree_strategy??E.defaultWorktreeStrategy??"off",worktreePath:C.worktreePath,originalWorkdir:C.originalWorkdir})}]}}catch(r){let o=Fw(r),i=o.includes("Max sessions")?"":`
54
-
55
- Use agent_sessions to see active sessions and their status.`;return{content:[{type:"text",text:`Error launching session: ${o}${i}`}]}}}}}De();Y();Te();import{existsSync as xl,readFileSync as gg}from"fs";import{EventEmitter as lI}from"events";import{webcrypto as Hf}from"node:crypto";var Gf="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var Bw=128,Dn,gr;function Uw(t){if(t<0||t>1024)throw new RangeError("Wrong ID size");!Dn||Dn.length<t?(Dn=Buffer.allocUnsafe(t*Bw),Hf.getRandomValues(Dn),gr=0):gr+t>Dn.length&&(Hf.getRandomValues(Dn),gr=0),gr+=t}function Qi(t=21){Uw(t|=0);let e="";for(let n=gr-t;n<gr;n++)e+=Gf[Dn[n]&63];return e}pl();Te();he();var zf={starting:["running","failed","killed"],running:["completed","failed","killed"],completed:[],failed:[],killed:[]},Qf=new Set(["merged","released","pr_open","dismissed","cleanup_failed"]);function Kw(t){return t.requestedPermissionMode!=="plan"?"not_plan_gated":t.pendingPlanApproval?"awaiting_approval":t.planModeApproved?"approved_then_implemented":t.currentPermissionMode!=="plan"?"implemented_without_required_approval":"awaiting_plan_output"}function Ne(t){return{...t,approvalExecutionState:Kw(t)}}function Sl(t,e){switch(e.type){case"initialize":return Ne({...t,worktreeState:e.hasWorktree&&t.worktreeState==="none"?"provisioned":t.worktreeState,lifecycle:t.status==="starting"?"starting":t.lifecycle,runtimeState:t.status==="starting"?"live":t.runtimeState});case"status.transition":return e.status==="starting"?Ne({...t,status:e.status,lifecycle:"starting",runtimeState:"live"}):e.status==="running"?Ne({...t,status:e.status,lifecycle:t.lifecycle==="starting"||t.lifecycle==="suspended"?"active":t.lifecycle,runtimeState:"live"}):Ne({...t,status:e.status,runtimeState:"stopped",lifecycle:t.lifecycle==="suspended"?"suspended":"terminal"});case"permission.mode_changed":return Ne({...t,currentPermissionMode:e.currentPermissionMode});case"turn.started":return Ne({...t,lifecycle:"active",runtimeState:"live"});case"input.requested":return Ne({...t,lifecycle:t.pendingPlanApproval?"awaiting_plan_decision":"awaiting_user_input"});case"plan.requested":if(t.planModeApproved)return t;{let n=t.pendingPlanApproval&&t.approvalState==="pending"&&t.planApprovalContext===e.context,r=t.pendingPlanApproval&&t.approvalState==="changes_requested"&&t.planApprovalContext===e.context&&t.planDecisionVersion>0,o=!t.pendingPlanApproval&&t.approvalState==="changes_requested"&&t.planApprovalContext===e.context&&t.planDecisionVersion>0,i=n||r||o?t.planDecisionVersion:t.planDecisionVersion+1;return Ne({...t,pendingPlanApproval:!0,planApprovalContext:e.context,approvalState:"pending",planDecisionVersion:i,actionablePlanDecisionVersion:i,canonicalPlanPromptVersion:n?t.canonicalPlanPromptVersion:void 0,approvalPromptRequiredVersion:n?t.approvalPromptRequiredVersion:void 0,approvalPromptVersion:n?t.approvalPromptVersion:void 0,approvalPromptStatus:n?t.approvalPromptStatus:"not_sent",approvalPromptTransport:n?t.approvalPromptTransport:"none",approvalPromptMessageKind:n?t.approvalPromptMessageKind:"none",approvalPromptLastAttemptAt:n?t.approvalPromptLastAttemptAt:void 0,approvalPromptDeliveredAt:n?t.approvalPromptDeliveredAt:void 0,approvalPromptFailedAt:n?t.approvalPromptFailedAt:void 0,lifecycle:"awaiting_plan_decision"})}case"plan.cleared":return Ne({...t,pendingPlanApproval:!1,planApprovalContext:void 0,actionablePlanDecisionVersion:void 0,approvalState:t.approvalState==="pending"?"not_required":t.approvalState});case"plan.approved":return Ne({...t,pendingPlanApproval:!1,planApprovalContext:void 0,actionablePlanDecisionVersion:void 0,planModeApproved:!0,approvalState:"approved",planDecisionVersion:t.planDecisionVersion+1,approvalPromptVersion:void 0,approvalPromptStatus:"not_sent",lifecycle:t.status==="running"?"active":t.lifecycle});case"plan.changes_requested":return Ne({...t,pendingPlanApproval:!0,approvalState:"changes_requested",planDecisionVersion:t.planDecisionVersion+1,actionablePlanDecisionVersion:void 0,canonicalPlanPromptVersion:void 0,approvalPromptRequiredVersion:void 0,approvalPromptVersion:void 0,approvalPromptStatus:"not_sent",approvalPromptTransport:"none",approvalPromptMessageKind:"none",approvalPromptLastAttemptAt:void 0,approvalPromptDeliveredAt:void 0,approvalPromptFailedAt:void 0,lifecycle:"awaiting_plan_decision"});case"terminal.entered":return Ne({...t,lifecycle:e.suspended?"suspended":"terminal",runtimeState:"stopped"});case"worktree.decision_requested":return Ne({...t,lifecycle:"awaiting_worktree_decision",worktreeState:"pending_decision"});case"worktree.state_set":return Ne({...t,worktreeState:e.worktreeState,lifecycle:e.worktreeState==="pending_decision"?"awaiting_worktree_decision":Qf.has(e.worktreeState)?"terminal":t.lifecycle});case"delivery.state_set":return Ne({...t,deliveryState:e.deliveryState})}}function Jf(t,e){let n={...t,...e.lifecycle!==void 0?{lifecycle:e.lifecycle}:{},...e.approvalState!==void 0?{approvalState:e.approvalState}:{},...e.approvalExecutionState!==void 0?{approvalExecutionState:e.approvalExecutionState}:{},...e.worktreeState!==void 0?{worktreeState:e.worktreeState}:{},...e.runtimeState!==void 0?{runtimeState:e.runtimeState}:{},...e.deliveryState!==void 0?{deliveryState:e.deliveryState}:{},...e.requestedPermissionMode!==void 0?{requestedPermissionMode:e.requestedPermissionMode}:{},...e.currentPermissionMode!==void 0?{currentPermissionMode:e.currentPermissionMode}:{},...e.pendingPlanApproval!==void 0?{pendingPlanApproval:e.pendingPlanApproval}:{},...e.planApprovalContext!==void 0?{planApprovalContext:e.planApprovalContext}:{},...e.planDecisionVersion!==void 0?{planDecisionVersion:e.planDecisionVersion}:{},...e.actionablePlanDecisionVersion!==void 0?{actionablePlanDecisionVersion:e.actionablePlanDecisionVersion}:{},...e.canonicalPlanPromptVersion!==void 0?{canonicalPlanPromptVersion:e.canonicalPlanPromptVersion}:{},...e.approvalPromptRequiredVersion!==void 0?{approvalPromptRequiredVersion:e.approvalPromptRequiredVersion}:{},...e.approvalPromptVersion!==void 0?{approvalPromptVersion:e.approvalPromptVersion}:{},...e.approvalPromptStatus!==void 0?{approvalPromptStatus:e.approvalPromptStatus}:{},...e.approvalPromptTransport!==void 0?{approvalPromptTransport:e.approvalPromptTransport}:{},...e.approvalPromptMessageKind!==void 0?{approvalPromptMessageKind:e.approvalPromptMessageKind}:{},...e.approvalPromptLastAttemptAt!==void 0?{approvalPromptLastAttemptAt:e.approvalPromptLastAttemptAt}:{},...e.approvalPromptDeliveredAt!==void 0?{approvalPromptDeliveredAt:e.approvalPromptDeliveredAt}:{},...e.approvalPromptFailedAt!==void 0?{approvalPromptFailedAt:e.approvalPromptFailedAt}:{},...e.planModeApproved!==void 0?{planModeApproved:e.planModeApproved}:{}};return e.approvalState==="changes_requested"&&e.pendingPlanApproval===void 0&&(n={...n,pendingPlanApproval:!1}),n.pendingPlanApproval?n={...n,approvalState:"pending",actionablePlanDecisionVersion:n.actionablePlanDecisionVersion??n.planDecisionVersion,lifecycle:"awaiting_plan_decision"}:n.approvalState==="changes_requested"&&(n={...n,actionablePlanDecisionVersion:void 0,lifecycle:"awaiting_user_input"}),e.pendingWorktreeDecisionSince!==void 0||n.worktreeState==="pending_decision"?n=Sl(n,{type:"worktree.decision_requested"}):Qf.has(n.worktreeState)&&(n={...n,lifecycle:"terminal"}),Ne(n)}var Ji=class{queue=[];resolve=null;done=!1;hasPending(){return this.queue.length>0}push(e){this.queue.push(e),this.resolve&&(this.resolve(),this.resolve=null)}end(){this.done=!0,this.resolve&&(this.resolve(),this.resolve=null)}async*[Symbol.asyncIterator](){for(;;){for(;this.queue.length>0;)yield this.queue.shift();if(this.done)return;await new Promise(e=>{this.resolve=e})}}};import{appendFileSync as Vw}from"fs";import{tmpdir as qw}from"os";import{join as jw}from"path";var Yf=2e3;function hr(t){return jw(qw(),`openclaw-agent-${t}.txt`)}function Gw(t,e){if(!e)return;let n=e.split(`
56
- `),[r="",...o]=n;t.length===0?t.push(r):t[t.length-1]+=r;for(let i of o)t.push(i)}function Xf(t,e,n){Gw(t,n),t.length>Yf&&t.splice(0,t.length-Yf);try{Vw(hr(e),n,"utf-8")}catch{}return t}var Yi=class{timers=new Map;get size(){return this.timers.size}set(e,n,r){this.clear(e);let o=setTimeout(r,n);o.unref?.(),this.timers.set(e,o)}clear(e){let n=this.timers.get(e);n&&(clearTimeout(n),this.timers.delete(e))}clearAll(){for(let e of this.timers.values())clearTimeout(e);this.timers.clear()}};var Xi=class{constructor(e){this.deps=e}deps;waitingForInputFired=!1;lastTurnHadQuestion=!1;turnInProgress=!0;currentTurnText="";currentTurnPlanArtifact;beginUserTurn(){this.waitingForInputFired=!1,this.turnInProgress=!0,this.currentTurnText="",this.currentTurnPlanArtifact=void 0,this.lastTurnHadQuestion=!1}noteTextDelta(e,n){this.waitingForInputFired=!1,n||(this.lastTurnHadQuestion=!1),this.deps.appendOutput(e),this.currentTurnText+=this.currentTurnText?`
57
- ${e}`:e,this.deps.emitOutput(e)}noteToolCall(e){let{name:n,input:r,currentPermissionMode:o,permissionMode:i,planModeApproved:s}=e;if(n==="Write"){let a=r;typeof a?.file_path=="string"&&a.file_path.includes("/.claude/plans/")&&this.deps.setPlanFilePath(a.file_path)}n==="AskUserQuestion"?(this.lastTurnHadQuestion=!0,this.deps.applyInputRequested(),(o==="plan"||i==="plan")&&!s&&this.deps.markPendingPlanApproval("plan-mode")):(n==="ExitPlanMode"||n==="set_permission_mode")&&!s&&(this.lastTurnHadQuestion=!0,this.deps.markPendingPlanApproval("plan-mode")),this.deps.emitToolUse(n,r)}notePendingInput(){this.lastTurnHadQuestion=!0,this.deps.applyInputRequested(),this.waitingForInputFired||(this.waitingForInputFired=!0,this.deps.emitTurnEnd(!0))}clearResolvedPendingInput(e,n){if(!(!e||n?.requestId===e))return n}notePlanArtifact(e,n){if(this.currentTurnPlanArtifact=e,this.deps.setLatestPlanArtifact(e),!n)return;let r=e.markdown.trim();!r||this.currentTurnText.trim()===r||(this.deps.appendOutput(r),this.currentTurnText=r,this.deps.emitOutput(r))}noteSettingsChanged(e){let{oldMode:n,permissionMode:r,planModeApproved:o}=e;if(r)return r!=="plan"&&n==="plan"&&!o&&(this.deps.markPendingPlanApproval("plan-mode"),this.lastTurnHadQuestion=!0),r}finishSuccessfulTurn(e){let{currentPermissionMode:n,permissionMode:r,pendingPlanApproval:o,planModeApproved:i,pendingInputState:s,hasPendingMessages:a}=e,d=o;(n==="plan"||r==="plan")&&!d&&!i&&(this.deps.markPendingPlanApproval("plan-mode"),d=!0);let l=d||this.lastTurnHadQuestion||!!s;if(this.turnInProgress=a,l&&!this.waitingForInputFired)this.waitingForInputFired=!0,d||this.deps.markAwaitingUserInput(),this.deps.emitTurnEnd(!0);else if(!a&&!l){if(this.deps.queueWorktreeFinalizationPrompt?.()){this.turnInProgress=!0;return}this.deps.completeTurn(),this.deps.emitTurnEnd(!1)}}finishTerminalTurn(){this.turnInProgress=!1}finishInterruptedTurn(e){this.turnInProgress=e,this.waitingForInputFired=!1,this.lastTurnHadQuestion=!1,this.currentTurnText="",this.currentTurnPlanArtifact=void 0}resetAfterRun(){this.lastTurnHadQuestion=!1,this.currentTurnText="",this.currentTurnPlanArtifact=void 0}};var Zi=class{constructor(e){this.deps=e}deps;applyMessage(e,n){if(e.type==="backend_ref"){this.deps.clearStartupTimer(),this.deps.assignBackendRef({...e.ref}),this.deps.transitionRunning();return}if(e.type==="run_started"){e.runId&&this.deps.noteRunStarted(e.runId);return}if(e.type==="text_delta"){this.deps.noteTextDelta(e.text,n.pendingPlanApproval);return}if(e.type==="tool_call"){this.deps.noteToolCall({name:e.name,input:e.input,currentPermissionMode:n.currentPermissionMode,permissionMode:n.permissionMode,planModeApproved:n.planModeApproved});return}if(e.type==="pending_input"){this.deps.setPendingInputState(e.state),this.deps.notePendingInput();return}if(e.type==="pending_input_resolved"){this.deps.setPendingInputState(this.deps.clearResolvedPendingInput(e.requestId,n.pendingInputState));return}if(e.type==="plan_artifact"){this.deps.notePlanArtifact(e);return}if(e.type==="settings_changed"){let r=this.deps.noteSettingsChanged({oldMode:n.currentPermissionMode,permissionMode:e.permissionMode,planModeApproved:n.planModeApproved});r&&this.deps.setCurrentPermissionMode(r);return}if(e.type==="run_completed"){this.deps.handleRunCompleted(e.data);return}e.type}};rt();var uI=120*1e3;function us(t){return t instanceof Error?t.message:String(t)}var ps=class extends lI{id;name;harnessSessionId;backendRef;harness;harnessHandle;prompt;workdir;model;reasoningEffort;fastMode;systemPrompt;allowedTools;permissionMode;requestedPermissionMode;planApproval;codexApprovalPolicy;currentPermissionMode;pendingModeSwitch;resumeSessionId;forkSession;worktreePath;originalWorkdir;worktreeBranch;worktreeStrategy;worktreeBaseBranch;worktreePrTargetRepo;autoMergeParentSessionId;autoMergeConflictResolutionAttemptCount;autoMergeResolverSessionId;worktreePushRemote;worktreeDisposition;worktreePrUrl;worktreePrNumber;worktreeMerged;worktreeMergedAt;worktreeLifecycle;worktreeState="none";multiTurn;goalTaskId;messageStream;_status="starting";error;startedAt;completedAt;abortController;outputBuffer=[];result;costUsd=0;originChannel;originThreadId;originAgentId;originSessionKey;route;pendingInputState;pendingPlanApproval=!1;planApprovalContext;planDecisionVersion=0;actionablePlanDecisionVersion;canonicalPlanPromptVersion;approvalPromptRequiredVersion;approvalPromptVersion;approvalPromptStatus="not_sent";approvalPromptTransport="none";approvalPromptMessageKind="none";approvalPromptLastAttemptAt;approvalPromptDeliveredAt;approvalPromptFailedAt;planFilePath;killReason="unknown";planModeApproved=!1;turnRuntime;harnessEvents;worktreeFinalizationPromptIssued=!1;lifecycle="starting";approvalState="not_required";approvalExecutionState="not_plan_gated";approvalRationale;latestPlanArtifact;latestPlanArtifactVersion;runtimeState="live";deliveryState="idle";canUseTool;autoRespondCount=0;timers=new Yi;constructor(e,n){super(),this.id=e.sessionIdOverride??Qi(8),this.name=n,this.harness=e.harness?po(e.harness):Cf(),this.prompt=e.prompt,this.workdir=e.workdir,this.model=e.model??ar(this.harness.name),this.reasoningEffort=e.reasoningEffort??dn(this.harness.name),this.fastMode=this.harness.name==="codex"?e.fastMode??dr(this.harness.name):void 0,this.systemPrompt=e.systemPrompt,this.allowedTools=e.allowedTools,this.permissionMode=e.permissionMode??E.permissionMode,this.requestedPermissionMode=e.requestedPermissionMode??this.permissionMode,this.planApproval=e.planApproval??E.planApproval,this.codexApprovalPolicy=this.harness.name==="codex"?"never":void 0,this.currentPermissionMode=this.permissionMode,this.originChannel=e.originChannel,this.originThreadId=e.originThreadId,this.originAgentId=e.originAgentId,this.originSessionKey=e.originSessionKey,this.route=e.route?{...e.route}:void 0,this.backendRef=e.backendRef?{...e.backendRef}:void 0,this.resumeSessionId=e.resumeSessionId,this.forkSession=e.forkSession,this.multiTurn=e.multiTurn??!0,this.goalTaskId=e.goalTaskId,this.worktreeStrategy=e.worktreeStrategy,this.worktreeBaseBranch=e.worktreeBaseBranch,e.worktreePrTargetRepo&&(this.worktreePrTargetRepo=e.worktreePrTargetRepo),e.autoMergeParentSessionId&&(this.autoMergeParentSessionId=e.autoMergeParentSessionId),e.autoMergeConflictResolutionAttemptCount!==void 0&&(this.autoMergeConflictResolutionAttemptCount=e.autoMergeConflictResolutionAttemptCount),e.autoMergeResolverSessionId&&(this.autoMergeResolverSessionId=e.autoMergeResolverSessionId),this.canUseTool=e.canUseTool,this.startedAt=Date.now(),this.abortController=new AbortController,this.turnRuntime=new Xi({appendOutput:r=>Xf(this.outputBuffer,this.id,r),emitOutput:r=>this.emit("output",this,r),emitToolUse:(r,o)=>this.emit("toolUse",this,r,o),emitTurnEnd:r=>this.emit("turnEnd",this,r),markPendingPlanApproval:r=>this.markPendingPlanApproval(r),markAwaitingUserInput:()=>this.markAwaitingUserInput(),applyInputRequested:()=>this.applyControlEvent({type:"input.requested"}),completeTurn:()=>{this.applyControlEvent({type:"terminal.entered"}),this.complete("done")},queueWorktreeFinalizationPrompt:()=>this.queueWorktreeFinalizationPrompt(),setPlanFilePath:r=>{this.planFilePath=r},setLatestPlanArtifact:r=>{this.latestPlanArtifact=r;let o=this.pendingPlanApproval?this.actionablePlanDecisionVersion??this.planDecisionVersion:void 0;this.latestPlanArtifactVersion=o&&o>0?o:void 0}}),this.harnessEvents=new Zi({clearStartupTimer:()=>this.clearTimer("startup"),assignBackendRef:r=>{this.backendRef=r,this.harnessSessionId=r.conversationId,r.worktreePath&&(this.worktreePath=r.worktreePath,this.originalWorkdir??=this.workdir,this.worktreeBranch??=is(r.worktreePath),this.worktreeStrategy&&this.worktreeStrategy!=="off"&&this.applyControlEvent({type:"worktree.state_set",worktreeState:"provisioned"}))},noteRunStarted:r=>{this.backendRef&&(this.backendRef={...this.backendRef,runId:r})},transitionRunning:()=>{this._status==="starting"&&this.transition("running")},noteTextDelta:(r,o)=>this.turnRuntime.noteTextDelta(r,o),noteToolCall:r=>this.turnRuntime.noteToolCall(r),setPendingInputState:r=>{this.pendingInputState=r},notePendingInput:()=>this.turnRuntime.notePendingInput(),clearResolvedPendingInput:(r,o)=>this.turnRuntime.clearResolvedPendingInput(r,o),notePlanArtifact:r=>this.turnRuntime.notePlanArtifact(r.artifact,r.finalized),noteSettingsChanged:r=>this.turnRuntime.noteSettingsChanged(r),setCurrentPermissionMode:r=>{this.currentPermissionMode=r,this.applyControlEvent({type:"permission.mode_changed",currentPermissionMode:r})},handleRunCompleted:r=>{let o=r.outcome??(r.success?"completed":"failed");this.result={subtype:o==="interrupted"?"interrupted":r.success?"success":"error",duration_ms:r.duration_ms,total_cost_usd:r.total_cost_usd,num_turns:r.num_turns,result:r.result,is_error:o==="failed",session_id:r.session_id},this.costUsd=r.total_cost_usd;let i=this.multiTurn&&this.messageStream&&o==="interrupted",s=this.multiTurn&&this.messageStream&&o==="completed";i?(this.resetIdleTimer(),this.turnRuntime.finishInterruptedTurn(this.messageStream?.hasPending()===!0)):s?(this.resetIdleTimer(),this.turnRuntime.finishSuccessfulTurn({currentPermissionMode:this.currentPermissionMode,permissionMode:this.permissionMode,pendingPlanApproval:this.pendingPlanApproval,planModeApproved:this.planModeApproved,pendingInputState:this.pendingInputState,hasPendingMessages:this.messageStream?.hasPending()===!0})):(this.turnRuntime.finishTerminalTurn(),this.transitionToTerminal(o==="completed"?"completed":"failed")),this.turnRuntime.resetAfterRun(),this.pendingInputState=void 0}}),this.applyControlEvent({type:"initialize",hasWorktree:!!(this.worktreeStrategy&&this.worktreeStrategy!=="off")}),(e.planModeApproved!==void 0||e.approvalState!==void 0||e.approvalExecutionState!==void 0||e.approvalRationale!==void 0||e.pendingPlanApproval!==void 0||e.planApprovalContext!==void 0||e.planDecisionVersion!==void 0||e.actionablePlanDecisionVersion!==void 0||e.canonicalPlanPromptVersion!==void 0||e.approvalPromptRequiredVersion!==void 0||e.approvalPromptVersion!==void 0||e.approvalPromptStatus!==void 0||e.approvalPromptTransport!==void 0||e.approvalPromptMessageKind!==void 0||e.approvalPromptLastAttemptAt!==void 0||e.approvalPromptDeliveredAt!==void 0||e.approvalPromptFailedAt!==void 0)&&this.applyControlPatch({...e.planModeApproved!==void 0?{planModeApproved:e.planModeApproved}:{},...e.approvalState!==void 0?{approvalState:e.approvalState}:{},...e.approvalExecutionState!==void 0?{approvalExecutionState:e.approvalExecutionState}:{},...e.pendingPlanApproval!==void 0?{pendingPlanApproval:e.pendingPlanApproval}:{},...e.planApprovalContext!==void 0?{planApprovalContext:e.planApprovalContext}:{},...e.planDecisionVersion!==void 0?{planDecisionVersion:e.planDecisionVersion}:{},...e.actionablePlanDecisionVersion!==void 0?{actionablePlanDecisionVersion:e.actionablePlanDecisionVersion}:{},...e.canonicalPlanPromptVersion!==void 0?{canonicalPlanPromptVersion:e.canonicalPlanPromptVersion}:{},...e.approvalPromptRequiredVersion!==void 0?{approvalPromptRequiredVersion:e.approvalPromptRequiredVersion}:{},...e.approvalPromptVersion!==void 0?{approvalPromptVersion:e.approvalPromptVersion}:{},...e.approvalPromptStatus!==void 0?{approvalPromptStatus:e.approvalPromptStatus}:{},...e.approvalPromptTransport!==void 0?{approvalPromptTransport:e.approvalPromptTransport}:{},...e.approvalPromptMessageKind!==void 0?{approvalPromptMessageKind:e.approvalPromptMessageKind}:{},...e.approvalPromptLastAttemptAt!==void 0?{approvalPromptLastAttemptAt:e.approvalPromptLastAttemptAt}:{},...e.approvalPromptDeliveredAt!==void 0?{approvalPromptDeliveredAt:e.approvalPromptDeliveredAt}:{},...e.approvalPromptFailedAt!==void 0?{approvalPromptFailedAt:e.approvalPromptFailedAt}:{}}),this.approvalRationale=e.approvalRationale}get status(){return this._status}get harnessName(){return this.harness.name}get backendKind(){return this.harness.backendKind}get backendCapabilities(){return this.harness.capabilities}get backendConversationId(){return _(this)}get waitingForInputFired(){return this.turnRuntime.waitingForInputFired}set waitingForInputFired(e){this.turnRuntime.waitingForInputFired=e}get lastTurnHadQuestion(){return this.turnRuntime.lastTurnHadQuestion}set lastTurnHadQuestion(e){this.turnRuntime.lastTurnHadQuestion=e}get turnInProgress(){return this.turnRuntime.turnInProgress}set turnInProgress(e){this.turnRuntime.turnInProgress=e}get currentTurnText(){return this.turnRuntime.currentTurnText}set currentTurnText(e){this.turnRuntime.currentTurnText=e}get currentTurnPlanArtifact(){return this.turnRuntime.currentTurnPlanArtifact}set currentTurnPlanArtifact(e){this.turnRuntime.currentTurnPlanArtifact=e}get duration(){return(this.completedAt??Date.now())-this.startedAt}get phase(){return this.lifecycle}get isExplicitlyResumable(){return this.status!=="running"&&this.status!=="completed"&&this.killReason!=="done"&&!!this.backendConversationId}transition(e){if(!zf[this._status].includes(e))throw new Error(`Session state error: cannot transition from ${this._status} to ${e}. This is an internal error \u2014 please report it.`);let n=this._status;this._status=e,this.applyControlEvent({type:"status.transition",status:e}),this.emit("statusChange",this,e,n)}setTimer(e,n,r){this.timers.set(e,n,r)}clearTimer(e){this.timers.clear(e)}clearAllTimers(){this.timers.clearAll()}markPendingPlanApproval(e){let n=this.latestPlanArtifactVersion;this.approvalRationale=void 0,this.applyControlEvent({type:"plan.requested",context:e});let r=this.actionablePlanDecisionVersion??this.planDecisionVersion;this.currentTurnPlanArtifact&&r>0?(this.latestPlanArtifact=this.currentTurnPlanArtifact,this.latestPlanArtifactVersion=r):n!==r&&(this.latestPlanArtifact=void 0,this.latestPlanArtifactVersion=void 0)}clearPendingPlanApproval(){this.applyControlEvent({type:"plan.cleared"})}markAwaitingUserInput(){this.applyControlEvent({type:"input.requested"})}queueWorktreeFinalizationPrompt(){if(!this.multiTurn||!this.messageStream||!this.worktreePath||!this.worktreeStrategy||this.worktreeStrategy==="off"||this.worktreeFinalizationPromptIssued)return!1;let e=Sr(this.worktreePath);if(e.length===0)return!1;this.worktreeFinalizationPromptIssued=!0;let n=e.slice(0,20).map(i=>`- ${i}`).join(`
58
- `),r=e.length>20?`
59
- - ...and ${e.length-20} more`:"",o=["Your worktree still has uncommitted changes, so this session cannot finish yet.","",`Worktree: ${this.worktreePath}`,`Branch: ${this.worktreeBranch??"(unknown)"}`,"","Dirty entries:",`${n}${r}`,"","Before finishing, run `git status --short` in the worktree and do exactly one of these:","1. If these are real task changes, commit them on the worktree branch with `git add` and `git commit`.","2. If these are temporary or unrelated artifacts, remove or restore them so the worktree is clean.","3. If no repository changes were intended, leave the worktree clean and say that no changes were needed.","","Do not finish again until `git status --short` is clean or all real task changes are committed."].join(`
60
- `);return this.messageStream.push(this.harness.buildUserMessage(o,this.backendConversationId??"")),!0}async start(){try{let e;this.multiTurn?(this.messageStream=new Ji,this.messageStream.push(this.harness.buildUserMessage(this.prompt,"")),e=this.messageStream):e=this.prompt;let n=this.harness.launch({prompt:e,cwd:this.workdir,model:this.model,reasoningEffort:this.reasoningEffort,fastMode:this.fastMode,permissionMode:this.permissionMode,codexApprovalPolicy:this.codexApprovalPolicy,systemPrompt:this.systemPrompt,allowedTools:this.allowedTools,resumeSessionId:this.resumeSessionId,forkSession:this.forkSession,backendRef:this.backendRef,worktreeStrategy:this.worktreeStrategy,originalWorkdir:this.originalWorkdir??this.workdir,abortController:this.abortController,mcpServers:rf(),canUseTool:this.canUseTool});this.harnessHandle=n,this.setTimer("startup",uI,()=>{this._status==="starting"&&this.kill("startup-timeout")})}catch(e){let n=e instanceof Error?e.message:String(e);this.transitionToTerminal("failed",{error:n});return}this.consumeMessages(this.harnessHandle.messages).catch(e=>{let n=e instanceof Error?e.message:String(e),r=e instanceof Error?e.stack:void 0;console.error(`[Session ${this.id}] consumeMessages error: ${n}`,r),this.isActive&&this.transitionToTerminal("failed",{error:n})})}async sendMessage(e){if(this._status!=="running")throw new Error(`Session is not running (status: ${this._status})`);this.resetIdleTimer(),this.turnRuntime.beginUserTurn(),this.applyControlEvent({type:"turn.started"});let n=e;if(this.pendingModeSwitch){let r=this.pendingModeSwitch,o=!1,i=!1;if(this.harnessHandle?.setPermissionMode)try{await this.harnessHandle.setPermissionMode(r),this.currentPermissionMode=r,this.applyControlEvent({type:"permission.mode_changed",currentPermissionMode:r}),this.pendingModeSwitch=void 0,i=!0,o=!0}catch(s){throw console.error(`[Session ${this.id}] setPermissionMode(${r}) FAILED: ${us(s)}`),this.markPendingPlanApproval(this.planApprovalContext??"plan-mode"),new Error(`Failed to switch permission mode to ${r}: ${us(s)}`)}else this.pendingModeSwitch=void 0,i=!0,o=!0,console.warn(`[Session ${this.id}] Cannot call setPermissionMode \u2014 falling back to text prefix only (currentPermissionMode remains ${this.currentPermissionMode})`);i&&(this.clearPendingPlanApproval(),r!=="plan"&&this.applyControlEvent({type:"plan.approved"})),o&&(n=`[SYSTEM: The user has approved your plan. Exit plan mode immediately and implement the changes with full permissions. Do not ask for further confirmation.]
61
-
62
- ${e}`)}else if((this.pendingPlanApproval||this.approvalState==="changes_requested")&&!this.planModeApproved&&(this.approvalState!=="changes_requested"&&this.applyControlEvent({type:"plan.changes_requested"}),n=`[SYSTEM: The user wants changes to your plan. Revise the plan based on their feedback below, then re-submit your revised plan for approval. Do NOT start implementing yet.]
63
-
64
- ${e}`,this.harnessHandle?.setPermissionMode))try{await this.harnessHandle.setPermissionMode("plan"),this.currentPermissionMode="plan",this.applyControlEvent({type:"permission.mode_changed",currentPermissionMode:"plan"})}catch(r){console.warn(`[Session ${this.id}] Failed to re-assert plan mode: ${us(r)}`)}if(this.multiTurn&&this.messageStream)this.messageStream.push(this.harness.buildUserMessage(n,this.backendConversationId??""));else if(this.harnessHandle?.streamInput){let r=this.harness.buildUserMessage(n,this.backendConversationId??"");async function*o(){yield r}await this.harnessHandle.streamInput(o())}else throw new Error("Session does not support follow-up messages (launched in single-turn mode).")}async interrupt(){return!this.turnInProgress||!this.harnessHandle?.interrupt?!1:(await this.harnessHandle.interrupt(),!0)}async submitPendingInputOption(e){if(!this.pendingInputState||!this.harnessHandle?.submitPendingInputOption)return!1;let n=await this.harnessHandle.submitPendingInputOption(e);return n&&(this.waitingForInputFired=!1),n}async submitPendingInputText(e){if(!this.pendingInputState||!this.harnessHandle?.submitPendingInputText)return!1;let n=await this.harnessHandle.submitPendingInputText(e);return n&&(this.waitingForInputFired=!1),n}switchPermissionMode(e){this.pendingModeSwitch=e}get isActive(){return this._status==="starting"||this._status==="running"}kill(e){this.transitionToTerminal("killed",{reason:e})}complete(e="done"){this.transitionToTerminal("completed",{reason:e})}incrementAutoRespond(){this.autoRespondCount++}resetAutoRespond(){this.autoRespondCount=0}getOutput(e){return e===void 0?this.outputBuffer.slice():this.outputBuffer.slice(-e)}resetIdleTimer(){if(!this.multiTurn)return;let e=(E.idleTimeoutMinutes??15)*60*1e3;this.setTimer("idle",e,()=>{this._status==="running"&&(this.applyControlEvent({type:"terminal.entered",suspended:!0}),this.kill("idle-timeout"))})}teardown(){this.clearAllTimers(),this.completedAt||(this.completedAt=Date.now()),this.messageStream&&this.messageStream.end(),this.harnessHandle?.interrupt&&this.harnessHandle.interrupt().catch(e=>{console.warn(`[Session ${this.id}] interrupt during teardown failed: ${us(e)}`)}),this.abortController.abort(),this.applyControlEvent({type:"terminal.entered",suspended:this.lifecycle==="suspended"})}transitionToTerminal(e,n={}){this.isActive&&(this.turnInProgress=!1,n.reason&&(this.killReason=n.reason),n.error!==void 0&&(this.error=n.error),this.completedAt=Date.now(),this.applyControlEvent({type:"terminal.entered",suspended:e==="killed"&&n.reason==="idle-timeout"}),this.transition(e),this.teardown())}async consumeMessages(e){for await(let n of e){if(!this.isActive)break;this.resetIdleTimer(),this.harnessEvents.applyMessage(n,{pendingPlanApproval:this.pendingPlanApproval,currentPermissionMode:this.currentPermissionMode,permissionMode:this.permissionMode,planModeApproved:this.planModeApproved,pendingInputState:this.pendingInputState})}}controlStateSnapshot(){return{status:this._status,lifecycle:this.lifecycle,approvalState:this.approvalState,approvalExecutionState:this.approvalExecutionState,worktreeState:this.worktreeState,runtimeState:this.runtimeState,deliveryState:this.deliveryState,requestedPermissionMode:this.requestedPermissionMode,currentPermissionMode:this.currentPermissionMode,pendingPlanApproval:this.pendingPlanApproval,planApprovalContext:this.planApprovalContext,planDecisionVersion:this.planDecisionVersion,actionablePlanDecisionVersion:this.actionablePlanDecisionVersion,canonicalPlanPromptVersion:this.canonicalPlanPromptVersion,approvalPromptRequiredVersion:this.approvalPromptRequiredVersion,approvalPromptVersion:this.approvalPromptVersion,approvalPromptStatus:this.approvalPromptStatus,approvalPromptTransport:this.approvalPromptTransport,approvalPromptMessageKind:this.approvalPromptMessageKind,approvalPromptLastAttemptAt:this.approvalPromptLastAttemptAt,approvalPromptDeliveredAt:this.approvalPromptDeliveredAt,approvalPromptFailedAt:this.approvalPromptFailedAt,planModeApproved:this.planModeApproved}}applyControlEvent(e){let n=Sl(this.controlStateSnapshot(),e);this.applyControlState(n)}applyControlPatch(e){let n=Jf(this.controlStateSnapshot(),e);this.applyControlState(n)}setControlField(e,n){this.applyControlPatch({[e]:n})}applyControlState(e){let n=this.lifecycle;this.lifecycle=e.lifecycle,this.approvalState=e.approvalState,this.approvalExecutionState=e.approvalExecutionState,this.worktreeState=e.worktreeState,this.runtimeState=e.runtimeState,this.deliveryState=e.deliveryState,this.pendingPlanApproval=e.pendingPlanApproval,this.planApprovalContext=e.planApprovalContext,this.planDecisionVersion=e.planDecisionVersion,this.actionablePlanDecisionVersion=e.actionablePlanDecisionVersion,this.canonicalPlanPromptVersion=e.canonicalPlanPromptVersion,this.approvalPromptRequiredVersion=e.approvalPromptRequiredVersion,this.approvalPromptVersion=e.approvalPromptVersion,this.approvalPromptStatus=e.approvalPromptStatus,this.approvalPromptTransport=e.approvalPromptTransport,this.approvalPromptMessageKind=e.approvalPromptMessageKind,this.approvalPromptLastAttemptAt=e.approvalPromptLastAttemptAt,this.approvalPromptDeliveredAt=e.approvalPromptDeliveredAt,this.approvalPromptFailedAt=e.approvalPromptFailedAt,this.planModeApproved=e.planModeApproved,n!==this.lifecycle&&this.emit("lifecycleChange",this,this.lifecycle,n)}};var pI=50,cI=1,mI=new Set(["starting","running","completed","failed","killed"]),fI=5,gI=1440*60*1e3;function hI(t){let e=Number(t);return!Number.isFinite(e)||e<cI?pI:Math.floor(e)}function yI(t){return typeof t=="string"&&mI.has(t)}function SI(t){let e=t.split(`
65
- `);return e.at(-1)===""&&e.pop(),e}function Al(t){return t.backendRef?.conversationId??t.harnessSessionId}function hg(t,e,n){let r=gg(t,"utf-8"),o=SI(r);return e.full?o:o.slice(-n)}function kI(t,e,n){if(t.status!=="starting"&&t.status!=="running")return null;let r=hr(t.id);if(!xl(r))return null;try{return hg(r,e,n)}catch{return null}}function vI(t){let e=Rt(t.duration),n=` | Cost: $${t.costUsd.toFixed(4)}`,r=t.phase?` | Phase: ${t.phase}`:"",o=t.lifecycle&&t.lifecycle!==t.phase?` | Lifecycle: ${t.lifecycle}`:"";return[`Session: ${t.name} [${t.id}] | Status: ${t.status.toUpperCase()}${r}${o}${n} | Duration: ${e}`,`${"\u2500".repeat(60)}`].join(`
66
- `)}function yg(t,e){let n=t.name||t.sessionId||Al(t)||"unknown",r=t.lifecycle?` | Phase: ${t.lifecycle}`:"";return[`Session: ${n} | Status: ${t.status.toUpperCase()}${r} | Cost: $${t.costUsd.toFixed(4)}`,e,`${"\u2500".repeat(60)}`].join(`
67
- `)}function PI(t){return`(retrieved from ${t.outputPath} \u2014 evicted from runtime cache \u2014 showing persisted output)`}function wI(t){return t.outputPath?`(persisted session metadata recovered; output file is unavailable at ${t.outputPath})`:"(persisted session metadata recovered; no output file was recorded)"}function fg(t,e){let n=yg(t,wI(t)),r=Al(t),o=r?`
68
- Backend session: ${r}`:"";return`${n}
69
- (no persisted output available: ${e})${o}`}function II(t){let e=[];return t.error&&e.push(`Error: ${t.error}`),t.result?.result&&e.push(`Result: ${t.result.result}`),t.result&&e.push(`Result status: ${t.result.subtype}`),e.length>0?`
48
+ `)}}}let h=t.resume_session_id,y=h?r.resolve?.(h):void 0,S=h?r.getPersistedSession?.(h):void 0;if(h){let C=r.resolveBackendConversationId?.(h)??r.resolveHarnessSessionId?.(h);if(!C)return{kind:"error",text:`Error: Could not resolve resume_session_id "${h}" to a session ID. Use agent_sessions to list available sessions.`};h=C}let{resumeSessionId:I,clearedPersistedCodexResume:w}=_n({requestedResumeSessionId:h,activeSession:y?{harnessSessionId:y.backendConversationId??y.harnessSessionId}:void 0,persistedSession:S?{harness:S.harness,backendRef:S.backendRef}:void 0}),R=t.permission_mode??j.permissionMode,$=t.plan_approval??j.planApproval;return{kind:"resolved",workdir:n,harness:o,resolvedModel:a,permissionMode:R,planApproval:$,originChannel:l,originThreadId:c,originSessionKey:m,route:On(e,l,m),resumeSessionId:I,resolvedResumeId:h,clearedPersistedCodexResume:w,reasoningEffort:Ir(o),fastMode:Mn(o)}}Ee();function Lt(t){let e=Math.floor(t/1e3),r=Math.floor(e/60),n=e%60;return r>0?`${r}m${n}s`:`${n}s`}var Vw=new Set(["a","an","the","is","are","was","were","be","been","being","have","has","had","do","does","did","will","would","could","should","may","might","shall","can","need","must","i","me","my","we","our","you","your","it","its","he","she","to","of","in","for","on","with","at","by","from","as","into","through","about","that","this","these","those","and","or","but","if","then","so","not","no","please","just","also","very","all","some","any","each","make","write","create","build","implement","add","update"]);function Zm(t){let r=t.toLowerCase().replace(/[^a-z0-9\s-]/g," ").split(/\s+/).filter(n=>n.length>1&&!Vw.has(n)).slice(0,3);return r.length===0?"session":r.join("-")}var Ym={starting:"\u{1F7E1}",running:"\u{1F7E2}",completed:"\u2705",failed:"\u274C",killed:"\u26D4",awaiting_plan_decision:"\u{1F4CB}",awaiting_user_input:"\u2753",awaiting_worktree_decision:"\u{1F33F}",suspended:"\u23F8\uFE0F",terminal:"\u{1F3C1}"};function Hw(t){let e=t.worktreeLifecycle?.state??t.worktreeState;return t.worktreeMerged||e==="merged"?"[merged \u2713]":e==="released"?"[released]":t.worktreePrUrl?`[PR: ${t.worktreePrUrl}]`:e==="pr_open"?"[PR open]":e==="dismissed"?"[dismissed]":e==="no_change"?"[no change]":"[not merged]"}function Xm(t){let e=Ym[t.phase]??Ym[t.status]??"\u2753",r=Lt(t.duration),n=t.multiTurn?"multi-turn":"single",o=t.prompt.length>80?t.prompt.slice(0,80)+"...":t.prompt,i=t.costUsd>0?` | $${t.costUsd.toFixed(2)}`:"",a=[`${e} ${t.name} [${t.id}] (${r}${i}) \u2014 ${n}`,` \u{1F4C1} ${t.workdir}`,` \u{1F4DD} "${o}"`];t.worktreePath&&t.worktreeBranch&&a.push(` \u{1F33F} Worktree: ${t.worktreeBranch} ${Hw(t)}`),t.phase!==t.status&&a.push(` \u2699\uFE0F Phase: ${t.phase}`),t.lifecycle&&t.lifecycle!==t.phase&&a.push(` \u{1F504} Lifecycle: ${t.lifecycle}`),(t.requestedPermissionMode||t.currentPermissionMode||t.approvalExecutionState)&&a.push(` \u{1F510} Approval: ${t.approvalExecutionState??"unknown"} (requested=${t.requestedPermissionMode??"unknown"}, effective=${t.currentPermissionMode??"unknown"})`),t.resumable&&a.push(" \u21A9\uFE0F Resumable: yes"),t.harness&&a.push(` \u{1F9F0} Harness: ${t.harness}`);let u=U(t);return u&&a.push(` \u{1F517} Backend ID: ${u}`),t.resumeSessionId&&a.push(` \u21A9\uFE0F Resumed from: ${t.resumeSessionId}${t.forkSession?" (forked)":""}`),a.join(`
49
+ `)}function Qi(t,e){let r=t.sessionsWithDuration>0?t.totalDurationMs/t.sessionsWithDuration:0,{completed:n,failed:o,killed:i}=t.sessionsByStatus,a=["\u{1F4CA} OpenClaw Code Agent Stats","","\u{1F4CB} Sessions",` Launched: ${t.totalLaunched}`,` Running: ${e}`,` Completed: ${n}`,` Failed: ${o}`,` Killed: ${i}`,"",`\u23F1\uFE0F Average duration: ${r>0?Lt(r):"n/a"}`];if(t.mostExpensive){let u=t.mostExpensive;a.push("","\u{1F3C6} Notable session",` ${u.name} [${u.id}]`,` \u{1F4DD} "${u.prompt}"`)}return a.join(`
50
+ `)}function Je(t,e){return e<=0?"":t.length<=e?t:e<=3?".".repeat(e):t.slice(0,e-3)+"..."}function Yi(t,e){let r=t.split(`
51
+ `),n=[],o=0;for(let i=r.length-1;i>=0;i--){let a=r[i].length+(n.length>0?1:0);if(o+a>e&&n.length>0)break;n.unshift(r[i]),o+=a}return n.join(`
52
+ `)}function ec(t,e){let r=t.split(`
53
+ `),n=[],o=0;for(let i=0;i<r.length;i++){let a=r[i].length+(n.length>0?1:0);if(o+a>e&&n.length>0)break;n.push(r[i]),o+=a}return n.join(`
54
+ `)}var nn,Do,Ln=!1;function tc(t){try{return t?.config?.current?.()}catch{return}}function Nn(t,e){if(t&&typeof t=="object"){nn=t,arguments.length>=2?(Do=e,Ln=!0):Ln||(Do=tc(nn),Ln=!0);return}nn=void 0,Do=void 0,Ln=!1}function rc(){return nn}function nc(){return nn?.tasks?.managedFlows??nn?.taskFlow}function oc(){return Ln||(Do=tc(nn),Ln=!0),Do}var zw="openclaw-code-agent",Jw=160,Zi={create(){},progress(){},finalize(){}};function Xi(t,e){let r=e instanceof Error?e.message:String(e);console.warn(`[SessionTaskLifecycle] ${t} failed: ${r}`)}function Qw(t,e){if(e.applied===!1){let r=e.code?` (${e.code})`:"";console.warn(`[SessionTaskLifecycle] ${t} mutation was not applied${r}`)}}function Yw(t){let e=t.prompt.trim().replace(/\s+/g," ");return Je(e||t.name,Jw)}function Zw(t){if(t.status==="starting"||t.lifecycle==="starting")return"Starting";if(t.lifecycle==="active")return"Running";if(t.lifecycle==="awaiting_plan_decision")return"Waiting for plan approval";if(t.lifecycle==="awaiting_user_input")return"Waiting for input";if(t.lifecycle==="awaiting_worktree_decision")return"Waiting for worktree decision";if(t.lifecycle==="suspended")return"Suspended after idle timeout"}function Xw(t){if(t.status==="completed")return"succeeded";if(t.status==="failed")return"failed";if(t.status==="killed")return t.killReason==="idle-timeout"||t.killReason==="startup-timeout"?"timed_out":"cancelled"}function rp(t,e){return t==="completed"?"Completed":t==="failed"?"Failed":e==="idle-timeout"?"Timed out after idle timeout":e==="startup-timeout"?"Timed out during startup":e==="shutdown"?"Cancelled during shutdown":e==="user"?"Cancelled by user":"Cancelled"}function ev(t){return t.lifecycle==="awaiting_plan_decision"||t.lifecycle==="awaiting_user_input"||t.lifecycle==="awaiting_worktree_decision"||t.lifecycle==="suspended"}function np(t,e,r){return{phase:e,integration:"phase-1-managed-task-flow",sessionId:t.id,sessionName:t.name,sessionStatus:t.status,sessionLifecycle:t.lifecycle,summary:r}}function tv(t){if(!t||typeof t!="object")return!1;let e=t;return typeof e.createManaged=="function"&&typeof e.resume=="function"&&typeof e.setWaiting=="function"&&typeof e.finish=="function"&&typeof e.fail=="function"}function ic(t,e){if(e.applied)return e.flow;let r=e.current;return r?.flowId&&typeof r.revision=="number"?r:t}var op=class{constructor(e){this.taskFlow=e}taskFlow;flow;finalized=!1;lastProgressKey;create(e){if(this.flow||this.finalized)return;let r="Starting",n=Date.now();try{this.flow=this.taskFlow.createManaged({controllerId:zw,goal:Yw(e),status:"running",notifyPolicy:"silent",currentStep:r,stateJson:np(e,"created",r),createdAt:e.startedAt,updatedAt:n}),this.lastProgressKey=this.progressKey(e,r)}catch(o){Xi("create",o)}}progress(e){if(!this.flow||this.finalized)return;let r=Zw(e);if(!r)return;let n=this.progressKey(e,r);if(n!==this.lastProgressKey)try{let o=np(e,"progress",r),i=Date.now(),a=ev(e)?this.taskFlow.setWaiting({flowId:this.flow.flowId,expectedRevision:this.flow.revision,currentStep:r,stateJson:o,waitJson:{reason:r,sessionId:e.id},blockedSummary:r,updatedAt:i}):this.taskFlow.resume({flowId:this.flow.flowId,expectedRevision:this.flow.revision,status:"running",currentStep:r,stateJson:o,updatedAt:i});this.flow=ic(this.flow,a),this.lastProgressKey=n}catch(o){Xi("progress",o)}}finalize(e){if(!this.flow||this.finalized)return;let r=Xw(e);if(!r)return;let n=r==="succeeded"?"Completed":r==="failed"?"Failed":rp(e.status,e.killReason);try{let o=e.completedAt??Date.now(),i={...np(e,"terminal",n),terminalStatus:r,terminalSummary:rp(e.status,e.killReason),...e.status==="failed"&&e.error?{error:e.error}:{}},a=r==="succeeded"?this.taskFlow.finish({flowId:this.flow.flowId,expectedRevision:this.flow.revision,stateJson:i,updatedAt:o,endedAt:o}):this.taskFlow.fail({flowId:this.flow.flowId,expectedRevision:this.flow.revision,stateJson:i,blockedSummary:rp(e.status,e.killReason),updatedAt:o,endedAt:o});Qw("finalize",a),this.flow=ic(this.flow,a),this.finalized=!0}catch(o){Xi("finalize",o)}}progressKey(e,r){return`${e.status}:${e.lifecycle}:${r}`}};function es(t){if(!t.sessionKey?.trim())return Zi;try{let e=nc()?.fromToolContext;if(typeof e!="function")return Zi;let r=e(t);return tv(r)?new op(r):Zi}catch(e){return Xi("resolve",e),Zi}}function rv(t){return t instanceof Error?t.message:String(t)}function sc(t,e){return t?("id"in t?t.id:t.sessionId)??e??"unknown-session":e??"unknown-session"}function nv(t){return!t||typeof t!="object"?!1:typeof t.prompt=="string"}function ov(t){return!!t&&typeof t=="object"&&typeof t.formatLaunchResult=="function"}function ac(t){return{name:"agent_launch",description:"Launch a coding agent session in background to execute a development task. Sessions are multi-turn \u2014 they stay open for follow-up messages via agent_respond. Supports resuming previous sessions. Returns a session ID and name for tracking.",parameters:f.Object({prompt:f.String({description:"The task prompt to execute"}),name:f.Optional(f.String({description:"Short human-readable name for the session (kebab-case, e.g. 'fix-auth'). Auto-generated from prompt if omitted."})),workdir:f.Optional(f.String({description:"Working directory (defaults to cwd)"})),model:f.Optional(f.String({description:"Model name to use"})),system_prompt:f.Optional(f.String({description:"Additional system prompt"})),allowed_tools:f.Optional(f.Array(f.String(),{description:"List of allowed tools"})),resume_session_id:f.Optional(f.String({description:"Session reference to continue or fork from. Prefer the plugin session ID shown by agent_launch or agent_sessions; persisted backend conversation IDs also resolve when available."})),fork_session:f.Optional(f.Boolean({description:"When resuming, fork to a new session instead of continuing the existing one. Use with resume_session_id."})),force_new_session:f.Optional(f.Boolean({description:"Bypass resume-first protection and start a brand-new linked session even when a resumable or active linked session already exists."})),permission_mode:f.Optional(f.Union([f.Literal("default"),f.Literal("plan"),f.Literal("bypassPermissions")],{description:"Permission mode: 'default' (plugin-managed interactive execution), 'plan' (present the plan first and block implementation until approval), 'bypassPermissions' (fully autonomous execution). Defaults to plugin config ('plan' by default)."})),plan_approval:f.Optional(f.Union([f.Literal("ask"),f.Literal("delegate"),f.Literal("approve")],{description:"Plan approval policy for this session: 'ask' (send the full plan to the user with Approve/Revise/Reject buttons), 'delegate' (orchestrator must review the full plan, then either approve directly or escalate back to the user with the same buttons), 'approve' (auto-approve after verification). Overrides the plugin-level planApproval setting."})),harness:f.Optional(f.String({description:"Agent harness to use (e.g. 'claude-code'). Defaults to 'claude-code'."})),worktree_strategy:f.Optional(f.Union([f.Literal("off"),f.Literal("manual"),f.Literal("ask"),f.Literal("delegate"),f.Literal("auto-merge"),f.Literal("auto-pr")],{description:"Worktree strategy: 'off' (no worktree), 'manual' (create worktree but no auto merge-back), 'ask' (prompt user with Merge/Open PR/Later/Discard buttons), 'delegate' (orchestrator decides), 'auto-merge' (merge automatically), 'auto-pr' (open/update a PR automatically). Defaults to the plugin config when unset."})),worktree_base_branch:f.Optional(f.String({description:"Base branch for worktree merge/PR operations (default: auto-detected or 'main')"})),worktree_pr_target_repo:f.Optional(f.String({description:"Target repository for cross-repo PRs (e.g. 'openai/codex' for fork-to-upstream workflow). If not set, auto-detected from 'upstream' remote or defaults to 'origin'."}))}),async execute(e,r){if(!k)return{content:[{type:"text",text:"Error: SessionManager not initialized. The code-agent service must be running."}]};if(!nv(r))return{content:[{type:"text",text:"Error: Invalid parameters. Expected at least { prompt }."}]};r.agentId&&console.warn(`[agent_launch] \u26A0\uFE0F agentId="${r.agentId}" was passed as a parameter \u2014 this is WRONG. agentId is only for sessions_spawn (OpenClaw sub-agents), not agent_launch (CC sessions). The field is being ignored. ctx.agentId="${t.agentId}" will be used for origin routing instead.`);try{let n=Ji(r,t,k);if(n.kind!=="resolved")return{content:[{type:"text",text:n.text}]};let{workdir:o,harness:i,resolvedModel:a,permissionMode:u,planApproval:p,originChannel:d,originThreadId:l,originSessionKey:m,route:c,resumeSessionId:h,resolvedResumeId:y,clearedPersistedCodexResume:S,reasoningEffort:I,fastMode:w}=n,R=r.resume_session_id?k.resolve(r.resume_session_id)??k.getPersistedSession(r.resume_session_id):void 0,$=!r.fork_session&&R?_o(R):void 0;if($?.kind==="direct")return{content:[{type:"text",text:`Session ${R.name} [${sc(R,r.resume_session_id)}] is already running. Use agent_respond(session='${r.resume_session_id}', message='<next instruction>') instead of agent_launch(resume_session_id=...).`}]};if($?.kind==="unavailable")return{content:[{type:"text",text:`Resume unavailable for session ${R.name} [${sc(R,r.resume_session_id)}] (${$.reason}). Use agent_launch(prompt='<new task>') for a fresh session or set fork_session=true to fork from prior context.`}]};let C=k.spawn({prompt:r.prompt,sessionIdOverride:r.fork_session?void 0:$?.kind==="resume"||$?.kind==="relaunch"?$.stableSessionId:void 0,name:r.name,workdir:o,model:a,reasoningEffort:I,fastMode:w,systemPrompt:r.system_prompt,allowedTools:r.allowed_tools,resumeSessionId:$?.kind==="resume"?$.resumeSessionId:h,resumeWorktreeFrom:y,forkSession:h?r.fork_session:!1,multiTurn:!0,permissionMode:u,planApproval:p,codexApprovalPolicy:i==="codex"?"never":void 0,originChannel:d,originThreadId:l,originAgentId:t.agentId||void 0,originSessionKey:m,route:c,harness:i,taskLifecycle:es(t),worktreeStrategy:r.worktree_strategy,worktreeBaseBranch:r.worktree_base_branch,worktreePrTargetRepo:r.worktree_pr_target_repo});return{content:[{type:"text",text:ov(k)?k.formatLaunchResult({prompt:r.prompt,workdir:o,harness:i,permissionMode:u??j.permissionMode,planApproval:p,forceNewSession:r.force_new_session,resumeSessionId:r.resume_session_id,forkSession:r.fork_session,clearedPersistedCodexResume:S},C):Ei({prompt:r.prompt,workdir:o,harness:i,permissionMode:u??j.permissionMode,planApproval:p,resumeSessionId:r.resume_session_id,forkSession:r.fork_session,forceNewSession:r.force_new_session,clearedPersistedCodexResume:S},{id:C.id,name:C.name,model:C.model,reasoningEffort:C.reasoningEffort??Ir(i),fastMode:C.fastMode??w,worktreeStrategy:C.worktreeStrategy??r.worktree_strategy??j.defaultWorktreeStrategy??"off",worktreePath:C.worktreePath,originalWorkdir:C.originalWorkdir})}]}}catch(n){let o=rv(n),i=o.includes("Max sessions")?"":`
55
+
56
+ Use agent_sessions to see active sessions and their status.`;return{content:[{type:"text",text:`Error launching session: ${o}${i}`}]}}}}}tt();le();ze();import{existsSync as mp,readFileSync as $c}from"fs";import{EventEmitter as Rv}from"events";import{webcrypto as pc}from"node:crypto";var uc="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var iv=128,on,qn;function sv(t){if(t<0||t>1024)throw new RangeError("Wrong ID size");!on||on.length<t?(on=Buffer.allocUnsafe(t*iv),pc.getRandomValues(on),qn=0):qn+t>on.length&&(pc.getRandomValues(on),qn=0),qn+=t}function ts(t=21){sv(t|=0);let e="";for(let r=qn-t;r<qn;r++)e+=uc[on[r]&63];return e}Zu();ze();Ee();var dc={starting:["running","failed","killed"],running:["completed","failed","killed"],completed:[],failed:[],killed:[]},lc=new Set(["merged","released","pr_open","dismissed","cleanup_failed"]);function av(t){return t.requestedPermissionMode!=="plan"?"not_plan_gated":t.pendingPlanApproval?"awaiting_approval":t.planModeApproved?"approved_then_implemented":t.currentPermissionMode!=="plan"?"implemented_without_required_approval":"awaiting_plan_output"}function rt(t){return{...t,approvalExecutionState:av(t)}}function ip(t,e){switch(e.type){case"initialize":return rt({...t,worktreeState:e.hasWorktree&&t.worktreeState==="none"?"provisioned":t.worktreeState,lifecycle:t.status==="starting"?"starting":t.lifecycle,runtimeState:t.status==="starting"?"live":t.runtimeState});case"status.transition":return e.status==="starting"?rt({...t,status:e.status,lifecycle:"starting",runtimeState:"live"}):e.status==="running"?rt({...t,status:e.status,lifecycle:t.lifecycle==="starting"||t.lifecycle==="suspended"?"active":t.lifecycle,runtimeState:"live"}):rt({...t,status:e.status,runtimeState:"stopped",lifecycle:t.lifecycle==="suspended"?"suspended":"terminal"});case"permission.mode_changed":return rt({...t,currentPermissionMode:e.currentPermissionMode});case"turn.started":return rt({...t,lifecycle:"active",runtimeState:"live"});case"input.requested":return rt({...t,lifecycle:t.pendingPlanApproval?"awaiting_plan_decision":"awaiting_user_input"});case"plan.requested":if(t.planModeApproved)return t;{let r=t.pendingPlanApproval&&t.approvalState==="pending"&&t.planApprovalContext===e.context,n=t.pendingPlanApproval&&t.approvalState==="changes_requested"&&t.planApprovalContext===e.context&&t.planDecisionVersion>0,o=!t.pendingPlanApproval&&t.approvalState==="changes_requested"&&t.planApprovalContext===e.context&&t.planDecisionVersion>0,i=r||n||o?t.planDecisionVersion:t.planDecisionVersion+1;return rt({...t,pendingPlanApproval:!0,planApprovalContext:e.context,approvalState:"pending",planDecisionVersion:i,actionablePlanDecisionVersion:i,canonicalPlanPromptVersion:r?t.canonicalPlanPromptVersion:void 0,approvalPromptRequiredVersion:r?t.approvalPromptRequiredVersion:void 0,approvalPromptVersion:r?t.approvalPromptVersion:void 0,approvalPromptStatus:r?t.approvalPromptStatus:"not_sent",approvalPromptTransport:r?t.approvalPromptTransport:"none",approvalPromptMessageKind:r?t.approvalPromptMessageKind:"none",approvalPromptLastAttemptAt:r?t.approvalPromptLastAttemptAt:void 0,approvalPromptDeliveredAt:r?t.approvalPromptDeliveredAt:void 0,approvalPromptFailedAt:r?t.approvalPromptFailedAt:void 0,lifecycle:"awaiting_plan_decision"})}case"plan.cleared":return rt({...t,pendingPlanApproval:!1,planApprovalContext:void 0,actionablePlanDecisionVersion:void 0,approvalState:t.approvalState==="pending"?"not_required":t.approvalState});case"plan.approved":return rt({...t,pendingPlanApproval:!1,planApprovalContext:void 0,actionablePlanDecisionVersion:void 0,planModeApproved:!0,approvalState:"approved",planDecisionVersion:t.planDecisionVersion+1,approvalPromptVersion:void 0,approvalPromptStatus:"not_sent",lifecycle:t.status==="running"?"active":t.lifecycle});case"plan.changes_requested":return rt({...t,pendingPlanApproval:!0,approvalState:"changes_requested",planDecisionVersion:t.planDecisionVersion+1,actionablePlanDecisionVersion:void 0,canonicalPlanPromptVersion:void 0,approvalPromptRequiredVersion:void 0,approvalPromptVersion:void 0,approvalPromptStatus:"not_sent",approvalPromptTransport:"none",approvalPromptMessageKind:"none",approvalPromptLastAttemptAt:void 0,approvalPromptDeliveredAt:void 0,approvalPromptFailedAt:void 0,lifecycle:"awaiting_plan_decision"});case"terminal.entered":return rt({...t,lifecycle:e.suspended?"suspended":"terminal",runtimeState:"stopped"});case"worktree.decision_requested":return rt({...t,lifecycle:"awaiting_worktree_decision",worktreeState:"pending_decision"});case"worktree.state_set":return rt({...t,worktreeState:e.worktreeState,lifecycle:e.worktreeState==="pending_decision"?"awaiting_worktree_decision":lc.has(e.worktreeState)?"terminal":t.lifecycle});case"delivery.state_set":return rt({...t,deliveryState:e.deliveryState})}}function mc(t,e){let r={...t,...e.lifecycle!==void 0?{lifecycle:e.lifecycle}:{},...e.approvalState!==void 0?{approvalState:e.approvalState}:{},...e.approvalExecutionState!==void 0?{approvalExecutionState:e.approvalExecutionState}:{},...e.worktreeState!==void 0?{worktreeState:e.worktreeState}:{},...e.runtimeState!==void 0?{runtimeState:e.runtimeState}:{},...e.deliveryState!==void 0?{deliveryState:e.deliveryState}:{},...e.requestedPermissionMode!==void 0?{requestedPermissionMode:e.requestedPermissionMode}:{},...e.currentPermissionMode!==void 0?{currentPermissionMode:e.currentPermissionMode}:{},...e.pendingPlanApproval!==void 0?{pendingPlanApproval:e.pendingPlanApproval}:{},...e.planApprovalContext!==void 0?{planApprovalContext:e.planApprovalContext}:{},...e.planDecisionVersion!==void 0?{planDecisionVersion:e.planDecisionVersion}:{},...e.actionablePlanDecisionVersion!==void 0?{actionablePlanDecisionVersion:e.actionablePlanDecisionVersion}:{},...e.canonicalPlanPromptVersion!==void 0?{canonicalPlanPromptVersion:e.canonicalPlanPromptVersion}:{},...e.approvalPromptRequiredVersion!==void 0?{approvalPromptRequiredVersion:e.approvalPromptRequiredVersion}:{},...e.approvalPromptVersion!==void 0?{approvalPromptVersion:e.approvalPromptVersion}:{},...e.approvalPromptStatus!==void 0?{approvalPromptStatus:e.approvalPromptStatus}:{},...e.approvalPromptTransport!==void 0?{approvalPromptTransport:e.approvalPromptTransport}:{},...e.approvalPromptMessageKind!==void 0?{approvalPromptMessageKind:e.approvalPromptMessageKind}:{},...e.approvalPromptLastAttemptAt!==void 0?{approvalPromptLastAttemptAt:e.approvalPromptLastAttemptAt}:{},...e.approvalPromptDeliveredAt!==void 0?{approvalPromptDeliveredAt:e.approvalPromptDeliveredAt}:{},...e.approvalPromptFailedAt!==void 0?{approvalPromptFailedAt:e.approvalPromptFailedAt}:{},...e.planModeApproved!==void 0?{planModeApproved:e.planModeApproved}:{}};return e.approvalState==="changes_requested"&&e.pendingPlanApproval===void 0&&(r={...r,pendingPlanApproval:!1}),r.pendingPlanApproval?r={...r,approvalState:"pending",actionablePlanDecisionVersion:r.actionablePlanDecisionVersion??r.planDecisionVersion,lifecycle:"awaiting_plan_decision"}:r.approvalState==="changes_requested"&&(r={...r,actionablePlanDecisionVersion:void 0,lifecycle:"awaiting_user_input"}),e.pendingWorktreeDecisionSince!==void 0||r.worktreeState==="pending_decision"?r=ip(r,{type:"worktree.decision_requested"}):lc.has(r.worktreeState)&&(r={...r,lifecycle:"terminal"}),rt(r)}var rs=class{queue=[];resolve=null;done=!1;hasPending(){return this.queue.length>0}push(e){this.queue.push(e),this.resolve&&(this.resolve(),this.resolve=null)}end(){this.done=!0,this.resolve&&(this.resolve(),this.resolve=null)}async*[Symbol.asyncIterator](){for(;;){for(;this.queue.length>0;)yield this.queue.shift();if(this.done)return;await new Promise(e=>{this.resolve=e})}}};import{appendFileSync as uv}from"fs";import{tmpdir as pv}from"os";import{join as dv}from"path";var cc=2e3;function Bn(t){return dv(pv(),`openclaw-agent-${t}.txt`)}function lv(t,e){if(!e)return;let r=e.split(`
57
+ `),[n="",...o]=r;t.length===0?t.push(n):t[t.length-1]+=n;for(let i of o)t.push(i)}function fc(t,e,r){lv(t,r),t.length>cc&&t.splice(0,t.length-cc);try{uv(Bn(e),r,"utf-8")}catch{}return t}var ns=class{timers=new Map;get size(){return this.timers.size}set(e,r,n){this.clear(e);let o=setTimeout(n,r);o.unref?.(),this.timers.set(e,o)}clear(e){let r=this.timers.get(e);r&&(clearTimeout(r),this.timers.delete(e))}clearAll(){for(let e of this.timers.values())clearTimeout(e);this.timers.clear()}};var os=class{constructor(e){this.deps=e}deps;waitingForInputFired=!1;lastTurnHadQuestion=!1;turnInProgress=!0;currentTurnText="";currentTurnPlanArtifact;beginUserTurn(){this.waitingForInputFired=!1,this.turnInProgress=!0,this.currentTurnText="",this.currentTurnPlanArtifact=void 0,this.lastTurnHadQuestion=!1}noteTextDelta(e,r){this.waitingForInputFired=!1,r||(this.lastTurnHadQuestion=!1),this.deps.appendOutput(e),this.currentTurnText+=this.currentTurnText?`
58
+ ${e}`:e,this.deps.emitOutput(e)}noteToolCall(e){let{name:r,input:n,currentPermissionMode:o,permissionMode:i,planModeApproved:a}=e;if(r==="Write"){let u=n;typeof u?.file_path=="string"&&u.file_path.includes("/.claude/plans/")&&this.deps.setPlanFilePath(u.file_path)}r==="AskUserQuestion"?(this.lastTurnHadQuestion=!0,this.deps.applyInputRequested(),(o==="plan"||i==="plan")&&!a&&this.deps.markPendingPlanApproval("plan-mode")):(r==="ExitPlanMode"||r==="set_permission_mode")&&!a&&(this.lastTurnHadQuestion=!0,this.deps.markPendingPlanApproval("plan-mode")),this.deps.emitToolUse(r,n)}notePendingInput(){this.lastTurnHadQuestion=!0,this.deps.applyInputRequested(),this.waitingForInputFired||(this.waitingForInputFired=!0,this.deps.emitTurnEnd(!0))}clearResolvedPendingInput(e,r){if(!(!e||r?.requestId===e))return r}notePlanArtifact(e,r){if(this.currentTurnPlanArtifact=e,this.deps.setLatestPlanArtifact(e),!r)return;let n=e.markdown.trim();!n||this.currentTurnText.trim()===n||(this.deps.appendOutput(n),this.currentTurnText=n,this.deps.emitOutput(n))}noteSettingsChanged(e){let{oldMode:r,permissionMode:n,planModeApproved:o}=e;if(n)return n!=="plan"&&r==="plan"&&!o&&(this.deps.markPendingPlanApproval("plan-mode"),this.lastTurnHadQuestion=!0),n}finishSuccessfulTurn(e){let{currentPermissionMode:r,permissionMode:n,pendingPlanApproval:o,planModeApproved:i,pendingInputState:a,hasPendingMessages:u}=e,p=o;(r==="plan"||n==="plan")&&!p&&!i&&(this.deps.markPendingPlanApproval("plan-mode"),p=!0);let d=p||this.lastTurnHadQuestion||!!a;if(this.turnInProgress=u,d&&!this.waitingForInputFired)this.waitingForInputFired=!0,p||this.deps.markAwaitingUserInput(),this.deps.emitTurnEnd(!0);else if(!u&&!d){if(this.deps.queueWorktreeFinalizationPrompt?.()){this.turnInProgress=!0;return}this.deps.completeTurn(),this.deps.emitTurnEnd(!1)}}finishTerminalTurn(){this.turnInProgress=!1}finishInterruptedTurn(e){this.turnInProgress=e,this.waitingForInputFired=!1,this.lastTurnHadQuestion=!1,this.currentTurnText="",this.currentTurnPlanArtifact=void 0}resetAfterRun(){this.lastTurnHadQuestion=!1,this.currentTurnText="",this.currentTurnPlanArtifact=void 0}};var is=class{constructor(e){this.deps=e}deps;applyMessage(e,r){if(e.type==="backend_ref"){this.deps.clearStartupTimer(),this.deps.assignBackendRef({...e.ref}),this.deps.transitionRunning();return}if(e.type==="run_started"){e.runId&&this.deps.noteRunStarted(e.runId);return}if(e.type==="text_delta"){this.deps.noteTextDelta(e.text,r.pendingPlanApproval);return}if(e.type==="tool_call"){this.deps.noteToolCall({name:e.name,input:e.input,currentPermissionMode:r.currentPermissionMode,permissionMode:r.permissionMode,planModeApproved:r.planModeApproved});return}if(e.type==="pending_input"){this.deps.setPendingInputState(e.state),this.deps.notePendingInput();return}if(e.type==="pending_input_resolved"){this.deps.setPendingInputState(this.deps.clearResolvedPendingInput(e.requestId,r.pendingInputState));return}if(e.type==="plan_artifact"){this.deps.notePlanArtifact(e);return}if(e.type==="settings_changed"){let n=this.deps.noteSettingsChanged({oldMode:r.currentPermissionMode,permissionMode:e.permissionMode,planModeApproved:r.planModeApproved});n&&this.deps.setCurrentPermissionMode(n);return}if(e.type==="run_completed"){this.deps.handleRunCompleted(e.data);return}e.type}};It();var Cv=120*1e3;function hs(t){return t instanceof Error?t.message:String(t)}var ys=class extends Rv{id;name;harnessSessionId;backendRef;harness;harnessHandle;prompt;workdir;model;reasoningEffort;fastMode;systemPrompt;allowedTools;permissionMode;requestedPermissionMode;planApproval;codexApprovalPolicy;currentPermissionMode;pendingModeSwitch;resumeSessionId;forkSession;worktreePath;originalWorkdir;worktreeBranch;worktreeStrategy;worktreeBaseBranch;worktreePrTargetRepo;autoMergeParentSessionId;autoMergeConflictResolutionAttemptCount;autoMergeResolverSessionId;worktreePushRemote;worktreeDisposition;worktreePrUrl;worktreePrNumber;worktreeMerged;worktreeMergedAt;worktreeLifecycle;worktreeState="none";multiTurn;goalTaskId;messageStream;_status="starting";error;startedAt;completedAt;abortController;outputBuffer=[];result;costUsd=0;originChannel;originThreadId;originAgentId;originSessionKey;route;pendingInputState;pendingPlanApproval=!1;planApprovalContext;planDecisionVersion=0;actionablePlanDecisionVersion;canonicalPlanPromptVersion;approvalPromptRequiredVersion;approvalPromptVersion;approvalPromptStatus="not_sent";approvalPromptTransport="none";approvalPromptMessageKind="none";approvalPromptLastAttemptAt;approvalPromptDeliveredAt;approvalPromptFailedAt;planFilePath;killReason="unknown";planModeApproved=!1;turnRuntime;harnessEvents;worktreeFinalizationPromptIssued=!1;lifecycle="starting";approvalState="not_required";approvalExecutionState="not_plan_gated";approvalRationale;latestPlanArtifact;latestPlanArtifactVersion;runtimeState="live";deliveryState="idle";canUseTool;autoRespondCount=0;timers=new ns;constructor(e,r){super(),this.id=e.sessionIdOverride??ts(8),this.name=r,this.harness=e.harness?$o(e.harness):Vm(),this.prompt=e.prompt,this.workdir=e.workdir,this.model=e.model??$n(this.harness.name),this.reasoningEffort=e.reasoningEffort??Ir(this.harness.name),this.fastMode=this.harness.name==="codex"?e.fastMode??Mn(this.harness.name):void 0,this.systemPrompt=e.systemPrompt,this.allowedTools=e.allowedTools,this.permissionMode=e.permissionMode??j.permissionMode,this.requestedPermissionMode=e.requestedPermissionMode??this.permissionMode,this.planApproval=e.planApproval??j.planApproval,this.codexApprovalPolicy=this.harness.name==="codex"?"never":void 0,this.currentPermissionMode=this.permissionMode,this.originChannel=e.originChannel,this.originThreadId=e.originThreadId,this.originAgentId=e.originAgentId,this.originSessionKey=e.originSessionKey,this.route=e.route?{...e.route}:void 0,this.backendRef=e.backendRef?{...e.backendRef}:void 0,this.resumeSessionId=e.resumeSessionId,this.forkSession=e.forkSession,this.multiTurn=e.multiTurn??!0,this.goalTaskId=e.goalTaskId,this.worktreeStrategy=e.worktreeStrategy,this.worktreeBaseBranch=e.worktreeBaseBranch,e.worktreePrTargetRepo&&(this.worktreePrTargetRepo=e.worktreePrTargetRepo),e.autoMergeParentSessionId&&(this.autoMergeParentSessionId=e.autoMergeParentSessionId),e.autoMergeConflictResolutionAttemptCount!==void 0&&(this.autoMergeConflictResolutionAttemptCount=e.autoMergeConflictResolutionAttemptCount),e.autoMergeResolverSessionId&&(this.autoMergeResolverSessionId=e.autoMergeResolverSessionId),this.canUseTool=e.canUseTool,this.startedAt=Date.now(),this.abortController=new AbortController,this.turnRuntime=new os({appendOutput:n=>fc(this.outputBuffer,this.id,n),emitOutput:n=>this.emit("output",this,n),emitToolUse:(n,o)=>this.emit("toolUse",this,n,o),emitTurnEnd:n=>this.emit("turnEnd",this,n),markPendingPlanApproval:n=>this.markPendingPlanApproval(n),markAwaitingUserInput:()=>this.markAwaitingUserInput(),applyInputRequested:()=>this.applyControlEvent({type:"input.requested"}),completeTurn:()=>{this.applyControlEvent({type:"terminal.entered"}),this.complete("done")},queueWorktreeFinalizationPrompt:()=>this.queueWorktreeFinalizationPrompt(),setPlanFilePath:n=>{this.planFilePath=n},setLatestPlanArtifact:n=>{this.latestPlanArtifact=n;let o=this.pendingPlanApproval?this.actionablePlanDecisionVersion??this.planDecisionVersion:void 0;this.latestPlanArtifactVersion=o&&o>0?o:void 0}}),this.harnessEvents=new is({clearStartupTimer:()=>this.clearTimer("startup"),assignBackendRef:n=>{this.backendRef=n,this.harnessSessionId=n.conversationId,n.worktreePath&&(this.worktreePath=n.worktreePath,this.originalWorkdir??=this.workdir,this.worktreeBranch??=ls(n.worktreePath),this.worktreeStrategy&&this.worktreeStrategy!=="off"&&this.applyControlEvent({type:"worktree.state_set",worktreeState:"provisioned"}))},noteRunStarted:n=>{this.backendRef&&(this.backendRef={...this.backendRef,runId:n})},transitionRunning:()=>{this._status==="starting"&&this.transition("running")},noteTextDelta:(n,o)=>this.turnRuntime.noteTextDelta(n,o),noteToolCall:n=>this.turnRuntime.noteToolCall(n),setPendingInputState:n=>{this.pendingInputState=n},notePendingInput:()=>this.turnRuntime.notePendingInput(),clearResolvedPendingInput:(n,o)=>this.turnRuntime.clearResolvedPendingInput(n,o),notePlanArtifact:n=>this.turnRuntime.notePlanArtifact(n.artifact,n.finalized),noteSettingsChanged:n=>this.turnRuntime.noteSettingsChanged(n),setCurrentPermissionMode:n=>{this.currentPermissionMode=n,this.applyControlEvent({type:"permission.mode_changed",currentPermissionMode:n})},handleRunCompleted:n=>{let o=n.outcome??(n.success?"completed":"failed");this.result={subtype:o==="interrupted"?"interrupted":n.success?"success":"error",duration_ms:n.duration_ms,total_cost_usd:n.total_cost_usd,num_turns:n.num_turns,result:n.result,is_error:o==="failed",session_id:n.session_id},this.costUsd=n.total_cost_usd;let i=this.multiTurn&&this.messageStream&&o==="interrupted",a=this.multiTurn&&this.messageStream&&o==="completed";i?(this.resetIdleTimer(),this.turnRuntime.finishInterruptedTurn(this.messageStream?.hasPending()===!0)):a?(this.resetIdleTimer(),this.turnRuntime.finishSuccessfulTurn({currentPermissionMode:this.currentPermissionMode,permissionMode:this.permissionMode,pendingPlanApproval:this.pendingPlanApproval,planModeApproved:this.planModeApproved,pendingInputState:this.pendingInputState,hasPendingMessages:this.messageStream?.hasPending()===!0})):(this.turnRuntime.finishTerminalTurn(),this.transitionToTerminal(o==="completed"?"completed":"failed")),this.turnRuntime.resetAfterRun(),this.pendingInputState=void 0}}),this.applyControlEvent({type:"initialize",hasWorktree:!!(this.worktreeStrategy&&this.worktreeStrategy!=="off")}),(e.planModeApproved!==void 0||e.approvalState!==void 0||e.approvalExecutionState!==void 0||e.approvalRationale!==void 0||e.pendingPlanApproval!==void 0||e.planApprovalContext!==void 0||e.planDecisionVersion!==void 0||e.actionablePlanDecisionVersion!==void 0||e.canonicalPlanPromptVersion!==void 0||e.approvalPromptRequiredVersion!==void 0||e.approvalPromptVersion!==void 0||e.approvalPromptStatus!==void 0||e.approvalPromptTransport!==void 0||e.approvalPromptMessageKind!==void 0||e.approvalPromptLastAttemptAt!==void 0||e.approvalPromptDeliveredAt!==void 0||e.approvalPromptFailedAt!==void 0)&&this.applyControlPatch({...e.planModeApproved!==void 0?{planModeApproved:e.planModeApproved}:{},...e.approvalState!==void 0?{approvalState:e.approvalState}:{},...e.approvalExecutionState!==void 0?{approvalExecutionState:e.approvalExecutionState}:{},...e.pendingPlanApproval!==void 0?{pendingPlanApproval:e.pendingPlanApproval}:{},...e.planApprovalContext!==void 0?{planApprovalContext:e.planApprovalContext}:{},...e.planDecisionVersion!==void 0?{planDecisionVersion:e.planDecisionVersion}:{},...e.actionablePlanDecisionVersion!==void 0?{actionablePlanDecisionVersion:e.actionablePlanDecisionVersion}:{},...e.canonicalPlanPromptVersion!==void 0?{canonicalPlanPromptVersion:e.canonicalPlanPromptVersion}:{},...e.approvalPromptRequiredVersion!==void 0?{approvalPromptRequiredVersion:e.approvalPromptRequiredVersion}:{},...e.approvalPromptVersion!==void 0?{approvalPromptVersion:e.approvalPromptVersion}:{},...e.approvalPromptStatus!==void 0?{approvalPromptStatus:e.approvalPromptStatus}:{},...e.approvalPromptTransport!==void 0?{approvalPromptTransport:e.approvalPromptTransport}:{},...e.approvalPromptMessageKind!==void 0?{approvalPromptMessageKind:e.approvalPromptMessageKind}:{},...e.approvalPromptLastAttemptAt!==void 0?{approvalPromptLastAttemptAt:e.approvalPromptLastAttemptAt}:{},...e.approvalPromptDeliveredAt!==void 0?{approvalPromptDeliveredAt:e.approvalPromptDeliveredAt}:{},...e.approvalPromptFailedAt!==void 0?{approvalPromptFailedAt:e.approvalPromptFailedAt}:{}}),this.approvalRationale=e.approvalRationale}get status(){return this._status}get harnessName(){return this.harness.name}get backendKind(){return this.harness.backendKind}get backendCapabilities(){return this.harness.capabilities}get backendConversationId(){return U(this)}get waitingForInputFired(){return this.turnRuntime.waitingForInputFired}set waitingForInputFired(e){this.turnRuntime.waitingForInputFired=e}get lastTurnHadQuestion(){return this.turnRuntime.lastTurnHadQuestion}set lastTurnHadQuestion(e){this.turnRuntime.lastTurnHadQuestion=e}get turnInProgress(){return this.turnRuntime.turnInProgress}set turnInProgress(e){this.turnRuntime.turnInProgress=e}get currentTurnText(){return this.turnRuntime.currentTurnText}set currentTurnText(e){this.turnRuntime.currentTurnText=e}get currentTurnPlanArtifact(){return this.turnRuntime.currentTurnPlanArtifact}set currentTurnPlanArtifact(e){this.turnRuntime.currentTurnPlanArtifact=e}get duration(){return(this.completedAt??Date.now())-this.startedAt}get phase(){return this.lifecycle}get isExplicitlyResumable(){return this.status!=="running"&&this.status!=="completed"&&this.killReason!=="done"&&!!this.backendConversationId}transition(e){if(!dc[this._status].includes(e))throw new Error(`Session state error: cannot transition from ${this._status} to ${e}. This is an internal error \u2014 please report it.`);let r=this._status;this._status=e,this.applyControlEvent({type:"status.transition",status:e}),this.emit("statusChange",this,e,r)}setTimer(e,r,n){this.timers.set(e,r,n)}clearTimer(e){this.timers.clear(e)}clearAllTimers(){this.timers.clearAll()}markPendingPlanApproval(e){let r=this.latestPlanArtifactVersion;this.approvalRationale=void 0,this.applyControlEvent({type:"plan.requested",context:e});let n=this.actionablePlanDecisionVersion??this.planDecisionVersion;this.currentTurnPlanArtifact&&n>0?(this.latestPlanArtifact=this.currentTurnPlanArtifact,this.latestPlanArtifactVersion=n):r!==n&&(this.latestPlanArtifact=void 0,this.latestPlanArtifactVersion=void 0)}clearPendingPlanApproval(){this.applyControlEvent({type:"plan.cleared"})}markAwaitingUserInput(){this.applyControlEvent({type:"input.requested"})}queueWorktreeFinalizationPrompt(){if(!this.multiTurn||!this.messageStream||!this.worktreePath||!this.worktreeStrategy||this.worktreeStrategy==="off"||this.worktreeFinalizationPromptIssued)return!1;let e=Kn(this.worktreePath);if(e.length===0)return!1;this.worktreeFinalizationPromptIssued=!0;let r=e.slice(0,20).map(i=>`- ${i}`).join(`
59
+ `),n=e.length>20?`
60
+ - ...and ${e.length-20} more`:"",o=["Your worktree still has uncommitted changes, so this session cannot finish yet.","",`Worktree: ${this.worktreePath}`,`Branch: ${this.worktreeBranch??"(unknown)"}`,"","Dirty entries:",`${r}${n}`,"","Before finishing, run `git status --short` in the worktree and do exactly one of these:","1. If these are real task changes, commit them on the worktree branch with `git add` and `git commit`.","2. If these are temporary or unrelated artifacts, remove or restore them so the worktree is clean.","3. If no repository changes were intended, leave the worktree clean and say that no changes were needed.","","Do not finish again until `git status --short` is clean or all real task changes are committed."].join(`
61
+ `);return this.messageStream.push(this.harness.buildUserMessage(o,this.backendConversationId??"")),!0}async start(){try{let e;this.multiTurn?(this.messageStream=new rs,this.messageStream.push(this.harness.buildUserMessage(this.prompt,"")),e=this.messageStream):e=this.prompt;let r=this.harness.launch({prompt:e,cwd:this.workdir,model:this.model,reasoningEffort:this.reasoningEffort,fastMode:this.fastMode,permissionMode:this.permissionMode,codexApprovalPolicy:this.codexApprovalPolicy,systemPrompt:this.systemPrompt,allowedTools:this.allowedTools,resumeSessionId:this.resumeSessionId,forkSession:this.forkSession,backendRef:this.backendRef,worktreeStrategy:this.worktreeStrategy,originalWorkdir:this.originalWorkdir??this.workdir,abortController:this.abortController,mcpServers:Im(),canUseTool:this.canUseTool});this.harnessHandle=r,this.setTimer("startup",Cv,()=>{this._status==="starting"&&this.kill("startup-timeout")})}catch(e){let r=e instanceof Error?e.message:String(e);this.transitionToTerminal("failed",{error:r});return}this.consumeMessages(this.harnessHandle.messages).catch(e=>{let r=e instanceof Error?e.message:String(e),n=e instanceof Error?e.stack:void 0;console.error(`[Session ${this.id}] consumeMessages error: ${r}`,n),this.isActive&&this.transitionToTerminal("failed",{error:r})})}async sendMessage(e){if(this._status!=="running")throw new Error(`Session is not running (status: ${this._status})`);this.resetIdleTimer(),this.turnRuntime.beginUserTurn(),this.applyControlEvent({type:"turn.started"});let r=e;if(this.pendingModeSwitch){let n=this.pendingModeSwitch,o=!1,i=!1;if(this.harnessHandle?.setPermissionMode)try{await this.harnessHandle.setPermissionMode(n),this.currentPermissionMode=n,this.applyControlEvent({type:"permission.mode_changed",currentPermissionMode:n}),this.pendingModeSwitch=void 0,i=!0,o=!0}catch(a){throw console.error(`[Session ${this.id}] setPermissionMode(${n}) FAILED: ${hs(a)}`),this.markPendingPlanApproval(this.planApprovalContext??"plan-mode"),new Error(`Failed to switch permission mode to ${n}: ${hs(a)}`)}else this.pendingModeSwitch=void 0,i=!0,o=!0,console.warn(`[Session ${this.id}] Cannot call setPermissionMode \u2014 falling back to text prefix only (currentPermissionMode remains ${this.currentPermissionMode})`);i&&(this.clearPendingPlanApproval(),n!=="plan"&&this.applyControlEvent({type:"plan.approved"})),o&&(r=`[SYSTEM: The user has approved your plan. Exit plan mode immediately and implement the changes with full permissions. Do not ask for further confirmation.]
62
+
63
+ ${e}`)}else if((this.pendingPlanApproval||this.approvalState==="changes_requested")&&!this.planModeApproved&&(this.approvalState!=="changes_requested"&&this.applyControlEvent({type:"plan.changes_requested"}),r=`[SYSTEM: The user wants changes to your plan. Revise the plan based on their feedback below, then re-submit your revised plan for approval. Do NOT start implementing yet.]
64
+
65
+ ${e}`,this.harnessHandle?.setPermissionMode))try{await this.harnessHandle.setPermissionMode("plan"),this.currentPermissionMode="plan",this.applyControlEvent({type:"permission.mode_changed",currentPermissionMode:"plan"})}catch(n){console.warn(`[Session ${this.id}] Failed to re-assert plan mode: ${hs(n)}`)}if(this.multiTurn&&this.messageStream)this.messageStream.push(this.harness.buildUserMessage(r,this.backendConversationId??""));else if(this.harnessHandle?.streamInput){let n=this.harness.buildUserMessage(r,this.backendConversationId??"");async function*o(){yield n}await this.harnessHandle.streamInput(o())}else throw new Error("Session does not support follow-up messages (launched in single-turn mode).")}async interrupt(){return!this.turnInProgress||!this.harnessHandle?.interrupt?!1:(await this.harnessHandle.interrupt(),!0)}async submitPendingInputOption(e){if(!this.pendingInputState||!this.harnessHandle?.submitPendingInputOption)return!1;let r=await this.harnessHandle.submitPendingInputOption(e);return r&&(this.waitingForInputFired=!1),r}async submitPendingInputText(e){if(!this.pendingInputState||!this.harnessHandle?.submitPendingInputText)return!1;let r=await this.harnessHandle.submitPendingInputText(e);return r&&(this.waitingForInputFired=!1),r}switchPermissionMode(e){this.pendingModeSwitch=e}get isActive(){return this._status==="starting"||this._status==="running"}kill(e){this.transitionToTerminal("killed",{reason:e})}complete(e="done"){this.transitionToTerminal("completed",{reason:e})}incrementAutoRespond(){this.autoRespondCount++}resetAutoRespond(){this.autoRespondCount=0}getOutput(e){return e===void 0?this.outputBuffer.slice():this.outputBuffer.slice(-e)}resetIdleTimer(){if(!this.multiTurn)return;let e=(j.idleTimeoutMinutes??15)*60*1e3;this.setTimer("idle",e,()=>{this._status==="running"&&(this.applyControlEvent({type:"terminal.entered",suspended:!0}),this.kill("idle-timeout"))})}teardown(){this.clearAllTimers(),this.completedAt||(this.completedAt=Date.now()),this.messageStream&&this.messageStream.end(),this.harnessHandle?.interrupt&&this.harnessHandle.interrupt().catch(e=>{console.warn(`[Session ${this.id}] interrupt during teardown failed: ${hs(e)}`)}),this.abortController.abort(),this.applyControlEvent({type:"terminal.entered",suspended:this.lifecycle==="suspended"})}transitionToTerminal(e,r={}){this.isActive&&(this.turnInProgress=!1,r.reason&&(this.killReason=r.reason),r.error!==void 0&&(this.error=r.error),this.completedAt=Date.now(),this.applyControlEvent({type:"terminal.entered",suspended:e==="killed"&&r.reason==="idle-timeout"}),this.transition(e),this.teardown())}async consumeMessages(e){for await(let r of e){if(!this.isActive)break;this.resetIdleTimer(),this.harnessEvents.applyMessage(r,{pendingPlanApproval:this.pendingPlanApproval,currentPermissionMode:this.currentPermissionMode,permissionMode:this.permissionMode,planModeApproved:this.planModeApproved,pendingInputState:this.pendingInputState})}}controlStateSnapshot(){return{status:this._status,lifecycle:this.lifecycle,approvalState:this.approvalState,approvalExecutionState:this.approvalExecutionState,worktreeState:this.worktreeState,runtimeState:this.runtimeState,deliveryState:this.deliveryState,requestedPermissionMode:this.requestedPermissionMode,currentPermissionMode:this.currentPermissionMode,pendingPlanApproval:this.pendingPlanApproval,planApprovalContext:this.planApprovalContext,planDecisionVersion:this.planDecisionVersion,actionablePlanDecisionVersion:this.actionablePlanDecisionVersion,canonicalPlanPromptVersion:this.canonicalPlanPromptVersion,approvalPromptRequiredVersion:this.approvalPromptRequiredVersion,approvalPromptVersion:this.approvalPromptVersion,approvalPromptStatus:this.approvalPromptStatus,approvalPromptTransport:this.approvalPromptTransport,approvalPromptMessageKind:this.approvalPromptMessageKind,approvalPromptLastAttemptAt:this.approvalPromptLastAttemptAt,approvalPromptDeliveredAt:this.approvalPromptDeliveredAt,approvalPromptFailedAt:this.approvalPromptFailedAt,planModeApproved:this.planModeApproved}}applyControlEvent(e){let r=ip(this.controlStateSnapshot(),e);this.applyControlState(r)}applyControlPatch(e){let r=mc(this.controlStateSnapshot(),e);this.applyControlState(r)}setControlField(e,r){this.applyControlPatch({[e]:r})}applyControlState(e){let r=this.lifecycle;this.lifecycle=e.lifecycle,this.approvalState=e.approvalState,this.approvalExecutionState=e.approvalExecutionState,this.worktreeState=e.worktreeState,this.runtimeState=e.runtimeState,this.deliveryState=e.deliveryState,this.pendingPlanApproval=e.pendingPlanApproval,this.planApprovalContext=e.planApprovalContext,this.planDecisionVersion=e.planDecisionVersion,this.actionablePlanDecisionVersion=e.actionablePlanDecisionVersion,this.canonicalPlanPromptVersion=e.canonicalPlanPromptVersion,this.approvalPromptRequiredVersion=e.approvalPromptRequiredVersion,this.approvalPromptVersion=e.approvalPromptVersion,this.approvalPromptStatus=e.approvalPromptStatus,this.approvalPromptTransport=e.approvalPromptTransport,this.approvalPromptMessageKind=e.approvalPromptMessageKind,this.approvalPromptLastAttemptAt=e.approvalPromptLastAttemptAt,this.approvalPromptDeliveredAt=e.approvalPromptDeliveredAt,this.approvalPromptFailedAt=e.approvalPromptFailedAt,this.planModeApproved=e.planModeApproved,r!==this.lifecycle&&this.emit("lifecycleChange",this,this.lifecycle,r)}};var Ev=50,$v=1,Mv=new Set(["starting","running","completed","failed","killed"]),Ov=5,_v=1440*60*1e3,Ss=new Set(["merged","released","dismissed","no_change"]);function Dv(t){let e=Number(t);return!Number.isFinite(e)||e<$v?Ev:Math.floor(e)}function Fv(t){return typeof t=="string"&&Mv.has(t)}function Lv(t){let e=t.split(`
66
+ `);return e.at(-1)===""&&e.pop(),e}function cp(t){return t.backendRef?.conversationId??t.harnessSessionId}function Nv(t,e){return e&&Ss.has(e)&&(!t||!Ss.has(t))?e:t??e}function qv(t,e){return e&&Ss.has(e.state)&&(!t||!Ss.has(t.state))?e:t??e}function Mc(t,e,r){let n=$c(t,"utf-8"),o=Lv(n);return e.full?o:o.slice(-r)}function Bv(t,e,r){if(t.status!=="starting"&&t.status!=="running")return null;let n=Bn(t.id);if(!mp(n))return null;try{return Mc(n,e,r)}catch{return null}}function Uv(t){let e=Lt(t.duration),r=` | Cost: $${t.costUsd.toFixed(4)}`,n=t.phase?` | Phase: ${t.phase}`:"",o=t.lifecycle&&t.lifecycle!==t.phase?` | Lifecycle: ${t.lifecycle}`:"";return[`Session: ${t.name} [${t.id}] | Status: ${t.status.toUpperCase()}${n}${o}${r} | Duration: ${e}`,`${"\u2500".repeat(60)}`].join(`
67
+ `)}function Oc(t,e){let r=t.name||t.sessionId||cp(t)||"unknown",n=t.lifecycle?` | Phase: ${t.lifecycle}`:"";return[`Session: ${r} | Status: ${t.status.toUpperCase()}${n} | Cost: $${t.costUsd.toFixed(4)}`,e,`${"\u2500".repeat(60)}`].join(`
68
+ `)}function Kv(t){return`(retrieved from ${t.outputPath} \u2014 evicted from runtime cache \u2014 showing persisted output)`}function jv(t){return t.outputPath?`(persisted session metadata recovered; output file is unavailable at ${t.outputPath})`:"(persisted session metadata recovered; no output file was recorded)"}function Ec(t,e){let r=Oc(t,jv(t)),n=cp(t),o=n?`
69
+ Backend session: ${n}`:"";return`${r}
70
+ (no persisted output available: ${e})${o}`}function Wv(t){let e=[];return t.error&&e.push(`Error: ${t.error}`),t.result?.result&&e.push(`Result: ${t.result.result}`),t.result&&e.push(`Result status: ${t.result.subtype}`),e.length>0?`
70
71
  (no output yet)
71
72
  ${e.join(`
72
73
  `)}`:`
73
- (no output yet)`}function cs(t,e,n={}){let r=hI(n.lines),o=t.resolve(e);if(!o){let l=t.getPersistedSession(e);if(l?.outputPath&&xl(l.outputPath))try{let u=hg(l.outputPath,n,r).join(`
74
- `),c=yg(l,PI(l));return u?`${c}
75
- ${u}`:`${c}
76
- (output file was empty)`}catch(u){let c=u instanceof Error?u.message:String(u);return`Error: Session "${e}" was cleaned up (expired) and output file could not be read: ${c}`}return l?.outputPath?fg(l,`output file is missing at ${l.outputPath}`):l?fg(l,"no outputPath is stored for this recovered session"):`Error: Session "${e}" not found.`}let i=kI(o,n,r),s=i&&i.length>0?i:n.full?o.getOutput():o.getOutput(r),a=vI(o),d=s.length===0?`${a}${II(o)}`:`${a}
77
- ${s.join(`
78
- `)}`;if(o.pendingPlanApproval&&o.planFilePath)try{if(xl(o.planFilePath)){let l=gg(o.planFilePath,"utf-8"),u="\u2500".repeat(60);return`${d}
79
- ${u}
74
+ (no output yet)`}function ks(t,e,r={}){let n=Dv(r.lines),o=t.resolve(e);if(!o){let d=t.getPersistedSession(e);if(d?.outputPath&&mp(d.outputPath))try{let l=Mc(d.outputPath,r,n).join(`
75
+ `),m=Oc(d,Kv(d));return l?`${m}
76
+ ${l}`:`${m}
77
+ (output file was empty)`}catch(l){let m=l instanceof Error?l.message:String(l);return`Error: Session "${e}" was cleaned up (expired) and output file could not be read: ${m}`}return d?.outputPath?Ec(d,`output file is missing at ${d.outputPath}`):d?Ec(d,"no outputPath is stored for this recovered session"):`Error: Session "${e}" not found.`}let i=Bv(o,r,n),a=i&&i.length>0?i:r.full?o.getOutput():o.getOutput(n),u=Uv(o),p=a.length===0?`${u}${Wv(o)}`:`${u}
78
+ ${a.join(`
79
+ `)}`;if(o.pendingPlanApproval&&o.planFilePath)try{if(mp(o.planFilePath)){let d=$c(o.planFilePath,"utf-8"),l="\u2500".repeat(60);return`${p}
80
+ ${l}
80
81
  Plan file: ${o.planFilePath}
81
- ${u}
82
- ${l}`}}catch{}return d}function ms(t,e="all",n,r={}){let o=t.listPersistedSessions()??[],s=bI(t.list("all"),o);if(e!=="all"&&(s=s.filter(a=>a.status===e)),n&&(s=s.filter(a=>a.originChannel===n)),r.full){let a=Date.now()-gI;s=s.filter(d=>(d.startedAt??0)>=a)}else s=s.slice(0,fI);return s.length===0?"No sessions found.":s.map(a=>Ff(a)).join(`
83
-
84
- `)}function bI(t,e){let n=new Map;for(let r of e){if(!yI(r.status))continue;let o=r.completedAt??Date.now(),i=r.createdAt??o,s=Al(r),a=r.sessionId??`persisted:${s??r.harnessSessionId}`;n.set(a,{id:r.sessionId??s??r.harnessSessionId,name:r.name||r.sessionId||s||r.harnessSessionId,status:r.status,startedAt:r.createdAt??0,completedAt:r.completedAt,duration:Math.max(0,o-i),prompt:r.prompt??"",workdir:r.workdir??"(unknown)",costUsd:r.costUsd??0,multiTurn:!0,phase:r.lifecycle??r.status,lifecycle:r.lifecycle,resumable:r.resumable,harness:r.harness,backendRef:r.backendRef,harnessSessionId:r.harnessSessionId,requestedPermissionMode:r.requestedPermissionMode,currentPermissionMode:r.currentPermissionMode,approvalExecutionState:r.approvalExecutionState,originChannel:r.originChannel,originThreadId:r.originThreadId,worktreePath:r.worktreePath,worktreeBranch:r.worktreeBranch,worktreeStrategy:r.worktreeStrategy,worktreeMerged:r.worktreeMerged,worktreeMergedAt:r.worktreeMergedAt,worktreePrUrl:r.worktreePrUrl})}for(let r of t)n.set(r.id,{id:r.id,name:r.name,status:r.status,startedAt:r.startedAt,completedAt:r.completedAt,duration:r.duration,prompt:r.prompt,workdir:r.originalWorkdir??r.workdir,costUsd:r.costUsd,multiTurn:r.multiTurn,phase:r.phase,lifecycle:r.lifecycle,resumable:r.isExplicitlyResumable,harness:r.harnessName,backendRef:r.backendRef,harnessSessionId:r.harnessSessionId,requestedPermissionMode:r.requestedPermissionMode,currentPermissionMode:r.currentPermissionMode,approvalExecutionState:r.approvalExecutionState,originChannel:r.originChannel,originThreadId:r.originThreadId,worktreePath:r.worktreePath,worktreeBranch:r.worktreeBranch,worktreeStrategy:r.worktreeStrategy,worktreeMerged:void 0,worktreeMergedAt:void 0,worktreePrUrl:void 0});return[...n.values()].sort((r,o)=>(o.startedAt??0)-(r.startedAt??0))}function xI(t){if(!t||typeof t!="object")return"all";let e=t.status;switch(e){case"running":case"completed":case"failed":case"killed":case"all":return e;default:return"all"}}function Sg(t){return{name:"agent_sessions",description:"List coding agent sessions with their status and progress. By default, shows the 5 most recent sessions; set `full` to show all sessions from the last 24 hours.",parameters:m.Object({status:m.Optional(m.Union([m.Literal("all"),m.Literal("running"),m.Literal("completed"),m.Literal("failed"),m.Literal("killed")],{description:'Filter by status (default "all")'})),full:m.Optional(m.Boolean({description:"Show all sessions from the last 24h instead of just the most recent 5"}))}),async execute(e,n){if(!v)return{content:[{type:"text",text:"Error: SessionManager not initialized. The code-agent service must be running."}]};let r=xI(n),o=t?.workspaceDir?io(t.workspaceDir):void 0,i=!!(n&&typeof n=="object"&&n.full===!0);return{content:[{type:"text",text:ms(v,r,o,{full:i})}]}}}}De();Y();function fs(t,e,n){let r=t.resolve(e);return r?r.status==="completed"||r.status==="failed"||r.status==="killed"?`Session ${r.name} [${r.id}] is already ${r.status}. No action needed.`:n==="completed"?(r.complete(),`Session ${r.name} [${r.id}] marked as completed.`):(t.kill(r.id),`Session ${r.name} [${r.id}] has been terminated.`):`Error: Session "${e}" not found.`}function AI(t){if(!t||typeof t!="object")return!1;let e=t;return typeof e.session!="string"?!1:e.reason===void 0?!0:e.reason==="completed"||e.reason==="killed"}function kg(t){return{name:"agent_kill",description:"Terminate or complete a running coding agent session by name or ID. Use reason='completed' to mark a session as successfully completed instead of killed.",parameters:m.Object({session:m.String({description:"Session name or ID to terminate"}),reason:m.Optional(m.Union([m.Literal("completed"),m.Literal("killed")],{description:"Reason for closing the session. 'completed' marks it as successfully done (sends \u2705 notification). 'killed' (default) terminates it."}))}),async execute(e,n){return v?AI(n)?{content:[{type:"text",text:fs(v,n.session,n.reason)}]}:{content:[{type:"text",text:"Error: Invalid parameters. Expected { session, reason? }."}]}:{content:[{type:"text",text:"Error: SessionManager not initialized. The code-agent service must be running."}]}}}}De();Y();function RI(t){return!t||typeof t!="object"?!1:typeof t.session=="string"}function gs(t){return{name:"agent_output",description:"Show recent output from a coding agent session (by name or ID).",parameters:m.Object({session:m.String({description:"Session name or ID to get output from"}),lines:m.Optional(m.Number({description:"Number of recent lines to show (default 50)"})),full:m.Optional(m.Boolean({description:"Show all available output"}))}),async execute(e,n){return v?RI(n)?{content:[{type:"text",text:cs(v,n.session,{full:n.full,lines:n.lines})}]}:{content:[{type:"text",text:"Error: Invalid parameters. Expected { session, lines?, full? }."}]}:{content:[{type:"text",text:"Error: SessionManager not initialized. The code-agent service must be running."}]}}}}De();Y();Te();he();var TI=10;function Tl(t){return t instanceof Error?t.message:String(t)}function Wn(t){return ne(t)??t.harnessSessionId??"unknown-session"}function vg(t){return t.status!=="running"&&!!t.pendingPlanApproval&&!!_(t)}function MI(t){let e=t.trim().toLowerCase().replace(/[.!?]+$/g,"").trim();if(e==="approve"||e==="approved")return"approve";if(e==="revise"||e==="request changes"||e==="changes requested")return"revise";if(e==="reject"||e==="rejected")return"reject"}function Po(t,e,n){let r=e==="completed"?`This session is closed by default. Launch a fresh session, or fork from prior context with agent_launch(resume_session_id='${Wn(t)}', fork_session=true, prompt='<new task>').`:e==="legacy_non_resumable"?`Persisted historical backend state is intentionally non-resumable here. Launch fresh, or fork with agent_launch(resume_session_id='${Wn(t)}', fork_session=true, prompt='<new task>').`:e==="missing_backend_state"?`No resumable backend state is available. Launch a fresh session, or fork from prior context with agent_launch(resume_session_id='${Wn(t)}', fork_session=true, prompt='<new task>').`:`Use agent_respond(session='${Wn(t)}', message='<next instruction>') to continue the running session.`,o=n?` ${n}`:"";return{text:`Resume unavailable for session ${t.name} [${Wn(t)}] (${e}).${o} ${r}`,isError:!0}}async function Pg(t,e,n){try{let r={prompt:e.prompt,sessionIdOverride:fl(e),workdir:e.workdir,name:e.name,model:e.model,reasoningEffort:e.reasoningEffort,fastMode:e.fastMode,worktreeStrategy:e.worktreeStrategy,multiTurn:!0,originChannel:e.originChannel,originThreadId:e.originThreadId,originAgentId:e.originAgentId,originSessionKey:e.originSessionKey,route:e.route,permissionMode:e.currentPermissionMode,requestedPermissionMode:e.requestedPermissionMode??e.currentPermissionMode,planApproval:e.planApproval,codexApprovalPolicy:e.codexApprovalPolicy,harness:"harnessName"in e?e.harnessName:e.harness},o=await t.spawnAndAwaitRunning(r,{notifyLaunch:!1});return t.notifySession(o,`\u25B6\uFE0F [${o.name}] Relaunched fresh`),{text:`Session ${e.name} was relaunched fresh \u2014 it was killed during startup before the harness initialized. New session: ${o.name} [${o.id}].`}}catch(r){return{text:`Error relaunching session ${e.name} [${Wn(e)}]: ${Tl(r)}`,isError:!0}}}var CI=`[SYSTEM: The user has approved your plan. Exit plan mode immediately and implement the changes with full permissions. Do not ask for further confirmation.]
85
-
86
- `;function wg(t){let e=t?.replace(/\s+/g," ").trim();if(e)return Me(e,240)}function Rl(t){if(t.approvalState==="changes_requested"&&!hs(t))return`Plan changes were already requested for session ${t.name}. Wait for the revised plan before approving.`;if(t.approvalState==="rejected")return`Plan for session ${t.name} was already rejected.`}function hs(t){return t.pendingPlanApproval?(t.approvalState==="changes_requested"?t.actionablePlanDecisionVersion:t.actionablePlanDecisionVersion??t.planDecisionVersion)>0:!1}function _I(t){return Rl(t)?!1:hs(t)||t.currentPermissionMode==="plan"}function EI(t,e){let n=t.updatePersistedSession;if(typeof n!="function")return;let r=e.controlStateSnapshot();n.call(t,e.id,{lifecycle:r.lifecycle,approvalState:r.approvalState,approvalExecutionState:r.approvalExecutionState,runtimeState:r.runtimeState,requestedPermissionMode:r.requestedPermissionMode,currentPermissionMode:r.currentPermissionMode,pendingPlanApproval:r.pendingPlanApproval,planApprovalContext:r.planApprovalContext,planDecisionVersion:r.planDecisionVersion,actionablePlanDecisionVersion:r.actionablePlanDecisionVersion,planModeApproved:r.planModeApproved,approvalRationale:e.approvalRationale})}function $I(t){return(t.planDecisionVersion??0)+1}function Ig(t,e){let n={approvalState:e,lifecycle:e==="rejected"?"terminal":"awaiting_user_input",pendingPlanApproval:!1,planApprovalContext:void 0,planDecisionVersion:$I(t),actionablePlanDecisionVersion:void 0,canonicalPlanPromptVersion:void 0,approvalPromptRequiredVersion:void 0,approvalPromptVersion:void 0,approvalPromptStatus:"not_sent",approvalPromptTransport:"none",approvalPromptMessageKind:"none",approvalPromptLastAttemptAt:void 0,approvalPromptDeliveredAt:void 0,approvalPromptFailedAt:void 0};return e==="rejected"&&(n.runtimeState="stopped"),n}function bg(t,e){let n=t;typeof n.applyControlPatch=="function"&&n.applyControlPatch(e),Object.assign(t,e)}function Ml(t,e){let n=t.resolve(e),r=n?void 0:t.getPersistedSession(e),o=n??r,i=o?.name??e;if(t.clearPlanDecisionTokens?.(e),!o)return{text:`Plan rejected for [${i}].`,isError:!1};let s=Ig(o,"rejected");return n?(bg(n,s),t.updatePersistedSession?.(e,s),t.kill(n.id,"user"),{text:`Plan rejected for [${n.name}]. Session stopped.`}):(t.updatePersistedSession?.(e,s),{text:`Plan rejected for [${i}]. Session remains stopped.`})}function Cl(t,e){let n=t.resolve(e),r=n?void 0:t.getPersistedSession(e),o=n??r,i=o?.name??e;if(t.clearPlanDecisionTokens?.(e),o){let s=Ig(o,"changes_requested");n&&bg(n,s),t.updatePersistedSession?.(e,s)}return{text:`Type your revision feedback for [${i}] and I'll forward it to the agent.`}}async function OI(t,e,n,r={}){let o=fo(e);if(!(o.kind==="resume"||vg(e)))return;let s=!!(r.approve&&_I(e)),a=s?wg(r.approvalRationale):void 0;try{if(o.kind!=="resume")return o.kind==="relaunch"?Pg(t,e,n):Po(e,o.reason);let d={prompt:s?CI+n:n,sessionIdOverride:o.stableSessionId,workdir:e.workdir,name:e.name,model:e.model,reasoningEffort:e.reasoningEffort,fastMode:e.fastMode,resumeSessionId:o.resumeSessionId,worktreeStrategy:e.worktreeStrategy,worktreeBaseBranch:e.worktreeBaseBranch,worktreePrTargetRepo:e.worktreePrTargetRepo,multiTurn:!0,originChannel:e.originChannel,originThreadId:e.originThreadId,originAgentId:e.originAgentId,originSessionKey:e.originSessionKey,route:e.route,permissionMode:s?"bypassPermissions":e.currentPermissionMode,requestedPermissionMode:e.requestedPermissionMode??e.currentPermissionMode,planApproval:e.planApproval,codexApprovalPolicy:e.codexApprovalPolicy,pendingPlanApproval:s?!1:e.pendingPlanApproval,planApprovalContext:e.planApprovalContext,planDecisionVersion:e.planDecisionVersion,actionablePlanDecisionVersion:s?void 0:e.actionablePlanDecisionVersion,canonicalPlanPromptVersion:e.canonicalPlanPromptVersion,approvalPromptRequiredVersion:e.approvalPromptRequiredVersion,approvalPromptVersion:e.approvalPromptVersion,approvalPromptStatus:e.approvalPromptStatus,approvalPromptTransport:e.approvalPromptTransport,approvalPromptMessageKind:e.approvalPromptMessageKind,approvalPromptLastAttemptAt:e.approvalPromptLastAttemptAt,approvalPromptDeliveredAt:e.approvalPromptDeliveredAt,approvalPromptFailedAt:e.approvalPromptFailedAt,...s?{approvalState:"approved",approvalExecutionState:"approved_then_implemented",approvalRationale:a,planModeApproved:!0}:{},harness:"harnessName"in e?e.harnessName:e.harness},l=await t.spawnAndAwaitRunning(d,{notifyLaunch:!1});return s?(t.notifySession(l,`\u{1F44D} [${l.name}] Plan approved (resumed)`,"plan-approved"),{text:`Plan approved for session ${l.name} [${l.id}]. Session resumed in bypassPermissions mode. Use agent_output to see the response.`}):(t.notifySession(l,`\u25B6\uFE0F [${l.name}] Auto-resumed`),{text:`Auto-resumed session ${l.name} [${l.id}]. Use agent_output to see the response.`})}catch(d){return Po(e,"missing_backend_state",`Backend resume failed: ${Tl(d)}`)}}async function ct(t,e){let n=t.resolve(e.session),r=n?void 0:t.getPersistedSession(e.session);if(!n&&!r)return{text:`Error: Session "${e.session}" not found.`,isError:!0};let o=n??r,i=o.status==="running"?{kind:"direct"}:fo(o),s=!e.approve&&o.lifecycle==="awaiting_plan_decision"&&o.pendingPlanApproval&&e.userInitiated?MI(e.message):void 0;if(s==="approve")return ct(t,{...e,message:"Approved. Go ahead.",approve:!0});if(s==="revise")return Cl(t,n?.id??r?.sessionId??e.session);if(s==="reject")return Ml(t,n?.id??r?.sessionId??e.session);if(e.approve){let d=Rl(o);if(d)return{text:d,isError:!0}}if(i.kind==="resume"||vg(o)){let d=await OI(t,o,e.message,{approve:e.approve,approvalRationale:e.approvalRationale});if(d)return d}else{if(i.kind==="relaunch")return Pg(t,o,e.message);if(i.kind==="unavailable")return Po(o,i.reason)}if(!n)return mo(r)?Po(r,"completed"):{text:`Error: Session ${r.name} [${Wn(r)}] is not running (status: ${r.status}). Cannot send a message to a non-running session.`,isError:!0};if(n.status!=="running")return mo(n)?Po(n,"completed"):{text:`Error: Session ${n.name} [${n.id}] is not running (status: ${n.status}). Cannot send a message to a non-running session.`,isError:!0};let a=E.maxAutoResponds??TI;if(e.userInitiated)n.resetAutoRespond();else if(n.autoRespondCount>=a)return{text:`\u26A0\uFE0F Auto-respond limit reached (${n.autoRespondCount}/${a}). Ask the user to provide the answer for session ${n.name}. Then call agent_respond with their answer and set userInitiated: true to reset the counter.`};try{if(e.approve){let k=Rl(n);if(k)return{text:k,isError:!0}}if(!e.approve&&n.pendingInputState?.allowsFreeText&&await n.submitPendingInputText?.(e.message)===!0){if(e.userInitiated){let I=Me(e.message,100);t.notifySession(n,`\u21AA\uFE0F [${n.name}] "${I}"`,"agent-respond")}e.userInitiated||n.incrementAutoRespond();let k=Me(e.message,80);return{text:[`Pending input answered for session ${n.name} [${n.id}].`,` Message: "${k}"`,"Use agent_output to see the response."].join(`
87
- `)}}let l=!1;e.interrupt&&(l=await n.interrupt());let u=!!(e.approve&&hs(n)),c=u?wg(e.approvalRationale):void 0,g="";if(e.approve&&hs(n)?(n.switchPermissionMode("bypassPermissions"),n.approvalRationale=c):e.approve&&n.currentPermissionMode==="default"?n.switchPermissionMode("bypassPermissions"):e.approve&&n.currentPermissionMode==="bypassPermissions"?g=`
88
- \u2139\uFE0F approve=true was set but session is already in bypassPermissions mode.`:e.approve?g=`
89
- \u26A0\uFE0F approve=true was set but session has no pending plan approval.`:(n.pendingPlanApproval||n.approvalState==="changes_requested")&&(g=`
90
- \u2139\uFE0F Session has a pending plan \u2014 sending as revision feedback. The agent will revise and re-submit. Set approve=true to approve instead.`),await n.sendMessage(e.message),u&&EI(t,n),u)t.notifySession(n,`\u{1F44D} [${n.name}] Plan approved`,"plan-approved");else if(e.userInitiated){let k=Me(e.message,100);t.notifySession(n,`\u21AA\uFE0F [${n.name}] "${k}"`,"agent-respond")}e.userInitiated||n.incrementAutoRespond();let S=Me(e.message,80);return u?{text:`Plan approved for session ${n.name} [${n.id}]. Use agent_output to see the response.`}:{text:[`Message sent to session ${n.name} [${n.id}].`,l?" (redirected active turn first)":e.interrupt?" (no active turn to interrupt)":"",` Message: "${S}"`,g,"Use agent_output to see the response."].filter(Boolean).join(`
91
- `)}}catch(d){return{text:`Error sending message to session ${n.name} [${n.id}]: ${Tl(d)}`,isError:!0}}}function DI(t){if(!t||typeof t!="object")return!1;let e=t;return typeof e.session=="string"&&typeof e.message=="string"&&(e.approval_rationale===void 0||typeof e.approval_rationale=="string")}function xg(t){return{name:"agent_respond",description:"Send a follow-up message to a running coding agent session. The session must be running. All sessions are multi-turn.",parameters:m.Object({session:m.String({description:"Session name or ID to respond to"}),message:m.String({description:"The message to send to the session"}),interrupt:m.Optional(m.Boolean({description:"If true, interrupt the current turn before sending the message. Useful to redirect the session mid-response."})),userInitiated:m.Optional(m.Boolean({description:"Set to true when the message comes from the user (not auto-generated). Resets the auto-respond counter and bypasses the auto-respond limit."})),approve:m.Optional(m.Boolean({description:"Set to true to escalate session permissions to bypassPermissions. Works in two scenarios: (1) approve a pending plan in plan mode, or (2) escalate a default-mode session to skip remaining OpenClaw approval checkpoints. No-op if already in bypassPermissions mode. In plan mode without a pending plan, this flag is ignored."})),approval_rationale:m.Optional(m.String({description:"Optional structured rationale for a direct delegated plan approval. Use this instead of embedding the rationale in message text when approve=true for a pending plan."}))}),async execute(e,n){if(!v)return{content:[{type:"text",text:"Error: SessionManager not initialized. The code-agent service must be running."}]};if(!DI(n))return{content:[{type:"text",text:"Error: Invalid parameters. Expected { session, message, interrupt?, userInitiated?, approve?, approval_rationale? }."}]};let r=await ct(v,{session:n.session,message:n.message,interrupt:n.interrupt,userInitiated:n.userInitiated,approve:n.approve,approvalRationale:n.approval_rationale});return{isError:r.isError??!1,content:[{type:"text",text:r.text}]}}}}De();Y();function NI(t){if(!t||typeof t!="object")return!1;let e=t;return typeof e.session=="string"&&typeof e.summary=="string"}function Ag(t){return{name:"agent_request_plan_approval",description:"Send a plan-approval decision prompt to the user for a session that is already waiting on plan approval. Reuses the plugin's Approve/Revise/Reject buttons so the user can decide directly from the message.",parameters:m.Object({session:m.String({description:"Session name or ID awaiting plan approval"}),summary:m.String({description:"Concise user-facing summary of scope, risk, and any concerns that should accompany the approval buttons"})}),async execute(e,n){if(!v)return{content:[{type:"text",text:"Error: SessionManager not initialized. The code-agent service must be running."}]};if(!NI(n))return{content:[{type:"text",text:"Error: Invalid parameters. Expected { session, summary }."}]};let r=v.requestPlanApprovalFromUser(n.session,n.summary);return{isError:r.startsWith("Error:"),content:[{type:"text",text:r}]}}}}De();Y();Te();var _l=["off","manual","ask","delegate","auto-merge","auto-pr"],ys=new Set(_l),FI=["low","medium","high","xhigh","max"],Rg=new Set(FI);function LI(t){return typeof t=="string"&&ys.has(t)}var WI=m.Union(_l.map(t=>m.Literal(t)),{description:"Optional worktree strategy for the planning session. Use auto-pr when the follow-up should branch and open/update a PR after approved implementation."});function BI(t){if(!t||typeof t!="object")return!1;let e=t;return typeof e.offer_id=="string"&&typeof e.offer_text=="string"&&typeof e.plan_prompt=="string"&&typeof e.plan_workdir=="string"&&(e.plan_worktree_strategy==null||LI(e.plan_worktree_strategy))&&(e.plan_name==null||typeof e.plan_name=="string")&&(e.target_channel==null||typeof e.target_channel=="string")&&(e.target_thread_id==null||typeof e.target_thread_id=="string"||typeof e.target_thread_id=="number")&&(e.target_session_key==null||typeof e.target_session_key=="string")}function UI(t,e){let n=lr(t,e.target_channel,e.target_session_key);if(n)return e.target_thread_id!=null&&(n.threadId=String(e.target_thread_id)),n}async function KI(t,e){if(!v)return{content:[{type:"text",text:"Error: SessionManager not initialized. The code-agent service must be running."}]};let n=UI(t,e);return!n?.provider||!n.target?{content:[{type:"text",text:"Error: Could not resolve a direct delivery route for the plan offer."}]}:(v.sendPlanOffer({offerId:e.offer_id,route:n,text:e.offer_text,planName:e.plan_name??e.offer_id,planPrompt:e.plan_prompt,planWorkdir:e.plan_workdir,planWorktreeStrategy:e.plan_worktree_strategy}),{content:[{type:"text",text:`Interactive plan offer queued for ${n.provider}|${n.target}${n.threadId?`#${n.threadId}`:""}.`}]})}function Tg(t){return{name:"agent_send_plan_offer",description:"Post a user-facing message to the current or explicit chat route with human-gated Start Plan and Dismiss inline buttons. Use this when an external workflow wants the user to open a plan-only code-agent session from the message.",parameters:m.Object({offer_id:m.String({description:"Stable offer identifier, for example 'plugin-readiness-v2026.5.5'."}),offer_text:m.String({description:"Final user-facing text to deliver."}),plan_prompt:m.String({description:"Prompt to seed into the plan-only session when the user clicks Start Plan."}),plan_workdir:m.String({description:"Working directory for the planning session."}),plan_worktree_strategy:m.Optional(WI),plan_name:m.Optional(m.String({description:"Optional explicit session name for the planning session."})),target_channel:m.Optional(m.String({description:"Optional explicit route like 'telegram|-1003863755361'."})),target_thread_id:m.Optional(m.Union([m.String(),m.Number()],{description:"Optional explicit topic/thread id."})),target_session_key:m.Optional(m.String({description:"Optional explicit session key for wake routing."}))}),async execute(e,n){return BI(n)?KI(t,n):{content:[{type:"text",text:"Error: Invalid parameters. Expected { offer_id, offer_text, plan_prompt, plan_workdir }."}]}}}}De();Y();function Mg(t){return{name:"agent_stats",description:"Show OpenClaw Code Agent usage metrics: session counts by status, average duration, and notable sessions.",parameters:m.Object({}),async execute(e,n){if(!v)return{content:[{type:"text",text:"Error: SessionManager not initialized. The code-agent service must be running."}]};let r=v.getMetrics(),o=v.list("running").length;return{content:[{type:"text",text:qi(r,o)}]}}}}De();Te();Y();rt();wo();import{existsSync as ws}from"fs";function qI(t){return!t||typeof t!="object"?!1:typeof t.session=="string"}function jI(t){return t.mergeResult.stashPopConflict?[`Pre-merge stash pop conflicted; run git stash show ${t.mergeResult.stashRef??"stash@{0}"} in ${t.repoDir} to review stashed changes.`]:t.mergeResult.stashed?[`Pre-existing changes on ${t.baseBranch} were auto-stashed and restored.`]:[]}function Is(t){return{name:"agent_merge",description:"Merge a worktree branch back to the base branch. Resolves session (active or persisted), gets worktree path, and performs the merge. On conflict, spawns a conflict-resolver session using the configured default harness.",parameters:m.Object({session:m.String({description:"Session name or ID to merge"}),base_branch:m.Optional(m.String({description:"Base branch to merge into (default: main)"})),strategy:m.Optional(m.Union([m.Literal("merge"),m.Literal("squash")],{description:"Merge strategy: 'merge' (default, fast-forward if possible; merge commit if branches have diverged) or 'squash' (squashes all commits into one)"})),push:m.Optional(m.Boolean({description:"Push the base branch after successful merge (default: false)"})),delete_branch:m.Optional(m.Boolean({description:"Delete the worktree branch after successful merge (default: true)"}))}),async execute(e,n){if(!v)return{content:[{type:"text",text:"Error: SessionManager not initialized. The code-agent service must be running."}]};if(!qI(n))return{content:[{type:"text",text:"Error: Invalid parameters. Expected { session, base_branch?, strategy?, push?, delete_branch? }."}]};let r=vr(v,n.session),o=r.activeSession,i=r.persistedSession;if(!o&&!i)return{content:[{type:"text",text:`Error: Session "${n.session}" not found.`}]};let{worktreePath:s,originalWorkdir:a,branchName:d}=r;if(!s||!a)return{content:[{type:"text",text:`Error: Session "${n.session}" does not have a worktree.`}]};if(!d)return{content:[{type:"text",text:`Error: Cannot determine branch name for worktree at ${s}. The worktree may have been removed and no persisted branch name is available.`}]};ws(s)||console.info(`[agent_merge] Worktree directory ${s} no longer exists; proceeding with merge via originalWorkdir (${a})`);let l=a;if(!ws(a))return{content:[{type:"text",text:`Error: originalWorkdir "${a}" does not exist.`}]};let u=n.base_branch??pn(l),c=u,g=n.strategy??"merge",S=n.push===!0,k=n.delete_branch!==!1;if(i?.worktreeLifecycle?.state==="merged"||i?.worktreeMerged)return{content:[{type:"text",text:`\u2139\uFE0F Session "${n.session}" is already merged.`}]};if(ws(s)&&!yo(l,d,c)&&kr(s))return{content:[{type:"text",text:[`\u274C Merge blocked: session "${n.session}" has uncommitted worktree changes but branch ${d} has no commits ahead of ${c}.`,`Worktree: ${s}`,"Resume or inspect the session, then commit real task changes or clean temporary files before retrying agent_merge."].join(`
92
- `)}]};let I={content:[{type:"text",text:"\u274C Merge did not run (internal error)"}]},P=r.persistedRef;return await v.enqueueMerge(l,async()=>{let b=v.getPersistedSession(n.session);if(b?.worktreeLifecycle?.state==="merged"||b?.worktreeMerged){I={content:[{type:"text",text:`\u2139\uFE0F Session "${n.session}" was already merged while waiting in queue.`}]};return}let A=Nn(l,d,u),T=ds(l,d,c,g,s);if(T.success){let C=jI({mergeResult:T,repoDir:l,baseBranch:c});if(S&&!as(l,c)){let O=`\u26A0\uFE0F Merged ${d} \u2192 ${c} locally, but failed to push ${c}`;v.notifyWorktreeOutcome(r.notificationTarget,O,{detailLines:[`Branch ${d} was merged into ${c} in the local repository.`,`Pushing ${c} failed; remote state may not include the merge.`,"Cleanup was skipped so the branch/worktree remains available for follow-up.",...C]}),I={content:[{type:"text",text:O}]};return}k&&Ot(l,d);let ye=!1;if(ws(s)&&(ye=nt(l,s),ss(l)),b)for(let O of Cg({...r,persistedSession:b}))v.updatePersistedSession(O,{worktreeMerged:!0,worktreeMergedAt:new Date().toISOString(),pendingWorktreeDecisionSince:void 0,lastWorktreeReminderAt:void 0,lifecycle:"terminal",worktreeState:"merged",worktreeDisposition:"merged",worktreeLifecycle:{state:"merged",updatedAt:new Date().toISOString(),resolvedAt:new Date().toISOString(),resolutionSource:"agent_merge",baseBranch:u,targetRepo:b.worktreePrTargetRepo,pushRemote:b.worktreePushRemote}});let Ht=Fn({kind:"merge",branch:d,base:u,filesChanged:A?.filesChanged,insertions:A?.insertions,deletions:A?.deletions});v.notifyWorktreeOutcome(r.notificationTarget,Ht,{detailLines:[T.fastForward?"Merge type: fast-forward.":"Merge type: merge commit.",S?`Pushed ${c}.`:`Did not push ${c}; push was not requested.`,k?ye?"Branch and worktree cleaned up.":"Branch deleted; worktree cleanup skipped.":"Branch/worktree cleanup was not requested.",...C]});let $=`\u2705 ${T.fastForward?"\u26A1 Fast-forward":"\u{1F500} Merge commit"}: ${d} \u2192 ${c}.${S?" Pushed.":""}${k?ye?" Branch and worktree cleaned up.":" Branch deleted; worktree cleanup skipped.":""}`;T.stashPopConflict?$+=`
93
- \u26A0\uFE0F Pre-merge stash pop conflicted \u2014 run \`git stash show ${T.stashRef??"stash@{0}"}\` in ${l} to review stashed changes.`:T.stashed&&($+=`
94
- (Pre-existing changes on ${c} were auto-stashed and restored.)`),I={content:[{type:"text",text:$}]}}else if(T.rebaseConflict)I={content:[{type:"text",text:`\u26A0\uFE0F Rebase conflicts \u2014 manual resolution required:
95
-
96
- ${T.error}`}]};else if(T.conflictFiles&&T.conflictFiles.length>0){let C=["Resolve merge conflicts in the following files and commit the resolution:","",...T.conflictFiles.map(ye=>`- ${ye}`),"",`After resolving, commit with message: "Resolve merge conflicts from ${d}"`].join(`
97
- `);try{let ye=v.spawn({prompt:C,workdir:l,name:`${n.session}-conflict-resolver`,harness:Le(),permissionMode:"bypassPermissions",multiTurn:!0,route:o?.route??i?.route,originChannel:o?.originChannel??i?.originChannel,originThreadId:o?.originThreadId??i?.originThreadId,originAgentId:o?.originAgentId??i?.originAgentId,originSessionKey:o?.originSessionKey??i?.originSessionKey});I={content:[{type:"text",text:`\u26A0\uFE0F Merge conflicts in ${T.conflictFiles.length} file(s) \u2014 spawned conflict resolver session: ${ye.name}`}]}}catch(ye){I={content:[{type:"text",text:`\u274C Merge conflicts detected, but failed to spawn resolver: ${ye instanceof Error?ye.message:String(ye)}`}]}}}else I={content:[{type:"text",text:T.dirtyError?`\u274C Merge blocked: ${T.error}`:`\u274C Merge failed: ${T.error??"unknown error"}`}]}}),I}}}bs();De();Y();he();rt();wo();function zI(t){return!!t&&typeof t=="object"}function Eg(t){return{name:"agent_worktree_cleanup",description:"Manage worktree cleanup with lifecycle-aware safety rules. Use preview_safe to list what Clean all safe would remove, clean_safe to execute it, or preview_all to see both safe and retained sandboxes with kept reasons.",parameters:m.Object({workdir:m.Optional(m.String({description:"Restrict cleanup to sessions rooted in this repository"})),base_branch:m.Optional(m.String({description:"Override base branch for lifecycle resolution"})),mode:m.Optional(m.Union([m.Literal("preview_safe"),m.Literal("clean_safe"),m.Literal("preview_all")],{description:"Cleanup mode. preview_safe shows what Clean all safe would remove, clean_safe performs that cleanup, preview_all shows both safe and retained worktrees. Defaults to preview_safe when dry_run=true, otherwise clean_safe."})),skip_session_check:m.Optional(m.Boolean({description:"Deprecated. Safe cleanup never removes live sessions."})),force:m.Optional(m.Boolean({description:"Deprecated alias for skip_session_check."})),dry_run:m.Optional(m.Boolean({description:"Show what would be cleaned without deleting anything."})),session:m.Optional(m.String({description:"Session name or ID to clean or dismiss."})),dismiss_session:m.Optional(m.Boolean({description:"When true and session is provided, permanently dismiss the worktree."}))}),async execute(e,n){if(!v)return{content:[{type:"text",text:"Error: SessionManager not initialized. The code-agent service must be running."}]};if(!zI(n))return{content:[{type:"text",text:"Error: Invalid parameters. Expected { workdir?, base_branch?, mode?, dry_run?, session?, dismiss_session? }."}]};let r=n.session,o=n.mode??(n.dry_run===!0?"preview_safe":"clean_safe"),i=o!=="clean_safe",s=o==="preview_all"||o==="clean_safe";if(r&&n.dismiss_session===!0)return{content:[{type:"text",text:await v.dismissWorktree(r)}]};let a=ks(v);if(r&&(a=a.filter(S=>vs(S,r)),a.length===0)){let S=vr(v,r);if(!S.persistedSession&&!S.activeSession)return{content:[{type:"text",text:`Error: Session "${r}" not found.`}]}}if(n.workdir&&(a=a.filter(S=>S.workdir===n.workdir)),a.length===0)return{content:[{type:"text",text:"No managed worktrees matched the requested scope."}]};let d=[],l=[],u=[],c=[];for(let S of a){let{persistedSession:k,activeSession:I,resolvedLifecycle:P}=Ss(v,S,{baseBranch:n.base_branch});if(!P.cleanupSafe){if(s){let b=P.reasons.length>0?P.reasons.map(Ps).join(", "):Bn(P.derivedState);l.push(`${S.name} [kept: ${b}]`)}continue}if(d.push(`${S.name} (${Bn(P.derivedState)})`),!i)try{let b=S.workdir;if(!((k??I)&&We(k??I))&&S.worktreePath&&nt(b,S.worktreePath,{destructive:!1}),S.worktreeBranch&&Ot(b,S.worktreeBranch),k){let T=P.derivedState==="merged"||P.derivedState==="released"?P.derivedState:P.lifecycle.state;v.updatePersistedSession(S.id,{worktreePath:void 0,worktreeBranch:void 0,lifecycle:"terminal",worktreeState:"none",pendingWorktreeDecisionSince:void 0,lastWorktreeReminderAt:void 0,worktreeMerged:T==="merged"?!0:k.worktreeMerged,worktreeMergedAt:T==="merged"?k.worktreeMergedAt??new Date().toISOString():k.worktreeMergedAt,worktreeLifecycle:{...k.worktreeLifecycle??P.lifecycle,state:T,updatedAt:new Date().toISOString(),resolvedAt:k.worktreeLifecycle?.resolvedAt??new Date().toISOString(),resolutionSource:k.worktreeLifecycle?.resolutionSource??"maintenance",baseBranch:n.base_branch??P.lifecycle.baseBranch??k.worktreeBaseBranch,targetRepo:k.worktreePrTargetRepo,pushRemote:k.worktreePushRemote,notes:P.reasons}})}u.push(`${S.name} (${Bn(P.derivedState)})`)}catch(b){c.push(`${S.name}: ${b instanceof Error?b.message:String(b)}`)}}let g=[o==="clean_safe"?"Clean all safe:":o==="preview_all"?"Worktree lifecycle review:":"Clean all safe preview:"];return g.push(` SAFE ${i?"NOW":"FOUND"} (${d.length}): ${d.join(", ")||"(none)"}`),s&&g.push(` KEPT (${l.length}): ${l.join(", ")||"(none)"}`),i||(g.push(` CLEANED (${u.length}): ${u.join(", ")||"(none)"}`),g.push(` FAILURES (${c.length}): ${c.join(", ")||"(none)"}`)),{content:[{type:"text",text:g.join(`
98
- `)}]}}}}De();Y();wo();function QI(t){return!0}function $g(t){return{name:"agent_worktree_status",description:"Show lifecycle-first worktree status for coding agent sessions. Displays product-facing lifecycle state, released handling, cleanup safety, and retained reasons.",parameters:m.Object({session:m.Optional(m.String({description:"Session name or ID to show status for (optional, shows all if omitted)"}))}),async execute(e,n){if(!v)return{content:[{type:"text",text:"Error: SessionManager not initialized. The code-agent service must be running."}]};if(!QI(n))return{content:[{type:"text",text:"Error: Invalid parameters. Expected { session? }."}]};let r=n.session,o=ks(v);if(r&&(o=o.filter(s=>vs(s,r)),o.length===0))return{content:[{type:"text",text:`Error: Session "${r}" not found or has no worktree.`}]};if(o.length===0)return{content:[{type:"text",text:"No sessions with worktrees found."}]};let i=[];for(let s of o){let{persistedSession:a,resolvedLifecycle:d}=Ss(v,s),l=d.cleanupSafe?"safe now":d.preserve?"preserve":"blocked";i.push(`Session: ${s.name} [${s.id}]`),i.push(` Branch: ${s.worktreeBranch??"(unknown)"} \u2192 ${d.lifecycle.baseBranch??a?.worktreeBaseBranch??"main"}`),i.push(` Repo: ${s.workdir}`),i.push(` Lifecycle:${Bn(d.lifecycle.state)}`),d.derivedState!==d.lifecycle.state&&i.push(` Derived: ${Bn(d.derivedState)}`),i.push(` Cleanup: ${l}`),d.evidence.prUrl&&i.push(` PR: ${d.evidence.prUrl} (${d.evidence.prState??"unknown"})`),(d.evidence.branchAheadCount!=null||d.evidence.baseAheadCount!=null)&&i.push(` Ahead: ${d.evidence.branchAheadCount??0} ahead / ${d.evidence.baseAheadCount??0} behind`),i.push(` Reasons: ${d.reasons.length>0?d.reasons.map(Ps).join(", "):"none"}`),i.push("")}return{content:[{type:"text",text:i.join(`
99
- `).trim()}]}}}}De();Y();Te();import{existsSync as JI}from"fs";function YI(t=[]){return t.map((e,n)=>({label:`check-${n+1}`,command:e.trim()})).filter(e=>e.command.length>0)}function xs(t,e){let n=t.goal.trim();if(!n)return{kind:"error",text:"Error: goal must not be empty."};let r=t.workdir||e.workspaceDir||E.defaultWorkdir||process.cwd();if(!JI(r))return{kind:"error",text:`Error: Working directory does not exist: ${r}`};let o=YI(t.verifierCommands),i=t.goalMode??(o.length>0?"verifier":"ralph");if(i==="verifier"&&o.length===0)return{kind:"error",text:"Error: verifier mode requires at least one non-empty verifier command."};let s=t.harness??Le(),a=t.model??ar(s);if(!a)return{kind:"error",text:`Error: No default model configured for harness "${s}". Set plugins.entries["openclaw-code-agent"].config.harnesses.${s}.defaultModel or pass model explicitly.`};let d=Ti(s);if(!Ki(a,d))return{kind:"error",text:`Error: Model "${a}" is not allowed. Permitted models: ${d?.join(", ")}`};let l=e.sessionKey||void 0,u=Mi(e),c=oo(e,u),g=lr(e,c,l);return{kind:"resolved",goal:n,name:t.name,workdir:r,model:a,reasoningEffort:dn(s),fastMode:dr(s),systemPrompt:t.systemPrompt,allowedTools:t.allowedTools,maxIterations:t.maxIterations,permissionMode:t.permissionMode??"bypassPermissions",harness:s,loopMode:i,completionPromise:t.completionPromise,originChannel:c,originThreadId:g?.threadId,originAgentId:e.agentId||void 0,originSessionKey:l,route:g,verifierCommands:o}}function As(t,e){return["Goal task launched.",` Name: ${t.name}`,` ID: ${t.id}`,` Dir: ${t.workdir}`,` Session: ${t.sessionName} [${t.sessionId}]`,` Harness: ${e.harness}`,` Model: ${e.model}`,...e.fastMode?[" Fast mode: enabled"]:[],` Loop mode: ${t.loopMode}`,` Max iterations: ${t.maxIterations}`,` Goal: "${e.goal.length>100?`${e.goal.slice(0,100)}...`:e.goal}"`,...t.loopMode==="ralph"?[` Completion promise: ${t.completionPromise}`]:[" Verifiers:",...e.verifierCommands.map(r=>` - ${r.command}`)],"","Use goal_status to follow progress or goal_stop to terminate the task."].join(`
100
- `)}function XI(t){return!t||typeof t!="object"?!1:typeof t.goal=="string"}function Og(t){return{name:"goal_launch",description:"Launch an explicit goal loop. Use this only when the user specifically asks for a goal task, Ralph-style autonomous loop, iterative loop, autonomous repair loop, or keep-going-until-checks-pass workflow. This is not the default session path.",parameters:m.Object({goal:m.String({description:"End goal for the autonomous task"}),verifier_commands:m.Optional(m.Array(m.String({description:"Shell command that must pass for the goal to be considered complete"}),{minItems:1,description:"Verifier commands run after each coding turn"})),name:m.Optional(m.String({description:"Short task name (kebab-case preferred)"})),workdir:m.Optional(m.String({description:"Working directory (defaults to cwd / configured workspace)"})),model:m.Optional(m.String({description:"Model name to use"})),system_prompt:m.Optional(m.String({description:"Additional system prompt"})),allowed_tools:m.Optional(m.Array(m.String(),{description:"Allowed tools for the underlying agent session"})),max_iterations:m.Optional(m.Number({description:"Maximum verifier-driven repair iterations",minimum:1})),goal_mode:m.Optional(m.Union([m.Literal("ralph"),m.Literal("verifier")],{description:"Loop strategy. 'ralph' repeats until a completion promise appears. 'verifier' repeats until verifier commands pass. Defaults to 'ralph' when no verifiers are provided, otherwise 'verifier'."})),completion_promise:m.Optional(m.String({description:"Exact completion promise for Ralph-mode loops. Defaults to 'DONE'."})),permission_mode:m.Optional(m.Union([m.Literal("default"),m.Literal("plan"),m.Literal("bypassPermissions")],{description:"Permission mode for the underlying agent session. Defaults to bypassPermissions for autonomous goal loops."})),harness:m.Optional(m.String({description:"Agent harness to use (e.g. 'codex' or 'claude-code')."}))}),async execute(e,n){if(!ge)return{content:[{type:"text",text:"Error: GoalController not initialized. The code-agent service must be running."}]};if(!XI(n))return{content:[{type:"text",text:"Error: Invalid parameters. Expected at least { goal }."}]};let r=xs({goal:n.goal,verifierCommands:n.verifier_commands,name:n.name,workdir:n.workdir,model:n.model,systemPrompt:n.system_prompt,allowedTools:n.allowed_tools,maxIterations:n.max_iterations,permissionMode:n.permission_mode,harness:n.harness,goalMode:n.goal_mode,completionPromise:n.completion_promise},t);if(r.kind!=="resolved")return{content:[{type:"text",text:r.text}]};try{let o=await ge.launchTask({goal:r.goal,name:r.name,workdir:r.workdir,model:r.model,reasoningEffort:r.reasoningEffort,fastMode:r.fastMode,systemPrompt:r.systemPrompt,allowedTools:r.allowedTools,maxIterations:r.maxIterations,permissionMode:r.permissionMode,loopMode:r.loopMode,completionPromise:r.completionPromise,originChannel:r.originChannel,originThreadId:r.originThreadId,originAgentId:r.originAgentId,originSessionKey:r.originSessionKey,route:r.route,harness:r.harness,verifierCommands:r.verifierCommands});return{content:[{type:"text",text:As(o,r)}]}}catch(o){return{content:[{type:"text",text:`Error launching goal task: ${o instanceof Error?o.message:String(o)}`}]}}}}}De();function Dg(t,e){return t.split(`
101
- `).map(n=>`${e}${n}`)}function ZI(t,e=8,n=600){let r=t.map(i=>i.trimEnd()).filter(i=>i.trim().length>0);if(r.length===0)return;let o=r.slice(-e).join(`
102
- `);return o.length<=n?o:`...${o.slice(-(n-3))}`}function cn(t){if(t)return{phase:t.phase,awaitingInput:t.isAwaitingInput??!!t.pendingInputState,latestOutput:ZI(t.getOutput(20))}}function mn(t,e){let n=t.loopMode??"verifier",r=[`${t.name} [${t.id}]`,` Status: ${t.status}`,...n==="ralph"?[" Loop mode: ralph",` Iteration: ${t.iteration}/${t.maxIterations}`]:[` Repair iteration: ${t.iteration}/${t.maxIterations}`],` Workdir: ${t.workdir}`];return n==="ralph"&&t.completionPromise&&r.push(` Completion promise: ${t.completionPromise}`),t.sessionId&&r.push(` Session: ${t.sessionName??"(unknown)"} [${t.sessionId}]`),e?.phase&&r.push(` Phase: ${e.phase}`),e?.awaitingInput!==void 0&&r.push(` Awaiting input: ${e.awaitingInput?"yes":"no"}`),t.lastVerifierSummary&&(r.push(" Last verifier:"),r.push(...Dg(t.lastVerifierSummary," "))),e?.latestOutput&&(r.push(" Latest activity:"),r.push(...Dg(e.latestOutput," "))),t.waitingForUserReason&&r.push(` Waiting on user: ${t.waitingForUserReason}`),t.failureReason&&r.push(` Failure: ${t.failureReason}`),r.join(`
103
- `)}Y();function Ng(t){return{name:"goal_status",description:"Show status for explicit goal tasks managed by the goal controller. Use this to inspect one goal task or list all goal tasks.",parameters:m.Object({task:m.Optional(m.String({description:"Task name or ID. Omit to list all tasks."}))}),async execute(e,n){if(!ge)return{content:[{type:"text",text:"Error: GoalController not initialized. The code-agent service must be running."}]};let r=n&&typeof n=="object"&&typeof n.task=="string"?n.task:void 0;if(r){let i=ge.getTask(r);if(!i)return{content:[{type:"text",text:`Error: Goal task "${r}" not found.`}]};let s=i.sessionId?v?.resolve(i.sessionId):void 0;return{content:[{type:"text",text:mn(i,cn(s))}]}}let o=ge.listTasks();return o.length===0?{content:[{type:"text",text:"No goal tasks found."}]}:{content:[{type:"text",text:o.map(i=>{let s=i.sessionId?v?.resolve(i.sessionId):void 0;return mn(i,cn(s))}).join(`
104
-
105
- `)}]}}}}De();Y();function eb(t){return!!t&&typeof t=="object"&&typeof t.task=="string"}function Fg(t){return{name:"goal_stop",description:"Stop an explicit goal task and kill its underlying agent session.",parameters:m.Object({task:m.String({description:"Goal task name or ID"})}),async execute(e,n){if(!ge)return{content:[{type:"text",text:"Error: GoalController not initialized. The code-agent service must be running."}]};if(!eb(n))return{content:[{type:"text",text:"Error: Invalid parameters. Expected { task }."}]};let r=ge.stopTask(n.task);return r?{content:[{type:"text",text:r.action==="already_terminal"?`Task is already ${r.task.status}.`:`Task "${r.task.name}" (${r.task.id}) stopped.`}]}:{content:[{type:"text",text:`Error: Goal task "${n.task}" not found.`}]}}}}Y();bs();import{createHash as tb}from"crypto";var ot="code-agent";var nb=new Set(["1","true","yes","on"]);function rb(){let t=process.env.OPENCLAW_CODE_AGENT_BUTTON_DIAGNOSTICS?.trim().toLowerCase();return!!(t&&nb.has(t))}function Pr(t){if(!(typeof t!="string"||t.length===0))return tb("sha256").update(t).digest("hex").slice(0,12)}function Lg(t){return typeof t.callbackData=="string"?t.callbackData:typeof t.value=="string"?t.value:void 0}function se(t){let e=(t??[]).filter(r=>Array.isArray(r)&&r.length>0),n=e.flat();return{buttonRows:e.length||void 0,buttonCount:n.length||void 0,buttonLabels:n.length>0?n.map(r=>typeof r.label=="string"?r.label:void 0):void 0,callbackByteLengths:n.length>0?n.map(r=>{let o=Lg(r);return o?Buffer.byteLength(o,"utf8"):void 0}):void 0,callbackHashes:n.length>0?n.map(r=>Pr(Lg(r))):void 0,buttonStyles:n.length>0?n.map(r=>typeof r.style=="string"?r.style:void 0):void 0}}function fn(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:void 0}function Bg(t){let e=fn(t),n=Array.isArray(e?.blocks)?e.blocks:void 0;if(n)return n.map(r=>fn(r)?.type).filter(r=>typeof r=="string"&&r.length>0)}function Ug(t){let e=fn(t),n=Array.isArray(e?.blocks)?e.blocks:void 0;if(!n)return;let r=n.map(o=>{let i=fn(o);return i?.type!=="buttons"||!Array.isArray(i.buttons)?[]:i.buttons}).filter(o=>o.length>0);return r.length>0?r:void 0}function Ol(t){let e=Ug(t);return{presentationBlockTypes:Bg(t),...se(e)}}function Dl(t){let e=fn(t),n=e?.interactive,r=fn(e?.channelData),o=fn(r?.telegram),i=Array.isArray(o?.buttons)?o.buttons:void 0;return{renderedPayloadKeys:e?Object.keys(e).sort():void 0,interactiveBlockTypes:Bg(n),...Wg("interactive",se(Ug(n))),...Wg("telegramChannelData",se(i)),hasPresentation:!!e?.presentation,hasInteractive:!!n,hasTelegramChannelDataButtons:!!i?.some(s=>s.length>0)}}function Kg(t){let e=fn(t);return e?{sendResultKeys:Object.keys(e).sort(),messageId:$l(e.messageId),chatId:$l(e.chatId),telegramThreadId:$l(e.messageThreadId??e.threadId),channel:typeof e.channel=="string"?e.channel:void 0}:{sendResultType:typeof t}}function $l(t){return typeof t=="string"||typeof t=="number"?t:void 0}function Wg(t,e){let n={};for(let[r,o]of Object.entries(e))o!==void 0&&(n[`${t}${r.charAt(0).toUpperCase()}${r.slice(1)}`]=o);return n}function q(t,e){if(!rb())return;let n=Object.fromEntries(Object.entries(e).filter(([,r])=>r!==void 0));console.info(`[CodeAgentButtonDiagnostics] ${JSON.stringify({event:t,callbackNamespace:ot,...n})}`)}function ob(t){let e=t.trim().replace(new RegExp(`^${ot}:`),"");return e||null}async function Rs(t,e){try{await mt(t,{text:e})}catch(n){let r=n instanceof Error?n.message:String(n);console.warn(`[callback-handler] Failed to resolve worktree prompt: ${r}`)}}function Nl(t){if(t&&typeof t=="object"&&"content"in t&&Array.isArray(t.content)){let e=t.content[0];return typeof e?.text=="string"?e.text:"(done)"}return"(done)"}function ib(t){return t==="plan-approve"||t==="plan-request-changes"||t==="plan-reject"}function sb(t,e){if(ib(t.kind)){if(!e)return"This plan decision is stale because the session is no longer available.";if(t.planDecisionVersion!=null&&(e.actionablePlanDecisionVersion??e.planDecisionVersion)!=null&&t.planDecisionVersion!==(e.actionablePlanDecisionVersion??e.planDecisionVersion))return"This plan decision is stale because a newer plan review state already exists.";if(!e.pendingPlanApproval)return"This plan is no longer awaiting approval.";if(t.kind==="plan-approve"&&e.approvalState==="changes_requested"&&!e.pendingPlanApproval)return"Changes were already requested for this plan. Wait for the revised plan before approving.";if(t.kind==="plan-request-changes"&&e.approvalState==="changes_requested")return"Changes were already requested for this plan. Send your feedback to the agent instead."}}function ab(t){let e="callback"in t?t.callback?.payload:void 0,n="interaction"in t?t.interaction?.payload:void 0;return e??n??""}function Fl(t){let e=t instanceof Error?t.message:String(t);return/message is not modified/i.test(e)}function db(t){let e=t instanceof Error?t.message:String(t);return/empty message/i.test(e)}async function mt(t,e={}){let n=t.respond,{text:r}=e;if(t.channel==="telegram"){if(typeof r=="string"&&typeof n.editMessage=="function")try{await n.editMessage({text:r,buttons:[]});return}catch(o){if(Fl(o))return;let i=o instanceof Error?o.message:String(o);console.warn(`[callback-handler] Failed to edit Telegram worktree prompt before clearing buttons: ${i}`)}typeof n.clearButtons=="function"&&await n.clearButtons();return}if(typeof n.clearComponents=="function")try{await n.clearComponents(typeof r=="string"?{text:r}:void 0);return}catch(o){if(Fl(o))return;if(db(o)){if(typeof r!="string"&&typeof n.acknowledge=="function"){await n.acknowledge();return}typeof r!="string"&&typeof n.acknowledge!="function"&&console.warn("[callback-handler] clearComponents failed with empty-message error and no acknowledge fallback available")}else{if(typeof r!="string")throw o;{let i=o instanceof Error?o.message:String(o);console.warn(`[callback-handler] clearComponents failed before text fallback: ${i}`)}}}if(typeof r=="string"&&typeof n.editMessage=="function")try{await n.editMessage({text:r})}catch(o){if(!Fl(o)){let i=o instanceof Error?o.message:String(o);console.warn(`[callback-handler] Failed to edit worktree prompt before clearing interactive state: ${i}`)}}typeof n.clearButtons=="function"&&await n.clearButtons()}async function ue(t,e){if(t.channel==="telegram"){await t.respond.reply({text:e});return}await t.respond.reply({text:e,ephemeral:!0})}function Vg(t="telegram"){return q("callback_handler_registered",{channel:t,namespace:ot}),{channel:t,namespace:ot,handler:async e=>{if(!e.auth.isAuthorizedSender)return await ue(e,"\u26D4 Unauthorized."),{handled:!0};let n=ab(e),r=ob(n);if(q("callback_received",{channel:e.channel,namespace:ot,payloadByteLength:Buffer.byteLength(n,"utf8"),tokenHash:Pr(r),isAuthorizedSender:e.auth.isAuthorizedSender}),!r)return await ue(e,`\u26A0\uFE0F Unrecognized callback payload: "${n}".`),{handled:!0};if(!v)return await ue(e,"\u26A0\uFE0F Code agent service not running."),{handled:!0};let o=v.getActionToken(r);if(q("callback_token_lookup_completed",{channel:e.channel,namespace:ot,tokenHash:Pr(r),tokenFound:!!o,actionKind:o?.kind,sessionId:o?.sessionId,planDecisionVersion:o?.planDecisionVersion}),!o)return await ue(e,"\u26A0\uFE0F This action is stale or has already been used."),{handled:!0};let i=o.sessionId,s=v.resolve?.(i)??v.getPersistedSession?.(i),a=s?.name??i,d=sb(o,s);if(q("callback_plan_validation_completed",{channel:e.channel,namespace:ot,tokenHash:Pr(r),actionKind:o.kind,sessionId:i,sessionName:a,planDecisionVersion:o.planDecisionVersion,valid:!d}),d)return await mt(e),await ue(e,`\u26A0\uFE0F ${d}`),{handled:!0};let l=v.consumeActionToken(r);if(q("callback_token_consume_completed",{channel:e.channel,namespace:ot,tokenHash:Pr(r),consumed:!!l,actionKind:l?.kind,sessionId:l?.sessionId,planDecisionVersion:l?.planDecisionVersion}),!l)return await ue(e,"\u26A0\uFE0F This action is stale or has already been used."),{handled:!0};switch(l.kind){case"worktree-merge":{await Rs(e,`\u2705 Merge selected for [${a}]`);let u=await Is().execute("callback",{session:i});await ue(e,Nl(u));break}case"worktree-decide-later":{await Rs(e,`\u23ED\uFE0F Deferred for [${a}]`);let u=v.snoozeWorktreeDecision(i);await ue(e,u.startsWith("Error")?u:"\u23ED\uFE0F Snoozed 24h");break}case"worktree-dismiss":{await Rs(e,`\u{1F5D1}\uFE0F Discarded for [${a}]`);let u=await v.dismissWorktree(i);await ue(e,(u.startsWith("Error"),u));break}case"worktree-create-pr":case"worktree-update-pr":{await Rs(e,o.kind==="worktree-update-pr"?`\u{1F4EC} PR update selected for [${a}]`:`\u{1F4EC} PR selected for [${a}]`);let u=await Io().execute("callback",{session:i});await ue(e,Nl(u));break}case"worktree-view-pr":{await mt(e);let u=v.getPersistedSession?.(i),c=o.targetUrl??u?.worktreePrUrl;await ue(e,c?`PR: ${c}`:"\u26A0\uFE0F PR URL is no longer available.");break}case"plan-approve":{await mt(e),v.clearPlanDecisionTokens(i);let u=await ct(v,{session:i,message:"Approved. Go ahead.",approve:!0,userInitiated:!0});u.isError&&await ue(e,`\u26A0\uFE0F ${u.text}`);break}case"plan-reject":{await mt(e);let u=Ml(v,i);await ue(e,`\u274C ${u.text}`);break}case"plan-request-changes":{await mt(e);let u=Cl(v,i);await ue(e,`\u270F\uFE0F ${u.text}`);break}case"plan-offer-start":{if(await mt(e),!l.launchPrompt||!l.launchWorkdir){await ue(e,"\u26A0\uFE0F This action is missing the plan launch context.");break}let u=v.launchPlanOffer({route:l.route,prompt:l.launchPrompt,workdir:l.launchWorkdir,name:l.launchName,worktreeStrategy:l.launchWorktreeStrategy});await ue(e,`\u25B6\uFE0F Planning session started: ${u.name} [${u.id}]`);break}case"plan-offer-dismiss":{await mt(e),await ue(e,"\u2705 Dismissed.");break}case"session-restart":case"session-resume":{await mt(e);let u=await ct(v,{session:i,message:"Continue where you left off.",userInitiated:!0});await ue(e,u.isError?`\u26A0\uFE0F ${u.text}`:`\u25B6\uFE0F ${u.text}`);break}case"view-output":{await mt(e);let u=await gs().execute("callback",{session:i,lines:50});await ue(e,Nl(u));break}case"question-answer":{if(await mt(e),o.optionIndex==null){await ue(e,"\u26A0\uFE0F Invalid question-answer action.");break}await v.resolvePendingInputOption(i,o.optionIndex),await ue(e,"\u2705 Answer submitted.");break}default:{await mt(e),await ue(e,"\u26A0\uFE0F Unknown callback action.");break}}return{handled:!0}}}}Y();Te();function wr(t){return qg(t).map(e=>e.value)}function qg(t){return Array.from(t.matchAll(/"[^"]*"|'[^']*'|\S+/g),e=>{let n=e[0],r=e.index??0;return{value:lb(n),raw:n,start:r,end:r+n.length}})}function Ll(t){let[e]=qg(t);if(e)return{value:e.value,rest:t.slice(e.end).trimStart()}}function lb(t){return t.length>1&&(t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'"))?t.slice(1,-1):t}function ub(t){return t instanceof Error?t.message:String(t)}function pb(t){let e=wr(t),n,r=e;return e[0]==="--name"&&e[1]&&(n=e[1],r=e.slice(2)),{name:n,prompt:r.join(" ").trim()}}function jg(t){t.registerCommand({name:"agent",description:"Launch a coding agent session. Usage: /agent [--name <name>] <prompt>",acceptsArgs:!0,requireAuth:!0,handler:e=>{if(!v)return{text:"Error: SessionManager not initialized. The code-agent service must be running."};let n=(e.args??"").trim();if(!n)return{text:"Usage: /agent [--name <name>] <prompt>"};let{name:r,prompt:o}=pb(n);if(!o)return{text:"Usage: /agent [--name <name>] <prompt>"};try{let i=Vi({prompt:o,name:r},e,v);if(i.kind!=="resolved")return{text:i.text};let s=v.spawn({prompt:o,name:r,workdir:i.workdir,model:i.resolvedModel,reasoningEffort:i.reasoningEffort,fastMode:i.fastMode,codexApprovalPolicy:i.harness==="codex"?"never":void 0,originChannel:i.originChannel,originThreadId:i.originThreadId,originAgentId:e.agentId||void 0,originSessionKey:i.originSessionKey,route:i.route,harness:i.harness,permissionMode:i.permissionMode,planApproval:i.planApproval,taskLifecycle:zi(e)});return{text:v.formatLaunchResult({prompt:o,workdir:i.workdir,harness:i.harness,permissionMode:i.permissionMode??E.permissionMode,planApproval:i.planApproval},s)}}catch(i){let s=ub(i),a=s.includes("Max sessions")?"":`
106
-
107
- Use /agent_sessions to see active sessions.`;return{text:`Error launching session: ${s}${a}`}}}})}Y();function Gg(t){t.registerCommand({name:"agent_sessions",description:"List coding agent sessions. Usage: /agent_sessions [--full]",acceptsArgs:!0,requireAuth:!0,handler:e=>{if(!v)return{text:"Error: SessionManager not initialized. The code-agent service must be running."};let n=(e.args??"").split(/\s+/).includes("--full");return{text:ms(v,"all",void 0,{full:n})}}})}Y();function Hg(t){t.registerCommand({name:"agent_kill",description:"Kill a coding agent session by name or ID",acceptsArgs:!0,requireAuth:!0,handler:e=>{if(!v)return{text:"Error: SessionManager not initialized. The code-agent service must be running."};let n=e.args?.trim();return n?{text:fs(v,n,"killed")}:{text:"Usage: /agent_kill <name-or-id>"}}})}Y();function zg(t){t.registerCommand({name:"agent_respond",description:"Send a follow-up message to a running coding agent session. Usage: /agent_respond <id-or-name> <message>",acceptsArgs:!0,requireAuth:!0,handler:async e=>{if(!v)return{text:"Error: SessionManager not initialized. The code-agent service must be running."};let n=(e.args??"").trim();if(!n)return{text:`Usage: /agent_respond <id-or-name> <message>
108
- /agent_respond --interrupt <id-or-name> <message>`};let r=!1,o=n,i=Ll(o);i?.value==="--interrupt"&&(r=!0,o=i.rest);let s=Ll(o);if(!s)return{text:"Error: Missing message. Usage: /agent_respond <id-or-name> <message>"};let a=s.value,d=s.rest;return d.trim()?{text:(await ct(v,{session:a,message:d,interrupt:r,userInitiated:!0})).text}:{text:"Error: Empty message. Usage: /agent_respond <id-or-name> <message>"}}})}Y();function Qg(t){t.registerCommand({name:"agent_stats",description:"Show OpenClaw Code Agent usage metrics",acceptsArgs:!1,requireAuth:!0,handler:()=>{if(!v)return{text:"Error: SessionManager not initialized. The code-agent service must be running."};let e=v.getMetrics(),n=v.list("running").length;return{text:qi(e,n)}}})}Y();var cb=50;function Jg(t){t.registerCommand({name:"agent_output",description:"Show recent output from a coding agent session. Usage: /agent_output <id-or-name> [--full] [--lines N]",acceptsArgs:!0,requireAuth:!0,handler:e=>{if(!v)return{text:"Error: SessionManager not initialized. The code-agent service must be running."};let n=(e.args??"").trim();if(!n)return{text:"Usage: /agent_output <id-or-name> [--full] [--lines N]"};let r=wr(n),o="",i=!1,s=cb;for(let d=0;d<r.length;d++)if(r[d]==="--full")i=!0;else if(r[d]==="--lines"&&d+1<r.length){let l=parseInt(r[d+1],10);!isNaN(l)&&l>0&&(s=l),d++}else o||(o=r[d]);return o?{text:cs(v,o,{full:i,lines:s})}:{text:"Usage: /agent_output <id-or-name> [--full] [--lines N]"}}})}Y();var Yg="Usage: /goal [--name <name>] [--workdir <dir>] [--model <model>] [--harness <name>] [--mode <ralph|verifier>] [--completion-promise <text>] [--max-iterations N] [--verify <cmd> ...] <goal>";function Xg(t){t.registerCommand({name:"goal",description:"Launch an explicit goal task (Ralph-style completion loop or verifier-driven loop)",acceptsArgs:!0,requireAuth:!0,handler:async e=>{if(!ge)return{text:"Error: GoalController not initialized. The code-agent service must be running."};let n=(e.args??"").trim();if(!n)return{text:Yg};let r=wr(n),o,i,s,a,d="bypassPermissions",l,u,c,g=[],S=[];for(let P=0;P<r.length;P++){let b=r[P];if(b==="--name"&&P+1<r.length)o=r[++P];else if(b==="--workdir"&&P+1<r.length)i=r[++P];else if(b==="--model"&&P+1<r.length)s=r[++P];else if(b==="--max-iterations"&&P+1<r.length){let A=parseInt(r[++P],10);!Number.isNaN(A)&&A>0&&(a=A)}else if(b==="--permission-mode"&&P+1<r.length){let A=r[++P];if(A==="default"||A==="plan"||A==="bypassPermissions")d=A;else return{text:`Error: Invalid permission mode "${A}".`}}else if(b==="--harness"&&P+1<r.length)l=r[++P];else if(b==="--mode"&&P+1<r.length){let A=r[++P];if(A==="ralph"||A==="verifier")u=A;else return{text:`Error: Invalid goal mode "${A}". Use ralph or verifier.`}}else if(b==="--completion-promise"&&P+1<r.length)c=r[++P];else if(b==="--verify"&&P+1<r.length){let A=r[++P].trim();if(!A)return{text:"Error: --verify commands must not be empty."};g.push(A)}else S.push(b)}let k=S.join(" ").trim();if(!k)return{text:Yg};let I=xs({goal:k,verifierCommands:g,name:o,workdir:i,model:s,maxIterations:a,permissionMode:d,harness:l,goalMode:u,completionPromise:c},e);if(I.kind!=="resolved")return{text:I.text};try{let P=await ge.launchTask({goal:I.goal,name:I.name,workdir:I.workdir,model:I.model,reasoningEffort:I.reasoningEffort,fastMode:I.fastMode,maxIterations:I.maxIterations,permissionMode:I.permissionMode,harness:I.harness,loopMode:I.loopMode,completionPromise:I.completionPromise,originChannel:I.originChannel,originThreadId:I.originThreadId,originAgentId:I.originAgentId,originSessionKey:I.originSessionKey,route:I.route,verifierCommands:I.verifierCommands});return{text:As(P,I)}}catch(P){return{text:`Error launching goal task: ${P instanceof Error?P.message:String(P)}`}}}})}Y();function Zg(t){t.registerCommand({name:"goal_status",description:"Show one goal task or list all explicit goal tasks. Usage: /goal_status [<task-id-or-name>]",acceptsArgs:!0,requireAuth:!0,handler:e=>{if(!ge)return{text:"Error: GoalController not initialized. The code-agent service must be running."};let n=(e.args??"").trim();if(n){let o=ge.getTask(n);if(!o)return{text:`Error: Goal task "${n}" not found.`};let i=o.sessionId?v?.resolve(o.sessionId):void 0;return{text:mn(o,cn(i))}}let r=ge.listTasks();return r.length===0?{text:"No goal tasks found."}:{text:r.map(o=>{let i=o.sessionId?v?.resolve(o.sessionId):void 0;return mn(o,cn(i))}).join(`
109
-
110
- `)}}})}Y();function eh(t){t.registerCommand({name:"goal_stop",description:"Stop a goal task. Usage: /goal_stop <task-id-or-name>",acceptsArgs:!0,requireAuth:!0,handler:e=>{if(!ge)return{text:"Error: GoalController not initialized. The code-agent service must be running."};let n=(e.args??"").trim();if(!n)return{text:"Usage: /goal_stop <task-id-or-name>"};let r=ge.stopTask(n);return r?r.action==="already_terminal"?{text:`Task is already ${r.task.status}.`}:{text:`Task "${r.task.name}" (${r.task.id}) stopped.`}:{text:`Error: Goal task "${n}" not found.`}}})}import{execFile as xb}from"child_process";import{createHash as lh}from"crypto";import{existsSync as mb,mkdirSync as fb,readFileSync as gb,renameSync as hb,writeFileSync as yb}from"fs";import{homedir as Sb}from"os";import{dirname as kb,join as th}from"path";function vb(t){let e=t.OPENCLAW_HOME?.trim();return e||th(Sb(),".openclaw")}function Pb(t){let e=t.OPENCLAW_CODE_AGENT_GOAL_TASKS_PATH?.trim();return e||th(vb(t),"code-agent-goal-tasks.json")}function wb(t){return t instanceof Error?t.message:String(t)}function Ib(t){if(!t||typeof t!="object")return;let e=t;if(!(typeof e.provider!="string"||typeof e.target!="string"))return{provider:e.provider,target:e.target,accountId:typeof e.accountId=="string"?e.accountId:void 0,threadId:typeof e.threadId=="string"?e.threadId:void 0,sessionKey:typeof e.sessionKey=="string"?e.sessionKey:void 0}}function bb(t){if(!t||typeof t!="object")return;let e=t;if(typeof e.id!="string"||typeof e.name!="string"||typeof e.goal!="string"||typeof e.workdir!="string"||typeof e.status!="string")return;let n=e.status,r=n==="running"||n==="waiting_for_session"?"waiting_for_session":n;return{id:e.id,name:e.name,goal:e.goal,workdir:e.workdir,status:r,createdAt:typeof e.createdAt=="number"?e.createdAt:Date.now(),updatedAt:typeof e.updatedAt=="number"?e.updatedAt:Date.now(),iteration:typeof e.iteration=="number"?e.iteration:0,maxIterations:typeof e.maxIterations=="number"?e.maxIterations:8,sessionId:typeof e.sessionId=="string"?e.sessionId:void 0,sessionName:typeof e.sessionName=="string"?e.sessionName:void 0,harnessSessionId:typeof e.harnessSessionId=="string"?e.harnessSessionId:void 0,model:typeof e.model=="string"?e.model:void 0,reasoningEffort:typeof e.reasoningEffort=="string"?e.reasoningEffort:void 0,fastMode:e.fastMode===!0?!0:void 0,systemPrompt:typeof e.systemPrompt=="string"?e.systemPrompt:void 0,allowedTools:Array.isArray(e.allowedTools)?e.allowedTools.filter(o=>typeof o=="string"):void 0,originChannel:typeof e.originChannel=="string"?e.originChannel:void 0,originThreadId:typeof e.originThreadId=="string"||typeof e.originThreadId=="number"?e.originThreadId:void 0,originAgentId:typeof e.originAgentId=="string"?e.originAgentId:void 0,originSessionKey:typeof e.originSessionKey=="string"?e.originSessionKey:void 0,route:Ib(e.route),harness:typeof e.harness=="string"?e.harness:void 0,permissionMode:typeof e.permissionMode=="string"?e.permissionMode:void 0,loopMode:e.loopMode==="ralph"?"ralph":"verifier",completionPromise:typeof e.completionPromise=="string"?e.completionPromise:void 0,verifierCommands:Array.isArray(e.verifierCommands)?e.verifierCommands.filter(o=>!!o&&typeof o=="object"&&typeof o.label=="string"&&typeof o.command=="string"):[],lastVerifierSummary:typeof e.lastVerifierSummary=="string"?e.lastVerifierSummary:void 0,lastVerifierFingerprint:typeof e.lastVerifierFingerprint=="string"?e.lastVerifierFingerprint:void 0,repeatedFailureCount:typeof e.repeatedFailureCount=="number"?e.repeatedFailureCount:0,waitingForUserReason:typeof e.waitingForUserReason=="string"?e.waitingForUserReason:void 0,failureReason:typeof e.failureReason=="string"?e.failureReason:void 0}}var Ts=class{path;tasks=new Map;constructor(e=process.env){this.path=Pb(e),this.load()}load(){try{if(!mb(this.path))return;let e=gb(this.path,"utf8"),n=JSON.parse(e);if(!Array.isArray(n))return;for(let r of n){let o=bb(r);o&&this.tasks.set(o.id,o)}this.save()}catch{}}save(){try{fb(kb(this.path),{recursive:!0});let e=`${this.path}.tmp`;yb(e,JSON.stringify([...this.tasks.values()],null,2),"utf8"),hb(e,this.path)}catch(e){console.warn(`[GoalTaskStore] Failed to save ${this.path}: ${wb(e)}`)}}upsert(e){this.tasks.set(e.id,e),this.save()}get(e){let n=this.tasks.get(e);return n||[...this.tasks.values()].find(r=>r.name===e)}list(){return[...this.tasks.values()].sort((e,n)=>n.createdAt-e.createdAt)}};Gt();var Ab=8,uh=600*1e3,Rb=4e3,Wl=1200,Tb="DONE",Mb=["BASH_ENV","ENV"];function Cb(t){return t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,48)||"goal-task"}function bo(t,e){return t.length<=e?t:`${t.slice(0,e-3)}...`}function gn(t,e=20){let n=t.split(/\r?\n/).map(r=>r.trimEnd()).filter(r=>r.trim().length>0);return n.length<=e?n.join(`
111
- `):n.slice(-e).join(`
112
- `)}function nh(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function rh(t){let e=t?.trim();return e&&e.length>0?e:Tb}function _b(t){return t.route??no(t.originChannel,t.originThreadId,t.originSessionKey)}function Bl(t){return t.map((e,n)=>({label:e.label.trim()||`check-${n+1}`,command:e.command.trim(),timeoutMs:e.timeoutMs??uh})).filter(e=>e.command.length>0)}function Eb(t){return t.loopMode==="verifier"}function $b(t){return Bl(t.verifierCommands).length>0}function oh(t){return Eb(t)&&!$b(t)}function Ms(){return"Verifier-mode goal tasks require at least one verifier command."}function ih(t){let e=t.steps.filter(n=>!n.ok).map(n=>`${n.label}:${n.exitCode}:${gn(n.output,12)}`).join(`
113
- `);return lh("sha1").update(e).digest("hex")}function Ob(t){return lh("sha1").update(gn(t,24)).digest("hex")}function sh(t){let e=t.toLowerCase().replace(/\s+/g," ").trim();if(!e)return;if(/\b(can i|may i|should i|do you want me to|would you like me to)\b/.test(e)&&/\b(read|write|edit|modify|change|inspect|search|run|execute|install|delete|move|rename|open)\b/.test(e))return"Yes, proceed.";if(/\b(should i continue|shall i continue|want me to continue|should i proceed|shall i proceed|can i proceed|go ahead)\b/.test(e))return"Yes, continue."}function Db(t){if(t.loopMode==="ralph")return["You are working inside a Ralph Wiggum-style autonomous loop.","","Goal:",t.goal,"","Loop rules:","- Keep making concrete progress toward the goal in this repository.","- An external controller will continue looping until you emit the completion promise or the iteration budget is exhausted.",`- When the goal is truly complete, output this exact marker on its own line: <promise>${t.completionPromise}</promise>`,"- Do not output that completion marker early, approximately, or with altered spelling.","- If you are not done yet, do not emit the completion marker.","- Do not ask to stop or wait for confirmation unless blocked by a real product, architecture, credential, or approval decision.","- Re-run useful local checks before ending each turn.",t.verifierCommands.length>0?"- External verifier commands will also be run after you claim completion.":"- There may not be external verifiers, so your completion promise is the success gate."].join(`
114
- `);let e=t.verifierCommands.map(n=>`- ${n.label}: ${n.command}`).join(`
82
+ ${l}
83
+ ${d}`}}catch{}return p}function Is(t,e="all",r,n={}){let o=t.listPersistedSessions()??[],a=Gv(t.list("all"),o);if(e!=="all"&&(a=a.filter(u=>u.status===e)),r&&(a=a.filter(u=>u.originChannel===r)),n.full){let u=Date.now()-_v;a=a.filter(p=>(p.startedAt??0)>=u)}else a=a.slice(0,Ov);return a.length===0?"No sessions found.":a.map(u=>Xm(u)).join(`
84
+
85
+ `)}function Gv(t,e){let r=new Map;for(let n of e){if(!Fv(n.status))continue;let o=n.completedAt??Date.now(),i=n.createdAt??o,a=cp(n),u=n.sessionId??`persisted:${a??n.harnessSessionId}`;r.set(u,{id:n.sessionId??a??n.harnessSessionId,name:n.name||n.sessionId||a||n.harnessSessionId,status:n.status,startedAt:n.createdAt??0,completedAt:n.completedAt,duration:Math.max(0,o-i),prompt:n.prompt??"",workdir:n.workdir??"(unknown)",costUsd:n.costUsd??0,multiTurn:!0,phase:n.lifecycle??n.status,lifecycle:n.lifecycle,resumable:n.resumable,harness:n.harness,backendRef:n.backendRef,harnessSessionId:n.harnessSessionId,requestedPermissionMode:n.requestedPermissionMode,currentPermissionMode:n.currentPermissionMode,approvalExecutionState:n.approvalExecutionState,originChannel:n.originChannel,originThreadId:n.originThreadId,worktreePath:n.worktreePath,worktreeBranch:n.worktreeBranch,worktreeStrategy:n.worktreeStrategy,worktreeState:n.worktreeState,worktreeLifecycle:n.worktreeLifecycle,worktreeMerged:n.worktreeMerged,worktreeMergedAt:n.worktreeMergedAt,worktreePrUrl:n.worktreePrUrl})}for(let n of t){let o=r.get(n.id);r.set(n.id,{id:n.id,name:n.name,status:n.status,startedAt:n.startedAt,completedAt:n.completedAt,duration:n.duration,prompt:n.prompt,workdir:n.originalWorkdir??n.workdir,costUsd:n.costUsd,multiTurn:n.multiTurn,phase:n.phase,lifecycle:n.lifecycle,resumable:n.isExplicitlyResumable,harness:n.harnessName,backendRef:n.backendRef,harnessSessionId:n.harnessSessionId,requestedPermissionMode:n.requestedPermissionMode,currentPermissionMode:n.currentPermissionMode,approvalExecutionState:n.approvalExecutionState,originChannel:n.originChannel,originThreadId:n.originThreadId,worktreePath:n.worktreePath,worktreeBranch:n.worktreeBranch,worktreeStrategy:n.worktreeStrategy,worktreeState:Nv(n.worktreeState,o?.worktreeState),worktreeLifecycle:qv(n.worktreeLifecycle,o?.worktreeLifecycle),worktreeMerged:n.worktreeMerged??o?.worktreeMerged,worktreeMergedAt:n.worktreeMergedAt??o?.worktreeMergedAt,worktreePrUrl:n.worktreePrUrl??o?.worktreePrUrl})}return[...r.values()].sort((n,o)=>(o.startedAt??0)-(n.startedAt??0))}function Vv(t){if(!t||typeof t!="object")return"all";let e=t.status;switch(e){case"running":case"completed":case"failed":case"killed":case"all":return e;default:return"all"}}function _c(t){return{name:"agent_sessions",description:"List coding agent sessions with their status and progress. By default, shows the 5 most recent sessions; set `full` to show all sessions from the last 24 hours.",parameters:f.Object({status:f.Optional(f.Union([f.Literal("all"),f.Literal("running"),f.Literal("completed"),f.Literal("failed"),f.Literal("killed")],{description:'Filter by status (default "all")'})),full:f.Optional(f.Boolean({description:"Show all sessions from the last 24h instead of just the most recent 5"}))}),async execute(e,r){if(!k)return{content:[{type:"text",text:"Error: SessionManager not initialized. The code-agent service must be running."}]};let n=Vv(r),o=t?.workspaceDir?Ao(t.workspaceDir):void 0,i=!!(r&&typeof r=="object"&&r.full===!0);return{content:[{type:"text",text:Is(k,n,o,{full:i})}]}}}}tt();le();function xs(t,e,r){let n=t.resolve(e);return n?n.status==="completed"||n.status==="failed"||n.status==="killed"?`Session ${n.name} [${n.id}] is already ${n.status}. No action needed.`:r==="completed"?(n.complete(),`Session ${n.name} [${n.id}] marked as completed.`):(t.kill(n.id),`Session ${n.name} [${n.id}] has been terminated.`):`Error: Session "${e}" not found.`}function Hv(t){if(!t||typeof t!="object")return!1;let e=t;return typeof e.session!="string"?!1:e.reason===void 0?!0:e.reason==="completed"||e.reason==="killed"}function Dc(t){return{name:"agent_kill",description:"Terminate or complete a running coding agent session by name or ID. Use reason='completed' to mark a session as successfully completed instead of killed.",parameters:f.Object({session:f.String({description:"Session name or ID to terminate"}),reason:f.Optional(f.Union([f.Literal("completed"),f.Literal("killed")],{description:"Reason for closing the session. 'completed' marks it as successfully done (sends \u2705 notification). 'killed' (default) terminates it."}))}),async execute(e,r){return k?Hv(r)?{content:[{type:"text",text:xs(k,r.session,r.reason)}]}:{content:[{type:"text",text:"Error: Invalid parameters. Expected { session, reason? }."}]}:{content:[{type:"text",text:"Error: SessionManager not initialized. The code-agent service must be running."}]}}}}tt();le();function zv(t){return!t||typeof t!="object"?!1:typeof t.session=="string"}function Ps(t){return{name:"agent_output",description:"Show recent output from a coding agent session (by name or ID).",parameters:f.Object({session:f.String({description:"Session name or ID to get output from"}),lines:f.Optional(f.Number({description:"Number of recent lines to show (default 50)"})),full:f.Optional(f.Boolean({description:"Show all available output"}))}),async execute(e,r){return k?zv(r)?{content:[{type:"text",text:ks(k,r.session,{full:r.full,lines:r.lines})}]}:{content:[{type:"text",text:"Error: Invalid parameters. Expected { session, lines?, full? }."}]}:{content:[{type:"text",text:"Error: SessionManager not initialized. The code-agent service must be running."}]}}}}tt();le();ze();Ee();var Jv=10;function gp(t){return t instanceof Error?t.message:String(t)}function pn(t){return Se(t)??t.harnessSessionId??"unknown-session"}function Fc(t){return t.status!=="running"&&!!t.pendingPlanApproval&&!!U(t)}function Qv(t){let e=t.trim().toLowerCase().replace(/[.!?]+$/g,"").trim();if(e==="approve"||e==="approved")return"approve";if(e==="revise"||e==="request changes"||e==="changes requested")return"revise";if(e==="reject"||e==="rejected")return"reject"}function Uo(t,e,r){let n=e==="completed"?`This session is closed by default. Launch a fresh session, or fork from prior context with agent_launch(resume_session_id='${pn(t)}', fork_session=true, prompt='<new task>').`:e==="legacy_non_resumable"?`Persisted historical backend state is intentionally non-resumable here. Launch fresh, or fork with agent_launch(resume_session_id='${pn(t)}', fork_session=true, prompt='<new task>').`:e==="missing_backend_state"?`No resumable backend state is available. Launch a fresh session, or fork from prior context with agent_launch(resume_session_id='${pn(t)}', fork_session=true, prompt='<new task>').`:`Use agent_respond(session='${pn(t)}', message='<next instruction>') to continue the running session.`,o=r?` ${r}`:"";return{text:`Resume unavailable for session ${t.name} [${pn(t)}] (${e}).${o} ${n}`,isError:!0}}async function Lc(t,e,r){try{let n={prompt:e.prompt,sessionIdOverride:tp(e),workdir:e.workdir,name:e.name,model:e.model,reasoningEffort:e.reasoningEffort,fastMode:e.fastMode,worktreeStrategy:e.worktreeStrategy,multiTurn:!0,originChannel:e.originChannel,originThreadId:e.originThreadId,originAgentId:e.originAgentId,originSessionKey:e.originSessionKey,route:e.route,permissionMode:e.currentPermissionMode,requestedPermissionMode:e.requestedPermissionMode??e.currentPermissionMode,planApproval:e.planApproval,codexApprovalPolicy:e.codexApprovalPolicy,harness:"harnessName"in e?e.harnessName:e.harness},o=await t.spawnAndAwaitRunning(n,{notifyLaunch:!1});return t.notifySession(o,`\u25B6\uFE0F [${o.name}] Relaunched fresh`),{text:`Session ${e.name} was relaunched fresh \u2014 it was killed during startup before the harness initialized. New session: ${o.name} [${o.id}].`}}catch(n){return{text:`Error relaunching session ${e.name} [${pn(e)}]: ${gp(n)}`,isError:!0}}}var Yv=`[SYSTEM: The user has approved your plan. Exit plan mode immediately and implement the changes with full permissions. Do not ask for further confirmation.]
86
+
87
+ `;function Nc(t){let e=t?.replace(/\s+/g," ").trim();if(e)return Je(e,240)}function fp(t){if(t.approvalState==="changes_requested"&&!ws(t))return`Plan changes were already requested for session ${t.name}. Wait for the revised plan before approving.`;if(t.approvalState==="rejected")return`Plan for session ${t.name} was already rejected.`}function ws(t){return t.pendingPlanApproval?(t.approvalState==="changes_requested"?t.actionablePlanDecisionVersion:t.actionablePlanDecisionVersion??t.planDecisionVersion)>0:!1}function Zv(t){return fp(t)?!1:ws(t)||t.currentPermissionMode==="plan"}function Xv(t,e){let r=t.updatePersistedSession;if(typeof r!="function")return;let n=e.controlStateSnapshot();r.call(t,e.id,{lifecycle:n.lifecycle,approvalState:n.approvalState,approvalExecutionState:n.approvalExecutionState,runtimeState:n.runtimeState,requestedPermissionMode:n.requestedPermissionMode,currentPermissionMode:n.currentPermissionMode,pendingPlanApproval:n.pendingPlanApproval,planApprovalContext:n.planApprovalContext,planDecisionVersion:n.planDecisionVersion,actionablePlanDecisionVersion:n.actionablePlanDecisionVersion,planModeApproved:n.planModeApproved,approvalRationale:e.approvalRationale})}function eb(t){return(t.planDecisionVersion??0)+1}function qc(t,e){let r={approvalState:e,lifecycle:e==="rejected"?"terminal":"awaiting_user_input",pendingPlanApproval:!1,planApprovalContext:void 0,planDecisionVersion:eb(t),actionablePlanDecisionVersion:void 0,canonicalPlanPromptVersion:void 0,approvalPromptRequiredVersion:void 0,approvalPromptVersion:void 0,approvalPromptStatus:"not_sent",approvalPromptTransport:"none",approvalPromptMessageKind:"none",approvalPromptLastAttemptAt:void 0,approvalPromptDeliveredAt:void 0,approvalPromptFailedAt:void 0};return e==="rejected"&&(r.runtimeState="stopped"),r}function Bc(t,e){let r=t;typeof r.applyControlPatch=="function"&&r.applyControlPatch(e),Object.assign(t,e)}function hp(t,e){let r=t.resolve(e),n=r?void 0:t.getPersistedSession(e),o=r??n,i=o?.name??e;if(t.clearPlanDecisionTokens?.(e),!o)return{text:`Plan rejected for [${i}].`,isError:!1};let a=qc(o,"rejected");return r?(Bc(r,a),t.updatePersistedSession?.(e,a),t.kill(r.id,"user"),{text:`Plan rejected for [${r.name}]. Session stopped.`}):(t.updatePersistedSession?.(e,a),{text:`Plan rejected for [${i}]. Session remains stopped.`})}function yp(t,e){let r=t.resolve(e),n=r?void 0:t.getPersistedSession(e),o=r??n,i=o?.name??e;if(t.clearPlanDecisionTokens?.(e),o){let a=qc(o,"changes_requested");r&&Bc(r,a),t.updatePersistedSession?.(e,a)}return{text:`Type your revision feedback for [${i}] and I'll forward it to the agent.`}}async function tb(t,e,r,n={}){let o=_o(e);if(!(o.kind==="resume"||Fc(e)))return;let a=!!(n.approve&&Zv(e)),u=a?Nc(n.approvalRationale):void 0;try{if(o.kind!=="resume")return o.kind==="relaunch"?Lc(t,e,r):Uo(e,o.reason);let p={prompt:a?Yv+r:r,sessionIdOverride:o.stableSessionId,workdir:e.workdir,name:e.name,model:e.model,reasoningEffort:e.reasoningEffort,fastMode:e.fastMode,resumeSessionId:o.resumeSessionId,worktreeStrategy:e.worktreeStrategy,worktreeBaseBranch:e.worktreeBaseBranch,worktreePrTargetRepo:e.worktreePrTargetRepo,multiTurn:!0,originChannel:e.originChannel,originThreadId:e.originThreadId,originAgentId:e.originAgentId,originSessionKey:e.originSessionKey,route:e.route,permissionMode:a?"bypassPermissions":e.currentPermissionMode,requestedPermissionMode:e.requestedPermissionMode??e.currentPermissionMode,planApproval:e.planApproval,codexApprovalPolicy:e.codexApprovalPolicy,pendingPlanApproval:a?!1:e.pendingPlanApproval,planApprovalContext:e.planApprovalContext,planDecisionVersion:e.planDecisionVersion,actionablePlanDecisionVersion:a?void 0:e.actionablePlanDecisionVersion,canonicalPlanPromptVersion:e.canonicalPlanPromptVersion,approvalPromptRequiredVersion:e.approvalPromptRequiredVersion,approvalPromptVersion:e.approvalPromptVersion,approvalPromptStatus:e.approvalPromptStatus,approvalPromptTransport:e.approvalPromptTransport,approvalPromptMessageKind:e.approvalPromptMessageKind,approvalPromptLastAttemptAt:e.approvalPromptLastAttemptAt,approvalPromptDeliveredAt:e.approvalPromptDeliveredAt,approvalPromptFailedAt:e.approvalPromptFailedAt,...a?{approvalState:"approved",approvalExecutionState:"approved_then_implemented",approvalRationale:u,planModeApproved:!0}:{},harness:"harnessName"in e?e.harnessName:e.harness},d=await t.spawnAndAwaitRunning(p,{notifyLaunch:!1});return a?(t.notifySession(d,`\u{1F44D} [${d.name}] Plan approved (resumed)`,"plan-approved"),{text:`Plan approved for session ${d.name} [${d.id}]. Session resumed in bypassPermissions mode. Use agent_output to see the response.`}):(t.notifySession(d,`\u25B6\uFE0F [${d.name}] Auto-resumed`),{text:`Auto-resumed session ${d.name} [${d.id}]. Use agent_output to see the response.`})}catch(p){return Uo(e,"missing_backend_state",`Backend resume failed: ${gp(p)}`)}}async function Rt(t,e){let r=t.resolve(e.session),n=r?void 0:t.getPersistedSession(e.session);if(!r&&!n)return{text:`Error: Session "${e.session}" not found.`,isError:!0};let o=r??n,i=o.status==="running"?{kind:"direct"}:_o(o),a=!e.approve&&o.lifecycle==="awaiting_plan_decision"&&o.pendingPlanApproval&&e.userInitiated?Qv(e.message):void 0;if(a==="approve")return Rt(t,{...e,message:"Approved. Go ahead.",approve:!0});if(a==="revise")return yp(t,r?.id??n?.sessionId??e.session);if(a==="reject")return hp(t,r?.id??n?.sessionId??e.session);if(e.approve){let p=fp(o);if(p)return{text:p,isError:!0}}if(i.kind==="resume"||Fc(o)){let p=await tb(t,o,e.message,{approve:e.approve,approvalRationale:e.approvalRationale});if(p)return p}else{if(i.kind==="relaunch")return Lc(t,o,e.message);if(i.kind==="unavailable")return Uo(o,i.reason)}if(!r)return Oo(n)?Uo(n,"completed"):{text:`Error: Session ${n.name} [${pn(n)}] is not running (status: ${n.status}). Cannot send a message to a non-running session.`,isError:!0};if(r.status!=="running")return Oo(r)?Uo(r,"completed"):{text:`Error: Session ${r.name} [${r.id}] is not running (status: ${r.status}). Cannot send a message to a non-running session.`,isError:!0};let u=j.maxAutoResponds??Jv;if(e.userInitiated)r.resetAutoRespond();else if(r.autoRespondCount>=u)return{text:`\u26A0\uFE0F Auto-respond limit reached (${r.autoRespondCount}/${u}). Ask the user to provide the answer for session ${r.name}. Then call agent_respond with their answer and set userInitiated: true to reset the counter.`};try{if(e.approve){let y=fp(r);if(y)return{text:y,isError:!0}}if(!e.approve&&r.pendingInputState?.allowsFreeText&&await r.submitPendingInputText?.(e.message)===!0){if(e.userInitiated){let S=Je(e.message,100);t.notifySession(r,`\u21AA\uFE0F [${r.name}] "${S}"`,"agent-respond")}e.userInitiated||r.incrementAutoRespond();let y=Je(e.message,80);return{text:[`Pending input answered for session ${r.name} [${r.id}].`,` Message: "${y}"`,"Use agent_output to see the response."].join(`
88
+ `)}}let d=!1;e.interrupt&&(d=await r.interrupt());let l=!!(e.approve&&ws(r)),m=l?Nc(e.approvalRationale):void 0,c="";if(e.approve&&ws(r)?(r.switchPermissionMode("bypassPermissions"),r.approvalRationale=m):e.approve&&r.currentPermissionMode==="default"?r.switchPermissionMode("bypassPermissions"):e.approve&&r.currentPermissionMode==="bypassPermissions"?c=`
89
+ \u2139\uFE0F approve=true was set but session is already in bypassPermissions mode.`:e.approve?c=`
90
+ \u26A0\uFE0F approve=true was set but session has no pending plan approval.`:(r.pendingPlanApproval||r.approvalState==="changes_requested")&&(c=`
91
+ \u2139\uFE0F Session has a pending plan \u2014 sending as revision feedback. The agent will revise and re-submit. Set approve=true to approve instead.`),await r.sendMessage(e.message),l&&Xv(t,r),l)t.notifySession(r,`\u{1F44D} [${r.name}] Plan approved`,"plan-approved");else if(e.userInitiated){let y=Je(e.message,100);t.notifySession(r,`\u21AA\uFE0F [${r.name}] "${y}"`,"agent-respond")}e.userInitiated||r.incrementAutoRespond();let h=Je(e.message,80);return l?{text:`Plan approved for session ${r.name} [${r.id}]. Use agent_output to see the response.`}:{text:[`Message sent to session ${r.name} [${r.id}].`,d?" (redirected active turn first)":e.interrupt?" (no active turn to interrupt)":"",` Message: "${h}"`,c,"Use agent_output to see the response."].filter(Boolean).join(`
92
+ `)}}catch(p){return{text:`Error sending message to session ${r.name} [${r.id}]: ${gp(p)}`,isError:!0}}}function rb(t){if(!t||typeof t!="object")return!1;let e=t;return typeof e.session=="string"&&typeof e.message=="string"&&(e.approval_rationale===void 0||typeof e.approval_rationale=="string")}function Uc(t){return{name:"agent_respond",description:"Send a follow-up message to a running coding agent session. The session must be running. All sessions are multi-turn.",parameters:f.Object({session:f.String({description:"Session name or ID to respond to"}),message:f.String({description:"The message to send to the session"}),interrupt:f.Optional(f.Boolean({description:"If true, interrupt the current turn before sending the message. Useful to redirect the session mid-response."})),userInitiated:f.Optional(f.Boolean({description:"Set to true when the message comes from the user (not auto-generated). Resets the auto-respond counter and bypasses the auto-respond limit."})),approve:f.Optional(f.Boolean({description:"Set to true to escalate session permissions to bypassPermissions. Works in two scenarios: (1) approve a pending plan in plan mode, or (2) escalate a default-mode session to skip remaining OpenClaw approval checkpoints. No-op if already in bypassPermissions mode. In plan mode without a pending plan, this flag is ignored."})),approval_rationale:f.Optional(f.String({description:"Optional structured rationale for a direct delegated plan approval. Use this instead of embedding the rationale in message text when approve=true for a pending plan."}))}),async execute(e,r){if(!k)return{content:[{type:"text",text:"Error: SessionManager not initialized. The code-agent service must be running."}]};if(!rb(r))return{content:[{type:"text",text:"Error: Invalid parameters. Expected { session, message, interrupt?, userInitiated?, approve?, approval_rationale? }."}]};let n=await Rt(k,{session:r.session,message:r.message,interrupt:r.interrupt,userInitiated:r.userInitiated,approve:r.approve,approvalRationale:r.approval_rationale});return{isError:n.isError??!1,content:[{type:"text",text:n.text}]}}}}tt();le();function nb(t){if(!t||typeof t!="object")return!1;let e=t;return typeof e.session=="string"&&typeof e.summary=="string"}function Kc(t){return{name:"agent_request_plan_approval",description:"Send a plan-approval decision prompt to the user for a session that is already waiting on plan approval. Reuses the plugin's Approve/Revise/Reject buttons so the user can decide directly from the message.",parameters:f.Object({session:f.String({description:"Session name or ID awaiting plan approval"}),summary:f.String({description:"Concise user-facing summary of scope, risk, and any concerns that should accompany the approval buttons"})}),async execute(e,r){if(!k)return{content:[{type:"text",text:"Error: SessionManager not initialized. The code-agent service must be running."}]};if(!nb(r))return{content:[{type:"text",text:"Error: Invalid parameters. Expected { session, summary }."}]};let n=k.requestPlanApprovalFromUser(r.session,r.summary);return{isError:n.startsWith("Error:"),content:[{type:"text",text:n}]}}}}tt();le();ze();var Sp=["off","manual","ask","delegate","auto-merge","auto-pr"],vs=new Set(Sp),ob=["low","medium","high","xhigh","max"],jc=new Set(ob);function ib(t){return typeof t=="string"&&vs.has(t)}var sb=f.Union(Sp.map(t=>f.Literal(t)),{description:"Optional worktree strategy for the planning session. Use auto-pr when the follow-up should branch and open/update a PR after approved implementation."});function ab(t){if(!t||typeof t!="object")return!1;let e=t;return typeof e.offer_id=="string"&&typeof e.offer_text=="string"&&typeof e.plan_prompt=="string"&&typeof e.plan_workdir=="string"&&(e.plan_worktree_strategy==null||ib(e.plan_worktree_strategy))&&(e.plan_name==null||typeof e.plan_name=="string")&&(e.target_channel==null||typeof e.target_channel=="string")&&(e.target_thread_id==null||typeof e.target_thread_id=="string"||typeof e.target_thread_id=="number")&&(e.target_session_key==null||typeof e.target_session_key=="string")}function ub(t,e){let r=On(t,e.target_channel,e.target_session_key);if(r)return e.target_thread_id!=null&&(r.threadId=String(e.target_thread_id)),r}async function pb(t,e){if(!k)return{content:[{type:"text",text:"Error: SessionManager not initialized. The code-agent service must be running."}]};let r=ub(t,e);return!r?.provider||!r.target?{content:[{type:"text",text:"Error: Could not resolve a direct delivery route for the plan offer."}]}:(k.sendPlanOffer({offerId:e.offer_id,route:r,text:e.offer_text,planName:e.plan_name??e.offer_id,planPrompt:e.plan_prompt,planWorkdir:e.plan_workdir,planWorktreeStrategy:e.plan_worktree_strategy}),{content:[{type:"text",text:`Interactive plan offer queued for ${r.provider}|${r.target}${r.threadId?`#${r.threadId}`:""}.`}]})}function Wc(t){return{name:"agent_send_plan_offer",description:"Post a user-facing message to the current or explicit chat route with human-gated Start Plan and Dismiss inline buttons. Use this when an external workflow wants the user to open a plan-only code-agent session from the message.",parameters:f.Object({offer_id:f.String({description:"Stable offer identifier, for example 'plugin-readiness-v2026.5.5'."}),offer_text:f.String({description:"Final user-facing text to deliver."}),plan_prompt:f.String({description:"Prompt to seed into the plan-only session when the user clicks Start Plan."}),plan_workdir:f.String({description:"Working directory for the planning session."}),plan_worktree_strategy:f.Optional(sb),plan_name:f.Optional(f.String({description:"Optional explicit session name for the planning session."})),target_channel:f.Optional(f.String({description:"Optional explicit route like 'telegram|-1003863755361'."})),target_thread_id:f.Optional(f.Union([f.String(),f.Number()],{description:"Optional explicit topic/thread id."})),target_session_key:f.Optional(f.String({description:"Optional explicit session key for wake routing."}))}),async execute(e,r){return ab(r)?pb(t,r):{content:[{type:"text",text:"Error: Invalid parameters. Expected { offer_id, offer_text, plan_prompt, plan_workdir }."}]}}}}tt();le();function Gc(t){return{name:"agent_stats",description:"Show OpenClaw Code Agent usage metrics: session counts by status, average duration, and notable sessions.",parameters:f.Object({}),async execute(e,r){if(!k)return{content:[{type:"text",text:"Error: SessionManager not initialized. The code-agent service must be running."}]};let n=k.getMetrics(),o=k.list("running").length;return{content:[{type:"text",text:Qi(n,o)}]}}}}tt();ze();le();It();Ko();import{existsSync as Cs}from"fs";function lb(t){return!t||typeof t!="object"?!1:typeof t.session=="string"}function mb(t){return t.mergeResult.stashPopConflict?[`Pre-merge stash pop conflicted; run git stash show ${t.mergeResult.stashRef??"stash@{0}"} in ${t.repoDir} to review stashed changes.`]:t.mergeResult.stashed?[`Pre-existing changes on ${t.baseBranch} were auto-stashed and restored.`]:[]}function Es(t){return{name:"agent_merge",description:"Merge a worktree branch back to the base branch. Resolves session (active or persisted), gets worktree path, and performs the merge. On conflict, spawns a conflict-resolver session using the configured default harness.",parameters:f.Object({session:f.String({description:"Session name or ID to merge"}),base_branch:f.Optional(f.String({description:"Base branch to merge into (default: main)"})),strategy:f.Optional(f.Union([f.Literal("merge"),f.Literal("squash")],{description:"Merge strategy: 'merge' (default, fast-forward if possible; merge commit if branches have diverged) or 'squash' (squashes all commits into one)"})),push:f.Optional(f.Boolean({description:"Push the base branch after successful merge (default: false)"})),delete_branch:f.Optional(f.Boolean({description:"Delete the worktree branch after successful merge (default: true)"}))}),async execute(e,r){if(!k)return{content:[{type:"text",text:"Error: SessionManager not initialized. The code-agent service must be running."}]};if(!lb(r))return{content:[{type:"text",text:"Error: Invalid parameters. Expected { session, base_branch?, strategy?, push?, delete_branch? }."}]};let n=Wn(k,r.session),o=n.activeSession,i=n.persistedSession;if(!o&&!i)return{content:[{type:"text",text:`Error: Session "${r.session}" not found.`}]};let{worktreePath:a,originalWorkdir:u,branchName:p}=n;if(!a||!u)return{content:[{type:"text",text:`Error: Session "${r.session}" does not have a worktree.`}]};if(!p)return{content:[{type:"text",text:`Error: Cannot determine branch name for worktree at ${a}. The worktree may have been removed and no persisted branch name is available.`}]};Cs(a)||console.info(`[agent_merge] Worktree directory ${a} no longer exists; proceeding with merge via originalWorkdir (${u})`);let d=u;if(!Cs(u))return{content:[{type:"text",text:`Error: originalWorkdir "${u}" does not exist.`}]};let l=r.base_branch??wr(d),m=l,c=r.strategy??"merge",h=r.push===!0,y=r.delete_branch!==!1;if(i?.worktreeLifecycle?.state==="merged"||i?.worktreeMerged)return{content:[{type:"text",text:`\u2139\uFE0F Session "${r.session}" is already merged.`}]};if(Cs(a)&&!Lo(d,p,m)&&jn(a))return{content:[{type:"text",text:[`\u274C Merge blocked: session "${r.session}" has uncommitted worktree changes but branch ${p} has no commits ahead of ${m}.`,`Worktree: ${a}`,"Resume or inspect the session, then commit real task changes or clean temporary files before retrying agent_merge."].join(`
93
+ `)}]};let S={content:[{type:"text",text:"\u274C Merge did not run (internal error)"}]},I=n.persistedRef;return await k.enqueueMerge(d,async()=>{let w=k.getPersistedSession(r.session);if(w?.worktreeLifecycle?.state==="merged"||w?.worktreeMerged){S={content:[{type:"text",text:`\u2139\uFE0F Session "${r.session}" was already merged while waiting in queue.`}]};return}let R=sn(d,p,l),$=fs(d,p,m,c,a);if($.success){let C=mb({mergeResult:$,repoDir:d,baseBranch:m});if(h&&!cs(d,m)){let H=`\u26A0\uFE0F Merged ${p} \u2192 ${m} locally, but failed to push ${m}`;k.notifyWorktreeOutcome(n.notificationTarget,H,{detailLines:[`Branch ${p} was merged into ${m} in the local repository.`,`Pushing ${m} failed; remote state may not include the merge.`,"Cleanup was skipped so the branch/worktree remains available for follow-up.",...C]}),S={content:[{type:"text",text:H}]};return}y&&Jt(d,p);let Ie=!1;if(Cs(a)&&(Ie=kt(d,a),ms(d)),w)for(let H of Vc({...n,persistedSession:w}))k.updatePersistedSession(H,{worktreeMerged:!0,worktreeMergedAt:new Date().toISOString(),pendingWorktreeDecisionSince:void 0,lastWorktreeReminderAt:void 0,lifecycle:"terminal",worktreeState:"merged",worktreeDisposition:"merged",worktreeLifecycle:{state:"merged",updatedAt:new Date().toISOString(),resolvedAt:new Date().toISOString(),resolutionSource:"agent_merge",baseBranch:l,targetRepo:w.worktreePrTargetRepo,pushRemote:w.worktreePushRemote}});let Sr=an({kind:"merge",branch:p,base:l,filesChanged:R?.filesChanged,insertions:R?.insertions,deletions:R?.deletions});k.notifyWorktreeOutcome(n.notificationTarget,Sr,{detailLines:[$.fastForward?"Merge type: fast-forward.":"Merge type: merge commit.",h?`Pushed ${m}.`:`Did not push ${m}; push was not requested.`,y?Ie?"Branch and worktree cleaned up.":"Branch deleted; worktree cleanup skipped.":"Branch/worktree cleanup was not requested.",...C]});let W=`\u2705 ${$.fastForward?"\u26A1 Fast-forward":"\u{1F500} Merge commit"}: ${p} \u2192 ${m}.${h?" Pushed.":""}${y?Ie?" Branch and worktree cleaned up.":" Branch deleted; worktree cleanup skipped.":""}`;$.stashPopConflict?W+=`
94
+ \u26A0\uFE0F Pre-merge stash pop conflicted \u2014 run \`git stash show ${$.stashRef??"stash@{0}"}\` in ${d} to review stashed changes.`:$.stashed&&(W+=`
95
+ (Pre-existing changes on ${m} were auto-stashed and restored.)`),S={content:[{type:"text",text:W}]}}else if($.rebaseConflict)S={content:[{type:"text",text:`\u26A0\uFE0F Rebase conflicts \u2014 manual resolution required:
96
+
97
+ ${$.error}`}]};else if($.conflictFiles&&$.conflictFiles.length>0){let C=["Resolve merge conflicts in the following files and commit the resolution:","",...$.conflictFiles.map(Ie=>`- ${Ie}`),"",`After resolving, commit with message: "Resolve merge conflicts from ${p}"`].join(`
98
+ `);try{let Ie=k.spawn({prompt:C,workdir:d,name:`${r.session}-conflict-resolver`,harness:dt(),permissionMode:"bypassPermissions",multiTurn:!0,route:o?.route??i?.route,originChannel:o?.originChannel??i?.originChannel,originThreadId:o?.originThreadId??i?.originThreadId,originAgentId:o?.originAgentId??i?.originAgentId,originSessionKey:o?.originSessionKey??i?.originSessionKey});S={content:[{type:"text",text:`\u26A0\uFE0F Merge conflicts in ${$.conflictFiles.length} file(s) \u2014 spawned conflict resolver session: ${Ie.name}`}]}}catch(Ie){S={content:[{type:"text",text:`\u274C Merge conflicts detected, but failed to spawn resolver: ${Ie instanceof Error?Ie.message:String(Ie)}`}]}}}else S={content:[{type:"text",text:$.dirtyError?`\u274C Merge blocked: ${$.error}`:`\u274C Merge failed: ${$.error??"unknown error"}`}]}}),S}}}Ms();tt();le();Ee();It();Ko();function vb(t){return!!t&&typeof t=="object"}function rf(t){return{name:"agent_worktree_cleanup",description:"Manage worktree cleanup with lifecycle-aware safety rules. Use preview_safe to list what Clean all safe would remove, clean_safe to execute it, or preview_all to see both safe and retained sandboxes with kept reasons.",parameters:f.Object({workdir:f.Optional(f.String({description:"Restrict cleanup to sessions rooted in this repository"})),base_branch:f.Optional(f.String({description:"Override base branch for lifecycle resolution"})),mode:f.Optional(f.Union([f.Literal("preview_safe"),f.Literal("clean_safe"),f.Literal("preview_all")],{description:"Cleanup mode. preview_safe shows what Clean all safe would remove, clean_safe performs that cleanup, preview_all shows both safe and retained worktrees. Defaults to preview_safe when dry_run=true, otherwise clean_safe."})),skip_session_check:f.Optional(f.Boolean({description:"Deprecated. Safe cleanup never removes live sessions."})),force:f.Optional(f.Boolean({description:"Deprecated alias for skip_session_check."})),dry_run:f.Optional(f.Boolean({description:"Show what would be cleaned without deleting anything."})),session:f.Optional(f.String({description:"Session name or ID to clean or dismiss."})),dismiss_session:f.Optional(f.Boolean({description:"When true and session is provided, permanently dismiss the worktree."}))}),async execute(e,r){if(!k)return{content:[{type:"text",text:"Error: SessionManager not initialized. The code-agent service must be running."}]};if(!vb(r))return{content:[{type:"text",text:"Error: Invalid parameters. Expected { workdir?, base_branch?, mode?, dry_run?, session?, dismiss_session? }."}]};let n=r.session,o=r.mode??(r.dry_run===!0?"preview_safe":"clean_safe"),i=o!=="clean_safe",a=o==="preview_all"||o==="clean_safe";if(n&&r.dismiss_session===!0)return{content:[{type:"text",text:await k.dismissWorktree(n)}]};let u=As(k);if(n&&(u=u.filter(h=>Ts(h,n)),u.length===0)){let h=Wn(k,n);if(!h.persistedSession&&!h.activeSession)return{content:[{type:"text",text:`Error: Session "${n}" not found.`}]}}if(r.workdir&&(u=u.filter(h=>h.workdir===r.workdir)),u.length===0)return{content:[{type:"text",text:"No managed worktrees matched the requested scope."}]};let p=[],d=[],l=[],m=[];for(let h of u){let{persistedSession:y,activeSession:S,resolvedLifecycle:I}=bs(k,h,{baseBranch:r.base_branch});if(!I.cleanupSafe){if(a){let w=I.reasons.length>0?I.reasons.map(Rs).join(", "):dn(I.derivedState);d.push(`${h.name} [kept: ${w}]`)}continue}if(p.push(`${h.name} (${dn(I.derivedState)})`),!i)try{let w=h.workdir;if(!((y??S)&&lt(y??S))&&h.worktreePath&&kt(w,h.worktreePath,{destructive:!1}),h.worktreeBranch&&Jt(w,h.worktreeBranch),y){let $=I.derivedState==="merged"||I.derivedState==="released"?I.derivedState:I.lifecycle.state;k.updatePersistedSession(h.id,{worktreePath:void 0,worktreeBranch:void 0,lifecycle:"terminal",worktreeState:"none",pendingWorktreeDecisionSince:void 0,lastWorktreeReminderAt:void 0,worktreeMerged:$==="merged"?!0:y.worktreeMerged,worktreeMergedAt:$==="merged"?y.worktreeMergedAt??new Date().toISOString():y.worktreeMergedAt,worktreeLifecycle:{...y.worktreeLifecycle??I.lifecycle,state:$,updatedAt:new Date().toISOString(),resolvedAt:y.worktreeLifecycle?.resolvedAt??new Date().toISOString(),resolutionSource:y.worktreeLifecycle?.resolutionSource??"maintenance",baseBranch:r.base_branch??I.lifecycle.baseBranch??y.worktreeBaseBranch,targetRepo:y.worktreePrTargetRepo,pushRemote:y.worktreePushRemote,notes:I.reasons}})}l.push(`${h.name} (${dn(I.derivedState)})`)}catch(w){m.push(`${h.name}: ${w instanceof Error?w.message:String(w)}`)}}let c=[o==="clean_safe"?"Clean all safe:":o==="preview_all"?"Worktree lifecycle review:":"Clean all safe preview:"];return c.push(` SAFE ${i?"NOW":"FOUND"} (${p.length}): ${p.join(", ")||"(none)"}`),a&&c.push(` KEPT (${d.length}): ${d.join(", ")||"(none)"}`),i||(c.push(` CLEANED (${l.length}): ${l.join(", ")||"(none)"}`),c.push(` FAILURES (${m.length}): ${m.join(", ")||"(none)"}`)),{content:[{type:"text",text:c.join(`
99
+ `)}]}}}}tt();le();Ko();function bb(t){return!0}function nf(t){return{name:"agent_worktree_status",description:"Show lifecycle-first worktree status for coding agent sessions. Displays product-facing lifecycle state, released handling, cleanup safety, and retained reasons.",parameters:f.Object({session:f.Optional(f.String({description:"Session name or ID to show status for (optional, shows all if omitted)"}))}),async execute(e,r){if(!k)return{content:[{type:"text",text:"Error: SessionManager not initialized. The code-agent service must be running."}]};if(!bb(r))return{content:[{type:"text",text:"Error: Invalid parameters. Expected { session? }."}]};let n=r.session,o=As(k);if(n&&(o=o.filter(a=>Ts(a,n)),o.length===0))return{content:[{type:"text",text:`Error: Session "${n}" not found or has no worktree.`}]};if(o.length===0)return{content:[{type:"text",text:"No sessions with worktrees found."}]};let i=[];for(let a of o){let{persistedSession:u,resolvedLifecycle:p}=bs(k,a),d=p.cleanupSafe?"safe now":p.preserve?"preserve":"blocked";i.push(`Session: ${a.name} [${a.id}]`),i.push(` Branch: ${a.worktreeBranch??"(unknown)"} \u2192 ${p.lifecycle.baseBranch??u?.worktreeBaseBranch??"main"}`),i.push(` Repo: ${a.workdir}`),i.push(` Lifecycle:${dn(p.lifecycle.state)}`),p.derivedState!==p.lifecycle.state&&i.push(` Derived: ${dn(p.derivedState)}`),i.push(` Cleanup: ${d}`),p.evidence.prUrl&&i.push(` PR: ${p.evidence.prUrl} (${p.evidence.prState??"unknown"})`),(p.evidence.branchAheadCount!=null||p.evidence.baseAheadCount!=null)&&i.push(` Ahead: ${p.evidence.branchAheadCount??0} ahead / ${p.evidence.baseAheadCount??0} behind`),i.push(` Reasons: ${p.reasons.length>0?p.reasons.map(Rs).join(", "):"none"}`),i.push("")}return{content:[{type:"text",text:i.join(`
100
+ `).trim()}]}}}}tt();le();ze();import{existsSync as Ab}from"fs";function Tb(t=[]){return t.map((e,r)=>({label:`check-${r+1}`,command:e.trim()})).filter(e=>e.command.length>0)}function Os(t,e){let r=t.goal.trim();if(!r)return{kind:"error",text:"Error: goal must not be empty."};let n=t.workdir||e.workspaceDir||j.defaultWorkdir||process.cwd();if(!Ab(n))return{kind:"error",text:`Error: Working directory does not exist: ${n}`};let o=Tb(t.verifierCommands),i=t.goalMode??(o.length>0?"verifier":"ralph");if(i==="verifier"&&o.length===0)return{kind:"error",text:"Error: verifier mode requires at least one non-empty verifier command."};let a=t.harness??dt(),u=t.model??$n(a);if(!u)return{kind:"error",text:`Error: No default model configured for harness "${a}". Set plugins.entries["openclaw-code-agent"].config.harnesses.${a}.defaultModel or pass model explicitly.`};let p=_i(a);if(!zi(u,p))return{kind:"error",text:`Error: Model "${u}" is not allowed. Permitted models: ${p?.join(", ")}`};let d=e.sessionKey||void 0,l=Di(e),m=bo(e,l),c=On(e,m,d);return{kind:"resolved",goal:r,name:t.name,workdir:n,model:u,reasoningEffort:Ir(a),fastMode:Mn(a),systemPrompt:t.systemPrompt,allowedTools:t.allowedTools,maxIterations:t.maxIterations,permissionMode:t.permissionMode??"bypassPermissions",harness:a,loopMode:i,completionPromise:t.completionPromise,originChannel:m,originThreadId:c?.threadId,originAgentId:e.agentId||void 0,originSessionKey:d,route:c,verifierCommands:o}}function _s(t,e){return["Goal task launched.",` Name: ${t.name}`,` ID: ${t.id}`,` Dir: ${t.workdir}`,` Session: ${t.sessionName} [${t.sessionId}]`,` Harness: ${e.harness}`,` Model: ${e.model}`,...e.fastMode?[" Fast mode: enabled"]:[],` Loop mode: ${t.loopMode}`,` Max iterations: ${t.maxIterations}`,` Goal: "${e.goal.length>100?`${e.goal.slice(0,100)}...`:e.goal}"`,...t.loopMode==="ralph"?[` Completion promise: ${t.completionPromise}`]:[" Verifiers:",...e.verifierCommands.map(n=>` - ${n.command}`)],"","Use goal_status to follow progress or goal_stop to terminate the task."].join(`
101
+ `)}function Rb(t){return!t||typeof t!="object"?!1:typeof t.goal=="string"}function of(t){return{name:"goal_launch",description:"Launch an explicit goal loop. Use this only when the user specifically asks for a goal task, Ralph-style autonomous loop, iterative loop, autonomous repair loop, or keep-going-until-checks-pass workflow. This is not the default session path.",parameters:f.Object({goal:f.String({description:"End goal for the autonomous task"}),verifier_commands:f.Optional(f.Array(f.String({description:"Shell command that must pass for the goal to be considered complete"}),{minItems:1,description:"Verifier commands run after each coding turn"})),name:f.Optional(f.String({description:"Short task name (kebab-case preferred)"})),workdir:f.Optional(f.String({description:"Working directory (defaults to cwd / configured workspace)"})),model:f.Optional(f.String({description:"Model name to use"})),system_prompt:f.Optional(f.String({description:"Additional system prompt"})),allowed_tools:f.Optional(f.Array(f.String(),{description:"Allowed tools for the underlying agent session"})),max_iterations:f.Optional(f.Number({description:"Maximum verifier-driven repair iterations",minimum:1})),goal_mode:f.Optional(f.Union([f.Literal("ralph"),f.Literal("verifier")],{description:"Loop strategy. 'ralph' repeats until a completion promise appears. 'verifier' repeats until verifier commands pass. Defaults to 'ralph' when no verifiers are provided, otherwise 'verifier'."})),completion_promise:f.Optional(f.String({description:"Exact completion promise for Ralph-mode loops. Defaults to 'DONE'."})),permission_mode:f.Optional(f.Union([f.Literal("default"),f.Literal("plan"),f.Literal("bypassPermissions")],{description:"Permission mode for the underlying agent session. Defaults to bypassPermissions for autonomous goal loops."})),harness:f.Optional(f.String({description:"Agent harness to use (e.g. 'codex' or 'claude-code')."}))}),async execute(e,r){if(!Ce)return{content:[{type:"text",text:"Error: GoalController not initialized. The code-agent service must be running."}]};if(!Rb(r))return{content:[{type:"text",text:"Error: Invalid parameters. Expected at least { goal }."}]};let n=Os({goal:r.goal,verifierCommands:r.verifier_commands,name:r.name,workdir:r.workdir,model:r.model,systemPrompt:r.system_prompt,allowedTools:r.allowed_tools,maxIterations:r.max_iterations,permissionMode:r.permission_mode,harness:r.harness,goalMode:r.goal_mode,completionPromise:r.completion_promise},t);if(n.kind!=="resolved")return{content:[{type:"text",text:n.text}]};try{let o=await Ce.launchTask({goal:n.goal,name:n.name,workdir:n.workdir,model:n.model,reasoningEffort:n.reasoningEffort,fastMode:n.fastMode,systemPrompt:n.systemPrompt,allowedTools:n.allowedTools,maxIterations:n.maxIterations,permissionMode:n.permissionMode,loopMode:n.loopMode,completionPromise:n.completionPromise,originChannel:n.originChannel,originThreadId:n.originThreadId,originAgentId:n.originAgentId,originSessionKey:n.originSessionKey,route:n.route,harness:n.harness,verifierCommands:n.verifierCommands});return{content:[{type:"text",text:_s(o,n)}]}}catch(o){return{content:[{type:"text",text:`Error launching goal task: ${o instanceof Error?o.message:String(o)}`}]}}}}}tt();function sf(t,e){return t.split(`
102
+ `).map(r=>`${e}${r}`)}function Cb(t,e=8,r=600){let n=t.map(i=>i.trimEnd()).filter(i=>i.trim().length>0);if(n.length===0)return;let o=n.slice(-e).join(`
103
+ `);return o.length<=r?o:`...${o.slice(-(r-3))}`}function vr(t){if(t)return{phase:t.phase,awaitingInput:t.isAwaitingInput??!!t.pendingInputState,latestOutput:Cb(t.getOutput(20))}}function br(t,e){let r=t.loopMode??"verifier",n=[`${t.name} [${t.id}]`,` Status: ${t.status}`,...r==="ralph"?[" Loop mode: ralph",` Iteration: ${t.iteration}/${t.maxIterations}`]:[` Repair iteration: ${t.iteration}/${t.maxIterations}`],` Workdir: ${t.workdir}`];return r==="ralph"&&t.completionPromise&&n.push(` Completion promise: ${t.completionPromise}`),t.sessionId&&n.push(` Session: ${t.sessionName??"(unknown)"} [${t.sessionId}]`),e?.phase&&n.push(` Phase: ${e.phase}`),e?.awaitingInput!==void 0&&n.push(` Awaiting input: ${e.awaitingInput?"yes":"no"}`),t.lastVerifierSummary&&(n.push(" Last verifier:"),n.push(...sf(t.lastVerifierSummary," "))),e?.latestOutput&&(n.push(" Latest activity:"),n.push(...sf(e.latestOutput," "))),t.waitingForUserReason&&n.push(` Waiting on user: ${t.waitingForUserReason}`),t.failureReason&&n.push(` Failure: ${t.failureReason}`),n.join(`
104
+ `)}le();function af(t){return{name:"goal_status",description:"Show status for explicit goal tasks managed by the goal controller. Use this to inspect one goal task or list all goal tasks.",parameters:f.Object({task:f.Optional(f.String({description:"Task name or ID. Omit to list all tasks."}))}),async execute(e,r){if(!Ce)return{content:[{type:"text",text:"Error: GoalController not initialized. The code-agent service must be running."}]};let n=r&&typeof r=="object"&&typeof r.task=="string"?r.task:void 0;if(n){let i=Ce.getTask(n);if(!i)return{content:[{type:"text",text:`Error: Goal task "${n}" not found.`}]};let a=i.sessionId?k?.resolve(i.sessionId):void 0;return{content:[{type:"text",text:br(i,vr(a))}]}}let o=Ce.listTasks();return o.length===0?{content:[{type:"text",text:"No goal tasks found."}]}:{content:[{type:"text",text:o.map(i=>{let a=i.sessionId?k?.resolve(i.sessionId):void 0;return br(i,vr(a))}).join(`
105
+
106
+ `)}]}}}}tt();le();function Eb(t){return!!t&&typeof t=="object"&&typeof t.task=="string"}function uf(t){return{name:"goal_stop",description:"Stop an explicit goal task and kill its underlying agent session.",parameters:f.Object({task:f.String({description:"Goal task name or ID"})}),async execute(e,r){if(!Ce)return{content:[{type:"text",text:"Error: GoalController not initialized. The code-agent service must be running."}]};if(!Eb(r))return{content:[{type:"text",text:"Error: Invalid parameters. Expected { task }."}]};let n=Ce.stopTask(r.task);return n?{content:[{type:"text",text:n.action==="already_terminal"?`Task is already ${n.task.status}.`:`Task "${n.task.name}" (${n.task.id}) stopped.`}]}:{content:[{type:"text",text:`Error: Goal task "${r.task}" not found.`}]}}}}le();Ms();import{createHash as $b}from"crypto";var xt="code-agent";var Mb=new Set(["1","true","yes","on"]);function Ob(){let t=process.env.OPENCLAW_CODE_AGENT_BUTTON_DIAGNOSTICS?.trim().toLowerCase();return!!(t&&Mb.has(t))}function Gn(t){if(!(typeof t!="string"||t.length===0))return $b("sha256").update(t).digest("hex").slice(0,12)}function pf(t){return typeof t.callbackData=="string"?t.callbackData:typeof t.value=="string"?t.value:void 0}function xe(t){let e=(t??[]).filter(n=>Array.isArray(n)&&n.length>0),r=e.flat();return{buttonRows:e.length||void 0,buttonCount:r.length||void 0,buttonLabels:r.length>0?r.map(n=>typeof n.label=="string"?n.label:void 0):void 0,callbackByteLengths:r.length>0?r.map(n=>{let o=pf(n);return o?Buffer.byteLength(o,"utf8"):void 0}):void 0,callbackHashes:r.length>0?r.map(n=>Gn(pf(n))):void 0,buttonStyles:r.length>0?r.map(n=>typeof n.style=="string"?n.style:void 0):void 0}}function Ar(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:void 0}function lf(t){let e=Ar(t),r=Array.isArray(e?.blocks)?e.blocks:void 0;if(r)return r.map(n=>Ar(n)?.type).filter(n=>typeof n=="string"&&n.length>0)}function mf(t){let e=Ar(t),r=Array.isArray(e?.blocks)?e.blocks:void 0;if(!r)return;let n=r.map(o=>{let i=Ar(o);return i?.type!=="buttons"||!Array.isArray(i.buttons)?[]:i.buttons}).filter(o=>o.length>0);return n.length>0?n:void 0}function Pp(t){let e=mf(t);return{presentationBlockTypes:lf(t),...xe(e)}}function wp(t){let e=Ar(t),r=e?.interactive,n=Ar(e?.channelData),o=Ar(n?.telegram),i=Array.isArray(o?.buttons)?o.buttons:void 0;return{renderedPayloadKeys:e?Object.keys(e).sort():void 0,interactiveBlockTypes:lf(r),...df("interactive",xe(mf(r))),...df("telegramChannelData",xe(i)),hasPresentation:!!e?.presentation,hasInteractive:!!r,hasTelegramChannelDataButtons:!!i?.some(a=>a.length>0)}}function cf(t){let e=Ar(t);return e?{sendResultKeys:Object.keys(e).sort(),messageId:xp(e.messageId),chatId:xp(e.chatId),telegramThreadId:xp(e.messageThreadId??e.threadId),channel:typeof e.channel=="string"?e.channel:void 0}:{sendResultType:typeof t}}function xp(t){return typeof t=="string"||typeof t=="number"?t:void 0}function df(t,e){let r={};for(let[n,o]of Object.entries(e))o!==void 0&&(r[`${t}${n.charAt(0).toUpperCase()}${n.slice(1)}`]=o);return r}function ie(t,e){if(!Ob())return;let r=Object.fromEntries(Object.entries(e).filter(([,n])=>n!==void 0));console.info(`[CodeAgentButtonDiagnostics] ${JSON.stringify({event:t,callbackNamespace:xt,...r})}`)}function _b(t){let e=t.trim().replace(new RegExp(`^${xt}:`),"");return e||null}async function Ds(t,e){try{await Ct(t,{text:e})}catch(r){let n=r instanceof Error?r.message:String(r);console.warn(`[callback-handler] Failed to resolve worktree prompt: ${n}`)}}function vp(t){if(t&&typeof t=="object"&&"content"in t&&Array.isArray(t.content)){let e=t.content[0];return typeof e?.text=="string"?e.text:"(done)"}return"(done)"}function Db(t){return t==="plan-approve"||t==="plan-request-changes"||t==="plan-reject"}function Fb(t,e){if(Db(t.kind)){if(!e)return"This plan decision is stale because the session is no longer available.";if(t.planDecisionVersion!=null&&(e.actionablePlanDecisionVersion??e.planDecisionVersion)!=null&&t.planDecisionVersion!==(e.actionablePlanDecisionVersion??e.planDecisionVersion))return"This plan decision is stale because a newer plan review state already exists.";if(!e.pendingPlanApproval)return"This plan is no longer awaiting approval.";if(t.kind==="plan-approve"&&e.approvalState==="changes_requested"&&!e.pendingPlanApproval)return"Changes were already requested for this plan. Wait for the revised plan before approving.";if(t.kind==="plan-request-changes"&&e.approvalState==="changes_requested")return"Changes were already requested for this plan. Send your feedback to the agent instead."}}function Lb(t){let e="callback"in t?t.callback?.payload:void 0,r="interaction"in t?t.interaction?.payload:void 0;return e??r??""}function bp(t){let e=t instanceof Error?t.message:String(t);return/message is not modified/i.test(e)}function Nb(t){let e=t instanceof Error?t.message:String(t);return/empty message/i.test(e)}async function Ct(t,e={}){let r=t.respond,{text:n}=e;if(t.channel==="telegram"){if(typeof n=="string"&&typeof r.editMessage=="function")try{await r.editMessage({text:n,buttons:[]});return}catch(o){if(bp(o))return;let i=o instanceof Error?o.message:String(o);console.warn(`[callback-handler] Failed to edit Telegram worktree prompt before clearing buttons: ${i}`)}typeof r.clearButtons=="function"&&await r.clearButtons();return}if(typeof r.clearComponents=="function")try{await r.clearComponents(typeof n=="string"?{text:n}:void 0);return}catch(o){if(bp(o))return;if(Nb(o)){if(typeof n!="string"&&typeof r.acknowledge=="function"){await r.acknowledge();return}typeof n!="string"&&typeof r.acknowledge!="function"&&console.warn("[callback-handler] clearComponents failed with empty-message error and no acknowledge fallback available")}else{if(typeof n!="string")throw o;{let i=o instanceof Error?o.message:String(o);console.warn(`[callback-handler] clearComponents failed before text fallback: ${i}`)}}}if(typeof n=="string"&&typeof r.editMessage=="function")try{await r.editMessage({text:n})}catch(o){if(!bp(o)){let i=o instanceof Error?o.message:String(o);console.warn(`[callback-handler] Failed to edit worktree prompt before clearing interactive state: ${i}`)}}typeof r.clearButtons=="function"&&await r.clearButtons()}async function ve(t,e){if(t.channel==="telegram"){await t.respond.reply({text:e});return}await t.respond.reply({text:e,ephemeral:!0})}function ff(t="telegram"){return ie("callback_handler_registered",{channel:t,namespace:xt}),{channel:t,namespace:xt,handler:async e=>{if(!e.auth.isAuthorizedSender)return await ve(e,"\u26D4 Unauthorized."),{handled:!0};let r=Lb(e),n=_b(r);if(ie("callback_received",{channel:e.channel,namespace:xt,payloadByteLength:Buffer.byteLength(r,"utf8"),tokenHash:Gn(n),isAuthorizedSender:e.auth.isAuthorizedSender}),!n)return await ve(e,`\u26A0\uFE0F Unrecognized callback payload: "${r}".`),{handled:!0};if(!k)return await ve(e,"\u26A0\uFE0F Code agent service not running."),{handled:!0};let o=k.getActionToken(n);if(ie("callback_token_lookup_completed",{channel:e.channel,namespace:xt,tokenHash:Gn(n),tokenFound:!!o,actionKind:o?.kind,sessionId:o?.sessionId,planDecisionVersion:o?.planDecisionVersion}),!o)return await ve(e,"\u26A0\uFE0F This action is stale or has already been used."),{handled:!0};let i=o.sessionId,a=k.resolve?.(i)??k.getPersistedSession?.(i),u=a?.name??i,p=Fb(o,a);if(ie("callback_plan_validation_completed",{channel:e.channel,namespace:xt,tokenHash:Gn(n),actionKind:o.kind,sessionId:i,sessionName:u,planDecisionVersion:o.planDecisionVersion,valid:!p}),p)return await Ct(e),await ve(e,`\u26A0\uFE0F ${p}`),{handled:!0};let d=k.consumeActionToken(n);if(ie("callback_token_consume_completed",{channel:e.channel,namespace:xt,tokenHash:Gn(n),consumed:!!d,actionKind:d?.kind,sessionId:d?.sessionId,planDecisionVersion:d?.planDecisionVersion}),!d)return await ve(e,"\u26A0\uFE0F This action is stale or has already been used."),{handled:!0};switch(d.kind){case"worktree-merge":{await Ds(e,`\u2705 Merge selected for [${u}]`);let l=await Es().execute("callback",{session:i});await ve(e,vp(l));break}case"worktree-decide-later":{await Ds(e,`\u23ED\uFE0F Deferred for [${u}]`);let l=k.snoozeWorktreeDecision(i);await ve(e,l.startsWith("Error")?l:"\u23ED\uFE0F Snoozed 24h");break}case"worktree-dismiss":{await Ds(e,`\u{1F5D1}\uFE0F Discarded for [${u}]`);let l=await k.dismissWorktree(i);await ve(e,(l.startsWith("Error"),l));break}case"worktree-create-pr":case"worktree-update-pr":{await Ds(e,o.kind==="worktree-update-pr"?`\u{1F4EC} PR update selected for [${u}]`:`\u{1F4EC} PR selected for [${u}]`);let l=await Wo().execute("callback",{session:i});await ve(e,vp(l));break}case"worktree-view-pr":{await Ct(e);let l=k.getPersistedSession?.(i),m=o.targetUrl??l?.worktreePrUrl;await ve(e,m?`PR: ${m}`:"\u26A0\uFE0F PR URL is no longer available.");break}case"plan-approve":{await Ct(e),k.clearPlanDecisionTokens(i);let l=await Rt(k,{session:i,message:"Approved. Go ahead.",approve:!0,userInitiated:!0});l.isError&&await ve(e,`\u26A0\uFE0F ${l.text}`);break}case"plan-reject":{await Ct(e);let l=hp(k,i);await ve(e,`\u274C ${l.text}`);break}case"plan-request-changes":{await Ct(e);let l=yp(k,i);await ve(e,`\u270F\uFE0F ${l.text}`);break}case"plan-offer-start":{if(await Ct(e),!d.launchPrompt||!d.launchWorkdir){await ve(e,"\u26A0\uFE0F This action is missing the plan launch context.");break}let l=k.launchPlanOffer({route:d.route,prompt:d.launchPrompt,workdir:d.launchWorkdir,name:d.launchName,worktreeStrategy:d.launchWorktreeStrategy});await ve(e,`\u25B6\uFE0F Planning session started: ${l.name} [${l.id}]`);break}case"plan-offer-dismiss":{await Ct(e),await ve(e,"\u2705 Dismissed.");break}case"session-restart":case"session-resume":{await Ct(e);let l=await Rt(k,{session:i,message:"Continue where you left off.",userInitiated:!0});await ve(e,l.isError?`\u26A0\uFE0F ${l.text}`:`\u25B6\uFE0F ${l.text}`);break}case"view-output":{await Ct(e);let l=await Ps().execute("callback",{session:i,lines:50});await ve(e,vp(l));break}case"question-answer":{if(await Ct(e),o.optionIndex==null){await ve(e,"\u26A0\uFE0F Invalid question-answer action.");break}await k.resolvePendingInputOption(i,o.optionIndex),await ve(e,"\u2705 Answer submitted.");break}default:{await Ct(e),await ve(e,"\u26A0\uFE0F Unknown callback action.");break}}return{handled:!0}}}}le();ze();function Vn(t){return gf(t).map(e=>e.value)}function gf(t){return Array.from(t.matchAll(/"[^"]*"|'[^']*'|\S+/g),e=>{let r=e[0],n=e.index??0;return{value:qb(r),raw:r,start:n,end:n+r.length}})}function Ap(t){let[e]=gf(t);if(e)return{value:e.value,rest:t.slice(e.end).trimStart()}}function qb(t){return t.length>1&&(t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'"))?t.slice(1,-1):t}function Bb(t){return t instanceof Error?t.message:String(t)}function Ub(t){let e=Vn(t),r,n=e;return e[0]==="--name"&&e[1]&&(r=e[1],n=e.slice(2)),{name:r,prompt:n.join(" ").trim()}}function hf(t){t.registerCommand({name:"agent",description:"Launch a coding agent session. Usage: /agent [--name <name>] <prompt>",acceptsArgs:!0,requireAuth:!0,handler:e=>{if(!k)return{text:"Error: SessionManager not initialized. The code-agent service must be running."};let r=(e.args??"").trim();if(!r)return{text:"Usage: /agent [--name <name>] <prompt>"};let{name:n,prompt:o}=Ub(r);if(!o)return{text:"Usage: /agent [--name <name>] <prompt>"};try{let i=Ji({prompt:o,name:n},e,k);if(i.kind!=="resolved")return{text:i.text};let a=k.spawn({prompt:o,name:n,workdir:i.workdir,model:i.resolvedModel,reasoningEffort:i.reasoningEffort,fastMode:i.fastMode,codexApprovalPolicy:i.harness==="codex"?"never":void 0,originChannel:i.originChannel,originThreadId:i.originThreadId,originAgentId:e.agentId||void 0,originSessionKey:i.originSessionKey,route:i.route,harness:i.harness,permissionMode:i.permissionMode,planApproval:i.planApproval,taskLifecycle:es(e)});return{text:k.formatLaunchResult({prompt:o,workdir:i.workdir,harness:i.harness,permissionMode:i.permissionMode??j.permissionMode,planApproval:i.planApproval},a)}}catch(i){let a=Bb(i),u=a.includes("Max sessions")?"":`
107
+
108
+ Use /agent_sessions to see active sessions.`;return{text:`Error launching session: ${a}${u}`}}}})}le();function yf(t){t.registerCommand({name:"agent_sessions",description:"List coding agent sessions. Usage: /agent_sessions [--full]",acceptsArgs:!0,requireAuth:!0,handler:e=>{if(!k)return{text:"Error: SessionManager not initialized. The code-agent service must be running."};let r=(e.args??"").split(/\s+/).includes("--full");return{text:Is(k,"all",void 0,{full:r})}}})}le();function Sf(t){t.registerCommand({name:"agent_kill",description:"Kill a coding agent session by name or ID",acceptsArgs:!0,requireAuth:!0,handler:e=>{if(!k)return{text:"Error: SessionManager not initialized. The code-agent service must be running."};let r=e.args?.trim();return r?{text:xs(k,r,"killed")}:{text:"Usage: /agent_kill <name-or-id>"}}})}le();function kf(t){t.registerCommand({name:"agent_respond",description:"Send a follow-up message to a running coding agent session. Usage: /agent_respond <id-or-name> <message>",acceptsArgs:!0,requireAuth:!0,handler:async e=>{if(!k)return{text:"Error: SessionManager not initialized. The code-agent service must be running."};let r=(e.args??"").trim();if(!r)return{text:`Usage: /agent_respond <id-or-name> <message>
109
+ /agent_respond --interrupt <id-or-name> <message>`};let n=!1,o=r,i=Ap(o);i?.value==="--interrupt"&&(n=!0,o=i.rest);let a=Ap(o);if(!a)return{text:"Error: Missing message. Usage: /agent_respond <id-or-name> <message>"};let u=a.value,p=a.rest;return p.trim()?{text:(await Rt(k,{session:u,message:p,interrupt:n,userInitiated:!0})).text}:{text:"Error: Empty message. Usage: /agent_respond <id-or-name> <message>"}}})}le();function If(t){t.registerCommand({name:"agent_stats",description:"Show OpenClaw Code Agent usage metrics",acceptsArgs:!1,requireAuth:!0,handler:()=>{if(!k)return{text:"Error: SessionManager not initialized. The code-agent service must be running."};let e=k.getMetrics(),r=k.list("running").length;return{text:Qi(e,r)}}})}le();var Kb=50;function xf(t){t.registerCommand({name:"agent_output",description:"Show recent output from a coding agent session. Usage: /agent_output <id-or-name> [--full] [--lines N]",acceptsArgs:!0,requireAuth:!0,handler:e=>{if(!k)return{text:"Error: SessionManager not initialized. The code-agent service must be running."};let r=(e.args??"").trim();if(!r)return{text:"Usage: /agent_output <id-or-name> [--full] [--lines N]"};let n=Vn(r),o="",i=!1,a=Kb;for(let p=0;p<n.length;p++)if(n[p]==="--full")i=!0;else if(n[p]==="--lines"&&p+1<n.length){let d=parseInt(n[p+1],10);!isNaN(d)&&d>0&&(a=d),p++}else o||(o=n[p]);return o?{text:ks(k,o,{full:i,lines:a})}:{text:"Usage: /agent_output <id-or-name> [--full] [--lines N]"}}})}le();var Pf="Usage: /goal [--name <name>] [--workdir <dir>] [--model <model>] [--harness <name>] [--mode <ralph|verifier>] [--completion-promise <text>] [--max-iterations N] [--verify <cmd> ...] <goal>";function wf(t){t.registerCommand({name:"goal",description:"Launch an explicit goal task (Ralph-style completion loop or verifier-driven loop)",acceptsArgs:!0,requireAuth:!0,handler:async e=>{if(!Ce)return{text:"Error: GoalController not initialized. The code-agent service must be running."};let r=(e.args??"").trim();if(!r)return{text:Pf};let n=Vn(r),o,i,a,u,p="bypassPermissions",d,l,m,c=[],h=[];for(let I=0;I<n.length;I++){let w=n[I];if(w==="--name"&&I+1<n.length)o=n[++I];else if(w==="--workdir"&&I+1<n.length)i=n[++I];else if(w==="--model"&&I+1<n.length)a=n[++I];else if(w==="--max-iterations"&&I+1<n.length){let R=parseInt(n[++I],10);!Number.isNaN(R)&&R>0&&(u=R)}else if(w==="--permission-mode"&&I+1<n.length){let R=n[++I];if(R==="default"||R==="plan"||R==="bypassPermissions")p=R;else return{text:`Error: Invalid permission mode "${R}".`}}else if(w==="--harness"&&I+1<n.length)d=n[++I];else if(w==="--mode"&&I+1<n.length){let R=n[++I];if(R==="ralph"||R==="verifier")l=R;else return{text:`Error: Invalid goal mode "${R}". Use ralph or verifier.`}}else if(w==="--completion-promise"&&I+1<n.length)m=n[++I];else if(w==="--verify"&&I+1<n.length){let R=n[++I].trim();if(!R)return{text:"Error: --verify commands must not be empty."};c.push(R)}else h.push(w)}let y=h.join(" ").trim();if(!y)return{text:Pf};let S=Os({goal:y,verifierCommands:c,name:o,workdir:i,model:a,maxIterations:u,permissionMode:p,harness:d,goalMode:l,completionPromise:m},e);if(S.kind!=="resolved")return{text:S.text};try{let I=await Ce.launchTask({goal:S.goal,name:S.name,workdir:S.workdir,model:S.model,reasoningEffort:S.reasoningEffort,fastMode:S.fastMode,maxIterations:S.maxIterations,permissionMode:S.permissionMode,harness:S.harness,loopMode:S.loopMode,completionPromise:S.completionPromise,originChannel:S.originChannel,originThreadId:S.originThreadId,originAgentId:S.originAgentId,originSessionKey:S.originSessionKey,route:S.route,verifierCommands:S.verifierCommands});return{text:_s(I,S)}}catch(I){return{text:`Error launching goal task: ${I instanceof Error?I.message:String(I)}`}}}})}le();function vf(t){t.registerCommand({name:"goal_status",description:"Show one goal task or list all explicit goal tasks. Usage: /goal_status [<task-id-or-name>]",acceptsArgs:!0,requireAuth:!0,handler:e=>{if(!Ce)return{text:"Error: GoalController not initialized. The code-agent service must be running."};let r=(e.args??"").trim();if(r){let o=Ce.getTask(r);if(!o)return{text:`Error: Goal task "${r}" not found.`};let i=o.sessionId?k?.resolve(o.sessionId):void 0;return{text:br(o,vr(i))}}let n=Ce.listTasks();return n.length===0?{text:"No goal tasks found."}:{text:n.map(o=>{let i=o.sessionId?k?.resolve(o.sessionId):void 0;return br(o,vr(i))}).join(`
110
+
111
+ `)}}})}le();function bf(t){t.registerCommand({name:"goal_stop",description:"Stop a goal task. Usage: /goal_stop <task-id-or-name>",acceptsArgs:!0,requireAuth:!0,handler:e=>{if(!Ce)return{text:"Error: GoalController not initialized. The code-agent service must be running."};let r=(e.args??"").trim();if(!r)return{text:"Usage: /goal_stop <task-id-or-name>"};let n=Ce.stopTask(r);return n?n.action==="already_terminal"?{text:`Task is already ${n.task.status}.`}:{text:`Task "${n.task.name}" (${n.task.id}) stopped.`}:{text:`Error: Goal task "${r}" not found.`}}})}import{execFile as tA}from"child_process";import{createHash as _f}from"crypto";import{existsSync as jb,mkdirSync as Wb,readFileSync as Gb,renameSync as Vb,writeFileSync as Hb}from"fs";import{homedir as zb}from"os";import{dirname as Jb,join as Af}from"path";function Qb(t){let e=t.OPENCLAW_HOME?.trim();return e||Af(zb(),".openclaw")}function Yb(t){let e=t.OPENCLAW_CODE_AGENT_GOAL_TASKS_PATH?.trim();return e||Af(Qb(t),"code-agent-goal-tasks.json")}function Zb(t){return t instanceof Error?t.message:String(t)}function Xb(t){if(!t||typeof t!="object")return;let e=t;if(!(typeof e.provider!="string"||typeof e.target!="string"))return{provider:e.provider,target:e.target,accountId:typeof e.accountId=="string"?e.accountId:void 0,threadId:typeof e.threadId=="string"?e.threadId:void 0,sessionKey:typeof e.sessionKey=="string"?e.sessionKey:void 0}}function eA(t){if(!t||typeof t!="object")return;let e=t;if(typeof e.id!="string"||typeof e.name!="string"||typeof e.goal!="string"||typeof e.workdir!="string"||typeof e.status!="string")return;let r=e.status,n=r==="running"||r==="waiting_for_session"?"waiting_for_session":r;return{id:e.id,name:e.name,goal:e.goal,workdir:e.workdir,status:n,createdAt:typeof e.createdAt=="number"?e.createdAt:Date.now(),updatedAt:typeof e.updatedAt=="number"?e.updatedAt:Date.now(),iteration:typeof e.iteration=="number"?e.iteration:0,maxIterations:typeof e.maxIterations=="number"?e.maxIterations:8,sessionId:typeof e.sessionId=="string"?e.sessionId:void 0,sessionName:typeof e.sessionName=="string"?e.sessionName:void 0,harnessSessionId:typeof e.harnessSessionId=="string"?e.harnessSessionId:void 0,model:typeof e.model=="string"?e.model:void 0,reasoningEffort:typeof e.reasoningEffort=="string"?e.reasoningEffort:void 0,fastMode:e.fastMode===!0?!0:void 0,systemPrompt:typeof e.systemPrompt=="string"?e.systemPrompt:void 0,allowedTools:Array.isArray(e.allowedTools)?e.allowedTools.filter(o=>typeof o=="string"):void 0,originChannel:typeof e.originChannel=="string"?e.originChannel:void 0,originThreadId:typeof e.originThreadId=="string"||typeof e.originThreadId=="number"?e.originThreadId:void 0,originAgentId:typeof e.originAgentId=="string"?e.originAgentId:void 0,originSessionKey:typeof e.originSessionKey=="string"?e.originSessionKey:void 0,route:Xb(e.route),harness:typeof e.harness=="string"?e.harness:void 0,permissionMode:typeof e.permissionMode=="string"?e.permissionMode:void 0,loopMode:e.loopMode==="ralph"?"ralph":"verifier",completionPromise:typeof e.completionPromise=="string"?e.completionPromise:void 0,verifierCommands:Array.isArray(e.verifierCommands)?e.verifierCommands.filter(o=>!!o&&typeof o=="object"&&typeof o.label=="string"&&typeof o.command=="string"):[],lastVerifierSummary:typeof e.lastVerifierSummary=="string"?e.lastVerifierSummary:void 0,lastVerifierFingerprint:typeof e.lastVerifierFingerprint=="string"?e.lastVerifierFingerprint:void 0,repeatedFailureCount:typeof e.repeatedFailureCount=="number"?e.repeatedFailureCount:0,waitingForUserReason:typeof e.waitingForUserReason=="string"?e.waitingForUserReason:void 0,failureReason:typeof e.failureReason=="string"?e.failureReason:void 0}}var Fs=class{path;tasks=new Map;constructor(e=process.env){this.path=Yb(e),this.load()}load(){try{if(!jb(this.path))return;let e=Gb(this.path,"utf8"),r=JSON.parse(e);if(!Array.isArray(r))return;for(let n of r){let o=eA(n);o&&this.tasks.set(o.id,o)}this.save()}catch{}}save(){try{Wb(Jb(this.path),{recursive:!0});let e=`${this.path}.tmp`;Hb(e,JSON.stringify([...this.tasks.values()],null,2),"utf8"),Vb(e,this.path)}catch(e){console.warn(`[GoalTaskStore] Failed to save ${this.path}: ${Zb(e)}`)}}upsert(e){this.tasks.set(e.id,e),this.save()}get(e){let r=this.tasks.get(e);return r||[...this.tasks.values()].find(n=>n.name===e)}list(){return[...this.tasks.values()].sort((e,r)=>r.createdAt-e.createdAt)}};ir();var rA=8,Df=600*1e3,nA=4e3,Tp=1200,oA="DONE",iA=["BASH_ENV","ENV"];function sA(t){return t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,48)||"goal-task"}function Go(t,e){return t.length<=e?t:`${t.slice(0,e-3)}...`}function Tr(t,e=20){let r=t.split(/\r?\n/).map(n=>n.trimEnd()).filter(n=>n.trim().length>0);return r.length<=e?r.join(`
112
+ `):r.slice(-e).join(`
113
+ `)}function Tf(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Rf(t){let e=t?.trim();return e&&e.length>0?e:oA}function aA(t){return t.route??wo(t.originChannel,t.originThreadId,t.originSessionKey)}function Rp(t){return t.map((e,r)=>({label:e.label.trim()||`check-${r+1}`,command:e.command.trim(),timeoutMs:e.timeoutMs??Df})).filter(e=>e.command.length>0)}function uA(t){return t.loopMode==="verifier"}function pA(t){return Rp(t.verifierCommands).length>0}function Cf(t){return uA(t)&&!pA(t)}function Ls(){return"Verifier-mode goal tasks require at least one verifier command."}function Ef(t){let e=t.steps.filter(r=>!r.ok).map(r=>`${r.label}:${r.exitCode}:${Tr(r.output,12)}`).join(`
114
+ `);return _f("sha1").update(e).digest("hex")}function dA(t){return _f("sha1").update(Tr(t,24)).digest("hex")}function $f(t){let e=t.toLowerCase().replace(/\s+/g," ").trim();if(!e)return;if(/\b(can i|may i|should i|do you want me to|would you like me to)\b/.test(e)&&/\b(read|write|edit|modify|change|inspect|search|run|execute|install|delete|move|rename|open)\b/.test(e))return"Yes, proceed.";if(/\b(should i continue|shall i continue|want me to continue|should i proceed|shall i proceed|can i proceed|go ahead)\b/.test(e))return"Yes, continue."}function lA(t){if(t.loopMode==="ralph")return["You are working inside a Ralph Wiggum-style autonomous loop.","","Goal:",t.goal,"","Loop rules:","- Keep making concrete progress toward the goal in this repository.","- An external controller will continue looping until you emit the completion promise or the iteration budget is exhausted.",`- When the goal is truly complete, output this exact marker on its own line: <promise>${t.completionPromise}</promise>`,"- Do not output that completion marker early, approximately, or with altered spelling.","- If you are not done yet, do not emit the completion marker.","- Do not ask to stop or wait for confirmation unless blocked by a real product, architecture, credential, or approval decision.","- Re-run useful local checks before ending each turn.",t.verifierCommands.length>0?"- External verifier commands will also be run after you claim completion.":"- There may not be external verifiers, so your completion promise is the success gate."].join(`
115
+ `);let e=t.verifierCommands.map(r=>`- ${r.label}: ${r.command}`).join(`
115
116
  `);return["You are working on an autonomous goal-driven task.","","Goal:",t.goal,"","Working rules:","- Make concrete progress toward the goal in this repository.","- An external controller will run these verifier commands after your turn:",e,"- If any verifier fails, you will receive the exact failures and must continue fixing the remaining gaps.","- Do not stop early just because you think the task is probably done.","- Do not ask for confirmation unless you are blocked by a real product, architecture, or credential decision.","- Before ending a turn, run any local checks you think are useful."].join(`
116
- `)}function ah(t){return t.loopMode==="ralph"?["The OpenClaw gateway restarted while this Ralph-style goal task was running.","Resume from the prior session context and continue immediately.","","Goal:",t.goal,"","Instructions:","- Continue from the current repo state and prior session context without restarting from scratch.",`- Only emit <promise>${t.completionPromise}</promise> when the goal is actually complete.`,"- The external controller will keep looping until that marker appears or the iteration budget is exhausted.","- Do not ask for confirmation just because the gateway restarted."].join(`
117
+ `)}function Mf(t){return t.loopMode==="ralph"?["The OpenClaw gateway restarted while this Ralph-style goal task was running.","Resume from the prior session context and continue immediately.","","Goal:",t.goal,"","Instructions:","- Continue from the current repo state and prior session context without restarting from scratch.",`- Only emit <promise>${t.completionPromise}</promise> when the goal is actually complete.`,"- The external controller will keep looping until that marker appears or the iteration budget is exhausted.","- Do not ask for confirmation just because the gateway restarted."].join(`
117
118
  `):["The OpenClaw gateway restarted while this autonomous goal task was running.","Resume from the prior session context and continue toward the same goal immediately.","","Goal:",t.goal,"","Instructions:","- Re-orient yourself from the existing repo state and prior session context.","- Continue the task without restarting from scratch unless the prior approach is clearly invalid.","- The external controller will continue running verifier commands after your turns.","- Do not ask for confirmation just because the gateway restarted."].join(`
118
- `)}function Nb(t,e){let n=e.steps.filter(o=>!o.ok).map(o=>[`- ${o.label} failed (exit ${o.exitCode})`,gn(o.output,18)].join(`
119
+ `)}function mA(t,e){let r=e.steps.filter(o=>!o.ok).map(o=>[`- ${o.label} failed (exit ${o.exitCode})`,Tr(o.output,18)].join(`
119
120
  `)).join(`
120
121
 
121
- `);return["The external verifier did not pass.",t.repeatedFailureCount>=2?"The same verifier fingerprint has repeated. Use a different debugging strategy than your previous attempt.":"Fix only the remaining issues from the verifier output below.","","Goal:",t.goal,"","Verifier failures:",n,"","Instructions:","- Continue from the current code state and prior session context.","- Make the minimum necessary changes to satisfy the remaining verifier failures.","- Re-run relevant checks yourself before ending the turn.","- Do not ask for confirmation unless you are truly blocked on a human decision."].join(`
122
- `)}function Fb(t,e){let n=gn(e,18)||"(no meaningful output)",r=t.repeatedFailureCount>=2?"The loop has repeated without converging. Use a different strategy than the previous attempt.":"Continue from the current repo state and prior session context.";return["Continue the same Ralph-style goal task.","","Goal:",t.goal,"","Status:",`- The last turn ended without the completion promise <promise>${t.completionPromise}</promise>.`,`- Current iteration: ${t.iteration}/${t.maxIterations}.`,`- ${r}`,"","Latest output / blockers:",n,"","Instructions:","- Keep working until the goal is actually complete.",`- Only emit <promise>${t.completionPromise}</promise> when all requested work is done.`,"- If you are not done, do not emit the completion promise.",t.verifierCommands.length>0?"- If you believe you are done, make sure the expected verifiers are likely to pass before emitting the completion promise.":"- There may not be external verifiers, so your completion promise is the success signal."].join(`
123
- `)}function Lb(t,e){let n=e.steps.filter(r=>!r.ok).map(r=>[`- ${r.label} failed (exit ${r.exitCode})`,gn(r.output,18)].join(`
122
+ `);return["The external verifier did not pass.",t.repeatedFailureCount>=2?"The same verifier fingerprint has repeated. Use a different debugging strategy than your previous attempt.":"Fix only the remaining issues from the verifier output below.","","Goal:",t.goal,"","Verifier failures:",r,"","Instructions:","- Continue from the current code state and prior session context.","- Make the minimum necessary changes to satisfy the remaining verifier failures.","- Re-run relevant checks yourself before ending the turn.","- Do not ask for confirmation unless you are truly blocked on a human decision."].join(`
123
+ `)}function cA(t,e){let r=Tr(e,18)||"(no meaningful output)",n=t.repeatedFailureCount>=2?"The loop has repeated without converging. Use a different strategy than the previous attempt.":"Continue from the current repo state and prior session context.";return["Continue the same Ralph-style goal task.","","Goal:",t.goal,"","Status:",`- The last turn ended without the completion promise <promise>${t.completionPromise}</promise>.`,`- Current iteration: ${t.iteration}/${t.maxIterations}.`,`- ${n}`,"","Latest output / blockers:",r,"","Instructions:","- Keep working until the goal is actually complete.",`- Only emit <promise>${t.completionPromise}</promise> when all requested work is done.`,"- If you are not done, do not emit the completion promise.",t.verifierCommands.length>0?"- If you believe you are done, make sure the expected verifiers are likely to pass before emitting the completion promise.":"- There may not be external verifiers, so your completion promise is the success signal."].join(`
124
+ `)}function fA(t,e){let r=e.steps.filter(n=>!n.ok).map(n=>[`- ${n.label} failed (exit ${n.exitCode})`,Tr(n.output,18)].join(`
124
125
  `)).join(`
125
126
 
126
- `);return["You emitted the completion promise, but the external verifiers did not pass.","","Goal:",t.goal,"","Verifier failures:",n,"","Instructions:","- Continue from the current repo state and fix only the remaining gaps.",`- Do not emit <promise>${t.completionPromise}</promise> again until the goal is fully complete and the failing checks are addressed.`,"- Re-run relevant checks yourself before ending the turn."].join(`
127
- `)}function Wb(t,e){let n=e.trim();if(!n)return!1;let r=new RegExp(`(^|\\n)\\s*${nh(n)}\\s*(\\n|$)`,"i"),o=new RegExp(`<promise>\\s*${nh(n)}\\s*<\\/promise>`,"i");return r.test(t)||o.test(t)}function dh(t){return t.steps.map(e=>`${e.ok?"PASS":"FAIL"} ${e.label} (exit ${e.exitCode}, ${Math.round(e.durationMs)}ms)`).join(`
128
- `)}function Un(t){return t instanceof Error?t.message:String(t)}function Bb(t){return t==="succeeded"||t==="failed"||t==="stopped"}function Ub(t){return bo(t.error?.trim()||"Underlying session failed.",Wl)}function Kb(t=process.env){let e={...t};for(let n of Mb)delete e[n];return e}function Vb(t,e){return new Promise(n=>{let r=Date.now();xb("bash",["-lc",e.command],{cwd:t,timeout:e.timeoutMs??uh,maxBuffer:1024*1024,env:Kb()},(o,i,s)=>{let a=Date.now()-r,d=typeof o?.code=="number"?o.code:o?1:0,l=`${i??""}${s?`
129
- ${s}`:""}`.trim();n({label:e.label,command:e.command,ok:!o,exitCode:d,durationMs:a,output:bo(l||"(no output)",Rb)})})})}var Cs=class{store;sessionManager;restorePromise=null;inFlight=new Set;observerDisposers=new Map;scheduledEvaluations=new Map;dirtyEvaluations=new Set;dirtyEvaluationSessionIds=new Map;started=!1;constructor(e){this.sessionManager=e,this.store=new Ts}start(){this.started||(this.started=!0,!this.restorePromise&&(this.restorePromise=this.restoreRecoverableTasks().catch(e=>{console.warn(`[GoalController] Failed to restore recoverable tasks: ${Un(e)}`)}).finally(()=>{this.restorePromise=null})))}stop(){this.started=!1,this.clearScheduledEvaluations(),this.detachSessionObservers(),this.captureRecoverableTasks(),this.store.save()}listTasks(){return this.store.list()}getTask(e){return this.store.get(e)}async launchTask(e){let n=e.loopMode??"verifier",r=Bl(e.verifierCommands);if(n==="verifier"&&r.length===0)throw new Error(Ms());let i={id:Qi(8),name:Cb(e.name??e.goal),goal:e.goal.trim(),workdir:e.workdir,status:"waiting_for_session",createdAt:Date.now(),updatedAt:Date.now(),iteration:0,maxIterations:e.maxIterations??Ab,model:e.model,reasoningEffort:e.reasoningEffort,fastMode:e.fastMode,systemPrompt:e.systemPrompt,allowedTools:e.allowedTools,originChannel:e.originChannel,originThreadId:e.originThreadId,originAgentId:e.originAgentId,originSessionKey:e.originSessionKey,route:e.route,harness:e.harness,permissionMode:e.permissionMode??"bypassPermissions",loopMode:n,completionPromise:rh(e.completionPromise),verifierCommands:r,repeatedFailureCount:0},s=await this.spawnTaskSession(i,Db(i));return this.attachSessionObservers(i,s),i.sessionId=s.id,i.sessionName=s.name,i.harnessSessionId=s.harnessSessionId,i.status="running",i.updatedAt=Date.now(),this.store.upsert(i),this.scheduleTaskEvaluation(i.id,"launch",s.id),this.notify(i,`\u{1F3AF} [${i.name}] Goal task started
127
+ `);return["You emitted the completion promise, but the external verifiers did not pass.","","Goal:",t.goal,"","Verifier failures:",r,"","Instructions:","- Continue from the current repo state and fix only the remaining gaps.",`- Do not emit <promise>${t.completionPromise}</promise> again until the goal is fully complete and the failing checks are addressed.`,"- Re-run relevant checks yourself before ending the turn."].join(`
128
+ `)}function gA(t,e){let r=e.trim();if(!r)return!1;let n=new RegExp(`(^|\\n)\\s*${Tf(r)}\\s*(\\n|$)`,"i"),o=new RegExp(`<promise>\\s*${Tf(r)}\\s*<\\/promise>`,"i");return n.test(t)||o.test(t)}function Of(t){return t.steps.map(e=>`${e.ok?"PASS":"FAIL"} ${e.label} (exit ${e.exitCode}, ${Math.round(e.durationMs)}ms)`).join(`
129
+ `)}function ln(t){return t instanceof Error?t.message:String(t)}function hA(t){return t==="succeeded"||t==="failed"||t==="stopped"}function yA(t){return Go(t.error?.trim()||"Underlying session failed.",Tp)}function SA(t=process.env){let e={...t};for(let r of iA)delete e[r];return e}function kA(t,e){return new Promise(r=>{let n=Date.now();tA("bash",["-lc",e.command],{cwd:t,timeout:e.timeoutMs??Df,maxBuffer:1024*1024,env:SA()},(o,i,a)=>{let u=Date.now()-n,p=typeof o?.code=="number"?o.code:o?1:0,d=`${i??""}${a?`
130
+ ${a}`:""}`.trim();r({label:e.label,command:e.command,ok:!o,exitCode:p,durationMs:u,output:Go(d||"(no output)",nA)})})})}var Ns=class{store;sessionManager;restorePromise=null;inFlight=new Set;observerDisposers=new Map;scheduledEvaluations=new Map;dirtyEvaluations=new Set;dirtyEvaluationSessionIds=new Map;started=!1;constructor(e){this.sessionManager=e,this.store=new Fs}start(){this.started||(this.started=!0,!this.restorePromise&&(this.restorePromise=this.restoreRecoverableTasks().catch(e=>{console.warn(`[GoalController] Failed to restore recoverable tasks: ${ln(e)}`)}).finally(()=>{this.restorePromise=null})))}stop(){this.started=!1,this.clearScheduledEvaluations(),this.detachSessionObservers(),this.captureRecoverableTasks(),this.store.save()}listTasks(){return this.store.list()}getTask(e){return this.store.get(e)}async launchTask(e){let r=e.loopMode??"verifier",n=Rp(e.verifierCommands);if(r==="verifier"&&n.length===0)throw new Error(Ls());let i={id:ts(8),name:sA(e.name??e.goal),goal:e.goal.trim(),workdir:e.workdir,status:"waiting_for_session",createdAt:Date.now(),updatedAt:Date.now(),iteration:0,maxIterations:e.maxIterations??rA,model:e.model,reasoningEffort:e.reasoningEffort,fastMode:e.fastMode,systemPrompt:e.systemPrompt,allowedTools:e.allowedTools,originChannel:e.originChannel,originThreadId:e.originThreadId,originAgentId:e.originAgentId,originSessionKey:e.originSessionKey,route:e.route,harness:e.harness,permissionMode:e.permissionMode??"bypassPermissions",loopMode:r,completionPromise:Rf(e.completionPromise),verifierCommands:n,repeatedFailureCount:0},a=await this.spawnTaskSession(i,lA(i));return this.attachSessionObservers(i,a),i.sessionId=a.id,i.sessionName=a.name,i.harnessSessionId=a.harnessSessionId,i.status="running",i.updatedAt=Date.now(),this.store.upsert(i),this.scheduleTaskEvaluation(i.id,"launch",a.id),this.notify(i,`\u{1F3AF} [${i.name}] Goal task started
130
131
 
131
132
  Goal:
132
- ${bo(i.goal,500)}`,"goal-task-started"),i}stopTask(e){let n=this.store.get(e);if(n)return Bb(n.status)?{task:n,action:"already_terminal"}:(n.sessionId&&this.sessionManager.kill(n.sessionId,"user"),this.markTaskStopped(n,"Stopped by user."),{task:n,action:"stopped"})}async spawnTaskSession(e,n){return this.spawnManagedTaskSession(e,n)}async spawnManagedTaskSession(e,n,r){let o=r?this.sessionManager.resolveHarnessSessionId(r)??r:void 0,i=r?this.sessionManager.resolve(r):void 0,s=o?this.sessionManager.getPersistedSession(o)??this.sessionManager.getPersistedSession(r??o):void 0,{resumeSessionId:a}=ur({requestedResumeSessionId:o,activeSession:i?{harnessSessionId:i.harnessSessionId}:void 0,persistedSession:s?{harness:s.harness,backendRef:s.backendRef}:void 0}),d={prompt:n,name:e.name,workdir:e.workdir,model:e.model,reasoningEffort:e.reasoningEffort,fastMode:e.fastMode,systemPrompt:e.systemPrompt,allowedTools:e.allowedTools,originChannel:e.originChannel,originThreadId:e.originThreadId,originAgentId:e.originAgentId,originSessionKey:e.originSessionKey,route:_b(e),permissionMode:e.permissionMode,multiTurn:!0,goalTaskId:e.id,harness:e.harness,resumeSessionId:a,resumeWorktreeFrom:o,worktreeStrategy:"off"};return this.sessionManager.spawnAndAwaitRunning(d,{notifyLaunch:!1})}async resumeTaskSession(e,n,r){if(!r.harnessSessionId){let i=await this.spawnTaskSession(e,["The previous session ended without a resumable harness session id.","Continue working on the same goal.","",n].join(`
133
- `));return this.attachSessionObservers(e,i),i}let o=await this.spawnManagedTaskSession(e,n,r.harnessSessionId);return this.attachSessionObservers(e,o),o}resolveResumeSessionId(e){if(e.harnessSessionId)return e.harnessSessionId;if(e.sessionId){let r=this.sessionManager.resolveHarnessSessionId(e.sessionId);if(r)return r}let n=this.sessionManager.resolveHarnessSessionId(e.name);if(n)return n}captureRecoverableTasks(){for(let e of this.store.list()){if(e.status!=="running"&&e.status!=="waiting_for_session")continue;let n=e.sessionId?this.sessionManager.resolve(e.sessionId):void 0;n&&(e.sessionId=n.id,e.sessionName=n.name,e.harnessSessionId=n.harnessSessionId??e.harnessSessionId,e.route=n.route??e.route,e.updatedAt=Date.now(),e.status="waiting_for_session",this.store.upsert(e))}}async restoreRecoverableTasks(){for(let e of this.store.list()){if(!this.started)break;if(e.status==="waiting_for_user"){this.markTaskFailed(e,"Goal task was waiting for user input and cannot continue autonomously");continue}if(e.status!=="waiting_for_session"&&e.status!=="running")continue;if(oh(e)){this.markTaskFailed(e,Ms());continue}if(e.sessionId){let r=this.sessionManager.resolve(e.sessionId);if(r&&(r.status==="starting"||r.status==="running"))continue}let n=this.resolveResumeSessionId(e);if(!n){this.markTaskFailed(e,"Goal task could not be resumed after gateway restart because no resumable session id was available.");continue}try{let r=await this.spawnManagedTaskSession(e,ah(e),n);if(!this.started){e.sessionId=r.id,e.sessionName=r.name,e.harnessSessionId=r.harnessSessionId??n,e.route=r.route??e.route,e.status="waiting_for_session",e.updatedAt=Date.now(),this.store.upsert(e),this.sessionManager.kill(r.id,"shutdown");break}this.attachSessionObservers(e,r),e.sessionId=r.id,e.sessionName=r.name,e.harnessSessionId=r.harnessSessionId??n,e.route=r.route??e.route,e.status="running",e.updatedAt=Date.now(),this.store.upsert(e),this.notifyIterationStatus(e,`\u{1F504} [${e.name}] Goal task resumed after gateway restart`,r),this.scheduleTaskEvaluation(e.id,"restore",r.id)}catch(r){this.markTaskFailed(e,`Failed to resume the goal task after gateway restart: ${Un(r)}`)}}}async runVerifiers(e){let n=Bl(e.verifierCommands);if(n.length===0){let s={status:"fail",steps:[{label:"verifier-config",command:"(none configured)",ok:!1,exitCode:1,durationMs:0,output:Ms()}],summary:"",fingerprint:""};return s.fingerprint=ih(s),s.summary=dh(s),s}let r=[];for(let s of n)r.push(await Vb(e.workdir,s));let i={status:r.every(s=>s.ok)?"pass":"fail",steps:r,summary:"",fingerprint:""};return i.fingerprint=ih(i),i.summary=dh(i),i}notify(e,n,r){this.sessionManager.emitGoalTaskUpdate(e,n,r)}notifyIterationStatus(e,n,r){let o=cn(r??(e.sessionId?this.sessionManager.resolve(e.sessionId):void 0)),i=`${n}
134
-
135
- ${mn(e,o)}`;this.notify(e,i,"goal-task-progress")}setTaskRunningWithSession(e,n){e.sessionId=n.id,e.sessionName=n.name,e.harnessSessionId=n.harnessSessionId,e.route=n.route??e.route,e.status="running",e.waitingForUserReason=void 0,e.updatedAt=Date.now(),this.store.upsert(e)}attachSessionObservers(e,n){if(this.observerDisposers.has(n.id))return;let r=(i,s)=>{(s==="completed"||s==="failed"||s==="killed")&&(this.removeSessionObserver(n.id),this.scheduleTaskEvaluation(e.id,`status:${s}`,n.id))},o=()=>{let i=this.store.get(e.id);i&&(i.sessionId=n.id,i.sessionName=n.name,i.harnessSessionId=n.harnessSessionId,i.route=n.route??i.route,i.updatedAt=Date.now(),i.status==="waiting_for_session"&&(i.status="running"),this.store.upsert(i),this.notifyIterationStatus(i,`\u{1F504} [${i.name}] Coding turn complete`,n),this.scheduleTaskEvaluation(e.id,"turnEnd",n.id))};n.on("statusChange",r),n.on("turnEnd",o),this.observerDisposers.set(n.id,()=>{n.off?.("statusChange",r),n.off?.("turnEnd",o),n.removeListener?.("statusChange",r),n.removeListener?.("turnEnd",o)})}scheduleTaskEvaluation(e,n,r){if(!this.started)return;let o=this.scheduledEvaluations.get(e);if(o){!o.sessionId&&r&&(o.sessionId=r);return}let i={timer:setTimeout(()=>{this.scheduledEvaluations.delete(e),this.evaluateTask(e,n,i.sessionId).catch(s=>{console.warn(`[GoalController] evaluateTask error (${n}): ${Un(s)}`)})},0),sessionId:r};i.timer.unref?.(),this.scheduledEvaluations.set(e,i)}clearScheduledEvaluations(){for(let e of this.scheduledEvaluations.values())clearTimeout(e.timer);this.scheduledEvaluations.clear(),this.dirtyEvaluations.clear(),this.dirtyEvaluationSessionIds.clear()}detachSessionObservers(){for(let e of[...this.observerDisposers.keys()])this.removeSessionObserver(e)}removeSessionObserver(e){let n=this.observerDisposers.get(e);n&&(this.observerDisposers.delete(e),n())}markTaskFailed(e,n){e.status="failed",e.failureReason=bo(n,Wl),e.updatedAt=Date.now(),this.store.upsert(e),this.notify(e,`\u274C [${e.name}] Goal task failed
136
-
137
- ${e.failureReason}`,"goal-task-failed")}markTaskFailedWaitingForUser(e,n){this.markTaskFailed(e,`Goal task was waiting for user input and cannot continue autonomously: ${n}`)}markTaskSucceeded(e,n){e.status="succeeded",e.lastVerifierSummary=n,e.updatedAt=Date.now(),this.store.upsert(e),this.notify(e,`\u2705 [${e.name}] Goal task succeeded
138
-
139
- ${n}`,"goal-task-succeeded")}markTaskStopped(e,n){e.status="stopped",e.failureReason=bo(n,Wl),e.updatedAt=Date.now(),this.store.upsert(e),this.notify(e,`\u26D4 [${e.name}] Goal task stopped
140
-
141
- ${e.failureReason}`,"goal-task-stopped")}async handleRunningSession(e,n){if(n.pendingPlanApproval){let s=await ct(this.sessionManager,{session:n.id,message:"Approved. Implement the plan.",approve:!0,userInitiated:!1});s.isError&&this.markTaskFailed(e,s.text);return}if(!n.pendingInputState){this.setTaskRunningWithSession(e,n);return}let r=n.getOutput(30).join(`
142
- `),o=sh(r);if(!o){this.markTaskFailedWaitingForUser(e,gn(r,24)||"The session is waiting for user input.");return}let i=await ct(this.sessionManager,{session:n.id,message:o,userInitiated:!1});if(i.isError||i.text.includes("Auto-respond limit reached")){this.markTaskFailedWaitingForUser(e,i.text);return}e.status="running",e.waitingForUserReason=void 0,e.updatedAt=Date.now(),this.store.upsert(e)}async resumeAfterIdleTimeout(e,n,r){try{let o=await this.resumeTaskSession(e,r,n);this.setTaskRunningWithSession(e,o),this.notifyIterationStatus(e,`\u{1F504} [${e.name}] Goal task resumed after idle timeout`,o),this.scheduleTaskEvaluation(e.id,"idle-timeout-resume",o.id)}catch(o){this.markTaskFailed(e,`Failed to resume the goal task after idle timeout: ${Un(o)}`)}}async handleTerminalSession(e,n){if(n.status==="failed"){this.markTaskFailed(e,Ub(n));return}if(n.status==="killed"&&n.killReason==="user"){this.markTaskStopped(e,"Stopped by user.");return}if(n.status==="killed"&&n.killReason==="idle-timeout"){let i=n.getOutput(60).join(`
143
- `);if(n.pendingPlanApproval){let s=await ct(this.sessionManager,{session:n.id,message:"Approved. Implement the plan.",approve:!0,userInitiated:!1});if(s.isError){this.markTaskFailed(e,s.text);return}let a=this.sessionManager.resolve(n.id);if(!a){this.markTaskFailed(e,"Failed to resolve the resumed goal task session after idle timeout plan approval.");return}this.attachSessionObservers(e,a),this.setTaskRunningWithSession(e,a),this.notifyIterationStatus(e,`\u{1F504} [${e.name}] Goal task resumed after idle timeout`,a),this.scheduleTaskEvaluation(e.id,"idle-timeout-plan-resume",a.id);return}if(n.pendingInputState){let s=sh(i);if(!s){this.markTaskFailed(e,`Goal task was waiting for user input and cannot continue autonomously: ${gn(i,24)||"The goal task hit idle timeout while waiting for user input."}`);return}await this.resumeAfterIdleTimeout(e,n,["The previous session hit idle timeout while waiting for a response.",`Use this response and continue the goal: ${s}`].join(`
144
-
145
- `));return}await this.resumeAfterIdleTimeout(e,n,ah(e));return}if(n.status==="killed"&&n.killReason!=="done"){this.markTaskFailed(e,`Underlying session was killed (${n.killReason}).`);return}if(e.loopMode==="ralph"){let i=n.getOutput(200).join(`
146
- `),s=rh(e.completionPromise);if(Wb(i,s)){if(e.verifierCommands.length===0){this.markTaskSucceeded(e,`Completion promise "${s}" detected in agent output.`);return}let u=await this.runVerifiers(e);if(e.lastVerifierSummary=u.summary,e.updatedAt=Date.now(),u.status==="pass"){this.markTaskSucceeded(e,[`Completion promise "${s}" detected.`,u.summary].join(`
147
- `));return}if(e.lastVerifierFingerprint===u.fingerprint?e.repeatedFailureCount+=1:e.repeatedFailureCount=1,e.lastVerifierFingerprint=u.fingerprint,e.iteration+1>=e.maxIterations){this.markTaskFailed(e,[`Goal task emitted completion promise but verifiers still failed before hitting the iteration budget (${e.maxIterations}).`,u.summary].join(`
148
- `));return}e.iteration+=1;let c=Lb(e,u);try{let g=await this.resumeTaskSession(e,c,n);this.setTaskRunningWithSession(e,g),this.notifyIterationStatus(e,`\u{1F501} [${e.name}] Completion claimed but verifiers still failed`),this.scheduleTaskEvaluation(e.id,"ralph-verifier-resume",g.id)}catch(g){this.markTaskFailed(e,`Failed to resume the Ralph goal task after verifier failure: ${Un(g)}`)}return}let d=Ob(i);if(e.lastVerifierFingerprint===d?e.repeatedFailureCount+=1:e.repeatedFailureCount=1,e.lastVerifierFingerprint=d,e.iteration+1>=e.maxIterations){this.markTaskFailed(e,[`Completion promise "${s}" was not emitted before hitting the iteration budget (${e.maxIterations}).`,"Latest output:",gn(i,20)||"(no output)"].join(`
149
- `));return}e.iteration+=1;let l=Fb(e,i);try{let u=await this.resumeTaskSession(e,l,n);this.setTaskRunningWithSession(e,u),this.notifyIterationStatus(e,`\u{1F501} [${e.name}] Ralph iteration continued`),this.scheduleTaskEvaluation(e.id,"ralph-continue",u.id)}catch(u){this.markTaskFailed(e,`Failed to continue the Ralph goal task: ${Un(u)}`)}return}let r=await this.runVerifiers(e);if(e.lastVerifierSummary=r.summary,e.updatedAt=Date.now(),r.status==="pass"){this.markTaskSucceeded(e,r.summary);return}if(e.lastVerifierFingerprint===r.fingerprint?e.repeatedFailureCount+=1:e.repeatedFailureCount=1,e.lastVerifierFingerprint=r.fingerprint,e.iteration+1>=e.maxIterations){this.markTaskFailed(e,[`Verifier did not pass before hitting the iteration budget (${e.maxIterations}).`,r.summary].join(`
150
- `));return}e.iteration+=1;let o=Nb(e,r);try{let i=await this.resumeTaskSession(e,o,n);this.setTaskRunningWithSession(e,i),this.notifyIterationStatus(e,`\u{1F501} [${e.name}] Repair iteration started after verifier failure`),this.scheduleTaskEvaluation(e.id,"repair-resume",i.id)}catch(i){this.markTaskFailed(e,`Failed to resume the goal task: ${Un(i)}`)}}async evaluateTask(e,n,r){this.restorePromise&&await this.restorePromise;let o=this.store.get(e);o&&await this.reconcileTask(o,n,r)}async reconcileTask(e,n="manual",r){if(!(e.status==="succeeded"||e.status==="failed"||e.status==="stopped")){if(this.inFlight.has(e.id)){this.dirtyEvaluations.add(e.id),!this.dirtyEvaluationSessionIds.get(e.id)&&r?this.dirtyEvaluationSessionIds.set(e.id,r):this.dirtyEvaluationSessionIds.has(e.id)||this.dirtyEvaluationSessionIds.set(e.id,r);return}this.inFlight.add(e.id);try{if(r&&e.sessionId&&e.sessionId!==r){let i=this.sessionManager.resolve(r);if(i&&(i.status==="completed"||i.status==="failed"||i.status==="killed"))return}let o=r?this.sessionManager.resolve(r)??(e.sessionId?this.sessionManager.resolve(e.sessionId):void 0):e.sessionId?this.sessionManager.resolve(e.sessionId):void 0;if(e.status==="waiting_for_user"){this.markTaskFailed(e,"Goal task was waiting for user input and cannot continue autonomously");return}if(oh(e)){this.markTaskFailed(e,Ms());return}if(!o){this.markTaskFailed(e,"Underlying session could not be found.");return}if(e.sessionName=o.name,e.harnessSessionId=o.harnessSessionId,e.route=o.route??e.route,e.updatedAt=Date.now(),this.store.upsert(e),o.status==="starting"||o.status==="running"){await this.handleRunningSession(e,o);return}await this.handleTerminalSession(e,o)}finally{if(this.inFlight.delete(e.id),this.dirtyEvaluations.has(e.id)){this.dirtyEvaluations.delete(e.id);let o=this.dirtyEvaluationSessionIds.get(e.id);this.dirtyEvaluationSessionIds.delete(e.id),this.scheduleTaskEvaluation(e.id,`${n}:dirty`,o)}}}}};Te();import{existsSync as qb,realpathSync as jb}from"fs";import{resolve as Gb}from"path";function ph(t){if(!t)return;let e=Gb(t);try{if(qb(e))return jb.native(e)}catch{}return e}function _s(t,e){return!t||!e?!1:ph(t)===ph(e)}he();Te();import{existsSync as Hb}from"fs";he();rt();function ch(t){return t instanceof Error?t.message:String(t)}function zb(t){let e=t.worktreeStrategy??E.defaultWorktreeStrategy;return!!e&&e!=="off"&&ml(co({harnessName:t.harness??Le(),backendRef:t.backendRef}))}function Qb(t,e,n,r){let o=["","You are working in a git worktree.",`Worktree path: ${n}`,`Branch: ${r}`,"",`IMPORTANT: ALL file edits must be made within this worktree at ${n}.`,`Do NOT edit files directly in ${e} (the original workspace).`,`If your task references files by absolute path under ${e}, rewrite those`,"paths relative to your current working directory. For example:",` "${e}/src/file.py" \u2192 use relative path "src/file.py"`,"","Before finishing, run `git status --short` in this worktree.","If you made actual task changes, commit all of them to this branch before finishing.","Use `git add` and `git commit`. If no repository changes are needed, leave the worktree clean before finishing.","Do NOT run `git checkout`, `git switch`, or `git reset --hard` as these will detach or corrupt the worktree HEAD.","","When making changes, please note:","- Do NOT commit planning documents, investigation notes, or analysis artifacts to this branch","- Only commit actual code, configuration, tests, and documentation changes that were explicitly requested as part of the task"].join(`
151
- `);return(t??"")+o}function Jb(t,e){let n=t.resumeSessionId??t.resumeWorktreeFrom;if(!n)return{};let r=e(n);if(!r)return{};let o=!!r.harness||!!r.backendRef,i=(()=>{if(r.workdir&&r.workdir!==r.worktreePath)return r.workdir;if(r.worktreePath){let a=os(r.worktreePath);return r.workdir&&a&&_s(r.workdir,a)?r.workdir:a??r.workdir}return r.workdir})();if(!t.worktreeStrategy&&r.worktreeStrategy&&(t.worktreeStrategy=r.worktreeStrategy),!t.planApproval&&r.planApproval&&(t.planApproval=r.planApproval),!r.worktreePath){let a=o&&Ui(co({persistedHarness:r.harness,backendRef:r.backendRef}));return{originalWorkdir:i,canCreateManagedWorktreeForResumeWithoutPersistedPath:a}}if(!r.worktreeBranch)throw new Error(`Cannot resume session "${n}": persisted worktree metadata is missing worktreeBranch.`);let s=Ui(co({persistedHarness:r.harness,backendRef:r.backendRef}))&&!!r.backendRef?.worktreePath;if(Hb(r.worktreePath))return console.info(`[SessionManager] Resuming with existing worktree: ${r.worktreePath}`),{actualWorkdir:r.worktreePath,originalWorkdir:i??r.worktreePath,worktreePath:r.worktreePath,worktreeBranchName:r.worktreeBranch};if(!i)return console.warn(`[SessionManager] Worktree ${r.worktreePath} no longer exists and cannot be recreated, using original workdir`),{clearedResumeSessionId:!!t.resumeSessionId,clearedResumeWorktreeFrom:!!t.resumeWorktreeFrom};if(s)return console.info(`[SessionManager] Native Codex worktree ${r.worktreePath} is missing; resuming from original workdir and letting the backend restore thread state.`),{actualWorkdir:i,originalWorkdir:i,worktreeBranchName:r.worktreeBranch,clearedResumeWorktreeFrom:!!t.resumeWorktreeFrom,restoredMissingNativeBackendWorktree:!0};try{ss(i);let a=Pl(i,r.worktreeBranch.replace(/^agent\//,""),{allowExistingBranch:!0});return console.info(`[SessionManager] Recreated worktree from branch ${r.worktreeBranch}: ${a}`),{actualWorkdir:a,originalWorkdir:i,worktreePath:a,worktreeBranchName:r.worktreeBranch}}catch(a){return console.warn(`[SessionManager] Failed to recreate worktree for resume: ${ch(a)}, using original workdir`),{actualWorkdir:i,originalWorkdir:i,clearedResumeSessionId:!!t.resumeSessionId,clearedResumeWorktreeFrom:!!t.resumeWorktreeFrom}}}function mh(t,e,n){let{actualWorkdir:r,originalWorkdir:o,worktreePath:i,worktreeBranchName:s,clearedResumeSessionId:a,clearedResumeWorktreeFrom:d,restoredMissingNativeBackendWorktree:l,canCreateManagedWorktreeForResumeWithoutPersistedPath:u}=Jb(t,n);a&&(t.resumeSessionId=void 0),d&&(t.resumeWorktreeFrom=void 0),r??=t.workdir,o??=t.workdir;let c=!!(t.resumeSessionId??t.resumeWorktreeFrom),g=t.worktreeStrategy??E.defaultWorktreeStrategy;g&&(t.worktreeStrategy=g);let S=zb(t),I=(!c||!!u)&&!l&&!i&&g&&g!=="off"&&!S;if(S&&!kl(o))throw new Error(`Cannot launch session "${e}": worktree strategy "${g}" requires a git worktree, but "${o}" is not a git repository.`);if(I&&kl(o)){if(!tg(o))throw new Error(`Cannot launch session "${e}": insufficient space for worktree creation.`);try{if(i=Pl(o,e),r=i,s=is(i),!s)throw new Error(`created worktree at ${i} but failed to resolve branch name`);console.log(`[SessionManager] Created worktree at ${i}`)}catch(P){throw new Error(`Cannot launch session "${e}": worktree creation failed: ${ch(P)}`)}}else if(I)throw new Error(`Cannot launch session "${e}": worktree strategy "${g}" requires a git worktree, but "${o}" is not a git repository.`);return c&&i&&(r=i),{actualWorkdir:r,originalWorkdir:o,effectiveSystemPrompt:i&&s?Qb(t.systemPrompt,o,i,s):t.systemPrompt,worktreePath:i,worktreeBranchName:s,clearedResumeSessionId:a,clearedResumeWorktreeFrom:d,restoredMissingNativeBackendWorktree:l}}var Es=class{constructor(e){this.getPersistedSession=e}getPersistedSession;prepareSpawn(e,n){return mh(e,n,this.getPersistedSession)}hydrateSpawnedSession(e,n,r){r.worktreeStrategy&&r.worktreeStrategy!=="off"&&(e.originalWorkdir=n.originalWorkdir),n.worktreePath&&(e.worktreePath=n.worktreePath,e.worktreeBranch=n.worktreeBranchName,e.worktreeState="provisioned"),r.worktreePrTargetRepo&&(e.worktreePrTargetRepo=r.worktreePrTargetRepo)}};he();var $s=class{constructor(e){this.deps=e}deps;applySessionPatch(e,n){let r=this.deps.store.getPersistedSession(e);r&&(Object.assign(r,n),this.deps.store.assertPersistedEntry(r));let o=this.findActiveSessionForRef(e,r);return o&&this.applyPatchToActiveSession(o,n),!r&&!o?!1:(r&&this.deps.store.saveIndex(),!0)}matchesExistingSession(e,n){if(!n)return!1;let r=_(e),o=_(n);return!!(n.sessionId&&e.id===n.sessionId||o&&o===r||n?.harnessSessionId&&e.harnessSessionId===n.harnessSessionId||n?.name&&e.name===n.name)}findActiveSessionForRef(e,n){let r=this.deps.resolveSession(e);if(r)return r;for(let o of this.deps.sessions.values())if(ne(o)===e||_(o)===e||o.harnessSessionId===e||this.matchesExistingSession(o,n))return o}applyPatchToActiveSession(e,n){this.applyControlStatePatch(e,n),this.applySessionMetadataPatch(e,n),this.applyWorktreeMetadataPatch(e,n)}applyControlStatePatch(e,n){let r={lifecycle:n.lifecycle,approvalState:n.approvalState,approvalExecutionState:n.approvalExecutionState,worktreeState:n.worktreeState,runtimeState:n.runtimeState,deliveryState:n.deliveryState,requestedPermissionMode:n.requestedPermissionMode,currentPermissionMode:n.currentPermissionMode,pendingPlanApproval:n.pendingPlanApproval,planApprovalContext:n.planApprovalContext,planDecisionVersion:n.planDecisionVersion,actionablePlanDecisionVersion:n.actionablePlanDecisionVersion,canonicalPlanPromptVersion:n.canonicalPlanPromptVersion,approvalPromptRequiredVersion:n.approvalPromptRequiredVersion,approvalPromptVersion:n.approvalPromptVersion,approvalPromptStatus:n.approvalPromptStatus,approvalPromptTransport:n.approvalPromptTransport,approvalPromptMessageKind:n.approvalPromptMessageKind,approvalPromptLastAttemptAt:n.approvalPromptLastAttemptAt,approvalPromptDeliveredAt:n.approvalPromptDeliveredAt,approvalPromptFailedAt:n.approvalPromptFailedAt,planModeApproved:n.planModeApproved,pendingWorktreeDecisionSince:n.pendingWorktreeDecisionSince};if(typeof e.applyControlPatch=="function"){e.applyControlPatch(r);return}this.assignIfDefined(e,"lifecycle",n.lifecycle),this.assignIfDefined(e,"approvalState",n.approvalState),this.assignIfDefined(e,"approvalExecutionState",n.approvalExecutionState),this.assignIfDefined(e,"worktreeState",n.worktreeState),this.assignIfDefined(e,"runtimeState",n.runtimeState),this.assignIfDefined(e,"deliveryState",n.deliveryState),this.assignIfDefined(e,"requestedPermissionMode",n.requestedPermissionMode),this.assignIfDefined(e,"currentPermissionMode",n.currentPermissionMode),this.assignIfDefined(e,"pendingPlanApproval",n.pendingPlanApproval),this.assignIfDefined(e,"planApprovalContext",n.planApprovalContext),this.assignIfDefined(e,"planDecisionVersion",n.planDecisionVersion),this.assignIfDefined(e,"actionablePlanDecisionVersion",n.actionablePlanDecisionVersion),this.assignIfDefined(e,"canonicalPlanPromptVersion",n.canonicalPlanPromptVersion),this.assignIfDefined(e,"approvalPromptRequiredVersion",n.approvalPromptRequiredVersion),this.assignIfDefined(e,"approvalPromptVersion",n.approvalPromptVersion),this.assignIfDefined(e,"approvalPromptStatus",n.approvalPromptStatus),this.assignIfDefined(e,"approvalPromptTransport",n.approvalPromptTransport),this.assignIfDefined(e,"approvalPromptMessageKind",n.approvalPromptMessageKind),this.assignIfDefined(e,"approvalPromptLastAttemptAt",n.approvalPromptLastAttemptAt),this.assignIfDefined(e,"approvalPromptDeliveredAt",n.approvalPromptDeliveredAt),this.assignIfDefined(e,"approvalPromptFailedAt",n.approvalPromptFailedAt),this.setControlFieldIfDefined(e,"planModeApproved",n.planModeApproved)}applySessionMetadataPatch(e,n){this.assignIfDefined(e,"approvalRationale",n.approvalRationale)}applyWorktreeMetadataPatch(e,n){this.assignIfDefined(e,"worktreePath",n.worktreePath),this.assignIfDefined(e,"worktreeBranch",n.worktreeBranch),this.assignIfDefined(e,"worktreePrUrl",n.worktreePrUrl),this.assignIfDefined(e,"worktreePrNumber",n.worktreePrNumber),this.assignIfDefined(e,"worktreeMerged",n.worktreeMerged),this.assignIfDefined(e,"worktreeMergedAt",n.worktreeMergedAt),this.assignIfDefined(e,"worktreeDisposition",n.worktreeDisposition),this.assignIfDefined(e,"worktreePrTargetRepo",n.worktreePrTargetRepo),this.assignIfDefined(e,"worktreePushRemote",n.worktreePushRemote),this.assignIfDefined(e,"worktreeLifecycle",n.worktreeLifecycle),"autoMergeParentSessionId"in n&&(e.autoMergeParentSessionId=n.autoMergeParentSessionId),"autoMergeConflictResolutionAttemptCount"in n&&(e.autoMergeConflictResolutionAttemptCount=n.autoMergeConflictResolutionAttemptCount),"autoMergeResolverSessionId"in n&&(e.autoMergeResolverSessionId=n.autoMergeResolverSessionId)}assignIfDefined(e,n,r){r!==void 0&&(e[n]=r)}setControlFieldIfDefined(e,n,r){r!==void 0&&e.setControlField?.(n,r)}};he();var Yb=new Set(["starting","running"]),Os=class{constructor(e,n){this.sessions=e;this.store=n}sessions;store;resolveActive(e){let n=this.sessions.get(e);return n||(this.findPreferredMatch(e,r=>r.name===e)??this.findPreferredMatch(e,r=>_(r)===e)??this.findPreferredMatch(e,r=>r.harnessSessionId===e))}getPersistedSession(e){return this.store.getPersistedSession(e)}resolveBackendConversationId(e){let n=this.resolveActive(e);return this.store.resolveBackendConversationId(e,n?_(n)??n.harnessSessionId:void 0)}findPreferredMatch(e,n){let r,o;for(let i of this.sessions.values())n(i,e)&&((!o||i.startedAt>o.startedAt)&&(o=i),Yb.has(i.status)&&(!r||i.startedAt>r.startedAt)&&(r=i));return r??o}};he();he();rt();var Ds=class{constructor(e){this.deps=e}deps;async plan(e){let n=ne(e)??e.harnessSessionId;if(this.deps.isAlreadyMerged(n))return console.info(`[SessionManager] handleWorktreeStrategy: session "${e.name}" already merged \u2014 skipping strategy handling`),{kind:"skip",result:{notificationSent:!0,worktreeRemoved:!1}};if(e.status!=="completed")return{kind:"skip",result:{notificationSent:!1,worktreeRemoved:!1}};if(!this.deps.shouldRunWorktreeStrategy(e))return console.info(`[SessionManager] handleWorktreeStrategy: skipping \u2014 session "${e.name}" is in phase "${e.phase}"`),{kind:"skip",result:{notificationSent:!1,worktreeRemoved:!1}};let r=e.worktreeStrategy;if(!r||r==="off"||r==="manual")return{kind:"skip",result:{notificationSent:!1,worktreeRemoved:!1}};let o=e.worktreePath,i=this.deps.resolveWorktreeRepoDir(e.originalWorkdir,o),s=e.worktreeBranch;if(!i)return{kind:"notify",label:"worktree-missing-repo-dir",message:`\u26A0\uFE0F [${e.name}] Cannot determine the original repo for worktree ${o}. Manual inspection is required.`};if(!s)return{kind:"notify",label:"worktree-no-branch-name",message:`\u26A0\uFE0F [${e.name}] Cannot determine branch name for worktree ${o}. The worktree may have been removed or is in detached HEAD state. Manual cleanup may be needed.`};let a=e.worktreeBaseBranch??pn(i),d=this.deps.getWorktreeCompletionState(i,o,s,a);if(d==="no-change")return{kind:"no-change",repoDir:i,worktreePath:o,nativeBackendWorktree:We(e)};if(d==="base-advanced")return{kind:"notify",label:"worktree-no-commits-ahead",message:`\u26A0\uFE0F [${e.name}] Auto-merge: branch '${s}' has no commits ahead of '${a}', but '${a}' has new commits \u2014 commits likely landed outside the worktree branch. Verify that commits were not made directly to '${a}' instead of the worktree branch. Worktree: ${o}`};if(d==="dirty-uncommitted")return{kind:"dirty-uncommitted",worktreePath:o,branchName:s,baseBranch:a};let l=Nn(i,s,a);return l?{kind:"decision",strategy:r,repoDir:i,worktreePath:o,branchName:s,baseBranch:a,diffSummary:l,sessionRef:n??void 0}:(console.warn(`[SessionManager] Failed to get diff summary for ${s}, skipping merge-back`),{kind:"skip",result:{notificationSent:!1,worktreeRemoved:!1}})}};function Ul(t,e){return{...e,baseBranch:e.baseBranch??t.worktreeBaseBranch,targetRepo:e.targetRepo??t.worktreePrTargetRepo,pushRemote:e.pushRemote??t.worktreePushRemote}}function Ns(t,e={}){let n=e.updatedAt??new Date().toISOString(),r={pendingWorktreeDecisionSince:e.pendingSince??n,lastWorktreeReminderAt:void 0,lifecycle:"awaiting_worktree_decision",worktreeState:"pending_decision",worktreeLifecycle:Ul(t,{state:"pending_decision",updatedAt:n,notes:e.notes})};return e.clearResolverSessionId&&(r.autoMergeResolverSessionId=void 0),r}function fh(t,e,n,r={}){let o=r.updatedAt??new Date().toISOString();return{autoMergeConflictResolutionAttemptCount:n,autoMergeResolverSessionId:e,pendingWorktreeDecisionSince:void 0,lastWorktreeReminderAt:void 0,lifecycle:"terminal",worktreeState:"merge_conflict_resolving",worktreeLifecycle:Ul(t,{state:"merge_conflict_resolving",updatedAt:o,notes:r.notes})}}function gh(t,e={}){let n=e.updatedAt??new Date().toISOString(),r=e.resolvedAt??n,o={worktreeMerged:!0,worktreeMergedAt:e.mergedAt??r,lifecycle:"terminal",worktreeState:"merged",pendingWorktreeDecisionSince:void 0,lastWorktreeReminderAt:void 0,worktreeLifecycle:Ul(t,{state:"merged",updatedAt:n,resolvedAt:r,resolutionSource:e.resolutionSource??"agent_merge"})};return e.clearResolverSessionId&&(o.autoMergeResolverSessionId=void 0),o}function Xb(t){if(t.requestedPermissionMode==="plan"){if(t.approvalExecutionState==="approved_then_implemented"){if(t.planApproval==="ask"&&t.approvalPromptStatus==="delivered"&&t.approvalPromptMessageKind==="canonical_buttons"&&t.approvalPromptDeliveredAt)return"Approval interpretation: canonical Approve/Revise/Reject buttons were delivered, and implementation after approval was expected.";if(t.approvalState==="approved")return"Approval interpretation: explicit plan approval was recorded before implementation, so leaving plan-only mode was expected."}if(t.approvalExecutionState==="implemented_without_required_approval")return"Approval interpretation: implementation left plan-only mode without a recorded approval."}}function Fs(t){let e=Xb(t);return[`Requested permission mode: ${t.requestedPermissionMode??"unknown"}`,`Effective permission mode: ${t.currentPermissionMode??"unknown"}`,`Deterministic approval/execution state: ${t.approvalExecutionState??"unknown"}`,...e?[e]:[]]}function xo(t){switch(t){case"user":return"Stopped by user";case"shutdown":return"Stopped by shutdown";case"startup-timeout":return"Stopped by startup timeout";case"unknown":case void 0:return"Stopped unexpectedly";default:return"Stopped"}}function Zb(){return{requiresShortFactualSummary:!0,owner:"agent",appliesToOrdinaryTerminalCompletions:!0}}function ex(){return{requiresShortFactualSummary:!0,owner:"agent",appliesToWorktreeTerminalOutcomes:!0}}function Kl(t){let{sessionId:e,canonicalStatusDetail:n,canonicalStatusDelivered:r=!0,hasOriginRouteBlock:o=!1}=t,i=o?["6. Before sending that follow-up, honor the Session origin route block above. If originRoute differs from the current chat, do NOT use a plain final assistant reply; use a routed send path that preserves provider/target/threadId."]:[],s=o?7:6,a=o?8:7;return["[ACTION REQUIRED] Follow your autonomy rules for session completion:",`1. Use agent_output(session='${e}', full=true) to read the full result.`,"2. If this is part of a multi-phase pipeline, launch the next phase NOW \u2014 do not wait for user input.",`3. ${n??(r?"The plugin already sent the canonical completion status to the user.":"The plugin did not confirm delivery of the canonical completion status to the user.")}`,"4. Unless you are silently continuing an internal multi-phase pipeline or there is still no meaningful confirmed outcome to report, you must send the user a short factual completion summary for this completed session.","5. This requirement applies to ordinary terminal/manual completions too, not just delegated worktree decisions.",...i,`${s}. That follow-up belongs to you alone; keep it brief, concrete, and grounded in reliable result data.`,...r?[`${a}. Do NOT repeat the plugin's status line, and do NOT rely on the plugin to summarize the completed work for you.`]:[`${a}. Because canonical status delivery was not confirmed, account for that gap yourself when you follow up; do NOT assume the plugin already reached the user.`]]}function tx(t){let{contract:e,canonicalStatusDelivered:n}=t;return["Completion diagnostics:",`- Canonical completion status delivered to user: ${n?"yes":"no"}`,`- Plugin requested short factual follow-up summary: ${e.requiresShortFactualSummary?"yes":"no"}`,`- Contract applies to ordinary terminal/manual completions: ${e.appliesToOrdinaryTerminalCompletions?"yes":"no"}`]}function Vl(t){let{session:e,originThreadLine:n,preview:r}=t,o=!!n.trim(),i=`$${(e.costUsd??0).toFixed(2)}`,s=Rt(e.duration),a=Zb(),d=l=>["Coding agent session completed.",`Name: ${e.name} | ID: ${e.id}`,`Status: ${e.status}`,...o?[n]:[],...Fs(e),"","Output preview:",r,"",...tx({contract:a,canonicalStatusDelivered:l}),"",...Kl({sessionId:e.id,canonicalStatusDelivered:l,hasOriginRouteBlock:o})].join(`
152
- `);return{userMessage:`\u2705 [${e.name}] Completed | ${i} | ${s}`,wakeMessageOnNotifySuccess:d(!0),wakeMessageOnNotifyFailed:d(!1),followupContract:a}}function Ir(t){let e=ex(),n=!!t.originThreadLine.trim(),r=(t.detailLines??[]).map(o=>o.trim()).filter(o=>o.length>0);return["Worktree follow-through outcome recorded.",`Name: ${t.sessionName??"unknown"} | ID: ${t.sessionId}`,...n?[t.originThreadLine]:[],"","Canonical outcome status:",t.outcomeLine,...r.length>0?["","Outcome details:",...r.map(o=>`- ${o}`)]:[],"","Completion diagnostics:",`- Canonical worktree status delivered to user: ${t.canonicalStatusDelivered?"yes":"no"}`,`- Plugin requested short factual follow-up summary: ${e.requiresShortFactualSummary?"yes":"no"}`,`- Contract applies to worktree terminal outcomes: ${e.appliesToWorktreeTerminalOutcomes?"yes":"no"}`,"","[ACTION REQUIRED] Follow your autonomy rules for worktree follow-through:",`1. Use agent_output(session='${t.sessionId}', full=true) to read the full result if output is available.`,"2. Send the user one short factual outcome summary grounded in the full output plus the canonical outcome status above.","3. If full output is unavailable or not meaningful, say only what is proven by the merge/PR facts above; do not invent task details.","4. Mention blockers such as push failure when present; do not describe a local-only merge as pushed.",...n?["5. Before sending that follow-up, honor the Session origin route block above. If originRoute differs from the current chat, do NOT use a plain final assistant reply; use a routed send path that preserves provider/target/threadId."]:[],`${n?6:5}. Do NOT repeat only the plugin status line; keep the follow-up brief, concrete, and non-duplicative.`].join(`
153
- `)}function ql(t){let{session:e,originThreadLine:n,errorSummary:r,preview:o,worktreeAutoCleaned:i,failedButtons:s}=t,a=o.trim()?["","Output preview:",o]:[],d=i?["","Note: Worktree and branch were auto-removed (zero cost, startup failure)."]:[],l=`$${(e.costUsd??0).toFixed(2)}`,u=Rt(e.duration);return{userMessage:[`\u274C [${e.name}] Failed | ${l} | ${u}`,` \u26A0\uFE0F ${r}`].join(`
154
- `),wakeMessage:["Coding agent session failed.",`Name: ${e.name} | ID: ${e.id}`,`Status: ${e.status}`,n,...Fs(e),...e.harnessSessionId?[`Backend conversation ID: ${e.harnessSessionId}`]:[],"","Failure summary:",r,...a,...d,"","[ACTION REQUIRED] Follow your autonomy rules for session failure:",`1. Use agent_output(session='${e.id}', full=true) to inspect the full failure context.`,`2. Continue the same session with agent_respond(session='${e.id}', message='<next instruction>').`,` If you intentionally want to fork or switch harnesses, launch a new session with agent_launch(resume_session_id='${e.id}', fork_session=true, ...)`," If the failure is a launch/config issue, relaunch fresh with agent_launch(prompt=...).","3. Notify the user with the failure cause and the next action you are taking."].join(`
155
- `),buttons:s}}function jl(t){let{session:e,originThreadLine:n,preview:r}=t,o=`$${(e.costUsd??0).toFixed(2)}`;return{userMessage:`\u23F8\uFE0F [${e.name}] Turn completed | ${o}`,wakeMessage:["Coding agent session turn ended.",`Name: ${e.name}`,`ID: ${e.id}`,`Status: ${e.status}`,`Lifecycle: ${e.lifecycle}`,"","Last output (~20 lines):",r,...n?["",n]:[]].join(`
156
- `)}}function Gl(t){let{sessionName:e,sessionId:n,branchName:r,baseBranch:o,promptSnippet:i,commitLines:s,moreNote:a,originThreadLine:d,diffSummary:l}=t,u=!!d?.trim();return[`[DELEGATED WORKTREE DECISION] Session "${e}" completed with changes.`,"",`Session ID: ${n}`,`Branch: ${r} \u2192 ${o}`,`Commits: ${l.commits} | Files: ${l.filesChanged} | +${l.insertions} / -${l.deletions}`,...u?[d]:[],"",...s,...a?[a]:[],"","Original task prompt (first 500 chars):",i,"","You own the next step for this worktree.",`- Merge immediately with agent_merge(session="${e}", base_branch="${o}") if the changes are clearly in-scope and low-risk.`,"- If a PR is safer, message the user with the summary and ask for confirmation before calling agent_pr().","- If scope or risk is unclear, message the user and ask for guidance.","- Never call agent_pr() autonomously in delegate mode.","- After deciding, notify the user briefly with what you did and why.",...u?["- Send any human follow-up to the Session origin route above; if it differs from the current chat, do not use a plain final assistant reply."]:[]].join(`
157
- `)}function Hl(t,e){return[`[DELEGATED WORKTREE DECISION REMINDER] Session "${t.name}" still has an unresolved worktree decision.`,"",`Session ID: ${t.sessionId??t.harnessSessionId}`,`Branch: ${t.worktreeBranch??"unknown"}`,`Pending: ${e}h`,"","Resolve it now:",`- agent_merge(session="${t.name}") if the diff is clearly safe and in scope`,"- If a PR is safer, ask the user before agent_pr()","- If scope or risk is unclear, ask the user for guidance","- Never call agent_pr() autonomously in delegate mode"].join(`
158
- `)}function zl(t){let{sessionName:e,sessionId:n,cleanupSummary:r,preview:o,originThreadLine:i,requestedPermissionMode:s,currentPermissionMode:a,approvalExecutionState:d,approvalState:l,planApproval:u,approvalPromptStatus:c,approvalPromptMessageKind:g,approvalPromptDeliveredAt:S}=t,k=o.trim()?["","Output preview:",o]:[],I=!!i?.trim();return["Coding agent session completed with no repository changes.",`Name: ${e} | ID: ${n}`,`Worktree outcome: ${r}`,...I?[i]:[],...Fs({requestedPermissionMode:s,currentPermissionMode:a,approvalExecutionState:d,approvalState:l,planApproval:u,approvalPromptStatus:c,approvalPromptMessageKind:g,approvalPromptDeliveredAt:S}),...k,"",...Kl({sessionId:n,canonicalStatusDetail:"The plugin already sent the canonical completion status to the user, including that no repo changes were kept.",hasOriginRouteBlock:I})].join(`
159
- `)}function Ql(t){let e=[],n=t.changedFiles.slice(0,3).map(o=>`\`${o}\``);if(n.length>0){let o=t.changedFiles.length-n.length;e.push(o>0?`Touches ${n.join(", ")} and ${o} more file${o===1?"":"s"}`:`Touches ${n.join(", ")}`)}let r=[...new Set(t.commitMessages.map(o=>o.message.trim()).filter(Boolean))].slice(0,2);return r.length>0&&e.push(`Recent work: ${r.join("; ")}`),e}var Sh=3200,Jl=3e3,nx=2400,rx=120,ox=5,ix=280,hh=1400,yh="- Additional plan details omitted for brevity.";function kh(t){return t.replace(/^#{1,6}\s+/,"").replace(/^[-*+]\s+/,"").replace(/^\d+[.)]\s+/,"").replace(/^`([^`]+)`$/,"$1").trim()}function sx(t){return t.split(`
160
- `).map(e=>e.trim()).filter(Boolean).map(kh).map(e=>Me(e,220)).filter(e=>e.length>0).filter(e=>!/^(plan|proposed plan|implementation plan|review summary|full plan)[:]?$/i.test(e)).filter(e=>!/^(should|can|could|would|will)\b.*\?$/i.test(e)).filter(e=>!/^(thinking|checking|considering|analyzing)\b/i.test(e))}function ax(t){return t.split(`
161
- `).map(e=>e.trim()).filter(Boolean).map(kh).filter(e=>e.length>0).filter(e=>!/^(plan|proposed plan|implementation plan|review summary|summary|why this was escalated|full plan)[:]?$/i.test(e)).filter(e=>!/^(should|can|could|would|will)\b.*\?$/i.test(e)).filter(e=>!/^(thinking|checking|considering|analyzing)\b/i.test(e))}function Yl(t){let e=sx(t);return e.length===0?`Review summary:
162
- - Plan details are available in the full session output.`:["Review summary:",...e.slice(0,6).map(n=>`- ${n}`)].join(`
163
- `)}function dx(t){let e=[],n=!1;for(let o of t){let i=o.replace(/\s+/g," ").trim();if(!i)continue;let s=Me(i,ix);s.length<i.length&&(n=!0);let a=`- ${s}`;if(e.length>=ox||[...e,a].join(`
164
- `).length>hh){n=!0;break}e.push(a)}if(e.length===0)return["- Plan details are available in the full session output."];if(!n)return e;let r=[...e];for(;r.length>0&&[...r,yh].join(`
165
- `).length>hh;)r.pop();return[...r,yh]}function Xl(t){return dx(ax(t)).join(`
166
- `)}function lx(t,e){let n=[],r=t.trim();for(;r.length>e;){let o=r.lastIndexOf(" ",e);o<Math.floor(e*.6)&&(o=e),n.push(r.slice(0,o).trimEnd()),r=r.slice(o).trimStart()}return r.length>0&&n.push(r),n}function ux(t,e){let n=t.split(`
167
- `),r=[],o="",i=()=>{o.trim().length>0&&(r.push(o.trimEnd()),o="")};for(let s of n){if(s.length>e){i();for(let d of lx(s,e))r.push(d);continue}let a=o.length>0?`${o}
168
- ${s}`:s;if(a.length>e){i(),o=s;continue}o=a}return i(),r}function vh(t){return Me(t.trim(),rx)}function Ph(t,e){return e?t?`
133
+ ${Go(i.goal,500)}`,"goal-task-started"),i}stopTask(e){let r=this.store.get(e);if(r)return hA(r.status)?{task:r,action:"already_terminal"}:(r.sessionId&&this.sessionManager.kill(r.sessionId,"user"),this.markTaskStopped(r,"Stopped by user."),{task:r,action:"stopped"})}async spawnTaskSession(e,r){return this.spawnManagedTaskSession(e,r)}async spawnManagedTaskSession(e,r,n){let o=n?this.sessionManager.resolveHarnessSessionId(n)??n:void 0,i=n?this.sessionManager.resolve(n):void 0,a=o?this.sessionManager.getPersistedSession(o)??this.sessionManager.getPersistedSession(n??o):void 0,{resumeSessionId:u}=_n({requestedResumeSessionId:o,activeSession:i?{harnessSessionId:i.harnessSessionId}:void 0,persistedSession:a?{harness:a.harness,backendRef:a.backendRef}:void 0}),p={prompt:r,name:e.name,workdir:e.workdir,model:e.model,reasoningEffort:e.reasoningEffort,fastMode:e.fastMode,systemPrompt:e.systemPrompt,allowedTools:e.allowedTools,originChannel:e.originChannel,originThreadId:e.originThreadId,originAgentId:e.originAgentId,originSessionKey:e.originSessionKey,route:aA(e),permissionMode:e.permissionMode,multiTurn:!0,goalTaskId:e.id,harness:e.harness,resumeSessionId:u,resumeWorktreeFrom:o,worktreeStrategy:"off"};return this.sessionManager.spawnAndAwaitRunning(p,{notifyLaunch:!1})}async resumeTaskSession(e,r,n){if(!n.harnessSessionId){let i=await this.spawnTaskSession(e,["The previous session ended without a resumable harness session id.","Continue working on the same goal.","",r].join(`
134
+ `));return this.attachSessionObservers(e,i),i}let o=await this.spawnManagedTaskSession(e,r,n.harnessSessionId);return this.attachSessionObservers(e,o),o}resolveResumeSessionId(e){if(e.harnessSessionId)return e.harnessSessionId;if(e.sessionId){let n=this.sessionManager.resolveHarnessSessionId(e.sessionId);if(n)return n}let r=this.sessionManager.resolveHarnessSessionId(e.name);if(r)return r}captureRecoverableTasks(){for(let e of this.store.list()){if(e.status!=="running"&&e.status!=="waiting_for_session")continue;let r=e.sessionId?this.sessionManager.resolve(e.sessionId):void 0;r&&(e.sessionId=r.id,e.sessionName=r.name,e.harnessSessionId=r.harnessSessionId??e.harnessSessionId,e.route=r.route??e.route,e.updatedAt=Date.now(),e.status="waiting_for_session",this.store.upsert(e))}}async restoreRecoverableTasks(){for(let e of this.store.list()){if(!this.started)break;if(e.status==="waiting_for_user"){this.markTaskFailed(e,"Goal task was waiting for user input and cannot continue autonomously");continue}if(e.status!=="waiting_for_session"&&e.status!=="running")continue;if(Cf(e)){this.markTaskFailed(e,Ls());continue}if(e.sessionId){let n=this.sessionManager.resolve(e.sessionId);if(n&&(n.status==="starting"||n.status==="running"))continue}let r=this.resolveResumeSessionId(e);if(!r){this.markTaskFailed(e,"Goal task could not be resumed after gateway restart because no resumable session id was available.");continue}try{let n=await this.spawnManagedTaskSession(e,Mf(e),r);if(!this.started){e.sessionId=n.id,e.sessionName=n.name,e.harnessSessionId=n.harnessSessionId??r,e.route=n.route??e.route,e.status="waiting_for_session",e.updatedAt=Date.now(),this.store.upsert(e),this.sessionManager.kill(n.id,"shutdown");break}this.attachSessionObservers(e,n),e.sessionId=n.id,e.sessionName=n.name,e.harnessSessionId=n.harnessSessionId??r,e.route=n.route??e.route,e.status="running",e.updatedAt=Date.now(),this.store.upsert(e),this.notifyIterationStatus(e,`\u{1F504} [${e.name}] Goal task resumed after gateway restart`,n),this.scheduleTaskEvaluation(e.id,"restore",n.id)}catch(n){this.markTaskFailed(e,`Failed to resume the goal task after gateway restart: ${ln(n)}`)}}}async runVerifiers(e){let r=Rp(e.verifierCommands);if(r.length===0){let a={status:"fail",steps:[{label:"verifier-config",command:"(none configured)",ok:!1,exitCode:1,durationMs:0,output:Ls()}],summary:"",fingerprint:""};return a.fingerprint=Ef(a),a.summary=Of(a),a}let n=[];for(let a of r)n.push(await kA(e.workdir,a));let i={status:n.every(a=>a.ok)?"pass":"fail",steps:n,summary:"",fingerprint:""};return i.fingerprint=Ef(i),i.summary=Of(i),i}notify(e,r,n){this.sessionManager.emitGoalTaskUpdate(e,r,n)}notifyIterationStatus(e,r,n){let o=vr(n??(e.sessionId?this.sessionManager.resolve(e.sessionId):void 0)),i=`${r}
135
+
136
+ ${br(e,o)}`;this.notify(e,i,"goal-task-progress")}setTaskRunningWithSession(e,r){e.sessionId=r.id,e.sessionName=r.name,e.harnessSessionId=r.harnessSessionId,e.route=r.route??e.route,e.status="running",e.waitingForUserReason=void 0,e.updatedAt=Date.now(),this.store.upsert(e)}attachSessionObservers(e,r){if(this.observerDisposers.has(r.id))return;let n=(i,a)=>{(a==="completed"||a==="failed"||a==="killed")&&(this.removeSessionObserver(r.id),this.scheduleTaskEvaluation(e.id,`status:${a}`,r.id))},o=()=>{let i=this.store.get(e.id);i&&(i.sessionId=r.id,i.sessionName=r.name,i.harnessSessionId=r.harnessSessionId,i.route=r.route??i.route,i.updatedAt=Date.now(),i.status==="waiting_for_session"&&(i.status="running"),this.store.upsert(i),this.notifyIterationStatus(i,`\u{1F504} [${i.name}] Coding turn complete`,r),this.scheduleTaskEvaluation(e.id,"turnEnd",r.id))};r.on("statusChange",n),r.on("turnEnd",o),this.observerDisposers.set(r.id,()=>{r.off?.("statusChange",n),r.off?.("turnEnd",o),r.removeListener?.("statusChange",n),r.removeListener?.("turnEnd",o)})}scheduleTaskEvaluation(e,r,n){if(!this.started)return;let o=this.scheduledEvaluations.get(e);if(o){!o.sessionId&&n&&(o.sessionId=n);return}let i={timer:setTimeout(()=>{this.scheduledEvaluations.delete(e),this.evaluateTask(e,r,i.sessionId).catch(a=>{console.warn(`[GoalController] evaluateTask error (${r}): ${ln(a)}`)})},0),sessionId:n};i.timer.unref?.(),this.scheduledEvaluations.set(e,i)}clearScheduledEvaluations(){for(let e of this.scheduledEvaluations.values())clearTimeout(e.timer);this.scheduledEvaluations.clear(),this.dirtyEvaluations.clear(),this.dirtyEvaluationSessionIds.clear()}detachSessionObservers(){for(let e of[...this.observerDisposers.keys()])this.removeSessionObserver(e)}removeSessionObserver(e){let r=this.observerDisposers.get(e);r&&(this.observerDisposers.delete(e),r())}markTaskFailed(e,r){e.status="failed",e.failureReason=Go(r,Tp),e.updatedAt=Date.now(),this.store.upsert(e),this.notify(e,`\u274C [${e.name}] Goal task failed
137
+
138
+ ${e.failureReason}`,"goal-task-failed")}markTaskFailedWaitingForUser(e,r){this.markTaskFailed(e,`Goal task was waiting for user input and cannot continue autonomously: ${r}`)}markTaskSucceeded(e,r){e.status="succeeded",e.lastVerifierSummary=r,e.updatedAt=Date.now(),this.store.upsert(e),this.notify(e,`\u2705 [${e.name}] Goal task succeeded
139
+
140
+ ${r}`,"goal-task-succeeded")}markTaskStopped(e,r){e.status="stopped",e.failureReason=Go(r,Tp),e.updatedAt=Date.now(),this.store.upsert(e),this.notify(e,`\u26D4 [${e.name}] Goal task stopped
141
+
142
+ ${e.failureReason}`,"goal-task-stopped")}async handleRunningSession(e,r){if(r.pendingPlanApproval){let a=await Rt(this.sessionManager,{session:r.id,message:"Approved. Implement the plan.",approve:!0,userInitiated:!1});a.isError&&this.markTaskFailed(e,a.text);return}if(!r.pendingInputState){this.setTaskRunningWithSession(e,r);return}let n=r.getOutput(30).join(`
143
+ `),o=$f(n);if(!o){this.markTaskFailedWaitingForUser(e,Tr(n,24)||"The session is waiting for user input.");return}let i=await Rt(this.sessionManager,{session:r.id,message:o,userInitiated:!1});if(i.isError||i.text.includes("Auto-respond limit reached")){this.markTaskFailedWaitingForUser(e,i.text);return}e.status="running",e.waitingForUserReason=void 0,e.updatedAt=Date.now(),this.store.upsert(e)}async resumeAfterIdleTimeout(e,r,n){try{let o=await this.resumeTaskSession(e,n,r);this.setTaskRunningWithSession(e,o),this.notifyIterationStatus(e,`\u{1F504} [${e.name}] Goal task resumed after idle timeout`,o),this.scheduleTaskEvaluation(e.id,"idle-timeout-resume",o.id)}catch(o){this.markTaskFailed(e,`Failed to resume the goal task after idle timeout: ${ln(o)}`)}}async handleTerminalSession(e,r){if(r.status==="failed"){this.markTaskFailed(e,yA(r));return}if(r.status==="killed"&&r.killReason==="user"){this.markTaskStopped(e,"Stopped by user.");return}if(r.status==="killed"&&r.killReason==="idle-timeout"){let i=r.getOutput(60).join(`
144
+ `);if(r.pendingPlanApproval){let a=await Rt(this.sessionManager,{session:r.id,message:"Approved. Implement the plan.",approve:!0,userInitiated:!1});if(a.isError){this.markTaskFailed(e,a.text);return}let u=this.sessionManager.resolve(r.id);if(!u){this.markTaskFailed(e,"Failed to resolve the resumed goal task session after idle timeout plan approval.");return}this.attachSessionObservers(e,u),this.setTaskRunningWithSession(e,u),this.notifyIterationStatus(e,`\u{1F504} [${e.name}] Goal task resumed after idle timeout`,u),this.scheduleTaskEvaluation(e.id,"idle-timeout-plan-resume",u.id);return}if(r.pendingInputState){let a=$f(i);if(!a){this.markTaskFailed(e,`Goal task was waiting for user input and cannot continue autonomously: ${Tr(i,24)||"The goal task hit idle timeout while waiting for user input."}`);return}await this.resumeAfterIdleTimeout(e,r,["The previous session hit idle timeout while waiting for a response.",`Use this response and continue the goal: ${a}`].join(`
145
+
146
+ `));return}await this.resumeAfterIdleTimeout(e,r,Mf(e));return}if(r.status==="killed"&&r.killReason!=="done"){this.markTaskFailed(e,`Underlying session was killed (${r.killReason}).`);return}if(e.loopMode==="ralph"){let i=r.getOutput(200).join(`
147
+ `),a=Rf(e.completionPromise);if(gA(i,a)){if(e.verifierCommands.length===0){this.markTaskSucceeded(e,`Completion promise "${a}" detected in agent output.`);return}let l=await this.runVerifiers(e);if(e.lastVerifierSummary=l.summary,e.updatedAt=Date.now(),l.status==="pass"){this.markTaskSucceeded(e,[`Completion promise "${a}" detected.`,l.summary].join(`
148
+ `));return}if(e.lastVerifierFingerprint===l.fingerprint?e.repeatedFailureCount+=1:e.repeatedFailureCount=1,e.lastVerifierFingerprint=l.fingerprint,e.iteration+1>=e.maxIterations){this.markTaskFailed(e,[`Goal task emitted completion promise but verifiers still failed before hitting the iteration budget (${e.maxIterations}).`,l.summary].join(`
149
+ `));return}e.iteration+=1;let m=fA(e,l);try{let c=await this.resumeTaskSession(e,m,r);this.setTaskRunningWithSession(e,c),this.notifyIterationStatus(e,`\u{1F501} [${e.name}] Completion claimed but verifiers still failed`),this.scheduleTaskEvaluation(e.id,"ralph-verifier-resume",c.id)}catch(c){this.markTaskFailed(e,`Failed to resume the Ralph goal task after verifier failure: ${ln(c)}`)}return}let p=dA(i);if(e.lastVerifierFingerprint===p?e.repeatedFailureCount+=1:e.repeatedFailureCount=1,e.lastVerifierFingerprint=p,e.iteration+1>=e.maxIterations){this.markTaskFailed(e,[`Completion promise "${a}" was not emitted before hitting the iteration budget (${e.maxIterations}).`,"Latest output:",Tr(i,20)||"(no output)"].join(`
150
+ `));return}e.iteration+=1;let d=cA(e,i);try{let l=await this.resumeTaskSession(e,d,r);this.setTaskRunningWithSession(e,l),this.notifyIterationStatus(e,`\u{1F501} [${e.name}] Ralph iteration continued`),this.scheduleTaskEvaluation(e.id,"ralph-continue",l.id)}catch(l){this.markTaskFailed(e,`Failed to continue the Ralph goal task: ${ln(l)}`)}return}let n=await this.runVerifiers(e);if(e.lastVerifierSummary=n.summary,e.updatedAt=Date.now(),n.status==="pass"){this.markTaskSucceeded(e,n.summary);return}if(e.lastVerifierFingerprint===n.fingerprint?e.repeatedFailureCount+=1:e.repeatedFailureCount=1,e.lastVerifierFingerprint=n.fingerprint,e.iteration+1>=e.maxIterations){this.markTaskFailed(e,[`Verifier did not pass before hitting the iteration budget (${e.maxIterations}).`,n.summary].join(`
151
+ `));return}e.iteration+=1;let o=mA(e,n);try{let i=await this.resumeTaskSession(e,o,r);this.setTaskRunningWithSession(e,i),this.notifyIterationStatus(e,`\u{1F501} [${e.name}] Repair iteration started after verifier failure`),this.scheduleTaskEvaluation(e.id,"repair-resume",i.id)}catch(i){this.markTaskFailed(e,`Failed to resume the goal task: ${ln(i)}`)}}async evaluateTask(e,r,n){this.restorePromise&&await this.restorePromise;let o=this.store.get(e);o&&await this.reconcileTask(o,r,n)}async reconcileTask(e,r="manual",n){if(!(e.status==="succeeded"||e.status==="failed"||e.status==="stopped")){if(this.inFlight.has(e.id)){this.dirtyEvaluations.add(e.id),!this.dirtyEvaluationSessionIds.get(e.id)&&n?this.dirtyEvaluationSessionIds.set(e.id,n):this.dirtyEvaluationSessionIds.has(e.id)||this.dirtyEvaluationSessionIds.set(e.id,n);return}this.inFlight.add(e.id);try{if(n&&e.sessionId&&e.sessionId!==n){let i=this.sessionManager.resolve(n);if(i&&(i.status==="completed"||i.status==="failed"||i.status==="killed"))return}let o=n?this.sessionManager.resolve(n)??(e.sessionId?this.sessionManager.resolve(e.sessionId):void 0):e.sessionId?this.sessionManager.resolve(e.sessionId):void 0;if(e.status==="waiting_for_user"){this.markTaskFailed(e,"Goal task was waiting for user input and cannot continue autonomously");return}if(Cf(e)){this.markTaskFailed(e,Ls());return}if(!o){this.markTaskFailed(e,"Underlying session could not be found.");return}if(e.sessionName=o.name,e.harnessSessionId=o.harnessSessionId,e.route=o.route??e.route,e.updatedAt=Date.now(),this.store.upsert(e),o.status==="starting"||o.status==="running"){await this.handleRunningSession(e,o);return}await this.handleTerminalSession(e,o)}finally{if(this.inFlight.delete(e.id),this.dirtyEvaluations.has(e.id)){this.dirtyEvaluations.delete(e.id);let o=this.dirtyEvaluationSessionIds.get(e.id);this.dirtyEvaluationSessionIds.delete(e.id),this.scheduleTaskEvaluation(e.id,`${r}:dirty`,o)}}}}};ze();import{existsSync as IA,realpathSync as xA}from"fs";import{resolve as PA}from"path";function Ff(t){if(!t)return;let e=PA(t);try{if(IA(e))return xA.native(e)}catch{}return e}function qs(t,e){return!t||!e?!1:Ff(t)===Ff(e)}Ee();ze();import{existsSync as wA}from"fs";Ee();It();function Lf(t){return t instanceof Error?t.message:String(t)}function vA(t){let e=t.worktreeStrategy??j.defaultWorktreeStrategy;return!!e&&e!=="off"&&ep(Mo({harnessName:t.harness??dt(),backendRef:t.backendRef}))}function bA(t,e,r,n){let o=["","You are working in a git worktree.",`Worktree path: ${r}`,`Branch: ${n}`,"",`IMPORTANT: ALL file edits must be made within this worktree at ${r}.`,`Do NOT edit files directly in ${e} (the original workspace).`,`If your task references files by absolute path under ${e}, rewrite those`,"paths relative to your current working directory. For example:",` "${e}/src/file.py" \u2192 use relative path "src/file.py"`,"","Before finishing, run `git status --short` in this worktree.","If you made actual task changes, commit all of them to this branch before finishing.","Use `git add` and `git commit`. If no repository changes are needed, leave the worktree clean before finishing.","Do NOT run `git checkout`, `git switch`, or `git reset --hard` as these will detach or corrupt the worktree HEAD.","","When making changes, please note:","- Do NOT commit planning documents, investigation notes, or analysis artifacts to this branch","- Only commit actual code, configuration, tests, and documentation changes that were explicitly requested as part of the task"].join(`
152
+ `);return(t??"")+o}function AA(t,e){let r=t.resumeSessionId??t.resumeWorktreeFrom;if(!r)return{};let n=e(r);if(!n)return{};let o=!!n.harness||!!n.backendRef,i=(()=>{if(n.workdir&&n.workdir!==n.worktreePath)return n.workdir;if(n.worktreePath){let u=ds(n.worktreePath);return n.workdir&&u&&qs(n.workdir,u)?n.workdir:u??n.workdir}return n.workdir})();if(!t.worktreeStrategy&&n.worktreeStrategy&&(t.worktreeStrategy=n.worktreeStrategy),!t.planApproval&&n.planApproval&&(t.planApproval=n.planApproval),!n.worktreePath){let u=o&&Hi(Mo({persistedHarness:n.harness,backendRef:n.backendRef}));return{originalWorkdir:i,canCreateManagedWorktreeForResumeWithoutPersistedPath:u}}if(!n.worktreeBranch)throw new Error(`Cannot resume session "${r}": persisted worktree metadata is missing worktreeBranch.`);let a=Hi(Mo({persistedHarness:n.harness,backendRef:n.backendRef}))&&!!n.backendRef?.worktreePath;if(wA(n.worktreePath))return console.info(`[SessionManager] Resuming with existing worktree: ${n.worktreePath}`),{actualWorkdir:n.worktreePath,originalWorkdir:i??n.worktreePath,worktreePath:n.worktreePath,worktreeBranchName:n.worktreeBranch};if(!i)return console.warn(`[SessionManager] Worktree ${n.worktreePath} no longer exists and cannot be recreated, using original workdir`),{clearedResumeSessionId:!!t.resumeSessionId,clearedResumeWorktreeFrom:!!t.resumeWorktreeFrom};if(a)return console.info(`[SessionManager] Native Codex worktree ${n.worktreePath} is missing; resuming from original workdir and letting the backend restore thread state.`),{actualWorkdir:i,originalWorkdir:i,worktreeBranchName:n.worktreeBranch,clearedResumeWorktreeFrom:!!t.resumeWorktreeFrom,restoredMissingNativeBackendWorktree:!0};try{ms(i);let u=up(i,n.worktreeBranch.replace(/^agent\//,""),{allowExistingBranch:!0});return console.info(`[SessionManager] Recreated worktree from branch ${n.worktreeBranch}: ${u}`),{actualWorkdir:u,originalWorkdir:i,worktreePath:u,worktreeBranchName:n.worktreeBranch}}catch(u){return console.warn(`[SessionManager] Failed to recreate worktree for resume: ${Lf(u)}, using original workdir`),{actualWorkdir:i,originalWorkdir:i,clearedResumeSessionId:!!t.resumeSessionId,clearedResumeWorktreeFrom:!!t.resumeWorktreeFrom}}}function Nf(t,e,r){let{actualWorkdir:n,originalWorkdir:o,worktreePath:i,worktreeBranchName:a,clearedResumeSessionId:u,clearedResumeWorktreeFrom:p,restoredMissingNativeBackendWorktree:d,canCreateManagedWorktreeForResumeWithoutPersistedPath:l}=AA(t,r);u&&(t.resumeSessionId=void 0),p&&(t.resumeWorktreeFrom=void 0),n??=t.workdir,o??=t.workdir;let m=!!(t.resumeSessionId??t.resumeWorktreeFrom),c=t.worktreeStrategy??j.defaultWorktreeStrategy;c&&(t.worktreeStrategy=c);let h=vA(t),S=(!m||!!l)&&!d&&!i&&c&&c!=="off"&&!h;if(h&&!sp(o))throw new Error(`Cannot launch session "${e}": worktree strategy "${c}" requires a git worktree, but "${o}" is not a git repository.`);if(S&&sp(o)){if(!yc(o))throw new Error(`Cannot launch session "${e}": insufficient space for worktree creation.`);try{if(i=up(o,e),n=i,a=ls(i),!a)throw new Error(`created worktree at ${i} but failed to resolve branch name`);console.log(`[SessionManager] Created worktree at ${i}`)}catch(I){throw new Error(`Cannot launch session "${e}": worktree creation failed: ${Lf(I)}`)}}else if(S)throw new Error(`Cannot launch session "${e}": worktree strategy "${c}" requires a git worktree, but "${o}" is not a git repository.`);return m&&i&&(n=i),{actualWorkdir:n,originalWorkdir:o,effectiveSystemPrompt:i&&a?bA(t.systemPrompt,o,i,a):t.systemPrompt,worktreePath:i,worktreeBranchName:a,clearedResumeSessionId:u,clearedResumeWorktreeFrom:p,restoredMissingNativeBackendWorktree:d}}var Bs=class{constructor(e){this.getPersistedSession=e}getPersistedSession;prepareSpawn(e,r){return Nf(e,r,this.getPersistedSession)}hydrateSpawnedSession(e,r,n){n.worktreeStrategy&&n.worktreeStrategy!=="off"&&(e.originalWorkdir=r.originalWorkdir),r.worktreePath&&(e.worktreePath=r.worktreePath,e.worktreeBranch=r.worktreeBranchName,e.worktreeState="provisioned"),n.worktreePrTargetRepo&&(e.worktreePrTargetRepo=n.worktreePrTargetRepo)}};Ee();var Us=class{constructor(e){this.deps=e}deps;applySessionPatch(e,r){let n=this.deps.store.getPersistedSession(e);n&&(Object.assign(n,r),this.deps.store.assertPersistedEntry(n));let o=this.findActiveSessionForRef(e,n);return o&&this.applyPatchToActiveSession(o,r),!n&&!o?!1:(n&&this.deps.store.saveIndex(),!0)}matchesExistingSession(e,r){if(!r)return!1;let n=U(e),o=U(r);return!!(r.sessionId&&e.id===r.sessionId||o&&o===n||r?.harnessSessionId&&e.harnessSessionId===r.harnessSessionId||r?.name&&e.name===r.name)}findActiveSessionForRef(e,r){let n=this.deps.resolveSession(e);if(n)return n;for(let o of this.deps.sessions.values())if(Se(o)===e||U(o)===e||o.harnessSessionId===e||this.matchesExistingSession(o,r))return o}applyPatchToActiveSession(e,r){this.applyControlStatePatch(e,r),this.applySessionMetadataPatch(e,r),this.applyWorktreeMetadataPatch(e,r)}applyControlStatePatch(e,r){let n={lifecycle:r.lifecycle,approvalState:r.approvalState,approvalExecutionState:r.approvalExecutionState,worktreeState:r.worktreeState,runtimeState:r.runtimeState,deliveryState:r.deliveryState,requestedPermissionMode:r.requestedPermissionMode,currentPermissionMode:r.currentPermissionMode,pendingPlanApproval:r.pendingPlanApproval,planApprovalContext:r.planApprovalContext,planDecisionVersion:r.planDecisionVersion,actionablePlanDecisionVersion:r.actionablePlanDecisionVersion,canonicalPlanPromptVersion:r.canonicalPlanPromptVersion,approvalPromptRequiredVersion:r.approvalPromptRequiredVersion,approvalPromptVersion:r.approvalPromptVersion,approvalPromptStatus:r.approvalPromptStatus,approvalPromptTransport:r.approvalPromptTransport,approvalPromptMessageKind:r.approvalPromptMessageKind,approvalPromptLastAttemptAt:r.approvalPromptLastAttemptAt,approvalPromptDeliveredAt:r.approvalPromptDeliveredAt,approvalPromptFailedAt:r.approvalPromptFailedAt,planModeApproved:r.planModeApproved,pendingWorktreeDecisionSince:r.pendingWorktreeDecisionSince};if(typeof e.applyControlPatch=="function"){e.applyControlPatch(n);return}this.assignIfDefined(e,"lifecycle",r.lifecycle),this.assignIfDefined(e,"approvalState",r.approvalState),this.assignIfDefined(e,"approvalExecutionState",r.approvalExecutionState),this.assignIfDefined(e,"worktreeState",r.worktreeState),this.assignIfDefined(e,"runtimeState",r.runtimeState),this.assignIfDefined(e,"deliveryState",r.deliveryState),this.assignIfDefined(e,"requestedPermissionMode",r.requestedPermissionMode),this.assignIfDefined(e,"currentPermissionMode",r.currentPermissionMode),this.assignIfDefined(e,"pendingPlanApproval",r.pendingPlanApproval),this.assignIfDefined(e,"planApprovalContext",r.planApprovalContext),this.assignIfDefined(e,"planDecisionVersion",r.planDecisionVersion),this.assignIfDefined(e,"actionablePlanDecisionVersion",r.actionablePlanDecisionVersion),this.assignIfDefined(e,"canonicalPlanPromptVersion",r.canonicalPlanPromptVersion),this.assignIfDefined(e,"approvalPromptRequiredVersion",r.approvalPromptRequiredVersion),this.assignIfDefined(e,"approvalPromptVersion",r.approvalPromptVersion),this.assignIfDefined(e,"approvalPromptStatus",r.approvalPromptStatus),this.assignIfDefined(e,"approvalPromptTransport",r.approvalPromptTransport),this.assignIfDefined(e,"approvalPromptMessageKind",r.approvalPromptMessageKind),this.assignIfDefined(e,"approvalPromptLastAttemptAt",r.approvalPromptLastAttemptAt),this.assignIfDefined(e,"approvalPromptDeliveredAt",r.approvalPromptDeliveredAt),this.assignIfDefined(e,"approvalPromptFailedAt",r.approvalPromptFailedAt),this.setControlFieldIfDefined(e,"planModeApproved",r.planModeApproved)}applySessionMetadataPatch(e,r){this.assignIfDefined(e,"approvalRationale",r.approvalRationale)}applyWorktreeMetadataPatch(e,r){this.assignIfDefined(e,"worktreePath",r.worktreePath),this.assignIfDefined(e,"worktreeBranch",r.worktreeBranch),this.assignIfDefined(e,"worktreePrUrl",r.worktreePrUrl),this.assignIfDefined(e,"worktreePrNumber",r.worktreePrNumber),this.assignIfDefined(e,"worktreeMerged",r.worktreeMerged),this.assignIfDefined(e,"worktreeMergedAt",r.worktreeMergedAt),this.assignIfDefined(e,"worktreeDisposition",r.worktreeDisposition),this.assignIfDefined(e,"worktreePrTargetRepo",r.worktreePrTargetRepo),this.assignIfDefined(e,"worktreePushRemote",r.worktreePushRemote),this.assignIfDefined(e,"worktreeLifecycle",r.worktreeLifecycle),"autoMergeParentSessionId"in r&&(e.autoMergeParentSessionId=r.autoMergeParentSessionId),"autoMergeConflictResolutionAttemptCount"in r&&(e.autoMergeConflictResolutionAttemptCount=r.autoMergeConflictResolutionAttemptCount),"autoMergeResolverSessionId"in r&&(e.autoMergeResolverSessionId=r.autoMergeResolverSessionId)}assignIfDefined(e,r,n){n!==void 0&&(e[r]=n)}setControlFieldIfDefined(e,r,n){n!==void 0&&e.setControlField?.(r,n)}};Ee();var TA=new Set(["starting","running"]),Ks=class{constructor(e,r){this.sessions=e;this.store=r}sessions;store;resolveActive(e){let r=this.sessions.get(e);return r||(this.findPreferredMatch(e,n=>n.name===e)??this.findPreferredMatch(e,n=>U(n)===e)??this.findPreferredMatch(e,n=>n.harnessSessionId===e))}getPersistedSession(e){return this.store.getPersistedSession(e)}resolveBackendConversationId(e){let r=this.resolveActive(e);return this.store.resolveBackendConversationId(e,r?U(r)??r.harnessSessionId:void 0)}findPreferredMatch(e,r){let n,o;for(let i of this.sessions.values())r(i,e)&&((!o||i.startedAt>o.startedAt)&&(o=i),TA.has(i.status)&&(!n||i.startedAt>n.startedAt)&&(n=i));return n??o}};Ee();Ee();It();var js=class{constructor(e){this.deps=e}deps;async plan(e){let r=Se(e)??e.harnessSessionId;if(this.deps.isAlreadyMerged(r))return console.info(`[SessionManager] handleWorktreeStrategy: session "${e.name}" already merged \u2014 skipping strategy handling`),{kind:"skip",result:{notificationSent:!0,worktreeRemoved:!1}};if(e.status!=="completed")return{kind:"skip",result:{notificationSent:!1,worktreeRemoved:!1}};if(!this.deps.shouldRunWorktreeStrategy(e))return console.info(`[SessionManager] handleWorktreeStrategy: skipping \u2014 session "${e.name}" is in phase "${e.phase}"`),{kind:"skip",result:{notificationSent:!1,worktreeRemoved:!1}};let n=e.worktreeStrategy;if(!n||n==="off"||n==="manual")return{kind:"skip",result:{notificationSent:!1,worktreeRemoved:!1}};let o=e.worktreePath,i=this.deps.resolveWorktreeRepoDir(e.originalWorkdir,o),a=e.worktreeBranch;if(!i)return{kind:"notify",label:"worktree-missing-repo-dir",message:`\u26A0\uFE0F [${e.name}] Cannot determine the original repo for worktree ${o}. Manual inspection is required.`};if(!a)return{kind:"notify",label:"worktree-no-branch-name",message:`\u26A0\uFE0F [${e.name}] Cannot determine branch name for worktree ${o}. The worktree may have been removed or is in detached HEAD state. Manual cleanup may be needed.`};let u=e.worktreeBaseBranch??wr(i),p=this.deps.getWorktreeCompletionState(i,o,a,u);if(p==="no-change")return{kind:"no-change",repoDir:i,worktreePath:o,nativeBackendWorktree:lt(e)};if(p==="base-advanced")return{kind:"notify",label:"worktree-no-commits-ahead",message:`\u26A0\uFE0F [${e.name}] Auto-merge: branch '${a}' has no commits ahead of '${u}', but '${u}' has new commits \u2014 commits likely landed outside the worktree branch. Verify that commits were not made directly to '${u}' instead of the worktree branch. Worktree: ${o}`};if(p==="dirty-uncommitted")return{kind:"dirty-uncommitted",worktreePath:o,branchName:a,baseBranch:u};let d=sn(i,a,u);return d?{kind:"decision",strategy:n,repoDir:i,worktreePath:o,branchName:a,baseBranch:u,diffSummary:d,sessionRef:r??void 0}:(console.warn(`[SessionManager] Failed to get diff summary for ${a}, skipping merge-back`),{kind:"skip",result:{notificationSent:!1,worktreeRemoved:!1}})}};function Cp(t,e){return{...e,baseBranch:e.baseBranch??t.worktreeBaseBranch,targetRepo:e.targetRepo??t.worktreePrTargetRepo,pushRemote:e.pushRemote??t.worktreePushRemote}}function Ws(t,e={}){let r=e.updatedAt??new Date().toISOString(),n={pendingWorktreeDecisionSince:e.pendingSince??r,lastWorktreeReminderAt:void 0,lifecycle:"awaiting_worktree_decision",worktreeState:"pending_decision",worktreeLifecycle:Cp(t,{state:"pending_decision",updatedAt:r,notes:e.notes})};return e.clearResolverSessionId&&(n.autoMergeResolverSessionId=void 0),n}function qf(t,e,r,n={}){let o=n.updatedAt??new Date().toISOString();return{autoMergeConflictResolutionAttemptCount:r,autoMergeResolverSessionId:e,pendingWorktreeDecisionSince:void 0,lastWorktreeReminderAt:void 0,lifecycle:"terminal",worktreeState:"merge_conflict_resolving",worktreeLifecycle:Cp(t,{state:"merge_conflict_resolving",updatedAt:o,notes:n.notes})}}function Bf(t,e={}){let r=e.updatedAt??new Date().toISOString(),n=e.resolvedAt??r,o={worktreeMerged:!0,worktreeMergedAt:e.mergedAt??n,lifecycle:"terminal",worktreeState:"merged",pendingWorktreeDecisionSince:void 0,lastWorktreeReminderAt:void 0,worktreeLifecycle:Cp(t,{state:"merged",updatedAt:r,resolvedAt:n,resolutionSource:e.resolutionSource??"agent_merge"})};return e.clearResolverSessionId&&(o.autoMergeResolverSessionId=void 0),o}function RA(t){if(t.requestedPermissionMode==="plan"){if(t.approvalExecutionState==="approved_then_implemented"){if(t.planApproval==="ask"&&t.approvalPromptStatus==="delivered"&&t.approvalPromptMessageKind==="canonical_buttons"&&t.approvalPromptDeliveredAt)return"Approval interpretation: canonical Approve/Revise/Reject buttons were delivered, and implementation after approval was expected.";if(t.approvalState==="approved")return"Approval interpretation: explicit plan approval was recorded before implementation, so leaving plan-only mode was expected."}if(t.approvalExecutionState==="implemented_without_required_approval")return"Approval interpretation: implementation left plan-only mode without a recorded approval."}}function Gs(t){let e=RA(t);return[`Requested permission mode: ${t.requestedPermissionMode??"unknown"}`,`Effective permission mode: ${t.currentPermissionMode??"unknown"}`,`Deterministic approval/execution state: ${t.approvalExecutionState??"unknown"}`,...e?[e]:[]]}function Vo(t){switch(t){case"user":return"Stopped by user";case"shutdown":return"Stopped by shutdown";case"startup-timeout":return"Stopped by startup timeout";case"unknown":case void 0:return"Stopped unexpectedly";default:return"Stopped"}}function CA(){return{requiresShortFactualSummary:!0,owner:"agent",appliesToOrdinaryTerminalCompletions:!0}}function EA(){return{requiresShortFactualSummary:!0,owner:"agent",appliesToWorktreeTerminalOutcomes:!0}}function Ep(t){let{sessionId:e,canonicalStatusDetail:r,canonicalStatusDelivered:n=!0,hasOriginRouteBlock:o=!1}=t,i=o?["6. Before sending that follow-up, honor the Session origin route block above. If originRoute differs from the current chat, do NOT use a plain final assistant reply; use a routed send path that preserves provider/target/threadId."]:[],a=o?7:6,u=o?8:7;return["[ACTION REQUIRED] Follow your autonomy rules for session completion:",`1. Use agent_output(session='${e}', full=true) to read the full result.`,"2. If this is part of a multi-phase pipeline, launch the next phase NOW \u2014 do not wait for user input.",`3. ${r??(n?"The plugin already sent the canonical completion status to the user.":"The plugin did not confirm delivery of the canonical completion status to the user.")}`,"4. Unless you are silently continuing an internal multi-phase pipeline or there is still no meaningful confirmed outcome to report, you must send the user a short factual completion summary for this completed session.","5. This requirement applies to ordinary terminal/manual completions too, not just delegated worktree decisions.",...i,`${a}. That follow-up belongs to you alone; keep it brief, concrete, and grounded in reliable result data.`,...n?[`${u}. Do NOT repeat the plugin's status line, and do NOT rely on the plugin to summarize the completed work for you.`]:[`${u}. Because canonical status delivery was not confirmed, account for that gap yourself when you follow up; do NOT assume the plugin already reached the user.`]]}function $A(t){let{contract:e,canonicalStatusDelivered:r}=t;return["Completion diagnostics:",`- Canonical completion status delivered to user: ${r?"yes":"no"}`,`- Plugin requested short factual follow-up summary: ${e.requiresShortFactualSummary?"yes":"no"}`,`- Contract applies to ordinary terminal/manual completions: ${e.appliesToOrdinaryTerminalCompletions?"yes":"no"}`]}function $p(t){let{session:e,originThreadLine:r,preview:n}=t,o=!!r.trim(),i=`$${(e.costUsd??0).toFixed(2)}`,a=Lt(e.duration),u=CA(),p=d=>["Coding agent session completed.",`Name: ${e.name} | ID: ${e.id}`,`Status: ${e.status}`,...o?[r]:[],...Gs(e),"","Output preview:",n,"",...$A({contract:u,canonicalStatusDelivered:d}),"",...Ep({sessionId:e.id,canonicalStatusDelivered:d,hasOriginRouteBlock:o})].join(`
153
+ `);return{userMessage:`\u2705 [${e.name}] Completed | ${i} | ${a}`,wakeMessageOnNotifySuccess:p(!0),wakeMessageOnNotifyFailed:p(!1),followupContract:u}}function Hn(t){let e=EA(),r=!!t.originThreadLine.trim(),n=(t.detailLines??[]).map(o=>o.trim()).filter(o=>o.length>0);return["Worktree follow-through outcome recorded.",`Name: ${t.sessionName??"unknown"} | ID: ${t.sessionId}`,...r?[t.originThreadLine]:[],"","Canonical outcome status:",t.outcomeLine,...n.length>0?["","Outcome details:",...n.map(o=>`- ${o}`)]:[],"","Completion diagnostics:",`- Canonical worktree status delivered to user: ${t.canonicalStatusDelivered?"yes":"no"}`,`- Plugin requested short factual follow-up summary: ${e.requiresShortFactualSummary?"yes":"no"}`,`- Contract applies to worktree terminal outcomes: ${e.appliesToWorktreeTerminalOutcomes?"yes":"no"}`,"","[ACTION REQUIRED] Follow your autonomy rules for worktree follow-through:",`1. Use agent_output(session='${t.sessionId}', full=true) to read the full result if output is available.`,"2. Send the user one short factual outcome summary grounded in the full output plus the canonical outcome status above.","3. If full output is unavailable or not meaningful, say only what is proven by the merge/PR facts above; do not invent task details.","4. Mention blockers such as push failure when present; do not describe a local-only merge as pushed.",...r?["5. Before sending that follow-up, honor the Session origin route block above. If originRoute differs from the current chat, do NOT use a plain final assistant reply; use a routed send path that preserves provider/target/threadId."]:[],`${r?6:5}. Do NOT repeat only the plugin status line; keep the follow-up brief, concrete, and non-duplicative.`].join(`
154
+ `)}function Mp(t){let{session:e,originThreadLine:r,errorSummary:n,preview:o,worktreeAutoCleaned:i,failedButtons:a}=t,u=o.trim()?["","Output preview:",o]:[],p=i?["","Note: Worktree and branch were auto-removed (zero cost, startup failure)."]:[],d=`$${(e.costUsd??0).toFixed(2)}`,l=Lt(e.duration);return{userMessage:[`\u274C [${e.name}] Failed | ${d} | ${l}`,` \u26A0\uFE0F ${n}`].join(`
155
+ `),wakeMessage:["Coding agent session failed.",`Name: ${e.name} | ID: ${e.id}`,`Status: ${e.status}`,r,...Gs(e),...e.harnessSessionId?[`Backend conversation ID: ${e.harnessSessionId}`]:[],"","Failure summary:",n,...u,...p,"","[ACTION REQUIRED] Follow your autonomy rules for session failure:",`1. Use agent_output(session='${e.id}', full=true) to inspect the full failure context.`,`2. Continue the same session with agent_respond(session='${e.id}', message='<next instruction>').`,` If you intentionally want to fork or switch harnesses, launch a new session with agent_launch(resume_session_id='${e.id}', fork_session=true, ...)`," If the failure is a launch/config issue, relaunch fresh with agent_launch(prompt=...).","3. Notify the user with the failure cause and the next action you are taking."].join(`
156
+ `),buttons:a}}function Op(t){let{session:e,originThreadLine:r,preview:n}=t,o=`$${(e.costUsd??0).toFixed(2)}`;return{userMessage:`\u23F8\uFE0F [${e.name}] Turn completed | ${o}`,wakeMessage:["Coding agent session turn ended.",`Name: ${e.name}`,`ID: ${e.id}`,`Status: ${e.status}`,`Lifecycle: ${e.lifecycle}`,"","Last output (~20 lines):",n,...r?["",r]:[]].join(`
157
+ `)}}function _p(t){let{sessionName:e,sessionId:r,branchName:n,baseBranch:o,promptSnippet:i,commitLines:a,moreNote:u,originThreadLine:p,diffSummary:d}=t,l=!!p?.trim();return[`[DELEGATED WORKTREE DECISION] Session "${e}" completed with changes.`,"",`Session ID: ${r}`,`Branch: ${n} \u2192 ${o}`,`Commits: ${d.commits} | Files: ${d.filesChanged} | +${d.insertions} / -${d.deletions}`,...l?[p]:[],"",...a,...u?[u]:[],"","Original task prompt (first 500 chars):",i,"","You own the next step for this worktree.",`- Merge immediately with agent_merge(session="${e}", base_branch="${o}") if the changes are clearly in-scope and low-risk.`,"- If a PR is safer, message the user with the summary and ask for confirmation before calling agent_pr().","- If scope or risk is unclear, message the user and ask for guidance.","- Never call agent_pr() autonomously in delegate mode.","- After deciding, notify the user briefly with what you did and why.",...l?["- Send any human follow-up to the Session origin route above; if it differs from the current chat, do not use a plain final assistant reply."]:[]].join(`
158
+ `)}function Dp(t,e){return[`[DELEGATED WORKTREE DECISION REMINDER] Session "${t.name}" still has an unresolved worktree decision.`,"",`Session ID: ${t.sessionId??t.harnessSessionId}`,`Branch: ${t.worktreeBranch??"unknown"}`,`Pending: ${e}h`,"","Resolve it now:",`- agent_merge(session="${t.name}") if the diff is clearly safe and in scope`,"- If a PR is safer, ask the user before agent_pr()","- If scope or risk is unclear, ask the user for guidance","- Never call agent_pr() autonomously in delegate mode"].join(`
159
+ `)}function Fp(t){let{sessionName:e,sessionId:r,cleanupSummary:n,preview:o,originThreadLine:i,requestedPermissionMode:a,currentPermissionMode:u,approvalExecutionState:p,approvalState:d,planApproval:l,approvalPromptStatus:m,approvalPromptMessageKind:c,approvalPromptDeliveredAt:h}=t,y=o.trim()?["","Output preview:",o]:[],S=!!i?.trim();return["Coding agent session completed with no repository changes.",`Name: ${e} | ID: ${r}`,`Worktree outcome: ${n}`,...S?[i]:[],...Gs({requestedPermissionMode:a,currentPermissionMode:u,approvalExecutionState:p,approvalState:d,planApproval:l,approvalPromptStatus:m,approvalPromptMessageKind:c,approvalPromptDeliveredAt:h}),...y,"",...Ep({sessionId:r,canonicalStatusDetail:"The plugin already sent the canonical completion status to the user, including that no repo changes were kept.",hasOriginRouteBlock:S})].join(`
160
+ `)}function Lp(t){let e=[],r=t.changedFiles.slice(0,3).map(o=>`\`${o}\``);if(r.length>0){let o=t.changedFiles.length-r.length;e.push(o>0?`Touches ${r.join(", ")} and ${o} more file${o===1?"":"s"}`:`Touches ${r.join(", ")}`)}let n=[...new Set(t.commitMessages.map(o=>o.message.trim()).filter(Boolean))].slice(0,2);return n.length>0&&e.push(`Recent work: ${n.join("; ")}`),e}var jf=3200,Np=3e3,MA=2400,OA=120,_A=5,DA=280,Uf=1400,Kf="- Additional plan details omitted for brevity.";function Wf(t){return t.replace(/^#{1,6}\s+/,"").replace(/^[-*+]\s+/,"").replace(/^\d+[.)]\s+/,"").replace(/^`([^`]+)`$/,"$1").trim()}function FA(t){return t.split(`
161
+ `).map(e=>e.trim()).filter(Boolean).map(Wf).map(e=>Je(e,220)).filter(e=>e.length>0).filter(e=>!/^(plan|proposed plan|implementation plan|review summary|full plan)[:]?$/i.test(e)).filter(e=>!/^(should|can|could|would|will)\b.*\?$/i.test(e)).filter(e=>!/^(thinking|checking|considering|analyzing)\b/i.test(e))}function LA(t){return t.split(`
162
+ `).map(e=>e.trim()).filter(Boolean).map(Wf).filter(e=>e.length>0).filter(e=>!/^(plan|proposed plan|implementation plan|review summary|summary|why this was escalated|full plan)[:]?$/i.test(e)).filter(e=>!/^(should|can|could|would|will)\b.*\?$/i.test(e)).filter(e=>!/^(thinking|checking|considering|analyzing)\b/i.test(e))}function qp(t){let e=FA(t);return e.length===0?`Review summary:
163
+ - Plan details are available in the full session output.`:["Review summary:",...e.slice(0,6).map(r=>`- ${r}`)].join(`
164
+ `)}function NA(t){let e=[],r=!1;for(let o of t){let i=o.replace(/\s+/g," ").trim();if(!i)continue;let a=Je(i,DA);a.length<i.length&&(r=!0);let u=`- ${a}`;if(e.length>=_A||[...e,u].join(`
165
+ `).length>Uf){r=!0;break}e.push(u)}if(e.length===0)return["- Plan details are available in the full session output."];if(!r)return e;let n=[...e];for(;n.length>0&&[...n,Kf].join(`
166
+ `).length>Uf;)n.pop();return[...n,Kf]}function Bp(t){return NA(LA(t)).join(`
167
+ `)}function qA(t,e){let r=[],n=t.trim();for(;n.length>e;){let o=n.lastIndexOf(" ",e);o<Math.floor(e*.6)&&(o=e),r.push(n.slice(0,o).trimEnd()),n=n.slice(o).trimStart()}return n.length>0&&r.push(n),r}function BA(t,e){let r=t.split(`
168
+ `),n=[],o="",i=()=>{o.trim().length>0&&(n.push(o.trimEnd()),o="")};for(let a of r){if(a.length>e){i();for(let p of qA(a,e))n.push(p);continue}let u=o.length>0?`${o}
169
+ ${a}`:a;if(u.length>e){i(),o=a;continue}o=u}return i(),n}function Gf(t){return Je(t.trim(),OA)}function Vf(t,e){return e?t?`
169
170
 
170
171
  Choose Approve, Revise, or Reject below.`:`
171
172
 
172
173
  Approval is still pending for this plan version.`:`
173
174
 
174
- Continued in next message.`}function px(t){let{sessionName:e,actionableVersion:n,fullPlanText:r,hasButtons:o}=t,i=`\u{1F4CB} [${e}] Plan v${n??"?"} ready for approval:`,s=`
175
+ Continued in next message.`}function UA(t){let{sessionName:e,actionableVersion:r,fullPlanText:n,hasButtons:o}=t,i=`\u{1F4CB} [${e}] Plan v${r??"?"} ready for approval:`,a=`
175
176
 
176
177
  Full plan (truncated):
177
- `,a=Ph(o,!0),d=Math.max(0,Jl-i.length-s.length-a.length);return`${i}${s}${Me(r,d)}${a}`}function cx(t){let{sessionName:e,actionableVersion:n,fullPlanText:r,hasButtons:o}=t,i=vh(e),s=nx;for(;s>0;){let a=ux(r,s),d=a.map((c,g)=>{let S=a.length,k=[`\u{1F4CB} [${i}] Plan v${n??"?"} ready for approval (${g+1}/${S}):`,"",g===0?"Full plan:":""].filter(Boolean).join(`
178
- `),I=Ph(o,g===S-1);return`${k}
179
- ${c}${I}`}),l=d.reduce((c,g)=>Math.max(c,g.length),0);if(l<=Jl)return d;let u=l-Jl;s-=Math.max(u,50)}return[px({sessionName:i,actionableVersion:n,fullPlanText:r,hasButtons:o})]}function Zl(t){let{preview:e,artifact:n}=t,r=n?.markdown?.trim();return r&&r.length<=Sh?`Full plan:
180
- ${r}`:Yl(r||e)}function wh(t){let{sessionName:e,actionableVersion:n,preview:r,artifact:o,hasButtons:i}=t,s=o?.markdown?.trim(),a=vh(e);if(s){let l=`\u{1F4CB} [${a}] Plan v${n??"?"} ready for approval:
178
+ `,u=Vf(o,!0),p=Math.max(0,Np-i.length-a.length-u.length);return`${i}${a}${Je(n,p)}${u}`}function KA(t){let{sessionName:e,actionableVersion:r,fullPlanText:n,hasButtons:o}=t,i=Gf(e),a=MA;for(;a>0;){let u=BA(n,a),p=u.map((m,c)=>{let h=u.length,y=[`\u{1F4CB} [${i}] Plan v${r??"?"} ready for approval (${c+1}/${h}):`,"",c===0?"Full plan:":""].filter(Boolean).join(`
179
+ `),S=Vf(o,c===h-1);return`${y}
180
+ ${m}${S}`}),d=p.reduce((m,c)=>Math.max(m,c.length),0);if(d<=Np)return p;let l=d-Np;a-=Math.max(l,50)}return[UA({sessionName:i,actionableVersion:r,fullPlanText:n,hasButtons:o})]}function Up(t){let{preview:e,artifact:r}=t,n=r?.markdown?.trim();return n&&n.length<=jf?`Full plan:
181
+ ${n}`:qp(n||e)}function Hf(t){let{sessionName:e,actionableVersion:r,preview:n,artifact:o,hasButtons:i}=t,a=o?.markdown?.trim(),u=Gf(e);if(a){let d=`\u{1F4CB} [${u}] Plan v${r??"?"} ready for approval:
181
182
 
182
183
  Full plan:
183
- ${s}
184
+ ${a}
184
185
 
185
- ${i?"Choose Approve, Revise, or Reject below.":"Approval is still pending for this plan version."}`;return l.length<=Sh?{displayMode:"single-full-plan",userMessages:[l],reviewSummary:`Full plan:
186
- ${s}`}:{displayMode:"chunked-full-plan",userMessages:cx({sessionName:e,actionableVersion:n,fullPlanText:s,hasButtons:i}),reviewSummary:Yl(s)}}let d=Yl(r);return{displayMode:"summary",userMessages:[`\u{1F4CB} [${a}] Plan v${n??"?"} ready for approval:
186
+ ${i?"Choose Approve, Revise, or Reject below.":"Approval is still pending for this plan version."}`;return d.length<=jf?{displayMode:"single-full-plan",userMessages:[d],reviewSummary:`Full plan:
187
+ ${a}`}:{displayMode:"chunked-full-plan",userMessages:KA({sessionName:e,actionableVersion:r,fullPlanText:a,hasButtons:i}),reviewSummary:qp(a)}}let p=qp(n);return{displayMode:"summary",userMessages:[`\u{1F4CB} [${u}] Plan v${r??"?"} ready for approval:
187
188
 
188
- ${d}
189
+ ${p}
189
190
 
190
- ${i?"Choose Approve, Revise, or Reject below.":"Approval is still pending for this plan version."}`],reviewSummary:d}}var Ih=700;function mx(t){let e=t?.trim();return e||void 0}function fx(t,e){let n=e?.trim();if(!n)return;if(!t)return n;let r=t.trim(),o=n.split(`
191
- `).map(a=>a.trimEnd());for(;o.length>0&&!o[o.length-1]?.trim();)o.pop();for(;o.length>0&&o[o.length-1]?.trim()===r;)o.pop();let s=o.filter((a,d,l)=>{let u=a.trim();return!u||u!==r?!0:!l.some((g,S)=>S!==d&&g.trim().length>0&&g.trim()!==r)}).join(`
192
- `).trim();if(!(!s||s===r))return s.length>Ih?ji(s,Ih):s}function gx(t){let e=mx(t.questionText)??"The session is waiting for your reply.",n=fx(e,t.contextPreview);return n?[`\u2753 [${t.sessionName}] Question waiting for reply:`,"","Question:",e,"","Recent context:",n].join(`
191
+ ${i?"Choose Approve, Revise, or Reject below.":"Approval is still pending for this plan version."}`],reviewSummary:p}}var zf=700;function jA(t){let e=t?.trim();return e||void 0}function WA(t,e){let r=e?.trim();if(!r)return;if(!t)return r;let n=t.trim(),o=r.split(`
192
+ `).map(u=>u.trimEnd());for(;o.length>0&&!o[o.length-1]?.trim();)o.pop();for(;o.length>0&&o[o.length-1]?.trim()===n;)o.pop();let a=o.filter((u,p,d)=>{let l=u.trim();return!l||l!==n?!0:!d.some((c,h)=>h!==p&&c.trim().length>0&&c.trim()!==n)}).join(`
193
+ `).trim();if(!(!a||a===n))return a.length>zf?Yi(a,zf):a}function GA(t){let e=jA(t.questionText)??"The session is waiting for your reply.",r=WA(e,t.contextPreview);return r?[`\u2753 [${t.sessionName}] Question waiting for reply:`,"","Question:",e,"","Recent context:",r].join(`
193
194
  `):`\u2753 [${t.sessionName}] Question waiting for reply:
194
195
 
195
- ${e}`}function hx(t,e){return e!=null&&t.approvalPromptRequiredVersion===e&&(t.approvalPromptStatus==="delivered"||t.approvalPromptStatus==="fallback_delivered")}function Ao(t){let{session:e,summary:n}=t,r=e.actionablePlanDecisionVersion??e.planDecisionVersion;return[`\u{1F4CB} [${e.name}] Plan v${r??"?"} needs your decision.`,"","Interactive Approve / Revise / Reject buttons could not be delivered, so reply here instead:",'- Reply "approve" to approve and start implementation','- Reply "reject" to reject and stop the session',"- Any other reply will be sent back as revision feedback","","Why this was escalated:","",n].join(`
196
- `)}function eu(t){let{session:e,preview:n,questionText:r,questionContextPreview:o,planArtifact:i,originThreadLine:s,planApprovalMode:a,planApprovalButtons:d,questionButtons:l}=t,u=e.pendingPlanApproval,c=e.actionablePlanDecisionVersion??e.planDecisionVersion,g=hx(e,c),S=a??"delegate",k=u&&S==="ask"&&!g?wh({sessionName:e.name,actionableVersion:c,preview:n,artifact:i,hasButtons:!!d}):void 0,I=u?k?.reviewSummary??Zl({preview:n,artifact:i}):void 0,P=u?k&&k.userMessages.length===1?k.userMessages[0]:void 0:gx({sessionName:e.name,questionText:r??n,contextPreview:o}),b=u&&k&&k.userMessages.length>1?k.userMessages.map((T,C,ye)=>({text:T,buttons:C===ye.length-1?d:void 0})):void 0;if(u){let T=S,C="Permission mode: plan \u2192 will switch to bypassPermissions on approval";return T==="delegate"?{label:"plan-approval",userMessage:P,userMessages:b,planReviewSummary:I,wakeMessage:["[DELEGATED PLAN APPROVAL] Coding agent session has finished its plan and is requesting approval to implement.",`Name: ${e.name} | ID: ${e.id} | Plan v${c??"?"}`,s,C,"","\u26A0\uFE0F YOU MUST COMPLETE THESE STEPS IN ORDER. Do NOT skip any step.","","\u2501\u2501\u2501 STEP 1 (MANDATORY): Read the full plan \u2501\u2501\u2501",`Call agent_output(session='${e.id}', full=true) to read the FULL plan output.`,"The preview below is truncated \u2014 you MUST read the full output before making any decision.","","Preview (truncated):",n,"","\u2501\u2501\u2501 STEP 2 (MANDATORY): Review privately \u2501\u2501\u2501","You are the delegated decision-maker. Review the plan yourself before involving the user.","If you approve directly, you own the user-facing explanation of what was approved and why.","Keep it short and user-facing: one sentence is usually enough.","","\u2501\u2501\u2501 STEP 3 (ONLY AFTER steps 1 and 2): Decide \u2501\u2501\u2501","Choose ONE:","","APPROVE the plan directly if ALL of the following are true:","- You have read the FULL plan (not just the preview)","- The plan scope matches the original task request","- The changes are low-risk (no destructive operations, no credential handling, no production deployments)","- The plan is clear and well-scoped (no ambiguous requirements or open design questions)","- No architectural decisions that the user should weigh in on","- The working directory and codebase are correct","","ESCALATE to the user and WAIT if ANY of the following are true:","- The plan involves destructive operations (deleting files, dropping tables, force-pushing)","- The plan involves credentials, secrets, or production environments","- The plan requires architectural decisions not covered by the original task","- The scope has expanded beyond the original request","- The requirements are ambiguous or the plan makes assumptions the user should confirm","- You are unsure \u2014 when in doubt, always escalate","",`If approving: call agent_respond(session='${e.id}', message='Approved. Go ahead.', approve=true, approval_rationale='<brief reason>').`,"That rationale should say why approval was safe: for example scope match, low risk, or no meaningful ambiguity.","After approving directly, send the user a short plain-text follow-up explaining what was approved and why.","The plugin's thumbs-up line is only the minimal approval acknowledgment, not the explanation.",`If escalating: call agent_request_plan_approval(session='${e.id}', summary='...') exactly once so the plugin posts the single canonical Approve / Revise / Reject prompt.`,"That summary must concisely explain why this was escalated, plus changed files/components, risk level and why, scope match/expansion, and any concerns or assumptions.","After the canonical prompt exists, WAIT for the user's button click or explicit response and do NOT send a second plain-text recap.",`To request changes without user escalation: call agent_respond(session='${e.id}', message='<your feedback>') and do NOT set approve=true. The agent will revise the plan.`].join(`
197
- `)}:T==="ask"?{label:"plan-approval",userMessage:P,userMessages:b,planReviewSummary:I,wakeMessage:["[USER APPROVAL REQUESTED] Coding agent session has finished its plan. The user has been notified via Telegram and must approve directly.",`Name: ${e.name} | ID: ${e.id} | Plan v${c??"?"}`,s,C,"","DO NOT approve this plan yourself. Wait for the user's explicit approval or rejection.","Once the user responds, forward their decision:",` To approve: agent_respond(session='${e.id}', message='Approved. Go ahead.', approve=true)`,` To request changes: agent_respond(session='${e.id}', message='<user feedback>')`,"","Preview (truncated):",n].join(`
198
- `),buttons:b?void 0:d}:{label:"plan-approval",userMessage:P,planReviewSummary:I,wakeMessage:["[AUTO-APPROVE] Session has a plan ready. Approve it now:",`agent_respond(session='${e.id}', message='Approved. Go ahead.', approve=true)`].join(`
199
- `)}}let A=e.multiTurn?"Multi-turn session":"Session";return{label:"waiting",userMessage:P,wakeMessage:[`[SYSTEM INSTRUCTION: Follow your auto-respond rules strictly. If this is a permission request or "should I continue?" \u2192 auto-respond. For ALL other questions \u2192 forward the agent's EXACT question to the user. Do NOT add your own analysis, commentary, or interpretation. Do NOT "nudge" or "poke" the session.]`,"",`${A} is waiting for a genuine user reply.`,`Name: ${e.name} | ID: ${e.id}`,s,"","Last output:",n,"",`Use agent_respond(session='${e.id}', message='...') to send a reply, or agent_output(session='${e.id}', full: true) to see full context before deciding.`].join(`
200
- `),buttons:l}}rt();var Ls=class{constructor(e){this.deps=e;this.actions=new Ds({shouldRunWorktreeStrategy:e.shouldRunWorktreeStrategy,isAlreadyMerged:e.isAlreadyMerged,resolveWorktreeRepoDir:e.resolveWorktreeRepoDir,getWorktreeCompletionState:e.getWorktreeCompletionState})}deps;actions;buildConflictResolverPrompt(e){return["Resolve the git rebase conflict for the auto-merge worktree and finish the rebase cleanly.","",`Original session: ${e.session.name} [${e.session.id}]`,`Repository root: ${e.repoDir}`,`Conflicted worktree: ${e.worktreePath}`,`Branch: ${e.branchName}`,`Base branch: ${e.baseBranch}`,"","Requirements:","- Work only inside the conflicted worktree.","- Inspect the current rebase state and resolve only the necessary conflict hunks.","- Make only minimal follow-up edits needed to keep the rebased branch correct.","- Continue the rebase until it completes successfully.","- Run relevant local verification before you finish.","- Do not broaden scope or start unrelated refactors.",`- Stop only when the branch is cleanly rebased onto ${e.baseBranch}.`,e.mergeError?"":void 0,e.mergeError?"Rebase failure details:":void 0,e.mergeError].filter(n=>typeof n=="string").join(`
201
- `)}notifyAutoMergeConflictEscalation(e,n,r){this.deps.dispatchSessionNotification(e,{label:"worktree-merge-conflict-escalated",userMessage:[`\u26A0\uFE0F [${e.name}] Auto-merge could not finish after one conflict-resolution attempt.`,`Branch \`${n}\` was preserved for manual follow-up.`,"",r].join(`
202
- `),buttons:[[this.deps.makeOpenPrButton(e.id)]]})}updatePersistedSessionFor(e,n){for(let r of Ge(e))this.deps.updatePersistedSession(r,n)}markPendingDecision(e,n={}){this.updatePersistedSessionFor(e,Ns(e,n))}markAutoMergeConflictResolving(e,n,r){this.updatePersistedSessionFor(e,fh(e,n,r,{notes:[`resolver_session:${n}`]}))}markMerged(e){this.updatePersistedSessionFor(e,gh(e,{clearResolverSessionId:!0}))}async handleWorktreeStrategy(e){let n=await this.actions.plan(e);return n.kind==="skip"?n.result:n.kind==="notify"?(this.deps.dispatchSessionNotification(e,{label:n.label,userMessage:n.message}),{notificationSent:!0,worktreeRemoved:!1}):n.kind==="dirty-uncommitted"?this.handleDirtyUncommittedCompletion(e,n.worktreePath,n.branchName,n.baseBranch):n.kind==="no-change"?this.handleNoChange(e,n.repoDir,n.worktreePath,n.nativeBackendWorktree):n.strategy==="ask"?this.handleAskStrategy(e,n.branchName,n.baseBranch,n.diffSummary):n.strategy==="delegate"?this.handleDelegateStrategy(e,n.branchName,n.baseBranch,n.diffSummary):n.strategy==="auto-merge"?(await this.handleAutoMergeStrategy(e,n.repoDir,n.worktreePath,n.branchName,n.baseBranch,n.diffSummary,n.sessionRef),{notificationSent:!0,worktreeRemoved:!1}):n.strategy==="auto-pr"?this.handleAutoPrStrategy(e,n.baseBranch):{notificationSent:!1,worktreeRemoved:!1}}async handleNoChange(e,n,r,o=We(e)){let i=o?!0:nt(n,r);return i?(e.worktreePath=void 0,this.updatePersistedSessionFor(e,{worktreePath:void 0,worktreeDisposition:"no-change-cleaned",worktreeState:"none",worktreeLifecycle:{state:"no_change",updatedAt:new Date().toISOString(),resolvedAt:new Date().toISOString(),resolutionSource:"strategy_no_change",baseBranch:e.worktreeBaseBranch,targetRepo:e.worktreePrTargetRepo,pushRemote:e.worktreePushRemote}}),this.deps.dispatchSessionNotification(e,this.deps.worktreeMessages.buildNoChangeNotification({session:e,nativeBackendWorktree:o,cleanupSucceeded:!0,worktreePath:r,preview:this.deps.getOutputPreview(e),originThreadLine:this.deps.originThreadLine(e)}))):this.deps.dispatchSessionNotification(e,this.deps.worktreeMessages.buildNoChangeNotification({session:e,nativeBackendWorktree:o,cleanupSucceeded:!1,worktreePath:r,preview:this.deps.getOutputPreview(e),originThreadLine:this.deps.originThreadLine(e)})),{notificationSent:!0,worktreeRemoved:i}}handleAskStrategy(e,n,r,o){return this.deps.dispatchSessionNotification(e,this.deps.worktreeMessages.buildAskNotification({session:e,branchName:n,baseBranch:r,diffSummary:o,buttons:this.deps.getWorktreeDecisionButtons(e.id)})),this.markPendingDecision(e),{notificationSent:!0,worktreeRemoved:!1}}handleDelegateStrategy(e,n,r,o){return this.deps.dispatchSessionNotification(e,this.deps.worktreeMessages.buildDelegateNotification({session:e,branchName:n,baseBranch:r,diffSummary:o,originThreadLine:this.deps.originThreadLine(e)})),this.markPendingDecision(e),{notificationSent:!0,worktreeRemoved:!1}}handleDirtyUncommittedCompletion(e,n,r,o){this.markPendingDecision(e,{notes:["dirty_uncommitted_completion"]});let i=Sr(n),s=i.slice(0,20).map(d=>`- ${d}`),a=i.length>20?[`- ...and ${i.length-20} more`]:[];return this.deps.dispatchSessionNotification(e,{label:"worktree-dirty-uncommitted",userMessage:[`\u26A0\uFE0F [${e.name}] Session completed with uncommitted worktree changes.`,"",`Branch \`${r}\` has no commits ahead of \`${o}\`, so merge/PR follow-through is blocked until the worktree is fixed.`,`Worktree: ${n}`,"",...s.length>0?["Dirty entries:",...s,...a,""]:[],"Resume the session or inspect the worktree, then commit real task changes or clean temporary files. Discard only if these local changes should be permanently removed."].join(`
203
- `)}),{notificationSent:!0,worktreeRemoved:!1}}handleAutoMergeSuccess(e,n,r,o,i,s){Ot(n,r),this.markMerged(e);let a=Fn({kind:"merge",branch:r,base:o,filesChanged:i.filesChanged,insertions:i.insertions,deletions:i.deletions}),d=a;s.stashPopConflict?d+=`
204
- \u26A0\uFE0F Pre-merge stash pop conflicted \u2014 run \`git stash show ${s.stashRef??"stash@{0}"}\` in ${n} to review stashed changes.`:s.stashed&&(d+=`
205
- (Pre-existing changes on ${o} were auto-stashed and restored.)`);let l=[s.fastForward?"Merge type: fast-forward.":"Merge type: merge commit.",`Auto-merge landed ${r} into ${o}.`,"Local worktree branch cleanup was requested.",...s.stashPopConflict?[`Pre-merge stash pop conflicted; run git stash show ${s.stashRef??"stash@{0}"} in ${n} to review stashed changes.`]:[],...!s.stashPopConflict&&s.stashed?[`Pre-existing changes on ${o} were auto-stashed and restored.`]:[]];this.deps.dispatchSessionNotification(e,{label:"worktree-merge-success",userMessage:d,notifyUser:"always",completionWakeSummaryRequired:!0,wakeMessageOnNotifySuccess:Ir({sessionId:e.id,sessionName:e.name,outcomeLine:a,originThreadLine:this.deps.originThreadLine(e),detailLines:l,canonicalStatusDelivered:!0}),wakeMessageOnNotifyFailed:Ir({sessionId:e.id,sessionName:e.name,outcomeLine:a,originThreadLine:this.deps.originThreadLine(e),detailLines:l,canonicalStatusDelivered:!1})})}async handleInitialAutoMergeConflict(e,n,r,o,i,s){let a=e.autoMergeConflictResolutionAttemptCount??0;if(a>=1){this.markPendingDecision(e,{notes:["auto_merge_conflict_retry_exhausted"],clearResolverSessionId:!0}),this.notifyAutoMergeConflictEscalation(e,o,`The rebased branch still conflicts with \`${i}\`. Open a PR or resolve manually in ${r}.`);return}let d=this.buildConflictResolverPrompt({session:e,repoDir:n,worktreePath:r,branchName:o,baseBranch:i,mergeError:s});try{let l=await this.deps.spawnConflictResolver({session:e,repoDir:n,worktreePath:r,branchName:o,baseBranch:i,prompt:d});this.markAutoMergeConflictResolving(e,l.id,a+1),this.deps.dispatchSessionNotification(e,{label:"worktree-merge-conflict-resolving",userMessage:`\u26A0\uFE0F [${e.name}] Auto-merge hit a rebase conflict. Started resolver session ${l.name} and will retry automatically if it succeeds.`})}catch(l){this.markPendingDecision(e,{notes:["auto_merge_conflict_resolver_spawn_failed"]}),this.deps.dispatchSessionNotification(e,{label:"worktree-merge-conflict-spawn-failed",userMessage:`\u274C [${e.name}] Auto-merge hit a rebase conflict and failed to start the resolver: ${l instanceof Error?l.message:String(l)}`,buttons:[[this.deps.makeOpenPrButton(e.id)]]})}}handleAutoMergeRetryFailure(e,n,r,o){this.markPendingDecision(e,{notes:["auto_merge_conflict_retry_failed"],clearResolverSessionId:!0}),this.deps.dispatchSessionNotification(e,{label:"worktree-merge-error",userMessage:[o,"","Auto-merge retry did not complete after conflict resolution.",`Branch \`${n}\` was preserved for manual follow-up in ${r}.`].join(`
206
- `),buttons:[[this.deps.makeOpenPrButton(e.id)]]})}async handleAutoMergeStrategy(e,n,r,o,i,s,a=ne(e)??e.harnessSessionId){this.deps.isAlreadyMerged(a)||e.autoMergeResolverSessionId||await this.deps.enqueueMerge(n,async()=>{if(this.deps.isAlreadyMerged(a))return;let d=this.deps.mergeBranch(n,o,i,"merge",r);if(d.success){this.handleAutoMergeSuccess(e,n,o,i,s,d);return}if(d.rebaseConflict){await this.handleInitialAutoMergeConflict(e,n,r,o,i,d.error);return}let l=d.dirtyError?`\u274C [${e.name}] Merge blocked: ${d.error}`:`\u274C [${e.name}] Merge failed: ${d.error??"unknown error"}`;if(e.worktreeState==="merge_conflict_resolving"||e.worktreeLifecycle?.state==="merge_conflict_resolving"){this.handleAutoMergeRetryFailure(e,o,r,l);return}this.deps.dispatchSessionNotification(e,{label:"worktree-merge-error",userMessage:l})},()=>{this.deps.dispatchSessionNotification(e,{label:"worktree-merge-queued",userMessage:`\u{1F550} [${e.name}] Merge queued \u2014 another merge for this repo is in progress. Will notify when complete.`})})}async handleAutoPrStrategy(e,n){return this.updatePersistedSessionFor(e,{lifecycle:"terminal",worktreeState:"pr_in_progress"}),(await this.deps.runAutoPr(e,n)).success||(this.markPendingDecision(e),this.deps.dispatchSessionNotification(e,{label:"worktree-auto-pr-failed",userMessage:`\u26A0\uFE0F [${e.name}] Auto-PR did not complete. The worktree is preserved for an explicit merge or PR decision.`,buttons:this.deps.getWorktreeDecisionButtons(e.id)})),{notificationSent:!0,worktreeRemoved:!1}}};import{existsSync as Hx,writeFileSync as zx}from"fs";Gt();import{randomUUID as yx}from"crypto";function Sx(t){return t==="plan-approve"||t==="plan-request-changes"||t==="plan-reject"}var Ws=class{constructor(e,n){this.onChange=e;this.retentionMs=n}onChange;retentionMs;tokens=new Map;afterChange;replaceAll(e){this.tokens.clear();for(let n of e)this.tokens.set(n.id,n)}clear(){this.tokens.clear(),this.notifyChanged()}listForPersistence(){return[...this.tokens.values()]}createActionToken(e,n,r={}){let o={id:yx(),sessionId:e,kind:n,createdAt:Date.now(),...r};return this.tokens.set(o.id,o),this.notifyChanged(),o}getActionToken(e){let n=this.tokens.get(e);if(n){if(n.expiresAt!=null&&n.expiresAt<=Date.now()){this.tokens.delete(e),this.notifyChanged();return}return n}}consumeActionToken(e){let n=this.getActionToken(e);if(!(!n||n.consumedAt!=null))return n.consumedAt=Date.now(),this.notifyChanged(),n}deleteActionTokensForSession(e){let n=!1;for(let[r,o]of this.tokens)o.sessionId===e&&(this.tokens.delete(r),n=!0);n&&this.notifyChanged()}deletePlanDecisionTokensForSession(e,n){let r=!1;for(let[o,i]of this.tokens)i.sessionId!==e||!Sx(i.kind)||n!=null&&i.planDecisionVersion===n||(this.tokens.delete(o),r=!0);r&&this.notifyChanged()}purgeExpiredActionTokens(e=Date.now()){let n=!1;for(let[r,o]of this.tokens){let i=o.expiresAt!=null&&o.expiresAt<=e,s=o.consumedAt!=null&&e-o.consumedAt>this.retentionMs;(i||s)&&(this.tokens.delete(r),n=!0)}n&&this.notifyChanged()}nextExpiryAt(){let e;for(let n of this.tokens.values()){let r=[n.expiresAt,n.consumedAt!=null?n.consumedAt+this.retentionMs:void 0].filter(o=>o!=null&&Number.isFinite(o));for(let o of r)(e==null||o<e)&&(e=o)}return e}setAfterChangeListener(e){this.afterChange=e}notifyChanged(){this.onChange(),this.afterChange?.()}};he();he();var Bs=class{constructor(e){this.indexes=e}indexes;hasRecordedSession(e){return this.indexes.idIndex.has(e)}getLatestPersistedByName(e){let n,r=Number.NEGATIVE_INFINITY,o=Number.NEGATIVE_INFINITY,i=Number.NEGATIVE_INFINITY,s=0;for(let a of this.indexes.persisted.values()){if(a.name!==e){s++;continue}let d=a.createdAt??Number.NEGATIVE_INFINITY,l=a.completedAt??Number.NEGATIVE_INFINITY;(d>r||d===r&&l>o||d===r&&l===o&&s>i)&&(n=a,r=d,o=l,i=s),s++}return n}resolveBackendConversationId(e,n){if(n)return n;let r=this.indexes.idIndex.get(e);if(r){let s=this.indexes.persisted.get(r);return(s?_(s):void 0)??r}let o=this.getLatestPersistedByName(e);if(o)return _(o)??o.harnessSessionId;let i=this.indexes.backendIdIndex.get(e);if(i){let s=this.indexes.persisted.get(i);return(s?_(s):void 0)??i}if(this.indexes.persisted.has(e)){let s=this.indexes.persisted.get(e);return s?_(s)??e:e}if(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e))return e}resolveHarnessSessionId(e,n){return this.resolveBackendConversationId(e,n)}getPersistedSession(e){let n=this.indexes.idIndex.get(e);if(n)return this.indexes.persisted.get(n);let r=this.getLatestPersistedByName(e);if(r)return r;let o=this.indexes.backendIdIndex.get(e);return o?this.indexes.persisted.get(o):this.indexes.persisted.get(e)}listPersistedSessions(){return[...this.indexes.persisted.values()].sort((e,n)=>(n.completedAt??0)-(e.completedAt??0))}};import{existsSync as Kx,mkdirSync as Vx,readFileSync as qx,readdirSync as nu,renameSync as Ch,statSync as _h,unlinkSync as Eh,writeFileSync as $h}from"fs";import{tmpdir as ru}from"os";import{dirname as jx,join as qs}from"path";import{homedir as kx}from"node:os";import{join as vx}from"node:path";function bh(t){let e=t.OPENCLAW_HOME?.trim();if(e)return e;let n=t.HOME?.trim()||kx();return vx(n,".openclaw")}Gt();var Us=6,Px=new Set(["running","completed","failed","killed"]);function Ro(t){return!!t&&typeof t=="object"}function br(t,e=""){return typeof t=="string"&&t.trim().length>0?t:e}function x(t){return typeof t=="string"&&t.trim().length>0?t:void 0}function He(t){return typeof t=="number"&&Number.isFinite(t)?t:void 0}function wx(t){return typeof t=="string"&&Rg.has(t)?t:void 0}function xh(t){return t==="default"||t==="plan"||t==="bypassPermissions"?t:void 0}function Ix(t){return t==="never"||t==="on-request"?"never":void 0}function bx(t){return t==="approve"||t==="ask"||t==="delegate"?t:void 0}function xx(t){if(t==="plan-mode"||t==="codex-first-turn-plan"||t==="soft-plan")return"plan-mode"}function Ah(t){return typeof t=="string"&&ys.has(t)?t:void 0}function Ax(t){return t==="user"||t==="idle-timeout"||t==="startup-timeout"||t==="shutdown"||t==="done"||t==="unknown"?t:void 0}function Rx(t){return t==="starting"||t==="active"||t==="awaiting_plan_decision"||t==="awaiting_user_input"||t==="awaiting_worktree_decision"||t==="suspended"||t==="terminal"?t:void 0}function Tx(t){return t==="not_required"||t==="pending"||t==="approved"||t==="changes_requested"||t==="rejected"?t:void 0}function Mx(t){return t==="none"||t==="provisioned"||t==="pending_decision"||t==="merge_conflict_resolving"||t==="merge_in_progress"||t==="pr_in_progress"||t==="merged"||t==="released"||t==="pr_open"||t==="dismissed"||t==="cleanup_failed"?t:void 0}function Cx(t){return t==="none"||t==="provisioned"||t==="pending_decision"||t==="merge_conflict_resolving"||t==="pr_open"||t==="merged"||t==="released"||t==="dismissed"||t==="no_change"||t==="cleanup_failed"?t:void 0}function _x(t){return t==="live"||t==="stopped"?t:void 0}function Ex(t){return t==="not_sent"||t==="sending"||t==="delivered"||t==="fallback_delivered"||t==="failed"?t:void 0}function $x(t){return t==="direct-telegram"?"direct-message":t==="none"||t==="direct-message"||t==="wake-only"?t:void 0}function Ox(t){return t==="none"||t==="canonical_buttons"||t==="explicit_fallback_text"?t:void 0}function Dx(t){return t==="idle"||t==="notifying"||t==="wake_pending"||t==="failed"?t:void 0}function Nx(t){return t==="awaiting_plan_output"||t==="awaiting_approval"||t==="approved_then_implemented"||t==="implemented_without_required_approval"||t==="not_plan_gated"?t:void 0}function Fx(t){return t==="plan-approve"||t==="plan-request-changes"||t==="plan-reject"||t==="plan-offer-start"||t==="plan-offer-dismiss"||t==="worktree-merge"||t==="worktree-create-pr"||t==="worktree-update-pr"||t==="worktree-view-pr"||t==="worktree-decide-later"||t==="worktree-dismiss"||t==="session-resume"||t==="session-restart"||t==="view-output"||t==="question-answer"?t:void 0}function Rh(t){if(!Ro(t))return;let e=x(t.provider),n=x(t.accountId),r=x(t.target),o=x(t.threadId),i=x(t.sessionKey);if(!(!e||!r))return{provider:e,accountId:n,target:r,threadId:o,sessionKey:i}}function Lx(t,e,n){if(Ro(t)){let r=x(t.kind),o=x(t.conversationId);if(o&&(r==="claude-code"||r==="codex-app-server"))return{kind:r,conversationId:o,runId:x(t.runId),worktreeId:x(t.worktreeId),worktreePath:x(t.worktreePath)}}if(e==="claude-code")return{kind:"claude-code",conversationId:n}}function Wx(t){if(!Ro(t))return;let e=Cx(t.state),n=x(t.updatedAt);if(!e||!n)return;let r=x(t.resolutionSource);return{state:e,updatedAt:n,resolvedAt:x(t.resolvedAt),resolutionSource:r==="agent_merge"||r==="agent_pr"||r==="strategy_no_change"||r==="lifecycle_resolver"||r==="dismiss"||r==="maintenance"?r:void 0,baseBranch:x(t.baseBranch),targetRepo:x(t.targetRepo),pushRemote:x(t.pushRemote),notes:Array.isArray(t.notes)?t.notes.filter(o=>typeof o=="string"&&o.length>0):void 0}}function Bx(t){let e=new Date(0).toISOString(),n=x(t.worktreeMergedAt)??x(t.worktreeDismissedAt)??x(t.pendingWorktreeDecisionSince)??e;if(t.worktreeMerged===!0)return{state:"merged",updatedAt:n,resolvedAt:x(t.worktreeMergedAt)??n,resolutionSource:"agent_merge",baseBranch:x(t.worktreeBaseBranch),targetRepo:x(t.worktreePrTargetRepo),pushRemote:x(t.worktreePushRemote)};if(t.worktreeDisposition==="dismissed")return{state:"dismissed",updatedAt:n,resolvedAt:x(t.worktreeDismissedAt)??n,resolutionSource:"dismiss",baseBranch:x(t.worktreeBaseBranch),targetRepo:x(t.worktreePrTargetRepo),pushRemote:x(t.worktreePushRemote)};if(t.worktreeDisposition==="no-change-cleaned")return{state:"no_change",updatedAt:n,resolvedAt:n,resolutionSource:"strategy_no_change",baseBranch:x(t.worktreeBaseBranch),targetRepo:x(t.worktreePrTargetRepo),pushRemote:x(t.worktreePushRemote)};if(t.worktreeDisposition==="pr-opened"||t.worktreeState==="pr_open")return{state:"pr_open",updatedAt:n,baseBranch:x(t.worktreeBaseBranch),targetRepo:x(t.worktreePrTargetRepo),pushRemote:x(t.worktreePushRemote)};if(t.pendingWorktreeDecisionSince||t.worktreeState==="pending_decision")return{state:"pending_decision",updatedAt:n,baseBranch:x(t.worktreeBaseBranch),targetRepo:x(t.worktreePrTargetRepo),pushRemote:x(t.worktreePushRemote)};if(t.worktreeState==="merge_conflict_resolving")return{state:"merge_conflict_resolving",updatedAt:n,baseBranch:x(t.worktreeBaseBranch),targetRepo:x(t.worktreePrTargetRepo),pushRemote:x(t.worktreePushRemote)};if(x(t.worktreePath)||x(t.worktreeBranch))return{state:"provisioned",updatedAt:n,baseBranch:x(t.worktreeBaseBranch),targetRepo:x(t.worktreePrTargetRepo),pushRemote:x(t.worktreePushRemote)}}function Ux(t){if(typeof t=="string"&&Px.has(t))return t==="running"?"killed":t}function Th(t){if(!Ro(t))return;let e=br(t.harnessSessionId);if(!e)return;let n=Ux(t.status);if(!n)return;let r=t.status==="running",o=x(t.worktreePath),i=x(t.worktreeBranch),s=x(t.originChannel),a=typeof t.originThreadId=="string"||typeof t.originThreadId=="number"?t.originThreadId:void 0,d=x(t.originSessionKey),l=Rh(t.route);if(!l)return;let u=_n({route:l,originChannel:s,originThreadId:a,originSessionKey:d});if(!u||o&&!i)return;let c=x(t.harness),g=Lx(t.backendRef,c,e),S=Wx(t.worktreeLifecycle)??Bx(t);return{sessionId:x(t.sessionId),harnessSessionId:e,backendRef:g,name:br(t.name,e),prompt:br(t.prompt),workdir:br(t.workdir,"(unknown)"),model:x(t.model),reasoningEffort:wx(t.reasoningEffort),fastMode:t.fastMode===!0?!0:void 0,createdAt:He(t.createdAt),completedAt:He(t.completedAt),status:n,lifecycle:r?"suspended":Rx(t.lifecycle),approvalState:Tx(t.approvalState),worktreeState:Mx(t.worktreeState),runtimeState:r?"stopped":_x(t.runtimeState),deliveryState:Dx(t.deliveryState),completionWakeIssuedAt:x(t.completionWakeIssuedAt),completionWakeSucceededAt:x(t.completionWakeSucceededAt),completionWakeFailedAt:x(t.completionWakeFailedAt),completionWakeSummaryRequired:t.completionWakeSummaryRequired===!0?!0:void 0,killReason:Ax(t.killReason),costUsd:typeof t.costUsd=="number"&&Number.isFinite(t.costUsd)?t.costUsd:0,originAgentId:x(t.originAgentId),originChannel:s,originThreadId:a,originSessionKey:d,route:u,outputPath:x(t.outputPath),harness:c,requestedPermissionMode:xh(t.requestedPermissionMode),currentPermissionMode:xh(t.currentPermissionMode),approvalExecutionState:Nx(t.approvalExecutionState),approvalRationale:x(t.approvalRationale),planModeApproved:t.planModeApproved===!0,pendingPlanApproval:t.pendingPlanApproval===!0,planApprovalContext:xx(t.planApprovalContext),planDecisionVersion:He(t.planDecisionVersion),actionablePlanDecisionVersion:He(t.actionablePlanDecisionVersion),canonicalPlanPromptVersion:He(t.canonicalPlanPromptVersion),approvalPromptRequiredVersion:He(t.approvalPromptRequiredVersion),approvalPromptVersion:He(t.approvalPromptVersion),approvalPromptStatus:Ex(t.approvalPromptStatus),approvalPromptTransport:$x(t.approvalPromptTransport),approvalPromptMessageKind:Ox(t.approvalPromptMessageKind),approvalPromptLastAttemptAt:x(t.approvalPromptLastAttemptAt),approvalPromptDeliveredAt:x(t.approvalPromptDeliveredAt),approvalPromptFailedAt:x(t.approvalPromptFailedAt),planApproval:bx(t.planApproval),codexApprovalPolicy:Ix(t.codexApprovalPolicy),worktreePath:o,worktreeBranch:i,worktreeStrategy:Ah(t.worktreeStrategy),worktreeMerged:typeof t.worktreeMerged=="boolean"?t.worktreeMerged:void 0,worktreeMergedAt:x(t.worktreeMergedAt),worktreePrUrl:x(t.worktreePrUrl),worktreePrNumber:He(t.worktreePrNumber),pendingWorktreeDecisionSince:x(t.pendingWorktreeDecisionSince),lastWorktreeReminderAt:x(t.lastWorktreeReminderAt),worktreeBaseBranch:x(t.worktreeBaseBranch),worktreePrTargetRepo:x(t.worktreePrTargetRepo),autoMergeParentSessionId:x(t.autoMergeParentSessionId),autoMergeConflictResolutionAttemptCount:He(t.autoMergeConflictResolutionAttemptCount),autoMergeResolverSessionId:x(t.autoMergeResolverSessionId),worktreePushRemote:x(t.worktreePushRemote),worktreeDecisionSnoozedUntil:x(t.worktreeDecisionSnoozedUntil),worktreeDisposition:t.worktreeDisposition==="active"||t.worktreeDisposition==="pr-opened"||t.worktreeDisposition==="merged"||t.worktreeDisposition==="dismissed"||t.worktreeDisposition==="no-change-cleaned"?t.worktreeDisposition:void 0,worktreeDismissedAt:x(t.worktreeDismissedAt),worktreeLifecycle:S,resumable:r?!0:t.resumable===!0}}function Mh(t){if(!Ro(t))return;let e=Fx(t.kind),n=br(t.id),r=br(t.sessionId),o=He(t.createdAt);if(!(!n||!r||!e||o==null))return{id:n,sessionId:r,kind:e,createdAt:o,planDecisionVersion:He(t.planDecisionVersion),expiresAt:He(t.expiresAt),consumedAt:He(t.consumedAt),optionIndex:He(t.optionIndex),label:x(t.label),targetUrl:x(t.targetUrl),route:Rh(t.route),launchName:x(t.launchName),launchPrompt:x(t.launchPrompt),launchWorkdir:x(t.launchWorkdir),launchWorktreeStrategy:Ah(t.launchWorktreeStrategy)}}function Ks(t){if(!t.backendRef?.kind||!t.backendRef.conversationId)throw new Error(`Persisted session ${t.harnessSessionId} is missing required backend ref metadata.`);if(!t.route?.provider||!t.route.target)throw new Error(`Persisted session ${t.harnessSessionId} is missing required route metadata.`);if(t.worktreePath&&!t.worktreeBranch)throw new Error(`Persisted session ${t.harnessSessionId} is missing required worktreeBranch metadata.`)}function tu(t){return!!t&&typeof t=="object"}function ou(t){return t instanceof Error?t.message:String(t)}function Oh(t){let e=t.OPENCLAW_CODE_AGENT_SESSIONS_PATH?.trim();return e||qs(bh(t),"code-agent-sessions.json")}function Dh(t,e,n){try{Vx(jx(t),{recursive:!0});let r=t+".tmp";$h(r,JSON.stringify({schemaVersion:Us,sessions:e,actionTokens:n},null,2),"utf-8"),Ch(r,t)}catch(r){console.warn(`[SessionStore] Failed to save session index: ${ou(r)}`)}}function Vs(t,e){try{if(!Kx(t))return;let n=`${t}.legacy-${Date.now()}.json`;Ch(t,n),console.warn(`[SessionStore] Breaking upgrade: archived ${e} session store to ${n}. Legacy sessions are not loaded by this release.`)}catch(n){console.warn(`[SessionStore] Failed to archive legacy session store: ${ou(n)}`)}}function Gx(t,e){try{if(e.length===0)return;let n=`${t}.codex-sdk-legacy-${Date.now()}.json`;$h(n,JSON.stringify(e,null,2),"utf-8"),console.warn(`[SessionStore] Breaking Codex transport upgrade: archived ${e.length} legacy Codex SDK session(s) to ${n}. They are not loaded by the App Server backend.`)}catch(n){console.warn(`[SessionStore] Failed to archive legacy Codex SDK sessions: ${ou(n)}`)}}function Nh(t,e){try{let n=ru(),r=nu(n).filter(o=>o.startsWith("openclaw-agent-")&&o.endsWith(".txt"));for(let o of r)try{let i=qs(n,o),s=_h(i).mtimeMs;t-s>e&&Eh(i)}catch{}}catch{}}function Fh(t,e){try{let n=ru(),r=nu(n).filter(i=>i.startsWith("openclaw-agent-")&&i.endsWith(".txt")),o;for(let i of r)try{let s=qs(n,i),a=_h(s).mtimeMs+e;if(a<=t)return t;o=o==null?a:Math.min(o,a)}catch{}return o}catch{return}}function Lh(t){try{let e=new Set(t),n=ru(),r=nu(n).filter(o=>o.startsWith("openclaw-agent-")&&o.endsWith(".txt"));for(let o of r){let i=qs(n,o);if(!e.has(i))try{Eh(i)}catch{}}}catch{}}function Wh(t){let{indexPath:e,clearAll:n,indexPersistedEntry:r,setActionToken:o,purgeExpiredActionTokens:i,saveIndex:s}=t;try{let a=qx(e,"utf-8"),d=JSON.parse(a);if(Array.isArray(d)){Vs(e,"legacy array store"),s();return}if(!tu(d)||d.schemaVersion!==Us&&d.schemaVersion!==4){Vs(e,`schema mismatch (expected v${Us})`),s();return}let l=Array.isArray(d.sessions)?d.sessions:[],u=[];for(let g of l){if(tu(g)&&g.harness==="codex"){let k=tu(g.backendRef)?g.backendRef:void 0;if((typeof k?.kind=="string"?k.kind:void 0)!=="codex-app-server"){u.push(g);continue}}let S=Th(g);if(!S){n(),Vs(e,"invalid v4 session entry"),s();return}r(S)}u.length>0&&(Gx(e,u),s());let c=Array.isArray(d.actionTokens)?d.actionTokens:[];for(let g of c){let S=Mh(g);if(!S){n(),Vs(e,"invalid v4 action token"),s();return}o(S)}i()}catch{}}var Qx=new Set(["completed","failed","killed"]),iu=1440*60*1e3;function Jx(t){return t instanceof Error?t.message:String(t)}var js=class{persisted=new Map;idIndex=new Map;nameIndex=new Map;backendIdIndex=new Map;actionTokens;actionTokenStore;indexPath;queries;constructor(e={}){let n=e.env??process.env;this.indexPath=e.indexPath??Oh(n),this.actionTokenStore=new Ws(()=>this.saveIndex(),iu),this.actionTokens=this.actionTokenStore.tokens,this.queries=new Bs({persisted:this.persisted,idIndex:this.idIndex,nameIndex:this.nameIndex,backendIdIndex:this.backendIdIndex}),n.OPENCLAW_DEBUG_SESSION_STORE==="1"&&console.warn(`[SessionStore] index path: ${this.indexPath}`),this.loadIndex()}loadIndex(){Wh({indexPath:this.indexPath,clearAll:()=>{this.persisted.clear(),this.idIndex.clear(),this.nameIndex.clear(),this.backendIdIndex.clear(),this.actionTokenStore.clear()},indexPersistedEntry:e=>this.indexPersistedEntry(e),setActionToken:e=>{this.actionTokens.set(e.id,e)},purgeExpiredActionTokens:()=>this.actionTokenStore.purgeExpiredActionTokens(),saveIndex:()=>this.saveIndex()})}saveIndex(){Dh(this.indexPath,[...this.persisted.values()],this.actionTokenStore.listForPersistence())}assertPersistedEntry(e){Ks(e)}getEntryStorageKey(e){return e.harnessSessionId}buildPersistedBackendRef(e){return e.backendRef??{kind:cl(e)==="codex"?"codex-app-server":"claude-code",conversationId:e.harnessSessionId}}indexPersistedEntry(e){let n=this.getEntryStorageKey(e);this.persisted.set(n,e),e.sessionId&&this.idIndex.set(e.sessionId,n),e.name&&this.nameIndex.set(e.name,n);let r=_(e);r&&this.backendIdIndex.set(r,n)}removePersistedIndexes(e){let n=this.getEntryStorageKey(e);this.persisted.delete(n);for(let[r,o]of this.idIndex)o===n&&this.idIndex.delete(r);for(let[r,o]of this.nameIndex)o===n&&this.nameIndex.delete(r);for(let[r,o]of this.backendIdIndex)o===n&&this.backendIdIndex.delete(r)}markRunning(e){if(!e.harnessSessionId)return;let n=typeof e.controlStateSnapshot=="function"?e.controlStateSnapshot():{planModeApproved:!1},r=_n({route:e.route,originChannel:e.originChannel,originThreadId:e.originThreadId,originSessionKey:e.originSessionKey});if(!r)return;let o={sessionId:e.id,harnessSessionId:e.harnessSessionId,backendRef:this.buildPersistedBackendRef(e),name:e.name,prompt:e.prompt,workdir:e.originalWorkdir??e.workdir,model:e.model,reasoningEffort:e.reasoningEffort,fastMode:e.fastMode,createdAt:e.startedAt,status:"running",lifecycle:e.lifecycle,approvalState:e.approvalState,worktreeState:e.worktreeState,runtimeState:e.runtimeState,deliveryState:e.deliveryState,costUsd:0,originAgentId:e.originAgentId,originChannel:e.originChannel,originThreadId:e.originThreadId,originSessionKey:e.originSessionKey,route:r,harness:e.harnessName,requestedPermissionMode:e.requestedPermissionMode,currentPermissionMode:e.currentPermissionMode,approvalExecutionState:e.approvalExecutionState,approvalRationale:e.approvalRationale,planModeApproved:n.planModeApproved,pendingPlanApproval:e.pendingPlanApproval,planApprovalContext:e.planApprovalContext,planDecisionVersion:e.planDecisionVersion,actionablePlanDecisionVersion:e.actionablePlanDecisionVersion,canonicalPlanPromptVersion:e.canonicalPlanPromptVersion,approvalPromptRequiredVersion:e.approvalPromptRequiredVersion,approvalPromptVersion:e.approvalPromptVersion,approvalPromptStatus:e.approvalPromptStatus,approvalPromptTransport:e.approvalPromptTransport,approvalPromptMessageKind:e.approvalPromptMessageKind,approvalPromptLastAttemptAt:e.approvalPromptLastAttemptAt,approvalPromptDeliveredAt:e.approvalPromptDeliveredAt,approvalPromptFailedAt:e.approvalPromptFailedAt,planApproval:e.planApproval,codexApprovalPolicy:e.codexApprovalPolicy,worktreePath:e.worktreePath,worktreeBranch:e.worktreeBranch,worktreeStrategy:e.worktreeStrategy,worktreeBaseBranch:e.worktreeBaseBranch,worktreePrTargetRepo:e.worktreePrTargetRepo,autoMergeParentSessionId:e.autoMergeParentSessionId,autoMergeConflictResolutionAttemptCount:e.autoMergeConflictResolutionAttemptCount,autoMergeResolverSessionId:e.autoMergeResolverSessionId,worktreeLifecycle:e.worktreeLifecycle,resumable:e.isExplicitlyResumable};Ks(o),this.indexPersistedEntry(o),this.saveIndex()}hasRecordedSession(e){return this.queries.hasRecordedSession(e)}persistTerminal(e){if(!e.harnessSessionId)return;let n=typeof e.controlStateSnapshot=="function"?e.controlStateSnapshot():{planModeApproved:!1},r=_n({route:e.route,originChannel:e.originChannel,originThreadId:e.originThreadId,originSessionKey:e.originSessionKey});if(!r)return;let o;try{let s=hr(e.id);if(Hx(s))o=s;else{let a=e.getOutput().join(`
207
- `);a.length>0&&(zx(s,a,"utf-8"),o=s)}}catch(s){console.warn(`[SessionStore] Failed to write output file for session ${e.id}: ${Jx(s)}`)}let i={sessionId:e.id,harnessSessionId:e.harnessSessionId,backendRef:this.buildPersistedBackendRef(e),name:e.name,prompt:e.prompt,workdir:e.originalWorkdir??e.workdir,model:e.model,reasoningEffort:e.reasoningEffort,fastMode:e.fastMode,createdAt:e.startedAt,completedAt:e.completedAt,status:e.status,lifecycle:e.lifecycle,approvalState:e.approvalState,worktreeState:e.worktreeState,runtimeState:e.runtimeState,deliveryState:e.deliveryState,killReason:e.killReason,costUsd:e.costUsd,originAgentId:e.originAgentId,originChannel:e.originChannel,originThreadId:e.originThreadId,originSessionKey:e.originSessionKey,route:r,outputPath:o,harness:e.harnessName,requestedPermissionMode:e.requestedPermissionMode,currentPermissionMode:e.currentPermissionMode,approvalExecutionState:e.approvalExecutionState,approvalRationale:e.approvalRationale,planModeApproved:n.planModeApproved,pendingPlanApproval:e.pendingPlanApproval,planApprovalContext:e.planApprovalContext,planDecisionVersion:e.planDecisionVersion,actionablePlanDecisionVersion:e.actionablePlanDecisionVersion,canonicalPlanPromptVersion:e.canonicalPlanPromptVersion,approvalPromptRequiredVersion:e.approvalPromptRequiredVersion,approvalPromptVersion:e.approvalPromptVersion,approvalPromptStatus:e.approvalPromptStatus,approvalPromptTransport:e.approvalPromptTransport,approvalPromptMessageKind:e.approvalPromptMessageKind,approvalPromptLastAttemptAt:e.approvalPromptLastAttemptAt,approvalPromptDeliveredAt:e.approvalPromptDeliveredAt,approvalPromptFailedAt:e.approvalPromptFailedAt,planApproval:e.planApproval,codexApprovalPolicy:e.codexApprovalPolicy,worktreePath:e.worktreePath,worktreeBranch:e.worktreeBranch,worktreeStrategy:e.worktreeStrategy,worktreeBaseBranch:e.worktreeBaseBranch,worktreePrTargetRepo:e.worktreePrTargetRepo,autoMergeParentSessionId:e.autoMergeParentSessionId,autoMergeConflictResolutionAttemptCount:e.autoMergeConflictResolutionAttemptCount,autoMergeResolverSessionId:e.autoMergeResolverSessionId,worktreeLifecycle:e.worktreeLifecycle,resumable:e.isExplicitlyResumable};Ks(i),this.indexPersistedEntry(i),this.saveIndex()}getLatestPersistedByName(e){return this.queries.getLatestPersistedByName(e)}resolveBackendConversationId(e,n){return this.queries.resolveBackendConversationId(e,n)}resolveHarnessSessionId(e,n){return this.queries.resolveHarnessSessionId(e,n)}getPersistedSession(e){return this.queries.getPersistedSession(e)}listPersistedSessions(){return this.queries.listPersistedSessions()}cleanupTmpOutputFiles(e){this.actionTokenStore.purgeExpiredActionTokens(e),Nh(e,iu)}getNextTmpOutputCleanupAt(e){return Fh(e,iu)}evictOldestPersisted(e){let n=this.listPersistedSessions();if(n.length<=e)return[];let r=n.slice(e);for(let o of r)this.removePersistedIndexes(o);return this.saveIndex(),r}shouldGcActiveSession(e,n,r){return!e.completedAt||!Qx.has(e.status)?!1:n-e.completedAt>r}getActionToken(e){return this.actionTokenStore.getActionToken(e)}consumeActionToken(e){return this.actionTokenStore.consumeActionToken(e)}deleteActionTokensForSession(e){this.actionTokenStore.deleteActionTokensForSession(e)}purgeExpiredActionTokens(e=Date.now()){this.actionTokenStore.purgeExpiredActionTokens(e)}getNextActionTokenExpiry(){return this.actionTokenStore.nextExpiryAt()}onActionTokensChanged(e){this.actionTokenStore.setAfterChangeListener(e)}hasOutputPathReference(e){for(let n of this.persisted.values())if(n.outputPath===e)return!0;return!1}getReferencedOutputPaths(){return[...new Set([...this.persisted.values()].map(e=>e.outputPath).filter(e=>typeof e=="string"&&e.length>0))]}cleanupOrphanOutputFiles(){Lh(this.getReferencedOutputPaths())}};var Yx=new Set(["completed","failed","killed"]),Gs=class{metrics={totalCostUsd:0,costPerDay:new Map,sessionsByStatus:{completed:0,failed:0,killed:0},totalLaunched:0,totalDurationMs:0,sessionsWithDuration:0,mostExpensive:null};incrementLaunched(){this.metrics.totalLaunched++}recordSession(e){let n=e.costUsd??0,r=e.status;this.metrics.totalCostUsd+=n;let o=new Date(e.completedAt??e.startedAt).toISOString().slice(0,10);if(this.metrics.costPerDay.set(o,(this.metrics.costPerDay.get(o)??0)+n),Yx.has(r)&&this.metrics.sessionsByStatus[r]++,e.completedAt){let i=e.completedAt-e.startedAt;this.metrics.totalDurationMs+=i,this.metrics.sessionsWithDuration++}(!this.metrics.mostExpensive||n>this.metrics.mostExpensive.costUsd)&&(this.metrics.mostExpensive={id:e.id,name:e.name,costUsd:n,prompt:Me(e.prompt,80)})}getMetrics(){return{totalCostUsd:this.metrics.totalCostUsd,costPerDay:new Map(this.metrics.costPerDay),sessionsByStatus:{...this.metrics.sessionsByStatus},totalLaunched:this.metrics.totalLaunched,totalDurationMs:this.metrics.totalDurationMs,sessionsWithDuration:this.metrics.sessionsWithDuration,mostExpensive:this.metrics.mostExpensive?{...this.metrics.mostExpensive}:null}}};import*as Kh from"child_process";var Bh=5e3,Xx=64,Zx={execFile:Kh.execFile},hn=class extends Error{constructor(e){super(e),this.name="MissingRuntimeDirectNotificationCapabilityError"}},Hs=class{constructor(e=Zx.execFile){this.execFile=e}execFile;async send(e,n,r){q("direct_send_started",{...ft(e),messageTextLength:n.length,...se(r)});try{await this.sendViaRuntime(e,n,r),q("direct_send_succeeded",{...ft(e),deliveryPath:"runtime",...se(r)});return}catch(o){if(!(o instanceof hn))throw q("direct_send_failed",{...ft(e),deliveryPath:"runtime",...se(r),error:su(o)}),o;q("direct_send_runtime_capability_missing",{...ft(e),deliveryPath:"runtime",...se(r),reason:o.message}),await this.sendViaBoundedCliFallback(e,n,r,o.message),q("direct_send_succeeded",{...ft(e),deliveryPath:"cli-fallback",...se(r)})}}async sendViaRuntime(e,n,r){let o=Bf(),i=Kf(),s=o?.channel?.outbound?.loadAdapter;if(!o)throw new hn("OpenClaw plugin runtime is unavailable for direct notification delivery");if(i==null)throw new hn("OpenClaw runtime config snapshot is unavailable for direct notification delivery");if(!o.channel)throw new hn(`OpenClaw plugin runtime channel surface is unavailable for direct notification delivery (runtimeVersion=${au(o)})`);if(!o.channel.outbound)throw new hn(`OpenClaw plugin runtime channel outbound surface is unavailable for direct notification delivery (runtimeVersion=${au(o)})`);if(!s)throw new hn(`OpenClaw plugin runtime channel outbound loadAdapter is unavailable for direct notification delivery (runtimeVersion=${au(o)})`);let a=await s(e.channel);if(!a)throw new Error(`OpenClaw outbound adapter for channel "${e.channel}" is unavailable`);let d=zs(r);if(q("runtime_adapter_loaded",{...ft(e),adapterHasRenderPresentation:typeof a.renderPresentation=="function",adapterHasSendPayload:typeof a.sendPayload=="function",adapterHasSendText:typeof a.sendText=="function",...se(r),...d?Ol(d):{}}),d){await this.sendPresentation(a,i,e,n,d);return}if(!a.sendText)throw new Error(`OpenClaw outbound adapter for channel "${e.channel}" cannot send text`);await a.sendText({cfg:i,to:e.target,text:n,accountId:e.accountId,threadId:e.threadId})}async sendPresentation(e,n,r,o,i){let s=tA(i),a={text:o,presentation:i,interactive:s};q("presentation_render_started",{...ft(r),messageTextLength:o.length,adapterHasRenderPresentation:typeof e.renderPresentation=="function",adapterHasSendPayload:typeof e.sendPayload=="function",...Ol(i)});let d={cfg:n,to:r.target,text:o,payload:a,accountId:r.accountId,threadId:r.threadId},l=e.renderPresentation?await e.renderPresentation({payload:a,presentation:i,ctx:d}):a,u=rA(l,s,r.channel);if(q("presentation_render_completed",{...ft(r),adapterHasRenderPresentation:typeof e.renderPresentation=="function",adapterHasSendPayload:typeof e.sendPayload=="function",...Dl(u)}),!u||typeof u!="object"||!e.sendPayload)throw new Error(`OpenClaw outbound adapter for channel "${r.channel}" cannot preserve interactive presentation`);let c=await e.sendPayload({...d,payload:u});q("presentation_send_payload_completed",{...ft(r),...Dl(u),...Kg(c)})}sendViaBoundedCliFallback(e,n,r,o){return new Promise((i,s)=>{let a=eA(e,n,r);q("direct_send_cli_fallback_started",{...ft(e),deliveryPath:"cli-fallback",reason:o,messageTextLength:n.length,...se(r)}),this.execFile("openclaw",a,{timeout:Bh,killSignal:"SIGKILL"},(d,l,u)=>{if(!d){q("direct_send_cli_fallback_completed",{...ft(e),deliveryPath:"cli-fallback",...se(r)}),i();return}let c=u?.trim()?` | stderr: ${u.trim()}`:"";q("direct_send_cli_fallback_failed",{...ft(e),deliveryPath:"cli-fallback",...se(r),error:su(d),stderrLength:u?.length}),s(new Error(`${o}; bounded openclaw message send fallback failed within ${Bh}ms timeout: ${su(d)}${c}`))})})}};function ft(t){return{channel:t.channel,target:t.target,accountId:t.accountId,threadId:t.threadId,sessionKey:t.sessionKey}}function eA(t,e,n){let r=zs(n),o=["message","send","--channel",t.channel,"--target",t.target,"--message",e];return t.accountId&&o.push("--account",t.accountId),t.threadId&&o.push("--thread-id",t.threadId),r&&o.push("--presentation",JSON.stringify(r)),o}function su(t){return t instanceof Error?t.message:String(t)}function au(t){if(!t||typeof t!="object")return"unknown";let e=t.version;return typeof e=="string"&&e.trim()?e:"unknown"}function zs(t){let e=(t??[]).filter(n=>Array.isArray(n)&&n.length>0).map(n=>({type:"buttons",buttons:n.map(r=>({label:r.label,value:dA(r.callbackData),...r.style?{style:r.style}:{}}))}));return e.length>0?{blocks:e}:void 0}function tA(t){let e=t.blocks.filter(n=>n.type==="buttons"&&n.buttons.length>0).map(n=>({type:"buttons",buttons:n.buttons.map(r=>({label:r.label,value:r.value,...r.style?{style:r.style}:{}}))}));return e.length>0?{blocks:e}:void 0}function nA(t){if(!t||typeof t!="object"||Array.isArray(t))return!1;let e=t.interactive;if(!e||typeof e!="object"||Array.isArray(e))return!1;let n=e.blocks;return Array.isArray(n)&&n.some(r=>{if(!r||typeof r!="object"||Array.isArray(r))return!1;let o=r;return o.type==="buttons"&&Array.isArray(o.buttons)&&o.buttons.length>0})}function rA(t,e,n){if(!e)return t;let r=nA(t)?t:oA(t,e);return n!=="telegram"?r:iA(r,e)}function oA(t,e){return!t||typeof t!="object"||Array.isArray(t)?t:{...t,interactive:e}}function iA(t,e){if(!t||typeof t!="object"||Array.isArray(t))return t;let n=t,r=Uh(n.channelData),o=Uh(r?.telegram);if(aA(o?.buttons))return t;let i=sA(e);return i?{...n,channelData:{...r??{},telegram:{...o??{},buttons:i}}}:t}function sA(t){let e=t.blocks.filter(n=>n.type==="buttons"&&n.buttons.length>0).map(n=>n.buttons.filter(r=>typeof r.value=="string"&&r.value.trim().length>0&&Buffer.byteLength(r.value,"utf8")<=Xx).map(r=>({text:r.label,callback_data:r.value,...r.style?{style:r.style}:{}}))).filter(n=>n.length>0);return e.length>0?e:void 0}function aA(t){return Array.isArray(t)&&t.some(e=>Array.isArray(e)&&e.length>0)}function Uh(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:void 0}function dA(t){return t.startsWith(`${ot}:`)?t:`${ot}:${t}`}import*as Vh from"child_process";var xr=class{tails=new Map;enqueue(e,n,r){let o=this.tails.get(e);o!==void 0&&r?.();let s=(o?.catch(()=>{})??Promise.resolve()).then(()=>n()),a=s.catch(()=>{});return this.tails.set(e,a),a.finally(()=>{this.tails.get(e)===a&&this.tails.delete(e)}),s}clear(){this.tails.clear()}};var du=3e4,lA=2e3,uA=2e4,gt=4;function To(t){return t instanceof Error?t.message:String(t)}function pA(){return new Error(`Dispatch timed out after ${du}ms`)}function cA(t){if(!(t instanceof Error))return!1;let e=t;return e.killed===!0&&e.signal==="SIGKILL"}var mA={execFile:Vh.execFile},Qs=class{pendingRetryTimers=new Map;orderedDispatches=new xr;disposed=!1;clearPendingRetries(){for(let e of this.pendingRetryTimers.values())for(let n of e)clearTimeout(n.timer),n.onCleared?.();this.pendingRetryTimers.clear()}clearRetryTimersForSession(e){let n=this.pendingRetryTimers.get(e);if(n){for(let r of n)clearTimeout(r.timer),r.onCleared?.();this.pendingRetryTimers.delete(e)}}dispose(){this.disposed=!0,this.clearPendingRetries(),this.orderedDispatches.clear()}execute(e,n,r=1){if(!this.disposed){if(r===1&&n.orderingKey){this.enqueueOrderedDispatch(n.orderingKey,o=>this.executeNow(e,n,o,r));return}this.executeNow(e,n,void 0,r)}}executePromise(e,n,r=1){if(!this.disposed){if(r===1&&n.orderingKey){this.enqueueOrderedDispatch(n.orderingKey,o=>this.executePromiseNow(e,n,o,r));return}this.executePromiseNow(e,n,void 0,r)}}executeNow(e,n,r,o=1){if(this.disposed||n.shouldContinue?.()===!1){r?.();return}let i=Date.now();o===1&&n.onStarted?.(),this.log("info","dispatch_started",{label:n.label,sessionId:n.sessionId,target:n.target,phase:n.phase,messageKind:n.messageKind,route:n.routeSummary,...n.dispatchContext,attempt:o,maxAttempts:gt}),mA.execFile("openclaw",e,{timeout:du,killSignal:"SIGKILL"},(s,a,d)=>{if(this.disposed){r?.();return}let l=Date.now()-i;if(!s){this.log("info","dispatch_succeeded",{label:n.label,sessionId:n.sessionId,target:n.target,phase:n.phase,messageKind:n.messageKind,route:n.routeSummary,...n.dispatchContext,attempt:o,maxAttempts:gt,elapsedMs:l}),n.shouldContinue?.()!==!1&&n.onSuccess?.(),r?.();return}let u=d?.trim()?` | stderr: ${d.trim()}`:"";if(n.target==="message.send"&&cA(s)){this.log("error","dispatch_failed",{label:n.label,sessionId:n.sessionId,target:n.target,phase:n.phase,messageKind:n.messageKind,route:n.routeSummary,...n.dispatchContext,attempt:o,maxAttempts:gt,elapsedMs:l,error:`${To(s)}${u}`,terminal:!0,ambiguousResult:!0}),n.onAmbiguousResult?.(),r?.();return}if(o>=gt||n.terminalOnFailure===!0){this.log("error","dispatch_failed",{label:n.label,sessionId:n.sessionId,target:n.target,phase:n.phase,messageKind:n.messageKind,route:n.routeSummary,...n.dispatchContext,attempt:o,maxAttempts:gt,elapsedMs:l,error:`${To(s)}${u}`,terminal:!0}),n.onFinalFailure?.(),r?.();return}let g=this.retryDelayMs(o);this.log("error","dispatch_retry_scheduled",{label:n.label,sessionId:n.sessionId,target:n.target,phase:n.phase,messageKind:n.messageKind,route:n.routeSummary,...n.dispatchContext,attempt:o,maxAttempts:gt,elapsedMs:l,retryDelayMs:g,error:`${To(s)}${u}`});let S={timer:setTimeout(()=>{let k=this.pendingRetryTimers.get(n.sessionId);if(k&&(k.delete(S),k.size===0&&this.pendingRetryTimers.delete(n.sessionId)),n.shouldContinue?.()===!1){r?.();return}this.executeNow(e,n,r,o+1)},g),onCleared:r};S.timer.unref?.(),this.pendingRetryTimers.has(n.sessionId)||this.pendingRetryTimers.set(n.sessionId,new Set),this.pendingRetryTimers.get(n.sessionId).add(S)})}executePromiseNow(e,n,r,o=1){if(this.disposed||n.shouldContinue?.()===!1){r?.();return}let i=Date.now();o===1&&n.onStarted?.(),this.log("info","dispatch_started",{label:n.label,sessionId:n.sessionId,target:n.target,phase:n.phase,messageKind:n.messageKind,route:n.routeSummary,...n.dispatchContext,attempt:o,maxAttempts:gt}),this.executePromiseWithTimeout(e).then(()=>{if(this.disposed){r?.();return}let s=Date.now()-i;this.log("info","dispatch_succeeded",{label:n.label,sessionId:n.sessionId,target:n.target,phase:n.phase,messageKind:n.messageKind,route:n.routeSummary,...n.dispatchContext,attempt:o,maxAttempts:gt,elapsedMs:s}),n.shouldContinue?.()!==!1&&n.onSuccess?.(),r?.()}).catch(s=>{if(this.disposed){r?.();return}let a=Date.now()-i;if(o>=gt||n.terminalOnFailure===!0){this.log("error","dispatch_failed",{label:n.label,sessionId:n.sessionId,target:n.target,phase:n.phase,messageKind:n.messageKind,route:n.routeSummary,...n.dispatchContext,attempt:o,maxAttempts:gt,elapsedMs:a,error:To(s),terminal:!0,...n.terminalOnFailure===!0&&o<gt?{terminalReason:"non_retryable"}:{}}),n.onFinalFailure?.(),r?.();return}let d=this.retryDelayMs(o);this.log("error","dispatch_retry_scheduled",{label:n.label,sessionId:n.sessionId,target:n.target,phase:n.phase,messageKind:n.messageKind,route:n.routeSummary,...n.dispatchContext,attempt:o,maxAttempts:gt,elapsedMs:a,retryDelayMs:d,error:To(s)});let l={timer:setTimeout(()=>{let u=this.pendingRetryTimers.get(n.sessionId);if(u&&(u.delete(l),u.size===0&&this.pendingRetryTimers.delete(n.sessionId)),n.shouldContinue?.()===!1){r?.();return}this.executePromiseNow(e,n,r,o+1)},d),onCleared:r};l.timer.unref?.(),this.pendingRetryTimers.has(n.sessionId)||this.pendingRetryTimers.set(n.sessionId,new Set),this.pendingRetryTimers.get(n.sessionId).add(l)})}executePromiseWithTimeout(e){return new Promise((n,r)=>{let o=!1,i=setTimeout(()=>{o||(o=!0,r(pA()))},du);i.unref?.(),Promise.resolve().then(e).then(()=>{o||(o=!0,clearTimeout(i),n())}).catch(s=>{o||(o=!0,clearTimeout(i),r(s))})})}retryDelayMs(e){let n=Math.max(0,e-1),r=lA*2**n;return Math.min(r,uA)}enqueueOrderedDispatch(e,n){this.orderedDispatches.enqueue(e,async()=>{this.disposed||await new Promise(r=>{let o=!1;n(()=>{o||(o=!0,r())})})})}log(e,n,r){let o=`[WakeDispatcher] ${JSON.stringify({event:n,...r})}`;if(e==="error"){console.error(o);return}console.info(o)}};Gt();var Js=class{resolve(e){let n=xi(e);if(!(!n?.provider||!n.target))return{channel:n.provider,target:n.target,accountId:n.accountId,threadId:n.threadId,sessionKey:n.sessionKey}}summary(e){if(!e)return"system";let n=e.accountId?`|${e.accountId}`:"",r=e.threadId?`#${e.threadId}`:"";return`${e.channel}${n}|${e.target}${r}`}};import{randomUUID as fA}from"crypto";var Ys=class{constructor(e={}){this.options=e}options;buildChatSendArgs(e,n,r){return["gateway","call","chat.send","--expect-final","--timeout","30000","--params",JSON.stringify({sessionKey:e,message:n,deliver:r,idempotencyKey:fA()})]}buildDirectNotificationArgs(e,n,r){let o=zs(r),i=["message","send","--channel",e.channel,"--target",e.target,"--message",n];return e.accountId&&i.push("--account",e.accountId),e.threadId&&i.push("--thread-id",e.threadId),o&&i.push("--presentation",JSON.stringify(o)),i}buildSystemEventArgs(e){return["system","event","--text",e,"--mode","now"]}};var Xs=class{routes=new Js;transport;directNotifications;executor=new Qs;constructor(e={}){this.transport=e.transport??new Ys(e.transportOptions),this.directNotifications=e.directNotifications===void 0?new Hs:e.directNotifications}clearPendingRetries(){this.executor.clearPendingRetries()}clearRetryTimersForSession(e){this.executor.clearRetryTimersForSession(e)}dispose(){this.executor.dispose()}buildDispatchContext(e){let n=e.buttons??[],r=n.flat();return{transportRoute:e.routeSummary,transportChannel:e.route?.channel??"system",transportTarget:e.route?.target??"system",transportAccountId:e.route?.accountId,transportThreadId:e.route?.threadId,transportSessionKey:e.route?.sessionKey,messageTextLength:e.text.length,buttonsPresent:r.length>0,buttonRows:n.length||void 0,buttonCount:r.length||void 0,buttonLabels:r.length>0?r.map(o=>o.label):void 0,maxCallbackDataLength:r.length>0?Math.max(...r.map(o=>o.callbackData.length)):void 0}}sendWake(e,n,r,o,i,s,a){let d=this.routes.resolve(e),l=a;if(l?.()===!1)return;let u=d?.sessionKey?.trim();if(!u){this.executor.execute(this.transport.buildSystemEventArgs(n),{label:`${r}-system`,sessionId:e.id,target:"system.event",phase:o,routeSummary:"system",messageKind:"wake",dispatchContext:this.buildDispatchContext({routeSummary:"system",text:n}),onSuccess:s,onFinalFailure:i,shouldContinue:l});return}this.executor.execute(this.transport.buildChatSendArgs(u,n,!0),{label:r,sessionId:e.id,target:"chat.send",phase:o,routeSummary:`session:${u}`,messageKind:"wake",dispatchContext:this.buildDispatchContext({routeSummary:`session:${u}`,route:d,text:n}),onSuccess:s,shouldContinue:l,onFinalFailure:()=>{l?.()!==!1&&this.executor.execute(this.transport.buildSystemEventArgs(n),{label:`${r}-fallback`,sessionId:e.id,target:"system.event",phase:o,routeSummary:"system",messageKind:"wake",dispatchContext:this.buildDispatchContext({routeSummary:"system",text:n}),onSuccess:s,onFinalFailure:i,shouldContinue:l})}})}sendUserNotification(e,n,r,o,i,s,a=!1,d){if(d?.()===!1)return;let l=!!o?.some(k=>Array.isArray(k)&&k.length>0),u=this.routes.resolve(e);q("wake_notify_selected",{sessionId:e.id,sessionName:e.name,label:r,messageTextLength:n.length,requireDirectDelivery:a,hasDirectNotificationTransport:!!this.directNotifications,routeSummary:u?this.routes.summary(u):"system",channel:u?.channel,target:u?.target,accountId:u?.accountId,threadId:u?.threadId,sessionKey:u?.sessionKey,...se(o)});let c=u?`notify:${u.channel}|${u.accountId??""}|${u.target}|${u.threadId??""}`:`notify:system:${e.id}`;if(!u){if(q("wake_notify_no_direct_route",{sessionId:e.id,sessionName:e.name,label:r,requireDirectDelivery:a,hasInteractiveButtons:l,...se(o)}),a){console.warn(`[WakeDispatcher] Direct notification "${r}" for session ${e.id} has no direct route; reporting delivery failure instead of using system fallback.`),i?.();return}if(l){console.warn(`[WakeDispatcher] Interactive notification "${r}" for session ${e.id} has no direct route; refusing text-only fallback because buttons would be lost.`),i?.();return}this.executor.execute(this.transport.buildSystemEventArgs(n),{label:`${r}-notify-system`,sessionId:e.id,target:"system.event",phase:"notify",routeSummary:"system",messageKind:"notify",dispatchContext:this.buildDispatchContext({routeSummary:"system",text:n,buttons:o}),orderingKey:c,onSuccess:s,onFinalFailure:i,shouldContinue:d});return}let g=()=>{if(q("wake_notify_direct_failed",{sessionId:e.id,sessionName:e.name,label:r,requireDirectDelivery:a,hasInteractiveButtons:l,channel:u.channel,target:u.target,accountId:u.accountId,threadId:u.threadId,sessionKey:u.sessionKey,...se(o)}),a){console.warn(`[WakeDispatcher] Direct notification "${r}" for session ${e.id} failed direct delivery; reporting delivery failure instead of using system fallback.`),i?.();return}if(l){console.warn(`[WakeDispatcher] Interactive notification "${r}" for session ${e.id} failed direct delivery; refusing text-only fallback because buttons would be lost.`),i?.();return}this.executor.execute(this.transport.buildSystemEventArgs(n),{label:`${r}-notify-fallback`,sessionId:e.id,target:"system.event",phase:"notify",routeSummary:"system",messageKind:"notify",dispatchContext:this.buildDispatchContext({routeSummary:"system",text:n}),orderingKey:c,onSuccess:s,onFinalFailure:i,shouldContinue:d})},S={label:`${r}-notify`,sessionId:e.id,target:"message.send",phase:"notify",routeSummary:this.routes.summary(u),messageKind:"notify",dispatchContext:this.buildDispatchContext({routeSummary:this.routes.summary(u),route:u,text:n,buttons:o}),orderingKey:c,onSuccess:s,onAmbiguousResult:g,onFinalFailure:g,terminalOnFailure:this.directNotifications?!0:void 0,shouldContinue:d};if(this.directNotifications){q("wake_notify_dispatching_direct_runtime",{sessionId:e.id,sessionName:e.name,label:r,channel:u.channel,target:u.target,accountId:u.accountId,threadId:u.threadId,sessionKey:u.sessionKey,...se(o)}),this.executor.executePromise(()=>this.directNotifications.send(u,n,o),S);return}q("wake_notify_dispatching_cli_message_send",{sessionId:e.id,sessionName:e.name,label:r,channel:u.channel,target:u.target,accountId:u.accountId,threadId:u.threadId,sessionKey:u.sessionKey,...se(o)}),this.executor.execute(this.transport.buildDirectNotificationArgs(u,n,o),S)}sendUserNotificationSequence(e,n,r,o,i,s=!1,a){let d=n.map(u=>({text:u.text.trim(),buttons:u.buttons})).filter(u=>u.text.length>0);if(d.length===0){o?.();return}q("wake_notify_sequence_started",{sessionId:e.id,sessionName:e.name,label:r,chunkCount:d.length,buttonChunkIndexes:d.map((u,c)=>u.buttons?.some(g=>Array.isArray(g)&&g.length>0)?c+1:void 0).filter(u=>typeof u=="number"),requireDirectDelivery:s});let l=u=>{if(a?.()===!1)return;let c=d[u];if(!c){q("wake_notify_sequence_succeeded",{sessionId:e.id,sessionName:e.name,label:r,chunkCount:d.length}),i?.();return}let g=u===0?o:i;q("wake_notify_sequence_chunk_selected",{sessionId:e.id,sessionName:e.name,label:r,chunkIndex:u+1,chunkCount:d.length,messageTextLength:c.text.length,failureHandler:u===0?"all-failed":"sequence-success",...se(c.buttons)}),this.sendUserNotification(e,c.text,`${r}-part-${u+1}`,c.buttons,g,()=>l(u+1),s,a)};l(0)}dispatchSessionNotification(e,n){let r=n.hooks,o=n.wakeMessageOnNotifySuccess!=null||n.wakeMessageOnNotifyFailed!=null,i=n.notifyUser??(n.wakeMessage?"on-wake-fallback":"always"),s=(n.userMessages?.length?n.userMessages:n.userMessage?.trim()?[{text:n.userMessage.trim(),buttons:n.buttons}]:[]).map(u=>({text:u.text.trim(),buttons:u.buttons})).filter(u=>u.text.length>0),a=s[0]?.text,d=n.wakeMessage?.trim(),l=n.shouldDispatch;if(o){let u=n.wakeMessageOnNotifySuccess?.trim(),c=n.wakeMessageOnNotifyFailed?.trim(),g=I=>{I&&l?.()!==!1&&(r?.onWakeStarted?.(),this.sendWake(e,I,`${n.label}-wake`,"wake",r?.onWakeFailed,r?.onWakeSucceeded,l))},S=()=>{l?.()!==!1&&(r?.onNotifySucceeded?.(),u&&g(u))},k=c?()=>{l?.()!==!1&&(r?.onNotifyFailed?.(),n.onUserNotifyFailed?.(),g(c))}:()=>{l?.()!==!1&&(r?.onNotifyFailed?.(),n.onUserNotifyFailed?.())};if(s.length>0){if(l?.()===!1)return;r?.onNotifyStarted?.(),this.sendUserNotificationSequence(e,s,n.label,k,S,n.requireDirectUserNotification===!0,l)}else k();return}if(i==="always"&&s.length>0){if(l?.()===!1)return;r?.onNotifyStarted?.(),this.sendUserNotificationSequence(e,s,n.label,()=>{l?.()!==!1&&(r?.onNotifyFailed?.(),n.onUserNotifyFailed?.())},()=>{l?.()!==!1&&r?.onNotifySucceeded?.()},n.requireDirectUserNotification===!0,l)}if(d&&l?.()!==!1){if(r?.onWakeStarted?.(),i==="on-wake-fallback"&&s.length>0&&!this.routes.resolve(e)?.sessionKey){if(l?.()===!1)return;r?.onNotifyStarted?.(),this.sendUserNotificationSequence(e,s,n.label,()=>{l?.()!==!1&&(r?.onNotifyFailed?.(),n.onUserNotifyFailed?.())},()=>{l?.()!==!1&&r?.onNotifySucceeded?.()},!1,l)}this.sendWake(e,d,`${n.label}-wake`,"wake",r?.onWakeFailed,r?.onWakeSucceeded,l)}}};var Zs=class{constructor(e,n){this.actionTokens=e;this.isGitHubCliAvailable=n}actionTokens;isGitHubCliAvailable;createActionToken(e,n,r={}){return this.actionTokens.createActionToken(e,n,{expiresAt:Date.now()+10080*60*1e3,...r})}consumeActionToken(e){return this.actionTokens.consumeActionToken(e)}getActionToken(e){return this.actionTokens.getActionToken(e)}clearPlanDecisionTokens(e,n){this.actionTokens.deletePlanDecisionTokensForSession(e,n)}makeActionButton(e,n,r,o={}){let i=this.createActionToken(e,n,{label:r,...o});return{label:r,callbackData:i.id,style:this.resolveButtonStyle(n)}}resolveButtonStyle(e){switch(e){case"plan-approve":case"worktree-create-pr":case"worktree-update-pr":case"plan-offer-start":return"primary";case"worktree-merge":case"session-resume":case"session-restart":return"success";case"plan-reject":case"worktree-dismiss":return"danger";default:return"secondary"}}getWorktreeDecisionButtons(e,n){if(!n)return[];let r=[],o=[this.makeActionButton(e,"worktree-merge","Merge")];if(this.isGitHubCliAvailable())n.worktreePrUrl?(o.push(this.makeActionButton(e,"worktree-view-pr","View PR",{targetUrl:n.worktreePrUrl})),r.push(o),r.push([this.makeActionButton(e,"worktree-update-pr","Sync PR"),this.makeActionButton(e,"worktree-decide-later","Later")])):(o.push(this.makeActionButton(e,"worktree-create-pr","Open PR")),r.push(o),r.push([this.makeActionButton(e,"worktree-decide-later","Later"),this.makeActionButton(e,"worktree-dismiss","Discard")]));else return r.push([...o,this.makeActionButton(e,"worktree-decide-later","Later")]),r.push([this.makeActionButton(e,"worktree-dismiss","Discard")]),r;return n.worktreePrUrl&&r.push([this.makeActionButton(e,"worktree-dismiss","Discard")]),r}getPlanApprovalButtons(e,n){let r=[[this.makeActionButton(e,"plan-approve","Approve",{planDecisionVersion:n?.planDecisionVersion}),this.makeActionButton(e,"plan-request-changes","Revise",{planDecisionVersion:n?.planDecisionVersion}),this.makeActionButton(e,"plan-reject","Reject",{planDecisionVersion:n?.planDecisionVersion})]];return q("plan_approval_buttons_created",{sessionId:e,planDecisionVersion:n?.planDecisionVersion,...se(r)}),r}getResumeButtons(e,n){let r=[];return n.isExplicitlyResumable&&r.push(this.makeActionButton(e,"session-resume","Resume")),r.push(this.makeActionButton(e,"view-output","View output")),[r]}getQuestionButtons(e,n){if(n.length!==0)return[n.map((r,o)=>this.makeActionButton(e,"question-answer",r.label,{optionIndex:o}))]}getPlanOfferButtons(e){let{offerId:n,route:r,planName:o,planPrompt:i,planWorkdir:s,planWorktreeStrategy:a}=e,d=[[this.makeActionButton(n,"plan-offer-start","Start Plan",{route:r,launchName:o,launchPrompt:i,launchWorkdir:s,launchWorktreeStrategy:a}),this.makeActionButton(n,"plan-offer-dismiss","Dismiss",{route:r})]];return q("plan_offer_buttons_created",{offerId:n,planName:o,channel:r.provider,target:r.target,accountId:r.accountId,threadId:r.threadId,sessionKey:r.sessionKey,planPromptLength:i.length,planWorkdirLength:s.length,planWorktreeStrategy:a,...se(d)}),d}};he();Gt();var ea=class{constructor(e,n){this.wakeDispatcher=e;this.applyPersistedPatch=n}wakeDispatcher;applyPersistedPatch;dispatch(e,n){let r=this.getDeliveryRef(e),o=this.buildCompletionWakePatch(n),i=!!(n.wakeMessage?.trim()||n.wakeMessageOnNotifySuccess?.trim()),s=!!(n.wakeMessage?.trim()||n.wakeMessageOnNotifyFailed?.trim()),a={onNotifyStarted:()=>{this.applyDeliveryState(r,"notifying"),n.hooks?.onNotifyStarted?.()},onNotifySucceeded:()=>{this.applyDeliveryState(r,i?"wake_pending":"idle"),n.hooks?.onNotifySucceeded?.()},onNotifyFailed:()=>{this.applyDeliveryState(r,s?"wake_pending":"failed"),n.hooks?.onNotifyFailed?.()},onWakeStarted:()=>{this.applyPersistedPatchWithCompletionWake(r,"wake_pending",o,{completionWakeIssuedAt:new Date().toISOString(),completionWakeSucceededAt:void 0,completionWakeFailedAt:void 0}),n.hooks?.onWakeStarted?.()},onWakeSucceeded:()=>{this.applyPersistedPatchWithCompletionWake(r,"idle",o,{completionWakeSucceededAt:new Date().toISOString(),completionWakeFailedAt:void 0}),n.hooks?.onWakeSucceeded?.()},onWakeFailed:()=>{this.applyPersistedPatchWithCompletionWake(r,"failed",o,{completionWakeFailedAt:new Date().toISOString()}),n.hooks?.onWakeFailed?.()}};this.wakeDispatcher.dispatchSessionNotification(e,{...n,hooks:a})}notifyWorktreeOutcome(e,n,r={}){let o=this.getDeliveryRef(e),i=a=>Ir({sessionId:o,sessionName:e.name,outcomeLine:n,originThreadLine:Ai(e),detailLines:r.detailLines,canonicalStatusDelivered:a}),s=r.summaryWakeRequired??!0;this.dispatch(e,{label:"worktree-outcome",userMessage:n,notifyUser:"always",completionWakeSummaryRequired:s,wakeMessageOnNotifySuccess:s?i(!0):void 0,wakeMessageOnNotifyFailed:s?i(!1):void 0})}dispose(){this.wakeDispatcher.dispose()}getDeliveryRef(e){return ne(e)??_(e)??""}applyDeliveryState(e,n){!e||!n||this.applyPersistedPatch(e,{deliveryState:n})}applyPersistedPatchWithCompletionWake(e,n,r,o){!e||!n||this.applyPersistedPatch(e,r?{deliveryState:n,...r,...o}:{deliveryState:n})}buildCompletionWakePatch(e){if(e.completionWakeSummaryRequired===!0)return{completionWakeSummaryRequired:!0}}};rt();import{existsSync as gA}from"fs";var ta=class{getCompletionState(e,n,r,o){return yo(e,r,o)?"has-commits":yo(e,o,r)?"base-advanced":kr(n)?"dirty-uncommitted":"no-change"}isResolvedWorktreeEligibleForCleanup(e,n,r){if(!e.worktreePath||!e.workdir||!gA(e.worktreePath)||e.pendingWorktreeDecisionSince||e.worktreeState==="pending_decision")return!1;let o=e.worktreeMergedAt??e.worktreeDismissedAt??e.completedAt??e.createdAt,i=typeof o=="string"?new Date(o).getTime():Number(o??0);return!!i&&n-i>=r}};var na=class{constructor(e,n,r,o){this.pendingQuestions=e;this.dispatchSessionNotification=n;this.clearWaitingTimestamp=r;this.getQuestionButtons=o}pendingQuestions;dispatchSessionNotification;clearWaitingTimestamp;getQuestionButtons;async handleAskUserQuestion(e,n){let i=n?.questions??[];if(i.length===0)throw new Error("AskUserQuestion: no questions in input");let s=i[0],a=s.options??[],d=this.getQuestionButtons(e.id,a),l=`\u2753 [${e.name}] ${s.question}`,u=[`[ASK USER QUESTION] Session "${e.name}" has a question requiring user input.`,"",`Question: ${s.question}`,...a.length>0?["Options:",...a.map((c,g)=>` ${g+1}. ${c.label}`)]:[],"",`Send the question to the user and call agent_respond(session="${e.id}", message="<answer>") with their answer.`].join(`
208
- `);return new Promise((c,g)=>{let S=setTimeout(()=>{this.pendingQuestions.delete(e.id),g(new Error(`AskUserQuestion timed out after 600s for session "${e.name}"`))},6e5);S.unref?.(),this.pendingQuestions.set(e.id,{resolve:c,reject:g,questions:i,timeoutHandle:S}),this.dispatchSessionNotification(e,{label:"ask-user-question",userMessage:l,notifyUser:"always",buttons:d,wakeMessageOnNotifySuccess:["AskUserQuestion delivered to the user.",`Session: ${e.name} | ID: ${e.id}`,`Question: ${s.question}`,"Await their selection \u2014 do NOT answer this question yourself."].join(`
209
- `),wakeMessageOnNotifyFailed:u})})}resolveAskUserQuestion(e,n){let r=this.pendingQuestions.get(e);if(!r){console.warn(`[SessionQuestionService] resolveAskUserQuestion: no pending question for session "${e}"`);return}clearTimeout(r.timeoutHandle),this.pendingQuestions.delete(e);let o=r.questions[0],i=o.options??[],s=i[n];if(!s){r.reject(new Error(`AskUserQuestion: invalid option index ${n} (${i.length} options available)`));return}this.clearWaitingTimestamp(e),r.resolve({behavior:"allow",updatedInput:{questions:r.questions,answers:{[o.question]:s.label}}})}dispose(){for(let e of this.pendingQuestions.values())clearTimeout(e.timeoutHandle),e.reject(new Error("SessionManager disposed before AskUserQuestion resolved."));this.pendingQuestions.clear()}};he();vo();var ra=class t{constructor(e,n,r,o){this.buildRoutingProxy=e;this.dispatchNotification=n;this.updatePersistedSession=r;this.getWorktreeDecisionButtons=o}buildRoutingProxy;dispatchNotification;updatePersistedSession;getWorktreeDecisionButtons;static REMINDER_THRESHOLD_MS=10800*1e3;static REMINDER_INTERVAL_MS=10800*1e3;getNextReminderAt(e){let n=new Date(e.pendingWorktreeDecisionSince).getTime();if(this.getWorktreeDecisionReminderStatus(e,n)!=="pending")return;let r=[n+t.REMINDER_THRESHOLD_MS];if(e.worktreeDecisionSnoozedUntil){let o=new Date(e.worktreeDecisionSnoozedUntil).getTime();Number.isFinite(o)&&r.push(o)}if(e.lastWorktreeReminderAt){let o=new Date(e.lastWorktreeReminderAt).getTime();Number.isFinite(o)&&r.push(o+t.REMINDER_INTERVAL_MS)}return Math.max(...r)}sendReminderIfDue(e,n=Date.now()){this.clearResolvedReminderState(e);let r=this.getNextReminderAt(e);if(r==null||r>n)return!1;let o=n-new Date(e.pendingWorktreeDecisionSince).getTime(),i=Math.floor(Math.max(0,o)/(3600*1e3));try{this.sendReminderNotification(e,i)}catch(s){return console.warn(`[SessionReminderService] Failed to send stale-decision reminder for session ${e.name}: ${s instanceof Error?s.message:String(s)}`),!1}for(let s of Ge(e))this.updatePersistedSession(s,{lastWorktreeReminderAt:new Date(n).toISOString()});return!0}sendReminderNotification(e,n){let r=this.buildRoutingProxy({id:e.sessionId??e.name??_(e)??e.harnessSessionId,sessionId:e.sessionId,harnessSessionId:e.harnessSessionId,backendRef:e.backendRef,route:e.route});if(e.worktreeStrategy==="delegate"){this.dispatchNotification(r,{label:`worktree-stale-reminder-${e.name}`,wakeMessage:Hl(e,n),notifyUser:"never"});return}let o=[`\u23F0 Reminder: branch \`${e.worktreeBranch??"unknown"}\` is still waiting for a merge decision.`,`Session: ${e.name} | Pending: ${n}h`,"",`agent_merge(session="${e.name}") or agent_pr(session="${e.name}") or agent_worktree_cleanup() to resolve.`].join(`
210
- `);this.dispatchNotification(r,{label:`worktree-stale-reminder-${e.name}`,userMessage:o,notifyUser:"always",buttons:this.getWorktreeDecisionButtons(ne(e)??e.harnessSessionId)})}clearResolvedReminderState(e){if(!e.pendingWorktreeDecisionSince&&!e.lastWorktreeReminderAt&&!e.worktreeDecisionSnoozedUntil||this.getWorktreeDecisionReminderStatus(e)!=="resolved")return!1;let n=!1;for(let r of Ge(e))n=this.updatePersistedSession(r,{pendingWorktreeDecisionSince:void 0,lastWorktreeReminderAt:void 0,worktreeDecisionSnoozedUntil:void 0})||n;return n}getWorktreeDecisionReminderStatus(e,n){if(!e.pendingWorktreeDecisionSince)return"inactive";let r=n??new Date(e.pendingWorktreeDecisionSince).getTime();if(!Number.isFinite(r))return"inactive";if(e.worktreeMerged||e.worktreePrUrl||e.lifecycle==="terminal")return"resolved";let o=new Set(["merged","released","dismissed","none","cleanup_failed"]);if(e.worktreeState&&o.has(e.worktreeState))return"resolved";let i=new Set(["merged","released","dismissed","no_change","none","cleanup_failed"]);if(e.worktreeLifecycle?.state&&i.has(e.worktreeLifecycle.state))return"resolved";let s=e.worktreeState==="pending_decision"||e.lifecycle==="awaiting_worktree_decision"||e.worktreeLifecycle?.state==="pending_decision",a=e.worktreeState==null&&e.lifecycle==null&&e.worktreeLifecycle?.state==null&&!e.worktreeMerged&&!e.worktreePrUrl;if(!s&&!a)return"inactive";let d=Ln(e,{activeSession:!1,includePrSync:!1});return d.derivedState==="merged"||d.derivedState==="released"||d.derivedState==="cleanup_failed"?"resolved":"pending"}};rt();he();Gt();function Mo(t,e){return e!=null&&t.approvalPromptRequiredVersion===e&&hA(t.approvalPromptStatus)}function hA(t){return t==="delivered"||t==="fallback_delivered"}function Co(t,e){return!t||e==null?!1:!!(t.pendingPlanApproval&&t.approvalState==="pending"&&t.lifecycle==="awaiting_plan_decision"&&(t.actionablePlanDecisionVersion??t.planDecisionVersion)===e)}function Ar(t,e,n=!1){let r="id"in t?t.id:t.sessionId??"unknown-session";return[n?"Plan review fallback text delivered to the user because interactive buttons could not be delivered.":"Plan approval buttons delivered to the user.",`Session: ${t.name??"unknown"} | ID: ${r} | Plan v${e??"?"}`,`Wait for their ${n?"explicit reply":"button callback"} \u2014 do NOT approve or reject this plan yourself.`].join(`
211
- `)}function oa(t){let e="id"in t.session?t.session.id:t.session.sessionId??"unknown-session",n=t.originThreadLine??(t.session.originThreadId!=null?`Origin thread: ${t.session.originThreadId}`:"");return["[PLAN APPROVAL DELIVERY FAILED] The plugin could not deliver the canonical plan review buttons or the explicit fallback text to the user.",`Name: ${t.session.name??"unknown"} | ID: ${e} | Plan v${t.planDecisionVersion??"?"}`,n,"","No user-visible actionable review prompt is confirmed for this plan version.","Intervene manually before assuming the user saw the plan review request."].filter(Boolean).join(`
212
- `)}import{existsSync as yA,readFileSync as SA}from"fs";function kA(t,e){if(t.latestPlanArtifactVersion===e&&t.latestPlanArtifact)return t.latestPlanArtifact;let n=t.planFilePath?.trim();if(!(!n||!yA(n)))try{let r=SA(n,"utf-8").trim();return r?{markdown:r,steps:[]}:void 0}catch{return}}var ia=class{constructor(e){this.deps=e}deps;dispatchPlanApprovalFallback(e,n,r){let o=new Date().toISOString();this.deps.dispatchSessionNotification(e,{label:"plan-approval-fallback",userMessage:Ao({session:e,summary:r}),notifyUser:"always",shouldDispatch:()=>Co(e,n),hooks:{onNotifyStarted:()=>{this.deps.updatePersistedSession(e.id,{approvalPromptRequiredVersion:n,approvalPromptVersion:n,approvalPromptStatus:"sending",approvalPromptTransport:"direct-message",approvalPromptMessageKind:"explicit_fallback_text",approvalPromptLastAttemptAt:o})},onNotifySucceeded:()=>{this.deps.updatePersistedSession(e.id,{approvalPromptRequiredVersion:n,approvalPromptVersion:n,approvalPromptStatus:"fallback_delivered",approvalPromptTransport:"direct-message",approvalPromptMessageKind:"explicit_fallback_text",approvalPromptLastAttemptAt:o,approvalPromptDeliveredAt:new Date().toISOString(),approvalPromptFailedAt:void 0})},onNotifyFailed:()=>{this.deps.updatePersistedSession(e.id,{approvalPromptRequiredVersion:n,approvalPromptVersion:n,approvalPromptStatus:"failed",approvalPromptTransport:"direct-message",approvalPromptMessageKind:"explicit_fallback_text",approvalPromptLastAttemptAt:o,approvalPromptFailedAt:new Date().toISOString()})}},wakeMessageOnNotifySuccess:Ar(e,n,!0),wakeMessageOnNotifyFailed:oa({session:e,planDecisionVersion:n,originThreadLine:this.deps.originThreadLine(e)})})}logCompletionWakeDiagnostic(e){console.info(JSON.stringify({event:e.event,sessionId:e.session.id,sessionName:e.session.name,canonicalStatusDelivered:e.canonicalStatusDelivered,requestedShortFactualSummary:e.followupSummaryRequired,completionKind:"terminal"}))}shouldRequestCompletionFollowup(e){return e.originSessionKey?.trim()?.startsWith("agent:main:cron:")?!1:!!xi(e)}handleTurnEnd(e,n){if(e.status!=="running"){console.info(`[SessionManager] Suppressing turn-end wake for session ${e.id} (status=${e.status}) \u2014 terminal notification owns the completion path.`);return}if(!e.goalTaskId){if(n||e.pendingPlanApproval){this.emitWaitingForInput(e);return}if(e.worktreeStrategy==="ask"||e.worktreeStrategy==="delegate"){console.info(`[SessionManager] Suppressing turn-complete wake for session ${e.id} (worktreeStrategy=${e.worktreeStrategy}) \u2014 worktree notification will follow.`);return}this.deps.shouldEmitTurnCompleteWake(e)&&this.emitTurnComplete(e)}}async handleSessionTerminal(e){if(this.deps.persistSession(e),this.deps.clearWaitingTimestamp(e.id),e.goalTaskId){this.deps.clearRetryTimersForSession(e.id);return}let n={notificationSent:!1,worktreeRemoved:!1};e.worktreePath&&e.originalWorkdir&&(n=await this.deps.handleWorktreeStrategy(e));let r=!1;if(e.worktreePath&&e.originalWorkdir&&e.status==="failed"&&e.costUsd===0&&e.duration<3e4){let a=this.deps.resolveWorktreeRepoDir(e.originalWorkdir,e.worktreePath),d=e.worktreeBranch,l=We(e);console.info(`[SessionManager] Early startup failure for "${e.name}" \u2014 auto-cleaning worktree (cost=$${e.costUsd.toFixed(2)}, duration=${e.duration}ms)`);let u=!1;if(a&&!l&&(u=nt(a,e.worktreePath)),a&&d&&!l&&u&&Ot(a,d),u){for(let c of Ge(e))this.deps.updatePersistedSession(c,{worktreePath:void 0,worktreeBranch:void 0});r=!0}}let o=e.worktreeStrategy&&e.worktreeStrategy!=="off"&&e.worktreeStrategy!=="manual";if(!r&&e.worktreePath&&e.originalWorkdir){let a=this.deps.resolveWorktreeRepoDir(e.originalWorkdir,e.worktreePath),d=We(e);n.worktreeRemoved?console.info(`[SessionManager] Worktree already removed for "${e.name}" during strategy handling.`):o?console.info(`[SessionManager] Keeping worktree alive for "${e.name}" (strategy=${e.worktreeStrategy}) \u2014 will be cleaned up on explicit resolution.`):a&&!d&&nt(a,e.worktreePath)}if(e.killReason==="done"){if(n.notificationSent||this.deps.hasTurnCompleteWakeMarker(e.id)||!this.deps.shouldEmitTerminalWake(e))return;this.emitCompleted(e);return}if(e.status==="completed"){if(!this.deps.shouldEmitTerminalWake(e))return;this.emitCompleted(e);return}if(e.status==="failed"){if(!this.deps.shouldEmitTerminalWake(e))return;let a=e.error||e.result?.is_error&&e.result.result||e.result?.result||this.deps.extractLastOutputLine(e)||`Session failed with no error details (session=${e.id}, subtype=${e.result?.subtype??"none"}, turns=${e.result?.num_turns??0})`;this.emitFailed(e,Me(a,200),r);return}let i=`$${(e.costUsd??0).toFixed(2)}`,s=e.duration;if(e.killReason==="idle-timeout"){let a=e.pendingPlanApproval?this.deps.resolvePlanApprovalMode(e):void 0;if(e.pendingPlanApproval){let d=e.actionablePlanDecisionVersion??e.planDecisionVersion,l=Mo(e,d);if(a==="delegate"){this.deps.dispatchSessionNotification(e,{label:"plan-approval-timeout",wakeMessage:["[DELEGATED PLAN APPROVAL REMINDER] Plan review is still pending after the session hit idle timeout.",`Name: ${e.name} | ID: ${e.id}`,this.deps.originThreadLine(e),"The agent already produced a plan and is waiting for a delegated decision.","Review privately first. Approve directly with agent_respond(..., approve=true, approval_rationale='...') if the plan is clearly within scope and low risk.","Escalate only if needed via agent_request_plan_approval(summary='...').","If you approve directly, follow up with a short user-facing explanation; the plugin's thumbs-up line is only the minimal approval acknowledgment.","If a canonical approval prompt was already posted for this plan version, do not restate it in plain text."].join(`
213
- `),notifyUser:"never"}),this.deps.clearRetryTimersForSession(e.id);return}if(a==="ask"&&l){this.deps.dispatchSessionNotification(e,{label:"plan-approval-timeout",notifyUser:"never",wakeMessage:["[PLAN APPROVAL REMINDER] The user already has an actionable plan review prompt for this plan version.",`Name: ${e.name} | ID: ${e.id} | Plan v${d??"?"}`,this.deps.originThreadLine(e),"Do NOT post another approval summary unless canonical delivery is known to be missing."].join(`
214
- `)}),this.deps.clearRetryTimersForSession(e.id);return}this.deps.dispatchSessionNotification(e,{label:"plan-approval-timeout",userMessage:[`\u{1F4CB} [${e.name}] Plan v${d??"?"} still awaiting approval after idle timeout | ${i} | ${Rt(s)}`,"","The agent already produced a plan and is waiting for your decision.","Approve resumes the session and starts implementation.","Revise resumes it in plan mode so it can update the plan first.","Reject keeps the session stopped."].join(`
215
- `),notifyUser:"always",buttons:a==="ask"&&!l?this.deps.getPlanApprovalButtons(e.id,{...e,planDecisionVersion:d}):void 0}),this.deps.clearRetryTimersForSession(e.id);return}this.deps.dispatchSessionNotification(e,{label:"suspended",userMessage:`\u{1F4A4} [${e.name}] Suspended after idle timeout | ${i} | ${Rt(s)}`,notifyUser:"always",buttons:this.deps.getResumeButtons(e.id,e)}),this.deps.clearRetryTimersForSession(e.id);return}this.deps.notifySession(e,`\u26D4 [${e.name}] ${xo(e.killReason)} | ${i} | ${Rt(s)}`),this.deps.clearRetryTimersForSession(e.id)}emitWaitingForInput(e){if(!this.deps.debounceWaitingEvent(e.id))return;let n=e.pendingPlanApproval?this.deps.resolvePlanApprovalMode(e):void 0,r=e.actionablePlanDecisionVersion??e.planDecisionVersion,o=e.pendingPlanApproval&&n==="ask"&&Mo(e,r),i=e.pendingPlanApproval?void 0:this.deps.getOutputPreview(e),s=!e.pendingPlanApproval&&e.pendingInputState?.promptText?e.pendingInputState.promptText:!e.pendingPlanApproval&&i!==void 0?i:this.deps.getOutputPreview(e,e.pendingPlanApproval&&n!=="delegate"?Number.POSITIVE_INFINITY:void 0),a=e.pendingPlanApproval&&n==="ask"&&!o?this.deps.getPlanApprovalButtons(e.id,{...e,planDecisionVersion:r}):!e.pendingPlanApproval&&e.pendingInputState?.options.length?this.deps.getQuestionButtons(e.id,e.pendingInputState.options.map(c=>({label:c}))):void 0,d=kA(e,r),l=eu({session:e,preview:s,questionText:e.pendingPlanApproval?void 0:e.pendingInputState?.promptText,questionContextPreview:i,planArtifact:d,originThreadLine:this.deps.originThreadLine(e),planApprovalMode:n,planApprovalButtons:a,questionButtons:e.pendingPlanApproval?void 0:a}),u=l.planReviewSummary??s;if(l.label==="plan-approval"&&n==="ask"&&o){this.deps.dispatchSessionNotification(e,{label:l.label,userMessage:l.userMessage,userMessages:l.userMessages,notifyUser:"never",buttons:l.buttons,wakeMessage:l.wakeMessage});return}if(l.label==="plan-approval"&&n==="ask"){this.deps.dispatchSessionNotification(e,{label:l.label,userMessage:l.userMessage,userMessages:l.userMessages,notifyUser:"always",buttons:l.buttons,hooks:{onNotifyStarted:()=>{this.deps.updatePersistedSession(e.id,{approvalPromptRequiredVersion:r,approvalPromptVersion:r,approvalPromptStatus:"sending",approvalPromptTransport:"direct-message",approvalPromptMessageKind:"canonical_buttons",approvalPromptLastAttemptAt:new Date().toISOString()})},onNotifySucceeded:()=>{this.deps.updatePersistedSession(e.id,{canonicalPlanPromptVersion:r,approvalPromptRequiredVersion:r,approvalPromptVersion:r,approvalPromptStatus:"delivered",approvalPromptTransport:"direct-message",approvalPromptMessageKind:"canonical_buttons",approvalPromptDeliveredAt:new Date().toISOString(),approvalPromptFailedAt:void 0})},onNotifyFailed:()=>{this.deps.updatePersistedSession(e.id,{approvalPromptRequiredVersion:r,approvalPromptVersion:r,approvalPromptStatus:"failed",approvalPromptTransport:"direct-message",approvalPromptMessageKind:"canonical_buttons",approvalPromptFailedAt:new Date().toISOString()})}},shouldDispatch:()=>Co(e,r),onUserNotifyFailed:()=>this.dispatchPlanApprovalFallback(e,r,u),wakeMessageOnNotifySuccess:Ar(e,r)});return}if(l.label==="plan-approval"){this.deps.dispatchSessionNotification(e,{label:l.label,userMessage:l.userMessage,wakeMessage:l.wakeMessage,notifyUser:"never",buttons:l.buttons});return}this.deps.dispatchSessionNotification(e,{label:l.label,userMessage:l.userMessage,notifyUser:"always",buttons:l.buttons,wakeMessageOnNotifyFailed:l.wakeMessage})}emitTurnComplete(e){console.info(`[SessionManager] turn-complete wake dispatching for session ${e.id} (turns=${e.result?.num_turns??0}, strategy=${e.worktreeStrategy??"none"})`);let n=jl({session:e,originThreadLine:this.deps.originThreadLine(e),preview:this.deps.getOutputPreview(e)});this.deps.dispatchSessionNotification(e,{label:"turn-complete",userMessage:n.userMessage,wakeMessage:n.wakeMessage,notifyUser:"always",onUserNotifyFailed:()=>{console.warn(`[SessionManager] turn-complete delivery failed for session ${e.id} \u2014 firing terminal notification as fallback`),this.deps.shouldEmitTerminalWake(e)&&this.emitCompleted(e)}})}emitCompleted(e){let n=this.deps.getOutputPreview(e),r=this.shouldRequestCompletionFollowup(e),o=Vl({session:e,originThreadLine:this.deps.originThreadLine(e),preview:n}),i;this.deps.dispatchSessionNotification(e,{label:"completed",userMessage:o.userMessage,notifyUser:"always",completionWakeSummaryRequired:r,requireDirectUserNotification:!0,wakeMessageOnNotifySuccess:r?o.wakeMessageOnNotifySuccess:void 0,wakeMessageOnNotifyFailed:r?o.wakeMessageOnNotifyFailed:void 0,hooks:{onNotifySucceeded:()=>{i=!0,this.logCompletionWakeDiagnostic({session:e,event:"completion_notify_succeeded",canonicalStatusDelivered:i,followupSummaryRequired:r})},onNotifyFailed:()=>{i=!1,this.logCompletionWakeDiagnostic({session:e,event:"completion_notify_failed",canonicalStatusDelivered:i,followupSummaryRequired:r})},onWakeSucceeded:()=>{this.logCompletionWakeDiagnostic({session:e,event:"completion_wake_succeeded",canonicalStatusDelivered:i,followupSummaryRequired:r})}}})}emitFailed(e,n,r){let o=ql({session:e,originThreadLine:this.deps.originThreadLine(e),errorSummary:n,preview:this.deps.getOutputPreview(e),worktreeAutoCleaned:r,failedButtons:this.deps.getResumeButtons(e.id,e)});this.deps.dispatchSessionNotification(e,{label:"failed",userMessage:o.userMessage,wakeMessage:o.wakeMessage,notifyUser:"always",buttons:o.buttons})}};he();rt();import{existsSync as vA}from"fs";var sa=class{constructor(e){this.deps=e}deps;async dismissWorktree(e){let n=this.deps.getPersistedSession(e),r=this.deps.resolveActiveSession(e),o=r??n;if(!o)return`Error: Session "${e}" not found.`;let i=r?.worktreePath??n?.worktreePath,s=this.deps.resolveWorktreeRepoDir(r?.originalWorkdir??n?.workdir,i),a=r?.worktreeBranch??n?.worktreeBranch,d=r?.name??n?.name??e;if(!s)return`Error: No workdir found for session "${e}".`;let l=We(o);!l&&i&&vA(i)&&nt(s,i,{destructive:!0}),a&&Ot(s,a);for(let c of Ge(r??n))this.deps.updatePersistedSession(c,{worktreeDisposition:"dismissed",worktreeDismissedAt:new Date().toISOString(),pendingWorktreeDecisionSince:void 0,worktreeState:"dismissed",lifecycle:"terminal",worktreePath:void 0,worktreeBranch:void 0,worktreeLifecycle:{state:"dismissed",updatedAt:new Date().toISOString(),resolvedAt:new Date().toISOString(),resolutionSource:"dismiss",baseBranch:n?.worktreeLifecycle?.baseBranch,targetRepo:n?.worktreePrTargetRepo,pushRemote:n?.worktreePushRemote}});let u=l?`\u{1F5D1}\uFE0F [${d}] Branch \`${a??"unknown"}\` dismissed. Native backend worktree released for backend cleanup.`:`\u{1F5D1}\uFE0F [${d}] Branch \`${a??"unknown"}\` dismissed and permanently deleted.`;return this.deps.dispatchNotification(this.deps.buildRoutingProxy({id:ne(r??n??{id:e})??e,sessionId:n?.sessionId,harnessSessionId:r?.harnessSessionId??n?.harnessSessionId,backendRef:r?.backendRef??n?.backendRef,route:r?.route??n?.route}),{label:"worktree-dismissed",userMessage:u,notifyUser:"always"}),u}snoozeWorktreeDecision(e){let n=this.deps.getPersistedSession(e);if(!n)return`Error: Session "${e}" not found.`;let r=new Date(Date.now()+1440*60*1e3).toISOString();for(let s of Ge(n))this.deps.updatePersistedSession(s,{worktreeDecisionSnoozedUntil:r,lastWorktreeReminderAt:new Date().toISOString()});let i=`\u23ED\uFE0F Reminder snoozed 24h for \`${n.worktreeBranch??"unknown"}\` (session: ${n.name})`;return this.deps.dispatchNotification(this.deps.buildRoutingProxy({id:ne(n)??_(n)??n.harnessSessionId,sessionId:n.sessionId,harnessSessionId:n.harnessSessionId,backendRef:n.backendRef,route:n.route}),{label:"worktree-snoozed",userMessage:i,notifyUser:"always"}),i}};var qh=new Set(["starting","running"]),aa=class{sessions=new Map;activeSessionCount(){return[...this.sessions.values()].filter(e=>qh.has(e.status)).length}uniqueName(e){let n=new Set([...this.sessions.values()].filter(o=>qh.has(o.status)).map(o=>o.name));if(!n.has(e))return e;let r=2;for(;n.has(`${e}-${r}`);)r+=1;return`${e}-${r}`}add(e){this.sessions.set(e.id,e)}remove(e){this.sessions.delete(e)}get(e){return this.sessions.get(e)}list(){return[...this.sessions.values()]}};var da=class{constructor(e){this.deps=e}deps;initializeSession(e,n,r,o={}){if(this.deps.hydrateSpawnedSession(e,n,r),r.taskLifecycle?.create(e),e.on("statusChange",(i,s)=>{s==="running"?(e.harnessSessionId&&this.deps.markRunning(e),r.taskLifecycle?.progress(e)):(s==="completed"||s==="failed"||s==="killed")&&(r.taskLifecycle?.finalize(e),this.deps.handleTerminal(e).catch(a=>{console.error(`[SessionRuntimeBootstrap] handleTerminal threw for session ${e.id}:`,a)}))}),e.on("lifecycleChange",(i,s)=>{r.taskLifecycle?.progress(e)}),e.on("turnEnd",(i,s)=>{this.deps.handleTurnEnd(e,s)}),e.start(),o.notifyLaunch!==!1){let i=this.deps.formatLaunchWorkdirLabel(e),s=`\u{1F680} [${e.name}] Launched | ${i} | ${e.model??"default"}`;this.deps.notifySession(e,s,"launch")}return e}};var la=class{buildNoChangeNotification(e){let{session:n,nativeBackendWorktree:r,cleanupSucceeded:o,worktreePath:i,preview:s,originThreadLine:a}=e,d=o?r?"native backend worktree released for backend cleanup":"worktree cleaned up":`cleanup failed; worktree still exists at ${i}`;return{label:o?"worktree-no-changes":"worktree-no-changes-cleanup-failed",userMessage:o?r?`\u2139\uFE0F [${n.name}] Session completed with no changes \u2014 native backend worktree released for backend cleanup`:`\u2139\uFE0F [${n.name}] Session completed with no changes \u2014 worktree cleaned up`:`\u26A0\uFE0F [${n.name}] Session completed with no changes, but worktree cleanup failed. Worktree still exists at ${i}`,wakeMessage:zl({sessionName:n.name,sessionId:n.id,cleanupSummary:d,preview:s,originThreadLine:a,requestedPermissionMode:n.requestedPermissionMode,currentPermissionMode:n.currentPermissionMode,approvalExecutionState:n.approvalExecutionState,approvalState:n.approvalState,planApproval:n.planApproval,approvalPromptStatus:n.approvalPromptStatus,approvalPromptMessageKind:n.approvalPromptMessageKind,approvalPromptDeliveredAt:n.approvalPromptDeliveredAt}),notifyUser:"always"}}buildAskNotification(e){let{session:n,branchName:r,baseBranch:o,diffSummary:i,buttons:s}=e,a=Ql(i),d=i.commitMessages.slice(0,5).map(c=>`\u2022 ${c.hash} ${c.message} (${c.author})`),l=i.commits>5?`...and ${i.commits-5} more`:"",u=n.worktreePrTargetRepo?`Branch: \`${r}\` \u2192 \`${o}\` | PR target: ${n.worktreePrTargetRepo}`:`Branch: \`${r}\` \u2192 \`${o}\``;return{label:"worktree-merge-ask",userMessage:[`\u{1F500} Worktree decision required for session \`${n.name}\``,"",u,`Commits: ${i.commits} | Files: ${i.filesChanged} | +${i.insertions} / -${i.deletions}`,"",...a.length>0?["Summary:",...a.map(c=>`- ${c}`),""]:[],"Recent commits:",...d,...l?[l]:[],"",`\u26A0\uFE0F Discard will permanently delete branch \`${r}\` and all local changes. This cannot be undone.`].join(`
216
- `),notifyUser:"always",buttons:s,wakeMessageOnNotifySuccess:["Worktree decision buttons delivered to the user.",`Session: ${n.name} | ID: ${n.id}`,u,"Wait for their button callback \u2014 do NOT act on this worktree yourself."].join(`
217
- `),wakeMessageOnNotifyFailed:[`\u{1F500} Worktree decision required for session \`${n.name}\``,"",u,`Commits: ${i.commits} | Files: ${i.filesChanged} | +${i.insertions} / -${i.deletions}`].join(`
218
- `)}}buildDelegateNotification(e){let{session:n,branchName:r,baseBranch:o,diffSummary:i,originThreadLine:s}=e,a=i.commitMessages.slice(0,5).map(u=>`\u2022 ${u.hash} ${u.message} (${u.author})`),d=i.commits>5?`...and ${i.commits-5} more`:void 0,l=n.prompt?n.prompt.slice(0,500):"(no prompt)";return{label:"worktree-delegate",wakeMessage:Gl({sessionName:n.name,sessionId:n.id,branchName:r,baseBranch:o,promptSnippet:l,commitLines:a,moreNote:d,originThreadLine:s,diffSummary:i}),notifyUser:"never"}}};function jh(t,e=1e3){let n=!Number.isFinite(e),r=typeof t.getOutput=="function"?t.getOutput():[],o=n?r.join(`
219
- `):PA(t);return n?o:o.length>e?Gh(t)?ji(o,e):Lf(o,e):o}function PA(t){let e=typeof t.getOutput=="function"?t.getOutput():[],n=e.join(`
220
- `).trim();return n?Gh(t)?wA(n)??n:e.slice(-20).join(`
221
- `):""}function Gh(t){if(t.status==="completed"||t.killReason==="done")return!0;let e=t;return e.approvalState==="approved"||e.planModeApproved===!0||(e.planDecisionVersion??0)>0}function wA(t){let n=t.split(/\n\s*\n+/).map(r=>r.trim()).filter(r=>/[A-Za-z0-9]/.test(r)).at(-1);if(n)return n.length>=120||n.includes(`
222
- `)?n:void 0}Gt();rt();Te();import{unlinkSync as IA}from"fs";var ua=class t{timers=new Map;disposed=!1;static MAX_DELAY_MS=2147483647;schedule(e,n,r){if(this.disposed)return;this.cancel(e);let o=Math.max(0,n-Date.now()),i=setTimeout(()=>{if(this.timers.delete(e),!this.disposed){if(n-Date.now()>0){this.schedule(e,n,r);return}r()}},Math.min(o,t.MAX_DELAY_MS));i.unref?.(),this.timers.set(e,i)}cancel(e){let n=this.timers.get(e);n&&(clearTimeout(n),this.timers.delete(e))}cancelPrefix(e){for(let n of this.timers.keys())n.startsWith(e)&&this.cancel(n)}dispose(){this.disposed=!0;for(let e of this.timers.values())clearTimeout(e);this.timers.clear()}};he();vo();rt();var Hh=10080*60*1e3,bA=300*1e3,zh="tmp-output:cleanup";function xA(t){return t instanceof Error?t.message:String(t)}var pa=class{constructor(e){this.deps=e}deps;scheduler=new ua;schedule(e,n,r){this.scheduler.schedule(e,n,r)}cancel(e){this.scheduler.cancel(e)}cancelPrefix(e){this.scheduler.cancelPrefix(e)}bootstrapMaintenanceSchedules(){let e=Date.now();this.deps.store.cleanupTmpOutputFiles(e);for(let n of this.deps.store.listPersistedSessions())this.syncPersistedSessionMaintenance(n);this.syncActionTokenExpiryDeadline(),this.deps.store.cleanupOrphanOutputFiles(),this.syncTmpOutputCleanupDeadline(e)}syncRuntimeGcDeadline(e){if(!e.completedAt)return;let n=this.runtimeGcKey(e.id);this.schedule(n,e.completedAt+this.runtimeGcMaxAgeMs(),()=>{let r=this.deps.sessions.get(e.id);if(!r||!r.completedAt)return;let o=this.runtimeGcMaxAgeMs();if(!this.deps.store.shouldGcActiveSession(r,Date.now(),o)){this.syncRuntimeGcDeadline(r);return}this.deps.removeRuntimeSession(e.id),this.deps.persistSession(r,{scheduleRuntimeGc:!1}),this.deps.clearRuntimeSessionState(e.id)})}cancelRuntimeGc(e){this.cancel(this.runtimeGcKey(e))}cancelPersistedMaintenance(e){let n=this.persistedMaintenanceRef(e);n&&this.cancelPrefix(`persisted:${n}:`)}syncPersistedSessionMaintenance(e){let n=this.persistedMaintenanceRef(e);if(!n)return;this.cancel(this.persistedMaintenanceKey(n,"worktree-reminder"));let r=this.deps.reminders.getNextReminderAt(e);r!=null?this.schedulePersistedWorktreeReminder(n,r):this.deps.reminders.clearResolvedReminderState(e),this.cancel(this.persistedMaintenanceKey(n,"worktree-retention"));let o=Ln(e,{activeSession:!1,includePrSync:e.worktreeLifecycle?.state==="pr_open"||!!e.worktreePrUrl}),i=this.resolvedAtIso(e),s=this.isLegacyResolvedWorktree(e);if((o.cleanupSafe||s)&&typeof i=="string"){let a=new Date(i).getTime();Number.isFinite(a)&&this.schedule(this.persistedMaintenanceKey(n,"worktree-retention"),a+Hh,()=>{let d=this.deps.store.getPersistedSession(n);d&&this.reconcileResolvedWorktreeRetention(d,Date.now())})}}reconcileResolvedWorktreeRetention(e,n){let r=Ln(e,{activeSession:!1,includePrSync:e.worktreeLifecycle?.state==="pr_open"||!!e.worktreePrUrl}),o=this.resolvedAtIso(e),i=o?new Date(o).getTime():0,s=this.isLegacyResolvedWorktree(e);if(!(!r.cleanupSafe&&!s||!i||n-i<Hh))try{if(!e.worktreePath&&!We(e))return;let a=this.deps.resolveWorktreeRepoDir(e.workdir,e.worktreePath);if(!a)return;let d=We(e)?!1:nt(a,e.worktreePath);if(!We(e)&&!d)return;for(let l of Ge(e))this.deps.updatePersistedSession(l,{worktreePath:void 0,worktreeBranch:void 0,worktreeState:"none",worktreeLifecycle:{...e.worktreeLifecycle??r.lifecycle,state:r.derivedState,updatedAt:new Date(n).toISOString(),resolvedAt:e.worktreeLifecycle?.resolvedAt??new Date(n).toISOString(),resolutionSource:e.worktreeLifecycle?.resolutionSource??"maintenance",notes:r.reasons}})}catch(a){console.warn(`[SessionManager] Failed maintenance cleanup for worktree ${e.worktreePath}: ${xA(a)}`)}}syncActionTokenExpiryDeadline(){let e="tokens:expiry";this.cancel(e);let n=this.deps.store.getNextActionTokenExpiry();n!=null&&this.schedule(e,n,()=>{this.deps.store.purgeExpiredActionTokens(Date.now())})}syncTmpOutputCleanupDeadline(e=Date.now()){this.cancel(zh);let n=this.deps.store.getNextTmpOutputCleanupAt(e);n!=null&&this.schedule(zh,n,()=>{let r=Date.now();this.deps.store.cleanupTmpOutputFiles(r),this.syncTmpOutputCleanupDeadline(r)})}enforcePersistedRetention(){let e=this.deps.store.evictOldestPersisted(this.deps.getMaxPersistedSessions());for(let n of e)this.cancelPersistedMaintenance(n),n.sessionId&&this.cancelRuntimeGc(n.sessionId),this.cleanupOutputPathIfUnreferenced(n.outputPath)}dispose(){this.scheduler.dispose()}persistedMaintenanceRef(e){return e.sessionId??_(e)??e.harnessSessionId}runtimeGcKey(e){return`runtime-gc:${e}`}persistedMaintenanceKey(e,n){return`persisted:${e}:${n}`}runtimeGcMaxAgeMs(){return(E.sessionGcAgeMinutes??1440)*6e4}schedulePersistedWorktreeReminder(e,n){let r=this.persistedMaintenanceKey(e,"worktree-reminder");this.schedule(r,n,()=>{let o=this.deps.store.getPersistedSession(e);if(!o||this.deps.reminders.sendReminderIfDue(o,Date.now()))return;let s=this.deps.reminders.getNextReminderAt(o);s!=null&&this.schedulePersistedWorktreeReminder(e,Math.max(s,Date.now()+bA))})}cleanupOutputPathIfUnreferenced(e){if(!(!e||this.deps.store.hasOutputPathReference(e)))try{IA(e)}catch{}}resolvedAtIso(e){return e.worktreeLifecycle?.resolvedAt??e.worktreeMergedAt??e.worktreeDismissedAt??(e.completedAt?new Date(e.completedAt).toISOString():void 0)}isLegacyResolvedWorktree(e){return e.worktreeMerged===!0||e.worktreeDisposition==="dismissed"||e.worktreeDisposition==="no-change-cleaned"||e.worktreeState==="merged"||e.worktreeState==="dismissed"}};var Qh=new Set(["completed","failed","killed"]),AA=new Set(["starting","running"]),RA=5e3,ca=class{registry;sessions;maxSessions;maxPersistedSessions;lastWaitingEventTimestamps=new Map;lastTurnCompleteMarkers=new Map;lastTerminalWakeMarkers=new Map;mergeQueue=new xr;pendingAskUserQuestions=new Map;store;metrics;wakeDispatcher;interactions;notifications;worktrees;questions;reminders;lifecycle;restore;stateSync;references;worktreeStrategy;worktreeDecisions;runtimeBootstrap;worktreeMessages;maintenance;constructor(e=20,n=50,r={}){this.maxSessions=e,this.maxPersistedSessions=n,this.registry=new aa,this.sessions=this.registry.sessions,this.store=new js(r.store),this.metrics=new Gs,this.wakeDispatcher=new Xs,this.interactions=new Zs(this.store.actionTokenStore,un),this.references=new Os(this.sessions,this.store),this.stateSync=new $s({store:this.store,sessions:this.sessions,resolveSession:o=>this.references.resolveActive(o)}),this.notifications=new ea(this.wakeDispatcher,(o,i)=>this.stateSync.applySessionPatch(o,i)),this.worktrees=new ta,this.restore=new Es(o=>this.store.getPersistedSession(o)),this.worktreeMessages=new la,this.worktreeStrategy=new Ls({shouldRunWorktreeStrategy:o=>this.shouldRunWorktreeStrategy(o),isAlreadyMerged:o=>this.isAlreadyMerged(o),resolveWorktreeRepoDir:(o,i)=>this.resolveWorktreeRepoDir(o,i),getWorktreeCompletionState:(o,i,s,a)=>this.getWorktreeCompletionState(o,i,s,a),updatePersistedSession:(o,i)=>this.updatePersistedSession(o,i),dispatchSessionNotification:(o,i)=>this.dispatchSessionNotification(o,i),getOutputPreview:(o,i)=>this.getOutputPreview(o,i),originThreadLine:o=>this.originThreadLine(o),getWorktreeDecisionButtons:o=>this.getWorktreeDecisionButtons(o),makeOpenPrButton:o=>this.makeActionButton(o,"worktree-create-pr","Open PR"),worktreeMessages:this.worktreeMessages,enqueueMerge:(o,i,s)=>this.enqueueMerge(o,i,s),mergeBranch:ds,spawnConflictResolver:async({session:o,worktreePath:i,prompt:s})=>this.spawn({prompt:s,workdir:i,name:`${o.name}-conflict-resolver`,harness:o.harnessName||Le(),model:o.model,reasoningEffort:o.reasoningEffort,fastMode:o.fastMode,permissionMode:"bypassPermissions",multiTurn:!0,worktreeStrategy:"off",autoMergeParentSessionId:o.id,route:o.route,originChannel:o.originChannel,originThreadId:o.originThreadId,originAgentId:o.originAgentId,originSessionKey:o.originSessionKey},{notifyLaunch:!1}),runAutoPr:async(o,i)=>{let{makeAgentPrTool:s}=await Promise.resolve().then(()=>(bs(),_g));return{success:(await s().execute("auto-pr",{session:o.id,base_branch:i}))?.meta?.success===!0}}}),this.questions=new na(this.pendingAskUserQuestions,(o,i)=>this.dispatchSessionNotification(o,i),o=>{this.lastWaitingEventTimestamps.delete(o)},(o,i)=>this.interactions.getQuestionButtons(o,i)),this.reminders=new ra(o=>this.buildRoutingProxy(o),(o,i)=>this.notifications.dispatch(o,i),(o,i)=>this.updatePersistedSession(o,i),o=>this.getWorktreeDecisionButtons(o)),this.maintenance=new pa({store:this.store,sessions:this.sessions,reminders:this.reminders,removeRuntimeSession:o=>this.registry.remove(o),persistSession:(o,i)=>this.persistSession(o,i),clearRuntimeSessionState:o=>{this.lastWaitingEventTimestamps.delete(o),this.lastTurnCompleteMarkers.delete(o),this.lastTerminalWakeMarkers.delete(o)},resolveWorktreeRepoDir:(o,i)=>this.resolveWorktreeRepoDir(o,i),updatePersistedSession:(o,i)=>this.updatePersistedSession(o,i),getMaxPersistedSessions:()=>this.maxPersistedSessions}),this.store.onActionTokensChanged(()=>this.syncActionTokenExpiryDeadline()),this.lifecycle=new ia({persistSession:o=>this.persistSession(o),clearWaitingTimestamp:o=>{this.lastWaitingEventTimestamps.delete(o)},handleWorktreeStrategy:o=>this.handleWorktreeStrategy(o),resolveWorktreeRepoDir:(o,i)=>this.resolveWorktreeRepoDir(o,i),updatePersistedSession:(o,i)=>this.updatePersistedSession(o,i),dispatchSessionNotification:(o,i)=>this.dispatchSessionNotification(o,i),notifySession:(o,i,s)=>this.notifySession(o,i,s),clearRetryTimersForSession:o=>this.wakeDispatcher.clearRetryTimersForSession(o),hasTurnCompleteWakeMarker:o=>this.lastTurnCompleteMarkers.has(o),shouldEmitTurnCompleteWake:o=>this.shouldEmitTurnCompleteWake(o),shouldEmitTerminalWake:o=>this.shouldEmitTerminalWake(o),resolvePlanApprovalMode:o=>this.resolvePlanApprovalMode(o),getPlanApprovalButtons:(o,i)=>this.interactions.getPlanApprovalButtons(o,i),getResumeButtons:(o,i)=>this.interactions.getResumeButtons(o,i),getQuestionButtons:(o,i)=>this.interactions.getQuestionButtons(o,i),extractLastOutputLine:o=>this.extractLastOutputLine(o),getOutputPreview:(o,i)=>this.getOutputPreview(o,i),originThreadLine:o=>this.originThreadLine(o),debounceWaitingEvent:o=>this.debounceWaitingEvent(o),isAlreadyMerged:o=>this.isAlreadyMerged(o)}),this.worktreeDecisions=new sa({getPersistedSession:o=>this.store.getPersistedSession(o),resolveActiveSession:o=>this.references.resolveActive(o),resolveWorktreeRepoDir:(o,i)=>this.resolveWorktreeRepoDir(o,i),updatePersistedSession:(o,i)=>this.updatePersistedSession(o,i),dispatchNotification:(o,i)=>this.notifications.dispatch(o,i),buildRoutingProxy:o=>this.buildRoutingProxy(o)}),this.runtimeBootstrap=new da({hydrateSpawnedSession:(o,i,s)=>{this.restore.hydrateSpawnedSession(o,i,s)},markRunning:o=>{this.store.markRunning(o),this.onPersistedSessionChanged(this.store.getPersistedSession(o.id))},handleTerminal:async o=>this.onSessionTerminal(o),handleTurnEnd:(o,i)=>this.onTurnEnd(o,i),formatLaunchWorkdirLabel:o=>this.formatLaunchWorkdirLabel(o),notifySession:(o,i,s)=>this.notifySession(o,i,s)})}get persisted(){return this.store.persisted}get idIndex(){return this.store.idIndex}get nameIndex(){return this.store.nameIndex}uniqueName(e){return this.registry.uniqueName(e)}syncRuntimeGcDeadline(e){this.maintenance.syncRuntimeGcDeadline(e)}cancelPersistedMaintenance(e){this.maintenance.cancelPersistedMaintenance(e)}onPersistedSessionChanged(e){e&&(this.syncPersistedSessionMaintenance(e),this.enforcePersistedRetention())}syncPersistedSessionMaintenance(e){this.maintenance.syncPersistedSessionMaintenance(e)}reconcileResolvedWorktreeRetention(e,n){this.maintenance.reconcileResolvedWorktreeRetention(e,n)}syncActionTokenExpiryDeadline(){this.maintenance.syncActionTokenExpiryDeadline()}syncTmpOutputCleanupDeadline(e=Date.now()){this.maintenance.syncTmpOutputCleanupDeadline(e)}enforcePersistedRetention(){this.maintenance.enforcePersistedRetention()}bootstrapMaintenanceSchedules(){this.maintenance.bootstrapMaintenanceSchedules()}disposeMaintenance(){this.maintenance.dispose()}spawn(e,n={}){if(this.registry.activeSessionCount()>=this.maxSessions)throw new Error(`Max sessions reached (${this.maxSessions}). Use agent_sessions to list active sessions and agent_kill to end one.`);if(e.sessionIdOverride){let g=this.registry.get(e.sessionIdOverride);if(g?.status==="starting"||g?.status==="running")throw new Error(`Cannot reuse session ID ${e.sessionIdOverride}: that session is still ${g.status}.`);g&&this.registry.remove(g.id),this.lastWaitingEventTimestamps.delete(e.sessionIdOverride),this.lastTurnCompleteMarkers.delete(e.sessionIdOverride),this.lastTerminalWakeMarkers.delete(e.sessionIdOverride),this.maintenance.cancelRuntimeGc(e.sessionIdOverride)}let o=e.name||Nf(e.prompt),i=this.uniqueName(o);if(i!==o&&console.warn(`[SessionManager] Name conflict: "${o}" \u2192 "${i}" (active session with same name exists)`),!e.route?.provider||!e.route.target)throw new Error(`Cannot launch session "${i}": missing explicit route metadata.`);let s=this.restore.prepareSpawn(e,i),a=e.harness??"claude-code",d=this,l,u=a==="claude-code"&&!e.canUseTool?async(g,S)=>{if(!l)throw new Error("canUseTool called before session ID was set");return d.handleAskUserQuestion(l,S)}:e.canUseTool,c=new ps({...e,workdir:s.actualWorkdir,systemPrompt:s.effectiveSystemPrompt,canUseTool:u},i);return l=c.id,this.registry.add(c),this.metrics.incrementLaunched(),this.runtimeBootstrap.initializeSession(c,s,e,n)}async spawnAndAwaitRunning(e,n={}){let r=this.spawn(e,n);return await this.waitForRunningSession(r),r}async waitForRunningSession(e){if(e.status==="running")return;if(Qh.has(e.status))throw new Error(this.describeLaunchFailure(e));let n=e.on?.bind(e),r=e.off?.bind(e)??e.removeListener?.bind(e);if(!n||!r)throw new Error(`Session ${e.name} [${e.id}] did not expose lifecycle events during startup.`);await new Promise((o,i)=>{let s=(d,l)=>{if(l==="running"){a(),o();return}Qh.has(l)&&(a(),i(new Error(this.describeLaunchFailure(e))))},a=()=>{r("statusChange",s)};n("statusChange",s)})}describeLaunchFailure(e){let n=e.killReason?` (reason: ${e.killReason})`:"",r=e.error||e.result?.result||`status=${e.status}${n}`;return`Session ${e.name} [${e.id}] failed to start: ${r}`}formatLaunchResult(e,n){return bi({prompt:e.prompt,workdir:e.workdir,harness:e.harness,permissionMode:e.permissionMode??E.permissionMode,planApproval:e.planApproval,resumeSessionId:e.resumeSessionId,forkSession:e.forkSession,forceNewSession:e.forceNewSession,clearedPersistedCodexResume:e.clearedPersistedCodexResume},n)}shouldRunWorktreeStrategy(e){let n=e.lifecycle;return!(n==="starting"||n==="awaiting_plan_decision"||n==="awaiting_user_input"||e.pendingPlanApproval)}makeActionButton(e,n,r,o={}){return this.interactions.makeActionButton(e,n,r,o)}consumeActionToken(e){return this.interactions.consumeActionToken(e)}getActionToken(e){return this.interactions.getActionToken(e)}clearPlanDecisionTokens(e,n){this.interactions.clearPlanDecisionTokens(e,n)}isCurrentPendingPlanDecision(e,n){let r=this.resolve(e)??this.getPersistedSession(e);return Co(r,n)}dispatchPlanApprovalFallback(e,n,r){let o=new Date().toISOString();this.notifications.dispatch(e,{label:"plan-approval-fallback",userMessage:Ao({session:e,summary:r}),notifyUser:"always",shouldDispatch:()=>this.isCurrentPendingPlanDecision(e.id,n),hooks:{onNotifyStarted:()=>{this.updatePersistedSession(e.id,{approvalPromptRequiredVersion:n,approvalPromptVersion:n,approvalPromptStatus:"sending",approvalPromptTransport:"direct-message",approvalPromptMessageKind:"explicit_fallback_text",approvalPromptLastAttemptAt:o})},onNotifySucceeded:()=>{this.updatePersistedSession(e.id,{approvalPromptRequiredVersion:n,approvalPromptVersion:n,approvalPromptStatus:"fallback_delivered",approvalPromptTransport:"direct-message",approvalPromptMessageKind:"explicit_fallback_text",approvalPromptLastAttemptAt:o,approvalPromptDeliveredAt:new Date().toISOString(),approvalPromptFailedAt:void 0})},onNotifyFailed:()=>{this.updatePersistedSession(e.id,{approvalPromptRequiredVersion:n,approvalPromptVersion:n,approvalPromptStatus:"failed",approvalPromptTransport:"direct-message",approvalPromptMessageKind:"explicit_fallback_text",approvalPromptLastAttemptAt:o,approvalPromptFailedAt:new Date().toISOString()})}},wakeMessageOnNotifySuccess:Ar(e,n,!0),wakeMessageOnNotifyFailed:oa({session:e,planDecisionVersion:n})})}getWorktreeDecisionButtons(e){let n=this.resolve(e)??this.getPersistedSession(e);if(!(!n||n.worktreeStrategy==="delegate"))return this.interactions.getWorktreeDecisionButtons(e,n)}getWorktreeCompletionState(e,n,r,o){return this.worktrees.getCompletionState(e,n,r,o)}notifyWorktreeOutcome(e,n,r){this.notifications.notifyWorktreeOutcome(e,n,r)}requestPlanApprovalFromUser(e,n){let r=n.trim();if(!r)return"Error: summary must not be empty.";let o=Xl(r),i=this.resolve(e),s=i?void 0:this.getPersistedSession(e),a=i??s;if(!a)return`Error: Session "${e}" not found.`;if(!a.pendingPlanApproval)return`Error: Session "${e}" is not awaiting plan approval.`;let d=ne(i??s??{id:e})??e;if(this.resolvePlanApprovalMode(a)!=="delegate")return`Error: Session "${e}" already uses direct user plan approval. Do not send a duplicate approval prompt.`;let l=a.actionablePlanDecisionVersion??a.planDecisionVersion;if(Mo(a,l))return[`An actionable plan review prompt already exists for session ${a.name} [${d}].`,"Wait for the user's Approve, Revise, or Reject response.","Do not send a separate plain-text approval message."].join(" ");if(a.deliveryState==="notifying")return[`A plan approval prompt is already being delivered for session ${a.name} [${d}].`,"Wait for delivery to finish before retrying."].join(" ");let u=this.interactions.getPlanApprovalButtons(d,{...a,planDecisionVersion:l}),c=[`\u{1F4CB} [${a.name}] Plan v${l??"?"} needs your decision:`,"","Why this was escalated:","",o,"","Choose Approve, Revise, or Reject below."].join(`
223
- `);return this.notifications.dispatch(this.buildRoutingProxy({id:d,name:a.name,sessionId:s?.sessionId,harnessSessionId:i?.harnessSessionId??s?.harnessSessionId,backendRef:i?.backendRef??s?.backendRef,route:i?.route??s?.route}),{label:"plan-approval",userMessage:c,notifyUser:"always",buttons:u,hooks:{onNotifyStarted:()=>{this.updatePersistedSession(d,{approvalPromptRequiredVersion:l,approvalPromptStatus:"sending",approvalPromptVersion:l,approvalPromptTransport:"direct-message",approvalPromptMessageKind:"canonical_buttons",approvalPromptLastAttemptAt:new Date().toISOString()})},onNotifySucceeded:()=>{this.updatePersistedSession(d,{canonicalPlanPromptVersion:l,approvalPromptRequiredVersion:l,approvalPromptVersion:l,approvalPromptStatus:"delivered",approvalPromptTransport:"direct-message",approvalPromptMessageKind:"canonical_buttons",approvalPromptDeliveredAt:new Date().toISOString(),approvalPromptFailedAt:void 0})},onNotifyFailed:()=>{this.updatePersistedSession(d,{approvalPromptRequiredVersion:l,approvalPromptVersion:l,approvalPromptStatus:"failed",approvalPromptTransport:"direct-message",approvalPromptMessageKind:"canonical_buttons",approvalPromptFailedAt:new Date().toISOString()})}},shouldDispatch:()=>this.isCurrentPendingPlanDecision(d,l),onUserNotifyFailed:()=>this.dispatchPlanApprovalFallback(this.buildRoutingProxy({id:d,name:a.name,sessionId:s?.sessionId,harnessSessionId:i?.harnessSessionId??s?.harnessSessionId,backendRef:i?.backendRef??s?.backendRef,route:i?.route??s?.route}),l,o),wakeMessageOnNotifySuccess:Ar({id:d,name:a.name},l)}),[`Canonical plan approval prompt sent for session ${a.name} [${d}].`,"Wait for the user's Approve, Revise, or Reject response.","Do not send a separate plain-text approval message."].join(" ")}buildRoutingProxy(e){return{id:ne(e)??_(e)??e.harnessSessionId??"unknown-session",name:e.name,harnessSessionId:e.harnessSessionId,backendRef:e.backendRef?{...e.backendRef}:void 0,route:e.route}}resolveWorktreeRepoDir(e,n){return e&&(!n||!_s(e,n))||!n?e:os(n)??e}formatLaunchWorkdirLabel(e){if(!e.worktreePath)return e.workdir;let n=this.resolveWorktreeRepoDir(e.originalWorkdir,e.worktreePath);return!n||n===e.worktreePath?e.worktreePath:`${e.worktreePath} (worktree of ${n})`}async dismissWorktree(e){return this.worktreeDecisions.dismissWorktree(e)}snoozeWorktreeDecision(e){return this.worktreeDecisions.snoozeWorktreeDecision(e)}async handleWorktreeStrategy(e){return this.worktreeStrategy.handleWorktreeStrategy(e)}async onSessionTerminal(e){if(e.autoMergeParentSessionId){await this.handleAutoMergeResolverTerminal(e);return}return this.lifecycle.handleSessionTerminal(e)}async handleAutoMergeResolverTerminal(e){this.persistSession(e),this.lastWaitingEventTimestamps.delete(e.id),this.wakeDispatcher.clearRetryTimersForSession(e.id);let n=e.autoMergeParentSessionId;if(!n)return;let r=this.resolve(n),o=this.getPersistedSession(n),i=r??(o?this.buildRoutingProxy({id:o.sessionId,name:o.name,sessionId:o.sessionId,harnessSessionId:o.harnessSessionId,backendRef:o.backendRef,route:o.route}):void 0);if(!i){console.warn(`[SessionManager] Auto-merge resolver ${e.id} completed, but original session ${n} could not be found.`);return}if(e.status==="completed"&&r){this.updatePersistedSession(n,{autoMergeResolverSessionId:void 0}),await this.handleWorktreeStrategy(r);return}let s=r?.worktreeBranch??o?.worktreeBranch??"unknown",a=r?.worktreePath??o?.worktreePath??"(unknown worktree)",d=r?.worktreeBaseBranch??o?.worktreeBaseBranch,l=r?.worktreePrTargetRepo??o?.worktreePrTargetRepo,u=r?.worktreePushRemote??o?.worktreePushRemote;this.updatePersistedSession(n,Ns({worktreeBaseBranch:d,worktreePrTargetRepo:l,worktreePushRemote:u},{clearResolverSessionId:!0,notes:[e.status==="completed"?"auto_merge_conflict_resolver_completed_without_retry_target":"auto_merge_conflict_resolver_failed"]})),this.dispatchSessionNotification(i,{label:"worktree-merge-conflict-resolver-failed",userMessage:[`\u26A0\uFE0F [${i.name}] Auto-merge conflict resolution did not complete successfully.`,`Branch \`${s}\` was preserved for manual follow-up in ${a}.`,e.status==="completed"?"The resolver finished, but the original session could not be resumed for the merge retry.":`Resolver session ${e.name} ended with status=${e.status}.`].join(`
224
- `),buttons:[[this.makeActionButton(n,"worktree-create-pr","Open PR")]]})}getStoppedStatusLabel(e){return xo(e)}persistSession(e,n={}){let r=n.scheduleRuntimeGc??!0;this.store.hasRecordedSession(e.id)||this.metrics.recordSession(e),this.store.persistTerminal(e),r&&this.syncRuntimeGcDeadline(e),this.onPersistedSessionChanged(this.store.getPersistedSession(e.id)),this.syncTmpOutputCleanupDeadline()}getMetrics(){return this.metrics.getMetrics()}recordSessionMetrics(e){this.metrics.recordSession(e)}notifySession(e,n,r="notification"){this.dispatchSessionNotification(e,{label:r,userMessage:n,notifyUser:"always"})}sendPlanOffer(e){let n=this.interactions.getPlanOfferButtons({offerId:e.offerId,route:e.route,planName:e.planName,planPrompt:e.planPrompt,planWorkdir:e.planWorkdir,planWorktreeStrategy:e.planWorktreeStrategy});this.dispatchSessionNotification(this.buildRoutingProxy({id:e.offerId,route:e.route}),{label:"plan-offer",userMessage:e.text,notifyUser:"always",buttons:n})}emitGoalTaskUpdate(e,n,r="goal-task"){let o=this.buildRoutingProxy({id:e.sessionId??e.id,route:e.route});o.originChannel=e.originChannel,o.originThreadId=e.originThreadId,o.originSessionKey=e.originSessionKey,this.dispatchSessionNotification(o,{label:r,userMessage:n,notifyUser:"always"})}launchPlanOffer(e){let n=e.route??{provider:"system",target:"system"};return this.spawn({prompt:e.prompt,workdir:e.workdir,name:e.name,harness:Le(),permissionMode:"plan",planApproval:"ask",worktreeStrategy:e.worktreeStrategy??"off",multiTurn:!0,route:n,originChannel:this.originChannelFromRoute(n),originThreadId:n.threadId,originSessionKey:n.sessionKey})}dispatchSessionNotification(e,n){this.notifications.dispatch(e,n)}originChannelFromRoute(e){return e.accountId?`${e.provider}|${e.accountId}|${e.target}`:`${e.provider}|${e.target}`}debounceWaitingEvent(e){let n=Date.now(),r=this.lastWaitingEventTimestamps.get(e);return r&&n-r<RA?!1:(this.lastWaitingEventTimestamps.set(e,n),!0)}originThreadLine(e){return Ai(e)}extractLastOutputLine(e){return e.getOutput(3).filter(o=>o.trim()).pop()?.trim()||void 0}getOutputPreview(e,n=1e3){return jh(e,n)}triggerAgentEvent(e){this.lifecycle.emitCompleted(e)}triggerFailedEvent(e,n,r=!1){this.lifecycle.emitFailed(e,n,r)}triggerWaitingForInputEvent(e){this.lifecycle.emitWaitingForInput(e)}resolvePlanApprovalMode(e){return e.planApproval??E.planApproval??"delegate"}onTurnEnd(e,n){this.lifecycle.handleTurnEnd(e,n)}shouldEmitTurnCompleteWake(e){let n=`${e.result?.session_id??""}|${e.result?.num_turns??0}|${e.result?.duration_ms??0}`;return this.lastTurnCompleteMarkers.get(e.id)===n?(console.info(`[SessionManager] shouldEmitTurnCompleteWake: debounced for session ${e.id} (marker unchanged: ${n})`),!1):(this.lastTurnCompleteMarkers.set(e.id,n),!0)}shouldEmitTerminalWake(e){let n=`${e.status}|${e.completedAt??0}|${e.result?.session_id??""}|${e.result?.num_turns??0}|${e.killReason}`;return this.lastTerminalWakeMarkers.get(e.id)===n?!1:(this.lastTerminalWakeMarkers.set(e.id,n),!0)}triggerTurnCompleteEventWithSignal(e){this.lifecycle.emitTurnComplete(e)}resolve(e){return this.references.resolveActive(e)}get(e){return this.registry.get(e)}list(e){let n=this.registry.list();return e&&e!=="all"&&(n=n.filter(r=>r.status===e)),n.sort((r,o)=>o.startedAt-r.startedAt)}kill(e,n){let r=this.registry.get(e);if(!r)return!1;if(r.pendingPlanApproval){this.clearPlanDecisionTokens(r.id);let o={lifecycle:"terminal",runtimeState:"stopped",pendingPlanApproval:!1,planApprovalContext:void 0,approvalState:r.approvalState==="pending"?"rejected":r.approvalState,planDecisionVersion:(r.planDecisionVersion??0)+1,actionablePlanDecisionVersion:void 0,canonicalPlanPromptVersion:void 0,approvalPromptRequiredVersion:void 0,approvalPromptVersion:void 0,approvalPromptStatus:"not_sent",approvalPromptTransport:"none",approvalPromptMessageKind:"none",approvalPromptLastAttemptAt:void 0,approvalPromptDeliveredAt:void 0,approvalPromptFailedAt:void 0};r.applyControlPatch(o),Object.assign(r,o),this.updatePersistedSession(r.id,o)}return r.kill(n??"user"),!0}killAll(e="user"){for(let n of this.sessions.values())AA.has(n.status)&&this.kill(n.id,e)}resolveBackendConversationId(e){return this.references.resolveBackendConversationId(e)}resolveHarnessSessionId(e){return this.resolveBackendConversationId(e)}getPersistedSession(e){return this.references.getPersistedSession(e)}isAlreadyMerged(e){if(!e)return!1;let n=this.store.getPersistedSession(e);return n?.worktreeMerged===!0||n?.worktreeLifecycle?.state==="merged"||n?.worktreeLifecycle?.state==="released"}async enqueueMerge(e,n,r){return this.mergeQueue.enqueue(e,n,r)}updatePersistedSession(e,n){let r=this.stateSync.applySessionPatch(e,n);return r&&this.onPersistedSessionChanged(this.store.getPersistedSession(e)),r}listPersistedSessions(){return this.store.listPersistedSessions()}async handleAskUserQuestion(e,n){let r=this.sessions.get(e);if(!r)throw new Error(`Session "${e}" not found for AskUserQuestion intercept`);return this.questions.handleAskUserQuestion(r,n)}resolveAskUserQuestion(e,n){this.questions.resolveAskUserQuestion(e,n)}async resolvePendingInputOption(e,n){let r=this.sessions.get(e);return r&&await r.submitPendingInputOption(n)?(this.lastWaitingEventTimestamps.delete(e),!0):(this.questions.resolveAskUserQuestion(e,n),!0)}dispose(){this.disposeMaintenance(),this.questions.dispose(),this.notifications.dispose()}};Y();Te();var Yh=class{#t;#n;#e=new Map;constructor(t){this.#t=Jh(t,1),this.#n=this.#t}get maxEntries(){return this.#n}get size(){return this.#e.size}setMaxEntriesForTest(t){this.#n=typeof t=="number"?Jh(t,this.#t):this.#t,this.#r()}clear(){this.#e.clear()}get(t){let e=this.getResult(t);return e.hit?e.value:void 0}getResult(t){if(!this.#e.has(t))return{hit:!1};let e=this.#e.get(t);return this.#e.delete(t),this.#e.set(t,e),{hit:!0,value:e}}set(t,e){this.#e.has(t)&&this.#e.delete(t),this.#e.set(t,e),this.#r()}#r(){for(;this.#e.size>this.#n;){let t=this.#e.keys().next();if(t.done)break;this.#e.delete(t.value)}}};function Jh(t,e){return!Number.isFinite(t)||t<=0?e:Math.max(1,Math.floor(t))}var TA="\\x1b\\[[\\x20-\\x3f]*[\\x40-\\x7e]",MA="\\x1b\\][^\\x07\\x1b]*(?:\\x1b\\\\|\\x07)",FH=new RegExp(TA,"g"),LH=new RegExp(MA,"g"),WH=typeof Intl<"u"&&"Segmenter"in Intl?new Intl.Segmenter(void 0,{granularity:"grapheme"}):null;import{createRequire as CA}from"node:module";var JH=CA(import.meta.url);var YH=new Yh(512);function Xh(t){return{success:!1,error:{issues:[{path:[],message:t}]}}}function lu(){return{safeParse(t){return t===void 0?{success:!0,data:void 0}:!t||typeof t!="object"||Array.isArray(t)?Xh("expected config object"):Object.keys(t).length>0?Xh("config must be empty"):{success:!0,data:t}},jsonSchema:{type:"object",additionalProperties:!1,properties:{}}}}function _A(t,e){let n=!1,r;return()=>(n||(r=(typeof t=="function"?t():t)??e,n=!0),r)}function ma({id:t,name:e,description:n,kind:r,configSchema:o=lu,reload:i,nodeHostCommands:s,securityAuditCollectors:a,register:d}){let l=_A(o);return{id:t,name:e,description:n,...r?{kind:r}:{},...i?{reload:i}:{},...s?{nodeHostCommands:s}:{},...a?{securityAuditCollectors:a}:{},get configSchema(){return l()},register:d}}function NA(t){let e=parseInt(process.env.OPENCLAW_WORKTREE_CLEANUP_AGE_HOURS??"168",10)||168,n=e*60*60*1e3,r=Date.now()-n,o=new Set(t.listPersistedSessions().map(d=>d.worktreePath).filter(d=>typeof d=="string"&&d.length>0)),i=new Set,s=process.env.OPENCLAW_WORKTREE_DIR??E.worktreeDir;if(s)i.add(s);else for(let d of t.listPersistedSessions())if(d.workdir)try{let l=DA("git",["rev-parse","--show-toplevel"],{cwd:d.workdir,timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim();l&&i.add(Zh(l,".worktrees"))}catch{}if(i.size===0)return;let a=0;for(let d of i)try{let l=EA(d);for(let u of l){if(!u.startsWith("openclaw-worktree-"))continue;let c=Zh(d,u);try{let g=$A(c);if(!g.isDirectory()||g.mtimeMs>r||o.has(c))continue;OA(c,{recursive:!0,force:!0}),a++}catch(g){console.warn(`[index] Failed to clean up orphaned worktree ${c}: ${g instanceof Error?g.message:String(g)}`)}}}catch{}a>0&&console.info(`[index] Cleaned up ${a} orphaned worktree(s) at startup (age > ${e}h)`)}function FA(t){let e=null,n=null,r=!1,o=!1,i=t.registerTool;fr(t.runtime);let s=c=>{if(r){c&&!o&&(fr(t.runtime,c.config),o=!0);return}let g=t.pluginConfig??{};of(g),c?(fr(t.runtime,c.config),o=!0):(fr(t.runtime),o=!1),e=new ca(E.maxSessions,E.maxPersistedSessions),n=new Cs(e),Xd(e),Zd(n),n.start(),NA(e),e.bootstrapMaintenanceSchedules(),r=!0},a=()=>{n&&n.stop(),e&&e.killAll("shutdown"),e&&e.dispose(),n=null,e=null,r=!1,o=!1,fr(void 0),Zd(null),Xd(null)},d=(c,g)=>{i(S=>(s(),c(S)),g)},l={...t,registerCommand(c){t.registerCommand({...c,handler:g=>(s(),c.handler(g))})}},u=c=>{let g=Vg(c);t.registerInteractiveHandler({...g,handler:async S=>(s(),g.handler(S))})};d(c=>jf(c),{optional:!1,name:"agent_launch"}),d(c=>Sg(c),{optional:!1,name:"agent_sessions"}),d(c=>kg(c),{optional:!1,name:"agent_kill"}),d(c=>gs(c),{optional:!1,name:"agent_output"}),d(c=>xg(c),{optional:!1,name:"agent_respond"}),d(c=>Ag(c),{optional:!1,name:"agent_request_plan_approval"}),d(c=>Tg(c),{optional:!1,name:"agent_send_plan_offer"}),d(c=>Mg(c),{optional:!1,name:"agent_stats"}),d(c=>Is(c),{optional:!1,name:"agent_merge"}),d(c=>Io(c),{optional:!1,name:"agent_pr"}),d(c=>Eg(c),{optional:!1,name:"agent_worktree_cleanup"}),d(c=>$g(c),{optional:!1,name:"agent_worktree_status"}),d(c=>Og(c),{optional:!1,name:"goal_launch"}),d(c=>Ng(c),{optional:!1,name:"goal_status"}),d(c=>Fg(c),{optional:!1,name:"goal_stop"}),u("telegram"),u("discord"),jg(l),Gg(l),Hg(l),zg(l),Qg(l),Jg(l),Xg(l),Zg(l),eh(l),t.registerService({id:"openclaw-code-agent",start:s,stop:a})}var jz=ma({id:"openclaw-code-agent",name:"OpenClaw Code Agent",description:"Multi-session coding-agent orchestration from OpenClaw chat",register:FA});export{jz as default,FA as register};
196
+ ${e}`}function VA(t,e){return e!=null&&t.approvalPromptRequiredVersion===e&&(t.approvalPromptStatus==="delivered"||t.approvalPromptStatus==="fallback_delivered")}function Ho(t){let{session:e,summary:r}=t,n=e.actionablePlanDecisionVersion??e.planDecisionVersion;return[`\u{1F4CB} [${e.name}] Plan v${n??"?"} needs your decision.`,"","Interactive Approve / Revise / Reject buttons could not be delivered, so reply here instead:",'- Reply "approve" to approve and start implementation','- Reply "reject" to reject and stop the session',"- Any other reply will be sent back as revision feedback","","Why this was escalated:","",r].join(`
197
+ `)}function Kp(t){let{session:e,preview:r,questionText:n,questionContextPreview:o,planArtifact:i,originThreadLine:a,planApprovalMode:u,planApprovalButtons:p,questionButtons:d}=t,l=e.pendingPlanApproval,m=e.actionablePlanDecisionVersion??e.planDecisionVersion,c=VA(e,m),h=u??"delegate",y=l&&h==="ask"&&!c?Hf({sessionName:e.name,actionableVersion:m,preview:r,artifact:i,hasButtons:!!p}):void 0,S=l?y?.reviewSummary??Up({preview:r,artifact:i}):void 0,I=l?y&&y.userMessages.length===1?y.userMessages[0]:void 0:GA({sessionName:e.name,questionText:n??r,contextPreview:o}),w=l&&y&&y.userMessages.length>1?y.userMessages.map(($,C,Ie)=>({text:$,buttons:C===Ie.length-1?p:void 0})):void 0;if(l){let $=h,C="Permission mode: plan \u2192 will switch to bypassPermissions on approval";return $==="delegate"?{label:"plan-approval",userMessage:I,userMessages:w,planReviewSummary:S,wakeMessage:["[DELEGATED PLAN APPROVAL] Coding agent session has finished its plan and is requesting approval to implement.",`Name: ${e.name} | ID: ${e.id} | Plan v${m??"?"}`,a,C,"","\u26A0\uFE0F YOU MUST COMPLETE THESE STEPS IN ORDER. Do NOT skip any step.","","\u2501\u2501\u2501 STEP 1 (MANDATORY): Read the full plan \u2501\u2501\u2501",`Call agent_output(session='${e.id}', full=true) to read the FULL plan output.`,"The preview below is truncated \u2014 you MUST read the full output before making any decision.","","Preview (truncated):",r,"","\u2501\u2501\u2501 STEP 2 (MANDATORY): Review privately \u2501\u2501\u2501","You are the delegated decision-maker. Review the plan yourself before involving the user.","If you approve directly, you own the user-facing explanation of what was approved and why.","Keep it short and user-facing: one sentence is usually enough.","","\u2501\u2501\u2501 STEP 3 (ONLY AFTER steps 1 and 2): Decide \u2501\u2501\u2501","Choose ONE:","","APPROVE the plan directly if ALL of the following are true:","- You have read the FULL plan (not just the preview)","- The plan scope matches the original task request","- The changes are low-risk (no destructive operations, no credential handling, no production deployments)","- The plan is clear and well-scoped (no ambiguous requirements or open design questions)","- No architectural decisions that the user should weigh in on","- The working directory and codebase are correct","","ESCALATE to the user and WAIT if ANY of the following are true:","- The plan involves destructive operations (deleting files, dropping tables, force-pushing)","- The plan involves credentials, secrets, or production environments","- The plan requires architectural decisions not covered by the original task","- The scope has expanded beyond the original request","- The requirements are ambiguous or the plan makes assumptions the user should confirm","- You are unsure \u2014 when in doubt, always escalate","",`If approving: call agent_respond(session='${e.id}', message='Approved. Go ahead.', approve=true, approval_rationale='<brief reason>').`,"That rationale should say why approval was safe: for example scope match, low risk, or no meaningful ambiguity.","After approving directly, send the user a short plain-text follow-up explaining what was approved and why.","The plugin's thumbs-up line is only the minimal approval acknowledgment, not the explanation.",`If escalating: call agent_request_plan_approval(session='${e.id}', summary='...') exactly once so the plugin posts the single canonical Approve / Revise / Reject prompt.`,"That summary must concisely explain why this was escalated, plus changed files/components, risk level and why, scope match/expansion, and any concerns or assumptions.","After the canonical prompt exists, WAIT for the user's button click or explicit response and do NOT send a second plain-text recap.",`To request changes without user escalation: call agent_respond(session='${e.id}', message='<your feedback>') and do NOT set approve=true. The agent will revise the plan.`].join(`
198
+ `)}:$==="ask"?{label:"plan-approval",userMessage:I,userMessages:w,planReviewSummary:S,wakeMessage:["[USER APPROVAL REQUESTED] Coding agent session has finished its plan. The user has been notified via Telegram and must approve directly.",`Name: ${e.name} | ID: ${e.id} | Plan v${m??"?"}`,a,C,"","DO NOT approve this plan yourself. Wait for the user's explicit approval or rejection.","Once the user responds, forward their decision:",` To approve: agent_respond(session='${e.id}', message='Approved. Go ahead.', approve=true)`,` To request changes: agent_respond(session='${e.id}', message='<user feedback>')`,"","Preview (truncated):",r].join(`
199
+ `),buttons:w?void 0:p}:{label:"plan-approval",userMessage:I,planReviewSummary:S,wakeMessage:["[AUTO-APPROVE] Session has a plan ready. Approve it now:",`agent_respond(session='${e.id}', message='Approved. Go ahead.', approve=true)`].join(`
200
+ `)}}let R=e.multiTurn?"Multi-turn session":"Session";return{label:"waiting",userMessage:I,wakeMessage:[`[SYSTEM INSTRUCTION: Follow your auto-respond rules strictly. If this is a permission request or "should I continue?" \u2192 auto-respond. For ALL other questions \u2192 forward the agent's EXACT question to the user. Do NOT add your own analysis, commentary, or interpretation. Do NOT "nudge" or "poke" the session.]`,"",`${R} is waiting for a genuine user reply.`,`Name: ${e.name} | ID: ${e.id}`,a,"","Last output:",r,"",`Use agent_respond(session='${e.id}', message='...') to send a reply, or agent_output(session='${e.id}', full: true) to see full context before deciding.`].join(`
201
+ `),buttons:d}}It();var Vs=class{constructor(e){this.deps=e;this.actions=new js({shouldRunWorktreeStrategy:e.shouldRunWorktreeStrategy,isAlreadyMerged:e.isAlreadyMerged,resolveWorktreeRepoDir:e.resolveWorktreeRepoDir,getWorktreeCompletionState:e.getWorktreeCompletionState})}deps;actions;buildConflictResolverPrompt(e){return["Resolve the git rebase conflict for the auto-merge worktree and finish the rebase cleanly.","",`Original session: ${e.session.name} [${e.session.id}]`,`Repository root: ${e.repoDir}`,`Conflicted worktree: ${e.worktreePath}`,`Branch: ${e.branchName}`,`Base branch: ${e.baseBranch}`,"","Requirements:","- Work only inside the conflicted worktree.","- Inspect the current rebase state and resolve only the necessary conflict hunks.","- Make only minimal follow-up edits needed to keep the rebased branch correct.","- Continue the rebase until it completes successfully.","- Run relevant local verification before you finish.","- Do not broaden scope or start unrelated refactors.",`- Stop only when the branch is cleanly rebased onto ${e.baseBranch}.`,e.mergeError?"":void 0,e.mergeError?"Rebase failure details:":void 0,e.mergeError].filter(r=>typeof r=="string").join(`
202
+ `)}notifyAutoMergeConflictEscalation(e,r,n){this.deps.dispatchSessionNotification(e,{label:"worktree-merge-conflict-escalated",userMessage:[`\u26A0\uFE0F [${e.name}] Auto-merge could not finish after one conflict-resolution attempt.`,`Branch \`${r}\` was preserved for manual follow-up.`,"",n].join(`
203
+ `),buttons:[[this.deps.makeOpenPrButton(e.id)]]})}updatePersistedSessionFor(e,r){for(let n of ct(e))this.deps.updatePersistedSession(n,r)}markPendingDecision(e,r={}){this.updatePersistedSessionFor(e,Ws(e,r))}markAutoMergeConflictResolving(e,r,n){this.updatePersistedSessionFor(e,qf(e,r,n,{notes:[`resolver_session:${r}`]}))}markMerged(e){this.updatePersistedSessionFor(e,Bf(e,{clearResolverSessionId:!0}))}async handleWorktreeStrategy(e){let r=await this.actions.plan(e);return r.kind==="skip"?r.result:r.kind==="notify"?(this.deps.dispatchSessionNotification(e,{label:r.label,userMessage:r.message}),{notificationSent:!0,worktreeRemoved:!1}):r.kind==="dirty-uncommitted"?this.handleDirtyUncommittedCompletion(e,r.worktreePath,r.branchName,r.baseBranch):r.kind==="no-change"?this.handleNoChange(e,r.repoDir,r.worktreePath,r.nativeBackendWorktree):r.strategy==="ask"?this.handleAskStrategy(e,r.branchName,r.baseBranch,r.diffSummary):r.strategy==="delegate"?this.handleDelegateStrategy(e,r.branchName,r.baseBranch,r.diffSummary):r.strategy==="auto-merge"?(await this.handleAutoMergeStrategy(e,r.repoDir,r.worktreePath,r.branchName,r.baseBranch,r.diffSummary,r.sessionRef),{notificationSent:!0,worktreeRemoved:!1}):r.strategy==="auto-pr"?this.handleAutoPrStrategy(e,r.baseBranch):{notificationSent:!1,worktreeRemoved:!1}}async handleNoChange(e,r,n,o=lt(e)){let i=o?!0:kt(r,n);return i?(e.worktreePath=void 0,this.updatePersistedSessionFor(e,{worktreePath:void 0,worktreeDisposition:"no-change-cleaned",worktreeState:"none",worktreeLifecycle:{state:"no_change",updatedAt:new Date().toISOString(),resolvedAt:new Date().toISOString(),resolutionSource:"strategy_no_change",baseBranch:e.worktreeBaseBranch,targetRepo:e.worktreePrTargetRepo,pushRemote:e.worktreePushRemote}}),this.deps.dispatchSessionNotification(e,this.deps.worktreeMessages.buildNoChangeNotification({session:e,nativeBackendWorktree:o,cleanupSucceeded:!0,worktreePath:n,preview:this.deps.getOutputPreview(e),originThreadLine:this.deps.originThreadLine(e)}))):this.deps.dispatchSessionNotification(e,this.deps.worktreeMessages.buildNoChangeNotification({session:e,nativeBackendWorktree:o,cleanupSucceeded:!1,worktreePath:n,preview:this.deps.getOutputPreview(e),originThreadLine:this.deps.originThreadLine(e)})),{notificationSent:!0,worktreeRemoved:i}}handleAskStrategy(e,r,n,o){return this.deps.dispatchSessionNotification(e,this.deps.worktreeMessages.buildAskNotification({session:e,branchName:r,baseBranch:n,diffSummary:o,buttons:this.deps.getWorktreeDecisionButtons(e.id)})),this.markPendingDecision(e),{notificationSent:!0,worktreeRemoved:!1}}handleDelegateStrategy(e,r,n,o){return this.deps.dispatchSessionNotification(e,this.deps.worktreeMessages.buildDelegateNotification({session:e,branchName:r,baseBranch:n,diffSummary:o,originThreadLine:this.deps.originThreadLine(e)})),this.markPendingDecision(e),{notificationSent:!0,worktreeRemoved:!1}}handleDirtyUncommittedCompletion(e,r,n,o){this.markPendingDecision(e,{notes:["dirty_uncommitted_completion"]});let i=Kn(r),a=i.slice(0,20).map(p=>`- ${p}`),u=i.length>20?[`- ...and ${i.length-20} more`]:[];return this.deps.dispatchSessionNotification(e,{label:"worktree-dirty-uncommitted",userMessage:[`\u26A0\uFE0F [${e.name}] Session completed with uncommitted worktree changes.`,"",`Branch \`${n}\` has no commits ahead of \`${o}\`, so merge/PR follow-through is blocked until the worktree is fixed.`,`Worktree: ${r}`,"",...a.length>0?["Dirty entries:",...a,...u,""]:[],"Resume the session or inspect the worktree, then commit real task changes or clean temporary files. Discard only if these local changes should be permanently removed."].join(`
204
+ `)}),{notificationSent:!0,worktreeRemoved:!1}}handleAutoMergeSuccess(e,r,n,o,i,a){Jt(r,n),this.markMerged(e);let u=an({kind:"merge",branch:n,base:o,filesChanged:i.filesChanged,insertions:i.insertions,deletions:i.deletions}),p=u;a.stashPopConflict?p+=`
205
+ \u26A0\uFE0F Pre-merge stash pop conflicted \u2014 run \`git stash show ${a.stashRef??"stash@{0}"}\` in ${r} to review stashed changes.`:a.stashed&&(p+=`
206
+ (Pre-existing changes on ${o} were auto-stashed and restored.)`);let d=[a.fastForward?"Merge type: fast-forward.":"Merge type: merge commit.",`Auto-merge landed ${n} into ${o}.`,"Local worktree branch cleanup was requested.",...a.stashPopConflict?[`Pre-merge stash pop conflicted; run git stash show ${a.stashRef??"stash@{0}"} in ${r} to review stashed changes.`]:[],...!a.stashPopConflict&&a.stashed?[`Pre-existing changes on ${o} were auto-stashed and restored.`]:[]];this.deps.dispatchSessionNotification(e,{label:"worktree-merge-success",userMessage:p,notifyUser:"always",completionWakeSummaryRequired:!0,wakeMessageOnNotifySuccess:Hn({sessionId:e.id,sessionName:e.name,outcomeLine:u,originThreadLine:this.deps.originThreadLine(e),detailLines:d,canonicalStatusDelivered:!0}),wakeMessageOnNotifyFailed:Hn({sessionId:e.id,sessionName:e.name,outcomeLine:u,originThreadLine:this.deps.originThreadLine(e),detailLines:d,canonicalStatusDelivered:!1})})}async handleInitialAutoMergeConflict(e,r,n,o,i,a){let u=e.autoMergeConflictResolutionAttemptCount??0;if(u>=1){this.markPendingDecision(e,{notes:["auto_merge_conflict_retry_exhausted"],clearResolverSessionId:!0}),this.notifyAutoMergeConflictEscalation(e,o,`The rebased branch still conflicts with \`${i}\`. Open a PR or resolve manually in ${n}.`);return}let p=this.buildConflictResolverPrompt({session:e,repoDir:r,worktreePath:n,branchName:o,baseBranch:i,mergeError:a});try{let d=await this.deps.spawnConflictResolver({session:e,repoDir:r,worktreePath:n,branchName:o,baseBranch:i,prompt:p});this.markAutoMergeConflictResolving(e,d.id,u+1),this.deps.dispatchSessionNotification(e,{label:"worktree-merge-conflict-resolving",userMessage:`\u26A0\uFE0F [${e.name}] Auto-merge hit a rebase conflict. Started resolver session ${d.name} and will retry automatically if it succeeds.`})}catch(d){this.markPendingDecision(e,{notes:["auto_merge_conflict_resolver_spawn_failed"]}),this.deps.dispatchSessionNotification(e,{label:"worktree-merge-conflict-spawn-failed",userMessage:`\u274C [${e.name}] Auto-merge hit a rebase conflict and failed to start the resolver: ${d instanceof Error?d.message:String(d)}`,buttons:[[this.deps.makeOpenPrButton(e.id)]]})}}handleAutoMergeRetryFailure(e,r,n,o){this.markPendingDecision(e,{notes:["auto_merge_conflict_retry_failed"],clearResolverSessionId:!0}),this.deps.dispatchSessionNotification(e,{label:"worktree-merge-error",userMessage:[o,"","Auto-merge retry did not complete after conflict resolution.",`Branch \`${r}\` was preserved for manual follow-up in ${n}.`].join(`
207
+ `),buttons:[[this.deps.makeOpenPrButton(e.id)]]})}async handleAutoMergeStrategy(e,r,n,o,i,a,u=Se(e)??e.harnessSessionId){this.deps.isAlreadyMerged(u)||e.autoMergeResolverSessionId||await this.deps.enqueueMerge(r,async()=>{if(this.deps.isAlreadyMerged(u))return;let p=this.deps.mergeBranch(r,o,i,"merge",n);if(p.success){this.handleAutoMergeSuccess(e,r,o,i,a,p);return}if(p.rebaseConflict){await this.handleInitialAutoMergeConflict(e,r,n,o,i,p.error);return}let d=p.dirtyError?`\u274C [${e.name}] Merge blocked: ${p.error}`:`\u274C [${e.name}] Merge failed: ${p.error??"unknown error"}`;if(e.worktreeState==="merge_conflict_resolving"||e.worktreeLifecycle?.state==="merge_conflict_resolving"){this.handleAutoMergeRetryFailure(e,o,n,d);return}this.deps.dispatchSessionNotification(e,{label:"worktree-merge-error",userMessage:d})},()=>{this.deps.dispatchSessionNotification(e,{label:"worktree-merge-queued",userMessage:`\u{1F550} [${e.name}] Merge queued \u2014 another merge for this repo is in progress. Will notify when complete.`})})}async handleAutoPrStrategy(e,r){return this.updatePersistedSessionFor(e,{lifecycle:"terminal",worktreeState:"pr_in_progress"}),(await this.deps.runAutoPr(e,r)).success||(this.markPendingDecision(e),this.deps.dispatchSessionNotification(e,{label:"worktree-auto-pr-failed",userMessage:`\u26A0\uFE0F [${e.name}] Auto-PR did not complete. The worktree is preserved for an explicit merge or PR decision.`,buttons:this.deps.getWorktreeDecisionButtons(e.id)})),{notificationSent:!0,worktreeRemoved:!1}}};import{existsSync as wT,writeFileSync as vT}from"fs";ir();import{randomUUID as HA}from"crypto";function zA(t){return t==="plan-approve"||t==="plan-request-changes"||t==="plan-reject"}var Hs=class{constructor(e,r){this.onChange=e;this.retentionMs=r}onChange;retentionMs;tokens=new Map;afterChange;replaceAll(e){this.tokens.clear();for(let r of e)this.tokens.set(r.id,r)}clear(){this.tokens.clear(),this.notifyChanged()}listForPersistence(){return[...this.tokens.values()]}createActionToken(e,r,n={}){let o={id:HA(),sessionId:e,kind:r,createdAt:Date.now(),...n};return this.tokens.set(o.id,o),this.notifyChanged(),o}getActionToken(e){let r=this.tokens.get(e);if(r){if(r.expiresAt!=null&&r.expiresAt<=Date.now()){this.tokens.delete(e),this.notifyChanged();return}return r}}consumeActionToken(e){let r=this.getActionToken(e);if(!(!r||r.consumedAt!=null))return r.consumedAt=Date.now(),this.notifyChanged(),r}deleteActionTokensForSession(e){let r=!1;for(let[n,o]of this.tokens)o.sessionId===e&&(this.tokens.delete(n),r=!0);r&&this.notifyChanged()}deletePlanDecisionTokensForSession(e,r){let n=!1;for(let[o,i]of this.tokens)i.sessionId!==e||!zA(i.kind)||r!=null&&i.planDecisionVersion===r||(this.tokens.delete(o),n=!0);n&&this.notifyChanged()}purgeExpiredActionTokens(e=Date.now()){let r=!1;for(let[n,o]of this.tokens){let i=o.expiresAt!=null&&o.expiresAt<=e,a=o.consumedAt!=null&&e-o.consumedAt>this.retentionMs;(i||a)&&(this.tokens.delete(n),r=!0)}r&&this.notifyChanged()}nextExpiryAt(){let e;for(let r of this.tokens.values()){let n=[r.expiresAt,r.consumedAt!=null?r.consumedAt+this.retentionMs:void 0].filter(o=>o!=null&&Number.isFinite(o));for(let o of n)(e==null||o<e)&&(e=o)}return e}setAfterChangeListener(e){this.afterChange=e}notifyChanged(){this.onChange(),this.afterChange?.()}};Ee();Ee();var zs=class{constructor(e){this.indexes=e}indexes;hasRecordedSession(e){return this.indexes.idIndex.has(e)}getLatestPersistedByName(e){let r,n=Number.NEGATIVE_INFINITY,o=Number.NEGATIVE_INFINITY,i=Number.NEGATIVE_INFINITY,a=0;for(let u of this.indexes.persisted.values()){if(u.name!==e){a++;continue}let p=u.createdAt??Number.NEGATIVE_INFINITY,d=u.completedAt??Number.NEGATIVE_INFINITY;(p>n||p===n&&d>o||p===n&&d===o&&a>i)&&(r=u,n=p,o=d,i=a),a++}return r}resolveBackendConversationId(e,r){if(r)return r;let n=this.indexes.idIndex.get(e);if(n){let a=this.indexes.persisted.get(n);return(a?U(a):void 0)??n}let o=this.getLatestPersistedByName(e);if(o)return U(o)??o.harnessSessionId;let i=this.indexes.backendIdIndex.get(e);if(i){let a=this.indexes.persisted.get(i);return(a?U(a):void 0)??i}if(this.indexes.persisted.has(e)){let a=this.indexes.persisted.get(e);return a?U(a)??e:e}if(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e))return e}resolveHarnessSessionId(e,r){return this.resolveBackendConversationId(e,r)}getPersistedSession(e){let r=this.indexes.idIndex.get(e);if(r)return this.indexes.persisted.get(r);let n=this.getLatestPersistedByName(e);if(n)return n;let o=this.indexes.backendIdIndex.get(e);return o?this.indexes.persisted.get(o):this.indexes.persisted.get(e)}listPersistedSessions(){return[...this.indexes.persisted.values()].sort((e,r)=>(r.completedAt??0)-(e.completedAt??0))}};import{existsSync as ST,mkdirSync as kT,readFileSync as IT,readdirSync as Wp,renameSync as tg,statSync as rg,unlinkSync as ng,writeFileSync as og}from"fs";import{tmpdir as Gp}from"os";import{dirname as xT,join as Zs}from"path";import{homedir as JA}from"node:os";import{join as QA}from"node:path";function Jf(t){let e=t.OPENCLAW_HOME?.trim();if(e)return e;let r=t.HOME?.trim()||JA();return QA(r,".openclaw")}ir();var Js=6,YA=new Set(["running","completed","failed","killed"]);function zo(t){return!!t&&typeof t=="object"}function zn(t,e=""){return typeof t=="string"&&t.trim().length>0?t:e}function P(t){return typeof t=="string"&&t.trim().length>0?t:void 0}function ft(t){return typeof t=="number"&&Number.isFinite(t)?t:void 0}function ZA(t){return typeof t=="string"&&jc.has(t)?t:void 0}function Qf(t){return t==="default"||t==="plan"||t==="bypassPermissions"?t:void 0}function XA(t){return t==="never"||t==="on-request"?"never":void 0}function eT(t){return t==="approve"||t==="ask"||t==="delegate"?t:void 0}function tT(t){if(t==="plan-mode"||t==="codex-first-turn-plan"||t==="soft-plan")return"plan-mode"}function Yf(t){return typeof t=="string"&&vs.has(t)?t:void 0}function rT(t){return t==="user"||t==="idle-timeout"||t==="startup-timeout"||t==="shutdown"||t==="done"||t==="unknown"?t:void 0}function nT(t){return t==="starting"||t==="active"||t==="awaiting_plan_decision"||t==="awaiting_user_input"||t==="awaiting_worktree_decision"||t==="suspended"||t==="terminal"?t:void 0}function oT(t){return t==="not_required"||t==="pending"||t==="approved"||t==="changes_requested"||t==="rejected"?t:void 0}function iT(t){return t==="none"||t==="provisioned"||t==="pending_decision"||t==="merge_conflict_resolving"||t==="merge_in_progress"||t==="pr_in_progress"||t==="merged"||t==="released"||t==="pr_open"||t==="dismissed"||t==="cleanup_failed"?t:void 0}function sT(t){return t==="none"||t==="provisioned"||t==="pending_decision"||t==="merge_conflict_resolving"||t==="pr_open"||t==="merged"||t==="released"||t==="dismissed"||t==="no_change"||t==="cleanup_failed"?t:void 0}function aT(t){return t==="live"||t==="stopped"?t:void 0}function uT(t){return t==="not_sent"||t==="sending"||t==="delivered"||t==="fallback_delivered"||t==="failed"?t:void 0}function pT(t){return t==="direct-telegram"?"direct-message":t==="none"||t==="direct-message"||t==="wake-only"?t:void 0}function dT(t){return t==="none"||t==="canonical_buttons"||t==="explicit_fallback_text"?t:void 0}function lT(t){return t==="idle"||t==="notifying"||t==="wake_pending"||t==="failed"?t:void 0}function mT(t){return t==="awaiting_plan_output"||t==="awaiting_approval"||t==="approved_then_implemented"||t==="implemented_without_required_approval"||t==="not_plan_gated"?t:void 0}function cT(t){return t==="plan-approve"||t==="plan-request-changes"||t==="plan-reject"||t==="plan-offer-start"||t==="plan-offer-dismiss"||t==="worktree-merge"||t==="worktree-create-pr"||t==="worktree-update-pr"||t==="worktree-view-pr"||t==="worktree-decide-later"||t==="worktree-dismiss"||t==="session-resume"||t==="session-restart"||t==="view-output"||t==="question-answer"?t:void 0}function Zf(t){if(!zo(t))return;let e=P(t.provider),r=P(t.accountId),n=P(t.target),o=P(t.threadId),i=P(t.sessionKey);if(!(!e||!n))return{provider:e,accountId:r,target:n,threadId:o,sessionKey:i}}function fT(t,e,r){if(zo(t)){let n=P(t.kind),o=P(t.conversationId);if(o&&(n==="claude-code"||n==="codex-app-server"))return{kind:n,conversationId:o,runId:P(t.runId),worktreeId:P(t.worktreeId),worktreePath:P(t.worktreePath)}}if(e==="claude-code")return{kind:"claude-code",conversationId:r}}function gT(t){if(!zo(t))return;let e=sT(t.state),r=P(t.updatedAt);if(!e||!r)return;let n=P(t.resolutionSource);return{state:e,updatedAt:r,resolvedAt:P(t.resolvedAt),resolutionSource:n==="agent_merge"||n==="agent_pr"||n==="strategy_no_change"||n==="lifecycle_resolver"||n==="dismiss"||n==="maintenance"?n:void 0,baseBranch:P(t.baseBranch),targetRepo:P(t.targetRepo),pushRemote:P(t.pushRemote),notes:Array.isArray(t.notes)?t.notes.filter(o=>typeof o=="string"&&o.length>0):void 0}}function hT(t){let e=new Date(0).toISOString(),r=P(t.worktreeMergedAt)??P(t.worktreeDismissedAt)??P(t.pendingWorktreeDecisionSince)??e;if(t.worktreeMerged===!0)return{state:"merged",updatedAt:r,resolvedAt:P(t.worktreeMergedAt)??r,resolutionSource:"agent_merge",baseBranch:P(t.worktreeBaseBranch),targetRepo:P(t.worktreePrTargetRepo),pushRemote:P(t.worktreePushRemote)};if(t.worktreeDisposition==="dismissed")return{state:"dismissed",updatedAt:r,resolvedAt:P(t.worktreeDismissedAt)??r,resolutionSource:"dismiss",baseBranch:P(t.worktreeBaseBranch),targetRepo:P(t.worktreePrTargetRepo),pushRemote:P(t.worktreePushRemote)};if(t.worktreeDisposition==="no-change-cleaned")return{state:"no_change",updatedAt:r,resolvedAt:r,resolutionSource:"strategy_no_change",baseBranch:P(t.worktreeBaseBranch),targetRepo:P(t.worktreePrTargetRepo),pushRemote:P(t.worktreePushRemote)};if(t.worktreeDisposition==="pr-opened"||t.worktreeState==="pr_open")return{state:"pr_open",updatedAt:r,baseBranch:P(t.worktreeBaseBranch),targetRepo:P(t.worktreePrTargetRepo),pushRemote:P(t.worktreePushRemote)};if(t.pendingWorktreeDecisionSince||t.worktreeState==="pending_decision")return{state:"pending_decision",updatedAt:r,baseBranch:P(t.worktreeBaseBranch),targetRepo:P(t.worktreePrTargetRepo),pushRemote:P(t.worktreePushRemote)};if(t.worktreeState==="merge_conflict_resolving")return{state:"merge_conflict_resolving",updatedAt:r,baseBranch:P(t.worktreeBaseBranch),targetRepo:P(t.worktreePrTargetRepo),pushRemote:P(t.worktreePushRemote)};if(P(t.worktreePath)||P(t.worktreeBranch))return{state:"provisioned",updatedAt:r,baseBranch:P(t.worktreeBaseBranch),targetRepo:P(t.worktreePrTargetRepo),pushRemote:P(t.worktreePushRemote)}}function yT(t){if(typeof t=="string"&&YA.has(t))return t==="running"?"killed":t}function Xf(t){if(!zo(t))return;let e=zn(t.harnessSessionId);if(!e)return;let r=yT(t.status);if(!r)return;let n=t.status==="running",o=P(t.worktreePath),i=P(t.worktreeBranch),a=P(t.originChannel),u=typeof t.originThreadId=="string"||typeof t.originThreadId=="number"?t.originThreadId:void 0,p=P(t.originSessionKey),d=Zf(t.route);if(!d)return;let l=en({route:d,originChannel:a,originThreadId:u,originSessionKey:p});if(!l||o&&!i)return;let m=P(t.harness),c=fT(t.backendRef,m,e),h=gT(t.worktreeLifecycle)??hT(t);return{sessionId:P(t.sessionId),harnessSessionId:e,backendRef:c,name:zn(t.name,e),prompt:zn(t.prompt),workdir:zn(t.workdir,"(unknown)"),model:P(t.model),reasoningEffort:ZA(t.reasoningEffort),fastMode:t.fastMode===!0?!0:void 0,createdAt:ft(t.createdAt),completedAt:ft(t.completedAt),status:r,lifecycle:n?"suspended":nT(t.lifecycle),approvalState:oT(t.approvalState),worktreeState:iT(t.worktreeState),runtimeState:n?"stopped":aT(t.runtimeState),deliveryState:lT(t.deliveryState),completionWakeIssuedAt:P(t.completionWakeIssuedAt),completionWakeSucceededAt:P(t.completionWakeSucceededAt),completionWakeFailedAt:P(t.completionWakeFailedAt),completionWakeSummaryRequired:t.completionWakeSummaryRequired===!0?!0:void 0,killReason:rT(t.killReason),costUsd:typeof t.costUsd=="number"&&Number.isFinite(t.costUsd)?t.costUsd:0,originAgentId:P(t.originAgentId),originChannel:a,originThreadId:u,originSessionKey:p,route:l,outputPath:P(t.outputPath),harness:m,requestedPermissionMode:Qf(t.requestedPermissionMode),currentPermissionMode:Qf(t.currentPermissionMode),approvalExecutionState:mT(t.approvalExecutionState),approvalRationale:P(t.approvalRationale),planModeApproved:t.planModeApproved===!0,pendingPlanApproval:t.pendingPlanApproval===!0,planApprovalContext:tT(t.planApprovalContext),planDecisionVersion:ft(t.planDecisionVersion),actionablePlanDecisionVersion:ft(t.actionablePlanDecisionVersion),canonicalPlanPromptVersion:ft(t.canonicalPlanPromptVersion),approvalPromptRequiredVersion:ft(t.approvalPromptRequiredVersion),approvalPromptVersion:ft(t.approvalPromptVersion),approvalPromptStatus:uT(t.approvalPromptStatus),approvalPromptTransport:pT(t.approvalPromptTransport),approvalPromptMessageKind:dT(t.approvalPromptMessageKind),approvalPromptLastAttemptAt:P(t.approvalPromptLastAttemptAt),approvalPromptDeliveredAt:P(t.approvalPromptDeliveredAt),approvalPromptFailedAt:P(t.approvalPromptFailedAt),planApproval:eT(t.planApproval),codexApprovalPolicy:XA(t.codexApprovalPolicy),worktreePath:o,worktreeBranch:i,worktreeStrategy:Yf(t.worktreeStrategy),worktreeMerged:typeof t.worktreeMerged=="boolean"?t.worktreeMerged:void 0,worktreeMergedAt:P(t.worktreeMergedAt),worktreePrUrl:P(t.worktreePrUrl),worktreePrNumber:ft(t.worktreePrNumber),pendingWorktreeDecisionSince:P(t.pendingWorktreeDecisionSince),lastWorktreeReminderAt:P(t.lastWorktreeReminderAt),worktreeBaseBranch:P(t.worktreeBaseBranch),worktreePrTargetRepo:P(t.worktreePrTargetRepo),autoMergeParentSessionId:P(t.autoMergeParentSessionId),autoMergeConflictResolutionAttemptCount:ft(t.autoMergeConflictResolutionAttemptCount),autoMergeResolverSessionId:P(t.autoMergeResolverSessionId),worktreePushRemote:P(t.worktreePushRemote),worktreeDecisionSnoozedUntil:P(t.worktreeDecisionSnoozedUntil),worktreeDisposition:t.worktreeDisposition==="active"||t.worktreeDisposition==="pr-opened"||t.worktreeDisposition==="merged"||t.worktreeDisposition==="dismissed"||t.worktreeDisposition==="no-change-cleaned"?t.worktreeDisposition:void 0,worktreeDismissedAt:P(t.worktreeDismissedAt),worktreeLifecycle:h,resumable:n?!0:t.resumable===!0}}function eg(t){if(!zo(t))return;let e=cT(t.kind),r=zn(t.id),n=zn(t.sessionId),o=ft(t.createdAt);if(!(!r||!n||!e||o==null))return{id:r,sessionId:n,kind:e,createdAt:o,planDecisionVersion:ft(t.planDecisionVersion),expiresAt:ft(t.expiresAt),consumedAt:ft(t.consumedAt),optionIndex:ft(t.optionIndex),label:P(t.label),targetUrl:P(t.targetUrl),route:Zf(t.route),launchName:P(t.launchName),launchPrompt:P(t.launchPrompt),launchWorkdir:P(t.launchWorkdir),launchWorktreeStrategy:Yf(t.launchWorktreeStrategy)}}function Qs(t){if(!t.backendRef?.kind||!t.backendRef.conversationId)throw new Error(`Persisted session ${t.harnessSessionId} is missing required backend ref metadata.`);if(!t.route?.provider||!t.route.target)throw new Error(`Persisted session ${t.harnessSessionId} is missing required route metadata.`);if(t.worktreePath&&!t.worktreeBranch)throw new Error(`Persisted session ${t.harnessSessionId} is missing required worktreeBranch metadata.`)}function jp(t){return!!t&&typeof t=="object"}function Vp(t){return t instanceof Error?t.message:String(t)}function ig(t){let e=t.OPENCLAW_CODE_AGENT_SESSIONS_PATH?.trim();return e||Zs(Jf(t),"code-agent-sessions.json")}function sg(t,e,r){try{kT(xT(t),{recursive:!0});let n=t+".tmp";og(n,JSON.stringify({schemaVersion:Js,sessions:e,actionTokens:r},null,2),"utf-8"),tg(n,t)}catch(n){console.warn(`[SessionStore] Failed to save session index: ${Vp(n)}`)}}function Ys(t,e){try{if(!ST(t))return;let r=`${t}.legacy-${Date.now()}.json`;tg(t,r),console.warn(`[SessionStore] Breaking upgrade: archived ${e} session store to ${r}. Legacy sessions are not loaded by this release.`)}catch(r){console.warn(`[SessionStore] Failed to archive legacy session store: ${Vp(r)}`)}}function PT(t,e){try{if(e.length===0)return;let r=`${t}.codex-sdk-legacy-${Date.now()}.json`;og(r,JSON.stringify(e,null,2),"utf-8"),console.warn(`[SessionStore] Breaking Codex transport upgrade: archived ${e.length} legacy Codex SDK session(s) to ${r}. They are not loaded by the App Server backend.`)}catch(r){console.warn(`[SessionStore] Failed to archive legacy Codex SDK sessions: ${Vp(r)}`)}}function ag(t,e){try{let r=Gp(),n=Wp(r).filter(o=>o.startsWith("openclaw-agent-")&&o.endsWith(".txt"));for(let o of n)try{let i=Zs(r,o),a=rg(i).mtimeMs;t-a>e&&ng(i)}catch{}}catch{}}function ug(t,e){try{let r=Gp(),n=Wp(r).filter(i=>i.startsWith("openclaw-agent-")&&i.endsWith(".txt")),o;for(let i of n)try{let a=Zs(r,i),u=rg(a).mtimeMs+e;if(u<=t)return t;o=o==null?u:Math.min(o,u)}catch{}return o}catch{return}}function pg(t){try{let e=new Set(t),r=Gp(),n=Wp(r).filter(o=>o.startsWith("openclaw-agent-")&&o.endsWith(".txt"));for(let o of n){let i=Zs(r,o);if(!e.has(i))try{ng(i)}catch{}}}catch{}}function dg(t){let{indexPath:e,clearAll:r,indexPersistedEntry:n,setActionToken:o,purgeExpiredActionTokens:i,saveIndex:a}=t;try{let u=IT(e,"utf-8"),p=JSON.parse(u);if(Array.isArray(p)){Ys(e,"legacy array store"),a();return}if(!jp(p)||p.schemaVersion!==Js&&p.schemaVersion!==4){Ys(e,`schema mismatch (expected v${Js})`),a();return}let d=Array.isArray(p.sessions)?p.sessions:[],l=[];for(let c of d){if(jp(c)&&c.harness==="codex"){let y=jp(c.backendRef)?c.backendRef:void 0;if((typeof y?.kind=="string"?y.kind:void 0)!=="codex-app-server"){l.push(c);continue}}let h=Xf(c);if(!h){r(),Ys(e,"invalid v4 session entry"),a();return}n(h)}l.length>0&&(PT(e,l),a());let m=Array.isArray(p.actionTokens)?p.actionTokens:[];for(let c of m){let h=eg(c);if(!h){r(),Ys(e,"invalid v4 action token"),a();return}o(h)}i()}catch{}}var bT=new Set(["completed","failed","killed"]),Hp=1440*60*1e3;function AT(t){return t instanceof Error?t.message:String(t)}var Xs=class{persisted=new Map;idIndex=new Map;nameIndex=new Map;backendIdIndex=new Map;actionTokens;actionTokenStore;indexPath;queries;constructor(e={}){let r=e.env??process.env;this.indexPath=e.indexPath??ig(r),this.actionTokenStore=new Hs(()=>this.saveIndex(),Hp),this.actionTokens=this.actionTokenStore.tokens,this.queries=new zs({persisted:this.persisted,idIndex:this.idIndex,nameIndex:this.nameIndex,backendIdIndex:this.backendIdIndex}),r.OPENCLAW_DEBUG_SESSION_STORE==="1"&&console.warn(`[SessionStore] index path: ${this.indexPath}`),this.loadIndex()}loadIndex(){dg({indexPath:this.indexPath,clearAll:()=>{this.persisted.clear(),this.idIndex.clear(),this.nameIndex.clear(),this.backendIdIndex.clear(),this.actionTokenStore.clear()},indexPersistedEntry:e=>this.indexPersistedEntry(e),setActionToken:e=>{this.actionTokens.set(e.id,e)},purgeExpiredActionTokens:()=>this.actionTokenStore.purgeExpiredActionTokens(),saveIndex:()=>this.saveIndex()})}saveIndex(){sg(this.indexPath,[...this.persisted.values()],this.actionTokenStore.listForPersistence())}assertPersistedEntry(e){Qs(e)}getEntryStorageKey(e){return e.harnessSessionId}buildPersistedBackendRef(e){return e.backendRef??{kind:Xu(e)==="codex"?"codex-app-server":"claude-code",conversationId:e.harnessSessionId}}indexPersistedEntry(e){let r=this.getEntryStorageKey(e);this.persisted.set(r,e),e.sessionId&&this.idIndex.set(e.sessionId,r),e.name&&this.nameIndex.set(e.name,r);let n=U(e);n&&this.backendIdIndex.set(n,r)}removePersistedIndexes(e){let r=this.getEntryStorageKey(e);this.persisted.delete(r);for(let[n,o]of this.idIndex)o===r&&this.idIndex.delete(n);for(let[n,o]of this.nameIndex)o===r&&this.nameIndex.delete(n);for(let[n,o]of this.backendIdIndex)o===r&&this.backendIdIndex.delete(n)}markRunning(e){if(!e.harnessSessionId)return;let r=typeof e.controlStateSnapshot=="function"?e.controlStateSnapshot():{planModeApproved:!1},n=en({route:e.route,originChannel:e.originChannel,originThreadId:e.originThreadId,originSessionKey:e.originSessionKey});if(!n)return;let o={sessionId:e.id,harnessSessionId:e.harnessSessionId,backendRef:this.buildPersistedBackendRef(e),name:e.name,prompt:e.prompt,workdir:e.originalWorkdir??e.workdir,model:e.model,reasoningEffort:e.reasoningEffort,fastMode:e.fastMode,createdAt:e.startedAt,status:"running",lifecycle:e.lifecycle,approvalState:e.approvalState,worktreeState:e.worktreeState,runtimeState:e.runtimeState,deliveryState:e.deliveryState,costUsd:0,originAgentId:e.originAgentId,originChannel:e.originChannel,originThreadId:e.originThreadId,originSessionKey:e.originSessionKey,route:n,harness:e.harnessName,requestedPermissionMode:e.requestedPermissionMode,currentPermissionMode:e.currentPermissionMode,approvalExecutionState:e.approvalExecutionState,approvalRationale:e.approvalRationale,planModeApproved:r.planModeApproved,pendingPlanApproval:e.pendingPlanApproval,planApprovalContext:e.planApprovalContext,planDecisionVersion:e.planDecisionVersion,actionablePlanDecisionVersion:e.actionablePlanDecisionVersion,canonicalPlanPromptVersion:e.canonicalPlanPromptVersion,approvalPromptRequiredVersion:e.approvalPromptRequiredVersion,approvalPromptVersion:e.approvalPromptVersion,approvalPromptStatus:e.approvalPromptStatus,approvalPromptTransport:e.approvalPromptTransport,approvalPromptMessageKind:e.approvalPromptMessageKind,approvalPromptLastAttemptAt:e.approvalPromptLastAttemptAt,approvalPromptDeliveredAt:e.approvalPromptDeliveredAt,approvalPromptFailedAt:e.approvalPromptFailedAt,planApproval:e.planApproval,codexApprovalPolicy:e.codexApprovalPolicy,worktreePath:e.worktreePath,worktreeBranch:e.worktreeBranch,worktreeStrategy:e.worktreeStrategy,worktreeBaseBranch:e.worktreeBaseBranch,worktreePrTargetRepo:e.worktreePrTargetRepo,autoMergeParentSessionId:e.autoMergeParentSessionId,autoMergeConflictResolutionAttemptCount:e.autoMergeConflictResolutionAttemptCount,autoMergeResolverSessionId:e.autoMergeResolverSessionId,worktreeLifecycle:e.worktreeLifecycle,resumable:e.isExplicitlyResumable};Qs(o),this.indexPersistedEntry(o),this.saveIndex()}hasRecordedSession(e){return this.queries.hasRecordedSession(e)}persistTerminal(e){if(!e.harnessSessionId)return;let r=typeof e.controlStateSnapshot=="function"?e.controlStateSnapshot():{planModeApproved:!1},n=en({route:e.route,originChannel:e.originChannel,originThreadId:e.originThreadId,originSessionKey:e.originSessionKey});if(!n)return;let o;try{let a=Bn(e.id);if(wT(a))o=a;else{let u=e.getOutput().join(`
208
+ `);u.length>0&&(vT(a,u,"utf-8"),o=a)}}catch(a){console.warn(`[SessionStore] Failed to write output file for session ${e.id}: ${AT(a)}`)}let i={sessionId:e.id,harnessSessionId:e.harnessSessionId,backendRef:this.buildPersistedBackendRef(e),name:e.name,prompt:e.prompt,workdir:e.originalWorkdir??e.workdir,model:e.model,reasoningEffort:e.reasoningEffort,fastMode:e.fastMode,createdAt:e.startedAt,completedAt:e.completedAt,status:e.status,lifecycle:e.lifecycle,approvalState:e.approvalState,worktreeState:e.worktreeState,runtimeState:e.runtimeState,deliveryState:e.deliveryState,killReason:e.killReason,costUsd:e.costUsd,originAgentId:e.originAgentId,originChannel:e.originChannel,originThreadId:e.originThreadId,originSessionKey:e.originSessionKey,route:n,outputPath:o,harness:e.harnessName,requestedPermissionMode:e.requestedPermissionMode,currentPermissionMode:e.currentPermissionMode,approvalExecutionState:e.approvalExecutionState,approvalRationale:e.approvalRationale,planModeApproved:r.planModeApproved,pendingPlanApproval:e.pendingPlanApproval,planApprovalContext:e.planApprovalContext,planDecisionVersion:e.planDecisionVersion,actionablePlanDecisionVersion:e.actionablePlanDecisionVersion,canonicalPlanPromptVersion:e.canonicalPlanPromptVersion,approvalPromptRequiredVersion:e.approvalPromptRequiredVersion,approvalPromptVersion:e.approvalPromptVersion,approvalPromptStatus:e.approvalPromptStatus,approvalPromptTransport:e.approvalPromptTransport,approvalPromptMessageKind:e.approvalPromptMessageKind,approvalPromptLastAttemptAt:e.approvalPromptLastAttemptAt,approvalPromptDeliveredAt:e.approvalPromptDeliveredAt,approvalPromptFailedAt:e.approvalPromptFailedAt,planApproval:e.planApproval,codexApprovalPolicy:e.codexApprovalPolicy,worktreePath:e.worktreePath,worktreeBranch:e.worktreeBranch,worktreeStrategy:e.worktreeStrategy,worktreeBaseBranch:e.worktreeBaseBranch,worktreePrTargetRepo:e.worktreePrTargetRepo,autoMergeParentSessionId:e.autoMergeParentSessionId,autoMergeConflictResolutionAttemptCount:e.autoMergeConflictResolutionAttemptCount,autoMergeResolverSessionId:e.autoMergeResolverSessionId,worktreeLifecycle:e.worktreeLifecycle,resumable:e.isExplicitlyResumable};Qs(i),this.indexPersistedEntry(i),this.saveIndex()}getLatestPersistedByName(e){return this.queries.getLatestPersistedByName(e)}resolveBackendConversationId(e,r){return this.queries.resolveBackendConversationId(e,r)}resolveHarnessSessionId(e,r){return this.queries.resolveHarnessSessionId(e,r)}getPersistedSession(e){return this.queries.getPersistedSession(e)}listPersistedSessions(){return this.queries.listPersistedSessions()}cleanupTmpOutputFiles(e){this.actionTokenStore.purgeExpiredActionTokens(e),ag(e,Hp)}getNextTmpOutputCleanupAt(e){return ug(e,Hp)}evictOldestPersisted(e){let r=this.listPersistedSessions();if(r.length<=e)return[];let n=r.slice(e);for(let o of n)this.removePersistedIndexes(o);return this.saveIndex(),n}shouldGcActiveSession(e,r,n){return!e.completedAt||!bT.has(e.status)?!1:r-e.completedAt>n}getActionToken(e){return this.actionTokenStore.getActionToken(e)}consumeActionToken(e){return this.actionTokenStore.consumeActionToken(e)}deleteActionTokensForSession(e){this.actionTokenStore.deleteActionTokensForSession(e)}purgeExpiredActionTokens(e=Date.now()){this.actionTokenStore.purgeExpiredActionTokens(e)}getNextActionTokenExpiry(){return this.actionTokenStore.nextExpiryAt()}onActionTokensChanged(e){this.actionTokenStore.setAfterChangeListener(e)}hasOutputPathReference(e){for(let r of this.persisted.values())if(r.outputPath===e)return!0;return!1}getReferencedOutputPaths(){return[...new Set([...this.persisted.values()].map(e=>e.outputPath).filter(e=>typeof e=="string"&&e.length>0))]}cleanupOrphanOutputFiles(){pg(this.getReferencedOutputPaths())}};var TT=new Set(["completed","failed","killed"]),ea=class{metrics={totalCostUsd:0,costPerDay:new Map,sessionsByStatus:{completed:0,failed:0,killed:0},totalLaunched:0,totalDurationMs:0,sessionsWithDuration:0,mostExpensive:null};incrementLaunched(){this.metrics.totalLaunched++}recordSession(e){let r=e.costUsd??0,n=e.status;this.metrics.totalCostUsd+=r;let o=new Date(e.completedAt??e.startedAt).toISOString().slice(0,10);if(this.metrics.costPerDay.set(o,(this.metrics.costPerDay.get(o)??0)+r),TT.has(n)&&this.metrics.sessionsByStatus[n]++,e.completedAt){let i=e.completedAt-e.startedAt;this.metrics.totalDurationMs+=i,this.metrics.sessionsWithDuration++}(!this.metrics.mostExpensive||r>this.metrics.mostExpensive.costUsd)&&(this.metrics.mostExpensive={id:e.id,name:e.name,costUsd:r,prompt:Je(e.prompt,80)})}getMetrics(){return{totalCostUsd:this.metrics.totalCostUsd,costPerDay:new Map(this.metrics.costPerDay),sessionsByStatus:{...this.metrics.sessionsByStatus},totalLaunched:this.metrics.totalLaunched,totalDurationMs:this.metrics.totalDurationMs,sessionsWithDuration:this.metrics.sessionsWithDuration,mostExpensive:this.metrics.mostExpensive?{...this.metrics.mostExpensive}:null}}};import*as cg from"child_process";var lg=5e3,RT=64,CT={primary:"primary",success:"success",positive:"success",danger:"danger",destructive:"danger",negative:"danger"},ET={execFile:cg.execFile},Rr=class extends Error{constructor(e){super(e),this.name="MissingRuntimeDirectNotificationCapabilityError"}},ta=class{constructor(e=ET.execFile){this.execFile=e}execFile;async send(e,r,n){ie("direct_send_started",{...Et(e),messageTextLength:r.length,...xe(n)});try{await this.sendViaRuntime(e,r,n),ie("direct_send_succeeded",{...Et(e),deliveryPath:"runtime",...xe(n)});return}catch(o){if(!(o instanceof Rr))throw ie("direct_send_failed",{...Et(e),deliveryPath:"runtime",...xe(n),error:zp(o)}),o;ie("direct_send_runtime_capability_missing",{...Et(e),deliveryPath:"runtime",...xe(n),reason:o.message}),await this.sendViaBoundedCliFallback(e,r,n,o.message),ie("direct_send_succeeded",{...Et(e),deliveryPath:"cli-fallback",...xe(n)})}}async sendViaRuntime(e,r,n){let o=rc(),i=oc(),a=o?.channel?.outbound?.loadAdapter;if(!o)throw new Rr("OpenClaw plugin runtime is unavailable for direct notification delivery");if(i==null)throw new Rr("OpenClaw runtime config snapshot is unavailable for direct notification delivery");if(!o.channel)throw new Rr(`OpenClaw plugin runtime channel surface is unavailable for direct notification delivery (runtimeVersion=${Jp(o)})`);if(!o.channel.outbound)throw new Rr(`OpenClaw plugin runtime channel outbound surface is unavailable for direct notification delivery (runtimeVersion=${Jp(o)})`);if(!a)throw new Rr(`OpenClaw plugin runtime channel outbound loadAdapter is unavailable for direct notification delivery (runtimeVersion=${Jp(o)})`);let u=await a(e.channel);if(!u)throw new Error(`OpenClaw outbound adapter for channel "${e.channel}" is unavailable`);let p=ra(n);if(ie("runtime_adapter_loaded",{...Et(e),adapterHasRenderPresentation:typeof u.renderPresentation=="function",adapterHasSendPayload:typeof u.sendPayload=="function",adapterHasSendText:typeof u.sendText=="function",...xe(n),...p?Pp(p):{}}),p){await this.sendPresentation(u,i,e,r,p);return}if(!u.sendText)throw new Error(`OpenClaw outbound adapter for channel "${e.channel}" cannot send text`);await u.sendText({cfg:i,to:e.target,text:r,accountId:e.accountId,threadId:e.threadId})}async sendPresentation(e,r,n,o,i){let a=MT(i),u={text:o,presentation:i,interactive:a};ie("presentation_render_started",{...Et(n),messageTextLength:o.length,adapterHasRenderPresentation:typeof e.renderPresentation=="function",adapterHasSendPayload:typeof e.sendPayload=="function",...Pp(i)});let p={cfg:r,to:n.target,text:o,payload:u,accountId:n.accountId,threadId:n.threadId},d=e.renderPresentation?await e.renderPresentation({payload:u,presentation:i,ctx:p}):u,l=_T(d,a,n.channel);if(ie("presentation_render_completed",{...Et(n),adapterHasRenderPresentation:typeof e.renderPresentation=="function",adapterHasSendPayload:typeof e.sendPayload=="function",...wp(l)}),!l||typeof l!="object"||!e.sendPayload)throw new Error(`OpenClaw outbound adapter for channel "${n.channel}" cannot preserve interactive presentation`);let m=await e.sendPayload({...p,payload:l});ie("presentation_send_payload_completed",{...Et(n),...wp(l),...cf(m)})}sendViaBoundedCliFallback(e,r,n,o){return new Promise((i,a)=>{let u=$T(e,r,n);ie("direct_send_cli_fallback_started",{...Et(e),deliveryPath:"cli-fallback",reason:o,messageTextLength:r.length,...xe(n)}),this.execFile("openclaw",u,{timeout:lg,killSignal:"SIGKILL"},(p,d,l)=>{if(!p){ie("direct_send_cli_fallback_completed",{...Et(e),deliveryPath:"cli-fallback",...xe(n)}),i();return}let m=l?.trim()?` | stderr: ${l.trim()}`:"";ie("direct_send_cli_fallback_failed",{...Et(e),deliveryPath:"cli-fallback",...xe(n),error:zp(p),stderrLength:l?.length}),a(new Error(`${o}; bounded openclaw message send fallback failed within ${lg}ms timeout: ${zp(p)}${m}`))})})}};function Et(t){return{channel:t.channel,target:t.target,accountId:t.accountId,threadId:t.threadId,sessionKey:t.sessionKey}}function $T(t,e,r){let n=ra(r),o=["message","send","--channel",t.channel,"--target",t.target,"--message",e];return t.accountId&&o.push("--account",t.accountId),t.threadId&&o.push("--thread-id",t.threadId),n&&o.push("--presentation",JSON.stringify(n)),o}function zp(t){return t instanceof Error?t.message:String(t)}function Jp(t){if(!t||typeof t!="object")return"unknown";let e=t.version;return typeof e=="string"&&e.trim()?e:"unknown"}function ra(t){let e=(t??[]).filter(r=>Array.isArray(r)&&r.length>0).map(r=>({type:"buttons",buttons:r.map(n=>({label:n.label,value:qT(n.callbackData),...n.style?{style:n.style}:{}}))}));return e.length>0?{blocks:e}:void 0}function MT(t){let e=t.blocks.filter(r=>r.type==="buttons"&&r.buttons.length>0).map(r=>({type:"buttons",buttons:r.buttons.map(n=>({label:n.label,value:n.value,...n.style?{style:n.style}:{}}))}));return e.length>0?{blocks:e}:void 0}function OT(t){if(!t||typeof t!="object"||Array.isArray(t))return!1;let e=t.interactive;if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e.blocks;return Array.isArray(r)&&r.some(n=>{if(!n||typeof n!="object"||Array.isArray(n))return!1;let o=n;return o.type==="buttons"&&Array.isArray(o.buttons)&&o.buttons.length>0})}function _T(t,e,r){if(!e)return t;let n=OT(t)?t:DT(t,e);return r!=="telegram"?n:FT(n,e)}function DT(t,e){return!t||typeof t!="object"||Array.isArray(t)?t:{...t,interactive:e}}function FT(t,e){if(!t||typeof t!="object"||Array.isArray(t))return t;let r=t,n=mg(r.channelData),o=mg(n?.telegram),i=NT(o?.buttons);if(i)return{...r,channelData:{...n??{},telegram:{...o??{},buttons:i}}};let a=LT(e);return a?{...r,channelData:{...n??{},telegram:{...o??{},buttons:a}}}:t}function LT(t){let e=t.blocks.filter(r=>r.type==="buttons"&&r.buttons.length>0).map(r=>r.buttons.filter(n=>typeof n.value=="string"&&n.value.trim().length>0&&Buffer.byteLength(n.value,"utf8")<=RT).map(n=>({text:n.label,callback_data:n.value,...fg(n.style)}))).filter(r=>r.length>0);return e.length>0?e:void 0}function NT(t){if(!Array.isArray(t))return;let e=t.map(r=>Array.isArray(r)?r.map(n=>{if(!n||typeof n!="object"||Array.isArray(n))return;let{style:o,...i}=n;if(!(typeof i.text!="string"||i.text.trim().length===0))return{...i,...fg(o)}}).filter(n=>!!n):[]).filter(r=>r.length>0);return e.length>0?e:void 0}function fg(t){if(typeof t!="string")return{};let e=t.trim().toLowerCase(),r=CT[e];return r?{style:r}:{}}function mg(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:void 0}function qT(t){return t.startsWith(`${xt}:`)?t:`${xt}:${t}`}import*as gg from"child_process";var Jn=class{tails=new Map;enqueue(e,r,n){let o=this.tails.get(e);o!==void 0&&n?.();let a=(o?.catch(()=>{})??Promise.resolve()).then(()=>r()),u=a.catch(()=>{});return this.tails.set(e,u),u.finally(()=>{this.tails.get(e)===u&&this.tails.delete(e)}),a}clear(){this.tails.clear()}};var Qp=3e4,BT=2e3,UT=2e4,$t=4;function Jo(t){return t instanceof Error?t.message:String(t)}function KT(){return new Error(`Dispatch timed out after ${Qp}ms`)}function jT(t){if(!(t instanceof Error))return!1;let e=t;return e.killed===!0&&e.signal==="SIGKILL"}var WT={execFile:gg.execFile},na=class{pendingRetryTimers=new Map;orderedDispatches=new Jn;disposed=!1;clearPendingRetries(){for(let e of this.pendingRetryTimers.values())for(let r of e)clearTimeout(r.timer),r.onCleared?.();this.pendingRetryTimers.clear()}clearRetryTimersForSession(e){let r=this.pendingRetryTimers.get(e);if(r){for(let n of r)clearTimeout(n.timer),n.onCleared?.();this.pendingRetryTimers.delete(e)}}dispose(){this.disposed=!0,this.clearPendingRetries(),this.orderedDispatches.clear()}execute(e,r,n=1){if(!this.disposed){if(n===1&&r.orderingKey){this.enqueueOrderedDispatch(r.orderingKey,o=>this.executeNow(e,r,o,n));return}this.executeNow(e,r,void 0,n)}}executePromise(e,r,n=1){if(!this.disposed){if(n===1&&r.orderingKey){this.enqueueOrderedDispatch(r.orderingKey,o=>this.executePromiseNow(e,r,o,n));return}this.executePromiseNow(e,r,void 0,n)}}executeNow(e,r,n,o=1){if(this.disposed||r.shouldContinue?.()===!1){n?.();return}let i=Date.now();o===1&&r.onStarted?.(),this.log("info","dispatch_started",{label:r.label,sessionId:r.sessionId,target:r.target,phase:r.phase,messageKind:r.messageKind,route:r.routeSummary,...r.dispatchContext,attempt:o,maxAttempts:$t}),WT.execFile("openclaw",e,{timeout:Qp,killSignal:"SIGKILL"},(a,u,p)=>{if(this.disposed){n?.();return}let d=Date.now()-i;if(!a){this.log("info","dispatch_succeeded",{label:r.label,sessionId:r.sessionId,target:r.target,phase:r.phase,messageKind:r.messageKind,route:r.routeSummary,...r.dispatchContext,attempt:o,maxAttempts:$t,elapsedMs:d}),r.shouldContinue?.()!==!1&&r.onSuccess?.(),n?.();return}let l=p?.trim()?` | stderr: ${p.trim()}`:"";if(r.target==="message.send"&&jT(a)){this.log("error","dispatch_failed",{label:r.label,sessionId:r.sessionId,target:r.target,phase:r.phase,messageKind:r.messageKind,route:r.routeSummary,...r.dispatchContext,attempt:o,maxAttempts:$t,elapsedMs:d,error:`${Jo(a)}${l}`,terminal:!0,ambiguousResult:!0}),r.onAmbiguousResult?.(),n?.();return}if(o>=$t||r.terminalOnFailure===!0){this.log("error","dispatch_failed",{label:r.label,sessionId:r.sessionId,target:r.target,phase:r.phase,messageKind:r.messageKind,route:r.routeSummary,...r.dispatchContext,attempt:o,maxAttempts:$t,elapsedMs:d,error:`${Jo(a)}${l}`,terminal:!0}),r.onFinalFailure?.(),n?.();return}let c=this.retryDelayMs(o);this.log("error","dispatch_retry_scheduled",{label:r.label,sessionId:r.sessionId,target:r.target,phase:r.phase,messageKind:r.messageKind,route:r.routeSummary,...r.dispatchContext,attempt:o,maxAttempts:$t,elapsedMs:d,retryDelayMs:c,error:`${Jo(a)}${l}`});let h={timer:setTimeout(()=>{let y=this.pendingRetryTimers.get(r.sessionId);if(y&&(y.delete(h),y.size===0&&this.pendingRetryTimers.delete(r.sessionId)),r.shouldContinue?.()===!1){n?.();return}this.executeNow(e,r,n,o+1)},c),onCleared:n};h.timer.unref?.(),this.pendingRetryTimers.has(r.sessionId)||this.pendingRetryTimers.set(r.sessionId,new Set),this.pendingRetryTimers.get(r.sessionId).add(h)})}executePromiseNow(e,r,n,o=1){if(this.disposed||r.shouldContinue?.()===!1){n?.();return}let i=Date.now();o===1&&r.onStarted?.(),this.log("info","dispatch_started",{label:r.label,sessionId:r.sessionId,target:r.target,phase:r.phase,messageKind:r.messageKind,route:r.routeSummary,...r.dispatchContext,attempt:o,maxAttempts:$t}),this.executePromiseWithTimeout(e).then(()=>{if(this.disposed){n?.();return}let a=Date.now()-i;this.log("info","dispatch_succeeded",{label:r.label,sessionId:r.sessionId,target:r.target,phase:r.phase,messageKind:r.messageKind,route:r.routeSummary,...r.dispatchContext,attempt:o,maxAttempts:$t,elapsedMs:a}),r.shouldContinue?.()!==!1&&r.onSuccess?.(),n?.()}).catch(a=>{if(this.disposed){n?.();return}let u=Date.now()-i;if(o>=$t||r.terminalOnFailure===!0){this.log("error","dispatch_failed",{label:r.label,sessionId:r.sessionId,target:r.target,phase:r.phase,messageKind:r.messageKind,route:r.routeSummary,...r.dispatchContext,attempt:o,maxAttempts:$t,elapsedMs:u,error:Jo(a),terminal:!0,...r.terminalOnFailure===!0&&o<$t?{terminalReason:"non_retryable"}:{}}),r.onFinalFailure?.(),n?.();return}let p=this.retryDelayMs(o);this.log("error","dispatch_retry_scheduled",{label:r.label,sessionId:r.sessionId,target:r.target,phase:r.phase,messageKind:r.messageKind,route:r.routeSummary,...r.dispatchContext,attempt:o,maxAttempts:$t,elapsedMs:u,retryDelayMs:p,error:Jo(a)});let d={timer:setTimeout(()=>{let l=this.pendingRetryTimers.get(r.sessionId);if(l&&(l.delete(d),l.size===0&&this.pendingRetryTimers.delete(r.sessionId)),r.shouldContinue?.()===!1){n?.();return}this.executePromiseNow(e,r,n,o+1)},p),onCleared:n};d.timer.unref?.(),this.pendingRetryTimers.has(r.sessionId)||this.pendingRetryTimers.set(r.sessionId,new Set),this.pendingRetryTimers.get(r.sessionId).add(d)})}executePromiseWithTimeout(e){return new Promise((r,n)=>{let o=!1,i=setTimeout(()=>{o||(o=!0,n(KT()))},Qp);i.unref?.(),Promise.resolve().then(e).then(()=>{o||(o=!0,clearTimeout(i),r())}).catch(a=>{o||(o=!0,clearTimeout(i),n(a))})})}retryDelayMs(e){let r=Math.max(0,e-1),n=BT*2**r;return Math.min(n,UT)}enqueueOrderedDispatch(e,r){this.orderedDispatches.enqueue(e,async()=>{this.disposed||await new Promise(n=>{let o=!1;r(()=>{o||(o=!0,n())})})})}log(e,r,n){let o=`[WakeDispatcher] ${JSON.stringify({event:r,...n})}`;if(e==="error"){console.error(o);return}console.info(o)}};ir();var oa=class{resolve(e){let r=$i(e);if(!(!r?.provider||!r.target))return{channel:r.provider,target:r.target,accountId:r.accountId,threadId:r.threadId,sessionKey:r.sessionKey}}summary(e){if(!e)return"system";let r=e.accountId?`|${e.accountId}`:"",n=e.threadId?`#${e.threadId}`:"";return`${e.channel}${r}|${e.target}${n}`}};import{randomUUID as GT}from"crypto";var ia=class{constructor(e={}){this.options=e}options;buildChatSendArgs(e,r,n){return["gateway","call","chat.send","--expect-final","--timeout","30000","--params",JSON.stringify({sessionKey:e,message:r,deliver:n,idempotencyKey:GT()})]}buildDirectNotificationArgs(e,r,n){let o=ra(n),i=["message","send","--channel",e.channel,"--target",e.target,"--message",r];return e.accountId&&i.push("--account",e.accountId),e.threadId&&i.push("--thread-id",e.threadId),o&&i.push("--presentation",JSON.stringify(o)),i}buildSystemEventArgs(e){return["system","event","--text",e,"--mode","now"]}};var sa=class{routes=new oa;transport;directNotifications;executor=new na;constructor(e={}){this.transport=e.transport??new ia(e.transportOptions),this.directNotifications=e.directNotifications===void 0?new ta:e.directNotifications}clearPendingRetries(){this.executor.clearPendingRetries()}clearRetryTimersForSession(e){this.executor.clearRetryTimersForSession(e)}dispose(){this.executor.dispose()}buildDispatchContext(e){let r=e.buttons??[],n=r.flat();return{transportRoute:e.routeSummary,transportChannel:e.route?.channel??"system",transportTarget:e.route?.target??"system",transportAccountId:e.route?.accountId,transportThreadId:e.route?.threadId,transportSessionKey:e.route?.sessionKey,messageTextLength:e.text.length,buttonsPresent:n.length>0,buttonRows:r.length||void 0,buttonCount:n.length||void 0,buttonLabels:n.length>0?n.map(o=>o.label):void 0,maxCallbackDataLength:n.length>0?Math.max(...n.map(o=>o.callbackData.length)):void 0}}sendWake(e,r,n,o,i,a,u){let p=this.routes.resolve(e),d=u;if(d?.()===!1)return;let l=p?.sessionKey?.trim();if(!l){this.executor.execute(this.transport.buildSystemEventArgs(r),{label:`${n}-system`,sessionId:e.id,target:"system.event",phase:o,routeSummary:"system",messageKind:"wake",dispatchContext:this.buildDispatchContext({routeSummary:"system",text:r}),onSuccess:a,onFinalFailure:i,shouldContinue:d});return}this.executor.execute(this.transport.buildChatSendArgs(l,r,!0),{label:n,sessionId:e.id,target:"chat.send",phase:o,routeSummary:`session:${l}`,messageKind:"wake",dispatchContext:this.buildDispatchContext({routeSummary:`session:${l}`,route:p,text:r}),onSuccess:a,shouldContinue:d,onFinalFailure:()=>{d?.()!==!1&&this.executor.execute(this.transport.buildSystemEventArgs(r),{label:`${n}-fallback`,sessionId:e.id,target:"system.event",phase:o,routeSummary:"system",messageKind:"wake",dispatchContext:this.buildDispatchContext({routeSummary:"system",text:r}),onSuccess:a,onFinalFailure:i,shouldContinue:d})}})}sendUserNotification(e,r,n,o,i,a,u=!1,p){if(p?.()===!1)return;let d=!!o?.some(y=>Array.isArray(y)&&y.length>0),l=this.routes.resolve(e);ie("wake_notify_selected",{sessionId:e.id,sessionName:e.name,label:n,messageTextLength:r.length,requireDirectDelivery:u,hasDirectNotificationTransport:!!this.directNotifications,routeSummary:l?this.routes.summary(l):"system",channel:l?.channel,target:l?.target,accountId:l?.accountId,threadId:l?.threadId,sessionKey:l?.sessionKey,...xe(o)});let m=l?`notify:${l.channel}|${l.accountId??""}|${l.target}|${l.threadId??""}`:`notify:system:${e.id}`;if(!l){if(ie("wake_notify_no_direct_route",{sessionId:e.id,sessionName:e.name,label:n,requireDirectDelivery:u,hasInteractiveButtons:d,...xe(o)}),u){console.warn(`[WakeDispatcher] Direct notification "${n}" for session ${e.id} has no direct route; reporting delivery failure instead of using system fallback.`),i?.();return}if(d){console.warn(`[WakeDispatcher] Interactive notification "${n}" for session ${e.id} has no direct route; refusing text-only fallback because buttons would be lost.`),i?.();return}this.executor.execute(this.transport.buildSystemEventArgs(r),{label:`${n}-notify-system`,sessionId:e.id,target:"system.event",phase:"notify",routeSummary:"system",messageKind:"notify",dispatchContext:this.buildDispatchContext({routeSummary:"system",text:r,buttons:o}),orderingKey:m,onSuccess:a,onFinalFailure:i,shouldContinue:p});return}let c=()=>{if(ie("wake_notify_direct_failed",{sessionId:e.id,sessionName:e.name,label:n,requireDirectDelivery:u,hasInteractiveButtons:d,channel:l.channel,target:l.target,accountId:l.accountId,threadId:l.threadId,sessionKey:l.sessionKey,...xe(o)}),u){console.warn(`[WakeDispatcher] Direct notification "${n}" for session ${e.id} failed direct delivery; reporting delivery failure instead of using system fallback.`),i?.();return}if(d){console.warn(`[WakeDispatcher] Interactive notification "${n}" for session ${e.id} failed direct delivery; refusing text-only fallback because buttons would be lost.`),i?.();return}this.executor.execute(this.transport.buildSystemEventArgs(r),{label:`${n}-notify-fallback`,sessionId:e.id,target:"system.event",phase:"notify",routeSummary:"system",messageKind:"notify",dispatchContext:this.buildDispatchContext({routeSummary:"system",text:r}),orderingKey:m,onSuccess:a,onFinalFailure:i,shouldContinue:p})},h={label:`${n}-notify`,sessionId:e.id,target:"message.send",phase:"notify",routeSummary:this.routes.summary(l),messageKind:"notify",dispatchContext:this.buildDispatchContext({routeSummary:this.routes.summary(l),route:l,text:r,buttons:o}),orderingKey:m,onSuccess:a,onAmbiguousResult:c,onFinalFailure:c,terminalOnFailure:this.directNotifications?!0:void 0,shouldContinue:p};if(this.directNotifications){ie("wake_notify_dispatching_direct_runtime",{sessionId:e.id,sessionName:e.name,label:n,channel:l.channel,target:l.target,accountId:l.accountId,threadId:l.threadId,sessionKey:l.sessionKey,...xe(o)}),this.executor.executePromise(()=>this.directNotifications.send(l,r,o),h);return}ie("wake_notify_dispatching_cli_message_send",{sessionId:e.id,sessionName:e.name,label:n,channel:l.channel,target:l.target,accountId:l.accountId,threadId:l.threadId,sessionKey:l.sessionKey,...xe(o)}),this.executor.execute(this.transport.buildDirectNotificationArgs(l,r,o),h)}sendUserNotificationSequence(e,r,n,o,i,a=!1,u){let p=r.map(l=>({text:l.text.trim(),buttons:l.buttons})).filter(l=>l.text.length>0);if(p.length===0){o?.();return}ie("wake_notify_sequence_started",{sessionId:e.id,sessionName:e.name,label:n,chunkCount:p.length,buttonChunkIndexes:p.map((l,m)=>l.buttons?.some(c=>Array.isArray(c)&&c.length>0)?m+1:void 0).filter(l=>typeof l=="number"),requireDirectDelivery:a});let d=l=>{if(u?.()===!1)return;let m=p[l];if(!m){ie("wake_notify_sequence_succeeded",{sessionId:e.id,sessionName:e.name,label:n,chunkCount:p.length}),i?.();return}let c=l===0?o:i;ie("wake_notify_sequence_chunk_selected",{sessionId:e.id,sessionName:e.name,label:n,chunkIndex:l+1,chunkCount:p.length,messageTextLength:m.text.length,failureHandler:l===0?"all-failed":"sequence-success",...xe(m.buttons)}),this.sendUserNotification(e,m.text,`${n}-part-${l+1}`,m.buttons,c,()=>d(l+1),a,u)};d(0)}dispatchSessionNotification(e,r){let n=r.hooks,o=r.wakeMessageOnNotifySuccess!=null||r.wakeMessageOnNotifyFailed!=null,i=r.notifyUser??(r.wakeMessage?"on-wake-fallback":"always"),a=(r.userMessages?.length?r.userMessages:r.userMessage?.trim()?[{text:r.userMessage.trim(),buttons:r.buttons}]:[]).map(l=>({text:l.text.trim(),buttons:l.buttons})).filter(l=>l.text.length>0),u=a[0]?.text,p=r.wakeMessage?.trim(),d=r.shouldDispatch;if(o){let l=r.wakeMessageOnNotifySuccess?.trim(),m=r.wakeMessageOnNotifyFailed?.trim(),c=S=>{S&&d?.()!==!1&&(n?.onWakeStarted?.(),this.sendWake(e,S,`${r.label}-wake`,"wake",n?.onWakeFailed,n?.onWakeSucceeded,d))},h=()=>{d?.()!==!1&&(n?.onNotifySucceeded?.(),l&&c(l))},y=m?()=>{d?.()!==!1&&(n?.onNotifyFailed?.(),r.onUserNotifyFailed?.(),c(m))}:()=>{d?.()!==!1&&(n?.onNotifyFailed?.(),r.onUserNotifyFailed?.())};if(a.length>0){if(d?.()===!1)return;n?.onNotifyStarted?.(),this.sendUserNotificationSequence(e,a,r.label,y,h,r.requireDirectUserNotification===!0,d)}else y();return}if(i==="always"&&a.length>0){if(d?.()===!1)return;n?.onNotifyStarted?.(),this.sendUserNotificationSequence(e,a,r.label,()=>{d?.()!==!1&&(n?.onNotifyFailed?.(),r.onUserNotifyFailed?.())},()=>{d?.()!==!1&&n?.onNotifySucceeded?.()},r.requireDirectUserNotification===!0,d)}if(p&&d?.()!==!1){if(n?.onWakeStarted?.(),i==="on-wake-fallback"&&a.length>0&&!this.routes.resolve(e)?.sessionKey){if(d?.()===!1)return;n?.onNotifyStarted?.(),this.sendUserNotificationSequence(e,a,r.label,()=>{d?.()!==!1&&(n?.onNotifyFailed?.(),r.onUserNotifyFailed?.())},()=>{d?.()!==!1&&n?.onNotifySucceeded?.()},!1,d)}this.sendWake(e,p,`${r.label}-wake`,"wake",n?.onWakeFailed,n?.onWakeSucceeded,d)}}};var aa=class{constructor(e,r){this.actionTokens=e;this.isGitHubCliAvailable=r}actionTokens;isGitHubCliAvailable;createActionToken(e,r,n={}){return this.actionTokens.createActionToken(e,r,{expiresAt:Date.now()+10080*60*1e3,...n})}consumeActionToken(e){return this.actionTokens.consumeActionToken(e)}getActionToken(e){return this.actionTokens.getActionToken(e)}clearPlanDecisionTokens(e,r){this.actionTokens.deletePlanDecisionTokensForSession(e,r)}makeActionButton(e,r,n,o={}){let i=this.createActionToken(e,r,{label:n,...o});return{label:n,callbackData:i.id,style:this.resolveButtonStyle(r)}}resolveButtonStyle(e){switch(e){case"plan-approve":case"worktree-create-pr":case"worktree-update-pr":case"plan-offer-start":return"primary";case"worktree-merge":case"session-resume":case"session-restart":return"success";case"plan-reject":case"worktree-dismiss":return"danger";default:return"secondary"}}getWorktreeDecisionButtons(e,r){if(!r)return[];let n=[],o=[this.makeActionButton(e,"worktree-merge","Merge")];if(this.isGitHubCliAvailable())r.worktreePrUrl?(o.push(this.makeActionButton(e,"worktree-view-pr","View PR",{targetUrl:r.worktreePrUrl})),n.push(o),n.push([this.makeActionButton(e,"worktree-update-pr","Sync PR"),this.makeActionButton(e,"worktree-decide-later","Later")])):(o.push(this.makeActionButton(e,"worktree-create-pr","Open PR")),n.push(o),n.push([this.makeActionButton(e,"worktree-decide-later","Later"),this.makeActionButton(e,"worktree-dismiss","Discard")]));else return n.push([...o,this.makeActionButton(e,"worktree-decide-later","Later")]),n.push([this.makeActionButton(e,"worktree-dismiss","Discard")]),n;return r.worktreePrUrl&&n.push([this.makeActionButton(e,"worktree-dismiss","Discard")]),n}getPlanApprovalButtons(e,r){let n=[[this.makeActionButton(e,"plan-approve","Approve",{planDecisionVersion:r?.planDecisionVersion}),this.makeActionButton(e,"plan-request-changes","Revise",{planDecisionVersion:r?.planDecisionVersion}),this.makeActionButton(e,"plan-reject","Reject",{planDecisionVersion:r?.planDecisionVersion})]];return ie("plan_approval_buttons_created",{sessionId:e,planDecisionVersion:r?.planDecisionVersion,...xe(n)}),n}getResumeButtons(e,r){let n=[];return r.isExplicitlyResumable&&n.push(this.makeActionButton(e,"session-resume","Resume")),n.push(this.makeActionButton(e,"view-output","View output")),[n]}getQuestionButtons(e,r){if(r.length!==0)return[r.map((n,o)=>this.makeActionButton(e,"question-answer",n.label,{optionIndex:o}))]}getPlanOfferButtons(e){let{offerId:r,route:n,planName:o,planPrompt:i,planWorkdir:a,planWorktreeStrategy:u}=e,p=[[this.makeActionButton(r,"plan-offer-start","Start Plan",{route:n,launchName:o,launchPrompt:i,launchWorkdir:a,launchWorktreeStrategy:u}),this.makeActionButton(r,"plan-offer-dismiss","Dismiss",{route:n})]];return ie("plan_offer_buttons_created",{offerId:r,planName:o,channel:n.provider,target:n.target,accountId:n.accountId,threadId:n.threadId,sessionKey:n.sessionKey,planPromptLength:i.length,planWorkdirLength:a.length,planWorktreeStrategy:u,...xe(p)}),p}};Ee();ir();var ua=class{constructor(e,r){this.wakeDispatcher=e;this.applyPersistedPatch=r}wakeDispatcher;applyPersistedPatch;dispatch(e,r){let n=this.getDeliveryRef(e),o=this.buildCompletionWakePatch(r),i=!!(r.wakeMessage?.trim()||r.wakeMessageOnNotifySuccess?.trim()),a=!!(r.wakeMessage?.trim()||r.wakeMessageOnNotifyFailed?.trim()),u={onNotifyStarted:()=>{this.applyDeliveryState(n,"notifying"),r.hooks?.onNotifyStarted?.()},onNotifySucceeded:()=>{this.applyDeliveryState(n,i?"wake_pending":"idle"),r.hooks?.onNotifySucceeded?.()},onNotifyFailed:()=>{this.applyDeliveryState(n,a?"wake_pending":"failed"),r.hooks?.onNotifyFailed?.()},onWakeStarted:()=>{this.applyPersistedPatchWithCompletionWake(n,"wake_pending",o,{completionWakeIssuedAt:new Date().toISOString(),completionWakeSucceededAt:void 0,completionWakeFailedAt:void 0}),r.hooks?.onWakeStarted?.()},onWakeSucceeded:()=>{this.applyPersistedPatchWithCompletionWake(n,"idle",o,{completionWakeSucceededAt:new Date().toISOString(),completionWakeFailedAt:void 0}),r.hooks?.onWakeSucceeded?.()},onWakeFailed:()=>{this.applyPersistedPatchWithCompletionWake(n,"failed",o,{completionWakeFailedAt:new Date().toISOString()}),r.hooks?.onWakeFailed?.()}};this.wakeDispatcher.dispatchSessionNotification(e,{...r,hooks:u})}notifyWorktreeOutcome(e,r,n={}){let o=this.getDeliveryRef(e),i=u=>Hn({sessionId:o,sessionName:e.name,outcomeLine:r,originThreadLine:Mi(e),detailLines:n.detailLines,canonicalStatusDelivered:u}),a=n.summaryWakeRequired??!0;this.dispatch(e,{label:"worktree-outcome",userMessage:r,notifyUser:"always",requireDirectUserNotification:!0,completionWakeSummaryRequired:a,wakeMessageOnNotifySuccess:a?i(!0):void 0,wakeMessageOnNotifyFailed:a?i(!1):void 0})}dispose(){this.wakeDispatcher.dispose()}getDeliveryRef(e){return Se(e)??U(e)??""}applyDeliveryState(e,r){!e||!r||this.applyPersistedPatch(e,{deliveryState:r})}applyPersistedPatchWithCompletionWake(e,r,n,o){!e||!r||this.applyPersistedPatch(e,n?{deliveryState:r,...n,...o}:{deliveryState:r})}buildCompletionWakePatch(e){if(e.completionWakeSummaryRequired===!0)return{completionWakeSummaryRequired:!0}}};It();import{existsSync as VT}from"fs";var pa=class{getCompletionState(e,r,n,o){return Lo(e,n,o)?"has-commits":Lo(e,o,n)?"base-advanced":jn(r)?"dirty-uncommitted":"no-change"}isResolvedWorktreeEligibleForCleanup(e,r,n){if(!e.worktreePath||!e.workdir||!VT(e.worktreePath)||e.pendingWorktreeDecisionSince||e.worktreeState==="pending_decision")return!1;let o=e.worktreeMergedAt??e.worktreeDismissedAt??e.completedAt??e.createdAt,i=typeof o=="string"?new Date(o).getTime():Number(o??0);return!!i&&r-i>=n}};var da=class{constructor(e,r,n,o){this.pendingQuestions=e;this.dispatchSessionNotification=r;this.clearWaitingTimestamp=n;this.getQuestionButtons=o}pendingQuestions;dispatchSessionNotification;clearWaitingTimestamp;getQuestionButtons;async handleAskUserQuestion(e,r){let i=r?.questions??[];if(i.length===0)throw new Error("AskUserQuestion: no questions in input");let a=i[0],u=a.options??[],p=this.getQuestionButtons(e.id,u),d=`\u2753 [${e.name}] ${a.question}`,l=[`[ASK USER QUESTION] Session "${e.name}" has a question requiring user input.`,"",`Question: ${a.question}`,...u.length>0?["Options:",...u.map((m,c)=>` ${c+1}. ${m.label}`)]:[],"",`Send the question to the user and call agent_respond(session="${e.id}", message="<answer>") with their answer.`].join(`
209
+ `);return new Promise((m,c)=>{let h=setTimeout(()=>{this.pendingQuestions.delete(e.id),c(new Error(`AskUserQuestion timed out after 600s for session "${e.name}"`))},6e5);h.unref?.(),this.pendingQuestions.set(e.id,{resolve:m,reject:c,questions:i,timeoutHandle:h}),this.dispatchSessionNotification(e,{label:"ask-user-question",userMessage:d,notifyUser:"always",buttons:p,wakeMessageOnNotifySuccess:["AskUserQuestion delivered to the user.",`Session: ${e.name} | ID: ${e.id}`,`Question: ${a.question}`,"Await their selection \u2014 do NOT answer this question yourself."].join(`
210
+ `),wakeMessageOnNotifyFailed:l})})}resolveAskUserQuestion(e,r){let n=this.pendingQuestions.get(e);if(!n){console.warn(`[SessionQuestionService] resolveAskUserQuestion: no pending question for session "${e}"`);return}clearTimeout(n.timeoutHandle),this.pendingQuestions.delete(e);let o=n.questions[0],i=o.options??[],a=i[r];if(!a){n.reject(new Error(`AskUserQuestion: invalid option index ${r} (${i.length} options available)`));return}this.clearWaitingTimestamp(e),n.resolve({behavior:"allow",updatedInput:{questions:n.questions,answers:{[o.question]:a.label}}})}dispose(){for(let e of this.pendingQuestions.values())clearTimeout(e.timeoutHandle),e.reject(new Error("SessionManager disposed before AskUserQuestion resolved."));this.pendingQuestions.clear()}};Ee();Bo();var la=class t{constructor(e,r,n,o){this.buildRoutingProxy=e;this.dispatchNotification=r;this.updatePersistedSession=n;this.getWorktreeDecisionButtons=o}buildRoutingProxy;dispatchNotification;updatePersistedSession;getWorktreeDecisionButtons;static REMINDER_THRESHOLD_MS=10800*1e3;static REMINDER_INTERVAL_MS=10800*1e3;getNextReminderAt(e){let r=new Date(e.pendingWorktreeDecisionSince).getTime();if(this.getWorktreeDecisionReminderStatus(e,r)!=="pending")return;let n=[r+t.REMINDER_THRESHOLD_MS];if(e.worktreeDecisionSnoozedUntil){let o=new Date(e.worktreeDecisionSnoozedUntil).getTime();Number.isFinite(o)&&n.push(o)}if(e.lastWorktreeReminderAt){let o=new Date(e.lastWorktreeReminderAt).getTime();Number.isFinite(o)&&n.push(o+t.REMINDER_INTERVAL_MS)}return Math.max(...n)}sendReminderIfDue(e,r=Date.now()){this.clearResolvedReminderState(e);let n=this.getNextReminderAt(e);if(n==null||n>r)return!1;let o=r-new Date(e.pendingWorktreeDecisionSince).getTime(),i=Math.floor(Math.max(0,o)/(3600*1e3));try{this.sendReminderNotification(e,i)}catch(a){return console.warn(`[SessionReminderService] Failed to send stale-decision reminder for session ${e.name}: ${a instanceof Error?a.message:String(a)}`),!1}for(let a of ct(e))this.updatePersistedSession(a,{lastWorktreeReminderAt:new Date(r).toISOString()});return!0}sendReminderNotification(e,r){let n=this.buildRoutingProxy({id:e.sessionId??e.name??U(e)??e.harnessSessionId,sessionId:e.sessionId,harnessSessionId:e.harnessSessionId,backendRef:e.backendRef,route:e.route});if(e.worktreeStrategy==="delegate"){this.dispatchNotification(n,{label:`worktree-stale-reminder-${e.name}`,wakeMessage:Dp(e,r),notifyUser:"never"});return}let o=[`\u23F0 Reminder: branch \`${e.worktreeBranch??"unknown"}\` is still waiting for a merge decision.`,`Session: ${e.name} | Pending: ${r}h`,"",`agent_merge(session="${e.name}") or agent_pr(session="${e.name}") or agent_worktree_cleanup() to resolve.`].join(`
211
+ `);this.dispatchNotification(n,{label:`worktree-stale-reminder-${e.name}`,userMessage:o,notifyUser:"always",buttons:this.getWorktreeDecisionButtons(Se(e)??e.harnessSessionId)})}clearResolvedReminderState(e){if(!e.pendingWorktreeDecisionSince&&!e.lastWorktreeReminderAt&&!e.worktreeDecisionSnoozedUntil||this.getWorktreeDecisionReminderStatus(e)!=="resolved")return!1;let r=!1;for(let n of ct(e))r=this.updatePersistedSession(n,{pendingWorktreeDecisionSince:void 0,lastWorktreeReminderAt:void 0,worktreeDecisionSnoozedUntil:void 0})||r;return r}getWorktreeDecisionReminderStatus(e,r){if(!e.pendingWorktreeDecisionSince)return"inactive";let n=r??new Date(e.pendingWorktreeDecisionSince).getTime();if(!Number.isFinite(n))return"inactive";if(e.worktreeMerged||e.worktreePrUrl||e.lifecycle==="terminal")return"resolved";let o=new Set(["merged","released","dismissed","none","cleanup_failed"]);if(e.worktreeState&&o.has(e.worktreeState))return"resolved";let i=new Set(["merged","released","dismissed","no_change","none","cleanup_failed"]);if(e.worktreeLifecycle?.state&&i.has(e.worktreeLifecycle.state))return"resolved";let a=e.worktreeState==="pending_decision"||e.lifecycle==="awaiting_worktree_decision"||e.worktreeLifecycle?.state==="pending_decision",u=e.worktreeState==null&&e.lifecycle==null&&e.worktreeLifecycle?.state==null&&!e.worktreeMerged&&!e.worktreePrUrl;if(!a&&!u)return"inactive";let p=un(e,{activeSession:!1,includePrSync:!1});return p.derivedState==="merged"||p.derivedState==="released"||p.derivedState==="cleanup_failed"?"resolved":"pending"}};It();Ee();ir();function Qo(t,e){return e!=null&&t.approvalPromptRequiredVersion===e&&HT(t.approvalPromptStatus)}function HT(t){return t==="delivered"||t==="fallback_delivered"}function Yo(t,e){return!t||e==null?!1:!!(t.pendingPlanApproval&&t.approvalState==="pending"&&t.lifecycle==="awaiting_plan_decision"&&(t.actionablePlanDecisionVersion??t.planDecisionVersion)===e)}function Qn(t,e,r=!1){let n="id"in t?t.id:t.sessionId??"unknown-session";return[r?"Plan review fallback text delivered to the user because interactive buttons could not be delivered.":"Plan approval buttons delivered to the user.",`Session: ${t.name??"unknown"} | ID: ${n} | Plan v${e??"?"}`,`Wait for their ${r?"explicit reply":"button callback"} \u2014 do NOT approve or reject this plan yourself.`].join(`
212
+ `)}function ma(t){let e="id"in t.session?t.session.id:t.session.sessionId??"unknown-session",r=t.originThreadLine??(t.session.originThreadId!=null?`Origin thread: ${t.session.originThreadId}`:"");return["[PLAN APPROVAL DELIVERY FAILED] The plugin could not deliver the canonical plan review buttons or the explicit fallback text to the user.",`Name: ${t.session.name??"unknown"} | ID: ${e} | Plan v${t.planDecisionVersion??"?"}`,r,"","No user-visible actionable review prompt is confirmed for this plan version.","Intervene manually before assuming the user saw the plan review request."].filter(Boolean).join(`
213
+ `)}import{existsSync as zT,readFileSync as JT}from"fs";function QT(t,e){if(t.latestPlanArtifactVersion===e&&t.latestPlanArtifact)return t.latestPlanArtifact;let r=t.planFilePath?.trim();if(!(!r||!zT(r)))try{let n=JT(r,"utf-8").trim();return n?{markdown:n,steps:[]}:void 0}catch{return}}var ca=class{constructor(e){this.deps=e}deps;dispatchPlanApprovalFallback(e,r,n){let o=new Date().toISOString();this.deps.dispatchSessionNotification(e,{label:"plan-approval-fallback",userMessage:Ho({session:e,summary:n}),notifyUser:"always",shouldDispatch:()=>Yo(e,r),hooks:{onNotifyStarted:()=>{this.deps.updatePersistedSession(e.id,{approvalPromptRequiredVersion:r,approvalPromptVersion:r,approvalPromptStatus:"sending",approvalPromptTransport:"direct-message",approvalPromptMessageKind:"explicit_fallback_text",approvalPromptLastAttemptAt:o})},onNotifySucceeded:()=>{this.deps.updatePersistedSession(e.id,{approvalPromptRequiredVersion:r,approvalPromptVersion:r,approvalPromptStatus:"fallback_delivered",approvalPromptTransport:"direct-message",approvalPromptMessageKind:"explicit_fallback_text",approvalPromptLastAttemptAt:o,approvalPromptDeliveredAt:new Date().toISOString(),approvalPromptFailedAt:void 0})},onNotifyFailed:()=>{this.deps.updatePersistedSession(e.id,{approvalPromptRequiredVersion:r,approvalPromptVersion:r,approvalPromptStatus:"failed",approvalPromptTransport:"direct-message",approvalPromptMessageKind:"explicit_fallback_text",approvalPromptLastAttemptAt:o,approvalPromptFailedAt:new Date().toISOString()})}},wakeMessageOnNotifySuccess:Qn(e,r,!0),wakeMessageOnNotifyFailed:ma({session:e,planDecisionVersion:r,originThreadLine:this.deps.originThreadLine(e)})})}logCompletionWakeDiagnostic(e){console.info(JSON.stringify({event:e.event,sessionId:e.session.id,sessionName:e.session.name,canonicalStatusDelivered:e.canonicalStatusDelivered,requestedShortFactualSummary:e.followupSummaryRequired,completionKind:"terminal"}))}shouldRequestCompletionFollowup(e){return e.originSessionKey?.trim()?.startsWith("agent:main:cron:")?!1:!!$i(e)}handleTurnEnd(e,r){if(e.status!=="running"){console.info(`[SessionManager] Suppressing turn-end wake for session ${e.id} (status=${e.status}) \u2014 terminal notification owns the completion path.`);return}if(!e.goalTaskId){if(r||e.pendingPlanApproval){this.emitWaitingForInput(e);return}if(e.worktreeStrategy==="ask"||e.worktreeStrategy==="delegate"){console.info(`[SessionManager] Suppressing turn-complete wake for session ${e.id} (worktreeStrategy=${e.worktreeStrategy}) \u2014 worktree notification will follow.`);return}this.deps.shouldEmitTurnCompleteWake(e)&&this.emitTurnComplete(e)}}async handleSessionTerminal(e){if(this.deps.persistSession(e),this.deps.clearWaitingTimestamp(e.id),e.goalTaskId){this.deps.clearRetryTimersForSession(e.id);return}let r={notificationSent:!1,worktreeRemoved:!1};e.worktreePath&&e.originalWorkdir&&(r=await this.deps.handleWorktreeStrategy(e));let n=!1;if(e.worktreePath&&e.originalWorkdir&&e.status==="failed"&&e.costUsd===0&&e.duration<3e4){let u=this.deps.resolveWorktreeRepoDir(e.originalWorkdir,e.worktreePath),p=e.worktreeBranch,d=lt(e);console.info(`[SessionManager] Early startup failure for "${e.name}" \u2014 auto-cleaning worktree (cost=$${e.costUsd.toFixed(2)}, duration=${e.duration}ms)`);let l=!1;if(u&&!d&&(l=kt(u,e.worktreePath)),u&&p&&!d&&l&&Jt(u,p),l){for(let m of ct(e))this.deps.updatePersistedSession(m,{worktreePath:void 0,worktreeBranch:void 0});n=!0}}let o=e.worktreeStrategy&&e.worktreeStrategy!=="off"&&e.worktreeStrategy!=="manual";if(!n&&e.worktreePath&&e.originalWorkdir){let u=this.deps.resolveWorktreeRepoDir(e.originalWorkdir,e.worktreePath),p=lt(e);r.worktreeRemoved?console.info(`[SessionManager] Worktree already removed for "${e.name}" during strategy handling.`):o?console.info(`[SessionManager] Keeping worktree alive for "${e.name}" (strategy=${e.worktreeStrategy}) \u2014 will be cleaned up on explicit resolution.`):u&&!p&&kt(u,e.worktreePath)}if(e.killReason==="done"){if(r.notificationSent||this.deps.hasTurnCompleteWakeMarker(e.id)||!this.deps.shouldEmitTerminalWake(e))return;this.emitCompleted(e);return}if(e.status==="completed"){if(!this.deps.shouldEmitTerminalWake(e))return;this.emitCompleted(e);return}if(e.status==="failed"){if(!this.deps.shouldEmitTerminalWake(e))return;let u=e.error||e.result?.is_error&&e.result.result||e.result?.result||this.deps.extractLastOutputLine(e)||`Session failed with no error details (session=${e.id}, subtype=${e.result?.subtype??"none"}, turns=${e.result?.num_turns??0})`;this.emitFailed(e,Je(u,200),n);return}let i=`$${(e.costUsd??0).toFixed(2)}`,a=e.duration;if(e.killReason==="idle-timeout"){let u=e.pendingPlanApproval?this.deps.resolvePlanApprovalMode(e):void 0;if(e.pendingPlanApproval){let p=e.actionablePlanDecisionVersion??e.planDecisionVersion,d=Qo(e,p);if(u==="delegate"){this.deps.dispatchSessionNotification(e,{label:"plan-approval-timeout",wakeMessage:["[DELEGATED PLAN APPROVAL REMINDER] Plan review is still pending after the session hit idle timeout.",`Name: ${e.name} | ID: ${e.id}`,this.deps.originThreadLine(e),"The agent already produced a plan and is waiting for a delegated decision.","Review privately first. Approve directly with agent_respond(..., approve=true, approval_rationale='...') if the plan is clearly within scope and low risk.","Escalate only if needed via agent_request_plan_approval(summary='...').","If you approve directly, follow up with a short user-facing explanation; the plugin's thumbs-up line is only the minimal approval acknowledgment.","If a canonical approval prompt was already posted for this plan version, do not restate it in plain text."].join(`
214
+ `),notifyUser:"never"}),this.deps.clearRetryTimersForSession(e.id);return}if(u==="ask"&&d){this.deps.dispatchSessionNotification(e,{label:"plan-approval-timeout",notifyUser:"never",wakeMessage:["[PLAN APPROVAL REMINDER] The user already has an actionable plan review prompt for this plan version.",`Name: ${e.name} | ID: ${e.id} | Plan v${p??"?"}`,this.deps.originThreadLine(e),"Do NOT post another approval summary unless canonical delivery is known to be missing."].join(`
215
+ `)}),this.deps.clearRetryTimersForSession(e.id);return}this.deps.dispatchSessionNotification(e,{label:"plan-approval-timeout",userMessage:[`\u{1F4CB} [${e.name}] Plan v${p??"?"} still awaiting approval after idle timeout | ${i} | ${Lt(a)}`,"","The agent already produced a plan and is waiting for your decision.","Approve resumes the session and starts implementation.","Revise resumes it in plan mode so it can update the plan first.","Reject keeps the session stopped."].join(`
216
+ `),notifyUser:"always",buttons:u==="ask"&&!d?this.deps.getPlanApprovalButtons(e.id,{...e,planDecisionVersion:p}):void 0}),this.deps.clearRetryTimersForSession(e.id);return}this.deps.dispatchSessionNotification(e,{label:"suspended",userMessage:`\u{1F4A4} [${e.name}] Suspended after idle timeout | ${i} | ${Lt(a)}`,notifyUser:"always",buttons:this.deps.getResumeButtons(e.id,e)}),this.deps.clearRetryTimersForSession(e.id);return}this.deps.notifySession(e,`\u26D4 [${e.name}] ${Vo(e.killReason)} | ${i} | ${Lt(a)}`),this.deps.clearRetryTimersForSession(e.id)}emitWaitingForInput(e){if(!this.deps.debounceWaitingEvent(e.id))return;let r=e.pendingPlanApproval?this.deps.resolvePlanApprovalMode(e):void 0,n=e.actionablePlanDecisionVersion??e.planDecisionVersion,o=e.pendingPlanApproval&&r==="ask"&&Qo(e,n),i=e.pendingPlanApproval?void 0:this.deps.getOutputPreview(e),a=!e.pendingPlanApproval&&e.pendingInputState?.promptText?e.pendingInputState.promptText:!e.pendingPlanApproval&&i!==void 0?i:this.deps.getOutputPreview(e,e.pendingPlanApproval&&r!=="delegate"?Number.POSITIVE_INFINITY:void 0),u=e.pendingPlanApproval&&r==="ask"&&!o?this.deps.getPlanApprovalButtons(e.id,{...e,planDecisionVersion:n}):!e.pendingPlanApproval&&e.pendingInputState?.options.length?this.deps.getQuestionButtons(e.id,e.pendingInputState.options.map(m=>({label:m}))):void 0,p=QT(e,n),d=Kp({session:e,preview:a,questionText:e.pendingPlanApproval?void 0:e.pendingInputState?.promptText,questionContextPreview:i,planArtifact:p,originThreadLine:this.deps.originThreadLine(e),planApprovalMode:r,planApprovalButtons:u,questionButtons:e.pendingPlanApproval?void 0:u}),l=d.planReviewSummary??a;if(d.label==="plan-approval"&&r==="ask"&&o){this.deps.dispatchSessionNotification(e,{label:d.label,userMessage:d.userMessage,userMessages:d.userMessages,notifyUser:"never",buttons:d.buttons,wakeMessage:d.wakeMessage});return}if(d.label==="plan-approval"&&r==="ask"){this.deps.dispatchSessionNotification(e,{label:d.label,userMessage:d.userMessage,userMessages:d.userMessages,notifyUser:"always",buttons:d.buttons,hooks:{onNotifyStarted:()=>{this.deps.updatePersistedSession(e.id,{approvalPromptRequiredVersion:n,approvalPromptVersion:n,approvalPromptStatus:"sending",approvalPromptTransport:"direct-message",approvalPromptMessageKind:"canonical_buttons",approvalPromptLastAttemptAt:new Date().toISOString()})},onNotifySucceeded:()=>{this.deps.updatePersistedSession(e.id,{canonicalPlanPromptVersion:n,approvalPromptRequiredVersion:n,approvalPromptVersion:n,approvalPromptStatus:"delivered",approvalPromptTransport:"direct-message",approvalPromptMessageKind:"canonical_buttons",approvalPromptDeliveredAt:new Date().toISOString(),approvalPromptFailedAt:void 0})},onNotifyFailed:()=>{this.deps.updatePersistedSession(e.id,{approvalPromptRequiredVersion:n,approvalPromptVersion:n,approvalPromptStatus:"failed",approvalPromptTransport:"direct-message",approvalPromptMessageKind:"canonical_buttons",approvalPromptFailedAt:new Date().toISOString()})}},shouldDispatch:()=>Yo(e,n),onUserNotifyFailed:()=>this.dispatchPlanApprovalFallback(e,n,l),wakeMessageOnNotifySuccess:Qn(e,n)});return}if(d.label==="plan-approval"){this.deps.dispatchSessionNotification(e,{label:d.label,userMessage:d.userMessage,wakeMessage:d.wakeMessage,notifyUser:"never",buttons:d.buttons});return}this.deps.dispatchSessionNotification(e,{label:d.label,userMessage:d.userMessage,notifyUser:"always",buttons:d.buttons,wakeMessageOnNotifyFailed:d.wakeMessage})}emitTurnComplete(e){console.info(`[SessionManager] turn-complete wake dispatching for session ${e.id} (turns=${e.result?.num_turns??0}, strategy=${e.worktreeStrategy??"none"})`);let r=Op({session:e,originThreadLine:this.deps.originThreadLine(e),preview:this.deps.getOutputPreview(e)});this.deps.dispatchSessionNotification(e,{label:"turn-complete",userMessage:r.userMessage,wakeMessage:r.wakeMessage,notifyUser:"always",onUserNotifyFailed:()=>{console.warn(`[SessionManager] turn-complete delivery failed for session ${e.id} \u2014 firing terminal notification as fallback`),this.deps.shouldEmitTerminalWake(e)&&this.emitCompleted(e)}})}emitCompleted(e){let r=this.deps.getOutputPreview(e),n=this.shouldRequestCompletionFollowup(e),o=$p({session:e,originThreadLine:this.deps.originThreadLine(e),preview:r}),i;this.deps.dispatchSessionNotification(e,{label:"completed",userMessage:o.userMessage,notifyUser:"always",completionWakeSummaryRequired:n,requireDirectUserNotification:!0,wakeMessageOnNotifySuccess:n?o.wakeMessageOnNotifySuccess:void 0,wakeMessageOnNotifyFailed:n?o.wakeMessageOnNotifyFailed:void 0,hooks:{onNotifySucceeded:()=>{i=!0,this.logCompletionWakeDiagnostic({session:e,event:"completion_notify_succeeded",canonicalStatusDelivered:i,followupSummaryRequired:n})},onNotifyFailed:()=>{i=!1,this.logCompletionWakeDiagnostic({session:e,event:"completion_notify_failed",canonicalStatusDelivered:i,followupSummaryRequired:n})},onWakeSucceeded:()=>{this.logCompletionWakeDiagnostic({session:e,event:"completion_wake_succeeded",canonicalStatusDelivered:i,followupSummaryRequired:n})}}})}emitFailed(e,r,n){let o=Mp({session:e,originThreadLine:this.deps.originThreadLine(e),errorSummary:r,preview:this.deps.getOutputPreview(e),worktreeAutoCleaned:n,failedButtons:this.deps.getResumeButtons(e.id,e)});this.deps.dispatchSessionNotification(e,{label:"failed",userMessage:o.userMessage,wakeMessage:o.wakeMessage,notifyUser:"always",buttons:o.buttons})}};Ee();It();import{existsSync as YT}from"fs";var fa=class{constructor(e){this.deps=e}deps;async dismissWorktree(e){let r=this.deps.getPersistedSession(e),n=this.deps.resolveActiveSession(e),o=n??r;if(!o)return`Error: Session "${e}" not found.`;let i=n?.worktreePath??r?.worktreePath,a=this.deps.resolveWorktreeRepoDir(n?.originalWorkdir??r?.workdir,i),u=n?.worktreeBranch??r?.worktreeBranch,p=n?.name??r?.name??e;if(!a)return`Error: No workdir found for session "${e}".`;let d=lt(o);!d&&i&&YT(i)&&kt(a,i,{destructive:!0}),u&&Jt(a,u);for(let m of ct(n??r))this.deps.updatePersistedSession(m,{worktreeDisposition:"dismissed",worktreeDismissedAt:new Date().toISOString(),pendingWorktreeDecisionSince:void 0,worktreeState:"dismissed",lifecycle:"terminal",worktreePath:void 0,worktreeBranch:void 0,worktreeLifecycle:{state:"dismissed",updatedAt:new Date().toISOString(),resolvedAt:new Date().toISOString(),resolutionSource:"dismiss",baseBranch:r?.worktreeLifecycle?.baseBranch,targetRepo:r?.worktreePrTargetRepo,pushRemote:r?.worktreePushRemote}});let l=d?`\u{1F5D1}\uFE0F [${p}] Branch \`${u??"unknown"}\` dismissed. Native backend worktree released for backend cleanup.`:`\u{1F5D1}\uFE0F [${p}] Branch \`${u??"unknown"}\` dismissed and permanently deleted.`;return this.deps.dispatchNotification(this.deps.buildRoutingProxy({id:Se(n??r??{id:e})??e,sessionId:r?.sessionId,harnessSessionId:n?.harnessSessionId??r?.harnessSessionId,backendRef:n?.backendRef??r?.backendRef,route:n?.route??r?.route}),{label:"worktree-dismissed",userMessage:l,notifyUser:"always"}),l}snoozeWorktreeDecision(e){let r=this.deps.getPersistedSession(e);if(!r)return`Error: Session "${e}" not found.`;let n=new Date(Date.now()+1440*60*1e3).toISOString();for(let a of ct(r))this.deps.updatePersistedSession(a,{worktreeDecisionSnoozedUntil:n,lastWorktreeReminderAt:new Date().toISOString()});let i=`\u23ED\uFE0F Reminder snoozed 24h for \`${r.worktreeBranch??"unknown"}\` (session: ${r.name})`;return this.deps.dispatchNotification(this.deps.buildRoutingProxy({id:Se(r)??U(r)??r.harnessSessionId,sessionId:r.sessionId,harnessSessionId:r.harnessSessionId,backendRef:r.backendRef,route:r.route}),{label:"worktree-snoozed",userMessage:i,notifyUser:"always"}),i}};var hg=new Set(["starting","running"]),ga=class{sessions=new Map;activeSessionCount(){return[...this.sessions.values()].filter(e=>hg.has(e.status)).length}uniqueName(e){let r=new Set([...this.sessions.values()].filter(o=>hg.has(o.status)).map(o=>o.name));if(!r.has(e))return e;let n=2;for(;r.has(`${e}-${n}`);)n+=1;return`${e}-${n}`}add(e){this.sessions.set(e.id,e)}remove(e){this.sessions.delete(e)}get(e){return this.sessions.get(e)}list(){return[...this.sessions.values()]}};var ha=class{constructor(e){this.deps=e}deps;initializeSession(e,r,n,o={}){if(this.deps.hydrateSpawnedSession(e,r,n),n.taskLifecycle?.create(e),e.on("statusChange",(i,a)=>{a==="running"?(e.harnessSessionId&&this.deps.markRunning(e),n.taskLifecycle?.progress(e)):(a==="completed"||a==="failed"||a==="killed")&&(n.taskLifecycle?.finalize(e),this.deps.handleTerminal(e).catch(u=>{console.error(`[SessionRuntimeBootstrap] handleTerminal threw for session ${e.id}:`,u)}))}),e.on("lifecycleChange",(i,a)=>{n.taskLifecycle?.progress(e)}),e.on("turnEnd",(i,a)=>{this.deps.handleTurnEnd(e,a)}),e.start(),o.notifyLaunch!==!1){let i=this.deps.formatLaunchWorkdirLabel(e),a=`\u{1F680} [${e.name}] Launched | ${i} | ${e.model??"default"}`;this.deps.notifySession(e,a,"launch")}return e}};var ya=class{buildNoChangeNotification(e){let{session:r,nativeBackendWorktree:n,cleanupSucceeded:o,worktreePath:i,preview:a,originThreadLine:u}=e,p=o?n?"native backend worktree released for backend cleanup":"worktree cleaned up":`cleanup failed; worktree still exists at ${i}`;return{label:o?"worktree-no-changes":"worktree-no-changes-cleanup-failed",userMessage:o?n?`\u2139\uFE0F [${r.name}] Session completed with no changes \u2014 native backend worktree released for backend cleanup`:`\u2139\uFE0F [${r.name}] Session completed with no changes \u2014 worktree cleaned up`:`\u26A0\uFE0F [${r.name}] Session completed with no changes, but worktree cleanup failed. Worktree still exists at ${i}`,wakeMessage:Fp({sessionName:r.name,sessionId:r.id,cleanupSummary:p,preview:a,originThreadLine:u,requestedPermissionMode:r.requestedPermissionMode,currentPermissionMode:r.currentPermissionMode,approvalExecutionState:r.approvalExecutionState,approvalState:r.approvalState,planApproval:r.planApproval,approvalPromptStatus:r.approvalPromptStatus,approvalPromptMessageKind:r.approvalPromptMessageKind,approvalPromptDeliveredAt:r.approvalPromptDeliveredAt}),notifyUser:"always"}}buildAskNotification(e){let{session:r,branchName:n,baseBranch:o,diffSummary:i,buttons:a}=e,u=Lp(i),p=i.commitMessages.slice(0,5).map(m=>`\u2022 ${m.hash} ${m.message} (${m.author})`),d=i.commits>5?`...and ${i.commits-5} more`:"",l=r.worktreePrTargetRepo?`Branch: \`${n}\` \u2192 \`${o}\` | PR target: ${r.worktreePrTargetRepo}`:`Branch: \`${n}\` \u2192 \`${o}\``;return{label:"worktree-merge-ask",userMessage:[`\u{1F500} Worktree decision required for session \`${r.name}\``,"",l,`Commits: ${i.commits} | Files: ${i.filesChanged} | +${i.insertions} / -${i.deletions}`,"",...u.length>0?["Summary:",...u.map(m=>`- ${m}`),""]:[],"Recent commits:",...p,...d?[d]:[],"",`\u26A0\uFE0F Discard will permanently delete branch \`${n}\` and all local changes. This cannot be undone.`].join(`
217
+ `),notifyUser:"always",buttons:a,wakeMessageOnNotifySuccess:["Worktree decision buttons delivered to the user.",`Session: ${r.name} | ID: ${r.id}`,l,"Wait for their button callback \u2014 do NOT act on this worktree yourself."].join(`
218
+ `),wakeMessageOnNotifyFailed:[`\u{1F500} Worktree decision required for session \`${r.name}\``,"",l,`Commits: ${i.commits} | Files: ${i.filesChanged} | +${i.insertions} / -${i.deletions}`].join(`
219
+ `)}}buildDelegateNotification(e){let{session:r,branchName:n,baseBranch:o,diffSummary:i,originThreadLine:a}=e,u=i.commitMessages.slice(0,5).map(l=>`\u2022 ${l.hash} ${l.message} (${l.author})`),p=i.commits>5?`...and ${i.commits-5} more`:void 0,d=r.prompt?r.prompt.slice(0,500):"(no prompt)";return{label:"worktree-delegate",wakeMessage:_p({sessionName:r.name,sessionId:r.id,branchName:n,baseBranch:o,promptSnippet:d,commitLines:u,moreNote:p,originThreadLine:a,diffSummary:i}),notifyUser:"never"}}};function yg(t,e=1e3){let r=!Number.isFinite(e),n=typeof t.getOutput=="function"?t.getOutput():[],o=r?n.join(`
220
+ `):ZT(t);return r?o:o.length>e?Sg(t)?Yi(o,e):ec(o,e):o}function ZT(t){let e=typeof t.getOutput=="function"?t.getOutput():[],r=e.join(`
221
+ `).trim();return r?Sg(t)?XT(r)??r:e.slice(-20).join(`
222
+ `):""}function Sg(t){if(t.status==="completed"||t.killReason==="done")return!0;let e=t;return e.approvalState==="approved"||e.planModeApproved===!0||(e.planDecisionVersion??0)>0}function XT(t){let r=t.split(/\n\s*\n+/).map(n=>n.trim()).filter(n=>/[A-Za-z0-9]/.test(n)).at(-1);if(r)return r.length>=120||r.includes(`
223
+ `)?r:void 0}ir();It();ze();import{unlinkSync as eR}from"fs";var Sa=class t{timers=new Map;disposed=!1;static MAX_DELAY_MS=2147483647;schedule(e,r,n){if(this.disposed)return;this.cancel(e);let o=Math.max(0,r-Date.now()),i=setTimeout(()=>{if(this.timers.delete(e),!this.disposed){if(r-Date.now()>0){this.schedule(e,r,n);return}n()}},Math.min(o,t.MAX_DELAY_MS));i.unref?.(),this.timers.set(e,i)}cancel(e){let r=this.timers.get(e);r&&(clearTimeout(r),this.timers.delete(e))}cancelPrefix(e){for(let r of this.timers.keys())r.startsWith(e)&&this.cancel(r)}dispose(){this.disposed=!0;for(let e of this.timers.values())clearTimeout(e);this.timers.clear()}};Ee();Bo();It();var kg=10080*60*1e3,tR=300*1e3,Ig="tmp-output:cleanup";function rR(t){return t instanceof Error?t.message:String(t)}var ka=class{constructor(e){this.deps=e}deps;scheduler=new Sa;schedule(e,r,n){this.scheduler.schedule(e,r,n)}cancel(e){this.scheduler.cancel(e)}cancelPrefix(e){this.scheduler.cancelPrefix(e)}bootstrapMaintenanceSchedules(){let e=Date.now();this.deps.store.cleanupTmpOutputFiles(e);for(let r of this.deps.store.listPersistedSessions())this.syncPersistedSessionMaintenance(r);this.syncActionTokenExpiryDeadline(),this.deps.store.cleanupOrphanOutputFiles(),this.syncTmpOutputCleanupDeadline(e)}syncRuntimeGcDeadline(e){if(!e.completedAt)return;let r=this.runtimeGcKey(e.id);this.schedule(r,e.completedAt+this.runtimeGcMaxAgeMs(),()=>{let n=this.deps.sessions.get(e.id);if(!n||!n.completedAt)return;let o=this.runtimeGcMaxAgeMs();if(!this.deps.store.shouldGcActiveSession(n,Date.now(),o)){this.syncRuntimeGcDeadline(n);return}this.deps.removeRuntimeSession(e.id),this.deps.persistSession(n,{scheduleRuntimeGc:!1}),this.deps.clearRuntimeSessionState(e.id)})}cancelRuntimeGc(e){this.cancel(this.runtimeGcKey(e))}cancelPersistedMaintenance(e){let r=this.persistedMaintenanceRef(e);r&&this.cancelPrefix(`persisted:${r}:`)}syncPersistedSessionMaintenance(e){let r=this.persistedMaintenanceRef(e);if(!r)return;this.cancel(this.persistedMaintenanceKey(r,"worktree-reminder"));let n=this.deps.reminders.getNextReminderAt(e);n!=null?this.schedulePersistedWorktreeReminder(r,n):this.deps.reminders.clearResolvedReminderState(e),this.cancel(this.persistedMaintenanceKey(r,"worktree-retention"));let o=un(e,{activeSession:!1,includePrSync:e.worktreeLifecycle?.state==="pr_open"||!!e.worktreePrUrl}),i=this.resolvedAtIso(e),a=this.isLegacyResolvedWorktree(e);if((o.cleanupSafe||a)&&typeof i=="string"){let u=new Date(i).getTime();Number.isFinite(u)&&this.schedule(this.persistedMaintenanceKey(r,"worktree-retention"),u+kg,()=>{let p=this.deps.store.getPersistedSession(r);p&&this.reconcileResolvedWorktreeRetention(p,Date.now())})}}reconcileResolvedWorktreeRetention(e,r){let n=un(e,{activeSession:!1,includePrSync:e.worktreeLifecycle?.state==="pr_open"||!!e.worktreePrUrl}),o=this.resolvedAtIso(e),i=o?new Date(o).getTime():0,a=this.isLegacyResolvedWorktree(e);if(!(!n.cleanupSafe&&!a||!i||r-i<kg))try{if(!e.worktreePath&&!lt(e))return;let u=this.deps.resolveWorktreeRepoDir(e.workdir,e.worktreePath);if(!u)return;let p=lt(e)?!1:kt(u,e.worktreePath);if(!lt(e)&&!p)return;for(let d of ct(e))this.deps.updatePersistedSession(d,{worktreePath:void 0,worktreeBranch:void 0,worktreeState:"none",worktreeLifecycle:{...e.worktreeLifecycle??n.lifecycle,state:n.derivedState,updatedAt:new Date(r).toISOString(),resolvedAt:e.worktreeLifecycle?.resolvedAt??new Date(r).toISOString(),resolutionSource:e.worktreeLifecycle?.resolutionSource??"maintenance",notes:n.reasons}})}catch(u){console.warn(`[SessionManager] Failed maintenance cleanup for worktree ${e.worktreePath}: ${rR(u)}`)}}syncActionTokenExpiryDeadline(){let e="tokens:expiry";this.cancel(e);let r=this.deps.store.getNextActionTokenExpiry();r!=null&&this.schedule(e,r,()=>{this.deps.store.purgeExpiredActionTokens(Date.now())})}syncTmpOutputCleanupDeadline(e=Date.now()){this.cancel(Ig);let r=this.deps.store.getNextTmpOutputCleanupAt(e);r!=null&&this.schedule(Ig,r,()=>{let n=Date.now();this.deps.store.cleanupTmpOutputFiles(n),this.syncTmpOutputCleanupDeadline(n)})}enforcePersistedRetention(){let e=this.deps.store.evictOldestPersisted(this.deps.getMaxPersistedSessions());for(let r of e)this.cancelPersistedMaintenance(r),r.sessionId&&this.cancelRuntimeGc(r.sessionId),this.cleanupOutputPathIfUnreferenced(r.outputPath)}dispose(){this.scheduler.dispose()}persistedMaintenanceRef(e){return e.sessionId??U(e)??e.harnessSessionId}runtimeGcKey(e){return`runtime-gc:${e}`}persistedMaintenanceKey(e,r){return`persisted:${e}:${r}`}runtimeGcMaxAgeMs(){return(j.sessionGcAgeMinutes??1440)*6e4}schedulePersistedWorktreeReminder(e,r){let n=this.persistedMaintenanceKey(e,"worktree-reminder");this.schedule(n,r,()=>{let o=this.deps.store.getPersistedSession(e);if(!o||this.deps.reminders.sendReminderIfDue(o,Date.now()))return;let a=this.deps.reminders.getNextReminderAt(o);a!=null&&this.schedulePersistedWorktreeReminder(e,Math.max(a,Date.now()+tR))})}cleanupOutputPathIfUnreferenced(e){if(!(!e||this.deps.store.hasOutputPathReference(e)))try{eR(e)}catch{}}resolvedAtIso(e){return e.worktreeLifecycle?.resolvedAt??e.worktreeMergedAt??e.worktreeDismissedAt??(e.completedAt?new Date(e.completedAt).toISOString():void 0)}isLegacyResolvedWorktree(e){return e.worktreeMerged===!0||e.worktreeDisposition==="dismissed"||e.worktreeDisposition==="no-change-cleaned"||e.worktreeState==="merged"||e.worktreeState==="dismissed"}};var xg=new Set(["completed","failed","killed"]),nR=new Set(["starting","running"]),oR=5e3,Ia=class{registry;sessions;maxSessions;maxPersistedSessions;lastWaitingEventTimestamps=new Map;lastTurnCompleteMarkers=new Map;lastTerminalWakeMarkers=new Map;mergeQueue=new Jn;pendingAskUserQuestions=new Map;store;metrics;wakeDispatcher;interactions;notifications;worktrees;questions;reminders;lifecycle;restore;stateSync;references;worktreeStrategy;worktreeDecisions;runtimeBootstrap;worktreeMessages;maintenance;constructor(e=20,r=50,n={}){this.maxSessions=e,this.maxPersistedSessions=r,this.registry=new ga,this.sessions=this.registry.sessions,this.store=new Xs(n.store),this.metrics=new ea,this.wakeDispatcher=new sa,this.interactions=new aa(this.store.actionTokenStore,Pr),this.references=new Ks(this.sessions,this.store),this.stateSync=new Us({store:this.store,sessions:this.sessions,resolveSession:o=>this.references.resolveActive(o)}),this.notifications=new ua(this.wakeDispatcher,(o,i)=>this.stateSync.applySessionPatch(o,i)),this.worktrees=new pa,this.restore=new Bs(o=>this.store.getPersistedSession(o)),this.worktreeMessages=new ya,this.worktreeStrategy=new Vs({shouldRunWorktreeStrategy:o=>this.shouldRunWorktreeStrategy(o),isAlreadyMerged:o=>this.isAlreadyMerged(o),resolveWorktreeRepoDir:(o,i)=>this.resolveWorktreeRepoDir(o,i),getWorktreeCompletionState:(o,i,a,u)=>this.getWorktreeCompletionState(o,i,a,u),updatePersistedSession:(o,i)=>this.updatePersistedSession(o,i),dispatchSessionNotification:(o,i)=>this.dispatchSessionNotification(o,i),getOutputPreview:(o,i)=>this.getOutputPreview(o,i),originThreadLine:o=>this.originThreadLine(o),getWorktreeDecisionButtons:o=>this.getWorktreeDecisionButtons(o),makeOpenPrButton:o=>this.makeActionButton(o,"worktree-create-pr","Open PR"),worktreeMessages:this.worktreeMessages,enqueueMerge:(o,i,a)=>this.enqueueMerge(o,i,a),mergeBranch:fs,spawnConflictResolver:async({session:o,worktreePath:i,prompt:a})=>this.spawn({prompt:a,workdir:i,name:`${o.name}-conflict-resolver`,harness:o.harnessName||dt(),model:o.model,reasoningEffort:o.reasoningEffort,fastMode:o.fastMode,permissionMode:"bypassPermissions",multiTurn:!0,worktreeStrategy:"off",autoMergeParentSessionId:o.id,route:o.route,originChannel:o.originChannel,originThreadId:o.originThreadId,originAgentId:o.originAgentId,originSessionKey:o.originSessionKey},{notifyLaunch:!1}),runAutoPr:async(o,i)=>{let{makeAgentPrTool:a}=await Promise.resolve().then(()=>(Ms(),tf));return{success:(await a().execute("auto-pr",{session:o.id,base_branch:i}))?.meta?.success===!0}}}),this.questions=new da(this.pendingAskUserQuestions,(o,i)=>this.dispatchSessionNotification(o,i),o=>{this.lastWaitingEventTimestamps.delete(o)},(o,i)=>this.interactions.getQuestionButtons(o,i)),this.reminders=new la(o=>this.buildRoutingProxy(o),(o,i)=>this.notifications.dispatch(o,i),(o,i)=>this.updatePersistedSession(o,i),o=>this.getWorktreeDecisionButtons(o)),this.maintenance=new ka({store:this.store,sessions:this.sessions,reminders:this.reminders,removeRuntimeSession:o=>this.registry.remove(o),persistSession:(o,i)=>this.persistSession(o,i),clearRuntimeSessionState:o=>{this.lastWaitingEventTimestamps.delete(o),this.lastTurnCompleteMarkers.delete(o),this.lastTerminalWakeMarkers.delete(o)},resolveWorktreeRepoDir:(o,i)=>this.resolveWorktreeRepoDir(o,i),updatePersistedSession:(o,i)=>this.updatePersistedSession(o,i),getMaxPersistedSessions:()=>this.maxPersistedSessions}),this.store.onActionTokensChanged(()=>this.syncActionTokenExpiryDeadline()),this.lifecycle=new ca({persistSession:o=>this.persistSession(o),clearWaitingTimestamp:o=>{this.lastWaitingEventTimestamps.delete(o)},handleWorktreeStrategy:o=>this.handleWorktreeStrategy(o),resolveWorktreeRepoDir:(o,i)=>this.resolveWorktreeRepoDir(o,i),updatePersistedSession:(o,i)=>this.updatePersistedSession(o,i),dispatchSessionNotification:(o,i)=>this.dispatchSessionNotification(o,i),notifySession:(o,i,a)=>this.notifySession(o,i,a),clearRetryTimersForSession:o=>this.wakeDispatcher.clearRetryTimersForSession(o),hasTurnCompleteWakeMarker:o=>this.lastTurnCompleteMarkers.has(o),shouldEmitTurnCompleteWake:o=>this.shouldEmitTurnCompleteWake(o),shouldEmitTerminalWake:o=>this.shouldEmitTerminalWake(o),resolvePlanApprovalMode:o=>this.resolvePlanApprovalMode(o),getPlanApprovalButtons:(o,i)=>this.interactions.getPlanApprovalButtons(o,i),getResumeButtons:(o,i)=>this.interactions.getResumeButtons(o,i),getQuestionButtons:(o,i)=>this.interactions.getQuestionButtons(o,i),extractLastOutputLine:o=>this.extractLastOutputLine(o),getOutputPreview:(o,i)=>this.getOutputPreview(o,i),originThreadLine:o=>this.originThreadLine(o),debounceWaitingEvent:o=>this.debounceWaitingEvent(o),isAlreadyMerged:o=>this.isAlreadyMerged(o)}),this.worktreeDecisions=new fa({getPersistedSession:o=>this.store.getPersistedSession(o),resolveActiveSession:o=>this.references.resolveActive(o),resolveWorktreeRepoDir:(o,i)=>this.resolveWorktreeRepoDir(o,i),updatePersistedSession:(o,i)=>this.updatePersistedSession(o,i),dispatchNotification:(o,i)=>this.notifications.dispatch(o,i),buildRoutingProxy:o=>this.buildRoutingProxy(o)}),this.runtimeBootstrap=new ha({hydrateSpawnedSession:(o,i,a)=>{this.restore.hydrateSpawnedSession(o,i,a)},markRunning:o=>{this.store.markRunning(o),this.onPersistedSessionChanged(this.store.getPersistedSession(o.id))},handleTerminal:async o=>this.onSessionTerminal(o),handleTurnEnd:(o,i)=>this.onTurnEnd(o,i),formatLaunchWorkdirLabel:o=>this.formatLaunchWorkdirLabel(o),notifySession:(o,i,a)=>this.notifySession(o,i,a)})}get persisted(){return this.store.persisted}get idIndex(){return this.store.idIndex}get nameIndex(){return this.store.nameIndex}uniqueName(e){return this.registry.uniqueName(e)}syncRuntimeGcDeadline(e){this.maintenance.syncRuntimeGcDeadline(e)}cancelPersistedMaintenance(e){this.maintenance.cancelPersistedMaintenance(e)}onPersistedSessionChanged(e){e&&(this.syncPersistedSessionMaintenance(e),this.enforcePersistedRetention())}syncPersistedSessionMaintenance(e){this.maintenance.syncPersistedSessionMaintenance(e)}reconcileResolvedWorktreeRetention(e,r){this.maintenance.reconcileResolvedWorktreeRetention(e,r)}syncActionTokenExpiryDeadline(){this.maintenance.syncActionTokenExpiryDeadline()}syncTmpOutputCleanupDeadline(e=Date.now()){this.maintenance.syncTmpOutputCleanupDeadline(e)}enforcePersistedRetention(){this.maintenance.enforcePersistedRetention()}bootstrapMaintenanceSchedules(){this.maintenance.bootstrapMaintenanceSchedules()}disposeMaintenance(){this.maintenance.dispose()}spawn(e,r={}){if(this.registry.activeSessionCount()>=this.maxSessions)throw new Error(`Max sessions reached (${this.maxSessions}). Use agent_sessions to list active sessions and agent_kill to end one.`);if(e.sessionIdOverride){let c=this.registry.get(e.sessionIdOverride);if(c?.status==="starting"||c?.status==="running")throw new Error(`Cannot reuse session ID ${e.sessionIdOverride}: that session is still ${c.status}.`);c&&this.registry.remove(c.id),this.lastWaitingEventTimestamps.delete(e.sessionIdOverride),this.lastTurnCompleteMarkers.delete(e.sessionIdOverride),this.lastTerminalWakeMarkers.delete(e.sessionIdOverride),this.maintenance.cancelRuntimeGc(e.sessionIdOverride)}let o=e.name||Zm(e.prompt),i=this.uniqueName(o);if(i!==o&&console.warn(`[SessionManager] Name conflict: "${o}" \u2192 "${i}" (active session with same name exists)`),!e.route?.provider||!e.route.target)throw new Error(`Cannot launch session "${i}": missing explicit route metadata.`);let a=this.restore.prepareSpawn(e,i),u=e.harness??"claude-code",p=this,d,l=u==="claude-code"&&!e.canUseTool?async(c,h)=>{if(!d)throw new Error("canUseTool called before session ID was set");return p.handleAskUserQuestion(d,h)}:e.canUseTool,m=new ys({...e,workdir:a.actualWorkdir,systemPrompt:a.effectiveSystemPrompt,canUseTool:l},i);return d=m.id,this.registry.add(m),this.metrics.incrementLaunched(),this.runtimeBootstrap.initializeSession(m,a,e,r)}async spawnAndAwaitRunning(e,r={}){let n=this.spawn(e,r);return await this.waitForRunningSession(n),n}async waitForRunningSession(e){if(e.status==="running")return;if(xg.has(e.status))throw new Error(this.describeLaunchFailure(e));let r=e.on?.bind(e),n=e.off?.bind(e)??e.removeListener?.bind(e);if(!r||!n)throw new Error(`Session ${e.name} [${e.id}] did not expose lifecycle events during startup.`);await new Promise((o,i)=>{let a=(p,d)=>{if(d==="running"){u(),o();return}xg.has(d)&&(u(),i(new Error(this.describeLaunchFailure(e))))},u=()=>{n("statusChange",a)};r("statusChange",a)})}describeLaunchFailure(e){let r=e.killReason?` (reason: ${e.killReason})`:"",n=e.error||e.result?.result||`status=${e.status}${r}`;return`Session ${e.name} [${e.id}] failed to start: ${n}`}formatLaunchResult(e,r){return Ei({prompt:e.prompt,workdir:e.workdir,harness:e.harness,permissionMode:e.permissionMode??j.permissionMode,planApproval:e.planApproval,resumeSessionId:e.resumeSessionId,forkSession:e.forkSession,forceNewSession:e.forceNewSession,clearedPersistedCodexResume:e.clearedPersistedCodexResume},r)}shouldRunWorktreeStrategy(e){let r=e.lifecycle;return!(r==="starting"||r==="awaiting_plan_decision"||r==="awaiting_user_input"||e.pendingPlanApproval)}makeActionButton(e,r,n,o={}){return this.interactions.makeActionButton(e,r,n,o)}consumeActionToken(e){return this.interactions.consumeActionToken(e)}getActionToken(e){return this.interactions.getActionToken(e)}clearPlanDecisionTokens(e,r){this.interactions.clearPlanDecisionTokens(e,r)}isCurrentPendingPlanDecision(e,r){let n=this.resolve(e)??this.getPersistedSession(e);return Yo(n,r)}dispatchPlanApprovalFallback(e,r,n){let o=new Date().toISOString();this.notifications.dispatch(e,{label:"plan-approval-fallback",userMessage:Ho({session:e,summary:n}),notifyUser:"always",shouldDispatch:()=>this.isCurrentPendingPlanDecision(e.id,r),hooks:{onNotifyStarted:()=>{this.updatePersistedSession(e.id,{approvalPromptRequiredVersion:r,approvalPromptVersion:r,approvalPromptStatus:"sending",approvalPromptTransport:"direct-message",approvalPromptMessageKind:"explicit_fallback_text",approvalPromptLastAttemptAt:o})},onNotifySucceeded:()=>{this.updatePersistedSession(e.id,{approvalPromptRequiredVersion:r,approvalPromptVersion:r,approvalPromptStatus:"fallback_delivered",approvalPromptTransport:"direct-message",approvalPromptMessageKind:"explicit_fallback_text",approvalPromptLastAttemptAt:o,approvalPromptDeliveredAt:new Date().toISOString(),approvalPromptFailedAt:void 0})},onNotifyFailed:()=>{this.updatePersistedSession(e.id,{approvalPromptRequiredVersion:r,approvalPromptVersion:r,approvalPromptStatus:"failed",approvalPromptTransport:"direct-message",approvalPromptMessageKind:"explicit_fallback_text",approvalPromptLastAttemptAt:o,approvalPromptFailedAt:new Date().toISOString()})}},wakeMessageOnNotifySuccess:Qn(e,r,!0),wakeMessageOnNotifyFailed:ma({session:e,planDecisionVersion:r})})}getWorktreeDecisionButtons(e){let r=this.resolve(e)??this.getPersistedSession(e);if(!(!r||r.worktreeStrategy==="delegate"))return this.interactions.getWorktreeDecisionButtons(e,r)}getWorktreeCompletionState(e,r,n,o){return this.worktrees.getCompletionState(e,r,n,o)}notifyWorktreeOutcome(e,r,n){this.notifications.notifyWorktreeOutcome(e,r,n)}requestPlanApprovalFromUser(e,r){let n=r.trim();if(!n)return"Error: summary must not be empty.";let o=Bp(n),i=this.resolve(e),a=i?void 0:this.getPersistedSession(e),u=i??a;if(!u)return`Error: Session "${e}" not found.`;if(!u.pendingPlanApproval)return`Error: Session "${e}" is not awaiting plan approval.`;let p=Se(i??a??{id:e})??e;if(this.resolvePlanApprovalMode(u)!=="delegate")return`Error: Session "${e}" already uses direct user plan approval. Do not send a duplicate approval prompt.`;let d=u.actionablePlanDecisionVersion??u.planDecisionVersion;if(Qo(u,d))return[`An actionable plan review prompt already exists for session ${u.name} [${p}].`,"Wait for the user's Approve, Revise, or Reject response.","Do not send a separate plain-text approval message."].join(" ");if(u.deliveryState==="notifying")return[`A plan approval prompt is already being delivered for session ${u.name} [${p}].`,"Wait for delivery to finish before retrying."].join(" ");let l=this.interactions.getPlanApprovalButtons(p,{...u,planDecisionVersion:d}),m=[`\u{1F4CB} [${u.name}] Plan v${d??"?"} needs your decision:`,"","Why this was escalated:","",o,"","Choose Approve, Revise, or Reject below."].join(`
224
+ `);return this.notifications.dispatch(this.buildRoutingProxy({id:p,name:u.name,sessionId:a?.sessionId,harnessSessionId:i?.harnessSessionId??a?.harnessSessionId,backendRef:i?.backendRef??a?.backendRef,route:i?.route??a?.route}),{label:"plan-approval",userMessage:m,notifyUser:"always",buttons:l,hooks:{onNotifyStarted:()=>{this.updatePersistedSession(p,{approvalPromptRequiredVersion:d,approvalPromptStatus:"sending",approvalPromptVersion:d,approvalPromptTransport:"direct-message",approvalPromptMessageKind:"canonical_buttons",approvalPromptLastAttemptAt:new Date().toISOString()})},onNotifySucceeded:()=>{this.updatePersistedSession(p,{canonicalPlanPromptVersion:d,approvalPromptRequiredVersion:d,approvalPromptVersion:d,approvalPromptStatus:"delivered",approvalPromptTransport:"direct-message",approvalPromptMessageKind:"canonical_buttons",approvalPromptDeliveredAt:new Date().toISOString(),approvalPromptFailedAt:void 0})},onNotifyFailed:()=>{this.updatePersistedSession(p,{approvalPromptRequiredVersion:d,approvalPromptVersion:d,approvalPromptStatus:"failed",approvalPromptTransport:"direct-message",approvalPromptMessageKind:"canonical_buttons",approvalPromptFailedAt:new Date().toISOString()})}},shouldDispatch:()=>this.isCurrentPendingPlanDecision(p,d),onUserNotifyFailed:()=>this.dispatchPlanApprovalFallback(this.buildRoutingProxy({id:p,name:u.name,sessionId:a?.sessionId,harnessSessionId:i?.harnessSessionId??a?.harnessSessionId,backendRef:i?.backendRef??a?.backendRef,route:i?.route??a?.route}),d,o),wakeMessageOnNotifySuccess:Qn({id:p,name:u.name},d)}),[`Canonical plan approval prompt sent for session ${u.name} [${p}].`,"Wait for the user's Approve, Revise, or Reject response.","Do not send a separate plain-text approval message."].join(" ")}buildRoutingProxy(e){return{id:Se(e)??U(e)??e.harnessSessionId??"unknown-session",name:e.name,harnessSessionId:e.harnessSessionId,backendRef:e.backendRef?{...e.backendRef}:void 0,route:e.route}}resolveWorktreeRepoDir(e,r){return e&&(!r||!qs(e,r))||!r?e:ds(r)??e}formatLaunchWorkdirLabel(e){if(!e.worktreePath)return e.workdir;let r=this.resolveWorktreeRepoDir(e.originalWorkdir,e.worktreePath);return!r||r===e.worktreePath?e.worktreePath:`${e.worktreePath} (worktree of ${r})`}async dismissWorktree(e){return this.worktreeDecisions.dismissWorktree(e)}snoozeWorktreeDecision(e){return this.worktreeDecisions.snoozeWorktreeDecision(e)}async handleWorktreeStrategy(e){return this.worktreeStrategy.handleWorktreeStrategy(e)}async onSessionTerminal(e){if(e.autoMergeParentSessionId){await this.handleAutoMergeResolverTerminal(e);return}return this.lifecycle.handleSessionTerminal(e)}async handleAutoMergeResolverTerminal(e){this.persistSession(e),this.lastWaitingEventTimestamps.delete(e.id),this.wakeDispatcher.clearRetryTimersForSession(e.id);let r=e.autoMergeParentSessionId;if(!r)return;let n=this.resolve(r),o=this.getPersistedSession(r),i=n??(o?this.buildRoutingProxy({id:o.sessionId,name:o.name,sessionId:o.sessionId,harnessSessionId:o.harnessSessionId,backendRef:o.backendRef,route:o.route}):void 0);if(!i){console.warn(`[SessionManager] Auto-merge resolver ${e.id} completed, but original session ${r} could not be found.`);return}if(e.status==="completed"&&n){this.updatePersistedSession(r,{autoMergeResolverSessionId:void 0}),await this.handleWorktreeStrategy(n);return}let a=n?.worktreeBranch??o?.worktreeBranch??"unknown",u=n?.worktreePath??o?.worktreePath??"(unknown worktree)",p=n?.worktreeBaseBranch??o?.worktreeBaseBranch,d=n?.worktreePrTargetRepo??o?.worktreePrTargetRepo,l=n?.worktreePushRemote??o?.worktreePushRemote;this.updatePersistedSession(r,Ws({worktreeBaseBranch:p,worktreePrTargetRepo:d,worktreePushRemote:l},{clearResolverSessionId:!0,notes:[e.status==="completed"?"auto_merge_conflict_resolver_completed_without_retry_target":"auto_merge_conflict_resolver_failed"]})),this.dispatchSessionNotification(i,{label:"worktree-merge-conflict-resolver-failed",userMessage:[`\u26A0\uFE0F [${i.name}] Auto-merge conflict resolution did not complete successfully.`,`Branch \`${a}\` was preserved for manual follow-up in ${u}.`,e.status==="completed"?"The resolver finished, but the original session could not be resumed for the merge retry.":`Resolver session ${e.name} ended with status=${e.status}.`].join(`
225
+ `),buttons:[[this.makeActionButton(r,"worktree-create-pr","Open PR")]]})}getStoppedStatusLabel(e){return Vo(e)}persistSession(e,r={}){let n=r.scheduleRuntimeGc??!0;this.store.hasRecordedSession(e.id)||this.metrics.recordSession(e),this.store.persistTerminal(e),n&&this.syncRuntimeGcDeadline(e),this.onPersistedSessionChanged(this.store.getPersistedSession(e.id)),this.syncTmpOutputCleanupDeadline()}getMetrics(){return this.metrics.getMetrics()}recordSessionMetrics(e){this.metrics.recordSession(e)}notifySession(e,r,n="notification"){this.dispatchSessionNotification(e,{label:n,userMessage:r,notifyUser:"always"})}sendPlanOffer(e){let r=this.interactions.getPlanOfferButtons({offerId:e.offerId,route:e.route,planName:e.planName,planPrompt:e.planPrompt,planWorkdir:e.planWorkdir,planWorktreeStrategy:e.planWorktreeStrategy});this.dispatchSessionNotification(this.buildRoutingProxy({id:e.offerId,route:e.route}),{label:"plan-offer",userMessage:e.text,notifyUser:"always",buttons:r})}emitGoalTaskUpdate(e,r,n="goal-task"){let o=this.buildRoutingProxy({id:e.sessionId??e.id,route:e.route});o.originChannel=e.originChannel,o.originThreadId=e.originThreadId,o.originSessionKey=e.originSessionKey,this.dispatchSessionNotification(o,{label:n,userMessage:r,notifyUser:"always"})}launchPlanOffer(e){let r=e.route??{provider:"system",target:"system"};return this.spawn({prompt:e.prompt,workdir:e.workdir,name:e.name,harness:dt(),permissionMode:"plan",planApproval:"ask",worktreeStrategy:e.worktreeStrategy??"off",multiTurn:!0,route:r,originChannel:this.originChannelFromRoute(r),originThreadId:r.threadId,originSessionKey:r.sessionKey})}dispatchSessionNotification(e,r){this.notifications.dispatch(e,r)}originChannelFromRoute(e){return e.accountId?`${e.provider}|${e.accountId}|${e.target}`:`${e.provider}|${e.target}`}debounceWaitingEvent(e){let r=Date.now(),n=this.lastWaitingEventTimestamps.get(e);return n&&r-n<oR?!1:(this.lastWaitingEventTimestamps.set(e,r),!0)}originThreadLine(e){return Mi(e)}extractLastOutputLine(e){return e.getOutput(3).filter(o=>o.trim()).pop()?.trim()||void 0}getOutputPreview(e,r=1e3){return yg(e,r)}triggerAgentEvent(e){this.lifecycle.emitCompleted(e)}triggerFailedEvent(e,r,n=!1){this.lifecycle.emitFailed(e,r,n)}triggerWaitingForInputEvent(e){this.lifecycle.emitWaitingForInput(e)}resolvePlanApprovalMode(e){return e.planApproval??j.planApproval??"delegate"}onTurnEnd(e,r){this.lifecycle.handleTurnEnd(e,r)}shouldEmitTurnCompleteWake(e){let r=`${e.result?.session_id??""}|${e.result?.num_turns??0}|${e.result?.duration_ms??0}`;return this.lastTurnCompleteMarkers.get(e.id)===r?(console.info(`[SessionManager] shouldEmitTurnCompleteWake: debounced for session ${e.id} (marker unchanged: ${r})`),!1):(this.lastTurnCompleteMarkers.set(e.id,r),!0)}shouldEmitTerminalWake(e){let r=`${e.status}|${e.completedAt??0}|${e.result?.session_id??""}|${e.result?.num_turns??0}|${e.killReason}`;return this.lastTerminalWakeMarkers.get(e.id)===r?!1:(this.lastTerminalWakeMarkers.set(e.id,r),!0)}triggerTurnCompleteEventWithSignal(e){this.lifecycle.emitTurnComplete(e)}resolve(e){return this.references.resolveActive(e)}get(e){return this.registry.get(e)}list(e){let r=this.registry.list();return e&&e!=="all"&&(r=r.filter(n=>n.status===e)),r.sort((n,o)=>o.startedAt-n.startedAt)}kill(e,r){let n=this.registry.get(e);if(!n)return!1;if(n.pendingPlanApproval){this.clearPlanDecisionTokens(n.id);let o={lifecycle:"terminal",runtimeState:"stopped",pendingPlanApproval:!1,planApprovalContext:void 0,approvalState:n.approvalState==="pending"?"rejected":n.approvalState,planDecisionVersion:(n.planDecisionVersion??0)+1,actionablePlanDecisionVersion:void 0,canonicalPlanPromptVersion:void 0,approvalPromptRequiredVersion:void 0,approvalPromptVersion:void 0,approvalPromptStatus:"not_sent",approvalPromptTransport:"none",approvalPromptMessageKind:"none",approvalPromptLastAttemptAt:void 0,approvalPromptDeliveredAt:void 0,approvalPromptFailedAt:void 0};n.applyControlPatch(o),Object.assign(n,o),this.updatePersistedSession(n.id,o)}return n.kill(r??"user"),!0}killAll(e="user"){for(let r of this.sessions.values())nR.has(r.status)&&this.kill(r.id,e)}resolveBackendConversationId(e){return this.references.resolveBackendConversationId(e)}resolveHarnessSessionId(e){return this.resolveBackendConversationId(e)}getPersistedSession(e){return this.references.getPersistedSession(e)}isAlreadyMerged(e){if(!e)return!1;let r=this.store.getPersistedSession(e);return r?.worktreeMerged===!0||r?.worktreeLifecycle?.state==="merged"||r?.worktreeLifecycle?.state==="released"}async enqueueMerge(e,r,n){return this.mergeQueue.enqueue(e,r,n)}updatePersistedSession(e,r){let n=this.stateSync.applySessionPatch(e,r);return n&&this.onPersistedSessionChanged(this.store.getPersistedSession(e)),n}listPersistedSessions(){return this.store.listPersistedSessions()}async handleAskUserQuestion(e,r){let n=this.sessions.get(e);if(!n)throw new Error(`Session "${e}" not found for AskUserQuestion intercept`);return this.questions.handleAskUserQuestion(n,r)}resolveAskUserQuestion(e,r){this.questions.resolveAskUserQuestion(e,r)}async resolvePendingInputOption(e,r){let n=this.sessions.get(e);return n&&await n.submitPendingInputOption(r)?(this.lastWaitingEventTimestamps.delete(e),!0):(this.questions.resolveAskUserQuestion(e,r),!0)}dispose(){this.disposeMaintenance(),this.questions.dispose(),this.notifications.dispose()}};le();ze();var wg=class{#t;#r;#e=new Map;constructor(t){this.#t=Pg(t,1),this.#r=this.#t}get maxEntries(){return this.#r}get size(){return this.#e.size}setMaxEntriesForTest(t){this.#r=typeof t=="number"?Pg(t,this.#t):this.#t,this.#n()}clear(){this.#e.clear()}get(t){let e=this.getResult(t);return e.hit?e.value:void 0}getResult(t){if(!this.#e.has(t))return{hit:!1};let e=this.#e.get(t);return this.#e.delete(t),this.#e.set(t,e),{hit:!0,value:e}}set(t,e){this.#e.has(t)&&this.#e.delete(t),this.#e.set(t,e),this.#n()}#n(){for(;this.#e.size>this.#r;){let t=this.#e.keys().next();if(t.done)break;this.#e.delete(t.value)}}};function Pg(t,e){return!Number.isFinite(t)||t<=0?e:Math.max(1,Math.floor(t))}var iR="\\x1b\\[[\\x20-\\x3f]*[\\x40-\\x7e]",sR="\\x1b\\][^\\x07\\x1b]*(?:\\x1b\\\\|\\x07)",qU=new RegExp(iR,"g"),BU=new RegExp(sR,"g"),UU=typeof Intl<"u"&&"Segmenter"in Intl?new Intl.Segmenter(void 0,{granularity:"grapheme"}):null;var ee={};Tt(ee,{Match:()=>aR});function aR(t,e){return e[t.length]?.(...t)??(()=>{throw Error("Invalid Arguments")})()}var s={};Tt(s,{Entries:()=>ER,EntriesRegExp:()=>CR,Every:()=>AR,EveryAll:()=>TR,GraphemeCount:()=>wR,HasPropertyKey:()=>RR,IsArray:()=>Xo,IsAsyncIterator:()=>cR,IsBigInt:()=>Zo,IsBoolean:()=>Eg,IsClassInstance:()=>xR,IsConstructor:()=>fR,IsDeepEqual:()=>ed,IsEqual:()=>J,IsFunction:()=>$g,IsGreaterEqualThan:()=>Og,IsGreaterThan:()=>SR,IsInteger:()=>Zp,IsIterator:()=>gR,IsLessEqualThan:()=>Mg,IsLessThan:()=>kR,IsMaxLength:()=>vR,IsMinLength:()=>bR,IsMultipleOf:()=>IR,IsNull:()=>wa,IsNumber:()=>va,IsObject:()=>mn,IsObjectNotArray:()=>hR,IsString:()=>ba,IsSymbol:()=>yR,IsUndefined:()=>Xp,IsUnsafePropertyKey:()=>_g,IsValueLike:()=>PR,Keys:()=>Pa,Symbols:()=>$R,TakeLeft:()=>Aa,Values:()=>MR});function Cr(t,e,r){return t>=e&&t<=r}function vg(t){return Cr(t,127462,127487)}function uR(t){return Cr(t,65024,65039)}function pR(t){return Cr(t,768,879)||Cr(t,6832,6911)||Cr(t,7616,7679)||Cr(t,65056,65071)}function xa(t){return t>65535?2:1}function bg(t,e){for(;e<t.length;){let r=t.codePointAt(e);if(pR(r)||uR(r))e+=xa(r);else break}return e}function Yp(t,e){let r=t.codePointAt(e),n=e+xa(r);for(n=bg(t,n);n<t.length-1&&t[n]==="\u200D";){let o=t.codePointAt(n+1);n+=1+xa(o),n=bg(t,n)}return vg(r)&&n<t.length&&vg(t.codePointAt(n))&&(n+=xa(t.codePointAt(n))),n}function Ag(t){return Cr(t,55296,56319)||Cr(t,768,879)||t===8205}function Tg(t){let e=0,r=0;for(;r<t.length;)r=Yp(t,r),e++;return e}function dR(t,e){if(e===0)return!0;let r=0,n=0;for(;n<t.length;)if(n=Yp(t,n),r++,r>=e)return!0;return!1}function lR(t,e){let r=0,n=0;for(;n<t.length;)if(n=Yp(t,n),r++,r>e)return!1;return!0}function Rg(t,e){if(e===0)return!0;let r=0;for(;r<t.length;){if(Ag(t.charCodeAt(r)))return dR(t,e);if(r++,r>=e)return!0}return!1}function Cg(t,e){let r=0;for(;r<t.length;){if(Ag(t.charCodeAt(r)))return lR(t,e);if(r++,r>e)return!1}return!0}function Xo(t){return Array.isArray(t)}function cR(t){return mn(t)&&Symbol.asyncIterator in t}function Zo(t){return J(typeof t,"bigint")}function Eg(t){return J(typeof t,"boolean")}function fR(t){if(Xp(t)||!$g(t))return!1;let e=Function.prototype.toString.call(t);return!!(/^class\s/.test(e)||/\[native code\]/.test(e))}function $g(t){return J(typeof t,"function")}function Zp(t){return Number.isInteger(t)}function gR(t){return mn(t)&&Symbol.iterator in t}function wa(t){return J(t,null)}function va(t){return Number.isFinite(t)}function hR(t){return mn(t)&&!Xo(t)}function mn(t){return J(typeof t,"object")&&!wa(t)}function ba(t){return J(typeof t,"string")}function yR(t){return J(typeof t,"symbol")}function Xp(t){return J(t,void 0)}function J(t,e){return t===e}function SR(t,e){return t>e}function kR(t,e){return t<e}function Mg(t,e){return t<=e}function Og(t,e){return t>=e}function IR(t,e){if(Zo(t)||Zo(e))return BigInt(t)%BigInt(e)===0n;let r=1e-10;if(!va(t)||Zp(t)&&1/e%1===0)return!0;let n=t%e;return Math.min(Math.abs(n),Math.abs(n-e))<r}function xR(t){if(!mn(t))return!1;let e=globalThis.Object.getPrototypeOf(t);return wa(e)?!1:J(typeof e.constructor,"function")&&!(J(e.constructor,globalThis.Object)||J(e.constructor.name,"Object"))}function PR(t){return Zo(t)||Eg(t)||wa(t)||va(t)||ba(t)||Xp(t)}function wR(t){return Tg(t)}function vR(t,e){return Cg(t,e)}function bR(t,e){return Rg(t,e)}function AR(t,e,r){for(let n=e;n<t.length;n++)if(!r(t[n],n))return!1;return!0}function TR(t,e,r){let n=!0;for(let o=e;o<t.length;o++)r(t[o],o)||(n=!1);return n}function Aa(t,e,r){return J(t.length,0)?r():e(t[0],t.slice(1))}function _g(t){return J(t,"__proto__")||J(t,"constructor")||J(t,"prototype")}function RR(t,e){return _g(e)?Object.prototype.hasOwnProperty.call(t,e):e in t}function CR(t){return Pa(t).map(e=>[new RegExp(`^${e}$`),t[e]])}function ER(t){return Object.entries(t)}function Pa(t){return Object.getOwnPropertyNames(t)}function $R(t){return Object.getOwnPropertySymbols(t)}function MR(t){return Object.values(t)}function OR(t,e){if(!mn(e))return!1;let r=Pa(t);return J(r.length,Pa(e).length)&&r.every(n=>ed(t[n],e[n]))}function _R(t,e){return Xo(e)&&J(t.length,e.length)&&t.every((r,n)=>ed(t[n],e[n]))}function ed(t,e){return Xo(t)?_R(t,e):mn(t)?OR(t,e):J(t,e)}var nt={};Tt(nt,{IsBigInt64Array:()=>zR,IsBigUint64Array:()=>JR,IsBoolean:()=>DR,IsDate:()=>YR,IsFloat32Array:()=>VR,IsFloat64Array:()=>HR,IsInt16Array:()=>KR,IsInt32Array:()=>WR,IsInt8Array:()=>qR,IsMap:()=>XR,IsNumber:()=>FR,IsRegExp:()=>QR,IsSet:()=>ZR,IsString:()=>LR,IsTypeArray:()=>NR,IsUint16Array:()=>jR,IsUint32Array:()=>GR,IsUint8Array:()=>BR,IsUint8ClampedArray:()=>UR});function DR(t){return t instanceof Boolean}function FR(t){return t instanceof Number}function LR(t){return t instanceof String}function NR(t){return globalThis.ArrayBuffer.isView(t)}function qR(t){return t instanceof globalThis.Int8Array}function BR(t){return t instanceof globalThis.Uint8Array}function UR(t){return t instanceof globalThis.Uint8ClampedArray}function KR(t){return t instanceof globalThis.Int16Array}function jR(t){return t instanceof globalThis.Uint16Array}function WR(t){return t instanceof globalThis.Int32Array}function GR(t){return t instanceof globalThis.Uint32Array}function VR(t){return t instanceof globalThis.Float32Array}function HR(t){return t instanceof globalThis.Float64Array}function zR(t){return t instanceof globalThis.BigInt64Array}function JR(t){return t instanceof globalThis.BigUint64Array}function QR(t){return t instanceof globalThis.RegExp}function YR(t){return t instanceof globalThis.Date}function ZR(t){return t instanceof globalThis.Set}function XR(t){return t instanceof globalThis.Map}function tC(t){return s.IsObject(t)&&s.HasPropertyKey(t,"check")&&s.HasPropertyKey(t,"errors")&&s.IsFunction(t.check)&&s.IsFunction(t.errors)}function td(t){return s.HasPropertyKey(t,"~guard")&&tC(t["~guard"])}function rd(t){return s.HasPropertyKey(t,"~refine")&&s.IsArray(t["~refine"])&&s.Every(t["~refine"],0,e=>s.IsObject(e)&&s.HasPropertyKey(e,"check")&&s.HasPropertyKey(e,"error")&&s.IsFunction(e.check)&&s.IsFunction(e.error))}function Mt(t){return s.IsObject(t)&&!s.IsArray(t)}function Ta(t){return s.IsBoolean(t)}function M(t){return Mt(t)||Ta(t)}function nd(t){return s.HasPropertyKey(t,"additionalItems")&&M(t.additionalItems)}function sr(t){return s.HasPropertyKey(t,"additionalProperties")&&M(t.additionalProperties)}function od(t){return s.HasPropertyKey(t,"allOf")&&s.IsArray(t.allOf)&&t.allOf.every(e=>M(e))}function ei(t){return s.HasPropertyKey(t,"$anchor")&&s.IsString(t.$anchor)}function id(t){return s.HasPropertyKey(t,"anyOf")&&s.IsArray(t.anyOf)&&t.anyOf.every(e=>M(e))}function sd(t){return s.HasPropertyKey(t,"const")}function cn(t){return s.HasPropertyKey(t,"contains")&&M(t.contains)}function ar(t){return s.HasPropertyKey(t,"default")}function ad(t){return s.HasPropertyKey(t,"dependencies")&&s.IsObject(t.dependencies)&&Object.values(t.dependencies).every(e=>M(e)||s.IsArray(e)&&e.every(r=>s.IsString(r)))}function ud(t){return s.HasPropertyKey(t,"dependentRequired")&&s.IsObject(t.dependentRequired)&&Object.values(t.dependentRequired).every(e=>s.IsArray(e)&&e.every(r=>s.IsString(r)))}function pd(t){return s.HasPropertyKey(t,"dependentSchemas")&&s.IsObject(t.dependentSchemas)&&Object.values(t.dependentSchemas).every(e=>M(e))}function Er(t){return s.HasPropertyKey(t,"$dynamicAnchor")&&s.IsString(t.$dynamicAnchor)}function dd(t){return s.HasPropertyKey(t,"$dynamicRef")&&s.IsString(t.$dynamicRef)}function ld(t){return s.HasPropertyKey(t,"else")&&M(t.else)}function md(t){return s.HasPropertyKey(t,"enum")&&s.IsArray(t.enum)}function cd(t){return s.HasPropertyKey(t,"exclusiveMaximum")&&(s.IsNumber(t.exclusiveMaximum)||s.IsBigInt(t.exclusiveMaximum))}function Yn(t){return s.HasPropertyKey(t,"exclusiveMinimum")&&(s.IsNumber(t.exclusiveMinimum)||s.IsBigInt(t.exclusiveMinimum))}function Ra(t){return s.HasPropertyKey(t,"format")&&s.IsString(t.format)}function ur(t){return s.HasPropertyKey(t,"$id")&&s.IsString(t.$id)}function fd(t){return s.HasPropertyKey(t,"if")&&M(t.if)}function Zn(t){return s.HasPropertyKey(t,"items")&&(M(t.items)||s.IsArray(t.items)&&t.items.every(e=>M(e)))}function gd(t){return Zn(t)&&s.IsArray(t.items)}function hd(t){return s.HasPropertyKey(t,"maximum")&&(s.IsNumber(t.maximum)||s.IsBigInt(t.maximum))}function yd(t){return s.HasPropertyKey(t,"maxContains")&&s.IsNumber(t.maxContains)}function Ca(t){return s.HasPropertyKey(t,"maxItems")&&s.IsNumber(t.maxItems)}function Sd(t){return s.HasPropertyKey(t,"maxLength")&&s.IsNumber(t.maxLength)}function kd(t){return s.HasPropertyKey(t,"maxProperties")&&s.IsNumber(t.maxProperties)}function Xn(t){return s.HasPropertyKey(t,"minimum")&&(s.IsNumber(t.minimum)||s.IsBigInt(t.minimum))}function fn(t){return s.HasPropertyKey(t,"minContains")&&s.IsNumber(t.minContains)}function ti(t){return s.HasPropertyKey(t,"minItems")&&s.IsNumber(t.minItems)}function Ea(t){return s.HasPropertyKey(t,"minLength")&&s.IsNumber(t.minLength)}function $a(t){return s.HasPropertyKey(t,"minProperties")&&s.IsNumber(t.minProperties)}function Id(t){return s.HasPropertyKey(t,"multipleOf")&&(s.IsNumber(t.multipleOf)||s.IsBigInt(t.multipleOf))}function xd(t){return s.HasPropertyKey(t,"not")&&M(t.not)}function Pd(t){return s.HasPropertyKey(t,"oneOf")&&s.IsArray(t.oneOf)&&t.oneOf.every(e=>M(e))}function Ma(t){return s.HasPropertyKey(t,"pattern")&&(s.IsString(t.pattern)||t.pattern instanceof RegExp)}function ri(t){return s.HasPropertyKey(t,"patternProperties")&&s.IsObject(t.patternProperties)&&Object.values(t.patternProperties).every(e=>M(e))}function eo(t){return s.HasPropertyKey(t,"prefixItems")&&s.IsArray(t.prefixItems)&&t.prefixItems.every(e=>M(e))}function ni(t){return s.HasPropertyKey(t,"properties")&&s.IsObject(t.properties)&&Object.values(t.properties).every(e=>M(e))}function wd(t){return s.HasPropertyKey(t,"propertyNames")&&(s.IsObject(t.propertyNames)||M(t.propertyNames))}function rC(t){return s.HasPropertyKey(t,"$recursiveAnchor")&&s.IsBoolean(t.$recursiveAnchor)}function Oa(t){return rC(t)&&s.IsEqual(t.$recursiveAnchor,!0)}function vd(t){return s.HasPropertyKey(t,"$recursiveRef")&&s.IsString(t.$recursiveRef)}function bd(t){return s.HasPropertyKey(t,"$ref")&&s.IsString(t.$ref)}function gn(t){return s.HasPropertyKey(t,"required")&&s.IsArray(t.required)&&t.required.every(e=>s.IsString(e))}function Ad(t){return s.HasPropertyKey(t,"then")&&M(t.then)}function Td(t){return s.HasPropertyKey(t,"type")&&(s.IsString(t.type)||s.IsArray(t.type)&&t.type.every(e=>s.IsString(e)))}function oi(t){return s.HasPropertyKey(t,"uniqueItems")&&s.IsBoolean(t.uniqueItems)}function _a(t){return s.HasPropertyKey(t,"unevaluatedItems")&&M(t.unevaluatedItems)}function Da(t){return s.HasPropertyKey(t,"unevaluatedProperties")&&M(t.unevaluatedProperties)}var ot=class{constructor(){let e=new Set,r=new Set;this.stack=[{indices:e,keys:r}]}Push(){let e=new Set,r=new Set;return this.stack.push({indices:e,keys:r}),!0}Pop(){return this.stack.pop(),!0}AddIndex(e){return this.GetIndices().add(e),!0}AddKey(e){return this.GetKeys().add(e),!0}GetIndices(){return this.stack[this.stack.length-1].indices}GetKeys(){return this.stack[this.stack.length-1].keys}Merge(e){for(let r of e)r.GetIndices().forEach(n=>this.GetIndices().add(n)),r.GetKeys().forEach(n=>this.GetKeys().add(n));return!0}},ii=class extends ot{constructor(e){super(),this.callback=e}AddError(e){return this.callback(e),!1}},De=class extends ii{constructor(){super(e=>this.errors.push(e)),this.errors=[]}AddError(e){return this.errors.push(e),!1}GetErrors(){return this.errors}};function Dg(t,e,r,n){return r["~guard"].check(n)}function Fg(t,e,r,n,o,i){return o["~guard"].check(i)||e.AddError({keyword:"~guard",schemaPath:r,instancePath:n,params:{errors:o["~guard"].errors(i)}})}var Mr={};Tt(Mr,{Hash:()=>IC,HashCode:()=>Kg});function Y(){throw new Error("Unreachable")}function nC(t){let e=new Set,r=t;for(;r&&r!==Object.prototype;){for(let n of Reflect.ownKeys(r))n!=="constructor"&&typeof n!="symbol"&&e.add(n);r=Object.getPrototypeOf(r)}return[...e]}function oC(t){return typeof t=="number"}var it;(function(t){t[t.Array=0]="Array",t[t.BigInt=1]="BigInt",t[t.Boolean=2]="Boolean",t[t.Date=3]="Date",t[t.Constructor=4]="Constructor",t[t.Function=5]="Function",t[t.Null=6]="Null",t[t.Number=7]="Number",t[t.Object=8]="Object",t[t.RegExp=9]="RegExp",t[t.String=10]="String",t[t.Symbol=11]="Symbol",t[t.TypeArray=12]="TypeArray",t[t.Undefined=13]="Undefined"})(it||(it={}));var ro=BigInt("14695981039346656037"),[iC,sC]=[BigInt("1099511628211"),BigInt("18446744073709551616")],aC=Array.from({length:256}).map((t,e)=>BigInt(e)),qg=new Float64Array(1),Bg=new DataView(qg.buffer),Ug=new Uint8Array(qg.buffer);function Ue(t){ro=ro^aC[t],ro=ro*iC%sC}function uC(t){Ue(it.Array);for(let e of t)$r(e)}function pC(t){Ue(it.BigInt),Bg.setBigInt64(0,t);for(let e of Ug)Ue(e)}function Lg(t){Ue(it.Boolean),Ue(t?1:0)}function dC(t){Ue(it.Constructor),$r(t.toString())}function lC(t){Ue(it.Date),$r(t.getTime())}function mC(t){Ue(it.Function),$r(t.toString())}function cC(t){Ue(it.Null)}function Ng(t){Ue(it.Number),Bg.setFloat64(0,t,!0);for(let e of Ug)Ue(e)}function fC(t){Ue(it.Object);for(let e of nC(t).sort())$r(e),$r(t[e])}function gC(t){Ue(it.RegExp),Rd(t.toString())}var hC=new TextEncoder;function Rd(t){Ue(it.String);for(let e of hC.encode(t))Ue(e)}function yC(t){Ue(it.Symbol),$r(t.toString())}function SC(t){Ue(it.TypeArray);let e=new Uint8Array(t.buffer);for(let r=0;r<e.length;r++)Ue(e[r])}function kC(t){return Ue(it.Undefined)}function $r(t){return nt.IsTypeArray(t)?SC(t):nt.IsDate(t)?lC(t):nt.IsRegExp(t)?gC(t):nt.IsBoolean(t)?Lg(t.valueOf()):nt.IsString(t)?Rd(t.valueOf()):nt.IsNumber(t)?Ng(t.valueOf()):oC(t)?Ng(t):s.IsArray(t)?uC(t):s.IsBoolean(t)?Lg(t):s.IsBigInt(t)?pC(t):s.IsConstructor(t)?dC(t):s.IsNull(t)?cC(t):s.IsObject(t)?fC(t):s.IsString(t)?Rd(t):s.IsSymbol(t)?yC(t):s.IsUndefined(t)?kC(t):s.IsFunction(t)?mC(t):Y()}function Kg(t){return ro=BigInt("14695981039346656037"),$r(t),ro}function IC(t){return Kg(t).toString(16).padStart(16,"0")}function jg(t,e,r,n){return s.Every(r["~refine"],0,(o,i)=>o.check(n))}function Wg(t,e,r,n,o,i){return s.EveryAll(o["~refine"],0,(a,u)=>a.check(i)||e.AddError({keyword:"~refine",schemaPath:r,instancePath:n,params:{index:u,message:a.error(i)}}))}function Gg(t){return Zn(t)&&s.IsArray(t.items)}function Vg(t,e,r,n){return Gg(r)?n.every((i,a)=>s.IsLessThan(a,r.items.length)||Pt(t,e,r.additionalItems,i)&&e.AddIndex(a)):!0}function Hg(t,e,r,n,o,i){return Gg(o)?i.every((u,p)=>{let d=`${r}/additionalItems`,l=`${n}/${p}`;return s.IsLessThan(p,o.items.length)||wt(t,e,d,l,o.additionalItems,u)&&e.AddIndex(p)}):!0}function xC(t){return`^${t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}$`}function zg(t){let e=[];return ri(t)&&e.push(...s.Keys(t.patternProperties)),ni(t)&&e.push(...s.Keys(t.properties).map(xC)),s.IsEqual(e.length,0)?"(?!)":`(${e.join("|")})`}function Jg(t,e,r,n){let o=new RegExp(zg(r));return s.Every(s.Keys(n),0,(a,u)=>o.test(a)||Pt(t,e,r.additionalProperties,n[a])&&e.AddKey(a))}function Qg(t,e,r,n,o,i){let a=new RegExp(zg(o)),u=[];return s.EveryAll(s.Keys(i),0,(d,l)=>{let m=`${r}/additionalProperties`,c=`${n}/${d}`,h=new De,y=a.test(d)||wt(t,h,m,c,o.additionalProperties,i[d])&&e.AddKey(d);return y||u.push(d),y})||e.AddError({keyword:"additionalProperties",schemaPath:r,instancePath:n,params:{additionalProperties:u}})}function Yg(t,e,r,n){let o=r.allOf.reduce((i,a)=>{let u=new ot;return z(t,u,a,n)?[...i,u]:i},[]);return s.IsEqual(o.length,r.allOf.length)&&e.Merge(o)}function Zg(t,e,r,n,o,i){let a=[],u=o.allOf.reduce((d,l,m)=>{let c=`${r}/allOf/${m}`,h=new De,y=pe(t,h,c,n,l,i);return y||a.push(h),y?[...d,h]:d},[]),p=s.IsEqual(u.length,o.allOf.length)&&e.Merge(u);return p||a.forEach(d=>d.GetErrors().forEach(l=>e.AddError(l))),p}function Xg(t,e,r,n){let o=r.anyOf.reduce((i,a)=>{let u=new ot;return z(t,u,a,n)?[...i,u]:i},[]);return s.IsGreaterThan(o.length,0)&&e.Merge(o)}function eh(t,e,r,n,o,i){let a=[],u=o.anyOf.reduce((d,l,m)=>{let c=new De,h=`${r}/anyOf/${m}`,y=pe(t,c,h,n,l,i);return y||a.push(c),y?[...d,c]:d},[]),p=s.IsGreaterThan(u.length,0)&&e.Merge(u);return p||a.forEach(d=>d.GetErrors().forEach(l=>e.AddError(l))),p||e.AddError({keyword:"anyOf",schemaPath:r,instancePath:n,params:{}})}function Ed(t,e,r,n){return r}function th(t,e,r,n,o,i){return Ed(t,e,o,i)||e.AddError({keyword:"boolean",schemaPath:r,instancePath:n,params:{}})}function $d(t,e,r,n){return s.IsValueLike(r.const)?s.IsEqual(n,r.const):s.IsDeepEqual(n,r.const)}function rh(t,e,r,n,o,i){return $d(t,e,o,i)||e.AddError({keyword:"const",schemaPath:r,instancePath:n,params:{allowedValue:o.const}})}function PC(t){return!(fn(t)&&s.IsEqual(t.minContains,0))}function Md(t,e,r,n){return PC(r)?!s.IsEqual(n.length,0)&&n.some(o=>z(t,e,r.contains,o)):!0}function nh(t,e,r,n,o,i){return Md(t,e,o,i)||e.AddError({keyword:"contains",schemaPath:r,instancePath:n,params:{minContains:1}})}function oh(t,e,r,n){let o=s.IsEqual(s.Keys(n).length,0),i=s.Every(s.Entries(r.dependencies),0,([a,u])=>!s.HasPropertyKey(n,a)||(s.IsArray(u)?u.every(p=>s.HasPropertyKey(n,p)):z(t,e,u,n)));return o||i}function ih(t,e,r,n,o,i){let a=s.IsEqual(s.Keys(i).length,0),u=s.EveryAll(s.Entries(o.dependencies),0,([p,d])=>{let l=`${r}/dependencies/${p}`;return!s.HasPropertyKey(i,p)||(s.IsArray(d)?d.every(m=>s.HasPropertyKey(i,m)||e.AddError({keyword:"dependencies",schemaPath:r,instancePath:n,params:{property:p,dependencies:d}})):pe(t,e,l,n,d,i))});return a||u}function sh(t,e,r,n){let o=s.IsEqual(s.Keys(n).length,0),i=s.Every(s.Entries(r.dependentRequired),0,([a,u])=>!s.HasPropertyKey(n,a)||u.every(p=>s.HasPropertyKey(n,p)));return o||i}function ah(t,e,r,n,o,i){let a=s.IsEqual(s.Keys(i).length,0),u=s.EveryAll(s.Entries(o.dependentRequired),0,([p,d])=>!s.HasPropertyKey(i,p)||s.EveryAll(d,0,l=>s.HasPropertyKey(i,l)||e.AddError({keyword:"dependentRequired",schemaPath:r,instancePath:n,params:{property:p,dependencies:d}})));return a||u}function uh(t,e,r,n){let o=s.IsEqual(s.Keys(n).length,0),i=s.Every(s.Entries(r.dependentSchemas),0,([a,u])=>!s.HasPropertyKey(n,a)||z(t,e,u,n));return o||i}function ph(t,e,r,n,o,i){let a=s.IsEqual(s.Keys(i).length,0),u=s.EveryAll(s.Entries(o.dependentSchemas),0,([p,d])=>{let l=`${r}/dependentSchemas/${p}`;return!s.HasPropertyKey(i,p)||pe(t,e,l,n,d,i)});return a||u}function dh(t,e,r,n){let o=t.DynamicRef(r)??!1;return M(o)&&z(t,e,o,n)}function lh(t,e,r,n,o,i){let a=t.DynamicRef(o)??!1;return M(a)&&pe(t,e,"#",n,a,i)}function Dd(t,e,r,n){return r.enum.some(o=>s.IsValueLike(o)?s.IsEqual(n,o):s.IsDeepEqual(n,o))}function mh(t,e,r,n,o,i){return Dd(t,e,o,i)||e.AddError({keyword:"enum",schemaPath:r,instancePath:n,params:{allowedValues:o.enum}})}function Fd(t,e,r,n){return s.IsLessThan(n,r.exclusiveMaximum)}function ch(t,e,r,n,o,i){return Fd(t,e,o,i)||e.AddError({keyword:"exclusiveMaximum",schemaPath:r,instancePath:n,params:{comparison:"<",limit:o.exclusiveMaximum}})}function Ld(t,e,r,n){return s.IsGreaterThan(n,r.exclusiveMinimum)}function fh(t,e,r,n,o,i){return Ld(t,e,o,i)||e.AddError({keyword:"exclusiveMinimum",schemaPath:r,instancePath:n,params:{comparison:">",limit:o.exclusiveMinimum}})}var yn={};Tt(yn,{Clear:()=>vh,Entries:()=>oE,Get:()=>aE,Has:()=>sE,IsDate:()=>no,IsDateTime:()=>Fa,IsDuration:()=>La,IsEmail:()=>Na,IsHostname:()=>qa,IsIPv4:()=>Ka,IsIPv6:()=>ja,IsIdnEmail:()=>Ba,IsIdnHostname:()=>Ua,IsIri:()=>Ga,IsIriReference:()=>Wa,IsJsonPointer:()=>Ha,IsJsonPointerUriFragment:()=>Va,IsRegex:()=>za,IsRelativeJsonPointer:()=>Ja,IsTime:()=>oo,IsUri:()=>Xa,IsUriReference:()=>Qa,IsUriTemplate:()=>Ya,IsUrl:()=>eu,IsUuid:()=>tu,Reset:()=>bh,Set:()=>iE,Test:()=>uE});var wC=[0,31,28,31,30,31,30,31,31,30,31,30,31],vC=/^(\d\d\d\d)-(\d\d)-(\d\d)$/;function bC(t){return t%4===0&&(t%100!==0||t%400===0)}function no(t){let e=vC.exec(t);if(!e)return!1;let r=+e[1],n=+e[2],o=+e[3];return n>=1&&n<=12&&o>=1&&o<=(n===2&&bC(r)?29:wC[n])}var AC=/^(\d\d):(\d\d):(\d\d(?:\.\d+)?)(?:Z|([+-])(\d\d):(\d\d))?$/i;function oo(t,e=!0){let r=AC.exec(t);if(!r)return!1;let n=+r[1],o=+r[2],i=+r[3],a=r[4]==="-"?-1:1,u=+(r[5]||0),p=+(r[6]||0);if(u>23||p>59||e&&!r[4]&&t.toLowerCase().indexOf("z")===-1)return!1;if(n<=23&&o<=59&&i<60)return!0;let d=o-p*a,l=n-u*a-(d<0?1:0);return(l===23||l===-1)&&(d===59||d===-1)&&i<61}function Fa(t,e=!0){let r=t.split(/T/i);return r.length===2&&no(r[0])&&oo(r[1],e)}var TC=/^P((\d+Y(\d+M(\d+D)?)?|\d+M(\d+D)?|\d+D)(T(\d+H(\d+M(\d+S)?)?|\d+M(\d+S)?|\d+S))?|T(\d+H(\d+M(\d+S)?)?|\d+M(\d+S)?|\d+S)|\d+W)$/;function La(t){return TC.test(t)}var RC=/^(?!.*\.\.)[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i;function Na(t){return RC.test(t)}function CC(t,e,r){t=r?Math.floor(t/700):t>>1,t+=Math.floor(t/e);let n=0;for(;t>455;)t=Math.floor(t/35),n+=36;return n+Math.floor(36*t/(t+38))}function gh(t){let e=[],r=128,n=0,o=72,i=t.lastIndexOf("-");if(i>0)for(let u=0;u<i;u++){let p=t.charCodeAt(u);if(p>=128)throw new Error("Invalid punycode: non-basic before delimiter");e.push(p)}let a=i<0?0:i+1;for(;a<t.length;){let u=n,p=1,d=36;for(;;){if(a>=t.length)throw new Error("Invalid punycode: unexpected end of input");let m=t.charCodeAt(a++),c;if(m>=97&&m<=122)c=m-97;else if(m>=48&&m<=57)c=m-48+26;else if(m>=65&&m<=90)c=m-65;else throw new Error("Invalid punycode: bad digit character");n+=c*p;let h=d<=o?1:d>=o+26?26:d-o;if(c<h)break;p*=36-h,d+=36}let l=e.length+1;o=CC(n-u,l,u===0),r+=Math.floor(n/l),n%=l,e.splice(n,0,r),n++}return globalThis.String.fromCodePoint(...e)}function $C(t){return new RegExp("\\p{Mn}","u").test(String.fromCodePoint(t))}function MC(t){return new RegExp("\\p{Mc}","u").test(String.fromCodePoint(t))}function OC(t){return new RegExp("\\p{Me}","u").test(String.fromCodePoint(t))}function _C(t){return $C(t)||MC(t)||OC(t)}var DC=new Set([1600,2042,12334,12335,12337,12338,12339,12340,12341,12347]),FC=new Set([2381,2509,2637,2765,2893,3021,3149,3277,3387,3388,3405,3530,6980,7082,7083,43456,69702,69759,69817,69939,69940,70080,70197,70477,70722,70850,71103,71231,71350,72767,73028,73029]);function LC(t){return new RegExp("\\p{Script=Greek}","u").test(String.fromCodePoint(t))}function NC(t){return new RegExp("\\p{Script=Hebrew}","u").test(String.fromCodePoint(t))}function qC(t){return new RegExp("\\p{Script=Hiragana}","u").test(String.fromCodePoint(t))}function BC(t){return new RegExp("\\p{Script=Katakana}","u").test(String.fromCodePoint(t))}function UC(t){return new RegExp("\\p{Script=Han}","u").test(String.fromCodePoint(t))}function KC(t){return t>=1632&&t<=1641}function jC(t){return t>=1776&&t<=1785}function WC(t){return FC.has(t)}function hh(t){if(t.length===0)return!1;let e=[...t].map(a=>a.codePointAt(0)),r=e.length;if(e[0]===45||e[r-1]===45||r>=4&&e[2]===45&&e[3]===45||_C(e[0]))return!1;let n=!1,o=!1,i=!1;for(let a=0;a<r;a++){let u=e[a];if(DC.has(u))return!1;(qC(u)||BC(u)||UC(u))&&(n=!0),KC(u)&&(o=!0),jC(u)&&(i=!0);let p=e[a-1],d=e[a+1];switch(u){case 183:if(p!==108||d!==108)return!1;break;case 885:if(d===void 0||!LC(d))return!1;break;case 1523:case 1524:if(p===void 0||!NC(p))return!1;break;case 8205:if(p===void 0||!WC(p))return!1;break;case 12539:break}}return!(t.includes("\u30FB")&&!n||o&&i)}function GC(t){if(t.charCodeAt(0)===45||t.charCodeAt(t.length-1)===45||t.length>=4&&t.charCodeAt(2)===45&&t.charCodeAt(3)===45)return!1;for(let e=0;e<t.length;e++){let r=t.charCodeAt(e);if(!(r>=97&&r<=122||r>=65&&r<=90||r>=48&&r<=57||r===45))return!1}return!0}function yh(t){return t.toLowerCase().startsWith("xn--")}function Sh(t){try{return hh(gh(t.slice(4)))}catch{return!1}}function kh(t){return t.length===0||t.length>63?!1:yh(t)?Sh(t):hh(t)}function Ih(t){return t.length===0||t.length>63?!1:yh(t)?Sh(t):GC(t)}function qa(t){if(t.length===0||t.length>253||t.charCodeAt(t.length-1)===46)return!1;for(let e of t.split("."))if(!Ih(e))return!1;return!0}var HC=/^(?!.*\.\.)[\p{L}\p{N}!#$%&'*+/=?^_`{|}~-]+(?:\.[\p{L}\p{N}!#$%&'*+/=?^_`{|}~-]+)*@[\p{L}\p{N}](?:[\p{L}\p{N}-]{0,61}[\p{L}\p{N}])?(?:\.[\p{L}\p{N}](?:[\p{L}\p{N}-]{0,61}[\p{L}\p{N}])?)*$/iu;function Ba(t){return HC.test(t)}function Ua(t){if(t.length===0||t.includes(" "))return!1;let e=t.normalize("NFC").replace(/[\u002E\u3002\uFF0E\uFF61]/g,".");if(e.length>253)return!1;for(let r of e.split("."))if(!kh(r))return!1;return!0}function Nd(t,e,r){let n=0,o=0,i=0,a=0;for(let u=e;u<r;u++){let p=t.charCodeAt(u);if(p===46){if(i===0||o>255||a===48&&i>1)return!1;n++,o=0,i=0,a=0}else if(p>=48&&p<=57)i===0&&(a=p),o=o*10+(p-48),i++;else return!1}return n===3&&i>0&&o<=255&&!(a===48&&i>1)}function Ka(t){return Nd(t,0,t.length)}function zC(t){return t>=48&&t<=57||t>=65&&t<=70||t>=97&&t<=102}function ja(t){let e=t.length;if(e===0)return!1;let r=0,n=!1,o=0;if(t.charCodeAt(0)===58&&t.charCodeAt(1)===58){if(e===2)return!0;n=!0,o=2}for(;o<e;){let i=0,a=o;for(;o<e&&zC(t.charCodeAt(o));)o++,i++;if(i===0)return!1;let u=t.charCodeAt(o);if(u===46){if(!Nd(t,a,e))return!1;r+=2,o=e;break}if(i>4)return!1;if(r++,o===e)break;if(u!==58)return!1;if(o++,t.charCodeAt(o)===58){if(n||t.charCodeAt(o+1)===58)return!1;if(n=!0,o++,o===e)break}}return n?r<=7:r===8}function xh(t){try{return new URL(t,"http://example.com"),!0}catch{return!1}}function Wa(t){if(t.includes(" ")||t.includes("\\")||/[\x00-\x1F\x7F]/.test(t)||/%(?![0-9a-fA-F]{2})/.test(t))return!1;if(t==="")return!0;let e=t.indexOf(":");return e>0&&/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(t.substring(0,e))?xh(t):t.match(/^([a-zA-Z][a-zA-Z0-9+\-.]*)(\/\/)/)&&e===-1?!1:xh(t)}function Ga(t){try{return new URL(t),!0}catch{return!1}}var JC=/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i;function Va(t){return JC.test(t)}var QC=/^(?:\/(?:[^~/]|~0|~1)*)*$/;function Ha(t){return QC.test(t)}function za(t){if(t.length===0)return!1;try{return new RegExp(t),!0}catch{return!1}}var YC=/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/;function Ja(t){return YC.test(t)}var ZC=/^(?!.*[^\x00-\x7F])(?!.*\\)(?:(?:[a-z][a-z0-9+\-.]*:)?(?:\/\/[^\s[\]{}<>^`|]*)?|[^\s[\]{}<>^`|]*)(?:\?[^\s[\]{}<>^`|]*)?(?:#[^\s[\]{}<>^`|]*)?$/i;function Qa(t){return ZC.test(t)}var XC=/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i;function Ya(t){return XC.test(t)}function Ph(t){return t>=97&&t<=122||t>=65&&t<=90}function wh(t){return Ph(t)||t>=48&&t<=57}function Za(t){return t>=48&&t<=57||t>=65&&t<=70||t>=97&&t<=102}function eE(t){return wh(t)||t===43||t===45||t===46}function qd(t){return wh(t)||t===45||t===46||t===95||t===126}function Bd(t){return t===33||t===36||t===38||t===39||t===40||t===41||t===42||t===43||t===44||t===59||t===61}function tE(t){return qd(t)||Bd(t)||t===58||t===64}function Xa(t){let e=t.length;if(e===0||!Ph(t.charCodeAt(0)))return!1;let r=1;for(;r<e;){let n=t.charCodeAt(r);if(n===58)break;if(!eE(n))return!1;r++}if(t.charCodeAt(r)!==58)return!1;if(r++,t.charCodeAt(r)===47&&t.charCodeAt(r+1)===47){r+=2;let n=r,o=-1;for(let i=r;i<e;i++){let a=t.charCodeAt(i);if(a===64){o=i;break}if(a===47||a===63||a===35)break}if(o!==-1){for(let i=n;i<o;i++){let a=t.charCodeAt(i);if(a===91||a===93)return!1;if(a===37){if(i+2>=o||!Za(t.charCodeAt(i+1))||!Za(t.charCodeAt(i+2)))return!1;i+=2}else if(!qd(a)&&!Bd(a)&&a!==58)return!1}r=o+1}if(t.charCodeAt(r)===91){for(r++;r<e&&t.charCodeAt(r)!==93;)r++;if(t.charCodeAt(r)!==93)return!1;r++}else for(;r<e;){let i=t.charCodeAt(r);if(i===47||i===63||i===35||i===58)break;if(i<128&&!qd(i)&&!Bd(i))return!1;r++}if(t.charCodeAt(r)===58)for(r++;r<e;){let i=t.charCodeAt(r);if(i===47||i===63||i===35)break;if(i<48||i>57)return!1;r++}}for(;r<e;){let n=t.charCodeAt(r);if(n===37){if(r+2>=e||!Za(t.charCodeAt(r+1))||!Za(t.charCodeAt(r+2)))return!1;r+=2}else{if(n>127)return!1;if(!(tE(n)||n===47||n===63||n===35))return!1}r++}return!0}var rE=/^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu;function eu(t){return rE.test(t)}var nE=/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i;function tu(t){return nE.test(t)}var ce=new Map;function vh(){ce.clear()}function oE(){return[...ce.entries()]}function iE(t,e){ce.set(t,e)}function sE(t){return ce.has(t)}function aE(t){return ce.get(t)}function uE(t,e){return ce.get(t)?.(e)??!0}function bh(){vh(),ce.set("date-time",Fa),ce.set("date",no),ce.set("duration",La),ce.set("email",Na),ce.set("hostname",qa),ce.set("idn-email",Ba),ce.set("idn-hostname",Ua),ce.set("ipv4",Ka),ce.set("ipv6",ja),ce.set("iri-reference",Wa),ce.set("iri",Ga),ce.set("json-pointer-uri-fragment",Va),ce.set("json-pointer",Ha),ce.set("regex",za),ce.set("relative-json-pointer",Ja),ce.set("time",oo),ce.set("uri-reference",Qa),ce.set("uri-template",Ya),ce.set("uri",Xa),ce.set("url",eu),ce.set("uuid",tu)}bh();function Ud(t,e,r,n){return yn.Test(r.format,n)}function Ah(t,e,r,n,o,i){return Ud(t,e,o,i)||e.AddError({keyword:"format",schemaPath:r,instancePath:n,params:{format:o.format}})}function Th(t,e,r,n){let o=Ad(r)?r.then:!0,i=ld(r)?r.else:!0;return z(t,e,r.if,n)?z(t,e,o,n):z(t,e,i,n)}function Rh(t,e,r,n,o,i){let a=Ad(o)?o.then:!0,u=ld(o)?o.else:!0,p=new De,d=pe(t,p,`${r}/if`,n,o.if,i)?pe(t,p,`${r}/then`,n,a,i)||e.AddError({keyword:"if",schemaPath:r,instancePath:n,params:{failingKeyword:"then"}}):pe(t,e,`${r}/else`,n,u,i)||e.AddError({keyword:"if",schemaPath:r,instancePath:n,params:{failingKeyword:"else"}});return d&&e.Merge([p]),d}function pE(t,e,r,n){return s.Every(r.items,0,(o,i)=>s.IsLessEqualThan(n.length,i)||Pt(t,e,o,n[i])&&e.AddIndex(i))}function dE(t,e,r,n,o,i){return s.EveryAll(o.items,0,(a,u)=>{let p=`${r}/items/${u}`,d=`${n}/${u}`;return s.IsLessEqualThan(i.length,u)||wt(t,e,p,d,a,i[u])&&e.AddIndex(u)})}function lE(t,e,r,n){let o=eo(r)?r.prefixItems.length:0;return s.Every(n,o,(i,a)=>Pt(t,e,r.items,i)&&e.AddIndex(a))}function mE(t,e,r,n,o,i){let a=eo(o)?o.prefixItems.length:0;return s.EveryAll(i,a,(u,p)=>{let d=`${r}/items`,l=`${n}/${p}`;return wt(t,e,d,l,o.items,u)&&e.AddIndex(p)})}function Ch(t,e,r,n){return gd(r)?pE(t,e,r,n):lE(t,e,r,n)}function Eh(t,e,r,n,o,i){return gd(o)?dE(t,e,r,n,o,i):mE(t,e,r,n,o,i)}function cE(t){return cn(t)}function Kd(t,e,r,n){if(!cE(r))return!0;let o=n.reduce((i,a)=>z(t,e,r.contains,a)?++i:i,0);return s.IsLessEqualThan(o,r.maxContains)}function $h(t,e,r,n,o,i){let a=fn(o)?o.minContains:1;return Kd(t,e,o,i)||e.AddError({keyword:"contains",schemaPath:r,instancePath:n,params:{minContains:a,maxContains:o.maxContains}})}function jd(t,e,r,n){return s.IsLessEqualThan(n,r.maximum)}function Mh(t,e,r,n,o,i){return jd(t,e,o,i)||e.AddError({keyword:"maximum",schemaPath:r,instancePath:n,params:{comparison:"<=",limit:o.maximum}})}function Wd(t,e,r,n){return s.IsLessEqualThan(n.length,r.maxItems)}function Oh(t,e,r,n,o,i){return Wd(t,e,o,i)||e.AddError({keyword:"maxItems",schemaPath:r,instancePath:n,params:{limit:o.maxItems}})}function Gd(t,e,r,n){return s.IsMaxLength(n,r.maxLength)}function _h(t,e,r,n,o,i){return Gd(t,e,o,i)||e.AddError({keyword:"maxLength",schemaPath:r,instancePath:n,params:{limit:o.maxLength}})}function Vd(t,e,r,n){return s.IsLessEqualThan(s.Keys(n).length,r.maxProperties)}function Dh(t,e,r,n,o,i){return Vd(t,e,o,i)||e.AddError({keyword:"maxProperties",schemaPath:r,instancePath:n,params:{limit:o.maxProperties}})}function fE(t){return cn(t)}function Hd(t,e,r,n){if(!fE(r))return!0;let o=n.reduce((i,a)=>z(t,e,r.contains,a)?++i:i,0);return s.IsGreaterEqualThan(o,r.minContains)}function Fh(t,e,r,n,o,i){return Hd(t,e,o,i)||e.AddError({keyword:"contains",schemaPath:r,instancePath:n,params:{minContains:o.minContains}})}function zd(t,e,r,n){return s.IsGreaterEqualThan(n,r.minimum)}function Lh(t,e,r,n,o,i){return zd(t,e,o,i)||e.AddError({keyword:"minimum",schemaPath:r,instancePath:n,params:{comparison:">=",limit:o.minimum}})}function Jd(t,e,r,n){return s.IsGreaterEqualThan(n.length,r.minItems)}function Nh(t,e,r,n,o,i){return Jd(t,e,o,i)||e.AddError({keyword:"minItems",schemaPath:r,instancePath:n,params:{limit:o.minItems}})}function Qd(t,e,r,n){return s.IsMinLength(n,r.minLength)}function qh(t,e,r,n,o,i){return Qd(t,e,o,i)||e.AddError({keyword:"minLength",schemaPath:r,instancePath:n,params:{limit:o.minLength}})}function Yd(t,e,r,n){return s.IsGreaterEqualThan(s.Keys(n).length,r.minProperties)}function Bh(t,e,r,n,o,i){return Yd(t,e,o,i)||e.AddError({keyword:"minProperties",schemaPath:r,instancePath:n,params:{limit:o.minProperties}})}function Zd(t,e,r,n){return s.IsMultipleOf(n,r.multipleOf)}function Uh(t,e,r,n,o,i){return Zd(t,e,o,i)||e.AddError({keyword:"multipleOf",schemaPath:r,instancePath:n,params:{multipleOf:o.multipleOf}})}function Xd(t,e,r,n){let o=new ot;return!z(t,o,r.not,n)&&e.Merge([o])}function Kh(t,e,r,n,o,i){return Xd(t,e,o,i)||e.AddError({keyword:"not",schemaPath:r,instancePath:n,params:{}})}function jh(t,e,r,n){let o=r.oneOf.reduce((i,a)=>{let u=new ot;return z(t,u,a,n)?[...i,u]:i},[]);return s.IsEqual(o.length,1)&&e.Merge(o)}function Wh(t,e,r,n,o,i){let a=[],u=[],p=o.oneOf.reduce((l,m,c)=>{let h=new De,y=`${r}/oneOf/${c}`,S=pe(t,h,y,n,m,i);return S&&u.push(c),S||a.push(h),S?[...l,h]:l},[]),d=s.IsEqual(p.length,1)&&e.Merge(p);return!d&&s.IsEqual(u.length,0)&&a.forEach(l=>l.GetErrors().forEach(m=>e.AddError(m))),d||e.AddError({keyword:"oneOf",schemaPath:r,instancePath:n,params:{passingSchemas:u}})}function el(t,e,r,n){return(s.IsString(r.pattern)?new RegExp(r.pattern,"u"):r.pattern).test(n)}function Gh(t,e,r,n,o,i){return el(t,e,o,i)||e.AddError({keyword:"pattern",schemaPath:r,instancePath:n,params:{pattern:o.pattern}})}function Vh(t,e,r,n){return s.Every(s.Entries(r.patternProperties),0,([o,i])=>{let a=new RegExp(o,"u");return s.Every(s.Entries(n),0,([u,p])=>!a.test(u)||Pt(t,e,i,p)&&e.AddKey(u))})}function Hh(t,e,r,n,o,i){return s.EveryAll(s.Entries(o.patternProperties),0,([a,u])=>{let p=`${r}/patternProperties/${a}`,d=new RegExp(a,"u");return s.EveryAll(s.Entries(i),0,([l,m])=>{let c=`${n}/${l}`;return!d.test(l)||wt(t,e,p,c,u,m)&&e.AddKey(l)})})}function zh(t,e,r,n){return s.IsEqual(n.length,0)||s.Every(r.prefixItems,0,(o,i)=>s.IsLessEqualThan(n.length,i)||Pt(t,e,o,n[i])&&e.AddIndex(i))}function Jh(t,e,r,n,o,i){return s.IsEqual(i.length,0)||s.EveryAll(o.prefixItems,0,(a,u)=>{let p=`${r}/prefixItems/${u}`,d=`${n}/${u}`;return s.IsLessEqualThan(i.length,u)||wt(t,e,p,d,a,i[u])&&e.AddIndex(u)})}var ht={};Tt(ht,{Get:()=>yE,Reset:()=>gE,Set:()=>hE});var _r={immutableTypes:!1,maxErrors:8,useAcceleration:!0,exactOptionalPropertyTypes:!1,enumerableKind:!1,correctiveParse:!1};function gE(){_r.immutableTypes=!1,_r.maxErrors=8,_r.useAcceleration=!0,_r.exactOptionalPropertyTypes=!1,_r.enumerableKind=!1,_r.correctiveParse=!1}function hE(t){for(let e of s.Keys(t)){let r=t[e];r!==void 0&&Object.defineProperty(_r,e,{value:r})}}function yE(){return _r}function tl(t,e){return t.includes(e)||ht.Get().exactOptionalPropertyTypes}function rl(t,e){return s.IsUndefined(t[e])}function Qh(t,e,r,n){let o=gn(r)?r.required:[];return s.Every(s.Entries(r.properties),0,([a,u])=>{let p=!s.HasPropertyKey(n,a)||Pt(t,e,u,n[a])&&e.AddKey(a);return tl(o,a)?p:rl(n,a)||p})}function Yh(t,e,r,n,o,i){let a=gn(o)?o.required:[];return s.EveryAll(s.Entries(o.properties),0,([p,d])=>{let l=`${r}/properties/${p}`,m=`${n}/${p}`,c=()=>!s.HasPropertyKey(i,p)||wt(t,e,l,m,d,i[p])&&e.AddKey(p);return tl(a,p)?c():rl(i,p)||c()})}function Zh(t,e,r,n){return s.Every(s.Keys(n),0,(o,i)=>z(t,e,r.propertyNames,o))}function Xh(t,e,r,n,o,i){let a=[];return s.EveryAll(s.Keys(i),0,(p,d)=>{let l=`${n}/${p}`,m=`${r}/propertyNames`,c=new De,h=pe(t,c,m,l,o.propertyNames,p);return h||a.push(p),h})||e.AddError({keyword:"propertyNames",schemaPath:r,instancePath:n,params:{propertyNames:a}})}function ey(t,e,r,n){let o=t.RecursiveRef(r)??!1;return M(o)&&z(t,e,o,n)}function ty(t,e,r,n,o,i){let a=t.RecursiveRef(o)??!1;return M(a)&&pe(t,e,"#",n,a,i)}function ry(t,e,r,n){let o=t.Ref(r)??!1,i=new ot,a=M(o)&&z(t,i,o,n);return a&&e.Merge([i]),a}function ny(t,e,r,n,o,i){let a=t.Ref(o)??!1,u=new De,p=M(a)&&pe(t,u,"#",n,a,i);return p&&e.Merge([u]),p||u.GetErrors().forEach(d=>e.AddError(d)),p}function oy(t,e,r,n){return s.Every(r.required,0,o=>s.HasPropertyKey(n,o))}function iy(t,e,r,n,o,i){let a=[];return s.EveryAll(o.required,0,p=>{let d=s.HasPropertyKey(i,p);return d||a.push(p),d})||e.AddError({keyword:"required",schemaPath:r,instancePath:n,params:{requiredProperties:a}})}function nl(t,e,r,n,o){return s.IsEqual(r,"object")?s.IsObjectNotArray(o):s.IsEqual(r,"array")?s.IsArray(o):s.IsEqual(r,"boolean")?s.IsBoolean(o):s.IsEqual(r,"integer")?s.IsInteger(o):s.IsEqual(r,"number")?s.IsNumber(o):s.IsEqual(r,"null")?s.IsNull(o):s.IsEqual(r,"string")?s.IsString(o):s.IsEqual(r,"asyncIterator")?s.IsAsyncIterator(o):s.IsEqual(r,"bigint")?s.IsBigInt(o):s.IsEqual(r,"constructor")?s.IsConstructor(o):s.IsEqual(r,"function")?s.IsFunction(o):s.IsEqual(r,"iterator")?s.IsIterator(o):s.IsEqual(r,"symbol")?s.IsSymbol(o):s.IsEqual(r,"undefined")?s.IsUndefined(o):s.IsEqual(r,"void")?s.IsUndefined(o):!0}function sy(t,e,r,n,o){return r.some(i=>nl(t,e,i,n,o))}function ay(t,e,r,n){return s.IsArray(r.type)?sy(t,e,r.type,r,n):nl(t,e,r.type,r,n)}function uy(t,e,r,n,o,i){return(s.IsArray(o.type)?sy(t,e,o.type,o,i):nl(t,e,o.type,o,i))||e.AddError({keyword:"type",schemaPath:r,instancePath:n,params:{type:o.type}})}function py(t,e,r,n){let o=e.GetIndices();return s.Every(n,0,(i,a)=>(o.has(a)||z(t,e,r.unevaluatedItems,i))&&e.AddIndex(a))}function dy(t,e,r,n,o,i){let a=e.GetIndices(),u=[];return s.EveryAll(i,0,(d,l)=>{let m=new De,c=(a.has(l)||pe(t,m,r,n,o.unevaluatedItems,d))&&e.AddIndex(l);return c||u.push(l),c})||e.AddError({keyword:"unevaluatedItems",schemaPath:r,instancePath:n,params:{unevaluatedItems:u}})}function ly(t,e,r,n){let o=e.GetKeys();return s.Every(s.Entries(n),0,([i,a])=>o.has(i)||z(t,e,r.unevaluatedProperties,a)&&e.AddKey(i))}function my(t,e,r,n,o,i){let a=e.GetKeys(),u=[];return s.EveryAll(s.Entries(i),0,([d,l])=>{let m=new De,c=a.has(d)||pe(t,m,r,n,o.unevaluatedProperties,l)&&e.AddKey(d);return c||u.push(d),c})||e.AddError({keyword:"unevaluatedProperties",schemaPath:r,instancePath:n,params:{unevaluatedProperties:u}})}function cy(t){return!s.IsEqual(t.uniqueItems,!1)}function fy(t,e,r,n){if(!cy(r))return!0;let o=new Set(n.map(Mr.Hash)).size,i=n.length;return s.IsEqual(o,i)}function gy(t,e,r,n,o,i){if(!cy(o))return!0;let a=new Set,u=i.reduce((d,l,m)=>{let c=Mr.Hash(l);return a.has(c)?[...d,m]:(a.add(c),d)},[]);return s.IsEqual(u.length,0)||e.AddError({keyword:"uniqueItems",schemaPath:r,instancePath:n,params:{duplicateItems:u}})}function Pt(t,e,r,n){return e.Push()&&z(t,e,r,n)&&e.Pop()}function z(t,e,r,n){t.Push(r);let o=Ta(r)?Ed(t,e,r,n):(!Td(r)||ay(t,e,r,n))&&(!(s.IsObject(n)&&!s.IsArray(n))||(!gn(r)||oy(t,e,r,n))&&(!sr(r)||Jg(t,e,r,n))&&(!ad(r)||oh(t,e,r,n))&&(!ud(r)||sh(t,e,r,n))&&(!pd(r)||uh(t,e,r,n))&&(!ri(r)||Vh(t,e,r,n))&&(!ni(r)||Qh(t,e,r,n))&&(!wd(r)||Zh(t,e,r,n))&&(!$a(r)||Yd(t,e,r,n))&&(!kd(r)||Vd(t,e,r,n)))&&(!s.IsArray(n)||(!nd(r)||Vg(t,e,r,n))&&(!cn(r)||Md(t,e,r,n))&&(!Zn(r)||Ch(t,e,r,n))&&(!yd(r)||Kd(t,e,r,n))&&(!Ca(r)||Wd(t,e,r,n))&&(!fn(r)||Hd(t,e,r,n))&&(!ti(r)||Jd(t,e,r,n))&&(!eo(r)||zh(t,e,r,n))&&(!oi(r)||fy(t,e,r,n)))&&(!s.IsString(n)||(!Sd(r)||Gd(t,e,r,n))&&(!Ea(r)||Qd(t,e,r,n))&&(!Ra(r)||Ud(t,e,r,n))&&(!Ma(r)||el(t,e,r,n)))&&(!(s.IsNumber(n)||s.IsBigInt(n))||(!cd(r)||Fd(t,e,r,n))&&(!Yn(r)||Ld(t,e,r,n))&&(!hd(r)||jd(t,e,r,n))&&(!Xn(r)||zd(t,e,r,n))&&(!Id(r)||Zd(t,e,r,n)))&&(!bd(r)||ry(t,e,r,n))&&(!vd(r)||ey(t,e,r,n))&&(!dd(r)||dh(t,e,r,n))&&(!td(r)||Dg(t,e,r,n))&&(!sd(r)||$d(t,e,r,n))&&(!md(r)||Dd(t,e,r,n))&&(!fd(r)||Th(t,e,r,n))&&(!xd(r)||Xd(t,e,r,n))&&(!od(r)||Yg(t,e,r,n))&&(!id(r)||Xg(t,e,r,n))&&(!Pd(r)||jh(t,e,r,n))&&(!_a(r)||!s.IsArray(n)||py(t,e,r,n))&&(!Da(r)||!s.IsObject(n)||ly(t,e,r,n))&&(!rd(r)||jg(t,e,r,n));return t.Pop(r),o}function wt(t,e,r,n,o,i){return e.Push()&&pe(t,e,r,n,o,i)&&e.Pop()}function pe(t,e,r,n,o,i){t.Push(o);let a=Ta(o)?th(t,e,r,n,o,i):!!(+(!Td(o)||uy(t,e,r,n,o,i))&+(!(s.IsObject(i)&&!s.IsArray(i))||!!(+(!gn(o)||iy(t,e,r,n,o,i))&+(!sr(o)||Qg(t,e,r,n,o,i))&+(!ad(o)||ih(t,e,r,n,o,i))&+(!ud(o)||ah(t,e,r,n,o,i))&+(!pd(o)||ph(t,e,r,n,o,i))&+(!ri(o)||Hh(t,e,r,n,o,i))&+(!ni(o)||Yh(t,e,r,n,o,i))&+(!wd(o)||Xh(t,e,r,n,o,i))&+(!$a(o)||Bh(t,e,r,n,o,i))&+(!kd(o)||Dh(t,e,r,n,o,i))))&+(!s.IsArray(i)||!!(+(!nd(o)||Hg(t,e,r,n,o,i))&+(!cn(o)||nh(t,e,r,n,o,i))&+(!Zn(o)||Eh(t,e,r,n,o,i))&+(!yd(o)||$h(t,e,r,n,o,i))&+(!Ca(o)||Oh(t,e,r,n,o,i))&+(!fn(o)||Fh(t,e,r,n,o,i))&+(!ti(o)||Nh(t,e,r,n,o,i))&+(!eo(o)||Jh(t,e,r,n,o,i))&+(!oi(o)||gy(t,e,r,n,o,i))))&+(!s.IsString(i)||!!(+(!Sd(o)||_h(t,e,r,n,o,i))&+(!Ea(o)||qh(t,e,r,n,o,i))&+(!Ra(o)||Ah(t,e,r,n,o,i))&+(!Ma(o)||Gh(t,e,r,n,o,i))))&+(!(s.IsNumber(i)||s.IsBigInt(i))||!!(+(!cd(o)||ch(t,e,r,n,o,i))&+(!Yn(o)||fh(t,e,r,n,o,i))&+(!hd(o)||Mh(t,e,r,n,o,i))&+(!Xn(o)||Lh(t,e,r,n,o,i))&+(!Id(o)||Uh(t,e,r,n,o,i))))&+(!bd(o)||ny(t,e,r,n,o,i))&+(!vd(o)||ty(t,e,r,n,o,i))&+(!dd(o)||lh(t,e,r,n,o,i))&+(!td(o)||Fg(t,e,r,n,o,i))&+(!sd(o)||rh(t,e,r,n,o,i))&+(!md(o)||mh(t,e,r,n,o,i))&+(!fd(o)||Rh(t,e,r,n,o,i))&+(!xd(o)||Kh(t,e,r,n,o,i))&+(!od(o)||Zg(t,e,r,n,o,i))&+(!id(o)||eh(t,e,r,n,o,i))&+(!Pd(o)||Wh(t,e,r,n,o,i))&+(!_a(o)||!s.IsArray(i)||dy(t,e,r,n,o,i))&+(!Da(o)||!s.IsObject(i)||my(t,e,r,n,o,i)))&&(!rd(o)||Wg(t,e,r,n,o,i));return t.Pop(o),a}var Dr={};Tt(Dr,{DynamicRef:()=>ME,Ref:()=>il});var pr={};Tt(pr,{Delete:()=>bE,Get:()=>wE,Has:()=>PE,Indices:()=>ai,Set:()=>vE});function hy(t){if(t.length===0)throw Error("Cannot set root")}function yy(t){if(!s.IsObject(t))throw Error("Cannot set value")}function SE(t){if(s.IsUnsafePropertyKey(t))throw Error("Pointer contains unsafe property key")}function Sy(t){for(let e of t)SE(e)}function kE(t){return/^(0|[1-9]\d*)$/.test(t)}function ky(t){return[t.slice(0,t.length-1),t.slice(t.length-1)[0]]}function IE(t,e){return s.IsObject(e)&&s.HasPropertyKey(e,t)}function xE(t,e){return s.IsObject(e)&&!s.IsUnsafePropertyKey(t)?e[t]:void 0}function ol(t,e){return t.reduce((r,n)=>xE(n,r),e)}function ai(t){if(s.IsEqual(t.length,0))return[];let e=t.split("/").map(r=>r.replace(/~1/g,"/").replace(/~0/g,"~"));return e.length>0&&e[0]===""?e.slice(1):e}function PE(t,e){let r=t;return ai(e).every(n=>IE(n,r)?(r=r[n],!0):!1)}function wE(t,e){let r=ai(e);return ol(r,t)}function vE(t,e,r){let n=ai(e);hy(n),Sy(n);let[o,i]=ky(n),a=ol(o,t);return yy(a),a[i]=r,t}function bE(t,e){let r=ai(e);hy(r),Sy(r);let[n,o]=ky(r),i=ol(n,t);return yy(i),s.IsArray(i)&&kE(o)?i.splice(+o,1):delete i[o],t}function AE(t,e,r){if(t.$id===r.hash)return t;let n=new URL(t.$id,e.href),o=new URL(r.href,e.href);if(s.IsEqual(n.pathname,o.pathname))return r.hash.startsWith("#")?Iy(t,e,r):t}function TE(t,e,r){let n=new URL(`#${t.$anchor}`,e.href),o=new URL(r.href,e.href);return s.IsEqual(n.href,o.href)?t:void 0}function RE(t,e,r){let n=new URL(`#${t.$dynamicAnchor}`,e.href),o=new URL(r.href,e.href);return s.IsEqual(n.href,o.href)?t:void 0}function Iy(t,e,r){if(r.href.endsWith("#"))return t;if(!r.hash.startsWith("#"))return;let n=decodeURIComponent(r.hash.slice(1));if(n.startsWith("/"))return pr.Get(t,n)}function CE(t,e,r){if(ur(t)){let n=AE(t,e,r);if(!s.IsUndefined(n))return n}if(ei(t)){let n=TE(t,e,r);if(!s.IsUndefined(n))return n}if(Er(t)){let n=RE(t,e,r);if(!s.IsUndefined(n))return n}return Iy(t,e,r)}function EE(t,e,r){return t.reduce((n,o)=>{let i=sl(o,e,r);return s.IsUndefined(i)?n:i},void 0)}function $E(t,e,r){return s.Keys(t).reduce((n,o)=>{let i=sl(t[o],e,r);return s.IsUndefined(i)?n:i},void 0)}function sl(t,e,r){let n=Mt(t)&&ur(t)?new URL(t.$id,e.href):e;if(Mt(t)){let o=CE(t,n,r);if(!s.IsUndefined(o))return o}if(s.IsArray(t))return EE(t,n,r);if(s.IsObject(t))return $E(t,n,r)}function il(t,e){let r=new URL("http://unknown/"),n=ur(t)?new URL(t.$id,r.href):r,o=new URL(e,n.href);return sl(t,n,o)}function ME(t,e,r,n){let o=r.$dynamicRef.startsWith("#")?il(e,r.$dynamicRef):il(t,r.$dynamicRef);return s.IsUndefined(o)?void 0:!Mt(o)||!Er(o)||new URL(r.$dynamicRef,"http://unknown/").hash.startsWith("#/")?o:n.find(u=>u.$dynamicAnchor===o.$dynamicAnchor)??o}var io=function(t,e,r,n){if(r==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof e=="function"?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return r==="m"?n:r==="a"?n.call(t):n?n.value:e.get(t)},Fr,xy,Py,wy,vy,Sn=class{constructor(e,r){Fr.add(this),this.context=e,this.schema=r,this.ids=[],this.anchors=[],this.recursiveAnchors=[],this.dynamicAnchors=[]}BaseURL(){return this.ids.reduce((e,r)=>new URL(r.$id,e),new URL("http://unknown"))}Base(){return this.ids[this.ids.length-1]??this.schema}Push(e){Mt(e)&&(ur(e)&&(this.ids.push(e),io(this,Fr,"m",xy).call(this,e)),ei(e)&&this.anchors.push(e),Oa(e)&&this.recursiveAnchors.push(e),Er(e)&&this.dynamicAnchors.push(e))}Pop(e){Mt(e)&&(ur(e)&&(this.ids.pop(),io(this,Fr,"m",Py).call(this,e)),ei(e)&&this.anchors.pop(),Oa(e)&&this.recursiveAnchors.pop(),Er(e)&&this.dynamicAnchors.pop())}Ref(e){return io(this,Fr,"m",wy).call(this,e)??io(this,Fr,"m",vy).call(this,e)}RecursiveRef(e){return Oa(this.Base())?Dr.Ref(this.recursiveAnchors[0],e.$recursiveRef):Dr.Ref(this.Base(),e.$recursiveRef)}DynamicRef(e){let r=this.schema;return Dr.DynamicRef(r,this.Base(),e,this.dynamicAnchors)}};Fr=new WeakSet,xy=function t(e,r=!0){if(!Mt(e))return;let n=e;if(!(!r&&ur(n))){!r&&Er(n)&&this.dynamicAnchors.push(n);for(let o of s.Keys(n))io(this,Fr,"m",t).call(this,n[o],!1)}},Py=function t(e,r=!0){if(!Mt(e))return;let n=e;if(!(!r&&ur(n))){!r&&Er(n)&&this.dynamicAnchors.pop();for(let o of s.Keys(n))io(this,Fr,"m",t).call(this,n[o],!1)}},wy=function(e){return s.HasPropertyKey(this.context,e.$ref)?this.context[e.$ref]:void 0},vy=function(e){let r=this.schema;return e.$ref.startsWith("#")?Dr.Ref(this.Base(),e.$ref):Dr.Ref(r,e.$ref)};function Ay(t){switch(t.keyword){case"additionalProperties":return"must not have additional properties";case"anyOf":return"must match a schema in anyOf";case"boolean":return"schema is false";case"const":return"must be equal to constant";case"contains":return"must contain at least 1 valid item";case"dependencies":return`must have properties ${t.params.dependencies.join(", ")} when property ${t.params.property} is present`;case"dependentRequired":return`must have properties ${t.params.dependencies.join(", ")} when property ${t.params.property} is present`;case"enum":return"must be equal to one of the allowed values";case"exclusiveMaximum":return`must be ${t.params.comparison} ${t.params.limit}`;case"exclusiveMinimum":return`must be ${t.params.comparison} ${t.params.limit}`;case"format":return`must match format "${t.params.format}"`;case"if":return`must match "${t.params.failingKeyword}" schema`;case"maxItems":return`must not have more than ${t.params.limit} items`;case"maxLength":return`must not have more than ${t.params.limit} characters`;case"maxProperties":return`must not have more than ${t.params.limit} properties`;case"maximum":return`must be ${t.params.comparison} ${t.params.limit}`;case"minItems":return`must not have fewer than ${t.params.limit} items`;case"minLength":return`must not have fewer than ${t.params.limit} characters`;case"minProperties":return`must not have fewer than ${t.params.limit} properties`;case"minimum":return`must be ${t.params.comparison} ${t.params.limit}`;case"multipleOf":return`must be multiple of ${t.params.multipleOf}`;case"not":return"must not be valid";case"oneOf":return"must match exactly one schema in oneOf";case"pattern":return`must match pattern "${t.params.pattern}"`;case"propertyNames":return`property names ${t.params.propertyNames.join(", ")} are invalid`;case"required":return`must have required properties ${t.params.requiredProperties.join(", ")}`;case"type":return typeof t.params.type=="string"?`must be ${t.params.type}`:`must be either ${t.params.type.join(" or ")}`;case"unevaluatedItems":return"must not have unevaluated items";case"unevaluatedProperties":return"must not have unevaluated properties";case"uniqueItems":return"must not have duplicate items";case"~guard":return"must match check function";case"~refine":return t.params.message;default:return"an unknown validation error occurred"}}var _E=Ay;function Ty(){return _E}function ru(...t){let[e,r,n]=ee.Match(t,{3:(l,m,c)=>[l,m,c],2:(l,m)=>[{},l,m]}),o=ht.Get(),i=Ty(),a=[],u=new Sn(e,r),p=new ii(l=>{if(!s.IsGreaterEqualThan(a.length,o.maxErrors))return a.push({...l,message:i(l)})});return[pe(u,p,"#","",r,n),a]}function ul(...t){let[e,r,n]=ee.Match(t,{3:(a,u,p)=>[a,u,p],2:(a,u)=>[{},a,u]}),o=new Sn(e,r),i=new ot;return z(o,i,r,n)}var g={};Tt(g,{Assign:()=>FE,Clone:()=>ui,Create:()=>KE,Discard:()=>jE,Metrics:()=>Nt,Update:()=>WE});var Nt={assign:0,create:0,clone:0,discard:0,update:0};function FE(t,e){return Nt.assign+=1,{...t,...e}}function LE(t){return s.IsObject(t)&&s.HasPropertyKey(t,"~guard")}function NE(t){return t.map(e=>pl(e))}function qE(t){let e={},r=Object.getOwnPropertyDescriptors(t);for(let n of Object.keys(r)){let o=r[n];s.HasPropertyKey(o,"value")&&Object.defineProperty(e,n,{...o,value:pl(o.value)})}return e}function BE(t){return new RegExp(t.source,t.flags)}function pl(t){return t instanceof RegExp?BE(t):LE(t)?t:s.IsArray(t)?NE(t):s.IsObject(t)?qE(t):t}function ui(t){return Nt.clone+=1,pl(t)}function UE(t,e){for(let r of Object.keys(e))Object.defineProperty(t,r,{configurable:!0,writable:!0,enumerable:!1,value:e[r]});return t}function Cy(t,e){return{...t,...e}}function KE(t,e,r={}){Nt.create+=1;let n=ht.Get(),o=Cy(e,r),i=n.enumerableKind?Cy(o,t):UE(o,t);return n.immutableTypes?Object.freeze(i):i}function jE(t,e){Nt.discard+=1;let r={},n=Object.getOwnPropertyDescriptors(ui(t)),o=new Set(e);for(let i of Object.keys(n))o.has(i)||Object.defineProperty(r,i,n[i]);return r}function WE(t,e,r){Nt.update+=1;let n=ht.Get(),o=ui(t);for(let i of Object.keys(e))Object.defineProperty(o,i,{configurable:!0,writable:!0,enumerable:n.enumerableKind,value:e[i]});for(let i of Object.keys(r))Object.defineProperty(o,i,{configurable:!0,enumerable:!0,writable:!0,value:r[i]});return o}function v(t,e){return s.IsObject(t)&&s.HasPropertyKey(t,"~kind")&&s.IsEqual(t["~kind"],e)}function de(t){return s.IsObject(t)}function Ey(t){return s.IsObject(t)&&s.HasPropertyKey(t,"~kind")&&s.HasPropertyKey(t,"type")&&s.IsEqual(t["~kind"],"OptionalAddAction")&&de(t.type)}function $y(t){return s.IsObject(t)&&s.HasPropertyKey(t,"~kind")&&s.HasPropertyKey(t,"type")&&s.IsEqual(t["~kind"],"OptionalRemoveAction")&&de(t.type)}function My(t){return s.IsObject(t)&&s.HasPropertyKey(t,"~kind")&&s.HasPropertyKey(t,"type")&&s.IsEqual(t["~kind"],"ReadonlyAddAction")&&de(t.type)}function Oy(t){return s.IsObject(t)&&s.HasPropertyKey(t,"~kind")&&s.HasPropertyKey(t,"type")&&s.IsEqual(t["~kind"],"ReadonlyRemoveAction")&&de(t.type)}function E(t,e,r){return g.Create({"~kind":"Deferred"},{action:t,parameters:e,options:r},{})}function Lr(t){return v(t,"Deferred")}function dr(t,e){return g.Create({"~kind":"Promise"},{type:"promise",item:t},e)}function Ge(t){return v(t,"Promise")}function _y(t){return g.Discard(t,["~kind","type","item"])}function Dy(t){return g.Update(t,{"~immutable":!0},{})}function so(t){return Dy(t)}function pi(t){return de(t)&&s.HasPropertyKey(t,"~immutable")}function ao(t){return g.Discard(t,["~optional"])}function kn(t){return g.Update(t,{"~optional":!0},{})}function Fy(t){return kn(t)}function Ke(t){return de(t)&&s.HasPropertyKey(t,"~optional")}function nu(t){return g.Discard(t,["~readonly"])}function In(t){return g.Update(t,{"~readonly":!0},{})}function Ly(t){return In(t)}function di(t){return de(t)&&s.HasPropertyKey(t,"~readonly")}function Qt(t){return v(t,"Base")}function lr(t,e){return g.Create({"~kind":"Array"},{type:"array",items:t},e)}function te(t){return v(t,"Array")}function ou(t){return g.Discard(t,["~kind","type","items"])}function mr(t,e){return g.Create({"~kind":"AsyncIterator"},{type:"asyncIterator",iteratorItems:t},e)}function st(t){return v(t,"AsyncIterator")}function Ny(t){return g.Discard(t,["~kind","type","iteratorItems"])}function xn(t,e,r={}){return g.Create({"~kind":"Constructor"},{type:"constructor",parameters:t,instanceType:e},r)}function Fe(t){return v(t,"Constructor")}function qy(t){return g.Discard(t,["~kind","type","parameters","instanceType"])}function Pn(t,e,r={}){return g.Create({"~kind":"Function"},{type:"function",parameters:t,returnType:e},r)}function Le(t){return v(t,"Function")}function By(t){return g.Discard(t,["~kind","type","parameters","returnType"])}function yt(t,e){return g.Create({"~kind":"Ref"},{$ref:t},e)}function se(t){return v(t,"Ref")}function dl(t,e){return g.Create({"~kind":"Generic"},{type:"generic",parameters:t,expression:e})}function iu(t){return v(t,"Generic")}function ll(t){return g.Create({"~kind":"Any"},{},t)}function Ve(t){return v(t,"Any")}var Uy="(?!)";function oe(t){return g.Create({"~kind":"Never"},{not:{}},t)}function Nr(t){return v(t,"Never")}function Ky(t){return s.Keys(t).filter(e=>!Ke(t[e]))}function su(t){return s.Keys(t)}function au(t){return s.Values(t)}function O(t,e={}){let r=Ky(t),n=r.length>0?{required:r}:{};return g.Create({"~kind":"Object"},{type:"object",...n,properties:t},e)}function N(t){return v(t,"Object")}function jy(t){return g.Discard(t,["~kind","type","properties","required"])}function q(t,e={}){return g.Create({"~kind":"Union"},{anyOf:t},e)}function b(t){return v(t,"Union")}function Wy(t){return g.Discard(t,["~kind","anyOf"])}function Yt(t){return g.Create({"~kind":"Unknown"},{},t)}function Ye(t){return v(t,"Unknown")}function qr(t,e,r){let n=s.Keys(t).reduce((o,i)=>({...o,[i]:g.Update(t[i],{},{$id:i})}),{});return g.Create({"~kind":"Cyclic"},{$defs:n,$ref:e},r)}function ge(t){return v(t,"Cyclic")}function Gy(t){return s.IsObjectNotArray(t)&&s.HasPropertyKey(t,"~unsafe")&&s.IsNull(t["~unsafe"])}function $e(t){return v(t,"Infer")}function Ne(t){return v(t,"Enum")}function qt(t,e={}){return g.Create({"~kind":"Intersect"},{allOf:t},e)}function D(t){return v(t,"Intersect")}function Vy(t){return g.Discard(t,["~kind","allOf"])}function ml(t){return de(t)&&s.HasPropertyKey(t,"~codec")&&s.IsObject(t["~codec"])&&s.HasPropertyKey(t["~codec"],"encode")&&s.HasPropertyKey(t["~codec"],"decode")}var zy="-?(?:0|[1-9][0-9]*)n";function Jy(t){return g.Create({"~kind":"BigInt"},{type:"bigint"},t)}function Bt(t){return v(t,"BigInt")}function vt(t){return v(t,"Boolean")}var uu="-?(?:0|[1-9][0-9]*)";function pu(t){return g.Create({"~kind":"Integer"},{type:"integer"},t)}function at(t){return v(t,"Integer")}function cr(t,e){return g.Create({"~kind":"Iterator"},{type:"iterator",iteratorItems:t},e)}function ut(t){return v(t,"Iterator")}function Qy(t){return g.Discard(t,["~kind","type","iteratorItems"])}var cl=class extends Error{constructor(e){super("Invalid Literal value"),Object.defineProperty(this,"cause",{value:{value:e},writable:!1,configurable:!1,enumerable:!1})}};function VE(t){return s.IsBigInt(t)?"bigint":s.IsBoolean(t)?"boolean":s.IsNumber(t)?"number":s.IsString(t)?"string":(()=>{throw new cl(t)})()}function Z(t,e){return g.Create({"~kind":"Literal"},{type:VE(t),const:t},e)}function fl(t){return s.IsBigInt(t)||s.IsBoolean(t)||s.IsNumber(t)||s.IsString(t)}function Yy(t){return G(t)&&s.IsBigInt(t.const)}function Zy(t){return G(t)&&s.IsBoolean(t.const)}function du(t){return G(t)&&s.IsNumber(t.const)}function lu(t){return G(t)&&s.IsString(t.const)}function G(t){return v(t,"Literal")}function li(t){return g.Create({"~kind":"Null"},{type:"null"},t)}function wn(t){return v(t,"Null")}var mu="-?(?:0|[1-9][0-9]*)(?:.[0-9]+)?";function Ut(t){return g.Create({"~kind":"Number"},{type:"number"},t)}function be(t){return v(t,"Number")}function gl(t){return g.Create({"~kind":"Symbol"},{type:"symbol"},t)}function uo(t){return v(t,"Symbol")}var cu=".*";function bt(t){return g.Create({"~kind":"String"},{type:"string"},t)}function Ze(t){return v(t,"String")}function mi(t){let e=Xy(t);return s.IsEqual(e.length,2)?e[0]:[]}function HE(t){return!0}function eS(t){return s.TakeLeft(t,(e,r)=>zE(e)?eS(r):!1,()=>!0)}function tS(t){return s.IsEqual(t.length,0)?!1:eS(t)}function zE(t){return b(t)?tS(t.anyOf):G(t)?HE(t.const):!1}function fu(t){return tS(t)}function gu(t){return g.Create({"~kind":"TemplateLiteral"},{type:"string",pattern:t},{})}function rS(t,e,r=[]){return s.TakeLeft(t,(n,o)=>rS(o,e,[...r,`${n}${e}`]),()=>r)}function JE(t,e){return s.IsEqual(t.length,0)?[`${e}`]:rS(t,e)}function nS(t,e,r=[]){return s.TakeLeft(e,(n,o)=>nS(t,o,[...r,...oS(t,n)]),()=>r)}function oS(t,e){return b(e)?nS(t,e.anyOf):G(e)?JE(t,e.const):Y()}function iS(t,e){return s.TakeLeft(e,(r,n)=>iS(oS(t,r),n),()=>t)}function QE(t){return t.map(e=>Z(e))}function YE(t){let e=iS([],t),r=QE(e);return q(r)}function ZE(t){return s.IsEqual(t.length,0)?Y():s.IsEqual(t.length,1)&&G(t[0])?t[0]:YE(t)}function hl(t){let e=mi(t);return s.IsEqual(e.length,0)?bt():fu(e)?ZE(e):gu(t)}function He(t){let e=hl(t);return Ae(e)?bt():e}function mt(t,e){let r="object",n={[t]:e};return g.Create({"~kind":"Record"},{type:r,patternProperties:n})}function sS(t){return mt(Br,t)}function aS(t){return O({true:t,false:t})}function XE(t){return s.IsString(t)||s.IsNumber(t)?Z(t):s.IsNull(t)?li():oe()}function Kt(t){return t.map(r=>XE(r))}function ci(t){let e=Kt(t);return q(e)}function po(t){return ci(t.enum)}function uS(t,e){let r=ci(t);return Ur(r,e)}function pS(t,e){return mt(lo,e)}function je(t,e={}){let[r,n,o]=[t,t.length,!1];return g.Create({"~kind":"Tuple"},{type:"array",additionalItems:o,items:r,minItems:n},e)}function V(t){return v(t,"Tuple")}function dS(t){return g.Discard(t,["~kind","type","items","minItems","additionalItems"])}function yl(t){return t.reduceRight((r,n,o)=>({[o]:n,...r}),{})}function lS(t){let e=yl(t.items);return O(e)}function e$(t,e){return di(t)?!!di(e):!1}function t$(t,e){return Ke(t)?!!Ke(e):!1}function r$(t,e){let r=e$(t,e),n=t$(t,e),o=ye([t,e]),i=nu(ao(o));return r&&n?In(kn(i)):r&&!n?In(i):!r&&n?kn(i):i}function n$(t,e,r){return r in t?r in e?r$(t[r],e[r]):t[r]:r in e?e[r]:oe()}function o$(t,e){return[...new Set([...s.Keys(e),...s.Keys(t)])].reduce((n,o)=>({...n,[o]:n$(t,e,o)}),{})}function mS(t){return N(t)?t.properties:V(t)?yl(t.items):Y()}function cS(t,e){let r=mS(t),n=mS(e),o=o$(r,n);return O(o)}function fS(t,e){let r=vn(t,e);return s.IsEqual(r,gi)?t:s.IsEqual(r,hi)||s.IsEqual(r,fi)?e:oe()}function gS(t){return N(t)||V(t)}function i$(t,e){let r=b(t),n=b(e);return r||n}function s$(t,e){let r=bn(t),n=bn(e),o=i$(r,n),i=gS(r),a=gS(n);return o?ye([r,n]):i&&a?cS(r,n):i&&!a?r:!i&&a?n:fS(r,n)}function hS(t,e,r=[]){return s.TakeLeft(e,(n,o)=>hS(t,o,[...r,s$(t,n)]),()=>s.IsEqual(r.length,0)?[t]:r)}function yS(t,e,r=[]){return s.TakeLeft(t,(n,o)=>yS(o,e,[...r,...yi([n],e)]),()=>r)}function yi(t,e=[]){return s.TakeLeft(t,(r,n)=>b(r)?yi(n,yS(r.anyOf,e)):yi(n,hS(r,e)),()=>e)}function ye(t){let e=yi(t);return Sl(e)}function Ot(t){return Sl(t)}function bn(t){return D(t)?ye(t.allOf):b(t)?Ot(t.anyOf):t}function An(t){return s.IsEqual(t.length,1)?t[0]:s.IsEqual(t.length,0)?oe():q(t)}function SS(t,e){let r=ye(t);return Ur(r,e)}function kS(t,e){return s.IsString(t)||s.IsNumber(t)?O({[t]:e}):s.IsEqual(t,!1)?O({false:e}):s.IsEqual(t,!0)?O({true:e}):O({})}function IS(t,e){return mt(hu,e)}function xS(t,e){return s.HasPropertyKey(t,"pattern")&&(s.IsString(t.pattern)||t.pattern instanceof RegExp)?mt(t.pattern.toString(),e):mt(Br,e)}function PS(t,e){let r=mi(t);return fu(r)?Ur(He(t),e):mt(t,e)}function a$(t){return b(t)?Zt(t.anyOf):[t]}function Zt(t){return t.reduce((e,r)=>[...e,...a$(r)],[])}function u$(t){return t.some(e=>Ze(e)||be(e)||at(e))}function p$(t,e){return s.IsEqual(u$(t),!0)?mt(Br,e):void 0}function d$(t,e){return t.reduce((r,n)=>G(n)&&(s.IsString(n.const)||s.IsNumber(n.const))?{...r,[n.const]:e}:r,{})}function l$(t,e){let r=d$(t,e);return O(r)}function wS(t,e){let r=Zt(t),n=p$(r,e);return de(n)?n:l$(r,e)}function Ur(t,e){return Ve(t)?sS(e):vt(t)?aS(e):Ne(t)?uS(t.enum,e):at(t)?pS(t,e):D(t)?SS(t.allOf,e):G(t)?kS(t.const,e):be(t)?IS(t,e):b(t)?wS(t.anyOf,e):Ze(t)?xS(t,e):Ae(t)?PS(t.pattern,e):O({})}function kl(t,e,r){return F([t])?g.Update(Ur(t,e),{},r):Il(t,e,r)}function vS(t,e,r,n,o){let i=x(t,e,r),a=x(t,e,n);return kl(i,a,o)}var lo=`^${uu}$`,hu=`^${mu}$`,Br=`^${cu}$`;function Il(t,e,r={}){return E("Record",[t,e],r)}function bS(t,e,r={}){return kl(t,e,r)}function AS(t,e){return mt(t,e)}function _t(t){return s.Keys(t.patternProperties)[0]}function yu(t){let e=_t(t);return s.IsEqual(e,Br)?bt():s.IsEqual(e,lo)?pu():s.IsEqual(e,hu)?Ut():hl(e)}function Xe(t){return t.patternProperties[_t(t)]}function Me(t){return v(t,"Record")}function xl(t){return g.Create({"~kind":"Rest"},{type:"rest",items:t},{})}function mo(t){return v(t,"Rest")}function TS(t){return v(t,"This")}function Pl(t){return g.Create({"~kind":"Undefined"},{type:"undefined"},t)}function Tn(t){return v(t,"Undefined")}function jt(t){return v(t,"Void")}function RS(t){return Jy()}function CS(t){return bt()}function ES(t){return Ut()}function $S(t){return pu()}function MS(t){return oe()}function OS(t){return Z(t)}function _S(t){return q(t[1])}function DS(t){return t.length===3?[...t[0],...t[2]]:t.length===1?[...t[0]]:[]}function FS(t){return[t[0],...t[1]]}function LS(t){return t[1]}function ku(t){return J(t.length,2)}function St(t,e,r){return ku(t)?e(t[0],t[1]):r()}function g$(t,e){return J(e.indexOf(t),0)?[t,e.slice(t.length)]:[]}function Xt(t,e){for(let r=0;r<t.length;r++){let n=g$(t[r],e);if(ku(n))return n}return[]}function Hl(t,e){return Array.from({length:e-t+1},(r,n)=>String.fromCharCode(t+n))}var NS=[...Hl(97,122),...Hl(65,90)],qS="0",BS=Hl(49,57),co=[qS,...BS],US=" ",Si=`
226
+ `;var fo="_";var KS="$";var jS="//",WS="/*",y$="*/";function GS(t){let e=t.indexOf(y$);return J(e,-1)?"":t.slice(e+2)}function VS(t){let e=t.indexOf(Si);return J(e,-1)?"":t.slice(e)}function S$(t){return t.replace(/^[ \t\r\f\v]+/,"")}function Iu(t){let e=S$(t);return e.startsWith(WS)?Iu(GS(e.slice(2))):e.startsWith(jS)?Iu(VS(e.slice(2))):e}function Wt(t){let e=t.trimStart();return e.startsWith(WS)?Wt(GS(e.slice(2))):e.startsWith(jS)?Wt(VS(e.slice(2))):e}var uX=[...co,fo];function zl(t,e){return Xt([t],e)}function Gt(t,e){return J(t,"")?["",e]:t.startsWith(Si)?zl(t,Iu(e)):t.startsWith(US)?zl(t,e):zl(t,Wt(e))}var w$=[...NS,fo,KS];var DX=[...w$,...co];var VX=[...co,fo];function v$(t){return J(t,"")?[]:[t.slice(0,1),t.slice(1)]}function HS(t,e){return Aa(t,(r,n)=>e.startsWith(r)?!0:HS(n,e),()=>!1)}function ki(t,e,r=""){return St(v$(e),(n,o)=>HS(t,e)?[r,e]:ki(t,o,`${r}${n}`),()=>[])}function zS(t,e){return St(ki(t,e),(r,n)=>J(r,"")?[]:[r,n],()=>[])}var X=(t,e,r=()=>[])=>t.length===2?e(t):r();var A$=t=>X(Gt("-?(?:0|[1-9][0-9]*)n",t),([e,r])=>[RS(e),r]),T$=t=>X(Gt(".*",t),([e,r])=>[CS(e),r]),R$=t=>X(Gt("-?(?:0|[1-9][0-9]*)(?:.[0-9]+)?",t),([e,r])=>[ES(e),r]),C$=t=>X(Gt("-?(?:0|[1-9][0-9]*)",t),([e,r])=>[$S(e),r]),E$=t=>X(Gt("(?!)",t),([e,r])=>[MS(e),r]),$$=t=>X(zS(["-?(?:0|[1-9][0-9]*)n",".*","-?(?:0|[1-9][0-9]*)(?:.[0-9]+)?","-?(?:0|[1-9][0-9]*)","(?!)","(",")","$","|"],t),([e,r])=>[OS(e),r]),M$=t=>X(X(A$(t),([e,r])=>[e,r],()=>X(T$(t),([e,r])=>[e,r],()=>X(R$(t),([e,r])=>[e,r],()=>X(C$(t),([e,r])=>[e,r],()=>X(E$(t),([e,r])=>[e,r],()=>X(O$(t),([e,r])=>[e,r],()=>X($$(t),([e,r])=>[e,r],()=>[]))))))),([e,r])=>[e,r]),O$=t=>X(X(Gt("(",t),([e,r])=>X(Ql(r),([n,o])=>X(Gt(")",o),([i,a])=>[[e,n,i],a]))),([e,r])=>[_S(e),r]),JS=t=>X(X(X(Jl(t),([e,r])=>X(Gt("|",r),([n,o])=>X(JS(o),([i,a])=>[[e,n,i],a]))),([e,r])=>[e,r],()=>X(X(Jl(t),([e,r])=>[[e],r]),([e,r])=>[e,r],()=>X([[],t],([e,r])=>[e,r],()=>[]))),([e,r])=>[DS(e),r]),Jl=t=>X(X(M$(t),([e,r])=>X(Ql(r),([n,o])=>[[e,n],o])),([e,r])=>[FS(e),r]),Ql=t=>X(X(JS(t),([e,r])=>[e,r],()=>X(Jl(t),([e,r])=>[e,r],()=>[])),([e,r])=>[e,r]),Xy=t=>X(X(Gt("^",t),([e,r])=>X(Ql(r),([n,o])=>X(Gt("$",o),([i,a])=>[[e,n,i],a]))),([e,r])=>[LS(e),r]);function D$(t){return t.join("|")}function F$(t){return t.slice(1,t.length-1)}function L$(t,e,r){return Kr(e,`${r}${t}`)}function N$(t,e){return Kr(t,`${e}${zy}`)}function q$(t,e){return Kr(t,`${e}${uu}`)}function B$(t,e){return Kr(t,`${e}${mu}`)}function U$(t,e){return xu(q([Z("false"),Z("true")]),t,e)}function K$(t,e){return Kr(t,`${e}${cu}`)}function j$(t,e,r){return Kr(e,`${r}${F$(t)}`)}function W$(t,e,r){let n=Pu(t,{});return xu(n,e,r)}function G$(t,e,r){let n=Kt(t);return Yl(n,e,r)}function Yl(t,e,r,n=[]){return s.TakeLeft(t,(o,i)=>Yl(i,e,r,[...n,xu(o,[],"")]),()=>Kr(e,`${r}(${D$(n)})`))}function xu(t,e,r){return Ne(t)?G$(t.enum,e,r):at(t)?q$(e,r):G(t)?L$(t.const,e,r):Bt(t)?N$(e,r):vt(t)?U$(e,r):be(t)?B$(e,r):Ze(t)?K$(e,r):Ae(t)?j$(t.pattern,e,r):YS(t)?W$(t.parameters[0],e,r):b(t)?Yl(t.anyOf,e,r):Uy}function Kr(t,e){return s.TakeLeft(t,(r,n)=>xu(r,n,e),()=>e)}function V$(t){return`^${Kr(t,"")}$`}function QS(t){let e=V$(t);return gu(e)}function Pu(t,e){return F(t)?g.Update(QS(t),{},e):wl(t,e)}function ZS(t,e,r,n){let o=At(t,e,r);return Pu(o,n)}function wl(t,e={}){return E("TemplateLiteral",[t],e)}function YS(t){return de(t)&&s.HasPropertyKey(t,"action")&&s.IsEqual(t.action,"TemplateLiteral")}function Ae(t){return v(t,"TemplateLiteral")}var L={};Tt(L,{ExtendsFalse:()=>B,ExtendsTrue:()=>A,ExtendsUnion:()=>Zl,IsExtendsFalse:()=>H$,IsExtendsTrue:()=>ek,IsExtendsTrueLike:()=>go,IsExtendsUnion:()=>XS,Match:()=>Oe});function Zl(t){return g.Create({"~kind":"ExtendsUnion"},{inferred:t})}function XS(t){return s.IsObject(t)&&s.HasPropertyKey(t,"~kind")&&s.HasPropertyKey(t,"inferred")&&s.IsEqual(t["~kind"],"ExtendsUnion")&&s.IsObject(t.inferred)}function A(t){return g.Create({"~kind":"ExtendsTrue"},{inferred:t})}function ek(t){return s.IsObject(t)&&s.HasPropertyKey(t,"~kind")&&s.HasPropertyKey(t,"inferred")&&s.IsEqual(t["~kind"],"ExtendsTrue")&&s.IsObject(t.inferred)}function B(){return g.Create({"~kind":"ExtendsFalse"},{})}function H$(t){return s.IsObject(t)&&s.HasPropertyKey(t,"~kind")&&s.IsEqual(t["~kind"],"ExtendsFalse")}function go(t){return XS(t)||ek(t)}function Oe(t,e,r){return go(t)?e(t.inferred):r()}function z$(t,e,r,n){return Oe(re(t,r,n),o=>A(g.Assign(g.Assign(t,o),{[e]:r})),()=>B())}function J$(t,e){return A(t)}function Q$(t,e,r){let n=ci(r);return re(t,e,n)}function tk(t,e,r){return s.TakeLeft(r,(n,o)=>Oe(re(t,e,n),i=>tk(i,e,o),()=>B()),()=>A(t))}function Y$(t,e,r){let n=He(r);return re(t,e,n)}function rk(t,e,r){return s.TakeLeft(r,(n,o)=>Oe(re(t,e,n),i=>A(i),()=>rk(t,e,o)),()=>B())}function K(t,e,r){return Ve(r)?J$(t,e):Ne(r)?Q$(t,e,r.enum):$e(r)?z$(t,r.name,e,r.extends):D(r)?tk(t,e,r.allOf):Ae(r)?Y$(t,e,r.pattern):b(r)?rk(t,e,r.anyOf):Ye(r)?A(t):B()}function nk(t,e,r){return $e(r)?K(t,e,r):Ve(r)?A(t):Ye(r)?A(t):Zl(t)}function Z$(t,e){let r=pi(t),n=pi(e);return r&&n||!r&&n?!0:!(r&&!n)}function ok(t,e,r,n){return te(n)?Z$(e,n)?re(t,r,n.items):B():K(t,e,n)}function ik(t,e,r){return st(r)?re(t,e,r.iteratorItems):K(t,mr(e),r)}function sk(t,e,r){return Bt(r)?A(t):K(t,e,r)}function ak(t,e,r){return vt(r)?A(t):K(t,e,r)}function X$(t,e,r,n,o){let i=$e(n)?e:n,a=$e(n)?n:e,u=Ke(e),p=Ke(n);return!u&&p?B():Oe(re(t,i,a),d=>Ii(d,r,o),()=>B())}function eM(t,e,r,n){return s.TakeLeft(n,(o,i)=>X$(t,e,r,o,i),()=>Ke(e)?A(t):B())}function tM(t,e,r){return s.TakeLeft(e,(n,o)=>eM(t,n,o,r),()=>A(t))}function Ii(t,e,r){return tM(t,e,r)}function wu(t,e,r){return jt(r)?A(t):re(t,e,r)}function uk(t,e,r,n){return Ve(n)?A(t):Ye(n)?A(t):Fe(n)?Oe(Ii(t,e,n.parameters),o=>wu(o,r,n.instanceType),()=>B()):B()}function pk(t,e,r){return re(t,po(e),r)}function dk(t,e,r,n){return Ve(n)?A(t):Ye(n)?A(t):Le(n)?Oe(Ii(t,e,n.parameters),o=>wu(o,r,n.returnType),()=>B()):B()}function lk(t,e,r){return at(r)?A(t):be(r)?A(t):K(t,e,r)}function mk(t,e,r){let n=ye(e);return re(t,n,r)}function ck(t,e,r){return ut(r)?re(t,e,r.iteratorItems):K(t,cr(e),r)}function vu(t,e,r){return e===r?A(t):B()}function rM(t,e,r){return G(r)?vu(t,e,r.const):Bt(r)?A(t):K(t,Z(e),r)}function nM(t,e,r){return G(r)?vu(t,e,r.const):vt(r)?A(t):K(t,Z(e),r)}function oM(t,e,r){return G(r)?vu(t,e,r.const):be(r)?A(t):K(t,Z(e),r)}function iM(t,e,r){return G(r)?vu(t,e,r.const):Ze(r)?A(t):K(t,Z(e),r)}function fk(t,e,r){return s.IsBigInt(e.const)?rM(t,e.const,r):s.IsBoolean(e.const)?nM(t,e.const,r):s.IsNumber(e.const)?oM(t,e.const,r):s.IsString(e.const)?iM(t,e.const,r):Y()}function gk(t,e,r){return $e(r)?K(t,e,r):A(t)}function hk(t,e,r){return wn(r)?A(t):K(t,e,r)}function yk(t,e,r){return be(r)?A(t):K(t,e,r)}function sM(t,e,r){return Ke(e)?Ke(r)?A(t):B():A(t)}function aM(t,e,r){return $e(r)&&Nr(r.extends)?B():Oe(re(t,e,r),n=>sM(n,e,r),()=>B())}function uM(t,e){return t.reduce((r,n)=>n in e?go(e[n])?{...r,...e[n].inferred}:Y():Y(),{})}function pM(t,e,r){let n={};for(let a of s.Keys(r))n[a]=a in e?aM({},e[a],r[a]):Ke(r[a])?$e(r[a])?A(g.Assign(t,{[r[a].name]:r[a].extends})):A(t):B();let o=s.Values(n).every(a=>go(a)),i=o?uM(s.Keys(n),n):{};return o?A(i):B()}function dM(t,e,r){let n=pM(t,e,r);return go(n)?A(g.Assign(t,n.inferred)):B()}function lM(t,e,r){return dM(t,e,r)}function Sk(t,e,r){return N(r)?lM(t,e,r.properties):K(t,O(e),r)}function kk(t,e,r){return Ge(r)?re(t,e,r.item):K(t,dr(e),r)}function Ik(t,e,r){return Ze(r)?A(t):K(t,e,r)}function xk(t,e,r){return uo(r)?A(t):K(t,e,r)}function Pk(t,e,r){let n=He(e);return re(t,n,r)}function Xl(t,e){return g.Create({"~kind":"Inferrable"},{name:t,type:e},{})}function xi(t){return s.IsObject(t)&&s.HasPropertyKey(t,"~kind")&&s.HasPropertyKey(t,"name")&&s.HasPropertyKey(t,"type")&&s.IsEqual(t["~kind"],"Inferrable")&&s.IsString(t.name)&&s.IsObject(t.type)}function em(t){return mo(t)?$e(t.items)?te(t.items.extends)?Xl(t.items.name,t.items.extends.items):Ye(t.items.extends)?Xl(t.items.name,t.items.extends):void 0:Y():void 0}function bu(t){return $e(t)?Xl(t.name,t.extends):void 0}function tm(t,e,r=[]){return s.TakeLeft(t,(n,o)=>Oe(re({},n,e),()=>tm(o,e,[...r,n]),()=>{}),()=>r)}function wk(t,e,r,n){let o=tm(r,n);return s.IsArray(o)?A(g.Assign(t,{[e]:je(o)})):B()}function Au(t,e,r,n){let o=tm(r,n);return s.IsArray(o)?A(g.Assign(t,{[e]:q(o)})):B()}function mM(t){return[...t].reverse()}function rm(t,e){return e?mM(t):t}function cM(t){let e=t.length>0?t[0]:void 0,r=de(e)?em(e):void 0;return de(r)}function fM(t,e,r,n,o,i){return Oe(re(t,r,o),a=>vk(a,e,n,i),()=>B())}function gM(t,e,r,n,o){let i=em(n);return xi(i)?wk(t,i.name,rm(r,e),i.type):s.TakeLeft(r,(a,u)=>fM(t,e,a,u,n,o),()=>B())}function hM(t,e,r,n){return s.TakeLeft(n,(o,i)=>gM(t,e,r,o,i),()=>s.IsEqual(r.length,0)?A(t):B())}function vk(t,e,r,n){return hM(t,e,r,n)}function yM(t,e,r){let n=jr(t,{callstack:[]},r),o=cM(n);return vk(t,o,rm(e,o),rm(n,o))}function bk(t,e,r){let n=bu(r);return xi(n)?Au(t,n.name,e,n.type):s.TakeLeft(e,(o,i)=>Oe(re(t,o,r),a=>bk(a,i,r),()=>B()),()=>A(t))}function Ak(t,e,r){let n=jr(t,{callstack:[]},e);return V(r)?yM(t,n,r.items):te(r)?bk(t,n,r.items):K(t,je(n),r)}function Tk(t,e,r){return jt(r)?A(t):Tn(r)?A(t):K(t,e,r)}function Rk(t,e,r){return s.TakeLeft(r,(n,o)=>Oe(re(t,e,n),i=>A(i),()=>Rk(t,e,o)),()=>B())}function nm(t,e,r){return s.TakeLeft(e,(n,o)=>Oe(Rk(t,n,r),i=>nm(i,o,r),()=>B()),()=>A(t))}function Ck(t,e,r){let n=bu(r);return xi(n)?Au(t,n.name,e,n.type):b(r)?nm(t,e,r.anyOf):nm(t,e,[r])}function Ek(t,e,r){return $e(r)?K(t,e,r):Ve(r)?A(t):Ye(r)?A(t):B()}function $k(t,e,r){return jt(r)?A(t):K(t,e,r)}function re(t,e,r){return Ve(e)?nk(t,e,r):te(e)?ok(t,e,e.items,r):st(e)?ik(t,e.iteratorItems,r):Bt(e)?sk(t,e,r):vt(e)?ak(t,e,r):Fe(e)?uk(t,e.parameters,e.instanceType,r):Ne(e)?pk(t,e,r):Le(e)?dk(t,e.parameters,e.returnType,r):at(e)?lk(t,e,r):D(e)?mk(t,e.allOf,r):ut(e)?ck(t,e.iteratorItems,r):G(e)?fk(t,e,r):Nr(e)?gk(t,e,r):wn(e)?hk(t,e,r):be(e)?yk(t,e,r):N(e)?Sk(t,e.properties,r):Ge(e)?kk(t,e.item,r):Ze(e)?Ik(t,e,r):uo(e)?xk(t,e,r):Ae(e)?Pk(t,e.pattern,r):V(e)?Ak(t,e.items,r):Tn(e)?Tk(t,e,r):b(e)?Ck(t,e.anyOf,r):Ye(e)?Ek(t,e,r):jt(e)?$k(t,e,r):B()}function SM(t,e){return ye([...t,O(e)])}function Mk(t,e,r){return F(t)?g.Update(SM(t,e),{},r):vl(t,e,r)}function Ok(t,e,r,n,o){let i=At(t,e,r),a=Pi(t,e,n);return Mk(i,a,o)}function vl(t,e,r={}){return E("Interface",[t,e],r)}function ho(t){return de(t)&&s.HasPropertyKey(t,"action")&&s.IsEqual(t.action,"Interface")}function kM(t,e,r){return t.includes(r)?!0:Wr([...t,r],e,e[r])}function _k(t,e,r){let n=au(r);return Rn(t,e,n)}function Rn(t,e,r){return s.TakeLeft(r,(n,o)=>Wr(t,e,n)?!0:Rn(t,e,o),()=>!1)}function Wr(t,e,r){return se(r)?kM(t,e,r.$ref):te(r)?Wr(t,e,r.items):st(r)?Wr(t,e,r.iteratorItems):Fe(r)?Rn(t,e,[...r.parameters,r.instanceType]):Le(r)?Rn(t,e,[...r.parameters,r.returnType]):ho(r)?_k(t,e,r.parameters[1]):D(r)?Rn(t,e,r.allOf):ut(r)?Wr(t,e,r.iteratorItems):N(r)?_k(t,e,r.properties):Ge(r)?Wr(t,e,r.item):b(r)?Rn(t,e,r.anyOf):V(r)?Rn(t,e,r.items):Me(r)?Wr(t,e,Xe(r)):!1}function Tu(t,e,r){return Wr(t,e,r)}function IM(t,e){return e.reduce((r,n)=>n in t?Tu([n],t,t[n])?[...r,n]:r:Y(),[])}function Dk(t){let e=su(t);return IM(t,e)}function xM(t,e,r){return r.includes(e)?r:e in t?Gr(t,t[e],[...r,e]):Y()}function Fk(t,e,r){let n=au(e);return yo(t,n,r)}function yo(t,e,r){return e.reduce((n,o)=>Gr(t,o,n),r)}function Gr(t,e,r){return se(e)?xM(t,e.$ref,r):te(e)?Gr(t,e.items,r):st(e)?Gr(t,e.iteratorItems,r):Fe(e)?yo(t,[...e.parameters,e.instanceType],r):Le(e)?yo(t,[...e.parameters,e.returnType],r):ho(e)?Fk(t,e.parameters[1],r):D(e)?yo(t,e.allOf,r):ut(e)?Gr(t,e.iteratorItems,r):N(e)?Fk(t,e.properties,r):Ge(e)?Gr(t,e.item,r):b(e)?yo(t,e.anyOf,r):V(e)?yo(t,e.items,r):Me(e)?Gr(t,Xe(e),r):r}function Lk(t,e,r){return Gr(t,r,[e])}function PM(t){return ll()}function wM(t){return s.Keys(t).reduce((e,r)=>({...e,[r]:er(t[r])}),{})}function wi(t){return t.reduce((e,r)=>[...e,er(r)],[])}function er(t){return se(t)?PM(t.$ref):te(t)?lr(er(t.items),ou(t)):st(t)?mr(er(t.iteratorItems)):Fe(t)?xn(wi(t.parameters),er(t.instanceType)):Le(t)?Pn(wi(t.parameters),er(t.returnType)):D(t)?qt(wi(t.allOf)):ut(t)?cr(er(t.iteratorItems)):N(t)?O(wM(t.properties)):Ge(t)?dr(er(t.item)):Me(t)?bS(yu(t),er(Xe(t))):b(t)?q(wi(t.anyOf)):V(t)?je(wi(t.items)):t}function vM(t,e){return e in t?er(t[e]):Yt()}function Nk(t){return vM(t.$defs,t.$ref)}function bM(t,e,r){let n=At(t,{callstack:[]},e),o=Pi({},{callstack:[]},r);return ye([...n,O(o)])}function AM(t,e){return s.Keys(t).filter(n=>e.includes(n)).reduce((n,o)=>{let i=t[o],a=ho(i)?bM(t,i.parameters[0],i.parameters[1]):i;return{...n,[o]:a}},{})}function qk(t,e,r){let n=Lk(t,e,r),o=AM(t,n);return qr(o,e)}function Bk(t,e){return e in t?se(t[e])?Bk(t,t[e].$ref):t[e]:oe()}function tr(t,e){return Bk(t,e)}function Uk(t){return ge(t)?Nk(t):Gy(t)?Yt():t}function pt(t,e,r){let n=Uk(e),o=Uk(r);return re(t,n,o)}var fi="equal",TM="disjoint",gi="left-inside",hi="right-inside";function vn(t,e){let r=[Ye(t)?L.ExtendsFalse():pt({},t,e),Ye(t)?L.ExtendsTrue({}):pt({},e,t)];return L.IsExtendsTrueLike(r[0])&&L.IsExtendsTrueLike(r[1])?fi:L.IsExtendsTrueLike(r[0])&&L.IsExtendsFalse(r[1])?gi:L.IsExtendsFalse(r[0])&&L.IsExtendsTrueLike(r[1])?hi:TM}function RM(t,e){return e.filter(r=>vn(t,r)!==hi)}function CM(t,e){let r=e.some(n=>{let o=vn(t,n);return s.IsEqual(o,gi)||s.IsEqual(o,fi)});return s.IsEqual(r,!1)}function EM(t,e){let r=bn(t);return Ve(r)?[r]:CM(r,e)?[...RM(r,e),r]:e}function $M(t){return t.reduce((e,r)=>N(r)?[...e,r]:Nr(r)?e:EM(r,e),[])}function Sl(t){let e=$M(t),r=Zt(e);return r.length===0?oe():r.length===1?r[0]:q(r)}function om(t,e){return g.Update(bn(t),{},e)}function Kk(t,e,r,n){let o=x(t,e,r);return om(o,n)}function vi(t,e=[]){return Lr(t)&&s.IsEqual(t.action,"Conditional")?se(t.parameters[0])?vi(t.parameters[2],vi(t.parameters[3],[...e,t.parameters[0].$ref])):vi(t.parameters[2],vi(t.parameters[3],e)):Lr(t)&&s.IsEqual(t.action,"Mapped")&&Lr(t.parameters[1])&&s.IsEqual(t.parameters[1].action,"KeyOf")&&se(t.parameters[1].parameters[0])?[...e,t.parameters[1].parameters[0].$ref]:e}function MM(t,e){return t.reduce((r,n)=>[...r,e.includes(n.name)],[])}function Gk(t,e,r=[]){return s.TakeLeft(t,(n,o)=>s.TakeLeft(e,(i,a)=>Gk(o,a,[...r,[i,n]]),()=>r),()=>r)}function OM(t){return b(t)?[...t.anyOf]:[t]}function _M(t,e){return t.reduce((r,n)=>[...r,[...n,e]],[])}function jk(t,e){return e.reduce((r,n)=>[...r,..._M(t,n)],[])}function Wk(t){return t.reduce((e,r)=>s.IsEqual(r[0],!0)?jk(e,OM(r[1])):jk(e,[r[1]]),[[]])}function Vk(t,e,r){let n=vi(r),o=MM(t,n),i=Gk(e,o);return Lr(r)&&s.IsEqual(r.action,"Conditional")||Lr(r)&&s.IsEqual(r.action,"Mapped")?Wk(i):[e]}function DM(){return["(not-resolvable)",oe()]}function FM(){return["(not-generic)",oe()]}function LM(t,e,r){return[t,dl(e,r)]}function NM(t,e,r){return e in t?Hk(t,e,t[e],r):DM()}function Hk(t,e,r,n){return iu(r)?LM(e,r.parameters,r.expression):se(r)?NM(t,r.$ref,n):FM()}function zk(t,e,r){return Hk(t,"(anonymous)",e,r)}function qM(t,e,r){if($e(e)||Ru(e)||L.IsExtendsTrueLike(pt({},e,r)))return;let n={parameter:t,expect:r,actual:e};throw new Error(`Argument for parameter ${t} does not satisfy constraint`,{cause:n})}function Jk(t,e,r,n,o){let i=x(t,e,o);return qM(r,i,n),g.Assign(t,{[r]:i})}function BM(t,e,r,n,o){let i=x(t,e,r.extends),a=x(t,e,r.equals);return s.TakeLeft(o,(u,p)=>im(Jk(t,e,r.name,i,u),e,n,p),()=>im(Jk(t,e,r.name,i,a),e,n,[]))}function im(t,e,r,n){return s.TakeLeft(r,(o,i)=>BM(t,e,o,i,n),()=>t)}function Qk(t,e,r,n){return im(t,e,r,n)}function UM(t){return s.IsGreaterThan(t.callstack.length,0)?t.callstack[t.callstack.length-1]:""}function KM(t,e){return s.IsEqual(UM(t),e)}function jM(t,e,r,n,o,i){let a=Qk(t,e,n,i),u=x(a,{callstack:[...e.callstack,r.$ref]},o);return x(t,e,u)}function WM(t,e,r,n,o,i){return i.reduce((a,u)=>[...a,jM(t,e,r,n,o,u)],[])}function GM(t,e,r,n,o,i){let a=Vk(n,i,o),u=WM(t,e,r,n,o,a);return s.IsEqual(u.length,1)?u[0]:Ot(u)}function sm(t,e,r,n){let o=At(t,e,n),i=zk(t,r,n),a=i[0],u=i[1];return iu(u)?KM(e,a)?Su(yt(a),o):GM(t,e,yt(a),u.parameters,u.expression,o):Su(r,o)}function Su(t,e){return g.Create({"~kind":"Call"},{target:t,arguments:e},{})}function Ru(t){return v(t,"Call")}function Yk(t,e){return t(e)}function Zk(t,e){return s.IsString(e)?Z(Yk(t,e)):Z(e)}function Xk(t,e){let r=He(e);return fr(t,r)}function eI(t,e){let r=e.map(n=>fr(t,n));return q(r)}function fr(t,e){return G(e)?Zk(t,e.const):Ae(e)?Xk(t,e.pattern):b(e)?eI(t,e.anyOf):e}function bl(t,e={}){return E("Capitalize",[t],e)}function Al(t,e={}){return E("Lowercase",[t],e)}function Tl(t,e={}){return E("Uncapitalize",[t],e)}function Rl(t,e={}){return E("Uppercase",[t],e)}var VM=t=>t[0].toUpperCase()+t.slice(1),HM=t=>t.toLowerCase(),zM=t=>t[0].toLowerCase()+t.slice(1),JM=t=>t.toUpperCase();function tI(t,e){return F([t])?g.Update(fr(VM,t),{},e):bl(t,e)}function rI(t,e){return F([t])?g.Update(fr(HM,t),{},e):Al(t,e)}function nI(t,e){return F([t])?g.Update(fr(zM,t),{},e):Tl(t,e)}function oI(t,e){return F([t])?g.Update(fr(JM,t),{},e):Rl(t,e)}function iI(t,e,r,n){let o=x(t,e,r);return tI(o,n)}function sI(t,e,r,n){let o=x(t,e,r);return rI(o,n)}function aI(t,e,r,n){let o=x(t,e,r);return nI(o,n)}function uI(t,e,r,n){let o=x(t,e,r);return oI(o,n)}function Cl(t,e,r,n,o={}){return E("Conditional",[t,e,r,n],o)}function QM(t,e,r,n,o,i){let a=pt(t,r,n);return L.IsExtendsUnion(a)?q([x(a.inferred,e,o),x(t,e,i)]):L.IsExtendsTrue(a)?x(a.inferred,e,o):x(t,e,i)}function pI(t,e,r,n,o,i,a){return F([r,n])?g.Update(QM(t,e,r,n,o,i),{},a):Cl(r,n,o,i,a)}function dI(t,e,r,n,o,i,a){let u=x(t,e,r),p=x(t,e,n);return pI(t,e,u,p,o,i,a)}function El(t,e={}){return E("ConstructorParameters",[t],e)}function YM(t){let e=Fe(t)?t.parameters:[],r=jr({},{callstack:[]},e);return je(r)}function lI(t,e){return F([t])?g.Update(YM(t),{},e):El(t,e)}function mI(t,e,r,n){let o=x(t,e,r);return lI(o,n)}function $l(t,e,r={}){return E("Exclude",[t,e],r)}function cI(t,e){return t.reduce((r,n)=>[...r,...fI(n,e)],[])}function fI(t,e){let r=pt({},t,e);return L.IsExtendsTrueLike(r)?[]:[t]}function gI(t,e){let r=Ne(t)?cI(Kt(t.enum),e):b(t)?cI(Zt(t.anyOf),e):fI(t,e);return Ot(r)}function Cu(t,e,r){return F([t,e])?g.Update(gI(t,e),{},r):$l(t,e,r)}function hI(t,e,r,n,o){let i=x(t,e,r),a=x(t,e,n);return Cu(i,a,o)}function Ml(t,e,r={}){return E("Extract",[t,e],r)}function SI(t,e){return t.reduce((r,n)=>[...r,...kI(n,e)],[])}function kI(t,e){let r=pt({},t,e);return L.IsExtendsTrueLike(r)?[t]:[]}function II(t,e){let r=Ne(t)?SI(Kt(t.enum),e):b(t)?SI(Zt(t.anyOf),e):kI(t,e);return Ot(r)}function yI(t,e,r){return F([t,e])?g.Update(II(t,e),{},r):Ml(t,e,r)}function xI(t,e,r,n,o){let i=x(t,e,r),a=x(t,e,n);return yI(i,a,o)}function Ol(t,e,r={}){return E("Index",[t,e],r)}function vI(t,e){let r=tr(t,e);return Vt(r)}function ZM(t,e){let r=s.Keys(t).filter(l=>!s.HasPropertyKey(e,l)),n=s.Keys(e).filter(l=>!s.HasPropertyKey(t,l)),o=s.Keys(t).filter(l=>s.HasPropertyKey(e,l)),i=r.reduce((l,m)=>({...l,[m]:t[m]}),{}),a=n.reduce((l,m)=>({...l,[m]:e[m]}),{}),u=o.reduce((l,m)=>({...l,[m]:ye([t[m],e[m]])}),{}),p=g.Assign(i,a);return g.Assign(p,u)}function bI(t){return t.reduce((e,r)=>ZM(e,Vt(r)),{})}function AI(t){let e=lS(je(t));return Vt(e)}function XM(t,e){return s.Keys(t).filter(o=>o in e).reduce((o,i)=>({...o,[i]:Ot([t[i],e[i]])}),{})}function TI(t,e){return s.TakeLeft(t,(r,n)=>TI(n,XM(e,Vt(r))),()=>e)}function RI(t){return s.TakeLeft(t,(e,r)=>TI(r,Vt(e)),()=>Y())}function Vt(t){return ge(t)?vI(t.$defs,t.$ref):D(t)?bI(t.allOf):b(t)?RI(t.anyOf):V(t)?AI(t.items):N(t)?t.properties:{}}function So(t){let e=Vt(t);return O(e)}var eO=new RegExp("^(?:0|[1-9][0-9]*)$");function ko(t){let e=`${t}`;return eO.test(e)?parseInt(e):t}function tO(t){return Z(ko(t))}function CI(t){return t.map(e=>EI(e))}function EI(t){return D(t)?qt(CI(t.allOf)):b(t)?q(CI(t.anyOf)):G(t)?tO(t.const):t}function $I(t,e){let r=EI(e),n=pt({},r,Ut());return L.IsExtendsTrueLike(n)?t:G(e)&&s.IsEqual(e.const,"length")?Ut():oe()}function MI(t,e){let r=tr(t,e);return rr(r)}function Eu(t){return t.reduce((e,r)=>[...e,...rr(r)],[])}function OI(t){let e=Kt(t);return Eu(e)}function _I(t){let e=ye(t);return rr(e)}function DI(t){return[`${t}`]}function FI(t){let e=He(t);return rr(e)}function rr(t){return ge(t)?MI(t.$defs,t.$ref):Ne(t)?OI(t.enum):D(t)?_I(t.allOf):G(t)?DI(t.const):Ae(t)?FI(t.pattern):b(t)?Eu(t.anyOf):[]}function Io(t){return rr(t)}function bi(t,e){return e.map(r=>Vr(t,r))}function Vr(t,e){return te(e)?lr(Vr(t,e.items)):st(e)?mr(Vr(t,e.iteratorItems)):Fe(e)?xn(bi(t,e.parameters),Vr(t,e.instanceType)):Le(e)?Pn(bi(t,e.parameters),Vr(t,e.returnType)):ut(e)?cr(Vr(t,e.iteratorItems)):Ge(e)?dr(Vr(t,e.item)):V(e)?je(bi(t,e.items)):b(e)?q(bi(t,e.anyOf)):D(e)?qt(bi(t,e.allOf)):TS(e)?O(t):e}function LI(t,e){return Vr(t,e)}function rO(t,e){let r=e in t?t[e]:oe();return LI(t,r)}function NI(t,e){return e.reduce((r,n)=>[...r,rO(t,n)],[])}function nO(t,e){let r=Io(e),n=NI(t,r);return Ot(n)}var oO=new RegExp(lo);function iO(t){return t.filter(r=>oO.test(r))}function sO(t){let e=su(t),r=iO(e),n=NI(t,r);return Ot(n)}function qI(t,e){return be(e)?sO(t):nO(t,e)}function aO(t){return Z(ko(t))}function BI(t){return t.map(e=>am(e))}function am(t){return D(t)?qt(BI(t.allOf)):b(t)?q(BI(t.anyOf)):G(t)?aO(t.const):t}function uO(t,e){return t.reduceRight((r,n,o)=>{let i=pt({},Z(o),e);return L.IsExtendsTrueLike(i)?[n,...r]:r},[])}function pO(t,e){let r=am(e),n=uO(t,r);return An(n)}function dO(t){return An(t)}function UI(t,e){return G(e)&&s.IsEqual(e.const,"length")?Z(t.length):be(e)||at(e)?dO(t):pO(t,e)}function KI(t,e){return te(t)?$I(t.items,e):N(t)?qI(t.properties,e):V(t)?UI(t.items,e):oe()}function lO(t){return ge(t)||D(t)||b(t)?So(t):t}function wI(t,e,r){return F([t,e])?g.Update(KI(lO(t),e),{},r):Ol(t,e,r)}function jI(t,e,r,n,o){let i=x(t,e,r),a=x(t,e,n);return wI(i,a,o)}function _l(t,e={}){return E("InstanceType",[t],e)}function mO(t){return Fe(t)?t.instanceType:oe()}function WI(t,e){return F([t])?g.Update(mO(t),{},e):_l(t,e)}function GI(t,e,r,n={}){let o=x(t,e,r);return WI(o,n)}function Dl(t,e={}){return E("KeyOf",[t],e)}function HI(){return q([Ut(),bt(),gl()])}function zI(t){return Ut()}function cO(t){return t.reduce((r,n)=>fl(n)?[...r,Z(ko(n))]:Y(),[])}function JI(t){let e=s.Keys(t),r=cO(e);return An(r)}function QI(t){return yu(t)}function YI(t){let e=t.map((r,n)=>Z(n));return An(e)}function ZI(t){return Ve(t)?HI():te(t)?zI(t.items):N(t)?JI(t.properties):Me(t)?QI(t):V(t)?YI(t.items):oe()}function fO(t){return ge(t)||D(t)||b(t)?So(t):t}function VI(t,e){return F([t])?g.Update(ZI(fO(t)),{},e):Dl(t,e)}function XI(t,e,r,n){let o=x(t,e,r);return VI(o,n)}function Fl(t,e,r,n,o={}){return E("Mapped",[t,e,r,n],o)}function gO(t){let e=He(t);return um(e)}function tx(t){return t.reduce((e,r)=>[...e,...um(r)],[])}function hO(t){return s.IsNumber(t)?[Z(`${t}`)]:[Z(t)]}function um(t){return Ne(t)?tx(Kt(t.enum)):G(t)?hO(t.const):Ae(t)?gO(t.pattern):b(t)?tx(t.anyOf):[t]}function rx(t){return um(t)}function yO(t){return Ae(t)?He(t.pattern):t}function SO(t,e,r,n,o,i){let a=g.Assign(t,{[r.name]:n}),u=x(a,e,o),p=yO(u),d=x(a,e,i);return du(p)||lu(p)?{[p.const]:d}:{}}function kO(t,e,r,n,o,i){return n.reduce((a,u)=>[...a,SO(t,e,r,u,o,i)],[])}function IO(t){return t.reduce((e,r)=>[...e,O(r)],[])}function nx(t,e,r,n,o,i){let a=rx(n),u=kO(t,e,r,a,o,i),p=IO(u);return ye(p)}function ex(t,e,r,n,o,i,a){return F([n])?g.Update(nx(t,e,r,n,o,i),{},a):Fl(r,n,o,i,a)}function ox(t,e,r,n,o,i,a){let u=x(t,e,n);return ex(t,e,r,u,o,i,a)}function xO(t,e){return s.Keys(t).filter(n=>e.includes(n)).reduce((n,o)=>({...n,[o]:qk(t,o,t[o])}),{})}function PO(t,e){return s.Keys(t).filter(n=>!e.includes(n)).reduce((n,o)=>({...n,[o]:x(t,{callstack:[]},t[o])}),{})}function wO(t,e){let r=Dk(t),n=xO(t,r),o=PO(t,r),i={...n,...o};return g.Update(i,{},e)}function ix(t,e,r,n){let o=g.Assign(t,r);return wO(o,n)}function Ll(t,e={}){return E("NonNullable",[t],e)}function vO(t){let e=q([li(),Pl()]);return Cu(t,e,{})}function sx(t,e){return F([t])?g.Update(vO(t),{},e):Ll(t,e)}function ax(t,e,r,n){let o=x(t,e,r);return sx(o,n)}function Nl(t,e,r={}){return E("Omit",[t,e],r)}function $u(t){let e=So(t);return N(e)?e.properties:Y()}function bO(t,e){return s.Keys(t).reduce((n,o)=>e.includes(o)?n:{...n,[o]:t[o]},{})}function px(t,e){let r=$u(t),n=Io(e),o=bO(r,n);return O(o)}function ux(t,e,r){return F([t,e])?g.Update(px(t,e),{},r):Nl(t,e,r)}function dx(t,e,r,n,o){let i=x(t,e,r),a=x(t,e,n);return ux(i,a,o)}function ql(t,e){return E("Options",[t,e],{})}function lx(t,e){return pm(t,e)}function pm(t,e){return F([t])?g.Update(t,{},e):ql(t,e)}function mx(t,e,r,n){let o=x(t,e,r);return pm(o,n)}function Bl(t,e={}){return E("Parameters",[t],e)}function AO(t){let e=Le(t)?t.parameters:[],r=jr({},{callstack:[]},e);return je(r)}function cx(t,e){return F([t])?g.Update(AO(t),{},e):Bl(t,e)}function fx(t,e,r,n){let o=x(t,e,r);return cx(o,n)}function Ul(t,e={}){return E("Partial",[t],e)}function hx(t,e){let r=tr(t,e),n=Hr(r);return qr(g.Assign(t,{[e]:n}),e)}function yx(t){let e=t.map(r=>Hr(r));return ye(e)}function Sx(t){let e=t.map(r=>Hr(r));return q(e)}function kx(t){let e=s.Keys(t).reduce((n,o)=>({...n,[o]:Fy(t[o])}),{});return O(e)}function Hr(t){return ge(t)?hx(t.$defs,t.$ref):D(t)?yx(t.allOf):b(t)?Sx(t.anyOf):N(t)?kx(t.properties):O({})}function gx(t,e){return F([t])?g.Update(Hr(t),{},e):Ul(t,e)}function Ix(t,e,r,n){let o=x(t,e,r);return gx(o,n)}function Kl(t,e,r={}){return E("Pick",[t,e],r)}function TO(t,e){return s.Keys(t).reduce((n,o)=>e.includes(o)?g.Assign(n,{[o]:t[o]}):n,{})}function Px(t,e){let r=$u(t),n=Io(e),o=TO(r,n);return O(o)}function xx(t,e,r){return F([t,e])?g.Update(Px(t,e),{},r):Kl(t,e,r)}function wx(t,e,r,n,o){let i=x(t,e,r),a=x(t,e,n);return xx(i,a,o)}function jl(t,e={}){return E("ReadonlyObject",[t],e)}function bx(t){return so(lr(t))}function Ax(t,e){let r=tr(t,e),n=zr(r);return qr(g.Assign(t,{[e]:n}),e)}function Tx(t){let e=t.map(r=>zr(r));return ye(e)}function Rx(t){let e=s.Keys(t).reduce((n,o)=>({...n,[o]:Ly(t[o])}),{});return O(e)}function Cx(t){return so(je(t))}function Ex(t){let e=t.map(r=>zr(r));return q(e)}function zr(t){return te(t)?bx(t.items):ge(t)?Ax(t.$defs,t.$ref):D(t)?Tx(t.allOf):N(t)?Rx(t.properties):V(t)?Cx(t.items):b(t)?Ex(t.anyOf):t}function vx(t,e){return F([t])?g.Update(zr(t),{},e):jl(t)}function $x(t,e,r,n){let o=x(t,e,r);return vx(o,n)}function Mx(t,e,r,n){return n in t?Tu([n],t,t[n])?r:x(t,e,t[n]):r}function Ox(t,e){let r=tr(t,e),n=Jr(r);return qr(g.Assign(t,{[e]:n}),e)}function _x(t){let e=t.map(r=>Jr(r));return ye(e)}function Dx(t){let e=t.map(r=>Jr(r));return q(e)}function Fx(t){let e=s.Keys(t).reduce((n,o)=>({...n,[o]:ao(t[o])}),{});return O(e)}function Jr(t){return ge(t)?Ox(t.$defs,t.$ref):D(t)?_x(t.allOf):b(t)?Dx(t.anyOf):N(t)?Fx(t.properties):O({})}function Wl(t,e={}){return E("Required",[t],e)}function Lx(t,e){return F([t])?g.Update(Jr(t),{},e):Wl(t,e)}function Nx(t,e,r,n){let o=x(t,e,r);return Lx(o,n)}function Gl(t,e={}){return E("ReturnType",[t],e)}function RO(t){return Le(t)?t.returnType:oe()}function qx(t,e){return F([t])?g.Update(RO(t),{},e):Gl(t,e)}function Bx(t,e,r,n={}){let o=x(t,e,r);return qx(o,n)}function CO(t){return mo(t)?V(t.items)?dm(t.items.items):$e(t.items)?[t]:se(t.items)?[t]:[oe()]:[t]}function dm(t){return t.reduce((r,n)=>[...r,...CO(n)],[])}function F(t){return s.TakeLeft(t,(e,r)=>se(e)?!1:F(r),()=>!0)}function Ai(t,e,r){return Oy(t)?Ai(t.type,"remove",r):$y(t)?Ai(t.type,e,"remove"):My(t)?Ai(t.type,"add",r):Ey(t)?Ai(t.type,e,"add"):[t,e,r]}function EO(t,e){return s.IsEqual(t,"remove")?nu(e):s.IsEqual(t,"add")?In(e):e}function $O(t,e){return s.IsEqual(t,"remove")?ao(e):s.IsEqual(t,"add")?kn(e):e}function Pi(t,e,r){return s.Keys(r).reduce((n,o)=>({...n,[o]:x(t,e,r[o])}),{})}function jr(t,e,r){let n=At(t,e,r);return dm(n)}function At(t,e,r){return r.map(n=>x(t,e,n))}function MO(t,e,r,n,o){return s.IsEqual(r,"Awaited")?Ux(t,e,n[0],o):s.IsEqual(r,"Capitalize")?iI(t,e,n[0],o):s.IsEqual(r,"Conditional")?dI(t,e,n[0],n[1],n[2],n[3],o):s.IsEqual(r,"ConstructorParameters")?mI(t,e,n[0],o):s.IsEqual(r,"Evaluate")?Kk(t,e,n[0],o):s.IsEqual(r,"Exclude")?hI(t,e,n[0],n[1],o):s.IsEqual(r,"Extract")?xI(t,e,n[0],n[1],o):s.IsEqual(r,"Index")?jI(t,e,n[0],n[1],o):s.IsEqual(r,"InstanceType")?GI(t,e,n[0],o):s.IsEqual(r,"Interface")?Ok(t,e,n[0],n[1],o):s.IsEqual(r,"KeyOf")?XI(t,e,n[0],o):s.IsEqual(r,"Lowercase")?sI(t,e,n[0],o):s.IsEqual(r,"Mapped")?ox(t,e,n[0],n[1],n[2],n[3],o):s.IsEqual(r,"Module")?ix(t,e,n[0],o):s.IsEqual(r,"NonNullable")?ax(t,e,n[0],o):s.IsEqual(r,"Pick")?wx(t,e,n[0],n[1],o):s.IsEqual(r,"Options")?mx(t,e,n[0],n[1]):s.IsEqual(r,"Parameters")?fx(t,e,n[0],o):s.IsEqual(r,"Partial")?Ix(t,e,n[0],o):s.IsEqual(r,"Omit")?dx(t,e,n[0],n[1],o):s.IsEqual(r,"ReadonlyObject")?$x(t,e,n[0],o):s.IsEqual(r,"Record")?vS(t,e,n[0],n[1],o):s.IsEqual(r,"Required")?Nx(t,e,n[0],o):s.IsEqual(r,"ReturnType")?Bx(t,e,n[0],o):s.IsEqual(r,"TemplateLiteral")?ZS(t,e,n[0],o):s.IsEqual(r,"Uncapitalize")?aI(t,e,n[0],o):s.IsEqual(r,"Uppercase")?uI(t,e,n[0],o):E(r,n,o)}function x(t,e,r){let n=pi(r),o=Ai(r,di(r)?"add":"none",Ke(r)?"add":"none"),i=Qt(o[0])?o[0].Clone():o[0],a=se(i)?Mx(t,e,i,i.$ref):te(i)?lr(x(t,e,i.items),ou(i)):st(i)?mr(x(t,e,i.iteratorItems),Ny(i)):Ru(i)?sm(t,e,i.target,i.arguments):Fe(i)?xn(At(t,e,i.parameters),x(t,e,i.instanceType),qy(i)):Lr(i)?MO(t,e,i.action,i.parameters,i.options):Le(i)?Pn(At(t,e,i.parameters),x(t,e,i.returnType),By(i)):D(i)?qt(At(t,e,i.allOf),Vy(i)):ut(i)?cr(x(t,e,i.iteratorItems),Qy(i)):N(i)?O(Pi(t,e,i.properties),jy(i)):Ge(i)?dr(x(t,e,i.item),_y(i)):Me(i)?AS(_t(i),x(t,e,Xe(i))):mo(i)?xl(x(t,e,i.items)):V(i)?je(jr(t,e,i.items),dS(i)):b(i)?q(At(t,e,i.anyOf),Wy(i)):i,u=n?so(a):a;return EO(o[1],$O(o[2],u))}function nr(t,e){return x(t,{callstack:[]},e)}function Kx(t){return Ge(t)?Kx(t.item):t}function jx(t,e){return F([t])?g.Update(Kx(t),{},e):Vl(t,e)}function Ux(t,e,r,n){let o=x(t,e,r);return jx(o,n)}function Vl(t,e={}){return E("Awaited",[t],e)}function Qr(t,e={}){return om(t,e)}function ae(...t){let[e,r,n]=ee.Match(t,{3:(o,i,a)=>[o,i,a],2:(o,i)=>[{},o,i]});return ul(e,r,n)}function gr(...t){let[e,r,n]=ee.Match(t,{3:(a,u,p)=>[a,u,p],2:(a,u)=>[{},a,u]}),[o,i]=ru(e,r,n);return i}var Yr=class extends Error{constructor(e,r,n){super(e),Object.defineProperty(this,"cause",{value:{source:e,errors:n,value:r},writable:!1,configurable:!1,enumerable:!1})}};function Wx(t,e,r){return s.IsArray(r)?r.map(n=>qe(t,e.items,n)):r}function Gx(t,e,r){return e.Clean(r)}function Vx(t,e,r){return qe({...t,...e.$defs},yt(e.$ref),r)}function OO(t,e){let r=s.HasPropertyKey(e,"unevaluatedProperties")?{additionalProperties:e.unevaluatedProperties}:{},n=nr(t,e),o=Qr(n);return N(o)?lx(o,r):o}function Hx(t,e,r){let n=OO(t,e);return qe(t,n,r)}function Mu(t){return s.HasPropertyKey(t,"additionalProperties")?t.additionalProperties:void 0}function zx(t,e,r){if(!s.IsObject(r)||s.IsArray(r))return r;let n=Mu(e);for(let o of s.Keys(r)){if(s.HasPropertyKey(e.properties,o)){r[o]=qe(t,e.properties[o],r[o]);continue}if(s.IsBoolean(n)&&s.IsEqual(n,!0)||de(n)&&ae(t,n,r[o])){r[o]=qe(t,n,r[o]);continue}delete r[o]}return r}function Jx(t,e,r){if(!s.IsObject(r))return r;let n=Mu(e),[o,i]=[new RegExp(_t(e)),Xe(e)];for(let a of s.Keys(r)){if(o.test(a)){r[a]=qe(t,i,r[a]);continue}if(s.IsBoolean(n)&&s.IsEqual(n,!0)||de(n)&&ae(t,n,r[a])){r[a]=qe(t,n,r[a]);continue}delete r[a]}return r}function Qx(t,e,r){return s.HasPropertyKey(t,e.$ref)?qe(t,t[e.$ref],r):r}function Yx(t,e,r){if(!s.IsArray(r))return r;let n=Math.min(r.length,e.items.length);for(let o=0;o<n;o++)r[o]=qe(t,e.items[o],r[o]);return s.IsGreaterThan(r.length,n)?r.slice(0,n):r}function _O(t){let e={};for(let r of s.Keys(t))s.IsUnsafePropertyKey(r)||(e[r]=ue(t[r]));for(let r of s.Symbols(t))e[r]=ue(t[r]);return e}function DO(t){return s.IsClassInstance(t)?t:_O(t)}function FO(t){return t.map(e=>ue(e))}function LO(t){return t.slice()}function NO(t){return new Map(ue([...t.entries()]))}function qO(t){return new Set(ue([...t.values()]))}function ue(t){return nt.IsTypeArray(t)?LO(t):nt.IsMap(t)?NO(t):nt.IsSet(t)?qO(t):s.IsArray(t)?FO(t):s.IsObject(t)?DO(t):t}function Zx(t,e){return JSON.stringify(t).localeCompare(JSON.stringify(e))}function Ti(t,e=1){return t.sort((r,n)=>{let o=vn(r,n);return(s.IsEqual(o,"disjoint")?Zx(r,n):s.IsEqual(o,"right-inside")?1:s.IsEqual(o,"left-inside")?-1:Zx(r,n))*e})}function Xx(t,e,r){for(let n of Ti(e.anyOf)){let o=qe(t,n,ue(r));if(ae(t,n,o))return o}return r}function qe(t,e,r){return te(e)?Wx(t,e,r):Qt(e)?Gx(t,e,r):ge(e)?Vx(t,e,r):D(e)?Hx(t,e,r):N(e)?zx(t,e,r):Me(e)?Jx(t,e,r):se(e)?Qx(t,e,r):V(e)?Yx(t,e,r):b(e)?Xx(t,e,r):r}function Ht(...t){let[e,r,n]=ee.Match(t,{3:(o,i,a)=>[o,i,a],2:(o,i)=>[{},o,i]});return qe(e,r,n)}var Q={};Tt(Q,{Fail:()=>En,IsOk:()=>lm,Ok:()=>T,TryArray:()=>BO,TryBigInt:()=>mm,TryBoolean:()=>ZO,TryNull:()=>n_,TryNumber:()=>a_,TryString:()=>u_,TryUndefined:()=>c_});function lm(t){return s.IsObject(t)&&s.HasPropertyKey(t,"value")}function T(t){return{value:t}}function En(){}function BO(t){return s.IsArray(t)?T(t):T([t])}function UO(t){return s.IsEqual(t,!0)?T(BigInt(1)):T(BigInt(0))}var KO=/^-?(0|[1-9]\d*)n$/,jO=/^-?(0|[1-9]\d*)\.\d+$/,WO=/^-?(0|[1-9]\d*)$/;function GO(t){return KO.test(t)}function VO(t){return jO.test(t)}function HO(t){return WO.test(t)}function zO(t){let e=t.toLowerCase();return GO(t)?T(BigInt(t.slice(0,t.length-1))):VO(t)?T(BigInt(t.split(".")[0])):HO(t)?T(BigInt(t)):s.IsEqual(e,"false")?T(BigInt(0)):s.IsEqual(e,"true")?T(BigInt(1)):void 0}function mm(t){return s.IsBigInt(t)?T(t):s.IsBoolean(t)?UO(t):s.IsNumber(t)?T(BigInt(Math.trunc(t))):s.IsNull(t)?T(BigInt(0)):s.IsString(t)?zO(t):s.IsUndefined(t)?T(BigInt(0)):void 0}function JO(t){return s.IsEqual(t,BigInt(0))?T(!1):s.IsEqual(t,BigInt(1))?T(!0):void 0}function QO(t){return s.IsEqual(t,0)?T(!1):s.IsEqual(t,1)?T(!0):void 0}function YO(t){return s.IsEqual(t.toLowerCase(),"false")?T(!1):s.IsEqual(t.toLowerCase(),"true")?T(!0):s.IsEqual(t,"0")?T(!1):s.IsEqual(t,"1")?T(!0):void 0}function ZO(t){return s.IsBigInt(t)?JO(t):s.IsBoolean(t)?T(t):s.IsNumber(t)?QO(t):s.IsNull(t)?T(!1):s.IsString(t)?YO(t):s.IsUndefined(t)?T(!1):void 0}function XO(t){return s.IsEqual(t,BigInt(0))?T(null):void 0}function e_(t){return s.IsEqual(t,!1)?T(null):void 0}function t_(t){return s.IsEqual(t,0)?T(null):void 0}function r_(t){let e=t.toLowerCase();return s.IsEqual(e,"undefined")||s.IsEqual(e,"null")||s.IsEqual(t,"")||s.IsEqual(t,"0")?T(null):void 0}function n_(t){return s.IsBigInt(t)?XO(t):s.IsBoolean(t)?e_(t):s.IsNumber(t)?t_(t):s.IsNull(t)?T(null):s.IsString(t)?r_(t):s.IsUndefined(t)?T(null):void 0}var eP=BigInt(Number.MAX_SAFE_INTEGER),tP=BigInt(Number.MIN_SAFE_INTEGER);function o_(t){return t<=eP&&t>=tP?T(Number(t)):void 0}function i_(t){return T(t?1:0)}function s_(t){let e=+t;if(s.IsNumber(e))return T(e);let r=t.toLowerCase();if(s.IsEqual(r,"false"))return T(0);if(s.IsEqual(r,"true"))return T(1);let n=mm(t);return lm(n)?n.value<=eP&&n.value>=tP?T(Number(n.value)):void 0:void 0}function a_(t){return s.IsBigInt(t)?o_(t):s.IsBoolean(t)?i_(t):s.IsNumber(t)?T(t):s.IsNull(t)?T(0):s.IsString(t)?s_(t):s.IsUndefined(t)?T(0):void 0}function u_(t){return s.IsBigInt(t)?T(t.toString()):s.IsBoolean(t)?T(t.toString()):s.IsNumber(t)?T(t.toString()):s.IsNull(t)?T("null"):s.IsString(t)?T(t):s.IsUndefined(t)?T(""):void 0}function p_(t){return s.IsEqual(t,BigInt(0))?T(void 0):void 0}function d_(t){return s.IsEqual(t,!1)?T(void 0):void 0}function l_(t){return s.IsEqual(t,0)?T(void 0):void 0}function m_(t){let e=t.toLowerCase();return s.IsEqual(e,"undefined")||s.IsEqual(e,"null")||s.IsEqual(t,"")||s.IsEqual(t,"0")?T(void 0):void 0}function c_(t){return s.IsBigInt(t)?p_(t):s.IsBoolean(t)?d_(t):s.IsNumber(t)?l_(t):s.IsNull(t)?T(void 0):s.IsString(t)?m_(t):s.IsUndefined(t)?T(t):void 0}function rP(t,e,r){return Q.TryArray(r).value.map(o=>Te(t,e.items,o))}function nP(t,e,r){return e.Convert(r)}function oP(t,e,r){let n=Q.TryBigInt(r);return Q.IsOk(n)?n.value:r}function iP(t,e,r){let n=Q.TryBoolean(r);return Q.IsOk(n)?n.value:r}function sP(t,e,r){return Te({...t,...e.$defs},yt(e.$ref),r)}function Ou(t,e,r){if(e.anyOf.some(a=>ae(t,a,r)))return r;let i=e.anyOf.map(a=>Te(t,a,ue(r))).find(a=>ae(t,e,a));return s.IsUndefined(i)?r:i}function aP(t,e,r){let n=po(e);return Ou(t,n,r)}function uP(t,e,r){let n=Q.TryNumber(r);return Q.IsOk(n)?Math.trunc(n.value):r}function pP(t,e,r){let n=nr(t,e),o=Qr(n);return Te(t,o,r)}function f_(t,e,r){let n=Q.TryBigInt(r);return Q.IsOk(n)&&s.IsEqual(e.const,n.value)?n.value:r}function g_(t,e,r){let n=Q.TryBoolean(r);return Q.IsOk(n)&&s.IsEqual(e.const,n.value)?n.value:r}function h_(t,e,r){let n=Q.TryNumber(r);return Q.IsOk(n)&&s.IsEqual(e.const,n.value)?n.value:r}function y_(t,e,r){let n=Q.TryString(r);return Q.IsOk(n)&&s.IsEqual(e.const,n.value)?n.value:r}function dP(t,e,r){return s.IsEqual(e.const,r)?r:Yy(e)?f_(t,e,r):Zy(e)?g_(t,e,r):du(e)?h_(t,e,r):lu(e)?y_(t,e,r):Y()}function lP(t,e,r){let n=Q.TryNull(r);return Q.IsOk(n)?n.value:r}function mP(t,e,r){let n=Q.TryNumber(r);return Q.IsOk(n)?n.value:r}function _u(t,e,r,n){let o=s.Keys(n);for(let[i,a]of e)for(let u of o)i.test(u)||(n[u]=Te(t,r,n[u]));return n}function Ri(t,e,r){return Ke(t)&&s.IsUndefined(r[e])}function S_(t,e,r){let n=s.EntriesRegExp(e.properties),o=s.Keys(r);for(let[i,a]of n)for(let u of o)!i.test(u)||Ri(a,u,r)||(r[u]=Te(t,a,r[u]));return s.HasPropertyKey(e,"additionalProperties")&&s.IsObject(e.additionalProperties)?_u(t,n,e.additionalProperties,r):r}function cP(t,e,r){return s.IsObjectNotArray(r)?S_(t,e,r):r}function k_(t,e,r){let n=s.EntriesRegExp(e.patternProperties),o=s.Keys(r);for(let[i,a]of n)for(let u of o)i.test(u)&&(r[u]=Te(t,a,r[u]));return s.HasPropertyKey(e,"additionalProperties")&&s.IsObject(e.additionalProperties)?_u(t,n,e.additionalProperties,r):r}function fP(t,e,r){return s.IsObjectNotArray(r)?k_(t,e,r):r}function gP(t,e,r){return s.HasPropertyKey(t,e.$ref)?Te(t,t[e.$ref],r):r}function hP(t,e,r){let n=Q.TryString(r);return Q.IsOk(n)?n.value:r}function yP(t,e,r){let n=He(e.pattern);return Te(t,n,r)}function SP(t,e,r){if(!s.IsArray(r))return r;for(let n=0;n<Math.min(e.items.length,r.length);n++)r[n]=Te(t,e.items[n],r[n]);return r}function kP(t,e,r){let n=Q.TryUndefined(r);return Q.IsOk(n)?n.value:r}function IP(t,e,r){let n=Q.TryUndefined(r);return Q.IsOk(n)?void 0:r}function Te(t,e,r){return te(e)?rP(t,e,r):Qt(e)?nP(t,e,r):Bt(e)?oP(t,e,r):vt(e)?iP(t,e,r):ge(e)?sP(t,e,r):Ne(e)?aP(t,e,r):at(e)?uP(t,e,r):D(e)?pP(t,e,r):G(e)?dP(t,e,r):wn(e)?lP(t,e,r):be(e)?mP(t,e,r):N(e)?cP(t,e,r):Me(e)?fP(t,e,r):se(e)?gP(t,e,r):Ze(e)?hP(t,e,r):Ae(e)?yP(t,e,r):V(e)?SP(t,e,r):Tn(e)?kP(t,e,r):b(e)?Ou(t,e,r):jt(e)?IP(t,e,r):r}function hr(...t){let[e,r,n]=ee.Match(t,{3:(o,i,a)=>[o,i,a],2:(o,i)=>[{},o,i]});return Te(e,r,n)}function xP(t,e,r){if(!s.IsArray(r))return r;for(let n=0;n<r.length;n++)r[n]=_e(t,e.items,r[n]);return r}function PP(t,e,r){return e.Default(r)}function wP(t,e,r){return _e({...t,...e.$defs},yt(e.$ref),r)}function vP(t,e){return s.IsUndefined(e)?s.IsFunction(t.default)?t.default():ue(t.default):e}function bP(t,e,r){let n=nr(t,e),o=Qr(n);return _e(t,o,r)}function AP(t,e,r){if(!s.IsObject(r))return r;let n=s.Keys(e.properties);for(let o of n){let i=_e(t,e.properties[o],r[o]);s.IsUndefined(i)&&(Ke(e.properties[o])||!s.HasPropertyKey(e.properties[o],"default"))||(r[o]=_e(t,e.properties[o],r[o]))}if(!sr(e)||s.IsBoolean(e.additionalProperties))return r;for(let o of s.Keys(r))n.includes(o)||(r[o]=_e(t,e.additionalProperties,r[o]));return r}function TP(t,e,r){if(!s.IsObject(r))return r;let[n,o]=[new RegExp(_t(e)),Xe(e)];for(let i of s.Keys(r))n.test(i)&&ar(o)&&(r[i]=_e(t,o,r[i]));if(!sr(e))return r;for(let i of s.Keys(r))n.test(i)||(r[i]=_e(t,e.additionalProperties,r[i]));return r}function RP(t,e,r){return s.HasPropertyKey(t,e.$ref)?_e(t,t[e.$ref],r):r}function CP(t,e,r){if(!s.IsArray(r))return r;let[n,o]=[e.items,Math.max(e.items.length,r.length)];for(let i=0;i<o;i++)i<n.length&&(r[i]=_e(t,n[i],r[i]));return r}function EP(t,e,r){for(let n of e.anyOf){let o=_e(t,n,ue(r));if(ae(t,n,o))return o}return r}function _e(t,e,r){let n=ar(e)?vP(e,r):r;return te(e)?xP(t,e,n):Qt(e)?PP(t,e,n):ge(e)?wP(t,e,n):D(e)?bP(t,e,n):N(e)?AP(t,e,n):Me(e)?TP(t,e,n):se(e)?RP(t,e,n):V(e)?CP(t,e,n):b(e)?EP(t,e,n):n}function Zr(...t){let[e,r,n]=ee.Match(t,{3:(o,i,a)=>[o,i,a],2:(o,i)=>[{},o,i]});return _e(e,r,n)}function xo(t){return(...e)=>{let[r,n,o]=ee.Match(e,{3:(i,a,u)=>[i,a,u],2:(i,a)=>[{},i,a]});return t.reduce((i,a)=>a(r,n,i),o)}}function I_(t,e,r){return e["~codec"].decode(r)}function x_(t,e,r){return e["~codec"].encode(r)}function fe(t,e,r,n){return ml(r)?s.IsEqual(t,"Decode")?I_(e,r,n):x_(e,r,n):n}function P_(t,e,r,n){if(!s.IsArray(n))return Y();for(let o=0;o<n.length;o++)n[o]=he(t,e,r.items,n[o]);return fe(t,e,r,n)}function w_(t,e,r,n){let o=fe(t,e,r,n);if(!s.IsArray(o))return o;for(let i=0;i<o.length;i++)o[i]=he(t,e,r.items,o[i]);return o}function $P(t,e,r,n){return s.IsEqual(t,"Decode")?P_(t,e,r,n):w_(t,e,r,n)}function MP(t,e,r,n){return n=he(t,{...e,...r.$defs},yt(r.$ref),n),fe(t,e,r,n)}function OP(t){return t.reduce((e,r)=>({...e,...r}),{})}function _P(t,e){for(let r of e)if(!s.IsDeepEqual(t,r))return r;return t}function v_(t,e,r,n){if(s.IsEqual(r.allOf.length,0))return fe(t,e,r,n);let o=r.allOf.map(u=>he(t,e,u,Ht(u,ue(n)))),a=o.every(u=>s.IsObject(u))?OP(o):_P(n,o);return fe(t,e,r,a)}function b_(t,e,r,n){if(s.IsEqual(r.allOf.length,0))return fe(t,e,r,n);let o=fe(t,e,r,n),i=r.allOf.map(u=>he(t,e,u,Ht(u,ue(o))));return i.every(u=>s.IsObject(u))?OP(i):_P(o,i)}function DP(t,e,r,n){return s.IsEqual(t,"Decode")?v_(t,e,r,n):b_(t,e,r,n)}function A_(t,e,r,n){if(!s.IsObjectNotArray(n))return Y();for(let o of s.Keys(r.properties))!s.HasPropertyKey(n,o)||Ri(r.properties[o],o,n)||(n[o]=he(t,e,r.properties[o],n[o]));return fe(t,e,r,n)}function T_(t,e,r,n){let o=fe(t,e,r,n);if(!s.IsObjectNotArray(o))return o;for(let i of s.Keys(r.properties))!s.HasPropertyKey(o,i)||Ri(r.properties[i],i,o)||(o[i]=he(t,e,r.properties[i],o[i]));return o}function FP(t,e,r,n){return s.IsEqual(t,"Decode")?A_(t,e,r,n):T_(t,e,r,n)}function R_(t,e,r,n){if(!s.IsObjectNotArray(n))return Y();let o=new RegExp(_t(r));for(let i of s.Keys(n))o.test(i)||Y(),n[i]=he(t,e,Xe(r),n[i]);return fe(t,e,r,n)}function C_(t,e,r,n){let o=fe(t,e,r,n);if(!s.IsObjectNotArray(o))return o;let i=new RegExp(_t(r));for(let a of s.Keys(o))i.test(a)&&(o[a]=he(t,e,Xe(r),o[a]));return o}function LP(t,e,r,n){return s.IsEqual(t,"Decode")?R_(t,e,r,n):C_(t,e,r,n)}function NP(t,e,r,n){return s.HasPropertyKey(e,r.$ref)?he(t,e,e[r.$ref],n):n}function qP(t,e,r,n){return s.IsEqual(t,"Decode")?fe(t,e,r,NP(t,e,r,n)):NP(t,e,r,fe(t,e,r,n))}function E_(t,e,r,n){if(!s.IsArray(n))return Y();for(let o=0;o<Math.min(r.items.length,n.length);o++)n[o]=he(t,e,r.items[o],n[o]);return fe(t,e,r,n)}function $_(t,e,r,n){let o=fe(t,e,r,n);if(!s.IsArray(o))return n;for(let i=0;i<Math.min(r.items.length,o.length);i++)o[i]=he(t,e,r.items[i],o[i]);return o}function BP(t,e,r,n){return s.IsEqual(t,"Decode")?E_(t,e,r,n):$_(t,e,r,n)}function M_(t,e,r,n){for(let o of Ti(r.anyOf,1)){if(!ae(e,o,n))continue;let i=he(t,e,o,n);return fe(t,e,r,i)}return n}function O_(t,e,r,n){let o=fe(t,e,r,n);for(let i of Ti(r.anyOf,-1)){let a=he(t,e,i,ue(o));if(ae(e,i,a))return a}return o}function UP(t,e,r,n){return s.IsEqual(t,"Decode")?M_(t,e,r,n):O_(t,e,r,n)}function he(t,e,r,n){return te(r)?$P(t,e,r,n):ge(r)?MP(t,e,r,n):D(r)?DP(t,e,r,n):N(r)?FP(t,e,r,n):Me(r)?LP(t,e,r,n):se(r)?qP(t,e,r,n):V(r)?BP(t,e,r,n):b(r)?UP(t,e,r,n):fe(t,e,r,n)}var cm=class extends Yr{constructor(e,r){super("Decode",e,r)}};function __(t,e,r){if(!ae(t,e,r))throw new cm(r,gr(t,e,r));return r}function D_(t,e,r){return he("Decode",t,e,r)}var bRe=xo([(t,e,r)=>ue(r),(t,e,r)=>Zr(t,e,r),(t,e,r)=>hr(t,e,r),(t,e,r)=>Ht(t,e,r),(t,e,r)=>__(t,e,r),(t,e,r)=>D_(t,e,r)]);var fm=class extends Yr{constructor(e,r){super("Encode",e,r)}};function F_(t,e,r){if(!ae(t,e,r))throw new fm(r,gr(t,e,r));return r}function L_(t,e,r){return he("Encode",t,e,r)}var LRe=xo([(t,e,r)=>ue(r),(t,e,r)=>L_(t,e,r),(t,e,r)=>Zr(t,e,r),(t,e,r)=>hr(t,e,r),(t,e,r)=>Ht(t,e,r),(t,e,r)=>F_(t,e,r)]);var Fu=class extends Yr{constructor(e,r){super("Parse",e,r)}};function N_(t,e,r){if(!ae(t,e,r))throw new Fu(r,gr(t,e,r));return r}var q_=xo([(t,e,r)=>ue(r),(t,e,r)=>Zr(t,e,r),(t,e,r)=>hr(t,e,r),(t,e,r)=>Ht(t,e,r),(t,e,r)=>N_(t,e,r)]);var U_=O({type:Z("insert"),path:bt(),value:Yt()}),K_=Object({type:Z("update"),path:bt(),value:Yt()}),j_=O({type:Z("delete"),path:bt()}),IMe=q([U_,K_,j_]);var L0e=new wg(512);function VP(t){return{success:!1,error:{issues:[{path:[],message:t}]}}}function gm(){return{safeParse(t){return t===void 0?{success:!0,data:void 0}:!t||typeof t!="object"||Array.isArray(t)?VP("expected config object"):Object.keys(t).length>0?VP("config must be empty"):{success:!0,data:t}},jsonSchema:{type:"object",additionalProperties:!1,properties:{}}}}function Y_(t,e){let r=!1,n;return()=>(r||(n=(typeof t=="function"?t():t)??e,r=!0),n)}function Lu({id:t,name:e,description:r,kind:n,configSchema:o=gm,reload:i,nodeHostCommands:a,securityAuditCollectors:u,register:p}){let d=Y_(o);return{id:t,name:e,description:r,...n?{kind:n}:{},...i?{reload:i}:{},...a?{nodeHostCommands:a}:{},...u?{securityAuditCollectors:u}:{},get configSchema(){return d()},register:p}}function r0(t){let e=parseInt(process.env.OPENCLAW_WORKTREE_CLEANUP_AGE_HOURS??"168",10)||168,r=e*60*60*1e3,n=Date.now()-r,o=new Set(t.listPersistedSessions().map(p=>p.worktreePath).filter(p=>typeof p=="string"&&p.length>0)),i=new Set,a=process.env.OPENCLAW_WORKTREE_DIR??j.worktreeDir;if(a)i.add(a);else for(let p of t.listPersistedSessions())if(p.workdir)try{let d=t0("git",["rev-parse","--show-toplevel"],{cwd:p.workdir,timeout:5e3,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim();d&&i.add(HP(d,".worktrees"))}catch{}if(i.size===0)return;let u=0;for(let p of i)try{let d=Z_(p);for(let l of d){if(!l.startsWith("openclaw-worktree-"))continue;let m=HP(p,l);try{let c=X_(m);if(!c.isDirectory()||c.mtimeMs>n||o.has(m))continue;e0(m,{recursive:!0,force:!0}),u++}catch(c){console.warn(`[index] Failed to clean up orphaned worktree ${m}: ${c instanceof Error?c.message:String(c)}`)}}}catch{}u>0&&console.info(`[index] Cleaned up ${u} orphaned worktree(s) at startup (age > ${e}h)`)}function n0(t){let e=null,r=null,n=!1,o=!1,i=t.registerTool;Nn(t.runtime);let a=m=>{if(n){m&&!o&&(Nn(t.runtime,m.config),o=!0);return}let c=t.pluginConfig??{};xm(c),m?(Nn(t.runtime,m.config),o=!0):(Nn(t.runtime),o=!1),e=new Ia(j.maxSessions,j.maxPersistedSessions),r=new Ns(e),qu(e),Bu(r),r.start(),r0(e),e.bootstrapMaintenanceSchedules(),n=!0},u=()=>{r&&r.stop(),e&&e.killAll("shutdown"),e&&e.dispose(),r=null,e=null,n=!1,o=!1,Nn(void 0),Bu(null),qu(null)},p=(m,c)=>{i(h=>(a(),m(h)),c)},d={...t,registerCommand(m){t.registerCommand({...m,handler:c=>(a(),m.handler(c))})}},l=m=>{let c=ff(m);t.registerInteractiveHandler({...c,handler:async h=>(a(),c.handler(h))})};p(m=>ac(m),{optional:!1,name:"agent_launch"}),p(m=>_c(m),{optional:!1,name:"agent_sessions"}),p(m=>Dc(m),{optional:!1,name:"agent_kill"}),p(m=>Ps(m),{optional:!1,name:"agent_output"}),p(m=>Uc(m),{optional:!1,name:"agent_respond"}),p(m=>Kc(m),{optional:!1,name:"agent_request_plan_approval"}),p(m=>Wc(m),{optional:!1,name:"agent_send_plan_offer"}),p(m=>Gc(m),{optional:!1,name:"agent_stats"}),p(m=>Es(m),{optional:!1,name:"agent_merge"}),p(m=>Wo(m),{optional:!1,name:"agent_pr"}),p(m=>rf(m),{optional:!1,name:"agent_worktree_cleanup"}),p(m=>nf(m),{optional:!1,name:"agent_worktree_status"}),p(m=>of(m),{optional:!1,name:"goal_launch"}),p(m=>af(m),{optional:!1,name:"goal_status"}),p(m=>uf(m),{optional:!1,name:"goal_stop"}),l("telegram"),l("discord"),hf(d),yf(d),Sf(d),kf(d),If(d),xf(d),wf(d),vf(d),bf(d),t.registerService({id:"openclaw-code-agent",start:a,stop:u})}var $De=Lu({id:"openclaw-code-agent",name:"OpenClaw Code Agent",description:"Multi-session coding-agent orchestration from OpenClaw chat",register:n0});export{$De as default,n0 as register};