@cline/core 0.0.95 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/dist/ClineCore.d.ts +6 -1
  2. package/dist/account/rpc.d.ts +3 -1
  3. package/dist/cline-core/runtime-services.d.ts +4 -2
  4. package/dist/cloud/controller.d.ts +5 -2
  5. package/dist/cloud/hub-client.d.ts +51 -0
  6. package/dist/cloud/hub-protocol.d.ts +18 -0
  7. package/dist/cloud/index.d.ts +2 -0
  8. package/dist/cloud/index.js +16 -16
  9. package/dist/cloud/types.d.ts +4 -1
  10. package/dist/extensions/context/compaction-shared.d.ts +1 -0
  11. package/dist/extensions/context/compaction.d.ts +7 -0
  12. package/dist/extensions/context/summarize-conversation.d.ts +7 -0
  13. package/dist/extensions/context/summary-generation.d.ts +14 -0
  14. package/dist/extensions/mcp/apps.d.ts +16 -0
  15. package/dist/extensions/mcp/client.d.ts +1 -0
  16. package/dist/extensions/mcp/index.d.ts +5 -1
  17. package/dist/extensions/mcp/manager.d.ts +2 -1
  18. package/dist/extensions/mcp/session-apps.d.ts +28 -0
  19. package/dist/extensions/mcp/types.d.ts +22 -0
  20. package/dist/extensions/plugin/plugin-command-origin.d.ts +8 -0
  21. package/dist/extensions/plugin/plugin-registry.d.ts +1 -0
  22. package/dist/extensions/plugin/plugin-runtime.d.ts +7 -0
  23. package/dist/hub/client/index.d.ts +6 -0
  24. package/dist/hub/client/managed-hub-build-watcher.d.ts +2 -0
  25. package/dist/hub/client/plugin-commands.d.ts +4 -0
  26. package/dist/hub/client/session-client.d.ts +2 -0
  27. package/dist/hub/daemon/entry.js +241 -228
  28. package/dist/hub/index.d.ts +1 -0
  29. package/dist/hub/index.js +231 -218
  30. package/dist/hub/runtime-host/hub-runtime-host.d.ts +6 -0
  31. package/dist/hub/server/cloud-session-service.d.ts +50 -0
  32. package/dist/hub/server/handlers/capability-handlers.d.ts +18 -1
  33. package/dist/hub/server/handlers/context.d.ts +13 -2
  34. package/dist/hub/server/handlers/mcp-apps-handlers.d.ts +5 -0
  35. package/dist/hub/server/hub-server-options.d.ts +3 -0
  36. package/dist/hub/server/hub-server-transport.d.ts +2 -0
  37. package/dist/index.d.ts +8 -4
  38. package/dist/index.js +278 -258
  39. package/dist/plugin-runtime/node_modules/@cline/agents/dist/index.js +76 -0
  40. package/dist/plugin-runtime/node_modules/@cline/agents/package.json +1 -0
  41. package/dist/plugin-runtime/node_modules/@cline/core/dist/ai-sdk-b1d8eb67.js +1 -0
  42. package/dist/plugin-runtime/node_modules/@cline/core/dist/anthropic-33qvrctr.js +1 -0
  43. package/dist/plugin-runtime/node_modules/@cline/core/dist/bedrock-paabhz8w.js +1 -0
  44. package/dist/plugin-runtime/node_modules/@cline/core/dist/cline-yhsfqcy1.js +1 -0
  45. package/dist/plugin-runtime/node_modules/@cline/core/dist/cloud/index.js +21 -0
  46. package/dist/plugin-runtime/node_modules/@cline/core/dist/community-gqgs7446.js +1 -0
  47. package/dist/plugin-runtime/node_modules/@cline/core/dist/foundation-models-embedding-model-strategy-SAVQFBF4-822304b0.js +1 -0
  48. package/dist/plugin-runtime/node_modules/@cline/core/dist/foundation-models-language-model-strategy-BPQO66W7-hky2m2yx.js +1 -0
  49. package/dist/plugin-runtime/node_modules/@cline/core/dist/getMachineId-bsd-sqf1kd37.js +1 -0
  50. package/dist/plugin-runtime/node_modules/@cline/core/dist/getMachineId-bsd-tx1kp6xn.js +1 -0
  51. package/dist/plugin-runtime/node_modules/@cline/core/dist/getMachineId-darwin-6cpgjxme.js +2 -0
  52. package/dist/plugin-runtime/node_modules/@cline/core/dist/getMachineId-darwin-fxchqbze.js +2 -0
  53. package/dist/plugin-runtime/node_modules/@cline/core/dist/getMachineId-linux-m3bzwmzc.js +1 -0
  54. package/dist/plugin-runtime/node_modules/@cline/core/dist/getMachineId-linux-pr9sb5fr.js +1 -0
  55. package/dist/plugin-runtime/node_modules/@cline/core/dist/getMachineId-unsupported-nckraycx.js +1 -0
  56. package/dist/plugin-runtime/node_modules/@cline/core/dist/getMachineId-unsupported-w91yq3tm.js +1 -0
  57. package/dist/plugin-runtime/node_modules/@cline/core/dist/getMachineId-win-xdyxc2tf.js +1 -0
  58. package/dist/plugin-runtime/node_modules/@cline/core/dist/getMachineId-win-yxsvs11a.js +1 -0
  59. package/dist/plugin-runtime/node_modules/@cline/core/dist/google-pgdk2dm9.js +1 -0
  60. package/dist/plugin-runtime/node_modules/@cline/core/dist/hub/daemon/entry.js +1160 -0
  61. package/dist/plugin-runtime/node_modules/@cline/core/dist/hub/index.js +1147 -0
  62. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-02jpyn9y.js +85 -0
  63. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-0cb4390m.js +137 -0
  64. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-0f8xrhgt.js +209 -0
  65. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-1f8vb421.js +2 -0
  66. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-28c7m0fv.js +16 -0
  67. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-2em3jg4q.js +1 -0
  68. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-4n1zpzbe.js +2 -0
  69. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-54eea0ex.js +2 -0
  70. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-5j92dtg5.js +16 -0
  71. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-6akf3a5d.js +2 -0
  72. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-6k6ep10s.js +136 -0
  73. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-71ym4q6s.js +2 -0
  74. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-91p1ghfk.js +14 -0
  75. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-9qkpjy7x.js +2 -0
  76. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-9swk4nej.js +3 -0
  77. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-aa2s5myc.js +1 -0
  78. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-ae0ajw38.js +13 -0
  79. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-bxvyzjhc.js +1 -0
  80. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-bzy863k0.js +6 -0
  81. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-d96n0s70.js +20 -0
  82. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-dsd6vt8c.js +1 -0
  83. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-e2q4azd9.js +119 -0
  84. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-egd18jj2.js +4 -0
  85. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-eh83hr16.js +2 -0
  86. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-ev9r2dy3.js +1204 -0
  87. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-f2mvvryf.js +190 -0
  88. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-h7gn5v3f.js +2 -0
  89. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-h7s1a560.js +12 -0
  90. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-hkhq3jtz.js +21 -0
  91. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-j8r18nfg.js +15 -0
  92. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-jhny555h.js +6 -0
  93. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-m1gpa2eg.js +146 -0
  94. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-m2ad6tgj.js +1 -0
  95. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-m7mks2jq.js +4 -0
  96. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-mcnngj50.js +62 -0
  97. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-n2srkkh0.js +39 -0
  98. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-nbs1tsny.js +142 -0
  99. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-nqjnz7m4.js +9 -0
  100. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-rmhzyxr8.js +3 -0
  101. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-rtzf3vvk.js +6 -0
  102. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-sw74pcm3.js +2 -0
  103. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-t3eanyjj.js +3 -0
  104. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-tseksj1v.js +1 -0
  105. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-v0ctpcdr.js +12 -0
  106. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-v4-dx8bd4wq.js +1 -0
  107. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-v695918t.js +14 -0
  108. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-v96yy1pw.js +1 -0
  109. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-vfm7r9wk.js +65 -0
  110. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-xecthgrg.js +9 -0
  111. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-xn1xhp06.js +9 -0
  112. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-yfdscfdx.js +1 -0
  113. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-yrnwqsdt.js +2 -0
  114. package/dist/plugin-runtime/node_modules/@cline/core/dist/index.js +1 -0
  115. package/dist/plugin-runtime/node_modules/@cline/core/dist/jiti-static-3mgy2y9y.js +473 -0
  116. package/dist/plugin-runtime/node_modules/@cline/core/dist/jiti-w1xrs0vd.js +1 -0
  117. package/dist/plugin-runtime/node_modules/@cline/core/dist/langfuse-stream-telemetry-9tppg77c.js +1 -0
  118. package/dist/plugin-runtime/node_modules/@cline/core/dist/langfuse-telemetry-y658kpzy.js +1 -0
  119. package/dist/plugin-runtime/node_modules/@cline/core/dist/mistral-cmhqd91b.js +1 -0
  120. package/dist/plugin-runtime/node_modules/@cline/core/dist/multipart-parser-qkjjf8mm.js +2 -0
  121. package/dist/plugin-runtime/node_modules/@cline/core/dist/ollama-8z6y9d1h.js +1 -0
  122. package/dist/plugin-runtime/node_modules/@cline/core/dist/openai-cfmja1ez.js +1 -0
  123. package/dist/plugin-runtime/node_modules/@cline/core/dist/openai-compatible-1t7n5sxj.js +1 -0
  124. package/dist/plugin-runtime/node_modules/@cline/core/dist/orchestration-embedding-model-strategy-GT27AFII-k6yqgnyd.js +1 -0
  125. package/dist/plugin-runtime/node_modules/@cline/core/dist/orchestration-language-model-strategy-YEQPUCOT-6rdyebbq.js +1 -0
  126. package/dist/plugin-runtime/node_modules/@cline/core/dist/services/feature-flags/posthog.js +2 -0
  127. package/dist/plugin-runtime/node_modules/@cline/core/dist/services/telemetry/index.js +1 -0
  128. package/dist/plugin-runtime/node_modules/@cline/core/dist/token-1h068py9.js +1 -0
  129. package/dist/plugin-runtime/node_modules/@cline/core/dist/token-util-7jchft51.js +1 -0
  130. package/dist/plugin-runtime/node_modules/@cline/core/dist/vertex-qfxfsrn4.js +1 -0
  131. package/dist/plugin-runtime/node_modules/@cline/core/package.json +1 -0
  132. package/dist/plugin-runtime/node_modules/@cline/llms/dist/index.browser.js +16 -0
  133. package/dist/plugin-runtime/node_modules/@cline/llms/dist/index.js +1 -0
  134. package/dist/plugin-runtime/node_modules/@cline/llms/package.json +1 -0
  135. package/dist/plugin-runtime/node_modules/@cline/sdk/dist/index.js +1 -0
  136. package/dist/plugin-runtime/node_modules/@cline/sdk/package.json +1 -0
  137. package/dist/plugin-runtime/node_modules/@cline/shared/dist/automation/index.js +57 -0
  138. package/dist/plugin-runtime/node_modules/@cline/shared/dist/db/index.js +127 -0
  139. package/dist/plugin-runtime/node_modules/@cline/shared/dist/index.browser.js +110 -0
  140. package/dist/plugin-runtime/node_modules/@cline/shared/dist/index.js +1 -0
  141. package/dist/plugin-runtime/node_modules/@cline/shared/dist/node.js +1 -0
  142. package/dist/plugin-runtime/node_modules/@cline/shared/dist/remote-config/index.js +68 -0
  143. package/dist/plugin-runtime/node_modules/@cline/shared/dist/storage/index.js +1 -0
  144. package/dist/plugin-runtime/node_modules/@cline/shared/dist/types/index.js +1 -0
  145. package/dist/plugin-runtime/node_modules/@cline/shared/package.json +1 -0
  146. package/dist/plugin-runtime/package.json +1 -0
  147. package/dist/{extensions → plugin-runtime}/plugin-sandbox-bootstrap.js +129 -129
  148. package/dist/remote/remote-environments.d.ts +1 -0
  149. package/dist/runtime/config/agent-runtime-config-builder.d.ts +2 -0
  150. package/dist/runtime/host/local-runtime-host.d.ts +10 -0
  151. package/dist/runtime/host/runtime-host.d.ts +6 -0
  152. package/dist/runtime/orchestration/runtime-oauth-token-manager.d.ts +3 -0
  153. package/dist/runtime/orchestration/session-runtime-orchestrator.d.ts +10 -1
  154. package/dist/runtime/orchestration/session-runtime.d.ts +2 -0
  155. package/dist/runtime/tools/subprocess-sandbox.d.ts +22 -0
  156. package/dist/services/llms/cline-recommended-models.d.ts +2 -0
  157. package/dist/services/local-runtime-bootstrap.d.ts +1 -0
  158. package/dist/services/plugin-command-api.d.ts +47 -0
  159. package/dist/services/plugin-commands.d.ts +25 -27
  160. package/dist/services/skills-cli.d.ts +2 -0
  161. package/dist/services/telemetry/core-events.d.ts +26 -0
  162. package/dist/services/telemetry/index.js +1 -1
  163. package/dist/services/telemetry/run-health.d.ts +40 -0
  164. package/dist/services/telemetry/stall-signals.d.ts +12 -0
  165. package/dist/types/config.d.ts +1 -0
  166. package/dist/types/session.d.ts +7 -0
  167. package/package.json +6 -5
@@ -0,0 +1,1147 @@
1
+ import{Zt,Dn,mo,ho,go,fo,yo,tr,ir,nr,mi,xo,ar,or,rr,bo,Ut,sr,Rt,Ft,Ti,ba,zi,va,wa,hs,Mt,gs,pe,fe,ka,fs,ei,vo,cr,ye,wo,me,Wn,lr,hn,ko,To,_o,ur,Mn,Gi,jt,Io,Nn,pr,Ln,ze,Be,Vi,$t,ne,qt,_t,So,Ki,dr,mr,Bn,he,y,S,Un,Ge,hr,Fn,jn,gr,fr,yr,re,We,It,$n,Hi,ke,ti,qn,zt,Xe,xr,br,vr,wr,kr,Tr,_r,zn,B,Gn,Vn,P,Sr,Kn,_i,Ii,ys,gn,xs,bs,vs,Ta,_a,Ia,ws,Sa,Ea,Ra,Oa,Aa,Ca,Pa,Da,Wa,Ma,Na,La,Ba,Ua,Fa,ks,Ot,Qi,Ji,Ts,_s,Is,ja,Ss,Es,Rs,Os,As,$a,Cs,_,Si,qa,Ze,Yi,ht,Gt,za,Ga,At,Ei,Z,Ve,fn,Hn,xe,Va,Ka,Ha,Qa,Nt,Ja,Ya,ii,yn,Xa,Er,Rr,Qn,Or,Ar,Za,eo,Xi,Yn,ni,et}from"../index-e2q4azd9.js";import{ki,ms,ya,Zo,xa}from"../index-v695918t.js";import"../index-f2mvvryf.js";import{Jr,li,bi,An,da,ln,st,un,mt,Dt,vi,K,Fi,ha,ga,rt,Lt,pn,Oe,ui,Xt,dn,Cn,ji,Bt,$i,os,rs,ss,cs}from"../index-28c7m0fv.js";import{kn,Di}from"../index-6k6ep10s.js";import{Jo}from"../index-9qkpjy7x.js";import{er}from"../index-xn1xhp06.js";import{X}from"../index-0cb4390m.js";import"../index-v0ctpcdr.js";import"../index-n2srkkh0.js";import"../index-vfm7r9wk.js";import"../index-d96n0s70.js";import"../index-02jpyn9y.js";import{On,J,pa,q,cn,at,lo,zo,Go,x,ot,f,h,wt,V,Vo,Je}from"../index-nbs1tsny.js";import{po}from"../index-91p1ghfk.js";import{Wt,fa,mn}from"../index-54eea0ex.js";import"../index-1f8vb421.js";import"../index-ae0ajw38.js";import"../index-egd18jj2.js";import"../index-9swk4nej.js";import"../index-j8r18nfg.js";import"../index-bzy863k0.js";import"../index-rmhzyxr8.js";import{R}from"../index-rtzf3vvk.js";import{ta,gi}from"../index-aa2s5myc.js";import{v,e,n,r,m,o,t,ae,p,w,M,d,on,s,a,Y,je}from"../index-mcnngj50.js";import{randomUUID as LE}from"node:crypto";import{existsSync as iI,mkdirSync as am,readFileSync as nI,renameSync as Ih,rmdirSync as DE,rmSync as lm,statSync as UE,unlinkSync as oI,writeFileSync as aI}from"node:fs";import{dirname as lI,join as ag}from"node:path";import{setTimeout as FE}from"node:timers/promises";import{isAbsolute as oA,relative as aA,resolve as oo,sep as lA}from"node:path";import{basename as dA}from"node:path";import{execFile as jA}from"node:child_process";import{basename as BA,resolve as HA}from"node:path";import{performance as _g}from"node:perf_hooks";import{promisify as zA}from"node:util";import{mkdirSync as eC,writeFileSync as tC}from"node:fs";import{isAbsolute as rC,join as PI}from"node:path";import{randomUUID as ua}from"node:crypto";import{realpathSync as mm,statSync as LC}from"node:fs";import{isAbsolute as qI,relative as DC,sep as jI}from"node:path";var KI=v(li(),1),GI=v(os(),1),XI=v(rs(),1),JI=v(po(),1),VI=v(fa(),1),Xo=v(ss(),1),an=v(cs(),1),Yo=v(mn(),1),YI=v(Jo(),1),Zu=v(Wt(),1);import{mkdirSync as WC,readFileSync as KC,statSync as GC,writeFileSync as XC}from"node:fs";import{dirname as JC}from"node:path";import{existsSync as cx,mkdirSync as px,readFileSync as mx,writeFileSync as hx}from"node:fs";import{resolve as fx}from"node:path";var gx=v(Jr(),1),Ni=v(li(),1);import{resolve as Lg}from"node:path";var pk=v(ms(),1),mk=v(er(),1);import{spawn as jx}from"node:child_process";import{closeSync as Bx,mkdirSync as Hx,openSync as zx,readFileSync as Wx,unlinkSync as Kx}from"node:fs";import{basename as Gx,dirname as Xx,join as Jx}from"node:path";import{fileURLToPath as Vx}from"node:url";import{createHash as Yx,randomBytes as hk}from"node:crypto";import{existsSync as Qx}from"node:fs";import{mkdir as hm,open as jg,readFile as fk,rename as Zx,rm as rc,writeFile as eR}from"node:fs/promises";import{dirname as gk,join as Wh}from"node:path";import{join as SR}from"node:path";import{existsSync as hP}from"node:fs";import{readdirSync as CP}from"node:fs";import{homedir as xP}from"node:os";import{isAbsolute as RP,join as jc,resolve as hi}from"node:path";import{setTimeout as ry}from"node:timers/promises";import{createHash as PP}from"node:crypto";import{createHash as ZM}from"node:crypto";import{createHash as fO}from"node:crypto";import{existsSync as IO,readFileSync as kO}from"node:fs";import{basename as SO,dirname as xy,extname as TO,join as _O,resolve as Gd}from"node:path";import{existsSync as tn,readFileSync as wS}from"node:fs";import{builtinModules as EO,createRequire as AO}from"node:module";import{dirname as bS,extname as IS,isAbsolute as CO,relative as LQ,resolve as ft}from"node:path";import{fileURLToPath as kS}from"node:url";import{existsSync as Py}from"node:fs";import{dirname as My,join as gu,resolve as xO}from"node:path";import{fileURLToPath as RO}from"node:url";import{existsSync as Wl}from"node:fs";import{createRequire as TS}from"node:module";import{dirname as yu,join as Zs}from"node:path";import{fileURLToPath as zO}from"node:url";import{spawn as WO}from"node:child_process";import{basename as KO}from"node:path";import{Worker as Dy}from"node:worker_threads";import{spawn as Vy}from"node:child_process";import{randomUUID as jS}from"node:crypto";import{createWriteStream as aL,existsSync as lL,mkdtempSync as dL,renameSync as Yy,rmSync as ku,writeFileSync as uL}from"node:fs";import{readdir as cL,readFile as pL,rm as Jd,stat as Qy}from"node:fs/promises";import{tmpdir as BS}from"node:os";import{join as ri}from"node:path";import{StringDecoder as mL}from"node:string_decoder";import{execFile as hL,spawnSync as m8}from"node:child_process";import{readFile as Zy}from"node:fs/promises";import*as Pr from"node:fs/promises";import*as Kr from"node:path";import*as e0 from"node:os";import*as ls from"node:fs/promises";import*as ts from"node:path";import{createReadStream as v1}from"node:fs";import*as mc from"node:fs/promises";import*as di from"node:path";import{createInterface as w1}from"node:readline";import{Readable as b1}from"node:stream";import{randomUUID as I1}from"node:crypto";import{spawn as n0}from"node:child_process";import*as o0 from"node:fs/promises";import*as hc from"node:path";import{mkdir as x1}from"node:fs/promises";import{mkdir as P1,writeFile as M1}from"node:fs/promises";import{join as N1}from"node:path";import{spawn as D1}from"node:child_process";import{realpathSync as U1}from"node:fs";import{readdir as F1}from"node:fs/promises";import q1 from"node:os";import Tu from"node:path";import{isMainThread as a0,parentPort as mv,Worker as j1}from"node:worker_threads";import{stat as eD}from"node:fs/promises";import io from"node:path";import{randomUUID as kD}from"node:crypto";import{mkdirSync as $U,writeFileSync as LU}from"node:fs";import{dirname as DU}from"node:path";import{createHash as oF}from"node:crypto";import{lstat as aF,readdir as D0,readFile as xf,realpath as Rf,stat as Gl}from"node:fs/promises";import{validateHeaderName as lF,validateHeaderValue as dF}from"node:http";import{isIP as uF}from"node:net";import{basename as d3,dirname as cF,isAbsolute as U0,join as js,relative as F0,resolve as wn}from"node:path";import{chmodSync as $v,existsSync as pp,mkdirSync as xF,readFileSync as RF,renameSync as PF,rmSync as MF,writeFileSync as NF}from"node:fs";import{basename as Lv,dirname as jm}from"node:path";import{existsSync as lq,mkdirSync as dq,readFileSync as uq,renameSync as cq,rmSync as pq,writeFileSync as mq}from"node:fs";import{dirname as z0,join as hq}from"node:path";import{existsSync as Cq,readFileSync as xq}from"node:fs";import{dirname as Rq,join as Km}from"node:path";import{createHash as Vq}from"node:crypto";import{resolve as Yq}from"node:path";import{setTimeout as Qq}from"node:timers/promises";import{existsSync as ej,mkdirSync as tj,readFileSync as rj,writeFileSync as sj}from"node:fs";import{dirname as ij}from"node:path";import{existsSync as yc,readFileSync as yj,statSync as vj}from"node:fs";import{basename as oT,dirname as Nu,extname as wj,join as vc,resolve as Xl}from"node:path";import{execFile as xj,spawn as Rj}from"node:child_process";import{createHash as Pj}from"node:crypto";import{mkdir as Mj,readdir as Nj,rm as Ou,stat as Oj,writeFile as $j}from"node:fs/promises";import{join as Jl}from"node:path";import{promisify as Lj}from"node:util";import{appendFileSync as Gj,readFileSync as Xj}from"node:fs";import{join as Jj}from"node:path";import{existsSync as Yj,readdirSync as Qj}from"node:fs";import{basename as Zj,extname as eB,join as tB}from"node:path";import{spawn as aB}from"node:child_process";import{createHash as AB}from"node:crypto";import{createHash as jB}from"node:crypto";import{resolve as BB}from"node:path";import{existsSync as eu,mkdirSync as WB,readdirSync as KB,rmdirSync as GB,rmSync as XB,unlinkSync as JB}from"node:fs";import{dirname as tw,join as dl}from"node:path";import{execFile as iH}from"node:child_process";import{randomUUID as nH}from"node:crypto";import{promisify as oH}from"node:util";import{appendFileSync as vH}from"node:fs";import{join as wH}from"node:path";import{existsSync as IH,readdirSync as kH,readFileSync as SH}from"node:fs";import{basename as sw,extname as TH,join as _H}from"node:path";import{createHash as tz}from"node:crypto";import{watch as rz}from"node:fs";import{readdir as sz,readFile as iz,stat as nz}from"node:fs/promises";import{join as oz}from"node:path";import{readdir as qf,readFile as lz,realpath as Tp,stat as $o}from"node:fs/promises";import{basename as Ks,dirname as dz,extname as Fu,isAbsolute as uz,join as Cr,relative as cz,resolve as Ws}from"node:path";import{createHash as Cz}from"node:crypto";import{spawn as zz}from"node:child_process";import{mkdir as Wz}from"node:fs/promises";import{StringDecoder as zT}from"node:string_decoder";import{randomUUID as Kz}from"node:crypto";import{appendFileSync as dW,existsSync as ro,mkdirSync as Aw,readdirSync as uW,readFileSync as Ep,renameSync as Cw,statSync as cW,writeFileSync as xw}from"node:fs";import{join as Ap}from"node:path";import{existsSync as pW,mkdirSync as mW}from"node:fs";import{join as hW}from"node:path";import{existsSync as $W}from"node:fs";import{readFile as LW}from"node:fs/promises";import{readFile as BW,stat as HW}from"node:fs/promises";import{existsSync as VW,mkdirSync as YW}from"node:fs";import{join as QW}from"node:path";import{existsSync as ZW,mkdirSync as eK}from"node:fs";import{dirname as tK}from"node:path";import{appendFileSync as rK,existsSync as sK,mkdirSync as zw,readFileSync as iK,writeFileSync as Ww}from"node:fs";import{readFile as Kw,rm as nK}from"node:fs/promises";import{dirname as Gw,join as oK}from"node:path";import{randomUUID as aK}from"node:crypto";import{mkdir as lK,open as o_,rename as dK,rm as uK}from"node:fs/promises";import{dirname as Xw}from"node:path";import{resolve as Np}from"node:path";import{existsSync as EK,readdirSync as AK,readFileSync as CK,statSync as xK}from"node:fs";import{relative as RK}from"node:path";import{createHash as PK}from"node:crypto";import{existsSync as XK,mkdirSync as JK,realpathSync as VK,watch as YK}from"node:fs";import{relative as QK,resolve as ZK}from"node:path";import{stat as tG}from"node:fs/promises";import{join as rG}from"node:path";import{existsSync as co,readdirSync as mG,readFileSync as hG}from"node:fs";import{basename as Ho,dirname as dh,extname as uh,isAbsolute as g_,join as Yf,relative as y_,resolve as ch}from"node:path";import{readFile as fG,writeFile as gG}from"node:fs/promises";import{isAbsolute as bG,relative as IG,resolve as rb}from"node:path";import{existsSync as mh,realpathSync as DG,statSync as UG,watch as FG}from"node:fs";import{relative as qG}from"node:path";import{existsSync as Qr,linkSync as jG,lstatSync as Up,mkdirSync as BG,readdirSync as HG,readFileSync as zG,realpathSync as ab,renameSync as WG,rmSync as lb,writeFileSync as KG}from"node:fs";import{basename as GG,dirname as XG,isAbsolute as hh,join as Fp,relative as __,resolve as db,sep as JG}from"node:path";import{createHash as VG}from"node:crypto";import{existsSync as qp,realpathSync as ub}from"node:fs";import{dirname as YG,isAbsolute as Qf,relative as Zf,resolve as E_,sep as QG}from"node:path";import{randomUUID as fb}from"node:crypto";import{resolve as gb}from"node:path";import{randomUUID as gX}from"node:crypto";import{randomUUID as vX}from"node:crypto";import{randomUUID as _X}from"node:crypto";import{posix as Wu}from"node:path";import{existsSync as a2,readdirSync as l2,readFileSync as d2}from"node:fs";import{join as qb}from"node:path";import{join as F2}from"node:path";import{join as AJ}from"node:path";import{resolve as Jb}from"node:path";import{timingSafeEqual as BJ}from"node:crypto";import HJ from"node:http";import{URL as td}from"node:url";import{chmodSync as zJ,existsSync as WJ,mkdirSync as KJ}from"node:fs";import{dirname as GJ}from"node:path";import{isAbsolute as YJ,relative as QJ,resolve as im,sep as ZJ}from"node:path";var CE=(i,l,u)=>()=>{if(i)try{l=i(i=0)}catch(c){u=[c]}if(u)throw u[0];return l};async function xE(i,l,u,c){let g=RE(l),b=await ME(u,c);if(g.length===0&&!b)return i;let I=[{type:"text",text:i},...g];if(b)I.push(...b);return I}function RE(i){if(!i||i.length===0)return[];let l=[];for(let u of i){let c=PE(u);if(c)l.push(c)}return l}function PE(i){let l=i.trim();if(!l)return;let u=l.match(/^data:([^;,]+);base64,(.+)$/);if(u){let c=u[1],g=u[2];if(!c||!g)return;return{type:"image",mediaType:c,data:g}}return{type:"image",mediaType:"image/png",data:l}}async function ME(i,l){if(!i||i.length===0)return;let u=l??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),c=await Promise.all(i.map(async(g)=>{let b=g.replace(/\\/g,"/");try{let I=await u(g);return{type:"file",path:b,content:I}}catch(I){let k=I instanceof Error?I.message:String(I);return{type:"file",path:b,content:`Error fetching content: ${k}`}}}));if(c.length===0)return;return c}function NE(i){return i.trim().split(/[\\/]/).at(-1)?.toLowerCase().replace(/\.(?:cmd|exe)$/i,"")??""}function OE(i){if(NE(i.command)!=="npx")return;if(Object.keys(i.env??{}).length>0)return;let l=i.args??[],u=0;while(l[u]==="-y"||l[u]==="--yes")u+=1;if(!/^mcp-remote(?:@[^/\s]+)?$/.test(l[u]??""))return;let c=l[u+1];if(!c||l.length!==u+2)return;try{let g=new URL(c);if(g.protocol!=="http:"&&g.protocol!=="https:")return;return{type:"streamableHttp",url:g.toString()}}catch{return}}function $E(i){return i.type==="stdio"?OE(i)??i:i}function Tc(i){if(!i)return;if(i==="http")return"streamableHttp";return i}function nn(){return yn()}function qE(i,l){am(lI(i),{recursive:!0});let u=`${i}.tmp.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}`;try{aI(u,l,{encoding:"utf8",flag:"wx"}),Ih(u,i)}catch(c){try{oI(u)}catch{}throw c}}function jE(i){Atomics.wait(wI,0,0,i)}function BE(i){return`${i}.lock`}function dI(){return`${process.pid}.${Date.now()}.${LE()}`}function uI(i,l){am(lI(i),{recursive:!0});let u=`${i}.tmp.${l}`;lm(u,{recursive:!0,force:!0}),am(u,{recursive:!0}),aI(ag(u,`owner.${l}`),l,{encoding:"utf8",flag:"wx"});try{return Ih(u,i),{lockDir:i,ownerFile:ag(i,`owner.${l}`)}}catch(c){if(lm(u,{recursive:!0,force:!0}),iI(i))return;throw c}}function cI(i,l){let u;try{u=Date.now()-UE(i).mtimeMs}catch(g){if(g.code==="ENOENT")return;throw g}if(u<Sh)return;l.logger?.log(`[mcp-settings] Stale lock directory at ${i} (age ${u}ms); reclaiming.`,{severity:"warn"});let c=`${i}.stale.${dI()}`;try{Ih(i,c)}catch(g){if(g.code==="ENOENT")return;throw g}lm(c,{recursive:!0,force:!0})}function HE(i){try{oI(i.ownerFile)}catch(l){if(l.code!=="ENOENT")throw l}try{DE(i.lockDir)}catch(l){let u=l.code;if(u!=="ENOENT"&&u!=="ENOTEMPTY"&&u!=="EEXIST")throw l}}function pI(i){let l=BE(i);if(rd.has(l))throw Error(`Reentrant MCP settings update for ${i}. Keep mutators pure: compute values up front and do not call back into the settings API.`);return{lockDir:l,token:dI()}}function zE(i,l){let{lockDir:u,token:c}=pI(i),g=l.timeoutMs??Sh,b=Date.now();while(!0){let I=uI(u,c);if(I)return rd.add(u),I;if(Date.now()-b>g)throw new kh(`Timed out waiting for MCP settings lock at ${u} after ${g}ms.`);cI(u,l),jE(vI)}}async function WE(i,l){let{lockDir:u,token:c}=pI(i),g=l.timeoutMs??Sh,b=Date.now();while(!0){let I=uI(u,c);if(I)return rd.add(u),I;if(Date.now()-b>g)throw new kh(`Timed out waiting for MCP settings lock at ${u} after ${g}ms.`);cI(u,l),await FE(vI)}}function mI(i,l,u){try{let c=XE(l),g=JE(c,u);return qE(l,`${JSON.stringify(c,null,2)}
2
+ `),g}finally{rd.delete(i.lockDir),HE(i)}}function KE(i,l,u={}){let c=zE(i,u);return mI(c,i,l)}async function GE(i,l,u={}){let c=await WE(i,u);return mI(c,i,l)}function XE(i){let l=YE(i);if(!l.mcpServers||typeof l.mcpServers!=="object"||Array.isArray(l.mcpServers))l.mcpServers={};return l}function JE(i,l){let u=JSON.stringify(i),c=JSON.parse(u),g=l(c),b=JSON.stringify(c),I=l(i);if(JSON.stringify(i)!==b)throw new um("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different settings.");if(JSON.stringify(I)!==JSON.stringify(g))throw new um("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return I}function VE(i){let l=nI(i,"utf8"),u;try{u=JSON.parse(l)}catch(c){let g=c instanceof Error?c.message:String(c);throw Error(`Failed to parse MCP settings JSON at "${i}": ${g}`)}if(!u||typeof u!=="object"||Array.isArray(u))throw Error(`Invalid MCP settings at "${i}": expected object.`);return u}function YE(i){try{return VE(i)}catch(l){if(l.code==="ENOENT")return{};throw l}}function hI(i,l){if(!Object.hasOwn(i,l))return;let u=i[l];if(!u||typeof u!=="object"||Array.isArray(u))return;return u}function QE(i,l,u){Object.defineProperty(i,l,{value:u,enumerable:!0,configurable:!0,writable:!0})}function fI(i={}){let l=i.filePath??nn(),u=nI(l,"utf8"),c;try{c=JSON.parse(u)}catch(b){let I=b instanceof Error?b.message:String(b);throw Error(`Failed to parse MCP settings JSON at "${l}": ${I}`)}let g=yI.safeParse(c);if(!g.success){let b=g.error.issues.map((I)=>{let k=I.path.join(".");return k?`${k}: ${I.message}`:I.message}).join("; ");throw Error(`Invalid MCP settings at "${l}": ${b}`)}return g.data}function Vu(i){if(!i)return;let l={...i.clientInformation?{clientInformation:i.clientInformation}:{},...i.tokens?{tokens:i.tokens}:{},...i.codeVerifier?{codeVerifier:i.codeVerifier}:{},...i.discoveryState?{discoveryState:i.discoveryState}:{},...i.redirectUrl?{redirectUrl:i.redirectUrl}:{},...i.lastError?{lastError:i.lastError}:{},...i.lastAuthenticatedAt?{lastAuthenticatedAt:i.lastAuthenticatedAt}:{},...i.authorizationRequired?{authorizationRequired:!0}:{}};return Object.keys(l).length>0?l:void 0}function ZE(i){if(i===void 0)return;let l=jd.safeParse(i);if(!l.success)return;return Vu(l.data)}function gI(i={}){let l=i.filePath??nn();return iI(l)}function dm(i={}){let l=fI(i);return Object.entries(l.mcpServers).map(([u,c])=>eA(u,c))}function eA(i,l){return{name:i,transport:$E(l.transport),disabled:l.disabled,timeoutSeconds:l.timeoutSeconds,metadata:l.metadata,oauthClient:l.oauthClient,oauth:l.oauth}}function tA(i){let l=i.filePath??nn(),u=i.name.trim();if(!u)throw Error("MCP server settings toggle requires a server name.");KE(l,(c)=>{let g=c.mcpServers;if(!g||typeof g!=="object"||Array.isArray(g))throw Error(`Invalid MCP settings at "${l}": mcpServers must be an object.`);let b={...g},I=hI(b,u);if(!I)throw Error(`Unknown MCP server: ${u}`);let k={...I};if(i.disabled)k.disabled=!0;else delete k.disabled;QE(b,u,k),c.mcpServers=b})}function rA(i,l={}){let u=fI(l);if(!Object.hasOwn(u.mcpServers,i))return;return Vu(u.mcpServers[i]?.oauth)}function sA(i,l,u){return(c)=>{let g=c.mcpServers,b=hI(g,i);if(!b)throw Error(`Unknown MCP server: ${i}`);if(u.expectedOAuthClient!==void 0){let T=Bd.safeParse(b.oauthClient),E=T.success?T.data:void 0,A=u.expectedOAuthClient??void 0;if(E?.clientId!==A?.clientId||E?.clientSecret!==A?.clientSecret)throw new Yu(i)}let I=ZE(b.oauth)??{},k=Vu(l(I));if(k)b.oauth=k;else delete b.oauth;return k??{}}}async function iA(i,l,u={}){let c=u.filePath??nn();return GE(c,sA(i,l,u))}async function nA(i,l={}){let u=dm(l);for(let c of u)await i.registerServer(c);return u}var _n,_c,Ec,jd,Bd,lg,dg,ug,cg,pg,mg,Ac,hg,fg,gg,yI,Yu,kh,um,Sh=1e4,vI=25,wI,rd,bI=CE(()=>{_n=d(e(),e()),_c=d(e(),m()),Ec=je((i)=>ze(i)?Be(i):void 0,n().optional()),jd=t({clientInformation:d(e(),m()).optional(),tokens:d(e(),m()).optional(),codeVerifier:e().optional(),discoveryState:d(e(),m()).optional(),redirectUrl:e().url().optional(),lastError:e().optional(),lastAuthenticatedAt:n().int().positive().optional(),authorizationRequired:r().optional()}).strip(),Bd=t({clientId:e().min(1),clientSecret:e().min(1).optional()}).strip(),lg=t({type:a("stdio"),command:e().min(1),args:o(e()).optional(),cwd:e().min(1).optional(),env:_n.optional()}),dg=t({type:a("sse"),url:e().url(),headers:_n.optional()}),ug=t({type:a("streamableHttp"),url:e().url(),headers:_n.optional()}),cg=w("type",[lg,dg,ug]),pg=t({transport:cg,disabled:r().optional(),timeout:Ec,metadata:_c.optional(),oauthClient:Bd.optional(),oauth:jd.optional()}).transform((i)=>({transport:i.transport,disabled:i.disabled,timeoutSeconds:i.timeout,metadata:i.metadata,oauthClient:i.oauthClient,oauth:i.oauth})),mg=s(["stdio","sse","http","streamableHttp"]).optional(),Ac=t({type:s(["stdio","sse","streamableHttp"]).optional(),transportType:mg,disabled:r().optional(),timeout:Ec,metadata:_c.optional(),oauthClient:Bd.optional(),oauth:jd.optional()}),hg=Ac.extend({command:e().min(1),args:o(e()).optional(),cwd:e().min(1).optional(),env:_n.optional()}).superRefine((i,l)=>{let u=i.type??Tc(i.transportType);if(u&&u!=="stdio")l.addIssue({code:ta.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform((i)=>({transport:{type:"stdio",command:i.command,args:i.args,cwd:i.cwd,env:i.env},disabled:i.disabled,timeoutSeconds:i.timeout,metadata:i.metadata,oauthClient:i.oauthClient,oauth:i.oauth})),fg=Ac.extend({url:e().url(),headers:_n.optional()}).superRefine((i,l)=>{let u=i.type??Tc(i.transportType)??"sse";if(u!=="sse"&&u!=="streamableHttp")l.addIssue({code:ta.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform((i)=>{if((i.type??Tc(i.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:i.url,headers:i.headers},disabled:i.disabled,timeoutSeconds:i.timeout,metadata:i.metadata,oauthClient:i.oauthClient,oauth:i.oauth};return{transport:{type:"sse",url:i.url,headers:i.headers},disabled:i.disabled,timeoutSeconds:i.timeout,metadata:i.metadata,oauthClient:i.oauthClient,oauth:i.oauth}}),gg=p([pg,hg,fg]),yI=t({mcpServers:d(e(),gg)}).passthrough(),Yu=class extends Error{constructor(l){super(`OAuth client configuration changed while authorizing MCP server "${l}". Start authorization again.`);this.name="McpOAuthClientChangedError"}},kh=class extends Error{constructor(l){super(l);this.name="McpSettingsLockTimeoutError"}},um=class extends Error{constructor(l){super(l);this.name="McpSettingsMutatorPurityError"}},wI=new Int32Array(new SharedArrayBuffer(4)),rd=new Set});function ci(i,l){return l.crossWorkspace&&i.payload?.allWorkspaces===!0}function yg(i,l){if(typeof l!=="string"||!l.trim())return;let u=oo(i,l);if(!II(i,u))throw Error("schedule cwd is outside the client workspace scope");return u}function vg(i){return typeof i.workspaceRoot==="string"&&i.workspaceRoot.trim()?oo(i.workspaceRoot.trim()):void 0}function II(i,l){let u=aA(i,l);return u!==".."&&!u.startsWith(`..${lA}`)&&!oA(u)}function Ht(i,l){return{version:i.version,requestId:i.requestId,ok:!0,payload:l}}function wg(i,l,u){return{version:i.version,requestId:i.requestId??P("hubreq_"),ok:!1,error:{code:l,message:u}}}class kI{schedules;constructor(i){this.schedules=i}async handleCommand(i,l){try{let u=this.resolveScope(l);switch(i.command){case"schedule.create":return Ht(i,{schedule:this.schedules.createSchedule(this.toCreateInput(i.payload??{},u,ci(i,u)))});case"schedule.list":return Ht(i,{schedules:this.schedules.listSchedules({enabled:typeof i.payload?.enabled==="boolean"?i.payload.enabled:void 0,limit:typeof i.payload?.limit==="number"?i.payload.limit:void 0,tags:Array.isArray(i.payload?.tags)?i.payload?.tags:void 0,workspaceRoot:ci(i,u)?void 0:u.workspaceRoot})});case"schedule.get":return Ht(i,{schedule:this.requireScopedSchedule(i,u)});case"schedule.update":{let c=this.requireScopedSchedule(i,u);return Ht(i,{schedule:this.schedules.updateSchedule(c.scheduleId,this.toUpdateInput(i.payload??{},u,c,ci(i,u)))})}case"schedule.delete":return Ht(i,{deleted:this.schedules.deleteSchedule(this.requireScopedSchedule(i,u).scheduleId)});case"schedule.enable":return Ht(i,{schedule:this.schedules.resumeSchedule(this.requireScopedSchedule(i,u).scheduleId)});case"schedule.disable":return Ht(i,{schedule:this.schedules.pauseSchedule(this.requireScopedSchedule(i,u).scheduleId)});case"schedule.trigger":return Ht(i,{execution:i.payload?.wait===!1?this.schedules.triggerScheduleNowDetached(this.requireScopedSchedule(i,u).scheduleId):await this.schedules.triggerScheduleNow(this.requireScopedSchedule(i,u).scheduleId)});case"schedule.list_executions":return Ht(i,{executions:this.listScopedExecutions(i,u)});case"schedule.stats":return Ht(i,{stats:this.schedules.getScheduleStats(this.requireScopedSchedule(i,u).scheduleId)});case"schedule.active":{let c=this.schedules.getActiveExecutions();if(ci(i,u))return Ht(i,{executions:c});let g=this.scopedScheduleIds(u);return Ht(i,{executions:c.filter((b)=>g.has(b.scheduleId))})}case"schedule.upcoming":{let c=this.schedules.getUpcomingRuns(typeof i.payload?.limit==="number"?i.payload.limit:void 0);if(ci(i,u))return Ht(i,{runs:c});let g=this.scopedScheduleIds(u);return Ht(i,{runs:c.filter((b)=>g.has(b.scheduleId))})}default:return wg(i,"unsupported_command",`Unsupported hub schedule command: ${i.command}`)}}catch(u){return wg(i,"schedule_command_failed",u instanceof Error?u.message:String(u))}}resolveScope(i){let l=i?.workspaceContext;if(!i?.clientId||!l?.workspaceRoot?.trim())throw Error("schedule commands require a registered workspace client");let u=oo(l.workspaceRoot),c=oo(l.cwd?.trim()||u);if(!II(u,c))throw Error("client cwd is outside its workspace scope");return{workspaceRoot:u,cwd:c,crossWorkspace:i.crossWorkspace===!0}}requireScopedSchedule(i,l){let u=String(i.payload?.scheduleId??"").trim(),c=u?this.schedules.getSchedule(u):void 0;if(!c||!ci(i,l)&&oo(c.workspaceRoot)!==l.workspaceRoot)throw Error("schedule does not exist in this workspace");return c}scopedScheduleIds(i){return new Set(this.schedules.listSchedules({workspaceRoot:i.workspaceRoot}).map((l)=>l.scheduleId))}listScopedExecutions(i,l){let u=typeof i.payload?.scheduleId==="string"?i.payload.scheduleId.trim():void 0;if(u)this.requireScopedSchedule(i,l);let c=this.schedules.listScheduleExecutions({scheduleId:u,status:typeof i.payload?.status==="string"?i.payload.status:void 0,limit:typeof i.payload?.limit==="number"?i.payload.limit:void 0});if(ci(i,l))return c;let g=this.scopedScheduleIds(l);return c.filter((b)=>g.has(b.scheduleId))}toCreateInput(i,l,u){let c=ka(i,"yolo"),g=i.modelSelection&&typeof i.modelSelection==="object"&&!Array.isArray(i.modelSelection)?i.modelSelection:i.provider&&i.model?{providerId:String(i.provider),modelId:String(i.model)}:void 0,b=(u?vg(i):void 0)??l.workspaceRoot,{allWorkspaces:I,...k}=i;return{...k,modelSelection:g,mode:c,workspaceRoot:b,cwd:yg(b,i.cwd)??(b===l.workspaceRoot?l.cwd:b)}}toUpdateInput(i,l,u,c){let g=ka(i),b=i.modelSelection&&typeof i.modelSelection==="object"&&!Array.isArray(i.modelSelection)?i.modelSelection:i.provider||i.model?{providerId:typeof i.provider==="string"?i.provider:"",modelId:typeof i.model==="string"?i.model:""}:void 0,I=c?vg(i)??oo(u.workspaceRoot):l.workspaceRoot,{allWorkspaces:k,...T}=i;return{...T,modelSelection:b,...g===void 0?{}:{mode:g},workspaceRoot:I,...Object.hasOwn(i,"cwd")?{cwd:i.cwd===null?I:yg(I,i.cwd)??(I===l.workspaceRoot?l.cwd:I)}:{}}}}class Th{store;nowFn;constructor(i){this.store=i.store,this.nowFn=i.now??(()=>Date.now())}materializeAll(){let i={oneOffQueued:0,scheduleQueued:0},l=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let c of l)if(this.materializeOneOff(c))i.oneOffQueued+=1;let u=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let c of u)try{if(this.materializeSchedule(c))i.scheduleQueued+=1}catch{}return i}materializeOneOff(i){if(i.triggerKind!=="one_off")return!1;if(!i.enabled||i.removed)return!1;if(this.store.hasConsumedOneOffRevision(i.specId,i.revision))return!1;return this.store.enqueueRun({specId:i.specId,specRevision:i.revision,triggerKind:"one_off",scheduledFor:i.nextRunAt??new Date(this.nowFn()).toISOString()}),!0}materializeSchedule(i){if(i.triggerKind!=="schedule")return!1;if(!i.enabled||i.removed)return!1;if(!i.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:i.specId,nowMs:this.nowFn()}).queued}}var Kt={READ_FILES:"read_files",SEARCH_CODEBASE:"search_codebase",RUN_COMMANDS:"run_commands",FETCH_WEB_CONTENT:"fetch_web_content",APPLY_PATCH:"apply_patch",EDITOR:"editor",SKILLS:"skills",ASK:"ask_question",SUBMIT_AND_EXIT:"submit_and_exit"},uA=[Kt.READ_FILES,Kt.SEARCH_CODEBASE,Kt.RUN_COMMANDS,Kt.FETCH_WEB_CONTENT,Kt.APPLY_PATCH,Kt.EDITOR,Kt.SKILLS,Kt.ASK,Kt.SUBMIT_AND_EXIT];function cA(i){return i.disabled!==!0}function SI(i){if(i.length===0)return"";return`
3
+
4
+ # Rules
5
+ ${i.map((l)=>`## ${l.name}
6
+ ${l.instructions}`).join(`
7
+
8
+ `)}`}function bg(i,l){let u=i?.trim(),c=l?.trim();if(u&&c)return`${u}
9
+
10
+ ${c}`;return u||c||void 0}function TI(i){return i.map((l)=>l.item).filter(cA).sort((l,u)=>l.name.localeCompare(u.name))}function _I(i){return SI(TI(i))}function pA(i){let l=i.getSnapshot("rule");return TI([...l.values()].map((u)=>({item:u.item})))}function mA(i){return SI(pA(i))}var hA=500,Re={SCHEDULE:{RUN_STARTED:"schedule.run_started",RUN_FINISHED:"schedule.run_finished"},CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended",ERROR_RECORDED:"session.error_recorded"},AGENT:{UNEXPECTED_REASONING_TOKENS:xr},USER:{AUTH_STARTED:"user.auth_started",AUTH_SUCCEEDED:"user.auth_succeeded",AUTH_FAILED:"user.auth_failed",AUTH_LOGGED_OUT:"user.auth_logged_out",AUTH_REFRESH_SOFT_FAILURE:"user.auth_refresh_soft_failure",AUTH_RUN_RETRY:"user.auth_run_retry",PROVIDER_CONFIGURED:"user.provider_configured",TELEMETRY_OPT_OUT:"user.opt_out"},TASK:{CREATED:"task.created",RESTARTED:"task.restarted",COMPLETED:"task.completed",GIT_SNAPSHOT:"task.git_snapshot",CONVERSATION_TURN:"task.conversation_turn",TOKEN_USAGE:"task.tokens",MODE_SWITCH:"task.mode",TOOL_USED:"task.tool_used",SKILL_USED:"task.skill_used",DIFF_EDIT_FAILED:"task.diff_edit_failed",PROVIDER_API_ERROR:"task.provider_api_error",MISTAKE_LIMIT_REACHED:"task.mistake_limit_reached",CAPABILITY_OWNER_GONE:"task.capability_owner_gone",PROVIDER_REQUEST_STARTED:br,PROVIDER_STREAM_STARTED:vr,FIRST_CHUNK_RECEIVED:wr,PROVIDER_STREAM_FAILED:kr,MAX_TOKENS_RECOVERY:_r,CANCELLED:Tr,RUN_IDLE:"task.run_idle",MENTION_USED:"task.mention_used",MENTION_FAILED:"task.mention_failed",MENTION_SEARCH_RESULTS:"task.mention_search_results",AGENT_CREATED:"task.agent_created",AGENT_TEAM_CREATED:"task.agent_team_created",SUBAGENT_STARTED:"task.subagent_started",SUBAGENT_COMPLETED:"task.subagent_completed",COMPACTION_EXECUTED:"task.compaction_executed",COMPACTION_SKIPPED:"task.compaction_skipped",COMPACTION_BUDGET_EMERGENCY:"task.compaction_budget_emergency"},HOOKS:{DISCOVERY_COMPLETED:"hooks.discovery_completed",DETACHED_RUNTIME:"hooks.detached_runtime"},WORKSPACE:{INITIALIZED:"workspace.initialized",INIT_ERROR:"workspace.init_error",PATH_RESOLVED:"workspace.path_resolved"},SDK:{ERROR:zn,TOOL_TIMEOUT:"sdk.tool_timeout",PLAN_MODE_COMMAND_BLOCKED:"sdk.plan_mode_command_blocked"},FEATURE_FLAGS:{FLAG_CALLED:"$feature_flag_called"}};function Me(i,l,u){i?.capture({event:l,properties:u})}function _h(i){if(!i)return;return i.substring(0,hA)}function fA(i){if(typeof i==="string")return"Error";return i.name?.trim()||i.constructor?.name||"Error"}function gA(i){return typeof i==="string"?i:i.message}function Ig(i,l){return i.some((u)=>l.has(u.trim().toLowerCase()))}function yA(i,l){let u=[...l.vcs_types],c={root_count:l.root_count,vcs_types:u,is_multi_root:l.root_count>1,has_git:Ig(u,new Set(["git"])),has_mercurial:Ig(u,new Set(["mercurial","hg"]))};if(l.init_duration_ms!==void 0)c.init_duration_ms=l.init_duration_ms;if(l.feature_flag_enabled!==void 0)c.feature_flag_enabled=l.feature_flag_enabled;if(l.is_remote_workspace!==void 0)c.is_remote_workspace=l.is_remote_workspace;Me(i,Re.WORKSPACE.INITIALIZED,c)}function vA(i,l,u){Me(i,Re.WORKSPACE.INIT_ERROR,{error_type:fA(l),error_message:_h(gA(l)),fallback_to_single_root:u.fallback_to_single_root,workspace_count:u.workspace_count??0})}function Eh(i,l){Me(i,Re.USER.AUTH_STARTED,{provider:l})}function Ah(i,l,u){Me(i,Re.USER.AUTH_SUCCEEDED,{provider:l,...u})}function lu(i,l,u,c){Me(i,Re.USER.AUTH_FAILED,{provider:l,errorMessage:_h(u),...c?.requestId?{request_id:c.requestId}:{}})}function Ch(i,l,u,c){Me(i,Re.USER.AUTH_LOGGED_OUT,{provider:l,reason:u,...c})}function Fl(i,l,u){Me(i,Re.USER.AUTH_REFRESH_SOFT_FAILURE,{provider:l,...u})}function wA(i,l,u){Me(i,Re.USER.AUTH_RUN_RETRY,{provider:l,recovered:u?.recovered})}function bA(i,l){i?.captureRequired(Re.USER.TELEMETRY_OPT_OUT,l)}function xh(i,l){let u=l.id?.trim();if(u)i?.setDistinctId(u);i?.updateCommonProperties({user_id:u||l.id,account_id:l.id,account_email:l.email,provider:l.provider,organization_id:l.organizationId,organization_name:l.organizationName,member_id:l.memberId})}function IA(i,l){Me(i,Re.TASK.CREATED,l)}function kA(i,l){Me(i,Re.TASK.RESTARTED,l)}function kg(i,l){Me(i,Re.TASK.COMPLETED,l)}function EI(i,l){Me(i,Re.TASK.CONVERSATION_TURN,{...l,timestamp:new Date().toISOString()})}function SA(i,l){Me(i,Re.TASK.TOKEN_USAGE,l)}function TA(i,l,u){Me(i,Re.TASK.MODE_SWITCH,{ulid:l,mode:u})}function Ko(i,l){Me(i,Re.TASK.TOOL_USED,l)}function _A(i,l){Me(i,Re.TASK.SKILL_USED,l)}function EA(i,l){Me(i,Re.TASK.DIFF_EDIT_FAILED,l)}function AA(i,l){Me(i,Re.TASK.MISTAKE_LIMIT_REACHED,{...l,timestamp:new Date().toISOString()})}function Sg(i,l){Me(i,Re.TASK.CAPABILITY_OWNER_GONE,l)}function CA(i,l){Me(i,Re.TASK.RUN_IDLE,Rh(l))}function xA(i,l){Me(i,Re.SDK.TOOL_TIMEOUT,Rh(l))}function RA(i,l){Me(i,Re.SDK.PLAN_MODE_COMMAND_BLOCKED,Rh(l))}function Rh(i){let l={};for(let[u,c]of Object.entries(i))if(c!==void 0)l[u]=c;return l}function PA(i,l,u){Me(i,Re.TASK.MENTION_USED,{mentionType:l,contentLength:u,timestamp:new Date().toISOString()})}function MA(i,l,u,c){Me(i,Re.TASK.MENTION_FAILED,{mentionType:l,errorType:u,errorMessage:_h(c),timestamp:new Date().toISOString()})}function NA(i,l,u,c,g){Me(i,Re.TASK.MENTION_SEARCH_RESULTS,{queryLength:l.length,resultCount:u,searchType:c,isEmpty:g,timestamp:new Date().toISOString()})}function Ph(i,l){Me(i,Re.TASK.AGENT_CREATED,{...l,timestamp:new Date().toISOString()})}function OA(i,l){Me(i,Re.TASK.AGENT_TEAM_CREATED,{...l,timestamp:new Date().toISOString()})}function Tg(i,l){Me(i,l.event==="ended"?Re.TASK.SUBAGENT_COMPLETED:Re.TASK.SUBAGENT_STARTED,{...l,timestamp:new Date().toISOString()})}function $A(i,l){Me(i,Re.HOOKS.DETACHED_RUNTIME,{hookName:l.hookName,durationMs:l.durationMs,exitCode:l.exitCode??void 0,exited:l.exited,timestamp:new Date().toISOString()})}function LA(i,l,u,c){Me(i,Re.HOOKS.DISCOVERY_COMPLETED,{hookName:l,globalCount:u,workspaceCount:c,totalCount:u+c,timestamp:new Date().toISOString()})}function DA(i,l){Me(i,Re.TASK.COMPACTION_EXECUTED,{...l,timestamp:new Date().toISOString()})}function UA(i,l){Me(i,Re.TASK.COMPACTION_SKIPPED,{...l,timestamp:new Date().toISOString()})}function FA(i,l){Me(i,Re.TASK.COMPACTION_BUDGET_EMERGENCY,{...l,timestamp:new Date().toISOString()})}function qA(i,l){Me(i,Re.SESSION.ERROR_RECORDED,l)}function oa(i,l){try{Me(i,l.phase==="started"?Re.SCHEDULE.RUN_STARTED:Re.SCHEDULE.RUN_FINISHED,{triggerKind:l.triggerKind,attemptCount:l.attemptCount,startDelayMs:l.startDelayMs,...l.phase==="finished"?{outcome:l.outcome,durationMs:l.durationMs}:{}})}catch{}}var WA=zA(jA);function KA(i,l){return WA("git",i,{cwd:l.cwd,encoding:"utf8",windowsHide:!0,signal:l.signal,timeout:15000,maxBuffer:10485760,env:{...process.env,GIT_TERMINAL_PROMPT:"0",GIT_SSH_COMMAND:process.env.GIT_SSH_COMMAND||"ssh -o BatchMode=yes"}})}function GA(i){if(!i||typeof i!=="object"||!("stderr"in i))return"";return typeof i.stderr==="string"?i.stderr.trim():""}function XA(i){if(!i||typeof i!=="object"||!("code"in i))return;return typeof i.code==="number"?i.code:void 0}function AI(i){let l=ql(i.cwd),u=i.git??KA,c=async(b)=>(await u(b,{cwd:l,signal:i.signal})).stdout,g=async(b)=>(await c(b)).trim();return{async isInsideWorkTree(){try{return await g(["rev-parse","--is-inside-work-tree"])==="true"}catch(b){if(XA(b)===128&&/not a git repository|Kein Git-Repository/i.test(GA(b)))return!1;throw b}},remotes:()=>ki({baseDir:l}).getRemotes(!0),displayBranch:async()=>(await ki({baseDir:l}).branch()).current.trim(),symbolicBranch:()=>g(["symbolic-ref","--quiet","--short","HEAD"]),headSha:()=>g(["rev-parse","HEAD"]),workspacePrefix:async()=>(await c(["rev-parse","--show-prefix"])).replace(/[\r\n]+$/,""),worktreeStatus:()=>g(["status","--porcelain=v1","--untracked-files=all","--ignore-submodules=none"]),branchRemote:(b)=>g(["config","--get",`branch.${b}.remote`]),branchMergeRef:(b)=>g(["config","--get",`branch.${b}.merge`]),remoteUrl:(b)=>g(["remote","get-url",b]),remoteRefs:(b,I)=>g(["ls-remote","--exit-code",b,I])}}function JA(i){let l=i?.git;if(!l||typeof l!=="object"||Array.isArray(l))return{};let u=l;return{...typeof u.url==="string"&&u.url.trim()?{url:u.url.trim()}:{},...typeof u.branch==="string"&&u.branch.trim()?{branch:u.branch.trim()}:{}}}function Eg(i,l){let u={...i??{}};if(!l.url&&!l.branch)return delete u.git,Object.keys(u).length>0?u:void 0;let c={...u.git&&typeof u.git==="object"&&!Array.isArray(u.git)?u.git:{}};if(l.url)c.url=l.url;else delete c.url;if(l.branch)c.branch=l.branch;else delete c.branch;return u.git=c,u}function VA(i,l){let u=JA(i);return u.url===l.url&&u.branch===l.branch}function CI(i){let l=i.find(({name:u})=>u==="origin")??i[0];return(l?.refs.fetch||l?.refs.push)?.trim()||void 0}function ql(i){return HA(i)}async function xI(i){return(await RI(i)).info}function Ag(i){let l=i instanceof Error?i.message:String(i);return/unknown revision|ambiguous argument|does not have any commits yet/i.test(l)}function hd(i){if(i instanceof Error)return{errorType:i.name?.trim()||i.constructor.name||"Error",message:i.message};return{errorType:"Error",message:String(i)}}async function RI(i){let l=ql(i),u={rootPath:l,hint:BA(l)||void 0},c={},g;try{let b=AI({cwd:l});if(!await b.isInsideWorkTree())return{info:u,vcsType:"none",gitState:c};try{let I=await b.remotes();if(I.length>0){let k=I.map((E)=>{let A=E.refs.fetch||E.refs.push;return`${E.name}: ${A}`});u.associatedRemoteUrls=k;let T=CI(I);if(T)c.url=T}}catch(I){g??=hd(I)}try{let I=await b.headSha();if(I.length>0)u.latestGitCommitHash=I}catch(I){if(!Ag(I))g??=hd(I)}try{let I=await b.displayBranch();if(I.length>0)u.latestGitBranchName=I,c.branch=I}catch(I){if(!Ag(I))g??=hd(I)}return{info:u,vcsType:"git",gitState:c,error:g}}catch(b){return{info:u,vcsType:"none",gitState:c,error:hd(b)}}}async function YA(i){try{let l=AI({cwd:i});if(!await l.isInsideWorkTree())return{};let[u,c]=await Promise.all([l.remotes(),l.displayBranch()]),g=CI(u);return{...g?{url:g}:{},...c?{branch:c}:{}}}catch{return}}async function QA(i){let l=await xI(i);return Un(l)}async function ZA(i){let l=_g.now(),u=await RI(i),c=_g.now()-l,g=u.info;return{workspaceInfo:g,workspaceMetadata:Un(g),durationMs:c,vcsType:u.vcsType,gitState:u.gitState,initError:u.error}}function Vs(i){if(/[:#\n]/.test(i)||i.includes('"'))return JSON.stringify(i);return i}function Ur(i,l){if(l===void 0||l===null)return;return`${i}: ${Vs(l)}`}function MI(i){let l=0;for(let c of i.matchAll(/`+/g))l=Math.max(l,c[0].length);let u="`".repeat(Math.max(3,l+1));return`${u}
11
+ ${i}
12
+ ${u}`}function sC(i){return i.replace(/[\r\n\u2028\u2029]+/g," ").replace(/[\\`*_[\]{}()#+\-.!<>|]/g,"\\$&")}function iC(i,l){if(i.source==="hub-schedule")return{kind:"database",label:`managed schedule \`${i.externalId}\` stored in cron.db (edit via the schedule tools/UI, not a file)`};let u=rC(i.sourcePath)?i.sourcePath:PI(Nt(l),i.sourcePath);return{kind:"file",path:u,label:u}}function cm(i){if(i<1000)return`${i}ms`;let l=i/1000;if(l<60)return`${l.toFixed(1)}s`;let u=Math.round(l),c=Math.floor(u/60),g=u%60;return`${c}m ${g}s`}function Cg(i){if(i.triggerKind==="one_off")return"one-time run";if(i.scheduleExpr)return i.timezone?`\`${i.scheduleExpr}\` (${i.timezone})`:`\`${i.scheduleExpr}\``;if(i.eventType)return`on event \`${i.eventType}\``;return}function nC(i,l,u,c){let g=[`runId: ${Vs(i.runId)}`,`specId: ${Vs(l.specId)}`,`scheduleId: ${Vs(l.externalId)}`,`title: ${Vs(l.title)}`,`triggerKind: ${Vs(i.triggerKind)}`,`status: ${Vs(i.status)}`,`definitionSource: ${Vs(u.kind)}`],b=[Ur("sourcePath",u.path),Ur("workspaceRoot",l.workspaceRoot),Ur("schedule",l.scheduleExpr),Ur("timezone",l.timezone),Ur("model",l.providerId||l.modelId?[l.providerId,l.modelId].filter(Boolean).join("/"):void 0),Ur("sessionId",i.sessionId),Ur("startedAt",i.startedAt),Ur("completedAt",i.completedAt),Ur("triggerEventId",i.triggerEventId),Ur("triggerEventType",c?.eventType),Ur("triggerEventSource",c?.source),Ur("triggerEventSubject",c?.subject)];for(let I of b)if(I)g.push(I);return`---
13
+ ${g.join(`
14
+ `)}
15
+ ---
16
+ `}function oC(i,l,u,c){let g=sC(l.title),b=i.status==="done"?"completed":i.status==="failed"?"FAILED":i.status,I=i.triggerKind==="manual"?"triggered manually":i.triggerKind==="event"?"triggered by an event":i.triggerKind==="one_off"?"one-time run":"triggered by its schedule",k=i.startedAt?` at ${i.startedAt}`:"",T=c.durationMs!==void 0?` in ${cm(c.durationMs)}`:"",E=[`# ${g} — ${b}`,"",`Run of schedule **${g}** (${I})${k}, ${b}${T}.`,"","## Job",""],A=[`- **Definition**: ${u.label}`,l.workspaceRoot?`- **Workspace**: ${l.workspaceRoot}`:"",Cg(l)?`- **Schedule**: ${Cg(l)}`:"",l.providerId||l.modelId?`- **Model**: ${[l.providerId,l.modelId].filter(Boolean).join("/")}`:"",i.sessionId?`- **Session**: ${i.sessionId}`:""].filter((N)=>N.length>0);E.push(...A,"");let C=l.prompt?.trim();if(C)E.push("### Prompt","",MI(C),"");return E.join(`
17
+ `)}function aC(i){let l=[];if(i.triggerEvent){let u=i.triggerEvent,c=[`- eventId: ${u.eventId}`,`- eventType: ${u.eventType}`,`- source: ${u.source}`,u.subject?`- subject: ${u.subject}`:"",`- occurredAt: ${u.occurredAt}`,u.dedupeKey?`- dedupeKey: ${u.dedupeKey}`:"",u.attributes?`- attributes: ${JSON.stringify(u.attributes)}`:""].filter((g)=>g.length>0);l.push(`## Trigger Event
18
+
19
+ ${c.join(`
20
+ `)}
21
+ `)}if(i.error){let u=i.errorContext?`${i.errorContext}
22
+
23
+ `:`The run failed with the following error:
24
+
25
+ `;l.push(`## Error
26
+
27
+ ${u}${MI(i.error)}
28
+ `)}if(i.finalText&&i.finalText.trim().length>0)l.push(`## Summary
29
+
30
+ ${i.finalText.trim()}
31
+ `);if(i.usage){let u=i.usage,c=[u.inputTokens!==void 0?`- Input tokens: ${u.inputTokens}`:"",u.outputTokens!==void 0?`- Output tokens: ${u.outputTokens}`:"",u.cacheReadTokens!==void 0?`- Cache read tokens: ${u.cacheReadTokens}`:"",u.cacheWriteTokens!==void 0?`- Cache write tokens: ${u.cacheWriteTokens}`:"",u.totalCost!==void 0?`- Total cost: $${u.totalCost.toFixed(2)}`:"",i.durationMs!==void 0?`- Duration: ${cm(i.durationMs)}`:""].filter((g)=>g.length>0);if(c.length>0)l.push(`## Usage
32
+
33
+ ${c.join(`
34
+ `)}
35
+ `)}if(i.toolCalls&&i.toolCalls.length>0){let u=i.toolCalls.map((c)=>{let g=[`- ${c.name}`];if(c.durationMs!==void 0)g.push(`(${cm(c.durationMs)})`);if(c.error)g.push(`error: ${c.error}`);return g.join(" ")});l.push(`## Tool Calls
36
+
37
+ ${u.join(`
38
+ `)}
39
+ `)}return l.join(`
40
+ `)}function lC(i){let l=Ja(i.specs);eC(l,{recursive:!0});let u=PI(l,`${i.run.runId}.md`),c=iC(i.spec,i.specs),g=`${nC(i.run,i.spec,c,i.data.triggerEvent)}
41
+ ${oC(i.run,i.spec,c,i.data)}
42
+ ${aC(i.data)}`;return tC(u,g,"utf8"),u}var dC=5000;class Mi extends Error{}async function Cc(i,l){let u=()=>{},c=new Promise((g,b)=>{if(u=()=>b(l.reason),l.aborted)u();else l.addEventListener("abort",u,{once:!0})});try{return await Promise.race([i,c])}finally{l.removeEventListener("abort",u)}}var uC=15000,cC=90,NI=["rules","skills","plugins"];function pC(i,l){return new Set(i.extensions??NI).has(l)}function mC(i,l){let u=i.tools===void 0?{"*":{autoApprove:!0}}:{"*":{enabled:!1,autoApprove:!0}};for(let c of i.tools??[])u[c]={enabled:!0,autoApprove:!0};if(u[Kt.ASK]={...u[Kt.ASK],enabled:!1,autoApprove:!0},l==="yolo")u[Kt.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return u}function hC(i){let l=i?.trim();if(!l)return;return["# Notes Directory",`Use ${l} for durable notes related to this automation.`,"Before starting, inspect relevant existing notes there when useful. During or after the run, write concise notes there when they would help future runs continue with context."].join(`
43
+ `)}class Al extends Error{constructor(i){super(i);this.name="TimeoutError"}}async function fC(i,l){if(l<=0)return i;let u,c=new Promise((g,b)=>{u=setTimeout(()=>{b(new Al("cron run timed out"))},l)});try{return await Promise.race([i,c])}finally{if(u)clearTimeout(u)}}var fd={scheduleId:"scheduleId",scheduleName:"scheduleName",scheduleExecutionId:"scheduleExecutionId",scheduleRunNumber:"scheduleRunNumber"};function gC(i,l,u){return{[fd.scheduleId]:i.externalId,[fd.scheduleName]:i.title,[fd.scheduleExecutionId]:l.runId,...u!==void 0?{[fd.scheduleRunNumber]:u}:{}}}class Mh{store;materializer;options;claimLeaseMs;timer;started=!1;ticking=!1;disposed=!1;stopping=!1;activeRuns=new Map;executions=new Set;constructor(i){this.store=i.store,this.materializer=i.materializer,this.options=i,this.claimLeaseMs=Math.max(5000,(i.claimLeaseSeconds??cC)*1000)}async start(){if(this.disposed)throw Error("CronRunner disposed");if(this.started)return;this.stopping=!1,this.started=!0;let i=Math.max(2000,this.options.pollIntervalMs??uC);this.timer=setInterval(()=>void this.tick(),i),this.tick()}async stop(){if(this.started=!1,this.stopping=!0,this.timer)clearInterval(this.timer),this.timer=void 0;for(let i of this.activeRuns.values())i.controller.abort(new Mi("runner stopped before completion"));await Promise.allSettled([...this.executions])}async dispose(){if(this.disposed)return;this.disposed=!0,await this.stop()}async tick(){if(this.ticking||this.stopping||this.disposed)return;this.ticking=!0;let i=[];try{let l=new Date(Date.now()+this.claimLeaseMs).toISOString();for(let[u,c]of this.activeRuns)if(!this.store.renewClaim(u,c.claimToken,l))c.controller.abort(new Mi("run lease lost"));this.materializer.materializeAll(),this.store.cancelSupersededScheduleRuns(),i=this.store.claimDueRuns({nowIso:x(),leaseMs:this.claimLeaseMs,maxConcurrency:this.options.globalMaxConcurrency??10}).map((u)=>{let c=this.executeClaim(u).catch((g)=>{this.options.logger?.error?.("cron.runner.execution.failed",{error:g})});return this.executions.add(c),c.then(()=>this.executions.delete(c)),c})}catch(l){let u=this.options.logger;if(u)if(u.error)u.error("cron.runner.tick.failed",{error:l});else u.log("cron.runner.tick.failed",{error:l})}finally{this.ticking=!1}await Promise.allSettled(i)}getActiveRuns(){return[...this.activeRuns.entries()].flatMap(([i,l])=>{let u=this.store.getRun(i);return u?[{...u,claimToken:l.claimToken,sessionId:l.sessionId}]:[]})}async executeClaim(i){let l=i.run,u=this.store.getSpec(l.specId);if(!u){this.store.completeRun(l.runId,{status:"failed",error:"spec not found",claimToken:i.claimToken});return}if(!u.enabled||u.removed){this.store.completeRun(l.runId,{status:"cancelled",error:"spec disabled or removed",claimToken:i.claimToken});return}if(this.stopping){this.store.requeueRun({runId:l.runId,claimToken:i.claimToken,releaseAttempt:!0});return}let c=new AbortController,{signal:g}=c;this.activeRuns.set(l.runId,{claimToken:i.claimToken,controller:c});let b=l.triggerEventId?this.store.getEventLog(l.triggerEventId):void 0,I,k=!1,T,E=Date.now(),A={triggerKind:l.triggerKind,attemptCount:l.attemptCount,startDelayMs:Math.max(0,E-new Date(l.scheduledFor??l.createdAt).getTime())};oa(this.options.telemetry,{...A,phase:"started"});let C=u.timeoutSeconds&&u.timeoutSeconds>0?E+u.timeoutSeconds*1000:void 0,N=()=>{if(C!==void 0&&Date.now()>=C)c.abort(new Al("cron run timed out"));g.throwIfAborted()},O;if(u.timeoutSeconds&&u.timeoutSeconds>0)O=setTimeout(()=>c.abort(new Al("cron run timed out")),u.timeoutSeconds*1000);let L="preparing the session request",D;try{T=this.startClaimLeaseHeartbeat(i);let U=await Cc(this.buildStartRequest(u),g);N(),L="starting the agent session";let F=this.options.runtimeHandlers.startSession(U,{sessionMetadata:gC(u,l,this.store.getRunOrdinal(l.runId))}).then(async(ee)=>{if(g.aborted)await this.cleanupSession(ee.sessionId,!0);else I=ee.sessionId.trim()});if(await Cc(F,g),N(),!I)throw Error("runtime returned empty sessionId");if(this.activeRuns.set(l.runId,{claimToken:i.claimToken,controller:c,sessionId:I}),!this.store.attachSessionIdToRun(l.runId,I,i.claimToken))c.abort(new Mi("run lease lost")),N();L="running the agent turn";let j={config:U,prompt:this.buildPrompt(u,b)},H=this.options.runtimeHandlers.sendSession(I,j),Q=await Cc(H,g);if(N(),D=Q.result,D.finishReason==="error")throw Error(D.text||"agent turn ended with an error");let z=Date.now();if(!this.store.completeRun(l.runId,{status:"done",sessionId:I,claimToken:i.claimToken})){oa(this.options.telemetry,{...A,phase:"finished",outcome:"superseded",durationMs:Math.max(0,z-E)});return}if(l.triggerKind==="one_off")this.store.updateSpecNextRunAt(u.specId,void 0);let W=this.writeReport({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...l,sessionId:I,status:"done"},spec:u,data:{finalText:D.text,usage:D.usage,toolCalls:D.toolCalls,durationMs:z-E,triggerEvent:b}});if(W)this.store.attachReportPathToRun(l.runId,W);oa(this.options.telemetry,{...A,phase:"finished",outcome:"success",durationMs:Math.max(0,z-E)}),this.publishScheduleExecutionEvent("schedule.execution.completed",u,l.runId),this.store.updateSpecLastRunAt(u.specId,x())}catch(U){let F=U instanceof Al;if(I&&g.aborted)await this.cleanupSession(I,!0),k=!0;let j=U instanceof Error?U.message:String(U),H=Date.now(),Q=F?`The run exceeded its ${u.timeoutSeconds}s timeout while ${L} and was cancelled:`:U instanceof Mi?`The run was cancelled while ${L}:`:`The run failed while ${L}:`,z=U instanceof Mi?"cancelled":"failed";if(!this.store.completeRun(l.runId,{status:z,sessionId:I,error:j,claimToken:i.claimToken})){oa(this.options.telemetry,{...A,phase:"finished",outcome:"superseded",durationMs:Math.max(0,H-E)});return}if(l.triggerKind==="one_off")this.store.updateSpecNextRunAt(u.specId,void 0);let W=this.writeReport({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...l,sessionId:I,status:z},spec:u,data:{error:j,errorContext:Q,usage:D?.usage,toolCalls:D?.toolCalls,durationMs:H-E,triggerEvent:b}});if(W)this.store.attachReportPathToRun(l.runId,W);oa(this.options.telemetry,{...A,phase:"finished",outcome:z==="cancelled"?"cancelled":F?"timeout":"failed",durationMs:Math.max(0,H-E)}),this.publishScheduleExecutionEvent("schedule.execution.failed",u,l.runId)}finally{if(O)clearTimeout(O);if(T?.(),I&&!k)await this.cleanupSession(I,g.aborted);this.activeRuns.delete(l.runId)}}writeReport(i){try{return lC(i)}catch(l){this.options.logger?.error?.("cron.runner.report.failed",{runId:i.run.runId,error:l});return}}async cleanupSession(i,l){for(let u of l?["abortSession","stopSession"]:["stopSession"])try{await fC(this.options.runtimeHandlers[u](i),dC)}catch(c){this.options.logger?.error?.("cron.runner.cleanup.failed",{sessionId:i,action:u,error:c})}}publishScheduleExecutionEvent(i,l,u){if(l.source!=="hub-schedule"||!this.options.eventPublisher)return;let c=this.store.getRun(u);if(!c)return;let g=c.status==="done"?"success":c.status==="cancelled"?"aborted":c.status==="running"?"running":c.status==="queued"?"pending":"failed";this.options.eventPublisher(i,{scheduleId:l.externalId,executionId:c.runId,sessionId:c.sessionId,triggeredAt:new Date(c.scheduledFor??c.createdAt).getTime(),startedAt:c.startedAt?new Date(c.startedAt).getTime():void 0,endedAt:c.completedAt?new Date(c.completedAt).getTime():void 0,status:g,errorMessage:c.error})}buildPrompt(i,l){let u=i.prompt??"";if(!l)return u;let c={eventId:l.eventId,eventType:l.eventType,source:l.source,subject:l.subject,occurredAt:l.occurredAt,workspaceRoot:l.workspaceRoot,dedupeKey:l.dedupeKey,attributes:l.attributes,payload:l.payload};return`${u}
44
+
45
+ Trigger event:
46
+ ${JSON.stringify(c,null,2)}`}startClaimLeaseHeartbeat(i){let l=Math.max(1000,Math.floor(this.claimLeaseMs/2)),u=setInterval(()=>{let c=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim(i.run.runId,i.claimToken,c))clearInterval(u),this.activeRuns.get(i.run.runId)?.controller.abort(new Mi("run lease lost"))},l);return()=>clearInterval(u)}async buildSystemPrompt(i,l,u,c){let g=hC(i.notesDirectory),b=bg(void 0,g),I=await QA(l),k=Ge({ide:"Cline Cron",workspaceRoot:l,workspaceName:dA(l),metadata:I,rules:i.systemPrompt?void 0:b,mode:u,providerId:c,overridePrompt:i.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return i.systemPrompt?bg(k,b)??k:k}async buildStartRequest(i){let l=(i.workspaceRoot??"").trim(),u=(i.providerId??"").trim(),c=(i.modelId??"").trim(),g=i.metadata?.__hubRuntimeOptions&&typeof i.metadata.__hubRuntimeOptions==="object"&&!Array.isArray(i.metadata.__hubRuntimeOptions)?i.metadata.__hubRuntimeOptions:void 0,b=typeof i.metadata?.__hubScheduleCwd==="string"&&i.metadata.__hubScheduleCwd.trim()?i.metadata.__hubScheduleCwd.trim():l;if(!l)throw Error("cron spec requires workspaceRoot");let I=i.mode==="plan"?"plan":i.mode==="act"?"act":"yolo";return{workspaceRoot:l,cwd:b,provider:u,model:c,mode:I,source:i.source?.trim()||"user",systemPrompt:await this.buildSystemPrompt(i,l,I,u),maxIterations:i.maxIterations,enableTools:g?.enableTools??!0,enableSpawn:g?.enableSpawn??!0,enableTeams:g?.enableTeams??!0,autoApproveTools:g?.autoApproveTools??!0,toolPolicies:mC(i,I),configExtensions:NI.filter((k)=>pC(i,k))}}}function aa(i,l,u,c){let g=new Set;function b(I){let k=I.toLowerCase();if(c){let E=c.indexOf(k);if(E!==-1)return E+l}let T=Number(I);if(!Number.isInteger(T)||T<l||T>u)throw Error(`Invalid cron value "${I}" for range [${l}-${u}]`);return T}for(let I of i.split(",")){if(I==="*"){for(let E=l;E<=u;E+=1)g.add(E);continue}let k=I.indexOf("/");if(k!==-1){let E=I.slice(0,k),A=Number(I.slice(k+1));if(!Number.isInteger(A)||A<1)throw Error(`Invalid step "${I.slice(k+1)}"`);let C=l,N=u;if(E!=="*"){let O=E.indexOf("-");if(O!==-1)C=b(E.slice(0,O)),N=b(E.slice(O+1));else C=b(E)}if(C>N)throw Error(`Invalid cron range "${E}"`);for(let O=C;O<=N;O+=A)g.add(O);continue}let T=I.indexOf("-");if(T!==-1){let E=b(I.slice(0,T)),A=b(I.slice(T+1));if(E>A)throw Error(`Invalid cron range "${I}"`);for(let C=E;C<=A;C+=1)g.add(C);continue}g.add(b(I))}return[...g].sort((I,k)=>I-k)}var yC=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],OI=["sun","mon","tue","wed","thu","fri","sat"];function la(i,l,u){let c=i[l];if(typeof c!=="string")throw Error(`Invalid cron pattern "${u}": missing field ${l+1}`);return c}function xc(i,l){let u=i[0];if(typeof u!=="number")throw Error(`Invalid cron pattern: no values parsed for ${l}`);return u}function Nh(i){let l=i.trim().split(/\s+/);if(l.length!==5)throw Error(`Invalid cron pattern "${i}": expected 5 fields, got ${l.length}`);return{minutes:aa(la(l,0,i),0,59),hours:aa(la(l,1,i),0,23),daysOfMonth:aa(la(l,2,i),1,31),months:aa(la(l,3,i),1,12,yC),daysOfWeek:aa(la(l,4,i),0,6,OI)}}function vC(i){Nh(i)}function wC(i,l,u=Date.now()){Cl(i,u,l)}var xg=new Map,bC=new Map(OI.map((i,l)=>[i,l]));function $I(i){let l=i?.trim();return l?l:void 0}function LI(i){let l=xg.get(i);if(l)return l;let u=new Intl.DateTimeFormat("en-US",{timeZone:i,calendar:"gregory",numberingSystem:"latn",year:"numeric",month:"2-digit",day:"2-digit",weekday:"short",hour:"2-digit",minute:"2-digit",hourCycle:"h23"});return xg.set(i,u),u}function DI(i){let l=$I(i);if(!l)return;LI(l).format(new Date)}function IC(i,l){let u=LI(l).formatToParts(new Date(i)),c=new Map(u.map((I)=>[I.type,I.value])),g=c.get("weekday")?.toLowerCase().slice(0,3)??"",b=bC.get(g);if(b===void 0)throw Error(`Unable to resolve weekday for timezone "${l}"`);return{month:Number(c.get("month")),dayOfMonth:Number(c.get("day")),dayOfWeek:b,hour:Number(c.get("hour")),minute:Number(c.get("minute"))}}function kC(i){let l=new Date(i);return{month:l.getMonth()+1,dayOfMonth:l.getDate(),dayOfWeek:l.getDay(),hour:l.getHours(),minute:l.getMinutes()}}function SC(i,l){return i.months.includes(l.month)&&i.daysOfMonth.includes(l.dayOfMonth)&&i.daysOfWeek.includes(l.dayOfWeek)&&i.hours.includes(l.hour)&&i.minutes.includes(l.minute)}function TC(i,l,u){let c=Nh(i),g=new Date(l);g.setSeconds(0,0);let b=g.getTime()+60000,I=new Date(l);I.setFullYear(I.getFullYear()+4);let k=I.getTime();while(b<=k){if(SC(c,IC(b,u)))return b;b+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${i}" in timezone "${u}"`)}function Cl(i,l,u){let c=$I(u);if(c)return DI(c),TC(i,l,c);let g=Nh(i),b=new Date(l);b.setSeconds(0,0),b=new Date(b.getTime()+60000);let I=new Date(l);I.setFullYear(I.getFullYear()+4);while(b<=I){let{month:k,dayOfMonth:T,dayOfWeek:E,hour:A,minute:C}=kC(b.getTime());if(!g.months.includes(k)){let N=g.months.find((L)=>L>k)??xc(g.months,"months"),O=N<=k?1:0;b=new Date(b.getFullYear()+O,N-1,1,0,0,0,0);continue}if(!g.daysOfMonth.includes(T)||!g.daysOfWeek.includes(E)){b=new Date(b.getFullYear(),b.getMonth(),T+1,0,0,0,0);continue}if(!g.hours.includes(A)){let N=g.hours.find((L)=>L>A)??xc(g.hours,"hours"),O=N<=A?1:0;b=new Date(b.getFullYear(),b.getMonth(),b.getDate()+O,N,0,0,0);continue}if(!g.minutes.includes(C)){let N=g.minutes.find((L)=>L>C)??xc(g.minutes,"minutes"),O=N<=C?1:0;b=new Date(b.getFullYear(),b.getMonth(),b.getDate(),b.getHours()+O,N,0,0);continue}return b.getTime()}throw Error(`No cron occurrence found within 4 years for pattern "${i}"`)}var _C=[`CREATE TABLE IF NOT EXISTS cron_specs (
47
+ spec_id TEXT PRIMARY KEY,
48
+ external_id TEXT NOT NULL,
49
+ source_path TEXT NOT NULL UNIQUE,
50
+ trigger_kind TEXT NOT NULL CHECK (trigger_kind IN ('one_off', 'schedule', 'event')),
51
+ source_mtime_ms INTEGER,
52
+ source_hash TEXT,
53
+ parse_status TEXT NOT NULL CHECK (parse_status IN ('valid', 'invalid')),
54
+ parse_error TEXT,
55
+ enabled INTEGER NOT NULL DEFAULT 1,
56
+ removed INTEGER NOT NULL DEFAULT 0,
57
+ title TEXT NOT NULL,
58
+ prompt TEXT,
59
+ workspace_root TEXT,
60
+ schedule_expr TEXT,
61
+ timezone TEXT,
62
+ event_type TEXT,
63
+ filters_json TEXT,
64
+ debounce_seconds INTEGER,
65
+ dedupe_window_seconds INTEGER,
66
+ cooldown_seconds INTEGER,
67
+ mode TEXT,
68
+ system_prompt TEXT,
69
+ provider_id TEXT,
70
+ model_id TEXT,
71
+ max_iterations INTEGER,
72
+ timeout_seconds INTEGER,
73
+ max_parallel INTEGER,
74
+ tools_json TEXT,
75
+ notes_directory TEXT,
76
+ extensions_json TEXT,
77
+ source TEXT,
78
+ tags_json TEXT,
79
+ metadata_json TEXT,
80
+ revision INTEGER NOT NULL DEFAULT 1,
81
+ last_materialized_run_id TEXT,
82
+ last_run_at TEXT,
83
+ next_run_at TEXT,
84
+ created_at TEXT NOT NULL,
85
+ updated_at TEXT NOT NULL
86
+ );`,`CREATE TABLE IF NOT EXISTS cron_runs (
87
+ run_id TEXT PRIMARY KEY,
88
+ spec_id TEXT NOT NULL REFERENCES cron_specs(spec_id) ON DELETE CASCADE,
89
+ spec_revision INTEGER NOT NULL,
90
+ trigger_kind TEXT NOT NULL CHECK (trigger_kind IN ('one_off', 'schedule', 'event', 'manual', 'retry')),
91
+ status TEXT NOT NULL CHECK (status IN ('queued', 'running', 'done', 'failed', 'cancelled')),
92
+ claim_token TEXT,
93
+ claim_started_at TEXT,
94
+ claim_until_at TEXT,
95
+ scheduled_for TEXT,
96
+ trigger_event_id TEXT,
97
+ started_at TEXT,
98
+ completed_at TEXT,
99
+ session_id TEXT,
100
+ report_path TEXT,
101
+ error TEXT,
102
+ attempt_count INTEGER NOT NULL DEFAULT 0,
103
+ created_at TEXT NOT NULL,
104
+ updated_at TEXT NOT NULL
105
+ );`,`CREATE TABLE IF NOT EXISTS cron_event_log (
106
+ event_id TEXT PRIMARY KEY,
107
+ event_type TEXT NOT NULL,
108
+ source TEXT NOT NULL,
109
+ subject TEXT,
110
+ occurred_at TEXT NOT NULL,
111
+ received_at TEXT NOT NULL,
112
+ workspace_root TEXT,
113
+ dedupe_key TEXT,
114
+ payload_json TEXT,
115
+ attributes_json TEXT,
116
+ processing_status TEXT NOT NULL DEFAULT 'received'
117
+ CHECK (processing_status IN ('received', 'unmatched', 'queued', 'suppressed', 'failed')),
118
+ matched_spec_count INTEGER NOT NULL DEFAULT 0,
119
+ queued_run_count INTEGER NOT NULL DEFAULT 0,
120
+ suppressed_count INTEGER NOT NULL DEFAULT 0,
121
+ error TEXT,
122
+ created_at TEXT NOT NULL,
123
+ updated_at TEXT NOT NULL
124
+ );`,"DROP INDEX IF EXISTS cron_runs_one_off_active_idx;",`CREATE UNIQUE INDEX IF NOT EXISTS cron_runs_one_off_active_idx
125
+ ON cron_runs(spec_id, spec_revision)
126
+ WHERE trigger_kind = 'one_off';`,`CREATE INDEX IF NOT EXISTS cron_runs_claimable_idx
127
+ ON cron_runs(status, scheduled_for, claim_until_at);`,`CREATE INDEX IF NOT EXISTS cron_runs_spec_idx
128
+ ON cron_runs(spec_id, created_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_runs_trigger_event_idx
129
+ ON cron_runs(trigger_event_id);`,`CREATE INDEX IF NOT EXISTS cron_runs_event_spec_status_idx
130
+ ON cron_runs(spec_id, trigger_kind, status, scheduled_for);`,`CREATE INDEX IF NOT EXISTS cron_event_log_type_idx
131
+ ON cron_event_log(event_type, received_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_event_log_received_idx
132
+ ON cron_event_log(received_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_event_log_dedupe_idx
133
+ ON cron_event_log(event_type, source, dedupe_key, received_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_specs_next_run_idx
134
+ ON cron_specs(trigger_kind, enabled, next_run_at);`,`CREATE INDEX IF NOT EXISTS cron_specs_event_match_idx
135
+ ON cron_specs(trigger_kind, event_type, enabled);`,`CREATE INDEX IF NOT EXISTS cron_specs_parse_status_idx
136
+ ON cron_specs(parse_status, updated_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_specs_source_path_idx
137
+ ON cron_specs(source_path);`];function EC(i){i.exec("PRAGMA journal_mode = WAL;"),i.exec("PRAGMA busy_timeout = 5000;"),i.exec("PRAGMA foreign_keys = ON;");for(let l of _C)i.exec(l)}function du(i){if(!i)return;try{let l=JSON.parse(i);if(l&&typeof l==="object"&&!Array.isArray(l))return l}catch{}return}function Rc(i,l={}){if(!i)return;try{let u=JSON.parse(i);if(!Array.isArray(u))return;let c=u.map((g)=>typeof g==="string"?g.trim():"").filter((g)=>g.length>0);if(l.preserveEmpty)return c;return c.length>0?c:void 0}catch{return}}function pi(i){if(typeof i==="number"&&Number.isFinite(i))return i;if(typeof i==="bigint")return Number(i);return}function Xs(i){return{specId:f(i.spec_id),externalId:f(i.external_id),sourcePath:f(i.source_path),triggerKind:f(i.trigger_kind),sourceMtimeMs:pi(i.source_mtime_ms),sourceHash:h(i.source_hash),parseStatus:f(i.parse_status)==="invalid"?"invalid":"valid",parseError:h(i.parse_error),enabled:Number(i.enabled??0)===1,removed:Number(i.removed??0)===1,title:f(i.title),prompt:h(i.prompt),workspaceRoot:h(i.workspace_root),scheduleExpr:h(i.schedule_expr),timezone:h(i.timezone),eventType:h(i.event_type),filters:du(h(i.filters_json)),debounceSeconds:pi(i.debounce_seconds),dedupeWindowSeconds:pi(i.dedupe_window_seconds),cooldownSeconds:pi(i.cooldown_seconds),mode:h(i.mode),systemPrompt:h(i.system_prompt),providerId:h(i.provider_id),modelId:h(i.model_id),maxIterations:pi(i.max_iterations),timeoutSeconds:pi(i.timeout_seconds),maxParallel:pi(i.max_parallel),tools:Rc(h(i.tools_json),{preserveEmpty:!0}),notesDirectory:h(i.notes_directory),extensions:Rc(h(i.extensions_json),{preserveEmpty:!0}),source:h(i.source),tags:Rc(h(i.tags_json)),metadata:du(h(i.metadata_json)),revision:Number(i.revision??1),lastMaterializedRunId:h(i.last_materialized_run_id),lastRunAt:h(i.last_run_at),nextRunAt:h(i.next_run_at),createdAt:f(i.created_at),updatedAt:f(i.updated_at)}}function gd(i){return{runId:f(i.run_id),specId:f(i.spec_id),specRevision:Number(i.spec_revision??1),triggerKind:f(i.trigger_kind),status:f(i.status),claimToken:h(i.claim_token),claimStartedAt:h(i.claim_started_at),claimUntilAt:h(i.claim_until_at),scheduledFor:h(i.scheduled_for),triggerEventId:h(i.trigger_event_id),startedAt:h(i.started_at),completedAt:h(i.completed_at),sessionId:h(i.session_id),reportPath:h(i.report_path),error:h(i.error),attemptCount:Number(i.attempt_count??0),createdAt:f(i.created_at),updatedAt:f(i.updated_at)}}function Rg(i){return{eventId:f(i.event_id),eventType:f(i.event_type),source:f(i.source),subject:h(i.subject),occurredAt:f(i.occurred_at),receivedAt:f(i.received_at),workspaceRoot:h(i.workspace_root),dedupeKey:h(i.dedupe_key),payload:du(h(i.payload_json)),attributes:du(h(i.attributes_json)),processingStatus:f(i.processing_status),matchedSpecCount:Number(i.matched_spec_count??0),queuedRunCount:Number(i.queued_run_count??0),suppressedCount:Number(i.suppressed_count??0),error:h(i.error),createdAt:f(i.created_at),updatedAt:f(i.updated_at)}}function Pg(i){return i?JSON.stringify(i):null}var AC=["triggerKind","prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function yd(i){if(i===void 0)return null;if(i&&typeof i==="object")return JSON.stringify(i);return i}function CC(i,l,u,c){for(let I of AC){let k=i[I],T=l[I];if(yd(k)!==yd(T))return!0}let g=i.triggerKind==="one_off"||l.triggerKind==="one_off",b=l.metadata;if(g&&yd(i.metadata?.[fe])!==yd(b?.[fe]))return!0;if(u===!1&&c===!0)return!0;return!1}function xC(i){return(i.split("/").pop()??i).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var UI="hub/schedules/";function RC(i){return`${UI}${i}.cron.md`}function PC(i){return i.source==="hub-schedule"&&i.sourcePath.startsWith(UI)&&i.sourceMtimeMs===void 0}function MC(i){let l={...i.metadata??{},...i.createdBy?{__hubScheduleCreatedBy:i.createdBy}:{},...i.cwd?{__hubScheduleCwd:i.cwd}:{},...i.runtimeOptions?{__hubRuntimeOptions:i.runtimeOptions}:{}};if(i.cronPattern.trim()!==pe)delete l[fe];return Object.keys(l).length>0?l:void 0}function pm(i){let l=i.cronPattern.trim()===pe,u={title:i.name.trim(),prompt:i.prompt,workspaceRoot:i.workspaceRoot.trim(),mode:i.mode??"yolo",systemPrompt:i.systemPrompt,modelSelection:i.modelSelection?JSON.parse(JSON.stringify(i.modelSelection)):void 0,maxIterations:typeof i.maxIterations==="number"?Math.floor(i.maxIterations):void 0,timeoutSeconds:typeof i.timeoutSeconds==="number"?Math.floor(i.timeoutSeconds):void 0,maxParallel:typeof i.maxParallel==="number"?Math.max(1,Math.floor(i.maxParallel)):1,source:"hub-schedule",tags:i.tags?.filter((c)=>c.trim().length>0),enabled:i.enabled!==!1,metadata:MC(i)};return l?{...u,triggerKind:"one_off"}:{...u,triggerKind:"schedule",schedule:i.cronPattern.trim(),timezone:i.timezone?.trim()||void 0}}function Mg(i){return JSON.stringify(pm(i))}function NC(i,l){let u=i.metadata?{...i.metadata}:{},c=l.createdBy===null?void 0:l.createdBy!==void 0?l.createdBy:typeof u.__hubScheduleCreatedBy==="string"?u.__hubScheduleCreatedBy:void 0,g=l.cwd!==void 0?l.cwd:typeof u.__hubScheduleCwd==="string"?u.__hubScheduleCwd:void 0,b=l.runtimeOptions!==void 0?l.runtimeOptions:u.__hubRuntimeOptions&&typeof u.__hubRuntimeOptions==="object"&&!Array.isArray(u.__hubRuntimeOptions)?u.__hubRuntimeOptions:void 0;delete u.__hubScheduleCreatedBy,delete u.__hubScheduleCwd,delete u.__hubRuntimeOptions;let I=l.cronPattern??(i.triggerKind==="one_off"?pe:i.scheduleExpr??""),k={...u,...l.metadata??{}};if(I.trim()!==pe)delete k[fe];return{name:l.name??i.title,cronPattern:I,timezone:l.timezone===null?void 0:l.timezone!==void 0?l.timezone:i.timezone,prompt:l.prompt??i.prompt??"",workspaceRoot:l.workspaceRoot??i.workspaceRoot??"",cwd:g,modelSelection:l.modelSelection!==void 0?l.modelSelection:i.providerId||i.modelId?{providerId:i.providerId??"",modelId:i.modelId??""}:void 0,enabled:l.enabled??i.enabled,mode:l.mode??(i.mode==="plan"?"plan":i.mode==="act"?"act":"yolo"),systemPrompt:l.systemPrompt===null?void 0:l.systemPrompt!==void 0?l.systemPrompt:i.systemPrompt,maxIterations:l.maxIterations===null?void 0:l.maxIterations!==void 0?l.maxIterations:i.maxIterations,timeoutSeconds:l.timeoutSeconds===null?void 0:l.timeoutSeconds!==void 0?l.timeoutSeconds:i.timeoutSeconds,maxParallel:l.maxParallel??i.maxParallel??1,createdBy:c,tags:l.tags??i.tags,runtimeOptions:b,metadata:Object.keys(k).length>0?k:void 0}}class Oh{db;constructor(i={}){let l=i.dbPath??Va();this.db=V(l),EC(this.db)}close(){this.db.close?.()}getSpecBySourcePath(i){let l=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get(i);return l?Xs(l):void 0}getSpec(i){let l=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get(i);return l?Xs(l):void 0}getSpecByExternalId(i){let l=this.db.prepare("SELECT * FROM cron_specs WHERE external_id = ? ORDER BY created_at ASC LIMIT 1").get(i);return l?Xs(l):void 0}listSpecs(i={}){let l=[],u=[];if(i.triggerKind)l.push("trigger_kind = ?"),u.push(i.triggerKind);if(typeof i.enabled==="boolean")l.push("enabled = ?"),u.push(i.enabled?1:0);if(i.parseStatus)l.push("parse_status = ?"),u.push(i.parseStatus);if(!i.includeRemoved)l.push("removed = 0");let c=l.length>0?`WHERE ${l.join(" AND ")}`:"",g=Math.max(1,Math.floor(i.limit??500));return this.db.prepare(`SELECT * FROM cron_specs ${c} ORDER BY created_at DESC LIMIT ?`).all(...u,g).map((b)=>Xs(b))}createHubSchedule(i){let l=`sched_${ua()}`,u=pm(i),c=this.upsertSpec({externalId:l,sourcePath:RC(l),triggerKind:u.triggerKind,sourceHash:Mg(i),parseStatus:"valid",spec:u});this.initializeHubScheduleNextRun(c.record.specId,i);let g=this.getSpec(c.record.specId);if(!g)throw Error("failed to create hub schedule");return g}getHubSchedule(i){let l=this.db.prepare(`SELECT * FROM cron_specs
138
+ WHERE external_id = ? AND source = 'hub-schedule' AND removed = 0
139
+ ORDER BY created_at ASC LIMIT 1`).get(i);return l?Xs(l):void 0}listHubSchedules(i={}){let l=["source = 'hub-schedule'","trigger_kind IN ('schedule', 'one_off')","removed = 0"],u=[];if(typeof i.enabled==="boolean")l.push("enabled = ?"),u.push(i.enabled?1:0);if(i.workspaceRoot?.trim())l.push("workspace_root = ?"),u.push(i.workspaceRoot.trim());if(i.tags&&i.tags.length>0)for(let g of i.tags)l.push("tags_json LIKE ?"),u.push(`%"${g.trim()}"%`);let c=Math.max(1,Math.floor(i.limit??200));return this.db.prepare(`SELECT * FROM cron_specs
140
+ WHERE ${l.join(" AND ")}
141
+ ORDER BY created_at DESC LIMIT ?`).all(...u,c).map((g)=>Xs(g))}updateHubSchedule(i,l){this.db.exec("BEGIN IMMEDIATE;");try{let u=this.getHubSchedule(i);if(!u){this.db.exec("COMMIT;");return}let c=NC(u,l),g=pm(c),b=this.upsertSpec({externalId:i,sourcePath:u.sourcePath,triggerKind:g.triggerKind,sourceHash:Mg(c),parseStatus:"valid",spec:g}),I=u.enabled!==b.record.enabled;if((u.triggerKind==="one_off"||b.record.triggerKind==="one_off")&&(b.revisionChanged||I))this.cancelQueuedOneOffRunsForSpec(b.record.specId);if(l.cronPattern!==void 0||l.timezone!==void 0||l.metadata?.[fe]!==void 0||l.enabled!==void 0)this.initializeHubScheduleNextRun(b.record.specId,c);let k=this.getSpec(b.record.specId);return this.db.exec("COMMIT;"),k}catch(u){throw this.db.exec("ROLLBACK;"),u}}initializeHubScheduleNextRun(i,l){if(l.enabled===!1){this.updateSpecNextRunAt(i,void 0);return}if(l.cronPattern.trim()===pe){let u=l.metadata?.[fe];if(typeof u!=="number"||!Number.isFinite(u))throw Error("runAt metadata is required for one-time schedules");this.updateSpecNextRunAt(i,new Date(u).toISOString());return}this.initializeScheduleNextRun(i)}deleteHubSchedule(i){let l=this.getHubSchedule(i);if(!l)return!1;return this.markSpecRemoved(l.specId),this.cancelQueuedRunsForSpec(l.specId),!0}enqueueHubScheduleRun(i,l="manual"){let u=this.getHubSchedule(i);if(!u||!u.enabled||u.removed||u.parseStatus!=="valid")return;if(u.triggerKind==="one_off"&&l==="manual")return this.consumeOneOffWithManualRun(u);return this.enqueueRun({specId:u.specId,specRevision:u.revision,triggerKind:l,scheduledFor:x()})}consumeOneOffWithManualRun(i){this.db.exec("BEGIN IMMEDIATE;");try{let l=this.getSpec(i.specId);if(!l||l.revision!==i.revision||l.triggerKind!=="one_off"||!l.enabled||l.removed||l.parseStatus!=="valid"){this.db.exec("COMMIT;");return}let u=x();this.db.prepare(`UPDATE cron_specs SET next_run_at = NULL, updated_at = ?
142
+ WHERE spec_id = ? AND revision = ?`).run(u,l.specId,l.revision);let c=this.db.prepare(`SELECT * FROM cron_runs
143
+ WHERE spec_id = ? AND spec_revision = ?
144
+ AND trigger_kind IN ('one_off', 'manual')
145
+ AND status != 'cancelled'
146
+ ORDER BY CASE trigger_kind WHEN 'manual' THEN 0 ELSE 1 END,
147
+ created_at ASC
148
+ LIMIT 1`).get(l.specId,l.revision),g=c?gd(c):void 0;if(g&&g.status!=="queued")return this.db.exec("COMMIT;"),g;if(g?.triggerKind==="manual")return this.db.exec("COMMIT;"),g;this.db.prepare(`UPDATE cron_runs SET status = 'cancelled', updated_at = ?
149
+ WHERE spec_id = ? AND spec_revision = ?
150
+ AND trigger_kind = 'one_off' AND status = 'queued'`).run(u,l.specId,l.revision);let b=this.enqueueRun({specId:l.specId,specRevision:l.revision,triggerKind:"manual",scheduledFor:u});return this.db.exec("COMMIT;"),b}catch(l){throw this.db.exec("ROLLBACK;"),l}}listEventSpecsForType(i){return this.db.prepare(`SELECT * FROM cron_specs
151
+ WHERE trigger_kind = 'event'
152
+ AND event_type = ?
153
+ AND enabled = 1
154
+ AND removed = 0
155
+ AND parse_status = 'valid'
156
+ ORDER BY created_at ASC`).all(i).map((l)=>Xs(l))}upsertSpec(i){let l=x(),u=this.getSpecBySourcePath(i.sourcePath),c=i.spec,g={triggerKind:c?.triggerKind??i.triggerKind,title:c?.title??u?.title??xC(i.sourcePath),prompt:c?.prompt,workspaceRoot:c?.workspaceRoot,scheduleExpr:c?.triggerKind==="schedule"?c.schedule:void 0,timezone:c?.triggerKind==="schedule"?c.timezone:void 0,eventType:c?.triggerKind==="event"?c.event:void 0,filters:c?.triggerKind==="event"?c.filters:void 0,debounceSeconds:c?.triggerKind==="event"?c.debounceSeconds:void 0,dedupeWindowSeconds:c?.triggerKind==="event"?c.dedupeWindowSeconds:void 0,cooldownSeconds:c?.triggerKind==="event"?c.cooldownSeconds:void 0,mode:c?.mode,systemPrompt:c?.systemPrompt,providerId:c?.modelSelection?.providerId,modelId:c?.modelSelection?.modelId,maxIterations:c?.maxIterations,timeoutSeconds:c?.timeoutSeconds,maxParallel:c&&"maxParallel"in c?c.maxParallel:void 0,tools:c?.tools,notesDirectory:c?.notesDirectory,extensions:c?.extensions,source:c?.source,metadata:c?.metadata},b=i.parseStatus==="valid"&&(c?.enabled??!0);if(!u){let E=`cspec_${ua()}`;this.insertSpecRow(E,i,g,b,l);let A=this.getSpec(E);if(!A)throw Error("failed to insert cron_spec row");return{record:A,created:!0,revisionChanged:!0}}let I=u.sourceHash!==i.sourceHash&&CC(u,g,u.enabled,b),k=I?u.revision+1:u.revision;this.updateSpecRow(u.specId,i,g,b,k,l);let T=this.getSpec(u.specId);if(!T)throw Error("failed to reload cron_spec after update");return{record:T,created:!1,revisionChanged:I}}insertSpecRow(i,l,u,c,g){let b=l.spec;this.db.prepare(`INSERT INTO cron_specs (
157
+ spec_id, external_id, source_path, trigger_kind,
158
+ source_mtime_ms, source_hash, parse_status, parse_error,
159
+ enabled, removed, title, prompt, workspace_root,
160
+ schedule_expr, timezone, event_type, filters_json,
161
+ debounce_seconds, dedupe_window_seconds, cooldown_seconds,
162
+ mode, system_prompt, provider_id, model_id,
163
+ max_iterations, timeout_seconds, max_parallel,
164
+ tools_json, notes_directory, extensions_json, source,
165
+ tags_json, metadata_json, revision,
166
+ created_at, updated_at
167
+ ) VALUES (${Array.from({length:36},()=>"?").join(",")})`).run(i,l.externalId,l.sourcePath,l.triggerKind,l.sourceMtimeMs??null,l.sourceHash,l.parseStatus,l.parseError??null,c?1:0,0,u.title??"",u.prompt??null,u.workspaceRoot??null,u.scheduleExpr??null,u.timezone??null,u.eventType??null,u.filters?JSON.stringify(u.filters):null,u.debounceSeconds??null,u.dedupeWindowSeconds??null,u.cooldownSeconds??null,u.mode??null,u.systemPrompt??null,u.providerId??null,u.modelId??null,u.maxIterations??null,u.timeoutSeconds??null,u.maxParallel??null,u.tools?JSON.stringify(u.tools):null,u.notesDirectory??null,u.extensions?JSON.stringify(u.extensions):null,u.source??null,b?.tags?JSON.stringify(b.tags):null,b?.metadata?JSON.stringify(b.metadata):null,1,g,g)}updateSpecRow(i,l,u,c,g,b){let I=l.spec;this.db.prepare(`UPDATE cron_specs SET
168
+ external_id = ?, trigger_kind = ?,
169
+ source_mtime_ms = ?, source_hash = ?, parse_status = ?, parse_error = ?,
170
+ enabled = ?, removed = 0, title = ?, prompt = ?,
171
+ workspace_root = ?, schedule_expr = ?, timezone = ?,
172
+ event_type = ?, filters_json = ?,
173
+ debounce_seconds = ?, dedupe_window_seconds = ?, cooldown_seconds = ?,
174
+ mode = ?, system_prompt = ?, provider_id = ?, model_id = ?,
175
+ max_iterations = ?, timeout_seconds = ?, max_parallel = ?,
176
+ tools_json = ?, notes_directory = ?, extensions_json = ?, source = ?,
177
+ tags_json = ?, metadata_json = ?,
178
+ revision = ?, updated_at = ?
179
+ WHERE spec_id = ?`).run(l.externalId,l.triggerKind,l.sourceMtimeMs??null,l.sourceHash,l.parseStatus,l.parseError??null,c?1:0,u.title??"",u.prompt??null,u.workspaceRoot??null,u.scheduleExpr??null,u.timezone??null,u.eventType??null,u.filters?JSON.stringify(u.filters):null,u.debounceSeconds??null,u.dedupeWindowSeconds??null,u.cooldownSeconds??null,u.mode??null,u.systemPrompt??null,u.providerId??null,u.modelId??null,u.maxIterations??null,u.timeoutSeconds??null,u.maxParallel??null,u.tools?JSON.stringify(u.tools):null,u.notesDirectory??null,u.extensions?JSON.stringify(u.extensions):null,u.source??null,I?.tags?JSON.stringify(I.tags):null,I?.metadata?JSON.stringify(I.metadata):null,g,b,i)}markSpecRemoved(i){this.db.prepare("UPDATE cron_specs SET removed = 1, enabled = 0, updated_at = ? WHERE spec_id = ?").run(x(),i)}updateSpecNextRunAt(i,l){this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(l??null,x(),i)}updateSpecLastRunAt(i,l){this.db.prepare("UPDATE cron_specs SET last_run_at = ?, updated_at = ? WHERE spec_id = ?").run(l,x(),i)}updateLastMaterializedRunId(i,l){this.db.prepare("UPDATE cron_specs SET last_materialized_run_id = ?, updated_at = ? WHERE spec_id = ?").run(l,x(),i)}initializeScheduleNextRun(i){let l=this.getSpec(i);if(!l||l.triggerKind!=="schedule"||!l.enabled||!l.scheduleExpr){this.updateSpecNextRunAt(i,void 0);return}let u=new Date(Cl(l.scheduleExpr,Date.now(),l.timezone)).toISOString();this.updateSpecNextRunAt(i,u)}materializeDueScheduleRun(i){let l=i.nowMs,u=new Date(l).toISOString();this.db.exec("BEGIN IMMEDIATE;");try{let c=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get(i.specId);if(!c)return this.db.exec("COMMIT;"),{queued:!1};let g=Xs(c);if(g.triggerKind!=="schedule"||!g.enabled||g.removed||g.parseStatus!=="valid"||!g.scheduleExpr)return this.db.exec("COMMIT;"),{queued:!1};let b=g.nextRunAt;if(!b){let T=new Date(Cl(g.scheduleExpr,l,g.timezone)).toISOString();return this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(T,u,g.specId),this.db.exec("COMMIT;"),{queued:!1,nextRunAt:T}}if(new Date(b).getTime()>l)return this.db.exec("COMMIT;"),{queued:!1,nextRunAt:b};let I=`crun_${ua()}`,k;try{k=new Date(Cl(g.scheduleExpr,l,g.timezone)).toISOString()}catch{k=void 0}return this.db.prepare(`INSERT INTO cron_runs (
180
+ run_id, spec_id, spec_revision, trigger_kind, status,
181
+ scheduled_for, trigger_event_id, attempt_count,
182
+ created_at, updated_at
183
+ ) VALUES (?,?,?,?,?, ?,?,?, ?,?)`).run(I,g.specId,g.revision,"schedule","queued",b,null,0,u,u),this.db.prepare(`UPDATE cron_specs SET
184
+ last_materialized_run_id = ?,
185
+ last_run_at = ?,
186
+ next_run_at = ?,
187
+ updated_at = ?
188
+ WHERE spec_id = ?`).run(I,u,k??null,u,g.specId),this.db.exec("COMMIT;"),{queued:!0,run:this.getRun(I),nextRunAt:k}}catch(c){throw this.db.exec("ROLLBACK;"),c}}getRun(i){let l=this.db.prepare("SELECT * FROM cron_runs WHERE run_id = ?").get(i);return l?gd(l):void 0}getRunOrdinal(i){let l=this.db.prepare(`SELECT COUNT(*) AS count
189
+ FROM cron_runs r
190
+ INNER JOIN cron_runs target ON target.run_id = ?
191
+ WHERE r.spec_id = target.spec_id
192
+ AND (
193
+ r.created_at < target.created_at
194
+ OR (r.created_at = target.created_at AND r.rowid <= target.rowid)
195
+ )`).get(i),u=Number(l?.count??0);return u>0?u:void 0}eventTransaction(i){this.db.exec("BEGIN IMMEDIATE;");try{let l=i();return this.db.exec("COMMIT;"),l}catch(l){throw this.db.exec("ROLLBACK;"),l}}insertEventLog(i,l={}){let u=x(),c=l.receivedAtIso??u,g=i.eventId.trim();if(!g)throw Error("automation event requires eventId");let b=i.eventType.trim();if(!b)throw Error("automation event requires eventType");let I=i.source.trim();if(!I)throw Error("automation event requires source");let k=i.occurredAt.trim()||c,T=this.db.prepare(`INSERT OR IGNORE INTO cron_event_log (
196
+ event_id, event_type, source, subject,
197
+ occurred_at, received_at, workspace_root, dedupe_key,
198
+ payload_json, attributes_json, processing_status,
199
+ matched_spec_count, queued_run_count, suppressed_count,
200
+ error, created_at, updated_at
201
+ ) VALUES (?,?,?,?, ?,?,?,?, ?,?,?, ?,?,?, ?,?,?)`).run(g,b,I,i.subject?.trim()||null,k,c,i.workspaceRoot?.trim()||null,i.dedupeKey?.trim()||null,Pg(i.payload),Pg(i.attributes),"received",0,0,0,null,u,u).changes??0,E=this.getEventLog(g);if(!E)throw Error("failed to insert cron_event_log row");return{record:E,created:T===1}}getEventLog(i){let l=this.db.prepare("SELECT * FROM cron_event_log WHERE event_id = ?").get(i);return l?Rg(l):void 0}listEventLogs(i={}){let l=[],u=[];if(i.eventType)l.push("event_type = ?"),u.push(i.eventType);if(i.source)l.push("source = ?"),u.push(i.source);if(i.processingStatus)l.push("processing_status = ?"),u.push(i.processingStatus);let c=l.length>0?`WHERE ${l.join(" AND ")}`:"",g=Math.max(1,Math.floor(i.limit??200));return this.db.prepare(`SELECT * FROM cron_event_log ${c}
202
+ ORDER BY received_at DESC, created_at DESC
203
+ LIMIT ?`).all(...u,g).map((b)=>Rg(b))}updateEventLogProcessing(i,l){return(this.db.prepare(`UPDATE cron_event_log SET
204
+ processing_status = ?,
205
+ matched_spec_count = COALESCE(?, matched_spec_count),
206
+ queued_run_count = COALESCE(?, queued_run_count),
207
+ suppressed_count = COALESCE(?, suppressed_count),
208
+ error = ?,
209
+ updated_at = ?
210
+ WHERE event_id = ?`).run(l.status,l.matchedSpecCount??null,l.queuedRunCount??null,l.suppressedCount??null,l.error??null,x(),i).changes??0)===1}listRuns(i={}){let l=[],u=[];if(i.specId)l.push("spec_id = ?"),u.push(i.specId);if(i.status){let b=Array.isArray(i.status)?i.status:[i.status];if(b.length>0){let I=b.map(()=>"?").join(",");l.push(`status IN (${I})`);for(let k of b)u.push(k)}}let c=l.length>0?`WHERE ${l.join(" AND ")}`:"",g=Math.max(1,Math.floor(i.limit??200));return this.db.prepare(`SELECT * FROM cron_runs ${c} ORDER BY created_at DESC LIMIT ?`).all(...u,g).map((b)=>gd(b))}hasRecentEventRunForDedupe(i){return!!this.db.prepare(`SELECT r.run_id FROM cron_runs r
211
+ INNER JOIN cron_event_log e ON e.event_id = r.trigger_event_id
212
+ WHERE r.spec_id = ?
213
+ AND r.trigger_kind = 'event'
214
+ AND e.dedupe_key = ?
215
+ AND e.received_at >= ?
216
+ LIMIT 1`).get(i.specId,i.dedupeKey,i.sinceIso)}hasRecentEventRunForSpec(i){return!!this.db.prepare(`SELECT r.run_id FROM cron_runs r
217
+ INNER JOIN cron_event_log e ON e.event_id = r.trigger_event_id
218
+ WHERE r.spec_id = ?
219
+ AND r.trigger_kind = 'event'
220
+ AND e.received_at >= ?
221
+ LIMIT 1`).get(i.specId,i.sinceIso)}findQueuedEventRunForDedupe(i){let l=this.db.prepare(`SELECT r.* FROM cron_runs r
222
+ INNER JOIN cron_event_log e ON e.event_id = r.trigger_event_id
223
+ WHERE r.spec_id = ?
224
+ AND r.trigger_kind = 'event'
225
+ AND r.status = 'queued'
226
+ AND e.dedupe_key = ?
227
+ ORDER BY COALESCE(r.scheduled_for, r.created_at) DESC
228
+ LIMIT 1`).get(i.specId,i.dedupeKey);return l?gd(l):void 0}updateQueuedEventRunForDebounce(i){let l=x();if((this.db.prepare(`UPDATE cron_runs SET
229
+ trigger_event_id = ?,
230
+ scheduled_for = ?,
231
+ updated_at = ?
232
+ WHERE run_id = ?
233
+ AND trigger_kind = 'event'
234
+ AND status = 'queued'`).run(i.triggerEventId,i.scheduledFor,l,i.runId).changes??0)!==1)return;return this.getRun(i.runId)}hasConsumedOneOffRevision(i,l){return!!this.db.prepare(`SELECT run_id FROM cron_runs
235
+ WHERE spec_id = ? AND spec_revision = ?
236
+ AND trigger_kind IN ('one_off', 'manual')
237
+ LIMIT 1`).get(i,l)}enqueueRun(i){let l=`crun_${ua()}`,u=x();this.db.prepare(`INSERT INTO cron_runs (
238
+ run_id, spec_id, spec_revision, trigger_kind, status,
239
+ scheduled_for, trigger_event_id, attempt_count,
240
+ created_at, updated_at
241
+ ) VALUES (?,?,?,?,?, ?,?,?, ?,?)`).run(l,i.specId,i.specRevision,i.triggerKind,"queued",i.scheduledFor??null,i.triggerEventId??null,0,u,u),this.updateLastMaterializedRunId(i.specId,l);let c=this.getRun(l);if(!c)throw Error("failed to insert cron_run row");return c}cancelQueuedRunsForSpec(i){return this.db.prepare(`UPDATE cron_runs SET status = 'cancelled', updated_at = ?
242
+ WHERE spec_id = ? AND status = 'queued'`).run(x(),i).changes??0}cancelSupersededScheduleRuns(){let i=x();return this.db.prepare(`UPDATE cron_runs SET status = 'cancelled', error = ?, completed_at = ?, updated_at = ?
243
+ WHERE status = 'queued' AND trigger_kind = 'schedule'
244
+ AND scheduled_for IS NOT NULL
245
+ AND EXISTS (
246
+ SELECT 1 FROM cron_runs newer
247
+ WHERE newer.spec_id = cron_runs.spec_id
248
+ AND newer.status = 'queued'
249
+ AND newer.trigger_kind = 'schedule'
250
+ AND newer.scheduled_for > cron_runs.scheduled_for
251
+ )`).run("Skipped: superseded by a newer scheduled run",i,i).changes??0}cancelQueuedOneOffRunsForSpec(i){return this.db.prepare(`UPDATE cron_runs SET status = 'cancelled', updated_at = ?
252
+ WHERE spec_id = ? AND trigger_kind = 'one_off'
253
+ AND status = 'queued'`).run(x(),i).changes??0}claimDueRuns(i){let l=i.nowIso,u=Math.max(1000,Math.floor(i.leaseMs)),c=new Date(new Date(l).getTime()+u).toISOString(),g=Math.max(1,Math.floor(i.limit??25)),b=[];this.db.exec("BEGIN IMMEDIATE;");try{let I=this.db.prepare(`
254
+ SELECT * FROM cron_runs
255
+ WHERE (
256
+ status = 'queued'
257
+ OR (status = 'running' AND claim_until_at <= ? AND completed_at IS NULL)
258
+ )
259
+ AND (scheduled_for IS NULL OR scheduled_for <= ?)
260
+ AND (
261
+ SELECT COUNT(*) FROM cron_runs active
262
+ WHERE active.status = 'running' AND active.claim_until_at > ?
263
+ ) < ?
264
+ AND (
265
+ SELECT COUNT(*) FROM cron_runs active
266
+ WHERE active.spec_id = cron_runs.spec_id
267
+ AND active.status = 'running' AND active.claim_until_at > ?
268
+ ) < COALESCE((
269
+ SELECT MAX(1, max_parallel) FROM cron_specs WHERE spec_id = cron_runs.spec_id
270
+ ), 1)
271
+ ORDER BY COALESCE(scheduled_for, created_at) ASC, rowid ASC
272
+ LIMIT 1
273
+ `),k=Math.max(1,Math.floor(i.maxConcurrency??10));while(b.length<g){let T=I.get(l,l,l,k,l);if(!T)break;let E=f(T.run_id);if(!E)continue;let A=`cclaim_${ua()}`;if((this.db.prepare(`UPDATE cron_runs SET
274
+ status = 'running',
275
+ claim_token = ?,
276
+ claim_started_at = ?,
277
+ claim_until_at = ?,
278
+ started_at = ?,
279
+ completed_at = NULL,
280
+ session_id = NULL,
281
+ report_path = NULL,
282
+ error = NULL,
283
+ attempt_count = attempt_count + 1,
284
+ updated_at = ?
285
+ WHERE run_id = ?
286
+ AND (
287
+ status = 'queued'
288
+ OR (
289
+ status = 'running'
290
+ AND claim_until_at IS NOT NULL
291
+ AND claim_until_at <= ?
292
+ AND completed_at IS NULL
293
+ )
294
+ )`).run(A,l,c,l,l,E,l).changes??0)!==1)continue;let C=this.getRun(E);if(!C)continue;b.push({run:C,claimToken:A,claimUntilAt:c})}this.db.exec("COMMIT;")}catch(I){throw this.db.exec("ROLLBACK;"),I}return b}renewClaim(i,l,u){return(this.db.prepare(`UPDATE cron_runs SET claim_until_at = ?, updated_at = ?
295
+ WHERE run_id = ? AND claim_token = ?`).run(u,x(),i,l).changes??0)===1}completeRun(i,l){let u=l.completedAtIso??x(),c=l.claimToken?"WHERE run_id = ? AND claim_token = ?":"WHERE run_id = ?";return(this.db.prepare(`UPDATE cron_runs SET
296
+ status = ?,
297
+ session_id = COALESCE(?, session_id),
298
+ report_path = COALESCE(?, report_path),
299
+ error = ?,
300
+ completed_at = ?,
301
+ claim_started_at = NULL,
302
+ claim_token = NULL,
303
+ claim_until_at = NULL,
304
+ updated_at = ?
305
+ ${c}`).run(l.status,l.sessionId??null,l.reportPath??null,l.error??null,u,u,i,...l.claimToken?[l.claimToken]:[]).changes??0)>0}requeueRun(i){let l=x();return(this.db.prepare(`UPDATE cron_runs SET
306
+ status = 'queued',
307
+ attempt_count = MAX(0, attempt_count - ?),
308
+ claim_started_at = NULL,
309
+ claim_token = NULL,
310
+ claim_until_at = NULL,
311
+ started_at = NULL,
312
+ completed_at = NULL,
313
+ session_id = NULL,
314
+ report_path = NULL,
315
+ error = ?,
316
+ scheduled_for = COALESCE(?, scheduled_for),
317
+ updated_at = ?
318
+ WHERE run_id = ? AND claim_token = ?`).run(i.releaseAttempt?1:0,i.error??null,i.scheduledFor??null,l,i.runId,i.claimToken).changes??0)>0}attachSessionIdToRun(i,l,u){return(this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ? AND claim_token = ? AND status = 'running'").run(l,x(),i,u).changes??0)===1}attachReportPathToRun(i,l){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(l,x(),i)}}function uu(i){return i?new Date(i).getTime():void 0}function OC(i){let l=i.metadata?{...i.metadata}:void 0;if(l)delete l.__hubScheduleCreatedBy,delete l.__hubScheduleCwd,delete l.__hubRuntimeOptions;return l}function ca(i){let l=i.metadata;return{scheduleId:i.externalId,name:i.title,cronPattern:i.triggerKind==="one_off"?pe:i.scheduleExpr??"",timezone:i.triggerKind==="schedule"?i.timezone:void 0,prompt:i.prompt??"",workspaceRoot:i.workspaceRoot??"",cwd:typeof l?.__hubScheduleCwd==="string"?l.__hubScheduleCwd:void 0,modelSelection:i.providerId||i.modelId?{providerId:i.providerId??"",modelId:i.modelId??""}:void 0,enabled:i.enabled&&!i.removed&&i.parseStatus==="valid",mode:i.mode==="plan"?"plan":i.mode==="act"?"act":"yolo",systemPrompt:i.systemPrompt,maxIterations:i.maxIterations,timeoutSeconds:i.timeoutSeconds,maxParallel:i.maxParallel??1,createdAt:new Date(i.createdAt).getTime(),updatedAt:new Date(i.updatedAt).getTime(),nextRunAt:uu(i.nextRunAt),lastRunAt:uu(i.lastRunAt),createdBy:typeof l?.__hubScheduleCreatedBy==="string"?l.__hubScheduleCreatedBy:void 0,tags:i.tags,runtimeOptions:l?.__hubRuntimeOptions&&typeof l.__hubRuntimeOptions==="object"&&!Array.isArray(l.__hubRuntimeOptions)?l.__hubRuntimeOptions:void 0,metadata:OC(i)}}function $C(i){switch(i){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function Pc(i,l){return{executionId:i.runId,scheduleId:l,sessionId:i.sessionId,triggeredAt:new Date(i.scheduledFor??i.createdAt).getTime(),startedAt:uu(i.startedAt),endedAt:uu(i.completedAt),status:$C(i.status),errorMessage:i.error}}class FI{store;materializer;runner;started=!1;disposed=!1;constructor(i){this.store=new Oh({dbPath:i.dbPath}),this.materializer=new Th({store:this.store}),this.runner=new Mh({store:this.store,materializer:this.materializer,runtimeHandlers:i.runtimeHandlers,eventPublisher:i.eventPublisher,workspaceRoot:"",specs:i.specs,logger:i.logger,telemetry:i.telemetry,pollIntervalMs:i.pollIntervalMs,claimLeaseSeconds:i.claimLeaseSeconds,globalMaxConcurrency:i.globalMaxConcurrency})}async start(){if(this.disposed)throw Error("HubScheduleService has been disposed");if(this.started)return;this.started=!0,await this.runner.start()}async stop(){await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,await this.runner.dispose(),this.store.close()}createSchedule(i){let l=i.cronPattern===pe?i.timezone:i.timezone?.trim()||Intl.DateTimeFormat().resolvedOptions().timeZone;if(this.validateScheduleTiming(i.cronPattern,l,i.metadata,!0),!i.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return ca(this.store.createHubSchedule({...i,timezone:l}))}getSchedule(i){let l=this.store.getHubSchedule(i);return l?ca(l):void 0}listSchedules(i={}){return this.store.listHubSchedules(i).map((l)=>ca(l))}updateSchedule(i,l){let u=this.store.getHubSchedule(i);if(!u)return;let c=l.workspaceRoot!==void 0?l.workspaceRoot.trim():u.workspaceRoot,g=l.enabled??u.enabled,b=ca(u),I=l.cronPattern??b.cronPattern;if(I.trim()===pe&&typeof l.timezone==="string"&&l.timezone.trim())throw Error("timezone is only supported for recurring schedules");if(this.validateScheduleTiming(I,I.trim()===pe?void 0:l.timezone===null?void 0:l.timezone??b.timezone,l.metadata??b.metadata,g),g&&!c)throw Error("workspaceRoot is required for enabled schedules");let k=this.store.updateHubSchedule(i,{...l,scheduleId:i});return k?ca(k):void 0}validateScheduleTiming(i,l,u,c){if(i.trim()!==pe){vC(i),DI(l);return}if(l?.trim())throw Error("timezone is only supported for recurring schedules");let g=u?.[fe];if(typeof g!=="number"||!Number.isFinite(g)||c&&g<=Date.now())throw Error("runAt must be a future timestamp")}deleteSchedule(i){return this.store.deleteHubSchedule(i)}pauseSchedule(i){return this.updateSchedule(i,{scheduleId:i,enabled:!1})}resumeSchedule(i){return this.updateSchedule(i,{scheduleId:i,enabled:!0})}async triggerScheduleNow(i){let l=this.store.enqueueHubScheduleRun(i,"manual");if(!l)return;await this.runner.tick();let u=this.store.getRun(l.runId)??l;return Pc(u,i)}triggerScheduleNowDetached(i){let l=this.store.enqueueHubScheduleRun(i,"manual");if(!l)return;return this.runner.tick().catch(()=>{return}),Pc(l,i)}listScheduleExecutions(i){let l=i.scheduleId?this.store.getHubSchedule(i.scheduleId):void 0,u={specId:l?.specId,limit:i.limit};return this.store.listRuns(u).map((c)=>{let g=l??this.store.getSpec(c.specId);if(!g||g.source!=="hub-schedule")return;return Pc(c,g.externalId)}).filter((c)=>{if(!c)return!1;return!i.status||c.status===i.status})}getScheduleStats(i){let l=this.listScheduleExecutions({scheduleId:i,limit:1e4});if(l.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let u=0,c=0,g=0,b;for(let I of l){if(I.status==="success"||I.status==="completed")u+=1;if(!b&&I.status!=="success"&&I.status!=="completed")b=I;if(I.startedAt&&I.endedAt)g+=I.endedAt-I.startedAt,c+=1}return{totalRuns:l.length,successRate:u/l.length,avgDurationSeconds:c>0?g/c/1000:0,lastFailure:b}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap((i)=>{let l=this.store.getSpec(i.specId);if(!l||l.source!=="hub-schedule"||!i.sessionId)return[];return[{executionId:i.runId,scheduleId:l.externalId,sessionId:i.sessionId,startedAt:i.startedAt??new Date().toISOString(),timeoutAt:l.timeoutSeconds&&i.startedAt?new Date(new Date(i.startedAt).getTime()+l.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns(i=20){let l={triggerKind:"schedule",enabled:!0,limit:i};return this.store.listSpecs(l).flatMap((u)=>u.source==="hub-schedule"&&u.nextRunAt?[{spec:u,nextRunAt:u.nextRunAt}]:[]).sort((u,c)=>String(u.nextRunAt).localeCompare(String(c.nextRunAt))).slice(0,i).map(({spec:u,nextRunAt:c})=>({scheduleId:u.externalId,name:u.title,nextRunAt:c}))}}var UC=s(["create","update","list","get","pause","resume","delete","run_now"]),FC=t({provider_id:e().min(1),model_id:e().min(1).optional()}),Qu=t({operation:UC,schedule_id:e().min(1).optional(),schedule_type:s(["once","recurring"]).optional(),name:e().min(1).optional(),prompt:e().min(1).optional(),run_at:e().datetime({offset:!0}).optional(),cron_pattern:e().min(1).optional(),timezone:e().min(1).nullable().optional().describe("IANA timezone for recurring schedules. Omit unless the user explicitly requests a timezone; new schedules default to the local timezone. Updates preserve the existing timezone when omitted."),enabled:r().optional(),mode:s(["act","plan","yolo"]).optional(),system_prompt:e().nullable().optional(),max_iterations:n().int().positive().nullable().optional(),timeout_seconds:n().int().positive().nullable().optional(),max_parallel:n().int().positive().max(32).optional(),tags:o(e().min(1)).optional(),model_selection:FC.optional(),limit:n().int().positive().max(200).optional()});function En(i,l,u,c){if(!BI.has(l.operation))return;Ko(i.telemetry,{ulid:u.sessionId??u.conversationId??u.agentId,tool:`tasks.scheduled.${l.operation}`,success:c,agentId:u.agentId})}var BI=new Set(["create","update","pause","resume","delete","run_now"]);function Lo(i,l){let u=i?.trim();if(!u)throw Error(`${l} is required for this operation`);return u}function $h(i,l){try{let u=mm.native(i);if(!LC(u).isDirectory())throw Error("not a directory");return u}catch{throw Error(`${l} does not resolve to an existing safe path`)}}function qC(i,l){try{return mm.native(i)===mm.native(l)}catch{return!1}}function HI(i,l,u){let c=DC(i,l);if(c===".."||c.startsWith(`..${jI}`)||qI(c))throw Error(`${u} is outside the workspace scope`)}function zI(i,l,u){return $h(qI(l)?l:`${i}${jI}${l}`,u)}function jC(i){let l=$h(i.workspaceRoot,"workspaceRoot"),u=i.cwd?zI(l,i.cwd,"cwd"):l;return HI(l,u,"cwd"),{...i,workspaceRoot:l,cwd:u}}function xn(i,l){if(!i)throw Error("schedule does not exist");if(!qC(i.workspaceRoot,l.workspaceRoot))throw Error("schedule is outside this session's workspace scope");let u=$h(i.workspaceRoot,"schedule workspaceRoot");if(i.cwd){let c=zI(u,i.cwd,"schedule cwd");HI(u,c,"schedule cwd")}}function Ng(i){if(!i)return;return{providerId:i.provider_id.trim(),modelId:i.model_id?.trim()||void 0}}function Mc(i){if(!i)return;return[...new Set(i.map((l)=>l.trim()).filter(Boolean))]}function WI(i){let l=Date.parse(Lo(i,"run_at"));if(!Number.isFinite(l))throw Error("run_at must be an ISO timestamp");if(l<=Date.now())throw Error("run_at must be in the future");return l}function BC(i){if(i.schedule_type==="once"){if(i.cron_pattern)throw Error("cron_pattern cannot be used with a one-time schedule");if(i.timezone)throw Error("timezone is encoded in run_at for a one-time schedule");return{cronPattern:pe,metadata:{[fe]:WI(i.run_at)}}}if(i.schedule_type==="recurring"){if(i.run_at)throw Error("run_at cannot be used with a recurring schedule");return{cronPattern:Lo(i.cron_pattern,"cron_pattern"),timezone:i.timezone?.trim()||void 0}}throw Error("schedule_type is required for create")}function HC(i){if(i.run_at&&i.cron_pattern)throw Error("run_at and cron_pattern cannot be updated together");if(i.schedule_type==="once"||i.run_at){if(i.cron_pattern)throw Error("cron_pattern cannot be used with a one-time schedule");if(i.timezone)throw Error("timezone is encoded in run_at for a one-time schedule");return{cronPattern:pe,timezone:null,metadata:{[fe]:WI(i.run_at)}}}if(i.schedule_type==="recurring"||i.cron_pattern)return{cronPattern:Lo(i.cron_pattern,"cron_pattern"),timezone:i.timezone===null?null:i.timezone?.trim()||void 0};return{timezone:i.timezone===null?null:i.timezone?.trim()||void 0}}function ma(i){return Lo(i.schedule_id,"schedule_id")}async function zC(i,l,u){let c=Qu.safeParse(l);if(!c.success)return{ok:!1,error:{code:"invalid_schedule_input",message:c.error.issues[0]?.message??"Invalid schedule input"}};let g=c.data;try{if(!u.sessionId)throw Error("tasks requires a Hub session");let b=await i.resolveSessionDefaults(u.sessionId);if(!b?.workspaceRoot.trim())throw Error("tasks could not resolve the current workspace");let I=jC(b);if(BI.has(g.operation)&&!I.interactive)throw Error("schedule mutations require an interactive user session");switch(g.operation){case"create":{let k=i.schedules.createSchedule({name:Lo(g.name,"name"),...BC(g),prompt:Lo(g.prompt,"prompt"),workspaceRoot:I.workspaceRoot,cwd:I.cwd,modelSelection:Ng(g.model_selection)??I.modelSelection,enabled:g.enabled,mode:g.mode??"yolo",systemPrompt:g.system_prompt??void 0,maxIterations:g.max_iterations??void 0,timeoutSeconds:g.timeout_seconds??void 0,maxParallel:g.max_parallel??1,createdBy:`agent:${u.agentId}`,tags:Mc(g.tags)});return i.publish?.("schedule.created",{schedule:k},u.sessionId),En(i,g,u,!0),{ok:!0,operation:g.operation,schedule:k}}case"update":{let k=ma(g);xn(i.schedules.getSchedule(k),I);let T=i.schedules.updateSchedule(k,{scheduleId:k,...HC(g),name:g.name?.trim()||void 0,prompt:g.prompt?.trim()||void 0,modelSelection:Ng(g.model_selection),enabled:g.enabled,mode:g.mode,systemPrompt:g.system_prompt,maxIterations:g.max_iterations,timeoutSeconds:g.timeout_seconds,maxParallel:g.max_parallel,tags:Mc(g.tags)});if(!T)throw Error("schedule does not exist");return i.publish?.("schedule.updated",{schedule:T},u.sessionId),En(i,g,u,!0),{ok:!0,operation:g.operation,schedule:T}}case"list":{let k=i.schedules.listSchedules({enabled:g.enabled,tags:Mc(g.tags),workspaceRoot:I.workspaceRoot,limit:g.limit??50}).filter((T)=>{try{return xn(T,I),!0}catch{return!1}}).slice(0,g.limit??50);return{ok:!0,operation:g.operation,schedules:k}}case"get":{let k=i.schedules.getSchedule(ma(g));return xn(k,I),{ok:!0,operation:g.operation,schedule:k}}case"pause":case"resume":{let k=ma(g);xn(i.schedules.getSchedule(k),I);let T=g.operation==="pause"?i.schedules.pauseSchedule(k):i.schedules.resumeSchedule(k);if(!T)throw Error("schedule does not exist");return i.publish?.("schedule.updated",{schedule:T},u.sessionId),En(i,g,u,!0),{ok:!0,operation:g.operation,schedule:T}}case"delete":{let k=ma(g);xn(i.schedules.getSchedule(k),I);let T=i.schedules.deleteSchedule(k);if(!T)throw Error("schedule does not exist");return i.publish?.("schedule.deleted",{deleted:T,scheduleId:k},u.sessionId),En(i,g,u,!0),{ok:!0,operation:g.operation,deleted:T}}case"run_now":{let k=ma(g);xn(i.schedules.getSchedule(k),I);let T=i.schedules.triggerScheduleNowDetached(k);if(!T)throw Error("schedule does not exist");return i.publish?.("schedule.triggered",{execution:T},u.sessionId),En(i,g,u,!0),{ok:!0,operation:g.operation,execution:T}}}}catch(b){return En(i,g,u,!1),{ok:!1,operation:g.operation,error:{code:"schedule_operation_failed",message:b instanceof Error?b.message:String(b)}}}}var Nc=je((i)=>Array.isArray(i)?i.filter((l)=>typeof l==="string").map((l)=>l.trim()).filter(Boolean):void 0,o(e()).optional()).transform((i)=>{if(!i)return;let l=[...new Set(i)].sort((u,c)=>u.localeCompare(c));return l.length>0?l:void 0}),VC=s(["basic","agentic"]).catch("agentic"),YC=on(s(Gi),t({enabled:r()}).strip()).optional(),QC=s(["plan","act"]),Lh=t({telemetryOptOut:r().default(!1).catch(!1),autoUpdateEnabled:r().default(!0).catch(!0),compactionStrategy:VC.optional(),compactionEnabled:r().optional().catch(void 0),planActMode:QC.optional().catch(void 0),toolAutoApprove:r().optional().catch(void 0),tuiTheme:e().optional().catch(void 0),disabledTools:Nc.optional(),tools:YC,disabledPlugins:Nc.optional(),disabledAgentPlugins:Nc.optional()}).strip().transform((i)=>{let l={autoUpdateEnabled:i.autoUpdateEnabled,telemetryOptOut:i.telemetryOptOut};if(i.compactionStrategy)l.compactionStrategy=i.compactionStrategy;if(i.compactionEnabled!==void 0)l.compactionEnabled=i.compactionEnabled;if(i.planActMode)l.planActMode=i.planActMode;if(i.toolAutoApprove!==void 0)l.toolAutoApprove=i.toolAutoApprove;if(i.tuiTheme?.trim())l.tuiTheme=i.tuiTheme.trim();if(i.disabledTools?.length)l.disabledTools=i.disabledTools;if(i.tools&&Object.keys(i.tools).length>0)l.tools=i.tools;if(i.disabledPlugins?.length)l.disabledPlugins=i.disabledPlugins;if(i.disabledAgentPlugins?.length)l.disabledAgentPlugins=i.disabledAgentPlugins;return l});function Hd(){return Lh.parse({})}var zd;function ZC(){zd=void 0}function ex(i){if(i.disabledTools)Object.freeze(i.disabledTools);if(i.tools){for(let l of Object.values(i.tools))Object.freeze(l);Object.freeze(i.tools)}if(i.disabledPlugins)Object.freeze(i.disabledPlugins);if(i.disabledAgentPlugins)Object.freeze(i.disabledAgentPlugins);return Object.freeze(i)}function tx(i){let l;try{l=KC(i,"utf8")}catch{return{value:Hd(),loadFailed:!0}}try{let u=Lh.safeParse(JSON.parse(l));return u.success?{value:u.data,loadFailed:!1}:{value:Hd(),loadFailed:!0}}catch{return{value:Hd(),loadFailed:!0}}}function QI(){let i=ii(),l=GC(i,{throwIfNoEntry:!1}),u=l?.mtimeMs??0,c=l?.size??0,g=zd;if(g&&g.path===i&&g.mtimeMs===u&&g.size===c)return g;let b=l?tx(i):{value:Hd(),loadFailed:!1},I=ex(b.value);return zd={path:i,mtimeMs:u,size:c,value:I,loadFailed:b.loadFailed},zd}function as(){return QI().value}function sd(i,l={}){let u=ii(),c=as();WC(JC(u),{recursive:!0});let g=Lh.parse(i);if(!c.telemetryOptOut&&g.telemetryOptOut)bA(l.telemetry);XC(u,`${JSON.stringify(g,null,2)}
319
+ `,"utf8"),ZC()}function rx(){return as().telemetryOptOut}function id(i){return new Set(i??as().disabledTools??[])}function ZI(i){return new Set(i??as().disabledPlugins??[])}function Dh(i){return new Set(i??as().disabledAgentPlugins??[])}function ek(i){return Gi.includes(i)}function sx(){let i=QI();return{web_search:{enabled:!i.loadFailed},...i.value.tools}}function tk(i){return sx()[i]?.enabled===!0}function ix(i,l){let u=as();sd({...u,tools:{...u.tools,[i]:{enabled:l}}})}function nx(i){if(ek(i)){let g=tk(i);return ix(i,!g),g}let l=as(),u=new Set(l.disabledTools??[]),c=u.has(i);if(c)u.delete(i);else u.add(i);return sd({...l,disabledTools:[...u]}),!c}function ox(i,l){let u=[...new Set(i.map((I)=>I.trim()).filter(Boolean))];if(u.length===0)return;let c=as(),g=id(c.disabledTools),b={...c.tools};for(let I of u){if(ek(I)){b[I]={enabled:!l};continue}if(l)g.add(I);else g.delete(I)}sd({...c,disabledTools:[...g],tools:b})}function ax(i,l){return ox([i],l),l}function lx(i,l){let u=i.trim();if(!u)return;let c=as(),g=ZI(c.disabledPlugins);if(l)g.add(u);else g.delete(u);sd({...c,disabledPlugins:[...g]})}function dx(i,l){let u=i.trim();if(!u)return;let c=as(),g=Dh(c.disabledAgentPlugins);if(l)g.add(u);else g.delete(u);sd({...c,disabledAgentPlugins:[...g]})}function rk(i,l){let u=ZI(l);if(u.size===0)return[...i];return i.filter((c)=>!u.has(c))}function ec(i,l){let u=id(l);if(u.size===0)return[...i];return i.filter((c)=>!u.has(c.name))}function ux(i,l){if(!i||i.length===0)return i;let u=id(l);if(u.size===0)return i;return i.map((c)=>{if(!c.setup)return c;return{...c,setup:(g,b)=>c.setup?.({...g,registerTool:(I)=>{if(!u.has(I.name))g.registerTool(I)}},b)}})}var yx="machine-id",Og,$g=!1;function vx(){if(!$g)Og=sk(),$g=!0;return Og??ik()}function Uh(i){let l=i?.trim();if(l)return l;let u=sk();if(u)return u;return ik()}function wx(){let i=gx;return i.machineIdSync??i.default?.machineIdSync}function sk(){try{let i=wx();if(!i)return;return i().trim()||void 0}catch{return}}function ik(){let i=Ve(),l=fx(i,yx);try{if(cx(l)){let c=mx(l,"utf8").trim();if(c.length>0)return c}}catch{}let u=`cl-${R()}`;try{px(i,{recursive:!0}),hx(l,u,"utf8")}catch{}return u}class nk{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor(i){this.name=i.name??"OpenTelemetryAdapter",this.metadata={...i.metadata},this.meterProvider=i.meterProvider,this.loggerProvider=i.loggerProvider,this.meter=i.meterProvider?.getMeter("cline")??null,this.logger=i.loggerProvider?.getLogger("cline")??null,this.enabled=i.enabled??!0,this.distinctId=i.distinctId,this.commonProperties=i.commonProperties?{...i.commonProperties}:{}}emit(i,l){if(!this.isEnabled())return;this.emitLog(i,l,!1)}emitRequired(i,l){this.emitLog(i,l,!0)}recordCounter(i,l,u,c,g=!1){if(!this.meter||!g&&!this.isEnabled())return;let b=this.counters.get(i);if(!b)b=this.meter.createCounter(i,c?{description:c}:void 0),this.counters.set(i,b);b.add(l,this.flattenProperties(this.buildAttributes(u)))}recordHistogram(i,l,u,c,g=!1){if(!this.meter||!g&&!this.isEnabled())return;let b=this.histograms.get(i);if(!b)b=this.meter.createHistogram(i,c?{description:c}:void 0),this.histograms.set(i,b);b.record(l,this.flattenProperties(this.buildAttributes(u)))}recordGauge(i,l,u,c,g=!1){if(!this.meter||!g&&!this.isEnabled())return;let b=this.buildAttributes(u),I=JSON.stringify(b),k=this.gaugeValues.get(i);if(l===null){if(k){if(k.delete(I),k.size===0)this.gaugeValues.delete(i),this.gauges.delete(i)}return}let T=k;if(!T)T=new Map,this.gaugeValues.set(i,T);if(!this.gauges.has(i)){let E=this.meter.createObservableGauge(i,c?{description:c}:void 0);E.addCallback((A)=>{for(let C of this.snapshotGaugeSeries(i))A.observe(C.value,this.flattenProperties(C.attributes))}),this.gauges.set(i,E)}T.set(I,{value:l,attributes:b})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId(i){this.distinctId=i}setCommonProperties(i){this.commonProperties={...i}}updateCommonProperties(i){this.commonProperties={...this.commonProperties,...i}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog(i,l,u){if(!this.logger)return;let c=this.flattenProperties(this.buildAttributes(l,u)),g=bx(c.severity);this.logger.emit({severityText:g.text,severityNumber:g.number,body:i,attributes:c})}buildAttributes(i,l=!1){return{...this.commonProperties,...this.metadata,...i,...this.distinctId?{distinct_id:this.distinctId}:{},...l?{_required:!0}:{}}}snapshotGaugeSeries(i){let l=this.gaugeValues.get(i);if(!l)return[];return Array.from(l.values(),(u)=>({value:u.value,attributes:u.attributes?{...u.attributes}:void 0}))}flattenProperties(i,l="",u=new WeakSet,c=0){if(!i)return{};let g={},b=100,I=10;for(let[k,T]of Object.entries(i)){if(k==="__proto__"||k==="constructor"||k==="prototype")continue;let E=l?`${l}.${k}`:k;if(T===null||T===void 0){g[E]=String(T);continue}if(Array.isArray(T)){let A=T.length>b?T.slice(0,b):T;try{g[E]=JSON.stringify(A)}catch{g[E]="[UnserializableArray]"}if(T.length>b)g[`${E}_truncated`]=!0,g[`${E}_original_length`]=T.length;continue}if(typeof T==="object"){if(T instanceof Date){g[E]=T.toISOString();continue}if(T instanceof Error){g[E]=T.message;continue}if(u.has(T)){g[E]="[Circular]";continue}if(c>=I){g[E]="[MaxDepthExceeded]";continue}u.add(T),Object.assign(g,this.flattenProperties(T,E,u,c+1));continue}if(Ix(T)){g[E]=T;continue}try{g[E]=JSON.stringify(T)}catch{g[E]=String(T)}}return g}}function bx(i){switch(typeof i==="string"?i.toLowerCase():i){case"trace":return{text:"TRACE",number:Ni.SeverityNumber.TRACE};case"debug":return{text:"DEBUG",number:Ni.SeverityNumber.DEBUG};case"warn":case"warning":return{text:"WARN",number:Ni.SeverityNumber.WARN};case"error":return{text:"ERROR",number:Ni.SeverityNumber.ERROR};case"fatal":return{text:"FATAL",number:Ni.SeverityNumber.FATAL};default:return{text:"INFO",number:Ni.SeverityNumber.INFO}}}function Ix(i){return typeof i==="string"||typeof i==="number"||typeof i==="boolean"}class ok{name;logger;enabled;constructor(i={}){this.name=i.name??"TelemetryLoggerSink",this.logger=i.logger,this.enabled=i.enabled??!0}emit(i,l){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:i,properties:l})}emitRequired(i,l){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:i,properties:l})}recordCounter(i,l,u,c,g){if(!g&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:i,value:l,attributes:u,description:c,required:g===!0})}recordHistogram(i,l,u,c,g){if(!g&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:i,value:l,attributes:u,description:c,required:g===!0})}recordGauge(i,l,u,c,g){if(!g&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:i,value:l,attributes:u,description:c,required:g===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class Fh{adapters;metadata;distinctId;deviceId;commonProperties;constructor(i={}){if(this.adapters=[...i.adapters??[]],i.logger)this.adapters.push(new ok({logger:i.logger}));this.metadata={...i.metadata??{}},this.distinctId=i.distinctId,this.deviceId=i.deviceId??vx(),this.commonProperties={...i.commonProperties??{}}}addAdapter(i){this.adapters.push(i)}setDistinctId(i){this.distinctId=i}setMetadata(i){this.metadata={...i}}updateMetadata(i){this.metadata={...this.metadata,...i}}setCommonProperties(i){this.commonProperties={...i}}updateCommonProperties(i){this.commonProperties={...this.commonProperties,...i}}isEnabled(){return this.adapters.some((i)=>i.isEnabled())}capture(i){let l=this.buildAttributes(i.properties);for(let u of this.adapters)u.emit(i.event,l)}captureRequired(i,l){let u=this.buildAttributes(l);for(let c of this.adapters)c.emitRequired(i,u)}recordCounter(i,l,u,c,g=!1){let b=this.buildAttributes(u);for(let I of this.adapters)I.recordCounter(i,l,b,c,g)}recordHistogram(i,l,u,c,g=!1){let b=this.buildAttributes(u);for(let I of this.adapters)I.recordHistogram(i,l,b,c,g)}recordGauge(i,l,u,c,g=!1){let b=this.buildAttributes(u);for(let I of this.adapters)I.recordGauge(i,l,b,c,g)}async flush(){await Promise.all(this.adapters.map((i)=>i.flush()))}async dispose(){await Promise.all(this.adapters.map((i)=>i.dispose()))}buildAttributes(i){let l=typeof i?.distinct_id==="string"&&i.distinct_id.trim()?i.distinct_id.trim():this.distinctId,u={...this.commonProperties,...this.metadata,...i,...l?{distinct_id:l}:{},device_id:this.deviceId};return Object.fromEntries(Object.entries(u).filter(([,c])=>c!==void 0))}}class ak{distinctId;metadata;commonProperties;constructor(i={}){this.distinctId=i.distinctId,this.metadata={...i.metadata??{}},this.commonProperties={...i.commonProperties??{}}}setDistinctId(i){this.distinctId=i}setMetadata(i){this.metadata={...i}}updateMetadata(i){this.metadata={...this.metadata,...i}}setCommonProperties(i){this.commonProperties={...i}}updateCommonProperties(i){this.commonProperties={...this.commonProperties,...i}}isEnabled(){return!1}capture(i){this.resolveProperties(i.properties)}captureRequired(i,l){this.resolveProperties(l)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties(i){let l=typeof i?.distinct_id==="string"&&i.distinct_id.trim()?i.distinct_id.trim():this.distinctId,u={...this.commonProperties,...this.metadata,...i,...l?{distinct_id:l}:{}};return Object.fromEntries(Object.entries(u).filter(([,c])=>c!==void 0))}}class lk{meterProvider;loggerProvider;tracerProvider;options;constructor(i={}){this.options=i;let l=VI.resourceFromAttributes({...i.resourceAttributes,[Zu.ATTR_SERVICE_NAME]:i.serviceName??"cline",...i.serviceVersion?{[Zu.ATTR_SERVICE_VERSION]:i.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(l),this.loggerProvider=this.createLoggerProvider(l),this.tracerProvider=this.createTracerProvider(l),this.meterProvider)kn.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)KI.logs.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer(i="cline",l){return Di.getTracer(i,l??this.options.serviceVersion)}createAdapter(i){return new nk({...i,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService(i){let l=this.createAdapter({name:i.name,enabled:this.options.enabled,metadata:i.metadata});return new Fh({...i,adapters:[l],distinctId:Uh(i.distinctId)})}async forceFlush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.(),this.tracerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.(),this.tracerProvider?.shutdown?.()])}createMeterProvider(i){let l=Oc(this.options.metricsExporter);if(l.length===0)return null;let u=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),c=Math.min(30000,Math.floor(u*0.8)),g=l.map((b)=>Ex(b,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:u,timeout:c})).filter((b)=>b!==null);if(g.length===0)return null;return new an.MeterProvider({resource:i,readers:g})}createTracerProvider(i){let l=Oc(this.options.tracesExporter);if(l.length===0)return null;let u=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,c=this.options.otlpTracesHeaders??this.options.otlpHeaders,g=[],b=!1;for(let k of l){let T=_x(k,{endpoint:u,headers:c,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(T){if(g.push(T),k!=="console")b=!0}}if(g.length===0)return null;let I=new YI.NodeTracerProvider({resource:i,spanProcessors:b?[new $i,...g]:g});if(b)Gn(I);return I}createLoggerProvider(i){let l=Oc(this.options.logsExporter);if(l.length===0)return null;let u=l.map((c)=>{let g=Tx(c,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!g)return null;return new Xo.BatchLogRecordProcessor(g,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((c)=>c!==null);if(u.length===0)return null;return new Xo.LoggerProvider({resource:i,processors:u})}}function kx(i){let l=new lk(i),u=l.createTelemetryService(i),c=()=>{u.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:i.enabled??!0,logsExporter:Array.isArray(i.logsExporter)?i.logsExporter.join(","):i.logsExporter,metricsExporter:Array.isArray(i.metricsExporter)?i.metricsExporter.join(","):i.metricsExporter,tracesExporter:Array.isArray(i.tracesExporter)?i.tracesExporter.join(","):i.tracesExporter,otlpProtocol:i.otlpProtocol,hasOtlpEndpoint:Boolean(i.otlpEndpoint),serviceName:i.serviceName,serviceVersion:i.serviceVersion})};if(!i.deferProviderCreatedEvent)c();return{provider:l,telemetry:u,emitProviderCreated:c}}function Sx(i){if(rx())return{telemetry:new ak(i)};if(i.enabled!==!0)return{telemetry:new Fh({...i,distinctId:Uh(i.distinctId)})};return kx(i)}function kY(i){let{telemetry:l,provider:u,emitProviderCreated:c}=Sx(i);return{telemetry:l,provider:u,flush:async()=>{let g=u;if(g&&typeof g.forceFlush==="function")try{await g.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([l.dispose(),u?.dispose()])},...i.deferProviderCreatedEvent&&c?{emitProviderCreated:c}:{}}}function Oc(i){if(!i)return[];return(Array.isArray(i)?i:i.split(",")).map((l)=>l.trim()).filter((l)=>l==="console"||l==="otlp")}function Tx(i,l){if(i==="console")return new Xo.ConsoleLogRecordExporter;if(!l.endpoint)return null;let u=qh(l.endpoint,"/v1/logs");return new GI.OTLPLogExporter({url:u,headers:l.headers})}function _x(i,l){if(i==="console")return new Yo.SimpleSpanProcessor(new Yo.ConsoleSpanExporter);if(!l.endpoint)return null;let u=qh(l.endpoint,"/v1/traces");return new Yo.BatchSpanProcessor(new JI.OTLPTraceExporter({url:u,headers:l.headers}))}function Ex(i,l){if(i==="console")return new an.PeriodicExportingMetricReader({exporter:new an.ConsoleMetricExporter,exportIntervalMillis:l.interval,exportTimeoutMillis:l.timeout});if(!l.endpoint)return null;let u=qh(l.endpoint,"/v1/metrics");return new an.PeriodicExportingMetricReader({exporter:new XI.OTLPMetricExporter({url:u,headers:l.headers}),exportIntervalMillis:l.interval,exportTimeoutMillis:l.timeout})}function qh(i,l){let u=new URL(i),c=u.pathname.endsWith("/")?u.pathname.slice(0,-1):u.pathname;return u.pathname=c.endsWith(l)?c:`${c}${l}`,u.toString()}var Dg=s(["suggestion","follow-up","todo","handoff","idea","reminder"]),Ax=s(["pending_approval","approved","in_progress","completed","failed","cancelled","expired"]),Ug=p([a(0),a(1),a(2),a(3),a(4),a(5)]),Cx=t({provider_id:e().min(1),model_id:e().min(1).optional()}),jh=t({operation:s(["create","update","list","get"]),task_id:e().min(1).optional(),expected_revision:n().int().positive().optional(),type:Dg.optional(),title:e().min(1).optional(),description:e().nullable().optional(),instructions:e().min(1).optional(),scope:s(["workspace","global"]).optional(),workspace_root:e().min(1).nullable().optional(),cwd:e().min(1).nullable().optional(),resource_paths:o(e().min(1)).optional(),priority:Ug.optional(),assignee:e().min(1).nullable().optional(),model_selection:Cx.nullable().optional(),mode:s(["act","plan","yolo"]).nullable().optional(),system_prompt:e().nullable().optional(),max_iterations:n().int().positive().nullable().optional(),timeout_seconds:n().int().positive().nullable().optional(),available_at:e().datetime().optional(),expires_at:e().datetime().optional(),automation_eligible:r().optional(),statuses:o(Ax).optional(),types:o(Dg).optional(),priorities:o(Ug).optional(),limit:n().int().positive().max(500).optional()}),xx=new Set(["create","update"]);function $c(i,l,u,c){if(!xx.has(l.operation))return;Ko(i.telemetry,{ulid:u.sessionId??u.conversationId??u.agentId,tool:`tasks.todo.${l.operation}`,success:c,agentId:u.agentId})}function Rn(i,l){let u=i?.trim();if(!u)throw Error(`${l} is required for this operation`);return u}function Fg(i){if(i===void 0||i===null)return i;return{providerId:i.provider_id,modelId:i.model_id}}function dk(i,l){return Lg(i)===Lg(l)}function qg(i,l){if(!i)throw Error("task does not exist");if(l.workspaceRoot){if(i.scope!=="workspace"||!i.workspaceRoot||!dk(i.workspaceRoot,l.workspaceRoot))throw Error("task is outside this session's workspace scope");return}if(i.scope!=="global")throw Error("task is outside this session's global scope")}function Rx(i,l){let u=l.workspaceRoot?"workspace":"global";if(i.scope&&i.scope!==u)throw Error(`this session can only manage ${u} tasks`);if(i.workspace_root!==void 0){if(!l.workspaceRoot||i.workspace_root===null||!dk(i.workspace_root,l.workspaceRoot))throw Error(`this session can only manage ${u} tasks`)}return u}async function Px(i,l,u){let c=jh.safeParse(l);if(!c.success)return{ok:!1,error:{code:"invalid_task_input",message:c.error.issues[0]?.message??"Invalid task input"}};let g=c.data,b={kind:"agent",id:u.agentId,agentId:u.agentId,sessionId:u.sessionId};try{if(!u.sessionId)throw Error("tasks requires a Hub session");let I=await i.resolveSessionDefaults(u.sessionId);if(!I)throw Error("tasks could not resolve the current session");let k=Rx(g,I);switch(g.operation){case"create":{let T={type:Rn(g.type,"type"),title:Rn(g.title,"title"),description:g.description??void 0,instructions:Rn(g.instructions,"instructions"),scope:k,workspaceRoot:I.workspaceRoot,cwd:k==="workspace"?(g.cwd??I.cwd)?.trim()||void 0:void 0,resourcePaths:g.resource_paths,priority:g.priority,assignee:g.assignee??void 0,modelSelection:Fg(g.model_selection)??I.modelSelection,mode:g.mode??void 0,systemPrompt:g.system_prompt??void 0,maxIterations:g.max_iterations??void 0,timeoutSeconds:g.timeout_seconds??void 0,availableAt:g.available_at,expiresAt:Rn(g.expires_at,"expires_at"),automationEligible:g.automation_eligible,createdBy:b,originSessionId:u.sessionId,originTaskId:I.originTaskId},E={ok:!0,operation:g.operation,task:await i.manager.createTask(T)};return $c(i,g,u,!0),E}case"update":{let T=Rn(g.task_id,"task_id");if(qg(await i.manager.getTask(T),I),!g.expected_revision)throw Error("expected_revision is required for update");let E={ok:!0,operation:g.operation,task:await i.manager.updateTask({taskId:T,expectedRevision:g.expected_revision,type:g.type,title:g.title,description:g.description,instructions:g.instructions,scope:k,workspaceRoot:I.workspaceRoot??null,cwd:g.cwd,resourcePaths:g.resource_paths,priority:g.priority,assignee:g.assignee,modelSelection:Fg(g.model_selection),mode:g.mode,systemPrompt:g.system_prompt,maxIterations:g.max_iterations,timeoutSeconds:g.timeout_seconds,availableAt:g.available_at,expiresAt:g.expires_at,automationEligible:g.automation_eligible,updatedBy:b})};return $c(i,g,u,!0),E}case"list":{let T={statuses:g.statuses,types:g.types,scope:k,workspaceRoot:I.workspaceRoot,priorities:g.priorities,automationEligible:g.automation_eligible,limit:g.limit};return{ok:!0,operation:g.operation,tasks:await i.manager.listTasks(T)}}case"get":{let T=await i.manager.getTask(Rn(g.task_id,"task_id"));return qg(T,I),{ok:!0,operation:g.operation,task:T}}}}catch(I){return $c(i,g,u,!1),{ok:!1,operation:g.operation,error:{code:"task_operation_failed",message:I instanceof Error?I.message:String(I)}}}}var Bh="tasks",Mx='# Tasks\n\nUse the `tasks` tool to manage durable Todo items and explicitly requested scheduled agent work.\n\n- Use `kind: "todo"` for meaningful follow-ups, handoffs, ideas, reminders, and other work that should remain visible after this session. This includes useful work you identify and suggest proactively. Agent-created Todos require user approval; Todos created directly by the user are approved immediately. Todo `available_at` controls availability in the list; it never schedules execution.\n- Use `kind: "scheduled"` only when the user explicitly asks Cline to execute work once at a future time or on a recurrence. One-time schedules require an exact future ISO 8601 `run_at` with an offset or Z. Recurring schedules require a five-field `cron_pattern` and default to the local timezone. Omit `timezone` unless the user explicitly requests a different timezone; never guess EST, UTC, or another zone. When a timezone is requested, use its IANA name (for example, America/New_York) so daylight-saving changes are handled.\n- "Remind me" is ambiguous: ask whether the user wants a reviewed Todo note or an agent to execute work at that time when intent is unclear.\n- Never create both kinds for the same request unless the user explicitly requests both. Check existing items before creating a likely duplicate.\n- Todo instructions and scheduled prompts must be self-contained. Include the goal, constraints, relevant project context, and expected output.\n- Scheduled sessions run in the user\'s schedules home workspace, not this conversation\'s folder. Include absolute paths in the scheduled `prompt` for any project files or repositories the work must touch.\n- Never approve or start a Todo yourself. Only mutate schedules from an interactive user session, and only update, pause, resume, delete, or run one immediately when the user asks.',Nx="# Tasks\n\nUse the `tasks` tool only when the user explicitly asks Cline to execute work once at a future time or on a recurrence. Always pass `kind: \"scheduled\"`.\n\n- One-time schedules require an exact future ISO 8601 `run_at` with an offset or Z. Recurring schedules require a five-field `cron_pattern` and default to the local timezone. Omit `timezone` unless the user explicitly requests a different timezone; never guess EST, UTC, or another zone. When a timezone is requested, use its IANA name (for example, America/New_York) so daylight-saving changes are handled.\n- Never create a schedule proactively. Check existing schedules before creating a likely duplicate.\n- Make the scheduled `prompt` self-contained because it runs in a new unattended session in the user's schedules home workspace, not this conversation's folder. Include the goal, constraints, expected output, and absolute paths for any project files or repositories the work must touch.\n- Only update, pause, resume, delete, or run a schedule immediately when the user asks for that action.",Ox=jh.extend({kind:a("todo")}).strict(),uk=Qu.extend({kind:a("scheduled")}).strict(),$x=w("kind",[Ox,uk]),Lx=w("kind",[uk]),ck=["create","update","list","get","pause","resume","delete","run_now"],Dx=t({...Qu.shape,...jh.shape,kind:s(["todo","scheduled"]),operation:s(ck)}).strict(),Ux=t({...Qu.shape,kind:s(["scheduled"]),operation:s(ck)}).strict();function Fx(i){let l=i.todo;return _({name:Bh,description:l?'Create and manage reviewed Todo items or explicitly requested scheduled agent work. Use kind "todo" for durable Agenda items that require user or automation approval. Use kind "scheduled" for one-time or recurring autonomous execution. Todo available_at is not an execution timer; schedules use run_at or cron_pattern.':'Create and manage explicitly requested scheduled agent work with kind "scheduled". One-time schedules use a future ISO 8601 run_at; recurring schedules use a five-field cron_pattern.',inputSchema:S(l?Dx:Ux),retryable:!1,maxRetries:0,execute:async(u,c)=>{let g=(l?$x:Lx).safeParse(u);if(!g.success)return{ok:!1,kind:typeof u==="object"&&u!==null&&"kind"in u&&(u.kind==="todo"||u.kind==="scheduled")?u.kind:void 0,error:{code:"invalid_tasks_input",message:g.error.issues[0]?.message??"Invalid tasks input"}};if(g.data.kind==="todo"){if(!l)return{ok:!1,kind:"todo",error:{code:"invalid_tasks_input",message:'kind "todo" is not available in this session'}};return{kind:"todo",...await Px(l,g.data,c)}}return{kind:"scheduled",...await zC(i.scheduled,g.data,c)}}})}function qx(i){return{name:"hub-task-guidance",manifest:{capabilities:["rules"]},setup:(l)=>{l.registerRule({id:"hub:task-guidance",content:i?.todoEnabled===!1?Nx:Mx,whenToolAvailable:Bh})}}}var Hh="0.2.0",jl={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:Hh,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"},"./services/feature-flags/posthog":{types:"./dist/services/feature-flags/posthog.d.ts",import:"./dist/services/feature-flags/posthog.js"},"./cloud":{types:"./dist/cloud/index.d.ts",import:"./dist/cloud/index.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json && bun run ./scripts/verify-runtime-build-id.ts",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","test:compaction":"bun --conditions=development run scripts/compact-session.ts","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@modelcontextprotocol/sdk":"^1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0","http-proxy-agent":"^7.0.2","https-proxy-agent":"^7.0.6",jiti:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","proxy-from-env":"^2.1.0","simple-git":"3.36.0",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},peerDependencies:{"posthog-node":"^5.8.0"},peerDependenciesMeta:{"posthog-node":{optional:!0}},devDependencies:{"@types/proxy-from-env":"^1.0.4","@types/ws":"^8.18.1","posthog-node":"^5.8.0",skills:"1.7.2"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]},zh="session_not_found";class tc extends Error{sessionId;code="session_not_found";constructor(i,l){super(l??(i?`session not found: ${i}`:"session not found"));this.sessionId=i,this.name="SessionNotFoundError"}}function Bl(i){return i instanceof tc||typeof i==="object"&&i!==null&&"code"in i&&i.code==="session_not_found"}var tR="CLINE_HUB_DISCOVERY_PATH",rR="CLINE_HUB_BUILD_ID",sR="CLINE_HUB_BUILD_EPOCH_MS",iR=30000,nR=15000,Bg=100;function oR(i){return i.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function aR(i){return Yx("sha256").update(i).digest("hex").slice(0,12)}function lR(i){if(!Number.isInteger(i)||!i||i<=0)return!1;try{return process.kill(i,0),!0}catch(l){return l instanceof Error&&"code"in l?String(l.code)==="EPERM":!1}}function dR(){return hk(32).toString("hex")}function Hg(i){return new Promise((l)=>setTimeout(l,i))}function uR(i){return`${i}.lock`}async function cR(i){try{let l=JSON.parse(await fk(Wh(i,"owner.json"),"utf8"));if(typeof l.pid!=="number"||typeof l.acquiredAt!=="string")return;return{pid:l.pid,acquiredAt:l.acquiredAt}}catch{return}}async function Lc(i){await rc(i,{recursive:!0,force:!0}).catch(()=>{return})}function Qo(){let i=process.env[rR]?.trim();if(i)return i;return"sdk-v1-2575e46ceecd35cbe25f0581cea02b42a151c34df1a966c1737aaaf88a5350c7".trim()||`source-${String(jl.version)}`}function yk(){let i=Number(process.env[sR]);if(Number.isFinite(i)&&i>0)return i;return Number.isFinite(1792985554353)?1792985554353:void 0}function sc(i,l=Qo()){let u=Mt(i);if(!u.compatible)return u;let c=i.buildId?.trim();if(!c)return{compatible:!1,reason:"missing_build"};if(c!==l)return{compatible:!1,reason:"build_mismatch"};return{compatible:!0}}function zg(i){return typeof i==="number"&&Number.isFinite(i)&&i>0?i:void 0}function Wg(i){let l=i?.trim().split(/[-+]/,1)[0];if(!l)return;let u=l.split(".").map((c)=>Number(c));if(u.length===0||u.some((c)=>!Number.isInteger(c)||c<0))return;return u}function pR(i,l){for(let u=0;u<Math.max(i.length,l.length);u++){let c=i[u]??0,g=l[u]??0;if(c!==g)return c<g?-1:1}return 0}function Kh(i,l){let u=i.buildId?.trim(),c=l.buildId?.trim();if(u&&c&&u===c)return 0;let g=zg(i.buildEpochMs),b=zg(l.buildEpochMs);if(g!==void 0&&b!==void 0&&g!==b)return g<b?-1:1;let I=Wg(i.coreVersion),k=Wg(l.coreVersion);if(I&&k){let T=pR(I,k);if(T!==0)return T}if(u&&c&&u!==c)return u<c?-1:1;return 0}function Gh(){return{buildId:Qo(),buildEpochMs:yk(),coreVersion:String(jl.version)}}function Xh(i,l){let u=l?.self??Gh(),c=sc(i,u.buildId??"");if(c.compatible)return!0;if(c.reason!=="build_mismatch"&&c.reason!=="missing_build")return!1;return Kh(u,i)<=0}function nd(i=process.argv[1]?.trim()||process.cwd()){let l=`hub-${aR(i)}`,u=process.env[tR]?.trim()||Wh(Z(),"locks","hub","owners",`${oR(l)}.json`);return{ownerId:l,discoveryPath:u}}function jY(i=`hub-${Date.now().toString(36)}`){return nd(i)}async function Mr(i,l={}){try{let u;try{u=await fk(i,"utf8")}catch(g){if(g.code==="ENOENT")return;throw g}let c;try{c=JSON.parse(u)}catch{throw Error(`Invalid JSON in Hub discovery record: ${i}`)}if(!c||typeof c.hubId!=="string"||typeof c.protocolVersion!=="string"||typeof c.authToken!=="string"||typeof c.host!=="string"||typeof c.port!=="number"||typeof c.url!=="string"||typeof c.startedAt!=="string"||typeof c.updatedAt!=="string")throw Error(`Invalid Hub discovery record: ${i}`);return{hubId:c.hubId,protocolVersion:c.protocolVersion,minClientProtocolVersion:typeof c.minClientProtocolVersion==="string"?c.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof c.maxClientProtocolVersion==="string"?c.maxClientProtocolVersion:void 0,capabilities:Array.isArray(c.capabilities)?c.capabilities.filter((g)=>typeof g==="string"):void 0,coreVersion:typeof c.coreVersion==="string"?c.coreVersion:void 0,buildId:typeof c.buildId==="string"?c.buildId:void 0,buildEpochMs:typeof c.buildEpochMs==="number"?c.buildEpochMs:void 0,authToken:c.authToken,host:c.host,port:c.port,url:c.url,pid:typeof c.pid==="number"?c.pid:void 0,startedAt:c.startedAt,updatedAt:c.updatedAt}}catch(u){if(l.onError==="throw")throw u;return}}async function vk(i,l){await Jh(i,async()=>{let u=gk(i);await hm(u,{recursive:!0});let c=`${i}.${process.pid}.${hk(6).toString("hex")}.tmp`,g;try{g=await jg(c,"wx",384),await g.writeFile(`${JSON.stringify(l,null,2)}
320
+ `,{encoding:"utf8"}),await g.sync(),await g.close(),g=void 0,await Zx(c,i);let b;try{b=await jg(u,"r"),await b.sync()}catch{}finally{await b?.close().catch(()=>{return})}}catch(b){throw await g?.close().catch(()=>{return}),await rc(c,{force:!0}).catch(()=>{return}),b}})}async function ea(i){await Jh(i,async()=>{await rc(i,{force:!0}).catch(()=>{return})})}async function mR(i,l){return await Jh(i,async()=>{if((await Mr(i))?.hubId!==l)return!1;return await rc(i,{force:!0}),!0})}async function wk(i,l,u){let c=uR(i);await hm(gk(c),{recursive:!0});let g=Date.now()+nR;while(!0){try{await hm(c,{recursive:!1})}catch(b){if((b instanceof Error&&"code"in b?String(b.code):"")!=="EEXIST")throw b;let I=await cR(c);if(!I){if(Date.now()>=g){await Lc(c);continue}await Hg(Bg);continue}let k=Date.now()-Date.parse(I.acquiredAt);if(!lR(I.pid)||k>iR){await Lc(c);continue}if(Date.now()>=g)throw Error(`Timed out waiting for hub ${l} lock ${c}`);await Hg(Bg);continue}try{return await eR(Wh(c,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
321
+ `,"utf8"),await u()}finally{await Lc(c)}}}function Jh(i,l){return wk(`${i}.mutation`,"discovery mutation",l)}function bk(i,l){return wk(i,"startup",l)}async function od(i,l){Xe();try{let u=await fetch(l?.authToken?hR(i):Ik(i),{headers:l?.authToken?{authorization:`Bearer ${l.authToken}`}:void 0,signal:l?.signal});if(!u.ok)return;let c=await u.json();if(typeof c.protocolVersion!=="string"||typeof c.host!=="string"||typeof c.port!=="number"||typeof c.url!=="string")return;return{protocolVersion:c.protocolVersion,minClientProtocolVersion:typeof c.minClientProtocolVersion==="string"?c.minClientProtocolVersion:void 0,maxClientProtocolVersion:typeof c.maxClientProtocolVersion==="string"?c.maxClientProtocolVersion:void 0,capabilities:Array.isArray(c.capabilities)?c.capabilities.filter((g)=>typeof g==="string"):void 0,coreVersion:typeof c.coreVersion==="string"?c.coreVersion:void 0,buildId:typeof c.buildId==="string"?c.buildId:void 0,buildEpochMs:typeof c.buildEpochMs==="number"?c.buildEpochMs:void 0,host:c.host,port:c.port,url:c.url,hubId:typeof c.hubId==="string"?c.hubId:void 0,authToken:typeof c.authToken==="string"?c.authToken:void 0,pid:typeof c.pid==="number"?c.pid:void 0,startedAt:typeof c.startedAt==="string"?c.startedAt:void 0,updatedAt:typeof c.updatedAt==="string"?c.updatedAt:void 0}}catch{return}}function Do(i,l,u="/hub"){return new URL(`ws://${i}:${l}${u}`).toString()}function Ik(i){let l=new URL(i);return l.protocol=l.protocol==="wss:"?"https:":"http:",l.pathname="/health",l.search="",l.toString()}function hR(i){let l=new URL(Ik(i));return l.pathname="/status",l.toString()}function BY(i){return Qx(i)}var fR="CLINE_HUB_HOST",gR="CLINE_HUB_PORT",yR="CLINE_HUB_PATHNAME",vR="127.0.0.1",wR=Fn,bR="/hub";function Kg(i){return re(i)==="development"?jn:wR}function IR(i={}){return(i.env??process.env)[fR]?.trim()||vR}function Vh(i={}){let l=(i.env??process.env)[gR]?.trim();if(!l)return Kg(i);let u=Number.parseInt(l,10);if(!Number.isInteger(u)||u<1||u>65535)return Kg(i);return u}function kR(i={}){return(i.env??process.env)[yR]?.trim()||bR}function ic(i={},l={}){return{host:i.host??IR(l),port:i.port??Vh(l),pathname:i.pathname??kR(l)}}var TR="shared:cline",_R="CLINE_HUB_DISCOVERY_PATH",ER="hub-production";function WY(i){let l=ql(i.trim());return nd(`workspace:${l||i.trim()}`)}function ra(i=TR){return nd(`${i}@${Qo()}`)}function ad(){return{ownerId:ER,discoveryPath:process.env[_R]?.trim()||SR(Z(),"locks","hub","production.json")}}var Gg=15000,AR=200,Xg=3000,CR=100,xR=[100,250,500,1000,2000],kk="--cline-hub-daemon",RR=3,PR=60000,fm=new Map,KY={resetRetireAttempts(){fm.clear()},resolveDaemonEntryArgs:_k,resolveLaunchCommand:(i,l={})=>Ek(i,l)};function MR(i,l=Date.now()){let u=fm.get(i);if(!u||l-u.windowStartedAt>PR)return fm.set(i,{count:1,windowStartedAt:l}),!0;return u.count+=1,u.count<=RR}function NR(i){return[...i.host?["--host",i.host]:[],...typeof i.port==="number"?["--port",String(i.port)]:[],...i.pathname?["--pathname",i.pathname]:[]]}function OR(){try{let i=Jx(Z(),"logs","hub-daemon.log");return Hx(Xx(i),{recursive:!0}),{fd:zx(i,"a"),logPath:i}}catch{return}}function Sk(){return re()==="production"?ad():ra()}function Il(i){return Xh(i)}function $R(i){try{let l=JSON.parse(Wx(`${i}.superseded`,"utf8"));return{url:typeof l.url==="string"?l.url:void 0,authToken:typeof l.authToken==="string"?l.authToken:void 0,pid:typeof l.pid==="number"?l.pid:void 0}}catch{return}}function Dc(i){try{Kx(`${i}.superseded`)}catch{}}function Jg(i,l,u){if(!l||l.url!==u)return i;return{...i,authToken:i.authToken??l.authToken,pid:i.pid??l.pid}}async function ao(i,l){try{return await od(i,{authToken:l})}catch{return}}async function Vg(i,l){let u=Date.now()+l;while(Date.now()<u){if(!(await ao(i))?.url)return!0;await new Promise((c)=>setTimeout(c,CR))}return!1}async function ld(i,l){if(!MR(i.url))return!1;await Ao(i.url,i.authToken,"retired by newer install").catch(()=>!1),await Mk(i.url,i.authToken).catch(()=>!1);let u=await Vg(i.url,Xg);if(!u&&i.pid&&LR(i.pid)){try{process.kill(i.pid,"SIGTERM")}catch{}u=await Vg(i.url,Xg)}if(u)await ea(l).catch(()=>{return});return u}function LR(i){try{return process.kill(i,0),!0}catch(l){return l?.code==="EPERM"}}async function Tk(i){try{let l=await oc(i.url,i.authToken);return l.activeSessionCount>0||(l.activePluginRequests??0)>0||(l.activeCloudCommands??0)>0}catch{return!1}}async function Uc(i,l){if(Il(i))return"reusable";let u=await Ao(i.url,i.authToken,"retired by newer install").catch(()=>!1);if(await Tk(i)){if(u)await Ao(i.url,i.authToken,"hub retirement deferred",{off:!0}).catch(()=>!1);return"deferred_busy"}let c=await ld(i,l);if(!c&&u)await Ao(i.url,i.authToken,"hub retirement failed",{off:!0}).catch(()=>!1);return c?"retired":"failed"}async function DR(i){if(re()!=="production")return;let l=ra();if(l.discoveryPath===i.discoveryPath)return;let u=await Mr(l.discoveryPath);if(u?.url)await ld(u,l.discoveryPath);else await ea(l.discoveryPath).catch(()=>{return})}function UR(){let i=import.meta.url.endsWith(".ts")?"ts":"js";return Vx(new URL(`./entry.${i}`,import.meta.url))}function _k(i,l){if($n(i))return[kk];return[...l&&i.toLowerCase().endsWith(".ts")?["--conditions=development"]:[],i]}var Wd;function GY(i){let l=i?.command.trim();Wd=l?{command:l,args:i?.args?[...i.args]:void 0}:void 0}function Ek(i,l){let u,c;if(Wd)u=Wd.command,c=Wd.args??[kk];else{let g=process.execPath?.trim();if(!g)throw Error("unable to resolve runtime executable for hub daemon");let b=Gx(g).toLowerCase().includes("bun");u=g,c=_k(UR(),b)}return{launcher:u,args:[...c,"--cwd",i,...NR(l),...l.manageConnectors===!1?["--no-connectors"]:[]],cwd:i,env:{...qn(We(process.env),FR()),CLINE_NO_INTERACTIVE:"1",[ti]:"1"}}}function FR(){let i=Hi(),l=i?.name?.trim();return l?{client:l,version:i?.version,transport:"local"}:void 0}function qR(i){if(!i||typeof i!=="object")return!1;if(("code"in i?i.code:void 0)==="ETXTBSY")return!0;let l="message"in i?i.message:void 0;return typeof l==="string"&&l.includes("ETXTBSY")}function jR(i,l={}){if(zt())return;let u=Ek(i,l),c=OR();try{jx(u.launcher,u.args,{detached:!0,stdio:c?["ignore",c.fd,c.fd]:"ignore",env:u.env,cwd:u.cwd,windowsHide:!0}).unref()}finally{if(c)Bx(c.fd)}}async function BR(i,l={}){for(let u=0;;u++)try{jR(i,l);return}catch(c){let g=xR[u];if(!qR(c)||g===void 0)throw c;await new Promise((b)=>setTimeout(b,g))}}function XY(i,l={}){if(zt())return;cu(i,l).catch(()=>{})}async function HR(i,l,u={}){let c=u.host!==void 0||u.port!==void 0||u.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),g=ic(u),b=Do(g.host,g.port,g.pathname),I=(O)=>{if(!c)nc(O.url,O.authToken);return O};await DR(i).catch(()=>{return});let k=await Mr(i.discoveryPath),T=k?.url?void 0:$R(i.discoveryPath),E=!1;if(k?.url){let O=k.authToken;if(!O)E=!0,await ld(k,i.discoveryPath);else{let L=await ao(k.url,O);if(L?.url&&Il(L)&&await Ls(L.url,{authToken:O}))return Dc(i.discoveryPath),I({url:L.url,authToken:O});if(L?.url){if(await Uc({...L,authToken:O},i.discoveryPath)==="deferred_busy"&&await Ls(L.url,{authToken:O}))return I({url:L.url,authToken:O})}else await ea(i.discoveryPath).catch(()=>{return})}}let A=await ao(b);if(A?.url){let O=Jg(A,k??T,b);if(Il(A)){let D=[A.authToken,k?.authToken,T?.authToken].filter((U)=>typeof U==="string"&&U.trim().length>0);for(let U of D){if(!await Ls(A.url,{authToken:U}))continue;let F={hubId:A.hubId??`repaired-${A.port}`,protocolVersion:A.protocolVersion,minClientProtocolVersion:A.minClientProtocolVersion,maxClientProtocolVersion:A.maxClientProtocolVersion,capabilities:A.capabilities,coreVersion:A.coreVersion,buildId:A.buildId,authToken:U,host:A.host,port:A.port,url:A.url,pid:A.pid??k?.pid??T?.pid,startedAt:A.startedAt??new Date().toISOString(),updatedAt:new Date().toISOString()};try{await vk(i.discoveryPath,F)}catch{}return Dc(i.discoveryPath),I({url:A.url,authToken:U})}throw Error(`A compatible Cline Hub is already running at ${b}, but its discovery record is missing or unreadable and no usable auth token is available. Run 'cline doctor fix' to repair local hub discovery.${E?" This can happen immediately after upgrading from a build that wrote an empty hub auth token; run 'cline doctor fix' to stop the old daemon and repair local hub discovery.":""}`)}let L=await Uc(O,i.discoveryPath);if(L==="deferred_busy"){for(let D of[O.authToken,k?.authToken].filter((U)=>typeof U==="string"&&U.trim().length>0))if(await Ls(A.url,{authToken:D}))return I({url:A.url,authToken:D});if(u.allowPortFallback!==!0&&g.port!==0)throw Error(`An older Cline Hub is running at ${b} and is still serving active sessions, so it was not replaced, but no usable auth token is available to attach to it. Finish those sessions, or run 'cline doctor fix' to stop the hub.`)}if(L==="failed"&&u.allowPortFallback!==!0&&g.port!==0)throw Error(`An incompatible Cline Hub is already running at ${b} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}let C=u.allowPortFallback===!0&&g.port!==0?{...g,port:0}:g;await u.beforeSpawn?.(),await BR(l,{...C,manageConnectors:u.manageConnectors});let N=Date.now()+Gg;while(Date.now()<N){let O=await Mr(i.discoveryPath);if(O?.url&&O.authToken){let D=await ao(O.url,O.authToken);if(D?.url&&Il(D)&&await Ls(D.url,{authToken:O.authToken}))return Dc(i.discoveryPath),I({url:D.url,authToken:O.authToken})}let L=await ao(b);if(L?.url&&!Il(L)){let D=Jg(L,O??T,b),U=await Uc(D,i.discoveryPath);if(U==="deferred_busy"&&O?.authToken&&await Ls(L.url,{authToken:O.authToken}))return I({url:L.url,authToken:O.authToken});if(U==="failed"&&u.allowPortFallback!==!0&&g.port!==0)throw Error(`An incompatible Cline Hub is still running at ${b} and could not be retired automatically. Run 'cline doctor fix' to stop stale hub daemons before starting a new hub.`)}await new Promise((D)=>setTimeout(D,AR))}throw Error(`Timed out after ${Gg}ms waiting for detached hub startup.`)}async function cu(i,l={}){let u=Sk();return await bk(u.discoveryPath,async()=>HR(u,i,l))}var zR=5000,WR=500;async function JY(i={}){let l=Sk(),u=i.workspaceRoot??process.cwd(),c=await Mr(l.discoveryPath),g=c?.url?await ao(c.url,c.authToken):void 0;if(!g?.url)return{outcome:"started",...await cu(u)};let b={...g,authToken:g.authToken??c?.authToken,pid:g.pid??c?.pid};if(sc(g).compatible)return{outcome:"already_current",url:g.url,authToken:b.authToken};if(Kh(Gh(),g)<=0)return{outcome:"hub_not_older",url:g.url,authToken:b.authToken};if(!await Ao(b.url,b.authToken,i.reason??"hub upgrade requested").catch(()=>!1))throw Error(`The running Cline Hub at ${b.url} did not accept a drain request, so it was not replaced. It is replaced automatically once idle when a Cline client next starts, or run 'cline doctor fix' to stop it now.`);let I=async()=>{await Ao(b.url,b.authToken,"hub upgrade aborted",{off:!0}).catch(()=>!1)},k=Date.now()+(i.waitForIdleMs??zR),T,E;for(;;){try{let A=await oc(b.url,b.authToken);if(T=A.activeSessionCount,E=(A.activePluginRequests??0)+(A.activeCloudCommands??0),T===0&&E===0)break}catch{}if(Date.now()>=k)break;await new Promise((A)=>setTimeout(A,WR))}if(!(T===0&&E===0)&&i.force!==!0)return await I(),{outcome:"still_busy",url:b.url,authToken:b.authToken,...T!==void 0?{activeSessionCount:T}:{}};if(!await ld(b,l.discoveryPath))throw await I(),Error(`The running Cline Hub at ${b.url} could not be stopped. Run 'cline doctor fix' to stop stale hub daemons, then try again.`);return{outcome:"replaced",...await cu(u),activeSessionCount:T??0}}function Yh(){return re()==="production"?ad():ra()}function KR(){let i=globalThis.WebSocket;if(!i)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return i}function GR(i){let l=new URL(i);l.protocol=i.protocol==="wss:"?"https:":"http:";let u=ya(l.toString());if(!u)return;return i.protocol==="wss:"?new mk.HttpsProxyAgent(u):new pk.HttpProxyAgent(u)}function Ak(i){if(typeof i==="string")return i;if(i instanceof Uint8Array)return Buffer.from(i).toString();if(i instanceof ArrayBuffer)return Buffer.from(i).toString();if(Array.isArray(i))return Buffer.concat(i.map((l)=>Buffer.from(l))).toString();if(i&&typeof i==="object"&&"data"in i&&typeof i.data<"u")return Ak(i.data);return String(i)}function XR(i){if(typeof i==="string")return i;if(i instanceof Uint8Array)return Buffer.from(i).toString("utf8");if(i instanceof ArrayBuffer)return Buffer.from(i).toString("utf8");return""}function Yg(i){let l=i,u=XR(l.reason);return new kt("hub_connection_closed",l.code||u?`Hub connection closed (code=${l.code??0}${u?`, reason=${u}`:""})`:gm,{closeCode:l.code,closeReason:u||void 0})}function Fc(i,l){if(i instanceof kt)return i;if(i instanceof Error)return new kt("hub_connect_failed",i.message);if(i&&typeof i==="object"&&"error"in i&&i.error instanceof Error)return new kt("hub_connect_failed",i.error.message);let u=i&&typeof i==="object"&&"message"in i&&typeof i.message==="string"?i.message.trim():"";if(u)return new kt("hub_connect_failed",u);let c=i&&typeof i==="object"&&"type"in i&&typeof i.type==="string"?i.type.trim():"";return new kt("hub_connect_failed",c?`Failed to connect to hub at ${l.toString()} (${c} event before socket open).`:`Failed to connect to hub at ${l.toString()}.`)}var qc="*",vd=8000,JR="cline-hub-auth.",Ck=new Map,xk=new Set,VR=3000,YR=3000,QR=100,gm="Hub connection closed",ZR=250,eP=5000,Qg=0.5;class kt extends Error{code;details;constructor(i,l,u){super(l);this.code=i,this.details=u,this.name="HubTransportError"}}function tP(i){return i instanceof kt}class Hl extends Error{command;code;constructor(i,l,u){super(u);this.command=i,this.code=l,this.name="HubCommandError"}}function VY(i,l){return i instanceof Hl&&i.code==="hub_command_timeout"&&(l===void 0||i.command===l)}function Qh(i,l={}){let u=i.searchParams.get("authToken")?.trim();if(i.searchParams.delete("authToken"),u)return u;if(l.skipRegistry)return;let c=Zh(i.toString());return c?Ck.get(c):void 0}function rP(i){try{let l=new URL(i).hostname.toLowerCase().replace(/^\[|\]$/g,"");return l==="localhost"||l==="127.0.0.1"||l==="::1"}catch{return!1}}function Zh(i){if(!rP(i))return;let l=new URL(pu(i));return l.search="",l.hash="",l.toString()}function ym(i){let l=Zh(i);return!!l&&xk.has(l)}function nc(i,l){let u=Zh(i);if(u){if(xk.add(u),l?.trim())Ck.set(u,l)}return i}class sa{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;lastEventSequenceByKey=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;connectGeneration=0;lastCloseError=new kt("hub_connection_closed",gm);sawSocketClose=!1;registered=!1;capabilities;constructor(i){if(this.options=i,i.authToken?.trim()&&i.resolveConnectionHeaders)throw Error("Hub connection headers cannot be combined with authToken authentication.");this.clientId=i.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=i.url,this.capabilities=[...i.capabilities??[]]}getClientId(){return this.clientId}getUrl(){return this.currentUrl}isConnected(){return this.socket?.readyState===1&&this.registered}getConnectionError(){return this.isConnected()?null:this.lastCloseError}async updateCapabilities(i){if(this.capabilities=i.map((l)=>({...l})),!this.registered)return;await this.command("client.update",{capabilities:this.capabilities})}async connect(){if(this.connectPromise)return this.connectPromise;if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let i=new URL(this.currentUrl),l=this.options.authToken?.trim()||Qh(i,{skipRegistry:Boolean(this.options.resolveConnectionHeaders)});if(i.hash="",l&&this.options.resolveConnectionHeaders)throw Error("Hub connection headers cannot be combined with authToken authentication.");let u=++this.connectGeneration,c=this.openSocket(i,l,u),g;this.connectPromise=c.then(async(I)=>{if(g=I,await this.commandOnce("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",capabilities:this.capabilities,metadata:{...this.options.metadata,version:this.options.clientVersion??String(jl.version),pid:process.pid},workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}},void 0,void 0,!1),u!==this.connectGeneration||this.closedByClient){try{I.close()}catch{}throw this.lastCloseError}this.registered=!0;for(let k of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(k));this.reconnectAttempt=0});let b=this.connectPromise;try{await b}catch(I){if(this.connectPromise===b)this.connectPromise=void 0;if(g&&this.socket===g){this.lastCloseError=Fc(I,i),this.registered=!1,this.sawSocketClose=!1,this.socket=void 0;try{g.close()}catch{}}if(!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect();throw I}}async openSocket(i,l,u){let c=this.options.resolveConnectionHeaders,g;if(c){let E;try{g=await Promise.race([Promise.resolve().then(()=>c()),new Promise((A,C)=>{E=setTimeout(()=>{C(new kt("hub_connect_timeout",`Timed out resolving hub connection headers after ${vd}ms`))},vd)})])}catch(A){let C=A instanceof kt?A:new kt("hub_connect_failed",A instanceof Error?A.message:String(A));if(u===this.connectGeneration)this.lastCloseError=C;throw C}finally{clearTimeout(E)}}if(u!==this.connectGeneration||this.closedByClient)throw this.lastCloseError;if(g&&Object.keys(g).some((E)=>E.toLowerCase()==="sec-websocket-protocol")){let E=new kt("hub_connect_failed","Hub connection headers cannot set Sec-WebSocket-Protocol.");if(u===this.connectGeneration)this.lastCloseError=E;throw E}let b;try{b=g?GR(i):void 0}catch(E){let A=Fc(E,i);if(u===this.connectGeneration)this.lastCloseError=A;throw A}let I=g?new xa(i.toString(),{headers:{...g},agent:b}):new(KR())(i.toString(),l?[`${JR}${l}`]:void 0);this.socket=I;let k=!1,T=new Promise((E,A)=>{let C=!1,N=setTimeout(()=>{if(C)return;C=!0,k=!0;let O=new kt("hub_connect_timeout",`Timed out connecting to hub after ${vd}ms`);if(this.socket===I)this.lastCloseError=O,this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{I.close()}catch{}A(O)},vd);I.addEventListener("open",()=>{if(C)return;C=!0,clearTimeout(N),E()}),I.addEventListener("error",(O)=>{if(C)return;C=!0,clearTimeout(N);let L=Fc(O,i);if(this.socket===I)this.lastCloseError=L,this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;A(L)}),I.addEventListener("close",(O)=>{if(C)return;C=!0,clearTimeout(N);let L=k?this.lastCloseError:Yg(O);if(this.socket===I){if(!k)this.lastCloseError=L,this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0}A(L)})});return I.addEventListener("message",(E)=>{this.handleFrame(JSON.parse(Ak(E)))}),I.addEventListener("close",(E)=>{if(this.socket!==I)return;if(!k)this.lastCloseError=Yg(E),this.sawSocketClose=!0;this.registered=!1;for(let A of this.pendingReplies.values())A.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await T,I}subscribe(i,l){let u=l?.sessionId?.trim()||void 0,c={listener:i,sessionId:u};return this.listeners.add(c),this.adjustSubscriptionCount(u,1),()=>{if(!this.listeners.delete(c))return;this.adjustSubscriptionCount(u,-1)}}async command(i,l,u,c){let g=0,b=!1,I={...c,onDispatch:(T)=>{b=!0,c?.onDispatch?.(T)}},k=i!=="client.register"&&i!=="client.unregister";while(!0)try{return await this.commandOnce(i,l,u,I)}catch(T){if(!k||b&&c?.retryAfterDispatch===!1||g>=1||!await this.recoverLocalHubTransport(T))throw T;g+=1}}async commandOnce(i,l,u,c,g=!0){if(g)await this.connect();c?.beforeDispatch?.();let b=P("hubreq_");c?.onDispatch?.(b);let I=ei(i,c?.timeoutMs),k=new Promise((E,A)=>{let C=I===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(b))return;A(new Hl(i,"hub_command_timeout",`Hub command ${i} timed out after ${I}ms (hub=${this.currentUrl}, requestId=${b}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},I);this.pendingReplies.set(b,{resolve:(N)=>{if(C)clearTimeout(C);E(N)},reject:(N)=>{if(C)clearTimeout(C);A(N)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:i,requestId:b,clientId:this.clientId,sessionId:u,timeoutMs:I,payload:l}})}catch(E){throw this.pendingReplies.delete(b),E}let T=await k;if(!T.ok){if(T.error?.code===zh){let E=u??(typeof l?.sessionId==="string"?l.sessionId:void 0);throw new tc(E,T.error.message)}throw new Hl(i,T.error?.code,T.error?.message??`Hub command ${i} failed`)}return T}async recoverLocalHubTransport(i){if(!ym(this.currentUrl)||!tP(i))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let l=await wm({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!l)return!1;return this.currentUrl=l,this.close(),!0})().finally(()=>{this.recoveryPromise=void 0}),await this.recoveryPromise}hasActiveSubscriptions(){return this.subscriptionCounts.size>0}clearReconnectTimer(){if(!this.reconnectTimer)return;clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0}scheduleReconnect(){if(this.reconnectTimer||this.closedByClient||!this.hasActiveSubscriptions())return;let i=Math.min(ZR*2**this.reconnectAttempt,eP),l=Math.round(i*(1-Qg)+Math.random()*i*Qg);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},l)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!ym(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let i=await wm({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd});if(i){this.currentUrl=i,await this.connect(),this.reconnectAttempt=0;return}}catch{}this.reconnectAttempt+=1,this.scheduleReconnect()}}close(){let i=this.socket;if(this.closedByClient=!0,this.connectGeneration+=1,this.clearReconnectTimer(),this.registered=!1,i)this.lastCloseError=new kt("hub_connection_closed",gm);for(let l of this.pendingReplies.values())l.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,!i)return;this.sawSocketClose=!1,this.socket=void 0;try{i.close()}catch{}}async dispose(){if(this.socket?.readyState===1&&this.registered)try{await this.command("client.unregister",void 0,void 0,{timeoutMs:2000})}catch{}this.close()}sendFrame(i){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new kt("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify(i))}sendSubscriptionFrame(i,l){let u=i==="stream.subscribe"?this.lastEventSequenceByKey.get(this.subscriptionKeyForSessionId(l)):void 0;this.sendFrame({kind:i,clientId:this.clientId,...l?{sessionId:l}:{},...u!==void 0?{sinceSequence:u}:{}})}adjustSubscriptionCount(i,l){let u=this.subscriptionKeyForSessionId(i),c=(this.subscriptionCounts.get(u)??0)+l;if(c<=0){if(this.subscriptionCounts.delete(u),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(l<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",i);return}if(this.subscriptionCounts.set(u,c),l>0&&c===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",i)}subscriptionKeyForSessionId(i){return i??qc}subscriptionSessionIdFromKey(i){return i===qc?void 0:i}handleFrame(i){switch(i.kind){case"reply":{let l=i.envelope.requestId;if(!l)return;let u=this.pendingReplies.get(l);if(!u)return;this.pendingReplies.delete(l),u.resolve(i.envelope);return}case"event":{let l=i.envelope.sequence;if(typeof l==="number"){let u=i.envelope.sessionId?.trim();for(let c of[qc,u]){if(!c||!this.subscriptionCounts.has(c))continue;let g=this.lastEventSequenceByKey.get(c)??0;if(l>g)this.lastEventSequenceByKey.set(c,l)}}for(let u of this.listeners){if(u.sessionId&&u.sessionId!==i.envelope.sessionId?.trim())continue;u.listener(i.envelope)}return}case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function pu(i){let l=new URL(i);if(l.protocol==="http:")l.protocol="ws:";else if(l.protocol==="https:")l.protocol="wss:";return l.toString()}async function Ls(i,l){let u=new sa({url:i,authToken:l?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:l?.workspaceRoot,cwd:l?.cwd});try{return await u.connect(),!0}catch{return!1}finally{u.close()}}async function vm(i,l){let u=pu(i),c=await od(u,{authToken:l?.authToken});if(!c)return{status:"unreachable",url:u};if(l?.requireCurrentBuild){let g=Qo(),b=sc(c,g);if(!b.compatible&&!Xh(c))return{status:b.reason==="unsupported_protocol"?"protocol_mismatch":"build_mismatch",url:u}}else if(!Mt(c).compatible)return{status:"protocol_mismatch",url:u};if(l?.verifyConnection===!0&&!await Ls(u,{workspaceRoot:l.workspaceRoot,cwd:l.cwd,authToken:l.authToken}))return{status:"unreachable",url:u};return{status:"compatible",url:u}}async function sP(i){let l=Date.now()+YR;while(Date.now()<l){if(!(await od(i).catch(()=>{return}))?.url)return!0;await new Promise((u)=>setTimeout(u,QR))}return!1}function iP(i,l){try{return pu(i)===pu(l)}catch{return!1}}function Rk(i){let l=i&&typeof i==="object"&&Array.isArray(i.sessions)?i.sessions:[],u=0,c=new Set;for(let b of l){if(!b||typeof b!=="object")continue;let I=b.participants;if(!Array.isArray(I)||I.length===0)continue;u+=1;for(let k of I){let T=k&&typeof k==="object"?k.clientId:void 0;if(typeof T==="string"&&T.trim())c.add(T)}}let g=(b)=>{let I=i&&typeof i==="object"?i[b]:void 0;return typeof I==="number"&&Number.isInteger(I)&&I>0?I:0};return{activeSessionCount:u,participantClientCount:c.size,activePluginRequests:g("activePluginRequests"),activeCloudCommands:g("activeCloudCommands")}}function YY(i){let l=Rk(i);return l.activeSessionCount>0||l.activePluginRequests>0||l.activeCloudCommands>0}async function oc(i,l,u){let c=new sa({url:i,authToken:l,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:u?.workspaceRoot,cwd:u?.cwd});try{let g=await c.command("session.list",{limit:500},void 0,{timeoutMs:VR});return Rk(g.payload)}finally{await c.dispose().catch(()=>{return})}}async function Pk(i,l,u){try{let c=await oc(i,l,u);return c.activeSessionCount===0&&c.activePluginRequests===0&&c.activeCloudCommands===0}catch{return!1}}async function nP(i,l){let u=`${i.discoveryPath}.superseded`,c=await Mr(u);if(!c?.url||!c.authToken)return;let g=await vm(c.url,{authToken:c.authToken});if(g.status!=="compatible")return;if(await Pk(g.url,c.authToken,l))return;return nc(g.url,c.authToken)}async function oP(i={}){if(i.endpoint?.trim()){let g=await vm(i.endpoint);return g.status==="compatible"?g.url:void 0}let l=Yh(),u=await Mr(l.discoveryPath);if(!u?.url)return await nP(l,i);let c=await vm(u.url,{authToken:u.authToken,requireCurrentBuild:!0});if(c.status==="compatible")return nc(c.url,u.authToken);if(c.status==="protocol_mismatch")await ea(l.discoveryPath).catch(()=>{return});return}async function wm(i={}){let l=await oP(i);if(l&&await Ls(l,{workspaceRoot:i.workspaceRoot,cwd:i.cwd}))return l;if(i.endpoint?.trim())return;try{return(await cu(i.workspaceRoot??process.cwd())).url}catch(u){i.onStartupError?.(u);return}}async function Ao(i,l,u,c){Xe();let g=new URL(i),b=l?.trim()||Qh(g);if(g.protocol==="ws:")g.protocol="http:";else if(g.protocol==="wss:")g.protocol="https:";if(g.pathname="/drain",g.hash="",u)g.searchParams.set("reason",u);if(c?.off)g.searchParams.set("off","1");return(await fetch(g,{method:"POST",headers:b?{authorization:`Bearer ${b}`}:void 0})).ok}async function Mk(i,l){Xe();let u=new URL(i),c=l?.trim()||Qh(u);if(u.protocol==="ws:")u.protocol="http:";else if(u.protocol==="wss:")u.protocol="https:";return u.pathname="/shutdown",u.hash="",(await fetch(u,{method:"POST",headers:c?{authorization:`Bearer ${c}`}:void 0})).ok}async function aP(i=Yh()){let l=await Mr(i.discoveryPath,{onError:"throw"});if(!l?.url)return!1;try{if(await Mk(l.url,l.authToken))return!0}catch{}return!1}async function QY(i){if(!ym(i.url))return;let l=Yh(),u=await Mr(l.discoveryPath);if(!u?.url||!iP(u.url,i.url))return;if(!await Pk(u.url,u.authToken,{workspaceRoot:i.workspaceRoot,cwd:i.cwd}))return;if(!await aP())return;if(!await sP(u.url))return;return await ea(l.discoveryPath).catch(()=>{return}),await wm({workspaceRoot:i.workspaceRoot,cwd:i.cwd})}function lP(i,l){if(i instanceof Error)return i;if(i&&typeof i==="object"&&"message"in i&&typeof i.message==="string"&&i.message.trim())return Error(i.message.trim());let u=i&&typeof i==="object"&&"type"in i&&typeof i.type==="string"?i.type.trim():"";return Error(u?`Failed to connect to hub at ${l} (${u} event before socket open).`:`Failed to connect to hub at ${l}.`)}var dP="cline-hub-auth.";function uP(i){return i.host!==void 0||i.port!==void 0||i.pathname!==void 0}function cP(i,l){let u=new URL(i),c=new URL(l);return u.search="",u.hash="",c.search="",c.hash="",u.toString()===c.toString()}function Nk(){return re()==="production"?ad():ra()}async function pP(i){let l=i.searchParams.get("authToken")?.trim();if(i.searchParams.delete("authToken"),l)return l;let u=Nk(),c=await Mr(u.discoveryPath);if(c?.url&&cP(i.toString(),c.url))return c.authToken;return}async function mP(i={}){let l=ic(i);if(!uP(i)){let u=Nk(),c=await Mr(u.discoveryPath);if(c?.url)return c.url}return Do(l.host,l.port,l.pathname)}async function Ok(i){return await new Promise((l,u)=>{(async()=>{let c=new URL(i),g=await pP(c);c.hash="";let b=new WebSocket(c.toString(),g?[`${dP}${g}`]:void 0),I=new Map,k=0;b.addEventListener("open",()=>{l({send(T){let E=T.requestId??`hub-client-${++k}`;return new Promise((A,C)=>{I.set(E,{resolve:A,reject:C});let N={kind:"command",envelope:{...T,requestId:E}};b.send(JSON.stringify(N))})},close(){b.close()}})}),b.addEventListener("message",(T)=>{let E=JSON.parse(String(T.data));if(E.kind==="reply"&&E.envelope.requestId){let A=I.get(E.envelope.requestId);if(A)I.delete(E.envelope.requestId),A.resolve(E.envelope)}}),b.addEventListener("close",()=>{for(let T of I.values())T.reject(Error("Hub connection closed"));I.clear()}),b.addEventListener("error",(T)=>{u(lP(T,i))})})().catch(u)})}async function eQ(i){try{return(await Ok(i)).close(),!0}catch{return!1}}async function tQ(i,l){let u=await mP(i),c=await Ok(u);try{return await c.send({version:l.version??"v1",clientId:l.clientId??"hub-client",...l})}finally{c.close()}}var fP=1e4,gP="CLINE_HUB_BUILD_WATCH_INTERVAL_MS";function yP(){let i=Number(process.env[gP]);return Number.isFinite(i)&&i>0?i:fP}async function vP(i,l){try{let u=await oc(i.url,l);return{...i,activeSessionCount:u.activeSessionCount,participantClientCount:u.participantClientCount,activePluginRequests:u.activePluginRequests}}catch{return i}}function wP(){return re()==="production"?ad():ra()}function bP(i){try{return hP(`${i}.lock`)}catch{return!1}}async function IP(){let i=wP();if(bP(i.discoveryPath))return;let l=await Mr(i.discoveryPath).catch(()=>{return});if(!l?.url)return;let u=await od(l.url).catch(()=>{return});if(!u?.url)return;let c=Qo(),g=sc(u,c);if(g.compatible)return;let b=(k)=>({url:u.url,reason:k,hubBuildId:u.buildId,hubCoreVersion:u.coreVersion,expectedBuildId:c});if(g.reason==="unsupported_protocol")return b("unsupported_protocol");let I=Gh();if(I.coreVersion&&u.coreVersion&&I.coreVersion===u.coreVersion)return;if(Kh(I,u)>0)return await vP(b("outdated_hub"),l.authToken);return b("build_mismatch")}function iQ(i){if(zt()||process.env.CLINE_HUB_PORT?.trim())return()=>{};let l=i.intervalMs??yP(),u,c,g=!1,b=setInterval(()=>{if(g)return;g=!0,IP().then((I)=>{if(!I){u=void 0,c=void 0;return}let k=`${I.reason}:${I.hubBuildId??""}`;if(k===u)return;if(I.reason==="outdated_hub"&&c!==k){c=k;return}c=void 0,u=k,i.onMismatch(I)}).catch(()=>{return}).finally(()=>{g=!1})},l);return b.unref?.(),()=>{clearInterval(b)}}async function Zg(i,l,u,c,g){try{return await i.command(l,u,c,g)}catch(b){if(b instanceof Hl&&b.code==="unsupported_command")return;throw b}}function kP(i){return{async list(l){let u=await Zg(i,"plugins.commands.list",{...l},l.sessionId,{timeoutMs:null});if(!u)return{...l,status:"ready",commands:[]};if(!u.ok)throw Error(u.error?.message??"Plugin command discovery failed");return u.payload?.catalog},async run(l){let u=await Zg(i,"plugins.commands.run",{...l},l.sessionId,{timeoutMs:null,retryAfterDispatch:!1});if(!u)return;if(!u.ok)throw Error(u.error?.message??"Plugin command execution failed");return u.payload?.result}}}function ef(i){return i?JSON.parse(JSON.stringify(i)):{}}function wd(i){let l=i?.session&&typeof i.session==="object"?i.session:void 0;if(!l)return;let u=l.metadata&&typeof l.metadata==="object"?ef(l.metadata):void 0;return{sessionId:typeof l.sessionId==="string"?l.sessionId:"",parentSessionId:typeof u?.parentSessionId==="string"?u.parentSessionId:void 0,status:typeof l.status==="string"?l.status:void 0,messagesPath:typeof u?.messagesPath==="string"?u.messagesPath:void 0,metadata:u}}function ey(i,l){return i.error?.message??`hub command failed: ${l}`}function SP(i){let l=ef(i);if(typeof l.error==="string"&&l.error.trim())return{...l,error:l.error.trim()};let u=l.result&&typeof l.result==="object"?l.result:void 0;if(typeof u?.text==="string"&&u.text.trim())return{...l,error:u.text.trim()};let c=u?.error&&typeof u.error==="object"?u.error:void 0;if(typeof c?.message==="string"&&c.message.trim())return{...l,error:c.message.trim()};return l}function ty(i){let l=i?.sessionId;return typeof l==="string"&&l.trim()?l.trim():void 0}function TP(i){let l=i?.checkpoint;if(!l||typeof l!=="object"||Array.isArray(l))throw Error("hub checkpoint restore returned no checkpoint");let u=l;if(typeof u.ref!=="string"||typeof u.createdAt!=="number"||typeof u.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return u}function _P(i){let l=ef(i.payload);if(i.event==="schedule.execution_completed")return{sessionId:i.sessionId?.trim()||ty(l)||"",eventType:"schedule.execution.completed",payload:l};if(i.event==="schedule.execution_failed")return{sessionId:i.sessionId?.trim()||ty(l)||"",eventType:"schedule.execution.failed",payload:l};let u=i.sessionId?.trim();if(!u)return;switch(i.event){case"iteration.started":return{sessionId:u,eventType:"runtime.chat.iteration_start",payload:l};case"iteration.finished":return{sessionId:u,eventType:"runtime.chat.iteration_end",payload:l};case"assistant.delta":return{sessionId:u,eventType:"runtime.chat.text_delta",payload:l};case"assistant.media":return{sessionId:u,eventType:"runtime.chat.media",payload:l};case"usage.updated":return{sessionId:u,eventType:"runtime.chat.usage",payload:l};case"session.notice":return{sessionId:u,eventType:"runtime.chat.notice",payload:l};case"tool.started":return{sessionId:u,eventType:"runtime.chat.tool_call_start",payload:l};case"tool.updated":return{sessionId:u,eventType:"runtime.chat.tool_call_update",payload:l};case"tool.finished":return{sessionId:u,eventType:"runtime.chat.tool_call_end",payload:l};case"approval.requested":return{sessionId:u,eventType:"approval.requested",payload:l};case"run.aborted":return{sessionId:u,eventType:"runtime.chat.aborted",payload:l};case"run.failed":return{sessionId:u,eventType:"runtime.chat.failed",payload:SP(i.payload)};case"run.completed":return{sessionId:u,eventType:"runtime.chat.completed",payload:l};default:return}}class EP{client;pluginCommands;constructor(i){this.client=new sa({url:i.address,authToken:i.authToken,clientId:i.clientId,clientType:i.clientType??"hub-session-client",displayName:i.displayName??"hub session client",workspaceRoot:i.workspaceRoot,cwd:i.cwd,metadata:i.metadata}),this.pluginCommands=kP(this.client)}async connect(){await this.client.connect()}async taskCommand(i,l){return await this.client.connect(),(await this.client.command(i,l)).payload??{}}close(){this.client.close()}async dispose(){await this.client.dispose()}async startRuntimeSession(i){await this.client.connect();let l=await this.client.command("session.create",{workspaceRoot:i.workspaceRoot,cwd:i.cwd,sessionConfig:{providerId:i.provider,modelId:i.model,apiKey:i.apiKey,cwd:i.cwd??i.workspaceRoot,workspaceRoot:i.workspaceRoot,systemPrompt:i.systemPrompt??"",mode:i.mode??"act",rules:i.rules,maxIterations:i.maxIterations,timeoutSeconds:i.timeoutSeconds,enableTools:i.enableTools,enableSpawnAgent:i.enableSpawn!==!1,enableAgentTeams:i.enableTeams!==!1,disableMcpSettingsTools:i.disableMcpSettingsTools,agentPluginPaths:i.agentPluginPaths,missionLogIntervalSteps:i.missionStepInterval,missionLogIntervalMs:i.missionTimeIntervalMs},metadata:{source:i.source??"cli",provider:i.provider,model:i.model,enableTools:i.enableTools,enableSpawn:i.enableSpawn,enableTeams:i.enableTeams,prompt:void 0,interactive:i.interactive!==!1},runtimeOptions:{mode:i.mode,systemPrompt:i.systemPrompt,maxIterations:i.maxIterations,timeoutSeconds:i.timeoutSeconds,enableTools:i.enableTools,enableSpawn:i.enableSpawn,enableTeams:i.enableTeams,autoApproveTools:i.autoApproveTools,toolExecutors:i.toolExecutors,configExtensions:i.configExtensions},modelSelection:{provider:i.provider,model:i.model,apiKey:i.apiKey},toolPolicies:i.toolPolicies,...i.plugins?{plugins:i.plugins}:{}}),u=wd(l.payload);if(!u?.sessionId)throw Error("hub session create returned no session id");let c=Array.isArray(l.payload?.pluginIssues)?l.payload.pluginIssues:void 0;return{sessionId:u.sessionId,startResult:{sessionId:u.sessionId,manifestPath:"",messagesPath:u.messagesPath??""},...c?.length?{pluginIssues:c}:{}}}async sendRuntimeSession(i,l,u){return await this.client.connect(),{result:(await this.client.command("session.send_input",{prompt:l.prompt,mode:l.config.mode,attachments:l.attachments,delivery:l.delivery,timeoutSeconds:l.config.timeoutSeconds},i,u)).payload?.result}}async stopRuntimeSession(i){return await this.client.connect(),await this.client.command("session.detach",{sessionId:i},i),{applied:!0}}async abortRuntimeSession(i){return await this.client.connect(),await this.client.command("run.abort",{sessionId:i},i),{applied:!0}}async updateSession(i){return await this.client.connect(),await this.client.command("session.update",{sessionId:i.sessionId,metadata:i.metadata},i.sessionId),{updated:!0}}async getSession(i){await this.client.connect();let l;try{l=await this.client.command("session.get",void 0,i)}catch(u){if(Bl(u))return;throw u}return wd(l.payload)}async readMessages(i){let l=i.trim();if(!l)return[];await this.client.connect();let u=await this.client.command("session.messages",{sessionId:l},l);if(!u.ok)throw Error(ey(u,"session.messages"));let c=u.payload?.messages;return Array.isArray(c)?c:[]}async restore(i){let l=i.sessionId.trim();if(!l)throw Error("sessionId is required");let u=i.restore?.messages!==!1;if(u&&!i.config)throw Error("config is required when restore.messages is true");await this.client.connect();let c=i.config,g=await this.client.command("session.restore",{sessionId:l,checkpointRunCount:i.checkpointRunCount,restore:i.restore,...c?{workspaceRoot:c.workspaceRoot,cwd:c.cwd,sessionConfig:{providerId:c.provider,modelId:c.model,apiKey:c.apiKey,cwd:c.cwd??c.workspaceRoot,workspaceRoot:c.workspaceRoot,systemPrompt:c.systemPrompt??"",mode:c.mode??"act",rules:c.rules,maxIterations:c.maxIterations,enableTools:c.enableTools,enableSpawnAgent:c.enableSpawn!==!1,enableAgentTeams:c.enableTeams!==!1,disableMcpSettingsTools:c.disableMcpSettingsTools,agentPluginPaths:c.agentPluginPaths,missionLogIntervalSteps:c.missionStepInterval,missionLogIntervalMs:c.missionTimeIntervalMs},metadata:{source:c.source??"cli",provider:c.provider,model:c.model,enableTools:c.enableTools,enableSpawn:c.enableSpawn,enableTeams:c.enableTeams,prompt:void 0,interactive:c.interactive!==!1},runtimeOptions:{mode:c.mode,systemPrompt:c.systemPrompt,maxIterations:c.maxIterations,enableTools:c.enableTools,enableSpawn:c.enableSpawn,enableTeams:c.enableTeams,autoApproveTools:c.autoApproveTools,configExtensions:c.configExtensions},modelSelection:{provider:c.provider,model:c.model,apiKey:c.apiKey},toolPolicies:c.toolPolicies,...c.plugins?{plugins:c.plugins}:{}}:{}},l);if(!g.ok)throw Error(ey(g,"session.restore"));let b=wd(g.payload);if(u&&!b?.sessionId)throw Error("hub checkpoint restore returned no session id");let I=Array.isArray(g.payload?.messages)?g.payload.messages:void 0,k=TP(g.payload);return{sessionId:b?.sessionId,startResult:b?.sessionId?{sessionId:b.sessionId,manifestPath:"",messagesPath:b.messagesPath??""}:void 0,...I?{messages:I}:{},checkpoint:k}}async listSessions(i){await this.client.connect();let l=await this.client.command("session.list",{limit:i?.limit??200});return(Array.isArray(l.payload?.sessions)?l.payload?.sessions:[]).map((u)=>wd({session:u})).filter((u)=>Boolean(u?.sessionId))}async searchSessions(i){await this.client.connect();let l=await this.client.command("session.search",i);return Array.isArray(l.payload?.hits)?l.payload.hits:[]}async deleteSession(i,l=!0){return await this.client.connect(),(await this.client.command("session.delete",{sessionId:i,deleteCheckpointRefs:l})).payload?.deleted===!0}async respondToolApproval(i){await this.client.connect(),await this.client.command("approval.respond",{approvalId:i.approvalId,approved:i.approved,payload:i.reason?{reason:i.reason}:void 0,responderClientId:i.responderClientId})}streamEvents(i,l){let u=new Set((i.sessionIds??[]).map((g)=>g.trim()).filter(Boolean)),c=this.client.subscribe((g)=>{let b=_P(g);if(!b)return;if(u.size>0&&!u.has(b.sessionId))return;l.onEvent?.(b)});return this.client.connect().catch((g)=>{l.onError?.(g instanceof Error?g:Error(String(g)))}),c}streamTeamProgress(i,l){let u=this.client.subscribe((c)=>{if(c.event!=="team.progress"||!c.payload)return;l.onProjection?.(c.payload)});return this.client.connect().catch((c)=>{l.onError?.(c instanceof Error?c:Error(String(c)))}),u}async createSchedule(i){return await this.client.connect(),(await this.client.command("schedule.create",i)).payload?.schedule}async listSchedules(i){await this.client.connect();let l=await this.client.command("schedule.list");return Array.isArray(l.payload?.schedules)?l.payload?.schedules:[]}async getSchedule(i){return await this.client.connect(),(await this.client.command("schedule.get",{scheduleId:i})).payload?.schedule}async updateSchedule(i,l){return await this.client.connect(),(await this.client.command("schedule.update",{scheduleId:i,...l})).payload?.schedule}async pauseSchedule(i){return await this.client.connect(),(await this.client.command("schedule.disable",{scheduleId:i})).payload?.schedule}async resumeSchedule(i){return await this.client.connect(),(await this.client.command("schedule.enable",{scheduleId:i})).payload?.schedule}async deleteSchedule(i){return await this.client.connect(),(await this.client.command("schedule.delete",{scheduleId:i})).payload?.deleted===!0}async triggerScheduleNow(i){return await this.client.connect(),(await this.client.command("schedule.trigger",{scheduleId:i})).payload?.execution}async listScheduleExecutions(i,l){await this.client.connect();let u=await this.client.command("schedule.list_executions",{scheduleId:i,limit:l});return Array.isArray(u.payload?.executions)?u.payload?.executions:[]}async getScheduleStats(){return await this.client.connect(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.client.connect();let i=await this.client.command("schedule.active");return Array.isArray(i.payload?.executions)?i.payload?.executions:[]}async getUpcomingScheduledRuns(i){await this.client.connect();let l=await this.client.command("schedule.upcoming",{limit:i});return Array.isArray(l.payload?.upcoming)?l.payload?.upcoming:[]}async createTask(i){return(await this.taskCommand("task.create",i)).task}async listTasks(i={}){let l=await this.taskCommand("task.list",i);return Array.isArray(l.tasks)?l.tasks:[]}async getTask(i){return(await this.taskCommand("task.get",{taskId:i})).task}async updateTask(i){return(await this.taskCommand("task.update",i)).task}async approveTask(i,l){return(await this.taskCommand("task.approve",{taskId:i,expectedRevision:l})).task}async cancelTask(i,l,u){return(await this.taskCommand("task.cancel",{taskId:i,reason:u,expectedRevision:l})).task}async runTask(i,l){return await this.taskCommand("task.run",{taskId:i,expectedRevision:l})}async getTaskAutomation(){return(await this.taskCommand("task.automation.get",{})).policy}async setTaskAutomation(i){return(await this.taskCommand("task.automation.set",{policy:i})).policy}}class AP{client;constructor(i){this.client=new sa({url:i.address,authToken:i.authToken,clientId:i.clientId,clientType:i.clientType??"hub-ui-client",displayName:i.displayName??"hub ui client"})}async connect(){await this.client.connect()}close(){this.client.close()}async dispose(){await this.client.dispose()}getClientId(){return this.client.getClientId()}async sendNotify(i){await this.client.command("ui.notify",i)}async sendShowWindow(i){await this.client.command("ui.show_window",i??{})}async listClients(){let i=await this.client.command("client.list");return Array.isArray(i.payload?.clients)?i.payload.clients:[]}async listSessions(i=200){let l=await this.client.command("session.list",{limit:i});return Array.isArray(l.payload?.sessions)?l.payload.sessions:[]}async searchSessions(i){let l=await this.client.command("session.search",i);return Array.isArray(l.payload?.hits)?l.payload.hits:[]}async toggleSetting(i){let l=await this.client.command("settings.toggle",i);if(!l.ok)throw Error(l.error?.message??"settings.toggle failed");return l.payload}subscribeUI(i){return this.client.subscribe((l)=>{switch(l.event){case"ui.notify":i.onNotify?.(l.payload);break;case"ui.show_window":i.onShowWindow?.(l.payload);break;case"hub.client.registered":i.onClientRegistered?.(l.payload??{});break;case"hub.client.disconnected":i.onClientDisconnected?.(l.payload??{});break;case"session.created":i.onSessionCreated?.(l.payload??{});break;case"session.updated":i.onSessionUpdated?.(l.payload??{});break;case"session.detached":i.onSessionDetached?.(l.payload??{});break}})}}var MP;function Us(i){if(typeof i!=="string"||i.length===0)return"unset";return PP("sha256").update(i).digest("hex").slice(0,8)}function lt(i){try{MP?.debug(i)}catch{}}function NP(){let i;return{promise:new Promise((l)=>{i=l}),resolve:i}}async function tf(i){let l=await import("node:http"),u=i.host??"127.0.0.1",c=i.timeoutMs??300000,g=i.successHtml??OP,b=NP(),I=!1,k=null,T=null,E=null,A=(O)=>{if(I)return;I=!0,b.resolve(O)},C=()=>{if(k)clearTimeout(k),k=null;let O=E;if(E=null,T)T.close(),T.closeAllConnections?.(),T=null;if(O!==null&&i.onClose)Promise.resolve(i.onClose({host:u,port:O})).catch(()=>{})},N=async()=>(k=setTimeout(()=>{C(),A(null)},c),b.promise);for(let O of i.ports){let L=l.createServer((U,F)=>{try{let j=new URL(U.url||"",`http://${u}:${O}`);if(j.pathname!==i.callbackPath){F.statusCode=404,F.end("Not found");return}let H={url:j,code:j.searchParams.get("code")??void 0,state:j.searchParams.get("state")??void 0,provider:j.searchParams.get("provider")??void 0,error:j.searchParams.get("error")??void 0};if(H.error){F.statusCode=400,F.end(`Authentication failed: ${H.error}`),C(),A(H);return}if(!H.code){F.statusCode=400,F.end("Missing authorization code");return}if(i.expectedState&&H.state!==i.expectedState){F.statusCode=400,F.end("State mismatch");return}F.statusCode=200,F.setHeader("Content-Type","text/html; charset=utf-8"),F.end(g),C(),A(H)}catch{F.statusCode=500,F.end("Internal error")}}),D=await new Promise((U)=>{let F=(j)=>{L.off("error",F),U({bound:!1,error:j})};L.once("error",F),L.listen(O,u,()=>{L.off("error",F),T=L,U({bound:!0})})});if(D.error){if(D.error.code==="EADDRINUSE")continue;throw C(),D.error}if(D.bound){E=O;let U=`http://${u}:${O}${i.callbackPath}`;if(i.onListening)await Promise.resolve(i.onListening({host:u,port:O,callbackUrl:U})).catch(()=>{});return{callbackUrl:U,waitForCallback:N,cancelWait:()=>{C(),A(null)},close:()=>{C(),A(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var OP=`<!DOCTYPE html>
322
+ <html lang="en">
323
+ <head>
324
+ <meta charset="utf-8">
325
+ <meta name="viewport" content="width=device-width, initial-scale=1">
326
+ <title>Authentication Successful</title>
327
+ <style>
328
+ * { margin: 0; padding: 0; box-sizing: border-box; }
329
+ body {
330
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
331
+ min-height: 100vh;
332
+ display: flex;
333
+ align-items: center;
334
+ justify-content: center;
335
+ background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
336
+ color: #fff;
337
+ }
338
+ .container { text-align: center; padding: 48px; max-width: 420px; }
339
+ .icon {
340
+ width: 72px; height: 72px; margin: 0 auto 24px;
341
+ background: linear-gradient(135deg, #10a37f 0%, #1a7f64 100%);
342
+ border-radius: 50%;
343
+ display: flex; align-items: center; justify-content: center;
344
+ }
345
+ .icon svg { width: 36px; height: 36px; stroke: #fff; stroke-width: 3; fill: none; }
346
+ h1 { font-size: 24px; font-weight: 600; margin-bottom: 12px; }
347
+ p { font-size: 15px; color: rgba(255,255,255,0.7); line-height: 1.5; }
348
+ .closing { margin-top: 32px; font-size: 13px; color: rgba(255,255,255,0.5); }
349
+ </style>
350
+ </head>
351
+ <body>
352
+ <div class="container">
353
+ <div class="icon">
354
+ <svg viewBox="0 0 24 24"><polyline points="20 6 9 17 4 12"></polyline></svg>
355
+ </div>
356
+ <h1>Authentication Successful</h1>
357
+ <p>You're now signed in. You can close this window.</p>
358
+ <p class="closing">This window will close automatically...</p>
359
+ </div>
360
+ <script>setTimeout(() => window.close(), 3000);</script>
361
+ </body>
362
+ </html>`;function $k(i){let l="";for(let u=0;u<i.length;u+=1)l+=String.fromCharCode(i[u]??0);return btoa(l).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function $P(i){let l=new TextEncoder().encode(i),u=await crypto.subtle.digest("SHA-256",l);return new Uint8Array(u)}function LP(i=32){let l=new Uint8Array(i);return crypto.getRandomValues(l),$k(l)}async function Lk(){let i=LP(),l=$k(await $P(i));return{verifier:i,challenge:l}}function rf(i){return i.endsWith("/")?i.slice(0,-1):i}function ia(i,l){return new URL(l,`${rf(i)}/`).toString()}function mu(i,l={}){let u=i.trim();if(!u)return{};try{let c=new URL(u);return{code:c.searchParams.get("code")??void 0,state:c.searchParams.get("state")??void 0,provider:l.includeProvider?c.searchParams.get("provider")??void 0:void 0}}catch{}if(l.allowHashCodeState&&u.includes("#")){let[c,g]=u.split("#",2);return{code:c||void 0,state:g||void 0}}if(u.includes("code=")){let c=new URLSearchParams(u);return{code:c.get("code")??void 0,state:c.get("state")??void 0,provider:l.includeProvider?c.get("provider")??void 0:void 0}}return{code:u}}function ac(i){try{let l=JSON.parse(i),u=l.error,c=typeof u==="string"?u:u&&typeof u==="object"&&typeof u.type==="string"?u.type:void 0,g=typeof l.error_description==="string"?l.error_description:typeof l.message==="string"?l.message:u&&typeof u==="object"&&typeof u.message==="string"?u.message:void 0;return{code:c,message:g}}catch{return{}}}function sf(i,l){return Date.now()>=i.expires-l}async function nf(i){if(!i.onManualCodeInput){let b=await i.waitForCallback();return{code:b?.code,state:b?.state,provider:b?.provider,error:b?.error}}let l,u,c=i.onManualCodeInput().then((b)=>{l=b,i.cancelWait()}).catch((b)=>{u=b instanceof Error?b:Error(String(b)),i.cancelWait()}),g=await i.waitForCallback();if(u)throw u;if(g?.code||g?.error)return{code:g.code,state:g.state,provider:g.provider,error:g.error};if(l)return mu(l,i.parseOptions);if(await c,u)throw u;if(l)return mu(l,i.parseOptions);return{}}var lc={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},Dk={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},Uk="https://api.workos.com",DP="/auth",sy=Array.from({length:11},(i,l)=>48801+l),UP=300000,FP=30000,dd=30000,qP=300,jP=5;class Wr extends Error{status;errorCode;requestId;constructor(i,l){super(i);this.name="ClineOAuthTokenError",this.status=l?.status,this.errorCode=l?.errorCode,this.requestId=l?.requestId}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid|expired|revoked|unauthorized/i.test(this.message);return!1}}function BP(i){let l=Date.parse(i);if(Number.isNaN(l))throw Error(`Invalid expiresAt value: ${i}`);return l}function of(i,l,u={}){let c=i.userInfo.clineUserId??u.accountId,g=i.refreshToken??u.refresh;if(!g)throw Error("Token response did not include a refresh token");let b={...u.metadata??{},provider:l,tokenType:i.tokenType,userInfo:i.userInfo};return delete b.startedAt,{access:i.accessToken,refresh:g,expires:BP(i.expiresAt),accountId:c??void 0,email:i.userInfo.email||u.email,metadata:b}}async function af(i){if(!i)return{};return typeof i==="function"?await i():i}function iy(i,l){if(typeof i!=="number"||!Number.isFinite(i)||i<=0)return l;return Math.floor(i)}function HP(i){return typeof i==="string"&&i.trim()||void 0}function zP(i){let l=ne(i);if(!l)return{};return{sessionId:HP(l.sid)}}function WP(i){let l={},u=i.metadata?.sessionStartedAtMs;if(typeof u==="number"&&Number.isFinite(u)&&u>0)l.sessionDurationMs=Date.now()-u;return l}function Fk(i){return{...zP(i.access),...WP(i)}}function lf(i,l){if(!i.success||!i.data?.accessToken)throw Error(l);return i.data}async function KP(i,l){let u=await fetch(ia(Uk,Dk.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:i}),signal:AbortSignal.any([AbortSignal.timeout(l?.requestTimeoutMs??dd),...l?.signal?[l.signal]:[]])}),c=await u.json().catch(()=>({}));if(!u.ok)throw new Wr(`Device authorization failed: ${u.status}${c.error_description?` - ${c.error_description}`:""}`,{status:u.status,errorCode:c.error,requestId:u.headers.get("x-request-id")??void 0});if(!c.device_code||!c.user_code||!c.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:c.device_code,userCode:c.user_code,verificationUri:c.verification_uri,verificationUriComplete:c.verification_uri_complete,expiresInSeconds:iy(c.expires_in,qP),pollIntervalSeconds:iy(c.interval,jP)}}async function GP(i){let l=Date.now()+i.expiresInSeconds*1000,u=Math.max(1,i.initialPollIntervalSeconds);while(Date.now()<=l){let c=await fetch(ia(i.workosApiBaseUrl,Dk.authenticate),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:i.deviceCode,client_id:i.clientId}),signal:AbortSignal.any([AbortSignal.timeout(i.requestTimeoutMs),...i.signal?[i.signal]:[]])}),g=await c.json().catch(()=>({}));if(c.ok){if(!g.access_token||!g.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:g.access_token,refreshToken:g.refresh_token,tokenType:g.token_type??"Bearer"}}switch(g.error){case"authorization_pending":{await ry(u*1000,void 0,{signal:i.signal});break}case"slow_down":{u+=1,await ry(u*1000,void 0,{signal:i.signal});break}case"access_denied":case"expired_token":case"invalid_grant":throw new Wr(g.error_description||"WorkOS authorization failed",{status:c.status,errorCode:g.error,requestId:c.headers.get("x-request-id")??void 0});default:throw new Wr(`WorkOS token polling failed: ${c.status}${g.error_description?` - ${g.error_description}`:""}`,{status:c.status,errorCode:g.error,requestId:c.headers.get("x-request-id")??void 0})}i.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function XP(i,l,u,c){let g={accessToken:i.accessToken,refreshToken:i.refreshToken},b=await fetch(ia(l.apiBaseUrl,lc.register),{method:"POST",headers:{"Content-Type":"application/json",...await af(l.headers)},body:JSON.stringify(g),signal:AbortSignal.any([AbortSignal.timeout(l.requestTimeoutMs??dd),...c?[c]:[]])});if(!b.ok){let k=await b.text().catch(()=>""),T=ac(k);throw new Wr(`Token registration failed: ${b.status}${T.message?` - ${T.message}`:""}`,{status:b.status,errorCode:T.code,requestId:b.headers.get("x-request-id")??void 0})}let I=await b.json();return of(lf(I,"Invalid token exchange response"),u??l.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function JP(i,l,u,c){let g={grant_type:"authorization_code",code:i,client_type:"extension",redirect_uri:l,provider:c??u.provider},b=await fetch(ia(u.apiBaseUrl,lc.token),{method:"POST",headers:{"Content-Type":"application/json",...await af(u.headers)},body:JSON.stringify(g),signal:AbortSignal.timeout(u.requestTimeoutMs??dd)});if(!b.ok){let k=await b.text().catch(()=>""),T=ac(k);throw new Wr(`Token exchange failed: ${b.status}${T.message?` - ${T.message}`:""}`,{status:b.status,errorCode:T.code,requestId:b.headers.get("x-request-id")??void 0})}let I=await b.json();return of(lf(I,"Invalid token exchange response"),c??u.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function VP(i){Eh(i.telemetry,i.provider??"cline");let l=i.useWorkOSDeviceAuth??!0,u=i.callbackPorts?.length?i.callbackPorts:sy,c=i.callbackPath??DP,g=l?null:await tf({ports:u,callbackPath:c,onListening:i.callbacks.onServerListening,onClose:i.callbacks.onServerClose}),b=g?.callbackUrl||`http://127.0.0.1:${u[0]??sy[0]}${c}`;try{let I;if(l){let k=ke().workOsClientId,T=await KP(k,i);i.callbacks.onAuth({url:T.verificationUriComplete??T.verificationUri,instructions:`Enter this code in your browser: ${T.userCode}`});let E=await GP({clientId:k,deviceCode:T.deviceCode,expiresInSeconds:T.expiresInSeconds,initialPollIntervalSeconds:T.pollIntervalSeconds,requestTimeoutMs:i.requestTimeoutMs??dd,workosApiBaseUrl:Uk,onProgress:i.callbacks.onProgress});I=await XP(E,i,i.provider)}else{let k=new URL(ia(i.apiBaseUrl,lc.authorize));k.searchParams.set("client_type","extension"),k.searchParams.set("callback_url",b),k.searchParams.set("redirect_uri",b),i.callbacks.onAuth({url:k.toString(),instructions:"Continue the authentication process in your browser."});let T,E=i.provider,A=await nf({waitForCallback:g?.waitForCallback??(async()=>null),cancelWait:g?.cancelWait??(()=>{}),onManualCodeInput:i.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(A.error)throw Error(`OAuth error: ${A.error}`);if(T=A.code,E=A.provider??E,!T){let C=await i.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),N=mu(C,{includeProvider:!0});T=N.code,E=N.provider??E}if(!T)throw Error("Missing authorization code");I=await JP(T,b,i,E)}return Ah(i.telemetry,i.provider??"cline",Fk(I)),xh(i.telemetry,{id:I.accountId,email:I.email,provider:i.provider??"cline"}),I}catch(I){throw lu(i.telemetry,i.provider??"cline",I instanceof Error?I.message:String(I),{requestId:I instanceof Wr?I.requestId:void 0}),I}finally{g?.close()}}async function YP(i,l){let u=ia(l.apiBaseUrl,lc.refresh);lt(`cline.refresh.request url=${u} refreshTokenHash=${Us(i.refresh)}`);let c=await fetch(u,{method:"POST",headers:{"Content-Type":"application/json",...await af(l.headers)},body:JSON.stringify({refreshToken:i.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(l.requestTimeoutMs??dd)});if(!c.ok){let k=await c.text().catch(()=>""),T=ac(k),E=c.headers.get("x-request-id")??void 0;throw lt(`cline.refresh.error status=${c.status} errorCode=${T.code??"none"} message=${T.message??"none"} requestId=${E??"none"}`),new Wr(`Token refresh failed: ${c.status}${T.message?` - ${T.message}`:""}`,{status:c.status,errorCode:T.code,requestId:E})}let g=await c.json(),b=i.metadata?.provider??l.provider,I=of(lf(g,"Invalid token refresh response"),b,i);return lt(`cline.refresh.success newAccessTokenHash=${Us(I.access)} newRefreshTokenHash=${Us(I.refresh)} expires=${I.expires}`),I}async function QP(i,l,u){if(!i)return lt("cline.getCredentials outcome=no_current_credentials"),null;let c=u?.refreshBufferMs??UP,g=u?.retryableTokenGraceMs??FP,b=u?.forceRefresh===!0;if(!b&&!sf(i,c))return lt(`cline.getCredentials outcome=still_valid forceRefresh=${b}`),i;lt(`cline.getCredentials outcome=needs_refresh forceRefresh=${b} accessTokenHash=${Us(i.access)}`);try{return await YP(i,l)}catch(I){let k=Fk(i),T=I instanceof Wr&&I.requestId?{request_id:I.requestId}:{},E={status:I instanceof Wr?I.status:void 0,errorCode:I instanceof Wr?I.errorCode:void 0,...T,...k,errorName:I instanceof Error?I.name:void 0};if(I instanceof Wr&&I.isLikelyInvalidGrant())return lt(`cline.getCredentials outcome=invalid_grant status=${I.status} errorCode=${I.errorCode??"none"}`),Ch(l.telemetry,l.provider??"cline","token_invalid",{status:I.status,errorCode:I.errorCode,...T,...k}),null;if(i.expires-Date.now()>g)return lt(`cline.getCredentials outcome=transient_failure_kept_current error=${I instanceof Error?I.message:String(I)}`),Fl(l.telemetry,l.provider??"cline",{...E,tokenExpired:!1}),i;throw lt(`cline.getCredentials outcome=transient_failure_rethrown error=${I instanceof Error?I.message:String(I)}`),Fl(l.telemetry,l.provider??"cline",{...E,tokenExpired:!0}),I}}var ut={authorizationEndpoint:"https://auth.openai.com/oauth/authorize",tokenEndpoint:"https://auth.openai.com/oauth/token",clientId:"app_EMoamEEZ73f0CkXaXp7hrann",redirectUri:"http://localhost:1455/auth/callback",scopes:"openid profile email offline_access",callbackPort:1455,jwtClaimPath:"https://api.openai.com/auth",refreshBufferMs:300000,retryableTokenGraceMs:30000,httpTimeoutMs:30000};class Co extends Error{status;errorCode;constructor(i,l){super(i);this.name="OpenAICodexOAuthTokenError",this.status=l?.status,this.errorCode=l?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid_grant|revoked|expired|invalid refresh/i.test(this.message);return!1}}async function ZP(i,l,u=ut.redirectUri){let c=await fetch(ut.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:ut.clientId,code:i,code_verifier:l,redirect_uri:u}),signal:AbortSignal.timeout(ut.httpTimeoutMs)});if(!c.ok)return{type:"failed"};let g=await c.json();if(!g.access_token||!g.refresh_token||typeof g.expires_in!=="number")return{type:"failed"};return{type:"success",access:g.access_token,refresh:g.refresh_token,expires:Date.now()+g.expires_in*1000,email:g.email,idToken:g.id_token}}async function eM(i){try{let l=await fetch(ut.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:i,client_id:ut.clientId}),signal:AbortSignal.timeout(ut.httpTimeoutMs)});if(!l.ok){let c=await l.text().catch(()=>""),g=ac(c);throw new Co(`Token refresh failed: ${l.status}${g.message?` - ${g.message}`:""}`,{status:l.status,errorCode:g.code})}let u=await l.json();if(!u.access_token||!u.refresh_token||typeof u.expires_in!=="number")return{type:"failed"};return{type:"success",access:u.access_token,refresh:u.refresh_token,expires:Date.now()+u.expires_in*1000,email:u.email,idToken:u.id_token}}catch(l){if(l instanceof Co)throw l;return{type:"failed"}}}async function tM(i="pi"){let{verifier:l,challenge:u}=await Lk(),c=R(32),g=new URL(ut.authorizationEndpoint);return g.searchParams.set("response_type","code"),g.searchParams.set("client_id",ut.clientId),g.searchParams.set("redirect_uri",ut.redirectUri),g.searchParams.set("scope",ut.scopes),g.searchParams.set("code_challenge",u),g.searchParams.set("code_challenge_method","S256"),g.searchParams.set("state",c),g.searchParams.set("id_token_add_organizations","true"),g.searchParams.set("codex_cli_simplified_flow","true"),g.searchParams.set("originator",i),{verifier:l,state:c,url:g.toString()}}function rM(){try{let i=new URL(ut.redirectUri),l=i.port.length>0?Number.parseInt(i.port,10):ut.callbackPort;return{host:i.hostname||"localhost",port:Number.isFinite(l)?l:ut.callbackPort,callbackPath:i.pathname||"/auth/callback",redirectUri:i.toString()}}catch{return{host:"localhost",port:ut.callbackPort,callbackPath:"/auth/callback",redirectUri:ut.redirectUri}}}function sM(i,l){let u=l?ne(l):ne(i),c=u?u:ne(i),g=c?.[ut.jwtClaimPath]?.chatgpt_account_id;if(typeof g==="string"&&g.length>0)return g;let b=c?.organizations;if(Array.isArray(b)&&b.length>0){let k=b[0];if(typeof k?.id==="string"&&k.id.length>0)return k.id}let I=c?.chatgpt_account_id;if(typeof I==="string"&&I.length>0)return I;return null}function qk(i,l){let u=sM(i.access,i.idToken)??l?.accountId;if(!u)throw Error("Failed to extract accountId from token");return{access:i.access,refresh:i.refresh||l?.refresh||"",expires:i.expires,accountId:u,email:i.email??l?.email,metadata:{...l?.metadata??{},provider:"openai-codex"}}}async function iM(i){Eh(i.telemetry,"openai-codex");let l=rM(),{verifier:u,state:c,url:g}=await tM(i.originator),b=await tf({host:l.host,ports:[l.port],callbackPath:l.callbackPath,expectedState:c});if(!b.callbackUrl&&!i.onManualCodeInput){let k=Error(`Port ${l.port} is already in use, so the OpenAI sign-in callback cannot be received. Close the application using that port (for example another Codex or Cline sign-in) and try again.`);throw lu(i.telemetry,"openai-codex",k.message),k}i.onAuth({url:g,instructions:"Continue the authentication process in your browser."});let I;try{let k=await nf({waitForCallback:b.waitForCallback,cancelWait:b.cancelWait,onManualCodeInput:i.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(k.error)throw Error(`OAuth error: ${k.error}`);if(k.state&&k.state!==c)throw Error("State mismatch");if(I=k.code,!I){let A=await i.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),C=mu(A,{allowHashCodeState:!0});if(C.state&&C.state!==c)throw Error("State mismatch");I=C.code}if(!I)throw Error("Missing authorization code");let T=await ZP(I,u,l.redirectUri);if(T.type!=="success")throw Error("Token exchange failed");let E=qk(T);return Ah(i.telemetry,"openai-codex"),xh(i.telemetry,{id:E.accountId,email:E.email,provider:"openai-codex"}),E}catch(k){throw lu(i.telemetry,"openai-codex",k instanceof Error?k.message:String(k)),k}finally{b.close()}}async function nM(i,l){let u=await eM(i);if(u.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let c=qk(u,l);if(!c.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return c}async function oM(i,l){if(!i)return null;let u=l?.refreshBufferMs??ut.refreshBufferMs,c=l?.retryableTokenGraceMs??ut.retryableTokenGraceMs;if(l?.forceRefresh!==!0&&!sf(i,u))return i;try{return await nM(i.refresh,i)}catch(g){let b={status:g instanceof Co?g.status:void 0,errorCode:g instanceof Co?g.errorCode:void 0,errorName:g instanceof Error?g.name:void 0};if(g instanceof Co&&g.isLikelyInvalidGrant())return Ch(l?.telemetry,"openai-codex","invalid_grant",{status:g.status,errorCode:g.errorCode}),null;let I=i.expires-Date.now()<=c;if(Fl(l?.telemetry,"openai-codex",{...b,tokenExpired:I}),!I)return i;throw g}}class jk{ttlMs;maxEntries;entries=new Map;constructor(i,l){this.ttlMs=i,this.maxEntries=l}get(i,l=Date.now()){this.pruneExpired(l);let u=this.entries.get(i);if(!u)return;return this.entries.delete(i),this.entries.set(i,u),u.value}set(i,l,u=Date.now(),c=this.ttlMs){this.pruneExpired(u),this.entries.delete(i);while(this.entries.size>=this.maxEntries){let g=this.entries.keys().next().value;if(g===void 0)break;this.entries.delete(g)}this.entries.set(i,{value:l,expiresAt:u+c})}pruneExpired(i){for(let[l,u]of this.entries)if(u.expiresAt<=i)this.entries.delete(l)}}var aM="a8331954c0cf48ba99b5dd223a14c6ea",lM="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",dM="openid offline_access",Bk="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",uM="c1aba3deed5740659981a752714eba33",cM="https://login-ext.identity.oraclecloud.com",pM="openid offline_access",Hk="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",mM="/auth/oca",hM=Array.from({length:11},(i,l)=>48801+l),fM=300000,gM=30000,zk=30000,yM=600000;class Ro extends Error{status;errorCode;constructor(i,l){super(i);this.name="OcaOAuthTokenError",this.status=l?.status,this.errorCode=l?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;return this.status===400||this.status===401||this.status===403}}var Js={internal:{clientId:aM,idcsUrl:lM,scopes:dM,baseUrl:Bk},external:{clientId:uM,idcsUrl:cM,scopes:pM,baseUrl:Hk}},zl=new Map,vM=86400000,wM=300000,bM=32,Bc=new jk(vM,bM);function Wk(i){if(typeof i==="function")return i();return i??"internal"}function Kk(i){return{internal:{clientId:i?.internal?.clientId??Js.internal.clientId,idcsUrl:i?.internal?.idcsUrl??Js.internal.idcsUrl,scopes:i?.internal?.scopes??Js.internal.scopes,baseUrl:i?.internal?.baseUrl??Js.internal.baseUrl},external:{clientId:i?.external?.clientId??Js.external.clientId,idcsUrl:i?.external?.idcsUrl??Js.external.idcsUrl,scopes:i?.external?.scopes??Js.external.scopes,baseUrl:i?.external?.baseUrl??Js.external.baseUrl}}}function IM(i=Date.now()){let l=i-yM;for(let[u,c]of zl.entries())if(c.createdAt<l)zl.delete(u)}function kM(i,l,u){if(typeof i.expires_in==="number"&&i.expires_in>0)return Date.now()+i.expires_in*1000;let c=ne(l)?.exp;if(typeof c==="number"&&c>0)return c*1000;let g=ne(u)?.exp;if(typeof g==="number"&&g>0)return g*1000;return Date.now()+3600000}function Gk(i,l,u){let c=i.access_token;if(!c)throw Error("Token response did not include an access token");let g=i.refresh_token??u?.refresh;if(!g)throw Error("Token response did not include a refresh token");let b=ne(i.id_token),I=ne(c),k=b?.sub??I?.sub,T=b?.email??I?.email;return{access:c,refresh:g,expires:kM(i,c,i.id_token),accountId:k??u?.accountId,email:T??u?.email,metadata:{...u?.metadata??{},provider:"oca",mode:l,subject:k,idToken:i.id_token}}}async function Xk(i,l){let u=rf(i),c=Bc.get(u);if(c)return c;let g=`${u}/.well-known/openid-configuration`,b=await fetch(g,{method:"GET",signal:AbortSignal.timeout(l)});if(!b.ok){let k=`${u}/oauth2/v1/token`;return Bc.set(u,k,Date.now(),wM),k}let I=(await b.json()).token_endpoint||`${u}/oauth2/v1/token`;return Bc.set(u,I),I}function Jk(i){return{code:i.error,message:i.error_description}}async function SM(i){let l=zl.get(i.state);if(!l)throw Error("No PKCE verifier found for this state");zl.delete(i.state);let u=i.mode==="external"?i.config.external:i.config.internal,c=await Xk(u.idcsUrl,i.requestTimeoutMs),g=new URLSearchParams({grant_type:"authorization_code",code:i.code,redirect_uri:l.redirectUri,client_id:u.clientId,code_verifier:l.verifier}),b=await fetch(c,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:g,signal:AbortSignal.timeout(i.requestTimeoutMs)}),I=await b.json();if(!b.ok){let T=Jk(I);throw new Ro(`Token exchange failed: ${b.status}${T.message?` - ${T.message}`:""}`,{status:b.status,errorCode:T.code})}let k=ne(I.id_token);if(!I.id_token||!k)throw Error("No ID token received from OCA");if(k.nonce!==l.nonce)throw Error("OIDC nonce verification failed");return Gk(I,i.mode)}function TM(i){let l=i.mode==="external"?i.config.external:i.config.internal,u=new URL(`${rf(l.idcsUrl)}/oauth2/v1/authorize`);return u.searchParams.set("client_id",l.clientId),u.searchParams.set("response_type","code"),u.searchParams.set("scope",l.scopes),u.searchParams.set("code_challenge",i.challenge),u.searchParams.set("code_challenge_method","S256"),u.searchParams.set("redirect_uri",i.callbackUrl),u.searchParams.set("state",i.state),u.searchParams.set("nonce",i.nonce),u.toString()}async function _M(i){Eh(i.telemetry,"oca");let l=Kk(i.config),u=Wk(i.mode),c=i.callbackPorts?.length?i.callbackPorts:hM,g=i.callbackPath??mM,b=i.requestTimeoutMs??zk,I=await tf({ports:c,callbackPath:g,onListening:i.callbacks.onServerListening,onClose:i.callbacks.onServerClose}),k=I.callbackUrl;if(!k)throw Error("Unable to bind local OAuth callback server");let T=R(16),E=R(16),{verifier:A,challenge:C}=await Lk();IM(),zl.set(T,{verifier:A,nonce:E,mode:u,redirectUri:k,createdAt:Date.now()});let N=TM({callbackUrl:k,mode:u,state:T,nonce:E,challenge:C,config:l});i.callbacks.onAuth({url:N,instructions:"Continue the authentication process in your browser."});try{let O=await nf({waitForCallback:I.waitForCallback,cancelWait:I.cancelWait,onManualCodeInput:i.callbacks.onManualCodeInput}),{code:L,state:D}=O;if(O.error)throw Error(`OAuth error: ${O.error}`);if(!L){if(!i.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!D||D!==T)throw Error("State mismatch");let U=await SM({code:L,state:D,mode:u,config:l,requestTimeoutMs:b});return Ah(i.telemetry,"oca"),xh(i.telemetry,{id:U.accountId,email:U.email,provider:"oca"}),U}catch(O){throw lu(i.telemetry,"oca",O instanceof Error?O.message:String(O)),O}finally{I.close()}}async function EM(i,l={}){let u=Kk(l.config),c=l.requestTimeoutMs??zk,g=i.metadata?.mode,b=g==="internal"||g==="external"?g:Wk(l.mode),I=b==="external"?u.external:u.internal,k=await Xk(I.idcsUrl,c),T=new URLSearchParams({grant_type:"refresh_token",refresh_token:i.refresh,client_id:I.clientId}),E=await fetch(k,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:T,signal:AbortSignal.timeout(c)}),A=await E.json();if(!E.ok){let C=Jk(A);throw new Ro(`Token refresh failed: ${E.status}${C.message?` - ${C.message}`:""}`,{status:E.status,errorCode:C.code})}return Gk(A,b,i)}async function AM(i,l,u){if(!i)return null;let c=l?.refreshBufferMs??u?.refreshBufferMs??fM,g=l?.retryableTokenGraceMs??u?.retryableTokenGraceMs??gM;if(l?.forceRefresh!==!0&&!sf(i,c))return i;try{return await EM(i,u)}catch(b){let I=u?.telemetry??l?.telemetry,k={status:b instanceof Ro?b.status:void 0,errorCode:b instanceof Ro?b.errorCode:void 0,errorName:b instanceof Error?b.name:void 0};if(b instanceof Ro&&b.isLikelyInvalidGrant())return Ch(I,"oca","invalid_grant",{status:b.status,errorCode:b.errorCode}),null;let T=i.expires-Date.now()<=g;if(Fl(I,"oca",{...k,tokenExpired:T}),!T)return i;throw b}}var hu="workos:";function CM(i){let l=i.trim();return l.toLowerCase().startsWith(hu)?l:`${hu}${l}`}function xM(i){let l=i.trim();return l.toLowerCase().startsWith(hu)?l.slice(hu.length):l}function RM(i){let l=ne(i)?.exp;if(typeof l==="number"&&l>0)return l*1000;return null}function PM(i,l){let u=i.auth?.expiresAt;if(typeof u==="number"&&Number.isFinite(u)&&u>0)return u;let c=RM(l);if(c)return c;return Date.now()-1}function MM(i,l){let u=i.auth?.accessToken?.trim(),c=i.auth?.refreshToken?.trim();if(!u||!c)return null;let g=l?.normalizeAccessToken?.(u)??u;if(!g)return null;return{access:g,refresh:c,expires:PM(i,g),accountId:i.auth?.accountId,metadata:i.auth?.metadata}}function NM(i){let l=i.formatAccessToken?.(i.credentials.access)??i.credentials.access,u={...i.settings?.auth??{},accessToken:l,refreshToken:i.credentials.refresh,accountId:i.credentials.accountId,expiresAt:i.credentials.expires},c=Object.fromEntries(Object.entries(i.credentials.metadata??{}).filter(([,I])=>I!==void 0)),g={...i.settings?.auth?.metadata??{},...c};if(Object.keys(g).length>0)u.metadata=g;let b={...i.settings??{provider:i.storageProviderId},provider:i.storageProviderId,auth:u};if(i.save!==!1)i.manager.saveProviderSettings(b,{...i.setLastUsed===void 0?{}:{setLastUsed:i.setLastUsed},tokenSource:"oauth"});return b}function bm(i){let l=i.storageProviderId??i.providerId;return{providerId:i.providerId,storageProviderId:l,getApiKey(u){let c=u?.auth?.accessToken?.trim();if(c)return i.formatAccessToken?.(c)??c;return u?.apiKey?.trim()||u?.auth?.apiKey?.trim()||void 0},login:i.login,refresh:i.refresh,saveCredentials(u){return NM({...u,storageProviderId:l,formatAccessToken:i.formatAccessToken})},isConfigured(u){return!!u?.auth?.accessToken},normalizeStoredAccessToken:i.normalizeStoredAccessToken}}function ny(i){return bm({providerId:i.providerId,storageProviderId:i.storageProviderId,formatAccessToken:CM,normalizeStoredAccessToken:xM,login:({settings:l,callbacks:u,telemetry:c})=>VP({apiBaseUrl:l?.baseUrl?.trim()||ke().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:u,telemetry:c}),refresh:({settings:l,credentials:u,forceRefresh:c,telemetry:g})=>QP(u,{apiBaseUrl:l.baseUrl?.trim()||ke().apiBaseUrl,telemetry:g},{forceRefresh:c})})}var OM=[ny({providerId:"cline"}),ny({providerId:"cline-pass",storageProviderId:"cline"}),bm({providerId:"oca",login:({settings:i,callbacks:l,telemetry:u})=>_M({mode:i?.oca?.mode,callbacks:l,telemetry:u}),refresh:({settings:i,credentials:l,forceRefresh:u,telemetry:c})=>AM(l,{forceRefresh:u,telemetry:c},{mode:i.oca?.mode,telemetry:c})}),bm({providerId:"openai-codex",login:({callbacks:i,telemetry:l})=>iM({onAuth:i.onAuth,onPrompt:i.onPrompt,onProgress:i.onProgress,onManualCodeInput:i.onManualCodeInput,telemetry:l}),refresh:({credentials:i,forceRefresh:l,telemetry:u})=>oM(i,{forceRefresh:l,telemetry:u})})],$M=new Map(OM.map((i)=>[i.providerId,i]));function oi(i){return $M.get(i.trim().toLowerCase())}function oy(i){return oi(i)!==void 0}function ay(i,l){let u=oi(i);if(!u)return null;return MM(l,{normalizeAccessToken:u.normalizeStoredAccessToken})}function LM(i){let l=oi(i.providerId);if(!l)throw Error(`Provider "${i.providerId}" does not support OAuth credentials`);return l.saveCredentials({manager:i.manager,settings:i.settings,credentials:i.credentials,setLastUsed:i.setLastUsed,save:i.save})}function DM(i,l){let u=oi(i);if(u)return u.getApiKey(l);return l?.auth?.accessToken?.trim()||l?.apiKey?.trim()||l?.auth?.apiKey?.trim()||void 0}function Vk(i){if(typeof i==="string")return i;if(Array.isArray(i))return i;return JSON.stringify(i)}function UM(i){if(i.metadata?.displayOnly===!0)return[];let l=qM(i.content),u=[],c=i.id??HM(),g=0,b=[],I=i.role==="user"&&typeof i.metadata?.userRunSpan==="number"&&Number.isInteger(i.metadata.userRunSpan)&&i.metadata.userRunSpan>=0?i.metadata.userRunSpan:void 0,k=!1,T=(C)=>{if(I===void 0)return i.metadata;if(C&&!k)return k=!0,i.metadata;return{...i.metadata,userRunSpan:0}},E=()=>{if(b.length===0)return;let C=g===0?c:`${c}_part_${g}`;g+=1,u.push({id:C,role:i.role,content:b.map(jM),createdAt:i.ts??Date.now(),metadata:T(!0),modelInfo:i.modelInfo,metrics:ly(i.metrics)}),b=[]};if(l.length===0)return u.push({id:c,role:i.role,content:[{type:"text",text:ur}],createdAt:i.ts??Date.now(),metadata:i.metadata,modelInfo:i.modelInfo,metrics:ly(i.metrics)}),u;let A=l.length===1&&l[0].type==="tool_result";for(let C of l){if(C.type!=="tool_result"){b.push(C);continue}E();let N=`_tool_${C.tool_use_id}`;u.push({id:A||c.endsWith(N)?c:`${c}${N}`,role:"tool",content:[Qk(C)],createdAt:i.ts??Date.now(),metadata:T(!1)})}return E(),u}function Hc(i){return i.flatMap(UM)}function FM(i){let l=i.content.map(Zk).filter((u)=>u!==void 0);return{id:i.id,role:i.role==="tool"?"user":i.role,content:l,ts:i.createdAt,metadata:i.metadata,modelInfo:i.modelInfo,metrics:BM(i.metrics)}}function bd(i){return i.map(FM)}function Yk(i){let l=[];for(let u of i){let c=u.content.map(Zk).filter((I)=>I!==void 0),g=u.role==="tool"?"user":u.role,b=l[l.length-1];if(g==="user"&&c.length>0&&c.every((I)=>I.type==="tool_result")&&b?.role==="user"&&Array.isArray(b.content)&&b.content.every((I)=>I.type==="tool_result")){b.content.push(...c);continue}l.push({role:g,content:c})}return l}function qM(i){if(typeof i==="string")return i.trim().length>0?[{type:"text",text:i}]:[];return[...i]}function jM(i){switch(i.type){case"text":return{type:"text",text:i.text};case"thinking":return{type:"reasoning",text:i.thinking,metadata:i.signature?{signature:i.signature,details:i.details}:i.details?{details:i.details}:void 0};case"redacted_thinking":return{type:"reasoning",text:"",redacted:!0,metadata:{data:i.data}};case"image":return{type:"image",image:i.data,mediaType:i.mediaType};case"media":return{type:"media",media:i.media};case"file":return{type:"file",path:i.path,content:i.content};case"tool_use":return{type:"tool-call",toolCallId:i.id,toolName:i.name,input:i.input,metadata:i.signature?{signature:i.signature}:void 0};case"tool_result":return Qk(i)}}function Qk(i){return{type:"tool-result",toolCallId:i.tool_use_id,toolName:i.name,output:i.content,isError:i.is_error}}function Zk(i){switch(i.type){case"text":return{type:"text",text:i.text};case"reasoning":{if(i.redacted===!0)return{type:"redacted_thinking",data:i.metadata?.data??""};let l=i.metadata;return{type:"thinking",thinking:i.text,signature:l?.signature,details:l?.details}}case"image":return typeof i.image==="string"?{type:"image",data:i.image,mediaType:i.mediaType??"image/png"}:void 0;case"file":return{type:"file",path:i.path,content:i.content};case"media":return{type:"media",media:i.media};case"tool-call":{let l=i.metadata;return{type:"tool_use",id:i.toolCallId,name:i.toolName,input:i.input??{},signature:l?.thoughtSignature??l?.signature}}case"tool-result":return{type:"tool_result",tool_use_id:i.toolCallId,name:i.toolName,content:Vk(i.output),is_error:i.isError}}}function ly(i){if(!i)return;return{inputTokens:i.inputTokens??0,outputTokens:i.outputTokens??0,cacheReadTokens:i.cacheReadTokens??0,cacheWriteTokens:i.cacheWriteTokens??0,cost:i.cost}}function BM(i){if(!i)return;return{inputTokens:i.inputTokens,outputTokens:i.outputTokens,cacheReadTokens:i.cacheReadTokens,cacheWriteTokens:i.cacheWriteTokens,cost:i.cost}}var dy=0;function HM(){return dy+=1,`msg_${Date.now().toString(36)}_${dy.toString(36)}`}function zM(i){switch(i.type){case"text":return[{type:"text-delta",text:i.text}];case"media":return[{type:"media",media:i.media}];case"reasoning":return[{type:"reasoning-delta",text:i.reasoning,metadata:i.signature?{thoughtSignature:i.signature,details:i.details}:{details:i.details}}];case"tool_calls":{let l=i.tool_call.function,u=l.arguments;return[{type:"tool-call-delta",toolCallId:i.tool_call.call_id??l.id,toolName:l.name,inputText:typeof u==="string"?u:void 0,input:typeof u==="string"?void 0:u,...i.signature?{metadata:{thoughtSignature:i.signature}}:{}}]}case"usage":return[{type:"usage",usage:{inputTokens:i.inputTokens,outputTokens:i.outputTokens,cacheReadTokens:i.cacheReadTokens,cacheWriteTokens:i.cacheWriteTokens,reasoningTokenCount:i.thoughtsTokenCount,totalCost:i.totalCost}}];case"done":return[{type:"finish",reason:WM(i),error:i.error,...i.error?{errorClass:ui(i.error)}:{}}];default:return[]}}function WM(i){if(i.success===!1)return"error";if(i.incompleteReason==="max_output_tokens"||i.incompleteReason==="max-tokens")return"max-tokens";if(i.incompleteReason==="content_filter"||i.incompleteReason==="content-filter")return"content-filter";return"stop"}function KM(i){return{async*stream(l){let u=!1,c=!1;try{let g=typeof i==="function"?await i():i;g.setAbortSignal?.(l.signal);let b=Yk(l.messages),I=l.tools.map((k)=>({name:k.name,description:k.description,inputSchema:k.inputSchema}));for await(let k of g.createMessage(l.systemPrompt??"",b,I))for(let T of zM(k)){if(T.type==="finish")u=!0;else if(T.type==="tool-call-delta")c=!0;yield T}if(!u)yield{type:"finish",reason:c?"tool-calls":"stop"}}catch(g){if(!u){let b=l.signal?.aborted===!0;yield{type:"finish",reason:b?"aborted":"error",error:g instanceof Error?g.message:String(g),...b?{}:{errorClass:ui(g)}}}}}}}function GM(i){let l=Object.fromEntries(Object.entries(i).filter(([,u])=>u!==void 0));return Object.keys(l).length>0?l:void 0}function XM(i){return i.providerId==="openai-compatible"||i.clientType==="openai-compatible"}function JM(i){let l={region:i.region,apiLine:i.apiLine,openRouterProviderSorting:i.openRouterProviderSorting,modelCatalog:i.modelCatalog};if(XM(i))Object.assign(l,{apiVersion:i.azure?.apiVersion,useIdentity:i.azure?.useIdentity});if(i.providerId==="bedrock")Object.assign(l,{authentication:i.aws?.authentication,profile:i.aws?.profile,accessKeyId:i.aws?.accessKey,secretAccessKey:i.aws?.secretKey,sessionToken:i.aws?.sessionToken,usePromptCache:i.aws?.usePromptCache,useCrossRegionInference:i.useCrossRegionInference,useGlobalInference:i.useGlobalInference,endpoint:i.aws?.endpoint,customModelBaseId:i.aws?.customModelBaseId});if(i.providerId==="vertex"){let u=i.gcp?.region??i.region;Object.assign(l,{project:i.gcp?.projectId,projectId:i.gcp?.projectId,location:u,region:u})}if(i.providerId==="claude-code"){let u=i.extensionContext?.workspace;Object.assign(l,{cwd:u?.cwd??u?.rootPath})}if(i.providerId==="sapaicore")Object.assign(l,i.sap);return GM(l)}function VM(i){return typeof i==="number"&&Number.isFinite(i)&&i>0?Math.floor(i):void 0}function eS(i){let l=i.providerConfig,u=l?.knownModels?l.knownModels:i.knownModels??Oe[i.providerId]?.models??void 0,c=VM(l?.maxInputTokens),g=l?.modelInfo&&l.modelInfo.id===i.modelId?l.modelInfo:void 0;if(c===void 0&&!g)return u;return{...u??{},[i.modelId]:{...u?.[i.modelId],...c!==void 0?{contextWindow:c,maxInputTokens:c}:{},...g,id:i.modelId}}}function YM(i,l){return{id:i,name:l.name??i,description:l.description,contextWindow:l.contextWindow,maxInputTokens:l.maxInputTokens,maxOutputTokens:l.maxTokens,operation:l.operation,operationModes:l.operationModes,modalities:l.modalities,capabilities:Fi(l.capabilities),reasoningOptions:l.reasoningOptions,metadata:{...l.metadata?.apiProtocol?{apiProtocol:l.metadata.apiProtocol}:{},family:l.family,pricing:l.pricing,status:l.status,releaseDate:l.releaseDate}}}function tS(i){let l=i.providerConfig,u=l?.providerId===i.providerId?l:void 0;return{...u??{},providerId:i.providerId,modelId:i.modelId,apiKey:i.apiKey??u?.apiKey,baseUrl:i.baseUrl??u?.baseUrl,headers:i.headers??u?.headers}}function QM(i,l,u){let c={...tS(i),knownModels:eS(i),maxOutputTokens:i.maxTokensPerTurn,temperature:i.temperature,reasoningEffort:i.reasoningEffort,thinkingBudgetTokens:i.thinkingBudgetTokens,thinking:i.thinking,logger:l,extensionContext:i.extensionContext};if(ji(K(c.providerId)))return KM(()=>Bt(c));let g=dn({fetch:c.fetch,providerConfigs:[{providerId:c.providerId,apiKey:c.apiKey,baseUrl:c.baseUrl,headers:c.headers,timeoutMs:c.timeoutMs,fetch:c.fetch,options:JM(c),models:c.knownModels?Object.entries(c.knownModels).map(([I,k])=>YM(I,k)):void 0}],logger:l,telemetry:u??i.telemetry??i.extensionContext?.telemetry}),b=Cn(c);if(b)g.registerProvider(b);return g.createAgentModel({providerId:c.providerId,modelId:c.modelId},{maxTokens:c.maxOutputTokens,temperature:c.temperature})}function eN(i){if(!i||typeof i!=="object"||Array.isArray(i))return!1;let l=i;if(l.role!=="user"&&l.role!=="assistant")return!1;return typeof l.content==="string"||Array.isArray(l.content)}var tN=Y(eN),df=t({version:a(1),updated_at:e().datetime(),conversation_id:e().min(1).optional(),source_message_count:n().int().nonnegative(),source_prefix_hash:e().min(1).optional(),source_last_message_key:e().min(1).optional(),messages:o(tN),system_prompt:e().optional()});function rS(i){return i.filter((l)=>l.metadata?.displayOnly!==!0)}function Im(i){return JSON.parse(JSON.stringify(i))}function sS(i){if(i.role!=="user")return i;if(typeof i.content==="string")return{...i,content:me(i.content)};return{...i,content:i.content.map((l)=>l.type==="text"?{...l,text:me(l.text)}:l)}}function iS(i){if(i.includes(":"))throw TypeError("Message role cannot contain ':' in compaction boundary keys")}function rN(i){let l=sS(i);return iS(l.role),[["role",l.role],["content",l.content],["agent",l.agent??null],["sessionId",l.sessionId??null],["metadata",l.metadata??null],["modelInfo",l.modelInfo??null],["metrics",l.metrics??null]]}function nS(i){if(!i)return"";let l=sS(i);if(typeof l.id==="string"&&l.id.trim())return`id:${l.id.trim()}`;if(iS(l.role),typeof l.ts==="number"&&Number.isFinite(l.ts))return`ts:${l.role}:${l.ts}`;return`content:${l.role}:${JSON.stringify(l.content)}`}function oS(i,l=i.length){let u=ZM("sha256");u.update(`cline-session-compaction-source-v2
363
+ `),u.update(`${l}
364
+ `);for(let c of i.slice(0,l))u.update(JSON.stringify(rN(c))),u.update(`
365
+ `);return`sha256:${u.digest("hex")}`}function uy(i){let l=rS(i.sourceMessages),u=l.at(-1),c=nS(u);return df.parse({version:1,updated_at:i.updatedAt??new Date().toISOString(),...i.conversationId?.trim()?{conversation_id:i.conversationId.trim()}:{},source_message_count:l.length,source_prefix_hash:oS(l),...c?{source_last_message_key:c}:{},messages:Im(i.compactedMessages),...i.systemPrompt!==void 0?{system_prompt:i.systemPrompt}:{}})}function km(i,l){if(l=rS(l),!(i.source_message_count<=l.length))return;let u=!!i.source_prefix_hash&&oS(l,i.source_message_count)===i.source_prefix_hash,c=l[i.source_message_count-1],g=!i.source_prefix_hash&&i.source_message_count>0&&!!i.source_last_message_key&&nS(c)===i.source_last_message_key;if(!(u||g))return;return[...Im(i.messages),...Im(l.slice(i.source_message_count))]}function dc(i){let l=df.safeParse(i);return l.success?l.data:void 0}var sN=new Set(["auto_compaction","compaction_budget_emergency","completion_reminder","loop_detection_notice","manual_compaction","mistake_stop_notice","recovery_notice"]);function iN(i){switch(i){case"user":case"assistant":case"tool":case"system":case"status":case"error":return i;default:return"assistant"}}function nN(i){return i.metadata&&typeof i.metadata==="object"&&!Array.isArray(i.metadata)?i.metadata:void 0}function oN(i){let l=i?.userRunSpan;return typeof l==="number"&&Number.isInteger(l)&&l>=0?l:void 0}function aN(i){if(typeof i.content==="string")return{hasAttachment:!1,text:i.content};if(!Array.isArray(i.content))return{hasAttachment:!1,text:"unknown"};let l=!1,u=!1,c=[];for(let g of i.content){if(!g||typeof g!=="object"||Array.isArray(g))continue;let b=g;if(b.type==="text"&&typeof b.text==="string")c.push(b.text);else if(b.type==="tool_result"||b.type==="tool-result")u=!0;else if(b.type==="file"||b.type==="image")l=!0}return{hasAttachment:l&&!u,text:c.join(`
366
+ `)}}function lN(i){let l=me(i);return l.startsWith("[TASK RESUMPTION]")||l==="The user approved switching to act mode. Continue with the approved plan now."}function ud(i){if(iN(i.role)!=="user")return 0;let l=nN(i),u=typeof l?.kind==="string"?l.kind:void 0,c=oN(l);if(u==="compaction"||u==="compaction_summary")return c??1;if(c!==void 0)return c;if(u&&sN.has(u))return 0;let g=aN(i);if(!g.hasAttachment&&!me(g.text))return 0;if(!g.hasAttachment&&lN(g.text))return 0;return 1}function dN(i){return ud(i)>0}function Sm(i){let l=0;for(let u of i??[])l+=ud(u);return l}var uN=128000,cN=0.9,Pn=0.9,pN=4,mN=0.7,hN=20000,cy=8192,py=2000,aS=2000;function fu(i){return typeof i==="number"&&Number.isFinite(i)&&i>0}function Tm(i){let l=fu(i.contextWindow)?i.contextWindow:void 0,u=fu(i.maxInputTokens)?i.maxInputTokens:void 0;if(u!==void 0)return l===void 0?u:Math.min(u,l);return l===void 0?void 0:l*cN}function xl(i,l){if(i.length<=l)return i;return`${i.slice(0,l)}
367
+ ...[truncated ${i.length-l} chars]`}function fN(i){let l=Tm({maxInputTokens:i.maxInputTokens??i.modelInfo?.maxInputTokens,contextWindow:i.modelInfo?.contextWindow});if(l!==void 0)return l;let u=i.knownModels?.[i.modelId];return Tm({maxInputTokens:u?.maxInputTokens,contextWindow:u?.contextWindow})}function gN(i){let l=yN(i);if(typeof l==="string")return l;return l.map((u)=>{switch(u.type){case"text":return u.text;case"file":return`<file path="${u.path}">
368
+ ${u.content}
369
+ </file>`;case"image":return`[image:${u.mediaType}]`;default:return""}}).join(`
370
+ `)}function yN(i){if(typeof i==="string")return xl(i,py);return i.map((l)=>{switch(l.type){case"text":return{...l,text:xl(l.text,py)};case"file":return{...l,content:xl(l.content,aS)};case"image":return l;default:return l}})}function vN(i){return Object.entries(i).map(([l,u])=>`${l}=${JSON.stringify(u)}`).join(", ")}function lS(i){if(typeof i.content==="string")return`[${i.role==="user"?"User":"Bot"}]: ${i.content}`;let l=[];for(let u of i.content)switch(u.type){case"text":l.push(`[${i.role==="user"?"User":"Bot"}]: ${u.text}`);break;case"thinking":l.push(`[Bot thinking]: ${xl(u.thinking,2000)}`);break;case"redacted_thinking":l.push("[Bot thinking]: [redacted]");break;case"tool_use":l.push(`[Bot tool calls]: ${u.name}(${vN(u.input)})`);break;case"tool_result":l.push(`[Tool result]: ${gN(u.content)}`);break;case"file":l.push(`[${i.role==="user"?"User":"Bot"} file ${u.path}]: ${xl(u.content,aS)}`);break;case"image":l.push(`[${i.role==="user"?"User":"Bot"} image]: ${u.mediaType}`);break;case"media":l.push(`[Bot generated ${u.media.modality}]: ${u.media.mediaType}`);break}return l.join(`
371
+ `)}function wN(i){return i.map(lS).join(`
372
+
373
+ `).trim()}function bN(){let i=new WeakMap;return(l)=>{let u=l,c=i.get(u);if(typeof c==="number")return c;let{replacer:g,imageCount:b}=Nn(),I,k=0;try{I=JSON.stringify(l,g),k=b()}catch{I=lS(l)}let T=jt(I.length)+k*Io;return i.set(u,T),T}}function uf(i){return i.metadata?.kind==="compaction_summary"}function dS(i){if(!uf(i))return;let l=i.metadata;if(!l)return;let u=l.details;return{kind:"compaction_summary",displayRole:"system",userRunSpan:typeof l.userRunSpan==="number"&&Number.isInteger(l.userRunSpan)&&l.userRunSpan>=0?l.userRunSpan:1,summary:String(l.summary??""),details:{readFiles:Array.isArray(u?.readFiles)?u.readFiles.filter((c)=>typeof c==="string").map((c)=>c.trim()).filter((c)=>c.length>0):[],modifiedFiles:Array.isArray(u?.modifiedFiles)?u.modifiedFiles.filter((c)=>typeof c==="string").map((c)=>c.trim()).filter((c)=>c.length>0):[]},tokensBefore:Number(l.tokensBefore??0),generatedAt:Number(l.generatedAt??0)}}function IN(i){if(i.role!=="user"||!Array.isArray(i.content))return!1;return i.content.length>0&&i.content.every((l)=>l.type==="tool_result")}function qs(i){return i.role==="user"&&i.metadata?.userRunSpan!==0&&!IN(i)&&!uf(i)}function kN(i){for(let l=i.length-1;l>=0;l-=1)if(qs(i[l]))return l;return 0}function uS(i){for(let l=i.length-1;l>=0;l-=1)if(uf(i[l]))return l;return-1}function SN(i){return i.role==="assistant"||qs(i)}function TN(i,l,u){let c=0,g=i.length;for(let k=i.length-1;k>=0;k-=1)if(c+=u(i[k]),g=k,c>=l)break;if(g<=0)return 0;let b=kN(i),I=b>0?Math.min(g,b):g;while(I>0&&!SN(i[I]))I-=1;return I}function qi(i){if(typeof i==="string"&&i.trim().length>0)return[i];if(Array.isArray(i))return i.flatMap((l)=>qi(l));if(i&&typeof i==="object"){let l=i,u=[];for(let c of["path","file_path","target_file","new_file_path","old_file_path"])u.push(...qi(l[c]));if(Array.isArray(l.files)){for(let c of l.files)if(c&&typeof c==="object")u.push(...qi(c.path))}if(Array.isArray(l.file_paths))u.push(...qi(l.file_paths));return u}return[]}function el(i,l){let u=new Set(i);for(let c of l){let g=c.trim();if(!g)continue;u.add(g)}return[...u].sort((c,g)=>c.localeCompare(g))}function my(i){let l=[],u=[];for(let c of i){let g=dS(c);if(g){l=el(l,g.details.readFiles),u=el(u,g.details.modifiedFiles);continue}if(!Array.isArray(c.content))continue;for(let b of c.content){if(b.type==="file"){l=el(l,[b.path]);continue}if(b.type!=="tool_use")continue;let I=qi(b.input);if(b.name==="read_files"){l=el(l,I);continue}if(b.name==="editor"||b.name==="apply_patch")u=el(u,I)}}return{readFiles:l,modifiedFiles:u}}var hy=100;function fy(i){return i.readFiles.length>0||i.editedFiles.length>0||i.commands.length>0}function tl(i,l){let u=l.trim();if(u&&!i.includes(u))i.push(u)}function _N(i){if(i.length<=hy)return i;return`${i.slice(0,hy)}...`}function EN(i){let l=typeof i.path==="string"?i.path.trim():"";if(!l)return;let{start_line:u,end_line:c}=i;if(typeof u==="number"&&typeof c==="number")return`${l}:${u}-${c}`;return l}function AN(i){let l=typeof i==="string"?i:i.map((g)=>g.type==="text"?g.text:g.type==="file"?g.content:"").join(`
374
+ `);try{let g=JSON.parse(l);if(g&&typeof g.result==="string")l=g.result}catch{}let{POSITIVE_INFINITY:u,NEGATIVE_INFINITY:c}=Number;for(let g of l.matchAll(/(?:^|\n|\\n)[-+](\d+): /g)){let b=Number(g[1]);if(!Number.isFinite(b))continue;u=Math.min(u,b),c=Math.max(c,b)}return u<=c?{start:u,end:c}:void 0}function gy(i){let l=[],u=[],c=[],g=new Map;for(let b of i){if(!Array.isArray(b.content))continue;for(let I of b.content){if(I.type==="tool_use"){let k=I.input??{};if(I.name==="read_files"){if(Array.isArray(k.files)){for(let T of k.files)if(T&&typeof T==="object"){let E=EN(T);if(E)tl(l,E)}}else for(let T of qi(k))tl(l,T);continue}if(I.name==="editor"||I.name==="apply_patch"){let T=qi(k)[0];if(T)g.set(I.id,T);continue}if(I.name==="run_commands"){let T=Array.isArray(k.commands)?k.commands:[];for(let E of T)if(typeof E==="string"&&E.trim())tl(c,_N(E.trim()))}continue}if(I.type==="tool_result"){let k=g.get(I.tool_use_id);if(!k)continue;let T=AN(I.content);tl(u,T?`${k}:${T.start}-${T.end}`:k),g.delete(I.tool_use_id)}}}for(let b of g.values())tl(u,b);return{readFiles:l,editedFiles:u,commands:c}}function CN(i){return[`Files read:
375
+ ${i.readFiles.join(`
376
+ `)}`,`Files edited:
377
+ ${i.editedFiles.join(`
378
+ `)}`,`Commands ran:
379
+ ${i.commands.join(`
380
+ `)}`].join(`
381
+
382
+ `)}function xN(i){let l=i.readFiles.length>0?i.readFiles.map((c)=>`- ${c}`).join(`
383
+ `):"- none",u=i.modifiedFiles.length>0?i.modifiedFiles.map((c)=>`- ${c}`).join(`
384
+ `):"- none";return`## Files
385
+ Read:
386
+ ${l}
387
+ Modified:
388
+ ${u}`}function RN(i,l){if(/^## Files$/im.test(i))return i.trim();return`${i.trim()}
389
+
390
+ ${xN(l)}`.trim()}function yy(i){let l=[`Summarize this session for continuation. Be concise and factual.
391
+
392
+ ## Goal
393
+ One sentence: what is being built or fixed.
394
+
395
+ ## State
396
+ - Done: completed steps
397
+ - In Progress: current work
398
+ - Blocked: blockers or open questions
399
+
400
+ ## Highlights
401
+ Key technical choices or notable findings (omit if none).
402
+
403
+ ## Next
404
+ Immediate next steps.
405
+
406
+ ## Files
407
+ Read: ${i.fileOps.readFiles.join(", ")||"none"}
408
+ Edited: ${i.fileOps.modifiedFiles.join(", ")||"none"}`];if(i.previousSummary?.trim())l.push(`Previous summary:
409
+ ${i.previousSummary.trim()}`);return l.push(`Conversation:
410
+ ${i.conversationText||"(empty)"}`),l.join(`
411
+
412
+ `)}function PN(i){if(fu(i.maxOutputTokens))return Math.floor(i.maxOutputTokens);let l=i.modelInfo?.maxTokens??i.knownModels?.[i.modelId]?.maxTokens;if(fu(l))return Math.min(cy,Math.floor(l));return cy}function MN(i){let l=i.summarizer,u=(g)=>{if(g.providerId==="openai-codex"){let{maxOutputTokens:b,...I}=g;return{...I,thinking:!1}}return{...g,maxOutputTokens:PN(g),thinking:!1}};if(!l)return u(i.activeProviderConfig);let c=l.providerConfig?.providerId===l.providerId?l.providerConfig:void 0;return u({...c??{},providerId:l.providerId,modelId:l.modelId,apiKey:l.apiKey??c?.apiKey,baseUrl:l.baseUrl??c?.baseUrl,headers:l.headers??c?.headers,modelInfo:l.modelInfo??c?.modelInfo,knownModels:l.knownModels??c?.knownModels,maxOutputTokens:l.maxOutputTokens??c?.maxOutputTokens})}function NN(i){return{role:"user",content:[{type:"text",text:`Context summary:
413
+
414
+ ${i.summary}`}],metadata:{kind:"compaction_summary",displayRole:"system",userRunSpan:i.userRunSpan,summary:i.summary,details:i.fileOps,tokensBefore:i.tokensBefore,generatedAt:Date.now()}}}function ON(i){switch(i){case"agentic_summary":case"basic_compaction_projection":return{protectLatestTypedUser:!0,protectLiveTailFromDrop:!0,dropUnsafeOutsideLiveTail:!0,dropThinkingBlocks:!0};case"normal_provider_request":return{protectLatestTypedUser:!0,protectLiveTailFromDrop:!0,dropUnsafeOutsideLiveTail:!1,dropThinkingBlocks:!1}}}function vy(i){return i.map((l)=>({...l,content:Array.isArray(l.content)?l.content.map((u)=>({...u})):l.content,...l.metadata?{metadata:{...l.metadata}}:{}}))}function Ds(i){try{return JSON.stringify(i).length}catch{return String(i).length}}function Id(i,l){return i.reduce((u,c)=>u+l(c),0)}function zc(i){for(let l=i.length-1;l>=0;l-=1){let u=i[l];if(qs(u))return l}return-1}function $N(i){for(let l=0;l<i.length;l+=1){let u=i[l];if(qs(u))return l}return-1}function cf(i){let l=new Set;if(!Array.isArray(i.content))return l;for(let u of i.content)if(u.type==="tool_use")l.add(u.id);else if(u.type==="tool_result")l.add(u.tool_use_id);return l}function LN(i){let l=new Map;for(let u=0;u<i.length;u+=1)for(let c of cf(i[u])){let g=l.get(c);if(g)g.add(u);else l.set(c,new Set([u]))}return l}function Wc(i){let l=new Set;for(let u of i){if(!Array.isArray(u.content))continue;for(let c of u.content)if(c.type==="tool_result")l.add(c.tool_use_id)}for(let u=i.length-1;u>=0;u-=1){let c=i[u];if(!Array.isArray(c.content))continue;if(c.content.some((g)=>g.type==="tool_use"&&!l.has(g.id)))return u}return i.length}function DN(i,l){let u=LN(i),c=new Set,g=[l];while(g.length>0){let b=g.shift();if(b===void 0||c.has(b))continue;c.add(b);for(let I of cf(i[b]))for(let k of u.get(I)??[])if(!c.has(k))g.push(k)}return c}function UN(i){return i.type==="image"||i.type==="media"||i.type==="redacted_thinking"}function FN(i){return i.type==="image"}function qN(i,l,u){if(l.dropThinkingBlocks&&i.type==="thinking")return!0;return l.dropUnsafeOutsideLiveTail&&!u&&UN(i)}function wy(i,l,u,c="over_budget"){let g=[],b=[];for(let I=0;I<i.length;I+=1){let k=i[I];if(Array.isArray(k.content)&&k.content.length===0){u.push({kind:"dropped_message",path:{messageIndex:l[I]},reason:c,originalSize:Ds(k),finalSize:0});continue}g.push(k),b.push(l[I])}return{messages:g,originalIndexes:b}}function jN(i,l,u,c,g,b){return i.map((I,k)=>{if(!Array.isArray(I.content))return I;let T=!1,E=k===c||k>=g,A=I.content.flatMap((C,N)=>{if(qN(C,b,E))return T=!0,u.push({kind:"dropped_block",path:{messageIndex:l[k],blockIndex:N},reason:"unsafe_to_truncate",originalSize:Ds(C),finalSize:0}),[];if(C.type==="tool_result"&&Array.isArray(C.content)){let O=C.content.filter((L)=>{if(b.dropUnsafeOutsideLiveTail&&!E&&FN(L))return!1;return!0});if(O.length!==C.content.length){T=!0;let L={...C,content:O};return u.push({kind:"dropped_block",path:{messageIndex:l[k],blockIndex:N},reason:"unsafe_to_truncate",originalSize:Ds(C),finalSize:Ds(L)}),[L]}}return[C]});return T?{...I,content:A}:I})}function BN(i,l,u){return i.map((c,g)=>{if(!Array.isArray(c.content))return c;let b=!1,I=c.content.filter((k,T)=>{if(k.type!=="thinking")return!0;return b=!0,u.push({kind:"dropped_block",path:{messageIndex:l[g],blockIndex:T},reason:"unsafe_to_truncate",originalSize:Ds(k),finalSize:0}),!1});return b?{...c,content:I}:c})}function Po(i,l){if(l<=0)return"";if(i.length<=l)return i;if(l<=16)return i.slice(0,Math.max(1,l));let u=`
415
+ ...[truncated ${i.length-l} chars]`,c=Math.max(1,l-u.length),g=`
416
+ ...[truncated ${i.length-c} chars]`;return`${i.slice(0,c)}${g}`}function by(i,l){if(typeof i==="string")return Po(i,l);let u=l;return i.map((c)=>{if(u<=0){if(c.type==="text")return{...c,text:""};if(c.type==="file")return{...c,content:""};return c}if(c.type==="text"){let g=Po(c.text,u);return u-=g.length,{...c,text:g}}if(c.type==="file"){let g=Po(c.content,u);return u-=g.length,{...c,content:g}}return c})}function HN(i){if(typeof i==="string")return i.length;return i.reduce((l,u)=>{if(u.type==="text")return l+u.text.length;if(u.type==="file")return l+u.content.length;return l},0)}function zN(i,l){if(typeof i.content==="string")return{...i,content:Po(i.content,l)};let u=l;return{...i,content:i.content.map((c)=>{if(u<=0){if(c.type==="text")return{...c,text:""};if(c.type==="file")return{...c,content:""};if(c.type==="tool_result")return{...c,content:by(c.content,0)};return c}if(c.type==="text"){let g=Po(c.text,u);return u-=g.length,{...c,text:g}}if(c.type==="file"){let g=Po(c.content,u);return u-=g.length,{...c,content:g}}if(c.type==="tool_result"){let g=by(c.content,u);return u-=HN(g),{...c,content:g}}return c})}}function WN(i){if(typeof i.content==="string")return i.content.length>0;return i.content.some((l)=>l.type==="text"||l.type==="file"||l.type==="tool_result")}function KN(i,l,u){return{messages:i.filter((c,g)=>!u.has(g)),originalIndexes:l.filter((c,g)=>!u.has(g))}}function GN(i,l){if(l<0)return!1;for(let u of i)if(u>=l)return!0;return!1}function Iy(i,l){return l>=0&&i.has(l)}function cS(i){let l=[],u=[],c=ON(i.policyIntent);if(i.targetTokens<=0)return{status:"failed",messages:vy(i.messages),actions:l,liveTailHandling:"preserved_out_of_band",estimatedTokens:Id(i.messages,i.estimateMessageTokens),warnings:[{code:"budget_impossible",message:"Target budget must be greater than zero."}]};let g=vy(i.messages),b=g.map((E,A)=>A);if(c.dropThinkingBlocks){let E=wy(BN(g,b,l),b,l,"unsafe_to_truncate");g=E.messages,b=E.originalIndexes}let I=c.protectLatestTypedUser?zc(g):-1,k=c.protectLiveTailFromDrop?Wc(g):g.length;if(c.dropUnsafeOutsideLiveTail){let E=wy(jN(g,b,l,I,k,c),b,l);g=E.messages,b=E.originalIndexes}let T=Id(g,i.estimateMessageTokens);if(T<=i.targetTokens)return{status:"ok",messages:g,actions:l,liveTailHandling:l.length>0?"included_degraded":"included_verbatim",estimatedTokens:T,warnings:u};for(let E=g.length-1;E>=0&&T>i.targetTokens;E-=1){let A=zc(g);if(E===A)continue;if(c.protectLiveTailFromDrop&&E>=Wc(g))continue;if(!WN(g[E]))continue;let C=Ds(g[E]),N=Math.max(1,C/Math.max(1,i.estimateMessageTokens(g[E]))),O=Math.max(16,Math.floor(i.targetTokens*N/Math.max(1,g.length)));g[E]=zN(g[E],O),l.push({kind:"truncated_text",path:{messageIndex:b[E]},reason:"over_budget",originalSize:C,finalSize:Ds(g[E])}),T=Id(g,i.estimateMessageTokens)}for(let E=0;E<g.length&&T>i.targetTokens;){let A=$N(g),C=zc(g),N=c.protectLiveTailFromDrop?Wc(g):g.length;if(E===A||E===C){l.push({kind:"preserved",path:{messageIndex:b[E]},reason:"protected_live_tail",originalSize:Ds(g[E]),finalSize:Ds(g[E])}),E+=1;continue}let O=DN(g,E);if(Iy(O,A)){E+=1;continue}if(Iy(O,C)){E+=1;continue}if(GN(O,N)){E+=1;continue}for(let D of O)l.push({kind:"dropped_message",path:{messageIndex:b[D]},reason:O.size>1||cf(g[D]).size>0?"tool_pair_boundary":"over_budget",originalSize:Ds(g[D]),finalSize:0});let L=KN(g,b,O);g=L.messages,b=L.originalIndexes,T=Id(g,i.estimateMessageTokens)}if(T>i.targetTokens)return u.push({code:"budget_unachievable_with_protections",message:"Projection could not reach budget without violating protected content."}),{status:"failed",messages:g,actions:l,liveTailHandling:"included_degraded",estimatedTokens:T,warnings:u};return{status:"ok",messages:g,actions:l,liveTailHandling:l.length>0?"included_degraded":"included_verbatim",estimatedTokens:T,warnings:u}}async function XN(i){i.signal?.throwIfAborted();let l=await Bt(i.signal?{...i.providerConfig,abortSignal:i.signal}:i.providerConfig);i.signal?.throwIfAborted();let u="",c=0,g=!1,b=!1,I;for await(let k of l.createMessage(i.systemPrompt,[{role:"user",content:i.request}]))if(i.signal?.throwIfAborted(),k.type==="text"){if(u+=k.text,i.maxOutputChars&&u.length>i.maxOutputChars)throw Error("Summary exceeded its output limit.")}else if(k.type==="reasoning")c+=k.reasoning?.length??0;else if(k.type==="done"){if(!k.success&&k.error)throw Error(k.error);I=k.incompleteReason??I,g||=!k.success}else if(k.type==="tool_calls")b=!0;return i.signal?.throwIfAborted(),{text:u,reasoningChars:c,failed:g,usedTools:b,incompleteReason:I}}var Kc=1024;function JN(i){return cS({messages:i.messages,targetTokens:Math.max(1,i.targetTokens),policyIntent:"agentic_summary",estimateMessageTokens:i.estimateMessageTokens})}function VN(i){try{return JSON.stringify(i).length}catch{return String(i).length}}async function YN(i){let l=i.context.messages;if(l.length<2)return;let u=TN(l,i.preserveRecentTokens,i.estimateMessageTokens);if(u<=0||u>=l.length)return;let c=l.slice(0,u),g=uS(c),b=g>=0?dS(c[g])?.summary:void 0,I=g>=0?c.slice(g+1):c;if(I.length===0)return;let k=my(c),T=MN({activeProviderConfig:i.providerConfig,summarizer:i.summarizer}),E=fN(T),A=i.summarizer===void 0,C=Math.max(i.context.budget.request.maxInputTokens,i.context.budget.request.triggerTokens,Kc);if(E===void 0&&!A)i.logger?.log("Agentic compaction summarizer has no known input limit; using conservative summary budget",{severity:"warn",summarizerProviderId:T.providerId,summarizerModelId:T.modelId,fallbackInputLimit:Kc});let N=E??(A?C:Kc),O=jt(yy({previousSummary:b,conversationText:"",fileOps:k}).length),L=N-O;if(L<=0){i.logger?.debug("Skipped agentic compaction: summarizer budget exhausted",{summarizerProviderId:T.providerId,summarizerModelId:T.modelId,summarizerInputLimit:N,summaryRequestOverheadTokens:O});return}let D=JN({messages:I,targetTokens:L,estimateMessageTokens:i.estimateMessageTokens});if(D.status==="failed"){i.logger?.log("Skipped agentic compaction: summary input budget failed",{severity:"warn",budgetWarnings:D.warnings.map((G)=>G.code),summaryInputEstimatedTokens:D.estimatedTokens,targetTokens:L,summarizerProviderId:T.providerId,summarizerModelId:T.modelId});return}let U=my(D.messages),F=wN(D.messages),j=yy({previousSummary:b,conversationText:F,fileOps:U});i.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:c.length,newMessagesToFold:I.length,preservedMessages:l.length-u,previousSummaryChars:b?.length??0,conversationTextChars:F.length,summaryRequestChars:j.length,summaryRequestEstimatedTokens:jt(j.length),newMessagesJsonChars:VN(I),summaryInputEstimatedTokens:D.estimatedTokens,summaryInputActions:D.actions.length,summaryInputWarnings:D.warnings.map((G)=>G.code),summaryRequestOverheadTokens:O,summarizerProviderId:T.providerId,summarizerModelId:T.modelId,summarizerInputLimit:N,maxInputTokens:i.context.budget.request.maxInputTokens,triggerTokens:i.context.budget.request.triggerTokens});let H=await XN({providerConfig:T,systemPrompt:"Summarize the provided coding session into a concise continuation note with detailed next steps.",request:j});i.logger?.debug("Generated compaction summary",{outputChars:H.text.length,reasoningChars:H.reasoningChars,incompleteReason:H.incompleteReason,modelId:T.modelId,providerId:T.providerId});let Q=H.text.trim();if(!Q){i.logger?.log("Skipped agentic compaction: summarizer returned no summary text",{severity:"warn",summarizerProviderId:T.providerId,summarizerModelId:T.modelId,summarizerMaxOutputTokens:T.maxOutputTokens,reasoningChars:H.reasoningChars,incompleteReason:H.incompleteReason,likelyCause:H.reasoningChars>0?"output_budget_consumed_by_reasoning":"empty_response"});return}let z=RN(Q,U),W=l.reduce((G,se)=>G+i.estimateMessageTokens(se),0),ee=[NN({summary:z,fileOps:U,tokensBefore:W,userRunSpan:Sm(c)}),...l.slice(u)],te=ee.reduce((G,se)=>G+i.estimateMessageTokens(se),0);i.logger?.debug("Performed agentic compaction",{messagesBefore:l.length,messagesAfter:ee.length,messagesSummarized:u,messagesPreserved:l.length-u,tokensBefore:W,tokensAfter:te,maxInputTokens:i.context.budget.request.maxInputTokens});let oe=D.actions.filter((G)=>G.reason==="over_budget"||G.reason==="tool_pair_boundary").length;return{messages:ee,budget:{policyIntent:"agentic_summary",actionCount:oe,warningCount:D.warnings.length,liveTailHandling:D.liveTailHandling}}}function ky(i,l){return i.reduce((u,c)=>u+l(c),0)}function QN(i){if(typeof i.content==="string"){let u=i.content.trim();return u?{...i,content:u}:void 0}let l=i.content.filter((u)=>u.type!=="text"||u.text.trim());if(l.length===0)return;return{...i,content:l.map((u)=>u.type==="text"?{...u,text:u.text.trim()}:u)}}function ZN(i,l){return JSON.stringify(i)!==JSON.stringify(l)}var eO=3;function Sy(i){if(i.role!=="assistant")return;if(typeof i.content==="string")return i.content.trim()||void 0;return i.content.filter((l)=>l.type==="text").map((l)=>l.text.trim()).filter(Boolean).join(`
417
+ `)||void 0}function Ty(i,l){let u=l.length>0?`
418
+
419
+ Your recent responses:
420
+ ${l.join(`
421
+ ---
422
+ `)}`:"";return{type:"text",text:`<SYSTEM_NOTICE>
423
+ Earlier context was compacted. Summary of your actions after the request above:
424
+ ${CN(i)}${u}</SYSTEM_NOTICE>`}}function Kd(i,l){if(typeof i.content==="string")return i.content.trim()?[{type:"text",text:i.content}]:[];if(l)return[...i.content];return i.content.filter((u)=>u.type!=="file"&&u.type!=="image")}function tO(i,l){let u=new Map;l.forEach((E,A)=>{if(E.id)u.set(E.id,A)});let c=(E)=>E.id?u.get(E.id):void 0,g=new Set;for(let E=l.length-1;E>=0&&g.size<eO;E-=1)if(Sy(l[E]))g.add(E);let b=(E,A)=>{let C=[];for(let N=E;N<A;N+=1){if(!g.has(N))continue;let O=Sy(l[N]);if(O)C.push(O)}return C},I=-1;for(let E=i.length-1;E>=0;E-=1)if(qs(i[E])){I=E;break}let k=[],T=0;while(T<i.length){if(!qs(i[T])){let C=c(i[T]);k.push({message:i[T],firstOriginalIndex:C,lastOriginalIndex:C,isTypedUser:!1}),T+=1;continue}let E=T;while(E+1<i.length&&qs(i[E+1]))E+=1;let A=i[T];if(E>T){let C=[],N=0;for(let O=T;O<=E;O+=1){if(N+=ud(i[O]),O>T){let L=c(i[O-1]),D=c(i[O]);if(L!==void 0&&D!==void 0&&D>L+1){let U=gy(l.slice(L+1,D)),F=b(L+1,D);if(fy(U)||F.length>0)C.push(Ty(U,F))}}C.push(...Kd(i[O],O===I))}A={...i[T],content:C,metadata:{...i[T].metadata,userRunSpan:N}}}else{let C=Kd(A,T===I);if(Array.isArray(A.content)&&C.length!==A.content.length)A={...A,content:C}}k.push({message:A,firstOriginalIndex:c(i[T]),lastOriginalIndex:c(i[E]),isTypedUser:!0}),T=E+1}for(let E=0;E<k.length;E+=1){let A=k[E];if(!A.isTypedUser||A.lastOriginalIndex===void 0)continue;let C=k[E+1],N=C?C.firstOriginalIndex:l.length;if(N===void 0||N<=A.lastOriginalIndex+1)continue;let O=gy(l.slice(A.lastOriginalIndex+1,N)),L=b(A.lastOriginalIndex+1,N);if(!fy(O)&&L.length===0)continue;A.message={...A.message,content:[...Kd(A.message,!0),Ty(O,L)]}}return k.map((E)=>E.message)}function _y(i){if(!i.metrics)return i;let{metrics:l,...u}=i;return u}function rO(i){let l=!1,u={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,cost:0};for(let c of i){let g=c.metrics;if(!g)continue;l=!0,u.inputTokens+=g.inputTokens??0,u.outputTokens+=g.outputTokens??0,u.cacheReadTokens+=g.cacheReadTokens??0,u.cacheWriteTokens+=g.cacheWriteTokens??0,u.cost+=g.cost??0}return l?u:void 0}function sO(i,l){if(!i)return l;if(!l)return i;return{inputTokens:i.inputTokens+l.inputTokens,outputTokens:i.outputTokens+l.outputTokens,cacheReadTokens:i.cacheReadTokens+l.cacheReadTokens,cacheWriteTokens:i.cacheWriteTokens+l.cacheWriteTokens,cost:i.cost+l.cost}}function iO(i){let l=i?.metadata;if(!l||l.kind!=="compaction")return{messagesRemoved:0,usageBefore:void 0};let u=l.usageBefore;return{messagesRemoved:typeof l.messagesRemoved==="number"?l.messagesRemoved:0,usageBefore:u&&typeof u==="object"?{inputTokens:u.inputTokens??0,outputTokens:u.outputTokens??0,cacheReadTokens:u.cacheReadTokens??0,cacheWriteTokens:u.cacheWriteTokens??0,cost:u.cost??0}:void 0}}var pS="preserved";function mS(i){return i.metadata?.compaction===pS}function nO(i){if(mS(i))return i;return{...i,metadata:{...i.metadata,compaction:pS}}}function oO(i){if(typeof i.content==="string")return i.content.trim()?i:void 0;let l=i.content.filter((u)=>u.type!=="thinking"&&u.type!=="redacted_thinking");if(!l.some((u)=>u.type==="text"&&u.text.trim()))return;return{...i,content:l}}function aO(i){let l=i.context.messages,u=i.estimateMessageTokens;if(l.length<2)return;let c=Math.max(1,Math.min(i.context.budget.messages.targetTokens,i.context.budget.messages.triggerTokens)),g=[];for(let W=0;W<l.length;W+=1)if(qs(l[W]))g.push(W);let b=new Map;for(let W of g){let ee=QN(l[W]);if(ee)b.set(W,ee)}if(b.size===0)return;let I=g[g.length-1],k=0;for(let[W,ee]of b)k+=u({...ee,content:Kd(ee,W===I)});let T=new Set;for(let W=0;W<l.length;W+=1){if(b.has(W))continue;if(mS(l[W]))T.add(W),k+=u(l[W])}let E=new Set;{let W=l.length,ee=0;for(let te=l.length-1;te>I;te-=1){if(T.has(te))break;let oe=u(l[te]);if(k+ee+oe>c)break;ee+=oe,W=te}while(W<l.length&&l[W].role!=="assistant")W+=1;for(let te=W;te<l.length;te+=1)E.add(te),k+=u(l[te])}let A=new Map;for(let W=g.length-2;W>=0;W-=1){let ee=g[W]+1,te=g[W+1];for(let oe=te-1;oe>=ee;oe-=1){let G=l[oe];if(T.has(oe))break;if(G.role!=="assistant")continue;if(Array.isArray(G.content)&&G.content.some((Pe)=>Pe.type==="tool_use"))continue;let se=oO(G);if(se){let Pe=u(se);if(k+Pe<=c)A.set(oe,se),k+=Pe}break}}let C=[];for(let W=0;W<l.length;W+=1){let ee=b.get(W);if(ee){C.push(ee);continue}if(T.has(W)||E.has(W)){C.push(l[W]);continue}let te=A.get(W);if(te)C.push(te)}let N=ky(l,i.estimateMessageTokens),O=Math.min(Math.max(c,k),Math.max(1,i.context.budget.messages.triggerTokens)),L=cS({messages:C,targetTokens:O,policyIntent:"basic_compaction_projection",estimateMessageTokens:i.estimateMessageTokens});if(L.status==="failed")i.logger?.debug("Basic compaction returned best-effort projection",{budgetWarnings:L.warnings.map((W)=>W.code),projectedTokens:L.estimatedTokens,targetTokens:c,maxInputTokens:i.context.budget.request.maxInputTokens});let D=tO(L.messages,l);if(!ZN(l,D))return;let U=iO(D[0]),F=sO(U.usageBefore,rO(l)),j={kind:"compaction",reason:i.context.mode==="manual"?"manual_compaction":i.context.mode==="overflow_recovery"?"overflow_recovery_compaction":"auto_compaction",displayRole:"system",messagesRemoved:U.messagesRemoved+(l.length-D.length),...F?{usageBefore:F}:{}},H=D.map((W,ee)=>{if(ee===0&&qs(W))return _y({...W,metadata:{...W.metadata,...j,userRunSpan:ud(W)}});return _y(qs(W)?W:nO(W))}),Q=ky(H,i.estimateMessageTokens),z=L.actions.filter((W)=>W.reason==="over_budget"||W.reason==="tool_pair_boundary").length;return i.logger?.debug("Performed basic compaction",{messagesBefore:l.length,messagesAfter:H.length,messagesRemoved:l.length-H.length,tokensBefore:N,tokensAfter:Q,budgetStatus:L.status,budgetActions:z,budgetWarnings:L.warnings.map((W)=>W.code),targetTokens:c,maxInputTokens:i.context.budget.request.maxInputTokens}),{messages:H,budget:{policyIntent:"basic_compaction_projection",actionCount:z,warningCount:L.warnings.length,liveTailHandling:L.liveTailHandling}}}var lO=0.5;function Ey(i,l){if(l.aborted)return!0;return i instanceof Error&&(i.name==="AbortError"||i.name==="AgentRuntimeAbortError")}function _m(i){return i instanceof Error?{errorName:i.name,errorMessage:i.message}:{errorMessage:String(i)}}function hS(i){try{return JSON.stringify(i).length}catch{return String(i).length}}function dO(i){let l=0,u=0,c=0;for(let g of i){if(!Array.isArray(g.content))continue;for(let b of g.content){if(b.type!=="tool_result")continue;let I=hS(b.content);l+=1,u+=I,c=Math.max(c,I)}}return{toolResultCount:l,toolResultSerializedChars:u,maxToolResultSerializedChars:c}}var Gc={basic:({context:i,estimateMessageTokens:l,logger:u})=>aO({context:i,estimateMessageTokens:l,logger:u}),agentic:({context:i,providerConfig:l,compaction:u,estimateMessageTokens:c,logger:g})=>YN({context:i,providerConfig:l,summarizer:u?.summarizer,preserveRecentTokens:Math.min(u?.preserveRecentTokens??hN,i.budget.messages.targetTokens),estimateMessageTokens:c,logger:g})};function uO(i){let l=typeof i.manualTargetRatio==="number"&&Number.isFinite(i.manualTargetRatio)?i.manualTargetRatio:0.5,u=Math.min(0.95,Math.max(0.05,l));return Math.max(1,Math.floor(Math.min(i.messageTriggerTokens,i.messageInputTokens*u)))}function cO(i){let l=i.messagePairCount>=5&&typeof i.modelMaxTokens==="number"&&Number.isFinite(i.modelMaxTokens)&&i.modelMaxTokens<i.maxInputTokens?Math.floor(i.maxInputTokens*lO):Math.floor(i.triggerTokens*mN),u=Math.max(1,i.triggerTokens-1);return Math.max(1,Math.min(l,i.maxInputTokens,u))}function Ay(i,l){return Math.max(1,Math.floor(i-l))}function pO(i){let l=0,u=!1;for(let c of i)if(c.role==="user")u=!0;else if(c.role==="assistant"&&u)l+=1,u=!1;return l}function fS(i,l={}){let u={...i.compaction,...l.compaction};if(u.enabled!==!0)return;let c=bN(),g=u?.strategy??"agentic",b=Gc[g],I=l.mode??"auto",k=u?.compact?"custom":g;return async(T)=>{let E=T.overflowRecovery?"overflow_recovery":I,A=T.apiMessages.reduce((ce,Se)=>ce+c(Se),0),C=pr({systemPrompt:T.systemPrompt,messages:T.apiMessages,tools:T.tools}),N=T.messages.reduce((ce,Se)=>ce+c(Se),0),O=Math.max(0,C-A),L=Tm({maxInputTokens:T.model.info?.maxInputTokens,contextWindow:T.model.info?.contextWindow});if(E==="auto"&&L===void 0)return;let D=L??uN,U=typeof T.previousRequestInputTokens==="number"&&T.previousRequestInputTokens>0?T.previousRequestInputTokens:0,F=U>0&&C>0?Math.min(pN,Math.max(1,U/C)):1,j=D/F,H=j*Pn,Q=Ay(H,O),z=C>=H;if(i.logger?.debug("Context compaction diagnostics",{mode:E,strategy:g,iteration:T.iteration,providerId:i.providerId,modelId:i.modelId,requestInputTokens:C,apiMessageTokens:A,messageInputTokens:N,requestOverheadTokens:O,maxInputTokens:j,rawMaxInputTokens:D,actualPreviousInputTokens:U,underestimateFactor:F,requestTriggerTokens:H,messageTriggerTokens:Q,thresholdRatio:Pn,shouldCompact:z,messageCount:T.messages.length,apiMessageCount:T.apiMessages.length,apiMessagesJsonChars:hS(T.apiMessages),...dO(T.apiMessages)}),E==="auto"&&!z)return;let W,ee;if(E==="auto")W=cO({maxInputTokens:j,modelMaxTokens:T.model.info?.maxTokens,triggerTokens:H,messagePairCount:pO(T.messages)}),ee=Ay(W,O);else ee=uO({messageInputTokens:N,messageTriggerTokens:Q,manualTargetRatio:l.manualTargetRatio}),W=O+ee;let te={agentId:T.agentId,conversationId:T.conversationId,parentAgentId:T.parentAgentId,iteration:T.iteration,messages:T.messages,model:T.model,mode:E,abortSignal:T.abortSignal,budget:{request:{inputTokens:C,maxInputTokens:j,triggerTokens:H,targetTokens:W,overheadTokens:O,thresholdRatio:Pn,utilizationRatio:j>0?C/j:0},messages:{inputTokens:N,triggerTokens:Q,targetTokens:ee}}},oe=E==="manual"?"manual_compaction":E==="overflow_recovery"?"overflow_recovery_compaction":"auto_compaction",G=E==="manual"?"":E==="overflow_recovery"?"overflow-recovery-":"auto-";T.emitStatusNotice?.(`${G}compacting`,{kind:oe,reason:oe,phase:"started",iteration:T.iteration,triggerTokens:H,targetTokens:W,maxInputTokens:j,messageTargetTokens:ee});let se=T.messages.length,Pe=Date.now(),Le={context:te,providerConfig:{...tS(i),abortSignal:T.abortSignal},compaction:u,estimateMessageTokens:c,logger:i.logger},Te=k,le;if(E==="overflow_recovery"){if(u?.compact){try{le=await u.compact(te)}catch(ce){if(Ey(ce,T.abortSignal))throw ce;i.logger?.log("Custom compaction failed during overflow recovery; falling back to basic compaction",{severity:"warn",..._m(ce)}),le=void 0}if(le?.messages){let ce=le.messages.reduce((Se,_e)=>Se+c(_e),0);if(!(le.messages.length>0&&ce<N&&ce<=ee))i.logger?.log("Custom compaction did not produce an acceptable overflow-recovery transcript; falling back to basic compaction",{severity:"warn",customMessageCount:le.messages.length,customMessageTokens:ce,messageTargetTokens:ee}),le=void 0}}if(!le?.messages)Te="basic",le=await Gc.basic(Le)}else if(u?.compact)le=await u.compact(te);else try{le=await b(Le)}catch(ce){if(g!=="agentic"||Ey(ce,T.abortSignal))throw ce;i.logger?.log("Agentic compaction failed; falling back to basic compaction",{severity:"warn",..._m(ce)}),Te="basic",le=await Gc.basic(Le)}let Ie=Date.now()-Pe,we=i.sessionId??T.conversationId,He={agentId:T.agentId,conversationId:T.conversationId,parentAgentId:T.parentAgentId??void 0};if(le?.messages){let ce=le.messages.reduce((_e,Ee)=>_e+c(Ee),0),Se=O+ce;if(i.logger?.log("Context compaction completed",{severity:"info",strategy:Te,maxInputTokens:j,messageInputTokens:N,apiInputTokens:A,requestInputTokens:C,requestOverheadTokens:O,afterMessageTokens:ce,afterRequestTokens:Se,tokensSaved:C-Se,utilizationBefore:`${(C/j*100).toFixed(1)}%`,utilizationAfter:`${(Se/j*100).toFixed(1)}%`,thresholdTrigger:`${(Pn*100).toFixed(1)}%`,messagesBefore:se,messagesAfter:le.messages.length,messagesRemoved:se-le.messages.length}),T.emitStatusNotice?.(`${G}compacted`,{kind:oe,reason:oe,phase:"completed",iteration:T.iteration,tokensBefore:C,tokensAfter:Se,messagesBefore:se,messagesAfter:le.messages.length,maxInputTokens:j}),DA(i.telemetry,{ulid:we,strategy:Te,mode:E,messagesBefore:se,messagesAfter:le.messages.length,messagesRemoved:se-le.messages.length,tokensBefore:C,tokensAfter:Se,tokensSaved:C-Se,triggerTokens:H,maxInputTokens:j,thresholdRatio:Pn,durationMs:Ie,provider:i.providerId,modelId:i.modelId,...He}),le.budget&&(le.budget.actionCount>0||le.budget.warningCount>0))FA(i.telemetry,{ulid:we,strategy:Te,mode:E,policyIntent:le.budget.policyIntent,actionCount:le.budget.actionCount,warningCount:le.budget.warningCount,liveTailHandling:le.budget.liveTailHandling,provider:i.providerId,modelId:i.modelId,...He}),T.emitStatusNotice?.("compaction-budget-adjusted",{kind:"compaction_budget_emergency",reason:"compaction_budget_emergency",iteration:T.iteration,policyIntent:le.budget.policyIntent,actionCount:le.budget.actionCount,warningCount:le.budget.warningCount})}else T.emitStatusNotice?.(`${G}compaction-skipped`,{kind:oe,reason:oe,phase:"skipped",iteration:T.iteration,maxInputTokens:j}),UA(i.telemetry,{ulid:we,strategy:Te,mode:E,reason:"no_result",tokensBefore:C,triggerTokens:H,maxInputTokens:j,thresholdRatio:Pn,durationMs:Ie,provider:i.providerId,modelId:i.modelId,...He});return le}}function mO(i){let l=fS(i.config,{mode:"manual",compaction:{enabled:!0,strategy:"agentic",preserveRecentTokens:0}}),u=l!==void 0;return async(c)=>{if(u&&l&&uS(c.messages)<0)try{let g=await l({...c,emitStatusNotice:(b,I)=>c.emitStatusNotice?.(b,{...I,importedFrom:i.importedFrom})});if(u=!1,g?.messages)return g}catch(g){if(c.abortSignal.aborted)throw g;u=!1,i.config.logger?.log("Failed to summarize imported session on resume; continuing with the raw transcript",{severity:"warn",sessionId:i.config.sessionId,..._m(g)})}return i.next?.(c)}}function hO(i){return async(l)=>{let u=i.getState?.(),c=u?km(u,l.messages):void 0;if(u&&c){let b=i.compact?await i.compact({...l,messages:c,apiMessages:await i.prepareApiMessages(c)}):void 0;if(b?.messages){let I=b.systemPrompt??u.system_prompt,k=uy({sourceMessages:l.messages,compactedMessages:b.messages,conversationId:l.conversationId,systemPrompt:I});return await i.saveState?.(k,l.messages),{...b,...I!==void 0?{systemPrompt:I}:{}}}return{messages:c,...b?.systemPrompt!==void 0?{systemPrompt:b.systemPrompt}:u.system_prompt!==void 0?{systemPrompt:u.system_prompt}:{}}}let g=i.compact?await i.compact(l):void 0;if(g?.messages){let b=uy({sourceMessages:l.messages,compactedMessages:g.messages,conversationId:l.conversationId,systemPrompt:g.systemPrompt});await i.saveState?.(b,l.messages)}return g}}var Cy=64,gO=/[^a-zA-Z0-9_-]+/g,gS=8,yO=1,vO="mcp_tool";function wO(i){return fO("sha1").update(i).digest("hex").slice(0,gS)}function bO(i){return i.replace(gO,"_")}var pf=({serverName:i,toolName:l})=>{let u=`${i}__${l}`,c=bO(u);if(c===u&&u.length<=Cy)return u;let g=wO(u),b=Cy-yO-gS;return`${c.slice(0,b)||vO}_${g}`},yS=new WeakSet;function vS(i){return yS.add(i),i}function Ry(i){return yS.has(i)}var Ny="CLINE_PLUGIN_RUNTIME_DIR",Oy=!1,$y;function Ly(i){return Py(gu(i,"plugin-sandbox-bootstrap.js"))&&Py(gu(i,"node_modules","@cline","core","package.json"))}function PO(){let i=process.env[Ny]?.trim();if(i){let u=xO(i);if(!Ly(u))throw Error(`${Ny} does not contain a complete plugin runtime: ${i}`);return u}if(typeof __CLINE_PLUGIN_RUNTIME_DIR__<"u")return __CLINE_PLUGIN_RUNTIME_DIR__;if(Oy)return $y;Oy=!0;let l=My(RO(import.meta.url));for(;;){for(let c of[l,gu(l,"plugin-runtime"),gu(l,"dist","plugin-runtime")])if(Ly(c))return $y=c,c;let u=My(l);if(u===l)return;l=u}}var MO;function NO(){return MO}var OO=bS(kS(import.meta.url)),BQ=AO(import.meta.url),$O=ft(OO,"..","..","..","..",".."),HQ=DO($O),zQ=new Set(EO.flatMap((i)=>[i,i.replace(/^node:/,"")])),Xd=new Set(sr),LO=["development","node","import","require","default"];function DO(i){let l={},u={"@cline/sdk":ft(i,"packages/sdk/src/index.ts"),"@cline/agents":ft(i,"packages/agents/src/index.ts"),"@cline/core":ft(i,"packages/core/src/index.ts"),"@cline/llms":ft(i,"packages/llms/src/index.ts"),"@cline/shared":ft(i,"packages/shared/src/index.ts"),"@cline/shared/storage":ft(i,"packages/shared/src/storage/index.ts"),"@cline/shared/db":ft(i,"packages/shared/src/db/index.ts")};for(let[c,g]of Object.entries(u))if(tn(g))l[c]=g;for(let c of["agents","core","llms","shared"]){let g=ft(i,"packages",c),b=ft(g,"package.json");if(!tn(b))continue;try{let I=JSON.parse(wS(b,"utf8"));if(typeof I.name!=="string"||!I.exports)continue;if(typeof I.exports==="string"){let k=ft(g,I.exports);if(tn(k))l[I.name]=k;continue}if(typeof I.exports!=="object")continue;for(let[k,T]of Object.entries(I.exports)){let E=UO(g,T);if(!E)continue;let A=k==="."?I.name:`${I.name}/${k.replace(/^\.\//,"")}`;l[A]=E}}catch{}}return l}function UO(i,l){let u=SS(l);if(!u)return null;let c=FO(i,u);for(let g of c)if(tn(g))return g;return null}function SS(i,l=new Set){if(typeof i==="string")return i;if(!i||typeof i!=="object")return null;if(l.has(i))return null;l.add(i);let u=i;for(let c of LO){let g=SS(u[c],l);if(g)return g}return null}function FO(i,l){let u=l.replace(/^\.\//,""),c=[ft(i,l)];if(u.startsWith("dist/")){let g=u.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[ft(i,`${g}.ts`),ft(i,`${g}.tsx`),ft(i,`${g}.mts`),ft(i,`${g}.cts`),...c]}return c}function qO(i){return!(i.startsWith(".")||i.startsWith("/")||i.startsWith("file:")||i.startsWith("data:")||i.startsWith("http:")||i.startsWith("https:"))}function jO(i,l){let u=l.startsWith("file:")?kS(l):CO(l)?l:ft(bS(i),l);if(tn(u)&&Xd.has(IS(u)))return u;for(let c of Xd){let g=`${u}${c}`;if(tn(g))return g}for(let c of Xd){let g=ft(u,`index${c}`);if(tn(g))return g}return null}function BO(i){let l=new Set,u=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let c of u)for(let g of i.matchAll(c)){let b=g[1];if(b)l.add(b)}return[...l]}function mf(i){let l=[],u=(c,g)=>{if(g.has(c))return;g.add(c);let b;try{b=wS(c,"utf8")}catch{l.push(`${c}:missing`);return}if(l.push(`${c}:${b.length}:${HO(b)}`),!Xd.has(IS(c)))return;for(let I of BO(b)){if(qO(I))continue;let k=jO(c,I);if(k)u(k,g)}};return u(i,new Set),l.join("|")}function HO(i){let l=2166136261,u=16777619^i.length;for(let c=0;c<i.length;c++){let g=i.charCodeAt(c);l=Math.imul(l^g,16777619),u=Math.imul(u^g,1540483477),u^=u>>>15}return`${(l>>>0).toString(36)}${(u>>>0).toString(36)}`}var vu=2147483647;function _S(i){return typeof i==="number"&&Number.isInteger(i)&&i>0&&i<=2147483647?i:void 0}var GO=300;function Xc(i){if(i instanceof Error)return i;return Error(String(i))}function Em(i){return i.exitCode===null&&i.signalCode===null}function kd(i){return Em(i)&&i.connected}var XO="CLINE_JS_RUNTIME_PATH";function Am(i){let l=i?.trim();if(!l)return!1;let u=KO(l).toLowerCase();return u==="node"||u==="node.exe"||u==="bun"||u==="bun.exe"}function hf(i,l={}){let u=l.isBunRuntime??typeof globalThis.Bun<"u",c=l.selfExecPath??process.execPath;return u&&!!i&&i===c&&!Am(i)}function ES(i={}){let l=i.env??process.env,u=i.runtimeExecutable?.trim()||l[XO]?.trim();if(u)return u;let c=i.execPath?.trim()||process.execPath;if(Am(c))return c;for(let g of[l.BUN_EXEC_PATH,l.npm_node_execpath,l.NODE]){let b=g?.trim();if(b&&Am(b))return b}if(hf(c,i.host))return c;return"node"}function JO(i,l={}){if(l.launcher)return[l.launcher.command,...l.launcher.argsPrefix,...i];let u=ES({env:l.env,execPath:l.execPath,runtimeExecutable:l.runtimeExecutable}),c=hf(u)?["--use-system-ca",...i]:i;return It([u,...c],{env:l.env,execArgv:l.execArgv,debugRole:l.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class AS{options;idleTimeoutMs;process=null;requestCounter=0;pending=new Map;idleTimer;shutdowns=new Map;constructor(i){if(this.options=i,this.idleTimeoutMs=_S(i.idleTimeoutMs),i.idleTimeoutMs!==void 0&&this.idleTimeoutMs===void 0)throw RangeError(`idleTimeoutMs must be an integer between 1 and ${vu}`)}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest(i){let l=this.pending.get(i);if(!l)return;if(this.pending.delete(i),l.timeout)clearTimeout(l.timeout);return this.armIdleTimer(l.child),l}clearIdleTimer(){if(!this.idleTimer)return;clearTimeout(this.idleTimer),this.idleTimer=void 0}hasPendingRequests(i){for(let l of this.pending.values())if(l.child===i)return!0;return!1}armIdleTimer(i){if(this.process!==i)return;if(this.clearIdleTimer(),this.idleTimeoutMs===void 0||!kd(i)||this.hasPendingRequests(i))return;let l=setTimeout(()=>{if(this.idleTimer===l)this.idleTimer=void 0;if(this.process!==i||!kd(i)||this.hasPendingRequests(i))return;this.shutdownProcess(i).catch(()=>{})},this.idleTimeoutMs);l.unref(),this.idleTimer=l}start(){if(this.process&&kd(this.process))return;let i=this.process;if(this.process=null,this.clearIdleTimer(),i&&Em(i))this.shutdownProcess(i).catch(()=>{});let l=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],u=JO(l,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable,launcher:this.options.launcher}),c=u[0]??ES(this.options),g={...We(process.env)};if(this.options.launcher)delete g.BUN_BE_BUN;else if(hf(c))g.BUN_BE_BUN="1";let b=WO(c,u.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:g,windowsHide:!0});this.process=b;let I="",k=(T)=>{let E=I+T;I=E.length>4000?E.slice(-4000):E};b.stderr?.setEncoding("utf8"),b.stderr?.on("data",(T)=>{k(T)}),b.on("message",(T)=>{this.onMessage(b,T)}),b.on("error",(T)=>{this.failPendingForProcess(b,Error(`${this.processLabel} process error: ${Xc(T).message}`))}),b.on("exit",(T,E)=>{if(this.process===b)this.process=null,this.clearIdleTimer();let A=I.trim();this.failPendingForProcess(b,Error(`${this.options.name??"sandbox"} process exited (code=${String(T)}, signal=${String(E)})${A?`: ${A}`:""}`))}),this.armIdleTimer(b)}async call(i,l,u={}){this.start();let c=this.process;if(!c||!kd(c))throw Error(`${this.processLabel} process is not available`);this.clearIdleTimer();let g=`req_${++this.requestCounter}`,b={type:"call",id:g,method:i,args:l};return await new Promise((I,k)=>{let T={child:c,resolve:(E)=>I(E),reject:k};if((u.timeoutMs??0)>0)T.timeout=setTimeout(()=>{let E=this.clearPendingRequest(g);if(!E)return;this.shutdownProcess(E.child).catch(()=>{}),E.reject(Error(`${this.processLabel} call timed out after ${u.timeoutMs}ms: ${i}`))},u.timeoutMs);this.pending.set(g,T);try{c.send(b,(E)=>{if(!E)return;let A=this.clearPendingRequest(g);if(!A)return;A.reject(Error(`${this.processLabel} failed to send call "${i}": ${Xc(E).message}`))})}catch(E){this.clearPendingRequest(g),k(Xc(E))}})}async shutdown(){this.clearIdleTimer();let i=this.process,l=[...this.shutdowns.values()];if(i)l.push(this.shutdownProcess(i));if(l.length===0){this.failPending(Error(`${this.processLabel} shutdown`));return}await Promise.all(l)}shutdownProcess(i){let l=this.shutdowns.get(i);if(l)return l;if(this.process===i)this.process=null,this.clearIdleTimer();let u=this.terminateProcess(i).finally(()=>{if(this.shutdowns.get(i)===u)this.shutdowns.delete(i)});return this.shutdowns.set(i,u),u}async terminateProcess(i){if(!Em(i)){this.failPendingForProcess(i,Error(`${this.processLabel} shutdown`));return}await new Promise((l)=>{let u=setTimeout(()=>{try{i.kill("SIGKILL")}catch{}l()},GO);i.once("exit",()=>{clearTimeout(u),l()});try{i.kill("SIGTERM")}catch{clearTimeout(u),l()}}),this.failPendingForProcess(i,Error(`${this.processLabel} shutdown`))}onMessage(i,l){if(!l)return;if(l.type==="event"){if(this.process===i&&typeof l.name==="string"&&l.name.length>0)this.options.onEvent?.({name:l.name,payload:l.payload});return}if(l.type!=="response"||!l.id)return;let u=this.pending.get(l.id);if(!u||u.child!==i)return;let c=this.clearPendingRequest(l.id);if(!c)return;if(l.ok){c.resolve(l.result);return}c.reject(Error(l.error?.message||`${this.processLabel} call failed`))}failPendingForProcess(i,l){for(let[u,c]of this.pending.entries()){if(c.child!==i)continue;if(this.pending.delete(u),c.timeout)clearTimeout(c.timeout);c.reject(l)}}failPending(i){for(let[l,u]of this.pending.entries()){if(this.pending.delete(l),u.timeout)clearTimeout(u.timeout);u.reject(i)}}}function Jc(i){if(i instanceof Error)return i;return Error(String(i))}class CS{options;idleTimeoutMs;worker=null;requestCounter=0;pending=new Map;idleTimer;exited=new WeakSet;shutdowns=new Map;outboxes=new WeakMap;draining;stopping=new WeakSet;constructor(i){if(this.options=i,this.idleTimeoutMs=_S(i.idleTimeoutMs),i.idleTimeoutMs!==void 0&&this.idleTimeoutMs===void 0)throw RangeError(`idleTimeoutMs must be an integer between 1 and ${vu}`)}get label(){return this.options.name??"worker-sandbox"}isAvailable(i){return!this.exited.has(i)&&!this.shutdowns.has(i)}clearIdleTimer(){if(!this.idleTimer)return;clearTimeout(this.idleTimer),this.idleTimer=void 0}hasPendingRequests(i){for(let l of this.pending.values())if(l.worker===i)return!0;return!1}armIdleTimer(i){if(this.worker!==i)return;if(this.clearIdleTimer(),this.idleTimeoutMs===void 0||!this.isAvailable(i)||this.hasPendingRequests(i))return;let l=setTimeout(()=>{if(this.idleTimer===l)this.idleTimer=void 0;if(this.worker!==i||!this.isAvailable(i)||this.hasPendingRequests(i))return;this.draining=this.stopGracefully(i).finally(()=>{this.draining=void 0})},this.idleTimeoutMs);l.unref(),this.idleTimer=l}clearPendingRequest(i){let l=this.pending.get(i);if(!l)return;if(this.pending.delete(i),l.timeout)clearTimeout(l.timeout);return this.armIdleTimer(l.worker),l}start(){if(this.worker&&this.isAvailable(this.worker))return;this.worker=null,this.clearIdleTimer();let i=this.options.bootstrapFile?new Dy(this.options.bootstrapFile,this.workerOptions(!1)):new Dy(this.options.bootstrapScript??"",this.workerOptions(!0));this.worker=i,this.outboxes.set(i,[]);let l="";i.stdout?.resume(),i.stderr?.setEncoding("utf8"),i.stderr?.on("data",(c)=>{let g=l+c;l=g.length>4000?g.slice(-4000):g}),i.on("message",(c)=>{this.onMessage(i,c)});let u;i.on("error",(c)=>{u=Jc(c)}),i.on("exit",(c)=>{if(this.exited.add(i),this.worker===i)this.worker=null,this.clearIdleTimer();let g=[u?.message,l.trim()].filter(Boolean).join(": "),b=Error(`${this.label} exited (code=${String(c)})${g?`: ${g}`:""}`);if(u?.stack)b.stack=u.stack;let I=this.shutdowns.has(i)||this.stopping.has(i);if(this.failPendingForWorker(i,b),!I)try{this.options.onUnexpectedExit?.(b)}catch{}}),this.armIdleTimer(i)}workerOptions(i){return{eval:i,stdout:!0,stderr:!0,env:We(process.env)}}async call(i,l,u={}){if(this.draining)await this.draining;this.start();let c=this.worker;if(!c||!this.isAvailable(c))throw Error(`${this.label} is not available`);return await this.send(c,i,l,u)}async stopGracefully(i){this.stopping.add(i);let l=this.options.disposeMethod;if(l&&this.isAvailable(i))await this.send(i,l,{},{timeoutMs:this.options.disposeTimeoutMs}).catch(()=>{});await this.shutdownWorker(i)}async send(i,l,u,c){this.clearIdleTimer();let g=`req_${++this.requestCounter}`;return await new Promise((b,I)=>{let k={worker:i,resolve:(T)=>b(T),reject:I};if((c.timeoutMs??0)>0)k.timeout=setTimeout(()=>{let T=this.clearPendingRequest(g);if(!T)return;this.shutdownWorker(T.worker).catch(()=>{}),T.reject(Error(`${this.label} call timed out after ${c.timeoutMs}ms: ${l}`))},c.timeoutMs);this.pending.set(g,k);try{let T={type:"call",id:g,method:l,args:u},E=this.outboxes.get(i);if(E)E.push({id:g,message:structuredClone(T)});else i.postMessage(T)}catch(T){this.clearPendingRequest(g),I(Jc(T))}})}async shutdown(){if(this.clearIdleTimer(),this.draining)await this.draining;let i=this.worker,l=[...this.shutdowns.values()];if(i)l.push(this.stopGracefully(i));if(l.length===0){this.failPending(Error(`${this.label} shutdown`));return}await Promise.all(l)}shutdownWorker(i){let l=this.shutdowns.get(i);if(l)return l;if(this.worker===i)this.worker=null,this.clearIdleTimer();let u=i.terminate().then(()=>{return},()=>{return}).finally(()=>{if(this.exited.add(i),this.failPendingForWorker(i,Error(`${this.label} shutdown`)),this.shutdowns.get(i)===u)this.shutdowns.delete(i)});return this.shutdowns.set(i,u),u}onMessage(i,l){if(!l)return;if(l.type==="ready"){let g=this.outboxes.get(i);this.outboxes.delete(i);for(let b of g??[]){if(!this.pending.has(b.id))continue;try{i.postMessage(b.message)}catch(I){this.clearPendingRequest(b.id)?.reject(Jc(I))}}return}if(l.type==="event"){if(this.worker===i&&typeof l.name==="string"&&l.name.length>0)this.options.onEvent?.({name:l.name,payload:l.payload});return}if(l.type!=="response"||!l.id)return;let u=this.pending.get(l.id);if(!u||u.worker!==i)return;let c=this.clearPendingRequest(l.id);if(!c)return;if(l.ok){c.resolve(l.result);return}c.reject(Error(l.error?.message||`${this.label} call failed`))}failPendingForWorker(i,l){for(let[u,c]of this.pending.entries()){if(c.worker!==i)continue;if(this.pending.delete(u),c.timeout)clearTimeout(c.timeout);c.reject(l)}}failPending(i){for(let[l,u]of this.pending.entries()){if(this.pending.delete(l),u.timeout)clearTimeout(u.timeout);u.reject(i)}}}var VO="CLINE_PLUGIN_IDLE_TIMEOUT_MS",xS="CLINE_PLUGIN_BOOTSTRAP_PATH",YO=1800000,QO="__cline_tool_update",ZO="__cline_setup_started";function e$(i){return{...i,contributions:{tools:i.contributions?.tools??[],commands:i.contributions?.commands??[],rules:i.contributions?.rules??[],messageBuilders:i.contributions?.messageBuilders??[],providers:i.contributions?.providers??[],automationEventTypes:i.contributions?.automationEventTypes??[],mcpServers:i.contributions?.mcpServers??[],shortcuts:i.contributions?.shortcuts??[],flags:i.contributions?.flags??[]}}}function cd(i){return(i instanceof Error?i.message:String(i)).includes("Unknown sandbox plugin id:")}function t$(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function r$(){let i=process.env.CLINE_WRAPPER_PATH?.trim();if(!i)return;try{let l=TS(i).resolve(`${t$()}/package.json`),u=Zs(yu(l),"extensions","plugin-sandbox-bootstrap.js");return Wl(u)?u:void 0}catch{return}}function s$(){let i=process.execPath?.trim();if(!i)return;let l=Zs(yu(yu(i)),"extensions","plugin-sandbox-bootstrap.js");return Wl(l)?l:void 0}function i$(i){let l=i.exists??Wl;for(let u of i.siblingCandidates)if(l(u))return{file:u};if(l(i.sourceBootstrapPath))return{sourcePath:i.sourceBootstrapPath};for(let u of i.installedCandidates)if(u&&l(u))return{file:u};return}function n$(){let i=yu(zO(import.meta.url)),l=TS(import.meta.url),u=process.env[xS]?.trim();if(u&&Wl(u))return{file:u};let c=Zs(i,"plugin-sandbox-bootstrap.ts"),g=Wl(c)?void 0:PO();if(g)return{file:Zs(g,"plugin-sandbox-bootstrap.js")};let b=i$({siblingCandidates:[Zs(i,"plugin-sandbox-bootstrap.js"),Zs(i,"plugin-sandbox-bootstrap.mjs"),Zs(i,"extensions","plugin-sandbox-bootstrap.js"),Zs(i,"agents","plugin-sandbox-bootstrap.js")],sourceBootstrapPath:c,installedCandidates:[r$(),s$()]});if(!b||"file"in b)return b;let I=b.sourcePath,k="jiti";try{k=l.resolve("jiti")}catch{}return{sourcePath:I,script:[`const createJiti = require(${JSON.stringify(k)});`,`const jiti = createJiti(${JSON.stringify(I)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(I)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
425
+ `)}}var Vc,o$=!1;function a$(){if(o$)throw new wu;if(Vc??=n$(),!Vc)throw new wu;return Vc}class wu extends Error{constructor(){super(`This build does not ship plugin-sandbox-bootstrap.js, so plugins cannot run. Set ${xS} to a copy of the file, or reinstall Cline.`);this.name="PluginBootstrapMissingError"}}function l$(i,l){return{extensions:[],pluginPaths:[],disabledByPolicy:[],warnings:[],failures:i.map((u)=>({pluginPath:u,phase:"load",message:l.message,stack:l.stack})),shutdown:async()=>{}}}function rl(i,l,u){if(typeof i==="number"&&Number.isInteger(i)&&i>0&&i<=vu)return i;if(u){let c=process.env[u];if(c){let g=Number(c);if(Number.isInteger(g)&&g>0&&g<=vu)return g}}return l}async function ff(i){let l=rl(i.idleTimeoutMs,YO,VO),u;try{u=a$()}catch(F){if(F instanceof wu)return l$(i.pluginPaths,F);throw F}let c="file"in u?{bootstrapFile:u.file}:{bootstrapScript:u.script},g=rl(i.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),b=rl(i.hookTimeoutMs,3000),I=i.setupTimeoutMs===void 0?void 0:rl(i.setupTimeoutMs,4000),k=g+(I??0),T=new Map,E=(F)=>{let j=F.payload;if(F.name===QO){T.get(String(j?.callId))?.(j?.update);return}if(F.name===ZO){i.onSetupStarted?.(String(j?.pluginPath));return}i.onEvent?.(F)},A=i.transport==="worker"?new CS({name:"plugin-worker",...c,idleTimeoutMs:l,onEvent:E,onUnexpectedExit:i.onUnexpectedExit,disposeMethod:"dispose",disposeTimeoutMs:b}):new AS({name:"plugin-sandbox",launcher:"bootstrapFile"in c?NO():void 0,...c,idleTimeoutMs:l,onEvent:E}),C=rl(i.contributionTimeoutMs,60000),N={pluginPaths:i.pluginPaths,exportName:i.exportName,providerId:i.providerId,modelId:i.modelId,cwd:i.cwd,session:i.session,client:i.client,user:i.user,workspaceInfo:i.workspaceInfo,loggerEnabled:Boolean(i.logger),telemetryEnabled:i.telemetryAvailable===!0,setupTimeoutMs:I,policy:i.policy,policyNames:i.policyNames},O,L=()=>(O??=A.call("initialize",N,{timeoutMs:k}).finally(()=>{O=void 0}),O),D;try{D=await A.call("initialize",N,{timeoutMs:k})}catch(F){throw await A.shutdown().catch(()=>{}),F}let U=D.plugins.map(e$);return{extensions:U.map((F)=>{let j={name:F.name,__clinePluginPath:F.pluginPath,manifest:F.manifest,setup:(H)=>{c$(H,A,F,C,L,T),p$(H,A,F,C,L),m$(H,A,F,C,L),f$(H,A,F,C,L),h$(H,F)}};return j.hooks=y$(A,F,b,L),j}),disabledByPolicy:D.disabledByPolicy??[],failures:D.failures,pluginPaths:U.map((F)=>F.pluginPath),shutdown:async()=>{await A.shutdown()},warnings:D.warnings}}function d$(i){let l=i instanceof Error?i.message:String(i);return/cyclic|circular|bigint|can ?not be cloned|could not be cloned/i.test(l)}function Cm(i,l=new WeakSet){if(i===null||typeof i!=="object")return typeof i==="function"||typeof i==="symbol"||typeof i==="bigint"?void 0:i;if(l.has(i))return;let u=i;if(typeof u.toJSON==="function")try{return u.toJSON()}catch{return}l.add(i);try{if(Array.isArray(i))return i.map((g)=>Cm(g,l)??null);let c={};for(let[g,b]of Object.entries(i)){let I=Cm(b,l);if(I!==void 0)c[g]=I}return c}finally{l.delete(i)}}var Uy=new Set;function RS(i,l,u){let c=`${i}:${l}`;if(Uy.has(c))return;Uy.add(c);let g=u instanceof Error?u.message:String(u);console.warn(`[plugin-sandbox] ${i} "${l}" received a payload that is not JSON-serializable (${g}); retrying with non-serializable values dropped. Host-only objects must not be placed on tool contexts or hook payloads.`)}async function PS(i,l,u){try{return await i(l)}catch(c){if(!d$(c))throw c;return u(c),await i(Cm(l))}}var u$=0;function c$(i,l,u,c,g,b){for(let I of u.contributions?.tools??[]){let k={...I.definition??{},name:I.name,description:I.description??"",inputSchema:I.inputSchema??{type:"object",properties:{}},timeoutMs:I.timeoutMs,retryable:I.retryable,execute:async(T,E)=>{let{signal:A,emitUpdate:C,emitEvent:N,...O}=E??{},L=`${u.pluginId}:${++u$}`;if(C)b.set(L,C);let D=()=>{l.call("abortToolCall",{callId:L,reason:A?.reason instanceof Error?A.reason.message:void 0}).catch(()=>{})};A?.addEventListener("abort",D,{once:!0});let U=async(F)=>{let{input:j,context:H}=F,Q=()=>({pluginId:u.pluginId,contributionId:I.id,input:j,context:H,callId:L,aborted:A?.aborted===!0});try{return await l.call("executeTool",Q(),{timeoutMs:I.timeoutMs??c})}catch(z){if(!cd(z))throw z;return await g(),await l.call("executeTool",Q(),{timeoutMs:I.timeoutMs??c})}};try{return await PS(U,{input:T,context:O},(F)=>RS("tool",I.name,F))}finally{A?.removeEventListener("abort",D),b.delete(L)}}};i.registerTool(k)}}function p$(i,l,u,c,g){for(let b of u.contributions?.commands??[])i.registerCommand(vS({name:b.name,description:b.description,handler:async(I)=>{try{return await l.call("executeCommand",{pluginId:u.pluginId,contributionId:b.id,input:I},{timeoutMs:c})}catch(k){if(!cd(k))throw k;return await g(),await l.call("executeCommand",{pluginId:u.pluginId,contributionId:b.id,input:I},{timeoutMs:c})}}}))}function m$(i,l,u,c,g){for(let b of u.contributions?.rules??[])i.registerRule({id:b.ruleId,source:b.source,content:b.hasContentHandler===!0?async()=>{try{return await l.call("resolveRuleContent",{pluginId:u.pluginId,contributionId:b.id},{timeoutMs:c})}catch(I){if(!cd(I))throw I;return await g(),await l.call("resolveRuleContent",{pluginId:u.pluginId,contributionId:b.id},{timeoutMs:c})}}:b.content??""})}function h$(i,l){for(let u of l.contributions?.providers??[])i.registerProvider({name:u.name,description:u.description,metadata:u.metadata});for(let u of l.contributions?.automationEventTypes??[])i.registerAutomationEventType({eventType:u.eventType,source:u.source,description:u.description,attributesSchema:u.attributesSchema,payloadSchema:u.payloadSchema,examples:u.examples,metadata:u.metadata});for(let u of l.contributions?.mcpServers??[])i.registerMcpServer(u)}function f$(i,l,u,c,g){for(let b of u.contributions?.messageBuilders??[])i.registerMessageBuilder({name:b.name,async build(I){try{let k=await l.call("buildMessages",{pluginId:u.pluginId,contributionId:b.id,messages:I},{timeoutMs:c});return Fy(k)?k:I}catch(k){if(!cd(k))throw k;await g();let T=await l.call("buildMessages",{pluginId:u.pluginId,contributionId:b.id,messages:I},{timeoutMs:c});return Fy(T)?T:I}}})}function Fy(i){return Array.isArray(i)&&i.every((l)=>typeof l==="object"&&l!==null&&("role"in l)&&("content"in l))}function g$(i,l,u,c,g){return async(b)=>await PS(async(I)=>{try{return await i.call("invokeHook",{pluginId:l,hookName:u,payload:I},{timeoutMs:c})}catch(k){if(!cd(k))throw k;return await g(),await i.call("invokeHook",{pluginId:l,hookName:u,payload:I},{timeoutMs:c})}},b,(I)=>RS("hook",u,I))}function y$(i,l,u,c){let g={};for(let b of l.hooks??[])g[b]=g$(i,l.pluginId,b,u,c);return Object.keys(g).length>0?g:void 0}var v$=4000,w$=4000,b$=3000,I$=60000,k$=5,S$="CLINE_PLUGIN_IMPORT_TIMEOUT_MS";class gf extends Error{label;timeoutMs;constructor(i,l){super(`${i} timed out after ${l}ms`);this.label=i,this.timeoutMs=l,this.name="PluginCallTimeoutError"}}function T$(i){let l=process.env[i]?.trim();if(!l)return;let u=Number(l);return Number.isFinite(u)&&u>0?u:void 0}function Yc(i){if(i instanceof Error)return{message:i.message,stack:i.stack};return{message:String(i)}}function MS(i){let l=xy(i);for(let u=0;u<4;u++){let c=_O(l,"package.json");if(IO(c)){try{let b=JSON.parse(kO(c,"utf8"));if(b&&typeof b==="object"&&"cline"in b)return l}catch{}return i}let g=xy(l);if(g===l)break;l=g}return i}function kl(i,l){return l===i?SO(i,TO(i)):Xi(i,l)}function _$(i){let l=Gd(i);return kl(l,MS(l))}function Qc(i,l,u){return new Promise((c,g)=>{let b=!1,I=setTimeout(()=>{b=!0,g(new gf(u,l))},l);I.unref?.(),Promise.resolve().then(i).then((k)=>{if(b)return;b=!0,clearTimeout(I),c(k)},(k)=>{if(b)return;b=!0,clearTimeout(I),g(k)})})}function E$(i,l){if(!i)return!0;for(let u of l){let c=i[u]?.enabled;if(typeof c==="boolean")return c}return i["*"]?.enabled??!0}function A$(i){return{extension:void 0,importId:i,setupFailed:!1,closed:!1,disposers:[]}}class yf{entries=new Map;listeners=new Set;logger;defaults;failureThreshold;constructor(i={}){this.logger=i.logger,this.defaults={import:i.importTimeoutMs??T$(S$)??v$,setup:i.setupTimeoutMs??w$,hook:i.hookTimeoutMs??b$,call:i.toolTimeoutMs??I$},this.failureThreshold=i.failureThreshold??k$}setLogger(i){this.logger=i}subscribe(i){return this.listeners.add(i),()=>{this.listeners.delete(i)}}list(){return[...this.entries.values()].map((i)=>this.toStatus(i)).sort((i,l)=>i.name.localeCompare(l.name))}get(i){return this.match(i).map((l)=>this.toStatus(l))}async reload(i){let l=this.match(i);for(let u of l)u.lastError=void 0,u.errorCount=0,u.timeoutCount=0,this.log("info","plugin.reload",u,{}),await this.reloadEntry(u);return l.map((u)=>this.toStatus(u))}async preload(i){return await(await this.loadForSession(i)).release(),this.list()}async loadForSession(i){let l=[],u=[],c=[],g=i.sessionId,b=this.resolveTimeouts(i);for(let O of this.recordDiscovery(i,c))l.push(this.toInitializationFailure(O));let I=[];for(let O of i.pluginPaths){let L=this.ensureEntry(Gd(O));if(L.exportName=i.exportName,this.refreshEntry(L),L.nameResolved&&!this.isEnabledForSession(L,i)){c.push(this.policyIssue(L));continue}if(L.blocked){l.push(this.toInitializationFailure(L)),c.push(this.toIssue(L,"error"));continue}I.push(L)}let k=await Promise.all(I.map((O)=>this.startWorkerCopy(O,i,b,g))),T=new Map,E=0;for(let O of k){let{entry:L}=O;if("error"in O){if(O.importId!==L.importId){c.push(this.staleIssue(L,O.phase,O.error,g));continue}if(O.phase==="setup")this.recordFailure(L,"setup",O.error,{sessionId:g,state:"failed"});else this.recordFailure(L,"import",O.error,{fatal:!0,sessionId:g});l.push(this.toInitializationFailure(L)),c.push(this.toIssue(L,"error"));continue}if("policyDisabled"in O){c.push(this.policyIssue(L));continue}if(!O.instance)continue;let{instance:D}=O;if(!this.isEnabledForSession(L,i)){c.push(this.policyIssue(L)),await D.shutdown?.().catch(()=>{});continue}let U=T.get(L.name);if(U)u.push({type:"duplicate_plugin_override",pluginName:L.name,pluginPath:L.pluginPath,overriddenPluginPath:U.entry.pluginPath,message:`Plugin "${L.name}" from ${L.pluginPath} overrides ${U.entry.pluginPath}`}),await U.instance.shutdown?.().catch(()=>{});T.set(L.name,{entry:L,instance:D,order:E++})}let A=[...T.values()].sort((O,L)=>O.order-L.order);if(g)for(let{entry:O}of A)O.sessions.set(g,i.onIssue);let C=A.map(({entry:O,instance:L})=>this.wrapForSession(O,L,i,b)),N;return{extensions:C,pluginPaths:A.map(({entry:O})=>O.pluginPath),failures:l,warnings:u,issues:c,release:()=>(N??=Promise.all(A.map(({entry:O,instance:L})=>this.releaseInstance(O,L,g,b))).then(()=>{return}),N)}}refreshEntry(i){let l=mf(i.pluginPath);if(i.fingerprint===l&&i.state!=="disabled")return;i.fingerprint=l,i.importId+=1,i.blocked=!1,i.consecutiveFailures=0,i.extension=void 0,i.nameResolved=!1,this.setState(i,"loading",!0)}async startWorkerCopy(i,l,u,c){let g=i.importId,b=A$(g),I=!1,k=!1,T=l.setupContext,E=Date.now(),A;try{A=await ff({transport:"worker",pluginPaths:[i.pluginPath],exportName:l.exportName,importTimeoutMs:u.import,setupTimeoutMs:u.setup,hookTimeoutMs:u.hook,contributionTimeoutMs:u.call,onEvent:l.emitEvent,onSetupStarted:()=>{k=!0},policy:l.policy,policyNames:{[i.pluginPath]:[kl(i.pluginPath,i.pluginRoot)]},onUnexpectedExit:(L)=>{if(!I||b.closed)return;this.recordFailure(i,"uncaught",L,{fatal:!0,instance:b,sessionId:c})},providerId:l.providerId,modelId:l.modelId,cwd:l.cwd,workspaceInfo:T?.workspaceInfo,session:T?.session,client:T?.client,user:T?.user,logger:T?.logger,telemetryAvailable:Boolean(T?.telemetry)})}catch(L){return{entry:i,error:L,phase:k?"setup":"import",importId:g}}let C=A.disabledByPolicy[0];if(C){if(await A.shutdown().catch(()=>{}),g===i.importId)i.name=C.name,i.nameResolved=!0;return{entry:i,policyDisabled:!0}}let N=A.failures[0],O=A.extensions?.[0];if(N||!O){if(await A.shutdown().catch(()=>{}),!N)return{entry:i};let L=Error(N.message);if(N.stack)L.stack=N.stack;return{entry:i,error:L,phase:N.phase==="setup"?"setup":"import",importId:g}}if(I=!0,b.extension=O,b.shutdown=A.shutdown,g===i.importId){if(i.name=O.name,i.nameResolved=!0,i.extension=O,!i.blocked&&(i.state==="loading"||i.state==="failed"))this.setState(i,"ready");this.log("info","plugin.import.ready",i,{elapsedMs:Date.now()-E})}return{entry:i,instance:b}}async reloadEntry(i){i.fingerprint=void 0,this.refreshEntry(i);let l={pluginPaths:[i.pluginPath],exportName:i.exportName},u=await this.startWorkerCopy(i,l,this.resolveTimeouts(l),void 0);if("error"in u){if(u.importId!==i.importId)return;this.recordFailure(i,u.phase,u.error,{fatal:u.phase==="import",...u.phase==="setup"?{state:"failed"}:{}});return}if("instance"in u)await u.instance?.shutdown?.().catch(()=>{})}staleIssue(i,l,u,c){let{message:g,stack:b}=Yc(u);return{name:i.name,pluginPath:i.pluginPath,state:"failed",reason:"error",lastError:{phase:l,message:g,...b?{stack:b}:{},pluginPath:i.pluginPath,timestamp:Date.now(),...c?{sessionId:c}:{}}}}recordDiscovery(i,l){let u=[];for(let{pluginPath:c,error:g}of i.discoveryFailures??[]){let b=this.ensureEntry(c);this.recordFailure(b,"discover",g,{fatal:!0,sessionId:i.sessionId}),u.push(b),l.push(this.toIssue(b,"error"))}for(let c of i.disabledPluginPaths??[]){let g=this.ensureEntry(c);if(g.state!=="disabled")g.extension=void 0,this.setState(g,"disabled");if(this.isEnabledForSession(g,i))l.push(this.toIssue(g,"settings"))}return u}isEnabledForSession(i,l){return E$(l.policy,[i.name,kl(i.pluginPath,i.pluginRoot)])}policyIssue(i){return{name:i.name,pluginPath:i.pluginPath,state:"disabled",reason:"session_policy"}}resolveTimeouts(i){return{import:i.importTimeoutMs??this.defaults.import,setup:this.defaults.setup,hook:i.hookTimeoutMs??this.defaults.hook,call:i.callTimeoutMs??this.defaults.call}}match(i){let l=i.trim();if(!l)return[];let u=Gd(l);return[...this.entries.values()].filter((c)=>c.pluginPath===u||c.name===l||kl(c.pluginPath,c.pluginRoot)===l)}ensureEntry(i){let l=Gd(i),u=this.entries.get(l);if(!u){let c=MS(l);u={pluginPath:l,pluginRoot:c,name:kl(l,c),state:"loading",blocked:!1,consecutiveFailures:0,importId:0,errorCount:0,timeoutCount:0,sessions:new Map,updatedAt:Date.now()},this.entries.set(l,u)}return u}wrapForSession(i,l,u,c){let g=l.extension,b=u.emitEvent?(k,T)=>u.emitEvent?.({name:k,payload:T}):void 0;l.emitEvent=b;let I=g.setup;return{...g,__clinePluginPath:i.pluginPath,hooks:this.wrapHooks(i,l,g.hooks,u,c),setup:I?async(k,T)=>{if(!this.isUsable(i,l))return;let E={...u.setupContext?.session??{},...T.session??{}},A={...u.setupContext??{},...T,session:Object.keys(E).length>0?E:void 0,cwd:u.cwd??T.cwd,emitEvent:b,onDispose:(C)=>{if(typeof C==="function")l.disposers.push(C)}};await this.runSetup(i,l,(C)=>I.call(g,C,A),k,u,c)}:void 0}}async runSetup(i,l,u,c,g,b){let I={tools:[],commands:[],calls:[]},k=new Set(l.extension.manifest.capabilities),T=(N,O)=>{if(!k.has(N))throw Error(`${O} requires the "${N}" capability`)},E={registerTool:(N)=>{I.tools.push(N)},registerCommand:(N)=>{I.commands.push(N)},registerRule:(N)=>{T("rules","registerRule");let O=this.wrapRule(i,l,N,g,b);I.calls.push((L)=>L.registerRule(O))},registerMessageBuilder:(N)=>{let O=this.wrapMessageBuilder(i,l,N,g,b);I.calls.push((L)=>L.registerMessageBuilder(O))},registerProvider:(N)=>{I.calls.push((O)=>O.registerProvider(N))},registerAutomationEventType:(N)=>{T("automationEvents","registerAutomationEventType"),I.calls.push((O)=>O.registerAutomationEventType(N))},registerMcpServer:(N)=>{T("mcp","registerMcpServer"),I.calls.push((O)=>O.registerMcpServer(N))}},A=(N)=>{l.setupFailed=!0,this.recordFailure(i,"setup",N,{instance:l,sessionId:g.sessionId,state:"failed",notify:g.onIssue})},C=Date.now();try{await Qc(()=>u(E),b.setup,`Plugin "${i.name}" setup`)}catch(N){A(N);return}this.warnIfSlow(i,"setup",C,b.setup,g);try{for(let N of I.tools)c.registerTool(this.wrapTool(i,l,N,g,b));for(let N of I.commands)c.registerCommand(this.wrapCommand(i,l,N,g,b));for(let N of I.calls)N(c)}catch(N){throw A(N),N}if(l.importId===i.importId&&!i.blocked&&i.state==="failed")this.setState(i,"ready")}wrapHooks(i,l,u,c,g){if(!u)return;let b={};for(let[I,k]of Object.entries(u)){if(typeof k!=="function")continue;let T=`hook:${I}`;b[I]=async(...E)=>{if(!this.isUsable(i,l))return;try{return await this.guardedCall(i,l,T,g.hook,c,()=>k.apply(u,E))}catch(A){if(c.hookErrorMode==="throw")throw A;return}}}return b}wrapTool(i,l,u,c,g){let b=`tool:${u.name}`;return{...u,execute:async(I,k)=>(this.assertUsable(i,l,`tool "${u.name}"`),this.guardedCall(i,l,b,u.timeoutMs??g.call,c,()=>u.execute(I,{...k,cwd:k.cwd??c.cwd,emitEvent:k.emitEvent??l.emitEvent}),()=>k.signal?.aborted===!0))}}wrapCommand(i,l,u,c,g){let b=u.handler;if(typeof b!=="function")return u;let I={...u,handler:async(k)=>(this.assertUsable(i,l,`command "/${u.name}"`),this.guardedCall(i,l,`command:${u.name}`,g.call,c,()=>b.call(u,k)))};return vS(I)}wrapRule(i,l,u,c,g){let b=u.content;if(typeof b!=="function")return u;return{...u,content:async()=>{if(!this.isUsable(i,l))return"";try{return await this.guardedCall(i,l,`rule:${u.id}`,g.call,c,()=>b.call(u))}catch{return""}}}}wrapMessageBuilder(i,l,u,c,g){return{...u,build:async(b)=>{if(!this.isUsable(i,l))return b;try{return await this.guardedCall(i,l,`messageBuilder:${u.name}`,g.call,c,()=>u.build.call(u,b))}catch{return b}}}}async guardedCall(i,l,u,c,g,b,I){let k=Date.now();try{let T=await Qc(b,c,`Plugin "${i.name}" ${u}`);if(l.importId===i.importId)i.consecutiveFailures=0;return this.warnIfSlow(i,u,k,c,g),T}catch(T){if(!I?.())this.recordFailure(i,u,T,{instance:l,sessionId:g.sessionId});throw T}}isUsable(i,l){return!i.blocked&&!l.setupFailed&&!l.closed}assertUsable(i,l,u){if(this.isUsable(i,l))return;let c=l.closed?"its session ended":i.lastError?`${i.lastError.phase}: ${i.lastError.message}`:"it is turned off";throw Error(`Plugin "${i.name}" ${u} is unavailable (${c})`)}async releaseInstance(i,l,u,c){if(l.closed)return;if(l.closed=!0,u)i.sessions.delete(u);for(let g of l.disposers.splice(0).reverse())try{await Qc(g,c.hook,`Plugin "${i.name}" dispose`)}catch(b){let{message:I,stack:k}=Yc(b);this.log("warn","plugin.error",i,{phase:"dispose",sessionId:u,errorMessage:I,stack:k})}await l.shutdown?.().catch(()=>{})}recordFailure(i,l,u,c){let{message:g,stack:b}=Yc(u),I=u instanceof gf,k=c.instance!==void 0&&c.instance.importId!==i.importId;this.log("warn","plugin.error",i,{phase:l,sessionId:c.sessionId,errorMessage:g,timedOut:I,stale:k,stack:b});let T={phase:l,message:`${c.messagePrefix??""}${g}`,...b?{stack:b}:{},pluginPath:i.pluginPath,timestamp:Date.now(),...c.sessionId?{sessionId:c.sessionId}:{},...I?{timedOut:I}:{}};if(k){let L=c.notify??(c.sessionId?i.sessions.get(c.sessionId):void 0);try{L?.({name:i.name,pluginPath:i.pluginPath,state:c.state??"degraded",reason:"error",lastError:T})}catch{}return}if(i.errorCount+=1,I)i.timeoutCount+=1;i.consecutiveFailures+=1,i.lastError=T;let E=c.fatal===!0||!c.state&&i.consecutiveFailures>=this.failureThreshold,A=E?"failed":c.state??"degraded",C=i.state!==A||E&&!i.blocked;if(E)i.blocked=!0,i.extension=void 0;this.setState(i,A,!0);let N=this.toIssue(i,"error"),O=[];if(C&&!c.state){for(let L of i.sessions.values())if(L)O.push(L)}if(c.notify&&!O.includes(c.notify))O.push(c.notify);for(let L of O)try{L(N)}catch{}}setState(i,l,u=!1){let c=i.state!==l;if(i.state=l,i.updatedAt=Date.now(),!c&&!u)return;let g=this.toStatus(i);for(let b of this.listeners)try{b(g)}catch{}}warnIfSlow(i,l,u,c,g){let b=Date.now()-u;if(b<=c)return;this.log("warn","plugin.call.slow",i,{phase:l,sessionId:g.sessionId,elapsedMs:b,limitMs:c})}log(i,l,u,c){let g={event:l,pluginName:u.name,pluginPath:u.pluginPath,state:u.state,...c};if(i==="info"){this.logger?.debug?.(`[plugins] ${l} ${u.name}`,g);return}let b=typeof c.phase==="string"?` (${c.phase})`:"",I=typeof c.errorMessage==="string"?`: ${c.errorMessage}`:"";this.logger?.log(`[plugins] ${l} ${u.name}${b}${I}`,{severity:"warn",...g})}toStatus(i){return{name:i.name,pluginPath:i.pluginPath,state:i.state,...i.lastError?{lastError:{...i.lastError}}:{},errorCount:i.errorCount,timeoutCount:i.timeoutCount,sessionIds:[...i.sessions.keys()].sort(),...i.extension?{capabilities:[...i.extension.manifest.capabilities].sort(),hooks:Object.keys(i.extension.hooks??{}).sort()}:{},updatedAt:i.updatedAt}}toIssue(i,l){return{name:i.name,pluginPath:i.pluginPath,state:i.state,reason:l,...i.lastError?{lastError:{...i.lastError}}:{}}}toInitializationFailure(i){return{pluginPath:i.pluginPath,pluginName:i.name,phase:i.lastError?.phase==="setup"?"setup":"load",message:i.lastError?.message??`Plugin is ${i.state}`,stack:i.lastError?.stack}}}function C$(i){let l=i.lastError?.phase,u=i.lastError?.message??"unknown error";if(i.state==="degraded")return`Plugin "${i.name}" ${l??"call"} failed: ${u}. The plugin is still active; repeated failures will turn it off.`;if(i.state==="disabled")return`Plugin "${i.name}" is disabled${i.reason==="session_policy"?" for this session":" in settings"}.`;let c=l==="uncaught"?" with an uncaught error":l?` during ${l}`:"";return`Plugin "${i.name}" failed${c}: ${u} (${i.pluginPath}). Its tools and hooks are unavailable.`}var qy;function uc(){return qy??=new yf,qy}var x$=new Set(["rm","rmdir","unlink","mv","cp","dd","touch","mkdir","ln","link","chmod","chown","chgrp","truncate","shred","install","patch","rsync","mkfifo","mknod","del","erase","move","ren","rename","md","rd","mklink","copy","xcopy","robocopy","new-item","ni","remove-item","move-item","copy-item","rename-item","set-content","add-content","clear-content","out-file","mi","ri","cpi","rni","ac","clc"]),R$=new Set(["add","am","apply","checkout","cherry-pick","clean","clone","commit","init","merge","mv","pull","push","rebase","reset","restore","revert","rm","stash","submodule","switch","worktree"]),Sd=new Set(["install","i","ci","add","remove","rm","uninstall","unlink","link","update","up","upgrade","dedupe","prune","publish"]),Sl=new Set(["install","uninstall","add","remove"]),P$=new Set(["add","remove","rm","install","uninstall","update","new","init","publish"]),M$=new Set(["install","uninstall","update","cleanup"]),N$=new Set(["install","require","remove","update"]),O$=new Set(["install","get"]),$$=new Set(["add","remove"]),L$=new Set(["install","uninstall","upgrade"]),D$=new Set(["install","update","delete","push"]),fi=new Set(["install","reinstall","remove","purge","uninstall","upgrade","autoremove","add","del"]),U$={git:R$,npm:Sd,pnpm:Sd,yarn:Sd,bun:Sd,pip:Sl,pip3:Sl,pipx:Sl,uv:Sl,cargo:P$,apt:fi,"apt-get":fi,dnf:fi,yum:fi,apk:fi,brew:fi,snap:fi,gem:M$,composer:N$,go:O$,dotnet:$$,winget:L$,nuget:D$},F$={stash:new Set(["list","show"]),worktree:new Set(["list"]),submodule:new Set(["status","summary"])},q$=new Set(["sudo","doas","env","command","builtin","nohup","time","nice","stdbuf","timeout","xargs"]),j$=new Set(["if","then","else","elif","fi","while","until","do","done","for","case","esac","!","{","}"]),jy=/^[A-Za-z_][A-Za-z0-9_]*\+?=/;function NS(i){let l=i.replace(/["']/g,"");if(/^(\/dev\/(null|stdout|stderr|tty)|nul:?)$/i.test(l))return!0;if(l.includes(".."))return!1;return l.startsWith("/tmp/")||l.startsWith("/var/tmp/")||l.startsWith("$TMPDIR")||l.startsWith("${TMPDIR")||/^%te?mp%/i.test(l)||/^\$env:te?mp/i.test(l)}function By(i){return(i.replace(/["']/g,"").split(/[/\\]/).pop()??i).toLowerCase().replace(/\.exe$/,"")}function B$(i){let l=i.split(`
426
+ `),u=[],c;for(let g of l){if(c!==void 0){if(g.replace(/^\t+/,"")===c)c=void 0;continue}u.push(g);let b=g.match(/(?<![<])<<-?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_./-]+))/);if(b)c=b[1]??b[2]??b[3]}return u.join(`
427
+ `).replace(/\$\(\([\s\S]*?\)\)/g,"_").replace(/\\./g,"_").replace(/"[^"]*"|'[^']*'/g,(g)=>g.replace(/[\s<>|;&$()`#\\]/g,"_")).replace(/(?:^|\s)#.*$/gm," ")}function xm(i){let l=0;while(l<i.length&&(jy.test(i[l])||j$.has(i[l])))l+=1;while(l<i.length&&q$.has(By(i[l]))){l+=1;while(l<i.length&&(i[l].startsWith("-")||i[l]==="{}"||jy.test(i[l])||/^\d+[smhd]?$/.test(i[l])))l+=1}if(l>=i.length)return;let u=By(i[l]),c=i.slice(l+1);if(u==="tee")return c.filter((I)=>!I.startsWith("-")).some((I)=>!NS(I))?"`tee`":void 0;if(x$.has(u))return`\`${u}\``;let g=U$[u];if(g){if(u==="git"&&c.some((T)=>T==="--help"||T==="-h"))return;let I=0;while(I<c.length&&c[I].startsWith("-"))I+=u==="git"&&/^-[cC]$/.test(c[I])?2:1;let k=c[I]?.toLowerCase();if(k&&g.has(k)){let T=c[I+1]?.toLowerCase();if(u==="git"&&T!==void 0&&F$[k]?.has(T))return;return`\`${u} ${k}\``}if(u==="yarn"&&c.length===0)return"`yarn` (install)";return}if(/^python[\d.]*$/.test(u)){let I=c.indexOf("-m"),k=I===-1?void 0:c[I+1]?.toLowerCase();if(k==="pip"||k==="pip3"){let T=c.slice(I+2).find((E)=>!E.startsWith("-"))?.toLowerCase();if(T&&Sl.has(T))return`\`pip ${T}\``}return}let b=/^-[A-Za-z]*i(\..*)?$/;if((u==="sed"||u==="gsed")&&c.some((I)=>b.test(I)||I.startsWith("--in-place")))return"`sed -i` (in-place edit)";if(u==="perl"&&c.some((I)=>b.test(I)))return"`perl -i` (in-place edit)";if(/^[gnm]?awk$/.test(u)){if(c.some((I,k)=>(I==="-i"||I==="--include")&&c[k+1]?.startsWith("inplace")||I.startsWith("-i")&&I.slice(2).startsWith("inplace")||I.startsWith("--include=inplace")))return"`awk -i inplace` (in-place edit)";return}if(u==="sort"&&c.some((I)=>I.startsWith("-o")||I.startsWith("--output")))return"`sort -o` (writes a file)";if(u==="curl")return c.some((I)=>!I.startsWith("--")&&/^-[A-Za-z]*[oO]/.test(I)||I.startsWith("--output")||I.startsWith("--remote-name"))?"`curl -o` (writes a file)":void 0;if(u==="wget")return c.some((I,k)=>I==="--spider"||/^-[A-Za-z]*O-$/.test(I)||I==="--output-document=-"||I==="-O"&&c[k+1]==="-")?void 0:"`wget` (downloads files)";if(u==="find"){if(c.includes("-delete"))return"`find -delete`";for(let I=0;I<c.length;I+=1){if(!["-exec","-execdir","-ok","-okdir"].includes(c[I]))continue;let k=[];for(let E=I+1;E<c.length&&c[E]!==";"&&c[E]!=="+";E+=1)k.push(c[E]);let T=xm(k);if(T)return T}return}return}function H$(i){if(typeof i!=="string")return xm([i.command,...i.args??[]]);let l=B$(i),u=l.matchAll(/(?:^|[^<>])(?:>{1,2}|&>{1,2})\s*([^\s;&|<>()]+)/g);for(let c of u)if(!NS(c[1]))return`output redirection (\`> ${c[1]}\`)`;for(let c of l.split(/[\n;|&()`]+/)){let g=xm(c.trim().split(/\s+/).filter(Boolean));if(g)return g}return}function z$(i){return`Command not executed: ${i} can modify files, and file modifications are blocked in plan mode. `+"You are in PLAN MODE — explore, analyze, and present a plan; do not make changes. "+"Use read-only commands to inspect the project (redirecting output to /tmp, or %TEMP% on Windows, is allowed), and if this change is part of the task, put it in your plan so it can run after the user approves switching to act mode."}var Bi=6000,Wi=e().describe("The absolute path of a text file to read content from"),bu=t({start_line:gi.number().int().positive().nullable().optional().describe("Optional one-based starting line number to read from; use null or omit for the start of the file"),end_line:gi.number().int().positive().nullable().optional().describe("Optional one-based ending line number to read through; use null or omit to read to the end of the file or the read cap, whichever comes first")}).describe("Optional inclusive one-based file line range"),OS=t({path:Wi,start_line:bu.shape.start_line,end_line:bu.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds. Always include path; start_line/end_line must be on the same object as the path they apply to, never in a separate array element"),$S=t({files:o(OS).describe("Array of file read requests; each element is one file and must include path. Omit start_line/end_line or set them to null to read from the start; provide integers on the same object as the path to return only that inclusive one-based line range — never emit a range as its own array element. Reads are capped, so page through long files with start_line/end_line. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),Hy={start_line:bu.shape.start_line,end_line:bu.shape.end_line},Xn=p([OS,t({file_path:Wi,...Hy}).transform(({file_path:i,...l})=>({path:i,...l})),t({filePath:Wi,...Hy}).transform(({filePath:i,...l})=>({path:i,...l}))]),W$=p([$S,Xn,o(Xn),o(e()),e(),t({files:o(p([Wi,Xn]))}),t({files:Xn}),t({files:Wi}),t({file_paths:o(Wi)}),t({file_paths:e()}),t({paths:o(p([Wi,Xn]))}),t({paths:Xn}),t({paths:e()})]),LS=t({queries:o(e()).describe("Array of regex search queries to execute")}),K$=p([LS,o(e()),e(),t({queries:e()})]),Iu=e().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${Bi*2} characters) to avoid timeouts.`),Rm=t({command:e().min(1).describe("The executable to run directly without shell parsing."),args:o(e()).optional().describe("Optional argv list passed directly to the executable.")}),DS=p([Iu,Rm]),US=t({commands:o(Iu).min(1).describe("Array of complete shell command strings to execute.")}),G$=t({commands:o(DS)}),X$=p([US,G$,t({commands:DS}),o(Rm),Rm,t({command:Iu}),t({cmd:Iu}),o(e()),e()]),J$=t({url:e().describe("The URL to fetch"),prompt:e().min(2).describe("Analysis prompt for the fetched content")}),zy=t({requests:o(J$).describe("Array of the URLs for the web fetch requests")}),Wy=t({path:e().min(1).describe("The absolute path for the action to be performed on"),old_text:je((i)=>i===null?void 0:i,e().optional()).describe(`Exact text to replace (must match exactly once). Omit this when creating a missing file or inserting via insert_line. Keep this at or below ${Bi} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:e().describe(`The new content to write when creating a missing file, the replacement text for edits, or the inserted text when insert_line is provided. Keep this at or below ${Bi} characters when possible; for large edits, use multiple calls with small chunks of old_text and new_text to iteratively edit the file.`),insert_line:gi.number().int().nullable().optional().describe("Optional positive one-based boundary line. When provided, the tool inserts new_text before that line instead of performing a replacement edit; use line_count + 1 to append at EOF.")}).describe("Edit a text file by replacing old_text with new_text, create the file with new_text if it does not exist, or insert new_text at insert_line when insert_line is provided. Prefer using this tool for file edits over shell commands. IMPORTANT: large edits can time out, so use small chunks and multiple calls when possible."),FS=t({input:e().min(1).describe("The freeform apply_patch payload in the canonical patch grammar (e.g *** Begin Patch, *** Update File:, @@, and *** End Patch).")}).describe("Modify or create a text file by applying patches using the canonical apply_patch diff grammar. Prefer sending the patch body directly rather than wrapping it in shell syntax. IMPORTANT: large patches can time out, so use small chunks and multiple calls when possible."),V$=p([FS,e()]),Ky=t({skill:e().min(1).describe("Name of the skill to execute."),args:e().nullable().optional().describe("Arguments for the skill; use null when omitted")}),Gy=t({question:e().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:o(e().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),Xy=t({summary:e().min(10).describe("Summarization of the investigation, steps taken, and resolution status to submit at the end of the session. Before submitting, re-read the task requirements together with any provided tests or assertions, and confirm from your own tool output — not from assumption — that your solution produces the expected results at the expected file locations."),verified:r().describe(`Have you verified that the issue is resolved to the best of your knowledge, including updating and creating all the requested files and items? 'True' if you have completed the investigation and gathered concrete evidence that every requirement is met.
428
+ 'False' if you have done all you can but cannot resolve the issue or if you are stuck and cannot proceed further.
429
+ IMPORTANT: verify by EXECUTION, not by assumption. Before setting 'true' you must have observed evidence in this session that your solution works:
430
+ - If the task provides or references specific tests, run those exact test(s) and include the passing output in your reasoning. If they still fail, revise and re-run.
431
+ - If no tests are provided, construct your own check: actually run the program, script, or command you produced; confirm every required output file exists at the exact path requested; and confirm its contents match the required format, data types, and values. Read the output back as evidence.
432
+ Phrases like "assume it works", "should be correct", or "probably fine" are NOT verification. Do NOT set 'true' unless your tool output shows the requirements are met; if you cannot obtain such evidence, set 'false'.`)});function na(i){if(i instanceof Error)return i.message;return String(i)}function Y$(i){if(typeof i.old_text==="string"&&i.old_text.length>Bi)return`Editor input too large: old_text was ${i.old_text.length} characters, exceeding the recommended limit of ${Bi}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if(i.new_text.length>Bi)return`Editor input too large: new_text was ${i.new_text.length} characters, exceeding the recommended limit of ${Bi}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}class cc extends Error{timeoutMs;constructor(i,l){super(i);this.name="TimeoutError",this.timeoutMs=l}}function ai(i,l,u){return Promise.race([i,new Promise((c,g)=>{setTimeout(()=>g(new cc(u,l)),l)})])}function Zc(i){let{path:l,start_line:u,end_line:c}=i;if(u==null&&c==null)return l;return`${l}:${u??1}-${c??"EOF"}`}function Q$(i){let{start_line:l,end_line:u}=i;if(l==null||u==null||l<=u)return null;return`start_line must be less than or equal to end_line (received start_line: ${l}, end_line: ${u})`}var Z$=new Set(["start_line","end_line"]);function eL(i){if(i===null||typeof i!=="object"||Array.isArray(i))return!1;let l=Object.keys(i);return l.length>0&&l.every((u)=>Z$.has(u))}function Jy(i){let l=[];for(let u of i){if(eL(u)){let c=l[l.length-1];if(typeof c==="string"){l[l.length-1]={path:c,...u};continue}if(c!==null&&typeof c==="object"&&!Array.isArray(c)&&"path"in c&&Object.keys(u).every((g)=>!(g in c))){l[l.length-1]={...c,...u};continue}}l.push(u)}return l}function tL(i){if(Array.isArray(i))return Jy(i);if(i!==null&&typeof i==="object")for(let l of["files","paths"]){let u=i[l];if(Array.isArray(u))return{...i,[l]:Jy(u)}}return i}function qS(i){let l=rL(y(X$,i));if(l.length===0)throw Error("run_commands requires at least one command; the commands list was empty.");return l}function rL(i){if(typeof i==="string")return[i];if(Array.isArray(i))return i;if("commands"in i)return Array.isArray(i.commands)?i.commands:[i.commands];if("command"in i)return"args"in i?[i]:[i.command];if("cmd"in i)return[i.cmd];return[i]}function sL(i){if(typeof i==="string")return i;let l=i.args??[];if(l.length===0)return i.command;let u=l.map((c)=>/[\s"]/u.test(c)?JSON.stringify(c):c);return`${i.command} ${u.join(" ")}`}var ep=200;function iL(i){let l=sL(i);if(l.length<=ep)return l;let u=l.length-ep;return`${l.slice(0,ep)} ... [command truncated: ${u} more chars; full command is in the tool call input]`}var nL="core.plan-mode-command-guard";function oL(i={}){return{name:nL,manifest:{capabilities:["hooks"]},hooks:{beforeTool:(l)=>{if(l.tool.name!==Kt.RUN_COMMANDS)return;let u;try{u=qS(l.input)}catch{return}for(let c of u){let g=H$(c);if(g)return RA(i.telemetry,{tool_name:"run_commands",blocked_construct:g,command_count:u.length,agent_id:l.snapshot.agentId,conversation_id:l.snapshot.conversationId,run_id:l.snapshot.runId,iteration:l.snapshot.iteration,tool_call_id:l.toolCall.toolCallId}),{skip:!0,reason:z$(g)}}return}}}}var fL=2000,gL=4096;function yL(i){if(process.platform==="win32")return{file:"powershell.exe",args:["-NoLogo","-NoProfile","-NonInteractive","-Command",`(Get-Process -Id ${i} -ErrorAction Stop).StartTime.ToUniversalTime().Ticks`]};return{file:"ps",args:["-p",String(i),"-o","lstart="],env:{...process.env,LC_ALL:"C",TZ:"UTC"}}}function HS(i){if(!Number.isSafeInteger(i)||i<=0)return"missing";try{return process.kill(i,0),"running"}catch(l){let u=l instanceof Error&&"code"in l?String(l.code):void 0;if(u==="ESRCH")return"missing";if(u==="EPERM")return"running";return"unavailable"}}function tp(i){return HS(i)==="missing"?{status:"missing"}:{status:"unavailable"}}function vL(i){let l=i.trim();return l?{status:"found",token:`${process.platform}:${l}`}:void 0}function wL(i){let l=i.lastIndexOf(")");if(l<0)return{status:"unavailable"};let u=i.slice(l+1).trim().split(/\s+/);if(["Z","X","x"].includes(u[0]??""))return{status:"missing"};let c=u[19];return c&&/^\d+$/.test(c)?{status:"running",startTime:c}:{status:"unavailable"}}async function vf(i){if(!Number.isSafeInteger(i)||i<=0)return{status:"missing"};if(process.platform==="linux"){let u;try{u=await Zy(`/proc/${i}/stat`,"utf8")}catch{return tp(i)}let c=wL(u);if(c.status!=="running")return c;try{let g=(await Zy("/proc/sys/kernel/random/boot_id","utf8")).trim();return g?{status:"found",token:`linux:${g}:${c.startTime}`}:{status:"unavailable"}}catch{return{status:"unavailable"}}}let l=HS(i);if(l!=="running")return{status:l};try{let u=yL(i);return await new Promise((c)=>{hL(u.file,u.args,{encoding:"utf8",env:u.env,maxBuffer:gL,timeout:fL,windowsHide:!0},(g,b)=>{let I=!g&&typeof b==="string"?vL(b):void 0;c(I??tp(i))})})}catch{return tp(i)}}var Kl=48000;function ev(i,l={}){let u=l.maxChars??48000,c=l.totalChars??i.length;if(i.length<=u&&c<=u)return i;let g=Math.ceil(u/2),b=Math.max(1,u-g);return`${i.slice(0,g)}
433
+ [... output truncated: ${c} chars total. Refine the command (grep, head, tail) to view the elided middle ...]
434
+ `+i.slice(-b)}var Vd=2000,Pm=2000,zS=48000,Yd=48000,tv=10485760,bL=86400000,IL=60000,WS="cline-command-",KS="output.log",GS="active-command.json",XS="completed-at",kL=48,SL=1000;function JS(i){return typeof i==="number"&&Number.isFinite(i)?Math.max(0,i):bL}function TL(i){return typeof i==="number"&&Number.isFinite(i)?Math.max(1,i):IL}function _L(i){try{let l=JSON.parse(i);if(l.version!==1||typeof l.executionId!=="string"||l.executionId.length===0||!Number.isSafeInteger(l.pid)||(l.pid??0)<=0||typeof l.processStartToken!=="string"||l.processStartToken.length===0||typeof l.detachedAtMs!=="number"||!Number.isFinite(l.detachedAtMs)||l.detachedAtMs<0)return;return l}catch{return}}function Mm(i,l){let u=`${i}.${jS()}.tmp`;try{uL(u,l,"utf8");try{Yy(u,i)}catch(c){if(c instanceof Error&&"code"in c&&["EEXIST","EPERM"].includes(String(c.code)))ku(i,{force:!0}),Yy(u,i);else throw c}}finally{ku(u,{force:!0})}}function EL(i,l){let u=i?.trim();if(!u)return;let c=Number(u);if(!Number.isFinite(c)||c<0)return;return Math.min(c,l)}async function rv(i){try{return await pL(i,"utf8")}catch(l){if(l instanceof Error&&"code"in l&&l.code==="ENOENT")return;throw l}}async function VS(i,l){let u=ri(i,GS),c=ri(i,XS),g=await rv(c),b=EL(g,l.nowMs),I=await rv(u);if(b!==void 0){if(I!==void 0)await Jd(u,{force:!0})}else if(I!==void 0){let T=_L(I);if(T){let E;try{E=await l.probeProcessStartToken(T.pid)}catch{E={status:"unavailable"}}if(E.status==="found"&&E.token===T.processStartToken)return sv(i,l),!1;if(E.status==="unavailable")return sv(i,l),!1}Mm(c,String(l.nowMs)),await Jd(u,{force:!0}),b=l.nowMs}if(b===void 0)try{b=(await Qy(ri(i,KS))).mtimeMs}catch{b=(await Qy(i)).mtimeMs}let k=l.nowMs-l.retentionMs;if(b>k)return QS(i,Math.max(0,b+l.retentionMs-l.nowMs)),!1;return await Jd(i,{recursive:!0,force:!0}),!0}function sv(i,l,u=l.activeCommandPollIntervalMs){setTimeout(()=>{VS(i,{...l,nowMs:Date.now()}).catch(()=>{return})},u).unref()}async function AL(i={}){let l=i.tempDirectory??BS(),u=JS(i.retentionMs),c=i.nowMs??Date.now(),g=i.processStartTokenProbe??vf,b=TL(i.activeCommandPollIntervalMs),I;try{I=await cL(l,{withFileTypes:!0})}catch{return 0}let k=0;for(let T of I){if(!T.isDirectory()||!T.name.startsWith(WS))continue;let E=ri(l,T.name);try{if(await VS(E,{retentionMs:u,nowMs:c,probeProcessStartToken:g,activeCommandPollIntervalMs:b}))k+=1}catch{}}return k}class wf extends Error{exitCode;output;constructor(i,l){super(`Command exited with code ${i}`);this.exitCode=i,this.output=l,this.name="CommandExitError"}}function Qd(i,l){if(i!==null)return`Command exited with code ${i}`;return l?`Command terminated by signal ${l}`:"Command terminated without an exit code"}class bf extends Error{signal;output;constructor(i,l){super(Qd(null,i));this.signal=i,this.output=l,this.name="CommandTerminationError"}}class YS extends Error{code;missing;constructor(i,l={}){super(`Failed to execute command: ${i.message}`);this.name="CommandSpawnError";let u=i.code;if(this.code=typeof u==="string"?u:void 0,this.code!=="ENOENT")this.missing=void 0;else if(l.cwd!==void 0&&!lL(l.cwd))this.missing="cwd";else this.missing="executable"}}function iv(i){let l=Math.ceil(i/2),u=Math.max(1,i-l),c=new mL("utf8"),g="",b="",I=0,k=(T)=>{if(!T)return;I+=T.length;let E=l-g.length;if(E>0){g+=T.slice(0,E),b=(b+T.slice(E)).slice(-u);return}b=(b+T).slice(-u)};return{append(T){let E=c.write(T);return k(E),E},current(){return{text:g+b,totalChars:I,dropped:I>g.length+b.length}},snapshot(){let T=c.end();return k(T),{text:g+b,totalChars:I,dropped:I>g.length+b.length,finalChunk:T}}}}function CL(i,l,u,c){let g=i.emitUpdate,b=typeof c==="number"&&Number.isFinite(c)?Math.max(1,Math.floor(Math.min(Kl,c))):Kl,I={},k=[],T,E=!1,A=()=>{if(!T)return;clearTimeout(T),T=void 0},C=()=>{if(A(),!g){I={},k=[];return}let O=I,L=k;I={},k=[];for(let D of L){let U=O[D];if(!U?.chunk)continue;let F=U.droppedChars>0?`\x1B[0m[${U.droppedChars} command-output characters skipped while streaming]
435
+ `:"",j=F.length<b?F+U.chunk.slice(-(b-F.length)):U.chunk.slice(-b);g({stream:D,chunk:j,executionId:l,detachable:u(),...U.droppedChars>0?{truncated:!0,droppedChars:U.droppedChars}:{}})}},N=()=>{if(!g||T||E)return;T=setTimeout(C,kL),T.unref()};return{append(O,L){if(!g||E||!L)return;let D=I[O];if(!D)D={chunk:"",droppedChars:0},I[O]=D,k.push(O);if(L.length>=b)D.droppedChars+=D.chunk.length+L.length-b,D.chunk=L.slice(-b);else{let U=D.chunk.length+L.length-b;if(U>0)D.droppedChars+=U,D.chunk=D.chunk.slice(U);D.chunk+=L}N()},flush:C,stop(O={}){if(E)return;if(O.flush)C();else A(),I={},k=[];E=!0}}}function QS(i,l){setTimeout(()=>{Jd(i,{recursive:!0,force:!0}).catch(()=>{return})},l).unref()}function xL(i,l){let u=dL(ri(BS(),WS)),c=ri(u,KS),g=ri(u,GS),b=ri(u,XS);try{Mm(g,`${JSON.stringify(l)}
436
+ `)}catch(L){throw ku(u,{recursive:!0,force:!0}),L}let I=aL(c,{encoding:"utf8"}),k=0,T=!1,E=!0,A=!1,C=!1,N=!1,O=()=>{if(N)return;N=!0,QS(u,i)};return I.on("error",()=>{E=!1}),I.once("close",()=>{if(E=!1,A=!0,C)O()}),{path:c,write(L){if(!L||T||!E)return;let D=tv-k;if(D<=0){T=!0,E=!1,I.end();return}let U=Buffer.from(L,"utf8"),F=U.length<=D?U:U.subarray(0,D);if(I.write(F),k+=F.length,F.length<U.length||k>=tv)T=!0,E=!1,I.end()},complete:()=>{if(C)return;C=!0;try{Mm(b,String(Date.now()))}catch{}try{ku(g,{force:!0})}catch{}if(A){O();return}E=!1,I.end()}}}function RL(i,l,u,c,g,b,I,k=vf){if(l.signal?.aborted)return Promise.reject(Error("Command was aborted"));return new Promise((T,E)=>{let A=process.platform==="win32",C=Vy(i.executable,i.args,{cwd:i.cwd,env:{...process.env,...i.env},stdio:["pipe","pipe","pipe"],detached:!A,windowsHide:!0}),N=C.pid,O=iv(c),L=iv(c),D=jS(),U=Boolean(I&&l.sessionId),F=!1,j,H=!1,Q=!1,z=!1,W,ee=!1,te,oe=()=>{},G=CL(l,D,()=>F,c),se=(ce)=>{if(Q)return;Q=!0,ce()},Pe=async()=>{if(!N)return;if(A){await new Promise((ce)=>{let Se=!1,_e,Ee=()=>{if(Se)return;Se=!0,clearTimeout(Fe),ce()};try{_e=Vy("taskkill.exe",["/PID",String(N),"/T","/F"],{stdio:"ignore",shell:!1,windowsHide:!0})}catch{C.kill(),ce();return}let Fe=setTimeout(()=>{_e.kill(),C.kill(),Ee()},5000);_e.once("error",()=>{C.kill(),Ee()}),_e.once("close",(Ke)=>{if(Ke!==0)C.kill();Ee()})});return}try{process.kill(-N,"SIGKILL")}catch{C.kill("SIGKILL")}},Le,Te=()=>Ie(Error("Command was aborted")),le=()=>{if(clearTimeout(Le),W)clearTimeout(W);l.signal?.removeEventListener("abort",Te),oe()},Ie=(ce)=>{if(H||Q)return;H=!0,G.stop({flush:!0}),le(),Pe().finally(()=>se(()=>E(ce)))};if(Le=setTimeout(()=>Ie(new cc(`Command timed out after ${u}ms`,u)),u),l.signal){if(l.signal.addEventListener("abort",Te,{once:!0}),l.signal.aborted)Te()}let we=()=>{if(!F||H||Q||!N||C.exitCode!==null||C.signalCode!==null)return!1;if(!j)return!1;let ce=xL(b,{version:1,executionId:D,pid:N,processStartToken:j,detachedAtMs:Date.now()});G.stop({flush:!0}),ee=!0,te=ce;let Se=O.current(),_e=L.current();if(te.write(Se.text),_e.text)te.write(`
437
+ [stderr]
438
+ ${_e.text}`);le(),C.unref(),C.stdout?.unref?.(),C.stderr?.unref?.();let Ee=[`[Command is still running. Output will continue in ${te.path}]`,g?Se.text+(_e.text?`
439
+ [stderr]
440
+ ${_e.text}`:""):Se.text].filter(Boolean).join(`
441
+ `);return se(()=>T(Ee)),!0};C.once("spawn",()=>{if(H)return;l.emitUpdate?.({stream:"stdout",chunk:"",executionId:D,detachable:!1});let ce=l.sessionId;if(!U||!N||!ce||!I)return;(async()=>{let Se=await k(N);if(Se.status!=="found"||H||Q||C.exitCode!==null||C.signalCode!==null)return;j=Se.token,F=!0,oe=I.register({executionId:D,sessionId:ce,toolCallId:l.toolCallId,detach:we}),l.emitUpdate?.({stream:"stdout",chunk:"",executionId:D,detachable:!0})})().catch(()=>{return})}),C.stdout?.on("data",(ce)=>{let Se=O.append(ce);if(!Se)return;if(ee){te?.write(Se);return}G.append("stdout",Se)}),C.stderr?.on("data",(ce)=>{let Se=L.append(ce);if(!Se)return;if(ee){te?.write(Se);return}G.append("stderr",Se)});let He=(ce,Se,_e)=>{let Ee=O.snapshot(),Fe=L.snapshot();if(Ee.finalChunk)G.append("stdout",Ee.finalChunk);if(Fe.finalChunk)G.append("stderr",Fe.finalChunk);if(G.stop({flush:!0}),le(),ce!==0){let Ke=g?Ee.text+(Fe.text?`
442
+ [stderr]
443
+ ${Fe.text}`:""):Ee.text,Et=Ee.dropped||g&&Fe.dropped,yt=g?Ee.totalChars+Fe.totalChars:Ee.totalChars;if(Et||Ke.length>c)Ke=ev(Ke,{maxChars:c,totalChars:yt});let $r=`[${Qd(ce,Se)}]`,vt=Ke.length>0?`${$r}
444
+ ${Ke}`:$r,Ct=_e?`${vt}
445
+ ${_e}`:vt;se(()=>E(ce===null?new bf(Se,Ct):new wf(ce,Ct)))}else{let Ke=g?Ee.text+(Fe.text?`
446
+ [stderr]
447
+ ${Fe.text}`:""):Ee.text;if(Ee.dropped||g&&Fe.dropped||Ke.length>c){let Et=g?Ee.totalChars+Fe.totalChars:Ee.totalChars;Ke=ev(Ke,{maxChars:c,totalChars:Et})}se(()=>T(_e?`${Ke}
448
+ ${_e}`:Ke))}};C.on("close",(ce,Se)=>{if(H||z)return;let _e=O.snapshot(),Ee=L.snapshot();if(ee){if(W)clearTimeout(W);te?.write(_e.finalChunk),te?.write(Ee.finalChunk),te?.write(`
449
+ [${Qd(ce,Se)}]
450
+ `),te?.complete();return}He(ce,Se??null,"")}),C.on("exit",(ce,Se)=>{if(H)return;W=setTimeout(()=>{if(H||z)return;if(ee){let _e=O.snapshot(),Ee=L.snapshot();te?.write(_e.finalChunk),te?.write(Ee.finalChunk),te?.write(`
451
+ [${Qd(ce,Se)}]
452
+ `),te?.complete();return}if(Q)return;z=!0,C.stdout?.unref?.(),C.stderr?.unref?.(),C.unref(),He(ce,Se??null,"[Command completed with background processes still running; their output is no longer captured]")},SL)}),C.on("error",(ce)=>{if(H)return;if(ee){te?.write(`
453
+ [Command failed: ${ce.message}]
454
+ `),te?.complete();return}G.stop({flush:!0}),le(),se(()=>E(new YS(ce,{cwd:i.cwd})))}),C.stdin?.on("error",(ce)=>{if(H||Q)return;Ie(Error(`Failed to write command input: ${ce.message}`))}),C.stdin?.end(i.input,"utf8")})}function PL(i={}){let{shell:l=_t(process.platform),timeoutMs:u=30000,env:c={},combineOutput:g=!0,executionController:b,processStartTokenProbe:I=vf}=i,k=JS(i.detachedLogRetentionMs),T=i.maxOutputChars??i.maxOutputBytes??Kl;return(E,A,C)=>{let N=typeof E!=="string"&&"args"in E?{executable:E.command,args:E.args??[]}:dr(l,typeof E==="string"?E:E.command);return RL({executable:N.executable,args:N.args,cwd:A,env:c,input:N.input},C,u,T,g,k,b,I)}}function nv(i,l){let u=i.metadata?.[l];return typeof u==="string"?u:void 0}function ML(i,l,u){xA(i,{tool_name:"run_commands",effective_timeout_ms:u.effectiveTimeoutMs,timeout_source:u.timeoutSource,command_count:u.commandCount,duration_ms:u.durationMs,ulid:l.sessionId,mode:nv(l,"mode"),source:nv(l,"source"),session_id:l.sessionId,agent_id:l.agentId,conversation_id:l.conversationId,run_id:l.runId,iteration:l.iteration,tool_call_id:l.toolCallId})}function NL(i){let l=i.match(/(?<![<])<<-?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_./-]+))/);return l?.[1]??l?.[2]??l?.[3]}function OL(i){let l=[];for(let u=0;u<i.length;u+=1){let c=i[u],g=NL(c);if(!g){l.push(c);continue}let b=i.findIndex((k,T)=>T>u&&k.trim()===g);if(b===-1){l.push(c);continue}let I=[c];while(u<b){u+=1;let k=i[u];I.push(k)}l.push(I.join(`
455
+ `))}return l}function $L(i){let l=[],u=[],c=()=>{if(u.length>0)l.push(...OL(u)),u=[]};for(let g of i){if(typeof g==="string"){u.push(g);continue}c(),l.push(g)}return c(),l}async function LL(i,l){let{executor:u,cwd:c,context:g,timeoutMs:b,timeoutSource:I,telemetry:k}=l;return Promise.all(i.map(async(T,E)=>{let A=Date.now(),C=iL(T),N=g.emitUpdate?{...g,emitUpdate:(O)=>{let L=O&&typeof O==="object"&&!Array.isArray(O)?O:{update:O};g.emitUpdate?.({...L,commandIndex:E,query:C})}}:g;try{let O=await ai(u(T,c,N),b,`Command timed out after ${b}ms`);return{query:C,result:O,success:!0}}catch(O){if(O instanceof cc)ML(k,g,{effectiveTimeoutMs:O.timeoutMs,timeoutSource:I,commandCount:i.length,durationMs:Date.now()-A});if(O instanceof wf||O instanceof bf)return{query:C,result:O.output,error:O.message,success:!1};let L=na(O);return{query:C,result:"",error:`Command failed: ${L}`,success:!1}}}))}function DL(i,l={}){let u=l.fileReadTimeoutMs??1e4;return _({name:"read_files",description:`Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided on the same file entry as its path. When you already know multiple files you need, read them together in one call, and call this tool in the same response as other independent tool calls. Each read returns at most ${Vd} lines / ~${Math.round(zS/1024)}k characters; longer files report their total line count, page through them with start_line/end_line on that file's entry. Binary files that are not image and large files are not supported. Returns file contents or error messages for each path. `,inputSchema:S($S),timeoutMs:u*2,retryable:!0,maxRetries:1,execute:async(c,g)=>{let b=y(W$,tL(c)),I;if(typeof b==="string")I=[{path:b}];else if(Array.isArray(b))I=b.map((k)=>typeof k==="string"?{path:k}:k);else if("files"in b)I=(Array.isArray(b.files)?b.files:[b.files]).map((k)=>typeof k==="string"?{path:k}:k);else if("file_paths"in b)I=(Array.isArray(b.file_paths)?b.file_paths:[b.file_paths]).map((k)=>({path:k}));else if("paths"in b)I=(Array.isArray(b.paths)?b.paths:[b.paths]).map((k)=>typeof k==="string"?{path:k}:k);else I=[b];return Promise.all(I.map(async(k)=>{let T=Q$(k);if(T)return{query:Zc(k),result:"",error:`Invalid file range: ${T}`,success:!1};try{let E=await ai(i(k,g),u,`File read timed out after ${u}ms`);return{query:Zc(k),result:E,success:!0}}catch(E){let A=na(E);return{query:Zc(k),result:"",error:`Error reading file: ${A}`,success:!1}}}))}})}function UL(i,l={}){let u=l.searchTimeoutMs??30000,c=l.cwd??process.cwd();return _({name:"search_codebase",description:`Perform regex pattern searches across the codebase. Supports multiple parallel searches. When several search patterns could be useful and do not depend on each other, run them together in one call, and call this tool in the same response as other independent tool calls. Use for finding code patterns, function definitions, class names, imports, etc. Output beyond ~${Math.round(Yd/1000)}k characters per query is middle-truncated; narrow patterns beat broad ones.`,inputSchema:S(LS),timeoutMs:u*2,retryable:!0,maxRetries:1,execute:async(g,b)=>{let I=y(K$,g),k=Array.isArray(I)?I:typeof I==="object"?Array.isArray(I.queries)?I.queries:[I.queries]:[I];return Promise.all(k.map(async(T)=>{try{let E=await ai(i(T,c,b),u,`Search timed out after ${u}ms`);return{query:T,result:E,success:!0}}catch(E){let A=na(E);return{query:T,result:"",error:`Search failed: ${A}`,success:!1}}}))}})}var ov="Use for listing files, checking git status, running builds, executing tests, etc. Commands must be non-interactive. Commands that require follow-up input like pagers should be skipped or used with supported flags/env (e.g. git --no-pager, --non-interactive) to bypass the interaction steps. ",FL="PowerShell escapes with a backtick (`), not a backslash: inside double quotes, \\\" ends the string. Put literal paths in single quotes. Use cmdlets such as Remove-Item -LiteralPath instead of cmd /c; cmd re-parses the quotes, and a mis-quoted path can become extra targets such as the drive root. Before a recursive or forced delete, confirm the exact target, for example with -WhatIf. ";function qL(i,l){let u=So(i);if(u==="powershell"||u==="cmd"){let g=Ki(i),b=g==="windows"?"powershell.exe":g==="core"?l?"pwsh.exe":"pwsh":"cmd.exe",I=g==="windows"?`Windows PowerShell (${b})`:g==="core"?`PowerShell (${b})`:b,k=`${b} ${u==="powershell"?"-Command":"/c"}`,T=u==="powershell"?"';'":"'&&'";return`Run non-interactive shell commands from the root of the workspace${l?" in Windows environment":""}. `+ov+`Output beyond ~${Math.round(Kl/1000)}k characters is middle-truncated (start and end preserved); filter output when you need specific sections. Commands run through ${I}; quote paths and arguments for ${b} and use ${T} to sequence commands. Write commands directly; do not wrap them in another ${k} invocation. `+(u==="powershell"?FL:"")+"Only start another shell when you intentionally need a different shell or a separate process. Include multiple commands in the same call when they are independent and safe to run concurrently. When independent reads, searches, or edits are also needed, call those tools in the same response."}let c=u==="wsl"?"Commands run through bash in WSL (wsl.exe); the Windows working directory is mounted under /mnt/<drive>. ":l?"Commands run through a POSIX (bash-compatible) shell on Windows. ":"";return"Run non-interactive shell commands from the root of the workspace. "+ov+c+`Commands should be properly shell-escaped and targeted to avoid error or timeout. Include multiple commands in the same call when they are independent complete shell commands and safe to run concurrently; multiline scripts and heredocs must be a single command string. When independent reads, searches, or edits are also needed, call those tools in the same response. Output beyond ~${Math.round(Kl/1000)}k characters is middle-truncated (start and end preserved); pipe through grep/head/tail when you need specific sections of large output. For long-running commands, run them in background and redirect output to a tmp file that you can read from later.`}function jL(i,l={}){let u=l.bashTimeoutMs??30000,c=l.bashTimeoutMs===void 0?"default_setting":"configured_setting",g=l.cwd??process.cwd(),b=process.platform==="win32",I=l.shell,k=typeof I==="function"?I:()=>I??_t(process.platform),T=()=>qL(k(),b),E=_({name:"run_commands",description:T(),inputSchema:S(US),timeoutMs:u*2,retryable:!1,maxRetries:0,execute:async(A,C)=>{let N=$L(qS(A));return LL(N,{executor:i,cwd:g,context:C,timeoutMs:u,timeoutSource:c,telemetry:l.telemetry})}});if(typeof I==="function")Object.defineProperty(E,"description",{get:T,enumerable:!0});return E}function BL(i,l={}){let u=l.webFetchTimeoutMs??30000;return _({name:"fetch_web_content",description:"Fetch content from URLs and analyze them using the provided prompts. Use for retrieving documentation, API references, or any web content. Each request includes a URL and a prompt describing what information to extract. Fetch independent URLs together in one call, and call this tool in the same response as other independent tool calls.",inputSchema:S(zy),timeoutMs:u*2,retryable:!0,maxRetries:2,execute:async(c,g)=>{let b=y(zy,c);return Promise.all(b.requests.map(async(I)=>{try{let k=await ai(i(I.url,I.prompt,g),u,`Web fetch timed out after ${u}ms`);return{query:I.url,result:k,success:!0}}catch(k){let T=na(k);return{query:I.url,result:"",error:`Error fetching web content: ${T}`,success:!1}}}))}})}var HL=`Use \`apply_patch\` to edit files with the canonical freeform patch grammar. Pass the patch text directly as the \`input\` string. Prefer the exact format below:
456
+
457
+ *** Begin Patch
458
+ *** Update File: path/to/file.ts
459
+ @@ optional section marker
460
+ [context before]
461
+ -[old line]
462
+ +[new line]
463
+ [context after]
464
+ *** End Patch
465
+
466
+ Supported actions:
467
+ - \`*** Add File: <path>\`
468
+ - \`*** Update File: <path>\`
469
+ - \`*** Delete File: <path>\`
470
+ - optional \`*** Move to: <new path>\` immediately after an Update File header
471
+
472
+ Rules:
473
+ - In an Add File section, every file-content line must start with \`+\`.
474
+ - In an Update section, use context lines plus \`-\` and \`+\` lines to describe the change.
475
+ - Use \`@@\` markers when extra context is needed to disambiguate repeated code blocks.
476
+ - Do not use line numbers; this format is context-based.
477
+ - Prefer sending the patch body directly. Legacy shell wrappers such as \`%%bash\` and \`apply_patch <<"EOF"\` are accepted for compatibility but are not preferred.
478
+
479
+ Example:
480
+
481
+ *** Begin Patch
482
+ *** Update File: src/page.tsx
483
+ @@
484
+ return (
485
+ <div>
486
+ <button onClick={() => console.log("clicked")}>Click me</button>
487
+ + <button onClick={() => console.log("cancel clicked")}>Cancel</button>
488
+ </div>
489
+ );
490
+ }
491
+ *** End Patch`;function zL(i,l={}){let u=l.applyPatchTimeoutMs??30000,c=l.cwd??process.cwd();return _({name:"apply_patch",description:HL,inputSchema:S(FS),timeoutMs:u,retryable:!1,maxRetries:0,execute:async(g,b)=>{let I=y(V$,g),k=typeof I==="string"?I:I.input;try{return{query:"apply_patch",result:await ai(i({input:k},c,b),u,`apply_patch timed out after ${u}ms`),success:!0}}catch(T){return{query:"apply_patch",result:"",error:`apply_patch failed: ${na(T)}`,success:!1}}}})}function WL(i,l={}){let u=l.editorTimeoutMs??30000,c=l.cwd??process.cwd();return _({name:"editor",description:"An editor for controlled filesystem edits on the text file at the provided path. Provide `insert_line` to insert `new_text` at a specific line number. Otherwise, the tool replaces `old_text` with `new_text`, or creates the file with `new_text` if file does not exist. Use this tool for making small, precise edits to existing files or creating new files over shell commands. If several edits to different files or non-overlapping regions are already known, emit multiple editor tool calls in the same response instead of serializing them across turns.",inputSchema:S(Wy),timeoutMs:u,retryable:!1,maxRetries:0,execute:async(g,b)=>{let I=y(Wy,g),k=I.insert_line==null?"edit":"insert",T=Y$(I);if(T)return{query:`${k}:${I.path}`,result:"",error:T,success:!1};try{let E=await ai(i(I,c,b),u,`Editor operation timed out after ${u}ms`);return{query:`${k}:${I.path}`,result:E,success:!0}}catch(E){let A=na(E);return{query:`${k}:${I.path}`,result:"",error:`Editor operation failed: ${A}`,success:!1}}}})}function pc(i,l={}){let u=l.skillsTimeoutMs??15000,c='Execute a skill within the main conversation. When users ask you to perform tasks, check if any available skills match. When users reference a slash command, invoke it with this tool. Input: `skill` (required) and optional `args`. Example: `skill: "pdf"`, `skill: "commit", args: "-m \\"Fix bug\\""`, `skill: "review-pr", args: "123"`, `skill: "ms-office-suite:pdf"`. When a skill matches the user\'s request, invoking this tool is a blocking requirement before any other response. Never mention a skill without invoking this tool.',g=_({name:"skills",description:c,inputSchema:S(Ky),timeoutMs:u,retryable:!1,maxRetries:0,execute:async(b,I)=>{let k=y(Ky,b);return ai(i(k.skill,k.args||void 0,I),u,`Skills operation timed out after ${u}ms`)}});return Object.defineProperty(g,"description",{get(){let b=i.configuredSkills?.filter((I)=>!I.disabled).map((I)=>I.id.includes(":")?I.id:I.name);if(b&&b.length>0)return`${c} Available skills: ${b.join(", ")}.`;return c},enumerable:!0,configurable:!0}),g}function KL(i){if(!(typeof i==="string"?i.trim():i.some((l)=>l.type==="image"||l.text.trim())))throw Error("The user did not answer. Do not assume an answer: make a reasonable choice and say so, or stop and report what you need.");return i}function GL(i){return{name:"ask_question",successContext:"The user has answered the question. Continue working on their task using that answer.",description:"Ask user a question for clarifying or gathering information needed to complete the task. For example, ask the user clarifying questions about a key implementation decision. You should only ask one question. Provide an array of 2-5 options for the user to choose from. Never include an option to toggle to Act mode. The run continues after the user answers: keep working on the task using their answer.",inputSchema:S(Gy),retryable:!1,maxRetries:0,execute:async(l,u)=>{let c=y(Gy,l),g=await i(c.question,c.options,u);return KL(g)}}}function XL(i,l={}){let u=l.submitTimeoutMs??15000;return _({name:"submit_and_exit",description:"Submit the final answer and exit the conversation. For example, submit a summary of the investigation and confirm the issue is resolved. You should only submit once all necessary steps are completed AND you have verified the result by execution. Before calling this, re-read the task, then confirm from your own tool output that every required file exists at the specified path and that its contents match the expected format, data types, and values. If the task provides tests, run them and confirm they pass; if it does not, run your own solution end to end and read the output back as evidence. "+"Do not submit on the assumption that your solution works — submit because you have observed evidence that it does. "+"Provide a summary of the investigation and confirm the issue is resolved.",inputSchema:S(Xy),lifecycle:{completesRun:!0},timeoutMs:u,retryable:!1,maxRetries:0,execute:async(c,g)=>{let b=y(Xy,c);return ai(i(b.summary,b.verified,g),u,`submit_and_exit timed out after ${u}ms`)}})}function JL(i){let{executors:l,enableReadFiles:u=!0,enableSearch:c=!0,enableBash:g=!0,enableWebFetch:b=!0,enableApplyPatch:I=!1,enableEditor:k=!0,enableSkills:T=!0,enableAskQuestion:E=!0,enableSubmitAndExit:A=!1,...C}=i,N=[];if(u&&l.readFile)N.push(DL(l.readFile,C));if(c&&l.search)N.push(UL(l.search,C));if(g&&l.bash)N.push(jL(l.bash,C));if(b&&l.webFetch)N.push(BL(l.webFetch,C));if(k&&l.editor)N.push(WL(l.editor,C));else if(I&&l.applyPatch)N.push(zL(l.applyPatch,C));if(T&&l.skills)N.push(pc(l.skills,C));let O=A?l.submit:void 0;if(E&&l.askQuestion&&!O)N.push(GL(l.askQuestion));if(O)N.push(XL(O,C));return N}var Ne={BEGIN:"*** Begin Patch",END:"*** End Patch",ADD:"*** Add File: ",UPDATE:"*** Update File: ",DELETE:"*** Delete File: ",MOVE:"*** Move to: ",SECTION:"@@",END_FILE:"*** End of File"},VL=["%%bash","apply_patch","EOF","```"];class gt extends Error{constructor(i){super(i);this.name="DiffError"}}function Hr(i){let l={"‐":"-","‑":"-","‒":"-","–":"-","—":"-","−":"-","“":'"',"”":'"',"„":'"',"«":'"',"»":'"',"‘":"'","’":"'","‛":"'"," ":" "," ":" "};return i.normalize("NFC").replace(/./gu,(u)=>l[u]??u).replace(/\\`/g,"`").replace(/\\'/g,"'").replace(/\\"/g,'"')}class ZS{lines;currentFiles;patch={actions:{},warnings:[]};index=0;fuzz=0;currentPath;constructor(i,l){this.lines=i,this.currentFiles=l}parse(){this.skipBeginSentinel();while(this.hasMoreLines()&&!this.isEndMarker())this.parseNextAction();if(this.patch.warnings?.length===0)delete this.patch.warnings;return{patch:this.patch,fuzz:this.fuzz}}addWarning(i){if(!this.patch.warnings)this.patch.warnings=[];this.patch.warnings.push(i)}skipBeginSentinel(){if(this.lines[this.index]?.startsWith(Ne.BEGIN))this.index++}hasMoreLines(){return this.index<this.lines.length}isEndMarker(){return this.lines[this.index]?.startsWith(Ne.END)??!1}parseNextAction(){let i=this.lines[this.index];if(i?.startsWith(Ne.UPDATE)){this.parseUpdate(i.substring(Ne.UPDATE.length).trim());return}if(i?.startsWith(Ne.DELETE)){this.parseDelete(i.substring(Ne.DELETE.length).trim());return}if(i?.startsWith(Ne.ADD)){this.parseAdd(i.substring(Ne.ADD.length).trim());return}throw new gt(`Unknown line while parsing: ${i}`)}checkDuplicate(i,l){if(i in this.patch.actions)throw new gt(`Duplicate ${l} for file: ${i}`)}parseUpdate(i){this.checkDuplicate(i,"update"),this.currentPath=i,this.index++;let l=this.lines[this.index]?.startsWith(Ne.MOVE)?(this.lines[this.index++]??"").substring(Ne.MOVE.length).trim():void 0;if(!(i in this.currentFiles))throw new gt(`Update File Error: Missing File: ${i}`);let u=this.currentFiles[i]??"",c=this.parseUpdateFile(u,i);c.movePath=l,this.patch.actions[i]=c,this.currentPath=void 0}parseUpdateFile(i,l){let u={type:"update",chunks:[]},c=i.split(`
492
+ `),g=0,b=[Ne.END,Ne.UPDATE,Ne.DELETE,Ne.ADD,Ne.END_FILE];while(!b.some((I)=>this.lines[this.index]?.startsWith(I.trim()))){let I=this.lines[this.index],k=I?.startsWith("@@ ")?I.substring(3):void 0;if(k!==void 0||(I==="@@"?I:void 0)!==void 0)this.index++;else if(g!==0)throw new gt(`Invalid Line:
493
+ ${this.lines[this.index]}`);if(k?.trim()){let D=Hr(k.trim());for(let U=g;U<c.length;U++){let F=c[U];if(F&&(Hr(F)===D||Hr(F.trim())===D)){if(g=U+1,Hr(F.trim())===D&&Hr(F)!==D)this.fuzz++;break}}}let[T,E,A,C]=ZL(this.lines,this.index),[N,O,L]=QL(c,T,g,C);if(N===-1){let D=T.join(`
494
+ `);this.addWarning({path:this.currentPath||l,chunkIndex:u.chunks.length,message:`Could not find matching context (similarity: ${L.toFixed(2)}). Chunk skipped.`,context:D.length>200?`${D.substring(0,200)}...`:D}),this.index=A}else{this.fuzz+=O;for(let D of E)D.origIndex+=N,u.chunks.push(D);g=N+T.length,this.index=A}}return u}parseDelete(i){if(this.checkDuplicate(i,"delete"),!(i in this.currentFiles))throw new gt(`Delete File Error: Missing File: ${i}`);this.patch.actions[i]={type:"delete",chunks:[]},this.index++}parseAdd(i){if(this.checkDuplicate(i,"add"),i in this.currentFiles)throw new gt(`Add File Error: File already exists: ${i}`);this.index++;let l=[],u=[Ne.END,Ne.UPDATE,Ne.DELETE,Ne.ADD];while(this.hasMoreLines()&&!u.some((c)=>this.lines[this.index]?.startsWith(c.trim()))){let c=this.lines[this.index++];if(c===void 0)break;if(!c.startsWith("+"))throw new gt(`Invalid Add File line (missing '+'): ${c}`);l.push(c.substring(1))}this.patch.actions[i]={type:"add",newFile:l.join(`
495
+ `),chunks:[]}}}function av(i,l){let u=i.length>l.length?i:l,c=i.length>l.length?l:i;if(u.length===0)return 1;let g=YL(c,u);return(u.length-g)/u.length}function YL(i,l){let u=l.length+1,c=i.length+1,g=Array(u*c).fill(0),b=(k,T)=>g[k*c+T]??0,I=(k,T,E)=>{g[k*c+T]=E};for(let k=0;k<=l.length;k++)I(k,0,k);for(let k=0;k<=i.length;k++)I(0,k,k);for(let k=1;k<=l.length;k++)for(let T=1;T<=i.length;T++)if(l[k-1]===i[T-1])I(k,T,b(k-1,T-1));else I(k,T,1+Math.min(b(k-1,T-1),b(k,T-1),b(k-1,T)));return b(l.length,i.length)}function QL(i,l,u,c){if(l.length===0)return[u,0,1];let g=0,b=(I)=>{let k=Hr(l.join(`
496
+ `));for(let E=I;E<i.length;E++){let A=Hr(i.slice(E,E+l.length).join(`
497
+ `));if(A===k)return[E,0,1];let C=av(A,k);if(C>g)g=C}for(let E=I;E<i.length;E++){let A=Hr(i.slice(E,E+l.length).map((N)=>N.trimEnd()).join(`
498
+ `)),C=Hr(l.map((N)=>N.trimEnd()).join(`
499
+ `));if(A===C)return[E,1,1]}for(let E=I;E<i.length;E++){let A=Hr(i.slice(E,E+l.length).map((N)=>N.trim()).join(`
500
+ `)),C=Hr(l.map((N)=>N.trim()).join(`
501
+ `));if(A===C)return[E,100,1]}let T=0.66;for(let E=I;E<i.length;E++){let A=Hr(i.slice(E,E+l.length).join(`
502
+ `)),C=av(A,k);if(C>=T)return[E,1000,C];if(C>g)g=C}return[-1,0,g]};if(c){let[I,k,T]=b(i.length-l.length);if(I!==-1)return[I,k,T];return[I,k,T]=b(u),[I,k+1e4,T]}return b(u)}function ZL(i,l){let u=l,c=[],g=[],b=[],I=[],k="keep",T=["@@",Ne.END,Ne.UPDATE,Ne.DELETE,Ne.ADD,Ne.END_FILE];while(u<i.length){let E=i[u];if(!E||T.some((N)=>E.startsWith(N.trim())))break;if(E==="***")break;if(E.startsWith("***"))throw new gt(`Invalid line: ${E}`);u++;let A=k,C=E;if(C[0]==="+")k="add";else if(C[0]==="-")k="delete";else if(C[0]===" ")k="keep";else k="keep",C=` ${C}`;if(C=C.slice(1),k==="keep"&&A!==k){if(b.length||g.length)I.push({origIndex:c.length-g.length,delLines:g,insLines:b});g=[],b=[]}if(k==="delete")g.push(C),c.push(C);else if(k==="add")b.push(C);else c.push(C)}if(b.length||g.length)I.push({origIndex:c.length-g.length,delLines:g,insLines:b});if(u<i.length&&i[u]===Ne.END_FILE)return u++,[c,I,u,!0];return[c,I,u,!1]}function t0(i){if(e0.EOL===`\r
503
+ `&&!i.includes("\r"))return i.replaceAll(`
504
+ `,`\r
505
+ `);return i}function If(i){return i.includes(`\r
506
+ `)?`\r
507
+ `:`
508
+ `}function Nm(i,l){return i.split(/\r\n|\n/).join(l)}function Su(i,l,u){let c=Kr.isAbsolute(l),g=c?Kr.normalize(l):Kr.resolve(i,l);if(!u||c)return g;let b=Kr.relative(i,g);if(b.startsWith("..")||Kr.isAbsolute(b))throw new gt(`Path must stay within cwd: ${l}`);return g}function e1(i){return i.split(`
509
+ `).map((l)=>l.replace(/\r$/,""))}function lv(i){if(i.trim()==="")return!1;return VL.some((l)=>i.startsWith(l))}function t1(i){let l=0,u=i.length;while(l<u&&lv(i[l]??""))l++;while(u>l&&lv(i[u-1]??""))u--;return i.slice(l,u)}function r1(i){let l=e1(i),u=l.findIndex((b)=>b.startsWith(Ne.BEGIN)),c=-1;for(let b=l.length-1;b>=0;b--)if(l[b]?.startsWith(Ne.END)){c=b;break}if(u!==-1||c!==-1){if(u===-1||c===-1||c<u)throw new gt("Invalid patch text - incomplete sentinels. Try breaking it into smaller patches.");return{lines:l.slice(u,c+1)}}let g=t1(l);while(g.length>0&&g[0]==="")g.shift();while(g.length>0&&g[g.length-1]==="")g.pop();return{lines:[Ne.BEGIN,...g,Ne.END]}}function dv(i,l){let u=new Set;for(let c of i)for(let g of l)if(c.startsWith(g)){u.add(c.substring(g.length).trim());break}return[...u]}function s1(i,l,u){if(l.length===0)return i;let c=i.split(`
510
+ `),g=[],b=0;for(let I of l){if(I.origIndex>c.length)throw new gt(`${u}: chunk.origIndex ${I.origIndex} > lines.length ${c.length}`);if(b>I.origIndex)throw new gt(`${u}: currentIndex ${b} > chunk.origIndex ${I.origIndex}`);g.push(...c.slice(b,I.origIndex)),g.push(...I.insLines),b=I.origIndex+I.delLines.length}return g.push(...c.slice(b)),g.join(`
511
+ `)}async function i1(i,l,u,c){let g=dv(i,[Ne.UPDATE,Ne.DELETE]),b={},I={};for(let k of g){let T=Su(l,k,c),E;try{E=await Pr.readFile(T,u)}catch{throw new gt(`File not found: ${k}`)}b[k]=E.replace(/\r\n/g,`
512
+ `),I[k]=If(E)}for(let k of dv(i,[Ne.ADD])){let T=Su(l,k,c);try{b[k]=await Pr.readFile(T,u)}catch{}}return{files:b,eols:I}}function n1(i,l){let u={},c=l.files,g=(b,I)=>I===void 0?void 0:Nm(I,l.eols[b]??`
513
+ `);for(let[b,I]of Object.entries(i.actions))switch(I.type){case"delete":u[b]={type:"delete",oldContent:g(b,c[b])};break;case"add":if(I.newFile===void 0)throw new gt("ADD action without file content");u[b]={type:"add",newContent:t0(I.newFile)};break;case"update":u[b]={type:"update",oldContent:g(b,c[b]),newContent:g(b,s1(c[b]??"",I.chunks,b)),movePath:I.movePath};break}return u}function o1(i){let l=[`Patch could not be applied because ${i.length} hunk${i.length===1?"":"s"} did not match the current file content.`];for(let u of i){let c=u.chunkIndex===void 0?"unknown":String(u.chunkIndex+1);if(l.push(`${u.path}: hunk ${c}: ${u.message}`),u.context)l.push(`Context:
514
+ ${u.context}`)}return l.join(`
515
+ `)}async function a1(i,l,u,c){let g=[];for(let[b,I]of Object.entries(i)){let k=Su(l,b,c);switch(I.type){case"delete":await Pr.rm(k,{force:!0}),g.push(`${b}: [deleted]`);break;case"add":if(I.newContent===void 0)throw new gt(`Cannot create ${b} with no content`);await Pr.mkdir(Kr.dirname(k),{recursive:!0}),await Pr.writeFile(k,I.newContent,{encoding:u}),g.push(b);break;case"update":{if(I.newContent===void 0)throw new gt(`UPDATE change for ${b} has no new content`);if(I.movePath){let T=Su(l,I.movePath,c);await Pr.mkdir(Kr.dirname(T),{recursive:!0}),await Pr.writeFile(T,I.newContent,{encoding:u}),await Pr.rm(k,{force:!0}),g.push(`${b} -> ${I.movePath}`)}else await Pr.writeFile(k,I.newContent,{encoding:u}),g.push(b);break}}}return g}async function l1(i,l,u={}){let{encoding:c="utf-8",restrictToCwd:g=!0}=u,b=r1(i),I=await i1(b.lines,l,c,g),k=new ZS(b.lines,I.files),{patch:T,fuzz:E}=k.parse();if(T.warnings&&T.warnings.length>0)throw new gt(o1(T.warnings));return{changes:n1(T,I),fuzz:E}}function d1(i={}){let{encoding:l="utf-8",restrictToCwd:u=!0}=i;return async(c,g,b)=>{let{changes:I,fuzz:k}=await l1(c.input,g,{encoding:l,restrictToCwd:u}),T=await a1(I,g,l,u),E=["Successfully applied patch to the following files:"];for(let A of T)E.push(A);if(k>0)E.push(`Note: Patch applied with fuzz factor ${k}`);return E.join(`
516
+ `)}}function u1(i,l,u){let c=ts.isAbsolute(l),g=c?ts.normalize(l):ts.resolve(i,l);if(!u)return g;if(c)return g;let b=ts.relative(i,g);if(b.startsWith("..")||ts.isAbsolute(b))throw Error(`Path must stay within cwd: ${l}`);return g}function c1(i,l){if(l.length===0)return 0;return i.split(l).length-1}function p1(i,l,u){let c=i.split(/\r\n|\n/),g=l.split(/\r\n|\n/),b=0;while(b<c.length&&b<g.length&&c[b]===g[b])b++;let I=c.length,k=g.length;while(I>b&&k>b&&c[I-1]===g[k-1])I--,k--;let T=I-b,E=k-b,A=T,C=E;if(T+E>u)A=Math.min(T,Math.max(Math.ceil(u/2),u-E)),C=Math.min(E,u-A);let N=["```diff"];for(let D=b;D<b+A;D++)N.push(`-${D+1}: ${c[D]}`);for(let D=b;D<b+C;D++)N.push(`+${D+1}: ${g[D]}`);let O=T-A,L=E-C;if(O>0||L>0)N.push(`... diff truncated (${O} more removed, ${L} more added lines) ...`);return N.push("```"),N.join(`
517
+ `)}async function m1(i,l,u){return await ls.mkdir(ts.dirname(i),{recursive:!0}),await ls.writeFile(i,t0(l),{encoding:u}),`File created successfully at: ${i}`}async function h1(i){try{return await ls.access(i),!0}catch{return!1}}async function f1(i,l,u,c,g){let b=await ls.readFile(i,c),I=If(b),k=Nm(l,I),T=Nm(u??"",I),E=c1(b,k);if(E===0)throw Error(`No replacement performed: text not found in ${i}.`);if(E>1)throw Error(`No replacement performed: multiple occurrences of text found in ${i}.`);let A=b.replace(k,()=>T);await ls.writeFile(i,A,{encoding:c});let C=p1(b,A,g);return`Edited ${i}
518
+ ${C}`}async function g1(i,l,u,c){let g=await ls.readFile(i,c),b=If(g),I=g.split(/\r\n|\n/),k=I.length+1;if(l<1||l>k)throw Error(`Invalid insert_line: ${l}. insert_line must be a positive one-based boundary line in the range 1-${k}. Use ${k} to append at EOF.`);let T=l-1;return I.splice(T,0,...u.split(/\r\n|\n/)),await ls.writeFile(i,I.join(b),{encoding:c}),`Inserted content at line ${l} in ${i}.`}function y1(i={}){let{encoding:l="utf-8",restrictToCwd:u=!0,maxDiffLines:c=200}=i;return async(g,b,I)=>{let k=u1(b,g.path,u);if(g.insert_line!=null)return g1(k,g.insert_line,g.new_text,l);if(!await h1(k))return m1(k,g.new_text,l);if(g.old_text==null)throw Error(`${k} already exists, but \`old_text\` was ${g.old_text===null?"null":"omitted"}. To edit an existing file, set \`old_text\` to the exact text in the file that \`new_text\` should replace (read the file first if needed). To insert instead, provide \`insert_line\`. Do not re-send this call unchanged.`);return f1(k,g.old_text,g.new_text,l,c)}}var k1=16777216,S1=5,r0="Cache not found. Make a new tool call for the latest result again if needed. DO NOT repeat side-effecting actions to recover output.";class kf{sessionId;maxBytes;entries=new Map;referencesByToolCall=new Map;iteration=0;bytes=0;constructor(i,l=k1){this.sessionId=i,this.maxBytes=l}store(i,l){let u=Buffer.byteLength(l),c=this.referencesByToolCall.get(i);if(c)this.remove(c.id);if(this.referencesByToolCall.delete(i),u>this.maxBytes)return;while(this.bytes+u>this.maxBytes){let I=this.entries.keys().next().value;if(I===void 0)break;this.remove(I)}let g=I1(),b=`cline://cache/${encodeURIComponent(this.sessionId)}/${g}.result.txt`;return this.entries.set(g,{text:l,bytes:u,lastReadIteration:this.iteration}),this.referencesByToolCall.set(i,{id:g,uri:b}),this.bytes+=u,b}uriFor(i){return this.referencesByToolCall.get(i)?.uri}read(i){let l=/^cline:\/\/cache\/([^/]+)\/([a-f0-9-]+)\.result\.txt$/.exec(i);if(!l||decodeURIComponent(l[1])!==this.sessionId)throw Error("Invalid tool result cache URI for this session");let u=this.entries.get(l[2]);if(!u)throw Error(r0);return u.lastReadIteration=this.iteration,this.entries.delete(l[2]),this.entries.set(l[2],u),u.text}advanceIteration(){this.iteration++;for(let[i,l]of this.entries)if(this.iteration-l.lastReadIteration>=S1)this.remove(i)}clear(){this.entries.clear(),this.referencesByToolCall.clear(),this.bytes=0}remove(i){let l=this.entries.get(i);if(!l)return;this.bytes-=l.bytes,this.entries.delete(i)}}function s0(i){let l=[];function u(c){if(c!==null&&typeof c==="object"){if("type"in c&&c.type==="image"&&"data"in c&&typeof c.data==="string"){if("mediaType"in c&&typeof c.mediaType==="string")return l.push(c),"[image attached]";if("mimeType"in c&&typeof c.mimeType==="string")return l.push({type:"image",data:c.data,mediaType:c.mimeType}),"[image attached]"}if(Array.isArray(c))return c.map(u);return Object.fromEntries(Object.entries(c).map(([g,b])=>[g,u(b)]))}return c}return{textual:u(i),images:l}}function i0(i){let{textual:l,images:u}=s0(i);return{text:typeof l==="string"?l:JSON.stringify(l,null,2),images:u}}function T1(i){let{textual:l,images:u}=s0(i);return{text:typeof l==="string"?l:l===void 0?void 0:X.stringify(l,{blockQuote:"literal",lineWidth:0}),images:u}}var _1=new Map([[".gif","image/gif"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"]]),E1={maxFileSizeBytes:1e7,encoding:"utf-8",includeLineNumbers:!0},uv=1e8,A1=50000;function cv(i){let{reason:l}=i;if(l instanceof Error)return l;if(l!==void 0)return Error(String(l));return Error("File read was aborted")}async function pv(i,l,u,c,g){if(g?.aborted)throw i.destroy(),cv(g);let b=Math.max(u??1,1),I=c??Number.POSITIVE_INFINITY,k=Number.isFinite(I),T=k?I:b+A1-1,E=[],A=0,C=0,N=!1,O=!1,L=Number.isFinite(I)?Math.min(I,b+Vd-1):b+Vd-1,D=l?String(L).length+3:0,U=w1({input:i,crlfDelay:Number.POSITIVE_INFINITY}),F=g?()=>i.destroy(cv(g)):void 0;if(g&&F)g.addEventListener("abort",F,{once:!0});try{for await(let ee of U){if(C+=1,C>I){C=I;break}if(!k&&N&&C>=T){O=!0;break}if(C<b||N)continue;if(E.length>=Vd){N=!0;continue}let te=ee;if(te.length>Pm)te=`${te.slice(0,Pm)} [line truncated]`;let oe=A+te.length+D+1;if(oe>zS&&E.length>0){N=!0;continue}E.push({lineNumber:C,text:te}),A=oe}}finally{if(g&&F)g.removeEventListener("abort",F);U.close(),i.destroy()}let j=String(E[E.length-1]?.lineNumber??C).length,H=E.map(({lineNumber:ee,text:te})=>l?`${String(ee).padStart(j," ")} | ${te}`:te).join(`
519
+ `),Q=E[E.length-1]?.lineNumber;if(Q===void 0)return H;let z=Math.min(I,C);if(Q>=z)return H;let W=O?`${C}+ lines`:z;return`${H}
520
+
521
+ [Showing lines ${b}-${Q} of ${W}. Use start_line/end_line to read other sections.]`}function C1(i={}){let{maxFileSizeBytes:l,encoding:u,includeLineNumbers:c}={...E1,...i};return async(g,b)=>{let{path:I,start_line:k,end_line:T}=g;if(I.startsWith("cline://")){b.signal?.throwIfAborted();let L=b.metadata?.toolResultCache;if(!(L instanceof kf))throw Error(r0);return pv(b1.from([L.read(I)]),c,k,T,b.signal)}let E=di.isAbsolute(I)?di.normalize(I):di.resolve(process.cwd(),I),A=qa(E)??E,C=di.extname(A).toLowerCase(),N=_1.get(C),O=await mc.stat(A);if(!O.isFile())throw Error(`Path is not a file: ${A}`);if(N){if(O.size>l)throw Error(`Image file too large: ${O.size} bytes (max: ${l} bytes).`);if(b.metadata?.modelSupportsImages!==!0)throw Error("Current model does not support image input");let L=await mc.readFile(A);return[{type:"text",text:"Successfully read image"},{type:"image",data:L.toString("base64"),mediaType:N}]}if(O.size>uv)throw Error(`Text file too large to stream safely: ${O.size} bytes (max: ${uv} bytes). Use a targeted command such as sed, grep, head, or tail to inspect specific sections.`);return pv(v1(A,{encoding:u}),c,k,T,b.signal)}}async function R1(){let i=Ha();return await x1(i,{recursive:!0,mode:448}),i}var O1=`# Cline chat workspace
522
+
523
+ This directory is Cline's shared workspace for chat sessions that were
524
+ started without a project. It is not a project of its own, and other chat
525
+ sessions use it too. Treat the conversation as a chat first: do not create
526
+ or edit files here unless the user asks for something that requires them.
527
+
528
+ If the user asks you to build something or write code:
529
+
530
+ 1. Ask where they would like the project to live.
531
+ 2. If they have no preference, create a new folder with a short, descriptive
532
+ name inside this directory and do all work inside that folder. Tell the
533
+ user where it is so they can open it as a workspace later.
534
+
535
+ Projects from earlier chat sessions may already exist as folders here; the
536
+ user may refer back to them. Never assume loose files in this directory
537
+ belong to the current conversation, and keep new work inside a named folder
538
+ rather than at the top level.
539
+ `;async function $1(){let i=za();await P1(i,{recursive:!0,mode:448});let l=N1(i,ht);try{await M1(l,O1,{flag:"wx"})}catch(u){if(u.code!=="EEXIST")throw u}return i}async function L1(i){let l=i.cwd?.trim()??"",u=i.workspaceRoot?.trim()??"",c=l||u||await $1();return{...i,cwd:l||c,workspaceRoot:u||c}}var B1=15000,H1=600000,z1=1000,W1=new Set([".git","node_modules","vendor","dist","build",".next","coverage",".turbo",".cache","target","out"]);function hv(i){let l=i&&typeof i==="object"&&"code"in i?String(i.code??""):"";return l==="EACCES"||l==="EPERM"||l==="ENOENT"}var Mo=new Map;function K1(){if(!a0)return!1;return!0}function G1(i){if(Mo.size<=1)return;for(let[l,u]of Mo.entries()){if(u.pending)continue;if(i-u.lastAccessedAt>H1)Mo.delete(l)}}async function X1(i){let l=(await new Promise((u,c)=>{let g=D1("rg",["--files","--hidden","-g","!.git"],{cwd:i,stdio:["ignore","pipe","pipe"],windowsHide:!0}),b="",I="";g.stdout.on("data",(k)=>{b+=k.toString()}),g.stderr.on("data",(k)=>{I+=k.toString()}),g.on("error",c),g.on("close",(k)=>{if(k===0){u(b);return}c(Error(I||`rg exited with code ${k}`))})})).split(/\r?\n/).map((u)=>u.trim()).filter((u)=>u.length>0).map((u)=>u.replace(/\\/g,"/"));return new Set(l)}async function l0(i,l,u){let c;try{c=await F1(l,{withFileTypes:!0})}catch(g){if(hv(g))return;throw g}for(let g of c){let b=Tu.join(l,g.name);if(g.isDirectory()){if(W1.has(g.name))continue;try{await l0(i,b,u)}catch(I){if(hv(I))continue;throw I}continue}if(g.isFile())u.add(qt(Tu.relative(i,b)))}}async function J1(i){let l=new Set;return await l0(i,i,l),l}function V1(i){let l=(c)=>{try{return U1.native(c)}catch{return Tu.resolve(c)}},u=l(i);return u===l(q1.homedir())||u===Tu.parse(u).root}async function Zd(i){if(V1(i))return new Set;try{return await X1(i)}catch{return J1(i)}}function Y1(){if(a0||!mv)return;let i=mv;i.on("message",(l)=>{if(l.type!=="index")return;Zd(l.cwd).then((u)=>{let c={type:"indexResult",requestId:l.requestId,files:Array.from(u)};i.postMessage(c)}).catch((u)=>{let c={type:"indexResult",requestId:l.requestId,error:u instanceof Error?u.message:"Failed to build file index"};i.postMessage(c)})})}class d0{worker=new j1(new URL(import.meta.url));nextRequestId=0;pending=new Map;constructor(){this.worker.unref(),this.worker.on("message",(i)=>{if(i.type!=="indexResult")return;let l=this.pending.get(i.requestId);if(!l)return;if(this.pending.delete(i.requestId),i.error){l.reject(Error(i.error));return}l.resolve(i.files??[])}),this.worker.on("error",(i)=>{this.flushPending(i)}),this.worker.on("exit",(i)=>{if(i!==0)this.flushPending(Error(`File index worker exited with code ${i}`))})}requestIndex(i){let l=++this.nextRequestId,u=new Promise((g,b)=>{let I=setTimeout(()=>{this.pending.delete(l),g(null)},z1);I.unref(),this.pending.set(l,{resolve:(k)=>{clearTimeout(I),g(k)},reject:(k)=>{clearTimeout(I),b(k)}})}),c={type:"index",requestId:l,cwd:i};return this.worker.postMessage(c),u}flushPending(i){for(let[l,u]of this.pending.entries())u.reject(i),this.pending.delete(l)}}Y1();var rp;function Q1(){if(!K1())return null;if(rp===void 0)rp=new d0;return rp}async function Z1(i){let l=Q1();if(!l)return Zd(i);try{let u=await l.requestIndex(i);if(u===null)return Zd(i);return new Set(u)}catch{return Zd(i)}}async function u0(i,l={}){let u=l.ttlMs??B1,c=Date.now();G1(c);let g=Mo.get(i);if(g&&u>0&&c-g.lastBuiltAt<=u&&g.files.size>0)return g.lastAccessedAt=c,g.files;if(g?.pending)return g.lastAccessedAt=c,g.pending;let b=Z1(i).then((I)=>(Mo.set(i,{files:I,lastBuiltAt:Date.now(),lastAccessedAt:Date.now(),pending:null}),I));return Mo.set(i,{files:g?.files??new Set,lastBuiltAt:g?.lastBuiltAt??0,lastAccessedAt:c,pending:b}),b}var tD=new Set("),.:;!?`'\""),rD=/^[(`'"]+/;function sD(i){let l=i.length;while(l>0&&tD.has(i.charAt(l-1)))l-=1;return i.slice(0,l)}function iD(i){let l=i.matchAll(/(^|[\s])@([^\s]+)/g),u=[];for(let c of l){let g=(c[2]??"").trim();if(g.length===0)continue;let b=sD(g.replace(rD,""));if(b.length===0||b.includes("@"))continue;u.push(b)}return Array.from(new Set(u))}function nD(i,l){let u=i.replace(/\\/g,"/"),c=io.isAbsolute(u)?io.resolve(u):io.resolve(l,u),g=io.relative(l,c);if(g.startsWith("..")||io.isAbsolute(g))return;return qt(g)}async function oD(i,l,u={}){let c=iD(i);if(c.length===0)return{prompt:i,mentions:[],matchedFiles:[],ignoredMentions:[]};let{maxFiles:g,maxFileBytes:b,maxTotalBytes:I}=u,k=await u0(l,{ttlMs:u.ttlMs}),T=[],E=[],A=[],C=0;for(let N of c){if(g&&A.length>=g){E.push(N);continue}let O=nD(N,l);if(!O||!k.has(O)){E.push(N);continue}if(!b||!I){T.push(O);continue}let L=io.join(l,O);try{if(!(await eD(L)).isFile()){E.push(N);continue}let D=C+b;if(D>I){E.push(N);continue}C=D,T.push(O)}catch{E.push(N)}}return{prompt:i,mentions:c,matchedFiles:T,ignoredMentions:E}}var aD=10485760,lD=["ts","tsx","js","jsx","mjs","cjs","json","md","mdx","txt","yaml","yml","toml","py","rb","php","phtml","inc","go","rs","java","kt","swift","c","cpp","h","hpp","css","scss","less","html","vue","svelte","twig","sql","sh","bash","zsh","fish","ps1","env","gitignore","dockerignore","editorconfig"],dD=["node_modules","vendor",".git","dist","build",".next","coverage","__pycache__",".venv","venv",".cache",".turbo",".output","out","target","bin","obj"],yi=null;function uD(){if(yi!==null)return Promise.resolve(yi);return new Promise((i)=>{let l=n0("rg",["--version"],{stdio:["ignore","pipe","pipe"],windowsHide:!0});l.on("close",(u)=>{yi=u===0,i(yi)}),l.on("error",()=>{yi=!1,i(!1)}),setTimeout(()=>{if(!l.killed)l.kill("SIGTERM");if(yi===null)yi=!1,i(!1)},1000)})}function cD(i,l,u,c,g=5000,b){return new Promise((I)=>{let k=n0("rg",["--json",`--context=${c}`,"--max-count=1","-i",i],{cwd:l,stdio:["ignore","pipe","pipe"],windowsHide:!0}),T="",E=!1,A=()=>{if(!k.killed)k.kill("SIGTERM")},C=setTimeout(()=>{if(!E)E=!0,A(),I(null)},g),N=(O)=>{if(!E)E=!0,clearTimeout(C),A(),I(O)};if(b?.aborted){A(),I(null);return}b?.addEventListener("abort",()=>{N(null)}),k.stdout.on("data",(O)=>{if(T.length>aD)return;T+=O.toString()}),k.stderr.on("data",()=>{}),k.on("close",(O)=>{if(O===0||O===1){try{let L=[],D=T.slice(0,T.lastIndexOf(`
540
+ `)+1).split(`
541
+ `).filter((U)=>U.trim());for(let U of D){if(L.length>=u)break;let F=JSON.parse(U);if(F.type==="match"){let j=F.data,H=[];if(F.data.submatches&&F.data.submatches.length>0){let Q=F.data.submatches[0];L.push({file:j.path.text,line:j.line_number,column:(Q?.start??0)+1,match:Q?.match?.text??"",context:H})}}else if(F.type==="context"&&L.length>0){let j=L[L.length-1],H=F.data.line_number===j.line?">":" ";j.context.push(`${H} ${F.data.line_number}: ${F.data.lines?.text??F.data.line?.text??""}`)}}N(L.length>0?L:null)}catch{N(null)}return}N(null)}),k.on("error",()=>{N(null)})})}function pD(i,l,u,c){let g=i.split("/"),b=g[g.length-1]??"";if(g.length-1>c)return!1;for(let k=0;k<g.length-1;k++)if(l.has(g[k]??""))return!1;let I=hc.posix.extname(b).slice(1).toLowerCase();return u.has(I)||!I&&!b.startsWith(".")}function mD(i={}){let{includeExtensions:l=lD,excludeDirs:u=dD,maxResults:c=100,contextLines:g=2,maxDepth:b=20}=i,I=new Set(u),k=new Set(l.map((T)=>T.toLowerCase()));return async(T,E,A)=>{if(A.signal?.aborted)throw Error("Search operation aborted");let C=await uD(),N=null;if(C)N=await cD(T,E,c,g,5000,A.signal);if(N){let j=[`Found ${N.length} result${N.length===1?"":"s"} for pattern: ${T}`,""];for(let H of N)j.push(`${H.file}:${H.line}:${H.column}`),j.push(...H.context),j.push("");if(N.length>=c)j.push(`(Showing first ${c} results. Refine your search for more specific results.)`);return fv(j.join(`
542
+ `))}let O;try{O=new RegExp(T,"gim")}catch(j){throw Error(`Invalid regex pattern: ${T}. ${j instanceof Error?j.message:""}`)}let L=[],D=0,U=await u0(E);for(let j of U){if(A.signal?.aborted)throw Error("Search operation aborted");if(!pD(j,I,k,b))continue;if(L.length>=c)break;D++;let H=hc.join(E,j);try{let Q=(await o0.readFile(H,"utf-8")).split(`
543
+ `);for(let z=0;z<Q.length;z++){let W=Q[z];O.lastIndex=0;let ee=O.exec(W);while(ee!==null){if(L.length>=c)break;let te=Math.max(0,z-g),oe=Math.min(Q.length-1,z+g),G=[];for(let se=te;se<=oe;se++){let Pe=se===z?">":" ";G.push(`${Pe} ${se+1}: ${Q[se].slice(0,Pm)}`)}if(L.push({file:j,line:z+1,column:ee.index+1,match:ee[0],context:G}),ee.index===O.lastIndex)O.lastIndex++;ee=O.exec(W)}}}catch{}}if(L.length===0)return`No results found for pattern: ${T}
544
+ Searched ${D} files.`;let F=[`Found ${L.length} result${L.length===1?"":"s"} for pattern: ${T}`,`Searched ${D} files.`,""];for(let j of L)F.push(`${j.file}:${j.line}:${j.column}`),F.push(...j.context),F.push("");if(L.length>=c)F.push(`(Showing first ${c} results. Refine your search for more specific results.)`);return fv(F.join(`
545
+ `))}}function fv(i){if(i.length<=Yd)return i;let l=Math.ceil(Yd/2),u=Math.max(1,Yd-l);return`${i.slice(0,l)}
546
+ [... search output truncated: ${i.length} chars total. Narrow the pattern or scope to view the elided matches ...]
547
+ `+i.slice(-u)}function hD(i){return i.replace(/<script[^>]*>[\s\S]*?<\/script>/gi,"").replace(/<style[^>]*>[\s\S]*?<\/style>/gi,"").replace(/<!--[\s\S]*?-->/g,"").replace(/<(p|div|br|hr|h[1-6]|li|tr)[^>]*>/gi,`
548
+ `).replace(/<[^>]+>/g," ").replace(/&nbsp;/g," ").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#(\d+);/g,(l,u)=>String.fromCharCode(parseInt(u,10))).replace(/\s+/g," ").replace(/\n\s+/g,`
549
+ `).replace(/\n{3,}/g,`
550
+
551
+ `).trim()}function fD(i={}){let{timeoutMs:l=30000,maxResponseBytes:u=5000000,userAgent:c="Mozilla/5.0 (compatible; AgentBot/1.0)",headers:g={},followRedirects:b=!0}=i;return async(I,k,T)=>{let E;try{E=new URL(I)}catch{throw Error(`Invalid URL: ${I}`)}if(!["http:","https:"].includes(E.protocol))throw Error(`Invalid protocol: ${E.protocol}. Only http and https are supported.`);let A=new AbortController,C=setTimeout(()=>A.abort(),l),N;if(T.signal)N=()=>A.abort(),T.signal.addEventListener("abort",N);try{let O=await fetch(I,{method:"GET",headers:{"User-Agent":c,Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,text/plain;q=0.8,*/*;q=0.7","Accept-Language":"en-US,en;q=0.9",...g},redirect:b?"follow":"manual",signal:A.signal});if(clearTimeout(C),!b&&O.status>=300&&O.status<400)return`Redirect to: ${O.headers.get("location")}`;if(!O.ok)throw Error(`HTTP ${O.status}: ${O.statusText}`);let L=O.headers.get("content-type")||"",D=O.body?.getReader();if(!D)throw Error("Failed to read response body");let U=[],F=0;while(!0){let{done:ee,value:te}=await D.read();if(ee)break;if(F+=te.length,F>u)throw D.cancel().catch(()=>{}),Error(`Response too large: exceeded ${u} bytes`);U.push(te)}let j=new Uint8Array(F),H=0;for(let ee of U)j.set(ee,H),H+=ee.length;let Q=new TextDecoder("utf-8").decode(j),z;if(L.includes("text/html")||L.includes("application/xhtml"))z=hD(Q);else if(L.includes("application/json"))try{let ee=JSON.parse(Q);z=JSON.stringify(ee,null,2)}catch{z=Q}else z=Q;let W=[`URL: ${I}`,`Content-Type: ${L}`,`Size: ${F} bytes`,"","--- Content ---",z.slice(0,50000)];if(z.length>50000)W.push(`
552
+ [Content truncated: showing first 50000 of ${z.length} characters]`);return W.push("","--- Analysis Request ---",`Prompt: ${k}`),W.join(`
553
+ `)}catch(O){if(clearTimeout(C),O instanceof Error){if(O.name==="AbortError")throw Error(`Request timed out after ${l}ms`);throw O}throw Error(`Fetch failed: ${String(O)}`)}finally{if(T.signal&&N)T.signal.removeEventListener("abort",N)}}}class c0{commands=new Map;register(i){return this.commands.set(i.executionId,i),()=>{if(this.commands.get(i.executionId)===i)this.commands.delete(i.executionId)}}proceedWhileRunning(i,l){let u=0;for(let c of[...this.commands.values()]){if(c.sessionId!==i||l!==void 0&&c.toolCallId!==l)continue;try{if(c.detach())u+=1}catch{}}return u}}function gD(i={}){return PL(i)}function yD(i={}){return{readFile:C1(i.fileRead),search:mD(i.search),bash:gD(i.bash),webFetch:fD(i.webFetch),applyPatch:d1(i.applyPatch),editor:y1(i.editor)}}var vD={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion",submit_and_exit:"enableSubmitAndExit"},wD=[{name:"openai-native-use-apply-patch",mode:"act",providerIdIncludes:["openai-native"],enableTools:["apply_patch"],disableTools:["editor"]},{name:"codex-and-gpt-use-apply-patch",mode:"act",modelIdIncludes:["codex","gpt"],enableTools:["apply_patch"],disableTools:["editor"]}];function gv(i,l){if(!l||l.length===0)return!0;let u=i.toLowerCase();return l.some((c)=>u.includes(c.toLowerCase()))}function bD(i,l,u,c){if(i.mode&&i.mode!=="any"&&i.mode!==c)return!1;return gv(l,i.providerIdIncludes)&&gv(u,i.modelIdIncludes)}function ID(i,l,u,c){if(!c||c.length===0)return{};let g=new Map;for(let I of c){if(!bD(I,i,l,u))continue;for(let k of I.disableTools??[])g.set(k,!1);for(let k of I.enableTools??[])g.set(k,!0)}let b={};for(let[I,k]of g.entries())b[vD[I]]=k;return b}var Sf={act:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!0,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},plan:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!1,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},search:{enableReadFiles:!0,enableSearch:!0,enableBash:!1,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},minimal:{enableReadFiles:!1,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!1},yolo:{enableReadFiles:!0,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!0,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!0,enableSpawnAgent:!1,enableAgentTeams:!1}};function Tf(i){if(i.mode==="plan")return"plan";if(i.mode==="yolo")return"yolo";return"act"}var ds=(i)=>new RegExp(i,"iu"),SD=[String.raw`\b(?:are|r)\s+(?:you|u)\s+(?:still\s+)?(?:stuck|dead|there|alive|ok(?:ay)?|frozen|hung|hanging|working|running|awake|on it|done|finished|thinking|doing anything|responding|back)\b`,String.raw`\b(?:you|u)\s+(?:still\s+)?(?:stuck|dead|alive|frozen|hung)\b`,String.raw`\b(?:did|has|have)\s+(?:you|it|this|that|the\s+\w+)(?:\s+\w+)?\s+(?:finish(?:ed)?|complete[d]?|stop(?:ped)?|die[d]?|hang|hung|crash(?:ed)?|freeze|froze|get\s+stuck|time[d]?\s*out)\b`,String.raw`\b(?:is|was)\s+(?:it|this|that|the\s+\w+)\s+(?:still\s+)?(?:stuck|hung|frozen|running|done|finished|working)\b`,String.raw`\bwhy\s+(?:did|have|has)\s+(?:you|it)\s+stop(?:ped)?\b|\b(?:you|it)\s+(?:just\s+)?stopped\b`,String.raw`\b(?:seems?|appears?|looks?)\s+(?:to\s+be\s+|like\s+(?:you(?:'re| are)|it(?:'s| is))\s+)?(?:stuck|frozen|hung|dead)\b`,String.raw`\bwhat(?:'s|\s+is)?\s+(?:happening|going\s+on)\b|\bwhat\s+happened\b|\bany\s+(?:update|progress)\b|^\s*(?:status|update|progress)\s*\?+\s*$`,String.raw`\bprevious\s+(?:\w+\s+){0,4}(?:response|answer|reply|output)\s+(?:was|got)\s+(?:incomplete|cut\s+off|truncated|interrupted)|\bincomplete\s+or\s+timed\s+out\b`,String.raw`\byou\s+(?:got\s+)?cut\s+off\b(?!\s+by\s+my)|\b(?:your\s+)?(?:response|answer|reply)\s+(?:got\s+|was\s+)?cut\s+off\b(?!\s+by\s+my)`,String.raw`^(?:anyone\s+there|you\s+there|wake\s+up)\s*[?!.]*$`,String.raw`^[??]+$|^\.{3,}$|^.{0,6}[??]{3,}$`,String.raw`还在吗|在吗[??]?$|怎么不动|你怎么停|怎么停了|止まった|固まった|フリーズ|멈췄|завис|застрял|bist\s+du\s+(?:noch\s+)?da`].map(ds),TD=ds(String.raw`\b(?:stuck|hung|hanging|frozen|unresponsive|not\s+responding|no\s+response)\b|卡住|卡了|没反应|不动了`),_D=ds(String.raw`^(?:(?:ok(?:ay)?|k|so|well|please|pls|now|yes|yeah)[,.!]?\s+)*`+String.raw`(?:continue|contine|contiune|keep\s+going|keep\s+working|go\s+on|go\s+ahead|go|proceed|resume|carry\s+on|next|finish(?:\s+it|\s+up)?|do\s+it|try\s+again|retry|again|`+String.raw`继续|繼續|続けて|계속|продолжа\p{L}*|дальше|давай|contin[uú]a|sigue|weiter|mach\s+weiter|continuez)`+String.raw`(?:(?![\p{L}\p{N}_])|(?<=[぀-ヿ一-鿿]))[\s\p{L}\p{N}_,.!?()'’-]{0,40}$`),ED=ds(String.raw`\b(?:pick\s+(?:it\s+)?(?:back\s+)?up|continue|carry\s+on|resume|keep\s+going)\s+(?:from\s+)?where\s+(?:you|we)\s+(?:left\s+off|stopped|were)\b|\bwhere\s+were\s+we\b`),AD=ds(String.raw`^(?:hello+|hi+|hey+|ping|yo|你好|在吗)\s*[??!.]*$`),CD=ds(String.raw`^\s*(?:API error|API Request Failed|Error:\s*(?:Request|Stream|Connection))|stream-first-event-timeout|Request timed out|socket hang up|ECONNRESET|overloaded_error|upstream connect error|Provider returned error|terminated due to timeout`),xD=ds(String.raw`(?:[.!?:;)\]}"'\x60*>|_~。!?:)」』…]|[←-⯿\u{1F000}-\u{1FAFF}☀-➿️])\s*$`),RD=ds(String.raw`\n\s*(?:[-*•]|\d+[.)])\s+\S[^\n]*$`),PD=ds(String.raw`\b(?:will|I'll|I\s+will)\s+(?:ping|notify|report|update|let\s+you\s+know|check\s+back|get\s+back)\b[^\n]{0,80}\b(?:when|once|after|as\s+soon\s+as)\b|\b(?:wait(?:ing)?\s+for\s+(?:it|the\s+\w+)\s+to\s+(?:finish|complete|land))\b`),MD=ds(String.raw`(?:^|[\n.!:]\s*)(?:now\s+|next[,:]?\s+|then\s+|first[,:]?\s+|ok(?:ay)?[,.]\s+|great[,.!]\s+)?(?:let\s+me|let's|i'll|i\s+will|i'm\s+going\s+to|i\s+am\s+going\s+to|i'm\s+now|going\s+to|launching|starting|running|proceeding|continuing|moving\s+on|time\s+to)\b[^\n]{0,240}[.:…]?\s*$`),ND=ds(String.raw`\?\s*$|\b(?:want\s+me\s+to|should\s+i|shall\s+i|would\s+you\s+like|do\s+you\s+want|let\s+me\s+know|approve|confirm|which\s+(?:option|one|approach)|ready\s+to\s+proceed|when\s+you(?:'re|\s+are)\s+ready|ping\s+me|once\s+you)\b`);function OD(i){let l=i.trim(),u=Array.from(l).length;if(!l||u>200)return"none";if(SD.some((c)=>c.test(l)))return"probe";if(u<=40&&TD.test(l))return"probe";if(u<=80&&_D.test(l))return"nudge";if(ED.test(l))return"nudge";if(AD.test(l))return"greeting";return"none"}function $D(i){let l=i.trimEnd();if(!l)return"empty_turn";if(l.length<600&&CD.test(l))return"api_error";if((l.split("```").length-1)%2===1)return"truncated_text";if(!xD.test(l)&&!RD.test(l))return"truncated_text";let u=l.slice(l.lastIndexOf(`
554
+
555
+ `)+1);if(PD.test(u))return"async_promise";if(MD.test(u)&&!ND.test(u.slice(-300)))return"intent_without_action";return"none"}var yv=60000;function LD(i){if(i.content.length===0)return"empty";let l=new Set(i.content.map((u)=>u.type));if(l.has("tool-call"))return"tool_call";return`assistant_${l.has("text")?"text":"other"}`}function DD(i){return i.content.map((l)=>l.type==="text"?l.text:"").join("")}class p0{telemetry;context;lastEventAt=Date.now();lastEventType="";maxIdleMs=0;maxIdleAfter="";idleReported=!1;agentId="";runId="";finishReason;turnStarted=!1;turnHadOutput=!1;turnMessage;idleTimer;constructor(i,l){this.telemetry=i,this.context=l,this.scheduleIdleCheck()}observe(i){switch(this.recordGap(),this.lastEventType=i.type,this.agentId=i.snapshot.agentId,this.runId=i.snapshot.runId??"",i.type){case"turn-started":this.turnStarted=!0,this.turnHadOutput=!1,this.turnMessage=void 0,this.finishReason=void 0;break;case"assistant-text-delta":case"assistant-reasoning-delta":case"assistant-media":case"tool-call-delta":this.turnHadOutput=!0;break;case"assistant-message":this.turnMessage=i.message,this.finishReason=i.finishReason;break}}endProperties(){this.dispose();let i=Date.now()-this.lastEventAt;this.recordGap();let l=this.turnMessage?LD(this.turnMessage):!this.turnStarted?"none":this.turnHadOutput?"unfinished":"empty",{sessionId:u,isSubagent:c,providerId:g,modelId:b}=this.context;return{...u?{sessionId:u}:{},isSubagent:c,...g?{providerId:g}:{},...b?{modelId:b}:{},maxIdleMs:this.maxIdleMs,maxIdleAfter:this.maxIdleAfter,idleReported:this.idleReported,msSinceLastEvent:i,lastEventType:this.lastEventType,finishReason:this.finishReason,endedOn:l,...l==="empty"||l==="assistant_text"?{textSignature:$D(this.turnMessage?DD(this.turnMessage):"")}:{}}}dispose(){clearTimeout(this.idleTimer),this.idleTimer=void 0}recordGap(){let i=Date.now();if(i-this.lastEventAt>this.maxIdleMs)this.maxIdleMs=i-this.lastEventAt,this.maxIdleAfter=this.lastEventType;this.lastEventAt=i}scheduleIdleCheck(){let i=this.lastEventAt+yv-Date.now();this.idleTimer=setTimeout(()=>{let l=Date.now()-this.lastEventAt;if(l<yv){this.scheduleIdleCheck();return}this.idleReported=!0,this.idleTimer=void 0,CA(this.telemetry,{ulid:this.context.sessionId,agentId:this.agentId,runId:this.runId,idleMs:l,lastEventType:this.lastEventType,isSubagent:this.context.isSubagent})},Math.max(i,0)),this.idleTimer.unref?.()}}var m0=8000,UD=50000,FD=6000000,qD=200000,jD=12000,BD=65536,Rl=2000,vv=40000,HD=8,sp={maxToolResultChars:"CLINE_MESSAGE_BUILDER_MAX_TOOL_RESULT_CHARS",maxTotalTextBytes:"CLINE_MESSAGE_BUILDER_MAX_TOTAL_TEXT_BYTES",minOutdatedRewriteBytes:"CLINE_MESSAGE_BUILDER_MIN_OUTDATED_REWRITE_BYTES"},zD=new Set(["read","read_files"]),wi="[outdated - see the latest file content]",wv="Tool execution was interrupted before a result was produced.",bv=(i)=>`
556
+
557
+ ...[truncated ${i} chars]...
558
+
559
+ `,Pl=(i)=>`
560
+
561
+ ...[truncated ${i} chars to fit provider request budget]...
562
+
563
+ `,WD=(i)=>`
564
+
565
+ ...[assistant text truncated: omitted ${i} chars]...
566
+
567
+ `,Iv=(i)=>`
568
+
569
+ ...[assistant text truncated: omitted ${i} chars to fit provider request budget]...
570
+
571
+ `,KD=(i)=>`
572
+
573
+ ...[assistant text truncated: omitted ${i} chars due to repeated tool-call markup]...
574
+
575
+ `;function GD(i=process.env){return{maxToolResultChars:Sv(i[sp.maxToolResultChars]),maxTotalTextBytes:Sv(i[sp.maxTotalTextBytes]),minOutdatedRewriteBytes:JD(i[sp.minOutdatedRewriteBytes])}}class h0{recoveryNotices=new WeakSet;getToolResultRecovery;recoveryNoticeBytes=0;indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;maxToolResultChars;maxFileContentChars;maxTotalTextBytes;mediaBudget;maxAssistantTextChars;maxAssistantToolMarkupChars;minOutdatedRewriteBytes;committedOutdatedRewrites=new Map;constructor(i={}){this.getToolResultRecovery=i.getToolResultRecovery,this.maxToolResultChars=sl(i.maxToolResultChars,m0),this.maxFileContentChars=sl(i.maxFileContentChars,UD),this.maxTotalTextBytes=sl(i.maxTotalTextBytes,FD),this.mediaBudget=i.mediaBudget??{},this.maxAssistantTextChars=sl(i.maxAssistantTextChars,qD),this.maxAssistantToolMarkupChars=sl(i.maxAssistantToolMarkupChars,jD),this.minOutdatedRewriteBytes=VD(i.minOutdatedRewriteBytes,BD)}resetConversationState(){this.resetIndexes(),this.committedOutdatedRewrites.clear()}buildForApi(i){this.recoveryNoticeBytes=0,this.reindex(i),this.commitOutdatedRewrites(i);let l=this.addMissingToolResults(i).map((c)=>{if(!Array.isArray(c.content)){if(c.role==="user"&&typeof c.content==="string"){let I=ye(c.content);if(I!==c.content)return{...c,content:I}}if(c.role==="assistant"&&typeof c.content==="string"){let I=this.truncateAssistantText(c.content);if(I!==c.content)return{...c,content:I}}return c}let g=!1,b=c.content.map((I)=>{let k=this.transformBlock(I,c.role);if(k!==I)g=!0;return k});return g?{...c,content:b}:c}),u=this.applyMediaBudget(l);return this.truncateToTotalTextBudget(u)}transformBlock(i,l){if(l==="user"&&i.type==="text"&&typeof i.text==="string"){let b=ye(i.text);if(b!==i.text)return{...i,text:b};return i}if(l==="assistant"&&i.type==="text"&&typeof i.text==="string"){let b=this.truncateAssistantText(i.text);return b===i.text?i:{...i,text:b}}if(i.type==="file"){let b=Tl(i.content,this.maxFileContentChars,bv);return b===i.content?i:{...i,content:b}}if(i.type!=="tool_result")return i;let u=this.resolveToolName(i),c=this.getToolResultRecovery?.({...i,name:u??i.name});if(c){let{text:b,images:I}=i0(i.content);if(typeof b==="string"&&b.length>this.maxToolResultChars){let k=[{type:"text",text:this.truncateMiddle(b)},...I];if(c.uri){let T={type:"text",text:`Full result is temporarily saved to ${c.uri}. Only read_files can access this cache URI. Use read_files with specific line ranges if omitted content is needed.`},E=qe(T.text);if(this.recoveryNoticeBytes+E<=this.maxTotalTextBytes/2)this.recoveryNoticeBytes+=E,this.recoveryNotices.add(T),k.push(T)}return{...i,content:k}}}let g=i.content;if(this.isReadTool(u)&&i.is_error!==!0){let b=this.committedOutdatedRewrites.get(i.tool_use_id);if(b&&b.size>0){let I=this.getReadLocators(i).filter((k)=>b.has(this.toReadLocatorKey(k))&&this.isOutdatedReadLocator(k,i.tool_use_id));if(I.length>0)g=this.replaceOutdatedReadContent(g,I)}}return g=this.truncateToolResultContent(g),g===i.content?i:{...i,content:g}}reindex(i){let l=this.indexedMessageCount===0||i.length>=this.indexedMessageCount&&i[this.indexedMessageCount-1]===this.indexedTailRef;if(i.length<this.indexedMessageCount||!l)this.resetIndexes();for(let u=this.indexedMessageCount;u<i.length;u++){let c=i[u];if(!Array.isArray(c.content))continue;for(let g=0;g<c.content.length;g++){let b=c.content[g];if(b.type==="file")this.latestFullContentOwnerByPathCache.set(b.path,`file:${u}:${g}`);else if(b.type==="tool_use"){let I=b.name.toLowerCase();if(this.toolNameByIdCache.set(b.id,I),this.isReadTool(I)){let k=this.extractLocatorsFromReadToolInput(b.input);if(k.length>0)this.readLocatorsByToolUseIdCache.set(b.id,k)}}else if(b.type==="tool_result"){let I=this.resolveToolName(b);if(!this.isReadTool(I)||b.is_error===!0)continue;let k=this.getReadLocators(b);for(let T of k)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(T),b.tool_use_id),this.isFullFileRead(T))this.latestFullContentOwnerByPathCache.set(T.path,b.tool_use_id)}}}this.indexedMessageCount=i.length,this.indexedTailRef=i.length>0?i[i.length-1]:void 0}commitOutdatedRewrites(i){let l=new Map,u=new Set,c=0;for(let g of i){if(!Array.isArray(g.content))continue;for(let b of g.content){if(b.type!=="tool_result"||b.is_error===!0)continue;let I=this.resolveToolName(b);if(!this.isReadTool(I))continue;u.add(b.tool_use_id);let k=this.committedOutdatedRewrites.get(b.tool_use_id),T=new Set,E=new Set;for(let C of this.getReadLocators(b)){let N=this.toReadLocatorKey(C);if(!this.isOutdatedReadLocator(C,b.tool_use_id))continue;if(E.add(N),!k?.has(N))T.add(N)}if(k){for(let C of k)if(!E.has(C))k.delete(C);if(k.size===0)this.committedOutdatedRewrites.delete(b.tool_use_id)}if(T.size===0)continue;let A=l.get(b.tool_use_id);if(!A)A=new Set,l.set(b.tool_use_id,A);for(let C of T)A.add(C);c+=this.estimateOutdatedReclaimBytes(b.content,T)}}for(let g of this.committedOutdatedRewrites.keys())if(!u.has(g))this.committedOutdatedRewrites.delete(g);if(l.size===0||c<this.minOutdatedRewriteBytes)return;for(let[g,b]of l){let I=this.committedOutdatedRewrites.get(g);if(!I)I=new Set,this.committedOutdatedRewrites.set(g,I);for(let k of b)I.add(k)}}estimateOutdatedReclaimBytes(i,l){let u=this.extractReadLocatorsFromToolResultContent(i),c=u.length>0&&u.every((T)=>l.has(this.toReadLocatorKey(T))),g=(T)=>{let E;try{E=JSON.parse(T)}catch{return c||u.length===0?qe(this.truncateMiddle(T)):0}let A=Array.isArray(E)?E:[E],C=0;for(let N of A){let O=this.extractLocatorFromResultEntry(N);if(O&&l.has(this.toReadLocatorKey(O)))C+=this.providerBoundEntryBytes(N)}return C};if(typeof i==="string")return g(i);let b=new Set(l),I=0;for(let T of i)if(T.type==="text")I+=this.countOutdatedImageEntries(T.text,b);let k=0;for(let T of i)if(T.type==="text")k+=g(T.text);else if(T.type==="image"){if(I>0)I-=1,k+=qe(T.data)}else if(Ys(T)){let E=this.extractLocatorFromResultEntry(T);if(E&&l.has(this.toReadLocatorKey(E)))k+=this.providerBoundEntryBytes(T)}else if(T.type==="file"){if(l.has(this.toReadLocatorKey({path:T.path,startLine:null,endLine:null})))k+=qe(this.truncateMiddle(T.content))}return k}providerBoundEntryBytes(i){let l=this.truncateNestedStrings(i);return qe(JSON.stringify(l))}addMissingToolResults(i){let l=this.collectToolResultIds(i),u=[],c=new Map,g=!1,b=()=>{if(c.size===0)return;I(this.createMissingToolResultMessage(c)),c.clear(),g=!0},I=(k)=>{let T=u.at(-1);if(this.shouldMergeUserAfterToolResults(T,k)){u[u.length-1]={...T,content:[...T.content,...this.contentBlocksForUserMerge(k.content)]},g=!0;return}u.push(k)};for(let k of i){if(this.isToolResultOnlyMessage(k)){if(I(this.appendMissingToolResults(k,c)),c.size>0)c.clear(),g=!0;continue}if(Array.isArray(k.content)){let T=k.content.filter((A)=>A.type==="tool_result"),E=k.content.filter((A)=>A.type!=="tool_result");if(T.length>0){let A=this.appendMissingToolResults({...k,role:"user",content:T},c);if(I(A),c.size>0)c.clear();g=!0}if(E.length>0||T.length===0){if(T.length===0)b();let A=T.length>0?{...k,content:E}:k;if(I(A),A.role==="assistant")this.trackMissingToolCalls(A,l,c)}continue}b(),I(k)}return b(),g?u:i}appendMissingToolResults(i,l){if(l.size===0||!Array.isArray(i.content))return i;return{...i,role:"user",content:[...i.content,...this.createMissingToolResultBlocks(l)]}}shouldMergeUserAfterToolResults(i,l){return i?.role==="user"&&l.role==="user"&&this.isToolResultOnlyMessage(i)&&this.contentBlocksForUserMerge(l.content).length>0}contentBlocksForUserMerge(i){return typeof i==="string"?i.length>0?[{type:"text",text:i}]:[]:i}collectToolResultIds(i){let l=new Set;for(let u of i){if(!Array.isArray(u.content))continue;for(let c of u.content)if(c.type==="tool_result")l.add(c.tool_use_id)}return l}isToolResultOnlyMessage(i){return i.role==="user"&&Array.isArray(i.content)&&i.content.length>0&&i.content.every((l)=>l.type==="tool_result")}trackMissingToolCalls(i,l,u){if(!Array.isArray(i.content))return;for(let c of i.content){if(c.type!=="tool_use"||l.has(c.id))continue;u.set(c.id,c.name)}}createMissingToolResultMessage(i){return{role:"user",content:this.createMissingToolResultBlocks(i)}}createMissingToolResultBlocks(i){return Array.from(i,([l,u])=>({type:"tool_result",tool_use_id:l,name:u,content:[{type:"text",text:this.formatMissingToolResultText(u)}],is_error:!0}))}formatMissingToolResultText(i){return i?`${wv} Tool: ${i}.`:wv}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators(i){let l=i,u=this.readResultLocatorCache.get(l);if(u===void 0)u=this.extractReadLocatorsFromToolResultContent(i.content),this.readResultLocatorCache.set(l,u);if(u.length>0)return u;return this.readLocatorsByToolUseIdCache.get(i.tool_use_id)??[]}extractLocatorsFromReadToolInput(i){if(!i||typeof i!=="object")return[];let l=i,u=[],c=this.extractLocatorFromReadRequest(l);if(c)u.push(c);if(Array.isArray(l.files))for(let g of l.files){let b=this.extractLocatorFromReadRequest(g);if(b)u.push(b)}if(Array.isArray(l.file_paths)){for(let g of l.file_paths)if(typeof g==="string"&&g.length>0)u.push({path:g,startLine:null,endLine:null})}return this.dedupeReadLocators(u)}extractReadLocatorsFromToolResultContent(i){if(typeof i==="string")return this.tryParseReadLocators(i);let l=[];for(let u of i){if(u.type==="text"){l.push(...this.tryParseReadLocators(u.text));continue}if(Ys(u)){let c=this.extractLocatorFromResultEntry(u);if(c)l.push(c)}}return this.dedupeReadLocators(l)}tryParseReadLocators(i){try{return this.extractLocatorsFromParsedReadResult(JSON.parse(i))}catch{return[]}}extractLocatorsFromParsedReadResult(i){if(Array.isArray(i)){let u=[];for(let c of i){let g=this.extractLocatorFromResultEntry(c);if(g)u.push(g)}return this.dedupeReadLocators(u)}let l=this.extractLocatorFromResultEntry(i);return l?[l]:[]}extractLocatorFromReadRequest(i){if(!i||typeof i!=="object")return;let l=i,u=this.extractPath(l);if(!u)return;return{path:u,startLine:this.extractLineNumber(l.start_line),endLine:this.extractLineNumber(l.end_line)}}extractLocatorFromResultEntry(i){if(!i||typeof i!=="object")return;let l=i,u=this.extractPath(l);if(u)return{path:u,startLine:this.extractLineNumber(l.start_line),endLine:this.extractLineNumber(l.end_line)};if(typeof l.query==="string"&&l.query.length>0)return this.parseReadQuery(l.query);return}extractPath(i){let l=[i.path,i.file_path,i.filePath];for(let u of l)if(typeof u==="string"&&u.length>0)return u;return}extractLineNumber(i){return typeof i==="number"&&Number.isInteger(i)?i:null}parseReadQuery(i){let l=/^(.*):(\d+)-(EOF|\d+)$/.exec(i);if(!l)return{path:i,startLine:null,endLine:null};return{path:l[1],startLine:Number(l[2]),endLine:l[3]==="EOF"?null:Number(l[3])}}dedupeReadLocators(i){let l=new Map;for(let u of i)l.set(this.toReadLocatorKey(u),u);return Array.from(l.values())}toReadLocatorKey(i){if(this.isFullFileRead(i))return i.path;return`${i.path}:${i.startLine??1}-${i.endLine??"EOF"}`}isFullFileRead(i){return i.startLine==null&&i.endLine==null}isOutdatedReadLocator(i,l){let u=this.latestFullContentOwnerByPathCache.get(i.path);if(u&&u!==l)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey(i))!==l}replaceOutdatedReadContent(i,l){let u=new Set(l.map((b)=>this.toReadLocatorKey(b))),c=new Set(l.map((b)=>b.path));if(typeof i==="string")return this.replaceOutdatedInString(i,u)??wi;let g=0;for(let b of i)if(b.type==="text")g+=this.countOutdatedImageEntries(b.text,u);return i.map((b)=>{if(b.type==="file"){if(!c.has(b.path))return b;return{...b,content:wi}}if(b.type==="image"){if(g===0)return b;return g-=1,{type:"text",text:wi}}if(Ys(b))return this.replaceOutdatedReadEntry(b,u);if(b.type!=="text")return b;let I=this.replaceOutdatedInString(b.text,u);if(I===null)return{...b,text:wi};return I===b.text?b:{...b,text:I}})}countOutdatedImageEntries(i,l){let u;try{u=JSON.parse(i)}catch{return 0}let c=Array.isArray(u)?u:[u],g=0;for(let b of c){if(!b||typeof b!=="object")continue;let I=b,k=this.extractLocatorFromResultEntry(I);if(!k)continue;if(!l.has(this.toReadLocatorKey(k)))continue;if(I.result==="Successfully read image"||I.content==="Successfully read image")g+=1}return g}replaceOutdatedInString(i,l){let u;try{u=JSON.parse(i)}catch{return null}let c=Array.isArray(u)?u.map((g)=>this.replaceOutdatedReadEntry(g,l)):this.replaceOutdatedReadEntry(u,l);return JSON.stringify(c)}replaceOutdatedReadEntry(i,l){if(!i||typeof i!=="object")return i;let u=this.extractLocatorFromResultEntry(i);if(!u||!l.has(this.toReadLocatorKey(u)))return i;let c={...i};if(typeof c.result==="string")c.result=wi;else if(typeof c.content==="string")c.content=wi;else c.result=wi;return c}isReadTool(i){return!!i&&zD.has(i)}resolveToolName(i){let l=this.toolNameByIdCache.get(i.tool_use_id);if(l!==void 0)return l;return typeof i.name==="string"&&i.name.length>0?i.name.toLowerCase():void 0}truncateToolResultContent(i){if(typeof i==="string")return this.truncateMiddle(i);return i.map((l)=>{if(this.recoveryNotices.has(l))return l;if(l.type==="file"){let u=this.truncateMiddle(l.content);return u===l.content?l:{...l,content:u}}if(l.type==="text"){let u=this.truncateMiddle(l.text);return u===l.text?l:{...l,text:u}}if(Ys(l))return this.truncateNestedStrings(l);return l})}truncateNestedStrings(i){if(typeof i==="string")return this.truncateMiddle(i);if(Array.isArray(i)){let l=!1,u=i.map((c)=>{let g=this.truncateNestedStrings(c);if(g!==c)l=!0;return g});return l?u:i}if(i!==null&&typeof i==="object"){if(_f(i))return i;let l=!1,u={};for(let[c,g]of Object.entries(i)){let b=this.truncateNestedStrings(g);if(b!==g)l=!0;u[c]=b}return l?u:i}return i}truncateMiddle(i){return Tl(i,this.maxToolResultChars,bv)}truncateAssistantText(i){if(this.hasRepeatedToolCallMarkup(i))return Tl(i,this.maxAssistantToolMarkupChars,KD);return Tl(i,this.maxAssistantTextChars,WD)}hasRepeatedToolCallMarkup(i){if(i.length<=this.maxAssistantToolMarkupChars)return!1;let l=0;for(let u of i.matchAll(XD))if(l+=1,l>=HD)return!0;return!1}truncateToTotalTextBudget(i){let l=this.countMessageTextBytes(i);if(l<=this.maxTotalTextBytes)return i;let u=i.map((b)=>{if(!Array.isArray(b.content))return{...b};return{...b,content:b.content.map((I)=>{let k=QD(I);if(I.type==="tool_result"&&k.type==="tool_result"&&Array.isArray(I.content)&&Array.isArray(k.content))I.content.forEach((T,E)=>{if(this.recoveryNotices.has(T))this.recoveryNotices.add(k.content[E])});return k})}}),c=this.collectTruncationCandidates(u),g=Math.floor(this.maxTotalTextBytes/(2*Math.max(1,c.length)));for(let b of c){if(l<=this.maxTotalTextBytes)break;let I=b.byteLength,k=Math.min(b.minBytes,g);if(I<=k)continue;let T=l-this.maxTotalTextBytes,E=Math.max(k,I-T),A=YD(b.get(),E,b.makeMarker);b.set(A),l-=I-qe(A)}return u}countMessageTextBytes(i){let l=0;for(let u of i){if(typeof u.content==="string"){l+=qe(u.content);continue}for(let c of u.content)if(c.type==="text")l+=qe(c.text);else if(c.type==="thinking")l+=qe(c.thinking);else if(c.type==="file")l+=qe(c.content);else if(c.type==="tool_use")l+=_u(c.input);else if(c.type==="tool_result"){if(typeof c.content==="string")l+=qe(c.content);else for(let g of c.content)if(g.type==="text")l+=qe(g.text);else if(g.type==="file")l+=qe(g.content);else if(Ys(g))l+=_u(g)}}return l}collectTruncationCandidates(i){let l=[],u=[];for(let c of i){if(c.role==="assistant"&&typeof c.content==="string"){l.push({byteLength:qe(c.content),minBytes:vv,makeMarker:Iv,get:()=>c.content,set:(g)=>{c.content=g}});continue}if(!Array.isArray(c.content))continue;for(let g of c.content){if(g.type==="tool_use"){Eu(g.input,u);continue}if(c.role==="assistant"&&g.type==="text"){l.push({byteLength:qe(g.text),minBytes:vv,makeMarker:Iv,get:()=>g.text,set:(b)=>{g.text=b}});continue}if(g.type!=="tool_result")continue;if(typeof g.content==="string"){l.push({byteLength:qe(g.content),minBytes:Rl,makeMarker:Pl,get:()=>g.content,set:(b)=>{g.content=b}});continue}for(let b of g.content){if(this.recoveryNotices.has(b))continue;if(b.type==="text")l.push({byteLength:qe(b.text),minBytes:Rl,makeMarker:Pl,get:()=>b.text,set:(I)=>{b.text=I}});else if(b.type==="file")l.push({byteLength:qe(b.content),minBytes:Rl,makeMarker:Pl,get:()=>b.content,set:(I)=>{b.content=I}});else if(Ys(b))Eu(b,l)}}}return l.sort((c,g)=>g.byteLength-c.byteLength),u.sort((c,g)=>g.byteLength-c.byteLength),[...l,...u]}applyMediaBudget(i){let l=this.resolveMediaBudget();if(l.maxImageEncodedBytes===Number.POSITIVE_INFINITY&&l.maxImageDecodedBytes===Number.POSITIVE_INFINITY&&l.maxTotalMediaBytes===Number.POSITIVE_INFINITY)return i;let u=To(),c=!1,g=i.map((b)=>{if(!Array.isArray(b.content))return b;let I=!1,k=b.content.map((T)=>{let E=this.applyMediaBudgetToBlock(T,l,u);if(E!==T)I=!0;return E});if(!I)return b;return c=!0,{...b,content:k}});return c?g:i}resolveMediaBudget(){return ko(this.mediaBudget)}applyMediaBudgetToBlock(i,l,u){if(ip(i))return this.limitImageContent(i,l,u);if(i.type!=="tool_result"||typeof i.content==="string")return i;let c=!1,g=i.content.map((b)=>{let I=this.applyMediaBudgetToToolResultEntry(b,l,u);if(I!==b)c=!0;return I});return c?{...i,content:g}:i}applyMediaBudgetToToolResultEntry(i,l,u){if(ip(i))return this.limitImageContent(i,l,u);if(Ys(i))return this.limitNestedMedia(i,l,u);return i}limitNestedMedia(i,l,u){if(ip(i)){let c=this.limitImageContent(i,l,u);return c.type==="text"?c.text:c}if(Array.isArray(i)){let c=!1,g=i.map((b)=>{let I=this.limitNestedMedia(b,l,u);if(I!==b)c=!0;return I});return c?g:i}if(i!==null&&typeof i==="object"){let c=!1,g={};for(let[b,I]of Object.entries(i)){let k=this.limitNestedMedia(I,l,u);if(k!==I)c=!0;g[b]=k}return c?g:i}return i}limitImageContent(i,l,u){if(!f0(i))return{type:"text",text:hn};let c=_o(i.mediaType,i.data,{maxImageEncodedBytes:l.maxImageEncodedBytes,maxImageDecodedBytes:l.maxImageDecodedBytes,maxTotalMediaBytes:l.maxTotalMediaBytes},u);if(!c.ok)return{type:"text",text:hn};return{...i,data:c.base64,mediaType:c.mediaType}}}var kv=String.raw`[\|\uFF5C]`,XD=new RegExp(String.raw`<\s*(?:${kv}\s*)?DSML\s*(?:${kv}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function qe(i){return Buffer.byteLength(i,"utf8")}function Sv(i){if(i===void 0)return;let l=Number.parseInt(i,10);return Number.isFinite(l)&&l>0?l:void 0}function JD(i){if(i===void 0)return;let l=i.trim().toLowerCase();if(l==="infinity"||l==="disable")return Number.POSITIVE_INFINITY;let u=Number.parseInt(i,10);return Number.isFinite(u)&&u>=0?u:void 0}function sl(i,l){return typeof i==="number"&&Number.isFinite(i)&&i>0?Math.floor(i):l}function VD(i,l){if(typeof i!=="number"||Number.isNaN(i)||i<0)return l;return Number.isFinite(i)?Math.floor(i):i}function Tl(i,l,u){if(i.length<=l)return i;let c=u(i.length-l),g=Math.max(0,Math.floor((l-c.length)/2)),b=Math.max(0,i.length-g*2),I=u(b),k=Math.max(0,Math.floor((l-I.length)/2)),T=i.slice(0,k),E=k>0?i.slice(-k):"";return`${T}${I}${E}`}function YD(i,l,u){if(qe(i)<=l)return i;let c=0,g=i.length,b="";while(c<=g){let I=c+g>>>1,k=Tl(i,I,u);if(qe(k)<=l)b=k,c=I+1;else g=I-1}return b}function QD(i){if(i.type==="tool_use")return{...i,input:Au(i.input)};if(i.type!=="tool_result"||typeof i.content==="string")return{...i};return{...i,content:i.content.map((l)=>Ys(l)?Au(l):{...l})}}function Ys(i){if(i===null||typeof i!=="object")return!1;let l=i.type;return l!=="text"&&l!=="image"&&l!=="file"}function ip(i){return i!==null&&typeof i==="object"&&i.type==="image"}function f0(i){return i!==null&&typeof i==="object"&&i.type==="image"&&typeof i.data==="string"&&typeof i.mediaType==="string"}function _f(i){return f0(i)}function _u(i){if(typeof i==="string")return qe(i);if(Array.isArray(i)){let l=0;for(let u of i)l+=_u(u);return l}if(i!==null&&typeof i==="object"){if(_f(i))return 0;let l=0;for(let u of Object.values(i))l+=_u(u);return l}return 0}function Eu(i,l){if(Array.isArray(i)){i.forEach((u,c)=>{if(typeof u==="string")l.push({byteLength:qe(u),minBytes:Rl,makeMarker:Pl,get:()=>i[c],set:(g)=>{i[c]=g}});else Eu(u,l)});return}if(i!==null&&typeof i==="object"){if(_f(i))return;let u=i;for(let c of Object.keys(u)){let g=u[c];if(typeof g==="string")l.push({byteLength:qe(g),minBytes:Rl,makeMarker:Pl,get:()=>u[c],set:(b)=>{u[c]=b}});else Eu(g,l)}}}function Au(i){if(Array.isArray(i))return i.map(Au);if(i!==null&&typeof i==="object"){let l={};for(let[u,c]of Object.entries(i))l[u]=Au(c);return l}return i}function np(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class g0{messages=[];conversationId=np();sessionStarted=!1;constructor(i){if((i?.length??0)>0)this.restore(i??[])}getConversationId(){return this.conversationId}getMessages(){return[...this.messages]}appendMessage(i){this.messages.push(i)}appendMessages(i){if(i.length===0)return;this.messages.push(...i)}replaceMessages(i){let l=new Map(i.map((g,b)=>[g.id,b])),u=new Map,c=-1;for(let g of this.messages){let b=g.id?l.get(g.id):void 0;if(b!==void 0)c=b;else if(g.metadata?.displayOnly===!0){let I=u.get(c)??[];I.push(g),u.set(c,I)}}this.messages=[...u.get(-1)??[]];for(let[g,b]of i.entries())this.messages.push(b,...u.get(g)??[])}resetForRun(){this.messages=[],this.conversationId=np(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=np(),this.sessionStarted=!1}restore(i){this.messages=[...i],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function ZD(i){let{agentConfig:l}=i,u=eU(l),c=tU(l),g=i.hooks,b=rU(l.maxParallelToolCalls);return{distinctId:l.distinctId,clientName:l.extensionContext?.client?.name,clientVersion:l.extensionContext?.client?.version,clineCoreVersion:Hh,sessionId:i.sessionId??l.sessionId,agentId:i.agentId,conversationId:i.conversationId,parentAgentId:i.parentAgentId,agentRole:i.agentRole,systemPrompt:i.systemPrompt??l.systemPrompt,messageModelInfo:c,model:i.model,modelOptions:u,modelTools:l.modelTools,tools:i.tools,hooks:g,prepareTurn:i.prepareTurn,consumePendingUserMessage:l.consumePendingUserMessage,plugins:i.plugins,logger:i.logger??l.logger,telemetry:i.telemetry??l.telemetry,runEndTelemetryProperties:i.runEndTelemetryProperties,initialMessages:i.initialMessages,completionPolicy:i.completionPolicy===null?void 0:i.completionPolicy??l.completionPolicy,maxIterations:l.maxIterations,toolExecution:b,toolPolicies:l.toolPolicies,toolContextMetadata:i.toolContextMetadata,requestToolApproval:l.requestToolApproval}}function eU(i){let l={};if(i.thinking!==void 0)l.thinking=i.thinking;if(i.reasoningEffort!==void 0)l.reasoningEffort=i.reasoningEffort;if(i.thinkingBudgetTokens!==void 0)l.thinkingBudgetTokens=i.thinkingBudgetTokens;if(i.maxTokensPerTurn!==void 0)l.maxTokensPerTurn=i.maxTokensPerTurn;if(i.temperature!==void 0)l.temperature=i.temperature;if(i.apiTimeoutMs!==void 0)l.apiTimeoutMs=i.apiTimeoutMs;return Object.keys(l).length>0?l:void 0}function tU(i){let l=i.providerConfig?.family;return{id:i.modelId,provider:i.providerId,family:l}}function rU(i){if(i===void 0)return;return i>=2?"parallel":"sequential"}function Ef(i){let l={...i},u=Object.hasOwn(i,"thinking"),c=Object.hasOwn(i,"thinkingBudgetTokens");if(i.thinking===!1||i.thinking===null)return l.reasoningEffort=void 0,l.thinkingBudgetTokens=void 0,l;if(!u&&c&&typeof i.thinkingBudgetTokens==="number"&&Number.isFinite(i.thinkingBudgetTokens)&&i.thinkingBudgetTokens>0)l.thinking=!0;return l}function sU(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function iU(i){i.lastToolName="",i.lastToolSignature="",i.consecutiveIdenticalCount=0}function Om(i){if(i==null||typeof i!=="object")return i;if(Array.isArray(i))return i.map(Om);let l={};for(let u of Object.keys(i).sort())l[u]=Om(i[u]);return l}function nU(i){if(i==null)return"null";if(typeof i==="string")return i;if(typeof i!=="object")return String(i);try{return JSON.stringify(Om(i))}catch{return String(i)}}function oU(i,l,u,c){if(l===i.lastToolName&&u===i.lastToolSignature)i.consecutiveIdenticalCount++;else i.consecutiveIdenticalCount=1;return i.lastToolName=l,i.lastToolSignature=u,{softWarning:i.consecutiveIdenticalCount===c.softThreshold,hardEscalation:i.consecutiveIdenticalCount>=c.hardThreshold}}var Tv={softThreshold:3,hardThreshold:5};class y0{config;state=sU();constructor(i){this.config={softThreshold:i?.softThreshold??Tv.softThreshold,hardThreshold:i?.hardThreshold??Tv.hardThreshold}}inspect(i){let l=nU(i.input),u=oU(this.state,i.name,l,this.config);if(u.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${i.name}\`; stopping to avoid a loop.`};if(u.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${i.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){iU(this.state)}}class v0{consecutiveMistakes=0;options;constructor(i){this.options=i}async record(i){let l=this.options.maxConsecutiveMistakes,u=i.forceAtLimit&&l?l:this.consecutiveMistakes+1;this.consecutiveMistakes=u;let c=i.details?.trim()||`consecutive mistake (${i.reason})`;if(this.options.emit({type:"error",error:Error(c),recoverable:!0,iteration:i.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:i.iteration,reason:i.reason,details:i.details,consecutiveMistakes:u,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!l||u<l)return{action:"continue"};let g={iteration:i.iteration,consecutiveMistakes:u,maxConsecutiveMistakes:l,reason:i.reason,details:i.details};this.options.onLimitTelemetry?.(g);let b=await lU(g,this.options.onLimitReached);if(b.action==="continue"){let I=b.guidance?.trim();if(I)this.options.appendRecoveryNotice(I,i.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:I}}return{action:"stop",reason:b.reason?.trim()||void 0,message:aU({iteration:i.iteration,consecutiveMistakes:u,maxConsecutiveMistakes:l,reason:i.reason,details:i.details,stopReason:b.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function aU(i){let l=[`Stopped after ${i.consecutiveMistakes}/${i.maxConsecutiveMistakes} consecutive mistakes (${i.reason}) at iteration ${i.iteration}.`],u=i.details?.trim();if(u)l.push(`Error: ${u}`);let c=i.stopReason?.trim();if(c)l.push(`Decision: ${c}`);return l.push("Session state was preserved. Send a new prompt to resume from the latest state."),l.join(" ")}async function lU(i,l){if(!l)return{action:"stop",reason:`maximum consecutive mistakes reached (${i.maxConsecutiveMistakes})`};try{return await l(i)}catch(u){return{action:"stop",reason:u instanceof Error?u.message:`maximum consecutive mistakes reached (${i.maxConsecutiveMistakes})`}}}function dU(i){switch(i){case"auto_compaction":case"manual_compaction":case"compaction_budget_emergency":return i;default:return}}function uU(i){let l=i.content.filter((u)=>u.type==="text");if(l.length===0)return;return l.map((u)=>u.text).join("")}function cU(i){let l=i.content.filter((u)=>u.type==="reasoning");if(l.length===0)return;return{reasoning:l.map((u)=>u.text).join(""),redacted:l.some((u)=>u.redacted===!0)}}function pU(i){return i.content.find((l)=>l.type==="tool-result")}function mU(i){switch(i){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function hU(i){if(!i||i.isError!==!0)return;if(typeof i.output==="string")return i.output;if(i.output instanceof Error)return i.output.message;try{return JSON.stringify(i.output)}catch{return String(i.output)}}class w0{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0,reasoningTokenCount:0};toolStartedAt=new Map;translate(i){switch(i.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:i.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:i.iteration,hadToolCalls:i.toolCallCount>0,toolCallCount:i.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:i.text,accumulated:i.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:i.text,redacted:i.redacted===!0}];case"assistant-media":return[{type:"content_end",contentType:"media",media:i.media}];case"assistant-message":return this.translateAssistantMessage(i.message);case"tool-started":return this.translateToolStarted(i);case"tool-call-delta":return[];case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:i.toolCall.toolName,toolCallId:i.toolCall.toolCallId,update:i.update}];case"tool-finished":return this.translateToolFinished(i);case"usage-updated":return this.translateUsage(i.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:i.message,reason:dU(i.metadata?.reason),metadata:i.metadata}];case"run-finished":return this.translateRunFinished(i.result);case"run-failed":return[{type:"error",error:i.error,errorClass:i.errorClass,recoverable:!1,iteration:i.snapshot.iteration}];default:return i}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0,reasoningTokenCount:0},this.toolStartedAt.clear()}translateAssistantMessage(i){let l=[],u=uU(i);if(u!==void 0)l.push({type:"content_end",contentType:"text",text:u});let c=cU(i);if(c!==void 0)l.push({type:"content_end",contentType:"reasoning",reasoning:c.reasoning});return l}translateToolStarted(i){return this.toolStartedAt.set(i.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:i.toolCall.toolName,toolCallId:i.toolCall.toolCallId,input:i.toolCall.input,execution:i.toolCall.execution}]}translateToolFinished(i){let l=this.toolStartedAt.get(i.toolCall.toolCallId),u=l===void 0?void 0:Date.now()-l;this.toolStartedAt.delete(i.toolCall.toolCallId);let c=pU(i.message),g=c?.output,b=hU(c);return[{type:"content_end",contentType:"tool",toolName:i.toolCall.toolName,toolCallId:i.toolCall.toolCallId,output:g,error:b,durationMs:u,execution:i.toolCall.execution}]}translateUsage(i){let l=i.inputTokens-this.lastUsage.inputTokens,u=i.outputTokens-this.lastUsage.outputTokens,c=i.cacheReadTokens-this.lastUsage.cacheReadTokens,g=i.cacheWriteTokens-this.lastUsage.cacheWriteTokens,b=this.lastUsage.totalCost??0,I=(i.totalCost??0)-b,k=this.lastUsage.reasoningTokenCount??0,T=(i.reasoningTokenCount??0)-k;return this.lastUsage={inputTokens:i.inputTokens,outputTokens:i.outputTokens,cacheReadTokens:i.cacheReadTokens,cacheWriteTokens:i.cacheWriteTokens,totalCost:i.totalCost,reasoningTokenCount:i.reasoningTokenCount},[{type:"usage",inputTokens:Math.max(0,l),outputTokens:Math.max(0,u),cacheReadTokens:c===0?void 0:Math.max(0,c),cacheWriteTokens:g===0?void 0:Math.max(0,g),cost:I===0?void 0:I,reasoningTokenCount:T===0?void 0:Math.max(0,T),totalInputTokens:i.inputTokens,totalOutputTokens:i.outputTokens,totalCacheReadTokens:i.cacheReadTokens===0?void 0:i.cacheReadTokens,totalCacheWriteTokens:i.cacheWriteTokens===0?void 0:i.cacheWriteTokens,totalCost:i.totalCost}]}translateRunFinished(i){let l={inputTokens:i.usage.inputTokens,outputTokens:i.usage.outputTokens,cacheReadTokens:i.usage.cacheReadTokens===0?void 0:i.usage.cacheReadTokens,cacheWriteTokens:i.usage.cacheWriteTokens===0?void 0:i.usage.cacheWriteTokens,totalCost:i.usage.totalCost};return[{type:"done",reason:mU(i.status),text:i.outputText,iterations:i.iterations,usage:l}]}}var fU="session_run_in_progress";class b0 extends Error{agentId;code=fU;constructor(i){super(`SessionRuntime.shutdown called while a run is in progress${i?` (agentId=${i})`:""}`);this.agentId=i,this.name="SessionRunInProgressError"}}function gU(i){if(typeof i==="string")return i;if(i instanceof Error)return i.message;try{return JSON.stringify(i)}catch{return String(i)}}async function yU(i){let l=(typeof i.content==="function"?await i.content():i.content).trim();return l.length>0?l:void 0}function vU(i,l){let u=i.trim(),c=l.map((g)=>g.trim()).filter(Boolean).join(`
576
+
577
+ `);if(u&&c)return`${u}
578
+
579
+ ${c}`;return u||c}function wU(i,l){let u=l?.["*"]??{},c=l?.[i]??{};return{...u,...c}.enabled!==!1}function bU(i,l){return i.filter((u)=>wU(u.name,l))}function _v(i,l){return ec(bU(i,l))}function IU(i){let l=i.filter((u)=>u!==void 0);if(l.length===0)return{};return{beforeRun:async(u)=>{let c;for(let g of l){let b=await g.beforeRun?.(u);if(!b)continue;if(b.stop)return b;let I=[c?.appendContext,b.appendContext].filter((k)=>Boolean(k?.trim())).join(`
580
+
581
+ `);c={...c,...b,appendContext:I||void 0}}return c},afterRun:async(u)=>{for(let c of l)await c.afterRun?.(u)},beforeModel:async(u)=>{let c=u.request,g;for(let b of l){let I=await b.beforeModel?.({...u,request:c});if(!I)continue;if(I.stop)return I;g={...g,...I,options:Mn(g?.options,I.options)},c={...c,...I.messages?{messages:I.messages}:{},...I.tools?{tools:I.tools}:{},...I.options?{options:Mn(c.options,I.options)}:{}}}return g},afterModel:async(u)=>{for(let c of l){let g=await c.afterModel?.(u);if(g?.stop)return g}return},beforeTool:async(u)=>{let c=u.input,g;for(let b of l){let I=await b.beforeTool?.({...u,input:c});if(!I)continue;if(I.stop||I.skip)return I;if(g={...g,...I},Object.hasOwn(I,"input"))c=I.input}return g},afterTool:async(u)=>{let c=u.result,g;for(let b of l){let I=await b.afterTool?.({...u,result:c});if(!I)continue;if(I.stop)return I;if(g={...g,...I},I.result)c=I.result}return g},onEvent:async(u)=>{for(let c of l)await c.onEvent?.(u)}}}class fc{config;agentId;parentAgentId;logger;telemetry;conversation;toolResultCache;cacheableToolNames=new Set;maxCachedResultChars;pendingTerminalError;mistakeTracker;loopTracker;loopDetectionDisabled;messageBuilder;contributionRegistry;extensionsInitialized=!1;listeners=new Set;createAgentRuntimeImpl;activeRunId=null;running=!1;abortRequested=!1;abortReason;activeRuntime=null;activeRunPromise=null;eventAdapter=new w0;shutdownCalled=!1;currentRunToolCalls=[];currentRunUsage={inputTokens:0,outputTokens:0};toolStartedAt=new Map;toolInputs=new Map;currentTurnSuccessfulTools=0;currentTurnFailedTools=0;currentTurnFailureDetails=[];activeTrackerWork=Promise.resolve();trackerAbortInFlight=!1;trackerStopReason;handleExternalAbort=()=>{this.abort(this.config.abortSignal?.reason)};constructor(i,l={}){this.config=i,this.agentId=`agent_${kD()}`,this.parentAgentId=i.parentAgentId,this.logger=l.logger??i.logger,this.telemetry=l.telemetry??i.telemetry,this.createAgentRuntimeImpl=l.createAgentRuntimeImpl??On,this.conversation=new g0(i.initialMessages),this.toolResultCache=new kf(i.sessionId??this.agentId);let u=GD();this.maxCachedResultChars=u.maxToolResultChars??m0,this.messageBuilder=new h0({...u,getToolResultRecovery:(I)=>this.cacheableToolNames.has(I.name??"")?{uri:this.toolResultCache.uriFor(I.tool_use_id)}:void 0}),this.contributionRegistry=Ut({extensions:i.extensions?[...i.extensions]:[],setupContext:{session:i.extensionContext?.session,client:i.extensionContext?.client,user:i.extensionContext?.user,workspaceInfo:i.extensionContext?.workspace,automation:i.extensionContext?.automation,logger:i.extensionContext?.logger??this.logger,telemetry:i.extensionContext?.telemetry??this.telemetry}}),this.contributionRegistry.resolve(),this.contributionRegistry.validate();let c=i.execution?.maxConsecutiveMistakes??6;this.mistakeTracker=new v0({maxConsecutiveMistakes:c,onLimitReached:i.onConsecutiveMistakeLimitReached,onLimitTelemetry:(I)=>{AA(this.telemetry,{ulid:this.config.sessionId??this.conversation.getConversationId(),model:this.config.modelId,provider:this.config.providerId,reason:I.reason,consecutiveMistakes:I.consecutiveMistakes,maxConsecutiveMistakes:I.maxConsecutiveMistakes,agentId:this.agentId,conversationId:this.conversation.getConversationId(),parentAgentId:this.parentAgentId,isSubagent:Boolean(this.parentAgentId)})},emit:(I)=>this.emitLegacyEvent(I),log:(I,k,T)=>kU(this.logger,I,k,T),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(I,k)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:I}]})}});let g=i.execution?.loopDetection;this.loopDetectionDisabled=g===!1;let b=g===!1||g===void 0?void 0:g;this.loopTracker=new y0(b)}getAgentId(){return this.agentId}getConversationId(){return this.conversation.getConversationId()}getMessages(){return this.conversation.getMessages()}canStartRun(){return!this.running&&!this.activeRunPromise&&!this.shutdownCalled}getExtensionRegistry(){return this.contributionRegistry.getRegistrySnapshot()}addTools(i){if(i.length===0)return;let l=new Set(this.config.tools.map((c)=>c.name)),u=[...this.config.tools];for(let c of i)if(!l.has(c.name))u.push(c),l.add(c.name);this.config={...this.config,tools:u}}updateConnection(i){let l=Ef(i),u={...this.config};if(l.providerId!==void 0)u.providerId=l.providerId;if(l.modelId!==void 0)u.modelId=l.modelId;if(l.apiKey!==void 0)u.apiKey=l.apiKey;if(l.baseUrl!==void 0)u.baseUrl=l.baseUrl;if(l.headers!==void 0)u.headers=l.headers;if(l.providerConfig!==void 0)u.providerConfig=l.providerConfig;if(Object.hasOwn(l,"reasoningEffort"))u.reasoningEffort=l.reasoningEffort??void 0;if(Object.hasOwn(l,"thinkingBudgetTokens"))u.thinkingBudgetTokens=l.thinkingBudgetTokens??void 0;if(Object.hasOwn(l,"thinking")){if(u.thinking=l.thinking??void 0,l.thinking===!1||l.thinking===null)u.reasoningEffort=void 0,u.thinkingBudgetTokens=void 0}this.config=u}clearHistory(){this.conversation.clearHistory(),this.resetConversationBoundaryTrackers()}restore(i){this.conversation.restore(i),this.resetConversationBoundaryTrackers()}resetConversationBoundaryTrackers(){this.toolResultCache.clear(),this.messageBuilder.resetConversationState(),this.mistakeTracker.reset(),this.loopTracker.reset()}subscribeEvents(i){return this.listeners.add(i),()=>{this.listeners.delete(i)}}notifyPendingUserMessage(){this.activeRuntime?.notifyPendingUserMessage()}abort(i){let l=typeof i==="string"?i:i instanceof Error?i.message:i===void 0?void 0:String(i);if(this.abortRequested=!0,this.abortReason=l,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort(l)}async shutdown(i,l){if(this.running){if(!this.abortRequested||!this.activeRunPromise)throw new b0(this.agentId);await this.activeRunPromise}if(this.shutdownCalled)return;this.shutdownCalled=!0,this.toolResultCache.clear()}run(i,l,u){let c=this.getRunAdmissionError();if(c)return Promise.reject(c);return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:i,userImages:l,userFiles:u,isContinue:!1})}continue(i,l,u){let c=this.getRunAdmissionError();if(c)return Promise.reject(c);return this.executeRun({userMessage:i,userImages:l,userFiles:u,isContinue:!0})}async composeSystemPrompt(i){let l=[];for(let u of this.contributionRegistry.getRegisteredRules()){if(u.whenToolAvailable&&!i.has(u.whenToolAvailable))continue;let c=await yU(u);if(c)l.push(c)}return vU(this.config.systemPrompt,l)}getRunAdmissionError(){if(this.shutdownCalled)return Error(`SessionRuntime.run called after shutdown (agentId=${this.agentId})`);if(this.running||this.activeRunPromise)return Error(`SessionRuntime state is "running"; call canStartRun() first (agentId=${this.agentId})`);return}executeRun(i){let l;return l=this.executeRunWithAuthRetry(i).then((u)=>{if(u.finishReason==="error")return this.recordTerminalError(u.text,"result"),{...u,messages:this.conversation.getMessages()};return this.pendingTerminalError=void 0,u},(u)=>{throw this.recordTerminalError(u instanceof Error?u.message:String(u),"thrown"),u}).finally(()=>{if(this.activeRunPromise===l)this.activeRunPromise=null}),this.activeRunPromise=l,l}recordTerminalError(i,l){this.conversation.appendMessage({id:`error_${crypto.randomUUID()}`,role:"assistant",content:[{type:"text",text:i}],ts:Date.now(),metadata:{displayOnly:!0,displayRole:"error"},modelInfo:{id:this.config.modelId,provider:this.config.providerId}});let u=this.pendingTerminalError;this.pendingTerminalError=void 0,this.emitLegacyEvent(u?.error.message===i?u:{type:"error",error:Error(i),recoverable:!1,iteration:0});try{qA(this.telemetry,{sessionId:this.config.sessionId,provider:this.config.providerId,model:this.config.modelId,source:l})}catch{}}async executeRunWithAuthRetry(i){let l=await this.executeRunInternal(i);if(l.finishReason!=="error"||!this.config.onAuthError||!Si(l.text))return l;if(!await this.config.onAuthError().catch(()=>!1))return l;let u=await this.executeRunInternal({isContinue:!0});return wA(this.telemetry,this.config.providerId,{recovered:u.finishReason!=="error"}),u}async executeRunInternal(i){if(this.shutdownCalled)throw Error(`SessionRuntime.run called after shutdown (agentId=${this.agentId})`);if(this.running)throw Error(`SessionRuntime state is "running"; call canStartRun() first (agentId=${this.agentId})`);this.running=!0,this.abortRequested=!1,this.abortReason=void 0,this.activeRunId=`run_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,await this.initializeExtensions(),this.eventAdapter.reset(),this.currentRunToolCalls=[],this.currentRunUsage={inputTokens:0,outputTokens:0},this.toolStartedAt.clear(),this.toolInputs.clear(),this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[],this.activeTrackerWork=Promise.resolve(),this.trackerAbortInFlight=!1,this.trackerStopReason=void 0;let l=new Date,u=i.userMessage;if(u!==void 0){let z=await TU(u,i.userImages,i.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({id:crypto.randomUUID(),role:"user",content:z})}let c=QM(this.config,this.logger,this.telemetry),g=new Map;for(let z of this.contributionRegistry.getRegisteredTools())g.set(z.name,z);let b=_v([...g.values()],this.config.toolPolicies),I=new Map;for(let z of b)I.set(z.name,z);for(let z of this.config.tools)I.set(z.name,z);let k=this.conversation.getConversationId(),T=Ev(this.config),E=tr(T??{})||!ir(T??{}),A=_v(Array.from(I.values()),this.config.toolPolicies),C=E?[]:A,N=await this.composeSystemPrompt(new Set(C.map((z)=>z.name))),O=Hc(this.conversation.getMessages());this.cacheableToolNames=new Set(C.filter((z)=>z.resultPolicy==="cache-oversized").map((z)=>z.name.toLowerCase()));let L=this.telemetry&&new p0(this.telemetry,{sessionId:this.config.sessionId,isSubagent:Boolean(this.parentAgentId),providerId:this.config.providerId,modelId:this.config.modelId}),D=ZD({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:k,parentAgentId:this.parentAgentId,model:c,logger:this.logger,telemetry:this.telemetry,runEndTelemetryProperties:L?()=>L.endProperties():void 0,tools:C,toolContextMetadata:{modelSupportsImages:nr(T??{}),...this.config.toolContextMetadata,toolResultCache:this.toolResultCache},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(T,C),initialMessages:O,completionPolicy:E?null:void 0,systemPrompt:N}),U=this.createAgentRuntimeImpl(D);this.activeRuntime=U;let F=U.subscribe((z)=>{if(z.type==="run-started"&&this.abortRequested)U.abort(this.abortReason);L?.observe(z),this.handleRuntimeEvent(z)});if(this.config.abortSignal)if(this.config.abortSignal.aborted)this.handleExternalAbort();else this.config.abortSignal.addEventListener("abort",this.handleExternalAbort,{once:!0});let j,H;try{if(i.isContinue)j=await U.continue(void 0);else j=await U.run("")}catch(z){H=z instanceof Error?z:Error(String(z))}finally{F(),L?.dispose(),this.config.abortSignal?.removeEventListener("abort",this.handleExternalAbort);try{await this.activeTrackerWork}catch(z){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:z})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(j&&j.messages.length>0){let z=bd(j.messages);this.conversation.replaceMessages(z)}let Q=new Date;try{return this.buildLegacyResult({runResult:j,thrownError:H,startedAt:l,endedAt:Q})}finally{this.activeRunId=null}}extensionInitialization;async initializeExtensions(){return this.extensionInitialization??=this.ensureExtensionsInitialized().catch((i)=>{throw this.extensionInitialization=void 0,i}),this.extensionInitialization}async ensureExtensionsInitialized(){if(this.extensionsInitialized)return;try{await this.contributionRegistry.initialize({tolerateSetupErrors:this.config.hookErrorMode!=="throw"})}catch(i){if(this.config.hookErrorMode==="throw")throw i;this.emitLegacyEvent({type:"error",error:i instanceof Error?i:Error(String(i)),recoverable:!0,iteration:0})}this.extensionsInitialized=!0}createRuntimeHooks(){let i=IU([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map((u)=>u.hooks)]),l=async()=>(await this.activeTrackerWork.catch(()=>{return}),this.trackerAbortInFlight?{stop:!0,reason:this.trackerStopReason}:void 0);return{...i,beforeTool:async(u)=>{let c=await l();if(c)return c;return i.beforeTool?.(u)},afterTool:async(u)=>{let c=await l();if(c)return c;let g=await i.afterTool?.(u),b=g?.result??u.result;if(u.tool.resultPolicy==="cache-oversized"){let{text:I}=i0(Vk(b.output));if(typeof I==="string"&&I.length>this.maxCachedResultChars){let{text:k}=T1(b.output);if(typeof k==="string")this.toolResultCache.store(u.toolCall.toolCallId,k)}}return g},beforeModel:async(u)=>{let c=await l();if(c)return c;let g=await i.beforeModel?.(u);if(g?.stop)return g;let b=g?.messages??u.request.messages,I=await this.prepareMessagesForModelRequest(b);return{...g,messages:I}}}}createRuntimePrepareTurn(i,l){let u=this.config.prepareTurn;if(!u)return;return async(c)=>{let g=bd(c.messages),b=await this.prepareProviderMessagesForApi(g),I=await u({agentId:c.agentId,conversationId:c.conversationId??this.conversation.getConversationId(),parentAgentId:c.parentAgentId??null,iteration:c.iteration,messages:g,apiMessages:b,abortSignal:c.signal??new AbortController().signal,systemPrompt:c.systemPrompt??"",tools:l,model:{id:this.config.modelId,provider:this.config.providerId,info:i},overflowRecovery:c.overflowRecovery,previousRequestInputTokens:c.previousRequestInputTokens,emitStatusNotice:c.emitStatusNotice});if(!I)return;return{...I.messages?{messages:Hc(I.messages)}:{},...I.systemPrompt!==void 0?{systemPrompt:I.systemPrompt}:{}}}}async prepareMessagesForModelRequest(i){let l=await this.prepareProviderMessagesForApi(Yk(i));return Hc(l)}async prepareProviderMessagesForApi(i){let l=i,u=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let c of u)l=await c.build(l);return this.messageBuilder.buildForApi(l)}handleRuntimeEvent(i){switch(i.type){case"message-added":case"assistant-message":{this.syncConversationFromRuntimeMessage(i.snapshot.messages,[i.message]);break}case"turn-started":{this.toolResultCache.advanceIteration(),this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[];break}case"tool-started":{if(this.toolStartedAt.set(i.toolCall.toolCallId,new Date),this.toolInputs.set(i.toolCall.toolCallId,i.toolCall.input),i.toolCall.execution)break;this.inspectLoopForToolCall(i.toolCall.toolName,i.toolCall.input,i.iteration);break}case"tool-finished":{let l=this.toolStartedAt.get(i.toolCall.toolCallId),u=new Date,c=this.toolInputs.get(i.toolCall.toolCallId);this.toolStartedAt.delete(i.toolCall.toolCallId),this.toolInputs.delete(i.toolCall.toolCallId);let g=i.message.content.find((T)=>T.type==="tool-result"),b=g?.type==="tool-result"&&g.isError===!0,I=b?gU(g?.type==="tool-result"?g.output:void 0):void 0,k={id:i.toolCall.toolCallId,name:i.toolCall.toolName,execution:i.toolCall.execution,input:c,output:g?.type==="tool-result"?g.output:void 0,error:I,durationMs:l===void 0?0:u.getTime()-l.getTime(),startedAt:l??u,endedAt:u};if(this.currentRunToolCalls.push(k),i.toolCall.execution)break;if(b){if(this.currentTurnFailedTools+=1,I)this.currentTurnFailureDetails.push(`[${i.toolCall.toolName}] ${I}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let l=this.currentTurnFailedTools,u=this.currentTurnSuccessfulTools;if(l>0&&u===0){let c=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:i.iteration,reason:"tool_execution_failed",details:`${l} tool call(s) failed${c?`: ${c}`:""}`})}else if(u>0)this.mistakeTracker.reset();break}case"usage-updated":{this.currentRunUsage={inputTokens:i.usage.inputTokens,outputTokens:i.usage.outputTokens,cacheReadTokens:i.usage.cacheReadTokens>0?i.usage.cacheReadTokens:void 0,cacheWriteTokens:i.usage.cacheWriteTokens>0?i.usage.cacheWriteTokens:void 0,totalCost:i.usage.totalCost};break}default:break}for(let l of this.eventAdapter.translate(i)){if(l.type==="error"&&!l.recoverable){this.pendingTerminalError=l;continue}this.emitLegacyEvent(l)}}syncConversationFromRuntimeMessage(i,l){if(i.length>0){this.conversation.replaceMessages(bd(i));return}if(l.length===0)return;let u=new Set(this.conversation.getMessages().map((g)=>g.id).filter((g)=>typeof g==="string")),c=bd(l).filter((g)=>!g.id||!u.has(g.id));if(c.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...c])}emitLegacyEvent(i){for(let l of this.listeners)try{l(i)}catch(u){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:u})}}inspectLoopForToolCall(i,l,u){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let c=this.loopTracker.inspect({name:i,input:l});if(c.kind==="ok")return;if(c.kind==="soft"){if(c.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:c.message}]});return}this.enqueueMistakeRecord({iteration:u,reason:"tool_execution_failed",forceAtLimit:!0,details:c.message??`Detected repeated tool calls to \`${i}\`; stopping to avoid a loop.`})}enqueueMistakeRecord(i){if(this.trackerAbortInFlight)return;this.activeTrackerWork=this.activeTrackerWork.then(async()=>{if(this.trackerAbortInFlight)return;let l=await this.mistakeTracker.record(i);if(l.action==="stop")this.trackerAbortInFlight=!0,this.trackerStopReason=l.reason??l.message,this.conversation.appendMessage({role:"user",content:[{type:"text",text:l.message}]}),this.activeRuntime?.abort(l.reason??l.message)})}buildLegacyResult(i){let{runResult:l,thrownError:u,startedAt:c,endedAt:g}=i,b=g.getTime()-c.getTime(),I=u?"error":SU(l),k=(l?.status==="failed"?l.error?.message:void 0)||l?.outputText||"",T=l?{inputTokens:l.usage.inputTokens,outputTokens:l.usage.outputTokens,cacheReadTokens:l.usage.cacheReadTokens>0?l.usage.cacheReadTokens:void 0,cacheWriteTokens:l.usage.cacheWriteTokens>0?l.usage.cacheWriteTokens:void 0,totalCost:l.usage.totalCost}:this.currentRunUsage,E=this.conversation.getMessages(),A=Ev(this.config);if(u)throw u;return{text:k,usage:T,messages:E,toolCalls:this.currentRunToolCalls,iterations:l?.iterations??0,finishReason:I,model:{id:this.config.modelId,provider:this.config.providerId,info:A},startedAt:c,endedAt:g,durationMs:b}}}function kU(i,l,u,c){if(!i)return;if(l==="debug"){i.debug(u,c);return}if(l==="error"&&i.error){i.error(u,c);return}let g=l==="warn"?"warn":l==="error"?"error":"info";i.log(u,{...c,severity:g})}function SU(i){if(!i)return"error";switch(i.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function TU(i,l,u,c){return await Promise.resolve(),xE(i,l,u,c)}function Ev(i){return eS(i)?.[i.modelId]}function _U(i,l){let u=i.trim();if(l.providerId.toLowerCase()!=="cline")return u;return Ge({ide:l.clineIdeName?.trim()||"Terminal",workspaceRoot:l.cwd?.trim()||"/",providerId:l.providerId,rules:`# Team Teammate Role
582
+ ${u}`,platform:l.clinePlatform,metadata:l.workspaceMetadata})}function EU(i,l){let u=i.trim();if(l.providerId.toLowerCase()!=="cline")return u;return Ge({ide:l.clineIdeName||"Terminal",workspaceRoot:l.cwd?.trim()||"/",providerId:l.providerId,overridePrompt:u,metadata:l.workspaceMetadata,platform:l.clinePlatform})}function I0(i){let l={...i};return{getRuntimeConfig:()=>l,getConnectionConfig:()=>({providerId:l.providerId,modelId:l.modelId,apiKey:l.apiKey,baseUrl:l.baseUrl,headers:l.headers,onAuthError:l.onAuthError,providerConfig:l.providerConfig,knownModels:l.knownModels,thinking:l.thinking,reasoningEffort:l.reasoningEffort,thinkingBudgetTokens:l.thinkingBudgetTokens,maxTokensPerTurn:l.maxTokensPerTurn,temperature:l.temperature}),updateConnectionDefaults:(u)=>{l={...l,...u}}}}function k0(i){let l=i.configProvider.getRuntimeConfig(),u=i.kind==="teammate"?_U(i.prompt,l):EU(i.prompt,l);return{...i.configProvider.getConnectionConfig(),distinctId:l.distinctId,sessionId:l.sessionId,systemPrompt:u,tools:i.tools,maxIterations:i.maxIterations??l.maxIterations,parentAgentId:i.parentAgentId,abortSignal:i.abortSignal,onEvent:i.onEvent,hooks:l.hooks,extensions:l.extensions,hookErrorMode:i.hookErrorMode,toolPolicies:i.toolPolicies,requestToolApproval:i.requestToolApproval,logger:l.logger,role:i.role}}function S0(i){let l=k0(i),u=new fc(l);if(l.onEvent)u.subscribeEvents(l.onEvent);return u}var AU=t({systemPrompt:e().describe("System prompt defining the sub-agent's behavior"),task:e().describe("Task for the sub-agent to complete")});function T0(i){return _({name:"spawn_agent",executionMode:"parallel",description:"Spawn a sub-agent with custom instructions for a specialized task. Waits for the sub-agent to finish and returns its result before your next step.",inputSchema:S(AU),execute:async(l,u)=>{let c=i.createSubAgentTools?await i.createSubAgentTools(l,u):i.subAgentTools??[],g=S0({kind:"subagent",prompt:l.systemPrompt,configProvider:i.configProvider,tools:c,maxIterations:i.defaultMaxIterations,parentAgentId:u.agentId,abortSignal:u.signal,onEvent:i.onSubAgentEvent,hookErrorMode:i.hookErrorMode,toolPolicies:i.toolPolicies,requestToolApproval:i.requestToolApproval}),b=g.getAgentId(),I=g.getConversationId(),k=u.agentId;if(i.onSubAgentStart)try{await i.onSubAgentStart({subAgentId:b,conversationId:I,parentAgentId:k,input:l})}catch{}try{let T=await g.run(l.task),E={text:T.text,iterations:T.iterations,finishReason:T.finishReason,usage:{inputTokens:T.usage.inputTokens,outputTokens:T.usage.outputTokens}};if(i.onSubAgentEnd)try{await i.onSubAgentEnd({subAgentId:b,conversationId:I,parentAgentId:k,input:l,result:E,agentResult:T})}catch{}return E}catch(T){if(i.onSubAgentEnd)try{await i.onSubAgentEnd({subAgentId:b,conversationId:I,parentAgentId:k,input:l,error:T instanceof Error?T:Error(String(T))})}catch{}throw T}},timeoutMs:300000,retryable:!1})}function Zr(i){let l=i.toLowerCase().replace(/[^a-z0-9._-]+/g,"-"),u=0,c=l.length;while(u<c&&l[u]==="-")u++;while(c>u&&l[c-1]==="-")c--;return l.slice(u,c)}function _0(i,l){let u=i.replace(/\s+/g," ").trim();if(u.length<=l)return u;return`${u.slice(0,Math.max(0,l-3)).trimEnd()}...`}function Ai(i,l){if(i===void 0)throw Error(`Missing required field: ${l}`);return i}function CU(i){let l=i.result;if(!l)return;return{textPreview:_0(l.text,vs),iterations:l.iterations,finishReason:l.finishReason,durationMs:l.durationMs,usage:{inputTokens:l.usage.inputTokens,outputTokens:l.usage.outputTokens,cacheReadTokens:l.usage.cacheReadTokens,cacheWriteTokens:l.usage.cacheWriteTokens,totalCost:l.usage.totalCost}}}function Td(i){return i?.toISOString()}function op(i){return{id:i.id,agentId:i.agentId,taskId:i.taskId,status:i.status,messagePreview:_0(i.message,bs),priority:i.priority,retryCount:i.retryCount,maxRetries:i.maxRetries,nextAttemptAt:Td(i.nextAttemptAt),continueConversation:i.continueConversation,startedAt:i.startedAt.toISOString(),endedAt:Td(i.endedAt),leaseOwner:i.leaseOwner,heartbeatAt:Td(i.heartbeatAt),lastProgressAt:Td(i.lastProgressAt),lastProgressMessage:i.lastProgressMessage,currentActivity:i.currentActivity,error:i.error,resultSummary:CU(i)}}function xU(i){if(i.status==="failed")throw Error(`Run "${i.id}" failed${i.error?`: ${i.error}`:""}`);if(i.status==="cancelled")throw Error(`Run "${i.id}" was cancelled${i.error?`: ${i.error}`:""}`);if(i.status==="interrupted")throw Error(`Run "${i.id}" was interrupted${i.error?`: ${i.error}`:""}`)}var RU=["team_spawn_teammate","team_shutdown_teammate","team_status","team_task","team_run_task","team_cancel_run","team_list_runs","team_await_runs","team_send_message","team_broadcast","team_read_mailbox","team_mission_log","team_cleanup","team_create_outcome","team_attach_outcome_fragment","team_review_outcome_fragment","team_finalize_outcome","team_list_outcomes"];function E0(i){let l=[];if(i.createBaseTools)l.push(...i.createBaseTools());l.push(...Af({runtime:i.runtime,requesterId:i.spec.agentId,teammateConfigProvider:i.teammateConfigProvider,createBaseTools:i.createBaseTools,allowSpawn:!1,includeSpawnTool:!1})),i.runtime.spawnTeammate({agentId:i.spec.agentId,config:k0({kind:"teammate",prompt:i.spec.rolePrompt,role:i.spec.rolePrompt,configProvider:i.teammateConfigProvider,tools:l,maxIterations:i.spec.maxIterations,cwd:i.teammateConfigProvider.getRuntimeConfig().cwd})})}function PU(i){let l=i.leadAgentId??"lead",u=i.restoredFromPersistence===!0,c=Af({runtime:i.runtime,requesterId:l,teammateConfigProvider:i.teammateConfigProvider,createBaseTools:i.createBaseTools,allowSpawn:!0,includeSpawnTool:i.includeLeadSpawnTool,includeManagementTools:i.includeLeadManagementTools,onLeadToolsUnlocked:i.onLeadToolsUnlocked}),g=[];for(let b of i.restoredTeammates??[]){if(i.runtime.isTeammateActive(b.agentId))continue;E0({runtime:i.runtime,requesterId:l,teammateConfigProvider:i.teammateConfigProvider,createBaseTools:i.createBaseTools,spec:b}),g.push(b.agentId)}return{tools:c,restoredFromPersistence:u,restoredTeammates:g}}function Af(i){let l=i.allowSpawn??!0,u=i.includeSpawnTool??!0,c=i.includeManagementTools??!0,g=[];if(u)g.push(_({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:S(Ta),execute:async(I)=>{let k=y(Ta,I);if(i.runtime.getMemberRole(i.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!l)throw Error("Spawning teammates is disabled in this context.");let T={agentId:k.agentId,rolePrompt:k.rolePrompt};if(E0({runtime:i.runtime,requesterId:i.requesterId,teammateConfigProvider:i.teammateConfigProvider,createBaseTools:i.createBaseTools,spec:T}),!c)i.onLeadToolsUnlocked?.(Af({...i,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return y(ja,{agentId:k.agentId,status:"spawned"})}}));if(!c)return g;g.push(_({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:S(_a),execute:async(I)=>{let k=y(_a,I);if(i.runtime.getMemberRole(i.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return i.runtime.shutdownTeammate(k.agentId,k.reason),y(ja,{agentId:k.agentId,status:"stopped"})}})),g.push(_({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:S(Ia),execute:async(I)=>(y(Ia,I),y(ks,i.runtime.getSnapshot()))})),g.push(_({name:"team_task",description:"Manage shared team tasks with action-specific payloads. create requires title and description, with optional dependsOn and assignee. list accepts optional status, assignee. claim requires taskId. complete requires taskId and summary. block requires taskId and reason. Do not include fields from other actions.",inputSchema:S(Sa),execute:async(I)=>{let k=y(Sa,I);switch(k.action){case"create":{let T=new Set(ws.create??[]),E=Object.entries(I).filter(([C,N])=>T.has(C)&&N!=null).map(([C])=>C),A=i.runtime.createTask({title:Ai(k.title,"title"),description:Ai(k.description,"description"),dependsOn:k.dependsOn,assignee:k.assignee,createdBy:i.requesterId});return y(Ot,{action:"create",taskId:A.id,status:A.status,...E.length>0?{ignoredFields:E,note:`Ignored fields for action=create: ${E.join(", ")}`}:{}})}case"list":return y(Ot,{action:"list",tasks:i.runtime.listTaskItems({status:k.status,assignee:k.assignee})});case"claim":{let T=i.runtime.claimTask(Ai(k.taskId,"taskId"),i.requesterId);return y(Ot,{action:"claim",taskId:T.id,status:T.status,nextStep:"Task is now in_progress. Execute the work using team_run_task or your own tools, then call team_task with action=complete when done."})}case"complete":{let T=i.runtime.completeTask(Ai(k.taskId,"taskId"),i.requesterId,Ai(k.summary,"summary"));return y(Ot,{action:"complete",taskId:T.id,status:T.status})}case"block":{let T=i.runtime.blockTask(Ai(k.taskId,"taskId"),i.requesterId,Ai(k.reason,"reason"));return y(Ot,{action:"block",taskId:T.id,status:T.status})}}}}));let b=new Map;return g.push(_({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:S(Ea),execute:async(I)=>{let k=y(Ea,I);if(k.runMode==="async"){let A=i.runtime.startTeammateRun(k.agentId,k.task,{taskId:k.taskId||void 0,fromAgentId:i.requesterId,continueConversation:k.continueConversation||void 0});return y(Qi,{agentId:k.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${k.agentId} and queued as ${A.id}.`,runId:A.id})}let T=b.get(k.agentId);if(T){let A=await T;return y(Qi,{...A,status:"joined",deduped:!0,message:`Task for ${k.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let E=i.runtime.routeToTeammate(k.agentId,k.task,{taskId:k.taskId||void 0,fromAgentId:i.requesterId,continueConversation:k.continueConversation||void 0}).then((A)=>y(Qi,{agentId:k.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${k.agentId} and completed in sync mode.`,text:A.text,iterations:A.iterations})).finally(()=>{b.delete(k.agentId)});return b.set(k.agentId,E),await E}})),g.push(_({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:S(Oa),execute:async(I)=>{let k=y(Oa,I),T=i.runtime.cancelRun(k.runId,k.reason);return y(Ss,{runId:T.id,status:T.status})}})),g.push(_({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:S(Ra),execute:async(I)=>y(Ji.array(),i.runtime.listRuns(y(Ra,I)).map(op))})),g.push(_({name:"team_await_runs",description:"Wait for async teammate runs. Provide runId to wait for one run, or omit it to wait for all active async runs. Uses a long timeout for legitimate teammate work.",inputSchema:S(Aa),timeoutMs:xs,execute:async(I)=>{let k=y(Aa,I);if(k.runId){let A=await i.runtime.awaitRun(k.runId);return xU(A),y(Ji,op(A))}let T=await i.runtime.awaitAllRuns(),E=T.filter((A)=>["failed","cancelled","interrupted"].includes(A.status));if(E.length>0){let A=E.map((C)=>`${C.id}:${C.status}${C.error?`(${C.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${A}`)}return y(Ji.array(),T.map(op))}})),g.push(_({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:S(Ca),execute:async(I)=>{let k=y(Ca,I),T=i.runtime.sendMessage(i.requesterId,k.toAgentId,k.subject,k.body,k.taskId??void 0);return y(Es,{id:T.id,toAgentId:T.toAgentId})}})),g.push(_({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:S(Pa),execute:async(I)=>{let k=y(Pa,I),T=i.runtime.broadcast(i.requesterId,k.subject,k.body,{taskId:k.taskId??void 0});return y(Rs,{delivered:T.length})}})),g.push(_({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:S(Da),execute:async(I)=>{let k=y(Da,I);return y(Ts.array(),i.runtime.listMailbox(i.requesterId,{unreadOnly:k.unreadOnly,markRead:!0}))}})),g.push(_({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:S(Wa),execute:async(I)=>{let k=y(Wa,I),T=i.runtime.appendMissionLog({agentId:i.requesterId,taskId:k.taskId||void 0,kind:k.kind,summary:k.summary,evidence:k.evidence?.length?k.evidence:void 0,nextAction:k.nextAction||void 0});return y(Os,{id:T.id})}})),g.push(_({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:S(Ma),execute:async(I)=>{if(y(Ma,I),i.runtime.getMemberRole(i.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return i.runtime.cleanup(),y(As,{status:"cleaned"})}})),g.push(_({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:S(Na),execute:async(I)=>{let k=y(Na,I),T=i.runtime.createOutcome({title:k.title,requiredSections:k.requiredSections,createdBy:i.requesterId});return y(Is,{outcomeId:T.id,status:T.status,requiredSections:T.requiredSections})}})),g.push(_({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:S(La),execute:async(I)=>{let k=y(La,I),T=i.runtime.attachOutcomeFragment({outcomeId:k.outcomeId,section:k.section,sourceAgentId:i.requesterId,sourceRunId:k.sourceRunId||void 0,content:k.content});return y($a,{fragmentId:T.id,status:T.status})}})),g.push(_({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:S(Ba),execute:async(I)=>{let k=y(Ba,I),T=i.runtime.reviewOutcomeFragment({fragmentId:k.fragmentId,reviewedBy:i.requesterId,approved:k.approved});return y($a,{fragmentId:T.id,status:T.status})}})),g.push(_({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:S(Ua),execute:async(I)=>{let k=y(Ua,I),T=i.runtime.finalizeOutcome(k.outcomeId);return y(Cs,{outcomeId:T.id,status:T.status})}})),g.push(_({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:S(Fa),execute:async(I)=>(y(Fa,I),y(_s.array(),i.runtime.listOutcomes()))})),g}function MU(i){if(i==="vscode")return"vscode";if(i==="cli"||i?.startsWith("cline-cli"))return"cli";return}var NU=[{id:"web_search",description:"Search the public web using the selected model provider's native search capability.",headlessToolNames:["web_search"]},{id:"read_files",description:"Read the content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided. Long files are windowed; page with start_line/end_line.",headlessToolNames:["read_files"]},{id:"search_codebase",description:"Perform regex pattern searches across the codebase for code patterns, definitions, imports, and other text matches.",headlessToolNames:["search_codebase"]},{id:"run_commands",description:"Run shell commands from the root of the workspace for listing files, checking git status, builds, tests, and similar tasks.",headlessToolNames:["run_commands"]},{id:"editor",description:"Make controlled filesystem edits on text files with create, replace, and insert operations.",headlessToolNames:["editor"]},{id:"fetch_web_content",description:"Fetch URL content and analyze it with a prompt describing what to extract.",headlessToolNames:["fetch_web_content"]},{id:"skills",description:"Execute a configured skill within the main conversation when a matching skill exists for the task.",headlessToolNames:["skills"]},{id:"ask_question",description:"Ask the user a single clarifying question with 2-5 selectable options.",headlessToolNames:["ask_question"]},{id:"tasks",description:"Create and manage explicitly requested one-time and recurring agent schedules.",headlessToolNames:["tasks"],unavailableClientTypes:["cli","vscode"]},{id:"spawn_agent",description:T0({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...RU]}];function OU(i,l){if(!l)return!0;return!NU.find((u)=>u.id===i||u.headlessToolNames.includes(i))?.unavailableClientTypes?.includes(l)}function A0(i={}){let{executorOptions:l={},executors:u,...c}=i,g=c.shell??l.bash?.shell??_t(process.platform),b={...l,bash:{...l.bash,shell:g}},I={...yD(b),...u??{}};return JL({...c,shell:g,executors:I})}var UU=Sr,FU=["idle","running","pending"];function qU(i){return!FU.includes(i)}function Ir(i){return!qU(i)}var jr={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"},C0="sessionHistoryOrigin";function No(i){return typeof i==="string"&&i.trim()?i.trim():void 0}function jU(i){let l=[i?.name,i?.platform].filter((u)=>typeof u==="string").join(" ").toLowerCase();if(!l)return;if(l.includes("vscode")||l.includes("visual studio code"))return jr.VSCODE;if(l.includes("jetbrains")||l.includes("webstorm")||l.includes("intellij")||l.includes("pycharm")||l.includes("goland")||l.includes("clion")||l.includes("rider")||l.includes("android studio"))return jr.JETBRAINS;if(l.includes("neovim"))return jr.NEOVIM;if(l.includes("kanban"))return jr.KANBAN;if(l.includes("desktop"))return jr.DESKTOP;if(l.includes("cline-platform"))return jr.WEB;if(l.includes("cline-cli")||l.includes("cline-acp"))return jr.CLI;if(l.includes("cline-sdk")||l.includes("cline-core"))return jr.CORE;return}function Uo(i){let l=i?.[C0];if(!l||typeof l!=="object"||Array.isArray(l))return;let u=l,c=No(u.mode);if(!c)return;let g=No(u.version),b=No(u.trigger);return{mode:c,...g?{version:g}:{},...b?{trigger:b}:{}}}function vn(i,l){let u=Uo(i),c=No(l.mode)??u?.mode??"user",g=No(l.version)??u?.version,b=No(l.trigger)??u?.trigger;return{...i??{},[C0]:{mode:c,...g?{version:g}:{},...b?{trigger:b}:{}}}}function Cu(i){return i.replace(/[^a-zA-Z0-9._-]+/g,"_")}function Av(i,l){let u=Cu(i),c=Cu(l),g=`${u}__${c}`;return g.length>180?g.slice(0,180):g}function BU(i,l){let u=Cu(i),c=Cu(l);return`${u}__teamtask__${c}__${R(6)}`}function Cf(i){let l=i.indexOf("__teamtask__");if(l<=0)return null;let u=i.slice(0,l),c=i.slice(l+12),g=c.lastIndexOf("__");if(g<=0)return null;let b=c.slice(0,g),I=c.slice(g+2);if(!u||!b||!I)return null;return{rootSessionId:u,agentId:b,teamTaskId:I}}function x0(i){if(Cf(i))return null;let l="__",u=i.indexOf(l);if(u<=0)return null;let c=i.slice(0,u),g=i.slice(u+l.length);if(!c||!g)return null;return{rootSessionId:c,agentId:g}}function HU(i){switch(i.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let l=String(i.reason??"").toLowerCase();if(l.includes("cancel")||l.includes("abort")||l.includes("interrupt"))return"cancelled";if(l.includes("fail")||l.includes("error"))return"failed";return"completed"}default:return"running"}}var zU=s(UU),xu=t({version:a(1),session_id:e().min(1),source:e().min(1),pid:n().int(),started_at:e().min(1),ended_at:e().min(1).optional(),exit_code:n().int().nullable().optional(),status:zU,interactive:r(),provider:e().min(1),model:e().min(1),cwd:e().min(1),workspace_root:e().min(1),team_name:e().min(1).optional(),enable_tools:r(),enable_spawn:r(),enable_teams:r(),prompt:e().optional(),metadata:d(e(),m()).optional(),messages_path:e().min(1).optional(),compaction_path:e().min(1).optional()});function WU(i){if(!i)return!1;return Object.values(i).some((l)=>typeof l==="function")}function Cv(i,l){let u=[...i??[],...l??[]];if(u.length===0)return;let c=[],g=new Set;for(let b of u){if(g.has(b.name))continue;g.add(b.name),c.push(b)}return c}function KU(i){return JSON.stringify(i,(l,u)=>{if(u instanceof Error)return{name:u.name,message:u.message,stack:u.stack};return u})}function Bs(i){return typeof i==="string"&&i.trim()?i.trim():void 0}function $m(i,l){let u={...i};u.id=Bs(u.id)??R();let c=u.modelInfo&&typeof u.modelInfo==="object"?{...u.modelInfo}:void 0,g={id:Bs(c?.id)??Bs(u.modelId)??Bs(l?.id),provider:Bs(c?.provider)??Bs(u.providerId)??Bs(l?.provider),family:Bs(c?.family)??Bs(l?.family)};if(delete u.providerId,delete u.modelId,g.id&&g.provider)u.modelInfo={id:g.id,provider:g.provider,...g.family?{family:g.family}:{}};else delete u.modelInfo;return u}function Lm(i){return i.map((l)=>$m(l))}function R0(i,l,u=[]){let c=i.map((T,E)=>{let A=u[E],C=A?.role===T.role&&JSON.stringify(A.content)===JSON.stringify(T.content)?{...A,...T}:{...T};return $m(C)}),g=u.length,b=[];for(let T=g;T<c.length;T+=1)if(c[T]?.role==="assistant"&&c[T]?.metadata?.displayOnly!==!0)b.push(T);if(b.length===0){let T=[...c].reverse().findIndex((E)=>E.role==="assistant"&&E.metadata?.displayOnly!==!0);if(T===-1)return c;b.push(c.length-1-T)}let I=b[b.length-1],k=b.some((T)=>c[T]?.metrics);for(let T of b){let E=c[T],A=E.metrics;if(!A&&T===I&&!k){let C=l.usage;A={inputTokens:C.inputTokens,outputTokens:C.outputTokens,cacheReadTokens:C.cacheReadTokens??0,cacheWriteTokens:C.cacheWriteTokens??0,cost:C.totalCost}}c[T]={...$m(E,{id:l.model.id,provider:l.model.provider,family:l.model.info?.family}),...A?{metrics:A}:{},ts:E.ts??l.endedAt.getTime()}}return c}function xv(i){return{sessionId:i.sessionId,source:i.source,pid:i.pid,startedAt:i.startedAt,endedAt:i.endedAt??null,exitCode:i.exitCode??null,status:i.status,interactive:i.interactive,provider:i.provider,model:i.model,cwd:i.cwd,workspaceRoot:i.workspaceRoot,teamName:i.teamName??void 0,enableTools:i.enableTools,enableSpawn:i.enableSpawn,enableTeams:i.enableTeams,parentSessionId:i.parentSessionId??void 0,parentAgentId:i.parentAgentId??void 0,agentId:i.agentId??void 0,conversationId:i.conversationId??void 0,isSubagent:i.isSubagent,prompt:i.prompt??void 0,metadata:i.metadata??void 0,messagesPath:i.messagesPath??void 0,updatedAt:i.updatedAt}}var GU=120;function Oo(i){let l=i?.trim();return l?l.slice(0,GU):void 0}function P0(i){let l=wo(ye(i??"")).trim();if(!l)return;return Oo(l.split(`
583
+ `)[0]?.trim())}function Qs(i){if(!i)return;let l={...i},u=Oo(typeof l.title==="string"?l.title:void 0);if(u)l.title=u;else delete l.title;return Object.keys(l).length>0?l:void 0}function Dm(i){let l=Qs(i.metadata)??{},u=i.title!==void 0?Oo(i.title):P0(i.prompt);if(u)l.title=u;return Object.keys(l).length>0?l:void 0}function Rv(i){let l=Uo(i.metadata),u={source:i.source,mode:l?.mode??"user",sessionId:i.sessionId,...i.parentSessionId?{parentThreadId:i.parentSessionId}:{},...i.agentId?{subagent:i.agentId}:{},...l?.version?{version:l.version}:{},...l?.trigger?{trigger:l.trigger}:{}};if(Cf(i.sessionId))return{agent:"teammate",sessionId:i.sessionId,taskType:"team",origin:u};if(x0(i.sessionId))return{agent:"subagent",sessionId:i.sessionId,taskType:"subagent_task",origin:u};return{agent:"lead",sessionId:i.sessionId,origin:u}}function M0(i){return{version:1,updated_at:i.updatedAt,agent:i.context.agent,sessionId:i.context.sessionId,...i.context.taskType?{taskType:i.context.taskType}:{},origin:i.context.origin,messages:Lm(i.messages),...i.systemPrompt?{system_prompt:i.systemPrompt}:{}}}function XU(i,l,u){$U(DU(i),{recursive:!0}),LU(i,`${JSON.stringify(M0({updatedAt:l,context:u,messages:[]}),null,2)}
584
+ `,"utf8")}function JU(i,l){return xu.parse({version:1,session_id:i.sessionId,source:i.source,pid:i.pid,started_at:i.startedAt,ended_at:l?.endedAt??i.endedAt??void 0,exit_code:l?.exitCode??i.exitCode??void 0,status:l?.status??i.status,interactive:i.interactive,provider:i.provider,model:i.model,cwd:i.cwd,workspace_root:i.workspaceRoot,team_name:i.teamName??void 0,enable_tools:i.enableTools,enable_spawn:i.enableSpawn,enable_teams:i.enableTeams,prompt:i.prompt??void 0,metadata:l?.metadata??i.metadata??void 0,messages_path:i.messagesPath??void 0})}async function VU(i,l,u){let c=0;while(!0){let g=await i();if(g===void 0)return{updated:!1};let b=await l(g);if(typeof b==="object"&&b!==null&&"updated"in b&&b.updated===!1){if(c+=1,c>=u)return b;continue}return b}}function zr(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function Qt(i,l){return{inputTokens:i.inputTokens+Math.max(0,l.inputTokens??0),outputTokens:i.outputTokens+Math.max(0,l.outputTokens??0),cacheReadTokens:i.cacheReadTokens+Math.max(0,l.cacheReadTokens??0),cacheWriteTokens:i.cacheWriteTokens+Math.max(0,l.cacheWriteTokens??0),totalCost:i.totalCost+Math.max(0,l.totalCost??0)}}function N0(i){let l=zr();for(let u of i)l=Qt(l,u);return l}function il(i){return typeof i==="number"&&Number.isFinite(i)?i:0}function Pv(i){let l=zr();for(let u of i){let c=u.metrics;if(!c)continue;l=Qt(l,{inputTokens:il(c.inputTokens),outputTokens:il(c.outputTokens),cacheReadTokens:il(c.cacheReadTokens),cacheWriteTokens:il(c.cacheWriteTokens),totalCost:il(c.cost)})}return l}function YU(i){if(!i||typeof i!=="object")return;let l=i,u=l.skill??l.skill_name??l.skillName;if(typeof u!=="string")return;let c=u.trim();return c.length>0?c:void 0}function O0(i){if(!i||typeof i!=="object")return{};let l=i;return{agentId:typeof l.agentId==="string"?l.agentId:void 0,conversationId:typeof l.conversationId==="string"?l.conversationId:void 0,parentAgentId:typeof l.parentAgentId==="string"?l.parentAgentId:void 0}}function Fo(i){let l=i.agentId?.trim();if(!l)return;let u=i.parentAgentId?.trim()||void 0,c=i.teamRole,g="root";if(c==="teammate")g="team_teammate";else if(c==="lead")g="team_lead";else if(u)g="subagent";return{agentId:l,agentKind:g,conversationId:i.conversationId?.trim()||void 0,parentAgentId:u,createdByAgentId:i.createdByAgentId?.trim()||u||void 0,isSubagent:Boolean(u),teamId:i.teamId?.trim()||void 0,teamName:i.teamName?.trim()||void 0,teamRole:c,teamAgentId:i.teamAgentId?.trim()||void 0}}function QU(i){return{inputTokens:i.inputTokens,outputTokens:i.outputTokens,cacheWriteTokens:i.cacheWriteTokens,cacheReadTokens:i.cacheReadTokens,totalCost:i.cost}}function ZU(i){let l=i.cacheWriteTokens??0,u=i.cacheReadTokens??0;return{tokensIn:Math.max(0,i.inputTokens-u-l),tokensOut:i.outputTokens,cacheWriteTokens:l,cacheReadTokens:u,totalCost:i.cost,reasoningTokenCount:i.reasoningTokenCount}}function eF(i){let l=i.isPrimaryAgentEvent?[i.overrides?.agentId,i.eventMetadata.agentId,i.overrides?.teamAgentId]:[i.overrides?.teamAgentId,i.overrides?.agentId,i.eventMetadata.agentId,i.eventMetadata.conversationId];for(let u of l){let c=u?.trim();if(c)return c}return i.isPrimaryAgentEvent?"root":"unknown"}function ap(i,l,u){let{sessionId:c,config:g,liveSession:b,emit:I}=i,k=g.telemetry,T=b?.runtime.teamRuntime,E=u?.isPrimaryAgentEvent??!0,A=O0(l),C=Fo({agentId:u?.agentId??A.agentId,conversationId:u?.conversationId??A.conversationId,parentAgentId:u?.parentAgentId??A.parentAgentId,createdByAgentId:u?.createdByAgentId,teamId:u?.teamId??T?.getTeamId(),teamName:u?.teamName??T?.getTeamName(),teamRole:u?.teamRole,teamAgentId:u?.teamAgentId});if(l.type==="content_start"&&l.contentType==="tool"&&l.toolName==="skills"){let N=YU(l.input);if(N)_A(k,{ulid:c,skillName:N,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:g.providerId,modelId:g.modelId,...C})}if(l.type==="content_end"&&l.contentType==="tool"){let N=l.toolName??"unknown",O=!l.error;if(Ko(k,{ulid:c,tool:N,autoApproved:void 0,success:O,modelId:g.modelId,provider:g.providerId,...C}),!O&&(N==="editor"||N==="apply_patch"))EA(k,{ulid:c,modelId:g.modelId,provider:g.providerId,errorType:l.error,...C})}if(l.type==="usage"&&b?.turnUsageBaseline){let N=QU(l);if(E){b.turnPrimaryUsage=Qt(b.turnPrimaryUsage??zr(),N);let L=Qt(b.turnUsageBaseline,b.turnPrimaryUsage);i.usageBySession.set(c,L),EI(k,{ulid:c,provider:g.providerId,model:g.modelId,source:"assistant",mode:g.mode,...C}),SA(k,{ulid:c,...ZU(l),provider:g.providerId,model:g.modelId,...C})}else{let L=eF({isPrimaryAgentEvent:E,overrides:u,eventMetadata:A}),D=b.turnUsageByAgent??new Map;b.turnUsageByAgent=D,D.set(L,Qt(D.get(L)??zr(),N))}let O=Qt(b.turnPrimaryUsage??zr(),N0(b.turnUsageByAgent?.values()??[]));i.aggregateUsageBySession.set(c,Qt(b.turnAggregateUsageBaseline??b.turnUsageBaseline,O))}if(l.type==="iteration_end"&&E)i.persistMessages(c,b?.agent.getMessages()??[],b?.config.systemPrompt);I({type:"agent_event",payload:{sessionId:c,event:l,teamAgentId:u?.teamAgentId,teamRole:u!==void 0?u.teamRole??(E?"lead":void 0):void 0}}),I({type:"chunk",payload:{sessionId:c,stream:"agent",chunk:KU(l),ts:Date.now()}})}function Hs(i){return i.workspaceRoot??i.cwd}var tF=new Set(["name","description","license","compatibility","metadata","allowed-tools"]),Um=64,rF=1024,sF=500;function $0(i){return typeof i==="object"&&i!==null&&!Array.isArray(i)}function nl(i,l,u={}){if(i===void 0){if(u.required)throw Error(`Missing required frontmatter field '${l}'.`);return}if(typeof i!=="string")throw Error(`Frontmatter field '${l}' must be a string.`);let c=i.trim();if(u.required&&c.length===0)throw Error(`Frontmatter field '${l}' cannot be empty.`);if(u.maxLength!==void 0&&c.length>u.maxLength)throw Error(`Frontmatter field '${l}' exceeds ${u.maxLength} characters.`);return c}function iF(i,l){let u=i.normalize("NFKC");if(u.length===0||u.length>Um)throw Error(`Skill name must be between 1 and ${Um} characters.`);if(u!==u.toLowerCase())throw Error(`Skill name '${u}' must be lowercase.`);if(u.startsWith("-")||u.endsWith("-")||u.includes("--"))throw Error(`Skill name '${u}' cannot start or end with a hyphen or contain consecutive hyphens.`);for(let c of u)if(c!=="-"&&!/[\p{L}\p{N}]/u.test(c))throw Error(`Skill name '${u}' may contain only lowercase letters, numbers, and hyphens.`);if(l.normalize("NFKC")!==u)throw Error(`Skill directory '${l}' must match frontmatter name '${u}'.`);return u}function nF(i){if(i===void 0)return;if(!$0(i))throw Error("Frontmatter field 'metadata' must be an object.");let l={};for(let[u,c]of Object.entries(i)){if(typeof c!=="string")throw Error(`Frontmatter metadata value '${u}' must be a string.`);l[u]=c}return l}function L0(i,l){let u=he(i).match(/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)([\s\S]*)$/);if(!u)throw Error("SKILL.md must start with YAML frontmatter delimited by '---'.");let c;try{c=X.parse(u[1])}catch(N){throw Error(`Failed to parse YAML frontmatter: ${N instanceof Error?N.message:String(N)}`)}if(!$0(c))throw Error("SKILL.md frontmatter must be a YAML mapping.");let g=Object.keys(c).filter((N)=>!tF.has(N)).sort();if(g.length>0)throw Error(`Unexpected frontmatter field${g.length===1?"":"s"}: ${g.join(", ")}.`);let b=nl(c.name,"name",{required:!0,maxLength:Um}),I=iF(b,l),k=nl(c.description,"description",{required:!0,maxLength:rF}),T=nl(c.license,"license"),E=nl(c.compatibility,"compatibility",{maxLength:sF});if(c.compatibility!==void 0&&!E)throw Error("Frontmatter field 'compatibility' cannot be empty.");let A=nl(c["allowed-tools"],"allowed-tools"),C=nF(c.metadata);return{metadata:{name:I,description:k,...T!==void 0?{license:T}:{},...E!==void 0?{compatibility:E}:{},...C!==void 0?{metadata:C}:{},...A!==void 0?{"allowed-tools":A}:{}},instructions:u[2].trim(),frontmatter:c}}var lp="https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",Mv="https://agent-plugins.org/schemas/1.0.0/mcp.schema.json",pF=new Set(["$schema","name","version","description","author","homepage","repository","license","keywords","extensions"]),mF=new Set(["name","email","url"]),hF=/^(?!.*(?:--|\.\.))[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?$/,dp="${PLUGIN_ROOT}",up="${PLUGIN_DATA}";function rn(i){return typeof i==="object"&&i!==null&&!Array.isArray(i)}function Fm(i,l){let u=F0(i,l);return u===""||!u.startsWith("..")&&!U0(u)}function St(i){return i instanceof Error?i.message:String(i)}function Pf(i){let l=i?.code;return l==="ENOENT"||l==="ENOTDIR"}function dt(i){return{level:i.level??"error",...i}}async function qm(i){let l=await Rf(i);if(!(await Gl(l)).isDirectory())throw Error("expected a directory");return l}async function Ml(i,l,u){let c=await Rf(l);if(!Fm(i,c))throw Error(`path resolves outside the plugin root: ${l}`);let g=await Gl(c);if(!(u==="file"?g.isFile():g.isDirectory()))throw Error(`expected a regular ${u}: ${l}`);return c}async function Nv(i,l){let u=wn(l);if(!Fm(i,u))throw Error(`path resolves outside its permitted root: ${l}`);let c=u;while(!0)try{let g=await Rf(c),b=wn(g,F0(c,u));if(!Fm(i,b))throw Error(`path resolves outside its permitted root: ${l}`);return b}catch(g){if(!Pf(g))throw g;let b=cF(c);if(b===c)throw g;c=b}}async function Ov(i){try{return await Gl(i),!0}catch(l){if(Pf(l))return!1;throw l}}async function Ru(i){try{return await aF(i),!0}catch(l){if(Pf(l))return!1;throw l}}async function fF(i){let l;try{l=await qm(i)}catch{return[]}let u=[],c;try{c=await D0(l,{withFileTypes:!0})}catch{return[]}for(let g of c){let b=js(l,g.name),I;try{I=await qm(b)}catch{continue}let k=!1;try{k=await Ru(js(I,Gt))}catch{continue}if(k)u.push(I)}return u.sort((g,b)=>g.localeCompare(b))}async function gF(i,l){let u=wn(i.cwd??process.cwd()),c=[];for(let k of i.pluginPaths??[]){let T=k.trim();if(!T)continue;let E=wn(u,T);try{c.push(await qm(E))}catch(A){l.push(dt({scope:"plugin",pluginPath:E,message:`Cannot load Agent Plugin directory: ${St(A)}`}))}}let g=i.searchPaths??eo();for(let k of g)c.push(...await fF(k));let b=[],I=new Set;for(let k of c)if(!I.has(k))I.add(k),b.push(k);return b}function ol(i,l){let u=i[l];if(u===void 0)return;if(typeof u!=="string")throw Error(`Manifest field '${l}' must be a string.`);return u}function yF(i,l,u){if(!rn(i))throw Error("plugin.json must contain a JSON object.");for(let I of Object.keys(i).filter((k)=>!pF.has(k)).sort())u.push(dt({level:"warning",scope:"manifest",pluginPath:l,message:`Ignoring unknown plugin.json field '${I}'.`}));if(i.$schema!==lp)throw Error(`Unsupported or missing plugin.json $schema; expected '${lp}'.`);if(typeof i.name!=="string")throw Error("Manifest field 'name' must be a string.");if(i.name.length<1||i.name.length>64||!hF.test(i.name))throw Error("Manifest field 'name' must be 1-64 lowercase alphanumeric, hyphen, or period characters; it must start and end alphanumeric and cannot contain '--' or '..'.");let c;if(i.author!==void 0){if(!rn(i.author))throw Error("Manifest field 'author' must be an object.");let I=Object.keys(i.author).filter((k)=>!mF.has(k));if(I.length>0)throw Error(`Manifest author contains unknown field '${I.sort()[0]}'.`);for(let[k,T]of Object.entries(i.author))if(typeof T!=="string")throw Error(`Manifest author field '${k}' must be a string.`);c=i.author}let g;if(i.keywords!==void 0){if(!Array.isArray(i.keywords)||!i.keywords.every((I)=>typeof I==="string"))throw Error("Manifest field 'keywords' must be an array of strings.");g=[...i.keywords]}let b;if(i.extensions!==void 0)if(rn(i.extensions))b={...i.extensions};else u.push(dt({level:"warning",scope:"manifest",pluginPath:l,pluginName:i.name,message:"Ignoring non-object plugin.json 'extensions' field."}));return{$schema:lp,name:i.name,...ol(i,"version")!==void 0?{version:i.version}:{},...ol(i,"description")!==void 0?{description:i.description}:{},...c?{author:c}:{},...ol(i,"homepage")!==void 0?{homepage:i.homepage}:{},...ol(i,"repository")!==void 0?{repository:i.repository}:{},...ol(i,"license")!==void 0?{license:i.license}:{},...g?{keywords:g}:{},...b?{extensions:b}:{}}}async function vF(i,l){let u=js(i,Gt),c=await Ml(i,u,"file"),g;try{g=JSON.parse(await xf(c,"utf8"))}catch(b){throw Error(`Invalid plugin.json: ${St(b)}`)}return{manifestPath:c,manifest:yF(g,i,l)}}async function wF(i,l,u){let c=js(i,Ze),g;try{g=await Ru(c)}catch(T){return u.push(dt({scope:"skills",pluginPath:i,pluginName:l,componentPath:c,message:`Cannot inspect Agent Plugin skills component: ${St(T)}`})),[]}if(!g)return[];let b;try{b=await Ml(i,c,"directory")}catch(T){return u.push(dt({scope:"skills",pluginPath:i,pluginName:l,componentPath:c,message:`Invalid Agent Plugin skills component: ${St(T)}`})),[]}let I=[],k;try{k=await D0(b,{withFileTypes:!0})}catch(T){return u.push(dt({scope:"skills",pluginPath:i,pluginName:l,componentPath:b,message:`Cannot read Agent Plugin skills component: ${St(T)}`})),[]}for(let T of k.sort((E,A)=>E.name.localeCompare(A.name))){let E=js(b,T.name),A;try{A=await Ml(i,E,"directory")}catch(L){if(T.isSymbolicLink())u.push(dt({scope:"skill",pluginPath:i,pluginName:l,componentPath:E,componentName:T.name,message:`Skipping invalid Agent Plugin skill directory '${T.name}': ${St(L)}`}));continue}let C=js(A,"SKILL.md"),N;try{N=await Ru(C)}catch(L){u.push(dt({scope:"skill",pluginPath:i,pluginName:l,componentPath:C,componentName:T.name,message:`Cannot inspect Agent Plugin skill '${T.name}': ${St(L)}`}));continue}if(!N)continue;let O;try{O=await Ml(i,C,"file")}catch(L){u.push(dt({scope:"skill",pluginPath:i,pluginName:l,componentPath:C,componentName:T.name,message:`Skipping invalid Agent Plugin skill '${T.name}': ${St(L)}`}));continue}try{let L=L0(await xf(O,"utf8"),T.name);I.push({pluginName:l,pluginRoot:i,directoryPath:A,filePath:O,metadata:L.metadata})}catch(L){u.push(dt({scope:"skill",pluginPath:i,pluginName:l,componentPath:O,componentName:T.name,message:`Skipping invalid Agent Plugin skill '${T.name}': ${St(L)}`}))}}return I}function Mf(i,l,u){let c=Object.keys(i).filter((g)=>!l.has(g)).sort();if(c.length>0)throw Error(`${u} contains unknown field '${c[0]}'.`)}function bF(i,l){if(i===void 0)return;if(!Array.isArray(i)||!i.every((u)=>typeof u==="string"))throw Error(`MCP field '${l}' must be an array of strings.`);return[...i]}function q0(i,l){if(i===void 0)return;if(!rn(i)||!Object.values(i).every((u)=>typeof u==="string"))throw Error(`MCP field '${l}' must be an object of strings.`);return i}function cp(i,l,u){return i.replace(/\$\{PLUGIN_(ROOT|DATA)\}/g,(c,g)=>g==="ROOT"?l:u)}function IF(i,l,u){let c=oF("sha256").update(u).digest("hex").slice(0,12);return js(i,`${l}-${c}`)}function kF(i,l,u){let c={...i};if(process.platform==="win32")for(let g of Object.keys(c)){let b=g.toUpperCase();if(b==="PLUGIN_ROOT"||b==="PLUGIN_DATA")delete c[g]}return c.PLUGIN_ROOT=l,c.PLUGIN_DATA=u,c}async function SF(i){if(Mf(i.server,new Set(["type","command","args","env","cwd"]),"stdio MCP server"),typeof i.server.command!=="string"||!i.server.command)throw Error("stdio MCP server requires a non-empty 'command'.");let l;if(i.server.command.startsWith("./")){if(l=await Nv(i.pluginRoot,wn(i.pluginRoot,i.server.command)),await Ov(l)){if(!(await Gl(l)).isFile())throw Error("stdio MCP 'command' must resolve to a regular file.")}}else{if(U0(i.server.command)||/[\s/\\\0]/u.test(i.server.command))throw Error("stdio MCP 'command' must be one bare executable token or a plugin-relative path beginning with './'.");l=i.server.command}let u=bF(i.server.args,"args")?.map((k)=>cp(k,i.pluginRoot,i.pluginDataPath)),c=q0(i.server.env,"env")??{};for(let k of Object.keys(c))if(process.platform==="win32"?k.toUpperCase()==="PLUGIN_ROOT"||k.toUpperCase()==="PLUGIN_DATA":k==="PLUGIN_ROOT"||k==="PLUGIN_DATA")throw Error(`stdio MCP env cannot configure reserved key '${k}'.`);let g=Object.fromEntries(Object.entries(c).map(([k,T])=>[k,cp(T,i.pluginRoot,i.pluginDataPath)])),b=kF(g,i.pluginRoot,i.pluginDataPath),I=i.pluginRoot;if(i.server.cwd!==void 0){if(typeof i.server.cwd!=="string")throw Error("stdio MCP field 'cwd' must be a string.");let k;if(i.server.cwd.startsWith("./"))k=i.pluginRoot;else if(i.server.cwd===dp||i.server.cwd.startsWith(`${dp}/`))k=i.pluginRoot;else if(i.server.cwd===up||i.server.cwd.startsWith(`${up}/`))k=i.pluginDataPath;else throw Error(`stdio MCP 'cwd' must begin with './', '${dp}', or '${up}'.`);let T=cp(i.server.cwd,i.pluginRoot,i.pluginDataPath);if(I=await Nv(k,i.server.cwd.startsWith("./")?wn(i.pluginRoot,T):T),await Ov(I)&&!(await Gl(I)).isDirectory())throw Error("stdio MCP 'cwd' must resolve to a directory.")}return{type:"stdio",command:l,...u?{args:u}:{},cwd:I,env:b}}function TF(i){let l=i.replace(/^\[|\]$/g,"").toLowerCase();if(l==="localhost"||l==="::1")return!0;if(uF(l)===4)return l.split(".")[0]==="127";return!1}function _F(i,l){if(Mf(i,new Set(["type","url","headers"]),`${l} MCP server`),typeof i.url!=="string"||!i.url)throw Error(`${l} MCP server requires a non-empty 'url'.`);let u;try{u=new URL(i.url)}catch{throw Error(`${l} MCP 'url' must be an absolute HTTP(S) URL.`)}if(u.protocol!=="http:"&&u.protocol!=="https:"||u.username||u.password||u.hash)throw Error(`${l} MCP 'url' must be HTTP(S) without user information or a fragment.`);if(u.protocol!=="https:"&&!TF(u.hostname))throw Error(`${l} MCP endpoints must use HTTPS unless loopback.`);let c=q0(i.headers,"headers"),g=new Set;for(let[b,I]of Object.entries(c??{})){let k=b.toLowerCase();if(g.has(k))throw Error(`Duplicate case-insensitive MCP header '${b}'.`);g.add(k);try{lF(b),dF(b,I)}catch(T){throw Error(`Invalid MCP header '${b}': ${St(T)}`)}}return l==="sse"?{type:"sse",url:u.toString(),...c?{headers:c}:{}}:{type:"streamableHttp",url:u.toString(),...c?{headers:c}:{}}}async function EF(i){let l=js(i.pluginRoot,"mcp.json"),u;try{u=await Ru(l)}catch(k){return i.diagnostics.push(dt({scope:"mcp",pluginPath:i.pluginRoot,pluginName:i.pluginName,componentPath:l,message:`Cannot inspect Agent Plugin MCP component: ${St(k)}`})),[]}if(!u)return[];let c;try{c=await Ml(i.pluginRoot,l,"file")}catch(k){return i.diagnostics.push(dt({scope:"mcp",pluginPath:i.pluginRoot,pluginName:i.pluginName,componentPath:l,message:`Invalid Agent Plugin MCP component: ${St(k)}`})),[]}let g;try{g=JSON.parse(await xf(c,"utf8"))}catch(k){return i.diagnostics.push(dt({scope:"mcp",pluginPath:i.pluginRoot,pluginName:i.pluginName,componentPath:c,message:`Invalid mcp.json: ${St(k)}`})),[]}if(!rn(g))return i.diagnostics.push(dt({scope:"mcp",pluginPath:i.pluginRoot,pluginName:i.pluginName,componentPath:c,message:"mcp.json must contain a JSON object."})),[];try{if(Mf(g,new Set(["$schema","mcpServers"]),"mcp.json"),g.$schema!==Mv)throw Error(`Unsupported or mismatched mcp.json $schema; expected '${Mv}'.`);if(!rn(g.mcpServers))throw Error("mcp.json field 'mcpServers' must be an object.")}catch(k){return i.diagnostics.push(dt({scope:"mcp",pluginPath:i.pluginRoot,pluginName:i.pluginName,componentPath:c,message:`Invalid Agent Plugin MCP component: ${St(k)}`})),[]}let b=IF(i.pluginDataRoot,i.pluginName,i.pluginRoot),I=[];for(let[k,T]of Object.entries(g.mcpServers).sort(([E],[A])=>E.localeCompare(A)))try{if(!rn(T))throw Error("server configuration must be an object.");if(T.type!=="stdio"&&T.type!=="streamable-http"&&T.type!=="sse")throw Error("server has an unsupported or missing transport type.");let E,A;if(T.type==="stdio")A=b,E=await SF({server:T,pluginRoot:i.pluginRoot,pluginDataPath:A});else E=_F(T,T.type);let C={name:`${i.pluginName}.${k}`,transport:E,metadata:{source:"agent-plugin",pluginName:i.pluginName,pluginPath:i.pluginRoot,serverName:k,...A?{pluginDataPath:A}:{}}};I.push({pluginName:i.pluginName,pluginRoot:i.pluginRoot,...A?{pluginDataPath:A}:{},serverName:k,registration:C})}catch(E){i.diagnostics.push(dt({scope:"mcp-server",pluginPath:i.pluginRoot,pluginName:i.pluginName,componentPath:c,componentName:k,message:`Skipping invalid Agent Plugin MCP server '${k}': ${St(E)}`}))}return I}async function AF(i,l){let u;try{u=await vF(i,l)}catch(b){l.push(dt({scope:"manifest",pluginPath:i,componentPath:js(i,Gt),message:`Rejecting Agent Plugin: ${St(b)}`}));return}let{manifest:c,manifestPath:g}=u;return{rootPath:i,manifestPath:g,manifest:c}}async function CF(i,l,u){let{rootPath:c,manifest:g}=i,[b,I]=await Promise.all([wF(c,g.name,u),EF({pluginRoot:c,pluginName:g.name,pluginDataRoot:l,diagnostics:u})]);return{...i,skills:b,mcpServers:I}}async function j0(i={}){let l=[],u=await gF(i,l),c=wn(i.pluginDataRoot??js(Z(),"agent-plugins")),g=new Set((i.disabledPluginNames??[]).map((E)=>E.trim()).filter(Boolean)),b=[],I=new Map;for(let E of u){let A=await AF(E,l);if(!A)continue;let C=A.manifest.name,N=I.get(C);if(N){l.push(dt({level:"warning",scope:"plugin",pluginPath:E,pluginName:C,message:`Ignoring duplicate Agent Plugin '${C}'; '${N}' has precedence.`}));continue}if(I.set(C,E),g.has(C))continue;b.push(await CF(A,c,l))}let k=[],T=new Set;for(let E of b)for(let A of E.mcpServers){if(T.has(A.registration.name)){l.push(dt({scope:"mcp-server",pluginPath:E.rootPath,pluginName:E.manifest.name,componentName:A.serverName,message:`Skipping duplicate Agent Plugin MCP runtime name '${A.registration.name}'.`}));continue}T.add(A.registration.name),k.push(A)}return{plugins:b,skills:b.flatMap((E)=>E.skills),mcpServers:k,diagnostics:l}}function OF(i){return Object.fromEntries(Object.entries(i).map(([l,u])=>[l,{...u}]))}function $F(i){if(i.baseUrl.length===0)return!1;switch(i.client){case"openai-compatible":case"openai":case"openai-r1":case"fetch":return!0;default:return i.protocol==="openai-chat"}}var LF=Object.values(Oe).map((i)=>({id:i.provider.id,baseUrl:i.provider.baseUrl??"",modelsSourceUrl:i.provider.modelsSourceUrl,modelId:i.provider.defaultModelId,knownModels:OF(i.models),capabilities:i.provider.capabilities?[...i.provider.capabilities]:void 0,env:i.provider.env?[...i.provider.env]:void 0,client:i.provider.client,protocol:i.provider.protocol})),DF=Object.fromEntries(LF.map((i)=>[i.id,i]));function UF(){return Object.fromEntries(Object.entries(DF).filter(([,i])=>$F(i)))}function FF(i=[]){let l=i.flatMap((u)=>{switch(u){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[u];default:return[]}});return l.length>0?l:void 0}var qF="https://models.dev/api.json",jF=600000,BF=5000,Dv=new Map,mp=new Map;async function HF(i,l){let u=Object.assign((...c)=>{let[g,b]=c,I=AbortSignal.timeout(BF),k=b?.signal?AbortSignal.any([b.signal,I]):I;return globalThis.fetch(g,{...b,signal:k})},globalThis.fetch);return da(i,u,{includeClineCloudModels:l})}async function zF(i={}){let l=i.url??qF,u=i.cacheTtlMs??jF,c=i.includeClineCloudModels===!0,g=`${l}\x00cloud=${c}`,b=Date.now(),I=Dv.get(g);if(I&&I.expiresAt>b)return I.data;let k=mp.get(g);if(k)return k;let T=HF(l,c).then((E)=>(Dv.set(g,{data:E,expiresAt:b+u}),E)).finally(()=>{mp.delete(g)});return mp.set(g,T),T}function WF(i){return Object.fromEntries(Object.entries(i).map(([l,u])=>[l,{baseUrl:u.baseUrl,modelId:u.modelId,capabilities:FF(u.capabilities)}]))}var KF=WF(UF()),Uv=Dt,GF=K,Fv=e().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),XF=s(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),JF=s(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),VF=t({apiKey:e().optional(),accessToken:e().optional(),refreshToken:e().optional(),expiresAt:n().int().positive().optional(),accountId:e().optional(),organizationId:e().optional(),organizationName:e().optional(),memberId:e().optional(),metadata:d(e(),m()).optional()}),YF=t({enabled:r().optional(),effort:Zt.optional(),budgetTokens:n().int().positive().optional()}),QF=t({accessKey:e().optional(),secretKey:e().optional(),sessionToken:e().optional(),region:e().optional(),profile:e().optional(),authentication:s(["iam","api-key","apikey","profile"]).optional(),usePromptCache:r().optional(),useCrossRegionInference:r().optional(),useGlobalInference:r().optional(),endpoint:e().url().optional(),customModelBaseId:e().optional()}),ZF=t({projectId:e().optional(),region:e().optional()}),eq=t({apiVersion:e().optional(),useIdentity:r().optional()}),tq=t({clientId:e().optional(),clientSecret:e().optional(),tokenUrl:e().url().optional(),resourceGroup:e().optional(),deploymentId:e().optional(),useOrchestrationMode:r().optional(),api:s(["orchestration","foundation-models"]).optional(),defaultSettings:d(e(),m()).optional()}),rq=t({mode:s(["internal","external"]).optional(),usePromptCache:r().optional()}),sq=t({loadLatestOnInit:r().optional(),includeClineCloudModels:r().optional(),loadPrivateOnAuth:r().optional(),url:e().url().optional(),cacheTtlMs:n().int().positive().optional(),failOnError:r().optional()}),B0=t({provider:Fv,apiKey:e().optional(),auth:VF.optional(),model:e().optional(),protocol:XF.optional(),client:JF.optional(),routingProviderId:Fv.optional(),maxTokens:n().int().positive().optional(),contextWindow:n().int().positive().optional(),baseUrl:e().url().optional(),headers:d(e(),e()).optional(),timeout:n().int().positive().optional(),reasoning:YF.optional(),aws:QF.optional(),gcp:ZF.optional(),azure:eq.optional(),sap:tq.optional(),oca:rq.optional(),region:e().optional(),apiLine:s(["china","international"]).optional(),capabilities:o(s(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:sq.optional()});function iq(i){return i.protocol==="openai-responses"||i.client==="openai"}function Bm(i,l={}){let u=i.provider,c=GF(u),g=l.includeKnownModels!==!1,b=i.reasoning?.effort||"none",I=b==="none"?void 0:b,k=KF[c],T=ha(c),E=Object.keys(T)[0],A=DM(c,i),C=i.baseUrl??ga(c,i.apiLine)??(c==="oca"?i.oca?.mode==="internal"?Bk:Hk:k?.baseUrl),N=i.routingProviderId??(iq(i)&&c!==Uv.OPENAI_NATIVE?Uv.OPENAI_NATIVE:void 0),O=g?k?.knownModels??(Object.keys(T).length>0?T:void 0):void 0,L={providerId:u,clientType:i.client,routingProviderId:N,modelId:i.model??k?.modelId??E??"default",...g?{knownModels:O}:{},apiKey:A,accessToken:i.auth?.accessToken,refreshToken:i.auth?.refreshToken,accountId:i.auth?.accountId,baseUrl:C,headers:i.headers,timeoutMs:i.timeout,maxOutputTokens:i.maxTokens,maxInputTokens:i.contextWindow,thinking:i.reasoning?.enabled,reasoningEffort:I,thinkingBudgetTokens:i.reasoning?.budgetTokens,region:i.region??i.aws?.region??i.gcp?.region,apiLine:i.apiLine,useCrossRegionInference:i.aws?.useCrossRegionInference,useGlobalInference:i.aws?.useGlobalInference,aws:i.aws?{accessKey:i.aws.accessKey,secretKey:i.aws.secretKey,sessionToken:i.aws.sessionToken,authentication:i.aws.authentication,profile:i.aws.profile,usePromptCache:i.aws.usePromptCache,endpoint:i.aws.endpoint,customModelBaseId:i.aws.customModelBaseId}:void 0,gcp:i.gcp?{projectId:i.gcp.projectId,region:i.gcp.region}:void 0,azure:i.azure,sap:i.sap,oca:i.oca,capabilities:i.capabilities??k?.capabilities,modelCatalog:i.modelCatalog?{loadLatestOnInit:i.modelCatalog.loadLatestOnInit,includeClineCloudModels:i.modelCatalog.includeClineCloudModels,loadPrivateOnAuth:i.modelCatalog.loadPrivateOnAuth,url:i.modelCatalog.url,cacheTtlMs:i.modelCatalog.cacheTtlMs,failOnError:i.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(L).filter(([D,U])=>U!==void 0))}var Hm=B0,H0=t({providerId:e().min(1),modelId:e().min(1)}),nq=t({voiceInput:H0.optional()}),oq=t({bedrockProfile:r().optional()}),aq=t({settings:B0,updatedAt:e().datetime(),tokenSource:s(["manual","oauth","migration"]).default("manual")}),qv=t({version:a(1),lastUsedProvider:e().min(1).optional(),modes:nq.default({}),repairs:oq.optional(),providers:d(e(),aq)});function zm(){return{version:1,modes:{},providers:{}}}var hp=n().finite().positive().optional().catch(void 0),al=n().finite().nonnegative().optional().catch(void 0),fq=t({id:e().optional(),name:e().optional(),maxTokens:hp,contextWindow:hp,maxInputTokens:hp,capabilities:o(ho).optional(),supportsVision:r().optional(),supportsAttachments:r().optional(),supportsReasoning:r().optional(),operation:fo.optional(),operationModes:o(yo).optional(),modalities:go.optional(),inputPrice:al,outputPrice:al,cacheReadsPrice:al,cacheWritesPrice:al,temperature:al,apiFormat:mo.optional()}).passthrough(),gq=t({name:e(),baseUrl:e(),defaultModelId:e().optional(),protocol:fr.optional(),client:yr.optional(),capabilities:o(gr).optional(),modelsSourceUrl:e().optional()}).passthrough(),W0=t({provider:gq.optional(),models:d(e(),fq).optional(),discoveredModelIds:o(e()).optional()}).passthrough(),yq=t({version:a(1),providers:d(e(),W0)}),vq=t({version:a(1),providers:d(e(),m())}),jv=new Set,K0={apiKeyOptional:!0};function G0(i){return i.split(/[-_]/).filter(Boolean).map((l)=>l.charAt(0).toUpperCase()+l.slice(1)).join(" ")}function wq(i){return hq(z0(i.getFilePath()),"models.json")}function Wm(){return{version:1,providers:{}}}function bq(i){let l=vq.safeParse(i);if(!l.success)return lt("models.json content is not a valid models file envelope; starting from an empty registry"),Wm();let u={};for(let[c,g]of Object.entries(l.data.providers)){let b=W0.safeParse(g);if(b.success)u[c]=b.data;else lt(`models.json: dropping invalid entry for provider=${c}`)}return{version:1,providers:u}}function X0(i){if(!lq(i))return Wm();try{let l=uq(i,"utf8");return bq(JSON.parse(l))}catch{lt(`models.json at ${i} exists but is unreadable or invalid JSON; treating as an empty registry`)}return Wm()}function Iq(i,l){dq(z0(i),{recursive:!0});let u=yq.parse(l),c=`${i}.${process.pid}.tmp`;try{mq(c,`${JSON.stringify(u,null,2)}
585
+ `,"utf8"),cq(c,i)}catch(g){throw pq(c,{force:!0}),g}}function J0(i){if(!i||i.length===0)return;let l=new Set;if(i.includes("reasoning"))l.add("reasoning");if(i.includes("prompt-cache"))l.add("prompt-cache");if(i.includes("tools"))l.add("tools");return l.size>0?[...l]:void 0}function V0(i){let l=new Set;if(!i||i.length===0)return[...l];if(i.includes("streaming"))l.add("streaming");if(i.includes("tools"))l.add("tools");if(i.includes("reasoning"))l.add("reasoning");if(i.includes("prompt-cache"))l.add("prompt-cache");if(i.includes("vision"))l.add("images"),l.add("files");return[...l]}function kq(i){return i!=null&&typeof i.name==="string"&&typeof i.baseUrl==="string"}function Y0(i,l){return i??l??"openai-chat"}function Q0(i,l,u){return i??u??(l==="openai-responses"?"openai":"openai-compatible")}function Z0(i,l,u,c=!1){let g=new Set(l?.capabilities??u??[]);if(l?.supportsVision!==void 0)if(l.supportsVision)g.add("images");else g.delete("images");if(l?.supportsAttachments!==void 0)if(l.supportsAttachments)g.add("files");else g.delete("files");if(l?.supportsReasoning!==void 0)if(l.supportsReasoning)g.add("reasoning");else g.delete("reasoning");if(!c&&g.size>0&&(l?.operation===void 0||l.operation==="language"))g.add("tools");let b=l?.apiFormat,I=l?.inputPrice!==void 0||l?.outputPrice!==void 0||l?.cacheReadsPrice!==void 0||l?.cacheWritesPrice!==void 0;return{id:i,name:l?.name??i,...l?.maxTokens!==void 0?{maxTokens:l.maxTokens}:{},...l?.contextWindow!==void 0?{contextWindow:l.contextWindow}:{},...l?.maxInputTokens!==void 0?{maxInputTokens:l.maxInputTokens}:{},...g.size>0?{capabilities:[...g]}:{},...l?.temperature!==void 0?{temperature:l.temperature}:{},...b!==void 0?{apiFormat:b}:{},...l?.operation!==void 0?{operation:l.operation}:{},...l?.operationModes!==void 0?{operationModes:l.operationModes}:{},...l?.modalities!==void 0?{modalities:l.modalities}:{},...I?{pricing:{...l?.inputPrice!==void 0?{input:l.inputPrice}:{},...l?.outputPrice!==void 0?{output:l.outputPrice}:{},...l?.cacheReadsPrice!==void 0?{cacheRead:l.cacheReadsPrice}:{},...l?.cacheWritesPrice!==void 0?{cacheWrite:l.cacheWritesPrice}:{}}}:{}}}function Sq(i,l){let u=eT(i);for(let[c,g]of Object.entries(l??{})){let b=g.id?.trim()||c.trim();if(!b)continue;let I=u[b]?.capabilities,k=I&&g.capabilities?{...g,capabilities:[...new Set([...I,...g.capabilities])]}:g;pn(i,b,Z0(b,k,I,I!==void 0))}}function Tq(i,l,u){return{...l??{},id:i,name:l?.name??i,capabilities:l?.capabilities??u}}function eT(i){return Object.assign({},...bi(i).map((l)=>st(l)))}function _q(i){let l=i.provider.trim();if(!l||vi(l))return;let u=i.baseUrl?.trim();if(!u)return;let c=Oe[l],g=eT(l),b=V0(i.capabilities),I=b.length>0?b:void 0,k=i.model?.trim(),T={...g,...c?.models??{}};if(k)T[k]=Tq(k,T[k],I);let E=Object.keys(T).filter(Boolean),A=k||E[0];if(!A)return;let C=Y0(i.protocol,c?.provider.protocol),N=Q0(i.client,C,c?.provider.client);Lt({provider:{id:l,name:c?.provider.name??G0(l),description:c?.provider.description,protocol:C,client:N,baseUrl:u,modelsSourceUrl:c?.provider.modelsSourceUrl,defaultModelId:A,capabilities:J0(i.capabilities)??c?.provider.capabilities,source:"file",metadata:K0},models:T})}function fp(i){for(let l of Object.values(i.providers))_q(l.settings)}function Eq(i,l){let u=l.models??{};if(!kq(l.provider)){Sq(i,u);return}let c=V0(l.provider.capabilities),g=Object.entries(u).map(([E,A])=>({id:A.id?.trim()||E.trim(),model:A})).filter(({id:E})=>E.length>0),b=l.provider.defaultModelId?.trim()||g[0]?.id||"default",I=Y0(l.provider.protocol,void 0),k=Q0(l.provider.client,I,void 0),T=Object.fromEntries(g.map(({id:E,model:A})=>[E,{...Z0(E,A,c.length>0?c:void 0),status:"active"}]));Lt({provider:{id:i,name:l.provider.name.trim()||G0(i),protocol:I,client:k,baseUrl:l.provider.baseUrl,modelsSourceUrl:l.provider.modelsSourceUrl,defaultModelId:b,capabilities:J0(l.provider.capabilities),source:"file",metadata:K0},models:T})}function Aq(i){let l=wq(i);if(jv.has(l))return;let u=X0(l);for(let[c,g]of Object.entries(u.providers))Eq(c,g);jv.add(l)}var Pu="openai",Pq="openai-compatible",Mq=128000;function tT(i){let l=i?.trim();if(!l)return;try{let u=JSON.parse(l);if(!u)return;let c=typeof u.expiresAt==="number"&&Number.isFinite(u.expiresAt)?u.expiresAt<10000000000?u.expiresAt*1000:u.expiresAt:void 0;return{accessToken:u.idToken,refreshToken:u.refreshToken,expiresAt:c,accountId:u.userInfo?.id}}catch{return}}function ie(i){let l=i?.trim();return l?l:void 0}function Nq(i){return i==="credentials"?"iam":i}function Bv(i){if(!Cq(i))return;try{let l=xq(i,"utf8"),u=JSON.parse(l);if(u&&typeof u==="object"&&!Array.isArray(u))return u}catch{}return}function Oq(i){let l=i.dataDir??Z(),u=i.globalStatePath??Km(l,"globalState.json"),c=i.secretsPath??Km(l,"secrets.json"),g=Bv(u),b=Bv(c);if(!g&&!b)return;return{globalState:g??{},secrets:b??{}}}function Gm(i){return K(i)}function Mu(i){if(i===Pu)return i;return K(i)}function $q(i,l,u,c){let g=u==="plan"?"planMode":"actMode",b=l===c?ie(u==="plan"?i.planModeApiModelId:i.actModeApiModelId):void 0,I={openrouter:`${g}OpenRouterModelId`,cline:`${g}ClineModelId`,openai:`${g}OpenAiModelId`,ollama:`${g}OllamaModelId`,lmstudio:`${g}LmStudioModelId`,litellm:`${g}LiteLlmModelId`,requesty:`${g}RequestyModelId`,together:`${g}TogetherModelId`,fireworks:`${g}FireworksModelId`,sapaicore:`${g}SapAiCoreModelId`,groq:`${g}GroqModelId`,baseten:`${g}BasetenModelId`,huggingface:`${g}HuggingFaceModelId`,"huawei-cloud-maas":`${g}HuaweiCloudMaasModelId`,oca:`${g}OcaModelId`,aihubmix:`${g}AihubmixModelId`,hicap:`${g}HicapModelId`,nousResearch:`${g}NousResearchModelId`,"vercel-ai-gateway":`${g}VercelAiGatewayModelId`}[l];return(I?ie(typeof i[I]==="string"?i[I]:void 0):void 0)??b}function Lq(i,l,u){let c=u==="plan"?i.planModeThinkingBudgetTokens:i.actModeThinkingBudgetTokens,g=[...l==="oca"?[i.actModeOcaReasoningEffort,i.planModeOcaReasoningEffort]:[],...l==="gemini"?[i.geminiActModeThinkingLevel,i.geminiPlanModeThinkingLevel]:[],i.actModeReasoningEffort,i.planModeReasoningEffort].map(ie).find(Boolean),b=Zt.safeParse(g),I=b.success?b.data:void 0,k=typeof c==="number"&&Number.isInteger(c)&&c>0?c:void 0;if(!I&&k===void 0)return;return{...I?{effort:I}:{},...k!==void 0?{budgetTokens:k}:{}}}function Dq(i){let l=i["openai-codex-oauth-credentials"];if(!l)return;try{let u=JSON.parse(l),c=ie(u.access_token),g=ie(u.refresh_token),b=ie(u.accountId);if(!c&&!g&&!b)return;return{...c?{apiKey:c}:{},auth:{...c?{accessToken:c}:{},...g?{refreshToken:g}:{},...b?{accountId:b}:{}}}}catch{return}}function Uq(i){let l=st(i),u=rt(i),c=u?.provider.defaultModelId;if(c&&(l[c]||u?.models?.[c]))return c;return Object.keys(l)[0]??void 0}function Fq(i,l){if(!l||i!=="cline")return l;let u=rt(i)?.models;if(!u)return l;if(u[l])return l;for(let c of mt){if(!l.startsWith(c.aliasPrefix))continue;let g=`${c.canonicalPrefix}${l.slice(c.aliasPrefix.length)}`;if(u[g])return g}return}function qq(i,l,u,c){let g=Gm(i),b=ie(c==="plan"?l.planModeApiProvider:l.actModeApiProvider),I=b?Mu(b):void 0,k=Fq(g,$q(l,i,c,I))??Uq(g),T=Lq(l,g,c),E=typeof l.requestTimeoutMs==="number"&&Number.isInteger(l.requestTimeoutMs)&&l.requestTimeoutMs>0?l.requestTimeoutMs:void 0,A={anthropic:u.apiKey,cline:u.clineApiKey,openai:u.openAiApiKey,"openai-native":u.openAiNativeApiKey,openrouter:u.openRouterApiKey,bedrock:u.awsBedrockApiKey,gemini:u.geminiApiKey,ollama:u.ollamaApiKey,deepseek:u.deepSeekApiKey,requesty:u.requestyApiKey,together:u.togetherApiKey,fireworks:u.fireworksApiKey,qwen:u.qwenApiKey,doubao:u.doubaoApiKey,mistral:u.mistralApiKey,litellm:u.liteLlmApiKey,asksage:u.asksageApiKey,xai:u.xaiApiKey,moonshot:u.moonshotApiKey,zai:u.zaiApiKey,huggingface:u.huggingFaceApiKey,nebius:u.nebiusApiKey,sambanova:u.sambanovaApiKey,cerebras:u.cerebrasApiKey,groq:u.groqApiKey,"huawei-cloud-maas":u.huaweiCloudMaasApiKey,baseten:u.basetenApiKey,"vercel-ai-gateway":u.vercelAiGatewayApiKey,dify:u.difyApiKey,minimax:u.minimaxApiKey,hicap:u.hicapApiKey,aihubmix:u.aihubmixApiKey,nousResearch:u.nousResearchApiKey,oca:u.ocaApiKey},C={};if(i==="openai-codex")Object.assign(C,Dq(u));if(i==="cline")try{let F=ie(u["cline:clineAccountId"]);if(F)C.auth={...C.auth??{},...tT(F)}}catch{}if(i===Pu&&l.openAiHeaders)C.headers=l.openAiHeaders;if(i==="bedrock"){let F=Nq(l.awsAuthentication),j=ie(l.awsProfile),H=F==="profile"||l.awsUseProfile===!0||F===void 0&&j!==void 0,Q=H&&F===void 0?"profile":F;C.aws={accessKey:ie(u.awsAccessKey),secretKey:ie(u.awsSecretKey),sessionToken:ie(u.awsSessionToken),region:ie(l.awsRegion),authentication:Q,profile:H?j:void 0,usePromptCache:l.awsBedrockUsePromptCache,useCrossRegionInference:l.awsUseCrossRegionInference,useGlobalInference:l.awsUseGlobalInference,endpoint:ie(l.awsBedrockEndpoint),customModelBaseId:ie(c==="plan"?l.planModeAwsBedrockCustomModelBaseId:l.actModeAwsBedrockCustomModelBaseId)}}if(i==="vertex")C.gcp={projectId:ie(l.vertexProjectId),region:ie(l.vertexRegion)};if(i===Pu&&(l.azureApiVersion||l.azureIdentity!==void 0))C.azure={apiVersion:ie(l.azureApiVersion),useIdentity:l.azureIdentity};if(i==="sapaicore"){let F=l.sapAiCoreUseOrchestrationMode??!0;C.sap={clientId:ie(u.sapAiCoreClientId),clientSecret:ie(u.sapAiCoreClientSecret),tokenUrl:ie(l.sapAiCoreTokenUrl),resourceGroup:ie(l.sapAiResourceGroup),deploymentId:F?void 0:ie(c==="plan"?l.planModeSapAiCoreDeploymentId:l.actModeSapAiCoreDeploymentId),useOrchestrationMode:F}}if(i==="oca"){C.oca={mode:l.ocaMode};let F=ie(u.ocaRefreshToken);if(F)C.auth={...C.auth??{},refreshToken:F}}if(i==="qwen")C.apiLine=l.qwenApiLine;if(i==="moonshot")C.apiLine=l.moonshotApiLine;if(i==="zai")C.apiLine=l.zaiApiLine;if(i==="minimax")C.apiLine=l.minimaxApiLine;let N={anthropic:l.anthropicBaseUrl,openai:l.openAiBaseUrl,ollama:l.ollamaBaseUrl,lmstudio:l.lmStudioBaseUrl,litellm:l.liteLlmBaseUrl,gemini:l.geminiBaseUrl,requesty:l.requestyBaseUrl,asksage:l.asksageApiUrl,dify:l.difyBaseUrl,oca:l.ocaBaseUrl,aihubmix:l.aihubmixBaseUrl,sapaicore:l.sapAiCoreBaseUrl},O=ie(A[i]),L=ie(N[i]),D={provider:g,...O?{apiKey:O}:{},...k?{model:k}:{},...L?{baseUrl:L}:{},...T?{reasoning:T}:{},...E?{timeout:E}:{},...C},U=Hm.safeParse(D);if(!U.success)return;return Object.keys(D).filter((F)=>F!=="provider").length>0?U.data:void 0}function ll(i){return typeof i==="number"&&Number.isFinite(i)&&i>0?i:void 0}function jq(i,l,u){if(i!==Pq)return;if(!l.baseUrl||!l.model)return;let c=ll(u?.contextWindow)??Mq,g=ll(u?.maxTokens),b=ll(u?.inputPrice),I=ll(u?.outputPrice),k=ll(u?.temperature),T=["streaming","tools"];if(u?.supportsImages!==!1)T.push("images");if(u?.supportsPromptCache===!0)T.push("prompt-cache");return{provider:{name:"OpenAI Compatible",baseUrl:l.baseUrl,defaultModelId:l.model},models:{[l.model]:{id:l.model,name:l.model,contextWindow:c,maxInputTokens:c,capabilities:T,...g!==void 0?{maxTokens:g}:{},...b!==void 0?{inputPrice:b}:{},...I!==void 0?{outputPrice:I}:{},...k!==void 0?{temperature:k}:{}}}}}function Bq(i,l){let u=new Set;for(let g of[i.actModeApiProvider,i.planModeApiProvider]){let b=ie(g);if(b)u.add(Mu(b))}if(ie(l.apiKey))u.add("anthropic");if(ie(l.openRouterApiKey))u.add("openrouter");if(ie(l.openAiApiKey))u.add(Pu);if(ie(l.openAiNativeApiKey))u.add("openai-native");if(ie(l["openai-codex-oauth-credentials"]))u.add("openai-codex");if(ie(l.geminiApiKey))u.add("gemini");if(ie(l.ollamaApiKey))u.add("ollama");if(ie(l.deepSeekApiKey))u.add("deepseek");if(ie(l.requestyApiKey))u.add("requesty");if(ie(l.togetherApiKey))u.add("together");if(ie(l.fireworksApiKey))u.add("fireworks");if(ie(l.qwenApiKey))u.add("qwen");if(ie(l.doubaoApiKey))u.add("doubao");if(ie(l.mistralApiKey))u.add("mistral");if(ie(l.liteLlmApiKey))u.add("litellm");if(ie(l.asksageApiKey))u.add("asksage");if(ie(l.xaiApiKey))u.add("xai");if(ie(l.moonshotApiKey))u.add("moonshot");if(ie(l.zaiApiKey))u.add("zai");if(ie(l.huggingFaceApiKey))u.add("huggingface");if(ie(l.nebiusApiKey))u.add("nebius");if(ie(l.sambanovaApiKey))u.add("sambanova");if(ie(l.cerebrasApiKey))u.add("cerebras");if(ie(l.groqApiKey))u.add("groq");if(ie(l.huaweiCloudMaasApiKey))u.add("huawei-cloud-maas");if(ie(l.basetenApiKey))u.add("baseten");if(ie(l.vercelAiGatewayApiKey))u.add("vercel-ai-gateway");if(ie(l.difyApiKey))u.add("dify");if(ie(l.minimaxApiKey))u.add("minimax");if(ie(l.hicapApiKey))u.add("hicap");if(ie(l.aihubmixApiKey))u.add("aihubmix");if(ie(l.nousResearchApiKey))u.add("nousResearch");if(ie(l.awsAccessKey)||ie(l.awsBedrockApiKey)||i.awsAuthentication!==void 0||i.awsUseProfile===!0||ie(i.awsProfile))u.add("bedrock");if(ie(i.vertexProjectId)||ie(i.vertexRegion))u.add("vertex");if(ie(l.clineApiKey))u.add("cline");let c=tT(ie(l["cline:clineAccountId"]));if(c?.accessToken||c?.refreshToken||c?.accountId)u.add("cline");if(ie(l.ocaApiKey))u.add("oca");if(ie(l.sapAiCoreClientId)||ie(l.sapAiCoreClientSecret)||ie(i.sapAiCoreTokenUrl)||ie(i.sapAiCoreBaseUrl)||ie(i.sapAiResourceGroup))u.add("sapaicore");return u}function Hq(i,l,u){if(i.repairs?.bedrockProfile)return!1;let c=i.providers.bedrock;if(!c||c.tokenSource!=="migration")return!1;if(l.awsAuthentication!==void 0)return!1;let g=ie(l.awsProfile);if(!g)return!1;let b=c.settings.aws;if(b?.authentication!==void 0||b?.profile!==void 0||b?.accessKey||b?.secretKey||c.settings.apiKey)return!1;return i.providers.bedrock={...c,settings:{...c.settings,aws:{...b??{},authentication:"profile",profile:g}},updatedAt:u},i.repairs={...i.repairs,bedrockProfile:!0},!0}function zq(i){let l=i.providerSettingsManager.read(),u=Oq(i);if(!u)return{migrated:!1,providerCount:Object.keys(l.providers).length,lastUsedProvider:l.lastUsedProvider};let{globalState:c,secrets:g}=u,b=c.mode==="plan"?"plan":"act",I=b==="plan"?"act":"plan",k=ie(b==="plan"?c.planModeApiProvider:c.actModeApiProvider),T=k?Mu(k):void 0,E=ie(b==="plan"?c.actModeApiProvider:c.planModeApiProvider),A=E?Mu(E):void 0,C=Bq(c,g),N=zm();N.providers={...l.providers},N.lastUsedProvider=l.lastUsedProvider,N.modes=l.modes,N.repairs=l.repairs;let O=new Date().toISOString(),L=0,D=Km(Rq(i.providerSettingsManager.getFilePath()),"models.json"),U=X0(D),F=0;for(let z of C){let W=Gm(z);if(N.providers[W])continue;let ee=z!==T&&z===A?I:b,te=qq(z,c,g,ee);if(!te)continue;N.providers[W]={settings:te,updatedAt:O,tokenSource:"migration"},L+=1;let oe=jq(W,te,ee==="plan"?c.planModeOpenAiModelInfo:c.actModeOpenAiModelInfo);if(oe&&!U.providers[W])U.providers[W]=oe,F+=1}let j=Hq(N,c,O);if(L===0&&F===0&&!j)return{migrated:!1,providerCount:Object.keys(l.providers).length,lastUsedProvider:l.lastUsedProvider};let H=ie(b==="plan"?c.planModeApiProvider:c.actModeApiProvider),Q=H?Gm(H):void 0;if(N.lastUsedProvider=l.lastUsedProvider??(Q&&N.providers[Q]?Q:Object.keys(N.providers)[0]),i.providerSettingsManager.write(N),F>0)Iq(D,U);return{migrated:L>0||F>0||j,providerCount:Object.keys(N.providers).length,lastUsedProvider:N.lastUsedProvider}}function Wq(){return new Date().toISOString()}var Kq="cline",Gq="cline-pass",rT=/[\p{Cc}\p{Cf}]/gu;function Yr(i){if(typeof i!=="string")return i;let l=i.replace(rT,"").trim();return l.length>0?l:void 0}function Xq(i){let l={...i,apiKey:Yr(i.apiKey)};if(i.auth)l.auth={...i.auth,apiKey:Yr(i.auth.apiKey),accessToken:Yr(i.auth.accessToken),refreshToken:Yr(i.auth.refreshToken)};if(i.aws)l.aws={...i.aws,accessKey:Yr(i.aws.accessKey),secretKey:Yr(i.aws.secretKey),sessionToken:Yr(i.aws.sessionToken)};if(i.gcp)l.gcp={...i.gcp,projectId:Yr(i.gcp.projectId),region:Yr(i.gcp.region)};if(i.sap)l.sap={...i.sap,clientId:Yr(i.sap.clientId),clientSecret:Yr(i.sap.clientSecret)};if(i.headers)l.headers=Object.fromEntries(Object.entries(i.headers).map(([u,c])=>[u,c.replace(rT,"").trim()]));return l}function Jq(i){if(Lv(i)!=="providers.json")return;let l=jm(i);if(Lv(l)!=="settings")return;return jm(l)}class Sn{filePath;dataDir;constructor(i={}){if(this.filePath=i.filePath??Ya(),this.dataDir=i.dataDir??Jq(this.filePath),this.dataDir||!i.filePath)zq({providerSettingsManager:this,dataDir:this.dataDir});if(Aq(this),fp(this.read()),pp(this.filePath))try{$v(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!pp(this.filePath))return zm();try{let i=RF(this.filePath,"utf8"),l=JSON.parse(i),u=qv.safeParse(l);if(u.success){fp(u.data);let c=u.data.providers.cline?.settings?.auth;return lt(`providers.read providers=[${Object.keys(u.data.providers).join(",")}] lastUsed=${u.data.lastUsedProvider??"none"} clineAuthPresent=${!!c?.accessToken} clineAccessTokenHash=${Us(c?.accessToken)} clineRefreshTokenHash=${Us(c?.refreshToken)}`),u.data}}catch{}return zm()}write(i){let l=qv.parse(i),u=jm(this.filePath);if(!pp(u))xF(u,{recursive:!0,mode:448});let c=`${this.filePath}.${process.pid}.tmp`;try{NF(c,`${JSON.stringify(l,null,2)}
586
+ `,{encoding:"utf8",mode:384}),PF(c,this.filePath)}catch(g){throw MF(c,{force:!0}),g}try{$v(this.filePath,384)}catch{}fp(l)}saveProviderSettings(i,l={}){let u=Xq(Hm.parse(i)),c=this.read(),g=u.provider,b=l.setLastUsed!==!1,I=c.providers[g],k=l.tokenSource??I?.tokenSource??"manual",T={...c,providers:{...c.providers,[g]:{settings:u,updatedAt:Wq(),tokenSource:k}},lastUsedProvider:b?g:c.lastUsedProvider};this.write(T);let E=c.providers.cline?.settings?.auth,A=u.provider==="cline"?u.auth:T.providers.cline?.settings?.auth,C=!!E?.accessToken&&!A?.accessToken;return lt(`providers.save providerId=${g} tokenSource=${k} clineAuthWasPresent=${!!E?.accessToken} clineAuthIsPresent=${!!A?.accessToken} authDropped=${C}`),T}resolveProviderSettings(i,l){let u=i.providers[l]?.settings,c=oi(l)?.storageProviderId;if(!c||c===l)return u;let g=i.providers[c]?.settings;if(!g)return u;return Hm.parse({...g.auth?{auth:g.auth}:{},...g.apiKey?{apiKey:g.apiKey}:{},...g.baseUrl?{baseUrl:g.baseUrl}:{},...u??{},provider:l})}getProviderSettings(i){let l=this.read();return this.resolveProviderSettings(l,i)}getVoiceInputSettings(){return this.read().modes.voiceInput}setVoiceInputSettings(i){let l=this.read();if(i)l.modes.voiceInput=H0.parse(i);else delete l.modes.voiceInput;return this.write(l),l}resolveLastUsedProviderId(i,l){let u=i.lastUsedProvider;if(u===Gq&&l.isClinePassEnabled===!1)return Kq;return u}getLastUsedProviderSettings(i={}){let l=this.read(),u=this.resolveLastUsedProviderId(l,i);if(!u)return;return this.resolveProviderSettings(l,u)}getProviderConfig(i,l){let u=this.getProviderSettings(i);if(!u)return;return Bm(u,l)}getLastUsedProviderConfig(i={}){let l=this.getLastUsedProviderSettings(i);if(!l)return;return Bm(l,i)}async refreshCatalog(){try{await zF({})}catch{}}}async function Zq(i,l,u){let c=Vq("sha256").update(l).digest("hex"),g=V(`${Yq(i)}.oauth-${c}.lock`),b=!1,I=Date.now()+60000;try{g.exec("PRAGMA busy_timeout = 0;");while(!b)try{g.exec("BEGIN EXCLUSIVE;"),b=!0}catch(k){let T=k instanceof Error?k.message:String(k),E=k?.code;if(!(E==="SQLITE_BUSY"||E==="SQLITE_LOCKED"||/SQLITE_BUSY|SQLITE_LOCKED|database is locked/.test(T)))throw k;if(Date.now()>=I)throw Error("Timed out waiting for another process to refresh OAuth credentials.");await Qq(25)}return await u()}finally{try{if(b)g.exec("ROLLBACK;")}finally{g.close?.()}}}function gp(i,l){let u=i?.expiresAt,c=l?.expiresAt;return i?.accessToken===l?.accessToken&&i?.refreshToken===l?.refreshToken&&i?.accountId===l?.accountId&&u===c}class pd extends Error{providerId;constructor(i){super(`OAuth credentials for provider "${i}" are no longer valid. Re-run authentication for this provider.`);this.name="OAuthReauthRequiredError",this.providerId=i}}class gc{providerSettingsManager;telemetry;onCredentialsRefreshed;refreshInFlight=new Map;constructor(i){this.providerSettingsManager=i?.providerSettingsManager??new Sn,this.telemetry=i?.telemetry,this.onCredentialsRefreshed=i?.onCredentialsRefreshed}async resolveProviderApiKey(i){let l=oi(i.providerId);if(!l)return null;return this.resolveWithSingleFlight(l.providerId,l.storageProviderId,i.forceRefresh)}async resolveWithSingleFlight(i,l,u=!1){let c=this.refreshInFlight.get(l);if(c)return c;let g=this.providerSettingsManager.getProviderSettings(l);if(!g||!ay(i,g))return null;let b=g.auth,I=Zq(this.providerSettingsManager.getFilePath(),l,()=>this.resolveProviderApiKeyInternal(i,l,u&&gp(b,this.providerSettingsManager.getProviderSettings(l)?.auth))).finally(()=>{this.refreshInFlight.delete(l)});return this.refreshInFlight.set(l,I),I}async resolveProviderApiKeyInternal(i,l,u){let c=oi(i);if(!c)return null;let g=this.providerSettingsManager.getProviderSettings(l);if(!g)return lt(`oauth.resolve providerId=${i} storageProviderId=${l} outcome=no_settings`),null;let b=ay(i,g);if(!b)return lt(`oauth.resolve providerId=${i} storageProviderId=${l} outcome=no_credentials`),null;lt(`oauth.resolve.start providerId=${i} storageProviderId=${l} forceRefresh=${u} accessTokenHash=${Us(b.access)} refreshTokenHash=${Us(b.refresh)}`);let I=await c.refresh({settings:g,credentials:b,forceRefresh:u,telemetry:this.telemetry}),k=this.providerSettingsManager.getProviderSettings(l);if(!gp(g.auth,k?.auth))return null;if(!I)throw lt(`oauth.resolve providerId=${i} outcome=refresh_returned_null`),new pd(i);let T=LM({manager:this.providerSettingsManager,providerId:i,settings:{...g,...k},credentials:I,setLastUsed:!1,save:!1}),E=!gp(g.auth,T.auth);if(E)lt(`oauth.resolve.refreshed providerId=${i} newAccessTokenHash=${Us(I.access)} newRefreshTokenHash=${Us(I.refresh)} savingToDisk=true`),this.providerSettingsManager.saveProviderSettings(T,{setLastUsed:!1,tokenSource:"oauth"}),this.onCredentialsRefreshed?.(g,T);else lt(`oauth.resolve providerId=${i} outcome=not_refreshed`);return{apiKey:c.getApiKey(T)??I.access,accountId:I.accountId,refreshed:E}}}var nj=3600000,oj=604800000,Hv=2;class sT{provider;telemetry;logger;cacheTtlMs;cacheFilePath;persistentCacheMaxAgeMs;context;cache=new Map;cacheInfo={updateTime:0,userId:null};pendingPoll;constructor(i){this.provider=i.provider,this.telemetry=i.telemetry,this.logger=i.logger,this.cacheTtlMs=i.cacheTtlMs??nj,this.cacheFilePath=i.cacheFilePath,this.persistentCacheMaxAgeMs=i.persistentCacheMaxAgeMs??oj,this.context={...i.context??{}},this.hydrateFromPersistentCache()}setContext(i){let l=this.cacheInfo.userId!==(i.userId??null);if(this.context={...i},l)this.pendingPoll=void 0,this.cache.clear(),this.cacheInfo={updateTime:0,userId:i.userId??null}}hydrateCache(i){this.cacheInfo={updateTime:i.updateTime,userId:i.userId,flagsPayload:i.flagsPayload},this.rebuildCacheFromSnapshot(i.flagsPayload)}getCacheSnapshot(){return{updateTime:this.cacheInfo.updateTime,userId:this.cacheInfo.userId,flagsPayload:this.cacheInfo.flagsPayload}}async poll(i){let l=i??this.context.userId??null;if(this.pendingPoll?.userId===l)return this.pendingPoll.promise;let u={userId:l,promise:this.pollFlags(l)};this.pendingPoll=u;try{await u.promise}finally{if(this.pendingPoll===u)this.pendingPoll=void 0}}async pollFlags(i){let l=Date.now();if(l-this.cacheInfo.updateTime<this.cacheTtlMs){if(this.cacheInfo.userId===i)return}let u=this.cacheInfo;this.cacheInfo={updateTime:l,userId:i||null};try{let c=await this.provider.getAllFlagsAndPayloads({flagKeys:Ti.length>0?Ti:void 0,context:{...this.context,userId:i}});if(this.cacheInfo.userId!==i)return;this.cacheInfo.flagsPayload=c,this.rebuildCacheFromSnapshot(c),this.writePersistentCache()}catch(c){if(this.cacheInfo.userId!==i)return;throw this.cacheInfo=u.updateTime?u:{updateTime:0,userId:null},this.logger?.error?.("Error polling SDK feature flags",{error:c}),c}}hydrateFromPersistentCache(){let i=this.readPersistentCache();if(!i)return;if(i.userId&&this.context.userId&&i.userId!==this.context.userId)return;this.hydrateCache(i)}isFeatureFlagPayload(i){if(i===null||typeof i==="string"||typeof i==="number"||typeof i==="boolean")return!0;if(Array.isArray(i))return i.every((l)=>this.isFeatureFlagPayload(l));if(typeof i==="object")return Object.values(i).every((l)=>this.isFeatureFlagPayload(l));return!1}readPayloadRecord(i){if(!i||typeof i!=="object"||Array.isArray(i))return;let l=Object.entries(i).filter(([,c])=>this.isFeatureFlagPayload(c));if(l.length===0)return;let u={};for(let[c,g]of l)u[c]=g;return u}readPersistentCache(){try{if(!this.cacheFilePath||!ej(this.cacheFilePath))return;let i=JSON.parse(rj(this.cacheFilePath,"utf8"));if(!i||typeof i!=="object")return;let l=i;if(l.version!==Hv||typeof l.updatedAt!=="number"||!Number.isFinite(l.updatedAt)||Date.now()-l.updatedAt>this.persistentCacheMaxAgeMs)return;return{updateTime:l.updatedAt,userId:l.userId??null,flagsPayload:{featureFlags:this.readPayloadRecord(l.flagsPayload?.featureFlags),featureFlagPayloads:this.readPayloadRecord(l.flagsPayload?.featureFlagPayloads)}}}catch(i){this.logger?.error?.("Error reading SDK feature flags cache",{error:i});return}}writePersistentCache(){try{if(!this.cacheFilePath)return;tj(ij(this.cacheFilePath),{recursive:!0,mode:448});let i=this.getCacheSnapshot(),l={version:Hv,updatedAt:i.updateTime,userId:i.userId,flagsPayload:i.flagsPayload};sj(this.cacheFilePath,`${JSON.stringify(l,null,2)}
587
+ `,"utf8")}catch(i){this.logger?.error?.("Error writing SDK feature flags cache",{error:i})}}getReturnedFlagKeys(i){return[...new Set([...Object.keys(i?.featureFlags??{}),...Object.keys(i?.featureFlagPayloads??{})])]}rebuildCacheFromSnapshot(i){let l=new Map;for(let u of this.getReturnedFlagKeys(i)){let c=this.getFeatureFlag(u);l.set(u,c??!1)}this.cache=l}getFeatureFlag(i){try{let l=this.cacheInfo.flagsPayload?.featureFlagPayloads?.[i],u=this.cacheInfo.flagsPayload?.featureFlags?.[i],c=l??u??Ft[i]??void 0;if(!this.cache.has(i)||this.cache.get(i)!==c)this.telemetry?.capture({event:Re.FEATURE_FLAGS.FLAG_CALLED,properties:{$feature_flag:i,$feature_flag_response:u}});return c}catch(l){return this.logger?.error?.(`Error checking SDK feature flag ${i}`,{error:l}),Ft[i]??!1}}getBooleanFlagEnabled(i){return this.cache.get(i)===!0}getFlagPayload(i){return this.cache.get(i)??Ft[i]}getProvider(){return this.provider}get enabled(){return this.provider.enabled}getSettings(){return this.provider.getSettings()}test(i,l){if(process.env.IS_TEST==="true")this.cache.set(i,l)}async dispose(){await this.provider.dispose()}}var Jn;function zv(){return new Sn().getProviderSettings("cline")?.auth?.accountId?.trim()||void 0}async function iT(i){let l=zv(),u=process.env.TELEMETRY_SERVICE_API_KEY;if(!l||!u)return Jn=void 0,!1;if(Jn?.accountId!==l||Jn.apiKey!==u)Jn={accountId:l,apiKey:u,service:new sT({context:{distinctId:l,userId:l},cacheTtlMs:60000,provider:{enabled:!0,getSettings:()=>({enabled:!0}),dispose:async()=>{},async getAllFlagsAndPayloads(g){let{buildClinePostHogClient:b,PostHogFeatureFlagsProvider:I}=await import("../services/feature-flags/posthog.js"),k=new I({client:b(u),config:{}});try{return await k.getAllFlagsAndPayloads(g)}finally{await k.dispose()}}}})};let c=Jn;try{return c.pending??=c.service.poll().finally(()=>{c.pending=void 0}),await c.pending,Jn===c&&zv()===l&&c.service.getCacheSnapshot().flagsPayload?.featureFlags?.[i]===!0}catch{return!1}}var D3=uj(aj(un)??{recommended:[],free:[],clinePass:[]},ln());function _d(i){if(!i||typeof i!=="object")return null;let l=i;if(typeof l.id!=="string"||l.id.length===0)return null;return{id:l.id,name:typeof l.name==="string"&&l.name.length>0?l.name:l.id,description:typeof l.description==="string"?l.description:"",tags:Array.isArray(l.tags)?l.tags.filter((u)=>typeof u==="string"):[]}}function aj(i){if(!i||typeof i!=="object")return null;let l=i,u=Array.isArray(l.recommended)?l.recommended:[],c=Array.isArray(l.free)?l.free:[],g=Array.isArray(l.clinePass)?l.clinePass:[],b=u.map(_d).filter((E)=>E!==null),I=c.map(_d).filter((E)=>E!==null),k=g.map(_d).filter((E)=>E!==null),T=(Array.isArray(l.clineCloud)?l.clineCloud:[]).map(_d).filter((E)=>E!==null);if(b.length===0&&I.length===0&&k.length===0)return null;return{recommended:b,free:I,clinePass:k,clineCloud:T}}function yp(i){return i.replace(/\s*\(free\)\s*$/i,"").replace(/:free$/i,"").trim()}function lj(i){let l=[i];for(let u of mt)if(i.startsWith(u.canonicalPrefix))l.push(`${u.aliasPrefix}${i.slice(u.canonicalPrefix.length)}`);else if(i.startsWith(u.aliasPrefix))l.push(`${u.canonicalPrefix}${i.slice(u.aliasPrefix.length)}`);return l}function dj(i,l){for(let g of l)for(let b of lj(i.id)){let I=g?.[b]?.name?.trim();if(I)return yp(I)}let u=i.name?.trim();if(u&&u!==i.id)return yp(u);let c=i.id.split("/").at(-1)??i.id;return yp(c)}function uj(i,l){let u=(c,g)=>c.map((b)=>({...b,name:dj(b,g)}));return{recommended:u(i.recommended,[l?.openrouter]),free:u(i.free,[l?.cline,l?.openrouter]),clinePass:u(i.clinePass,[l?.["cline-pass"]]),clineCloud:i.clineCloud&&u(i.clineCloud,[l?.cline])}}function cj(i){let l=i?.auth?.accessToken?.trim()||i?.apiKey?.trim();return l&&l.length>0?l:void 0}var Wv=["COMPOSIO_SEARCH_TOOLS","COMPOSIO_MANAGE_CONNECTIONS","COMPOSIO_WAIT_FOR_CONNECTIONS","COMPOSIO_MULTI_EXECUTE_TOOL"];async function pj(i,l){let u;try{let c=i("/api/v1/connectors/meta-tools/sessions",{method:"POST",signal:AbortSignal.timeout(5000)}),g=new Promise((N,O)=>{u=setTimeout(()=>O(Error("Connector discovery timed out")),5000)}),b=await Promise.race([c,g]);if(!b.ok){if(b.status!==404)l?.log?.(`composio-tools: meta-tool session returned HTTP ${b.status}`);return}let I=await Promise.race([b.json().catch(()=>{return}),g]),k=I?.data?.sessionId,T=I?.data?.tools;if(typeof k!=="string"||!k||!Array.isArray(T))return;let E=T.filter((N)=>typeof N?.slug==="string"&&Wv.some((O)=>O===N.slug)),A=new Set(E.map((N)=>N.slug)),C=Wv.filter((N)=>!A.has(N));if(C.length>0){l?.log?.(`composio-tools: meta-tool session missing required tools: ${C.join(", ")}`);return}return{sessionId:k,tools:[...new Map(E.map((N)=>[N.slug,N])).values()]}}catch(c){l?.log?.(`composio-tools: meta-tool session request failed: ${c instanceof Error?c.message:String(c)}`);return}finally{clearTimeout(u)}}async function mj(i,l,u,c){let g=`/api/v1/connectors/meta-tools/${encodeURIComponent(u)}/execute`,b;try{b=await i(g,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({sessionId:l,arguments:c&&typeof c==="object"?c:{}})})}catch(T){return{successful:!1,error:`Cline connectors request failed: ${T instanceof Error?T.message:String(T)}`}}let I=await b.text(),k;try{k=I?JSON.parse(I):void 0}catch{k=void 0}if(!b.ok){let T=k!==void 0?JSON.stringify(k).slice(0,600):I.slice(0,600);return{successful:!1,error:`Cline connectors proxy returned HTTP ${b.status} for ${u}${T?`: ${T}`:""}`}}return k??{successful:!0}}var hj=120000;function Nl(){return new Sn().getProviderSettings("cline")?.auth?.accountId?.trim()||void 0}var Kv;async function nT(i){let l=new Sn,u;try{Kv??=new gc,u=(await Kv.resolveProviderApiKey({providerId:"cline"}))?.apiKey??void 0}catch(c){if(c instanceof pd)return}if(u??=cj(l.getProviderSettings("cline")),!u||Nl()!==i)return;return{baseUrl:(l.getProviderSettings("cline")?.baseUrl?.trim()||ke().apiBaseUrl).replace(/\/+$/,""),token:u}}async function fj(i){if(Nl()!==i)return{error:{successful:!1,error:"The Cline account changed. Start a new session to use connector tools."}};if(!await iT(Rt.CLINE_COMPOSIO_BETA))return{error:{successful:!1,error:"Composio connectors are not enabled for this account."}};let l=await nT(i);if(!l)return{error:{successful:!1,error:"Sign in to your Cline account to use connector tools (no account token available)."}};return{auth:l}}function Gv(i){return(l,u)=>{let c=new Headers(u.headers);return c.set("authorization",`Bearer ${i.token}`),fetch(`${i.baseUrl}${l}`,{...u,headers:c})}}async function gj(i){let l=i?.request,u=l?void 0:Nl(),c,g;if(l)c=l,g=async()=>({request:l});else{if(!u)return;if(!await iT(Rt.CLINE_COMPOSIO_BETA))return;if(Nl()!==u)return;let k=await nT(u);if(!k)return;c=Gv(k),g=async()=>{let T=await fj(u);if("error"in T)return T;return{request:Gv(T.auth)}}}let b=await pj(c,{log:(k)=>i?.logger?.log?.(k)});if(!b?.tools.length)return;let I;try{I=b.tools.map((k)=>_({name:k.slug.toLowerCase(),resultPolicy:"cache-oversized",description:k.description||k.name||k.slug,inputSchema:k.input_parameters??{type:"object",properties:{}},timeoutMs:hj,retryable:!1,execute:async(T)=>{let E=await g();if("error"in E)return E.error;return mj(E.request,b.sessionId,k.slug,T)}}))}catch(k){i?.logger?.log?.(`composio-tools: invalid meta-tool schemas: ${k instanceof Error?k.message:String(k)}`);return}return{name:"composio-tools",manifest:{capabilities:["tools"]},setup(k){if(!l&&Nl()!==u)return;for(let T of I)k.registerTool(T);i?.logger?.log?.(`composio-tools: registered ${I.length} meta tool(s) for this session`)}}}var Nf="package.json",bj="package";function aT(i){return Za(i)}function lT(i){return Yn(i)}function Ij(i){try{return yc(i)&&vj(i).isDirectory()}catch{return!1}}function md(i){let l=[],u=new Set;for(let c of i){let g=Xl(c);if(u.has(g))continue;u.add(g),l.push(g)}return l}function dT(i){let l=md(i);return rk(l)}function Of(i){return aT(i).flatMap((l)=>lT(l)).filter((l)=>yc(l))}function kj(i,l){let u=[];for(let c of i)try{u.push(...ni([c],l))}catch{}return u}function vp(i){return typeof i==="object"&&i!==null}function Sj(i){try{let l=JSON.parse(yj(vc(i,Nf),"utf8"));if(!vp(l)||!vp(l.cline))return[];let u=l.cline.plugins;if(!Array.isArray(u))return[];let c=[];for(let g of u){if(typeof g==="string"){c.push(g);continue}if(!vp(g)||!Array.isArray(g.paths))continue;for(let b of g.paths)if(typeof b==="string")c.push(b)}return c}catch{return[]}}function uT(i,l){let u=Xl(l);return Sj(i).some((c)=>Xl(i,c)===u)}function Tj(i,l){return oT(i)===bj&&yc(vc(Nu(i),Nf))&&uT(Nu(i),l)}function _j(i){let l=Xl(i),u=[],c=Nu(l);while(!0){if(Tj(c,l)){u.push(c);break}if(yc(vc(c,Nf))){if(uT(c,l))u.push(c);break}let g=Nu(c);if(g===c)break;c=g}return md(u)}function cT(i={}){let l=i.cwd??process.cwd(),u=[],c=[];for(let k of i.pluginPaths??[])try{c.push(...ni([k],l))}catch(T){u.push({pluginPath:Xl(l,k),error:T})}let g=md([...c,...Of(i.workspacePath)]);if(i.includeDisabled)return{paths:g,disabledPaths:[],discoveryFailures:u};let b=rk(g),I=new Set(b);return{paths:b,disabledPaths:g.filter((k)=>!I.has(k)),discoveryFailures:u}}function $f(i={}){let l=i.cwd??process.cwd(),u=Of(i.workspacePath),c=[...ni(i.pluginPaths??[],l),...u];return i.includeDisabled?md(c):dT(c)}function Ej(i={}){let l=i.cwd??process.cwd(),u=Of(i.workspacePath),c=kj(i.pluginPaths??[],l);return dT([...c,...u])}function wc(i){let l=[];for(let u of i)for(let c of _j(u)){let g=vc(c,Ze);if(Ij(g))l.push(g)}return md(l)}function Aj(i={}){return wc(Ej(i))}var Cj="CLINE_PLUGIN_MODE";function Lf(i){let l=process.env[Cj]?.trim();return i??(l==="sandbox"?l:"worker")}async function pT(i={}){if(Lf(i.mode)==="worker"){let c=cT(i);if(c.paths.length===0&&c.disabledPaths.length===0&&c.discoveryFailures.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[],issues:[]};let g=await(i.registry??uc()).loadForSession({sessionId:i.session?.sessionId,pluginPaths:c.paths,disabledPluginPaths:c.disabledPaths,discoveryFailures:c.discoveryFailures,policy:i.policy,exportName:i.exportName,providerId:i.providerId,modelId:i.modelId,cwd:i.cwd,hookErrorMode:i.hookErrorMode,emitEvent:i.onEvent,onIssue:i.onIssue,importTimeoutMs:i.importTimeoutMs,hookTimeoutMs:i.hookTimeoutMs,callTimeoutMs:i.contributionTimeoutMs,setupContext:{session:i.session,client:i.client,user:i.user,workspaceInfo:i.workspaceInfo,automation:i.automation,logger:i.logger,telemetry:i.telemetry}});return{extensions:g.extensions,failures:g.failures,pluginPaths:g.pluginPaths,warnings:g.warnings,issues:g.issues,shutdown:async()=>g.release()}}let l=$f(i);if(l.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[],issues:[]};let u=await ff({pluginPaths:l,transport:"subprocess",exportName:i.exportName,importTimeoutMs:i.importTimeoutMs,hookTimeoutMs:i.hookTimeoutMs,contributionTimeoutMs:i.contributionTimeoutMs,onEvent:i.onEvent,telemetryAvailable:Boolean(i.telemetry),providerId:i.providerId,modelId:i.modelId,cwd:i.cwd,session:i.session,client:i.client,user:i.user,workspaceInfo:i.workspaceInfo,logger:i.logger});return{extensions:u.extensions??[],shutdown:u.shutdown,failures:u.failures,pluginPaths:u.pluginPaths,warnings:u.warnings,issues:u.failures.map((c)=>({name:c.pluginName??oT(c.pluginPath,wj(c.pluginPath)),pluginPath:c.pluginPath,state:"failed",reason:"error",lastError:{phase:c.phase==="setup"?"setup":"import",message:c.message,stack:c.stack,pluginPath:c.pluginPath,timestamp:Date.now()}}))}}var $u=Lj(xj),mT="cline checkpoint session=",Xm=67108864,Dj=1209600000;function Uj(i){return i.includes(mT)}function hT(){return Jl(Z(),"checkpoint-scratch")}function fT(i,l){let u=Pj("sha256").update(`${i}\x00${l}`).digest("hex").slice(0,32);return Jl(hT(),u)}async function Fj(){try{let i=hT(),l=Date.now()-Dj,u=await Nj(i,{withFileTypes:!0});await Promise.all(u.map(async(c)=>{if(!c.isDirectory())return;let g=Jl(i,c.name);try{if((await Oj(g)).mtimeMs<l)await Ou(g,{recursive:!0,force:!0})}catch{}}))}catch{}}function wp(i,l){i?.log(l,{severity:"warn"})}function qj(i){let l=i?.checkpoint;if(!l||typeof l!=="object"||Array.isArray(l))return;let u=l;if(!u.latest||!Array.isArray(u.history))return;let c=u.latest,g=u.history.filter((b)=>!!b&&typeof b==="object"&&typeof b.ref==="string"&&typeof b.createdAt==="number"&&typeof b.runCount==="number");if(typeof c.ref!=="string"||typeof c.createdAt!=="number"||typeof c.runCount!=="number")return;return{latest:c,history:g}}async function Pt(i,l){let u=await $u("git",["-C",i,...l],{windowsHide:!0});return{stdout:u.stdout.trim(),stderr:u.stderr.trim()}}var Df=["-c","core.ignorestat=false","-c","core.splitIndex=false"];async function Ed(i,l,u){return(await $u("git",["-C",i,...Df,...u],{windowsHide:!0,maxBuffer:Xm,env:{...process.env,GIT_INDEX_FILE:l}})).stdout.trim()}function jj(i,l,u,c){return new Promise((g,b)=>{let I=Rj("git",["-C",i,...Df,...u],{windowsHide:!0,env:{...process.env,GIT_INDEX_FILE:l},stdio:["pipe","ignore","pipe"]}),k="";I.stderr.on("data",(T)=>{k+=T}),I.on("error",b),I.on("close",(T)=>{if(T===0)g();else b(Error(`git ${u[0]} exited with ${T}: ${k.trim()}`))}),I.stdin.on("error",()=>{}),I.stdin.end(c)})}async function Bj(i,l){let u=(await $u("git",["-C",i,"ls-files","--others","--exclude-standard","-z"],{windowsHide:!0,maxBuffer:Xm})).stdout.split("\x00").filter(Boolean);if(u.length===0)return;await Mj(l,{recursive:!0,mode:448});let c=Jl(l,"index"),g=Jl(l,"pathspec");await $j(g,`${u.join("\x00")}\x00`);let b=["add","--force","--pathspec-from-file",g,"--pathspec-file-nul"];try{await Ed(i,c,b)}catch(A){if(String(A.stderr??"").includes("did not match any files"))throw A;await Ou(c,{force:!0}),await Ou(`${c}.lock`,{force:!0}),await Ed(i,c,b)}let I=await $u("git",["-C",i,...Df,"ls-files","-z"],{windowsHide:!0,maxBuffer:Xm,env:{...process.env,GIT_INDEX_FILE:c}}),k=new Set(u.map((A)=>A.endsWith("/")?A.slice(0,-1):A)),T=I.stdout.split("\x00").filter(Boolean).filter((A)=>!k.has(A));if(T.length>0)await jj(i,c,["update-index","-z","--force-remove","--stdin"],`${T.join("\x00")}\x00`);let E=await Ed(i,c,["write-tree"]);if(!E)return;return await Ed(i,c,["commit-tree",E,"-m","untracked files on cline checkpoint"])||void 0}async function Hj(i,l,u){let c=(await Pt(i,["stash","create",u])).stdout,g=await Bj(i,l);if(c){if(!g)return c;let T=(await Pt(i,["rev-parse",`${c}^{tree}`])).stdout,E=(await Pt(i,["rev-parse",`${c}^1`])).stdout,A=(await Pt(i,["rev-parse",`${c}^2`])).stdout;if(!T||!E||!A)return c;return(await Pt(i,["commit-tree",T,"-p",E,"-p",A,"-p",g,"-m",u])).stdout||c}if(!g)return;let b=(await Pt(i,["rev-parse","HEAD"])).stdout,I=(await Pt(i,["rev-parse","HEAD^{tree}"])).stdout;if(!b||!I)return;let k=(await Pt(i,["commit-tree",I,"-p",b,"-m","index on cline checkpoint"])).stdout;if(!k)return;return(await Pt(i,["commit-tree",I,"-p",b,"-p",k,"-p",g,"-m",u])).stdout||void 0}async function Xv(i,l){if(!i)return;await Ou(fT(i,l),{recursive:!0,force:!0}).catch(()=>{return});let u=`refs/cline/checkpoints/${l}/`;try{let{stdout:c}=await Pt(i,["for-each-ref","--format=%(refname)",u]),g=c.trim().split(`
588
+ `).filter(Boolean);await Promise.allSettled(g.map((b)=>Pt(i,["update-ref","-d",b])))}catch{}}async function zj(i,l,u){if(!i||u.length===0)return;await Promise.allSettled(u.map((c)=>Pt(i,["update-ref",`refs/cline/checkpoints/${l}/${c.runCount}`,c.ref])))}function Wj(i,l){let u=i.findIndex((c)=>c.runCount===l.runCount);if(u<0)return[...i,l];return i.map((c,g)=>g===u?l:c)}function Kj(i){Fj();let l,u,c=async()=>{if(l===!0)return!0;try{l=(await Pt(i.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{l=!1}return l},g=async(b)=>{if(i.createCheckpoint)return await i.createCheckpoint({cwd:i.cwd,sessionId:i.sessionId,runCount:b});if(!await c())return;let I=Date.now(),k=(N)=>{i.telemetry?.capture({event:"checkpoint.snapshot",properties:{sessionId:i.sessionId,runCount:b,outcome:N,durationMs:Date.now()-I}})},T=async(N)=>{try{let O=(await Pt(i.cwd,["rev-parse","HEAD"])).stdout.trim();if(!O)return;return{ref:O,createdAt:Date.now(),runCount:b,kind:"commit"}}catch(O){wp(i.logger,`${N}: ${O instanceof Error?O.message:String(O)}`);return}},E=`${mT}${i.sessionId} run=${b}`,A="";try{A=await Hj(i.cwd,fT(i.cwd,i.sessionId),E)??""}catch(N){wp(i.logger,`Checkpoint snapshot failed after ${Date.now()-I}ms: ${N instanceof Error?N.message:String(N)}`);let O=await T("Checkpoint HEAD fallback failed");return k(O?"head_fallback":"skipped"),O}if(!A){let N=await T("Checkpoint HEAD fallback failed");return k(N?"head_clean":"skipped"),N}let C=`refs/cline/checkpoints/${i.sessionId}/${b}`;try{await Pt(i.cwd,["update-ref",C,A])}catch(N){wp(i.logger,`Checkpoint store failed: ${N instanceof Error?N.message:String(N)}`),k("skipped");return}return k("stash"),{ref:A,createdAt:Date.now(),runCount:b,kind:"stash"}};return{beforeRun:async({snapshot:b})=>{if(b.parentAgentId==null)u=b.messages.length;return},beforeModel:async({snapshot:b})=>{if(b.parentAgentId!=null||b.iteration!==1)return;let I=b.messages.slice(u??Math.max(0,b.messages.length-1));u=void 0;let k=Sm(b.messages);if(k<1)return;let T=await i.readSessionMetadata(),E=qj(T),A=Sm(I)>=1,C=E?.history.some((L)=>L.runCount===k)??!1;if(!A&&C)return;let N=await g(k);if(!N)return;if(E?.latest.ref===N.ref)return;let O=Wj(E?.history??[],N);await i.writeSessionMetadata({...T??{},checkpoint:{latest:N,history:O}});return}}}function Vj(i,l){if(!l)return;return{name:i,manifest:{capabilities:["hooks"]},hooks:l}}function rB(i){return Er(i)}var gT;((i)=>{i.TaskStart="TaskStart",i.TaskResume="TaskResume",i.TaskCancel="TaskCancel",i.TaskComplete="TaskComplete",i.TaskError="TaskError",i.PreToolUse="PreToolUse",i.PostToolUse="PostToolUse",i.UserPromptSubmit="UserPromptSubmit",i.PreCompact="PreCompact",i.SessionShutdown="SessionShutdown"})(gT||={});var sB={["TaskStart"]:"agent_start",["TaskResume"]:"agent_resume",["TaskCancel"]:"agent_abort",["TaskComplete"]:"agent_end",["TaskError"]:"agent_error",["PreToolUse"]:"tool_call",["PostToolUse"]:"tool_result",["UserPromptSubmit"]:"prompt_submit",["PreCompact"]:void 0,["SessionShutdown"]:"session_shutdown"},iB=new Map(Object.values(gT).map((i)=>[i.toLowerCase(),i])),nB=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function oB(i){let l=eB(i).toLowerCase();if(!nB.has(l))return;let u=Zj(i,l).trim().toLowerCase();return iB.get(u)}function yT(i){let l=[],u=new Set,c=rB(i).filter((g)=>Yj(g));for(let g of c)try{for(let b of Qj(g,{withFileTypes:!0})){if(!b.isFile())continue;let I=oB(b.name);if(!I)continue;let k=tB(g,b.name);if(u.has(k))continue;u.add(k),l.push({fileName:I,hookEventName:sB[I],path:k})}}catch{}return l.sort((g,b)=>g.path.localeCompare(b.path))}var lB=30000,dB=1000;function uB(i){let l=i.trim();if(!l)return{};let u=l.split(`
589
+ `).map((g)=>g.trim()).filter(Boolean).filter((g)=>g.startsWith("HOOK_CONTROL\t")).map((g)=>g.slice(13)),c=u.length>0?u[u.length-1]:l;try{return{parsedJson:JSON.parse(c)}}catch(g){return{parseError:g instanceof Error?g.message:"Failed to parse subprocess stdout JSON"}}}function Jv(i,l){let u=i instanceof Error?i:Error(String(i)),c=u,g=l.join(" ");if(c.code==="EACCES"){let I=Error(`Failed to execute hook command "${g}" (EACCES). Configure hooks with an explicit interpreter/command array (for example: ["bash", "/path/to/script"]) or make the script executable with a valid shebang.`);return I.code=c.code,I}let b=Error(`Failed to execute hook command "${g}": ${u.message}`);return b.code=c.code,b}function cB(i){for(let l of[i.stdin,i.stdout,i.stderr]){if(!l||l.destroyed)continue;l.removeAllListeners("data"),l.destroy()}}async function pB(i,l){let u=i.stdin;if(!u)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((c,g)=>{let b=!1,I=(E)=>{if(b)return;b=!0,E()},k=(E)=>{let A=E.code;return A==="EPIPE"||A==="EOF"||A==="ERR_STREAM_DESTROYED"},T=(E)=>{if(k(E)){I(c);return}I(()=>g(E))};u.on("error",T),u.once("close",()=>u.off("error",T)),u.end(l,(E)=>{if(E){if(k(E)){I(c);return}I(()=>g(E));return}I(c)})})}async function Vv(i,l){let u=It(l.command,{env:l.env,debugRole:"hook"});if(!Array.isArray(u)||u.length===0)throw Error("runSubprocessEvent requires a non-empty command");let c=!!l.detached,g=aB(u[0],u.slice(1),{cwd:l.cwd,env:We(l.env),stdio:c?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:c,windowsHide:!0}),b="",I="",k=!1,T;if(!c&&(!g.stdout||!g.stderr))throw g.kill("SIGKILL"),Error("runSubprocessEvent failed to create stdout/stderr pipes");g.stdout?.on("data",(C)=>{b+=C.toString()}),g.stderr?.on("data",(C)=>{I+=C.toString()});let E=new Promise((C,N)=>{g.once("spawn",()=>{try{l.onSpawn?.({command:u,pid:g.pid??void 0,detached:c})}catch{}C()}),g.once("error",(O)=>N(Jv(O,u)))}),A=new Promise((C,N)=>{let O=!1,L,D=()=>{if(T)clearTimeout(T);if(L)clearTimeout(L)},U=(F)=>{if(O)return;O=!0,D();let{parsedJson:j,parseError:H}=uB(b);C({exitCode:F,stdout:b,stderr:I,parsedJson:j,parseError:H,timedOut:k})};if(g.once("error",(F)=>{D(),N(Jv(F,u))}),g.once("close",(F)=>U(F)),!c)g.once("exit",(F)=>{L=setTimeout(()=>{U(F),cB(g)},dB),L.unref?.()})});if(c)A.catch(()=>{return});if(!c&&(l.timeoutMs??0)>0)T=setTimeout(()=>{k=!0,g.kill("SIGKILL")},l.timeoutMs);if(c&&l.onDetachedSettled){let C=Date.now(),N=l.onDetachedSettled,O=!1,L,D=(F)=>{if(O)return;if(O=!0,L)clearTimeout(L);N({command:u,...F})},U=l.detachedObservationMs??lB;L=setTimeout(()=>D({durationMs:U,exitCode:null,exited:!1}),U),L.unref?.(),A.then((F)=>D({durationMs:Date.now()-C,exitCode:F.exitCode,exited:!0})).catch(()=>{if(O=!0,L)clearTimeout(L)})}if(await Promise.race([Promise.all([E,pB(g,JSON.stringify(i))]),A]),c){g.unref();return}return await A}var bp=50000;function mB(i){if(i===void 0||i.length<=bp)return i;return`${i.slice(0,bp)}
590
+ [hook context truncated: exceeded ${bp} characters]`}var i4=t({contextModification:e().optional(),cancel:r().optional(),review:r().optional(),errorMessage:e().optional(),context:e().optional(),overrideInput:m().optional()}).passthrough();function Lu(i){if(!i||typeof i!=="object")return{};let l={};for(let[u,c]of Object.entries(i))l[u]=typeof c==="string"?c:JSON.stringify(c);return l}function Ol(i,l,u){let c=u instanceof Error?`: ${u.message}`:"",g=`${l}${c}`;if(i){try{i.log(g,{severity:"warn",...u!==void 0?{error:u}:{}})}catch{}return}console.warn(g)}function hB(i,l){if(!l)return i;if(!i)return{...l};let u=[i.context,l.context].filter((b)=>typeof b==="string"&&b.length>0).join(`
591
+ `),c=[i.cancelReason,l.cancelReason].filter((b)=>typeof b==="string"&&b.length>0).join(`
592
+ `),g=[...i.appendMessages??[],...l.appendMessages??[]];return{cancel:i.cancel===!0||l.cancel===!0?!0:void 0,review:i.review===!0||l.review===!0?!0:void 0,context:u||void 0,cancelReason:c||void 0,overrideInput:l.overrideInput!==void 0?l.overrideInput:i.overrideInput,systemPrompt:l.systemPrompt!==void 0?l.systemPrompt:i.systemPrompt,appendMessages:g.length>0?g:void 0}}function fB(i){if(!i||typeof i!=="object")return;let l=i,u=typeof l.context==="string"?l.context:typeof l.contextModification==="string"?l.contextModification:void 0,c=typeof l.errorMessage==="string"&&l.errorMessage.trim().length>0?l.errorMessage:void 0,g=typeof l.cancel==="boolean"?l.cancel:void 0;return{cancel:g,review:typeof l.review==="boolean"?l.review:void 0,context:g===!0?void 0:mB(u??c),cancelReason:g===!0?c??u:void 0,overrideInput:Object.hasOwn(l,"overrideInput")?l.overrideInput:void 0}}function Jm(i){let l=String(i??"").toLowerCase();return l.includes("cancel")||l.includes("abort")||l.includes("interrupt")}function bt(i,l){let u=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",c={rootSessionId:l.rootSessionId||i.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:i.conversationId,sessionContext:c,workspaceRoots:l.workspacePath?[l.workspacePath]:[],workspaceInfo:l.workspaceInfo,userId:u,agent_id:i.agentId,parent_agent_id:i.parentAgentId}}async function Vm(i,l){if(l.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await Vv(i,l)}catch(u){let c=vB(l.command,process.platform,u);if(!c)throw u;return await Vv(i,{...l,command:c})}}function gB(i){try{let l=Xj(i,"utf8").split(/\r?\n/,1)[0]?.trim();if(!l?.startsWith("#!"))return;let u=l.slice(2).trim();if(!u)return;let c=u.split(/\s+/).filter(Boolean);return c.length>0?c:void 0}catch{return}}function yB(i){return!!(i&&typeof i==="object"&&("code"in i)&&i.code==="ENOENT")}function vB(i,l=process.platform,u){if(l!=="win32"||!yB(u))return;if(i[0]!=="py"||i[1]!=="-3")return;return["python",...i.slice(2)]}function vT(i){if(i.length===0)return;let[l,...u]=i,c=l.replace(/\\/g,"/").toLowerCase(),g=c.split("/").at(-1)??c;if(g==="env")return vT(u);if(g==="bash"||g==="sh"||g==="zsh")return[g,...u];if(g==="python3"||g==="python")return process.platform==="win32"?["py","-3",...u]:[g,...u];return i}function wB(i){let l=gB(i);if(l&&l.length>0)return[...vT(l)??l,i];let u=i.toLowerCase();if(u.endsWith(".sh")||u.endsWith(".bash")||u.endsWith(".zsh"))return["bash",i];if(u.endsWith(".js")||u.endsWith(".mjs")||u.endsWith(".cjs"))return It(["node",i],{debugRole:"hook"});if(u.endsWith(".ts")||u.endsWith(".mts")||u.endsWith(".cts"))return["bun","run",i];if(u.endsWith(".py"))return process.platform==="win32"?["py","-3",i]:["python3",i];if(u.endsWith(".ps1"))return[process.platform==="win32"?"powershell":"pwsh","-File",i];return["bash",i]}function bB(i){let l={};for(let u of yT(i)){if(!u.hookEventName)continue;let c=u.hookEventName,g=l[c]??[];g.push(wB(u.path)),l[c]=g}return l}async function Ip(i){let l;for(let u of i.commands){let c=u.join(" ");try{let g=await Vm(i.payload,{command:u,cwd:i.cwd,env:process.env,detached:!1,timeoutMs:i.timeoutMs});if(g?.timedOut){Ol(i.logger,`hook command timed out: ${c}`);continue}if(g?.parseError){Ol(i.logger,`hook command returned invalid JSON control output: ${c} (${g.parseError})`);continue}l=hB(l,fB(g?.parsedJson))}catch(g){Ol(i.logger,`hook command failed: ${c}`,g)}}return l}async function Zn(i){if(i.detached){let l=i.onHookRuntime,u=i.payload.hookName;for(let c of i.commands){let g=c.join(" ");Vm(i.payload,{command:c,cwd:i.cwd,env:process.env,detached:!0,onDetachedSettled:l?(b)=>l({hookName:u,durationMs:b.durationMs,exitCode:b.exitCode,exited:b.exited}):void 0}).catch((b)=>{Ol(i.logger,`hook command failed: ${g}`,b)})}return}await Promise.all(i.commands.map(async(l)=>{let u=l.join(" ");try{await Vm(i.payload,{command:l,cwd:i.cwd,env:process.env,detached:i.detached})}catch(c){Ol(i.logger,`hook command failed: ${u}`,c)}}))}function si(i){return{agentId:i.agentId,conversationId:i.conversationId??i.runId??i.agentId,parentAgentId:i.parentAgentId??null}}function Ym(i,l){return{...si(i.snapshot),userMessage:l}}function wT(i){return{...si(i.snapshot),iteration:i.snapshot.iteration,call:{id:i.toolCall.toolCallId,name:i.toolCall.toolName,input:i.input}}}function bT(i){return{...si(i.snapshot),iteration:i.snapshot.iteration,record:{id:i.toolCall.toolCallId,name:i.toolCall.toolName,input:i.input,output:i.result.output,error:i.result.isError?String(i.result.output):void 0,durationMs:i.durationMs,startedAt:i.startedAt,endedAt:i.endedAt}}}function IT(i){return i.filter((l)=>l.type==="text"&&typeof l.text==="string").map((l)=>l.text).join("")}function IB(i){if(!i)return;let l={};if(i.cancel===!0){if(l.stop=!0,i.cancelReason?.trim())l.reason=i.cancelReason}else if(i.context?.trim())l.appendContext=i.context;if(i.overrideInput!==void 0)l.input=i.overrideInput;return Object.keys(l).length>0?l:void 0}function Yv(i){if(!i)return;let l={};if(i.cancel===!0){if(l.stop=!0,i.cancelReason?.trim())l.reason=i.cancelReason}else if(i.context?.trim())l.appendContext=i.context;return Object.keys(l).length>0?l:void 0}function kB(i){let l={cwd:i.workspacePath,workspacePath:i.workspacePath,rootSessionId:i.rootSessionId,workspaceInfo:i.workspaceInfo},u=(c)=>{let g=`${JSON.stringify({ts:new Date().toISOString(),...c})}
593
+ `,b=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??Jj(et(),"hooks.jsonl");et(b),Gj(b,g,"utf8")};return{beforeRun:async(c)=>{let g=Ym(c,"");u({...bt(g,l),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(c)=>{let g=wT(c);u({...bt(g,l),hookName:"tool_call",iteration:g.iteration,tool_call:{id:g.call.id,name:g.call.name,input:g.call.input},preToolUse:{toolName:g.call.name,parameters:Lu(g.call.input)}});return},afterTool:async(c)=>{let g=bT(c);u({...bt(g,l),hookName:"tool_result",iteration:g.iteration,tool_result:g.record,postToolUse:{toolName:g.record.name,parameters:Lu(g.record.input),result:typeof g.record.output==="string"?g.record.output:JSON.stringify(g.record.output),success:!g.record.error,executionTimeMs:g.record.durationMs}});return},afterRun:async({snapshot:c,result:g})=>{let b=si(c);if(g.status==="completed"){u({...bt(b,l),hookName:"agent_end",iteration:g.iterations,turn:{outputText:g.outputText,status:g.status},taskComplete:{taskMetadata:{}}});return}if(g.status==="aborted"||Jm(g.error?.message)){u({...bt(b,l),hookName:"agent_abort",reason:g.error?.message,taskCancel:{taskMetadata:{}}});return}if(g.error)u({...bt(b,l),hookName:"agent_error",iteration:g.iterations,error:{name:g.error.name,message:g.error.message,stack:g.error.stack}})},onEvent:async(c)=>{if(c.type!=="message-added"||c.message.role!=="user"||c.message.metadata?.displayRole==="system")return;let g=Ym({snapshot:c.snapshot},IT(c.message.content));u({...bt(g,l),hookName:"prompt_submit",userPromptSubmit:{prompt:g.userMessage,attachments:[]}})}}}function SB(i){let l=bB(i.workspacePath);if(!Object.values(l).some((A)=>A.length>0))return;let u=async(A,C)=>{let N=l[C]??[];if(N.length===0)return;let O=C==="agent_resume"?{...bt(A,i),hookName:C,taskResume:{taskMetadata:{},previousState:{}}}:{...bt(A,i),hookName:C,taskStart:{taskMetadata:{}}};if(!i.blockingRunStartHooks){await Zn({commands:N,cwd:i.cwd,logger:i.logger,detached:i.detachAsyncHooks??!0,onHookRuntime:i.onHookRuntime,payload:O});return}return Ip({commands:N,cwd:i.cwd,logger:i.logger,timeoutMs:i.toolCallTimeoutMs??120000,payload:O})},c=async(A)=>{let C=l.prompt_submit??[];if(C.length>0)await Zn({commands:C,cwd:i.cwd,logger:i.logger,detached:i.detachAsyncHooks??!0,onHookRuntime:i.onHookRuntime,payload:{...bt(A,i),hookName:"prompt_submit",userPromptSubmit:{prompt:A.userMessage,attachments:[]}}})},g=async(A)=>{let C=l.tool_call??[];if(C.length===0)return;return Ip({commands:C,cwd:i.cwd,logger:i.logger,timeoutMs:i.toolCallTimeoutMs??120000,payload:{...bt(A,i),hookName:"tool_call",iteration:A.iteration,tool_call:{id:A.call.id,name:A.call.name,input:A.call.input},preToolUse:{toolName:A.call.name,parameters:Lu(A.call.input)}}})},b=async(A)=>{let C=l.tool_result??[];if(C.length===0)return;return Ip({commands:C,cwd:i.cwd,logger:i.logger,timeoutMs:i.toolCallTimeoutMs??120000,payload:{...bt(A,i),hookName:"tool_result",iteration:A.iteration,tool_result:A.record,postToolUse:{toolName:A.record.name,parameters:Lu(A.record.input),result:typeof A.record.output==="string"?A.record.output:JSON.stringify(A.record.output),success:!A.record.error,executionTimeMs:A.record.durationMs}}})},I=async(A)=>{let C=l.agent_end??[];if(C.length===0)return;await Zn({commands:C,cwd:i.cwd,logger:i.logger,detached:i.detachAsyncHooks??!0,onHookRuntime:i.onHookRuntime,payload:{...bt(A,i),hookName:"agent_end",iteration:A.iteration,turn:A.turn,taskComplete:{taskMetadata:{}}}})},k=async(A)=>{let C=l.agent_error??[];if(C.length===0)return;await Zn({commands:C,cwd:i.cwd,logger:i.logger,detached:i.detachAsyncHooks??!0,onHookRuntime:i.onHookRuntime,payload:{...bt(A,i),hookName:"agent_error",iteration:A.iteration,error:{name:A.error.name,message:A.error.message,stack:A.error.stack}}})},T=async(A)=>{if(Jm(A.reason)){let N=l.agent_abort??[];if(N.length>0)await Zn({commands:N,cwd:i.cwd,logger:i.logger,detached:i.detachAsyncHooks??!0,onHookRuntime:i.onHookRuntime,payload:{...bt(A,i),hookName:"agent_abort",reason:A.reason,taskCancel:{taskMetadata:{}}}})}let C=l.session_shutdown??[];if(C.length===0)return;await Zn({commands:C,cwd:i.cwd,logger:i.logger,detached:i.detachAsyncHooks??!0,onHookRuntime:i.onHookRuntime,payload:{...bt(A,i),hookName:"session_shutdown",reason:A.reason}})},E={};if((l.agent_start?.length??0)>0||(l.agent_resume?.length??0)>0||(l.prompt_submit?.length??0)>0){if((l.agent_start?.length??0)>0||(l.agent_resume?.length??0)>0)E.beforeRun=async(A)=>{let C=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start",N=await u(si(A.snapshot),C);return Yv(N)};if((l.prompt_submit?.length??0)>0)E.onEvent=async(A)=>{if(A.type!=="message-added"||A.message.role!=="user"||A.message.metadata?.displayRole==="system")return;await c(Ym({snapshot:A.snapshot},IT(A.message.content)))}}if((l.tool_call?.length??0)>0)E.beforeTool=async(A)=>{let C=await g(wT(A));return IB(C)};if((l.tool_result?.length??0)>0)E.afterTool=async(A)=>{let C=await b(bT(A));return Yv(C)};if((l.agent_end?.length??0)>0)E.afterRun=async({snapshot:A,result:C})=>{if(C.status!=="completed")return;await I({...si(A),iteration:C.iterations,turn:{outputText:C.outputText,status:C.status}})};if((l.agent_error?.length??0)>0||(l.agent_abort?.length??0)>0||(l.session_shutdown?.length??0)>0){let A=E.afterRun;E.afterRun=async(C)=>{await A?.(C);let{snapshot:N,result:O}=C;if(O.status==="aborted"||Jm(O.error?.message)){await T({...si(N),reason:O.error?.message});return}if(O.error)await k({...si(N),iteration:O.iterations,error:O.error})}}return E}function TB(i){return Vj("core.hook_config_files",SB(i))}function Ci(i,l){let u=i.map((c)=>c[l]).filter((c)=>typeof c==="function");if(u.length===0)return;return async(c)=>{let g;for(let b of u){let I=await b(c);if(!I||typeof I!=="object")continue;let k=I,T=[g?.appendContext,k.appendContext].filter((E)=>typeof E==="string"&&E.length>0).join(`
594
+
595
+ `);if(k.stop===!0)return{...g??{},...k,stop:!0};g={...g??{},...k,stop:g?.stop===!0||k.stop===!0?!0:k.stop,appendContext:T||void 0,options:g?.options||k.options?{...g?.options??{},...k.options??{}}:void 0}}return g}}function Qv(i){let l=i.filter((u)=>u!==void 0);if(l.length===0)return;return{beforeRun:Ci(l,"beforeRun"),afterRun:Ci(l,"afterRun"),beforeModel:Ci(l,"beforeModel"),afterModel:Ci(l,"afterModel"),beforeTool:Ci(l,"beforeTool"),afterTool:Ci(l,"afterTool"),onEvent:Ci(l,"onEvent")}}function Qm(...i){let l,u;for(let g of i){if(!g)continue;if(g.toolExecutors)l={...l??{},...g.toolExecutors};if(g.requestToolApproval)u=g.requestToolApproval}let c=l&&Object.keys(l).length>0;if(!c&&!u)return;return{...c?{toolExecutors:l}:{},...u?{requestToolApproval:u}:{}}}function Ms(i){let l=i?.trim();return l?l:void 0}function _B(i){let l=i.client,u=jU(l)??Ms(i.source),c=Ms(l.version),g=Ms(l.platform)??Ms(l.name),b=Ms(l.platformVersion)??c,I={cline_type:u,extension_version:c,platform:g,platform_version:b};if(i.user?.accountId===void 0)return I;let k=typeof i.user.accountId==="string"?Ms(i.user.accountId):void 0;return{...I,distinct_id:k??Ms(i.user.distinctId),user_id:k,account_id:k,account_email:k?Ms(i.user.email):void 0,organization_id:k?Ms(i.user.organizationId):void 0}}function kT(i,l){let u={},c={},g,b=(I)=>({...l,...c,...u,...I,...g?{distinct_id:g}:{}});return{setDistinctId(I){g=Ms(I)},setMetadata(I){u={...I}},updateMetadata(I){u={...u,...I}},setCommonProperties(I){c={...I}},updateCommonProperties(I){c={...c,...I}},isEnabled:()=>i.isEnabled(),capture:(I)=>i.capture({event:I.event,properties:b(I.properties)}),captureRequired:(I,k)=>i.captureRequired(I,b(k)),recordCounter:(I,k,T,E,A)=>i.recordCounter(I,k,b(T),E,A),recordHistogram:(I,k,T,E,A)=>i.recordHistogram(I,k,b(T),E,A),recordGauge:(I,k,T,E,A)=>i.recordGauge(I,k,b(T),E,A),flush:()=>i.flush(),dispose:async()=>{}}}function EB(i,l){return kT(i,_B(l))}class ST{manifest;listeners=new Set;constructor(i){this.manifest=Ii.parse(i??{workspaces:{}})}async addWorkspacePath(i){let l=await xI(i);return this.manifest=ys(this.manifest,l),this.emit({type:"workspace_added",workspace:l}),l}async switchWorkspace(i){let l=ql(i),u=this.manifest.workspaces[l];if(u)return this.manifest=Ii.parse({...this.manifest,currentWorkspacePath:l}),this.emit({type:"workspace_switched",workspace:u}),u;let c=await this.addWorkspacePath(l);return this.manifest=Ii.parse({...this.manifest,currentWorkspacePath:c.rootPath}),this.emit({type:"workspace_switched",workspace:c}),c}subscribe(i){return this.listeners.add(i),()=>{this.listeners.delete(i)}}getCurrentWorkspace(){let i=this.manifest.currentWorkspacePath;if(!i)return;return this.manifest.workspaces[i]}getWorkspace(i){let l=ql(i);return this.manifest.workspaces[l]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit(i){for(let l of this.listeners)l(i)}}var Zv=new Set,ew=new Set;function CB(i,l){return AB("sha256").update(i).update("\x00").update(l?.trim()??"").digest("hex")}function xB(i){if(i.vcsTypes&&i.vcsTypes.length>0)return i.vcsTypes;return[i.vcsType==="git"?"git":"none"]}function RB(i){if(!i.telemetry)return;let l=CB(i.rootPath,i.dedupeScope),u=i.rootCount??1;if(!Zv.has(l))Zv.add(l),yA(i.telemetry,{root_count:u,vcs_types:xB(i),init_duration_ms:i.durationMs,feature_flag_enabled:i.featureFlagEnabled??!0,is_remote_workspace:i.isRemoteWorkspace});if(i.initError&&!ew.has(l)){ew.add(l);let c=Error(i.initError.message);c.name=i.initError.errorType||"Error",vA(i.telemetry,c,{fallback_to_single_root:!0,workspace_count:u})}}function PB(i){return`${i.pluginName??i.pluginPath}: ${i.message}`}function MB(i,l,u){if(l.length>0)for(let b of l)u?.log(b.message,{severity:"warn"});if(i.length===0)return;let c=i.slice(0,3).map(PB).join("; "),g=i.length>3?`; and ${i.length-3} more`:"";u?.log(`Some plugins failed to initialize. ${c}${g}. Use --verbose for more details.`,{severity:"warn"});for(let b of i)u?.log(`Plugin initialization failed (${b.phase}) for ${b.pluginPath}`,{severity:"warn",stack:b.stack,pluginPath:b.pluginPath,pluginName:b.pluginName})}function NB(i,l){for(let u of i){let c=u.componentName?` (${u.componentName})`:"";l?.log(`[agent-plugins] ${u.pluginName??u.pluginPath}${c}: ${u.message}`,{severity:u.level==="warning"?"warn":"error"})}}function OB(i){let l=i?.["X-CLIENT-TYPE"]?.trim();if(!l)return;let u=i?.["X-CLIENT-VERSION"]?.trim();return{name:l,...u?{version:u}:{}}}function $B(i,l){let u=typeof i.thinking==="boolean",c=typeof i.reasoningEffort==="string";if(!u&&!c)return l;return{...l??{},...u?{enabled:i.thinking}:{},...c?{effort:i.reasoningEffort}:{}}}function Ad(i,l){return _i(i,l)}function LB(i,l,u){if(i.systemPrompt?.trim())return i.systemPrompt;return Ge({ide:"Terminal Shell",workspaceRoot:l.rootPath,workspaceName:l.hint,metadata:u,rules:i.rules,mode:i.mode,providerId:i.providerId,platform:process.platform||"unknown"})}function DB(i,l,u,c,g,b){let I=c.getProviderSettings(i.providerId),k=g||I?.modelCatalog?{...g??{},...I?.modelCatalog??{}}:void 0,T=i.providerConfig?.providerId===i.providerId?i.providerConfig:void 0,E=An({providerId:i.providerId,sessionId:l,source:u,defaultSource:jr.CLI,client:{name:i.extensionContext?.client?.name,version:i.extensionContext?.client?.version,versionHeaderFallback:i.headers?.["X-CLIENT-VERSION"],platform:i.extensionContext?.client?.platform,platformVersion:i.extensionContext?.client?.platformVersion,isMultiRoot:i.extensionContext?.client?.isMultiRoot},coreVersion:Hh,openAiCodex:{accountId:T?.accountId??I?.auth?.accountId,accessToken:T?.accessToken??i.apiKey??I?.auth?.accessToken??I?.apiKey,userAgentVersion:process.env.npm_package_version},headers:{stored:I?.headers,config:i.headers,session:T?.headers}}),A={...I??{},provider:i.providerId,model:i.modelId,apiKey:i.apiKey??I?.apiKey,baseUrl:i.baseUrl??I?.baseUrl,headers:void 0,reasoning:$B(i,I?.reasoning),modelCatalog:k},C={...Bm(A),...T??{}};if(E)C.headers=E;if(i.knownModels)C.knownModels=i.knownModels;if(i.extensionContext)C.extensionContext=i.extensionContext;let N=i.fetch??C.fetch??b;if(N)C.fetch=N;return C}async function UB(i){let{input:l,sessionId:u,sessionOrigin:c,providerSettingsManager:g,defaultTelemetry:b,defaultLogger:I,defaultCapabilities:k,defaultToolPolicies:T,defaultFetch:E,connectorsRequest:A,onPluginEvent:C,onPluginIssue:N,onTeamEvent:O,createSubAgentLifecycleCallbacks:L,createSpawnTool:D,localRuntime:U,readSessionMetadata:F,writeSessionMetadata:j}=i,H=Hs(l.config),{modelCatalogDefaults:Q,userInstructionService:z,configExtensions:W,onTeamRestored:ee,...te}=U??{},oe=Object.keys(te).length>0?te:void 0,{workspaceInfo:G,workspaceMetadata:se,gitState:Pe,durationMs:Le,vcsType:Te,initError:le}=await ZA(H),Ie=oe?.extensionContext,we=Ie?.client?void 0:OB(l.config.headers),He=Ie?.client??we,ce=Ie?.telemetry??oe?.telemetry??(b&&He?EB(b,{client:He,source:l.source,user:Ie?.user}):b),Se=ce&&c?kT(ce,{session_origin:c.mode,session_origin_trigger:c.trigger}):ce,_e={...Ie??{},...we?{client:we}:{},workspace:{...G,...Ie?.workspace??{}},session:{...Ie?.session??{},sessionId:u},logger:Ie?.logger??oe?.logger??I,telemetry:Se};RB({telemetry:_e.telemetry,rootPath:G.rootPath,dedupeScope:_e.client?.name??l.source,workspaceInfo:G,rootCount:1,vcsType:Te,durationMs:Le,initError:le,featureFlagEnabled:!0});let Ee=Ad(W,"hooks")?TB({cwd:l.config.cwd,workspacePath:H,rootSessionId:u,logger:oe?.logger,workspaceInfo:G,onHookRuntime:(Ye)=>$A(_e.telemetry,Ye)}):void 0,Fe=WU(oe?.hooks)?void 0:kB({rootSessionId:u,workspacePath:H,workspaceInfo:G}),Ke=Qv([oe?.hooks,Fe]),Et,yt,$r=[];if(Ad(W,"plugins"))try{yt=await pT({pluginPaths:oe?.pluginPaths,workspacePath:H,cwd:l.config.cwd,onEvent:C,providerId:l.config.providerId,modelId:l.config.modelId,workspaceInfo:G,session:_e.session,client:_e.client,user:_e.user,logger:_e.logger,telemetry:_e.telemetry,automation:_e.automation,policy:l.plugins,hookErrorMode:l.config.hookErrorMode,onIssue:N}),$r.push(...yt.issues??[]),Et=yt.failures.length?yt.failures.map((Ye)=>Ye.message).join("; "):void 0,MB(yt.failures,yt.warnings,oe?.logger??_e.logger)}catch(Ye){let Gs=Ye instanceof Error?Ye.message:String(Ye);(oe?.logger??_e.logger)?.log(`Plugin loading failed; the session has no plugins: ${Gs}`,{severity:"error",sessionId:u}),Et=Gs,$r.push({name:"plugins",pluginPath:H,state:"failed",reason:"error",lastError:{phase:"discover",message:Gs,stack:Ye instanceof Error?Ye.stack:void 0,pluginPath:H,timestamp:Date.now(),sessionId:u}})}let vt;if(Ad(W,"plugins"))try{vt=await j0({pluginPaths:l.config.agentPluginPaths,cwd:l.config.cwd,disabledPluginNames:[...Dh()]}),NB(vt.diagnostics,_e.logger)}catch(Ye){let Gs=Ye instanceof Error?Ye.message:String(Ye);_e.logger?.log(`[agent-plugins] Package discovery failed; continuing without Agent Plugins: ${Gs}`,{severity:"error"})}let Ct=await gj({request:A,logger:oe?.logger}),Gr=[...Ee?[Ee]:[],...Ct?[Ct]:[]],Lr=Gr.length>0?Gr:void 0,us=Cv(Lr,Cv(oe?.extensions,ux(yt?.extensions))),Ce=Ad(W,"plugins")?wc(yt?.pluginPaths??[]):void 0,xt={...l.config,...oe??{},sessionId:u,hooks:Ke,extensions:us,extensionContext:_e,telemetry:_e.telemetry,logger:_e.logger},Xr=DB(xt,u,l.source,g,Q,E),de=Qv([xt.hooks,xt.checkpoint?.enabled===!0?Kj({cwd:xt.cwd,sessionId:u,logger:xt.logger,createCheckpoint:xt.checkpoint?.createCheckpoint,telemetry:xt.telemetry,readSessionMetadata:F,writeSessionMetadata:j}):void 0]),De={...xt,providerConfig:Xr,workspaceMetadata:se,systemPrompt:LB(xt,G,se),hooks:de},pt=l.toolPolicies??xt.toolPolicies??T,be=Qm(k,l.capabilities),$e=be?.requestToolApproval,Vr=be?.toolExecutors,Tn=L?.(De),kc=new ST({currentWorkspacePath:G.rootPath,workspaces:{[G.rootPath]:G}});return{effectiveInput:l,config:De,providerConfig:Xr,workspaceMetadata:se,workspaceInfo:G,gitState:Pe,extensions:us,hooks:de,toolPolicies:pt,requestToolApproval:$e,pluginSandboxShutdown:yt?.shutdown,pluginIssues:$r,pluginCommandError:Et,runtimeBuilderInput:{config:De,hooks:de,extensions:us,onTeamEvent:O,createSpawnTool:D,onTeamRestored:ee,onSubAgentEvent:Tn?.onSubAgentEvent,onSubAgentStart:Tn?.onSubAgentStart,onSubAgentEnd:Tn?.onSubAgentEnd,userInstructionService:z,pluginSkillDirectories:Ce,agentPluginSkills:vt?.skills,agentPluginMcpServers:vt?.mcpServers,configExtensions:W,toolExecutors:Vr,toolPolicies:pt,workspaceManager:kc,logger:De.logger,telemetry:De.telemetry,requestToolApproval:$e}}}function Uf(i){return i.trim().replace(/^\/+/,"").toLowerCase()}function FB(i){let l=i.trimStart().match(/^\/(\S+)([\s\S]*)$/);return l?{name:Uf(l[1]),input:l[2].trim()}:void 0}function qB(i){let l=typeof i==="string"?{reply:i}:i;return{reply:l?.reply?.trim()||void 0,submitPrompt:l?.submitPrompt?.trim()||void 0}}function TT(i){let l=new Map;for(let u of i){let c=Uf(u.name);if(!c||/\s/.test(c)||!u.handler||l.has(c))continue;l.set(c,{name:c,description:u.description})}return[...l.values()]}async function _T(i,l,u={}){let c=FB(l);if(!c)return;let g=i.find((I)=>Uf(I.name)===c.name&&I.handler);if(!g?.handler)return;let b=!1;try{let I=qB(await g.handler(c.input));return b=!0,I}finally{try{Ko(u.telemetry,{ulid:u.sessionId??P(),tool:`plugin_command:${c.name}`,modelId:u.modelId,provider:u.provider,success:b,...u.agentIdentity})}catch{}}}var HB=30000,zB=600000;class ET{options;entries=new Map;disposed=!1;constructor(i={}){this.options=i}async list(i){return this.withEntry(i,(l)=>structuredClone(l.catalog))}async run(i){return this.withEntry(i,(l)=>_T(l.commands,i.prompt,{telemetry:this.options.telemetry}))}async dispose(){this.disposed=!0;let i=[...this.entries.values()];this.entries.clear(),await Promise.all(i.map((l)=>this.release(l)))}withEntry(i,l){if(this.disposed)throw Error("Plugin command manager is disposed");let u=BB(i.workspacePath),c=this.entries.get(u);if(!c)c={workspacePath:u,catalog:{workspacePath:u,status:"ready",commands:[]},commands:[],tail:Promise.resolve()},this.entries.set(u,c);let g=c;clearTimeout(g.idleTimer),g.idleTimer=setTimeout(()=>{if(this.entries.get(u)!==g)return;this.entries.delete(u),this.release(g)},zB),g.idleTimer.unref?.();let b=g.tail.then(async()=>(await this.refresh(g),l(g)));return g.tail=b.catch(()=>{}),b}async release(i){clearTimeout(i.idleTimer),await i.tail;let l=i.shutdown;i.shutdown=void 0,await l?.().catch(()=>{})}fingerprint(i){let l=jB("sha256");try{let u=$f({cwd:i,workspacePath:i});l.update(JSON.stringify(u));for(let c of u)l.update(mf(c))}catch(u){l.update(`discovery:${String(u)}`)}return l.digest("hex")}async refresh(i){let l=this.fingerprint(i.workspacePath);if(l===i.key&&(i.failedAt===void 0||Date.now()-i.failedAt<HB))return;await i.shutdown?.().catch(()=>{}),i.key=l,i.shutdown=void 0,i.commands=[],i.failedAt=void 0;let u;try{let c=await(this.options.load??pT)({cwd:i.workspacePath,workspacePath:i.workspacePath,registry:new yf({logger:this.options.logger})});i.shutdown=c.shutdown;let g=Ut({extensions:c.extensions});if(await g.initialize(),i.commands=g.getRegistrySnapshot().commands,c.failures.length)u=c.failures.map((b)=>b.message).join("; ")}catch(c){u=c instanceof Error?c.message:String(c),this.options.logger?.error?.("Plugin command discovery failed",{error:c})}if(u)i.failedAt=Date.now();i.catalog={workspacePath:i.workspacePath,status:u?"error":"ready",error:u,commands:TT(i.commands)}}}function ct(){return new Date().toISOString()}function Cd(i){if(!i||!eu(i))return;try{JB(i)}catch{}}function VB(i){let l=Cf(i);if(l)return{rootSessionId:l.rootSessionId,fileStem:`${l.agentId}__${l.teamTaskId}`};let u=x0(i);if(u)return{rootSessionId:u.rootSessionId,fileStem:u.agentId};return{rootSessionId:i,fileStem:i}}class AT{ensureSessionsDir;constructor(i){this.ensureSessionsDir=i}sessionArtifactsDir(i){return dl(this.ensureSessionsDir(),i)}ensureSessionArtifactsDir(i){let l=this.sessionArtifactsDir(i);if(!eu(l))WB(l,{recursive:!0});return l}sessionMessagesPath(i){return dl(this.sessionArtifactsDir(i),`${i}.messages.json`)}sessionCompactionPath(i){return dl(this.sessionArtifactsDir(i),`${i}.compaction.json`)}sessionManifestPath(i,l=!1){let u=l?this.ensureSessionArtifactsDir(i):this.sessionArtifactsDir(i);return dl(u,`${i}.json`)}removeSessionDirIfEmpty(i){let l=this.sessionArtifactsDir(i),u=this.ensureSessionsDir();while(l.startsWith(u)&&l!==u){if(!eu(l)){l=tw(l);continue}try{if(KB(l).length>0)break;GB(l)}catch{break}l=tw(l)}}removeSessionDir(i){this.removeDir(this.sessionArtifactsDir(i))}removeDir(i){if(!eu(i))return;try{XB(i,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths(i,l,u){let{rootSessionId:c,fileStem:g}=VB(i),b=this.sessionArtifactsDir(c);return{messagesPath:dl(b,`${g}.messages.json`)}}}function YB(i){let l=i?.importedFrom;if(typeof l!=="object"||l===null||Array.isArray(l))return;let u=l;if(typeof u.tool!=="string"||typeof u.sourceSessionId!=="string")return;return{tool:u.tool,sourceSessionId:u.sourceSessionId,sourcePath:typeof u.sourcePath==="string"?u.sourcePath:"",importedAt:typeof u.importedAt==="string"?u.importedAt:""}}function QB(i,l,u,c,g){if(u)kA(i.telemetry,{ulid:l,provider:i.providerId,model:i.modelId,...g});else IA(i.telemetry,{ulid:l,provider:i.providerId,model:i.modelId,...g});ZB(i.telemetry,{workspacePath:c})}function ZB(i,l){let u=Ei("Hooks"),c=yT(l.workspacePath),g=new Map,b=u.replace(/\\/g,"/");for(let I of c){let k=I.hookEventName??"unknown",T=g.get(k)??{global:0,workspace:0},E=I.path.replace(/\\/g,"/");if(E===b||E.startsWith(`${b}/`))T.global+=1;else T.workspace+=1;g.set(k,T)}for(let[I,k]of g.entries())LA(i,I,k.global,k.workspace)}function eH(i,l){for(let u of l.mentions)NA(i,u,l.matchedFiles.includes(u)?1:0,"file",!l.matchedFiles.includes(u));for(let u of l.matchedFiles)PA(i,"file",u.length);for(let u of l.ignoredMentions)MA(i,"file","not_found",u)}function tH(i){return i?JSON.parse(JSON.stringify(i)):void 0}function rH(i){return i?JSON.parse(JSON.stringify(i)):void 0}function sH(i){let l=i?.checkpoint&&typeof i.checkpoint==="object"&&!Array.isArray(i.checkpoint)?i.checkpoint:void 0,u=(Array.isArray(l?.history)?l.history:[]).filter((b)=>!!b&&typeof b==="object"&&!Array.isArray(b)).flatMap((b)=>{let I=typeof b.ref==="string"?b.ref.trim():"",k=Number(b.createdAt),T=Number(b.runCount);if(!I||!Number.isFinite(k)||!Number.isInteger(T))return[];return[{ref:I,createdAt:k,runCount:T,...b.kind==="stash"||b.kind==="commit"?{kind:b.kind}:{}}]}),c=u.at(-1),g=i?.checkpointEnabled===!0?!0:void 0;if(!g&&u.length===0)return;return{...g?{enabled:g}:{},...c?{latest:c}:{},history:u}}function Du(i){let{session:l}=i,u=tH(l.metadata);return{version:1,sessionId:l.sessionId,source:l.source,status:l.status,createdAt:l.startedAt,updatedAt:l.updatedAt,endedAt:l.endedAt??null,exitCode:l.exitCode??null,interactive:l.interactive,workspace:{cwd:l.cwd,root:l.workspaceRoot},model:{providerId:l.provider,modelId:l.model},capabilities:{enableTools:l.enableTools,enableSpawn:l.enableSpawn,enableTeams:l.enableTeams},lineage:{...l.parentSessionId?{parentSessionId:l.parentSessionId}:{},...l.parentAgentId?{parentAgentId:l.parentAgentId}:{},...l.agentId?{agentId:l.agentId}:{},...l.conversationId?{conversationId:l.conversationId}:{},isSubagent:l.isSubagent},...l.teamName?{team:{name:l.teamName}}:{},...l.prompt?{prompt:l.prompt}:{},...u?{metadata:u}:{},...l.messagesPath?{artifacts:{messagesPath:l.messagesPath}}:{},...i.messages?{messages:rH(i.messages)}:{},...i.usage?{usage:{...i.usage}}:{},...i.aggregateUsage?{aggregateUsage:{...i.aggregateUsage}}:{},...(()=>{let c=sH(u);return c?{checkpoint:c}:{}})()}}var Ue=oH(iH);async function rw(i,l){try{return(await Ue("git",["-C",i,"rev-parse","--verify","--quiet",l],{windowsHide:!0})).stdout.trim()||void 0}catch{return}}async function aH(i){if((await Ue("git",["-C",i,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${i} is not a git repository`);let l=(await Ue("git",["-C",i,"rev-parse","--verify","HEAD"],{windowsHide:!0})).stdout.trim(),u=await rw(i,"refs/stash"),c=nH(),g=`refs/cline/restore-transactions/${c}`;await Ue("git",["-C",i,"stash","push","--include-untracked","--message",`cline restore transaction ${c}`],{windowsHide:!0});let b=await rw(i,"refs/stash"),I=b!==void 0&&b!==u;if(I)try{await Ue("git",["-C",i,"update-ref",g,b],{windowsHide:!0}),await Ue("git",["-C",i,"stash","drop","stash@{0}"],{windowsHide:!0})}catch(T){try{await Ue("git",["-C",i,"reset","--hard",l],{windowsHide:!0}),await Ue("git",["-C",i,"clean","-fd"],{windowsHide:!0}),await Ue("git",["-C",i,"stash","apply","--index",b],{windowsHide:!0})}catch(E){throw AggregateError([T,E],"Workspace snapshot and rollback both failed")}throw T}let k=!1;return{async commit(){if(k)return;if(k=!0,!I)return;await Ue("git",["-C",i,"update-ref","-d",g],{windowsHide:!0}).catch(()=>{return})},async rollback(){if(k)return;if(await Ue("git",["-C",i,"reset","--hard",l],{windowsHide:!0}),await Ue("git",["-C",i,"clean","-fd"],{windowsHide:!0}),I)await Ue("git",["-C",i,"stash","apply","--index",g],{windowsHide:!0}),await Ue("git",["-C",i,"update-ref","-d",g],{windowsHide:!0});k=!0}}}function CT(i){let l=i?.metadata?.checkpoint&&typeof i.metadata.checkpoint==="object"&&!Array.isArray(i.metadata.checkpoint)?i.metadata.checkpoint:void 0;return(Array.isArray(l?.history)?l.history:[]).filter((u)=>!!u&&typeof u==="object"&&!Array.isArray(u)).flatMap((u)=>{let c=String(u.ref??"").trim(),g=Number(u.createdAt??0),b=Number(u.runCount??0);if(c.length===0||!Number.isFinite(g)||!Number.isInteger(b)||b<1)return[];let I=u.kind==="stash"||u.kind==="commit"?u.kind:void 0;return[{ref:c,createdAt:g,runCount:b,...I?{kind:I}:{}}]})}function lH(i,l){let u=CT(i).filter((g)=>g.runCount<=l),c=u.at(-1);return c?{latest:c,history:u}:void 0}function dH(i,l){return i.reduce((u,c)=>{if(c.runCount>l)return u;if(!u||c.runCount>u.runCount)return c;return u},void 0)}function xT(i,l){let u=0;for(let c=0;c<i.length;c+=1){let g=i[c];if(!g)continue;let b=ud(g);if(b<1)continue;let I=u+1;if(u+=b,u===l)return{index:c,span:b};if(u>l)throw Error(`Run ${l} is folded into a compacted message spanning runs ${I}-${u}`)}throw Error(`Could not find user message for run ${l}`)}function uH(i,l){let{index:u}=xT(i,l);return i.slice(0,u+1)}function cH(i,l){let{index:u,span:c}=xT(i,l);if(c!==1)throw Error(`Cannot fork before run ${l} because it is folded into a compacted message`);return i.slice(0,u)}function pH(i){let l=i.checkpointRunCount;if(!Number.isInteger(l)||l<1)throw Error("checkpointRunCount must be a positive integer");let u=dH(CT(i.session),l);if(!u)throw Error(`No checkpoint found at or before run ${l} in session ${i.session.sessionId}`);let c=(i.cwd?.trim()||i.session.cwd||i.session.workspaceRoot).trim();if(!c)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:u,cwd:c,...i.restoreMessages!==!1?{messages:uH(i.messages??[],l)}:{}}}async function mH(i,l){if(l.kind)return l.kind;let u=await Ue("git",["-C",i,"show","-s","--format=%P%x00%B",l.ref],{windowsHide:!0}),c=u.stdout.indexOf("\x00"),g=c<0?[]:u.stdout.slice(0,c).trim().split(/\s+/).filter(Boolean),b=c<0?"":u.stdout.slice(c+1);return g.length>=2&&Uj(b)?"stash":"commit"}async function hH(i,l){try{return await Ue("git",["-C",i,"cat-file","-e",`${l}^3^{commit}`],{windowsHide:!0}),!0}catch{return!1}}async function fH(i,l,u){try{let c=await Ue("git",["-C",i,"rev-list","--count",`${l}..${u}`],{windowsHide:!0}),g=Number(c.stdout.trim());return Number.isFinite(g)?g:void 0}catch{return}}async function gH(i,l){if((await Ue("git",["-C",i,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${i} is not a git repository`);await Ue("git",["-C",i,"cat-file","-e",`${l.ref}^{commit}`],{windowsHide:!0});let u=await mH(i,l),c=u==="commit"?l.ref:`${l.ref}^1`,g=(await Ue("git",["-C",i,"rev-parse","--verify",`${c}^{commit}`],{windowsHide:!0})).stdout.trim(),b=(await Ue("git",["-C",i,"rev-parse","--verify","HEAD"],{windowsHide:!0})).stdout.trim();if(b!==g){let k=await fH(i,g,b),T=k&&k>0?`${k} commit${k===1?" was":"s were"} added to the current branch after this checkpoint and would be removed by the restore`:"the current branch is no longer on the commit this checkpoint was created from (e.g. after a rebase or branch switch)";throw Error(`Cannot restore the workspace: ${T}. Restore the chat only, or move the branch back to ${g.slice(0,12)} manually (e.g. with git reset) before restoring the workspace.`)}if(u==="stash")await Ue("git",["-C",i,"cat-file","-e",`${l.ref}^2^{commit}`],{windowsHide:!0});let I=await hH(i,l.ref);if(await Ue("git",["-C",i,"update-ref","-m","cline: checkpoint restore","HEAD",g,b],{windowsHide:!0}),await Ue("git",["-C",i,"reset","--hard"],{windowsHide:!0}),I)await Ue("git",["-C",i,"clean","-fd"],{windowsHide:!0});if(u==="commit")return;await Ue("git",["-C",i,"stash","apply",l.ref],{windowsHide:!0})}class Fs extends Error{code;constructor(i,l){super(l);this.code=i,this.name="SessionVersioningError"}}function yH(i){let l=i.sessionId.trim();if(!l)throw new Fs("invalid_restore","sessionId is required");if(!i.restoreMessages&&!i.restoreWorkspace)throw new Fs("invalid_restore","restore.messages or restore.workspace must be true");if(i.restoreMessages&&i.requiresStart)throw new Fs("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger(i.checkpointRunCount)||i.checkpointRunCount<1)throw new Fs("invalid_restore","checkpointRunCount must be a positive integer");return l}class Ff{async restoreCheckpoint(i){let l=i.restore?.messages!==!1,u=i.restore?.workspace!==!1,c=Date.now(),g,b=(H,Q)=>{i.telemetry?.capture({event:"checkpoint.restore",properties:{sessionId:i.sessionId,checkpointRunCount:i.checkpointRunCount,restoreWorkspace:u,restoreMessages:l,checkpointKind:g?.kind??"unknown",outcome:H,durationMs:Date.now()-c,...Q}})},I,k,T;try{let H=yH({sessionId:i.sessionId,restoreMessages:l,restoreWorkspace:u,requiresStart:i.start===void 0,checkpointRunCount:i.checkpointRunCount}),Q=await i.getSession(H);if(!Q)throw new Fs("session_not_found",`Session ${H} not found`);if(I=Q,k=l?await i.readMessages(H):void 0,l&&k?.length===0)throw new Fs("session_messages_not_found",`No messages found for session ${H}`);T=pH({session:I,messages:k,checkpointRunCount:i.checkpointRunCount,cwd:i.cwd,restoreMessages:l}),g=T.checkpoint}catch(H){throw b("failed",{phase:"plan"}),H}let E=Du({session:I,messages:k}),A,C=[],N,O;if(l){let{startSession:H,getStartedSessionId:Q,cleanupStartedSession:z}=i;if(!i.start||!H||!Q||!z)throw new Fs("invalid_restore","startSession, getStartedSessionId, and cleanupStartedSession are required when restore.messages is true");O={startSession:H,getStartedSessionId:Q,cleanupStartedSession:z},A=lH(I,i.checkpointRunCount),C=i.restore?.omitCheckpointMessageFromSession?cH(k??[],i.checkpointRunCount):T.messages??[];let W={sourceSession:I,sourceMessages:k,sourceSnapshot:E,plan:T,restoredCheckpointMetadata:A,initialMessages:C,restoreMessages:l,restoreWorkspace:u,checkpointRunCount:i.checkpointRunCount};N=i.buildStartInput?await i.buildStartInput(W,i.start):i.start}let L=i.applyWorkspaceCheckpoint??gH,D=i.beginWorkspaceRestoreTransaction??(i.applyWorkspaceCheckpoint?void 0:aH),U=u&&D?await D(T.cwd):void 0,F=!1,j;try{if(u)await L(T.cwd,T.checkpoint);if(!O)return await U?.commit(),F=!0,b("success"),{checkpoint:T.checkpoint,sourceSnapshot:E};let H=await O.startSession(N);j={result:H,cleanup:O.cleanupStartedSession};let Q=O.getStartedSessionId(H);if(!Q)throw new Fs("invalid_restore","Restored session did not return a session id");await(i.retainCheckpointRefs??zj)(T.cwd,Q,A?.history??[]);let z=i.readRestoredSession?await i.readRestoredSession(Q):void 0,W=z?Du({session:z,messages:C}):void 0;return await U?.commit(),F=!0,b("success"),{sessionId:Q,startResult:H,messages:T.messages,checkpoint:T.checkpoint,sourceSnapshot:E,...W?{restoredSnapshot:W}:{}}}catch(H){let Q=[];if(j)try{await j.cleanup(j.result)}catch(z){Q.push(z)}if(U&&!F)try{await U.rollback()}catch(z){Q.push(z)}if(b("failed",{workspaceRolledBack:!!U&&!F,recovered:Q.length===0}),Q.length>0)throw AggregateError([H,...Q],"Checkpoint restore failed and recovery did not complete");throw H}}}var bH=ae({task:e().optional(),systemPrompt:e().optional()});class RT{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor(i,l,u,c){this.adapter=i,this.manifestStore=l,this.toPersistedMessages=u,this.heartbeatLogIntervalMs=c}teamTaskQueueKey(i,l){return`${i}::${l}`}activeTeamTaskSessionId(i,l){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey(i,l))?.at(-1)}buildSubsessionRow(i,l){let u=Uo(i.metadata);return{sessionId:l.sessionId,source:i.source,pid:i.pid,startedAt:l.startedAt,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:!1,provider:i.provider,model:i.model,cwd:i.cwd,workspaceRoot:i.workspaceRoot,teamName:i.teamName??null,enableTools:i.enableTools,enableSpawn:i.enableSpawn,enableTeams:i.enableTeams,parentSessionId:l.parentSessionId,parentAgentId:l.parentAgentId,agentId:l.agentId,conversationId:l.conversationId??null,isSubagent:!0,prompt:l.prompt,metadata:Dm({metadata:vn(void 0,{mode:l.mode,version:u?.version}),prompt:l.prompt}),hookPath:"",messagesPath:l.messagesPath,updatedAt:l.startedAt}}async queueSpawnRequest(i){if(i.hookName!=="tool_call"||i.parent_agent_id!==null)return;if(i.tool_call?.name!=="spawn_agent")return;let l=Vn(i.sessionContext);if(!l)return;let u=bH.safeParse(i.tool_call.input);await this.adapter.enqueueSpawnRequest({rootSessionId:l,parentAgentId:i.agent_id,task:u.success?u.data.task:void 0,systemPrompt:u.success?u.data.systemPrompt:void 0})}async upsertSubagentSession(i){let l=i.rootSessionId;if(!l)return;let u=await this.adapter.getSession(l);if(!u)return;let c=Av(l,i.agentId),g=await this.adapter.getSession(c),b=ct(),I=this.manifestStore.artifacts.subagentArtifactPaths(c,i.agentId,this.activeTeamTaskSessionId(l,i.parentAgentId)),k=i.prompt??g?.prompt??void 0;if(!k)k=await this.adapter.claimSpawnRequest(l,i.parentAgentId)??`Subagent run by ${i.parentAgentId}`;if(!g){let T=this.buildSubsessionRow(u,{sessionId:c,mode:"subagent",parentSessionId:l,parentAgentId:i.parentAgentId,agentId:i.agentId,conversationId:i.conversationId,prompt:k,startedAt:b,...I});return await this.adapter.upsertSession(T),this.manifestStore.initializeMessagesFile(T,I.messagesPath,b),c}return await this.adapter.updateSession({sessionId:c,setRunning:!0,parentSessionId:l,parentAgentId:i.parentAgentId,agentId:i.agentId,conversationId:i.conversationId,prompt:g.prompt??k??null,metadata:Dm({metadata:vn(g.metadata,{mode:"subagent",version:Uo(u.metadata)?.version}),prompt:g.prompt??k??null}),expectedStatusLock:g.statusLock}),c}async upsertSubagentSessionFromHook(i){if(!i.parent_agent_id)return;let l=Vn(i.sessionContext);if(!l)return;if(i.hookName==="session_shutdown"){let u=Av(l,i.agent_id);return await this.adapter.getSession(u)?u:void 0}return await this.upsertSubagentSession({agentId:i.agent_id,parentAgentId:i.parent_agent_id,conversationId:i.taskId,rootSessionId:l})}async applySubagentStatus(i,l){await this.applySubagentStatusBySessionId(i,HU(l))}async applySubagentStatusBySessionId(i,l){let u=await this.adapter.getSession(i);if(!u)return;let c=Ir(l)?null:ct(),g=Ir(l)?null:l==="failed"?1:0;await this.adapter.updateSession({sessionId:i,status:l,endedAt:c,exitCode:g,expectedStatusLock:u.statusLock})}async applyStatusToRunningChildSessions(i,l){if(!i)return;let u=await this.adapter.listSessions({limit:2000,parentSessionId:i,status:"running"});for(let c of u)await this.applySubagentStatusBySessionId(c.sessionId,l)}async onTeamTaskStart(i,l,u){let c=await this.adapter.getSession(i);if(!c)return;let g=BU(i,l),b=ct(),{messagesPath:I}=this.manifestStore.artifacts.subagentArtifactPaths(g,l),k=this.buildSubsessionRow(c,{sessionId:g,mode:"team",parentSessionId:i,parentAgentId:"lead",agentId:l,prompt:u||`Team task for ${l}`,startedAt:b,messagesPath:I});await this.adapter.upsertSession(k),this.manifestStore.initializeMessagesFile(k,I,b);let T=this.teamTaskQueueKey(i,l),E=this.teamTaskSessionsByAgent.get(T)??[];E.push(g),this.teamTaskSessionsByAgent.set(T,E)}async onTeamTaskEnd(i,l,u,c,g,b){let I=this.teamTaskQueueKey(i,l),k=this.teamTaskSessionsByAgent.get(I);if(!k||k.length===0)return;let T=k.shift();if(k.length===0)this.teamTaskSessionsByAgent.delete(I);if(!T)return;let E=g?.messages??b,A=this.toPersistedMessages(E,g,b);if(A)await this.manifestStore.persistSessionMessages(T,A);await this.applySubagentStatusBySessionId(T,u),this.teamTaskLastHeartbeatBySession.delete(T),this.teamTaskLastProgressLineBySession.delete(T)}async onTeamTaskProgress(i,l,u,c){let g=this.teamTaskQueueKey(i,l),b=this.teamTaskSessionsByAgent.get(g)?.[0];if(!b)return;let I=u.trim();if(!I)return;let k=c?.kind??"progress";if(k==="heartbeat"){let E=Date.now(),A=this.teamTaskLastHeartbeatBySession.get(b)??0;if(E-A<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(b,E)}let T=k==="heartbeat"?"[progress] heartbeat":k==="text"?`[progress] text: ${I}`:`[progress] ${I}`;if(this.teamTaskLastProgressLineBySession.get(b)===T)return;this.teamTaskLastProgressLineBySession.set(b,T)}async handleSubAgentStart(i,l){let u=await this.upsertSubagentSession({agentId:l.subAgentId,parentAgentId:l.parentAgentId,conversationId:l.conversationId,prompt:l.input.task,rootSessionId:i});if(!u)return;await this.applySubagentStatusBySessionId(u,"running")}async handleSubAgentEnd(i,l){let u=await this.upsertSubagentSession({agentId:l.subAgentId,parentAgentId:l.parentAgentId,conversationId:l.conversationId,prompt:l.input.task,rootSessionId:i});if(!u)return;if(l.error){await this.applySubagentStatusBySessionId(u,"failed");return}let c=this.toPersistedMessages(l.agentResult?.messages,l.agentResult);if(c)await this.manifestStore.persistSessionMessages(u,c);let g=l.result?.finishReason??"completed";await this.applySubagentStatusBySessionId(u,g==="aborted"?"cancelled":"completed")}appendSubagentHookAudit(i){let l=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??wH(et(),"hooks.jsonl");vH(l,`${JSON.stringify({ts:ct(),...i})}
596
+ `,"utf8")}}var PT=t({name:e().trim().min(1),description:e().trim().min(1),tools:p([e(),o(e())]).optional(),skills:p([e(),o(e())]).optional(),providerId:e().trim().min(1).optional(),modelId:e().trim().min(1).optional(),maxIterations:n().int().positive().optional()});function EH(i){i=he(i);let l=i.match(/^(---)[^\S\r\n]*(?:\r?\n|$)/);if(!l)throw Error("Missing YAML frontmatter block in agent config file.");let u=l[0].length,c=/^---[^\S\r\n]*(?:\r?\n|$)/gm;c.lastIndex=u;let g,b=Array.from(i.matchAll(c)).filter((I)=>I.index>=u);for(let I of b){let k=I.index,T=i.slice(u,k);try{let E=X.parse(T);if(!E||typeof E!=="object"||Array.isArray(E))continue;PT.parse(E);let A=i.slice(k+I[0].length);g={frontmatter:T,body:A}}catch{}}if(g)return g;throw Error("Missing closing YAML frontmatter delimiter in agent config file.")}function iw(i){if(i===void 0)return;let l=Array.isArray(i)?i:i.split(",");return Array.from(new Set(l.map((u)=>u.trim()).filter((u)=>u.length>0)))}function AH(i){return i.trim().toLowerCase()}function CH(i){let l=TH(i).toLowerCase();return l===".yml"||l===".yaml"}function xH(i,l={}){let{frontmatter:u,body:c}=EH(i),g=X.parse(u);if(!g||typeof g!=="object"||Array.isArray(g))throw Error("Agent config frontmatter must be a YAML mapping.");let b=PT.parse(g),I=c.trim();if(!I)throw Error("Missing system prompt body in agent config file.");return{name:b.name,description:b.description,tools:iw(b.tools),skills:iw(b.skills),providerId:b.providerId,modelId:b.modelId,maxIterations:b.maxIterations,systemPrompt:I,path:l.path}}function RH(i){let l=i.searchPaths??Xa(i.workspaceRoot),u=new Map,c=[];for(let g of l.filter(Boolean)){if(!IH(g))continue;let b;try{b=kH(g,{withFileTypes:!0})}catch(I){c.push({path:g,error:I instanceof Error?I:Error(String(I))});continue}for(let I of b){if(!I.isFile()||!CH(I.name))continue;let k=_H(g,I.name);try{let T=SH(k,"utf8"),E=xH(T,{path:k}),A=AH(E.name);if(!u.has(A))u.set(A,E)}catch(T){c.push({path:k,error:T instanceof Error?T:Error(String(T))})}}}return{configs:Array.from(u.values()).sort((g,b)=>(g.path?sw(g.path):g.name).localeCompare(b.path?sw(b.path):b.name)),errors:c}}var kp="subagent_",tu=64,PH=t({prompt:e().trim().min(1).describe("Task for the subagent to perform")});function MH(i){let l="",u=!0;for(let c of i.trim().toLowerCase()){let g=c.charCodeAt(0);if(!(g>=97&&g<=122||g>=48&&g<=57||c==="_")||c==="_"){if(!u)l+="_",u=!0;continue}l+=c,u=!1}return u?l.slice(0,-1):l}function NH(i){let l=2166136261;for(let u=0;u<i.length;u++)l^=i.charCodeAt(u),l=Math.imul(l,16777619);return(l>>>0).toString(36)}function OH(i){let l=MH(i)||"agent",u=NH(i).slice(0,6),c=`${kp}${l}`;if(c.length<=tu)return c;let g=tu-kp.length-u.length-1,b=l.slice(0,Math.max(1,g));return`${kp}${b}_${u}`.slice(0,tu)}function $H(i){let l=new Set,u=[];for(let c of[...i].sort((g,b)=>g.name.localeCompare(b.name))){let g=OH(c.name),b=g,I=2;while(l.has(b)){let k=`_${I++}`,T=Math.max(1,tu-k.length);b=`${g.slice(0,T)}${k}`}l.add(b),u.push({toolName:b,config:c})}return u}function LH(i,l){return{...i,providerId:l.providerId??i.providerId,modelId:l.modelId??i.modelId,maxIterations:l.maxIterations??i.maxIterations}}function DH(i){return $H(i.agents).map(({toolName:l,config:u})=>_({name:l,executionMode:"parallel",description:`Use the "${u.name}" subagent: ${u.description}`,inputSchema:S(PH),execute:async(c,g)=>{let b=i.configProvider.getRuntimeConfig(),I=I0(LH(b,u)),k=i.createSubAgentTools?await i.createSubAgentTools(u,c,g):[],T=S0({kind:"subagent",prompt:u.systemPrompt,configProvider:I,tools:k,maxIterations:u.maxIterations,parentAgentId:g.agentId,abortSignal:g.signal,onEvent:i.onSubAgentEvent,hookErrorMode:i.hookErrorMode}),E=T.getAgentId(),A=T.getConversationId(),C=g.agentId,N={systemPrompt:u.systemPrompt,task:c.prompt};if(i.onSubAgentStart)try{await i.onSubAgentStart({subAgentId:E,conversationId:A,parentAgentId:C,input:N})}catch{}try{let O=await T.run(c.prompt),L={text:O.text,iterations:O.iterations,finishReason:O.finishReason,usage:{inputTokens:O.usage.inputTokens,outputTokens:O.usage.outputTokens}};if(i.onSubAgentEnd)try{await i.onSubAgentEnd({subAgentId:E,conversationId:A,parentAgentId:C,input:N,result:L,agentResult:O})}catch{}return L}catch(O){if(i.onSubAgentEnd)try{await i.onSubAgentEnd({subAgentId:E,conversationId:A,parentAgentId:C,input:N,error:O instanceof Error?O:Error(String(O))})}catch{}throw O}},timeoutMs:300000,retryable:!1}))}function bc(i){let l=i.type;switch(l){case"agent_event":return!1;case"run_progress":return MT(i);case"task_start":case"task_end":case"teammate_spawned":case"teammate_shutdown":case"team_task_updated":case"team_message":case"team_mission_log":case"run_queued":case"run_started":case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":case"outcome_created":case"outcome_fragment_attached":case"outcome_fragment_reviewed":case"outcome_finalized":return!0;default:return Boolean(l)}}function UH(i){switch(i.type){case"teammate_spawned":case"teammate_shutdown":case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":return!0;case"run_progress":return MT(i);default:return!1}}function MT(i){return i.type==="run_progress"&&i.run.status==="queued"}var nw=4000;function ow(i){return typeof i==="object"&&i!==null}function xd(i,l=0){return typeof i==="number"&&Number.isFinite(i)?i:l}function Sp(i){return typeof i==="number"&&Number.isFinite(i)?i:void 0}function FH(i){return i.length>nw?`${i.slice(0,nw-3)}...`:i}function qo(i){if(!ow(i))return;let l=ow(i.usage)?i.usage:{},u=i.finishReason;return{text:FH(typeof i.text==="string"?i.text:""),iterations:xd(i.iterations),finishReason:typeof u==="string"?u:"completed",durationMs:xd(i.durationMs),usage:{inputTokens:xd(l.inputTokens),outputTokens:xd(l.outputTokens),cacheReadTokens:Sp(l.cacheReadTokens),cacheWriteTokens:Sp(l.cacheWriteTokens),totalCost:Sp(l.totalCost)}}}function qH(i){if(i.result===void 0)return i;return{...i,result:qo(i.result)}}function Uu(i){switch(i.type){case"task_end":{let{messages:l,result:u,error:c,...g}=i;return{...g,result:qo(u),error:c?{message:c.message}:void 0}}case"run_queued":case"run_started":case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":return{...i,run:qH(i.run)};default:return i}}function Ns(){return new Date().toISOString()}function aw(i,l){if(l<=0)return 0;return Math.round(i/l*100)}function jH(i,l){let u=new Set;for(let g of l)if(g.status==="reviewed")u.add(`${g.outcomeId}:${g.section}`);let c=new Set;for(let g of i){if(g.status==="finalized")continue;for(let b of g.requiredSections)if(!u.has(`${g.id}:${b}`))c.add(`${g.id}:${b}`)}return[...c].sort((g,b)=>g.localeCompare(b))}function BH(i,l){let u={idle:0,running:0,stopped:0},c={pending:0,in_progress:0,blocked:0,completed:0},g={queued:0,running:0,completed:0,failed:0,cancelled:0,interrupted:0},b={draft:0,in_review:0,finalized:0},I={draft:0,reviewed:0,rejected:0},k=0,T=0;for(let U of l.members)if(u[U.status]+=1,U.role==="lead")k+=1;else T+=1;let E=[],A=[],C=l.tasks.filter((U)=>U.status==="completed").length,N=new Map(l.tasks.map((U)=>[U.id,U]));for(let U of l.tasks){if(c[U.status]+=1,U.status==="blocked"){E.push(U.id);continue}if(U.status!=="pending")continue;if(U.dependsOn.every((F)=>N.get(F)?.status==="completed"))A.push(U.id)}let O=[],L,D=0;for(let U of l.runs){if(g[U.status]+=1,U.status==="queued"||U.status==="running")O.push(U.id);let F=U.startedAt.getTime();if(F>=D)D=F,L=U.id}for(let U of l.outcomes)b[U.status]+=1;for(let U of l.outcomeFragments)I[U.status]+=1;return{teamName:i,updatedAt:Ns(),members:{total:l.members.length,byStatus:u,leadCount:k,teammateCount:T},tasks:{total:l.tasks.length,byStatus:c,blockedTaskIds:E,readyTaskIds:A,completionPct:aw(C,l.tasks.length)},runs:{total:l.runs.length,byStatus:g,activeRunIds:O,latestRunId:L},outcomes:{total:l.outcomes.length,byStatus:b,finalizedPct:aw(b.finalized,l.outcomes.length),missingRequiredSections:jH(l.outcomes,l.outcomeFragments)},fragments:{total:l.outcomeFragments.length,byStatus:I}}}function HH(i){let{event:l}=i;switch(l.type){case"team_task_updated":return{teamName:i.teamName,sessionId:i.sessionId,eventType:l.type,ts:Ns(),taskId:l.task.id,agentId:l.task.assignee??l.task.createdBy};case"run_queued":case"run_started":case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":return{teamName:i.teamName,sessionId:i.sessionId,eventType:l.type,ts:Ns(),runId:l.run.id,taskId:l.run.taskId,agentId:l.run.agentId,message:l.run.error};case"run_progress":return{teamName:i.teamName,sessionId:i.sessionId,eventType:l.type,ts:Ns(),runId:l.run.id,taskId:l.run.taskId,agentId:l.run.agentId,message:l.message};case"outcome_created":case"outcome_finalized":return{teamName:i.teamName,sessionId:i.sessionId,eventType:l.type,ts:Ns(),outcomeId:l.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:i.teamName,sessionId:i.sessionId,eventType:l.type,ts:Ns(),outcomeId:l.fragment.outcomeId,fragmentId:l.fragment.id,agentId:l.fragment.sourceAgentId};case"team_message":return{teamName:i.teamName,sessionId:i.sessionId,eventType:l.type,ts:Ns(),taskId:l.message.taskId,agentId:l.message.fromAgentId,message:l.message.subject};case"team_mission_log":return{teamName:i.teamName,sessionId:i.sessionId,eventType:l.type,ts:Ns(),taskId:l.entry.taskId,agentId:l.entry.agentId,message:l.entry.summary};case"teammate_spawned":case"teammate_shutdown":case"task_start":case"task_end":case"agent_event":return{teamName:i.teamName,sessionId:i.sessionId,eventType:l.type,ts:Ns(),agentId:l.agentId}}return{teamName:i.teamName,sessionId:i.sessionId,eventType:l.type,ts:Ns()}}function Rd(){return{reset:!1,tasks:new Set,mailbox:new Set,missionLog:new Set,runs:new Set,outcomes:new Set,outcomeFragments:new Set}}function _l(i){if(typeof DOMException<"u"&&i instanceof DOMException&&i.name==="AbortError")return!0;if(!(i instanceof Error))return!1;return i.name==="AbortError"||i.message.toLowerCase().includes("aborted")}function lw(i,l){return i?.abortRequested===!0||i?.status==="stopped"&&_l(l)}function zH(i){if(i.finishReason==="aborted")return"cancelled";if(i.finishReason==="error")return"failed";return"completed"}var WH=600000,dw="recovered_queued";function KH(i){return`This is an automatic recovery of interrupted team run ${i.id}. The previous process stopped before completion. Continue the task safely, inspect the current workspace state before making changes, and avoid duplicating completed work.
597
+
598
+ ${i.message}`}class NT{teamId;teamName;onTeamEvent;onStateDirty;members=new Map;tasks=new Map;missionLog=[];mailbox=[];missionStepCounter=0;taskCounter=0;messageCounter=0;missionCounter=0;runCounter=0;outcomeCounter=0;outcomeFragmentCounter=0;runs=new Map;dirty=Rd();runQueue=[];queuedRunDispatchTimer;outcomes=new Map;outcomeFragments=new Map;missionLogIntervalSteps;missionLogIntervalMs;maxConcurrentRuns;constructor(i){this.teamName=i.teamName,this.teamId=`t_${mr(R(10))}`,this.onTeamEvent=i.onTeamEvent,this.onStateDirty=i.onStateDirty,this.missionLogIntervalSteps=Math.max(1,i.missionLogIntervalSteps??3),this.missionLogIntervalMs=Math.max(1000,i.missionLogIntervalMs??120000),this.maxConcurrentRuns=Math.max(1,i.maxConcurrentRuns??2);let l=i.leadAgentId??"lead";this.members.set(l,{agentId:l,role:"lead",status:"idle",runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()})}getTeamId(){return this.teamId}getTeamName(){return this.teamName}getMemberRole(i){return this.members.get(i)?.role}getMemberIds(){return Array.from(this.members.keys())}getTeammateIds(){return Array.from(this.members.values()).filter((i)=>i.role==="teammate").map((i)=>i.agentId)}getTask(i){return this.tasks.get(i)}listTasks(){return Array.from(this.tasks.values())}listTaskItems(i){return Array.from(this.tasks.values()).map((l)=>{let u=this.getUnresolvedDependencies(l);return{...l,blockedBy:u,isReady:l.status==="pending"&&!l.assignee&&u.length===0}}).filter((l)=>{if(i?.status&&l.status!==i.status)return!1;if(i?.assignee&&l.assignee!==i.assignee)return!1;return!0})}listMissionLog(i){if(!i||i<=0)return[...this.missionLog];return this.missionLog.slice(Math.max(0,this.missionLog.length-i))}listMailbox(i,l){let u=l?.unreadOnly??!0,c=l?.markRead??!0,g=l?.limit,b=this.mailbox.filter((k)=>k.toAgentId===i&&(!u||!k.readAt)),I=typeof g==="number"&&g>0?b.slice(Math.max(0,b.length-g)):b;if(c){let k=new Date,T=!1;for(let E of I)if(!E.readAt)E.readAt=k,this.dirty.mailbox.add(E.id),T=!0;if(T)this.notifyStateDirty()}return I.map((k)=>({...k}))}getSnapshot(){let i={pending:0,in_progress:0,blocked:0,completed:0};for(let u of this.tasks.values())i[u.status]++;let l={draft:0,in_review:0,finalized:0};for(let u of this.outcomes.values())l[u.status]++;return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map((u)=>({agentId:u.agentId,role:u.role,description:u.description,status:u.status})),taskCounts:i,unreadMessages:this.mailbox.filter((u)=>!u.readAt).length,missionLogEntries:this.missionLog.length,activeRuns:Array.from(this.runs.values()).filter((u)=>u.status==="running").length,queuedRuns:Array.from(this.runs.values()).filter((u)=>u.status==="queued").length,outcomeCounts:l}}exportState(){return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map((i)=>({agentId:i.agentId,role:i.role,description:i.description,status:i.status})),tasks:Array.from(this.tasks.values()).map((i)=>({...i})),mailbox:this.mailbox.map((i)=>({...i})),missionLog:this.missionLog.map((i)=>({...i})),runs:Array.from(this.runs.values()).map((i)=>({...i})),outcomes:Array.from(this.outcomes.values()).map((i)=>({...i})),outcomeFragments:Array.from(this.outcomeFragments.values()).map((i)=>({...i}))}}hydrateState(i){this.clearQueuedRunDispatchTimer(),this.dirty=Rd(),this.tasks.clear();for(let u of i.tasks)this.tasks.set(u.id,{...u});this.mailbox.length=0,this.mailbox.push(...i.mailbox.map((u)=>({...u}))),this.missionLog.length=0,this.missionLog.push(...i.missionLog.map((u)=>({...u}))),this.runs.clear();for(let u of i.runs??[])this.runs.set(u.id,{...u,result:qo(u.result)});this.runQueue.length=0,this.runQueue.push(...Array.from(this.runs.values()).filter((u)=>u.status==="queued").map((u)=>u.id)),this.outcomes.clear();for(let u of i.outcomes??[])this.outcomes.set(u.id,{...u});this.outcomeFragments.clear();for(let u of i.outcomeFragments??[])this.outcomeFragments.set(u.id,{...u});let l=Array.from(this.members.values()).filter((u)=>u.role==="lead");this.members.clear();for(let u of l)this.members.set(u.agentId,{...u,status:"idle",runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()});for(let u of i.members){if(u.role!=="teammate")continue;this.members.set(u.agentId,{agentId:u.agentId,role:"teammate",description:u.description,status:"stopped",agent:void 0,runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()})}this.taskCounter=Math.max(this.taskCounter,to(i.tasks.map((u)=>u.id),"task_")),this.messageCounter=Math.max(this.messageCounter,to(i.mailbox.map((u)=>u.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,to(i.missionLog.map((u)=>u.id),"log_")),this.runCounter=Math.max(this.runCounter,to((i.runs??[]).map((u)=>u.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,to((i.outcomes??[]).map((u)=>u.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,to((i.outcomeFragments??[]).map((u)=>u.id),"frag_"))}isTeammateActive(i){let l=this.members.get(i);return!!l&&l.role==="teammate"&&!!l.agent}spawnTeammate({agentId:i,config:l}){let u=this.members.get(i);if(u&&u.role!=="teammate")throw Error(`Team member "${i}" already exists and is not a teammate`);if(u&&u.runningCount>0)throw Error(`Teammate "${i}" is currently running and cannot be respawned`);let c={...l,apiTimeoutMs:WH,consumePendingUserMessage:()=>{let I=this.members.get(i);if(!I||!I.pendingSteerMessage)return;let k=I.pendingSteerMessage;return I.pendingSteerMessage=void 0,k},onEvent:(I)=>{l.onEvent?.(I),this.emitEvent({type:"agent_event",agentId:i,event:I}),this.trackMeaningfulEvent(i,I)}},g=new fc(c);if(c.onEvent)g.subscribeEvents(c.onEvent);let b={agentId:i,role:"teammate",description:l.role,status:"idle",agent:g,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set(i,b),this.emitEvent({type:"teammate_spawned",agentId:i,role:l.role,teammate:{rolePrompt:l.systemPrompt,modelId:l.modelId,maxIterations:l.maxIterations,runtimeAgentId:g.getAgentId(),conversationId:g.getConversationId(),parentAgentId:null}}),{agentId:b.agentId,role:b.role,description:b.description,status:b.status}}shutdownTeammate(i,l){let u=this.members.get(i);if(!u||u.role!=="teammate")throw Error(`Teammate "${i}" was not found`);try{u.agent?.abort()}catch(c){if(!_l(c))throw c}u.status="stopped",this.emitEvent({type:"teammate_shutdown",agentId:i,reason:l})}updateTeammateConnections(i){for(let l of this.members.values()){if(l.role!=="teammate"||!l.agent)continue;l.agent.updateConnection(i)}}createTask(i){let l=`task_${String(++this.taskCounter).padStart(4,"0")}`,u=new Date,c={id:l,title:i.title,description:i.description,status:i.assignee?"in_progress":"pending",createdAt:u,updatedAt:u,createdBy:i.createdBy,assignee:i.assignee,dependsOn:i.dependsOn??[]};return this.tasks.set(l,c),this.emitEvent({type:"team_task_updated",task:{...c}}),{...c}}claimTask(i,l){let u=this.requireTask(i);return this.assertDependenciesResolved(u),u.status="in_progress",u.assignee=l,u.updatedAt=new Date,this.emitEvent({type:"team_task_updated",task:{...u}}),this.appendMissionLog({agentId:l,taskId:i,kind:"progress",summary:`Claimed task "${u.title}"`}),{...u}}blockTask(i,l,u){let c=this.requireTask(i);return c.status="blocked",c.updatedAt=new Date,c.summary=u,this.emitEvent({type:"team_task_updated",task:{...c}}),this.appendMissionLog({agentId:l,taskId:i,kind:"blocked",summary:u}),{...c}}completeTask(i,l,u){let c=this.requireTask(i);if(c.status="completed",c.updatedAt=new Date,c.summary=u,!c.assignee)c.assignee=l;return this.emitEvent({type:"team_task_updated",task:{...c}}),this.appendMissionLog({agentId:l,taskId:i,kind:"done",summary:u}),{...c}}async routeToTeammate(i,l,u){let c=this.members.get(i);if(!c||c.role!=="teammate"||!c.agent)throw Error(`Teammate "${i}" was not found`);if(!c.agent.canStartRun())throw Error("Cannot start a new run while another run is already in progress");c.abortRequested=!1,c.abortReason=void 0,c.runningCount++,c.status="running",this.emitEvent({type:"task_start",agentId:i,message:l});try{let g=this.listMailbox(i,{unreadOnly:!0,markRead:!0}),b=g.length>0?`${this.buildMailboxNotification(g)}
599
+
600
+ ${l}`:l,I=u?.continueConversation?await c.agent.continue(b):await c.agent.run(b),k=zH(I);if(this.emitEvent({type:"task_end",agentId:i,status:k,result:I}),k==="completed")this.recordProgressStep(i,`Completed a delegated run (${I.iterations} iterations)`,u?.taskId,!0);else if(k==="failed")this.appendMissionLog({agentId:i,taskId:u?.taskId,kind:"error",summary:I.text||"Teammate run failed"});return I}catch(g){let b=g instanceof Error?g:Error(String(g)),I=lw(c,b);if(this.emitEvent({type:"task_end",agentId:i,status:I?"cancelled":"failed",error:b,messages:c.agent.getMessages()}),!I)this.appendMissionLog({agentId:i,taskId:u?.taskId,kind:"error",summary:b.message});throw b}finally{if(c.runningCount--,c.runningCount<=0&&this.members.get(i)?.status!=="stopped")c.status="idle"}}startTeammateRun(i,l,u){let c=`run_${String(++this.runCounter).padStart(5,"0")}`,g={id:c,agentId:i,taskId:u?.taskId,status:"queued",message:l,priority:u?.priority??0,retryCount:0,maxRetries:Math.max(0,u?.maxRetries??0),continueConversation:u?.continueConversation,startedAt:new Date(0),leaseOwner:u?.leaseOwner,heartbeatAt:void 0,lastProgressAt:new Date,lastProgressMessage:"queued",currentActivity:"queued"};return this.runs.set(c,g),this.runQueue.push(c),this.emitEvent({type:"run_queued",run:{...g}}),this.dispatchQueuedRuns(),{...g}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let i;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let l=this.selectNextDispatchableQueuedRun();i=l.nextDelayedAttemptAt;let u=l.index;if(u<0){this.scheduleQueuedRunDispatch(i);return}let[c]=this.runQueue.splice(u,1),g=c?this.runs.get(c):void 0;if(!g||g.status!=="queued")continue;this.executeQueuedRun(g)}this.scheduleQueuedRunDispatch(i)}selectNextDispatchableQueuedRun(){let i=-1,l=Number.NEGATIVE_INFINITY,u,c=Date.now();for(let g=0;g<this.runQueue.length;g++){let b=this.runs.get(this.runQueue[g]);if(!b||b.status!=="queued")continue;if(b.nextAttemptAt&&b.nextAttemptAt.getTime()>c){if(!u||b.nextAttemptAt<u)u=b.nextAttemptAt;continue}if(b.priority>l)l=b.priority,i=g}return{index:i,nextDelayedAttemptAt:u}}scheduleQueuedRunDispatch(i){if(!i)return;let l=Math.max(0,i.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},l)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let i=0;for(let l of this.runs.values())if(l.status==="running")i++;return i}async executeQueuedRun(i){let l=i.currentActivity===dw;i.nextAttemptAt=void 0,i.status="running",i.startedAt=new Date,i.heartbeatAt=new Date,i.currentActivity="run_started",this.emitEvent({type:"run_started",run:{...i}});let u=setInterval(()=>{if(i.status!=="running")return;this.recordRunProgress(i,"heartbeat")},2000);try{let c=l?KH(i):i.message,g=await this.routeToTeammate(i.agentId,c,{taskId:i.taskId,continueConversation:i.continueConversation});if(this.runs.get(i.id)?.status!=="running")return;let b=this.members.get(i.agentId)?.abortReason;if(b!==void 0){this.cancelRun(i.id,b);return}if(g.finishReason==="error")throw Error(g.text||"Teammate run failed");i.status="completed",i.result=qo(g),i.endedAt=new Date,i.currentActivity="completed",this.emitEvent({type:"run_completed",run:{...i}})}catch(c){let g=c instanceof Error?c.message:String(c??"Unknown error");if(this.runs.get(i.id)?.status!=="running")return;i.error=g,i.endedAt=new Date;let b=this.members.get(i.agentId);if(_l(c)&&lw(b,c))this.cancelRun(i.id,b?.abortReason??g);else if(i.retryCount<i.maxRetries)i.retryCount++,i.status="queued",i.nextAttemptAt=new Date(Date.now()+Math.min(30000,1000*2**i.retryCount)),this.runQueue.push(i.id),this.recordRunProgress(i,`retry_scheduled_${i.retryCount}`);else i.status="failed",i.currentActivity="failed",this.emitEvent({type:"run_failed",run:{...i}})}finally{clearInterval(u),this.dispatchQueuedRuns()}}listRuns(i){let l=i?.includeCompleted??!0;return Array.from(this.runs.values()).filter((u)=>{if(!l&&!["running","queued"].includes(u.status))return!1;if(i?.status&&u.status!==i.status)return!1;if(i?.agentId&&u.agentId!==i.agentId)return!1;return!0}).map((u)=>({...u}))}getRun(i){let l=this.runs.get(i);return l?{...l}:void 0}async awaitRun(i,l=250){let u=this.runs.get(i);if(!u)throw Error(`Run "${i}" was not found`);while(u.status==="queued"||u.status==="running")await uw(l);return{...u}}async awaitAllRuns(i=250){while(Array.from(this.runs.values()).some((l)=>["queued","running"].includes(l.status)))await uw(i);return this.listRuns()}cancelOutstandingWork(i){let l=typeof i==="string"?i:i instanceof Error?i.message:i===void 0?"parent_session_abort":String(i);this.clearQueuedRunDispatchTimer();let u;for(let c of this.runs.values())if(c.status==="queued"||c.status==="running")this.cancelRun(c.id,l);for(let c of this.members.values()){if(c.role!=="teammate"||!c.agent||c.runningCount<=0||c.abortRequested)continue;c.abortRequested=!0,c.abortReason=l;try{c.agent.abort(Error(l))}catch(g){if(!_l(g)&&u===void 0)u=g}}if(u!==void 0)throw u}cancelRun(i,l){let u=this.runs.get(i);if(!u)throw Error(`Run "${i}" was not found`);if(u.status==="completed"||u.status==="failed"||u.status==="cancelled"||u.status==="interrupted")return{...u};u.status="cancelled",u.error=l,u.endedAt=new Date,u.currentActivity="cancelled";let c=this.runQueue.indexOf(i);if(c>=0)this.runQueue.splice(c,1);return this.emitEvent({type:"run_cancelled",run:{...u},reason:l}),{...u}}recoverActiveRuns(i="runtime_recovered"){let l=[];for(let u of this.runs.values()){if(!["queued","running"].includes(u.status))continue;let c=this.members.get(u.agentId);if(!c||c.role!=="teammate"||!c.agent){u.status="interrupted",u.error="teammate_unavailable_after_recovery",u.endedAt=new Date,u.currentActivity="interrupted",this.emitEvent({type:"run_interrupted",run:{...u},reason:u.error});continue}let g=new Date;if(u.status="queued",u.error=void 0,u.endedAt=void 0,u.heartbeatAt=g,u.lastProgressAt=g,u.lastProgressMessage=i,u.currentActivity=dw,!this.runQueue.includes(u.id))this.runQueue.push(u.id);l.push({...u}),this.emitEvent({type:"run_queued",run:{...u}})}return this.dispatchQueuedRuns(),l}markStaleRunsInterrupted(i="runtime_recovered"){let l=[];for(let u of this.runs.values()){if(!["queued","running"].includes(u.status))continue;u.status="interrupted",u.error=i,u.endedAt=new Date,u.currentActivity="interrupted",l.push({...u}),this.emitEvent({type:"run_interrupted",run:{...u},reason:i})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),l}sendMessage(i,l,u,c,g){if(!this.members.has(i))throw Error(`Unknown sender "${i}"`);let b=this.members.get(l);if(!b)throw Error(`Unknown recipient "${l}"`);let I={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:i,toAgentId:l,subject:u,body:c,taskId:g,sentAt:new Date};if(this.mailbox.push(I),this.emitEvent({type:"team_message",message:{...I}}),b.role==="teammate"&&b.runningCount>0&&b.agent)b.pendingSteerMessage=`[MAILBOX] You got a message from ${i}. Subject: "${u}". Use the team_read_mailbox tool to read it at your convenience.`;return{...I}}broadcast(i,l,u,c){let g=[];for(let b of this.members.values()){if(b.agentId===i)continue;if(b.role==="lead")continue;g.push(this.sendMessage(i,b.agentId,l,u,c?.taskId))}return g}appendMissionLog(i){if(!this.members.has(i.agentId))throw Error(`Unknown team member "${i.agentId}"`);let l={id:`log_${String(++this.missionCounter).padStart(6,"0")}`,ts:new Date,teamId:this.teamId,agentId:i.agentId,taskId:i.taskId,kind:i.kind,summary:i.summary,evidence:i.evidence,nextAction:i.nextAction};this.missionLog.push(l);let u=this.members.get(i.agentId);if(u)u.lastMissionAt=Date.now(),u.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:"team_mission_log",entry:{...l}}),{...l}}createOutcome(i){let l={id:`out_${String(++this.outcomeCounter).padStart(4,"0")}`,teamId:this.teamId,title:i.title,status:"draft",requiredSections:[...new Set(i.requiredSections)],createdBy:i.createdBy,createdAt:new Date};return this.outcomes.set(l.id,l),this.emitEvent({type:"outcome_created",outcome:{...l}}),{...l}}listOutcomes(){return Array.from(this.outcomes.values()).map((i)=>({...i}))}attachOutcomeFragment(i){let l=this.outcomes.get(i.outcomeId);if(!l)throw Error(`Outcome "${i.outcomeId}" was not found`);if(!l.requiredSections.includes(i.section))throw Error(`Section "${i.section}" is not part of outcome "${i.outcomeId}"`);let u={id:`frag_${String(++this.outcomeFragmentCounter).padStart(5,"0")}`,teamId:this.teamId,outcomeId:i.outcomeId,section:i.section,sourceAgentId:i.sourceAgentId,sourceRunId:i.sourceRunId,content:i.content,status:"draft",createdAt:new Date};if(this.outcomeFragments.set(u.id,u),l.status==="draft")l.status="in_review",this.dirty.outcomes.add(l.id);return this.emitEvent({type:"outcome_fragment_attached",fragment:{...u}}),{...u}}reviewOutcomeFragment(i){let l=this.outcomeFragments.get(i.fragmentId);if(!l)throw Error(`Fragment "${i.fragmentId}" was not found`);return l.status=i.approved?"reviewed":"rejected",l.reviewedBy=i.reviewedBy,l.reviewedAt=new Date,this.emitEvent({type:"outcome_fragment_reviewed",fragment:{...l}}),{...l}}listOutcomeFragments(i){return Array.from(this.outcomeFragments.values()).filter((l)=>l.outcomeId===i).map((l)=>({...l}))}finalizeOutcome(i){let l=this.outcomes.get(i);if(!l)throw Error(`Outcome "${i}" was not found`);let u=this.listOutcomeFragments(i);for(let c of l.requiredSections)if(!u.some((g)=>g.section===c&&g.status==="reviewed"))throw Error(`Outcome "${i}" cannot be finalized. Section "${c}" is missing a reviewed fragment.`);return l.status="finalized",l.finalizedAt=new Date,this.emitEvent({type:"outcome_finalized",outcome:{...l}}),{...l}}cleanup(){for(let i of this.members.values())if(i.role==="teammate"&&i.runningCount>0)throw Error(`Cannot cleanup team while teammate "${i.agentId}" is still running`);if(Array.from(this.runs.values()).some((i)=>["queued","running"].includes(i.status)))throw Error("Cannot cleanup team while async teammate runs are still active");for(let i of this.members.values())if(i.role==="teammate")try{i.agent?.abort()}catch(l){if(!_l(l))throw l}this.tasks.clear(),this.mailbox.length=0,this.missionLog.length=0,this.runs.clear(),this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),this.outcomes.clear(),this.outcomeFragments.clear();for(let[i,l]of this.members.entries())if(l.role==="teammate")this.members.delete(i);this.dirty=Rd(),this.dirty.reset=!0,this.notifyStateDirty()}requireTask(i){let l=this.tasks.get(i);if(!l)throw Error(`Task "${i}" was not found`);return l}assertDependenciesResolved(i){let l=this.getUnresolvedDependencies(i);if(l.length>0)throw Error(`Task "${i.id}" is blocked by "${l[0]}"`)}getUnresolvedDependencies(i){return i.dependsOn.filter((l)=>{let u=this.tasks.get(l);return!u||u.status!=="completed"})}trackMeaningfulEvent(i,l){if(this.recordRunActivityFromAgentEvent(i,l),l.type==="iteration_end"&&l.hadToolCalls){this.recordProgressStep(i,`Completed iteration ${l.iteration} with ${l.toolCallCount} tool call(s)`);return}if(l.type==="content_end"&&l.contentType==="tool"&&!l.error){this.recordProgressStep(i,`Finished tool "${l.toolName??"unknown"}"`);return}if(l.type==="done"){this.appendMissionLog({agentId:i,kind:"done",summary:`Completed a delegated run (${l.iterations} iterations)`});return}if(l.type==="error")this.appendMissionLog({agentId:i,kind:"error",summary:l.error.message})}recordRunActivityFromAgentEvent(i,l){let u;switch(l.type){case"iteration_start":u=`iteration_${l.iteration}_started`;break;case"content_start":if(l.contentType==="tool")u=`running_tool_${l.toolName??"unknown"}`;break;case"content_end":if(l.contentType==="tool")u=l.error?this.formatProgressErrorActivity(`tool_${l.toolName??"unknown"}_error`,l.error):`finished_tool_${l.toolName??"unknown"}`;break;case"done":u="finalizing_response";break;case"error":u=this.formatProgressErrorActivity("run_error",l.error.message);break;default:break}if(!u)return;for(let c of this.runs.values()){if(c.agentId!==i||c.status!=="running")continue;this.recordRunProgress(c,u)}}recordRunProgress(i,l){let u=new Date;i.heartbeatAt=u,i.lastProgressAt=u,i.lastProgressMessage=l,i.currentActivity=l,this.emitEvent({type:"run_progress",run:{...i},message:l})}formatProgressErrorActivity(i,l){let u=l.replace(/\s+/g," ").trim();if(u.length===0)return i;let c=u.length>240?`${u.slice(0,237).trimEnd()}...`:u;return`${i}: ${c}`}recordProgressStep(i,l,u,c=!1){this.missionStepCounter++;let g=this.members.get(i);if(!g)return;let b=this.missionStepCounter-g.lastMissionStep,I=Date.now()-g.lastMissionAt;if(!c&&b<this.missionLogIntervalSteps&&I<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:i,taskId:u,kind:"progress",summary:l})}buildMailboxNotification(i){if(i.length===0)return"";let l=[`[MAILBOX] You have ${i.length} unread message(s):`];for(let u of i)l.push(`--- Message from ${u.fromAgentId} | subject: ${u.subject} ---`),l.push(u.body);return l.push("---"),l.join(`
601
+ `)}markDirtyFromEvent(i){switch(i.type){case"team_task_updated":this.dirty.tasks.add(i.task.id);break;case"team_message":this.dirty.mailbox.add(i.message.id);break;case"team_mission_log":this.dirty.missionLog.add(i.entry.id);break;case"run_queued":case"run_started":case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":case"run_progress":this.dirty.runs.add(i.run.id);break;case"outcome_created":case"outcome_finalized":this.dirty.outcomes.add(i.outcome.id);break;case"outcome_fragment_attached":case"outcome_fragment_reviewed":this.dirty.outcomeFragments.add(i.fragment.id);break;default:break}}hasPendingStateDelta(){let i=this.dirty;return i.reset||i.tasks.size>0||i.mailbox.size>0||i.missionLog.size>0||i.runs.size>0||i.outcomes.size>0||i.outcomeFragments.size>0}drainStateDelta(){let i=this.dirty;this.dirty=Rd();let l=(g,b)=>{let I=[];for(let k of g){let T=b(k);if(T!==void 0)I.push({...T})}return I},u=i.mailbox.size>0?new Map(this.mailbox.map((g)=>[g.id,g])):void 0,c=i.missionLog.size>0?new Map(this.missionLog.map((g)=>[g.id,g])):void 0;return{teamId:this.teamId,teamName:this.teamName,reset:i.reset,members:this.exportMembers(),tasks:l(i.tasks,(g)=>this.tasks.get(g)),mailbox:l(i.mailbox,(g)=>u?.get(g)),missionLog:l(i.missionLog,(g)=>c?.get(g)),runs:l(i.runs,(g)=>this.runs.get(g)),outcomes:l(i.outcomes,(g)=>this.outcomes.get(g)),outcomeFragments:l(i.outcomeFragments,(g)=>this.outcomeFragments.get(g))}}requeueStateDelta(i){this.dirty.reset=this.dirty.reset||i.reset;for(let l of i.tasks)this.dirty.tasks.add(l.id);for(let l of i.mailbox)this.dirty.mailbox.add(l.id);for(let l of i.missionLog)this.dirty.missionLog.add(l.id);for(let l of i.runs)this.dirty.runs.add(l.id);for(let l of i.outcomes)this.dirty.outcomes.add(l.id);for(let l of i.outcomeFragments)this.dirty.outcomeFragments.add(l.id)}notifyStateDirty(){try{this.onStateDirty?.()}catch{}}markAllStateDirty(i=!0){this.dirty.reset=this.dirty.reset||i;for(let l of this.tasks.keys())this.dirty.tasks.add(l);for(let l of this.mailbox)this.dirty.mailbox.add(l.id);for(let l of this.missionLog)this.dirty.missionLog.add(l.id);for(let l of this.runs.keys())this.dirty.runs.add(l);for(let l of this.outcomes.keys())this.dirty.outcomes.add(l);for(let l of this.outcomeFragments.keys())this.dirty.outcomeFragments.add(l)}exportMembers(){return Array.from(this.members.values()).map((i)=>({agentId:i.agentId,role:i.role,description:i.description,status:i.status}))}emitEvent(i){this.markDirtyFromEvent(i);try{this.onTeamEvent?.(i)}catch{}}}function uw(i){return new Promise((l)=>setTimeout(l,i))}function to(i,l){let u=0;for(let c of i){if(!c.startsWith(l))continue;let g=Number.parseInt(c.slice(l.length),10);if(Number.isFinite(g))u=Math.max(u,g)}return u}function GH(i,l){switch(l.type){case"run_queued":case"run_started":i.activeTeamRunIds.add(l.run.id);break;case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":{let u;if(l.type==="run_failed")u=l.run.error;else if(l.type==="run_cancelled"||l.type==="run_interrupted")u=l.run.error??l.reason;i.activeTeamRunIds.delete(l.run.id),i.pendingTeamRunUpdates.push({runId:l.run.id,agentId:l.run.agentId,taskId:l.run.taskId,status:l.type.replace("run_",""),error:u,iterations:l.run.result?.iterations}),eh(i);break}default:break}}async function XH(i,l,u){switch(l.type){case"run_progress":await u("onTeamTaskProgress",i,l.run.agentId,l.message,{kind:l.message==="heartbeat"?"heartbeat":"progress"});break;case"agent_event":if(l.event.type==="content_start"&&l.event.contentType==="text"&&typeof l.event.text==="string"){let c=l.event.text.replace(/\s+/g," ").trim().slice(0,120);if(c)await u("onTeamTaskProgress",i,l.agentId,c,{kind:"text"})}break;case"task_start":await u("onTeamTaskStart",i,l.agentId,l.message);break;case"task_end":{let c=l.status??(l.error?"failed":l.result?.finishReason==="aborted"?"cancelled":"completed");if(c==="cancelled")await u("onTeamTaskEnd",i,l.agentId,"cancelled","[done] aborted",l.result,l.result?.messages??l.messages);else if(c==="failed"){let g=l.error?.message||l.result?.text||"Teammate task failed";await u("onTeamTaskEnd",i,l.agentId,"failed",`[error] ${g}`,l.result,l.result?.messages??l.messages)}else await u("onTeamTaskEnd",i,l.agentId,"completed",`[done] ${l.result?.finishReason??"completed"}`,l.result,l.result?.messages);break}default:break}}var JH=1000,cw=new WeakMap;function VH(i,l,u,c,g=Date.now){let b=i.runtime.teamRuntime;if(!b)return;let I=()=>YH(i,l,u,c),k=cw.get(b);if(!k)k={last:0},cw.set(b,k);if(bc(u)){k.pending=void 0,I();return}let T=g(),E=JH-(T-k.last);if(E<=0){k.last=T,k.pending=void 0,I();return}if(k.pending=I,!k.timer){let A=k;A.timer=setTimeout(()=>{A.timer=void 0;let C=A.pending;if(A.pending=void 0,C)A.last=g(),C()},E),A.timer.unref?.()}}function YH(i,l,u,c){let g=i.runtime.teamRuntime;if(!g)return;let b=g.getTeamName();c({type:"team_progress",payload:{sessionId:l,teamName:b,lifecycle:HH({teamName:b,sessionId:l,event:u}),summary:BH(b,g.exportState())}})}function Zm(i){return i.activeTeamRunIds.size>0||i.pendingTeamRunUpdates.length>0}function QH(i,l){if(i.aborting)return!1;if(!(l==="completed"||l==="max_iterations"))return!1;return i.config.enableAgentTeams===!0&&Zm(i)}function eh(i){let l=i.teamRunWaiters.splice(0);for(let u of l)u()}async function ZH(i){while(!0){if(i.aborting)return[];if(i.pendingTeamRunUpdates.length>0){let l=[...i.pendingTeamRunUpdates];return i.pendingTeamRunUpdates.length=0,l}if(i.activeTeamRunIds.size===0)return[];await new Promise((l)=>{i.teamRunWaiters.push(l)})}}function ez(i,l){let u=l.map((b)=>{let I=[`- ${b.runId} (${b.agentId}) -> ${b.status}`];if(b.taskId)I.push(` task=${b.taskId}`);if(typeof b.iterations==="number")I.push(` iterations=${b.iterations}`);if(b.error)I.push(` error=${b.error}`);return I.join("")}),c=i.activeTeamRunIds.size,g=c>0?`There are still ${c} teammate run(s) in progress. Continue coordination and decide whether to wait for more updates.`:"No teammate runs are currently in progress. Continue coordination using these updates.";return th(`System-delivered teammate async run updates:
602
+ ${u.join(`
603
+ `)}
604
+
605
+ ${g}`,i.config.mode)}function th(i,l){return cr(i,l==="plan"?"plan":l==="yolo"?"yolo":"act")}function az(i){return tz("sha1").update(i).digest("hex")}function OT(i){return Boolean(i&&typeof i==="object"&&"code"in i)}function pw(i){return OT(i)&&i.code==="ENOENT"}function mw(i){return OT(i)&&(i.code==="EACCES"||i.code==="EPERM")}class $T{definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor(i,l){if(i.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=i,this.debounceMs=l?.debounceMs??75,this.emitParseErrors=l?.emitParseErrors??!1;for(let u of i){if(this.definitionsByType.has(u.type))throw Error(`Duplicate unified config definition type '${u.type}'.`);this.definitionsByType.set(u.type,u),this.recordsByType.set(u.type,new Map),this.discoveredDirectoriesByType.set(u.type,new Set);for(let c of u.directories){let g=this.baseTypesByDirectory.get(c);if(g)g.add(u.type);else this.baseTypesByDirectory.set(c,new Set([u.type]))}}}subscribe(i){return this.listeners.add(i),()=>{this.listeners.delete(i)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let i of this.watchersByDirectory.values())i.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let i of this.definitions)await this.refreshTypeInternal(i)})}async refreshType(i){let l=this.definitionsByType.get(i);if(!l)throw Error(`Unknown unified config type '${i}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(l)})}getSnapshot(i){let l=this.recordsByType.get(i);return new Map([...l?.entries()??[]].map(([u,c])=>[u,{...c}]))}getAllSnapshots(){let i=new Map;for(let[l,u]of this.recordsByType.entries())i.set(l,new Map([...u.entries()].map(([c,g])=>[c,{...g}])));return i}emit(i){for(let l of this.listeners)l(i)}enqueueRefresh(i){return this.refreshQueue=this.refreshQueue.then(i,i),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let i=this.buildDesiredTypesByDirectory();for(let[l,u]of this.watchersByDirectory.entries()){if(i.has(l))continue;u.close(),this.watchersByDirectory.delete(l)}this.watchedTypesByDirectory=i;for(let l of i.keys()){if(this.watchersByDirectory.has(l))continue;try{let u=rz(l,()=>{let c=this.watchedTypesByDirectory.get(l);if(!c)return;for(let g of c)this.pendingTypes.add(g);this.scheduleFlush()});this.watchersByDirectory.set(l,u),u.on("error",(c)=>{let g=this.watchedTypesByDirectory.get(l);if(!g)return;for(let b of g)this.emit({kind:"error",type:b,error:c,filePath:l})})}catch(u){if(!pw(u)&&!mw(u)){let c=i.get(l);if(!c)continue;for(let g of c)this.emit({kind:"error",type:g,error:u,filePath:l})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let i=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let l of i){let u=this.definitionsByType.get(l);if(!u)continue;await this.refreshTypeInternal(u)}})},this.debounceMs)}async refreshTypeInternal(i){let{records:l,discoveredDirectories:u}=await this.loadDefinition(i),c=this.recordsByType.get(i.type)??new Map;for(let[g,b]of c.entries()){if(l.has(g))continue;this.emit({kind:"remove",type:i.type,id:g,filePath:b.filePath})}for(let[g,b]of l.entries()){let I=c.get(g);if(I&&I.filePath===b.filePath&&I.fingerprint===b.fingerprint)continue;this.emit({kind:"upsert",record:{type:b.type,id:g,item:b.item,filePath:b.filePath}})}if(this.recordsByType.set(i.type,l),this.discoveredDirectoriesByType.set(i.type,u),this.started)this.syncDirectoryWatchers()}async loadDefinition(i){let l=new Map,u=new Set;for(let c of i.directories){u.add(c);let g=i.discoverFiles?await i.discoverFiles(c):await this.readDirectoryFileCandidates(c);for(let b of g){let{fileName:I,filePath:k}=b;if(u.add(b.directoryPath),i.includeFile&&!i.includeFile(I,k))continue;try{let T=await iz(k,"utf8"),E={type:i.type,directoryPath:b.directoryPath,fileName:I,filePath:k,content:T},A=i.parseFile(E),C=i.resolveId(A,E).trim();if(!C)continue;l.set(C,{type:i.type,id:C,item:A,filePath:k,fingerprint:az(T)})}catch(T){if(this.emitParseErrors)this.emit({kind:"error",type:i.type,error:T,filePath:k})}}}return{records:l,discoveredDirectories:u}}buildDesiredTypesByDirectory(){let i=new Map;for(let[l,u]of this.baseTypesByDirectory.entries())i.set(l,new Set(u));for(let[l,u]of this.discoveredDirectoriesByType.entries())for(let c of u){let g=i.get(c);if(g)g.add(l);else i.set(c,new Set([l]))}return i}async readDirectoryFileCandidates(i){try{let l=await sz(i,{withFileTypes:!0}),u=[];for(let c of l){let g=oz(i,c.name);if(!(c.isFile()||c.isSymbolicLink()&&await nz(g).then((b)=>b.isFile()).catch(()=>!1)))continue;u.push({directoryPath:i,fileName:c.name,filePath:g})}return u.sort((c,g)=>c.fileName.localeCompare(g.fileName))}catch(l){if(pw(l)||mw(l))return[];throw l}}}var $l="SKILL.md",pz="managed.json",mz=new Set([".md",".markdown",".txt"]);function Ll(i){return i.trim().toLowerCase()}function bn(i){let l=i;return l?.code==="ENOENT"||l?.code==="ENOTDIR"||l?.code==="EACCES"||l?.code==="EPERM"||l?.code==="ELOOP"}function qu(i){return mz.has(Fu(i).toLowerCase())}function LT(i){let l=[],u=new Set;for(let c of i){let g=Ws(c);if(u.has(g))continue;u.add(g),l.push(c)}return l}function hz(i){let l=[...i?.directories??bz(i?.workspacePath)];if(i?.pluginSkillDirectories)l.push(...i.pluginSkillDirectories);else if(i?.includePluginSkills)l.push(...Aj({pluginPaths:i.pluginPaths,workspacePath:i.workspacePath,cwd:i.cwd??i.workspacePath}));if(i?.agentPluginSkills)l.push(...i.agentPluginSkills.map((u)=>u.directoryPath));return LT(l)}function hw(i,l){let u=cz(i,l);return u===""||!u.startsWith("..")&&!uz(u)}async function fz(i){try{let[l,u,c]=await Promise.all([Tp(i.pluginRoot),Tp(i.directoryPath),Tp(i.filePath)]);if(l!==Ws(i.pluginRoot)||!hw(l,u)||!hw(l,c)||!(await $o(u)).isDirectory()||!(await $o(c)).isFile())return[];return[{directoryPath:i.directoryPath,fileName:$l,filePath:c}]}catch(l){if(bn(l))return[];throw l}}async function jf(i){try{let l=await qf(i,{withFileTypes:!0}),u=[];for(let c of l){if(!c.isDirectory())continue;let g=Cr(i,c.name),b=Cr(g,pz);try{let I=await lz(b,"utf8"),k=JSON.parse(I);if(k&&typeof k==="object")u.push(g)}catch(I){if(bn(I))continue;if(I?.name==="SyntaxError")continue;throw I}}return u.sort((c,g)=>c.localeCompare(g))}catch(l){if(bn(l))return[];throw l}}function Bf(i){let l=he(i),u=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,c=l.match(u);if(!c)return{data:{},body:l,hadFrontmatter:!1};let[,g,b]=c;try{let I=X.parse(g);return{data:I&&typeof I==="object"&&!Array.isArray(I)?I:{},body:b,hadFrontmatter:!0}}catch(I){let k=I instanceof Error?I.message:String(I);return{data:{},body:l,hadFrontmatter:!0,parseError:k}}}function ju(i,l,u){if(i===void 0||i===null){if(u)throw Error(`Missing required frontmatter field '${l}'.`);return}if(typeof i!=="string")throw Error(`Frontmatter field '${l}' must be a string.`);let c=i.trim();if(!c&&u)throw Error(`Frontmatter field '${l}' cannot be empty.`);return c||void 0}function jo(i,l){if(i===void 0||i===null)return;if(typeof i!=="boolean")throw Error(`Frontmatter field '${l}' must be a boolean.`);return i}function gz(i,l){if(Ks(i.filePath).toLowerCase()!==ht.toLowerCase())return Ks(i.filePath,Fu(i.filePath));if(l&&Ws(i.filePath)===Ws(l,ht))return"Workspace AGENTS.md";if(Ws(i.filePath)===Ws(Qn()))return"Global AGENTS.md";return Ks(i.filePath,Fu(i.filePath))}function yz(i,l){let{data:u,body:c,parseError:g}=Bf(i);if(g)throw Error(`Failed to parse YAML frontmatter: ${g}`);let b=c.trim();if(!b)throw Error("Missing instructions body in skill file.");let I=ju(u.name,"name",!1)??l.trim();if(!I)throw Error("Missing skill name.");return{name:I,description:ju(u.description,"description",!1),disabled:jo(u.disabled,"disabled")??(jo(u.enabled,"enabled")===!1?!0:void 0),instructions:b,frontmatter:u}}function vz(i,l){let{data:u,body:c,parseError:g}=Bf(i);if(g)throw Error(`Failed to parse YAML frontmatter: ${g}`);let b=c.trim();if(!b)throw Error("Missing instructions body in rule file.");let I=ju(u.name,"name",!1)??l.trim();if(!I)throw Error("Missing rule name.");return{name:I,disabled:jo(u.disabled,"disabled")??(jo(u.enabled,"enabled")===!1?!0:void 0),instructions:b,frontmatter:u}}function wz(i,l){let{data:u,body:c,parseError:g}=Bf(i);if(g)throw Error(`Failed to parse YAML frontmatter: ${g}`);let b=c.trim();if(!b)throw Error("Missing instructions body in workflow file.");let I=ju(u.name,"name",!1)??l.trim();if(!I)throw Error("Missing workflow name.");return{name:I,disabled:jo(u.disabled,"disabled")??(jo(u.enabled,"enabled")===!1?!0:void 0),instructions:b,frontmatter:u}}function bz(i){return Rr(i)}function Iz(i){return Or(i)}function kz(i){return Ar(i)}async function DT(i){if(Ks(i)===".cline"){let l=await jf(i);return(await Promise.all(l.map((u)=>DT(Cr(u,Ze))))).flat()}try{let l=await qf(i,{withFileTypes:!0}),u=[];for(let c of l){if(c.isFile()&&c.name===$l){u.push({directoryPath:i,fileName:c.name,filePath:Cr(i,c.name)});continue}let g=Cr(i,c.name);if(c.isDirectory()||c.isSymbolicLink()&&await $o(g).then((b)=>b.isDirectory()).catch((b)=>{if(bn(b))return!1;throw b}))u.push({directoryPath:g,fileName:$l,filePath:Cr(g,$l)})}return u}catch(l){if(bn(l))return[];throw l}}async function Bu(i){if(Ks(i)===".cline"){let l=await jf(i);return(await Promise.all(l.map((u)=>Bu(Cr(u,"rules.md"))))).flat()}try{if((await $o(i)).isFile())return[{directoryPath:dz(i),fileName:Ks(i),filePath:i}]}catch(l){if(!bn(l))throw l}try{let l=await qf(i,{withFileTypes:!0}),u=[];for(let g of l){if(!qu(g.name))continue;let b=Cr(i,g.name);if(!(g.isFile()||g.isSymbolicLink()&&await $o(b).then((I)=>I.isFile()).catch(()=>!1)))continue;u.push({directoryPath:i,fileName:g.name,filePath:b})}let c=Cr(i,"AGENTS.md");try{if((await $o(c)).isFile()){if(!u.some((g)=>g.fileName==="AGENTS.md"))u.push({directoryPath:i,fileName:"AGENTS.md",filePath:c})}}catch{}return u}catch(l){if(bn(l))return[];throw l}}async function Sz(i){if(Ks(i)===".cline"){let l=await jf(i);return(await Promise.all(l.map((u)=>Bu(Cr(u,Yi))))).flat()}return Bu(i)}function Tz(i){let l=hz(i),u=new Map((i?.agentPluginSkills??[]).map((g)=>[Ws(g.directoryPath),g])),c=i?.workspacePath?Cr(i.workspacePath,".cline"):void 0;return{type:"skill",directories:c?LT([...l,c]):l,discoverFiles:(g)=>{let b=u.get(Ws(g));return b?fz(b):DT(g)},includeFile:(g)=>g===$l,parseFile:(g)=>{let b=u.get(Ws(g.directoryPath));if(!b)return yz(g.content,Ks(g.directoryPath));let I=L0(g.content,b.metadata.name);return{name:I.metadata.name,description:I.metadata.description,instructions:I.instructions,frontmatter:I.frontmatter,source:{type:"agent-plugin",pluginName:b.pluginName,pluginRoot:b.pluginRoot,skillRoot:b.directoryPath,filePath:b.filePath}}},resolveId:(g)=>g.source?.type==="agent-plugin"?`${Ll(g.source.pluginName)}:${Ll(g.name)}`:Ll(g.name)}}function _z(i){let l=i?.directories??Iz(i?.workspacePath),u=i?.workspacePath?Cr(i.workspacePath,".cline"):void 0;return{type:"rule",directories:u?[...l,u]:l,discoverFiles:Bu,includeFile:(c,g)=>c===".clinerules"||qu(c)||qu(g),parseFile:(c)=>vz(c.content,gz(c,i?.workspacePath)),resolveId:(c)=>Ll(c.name)}}function Ez(i){let l=i?.directories??kz(i?.workspacePath),u=i?.workspacePath?Cr(i.workspacePath,".cline"):void 0;return{type:"workflow",directories:u?[...l,u]:l,discoverFiles:Sz,includeFile:(c)=>qu(c),parseFile:(c)=>wz(c.content,Ks(c.filePath,Fu(c.filePath))),resolveId:(c)=>Ll(c.name)}}function Az(i){let l=[Tz(i?.skills),_z(i?.rules),Ez(i?.workflows)];return new $T(l,{debounceMs:i?.debounceMs,emitParseErrors:i?.emitParseErrors})}function Bo(i){return i.trim().toLowerCase().replace(/\s+/g,"-").replace(/[^\p{L}\p{N}_.:@-]+/gu,"-").replace(/-+/g,"-").replace(/^-/,"").replace(/-$/,"")}function xz(i){let l=Bo(i).replace(/[^a-z0-9_-]+/g,"-").replace(/^-/,"").replace(/-$/,""),u=Cz("sha256").update(i).digest("hex").slice(0,12);return`${l||"command"}-${u}`}function Rz(i,l){if(i.description?.trim())return Bn(i.description,".");if(l==="workflow")return;return Bn(i.instructions,".")}function Pz(i){return i.disabled!==!0}function Mz(i,l){if(l!=="skill"||!("source"in i)||i.source?.type!=="agent-plugin")return i.instructions;return`<skill-root>${i.source.skillRoot.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;")}</skill-root>
606
+ ${i.instructions}`}function fw(i,l){return[...i.getSnapshot(l).entries()].map(([u,c])=>({id:u,record:c})).filter(({record:u})=>Pz(u.item)).map(({id:u,record:c})=>({id:u,name:Bo(c.item.name)||`${l}-${xz(u)}`,instructions:Mz(c.item,l),description:Rz(c.item,l),kind:l})).sort((u,c)=>u.name.localeCompare(c.name)||u.id.localeCompare(c.id))}function Hf(i){let l=new Map;for(let u of[...fw(i,"skill"),...fw(i,"workflow")])if(!l.has(u.name))l.set(u.name,u);return[...l.values()].sort((u,c)=>u.name.localeCompare(c.name))}function Nz(i,l,u){if(!i.startsWith("/")||i.length<2)return i;let c=i.match(/^\/(\S+)/);if(!c)return i;let g=c[1],b=Bo(g);if(!b)return i;let I=g.length+1,k=i.slice(I),T=Hf(l).find((E)=>E.name===b);if(!T)return i;if(T.kind==="skill"&&u?.expandSkillCommands===!1)return i;return`${T.instructions}${k}`}function Oz(i){return i.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;")}function UT(i,l){let u=l?.trim(),c=u?`
607
+ <command-args>${u}</command-args>`:"",g=i.source?.type==="agent-plugin"?`
608
+ <skill-root>${Oz(i.source.skillRoot)}</skill-root>`:"",b=i.description?.trim()?`Description: ${i.description.trim()}
609
+
610
+ `:"";return`<command-name>${i.name}</command-name>${c}${g}
611
+ <command-instructions>
612
+ ${b}${i.instructions}
613
+ </command-instructions>`}function Hu(i){return i.trim().replace(/^\/+/,"").toLowerCase()}function $z(i){if(!i||i.length===0)return;let l=i.map(Hu).filter((u)=>u.length>0);return l.length>0?new Set(l):void 0}function Lz(i,l,u){if(!u)return!0;let c=Hu(i),g=Hu(l),b=c.includes(":")?c.split(":").at(-1)??c:c,I=g.includes(":")?g.split(":").at(-1)??g:g;return u.has(c)||u.has(g)||u.has(b)||u.has(I)}function Ic(i,l){let u=$z(l);return[...i.getSnapshot("skill").entries()].map(([c,g])=>{let b=g.item;return{id:c,name:b.name.trim(),description:b.description?.trim(),disabled:b.disabled===!0,skill:b}}).filter((c)=>Lz(c.id,c.name,u))}function Dz(i,l){return Ic(i,l).filter((u)=>!u.disabled).map((u)=>u.name.trim()).filter((u)=>u.length>0).sort((u,c)=>u.localeCompare(c))}function Uz(i,l,u){let c=Hu(l);if(!c)return{error:"Missing skill name."};let g=Ic(i,u),b=g.find((A)=>A.id===c);if(b){let{skill:A}=b;if(A.disabled===!0)return{error:`Skill "${A.name}" is configured but disabled.`};return{id:b.id,skill:A}}let I=c.includes(":")?c.split(":").at(-1)??c:c,k=g.filter(({id:A})=>{if(A===I)return!0;return A.endsWith(`:${I}`)}),T=k.filter(({skill:A})=>A.disabled!==!0);if(T.length===1){let{id:A,skill:C}=T[0];return{id:A,skill:C}}if(T.length>1)return{error:`Skill "${l}" is ambiguous. Use one of: ${T.map(({id:A})=>A).join(", ")}`};if(k.length===1){let{skill:A}=k[0];return{error:`Skill "${A.name}" is configured but disabled.`}}if(k.length>1)return{error:`Skill "${l}" is ambiguous, and all matches are disabled: ${k.map(({id:A})=>A).join(", ")}`};let E=Dz(i,u);return{error:E.length>0?`Skill "${l}" not found. Available skills: ${E.join(", ")}`:"No skills are currently available."}}function FT(i,l=Promise.resolve(),u){let c=new Set,g=async(b,I)=>{await l;let k=Uz(i,b,u);if("error"in k)return k.error;let{id:T,skill:E}=k;if(c.has(T))return`Skill "${E.name}" is already running.`;c.add(T);try{return UT(E,I)}finally{c.delete(T)}};return Object.defineProperty(g,"configuredSkills",{get:()=>Ic(i,u).map(({skill:b,...I})=>I),enumerable:!0,configurable:!1}),g}function Fz(i){let l=i.watcherReady??Promise.resolve();return{name:"cline-user-instructions",manifest:{capabilities:[i.includeRules?"rules":void 0,i.registerSkillsTool?"tools":void 0,i.includeSkills||i.includeWorkflows?"commands":void 0].filter((u)=>Boolean(u))},async setup(u){if(await l,i.includeRules)u.registerRule({id:"cline-user-instructions:rules",source:"user-instruction-watcher",content:()=>mA(i.watcher)});if(i.registerSkillsTool)u.registerTool(pc(FT(i.watcher,l,i.allowedSkillNames)));for(let c of Hf(i.watcher).filter((g)=>g.kind==="skill"&&i.includeSkills||g.kind==="workflow"&&i.includeWorkflows))u.registerCommand({name:c.name,description:c.description,handler:(g)=>{let b=g.trim();return b?`${c.instructions}
614
+
615
+ ${b}`:c.instructions}})}}}function Pd(i){return i.trim().replace(/^\/+/,"").toLowerCase()}function gw(i,l){let u=i.map((b)=>b.createSkillsExecutor?.(l)).filter((b)=>b!==void 0),c=()=>u.flatMap((b)=>(b.configuredSkills??[]).map((I)=>({metadata:I,executor:b}))),g=async(b,I,k)=>{let T=Pd(b);if(!T)return"Missing skill name.";let E=c(),A=E.filter(({metadata:L})=>Pd(L.id)===T),C=A.length>0?A:E.filter(({metadata:L})=>{let D=Pd(L.id);return Pd(L.name)===T||D.endsWith(`:${T}`)}),N=C.filter(({metadata:L})=>!L.disabled);if(N.length===1)return N[0].executor(N[0].metadata.id,I,k);if(N.length>1)return`Skill "${b}" is ambiguous. Use one of: ${N.map(({metadata:L})=>L.id).join(", ")}`;if(C.length>0)return`Skill "${b}" is configured but disabled.`;let O=E.filter(({metadata:L})=>!L.disabled).map(({metadata:L})=>L.id).sort((L,D)=>L.localeCompare(D));return O.length>0?`Skill "${b}" not found. Available skills: ${O.join(", ")}`:"No skills are currently available."};return Object.defineProperty(g,"configuredSkills",{get:()=>c().map(({metadata:b})=>b),enumerable:!0,configurable:!1}),g}function qz(i){if(i.length===0)throw Error("At least one user instruction service is required.");if(i.length===1)return i[0];let l=(c)=>{let g=new Map;for(let b of i)for(let I of b.listRecords(c))if(!g.has(I.id))g.set(I.id,I);return[...g.values()]},u=()=>{let c=new Map;for(let g of i)for(let b of g.listRuntimeCommands()){let I=Bo(b.name);if(I&&!c.has(I))c.set(I,b)}return[...c.values()].sort((g,b)=>g.name.localeCompare(b.name))};return{start:async()=>{await Promise.all(i.map((c)=>c.start()))},stop:()=>{for(let c of i)c.stop()},refreshType:async(c)=>{await Promise.all(i.map((g)=>g.refreshType(c)))},listRecords:l,listRuntimeCommands:u,resolveRuntimeSlashCommand:(c,g)=>{for(let b of i){let I=b.resolveRuntimeSlashCommand(c,g);if(I!==c)return I}return c},hasConfiguredSkills:(c)=>i.some((g)=>g.hasConfiguredSkills(c)),createSkillsExecutor:(c)=>gw(i,c),createExtension:(c)=>({name:"cline-combined-user-instructions",manifest:{capabilities:[c.includeRules?"rules":void 0,c.registerSkillsTool?"tools":void 0,c.includeSkills||c.includeWorkflows?"commands":void 0].filter((g)=>Boolean(g))},setup(g){if(c.includeRules)g.registerRule({id:"cline-combined-user-instructions:rules",source:"combined-user-instructions",content:()=>_I(l("rule"))});if(c.registerSkillsTool)g.registerTool(pc(gw(i,c.allowedSkillNames)));for(let b of u().filter((I)=>I.kind==="skill"&&c.includeSkills||I.kind==="workflow"&&c.includeWorkflows))g.registerCommand({name:b.name,description:b.description,handler:(I)=>{let k=I.trim();return k?`${b.instructions}
616
+
617
+ ${k}`:b.instructions}})}})}}class qT{watcher;ready;stopped=!1;constructor(i){this.watcher=Az(i)}start(){if(!this.ready)this.stopped=!1,this.ready=this.watcher.start();return this.ready}stop(){if(this.stopped)return;this.stopped=!0,this.watcher.stop(),this.ready=void 0}async refreshType(i){await this.start(),await this.watcher.refreshType(i)}listRecords(i){return[...this.watcher.getSnapshot(i).entries()].map(([l,u])=>({type:i,id:l,filePath:u.filePath,item:u.item}))}listRuntimeCommands(){return Hf(this.watcher)}resolveRuntimeSlashCommand(i,l){return Nz(i,this.watcher,l)}hasConfiguredSkills(i){return Ic(this.watcher,i).some((l)=>!l.disabled)}createSkillsExecutor(i){return FT(this.watcher,(this.ready??Promise.resolve()).catch(()=>{}),i)}createExtension(i){return Fz({...i,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function rh(i){return new qT(i)}var jz=["model","app"];function jT(){return{extensions:{["io.modelcontextprotocol/ui"]:{mimeTypes:["text/html;profile=mcp-app"]}}}}function BT(i){try{return new URL(i).protocol==="ui:"}catch{return!1}}function Bz(i){return typeof i==="object"&&i!==null&&!Array.isArray(i)}function zf(i){let l=i._meta?.ui;if(!Bz(l))return;let u=typeof l.resourceUri==="string"&&BT(l.resourceUri)?l.resourceUri:void 0,c=Array.isArray(l.visibility)?l.visibility.filter((g)=>g==="model"||g==="app"):jz;return{resourceUri:u,visibility:c}}function HT(i){return zf(i)?.visibility.includes("model")??!0}function Hz(i){return zf(i)?.visibility.includes("app")??!0}bI();function WT(i){return Be(i)*1000}function yw(i,l,u){if(!(i instanceof q)||i.code!==J.RequestTimeout)return i;return new q(i.code,Vi(l,u),i.data)}var Gz=new Set([301,302,303,307,308]),vw=20,Xz=new Set(["authorization","cookie","proxy-authorization"]),Jz=new Set(["mcp-protocol-version","mcp-session-id"]);function Vz(i){if(!i.headers||!i.restrictConfiguredHeadersToOrigin)return i.headers;let l=Object.entries(i.headers).filter(([u])=>{let c=u.toLowerCase();if(Jz.has(c))return!1;return c!=="authorization"||!i.oauthProvider});return l.length>0?Object.fromEntries(l):void 0}function Yz(i){let l=new URL(i.endpointUrl).origin,u=new Set(Object.keys(i.configuredHeaders).map((b)=>b.toLowerCase())),c=i.baseFetch??globalThis.fetch,g=(b)=>{let I=[];b.forEach((k,T)=>{let E=T.toLowerCase();if(u.has(E)||Xz.has(E))I.push(T)});for(let k of I)b.delete(k)};return async(b,I)=>{let k=b instanceof Request?new Request(b,I):new Request(String(b),I),T=new URL(k.url),E=k.method,A=E==="GET"||E==="HEAD"?void 0:await k.clone().arrayBuffer(),C=new Headers(k.headers);if(T.origin!==l)g(C);for(let N=0;;N+=1){let O=await c(T,{method:E,headers:C,body:A,redirect:"manual",signal:k.signal});if(!Gz.has(O.status))return O;if(N>=vw)throw await O.body?.cancel().catch(()=>{return}),Error(`MCP endpoint exceeded ${vw} redirects.`);let L=O.headers.get("location");if(!L)return O;let D=new URL(L,T);if(await O.body?.cancel().catch(()=>{return}),D.origin!==l)g(C);if(O.status===303&&E!=="GET"&&E!=="HEAD"||(O.status===301||O.status===302)&&E==="POST")E="GET",A=void 0,C.delete("content-length"),C.delete("content-type");T=D}}}function Qz(i){return{client_name:"Cline",redirect_uris:[i],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function ww(i){return i?{client_id:i.clientId,...i.clientSecret?{client_secret:i.clientSecret}:{}}:void 0}function ru(i,l){return i?.client_id===l?.client_id&&i?.client_secret===l?.client_secret}function ul(i,l,u){if(!ru(l.clientInformation,u))throw new Yu(i)}function bw(i){let l={};try{l=rA(i.serverName,{filePath:i.settingsPath})??{}}catch{l={}}let u,c,g=()=>i.clientInformation??l.clientInformation,b=i.clientInformation?{clientId:i.clientInformation.client_id,...i.clientInformation.client_secret?{clientSecret:i.clientInformation.client_secret}:{}}:null,I=async(k)=>{try{l=await iA(i.serverName,k,{filePath:i.settingsPath,expectedOAuthClient:b})}catch(T){if(i.settingsPath||T instanceof Yu)throw T;l=Vu(k(l))??{}}};return{provider:{get redirectUrl(){return l.redirectUrl??i.redirectUrl},get clientMetadata(){return Qz(l.redirectUrl??i.redirectUrl)},state:()=>(c=Kz(),c),clientInformation:g,saveClientInformation:async(k)=>{let T=l.clientInformation;await I((E)=>{ul(i.serverName,E,T);let A=!ru(E.clientInformation,k);return{...E,clientInformation:k,...A?{tokens:void 0,lastAuthenticatedAt:void 0}:{},redirectUrl:i.redirectUrl,lastError:void 0}})},tokens:()=>g()?.client_id&&ru(l.clientInformation,g())?l.tokens:void 0,saveTokens:async(k)=>{let T=Date.now(),E=g();if(!E?.client_id)throw Error("Cannot save MCP OAuth tokens without a client ID.");await I((A)=>{if(A.clientInformation||!i.clientInformation)ul(i.serverName,A,E);return{...A,tokens:k,clientInformation:E,redirectUrl:i.redirectUrl,lastError:void 0,lastAuthenticatedAt:T}})},redirectToAuthorization:async(k)=>{u=k.toString(),await i.onAuthorizationUrl?.(u)},saveCodeVerifier:async(k)=>{let T=g();await I((E)=>(ul(i.serverName,E,T),{...E,codeVerifier:k,redirectUrl:i.redirectUrl}))},codeVerifier:()=>{if(!l.codeVerifier)throw Error(`Missing OAuth code verifier for MCP server "${i.serverName}".`);return l.codeVerifier},invalidateCredentials:async(k)=>{let T=l.clientInformation;await I((E)=>{if(ul(i.serverName,E,T),k==="all")return{lastError:E.lastError,redirectUrl:E.redirectUrl};return{...E,...k==="client"?{clientInformation:void 0}:{},...k==="tokens"?{tokens:void 0,lastAuthenticatedAt:void 0}:{},...k==="verifier"?{codeVerifier:void 0}:{},...k==="discovery"?{discoveryState:void 0}:{}}})},saveDiscoveryState:async(k)=>{let T=l.clientInformation;await I((E)=>(ul(i.serverName,E,T),{...E,discoveryState:k}))},discoveryState:()=>l.discoveryState},getLastAuthorizationUrl:()=>u,getLastOAuthState:()=>c,resetInteractiveState:async()=>{await I((k)=>{let T=i.clientInformation,E=T!==void 0&&!ru(k.clientInformation,T);return{...k,...T?{clientInformation:T}:{},...E?{tokens:void 0,lastAuthenticatedAt:void 0}:{},codeVerifier:void 0,discoveryState:void 0,lastError:void 0,redirectUrl:i.redirectUrl}})},markError:async(k)=>{await I((T)=>({...T,lastError:k}))},markConnectionError:async(k)=>{await I((T)=>({...T,lastError:k,authorizationRequired:void 0}))},markAuthorizationRequired:async(k)=>{await I((T)=>({...T,lastError:k,authorizationRequired:!0}))},clearError:async()=>{await I((k)=>({...k,lastError:void 0,authorizationRequired:void 0}))}}}function Zz(i){let l=i.registration.transport;if(l.type==="stdio")throw Error(`MCP server "${i.registration.name}" uses stdio transport and does not support OAuth browser flow.`);let u=Vz({headers:l.headers,oauthProvider:i.oauthProvider,restrictConfiguredHeadersToOrigin:i.restrictConfiguredHeadersToOrigin}),c=u?{headers:u}:void 0,g=i.restrictConfiguredHeadersToOrigin&&u?Yz({endpointUrl:l.url,configuredHeaders:u,baseFetch:i.fetch}):i.fetch,b=i.oauthProvider?g:async(I,k)=>{let T=await(g??globalThis.fetch)(I,k);if(T.status===401)throw await T.body?.cancel().catch(()=>{return}),new at("MCP server requires authorization");return T};if(l.type==="sse")return new zo(new URL(l.url),{authProvider:i.oauthProvider,requestInit:c,eventSourceInit:{fetch:(I,k)=>(g??globalThis.fetch)(I,k)},fetch:b});return new Go(new URL(l.url),{authProvider:i.oauthProvider,requestInit:c,fetch:b})}function Iw(i){return i instanceof at||i instanceof lo&&i.code===401}var eW="2024-11-05",tW=1e4,rW=1e4,kw="http://127.0.0.1:1456/mcp/oauth/callback",Sw=250,_p=2000;function sn(i){return i instanceof Error?i.message:String(i)}async function Md(i,l){return new Promise((u)=>{let c=!1,g=(I)=>{if(c)return;c=!0,clearTimeout(b),u(I)},b=setTimeout(()=>g(!1),l);b.unref(),i.then(()=>g(!0),()=>g(!0))})}function sW(i,l,u){let c=sn(l),g=sn(u);if(c===g)return l instanceof Error?l:Error(c);return Error(`MCP server "${i}" failed to initialize. Newline-delimited attempt: ${c} Content-Length framed attempt: ${g}`)}function Tw(i){return Buffer.from(`${JSON.stringify(i)}
618
+ `,"utf8")}function _w(i){let l=Buffer.from(JSON.stringify(i),"utf8");return Buffer.concat([Buffer.from(`Content-Length: ${l.byteLength}\r
619
+ \r
620
+ `,"utf8"),l])}class sh{buffer="";decoder=new zT("utf8");push(i){this.buffer+=this.decoder.write(i);let l=[];while(!0){let u=this.buffer.indexOf(`\r
621
+ \r
622
+ `);if(u<0)break;let c=this.buffer.slice(0,u).match(/(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i);if(!c)throw Error("Invalid MCP stdio frame: missing Content-Length header.");let g=Number.parseInt(c[1],10),b=u+4,I=b+g;if(this.buffer.length<I)break;l.push(this.buffer.slice(b,I)),this.buffer=this.buffer.slice(I)}return l}}class ih{buffer="";decoder=new zT("utf8");push(i){this.buffer+=this.decoder.write(i);let l=[];while(!0){let u=this.buffer.indexOf(`
623
+ `);if(u<0)break;let c=this.buffer.slice(0,u).trim();if(this.buffer=this.buffer.slice(u+1),c.length>0)l.push(c)}return l}}class KT{registration;process;processClose;nextRequestId=1;pending=new Map;framedParser=new sh;newlineParser=new ih;stderrBuffer="";stdinFailure;stdinFailureTimer;connected=!1;protocolMode="newline";requestTimeoutMs;connectAttemptTimeoutMs;mcpApps;constructor(i,l=!1){this.registration=i,this.mcpApps=l,this.requestTimeoutMs=WT(i.timeoutSeconds),this.connectAttemptTimeoutMs=ze(i.timeoutSeconds)?this.requestTimeoutMs:tW}async connect(){if(this.connected)return;if(this.registration.transport.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let i={protocolVersion:eW,capabilities:this.mcpApps?jT():{},clientInfo:{name:"@cline/core",version:"0.0.0"}};await this.ensureAgentPluginDataDirectory(),this.spawnProcess("newline");try{await this.request("initialize",i,this.connectAttemptTimeoutMs)}catch(l){await this.disconnect().catch(()=>{}),this.spawnProcess("framed");try{await this.request("initialize",i,this.connectAttemptTimeoutMs)}catch(u){throw await this.disconnect().catch(()=>{}),sW(this.registration.name,l,u)}}this.notify("notifications/initialized"),this.connected=!0}async ensureAgentPluginDataDirectory(){if(this.registration.metadata?.source!=="agent-plugin")return;let i=this.registration.metadata.pluginDataPath;if(typeof i!=="string"||i.length===0)return;await Wz(i,{recursive:!0})}async disconnect(){let i=this.process,l=this.processClose;if(this.connected=!1,this.process=void 0,this.processClose=void 0,this.clearStdinFailureTimer(),this.failAllPending(Error(`Disconnected from MCP server "${this.registration.name}".`)),!l)return;if(!i){if(!await Md(l,_p))throw Error(`MCP process for "${this.registration.name}" did not close during disconnect.`);return}if(!i.stdin.destroyed)i.stdin.end();if(await Md(l,Sw))return;if(i.kill(),await Md(l,_p))return;if(i.kill("SIGKILL"),!await Md(l,_p))throw Error(`MCP process for "${this.registration.name}" did not exit during disconnect.`)}async listTools(){return((await this.request("tools/list")).tools??[]).filter((i)=>typeof i?.name==="string"&&typeof i.inputSchema==="object"&&i.inputSchema!==null).map((i)=>({name:i.name,description:i.description,inputSchema:i.inputSchema,...i._meta&&typeof i._meta==="object"&&!Array.isArray(i._meta)?{_meta:i._meta}:{}}))}async callTool(i){return this.request("tools/call",{name:i.name,arguments:i.arguments??{}},void 0,i.context?.signal)}async readResource(i){let l=pa.safeParse(await this.request("resources/read",{uri:i.uri},void 0,i.context?.signal));if(!l.success)throw Error(`MCP server "${this.registration.name}" returned an invalid resources/read result: ${l.error.message}`);return l.data}spawnProcess(i){let l=this.registration.transport;if(l.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${l.type}`);this.framedParser=new sh,this.newlineParser=new ih,this.stderrBuffer="",this.stdinFailure=void 0,this.clearStdinFailureTimer(),this.protocolMode=i;let u=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},c=zz(l.command,l.args??[],{cwd:l.cwd,env:{...process.env,...l.env??{}},stdio:["pipe","pipe","pipe"],...u});this.process=c,this.processClose=new Promise((g)=>{c.once("close",()=>g())}),c.stdout.on("data",(g)=>this.handleStdout(g)),c.stderr.on("data",(g)=>{if(this.process!==c)return;if(this.stderrBuffer+=g.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),c.once("error",(g)=>{if(this.process!==c)return;this.failAllPending(Error(`MCP process error: ${sn(g)}`))}),c.stdin.on("error",(g)=>{if(this.process!==c)return;if(this.stdinFailure??=sn(g),this.stdinFailureTimer!==void 0)return;this.stdinFailureTimer=setTimeout(()=>{if(this.stdinFailureTimer=void 0,this.process!==c)return;this.failAllPending(Error(`MCP server "${this.registration.name}" stopped reading its input before the request was fully delivered (${this.stdinFailure}) and did not exit.`)),this.disconnect().catch(()=>{})},Sw),this.stdinFailureTimer.unref()}),c.once("exit",(g,b)=>{if(this.process!==c)return;this.connected=!1,this.process=void 0,this.clearStdinFailureTimer();let I=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${g??"null"}, signal=${b??"null"}).${I}${this.describeStdinFailure()}`))})}handleStdout(i){try{let l=this.protocolMode==="framed"?this.framedParser.push(i):this.newlineParser.push(i);for(let u of l){let c=JSON.parse(u);if(typeof c.id!=="number")continue;let g=this.takePending(c.id);if(!g)continue;if(c.error){let b=c.error.message||`MCP request failed with code ${c.error.code??"unknown"}`;g.reject(Error(b));continue}g.resolve(c.result)}}catch(l){this.handleProtocolFailure(l)}}handleProtocolFailure(i){let l=this.process;if(!l)return;this.connected=!1,this.process=void 0;let u=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${sn(i)}.${u}`)),l.kill()}async request(i,l,u=this.requestTimeoutMs,c){let g=this.process;if(!g?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let b=this.nextRequestId++,I={jsonrpc:"2.0",id:b,method:i,...l?{params:l}:{}},k=new Promise((T,E)=>{let A=setTimeout(()=>{this.takePending(b),E(this.createTimeoutError(i,u))},u),C=c?()=>{let N=this.takePending(b);if(!N)return;let O=c.reason instanceof Error?c.reason:Object.assign(Error(`MCP request aborted for "${this.registration.name}" (${i}).`),{name:"AbortError"});N.reject(O)}:void 0;if(this.pending.set(b,{resolve:T,reject:E,timeout:A,signal:c,onAbort:C}),c&&C){if(c.addEventListener("abort",C,{once:!0}),c.aborted)C()}});if(!this.pending.has(b))return k;try{g.stdin.write(this.protocolMode==="framed"?_w(I):Tw(I))}catch(T){let E=this.takePending(b);if(E)E.reject(T instanceof Error?T:Error(String(T)))}return k}createTimeoutError(i,l){return Error(Vi(this.registration.name,l,i)+this.describeStdinFailure())}clearStdinFailureTimer(){if(this.stdinFailureTimer!==void 0)clearTimeout(this.stdinFailureTimer),this.stdinFailureTimer=void 0}describeStdinFailure(){return this.stdinFailure===void 0?"":` The server stopped reading its input before the request was fully delivered (${this.stdinFailure}).`}notify(i,l){let u=this.process;if(!u?.stdin.writable)return;let c={jsonrpc:"2.0",method:i,...l?{params:l}:{}};u.stdin.write(this.protocolMode==="framed"?_w(c):Tw(c))}failAllPending(i){for(let l of[...this.pending.keys()]){let u=this.takePending(l);if(!u)continue;u.reject(i)}}takePending(i){let l=this.pending.get(i);if(!l)return;if(this.pending.delete(i),clearTimeout(l.timeout),l.signal&&l.onAbort)l.signal.removeEventListener("abort",l.onAbort);return l}}class GT{registration;options;client;authContext;requestTimeoutMs;connectAttemptTimeoutMs;constructor(i,l){this.registration=i,this.options=l,this.requestTimeoutMs=WT(i.timeoutSeconds),this.connectAttemptTimeoutMs=ze(i.timeoutSeconds)?this.requestTimeoutMs:rW}async connect(){if(this.client)return;if(this.registration.transport.type==="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let i=bw({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??kw,clientInformation:ww(this.registration.oauthClient)});this.authContext=i;let l=await i.provider.tokens()?i.provider:void 0,u;try{u=new cn({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"},this.options.mcpApps?{capabilities:jT()}:void 0);let c=Zz({registration:this.registration,oauthProvider:l,fetch:this.options.fetch,restrictConfiguredHeadersToOrigin:this.options.restrictConfiguredHeadersToOrigin});await u.connect(c,{timeout:this.connectAttemptTimeoutMs}),await i.clearError(),this.client=u}catch(c){await u?.close().catch(()=>{});let g=yw(c,this.registration.name,this.connectAttemptTimeoutMs),b=Iw(c),I=b?this.formatUnauthorizedMessage(i.getLastAuthorizationUrl()):sn(g);if(b&&!this.hasStaticAuthorizationHeader())await i.markAuthorizationRequired(I);else await i.markConnectionError(I);throw Error(I)}}async disconnect(){let i=this.client;this.client=void 0,await i?.close()}async listTools(){let i=await this.ensureConnectedClient();try{return(await i.listTools(void 0,{timeout:this.requestTimeoutMs})).tools.map((l)=>({name:l.name,description:l.description,inputSchema:l.inputSchema&&typeof l.inputSchema==="object"&&!Array.isArray(l.inputSchema)?l.inputSchema:{},...l._meta?{_meta:l._meta}:{}}))}catch(l){return await this.handleOperationError(l)}}async callTool(i){let l=await this.ensureConnectedClient();try{return await l.callTool({name:i.name,arguments:i.arguments??{}},void 0,{timeout:this.requestTimeoutMs,signal:i.context?.signal})}catch(u){return await this.handleOperationError(u)}}async readResource(i){let l=await this.ensureConnectedClient();try{return await l.readResource({uri:i.uri},{timeout:this.requestTimeoutMs,signal:i.context?.signal})}catch(u){return await this.handleOperationError(u)}}async ensureConnectedClient(){if(!this.client)await this.connect();if(!this.client)throw Error(`MCP server "${this.registration.name}" is not connected.`);return this.client}formatUnauthorizedMessage(i){if(this.hasStaticAuthorizationHeader())return`MCP server "${this.registration.name}" rejected its configured Authorization header. Update or remove that header before connecting with OAuth.`;let l=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!i)return`${l} Run authorizeMcpServerOAuth for this server.`;return`${l} Run authorizeMcpServerOAuth for this server and complete this URL: ${i}`}hasStaticAuthorizationHeader(){let i=this.registration.transport;if(i.type==="stdio")return!1;return Object.keys(i.headers??{}).some((l)=>l.toLowerCase()==="authorization")}async handleOperationError(i){let l=this.authContext??bw({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??kw,clientInformation:ww(this.registration.oauthClient)}),u=yw(i,this.registration.name,this.requestTimeoutMs),c=Iw(i),g=c?this.formatUnauthorizedMessage(l.getLastAuthorizationUrl()):sn(u);if(c&&!this.hasStaticAuthorizationHeader())await l.markAuthorizationRequired(g);else await l.markConnectionError(g);throw Error(g)}}function Ew(i={}){return(l)=>l.transport.type==="stdio"?new KT(l,i.mcpApps):new GT(l,i)}bI();var iW=5000;function Jt(){return Date.now()}function nW(i){return i.map((l)=>({name:l.name,description:l.description,inputSchema:l.inputSchema,...l._meta?{_meta:l._meta}:{}}))}class XT{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor(i){this.clientFactory=i.clientFactory,this.toolsCacheTtlMs=i.toolsCacheTtlMs??iW}async registerServer(i){await this.runExclusive(i.name,async()=>{let l=this.servers.get(i.name);if(!l){this.servers.set(i.name,{registration:{...i},status:"disconnected",updatedAt:Jt()});return}let u=JSON.stringify(l.registration.transport)!==JSON.stringify(i.transport),c=ze(l.registration.timeoutSeconds)!==ze(i.timeoutSeconds)||Be(l.registration.timeoutSeconds)!==Be(i.timeoutSeconds);if(l.registration={...i},l.updatedAt=Jt(),u||c)await this.disconnectState(l),l.client=void 0,l.toolCache=void 0,l.toolCacheUpdatedAt=void 0})}async unregisterServer(i){await this.runExclusive(i,async()=>{let l=this.requireServer(i);await this.disconnectState(l),this.servers.delete(i)})}async connectServer(i){await this.runExclusive(i,async()=>{let l=this.requireServer(i);await this.connectState(l)})}async disconnectServer(i){await this.runExclusive(i,async()=>{let l=this.requireServer(i);await this.disconnectState(l)})}async setServerDisabled(i,l){await this.runExclusive(i,async()=>{let u=this.requireServer(i);if(u.registration={...u.registration,disabled:l},u.updatedAt=Jt(),l)await this.disconnectState(u)})}listServers(){return[...this.servers.values()].map((i)=>({name:i.registration.name,status:i.status,disabled:i.registration.disabled===!0,lastError:i.lastError,toolCount:i.toolCache?.length??0,updatedAt:i.updatedAt,metadata:i.registration.metadata})).sort((i,l)=>i.name.localeCompare(l.name))}async listTools(i){let l=this.requireServer(i),u=l.toolCacheUpdatedAt??0;if(l.toolCache&&Jt()-u<=this.toolsCacheTtlMs)return l.toolCache;return this.refreshTools(i)}async refreshTools(i){return this.runExclusive(i,async()=>{let l=this.requireServer(i),u=await(await this.ensureConnectedClient(l)).listTools(),c=nW(u);return l.toolCache=c,l.toolCacheUpdatedAt=Jt(),l.updatedAt=Jt(),c})}async callTool(i){return this.runExclusive(i.serverName,async()=>{let l=this.requireServer(i.serverName),u=await this.ensureConnectedClient(l);return l.updatedAt=Jt(),u.callTool({name:i.toolName,arguments:i.arguments,context:i.context})})}async readResource(i){let l=this.requireServer(i.serverName),u=l.status==="connected"&&l.client&&!l.registration.disabled?l.client:await this.runExclusive(i.serverName,async()=>this.ensureConnectedClient(this.requireServer(i.serverName)));if(this.requireServer(i.serverName).updatedAt=Jt(),!u.readResource)throw Error(`MCP server "${i.serverName}" client does not support reading resources.`);return u.readResource({uri:i.uri,context:i.context})}async dispose(){let i=[...this.servers.keys()],l=[];for(let u of i)try{await this.unregisterServer(u)}catch(c){l.push(c)}if(l.length>0)throw AggregateError(l,"MCP manager dispose failed")}async ensureConnectedClient(i){if(await this.connectState(i),!i.client)throw Error(`MCP server "${i.registration.name}" does not have an initialized client.`);return i.client}async connectState(i){if(i.registration.disabled)throw Error(`MCP server "${i.registration.name}" is disabled and cannot be connected.`);if(i.status==="connected"&&i.client)return;i.status="connecting",i.updatedAt=Jt();let l=i.client;try{l??=await this.clientFactory(i.registration),i.client=l,await l.connect(),i.status="connected",i.lastError=void 0,i.updatedAt=Jt()}catch(u){throw await l?.disconnect().catch(()=>{}),i.status="disconnected",i.lastError=u instanceof Error?u.message:String(u),i.updatedAt=Jt(),u}}async disconnectState(i){if(!i.client){i.status="disconnected",i.updatedAt=Jt();return}try{await i.client.disconnect()}finally{i.status="disconnected",i.updatedAt=Jt()}}requireServer(i){let l=this.servers.get(i);if(!l)throw Error(`Unknown MCP server: ${i}`);return l}async runExclusive(i,l){let u=this.operationLocks.get(i)??Promise.resolve(),c,g=new Promise((I)=>{c=I}),b=u.catch(()=>{return}).then(()=>g);this.operationLocks.set(i,b),await u.catch(()=>{return});try{return await l()}finally{if(c?.(),this.operationLocks.get(i)===b)this.operationLocks.delete(i)}}}function oW(i){let l=new Set(i.serverNames),u=i.nameTransform??pf,c=new Map;for(let[I,k]of i.agentTools)for(let T of k.filter(HT)){let E=zf(T)?.resourceUri;c.set(u({serverName:I,toolName:T.name}),E?{serverName:I,toolName:T.name,resourceUri:E}:void 0)}function g(I){if(!l.has(I))throw Error(`MCP server "${I}" is not available in this session.`)}async function b(I,k){return(await i.manager.listTools(I)).find((T)=>T.name===k)}return{async resolveTool(I){return c.get(I)},async readResource(I){if(g(I.serverName),!BT(I.uri))throw Error(`MCP Apps can only read ui:// resources, not "${I.uri}".`);if(!i.manager.readResource)throw Error("MCP resource reads are not supported.");return i.manager.readResource({serverName:I.serverName,uri:I.uri})},async callTool(I){g(I.serverName);let k=await b(I.serverName,I.toolName);if(!k)throw Error(`MCP tool "${I.toolName}" was not found on server "${I.serverName}".`);if(!Hz(k))throw Error(`MCP tool "${I.toolName}" on server "${I.serverName}" cannot be called by an app.`);if(i.isToolEnabled&&!i.isToolEnabled(u({serverName:I.serverName,toolName:I.toolName})))throw Error(`MCP tool "${I.toolName}" on server "${I.serverName}" is disabled for this session.`);return i.manager.callTool({serverName:I.serverName,toolName:I.toolName,arguments:I.arguments})}}}function aW(i,l){let u=l.description?.trim();if(u)return u;return`Execute MCP tool "${l.name}" from server "${i}".`}async function lW(i){let l=await i.provider.listTools(i.serverName),u=i.nameTransform??pf;return l.filter(HT).map((c)=>{let g=u({serverName:i.serverName,toolName:c.name});return _({name:g,resultPolicy:"cache-oversized",description:aW(i.serverName,c),inputSchema:c.inputSchema,timeoutMs:i.timeoutMs,retryable:i.retryable,maxRetries:i.maxRetries,execute:async(b,I)=>i.provider.callTool({serverName:i.serverName,toolName:c.name,arguments:b&&typeof b==="object"&&!Array.isArray(b)?b:void 0,context:I})})})}function fW(){return xe()}function gW(i){let l=$t(i);if(!Array.isArray(l))return[];let u=[];for(let c of l){if(!c||typeof c!=="object")continue;let g=c,{agentId:b,rolePrompt:I}=g;if(typeof b!=="string"||!b.trim())continue;if(typeof I!=="string"||!I.trim())continue;let k={agentId:b.trim(),rolePrompt:I};if(typeof g.modelId==="string"&&g.modelId.trim())k.modelId=g.modelId.trim();if(typeof g.maxIterations==="number"&&Number.isFinite(g.maxIterations))k.maxIterations=Math.max(1,Math.floor(g.maxIterations));u.push(k)}return u}function Rw(i){return{...i,tasks:i.tasks.map((l)=>({...l,createdAt:new Date(l.createdAt),updatedAt:new Date(l.updatedAt)})),mailbox:i.mailbox.map((l)=>({...l,sentAt:new Date(l.sentAt),readAt:l.readAt?new Date(l.readAt):void 0})),missionLog:i.missionLog.map((l)=>({...l,ts:new Date(l.ts)})),runs:(i.runs??[]).map((l)=>({...l,startedAt:new Date(l.startedAt),endedAt:l.endedAt?new Date(l.endedAt):void 0,nextAttemptAt:l.nextAttemptAt?new Date(l.nextAttemptAt):void 0,heartbeatAt:l.heartbeatAt?new Date(l.heartbeatAt):void 0,lastProgressAt:l.lastProgressAt?new Date(l.lastProgressAt):void 0})),outcomes:(i.outcomes??[]).map((l)=>({...l,createdAt:new Date(l.createdAt),finalizedAt:l.finalizedAt?new Date(l.finalizedAt):void 0})),outcomeFragments:(i.outcomeFragments??[]).map((l)=>({...l,createdAt:new Date(l.createdAt),reviewedAt:l.reviewedAt?new Date(l.reviewedAt):void 0}))}}var JT=2000,yW=2592000000,Pw=["agent_event","run_progress"],Mw=2,vW=["team_tasks","team_runs","team_outcomes","team_outcome_fragments","team_mailbox","team_mission_log"];function so(i){if(i===void 0||i===null)return null;let l=i instanceof Date?i:new Date(i);return Number.isNaN(l.getTime())?null:l.toISOString()}function cl(i,l){if(typeof i!=="string"||i.length===0)return l;return $t(i)??l}var pl=(i)=>typeof i==="string"?i:"";function Nw(i){return{teamId:i.teamId,teamName:i.teamName,reset:!0,members:i.members,tasks:i.tasks,mailbox:i.mailbox,missionLog:i.missionLog,runs:i.runs,outcomes:i.outcomes,outcomeFragments:i.outcomeFragments}}class VT{teamDirPath;db;retentionPerTeam;retentionMs;constructor(i={}){this.teamDirPath=i.teamDir??fW(),this.retentionPerTeam=i.eventRetentionPerTeam??JT,this.retentionMs=i.eventRetentionMs??yW}init(){this.getRawDb()}close(){this.db?.close?.(),this.db=void 0}ensureTeamDir(){if(!pW(this.teamDirPath))mW(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return hW(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let i=V(this.dbPath());return this.ensureSchema(i),this.db=i,i}ensureSchema(i){if(i.exec("PRAGMA journal_mode = WAL;"),i.exec("PRAGMA busy_timeout = 5000;"),i.exec(`
624
+ CREATE TABLE IF NOT EXISTS team_store_schema_version (
625
+ lock INTEGER PRIMARY KEY CHECK (lock = 1),
626
+ version INTEGER NOT NULL
627
+ );
628
+ `),!i.prepare("SELECT version FROM team_store_schema_version WHERE lock = 1").get())i.prepare("INSERT INTO team_store_schema_version (lock, version) VALUES (1, 1)").run();if(i.exec(`
629
+ CREATE TABLE IF NOT EXISTS team_events (
630
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
631
+ team_name TEXT NOT NULL,
632
+ ts TEXT NOT NULL,
633
+ event_type TEXT NOT NULL,
634
+ payload_json TEXT NOT NULL,
635
+ causation_id TEXT,
636
+ correlation_id TEXT
637
+ );
638
+ `),i.exec(`
639
+ CREATE INDEX IF NOT EXISTS idx_team_events_name_ts
640
+ ON team_events(team_name, ts DESC);
641
+ `),i.exec(`
642
+ CREATE TABLE IF NOT EXISTS team_runtime_snapshot (
643
+ team_name TEXT PRIMARY KEY,
644
+ state_json TEXT NOT NULL,
645
+ teammates_json TEXT NOT NULL,
646
+ updated_at TEXT NOT NULL
647
+ );
648
+ `),i.exec(`
649
+ CREATE TABLE IF NOT EXISTS team_tasks (
650
+ team_name TEXT NOT NULL,
651
+ task_id TEXT NOT NULL,
652
+ title TEXT NOT NULL,
653
+ description TEXT NOT NULL,
654
+ status TEXT NOT NULL,
655
+ assignee TEXT,
656
+ depends_on_json TEXT NOT NULL,
657
+ summary TEXT,
658
+ version INTEGER NOT NULL DEFAULT 1,
659
+ updated_at TEXT NOT NULL,
660
+ PRIMARY KEY(team_name, task_id)
661
+ );
662
+ `),i.exec(`
663
+ CREATE TABLE IF NOT EXISTS team_runs (
664
+ team_name TEXT NOT NULL,
665
+ run_id TEXT NOT NULL,
666
+ agent_id TEXT NOT NULL,
667
+ task_id TEXT,
668
+ status TEXT NOT NULL,
669
+ message TEXT NOT NULL,
670
+ started_at TEXT,
671
+ ended_at TEXT,
672
+ error TEXT,
673
+ lease_owner TEXT,
674
+ heartbeat_at TEXT,
675
+ version INTEGER NOT NULL DEFAULT 1,
676
+ PRIMARY KEY(team_name, run_id)
677
+ );
678
+ `),i.exec(`
679
+ CREATE INDEX IF NOT EXISTS idx_team_runs_status
680
+ ON team_runs(team_name, status);
681
+ `),i.exec(`
682
+ CREATE TABLE IF NOT EXISTS team_outcomes (
683
+ team_name TEXT NOT NULL,
684
+ outcome_id TEXT NOT NULL,
685
+ title TEXT NOT NULL,
686
+ status TEXT NOT NULL,
687
+ schema_json TEXT NOT NULL,
688
+ finalized_at TEXT,
689
+ version INTEGER NOT NULL DEFAULT 1,
690
+ PRIMARY KEY(team_name, outcome_id)
691
+ );
692
+ `),i.exec(`
693
+ CREATE TABLE IF NOT EXISTS team_outcome_fragments (
694
+ team_name TEXT NOT NULL,
695
+ outcome_id TEXT NOT NULL,
696
+ fragment_id TEXT NOT NULL,
697
+ section TEXT NOT NULL,
698
+ source_agent_id TEXT NOT NULL,
699
+ source_run_id TEXT,
700
+ content TEXT NOT NULL,
701
+ status TEXT NOT NULL,
702
+ reviewed_by TEXT,
703
+ reviewed_at TEXT,
704
+ version INTEGER NOT NULL DEFAULT 1,
705
+ PRIMARY KEY(team_name, fragment_id)
706
+ );
707
+ `),(i.prepare("SELECT version FROM team_store_schema_version WHERE lock = 1").get()?.version??1)<Mw)this.migrateToV2(i);else if(i.prepare("SELECT 1 FROM team_runtime_snapshot WHERE state_json != '' LIMIT 1").get()){i.exec("BEGIN IMMEDIATE;");try{this.importLegacySnapshots(i),i.exec("COMMIT;")}catch(l){try{i.exec("ROLLBACK;")}catch{}throw l}}}importLegacySnapshots(i){let l=i.prepare("SELECT team_name FROM team_runtime_snapshot WHERE state_json != ''").all().map((u)=>pl(u.team_name));for(let u of l){let c=i.prepare("SELECT state_json FROM team_runtime_snapshot WHERE team_name = ?").get(u),g=cl(c?.state_json,void 0);if(g)this.writeDelta(i,u,Nw(Rw(g)));i.prepare("UPDATE team_runtime_snapshot SET state_json = '' WHERE team_name = ?").run(u)}}migrateToV2(i){let l=(c,g)=>{if(!i.prepare(`PRAGMA table_info(${c})`).all().some((b)=>b.name===g))i.exec(`ALTER TABLE ${c} ADD COLUMN ${g} TEXT`)};i.exec("BEGIN IMMEDIATE;");try{for(let I of["team_tasks","team_runs","team_outcomes","team_outcome_fragments"])l(I,"data_json");i.exec(`
708
+ CREATE TABLE IF NOT EXISTS team_members (
709
+ team_name TEXT PRIMARY KEY,
710
+ team_id TEXT NOT NULL,
711
+ members_json TEXT NOT NULL,
712
+ updated_at TEXT NOT NULL
713
+ );
714
+ `),i.exec(`
715
+ CREATE TABLE IF NOT EXISTS team_mailbox (
716
+ team_name TEXT NOT NULL,
717
+ message_id TEXT NOT NULL,
718
+ data_json TEXT NOT NULL,
719
+ PRIMARY KEY(team_name, message_id)
720
+ );
721
+ `),i.exec(`
722
+ CREATE TABLE IF NOT EXISTS team_mission_log (
723
+ team_name TEXT NOT NULL,
724
+ entry_id TEXT NOT NULL,
725
+ data_json TEXT NOT NULL,
726
+ PRIMARY KEY(team_name, entry_id)
727
+ );
728
+ `),this.importLegacySnapshots(i),i.prepare(`DELETE FROM team_events WHERE event_type IN (${Pw.map(()=>"?").join(",")})`).run(...Pw);let c=i.prepare("SELECT id FROM team_events WHERE event_type = 'task_end' OR event_type LIKE 'run_%'").all().map((I)=>I.id),g=i.prepare("SELECT payload_json FROM team_events WHERE id = ?"),b=i.prepare("UPDATE team_events SET payload_json = ? WHERE id = ?");for(let I of c){let k=cl(g.get(I)?.payload_json,void 0);if(k&&typeof k==="object")b.run(JSON.stringify(Uu(k)),I)}i.prepare("UPDATE team_store_schema_version SET version = ? WHERE lock = 1").run(Mw),i.exec("COMMIT;")}catch(c){try{i.exec("ROLLBACK;")}catch{}throw c}let u=i.prepare("SELECT DISTINCT team_name FROM team_events").all().map((c)=>pl(c.team_name));for(let c of u)this.pruneTeamEvents(i,c)}run(i,l=[]){return this.getRawDb().prepare(i).run(...l)}queryOne(i,l=[]){return this.getRawDb().prepare(i).get(...l)??void 0}queryAll(i,l=[]){return this.getRawDb().prepare(i).all(...l)}withTransaction(i){let l=this.getRawDb();l.exec("BEGIN IMMEDIATE;");try{i(),l.exec("COMMIT;")}catch(u){try{l.exec("ROLLBACK;")}catch{}throw u}}listTeamNames(){return this.queryAll("SELECT team_name FROM team_members ORDER BY team_name ASC").map((i)=>i.team_name)}readState(i){let l=Zr(i),u=this.queryOne("SELECT team_id, members_json FROM team_members WHERE team_name = ?",[l]);if(!u)return;let c=(g,b)=>this.queryAll(`SELECT data_json FROM ${g} WHERE team_name = ? AND data_json IS NOT NULL ORDER BY ${b}`,[l]).flatMap((I)=>{let k=cl(I.data_json,void 0);return k===void 0?[]:[k]});try{return Rw({teamId:pl(u.team_id),teamName:l,members:cl(u.members_json,[]),tasks:c("team_tasks","task_id"),mailbox:c("team_mailbox","message_id"),missionLog:c("team_mission_log","entry_id"),runs:c("team_runs","run_id"),outcomes:c("team_outcomes","outcome_id"),outcomeFragments:c("team_outcome_fragments","fragment_id")})}catch{return}}readHistory(i,l=200){return this.queryAll("SELECT event_type, payload_json, ts FROM team_events WHERE team_name = ? ORDER BY id DESC LIMIT ?",[Zr(i),l]).flatMap((u)=>{try{return[{eventType:u.event_type,payload:JSON.parse(u.payload_json),ts:u.ts}]}catch{return[]}})}loadRuntime(i){let l=Zr(i),u=this.readState(l),c=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[l]),g=c?gW(c.teammates_json):[];return{state:u,teammates:g,interruptedRunIds:[]}}appendTeamEvent(i,l,u,c){this.run(`INSERT INTO team_events (team_name, ts, event_type, payload_json, causation_id, correlation_id)
729
+ VALUES (?, ?, ?, ?, NULL, ?)`,[Zr(i),x(),l,JSON.stringify(u),c??null])}persistBatch(i,l){let u=Zr(i),c=this.getRawDb();if(this.withTransaction(()=>{let g=x(),b=c.prepare(`INSERT INTO team_events (team_name, ts, event_type, payload_json, causation_id, correlation_id)
730
+ VALUES (?, ?, ?, ?, NULL, NULL)`);for(let I of l.events)b.run(u,g,I.type,JSON.stringify(I.payload));this.writeDelta(c,u,l.delta),this.writeTeammates(c,u,l.teammates)}),l.events.length>0)try{this.pruneTeamEvents(c,u)}catch{}}persistRuntime(i,l,u){let c=Zr(i),g=this.getRawDb();this.withTransaction(()=>{this.writeDelta(g,c,Nw(l)),this.writeTeammates(g,c,u)})}writeTeammates(i,l,u){i.prepare(`INSERT INTO team_runtime_snapshot (team_name, state_json, teammates_json, updated_at)
731
+ VALUES (?, '', ?, ?)
732
+ ON CONFLICT(team_name) DO UPDATE SET
733
+ state_json = '',
734
+ teammates_json = excluded.teammates_json,
735
+ updated_at = excluded.updated_at`).run(l,JSON.stringify(u),x())}writeDelta(i,l,u){if(u.reset)for(let g of vW)i.prepare(`DELETE FROM ${g} WHERE team_name = ?`).run(l);if(i.prepare(`INSERT INTO team_members (team_name, team_id, members_json, updated_at)
736
+ VALUES (?, ?, ?, ?)
737
+ ON CONFLICT(team_name) DO UPDATE SET
738
+ team_id = excluded.team_id,
739
+ members_json = excluded.members_json,
740
+ updated_at = excluded.updated_at`).run(l,u.teamId,JSON.stringify(u.members),x()),u.tasks.length>0){let g=i.prepare(`INSERT INTO team_tasks (team_name, task_id, title, description, status, assignee, depends_on_json, summary, version, updated_at, data_json)
741
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?)
742
+ ON CONFLICT(team_name, task_id) DO UPDATE SET
743
+ title = excluded.title,
744
+ description = excluded.description,
745
+ status = excluded.status,
746
+ assignee = excluded.assignee,
747
+ depends_on_json = excluded.depends_on_json,
748
+ summary = excluded.summary,
749
+ version = team_tasks.version + 1,
750
+ updated_at = excluded.updated_at,
751
+ data_json = excluded.data_json`);for(let b of u.tasks)g.run(l,b.id,b.title,b.description,b.status,b.assignee??null,JSON.stringify(b.dependsOn??[]),b.summary??null,so(b.updatedAt)??x(),JSON.stringify(b))}if(u.runs.length>0){let g=i.prepare(`INSERT INTO team_runs (team_name, run_id, agent_id, task_id, status, message, started_at, ended_at, error, lease_owner, heartbeat_at, version, data_json)
752
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?)
753
+ ON CONFLICT(team_name, run_id) DO UPDATE SET
754
+ agent_id = excluded.agent_id,
755
+ task_id = excluded.task_id,
756
+ status = excluded.status,
757
+ message = excluded.message,
758
+ started_at = excluded.started_at,
759
+ ended_at = excluded.ended_at,
760
+ error = excluded.error,
761
+ lease_owner = excluded.lease_owner,
762
+ heartbeat_at = excluded.heartbeat_at,
763
+ version = team_runs.version + 1,
764
+ data_json = excluded.data_json`);for(let b of u.runs){let I={...b,result:qo(b.result)};g.run(l,I.id,I.agentId,I.taskId??null,I.status,I.message,so(I.startedAt),so(I.endedAt),I.error??null,I.leaseOwner??null,so(I.heartbeatAt),JSON.stringify(I))}}if(u.outcomes.length>0){let g=i.prepare(`INSERT INTO team_outcomes (team_name, outcome_id, title, status, schema_json, finalized_at, version, data_json)
765
+ VALUES (?, ?, ?, ?, ?, ?, 1, ?)
766
+ ON CONFLICT(team_name, outcome_id) DO UPDATE SET
767
+ title = excluded.title,
768
+ status = excluded.status,
769
+ schema_json = excluded.schema_json,
770
+ finalized_at = excluded.finalized_at,
771
+ version = team_outcomes.version + 1,
772
+ data_json = excluded.data_json`);for(let b of u.outcomes)g.run(l,b.id,b.title,b.status,JSON.stringify({requiredSections:b.requiredSections}),so(b.finalizedAt),JSON.stringify(b))}if(u.outcomeFragments.length>0){let g=i.prepare(`INSERT INTO team_outcome_fragments (team_name, outcome_id, fragment_id, section, source_agent_id, source_run_id, content, status, reviewed_by, reviewed_at, version, data_json)
773
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?)
774
+ ON CONFLICT(team_name, fragment_id) DO UPDATE SET
775
+ outcome_id = excluded.outcome_id,
776
+ section = excluded.section,
777
+ source_agent_id = excluded.source_agent_id,
778
+ source_run_id = excluded.source_run_id,
779
+ content = excluded.content,
780
+ status = excluded.status,
781
+ reviewed_by = excluded.reviewed_by,
782
+ reviewed_at = excluded.reviewed_at,
783
+ version = team_outcome_fragments.version + 1,
784
+ data_json = excluded.data_json`);for(let b of u.outcomeFragments)g.run(l,b.outcomeId,b.id,b.section,b.sourceAgentId,b.sourceRunId??null,b.content,b.status,b.reviewedBy??null,so(b.reviewedAt),JSON.stringify(b))}let c=(g,b)=>i.prepare(`INSERT INTO ${g} (team_name, ${b}, data_json) VALUES (?, ?, ?)
785
+ ON CONFLICT(team_name, ${b}) DO UPDATE SET data_json = excluded.data_json`);if(u.mailbox.length>0){let g=c("team_mailbox","message_id");for(let b of u.mailbox)g.run(l,b.id,JSON.stringify(b))}if(u.missionLog.length>0){let g=c("team_mission_log","entry_id");for(let b of u.missionLog)g.run(l,b.id,JSON.stringify(b))}}pruneTeamEvents(i,l){let u=new Date(Date.now()-this.retentionMs).toISOString();i.prepare("DELETE FROM team_events WHERE team_name = ? AND ts < ?").run(l,u);let c=i.prepare("SELECT id FROM team_events WHERE team_name = ? ORDER BY id DESC LIMIT 1 OFFSET ?").get(l,this.retentionPerTeam);if(c&&typeof c.id==="number")i.prepare("DELETE FROM team_events WHERE team_name = ? AND id <= ?").run(l,c.id)}vacuum(){this.getRawDb().exec("VACUUM;")}markInProgressRunsInterrupted(i,l){let u=Zr(i),c=this.queryAll("SELECT run_id, data_json FROM team_runs WHERE team_name = ? AND status IN ('queued', 'running')",[u]);if(c.length===0)return[];let g=x();return this.withTransaction(()=>{for(let b of c){let I=cl(b.data_json,void 0),k=I?JSON.stringify({...I,status:"interrupted",error:l,endedAt:g}):null;this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1,
786
+ data_json = COALESCE(?, data_json)
787
+ WHERE team_name = ? AND run_id = ?`,[l,g,k,u,pl(b.run_id)])}}),c.map((b)=>pl(b.run_id))}handleTeamEvent(i,l){if(!bc(l))return;this.appendTeamEvent(i,l.type,Uu(l)),this.pruneTeamEvents(this.getRawDb(),Zr(i))}}var Ow=4194304;function $w(){return new Date().toISOString()}function Lw(i){return{...i,tasks:i.tasks.map((l)=>({...l,createdAt:new Date(l.createdAt),updatedAt:new Date(l.updatedAt)})),mailbox:i.mailbox.map((l)=>({...l,sentAt:new Date(l.sentAt),readAt:l.readAt?new Date(l.readAt):void 0})),missionLog:i.missionLog.map((l)=>({...l,ts:new Date(l.ts)})),runs:(i.runs??[]).map((l)=>({...l,startedAt:new Date(l.startedAt),endedAt:l.endedAt?new Date(l.endedAt):void 0,nextAttemptAt:l.nextAttemptAt?new Date(l.nextAttemptAt):void 0,heartbeatAt:l.heartbeatAt?new Date(l.heartbeatAt):void 0,lastProgressAt:l.lastProgressAt?new Date(l.lastProgressAt):void 0})),outcomes:(i.outcomes??[]).map((l)=>({...l,createdAt:new Date(l.createdAt),finalizedAt:l.finalizedAt?new Date(l.finalizedAt):void 0})),outcomeFragments:(i.outcomeFragments??[]).map((l)=>({...l,createdAt:new Date(l.createdAt),reviewedAt:l.reviewedAt?new Date(l.reviewedAt):void 0}))}}class YT{teamDirPath;constructor(i={}){this.teamDirPath=i.teamDir??fn()}init(){this.ensureTeamDir()}listTeamNames(){if(!ro(this.teamDirPath))return[];return uW(this.teamDirPath,{withFileTypes:!0}).filter((i)=>i.isDirectory()).filter((i)=>ro(this.statePath(i.name))).map((i)=>i.name).sort()}readState(i){let l=this.readEnvelope(i);return l?.teamState?Lw(l.teamState):void 0}readHistory(i,l=200){let u=this.historyPath(i);if(!ro(u))return[];return Ep(u,"utf8").split(`
788
+ `).map((c)=>c.trim()).filter(Boolean).map((c)=>{try{return JSON.parse(c)}catch{return}}).filter((c)=>c!==void 0).reverse().slice(0,l)}loadRuntime(i){let l=this.readEnvelope(i);return{state:l?.teamState?Lw(l.teamState):void 0,teammates:l?.teammates??[],interruptedRunIds:[]}}handleTeamEvent(i,l){if(!bc(l))return;this.appendHistory(i,[{type:l.type,payload:Uu(l)}])}persistBatch(i,l){if(this.persistRuntime(i,l.getFullState(),l.teammates),l.events.length>0)this.appendHistory(i,l.events)}appendHistory(i,l){this.ensureTeamSubdir(i);let u=$w(),c=this.historyPath(i);dW(c,l.map((g)=>`${JSON.stringify({ts:u,eventType:g.type,payload:g.payload})}
789
+ `).join(""),"utf8");try{this.compactHistoryIfNeeded(c)}catch{}}compactHistoryIfNeeded(i){let l=0;try{l=cW(i).size}catch{return}if(l<Ow)return;let u=Ep(i,"utf8").split(`
790
+ `).filter(Boolean),c=[],g=0;for(let I=u.length-1;I>=0&&c.length<JT;I--){let k=u[I];if(g+=Buffer.byteLength(k,"utf8")+1,g>Ow/2&&c.length>0)break;c.push(k)}c.reverse();let b=`${i}.tmp`;xw(b,`${c.join(`
791
+ `)}
792
+ `,"utf8"),Cw(b,i)}persistRuntime(i,l,u){this.ensureTeamSubdir(i);let c={version:1,updatedAt:$w(),teamState:{...l,runs:l.runs.map((I)=>({...I,result:qo(I.result)}))},teammates:u},g=this.statePath(i),b=`${g}.tmp`;xw(b,`${JSON.stringify(c,null,2)}
793
+ `,"utf8"),Cw(b,g)}markInProgressRunsInterrupted(i,l){let u=this.readEnvelope(i);if(!u?.teamState?.runs?.length)return[];let c=u.teamState.runs.filter((b)=>b.status==="queued"||b.status==="running").map((b)=>b.id);if(c.length===0)return[];let g=new Date;return u.teamState={...u.teamState,runs:u.teamState.runs.map((b)=>b.status==="queued"||b.status==="running"?{...b,status:"interrupted",error:l,endedAt:g}:b)},this.persistRuntime(i,u.teamState,u.teammates),c}ensureTeamDir(){if(!ro(this.teamDirPath))Aw(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir(i){let l=Ap(this.ensureTeamDir(),Zr(i));if(!ro(l))Aw(l,{recursive:!0});return l}statePath(i){return Ap(this.ensureTeamDir(),Zr(i),"state.json")}historyPath(i){return Ap(this.ensureTeamDir(),Zr(i),"task-history.jsonl")}readEnvelope(i){let l=this.statePath(i);if(!ro(l))return;try{let u=JSON.parse(Ep(l,"utf8"));if(u?.version===1&&u.teamState)return u}catch{}return}}function wW(i={}){try{let l=new VT(i);return l.init(),l}catch{let l=new YT({teamDir:i.teamDir});return l.init(),l}}var bW=300,IW=60000,Dw=5000;class QT{opts;pendingEvents=[];teammatesDirty=!1;timer;lastFlushAt=0;disposed=!1;constructor(i){this.opts={batchMs:bW,telemetryFlushMs:IW,now:Date.now,...i}}onEvent(i){if(this.disposed)return;if(!bc(i)){if(this.opts.now()-this.lastFlushAt>=this.opts.telemetryFlushMs)this.schedule();return}if(this.pendingEvents.push({type:i.type,payload:Uu(i)}),UH(i)){this.flush();return}this.schedule()}markTeammatesDirty(){this.teammatesDirty=!0}markStateDirty(){if(this.disposed)return;this.schedule()}flush(){this.clearTimer();let i=this.opts.source();if(!i)return;if(!i.hasPendingStateDelta()&&this.pendingEvents.length===0&&!this.teammatesDirty)return;let l=this.pendingEvents,u=this.teammatesDirty;this.pendingEvents=[],this.teammatesDirty=!1;let c=i.drainStateDelta();try{this.opts.store.persistBatch(this.opts.teamKey,{events:l,delta:c,teammates:this.opts.teammates(),getFullState:()=>i.exportState()}),this.lastFlushAt=this.opts.now()}catch(g){i.requeueStateDelta(c);let b=l.concat(this.pendingEvents);if(this.pendingEvents=b.length>Dw?b.slice(-Dw):b,this.teammatesDirty=this.teammatesDirty||u,!this.disposed)this.schedule();try{this.opts.onError?.(g)}catch{}}}dispose(){if(this.disposed)return;this.disposed=!0,this.flush()}schedule(){if(this.timer)return;this.timer=setTimeout(()=>{this.timer=void 0,this.flush()},this.opts.batchMs),this.timer.unref?.()}clearTimer(){if(this.timer)clearTimeout(this.timer),this.timer=void 0}}function Nd(i,l){return _i(i,l)}function ZT(i,l){let u=l?.["*"]??{},c=l?.[i]??{};return{...u,...c}.enabled!==!1}function kW(i,l){return i.filter((u)=>ZT(u.name,l))}function nh(i,l){return ec(kW(i,l))}var SW={apply_diff:"editor",attempt_completion:"submit_and_exit",bash:"run_commands",execute_command:"run_commands",list_code_definition_names:"search_codebase",list_files:"run_commands",read_file:"read_files",replace_in_file:"editor",search_files:"search_codebase",use_skill:"skills",write_to_file:"editor"};function TW(i){let l=i.trim().toLowerCase();return SW[l]??l}function _W(i,l){if(l.tools===void 0)return i;let u=new Set(l.tools.map(TW));if(l.skills!==void 0)u.add("skills");return i.filter((c)=>u.has(c.name))}function EW(){return`team-${R(5)}`}function su(i,l,u,c,g,b,I,k,T,E){let A=Sf[Tf({mode:u})],C=ID(l,c,u,g??wD);return nh(A0({cwd:i,telemetry:T,executorOptions:{bash:{executionController:E}},...A,enableSkills:!!I,...C,executors:{...I?{skills:I}:{},...k??{}}}),b)}function AW(i){return su(i.cwd,i.providerId,i.mode,i.modelId,i.toolRoutingRules,i.toolPolicies,CW,i.toolExecutors).some((l)=>l.name==="skills")}var CW=async()=>"";async function xW(i){let l=nn(),u=i.includeSettings&&gI({filePath:l});if(!u&&!i.agentPluginServers?.length)return{tools:[]};let c=Ew({settingsPath:l,mcpApps:i.mcpApps}),g=Ew({restrictConfiguredHeadersToOrigin:!0,mcpApps:i.mcpApps}),b=new XT({clientFactory:(N)=>N.metadata?.source==="agent-plugin"?g(N):c(N)}),I=[];if(u)try{I=await nA(b,{filePath:l})}catch(N){let O=N instanceof Error?N.message:String(N);i.logger?.log(`[mcp] Failed to load MCP settings, skipping settings-backed MCP tools: ${O}`)}let k=new Set(I.map((N)=>N.name));for(let N of i.agentPluginServers??[]){let O=N.registration;if(k.has(O.name)){i.logger?.log(`[agent-plugins] MCP server '${O.name}' conflicts with an existing server and was skipped.`,{severity:"error"});continue}try{await b.registerServer(O),I.push(O),k.add(O.name)}catch(L){let D=L instanceof Error?L.message:String(L);i.logger?.log(`[agent-plugins] Failed to register MCP server '${O.name}', skipping: ${D}`,{severity:"error"})}}if(I.length===0)return await b.dispose().catch(()=>{}),{tools:[]};let T=I.filter((N)=>N.disabled!==!0),E=await Promise.allSettled(T.map(async(N)=>{let O=await b.listTools(N.name),L=await lW({serverName:N.name,provider:{listTools:async()=>O,callTool:(D)=>b.callTool(D)},timeoutMs:Be(N.timeoutSeconds)*1000});return{descriptors:O,tools:L}})),A=[],C=new Map;for(let[N,O]of E.entries())if(O.status==="fulfilled")A.push(...O.value.tools),C.set(T[N].name,O.value.descriptors);else{let L=O.reason instanceof Error?O.reason.message:String(O.reason);i.logger?.log(`[mcp] Failed to load tools from MCP server "${T[N].name}", skipping: ${L}`)}return{tools:A,...i.mcpApps?{mcpApps:oW({manager:b,serverNames:T.map((N)=>N.name),agentTools:C,isToolEnabled:(N)=>ZT(N,i.toolPolicies)&&!i.disabledToolNames?.has(N)})}:{},shutdown:async()=>{await b.dispose()}}}function RW(i,l){if(!i)return;for(let u of i.getTeammateIds())try{i.shutdownTeammate(u,l)}catch{}}function PW(i){if(i===void 0)return!0;switch(i){case"session_stop":case"session_complete":case"session_error":case"session_manager_dispose":case"cli_run_shutdown":case"cli_interactive_shutdown":case"cli_interactive_startup_cancelled":case"provider_change":case"acp_shutdown":case"hub_server_stop":case"vscode_webview_dispose":return!0;default:return!1}}function MW(i){let l=Sf[Tf({mode:i.mode})];return{sessionId:i.sessionId||"",mode:i.mode==="plan"?"plan":i.mode==="yolo"?"yolo":"act",enableTools:i.enableTools!==!1,enableSpawnAgent:i.enableSpawnAgent??l.enableSpawnAgent??!0,enableAgentTeams:i.enableAgentTeams??l.enableAgentTeams??!0,disableMcpSettingsTools:i.disableMcpSettingsTools===!0,mcpApps:i.mcpApps===!0,yolo:i.yolo===!0,missionLogIntervalSteps:typeof i.missionLogIntervalSteps==="number"&&Number.isFinite(i.missionLogIntervalSteps)?i.missionLogIntervalSteps:3,missionLogIntervalMs:typeof i.missionLogIntervalMs==="number"&&Number.isFinite(i.missionLogIntervalMs)?i.missionLogIntervalMs:120000}}class e_{teamRuntimeEntries=new Map;async build(i){let{config:l,hooks:u,extensions:c,logger:g,telemetry:b,createSpawnTool:I,onTeamRestored:k,userInstructionService:T,configExtensions:E,toolExecutors:A}=i,C=i.onTeamEvent??(()=>{}),N=MW(l),O=[];if(N.enableTools&&N.mode!=="yolo"&&tk("web_search")&&Xt({providerId:l.providerId,modelId:l.modelId},"web_search"))O.push({name:"web_search"});if(N.enableTools&&Xt({providerId:l.providerId,modelId:l.modelId},"image_generation"))O.push({name:"image_generation",outputFormat:"png"});let L=l.workspaceRoot??l.cwd,D=i.toolPolicies??l.toolPolicies,U=id(),F=[],j=l.teamName?.trim()||EW(),H=l.sessionId?.trim()||j,Q=N.enableSpawnAgent?RH({workspaceRoot:L}):{configs:[],errors:[]},z=Q.configs.some((be)=>be.skills!==void 0),W=Nd(E,"rules"),ee=Nd(E,"skills"),te=ee||z,oe=Nd(E,"workflows"),G=Nd(E,"plugins"),se=W||ee||oe,Pe=!1,Le=[],Te=T,le,Ie;for(let be of Q.errors)(g??l.logger)?.log?.(`[agents] Failed to load agent config at ${be.path}: ${be.error.message}`);if(!Te&&(se||z))Te=rh({skills:te?{workspacePath:L,includePluginSkills:G,pluginSkillDirectories:G?i.pluginSkillDirectories:void 0,pluginPaths:l.pluginPaths,cwd:l.cwd,agentPluginSkills:G?i.agentPluginSkills:void 0}:{workspacePath:L},rules:{workspacePath:l.cwd},workflows:{workspacePath:l.cwd}}),Le.push(Te);else if(Te&&G&&i.agentPluginSkills?.length&&(se||z)){let be=rh({skills:{directories:[],agentPluginSkills:i.agentPluginSkills},rules:{directories:[]},workflows:{directories:[]}});Le.push(be),Te=qz([Te,be])}if(Te)await Te.start().catch(()=>{});let we=N.enableTools&&ee&&Boolean(Te)&&Te?.hasConfiguredSkills(l.skills)===!0&&AW({cwd:l.cwd,providerId:l.providerId,mode:N.mode,modelId:l.modelId,toolRoutingRules:l.toolRoutingRules,toolPolicies:D,toolExecutors:A}),He=Te&&se?Te.createExtension({includeRules:W,includeSkills:ee,includeWorkflows:oe,registerSkillsTool:we,allowedSkillNames:l.skills}):void 0,ce=N.mode==="plan"&&N.enableTools?oL({telemetry:b??l.telemetry}):void 0,Se=[He,ce].filter((be)=>be!==void 0),_e=Se.length>0?[...c??l.extensions??[],...Se]:c??l.extensions;if(N.enableTools){F.push(...su(l.cwd,l.providerId,N.mode,l.modelId,l.toolRoutingRules,D,void 0,A,b??l.telemetry,i.runCommandExecutionController));let be=G?i.agentPluginMcpServers:void 0;if(!N.disableMcpSettingsTools||be?.length){let $e=await xW({logger:l.logger,includeSettings:!N.disableMcpSettingsTools,mcpApps:N.mcpApps,toolPolicies:D,disabledToolNames:U,agentPluginServers:be});F.push(...$e.tools),le=$e.shutdown,Ie=$e.mcpApps}}let Ee,Fe=N.enableAgentTeams?wW():void 0,Ke=Fe?.loadRuntime(H),Et=Ke?.state,yt=Ke?.teammates??[],$r=new Map(yt.map((be)=>[be.agentId,be])),vt=Fe?new QT({teamKey:H,store:Fe,source:()=>Ee,teammates:()=>Array.from($r.values()),onError:(be)=>(g??l.logger)?.log?.(`[team] failed to persist team state: ${be instanceof Error?be.message:String(be)}`)}):void 0,Ct=l.sessionId||j,Gr,Lr=[],us=!1,Ce=I0({providerId:l.providerId,modelId:l.modelId,distinctId:i.distinctId,sessionId:l.sessionId,cwd:l.cwd,apiKey:l.apiKey??"",baseUrl:l.baseUrl,headers:l.headers,providerConfig:l.providerConfig,knownModels:l.knownModels,thinking:l.thinking,reasoningEffort:l.reasoningEffort,thinkingBudgetTokens:l.thinkingBudgetTokens,maxTokensPerTurn:l.maxTokensPerTurn,temperature:l.temperature,maxIterations:l.maxIterations,hooks:u,extensions:_e,logger:g??l.logger,telemetry:i.telemetry??l.telemetry,workspaceMetadata:l.workspaceMetadata});if(N.enableSpawnAgent){if(Q.configs.length>0)F.push(...nh(DH({configProvider:Ce,agents:Q.configs,createSubAgentTools:(be)=>N.enableTools?_W(su(l.cwd,be.providerId??l.providerId,N.mode,be.modelId??l.modelId,l.toolRoutingRules,D,be.skills!==void 0&&Te?.createSkillsExecutor?Te.createSkillsExecutor(be.skills):void 0,A,b??l.telemetry,i.runCommandExecutionController),be):[],hookErrorMode:l.hookErrorMode,onSubAgentEvent:i.onSubAgentEvent,onSubAgentStart:i.onSubAgentStart,onSubAgentEnd:i.onSubAgentEnd}),D))}if(!this.teamRuntimeEntries.has(Ct))this.teamRuntimeEntries.set(Ct,{delegatedAgentConfigProvider:Ce});let xt=()=>{if(!N.enableAgentTeams)return;let be=this.teamRuntimeEntries.get(Ct)??{delegatedAgentConfigProvider:Ce};if(this.teamRuntimeEntries.set(Ct,be),Ee=be.runtime,!Ee){if(Ee=new NT({teamName:j,leadAgentId:l.sessionId||"lead",missionLogIntervalSteps:N.missionLogIntervalSteps,missionLogIntervalMs:N.missionLogIntervalMs,onStateDirty:()=>vt?.markStateDirty(),onTeamEvent:($e)=>{if(C($e),vt){if($e.type==="teammate_spawned"&&$e.teammate?.rolePrompt){let Vr={agentId:$e.agentId,rolePrompt:$e.teammate.rolePrompt,modelId:$e.teammate.modelId,maxIterations:$e.teammate.maxIterations};$r.set(Vr.agentId,Vr),vt.markTeammatesDirty()}if($e.type==="teammate_shutdown"&&!PW($e.reason))$r.delete($e.agentId),vt.markTeammatesDirty();vt.onEvent($e)}}}),Et)Ee.hydrateState(Et),us=!0;be.runtime=Ee}if(!Pe){if(!Ee)return;Pe=!0;let $e=PU({runtime:Ee,leadAgentId:l.sessionId||"lead",restoredFromPersistence:Boolean(Et),restoredTeammates:yt,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(Vr)=>{Lr=Vr,Gr?.addTools(Vr)},createBaseTools:N.enableTools?()=>su(l.cwd,l.providerId,N.mode,l.modelId,l.toolRoutingRules,D,void 0,A,b??l.telemetry,i.runCommandExecutionController):void 0,teammateConfigProvider:Ce});if(us)Ee.recoverActiveRuns("runtime_recovered");if($e.restoredFromPersistence)k?.();F.push(...$e.tools)}return Ee};if(N.enableSpawnAgent&&I){let be=I();F.push({...be,execute:async($e,Vr)=>(xt(),be.execute($e,Vr))})}if(N.enableAgentTeams)xt();let Xr=nh(F,D),de=Xr.some((be)=>be.name==="submit_and_exit"&&be.lifecycle?.completesRun===!0),De=N.enableAgentTeams?()=>{let be=this.teamRuntimeEntries.get(Ct)?.runtime;if(!be)return;let $e=be.listTasks(),Vr=$e.some((Ye)=>Ye.status==="in_progress"||Ye.status==="pending"),Tn=be.listRuns({}),kc=Tn.some((Ye)=>Ye.status==="running"||Ye.status==="queued");if(Vr||kc){let Ye=$e.filter((Dr)=>Dr.status==="in_progress"||Dr.status==="pending").map((Dr)=>`${Dr.id} (${Dr.status}): ${Dr.title}`).join(", "),Gs=Tn.filter((Dr)=>Dr.status==="running"||Dr.status==="queued").map((Dr)=>`${Dr.id} (${Dr.status})`).join(", "),Sc=[];if(Ye)Sc.push(`Unfinished tasks: ${Ye}`);if(Gs)Sc.push(`Active runs: ${Gs}`);return`[SYSTEM] You still have team obligations. ${Sc.join(". ")}. Use team_run_task to delegate work, or team_task with action=complete to mark tasks done, or team_await_runs to wait for active runs. Do NOT stop until all tasks are completed.`}return}:void 0,pt=de?{requireCompletionTool:!0,...De?{completionGuard:De}:{}}:De?{completionGuard:De}:void 0;return{tools:Xr,modelTools:O,logger:g??l.logger,telemetry:b??l.telemetry,teamRuntime:Ee,teamRestoredFromPersistence:Boolean(Et),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(Ct)?.delegatedAgentConfigProvider??Ce,extensions:_e,completionPolicy:pt,mcpApps:Ie,registerLeadAgent:(be)=>{if(Gr=be,Lr.length>0)be.addTools(ec(Lr,[...U]))},shutdown:async(be)=>{RW(Ee,be),vt?.dispose(),this.teamRuntimeEntries.delete(Ct),await le?.();for(let $e of Le)$e.stop()}}}}class t_{list(i){return i?Fr(i):[]}update(i,l){if(!i)return{sessionId:l.sessionId,prompts:[],updated:!1};let u=l.promptId.trim(),c=i.pendingPrompts.findIndex((T)=>T.id===u);if(c<0)return{sessionId:l.sessionId,prompts:Fr(i),updated:!1};let g=i.pendingPrompts[c];if(!g)return{sessionId:l.sessionId,prompts:Fr(i),updated:!1};let b=l.prompt===void 0?g.prompt:ye(l.prompt).trim();if(!b)throw Error("prompt cannot be empty");let I=l.delivery??g.delivery,k={...g,prompt:b,mode:l.mode??g.mode,delivery:I};return i.pendingPrompts.splice(c,1),OW(i,k,c,g.delivery),{sessionId:l.sessionId,prompts:Fr(i),prompt:zu(k),updated:!0}}delete(i,l){if(!i)return{sessionId:l.sessionId,prompts:[],removed:!1};let u=l.promptId.trim(),c=i.pendingPrompts.findIndex((b)=>b.id===u);if(c<0)return{sessionId:l.sessionId,prompts:Fr(i),removed:!1};let[g]=i.pendingPrompts.splice(c,1);return{sessionId:l.sessionId,prompts:Fr(i),prompt:g?zu(g):void 0,removed:!0}}enqueue(i,l){let{prompt:u,mode:c,delivery:g,userImages:b,userFiles:I}=l,k=i.pendingPrompts.findIndex((T)=>T.prompt===u);if(k>=0){let[T]=i.pendingPrompts.splice(k,1),E={...T,prompt:u,mode:c??T.mode,userImages:b??T.userImages,userFiles:I??T.userFiles};if(g==="steer"||T.delivery==="steer")i.pendingPrompts.unshift({...E,delivery:"steer"});else i.pendingPrompts.push(E)}else{let T={id:`pending_${Date.now()}_${R(5)}`,prompt:u,mode:c,delivery:g,userImages:b,userFiles:I};if(g==="steer")i.pendingPrompts.unshift(T);else i.pendingPrompts.push(T)}return Fr(i)}consumeSteer(i){let l=i.pendingPrompts.findIndex((c)=>c.delivery==="steer");if(l<0)return{prompts:Fr(i)};let[u]=i.pendingPrompts.splice(l,1);return{entry:u,prompts:Fr(i)}}shiftNext(i){return{entry:i.pendingPrompts.shift(),prompts:Fr(i)}}requeueFront(i,l){return i.pendingPrompts.unshift(l),Fr(i)}clear(i){return i.pendingPrompts.length=0,[]}}class r_{deps;service=new t_;constructor(i){this.deps=i}list(i){return this.service.list(this.deps.getSession(i))}steerFirst(i){let l=this.deps.getSession(i),u=l?.pendingPrompts[0];if(!u||u.delivery==="steer")return{sessionId:i,prompts:this.service.list(l),updated:!1};return this.update({sessionId:i,promptId:u.id,delivery:"steer"})}update(i){let l=this.deps.getSession(i.sessionId);if(!l)return{sessionId:i.sessionId,prompts:[],updated:!1};let u=this.service.update(l,i);if(this.emitPrompts(l),u.updated&&u.prompt?.delivery==="steer"&&!l.aborting)l.agent.notifyPendingUserMessage();return this.scheduleDrain(i.sessionId,l),u}delete(i){let l=this.deps.getSession(i.sessionId);if(!l)return{sessionId:i.sessionId,prompts:[],removed:!1};let u=this.service.delete(l,i);return this.emitPrompts(l),this.scheduleDrain(i.sessionId,l),u}enqueue(i,l){let u=this.deps.getSession(i);if(!u)return;if(this.service.enqueue(u,l),this.emitPrompts(u),l.delivery==="steer"&&!u.aborting)u.agent.notifyPendingUserMessage();this.scheduleDrain(i,u)}consumeSteer(i){let l=this.deps.getSession(i);if(!l)return;let{entry:u}=this.service.consumeSteer(l);if(!u)return;return this.emitPrompts(l),this.emitSubmitted(l,u),u}discardQueue(i){if(i.pendingPrompts.length===0)return;this.service.clear(i),this.emitPrompts(i)}emitPrompts(i){this.deps.emit({type:"pending_prompts",payload:{sessionId:i.sessionId,prompts:Fr(i)}})}scheduleDrain(i,l){if(l.pendingPrompts.length===0||l.aborting||l.drainingPendingPrompts||!l.agent.canStartRun())return;queueMicrotask(()=>{this.drain(i)})}async drain(i){let l=this.deps.getSession(i);if(!l)return;if(l.aborting||l.drainingPendingPrompts)return;if(!l.agent.canStartRun())return;let{entry:u}=this.service.shiftNext(l);if(!u)return;this.emitPrompts(l),this.emitSubmitted(l,u),l.drainingPendingPrompts=!0;let c=!0;try{l.replayingQueuedPrompt=!0;let g=await this.deps.send({sessionId:i,prompt:u.prompt,...u.mode?{mode:u.mode}:{},userImages:u.userImages,userFiles:u.userFiles});if(NW(g))c=!1}catch{c=!1,this.service.requeueFront(l,u),this.emitPrompts(l)}finally{if(l.drainingPendingPrompts=!1,c&&l.pendingPrompts.length>0&&l.status!=="failed"&&l.status!=="cancelled")queueMicrotask(()=>{this.drain(i)})}}emitSubmitted(i,l){let u=zu(l);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:i.sessionId,id:u.id,prompt:u.prompt,delivery:u.delivery,attachmentCount:u.attachmentCount,userImages:u.userImages,userFiles:u.userFiles}})}}function NW(i){return typeof i==="object"&&i!==null&&"finishReason"in i&&i.finishReason==="error"}function zu(i){return{id:i.id,prompt:i.prompt,delivery:i.delivery,attachmentCount:(i.userImages?.length??0)+(i.userFiles?.length??0),userImages:i.userImages,userFiles:i.userFiles}}function Fr(i){return i.pendingPrompts.map(zu)}function OW(i,l,u,c){if(l.delivery==="steer")i.pendingPrompts.unshift(l);else if(c==="steer")i.pendingPrompts.push(l);else i.pendingPrompts.splice(u,0,l)}class s_{listeners=new Set;subscribe(i,l){let u={listener:i,sessionId:l?.sessionId?.trim()||void 0};return this.listeners.add(u),()=>{this.listeners.delete(u)}}emit(i){let l=i.payload.sessionId?.trim();for(let u of this.listeners){if(u.sessionId&&u.sessionId!==l)continue;u.listener(i)}}get size(){return this.listeners.size}}async function iu(i){let l=i?.trim();if(!l||!$W(l))return[];try{let u=(await LW(l,"utf8")).trim();if(!u)return[];let c=JSON.parse(u);if(Array.isArray(c))return c;if(c&&typeof c==="object"&&!Array.isArray(c)){let g=c.messages;if(Array.isArray(g))return g}return[]}catch{return[]}}function Uw(i){return i?{...i}:void 0}async function DW(i,l){if(!(i.hookName==="tool_call"||!!i.parent_agent_id))return;await l.queueSpawnRequest(i);let u=await l.upsertSubagentSessionFromHook(i);if(!u)return;await l.appendSubagentHookAudit(u,i),await l.applySubagentStatus(u,i)}function UW(i){return{sessionId:i.session_id,source:i.source,pid:i.pid,startedAt:i.started_at,endedAt:i.ended_at??null,exitCode:i.exit_code??null,status:i.status,interactive:i.interactive,provider:i.provider,model:i.model,cwd:i.cwd,workspaceRoot:i.workspace_root,teamName:i.team_name,enableTools:i.enable_tools,enableSpawn:i.enable_spawn,enableTeams:i.enable_teams,isSubagent:!1,prompt:i.prompt,metadata:i.metadata,messagesPath:i.messages_path,updatedAt:i.ended_at??i.started_at}}class Wf{deps;constructor(i){this.deps=i}lastKnownIdentityBySession=new Map;static MAX_IDENTITY_SNAPSHOTS=512;dispatchAgentEvent(i,l,u){let c=this.deps.getSession(i),g={sessionId:i,config:l,liveSession:c,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},b=O0(u);if(!!c&&(!b.agentId||b.agentId===Cp(c.agent))){let I={agentId:Cp(c.agent),conversationId:c.agent.getConversationId(),...c?.runtime.teamRuntime?{teamRole:"lead"}:{}};this.rememberSessionIdentity(i,I),ap(g,u,{...I,isPrimaryAgentEvent:!0});return}ap(g,u,{...c?{}:this.lastKnownIdentityBySession.get(i),isPrimaryAgentEvent:!1})}rememberSessionIdentity(i,l){if(this.lastKnownIdentityBySession.delete(i),this.lastKnownIdentityBySession.set(i,l),this.lastKnownIdentityBySession.size>Wf.MAX_IDENTITY_SNAPSHOTS){let u=this.lastKnownIdentityBySession.keys().next().value;if(u!==void 0)this.lastKnownIdentityBySession.delete(u)}}async handleTeamEvent(i,l){let u=this.deps.getSession(i);if(u){if(GH(u,l),l.type==="agent_event"){let c={sessionId:i,config:u.config,liveSession:u,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};ap(c,l.event,{agentId:l.agentId,teamRole:"teammate",teamAgentId:l.agentId,isPrimaryAgentEvent:!1})}if(l.type==="teammate_spawned"){let c=Fo({agentId:l.teammate.runtimeAgentId??l.agentId,conversationId:l.teammate.conversationId,parentAgentId:l.teammate.parentAgentId,createdByAgentId:Cp(u.agent),teamId:u.runtime.teamRuntime?.getTeamId(),teamName:u.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:l.agentId});if(c)Ph(u.config.telemetry,{ulid:i,modelId:l.teammate.modelId??u.config.modelId,provider:u.config.providerId,...c})}}if(await XH(i,l,this.deps.invokeBackendOptional),u)VH(u,i,l,this.deps.emit)}async handlePluginEvent(i,l,u,c){if(l.name==="plugin_log"){this.handlePluginLog(i,l.payload);return}if(l.name==="plugin_telemetry"){this.handlePluginTelemetry(i,l.payload,c);return}if(l.name==="automation_event"){let T=this.deps.getSession(i)?.config.extensionContext?.automation??u;if(!T)return;let E=l.payload&&typeof l.payload==="object"?l.payload:void 0;if(!E)return;await T.ingestEvent(E);return}if(l.name!=="steer_message"&&l.name!=="queue_message"&&l.name!=="pending_prompt")return;let g=l.payload&&typeof l.payload==="object"?l.payload:void 0,b=typeof g?.sessionId==="string"&&g.sessionId.trim().length>0?g.sessionId.trim():i,I=typeof g?.prompt==="string"?g.prompt.trim():"";if(!I)return;let k=l.name==="steer_message"?"steer":l.name==="queue_message"?"queue":g?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(b,{prompt:I,delivery:k})}handlePluginTelemetry(i,l,u){let c=this.deps.getSession(i)?.config.telemetry??u;if(!c||!l||typeof l!=="object")return;let g=l,b=typeof g.pluginName==="string"&&g.pluginName?g.pluginName:"unknown";if(g.kind==="event"){let I=typeof g.event==="string"?g.event.trim():"";if(!I)return;let k={...g.properties&&typeof g.properties==="object"?g.properties:{},plugin_name:b,session_id:i};if(g.required===!0)c.captureRequired(`plugin.${I}`,k);else c.capture({event:`plugin.${I}`,properties:k});return}if(g.kind==="metric"){let I=typeof g.name==="string"?g.name.trim():"",k=typeof g.value==="number"?g.value:NaN;if(!I||Number.isNaN(k))return;let T={...g.attributes&&typeof g.attributes==="object"?g.attributes:{},plugin_name:b},E=typeof g.description==="string"?g.description:void 0,A=g.required===!0,C=`plugin.${I}`;if(g.metric==="counter")c.recordCounter(C,k,T,E,A);else if(g.metric==="histogram")c.recordHistogram(C,k,T,E,A);else if(g.metric==="gauge")c.recordGauge(C,k,T,E,A)}}handlePluginLog(i,l,u){let c=this.deps.getSession(i),g=u??c?.config.extensionContext?.logger??c?.config.logger;if(!g||!l||typeof l!=="object")return;let b=l,I=typeof b.message==="string"?b.message:"";if(!I)return;let k=b.metadata&&typeof b.metadata==="object"?{...b.metadata}:{};if(k.sessionId??=i,typeof b.pluginName==="string"&&b.pluginName)k.pluginName=b.pluginName;if(b.level==="debug"){g.debug(I,k);return}if(b.level==="error"){if(g.error)g.error(I,k);else g.log(I,{...k,severity:"error"});return}g.log(I,k)}}function Cp(i){return i.getAgentId()}function Fw(i){return{sessionId:i.sessionId,source:i.source,pid:process.pid,startedAt:i.startedAt,endedAt:i.endedAt??null,exitCode:i.exitCode??null,status:i.status,interactive:i.interactive,provider:i.config.providerId,model:i.config.modelId,cwd:i.config.cwd,workspaceRoot:Hs(i.config),teamName:i.config.teamName?.trim()||void 0,enableTools:i.config.enableTools,enableSpawn:i.config.enableSpawnAgent,enableTeams:i.config.enableAgentTeams,parentSessionId:typeof i.sessionMetadata?.parentSessionId==="string"?i.sessionMetadata.parentSessionId:void 0,parentAgentId:typeof i.sessionMetadata?.parentAgentId==="string"?i.sessionMetadata.parentAgentId:void 0,agentId:typeof i.sessionMetadata?.agentId==="string"?i.sessionMetadata.agentId:void 0,conversationId:typeof i.sessionMetadata?.conversationId==="string"?i.sessionMetadata.conversationId:void 0,isSubagent:typeof i.sessionMetadata?.isSubagent==="boolean"?i.sessionMetadata.isSubagent:!1,prompt:i.pendingPrompt,metadata:i.sessionMetadata,messagesPath:i.artifacts?.messagesPath,updatedAt:i.updatedAt??i.endedAt??i.startedAt}}function Kf(i,l){let u=i[l];return typeof u==="function"?u:null}async function FW(i,l,...u){let c=Kf(i,l);if(!c)throw Error(`session service method not available: ${l}`);return Promise.resolve(c.apply(i,u))}async function qW(i,l,...u){let c=Kf(i,l);if(!c)return;await Promise.resolve(c.apply(i,u))}async function jW(i,l,...u){let c=Kf(i,l);if(!c)return;return await Promise.resolve(c.apply(i,u))}function i_(i,l,u){return{onSubAgentEvent:(c)=>i.onAgentEvent(u,l,c),onSubAgentStart:(c)=>{let g=i.getSession(u)?.runtime.teamRuntime;i.subAgentStarts.set(c.subAgentId,{startedAt:Date.now(),rootSessionId:u});let b=Fo({agentId:c.subAgentId,conversationId:c.conversationId,parentAgentId:c.parentAgentId,teamId:g?.getTeamId(),teamName:g?.getTeamName(),createdByAgentId:c.parentAgentId});if(b)Ph(l.telemetry,{ulid:u,modelId:l.modelId,provider:l.providerId,...b});Tg(l.telemetry,{event:"started",ulid:u,durationMs:0,parentId:c.parentAgentId,agentId:c.subAgentId,...b}),i.invokeBackendOptional("handleSubAgentStart",u,c)},onSubAgentEnd:(c)=>{let g=i.getSession(u)?.runtime.teamRuntime,b=i.subAgentStarts.get(c.subAgentId),I=b?Date.now()-b.startedAt:0,k=c.result?.text?c.result.text.split(`
794
+ `).length:0;Tg(l.telemetry,{event:"ended",ulid:u,durationMs:I,outputLines:k,errorMessage:c.error?String(c.error):void 0,agentId:c.subAgentId,parentId:c.parentAgentId,...Fo({agentId:c.subAgentId,conversationId:c.conversationId,parentAgentId:c.parentAgentId,teamId:g?.getTeamId(),teamName:g?.getTeamName(),createdByAgentId:c.parentAgentId})}),i.subAgentStarts.delete(c.subAgentId),i.invokeBackendOptional("handleSubAgentEnd",u,c)}}}function n_(i,l,u,c){let g=i_(i,l,u);return T0({configProvider:{getRuntimeConfig:()=>i.getSession(u)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:l.providerId,modelId:l.modelId,cwd:l.cwd,apiKey:l.apiKey,baseUrl:l.baseUrl,headers:l.headers,providerConfig:l.providerConfig,knownModels:l.knownModels,thinking:l.thinking,maxIterations:l.maxIterations,hooks:l.hooks,extensions:l.extensions,logger:l.logger,telemetry:l.telemetry},getConnectionConfig:()=>i.getSession(u)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:l.providerId,modelId:l.modelId,apiKey:l.apiKey,baseUrl:l.baseUrl,headers:l.headers,providerConfig:l.providerConfig,knownModels:l.knownModels,thinking:l.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let b=l.enableTools?A0({cwd:l.cwd,telemetry:l.telemetry,...Sf[Tf({mode:l.mode})],executors:c}):[];if(l.enableSpawnAgent)b.push(n_(i,l,u,c));return ec(b)},...g})}var zW=20480000;async function WW(i){let l=await HW(i);if(!l.isFile())throw Error("Path is not a file");if(l.size>zW)throw Error("File is too large to read into context.");let u=await BW(i,"utf8");if(u.includes("\x00"))throw Error("Cannot read binary file into context.");return u}var qw=5000,xp;function KW(i,l){if(xp)return;xp=AL().then(()=>{return}).catch((u)=>{xp=void 0,i?.error?.("Detached command log recovery failed",{error:u}),B(l,{component:"core",operation:"command.detached_log_recovery",error:u,severity:"warn",handled:!0})})}function ml(i){return typeof i==="number"&&Number.isFinite(i)?i:void 0}function GW(i){if(!i||typeof i!=="object"||Array.isArray(i))return;let l=i,u=ml(l.inputTokens),c=ml(l.outputTokens),g=ml(l.cacheReadTokens),b=ml(l.cacheWriteTokens),I=ml(l.totalCost);if(u===void 0||c===void 0||g===void 0||b===void 0||I===void 0)return;return{inputTokens:u,outputTokens:c,cacheReadTokens:g,cacheWriteTokens:b,totalCost:I}}function XW(i,l){return{inputTokens:Math.max(i.inputTokens,l.inputTokens),outputTokens:Math.max(i.outputTokens,l.outputTokens),cacheReadTokens:Math.max(i.cacheReadTokens,l.cacheReadTokens),cacheWriteTokens:Math.max(i.cacheWriteTokens,l.cacheWriteTokens),totalCost:Math.max(i.totalCost,l.totalCost)}}function jw(i,l){if(!l)return!1;if(i.source_message_count!==l.source_message_count)return i.source_message_count<l.source_message_count;return Date.parse(i.updated_at)<Date.parse(l.updated_at)}function JW(i){return i==="steer_message"||i==="queue_message"||i==="pending_prompt"}class Gf{runtimeAddress=void 0;pendingPrompts;pluginCommands;pluginCommandManager;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;distinctId;defaultLogger;defaultFetch;connectorsRequest;events=new s_;sessions=new Map;manifestMutationQueues=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new Ff;runCommandExecutionController=new c0;constructor(i){let l=xP();if(l)Ga(l);let u=Uh(i.distinctId);if(this.distinctId=u,this.sessionService=i.sessionService,this.runtimeBuilder=i.runtimeBuilder??new e_,this.createAgentInstance=i.createAgent??((c)=>new fc(c)),this.defaultCapabilities=Qm(i.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=i.toolPolicies,this.providerSettingsManager=i.providerSettingsManager??new Sn,this.oauthTokenManager=i.oauthTokenManager??new gc({providerSettingsManager:this.providerSettingsManager,telemetry:i.telemetry}),this.defaultTelemetry=i.telemetry,this.defaultLogger=i.logger,this.pluginCommandManager=new ET({logger:i.logger,telemetry:i.telemetry}),this.pluginCommands={list:async(c)=>{if(!c.sessionId)return this.pluginCommandManager.list(c);let g=this.sessions.get(c.sessionId);if(!g)return this.pluginCommandManager.list(c);if(hi(c.workspacePath)!==hi(Hs(g.config)))throw Error("Plugin command workspace does not match the session");return this.withSessionPluginCommands(g,()=>({workspacePath:Hs(g.config),sessionId:c.sessionId,status:g.pluginCommandError?"error":"ready",error:g.pluginCommandError,commands:TT(g.agent.getExtensionRegistry().commands.filter(Ry))}))},run:async(c)=>{if(!c.sessionId)return this.pluginCommandManager.run(c);let g=this.sessions.get(c.sessionId);if(!g)return this.pluginCommandManager.run(c);if(hi(c.workspacePath)!==hi(Hs(g.config)))throw Error("Plugin command workspace does not match the session");return this.withSessionPluginCommands(g,()=>_T(g.agent.getExtensionRegistry().commands.filter(Ry),c.prompt,{telemetry:g.config.telemetry??this.defaultTelemetry,sessionId:g.sessionId,modelId:g.config.modelId,provider:g.config.providerId,agentIdentity:this.getSessionAgentTelemetryIdentity(g)}))}},i.distinctId!==void 0)this.defaultTelemetry?.setDistinctId(u);this.defaultFetch=i.fetch,this.connectorsRequest=i.connectorsRequest,KW(this.defaultLogger,this.defaultTelemetry),this.pendingPromptsController=new r_({getSession:(c)=>this.sessions.get(c),emit:(c)=>this.emit(c),send:(c)=>this.runTurn(c)}),this.pendingPrompts={steerFirst:async(c)=>this.pendingPromptsController.steerFirst(c.sessionId),list:async(c)=>this.pendingPromptsController.list(c.sessionId),update:async(c)=>this.pendingPromptsController.update(c),delete:async(c)=>this.pendingPromptsController.delete(c)},this.eventBridge=new Wf({getSession:(c)=>this.sessions.get(c),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(c)=>this.emit(c),persistMessages:(c,g,b)=>{this.invoke("persistSessionMessages",c,g,b).catch((I)=>{let k=this.sessions.get(c);(k?.config.logger??this.defaultLogger)?.error?.("Failed to persist session messages from agent event",{sessionId:c,error:I}),B(k?.config.telemetry??this.defaultTelemetry,{component:"core",operation:"session.persist_messages_on_agent_event",error:I,severity:"warn",handled:!0,context:{sessionId:c,providerId:k?.config.providerId,modelId:k?.config.modelId}})})},enqueuePendingPrompt:(c,g)=>this.pendingPromptsController.enqueue(c,g),invokeBackendOptional:(c,...g)=>this.invokeOptional(c,...g)})}async applyInitialOAuthCredentials(i){if(i.config.apiKey?.trim())return i;let l=await this.oauthTokenManager.resolveProviderApiKey({providerId:i.config.providerId});if(!l?.apiKey)return i;return{...i,config:{...i.config,apiKey:l.apiKey}}}async startSession(i){let l=i.config.sessionId?.trim()??"",u=l||P(),c=this.sessions.get(u);if(c&&!c.agent.canStartRun()){if(i.prompt?.trim())throw Error(`Session ${u} already has a run in progress; queue the prompt instead.`);return await this.liveSessionStartResult(c)}let g=l.length>0&&(i.initialMessages?.length??0)>0&&!i.prompt?.trim(),b=Boolean(i.config.cwd?.trim()||i.config.workspaceRoot?.trim()),I=g&&!b?await this.invokeOptionalValue("readSessionManifest",u):void 0,k=I?{...i.config,cwd:I.cwd,workspaceRoot:I.workspace_root}:await L1(i.config);return await this.startResolvedSession({...i,config:k},u,l.length>0,I)}async liveSessionStartResult(i){let l=i.artifacts;if(!l)throw Error(`Session ${i.sessionId} is running but was never persisted`);let u=await this.invokeOptionalValue("readSessionManifest",i.sessionId)??l.manifest;return{sessionId:i.sessionId,manifest:u,manifestPath:l.manifestPath,messagesPath:l.messagesPath}}async startResolvedSession(i,l,u,c){let g=i.source??jr.CLI,b=ct(),I=await this.applyInitialOAuthCredentials(i),k=I.initialMessages??[],T=k.length>0?Pv(k):zr(),E=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!E)throw Error("session service method not available: ensureSessionsDir");let A=jc(E,l),C=jc(A,`${l}.messages.json`),N=jc(A,`${l}.json`),O=Hs(i.config),L=i.interactive===!0&&!I.prompt?.trim(),D=xu.parse({version:1,session_id:l,source:g,pid:process.pid,started_at:b,status:L?"idle":"running",interactive:i.interactive===!0,provider:I.config.providerId,model:I.config.modelId,cwd:I.config.cwd,workspace_root:O,team_name:I.config.teamName,enable_tools:I.config.enableTools,enable_spawn:I.config.enableSpawnAgent,enable_teams:I.config.enableAgentTeams,prompt:I.prompt?.trim()||void 0,messages_path:C}),U,F,j=u&&k.length>0&&!I.prompt?.trim();if(j){let de=c??await this.invokeOptionalValue("readSessionManifest",l);if(de)D=de,U={manifestPath:N,messagesPath:de.messages_path||C,compactionPath:de.compaction_path,manifest:de},F=await this.invokeOptionalValue("readSessionCompactionState",l)}let H=await this.seedAggregateUsageFromArtifacts({initialUsage:T,sessionDir:A,rootMessagesPath:U?.messagesPath??C,manifest:D});this.usageBySession.set(l,T),this.aggregateUsageBySession.set(l,H);let Q=Qm(this.defaultCapabilities,i.capabilities),z=Q?.toolExecutors??this.toolExecutors,W=i.localRuntime,ee=W?.extensionContext?.logger??W?.logger,te=W?.extensionContext?.automation,oe=W?.extensionContext?.telemetry??W?.telemetry??this.defaultTelemetry,G,se=[],Pe={getSession:(de)=>this.sessions.get(de),subAgentStarts:this.subAgentStarts,onAgentEvent:(de,De,pt)=>this.eventBridge.dispatchAgentEvent(de,De,pt),invokeBackendOptional:(de,...De)=>this.invokeOptional(de,...De)},Le=Uo(U?.manifest.metadata),Te=Uo(vn(I.sessionMetadata,{mode:I.mode??Le?.mode,trigger:I.mode?void 0:Le?.trigger}));G=await UB({input:I,localRuntime:i.localRuntime,sessionId:l,sessionOrigin:Te,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultLogger:this.defaultLogger,defaultCapabilities:Q,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,connectorsRequest:this.connectorsRequest,onPluginEvent:(de)=>{if(de.name==="plugin_log"){this.eventBridge.handlePluginLog(l,de.payload,ee);return}if(se&&JW(de.name)){se.push(de);return}this.eventBridge.handlePluginEvent(l,de,te,oe)},onPluginIssue:(de)=>{if(!G)return;this.eventBridge.dispatchAgentEvent(l,G.config,{type:"notice",noticeType:"status",displayRole:"status",message:C$(de),metadata:{pluginIssue:de}})},onTeamEvent:(de)=>{this.eventBridge.handleTeamEvent(l,de),G.config.onTeamEvent?.(de)},createSpawnTool:()=>n_(Pe,G.config,l,z),createSubAgentLifecycleCallbacks:(de)=>i_(Pe,de,l),readSessionMetadata:async()=>(await this.getSession(l))?.metadata,writeSessionMetadata:async(de)=>{await this.persistSessionMetadata(l,()=>de)}});let le=vn(Eg({...U?.manifest.metadata??{},...I.sessionMetadata??{}},G.gitState),{mode:Te?.mode,trigger:Te?.trigger,version:G.config.extensionContext?.client?.version});if(!U)D.metadata=le;let Ie;try{Ie=await this.runtimeBuilder.build({...G.runtimeBuilderInput,distinctId:this.distinctId,runCommandExecutionController:this.runCommandExecutionController})}catch(de){throw await G.pluginSandboxShutdown?.().catch(()=>{return}),de}let we=G.config,He=G.providerConfig;if(Ie.teamRuntime&&!we.teamName?.trim())we.teamName=Ie.teamRuntime.getTeamName();let ce=async()=>{let de=this.sessions.get(l);if(!de||!oy(de.config.providerId))return!1;try{return await this.syncOAuthCredentials(de,{forceRefresh:!0}),!0}catch{return!1}};Ie.delegatedAgentConfigProvider?.updateConnectionDefaults({onAuthError:ce});let Se=[...Ie.tools,...we.extraTools??[]],_e=Ie.extensions??G.extensions,Ee=I.initialCompactionState,Fe,Ke=Ee??F,Et=fS(we),yt=j?YB(D.metadata):void 0,$r=yt?mO({config:we,importedFrom:yt.tool,next:Et}):Et,vt=Ke?{...Ke,conversation_id:Ke.conversation_id?.trim()||l}:void 0,Ct=hO({compact:$r,getState:()=>Fe?.compactionState,prepareApiMessages:(de)=>{let De=Fe?.agent;if(!De)throw Error("Compaction prepareTurn ran before the session runtime was created");return De.prepareProviderMessagesForApi(de)},saveState:async(de,De)=>{let pt=Fe;if(!pt)return;let be={...de,conversation_id:pt.sessionId};try{if(!(await this.persistActiveSessionCompactionState(pt,be,De)).updated)we.logger?.debug?.("Skipped stale session compaction state",{sessionId:pt.sessionId,sourceMessageCount:be.source_message_count})}catch($e){we.logger?.error?.("Failed to persist session compaction state",{sessionId:pt.sessionId,error:$e}),B(we.telemetry,{component:"core",operation:"session.persist_compaction_state",severity:"warn",handled:!0,error:$e,context:{sessionId:pt.sessionId,providerId:we.providerId,modelId:we.modelId}})}}}),Gr={distinctId:this.distinctId,sessionId:l,providerId:He.providerId,modelId:He.modelId,apiKey:He.apiKey,baseUrl:He.baseUrl,headers:He.headers,onAuthError:ce,knownModels:He.knownModels,providerConfig:He,thinking:we.thinking,reasoningEffort:we.reasoningEffort??He.reasoningEffort,thinkingBudgetTokens:we.thinkingBudgetTokens,maxTokensPerTurn:we.maxTokensPerTurn,temperature:we.temperature,systemPrompt:we.systemPrompt,maxIterations:we.maxIterations,execution:we.execution,prepareTurn:Ct,tools:Se,modelTools:Ie.modelTools,hooks:G.hooks,extensions:_e,hookErrorMode:we.hookErrorMode,initialMessages:G.effectiveInput.initialMessages,userFileContentLoader:WW,toolPolicies:G.toolPolicies,requestToolApproval:G.requestToolApproval?async(de)=>{let De=G.requestToolApproval,pt=this.sessions.get(l);if(pt)await this.markTurnPending(pt);try{if(!De)return{approved:!1,reason:"Tool approval callback is not configured."};return await De(de)}finally{let be=this.sessions.get(l);if(be?.status==="pending")await this.markTurnRunning(be)}}:void 0,telemetry:we.telemetry,onConsecutiveMistakeLimitReached:we.onConsecutiveMistakeLimitReached,completionPolicy:Ie.completionPolicy,consumePendingUserMessage:()=>{let de=this.pendingPromptsController.consumeSteer(l);return de?th(de.prompt,de.mode??we.mode):void 0},logger:Ie.logger??we.logger,extensionContext:we.extensionContext,onEvent:(de)=>this.eventBridge.dispatchAgentEvent(l,we,de)};Gr.hooks={...Gr.hooks,onEvent:async(de)=>{if(await G.hooks?.onEvent?.(de),de.type!=="assistant-message")return;let De=this.sessions.get(l);if(!De)return;let pt=De.agent.getMessages();try{await this.invoke("persistSessionMessages",l,pt,we.systemPrompt)}catch(be){we.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:l,error:be}),B(we.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:be,severity:"warn",handled:!0,context:{sessionId:l,providerId:we.providerId,modelId:we.modelId}})}}};let Lr=this.createAgentInstance(Gr);if(Gr.onEvent)Lr.subscribeEvents(Gr.onEvent);Ie.registerLeadAgent?.(Lr);let us=Fo({agentId:Lr.getAgentId(),conversationId:Lr.getConversationId(),teamId:Ie.teamRuntime?.getTeamId(),teamName:Ie.teamRuntime?.getTeamName(),teamRole:Ie.teamRuntime?"lead":void 0});if(QB(we,l,u,O,us),us)Ph(we.telemetry,{ulid:l,modelId:we.modelId,provider:we.providerId,...us});if(Ie.teamRuntime)OA(we.telemetry,{ulid:l,teamId:Ie.teamRuntime.getTeamId(),teamName:Ie.teamRuntime.getTeamName(),leadAgentId:Lr.getAgentId(),restoredFromPersistence:Ie.teamRestoredFromPersistence===!0});let Ce={sessionId:l,config:we,sessionMetadata:le,...U?{artifacts:U}:{},source:g,startedAt:U?.manifest.started_at??b,updatedAt:U?.manifest.ended_at??U?.manifest.started_at??b,pendingPrompt:D.prompt,runtime:Ie,agent:Lr,started:!1,status:U?.manifest.status??(L?"idle":"running"),aborting:!1,interactive:i.interactive===!0,persistedMessages:k,compactionState:vt,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:G.pluginSandboxShutdown,pluginCommandError:G.pluginCommandError,submitAndExitObserved:!1,taskCompletedEmitted:!1,lastInteractiveTurnFinishReason:void 0};if(Fe=Ce,Ce.compactionState&&!this.isCompactionStateForSession(Ce.sessionId,Ce.compactionState,Ce))Ce.config.logger?.log?.("Ignoring session compaction state for a different conversation",{severity:"warn",sessionId:Ce.sessionId,conversationId:Ce.compactionState.conversation_id}),Ce.compactionState=void 0;this.sessions.set(l,Ce);let xt=se??[];se=null;for(let de of xt)this.eventBridge.handlePluginEvent(l,de,te,oe);if(U)await this.refreshActiveSessionGitMetadata(Ce,G.gitState);if(k.length>0&&!U)try{await this.ensureSessionPersisted(Ce),await this.invoke("persistSessionMessages",l,k,Ce.config.systemPrompt)}catch(de){Ce.config.logger?.error?.("Failed to persist seeded session messages at start",{sessionId:l,error:de}),B(Ce.config.telemetry,{component:"core",operation:"session.persist_seeded_messages",error:de,severity:"warn",handled:!0,context:{sessionId:l,providerId:Ce.config.providerId,modelId:Ce.config.modelId}})}this.emitStatus(l,Ce.status);let Xr;try{if(I.prompt?.trim())if(Xr=await this.executeTurn(Ce,{prompt:I.prompt,userImages:I.userImages,userFiles:I.userFiles}),!Ce.interactive)await this.finalizeSingleRun(Ce,Xr.finishReason);else await this.completeInteractiveTurn(Ce,Xr.finishReason)}catch(de){if(Ce.interactive&&Ce.aborting)Xr=await this.completeAbortedInteractiveTurn(Ce);else{B(Ce.config.telemetry,{component:"core",operation:"session.start",error:de,severity:"error",handled:!1,context:{sessionId:Ce.sessionId,providerId:Ce.config.providerId,modelId:Ce.config.modelId}});try{await this.failSession(Ce)}catch(De){Ce.config.logger?.error?.("Session failure cleanup threw",{sessionId:Ce.sessionId,error:De})}throw de}}return{sessionId:l,manifest:D,manifestPath:N,messagesPath:C,result:Xr,...G.pluginIssues.length>0?{pluginIssues:G.pluginIssues}:{}}}async restoreSession(i){return this.sessionVersioning.restoreCheckpoint({...i,telemetry:this.defaultTelemetry,getSession:(l)=>this.getSession(l),readMessages:(l)=>this.readSessionMessages(l),buildStartInput:(l,u)=>{let c=l.restoredCheckpointMetadata?{...u.sessionMetadata??{},checkpoint:l.restoredCheckpointMetadata}:u.sessionMetadata;return{...u,...c?{sessionMetadata:c}:{},initialMessages:l.initialMessages}},startSession:(l)=>this.startSession(l),getStartedSessionId:(l)=>l.sessionId,cleanupStartedSession:async(l)=>{if(!await this.deleteSession(l.sessionId))throw Error(`Failed to clean up restored session ${l.sessionId}`)},readRestoredSession:(l)=>this.getSession(l)})}async runTurn(i){let l=this.getSessionOrThrow(i.sessionId),u=l.replayingQueuedPrompt===!0;l.replayingQueuedPrompt=!1;let c=l.agent.canStartRun(),g=i.delivery??(l.interactive&&!c?"queue":void 0);if(l.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:i.sessionId,promptLength:i.prompt.length,userImageCount:i.userImages?.length??0,userFileCount:i.userFiles?.length??0,delivery:g??"immediate",...u?{}:{agentBusy:!c,bumpKind:OD(i.prompt),...l.lastTurnEndedAt===void 0?{}:{msSinceTurnEnd:Date.now()-l.lastTurnEndedAt}}}}),g==="queue"||g==="steer"){this.pendingPromptsController.enqueue(i.sessionId,{prompt:i.prompt,mode:i.mode,delivery:g,userImages:i.userImages,userFiles:i.userFiles});return}try{let b=await this.executeTurn(l,{prompt:i.prompt,mode:i.mode,userImages:i.userImages,userFiles:i.userFiles});if(!l.interactive)await this.finalizeSingleRun(l,b.finishReason);else await this.completeInteractiveTurn(l,b.finishReason);if(b.finishReason!=="error")queueMicrotask(()=>{this.pendingPromptsController.drain(i.sessionId)});return b}catch(b){if(l.interactive&&l.aborting)return await this.completeAbortedInteractiveTurn(l);throw B(l.config.telemetry,{component:"core",operation:"session.submit",error:b,severity:"error",handled:!1,context:{sessionId:l.sessionId,providerId:l.config.providerId,modelId:l.config.modelId}}),await this.failSession(l),b}}async getAccumulatedUsage(i){let l=Uw(this.usageBySession.get(i)),u=Uw(this.aggregateUsageBySession.get(i));return l||u?{usage:l,aggregateUsage:u}:void 0}async abort(i,l){let u=this.sessions.get(i);if(!u)return;if(u.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:i}}),u.aborting=!0,u.drainingPendingPrompts)this.pendingPromptsController.discardQueue(u);let c=u.runtime.teamRuntime;try{c?.cancelOutstandingWork(l)}finally{if(c)u.activeTeamRunIds.clear(),u.pendingTeamRunUpdates.length=0,eh(u);u.agent.abort(l)}}async resolveMcpAppTool(i,l){return this.getSessionOrThrow(i).runtime.mcpApps?.resolveTool(l)}async readMcpAppResource(i,l){return this.requireMcpApps(i).readResource(l)}async callMcpAppTool(i,l){let u=this.requireMcpApps(i),c=this.getSessionOrThrow(i).config,g=!1;try{let b=await u.callTool(l);return g=!0,b}finally{Ko(c.telemetry??this.defaultTelemetry,{ulid:i,tool:pf({serverName:l.serverName,toolName:l.toolName}),success:g,modelId:c.modelId,provider:c.providerId})}}requireMcpApps(i){let l=this.getSessionOrThrow(i),u=l.runtime.mcpApps;if(!u)throw Error(l.config.mcpApps?`Session "${i}" has no MCP servers available to MCP Apps.`:`MCP Apps is not enabled for session "${i}".`);return u}async proceedWhileRunning(i,l){return this.runCommandExecutionController.proceedWhileRunning(i,l)}async stopSession(i){let l=this.sessions.get(i);if(!l)return;if(l.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:i}}),l.interactive&&!Ir(l.status)){await this.releaseSessionRuntime(l,"session_stop");return}if(l.interactive&&l.agent.canStartRun()){await this.shutdownSession(l,{status:this.resolveInteractiveStopStatus(l),exitCode:this.resolveInteractiveStopExitCode(l),shutdownReason:"session_stop",endReason:"stopped"});return}l.aborting=!0,l.agent.abort(Error("session_stop")),await this.shutdownSession(l,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose(i="session_manager_dispose"){let l=[...this.sessions.values()];if(await this.pluginCommandManager.dispose(),l.length===0)return;await Promise.allSettled(l.map((u)=>u.interactive&&!Ir(u.status)?this.releaseSessionRuntime(u,i):u.interactive&&u.agent.canStartRun()?this.shutdownSession(u,{status:this.resolveInteractiveStopStatus(u),exitCode:this.resolveInteractiveStopExitCode(u),shutdownReason:i,endReason:"disposed"}):this.shutdownSession(u,{status:"cancelled",exitCode:0,shutdownReason:i,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession(i){let l=this.sessions.get(i);if(l)return Fw(l);let u=i.trim();if(!u)return;let c=await this.getRow(u);if(c)return xv(c);let g=await this.readManifest(u);return g?UW(g):void 0}async listSessions(i=200,l={}){let u=(await this.listRows(i,l)).map(xv),c=new Set(u.map((g)=>g.sessionId));for(let g of this.sessions.values()){if(c.has(g.sessionId))continue;u.unshift(Fw(g))}return u.slice(0,i)}async deleteSession(i){if(this.sessions.has(i))await this.stopSession(i);let l=await this.invoke("deleteSession",i);if(l.deleted)this.usageBySession.delete(i),this.aggregateUsageBySession.delete(i);return l.deleted}async updateSession(i,l){let u=await this.invokeOptionalValue("updateSession",{sessionId:i,prompt:l.prompt,metadata:l.metadata,title:l.title}),c=u?.updated===!0;if(c&&u.metadata!==void 0){let g=this.sessions.get(i.trim());if(g){if(g.sessionMetadata=u.metadata??void 0,g.artifacts)g.artifacts.manifest.metadata=g.sessionMetadata}}return{updated:c}}async updateSessionCompactionState(i,l){let u=i.trim();if(!u)return{updated:!1};let c=this.sessions.get(u),g=c?void 0:await this.getSession(u);if(!(c??g))return{updated:!1};if(c){let I=await this.readSessionMessages(u),k=l.source_message_count>0&&I.length>=l.source_message_count,T=k?I:void 0;if(k){if(!await this.canPersistCompactionState(u,l,c,void 0,I))return{updated:!1};c.agent.restore(I)}return await this.persistActiveSessionCompactionState(c,l,T)}if(!await this.canPersistCompactionState(u,l,void 0,g))return{updated:!1};let b=await this.invokeOptionalValue("readSessionCompactionState",u);if(jw(l,b))return{updated:!1};return await this.invoke("persistSessionCompactionState",u,l),{updated:!0}}async readSessionCompactionState(i){let l=i.trim();if(!l)return;let u=this.sessions.get(l);if(u)for(;;){let c=u.compactionStateWriteQueue;if(!c)return u.compactionState;await c.catch(()=>{return})}return await this.invokeOptionalValue("readSessionCompactionState",l)}isCompactionStateForSession(i,l,u,c){let g=l.conversation_id?.trim();if(!g)return!0;if(g===i)return!0;let b=u?.agent.getConversationId()?.trim()||c?.conversationId?.trim();return b?g===b:!1}async canPersistCompactionState(i,l,u,c,g){if(!l.conversation_id?.trim())return!1;if(!this.isCompactionStateForSession(i,l,u,c))return!1;let b=g??u?.agent.getMessages()??await this.readSessionMessages(i);return km(l,b)!==void 0}async persistActiveSessionCompactionState(i,l,u){if(!await this.canPersistCompactionState(i.sessionId,l,i,void 0,u))return{updated:!1};return await this.enqueueCompactionStateWrite(i,async()=>{let c=i.compactionState,g=c!==void 0&&km(c,u??i.agent.getMessages())!==void 0;if(c&&(g?jw(l,c):Date.parse(l.updated_at)<Date.parse(c.updated_at)))return{updated:!1};return await this.invoke("persistSessionCompactionState",i.sessionId,l),i.compactionState=l,{updated:!0}})}async enqueueCompactionStateWrite(i,l){let u=(i.compactionStateWriteQueue??Promise.resolve()).catch(()=>{return}).then(l),c=u.then(()=>{return},()=>{return});i.compactionStateWriteQueue=c;try{return await u}finally{if(i.compactionStateWriteQueue===c)i.compactionStateWriteQueue=void 0}}async readLiveSessionMessages(i){let l=i.trim();if(!l)return[];let u=this.sessions.get(l);if(u){let c=u.agent.getMessages();if(c.length>0)return c}return this.readSessionMessages(l)}async readSessionMessages(i){let l=i.trim();if(!l)return[];let u=await this.getRow(l);if(u?.messagesPath)return iu(u.messagesPath);let c=await this.readManifest(l);return iu(c?.messages_path)}async dispatchHookEvent(i){await DW(i,{queueSpawnRequest:(l)=>this.invokeOptional("queueSpawnRequest",l),upsertSubagentSessionFromHook:(l)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",l),appendSubagentHookAudit:(l,u)=>this.invokeOptional("appendSubagentHookAudit",l,u),applySubagentStatus:(l,u)=>this.invokeOptional("applySubagentStatus",l,u)})}subscribe(i,l){return this.events.subscribe(i,l)}async updateSessionModel(i,l){await this.updateSessionConnection(i,{modelId:l})}async updateSessionConnection(i,l){let u=Ef(l),c=this.getSessionOrThrow(i);if(u.providerId!==void 0)c.config.providerId=u.providerId;if(u.modelId!==void 0)c.config.modelId=u.modelId;if(u.apiKey!==void 0)c.config.apiKey=u.apiKey;if(u.baseUrl!==void 0)c.config.baseUrl=u.baseUrl;if(u.headers!==void 0)c.config.headers=u.headers;if(u.providerConfig!==void 0)c.config.providerConfig=u.providerConfig;if(Object.hasOwn(u,"reasoningEffort"))c.config.reasoningEffort=u.reasoningEffort??void 0;if(Object.hasOwn(u,"thinkingBudgetTokens"))c.config.thinkingBudgetTokens=u.thinkingBudgetTokens??void 0;if(Object.hasOwn(u,"thinking")){if(c.config.thinking=u.thinking??void 0,u.thinking===!1||u.thinking===null)c.config.reasoningEffort=void 0,c.config.thinkingBudgetTokens=void 0}let g={...u.providerId!==void 0?{providerId:u.providerId}:{},...u.modelId!==void 0?{modelId:u.modelId}:{},...u.apiKey!==void 0?{apiKey:u.apiKey}:{},...u.baseUrl!==void 0?{baseUrl:u.baseUrl}:{},...u.headers!==void 0?{headers:u.headers}:{},...u.providerConfig!==void 0?{providerConfig:u.providerConfig}:{},...Object.hasOwn(u,"reasoningEffort")?{reasoningEffort:u.reasoningEffort??void 0}:{},...Object.hasOwn(u,"thinking")?{thinking:u.thinking??void 0}:{},...Object.hasOwn(u,"thinkingBudgetTokens")?{thinkingBudgetTokens:u.thinkingBudgetTokens??void 0}:{}};if(u.thinking===!1||u.thinking===null)g.reasoningEffort=void 0,g.thinkingBudgetTokens=void 0;let b={...u.apiKey!==void 0?{apiKey:u.apiKey}:{},...u.baseUrl!==void 0?{baseUrl:u.baseUrl}:{},...u.headers!==void 0?{headers:u.headers}:{}};if(c.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults(g),c.agent.updateConnection(u),c.runtime.teamRuntime?.updateTeammateConnections(b),u.providerId||u.modelId)await this.mutateSessionManifest(c,(I)=>{if(u.providerId)I.provider=u.providerId;if(u.modelId)I.model=u.modelId})}async mutateSessionManifest(i,l){let u=i.artifacts;if(!u)return;let c=i.sessionId,g=(this.manifestMutationQueues.get(c)??Promise.resolve()).then(async()=>{let I=await this.invokeOptionalValue("readSessionManifest",c)??u.manifest;return l(I),u.manifest=I,await this.invoke("writeSessionManifest",u.manifestPath,I),I}),b=g.then(()=>{return},()=>{return});this.manifestMutationQueues.set(c,b);try{return await g}finally{if(this.manifestMutationQueues.get(c)===b)this.manifestMutationQueues.delete(c)}}handlePluginEvent(i,l,u){return this.eventBridge.handlePluginEvent(i,l,u)}async executeTurn(i,l){i.aborting=!1;let u=await this.prepareTurnInput(i,l),c=u.prompt.trim(),g=u?.userImages?.length,b=u?.userFiles?.length;if(!c&&!g&&!b)throw Error("prompt cannot be empty");if(!i.artifacts&&!i.pendingPrompt)i.pendingPrompt=c;if(await this.ensureSessionPersisted(i),!i.pendingPrompt){i.pendingPrompt=c;try{await this.invokeOptionalValue("updateSession",{sessionId:i.sessionId,prompt:c})}catch(I){i.config.logger?.log?.("Failed to backfill seeded session prompt",{severity:"warn",sessionId:i.sessionId,error:I})}}await this.refreshActiveSessionGitMetadata(i),await this.syncOAuthCredentials(i),await this.markTurnRunning(i);try{let I=await this.executeAgentTurn(i,c,u.userImages,u.userFiles);while(QH(i,I.finishReason)){let k=await ZH(i);if(k.length===0)break;let T=ez(i,k);I=await this.executeAgentTurn(i,T)}return I}finally{i.lastTurnEndedAt=Date.now(),await this.refreshActiveSessionGitMetadata(i)}}async completeInteractiveTurn(i,l){if(Zm(i))return;i.lastInteractiveTurnFinishReason=l,await this.markTurnIdle(i),i.aborting=!1}resolveInteractiveStopStatus(i){let l=i.lastInteractiveTurnFinishReason;if(!l)return"cancelled";switch(l){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return l}resolveInteractiveStopExitCode(i){return i.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn(i){let l=new Date,u=i.agent.getMessages(),c=zr();if(i.persistedMessages=u,i.started=i.started||u.length>0,u.length>0)try{await this.ensureSessionPersisted(i),await this.invoke("persistSessionMessages",i.sessionId,u,i.config.systemPrompt)}catch(g){i.config.logger?.error?.("Failed to persist session messages after abort",{sessionId:i.sessionId,error:g}),B(i.config.telemetry,{component:"core",operation:"session.persist_messages_after_abort",error:g,severity:"warn",handled:!0,context:{sessionId:i.sessionId,providerId:i.config.providerId,modelId:i.config.modelId}})}return this.eventBridge.dispatchAgentEvent(i.sessionId,i.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:c}),await this.completeInteractiveTurn(i,"aborted"),queueMicrotask(()=>{this.pendingPromptsController.drain(i.sessionId)}),{text:"",usage:c,messages:u,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:i.config.modelId,provider:i.config.providerId},startedAt:l,endedAt:l,durationMs:0}}async executeAgentTurn(i,l,u,c){let g=i.started||i.agent.getMessages().length>0,b=i.persistedMessages??i.agent.getMessages(),I=this.usageBySession.get(i.sessionId)??zr(),k=this.aggregateUsageBySession.get(i.sessionId)??I;i.turnUsageBaseline=I,i.turnAggregateUsageBaseline=k,i.turnPrimaryUsage=zr(),i.turnUsageByAgent=new Map,TA(i.config.telemetry,i.sessionId,i.config.mode),EI(i.config.telemetry,{ulid:i.sessionId,provider:i.config.providerId,model:i.config.modelId,source:"user",mode:i.config.mode,...this.getSessionAgentTelemetryIdentity(i)});try{let T=()=>{let D=g?i.agent.continue(l,u,c):i.agent.run(l,u,c);if(i.aborting)i.agent.abort(Error("Run aborted before it started"));return D},E=await this.runWithAuthRetry(i,T,b);i.started=!0;let A=R0(E.messages,E,b);i.persistedMessages=A;let C=N0(i.turnUsageByAgent?.values()??[]),N=Qt(I,E.usage),O=Qt(Qt(zr(),E.usage),C),L=Qt(k,O);return this.usageBySession.set(i.sessionId,N),this.aggregateUsageBySession.set(i.sessionId,L),await this.persistSessionMetadata(i.sessionId,(D)=>({...D??{},totalCost:N.totalCost,aggregatedAgentsCost:L.totalCost,usage:N,aggregateUsage:L})),await this.invoke("persistSessionMessages",i.sessionId,A,i.config.systemPrompt),this.observeTaskCompletionTool(i,E),E}catch(T){B(i.config.telemetry,{component:"core",operation:"session.turn",error:T,severity:"error",handled:!1,context:{sessionId:i.sessionId,providerId:i.config.providerId,modelId:i.config.modelId}});try{await this.invoke("persistSessionMessages",i.sessionId,i.agent.getMessages(),i.config.systemPrompt)}catch(E){i.config.logger?.error?.("Failed to persist session messages after turn error",{sessionId:i.sessionId,error:E})}throw T}finally{i.turnUsageBaseline=void 0,i.turnAggregateUsageBaseline=void 0,i.turnPrimaryUsage=void 0,i.turnUsageByAgent=void 0}}observeTaskCompletionTool(i,l){if(i.submitAndExitObserved)return;if(!l.toolCalls.some((u)=>u.name===Kt.SUBMIT_AND_EXIT&&u.error===void 0))return;i.submitAndExitObserved=!0,i.taskCompletedEmitted=!0,kg(i.config.telemetry,{ulid:i.sessionId,provider:i.config.providerId,model:i.config.modelId,mode:i.config.mode,durationMs:Date.now()-Date.parse(i.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity(i)})}emitTaskCompletedOnTeardown(i,l){if(i.taskCompletedEmitted||i.submitAndExitObserved)return;if(!(i.interactive?i.lastInteractiveTurnFinishReason==="completed"&&!i.aborting&&i.agent.canStartRun():l==="completed"))return;i.taskCompletedEmitted=!0,kg(i.config.telemetry,{ulid:i.sessionId,provider:i.config.providerId,model:i.config.modelId,mode:i.config.mode,durationMs:Date.now()-Date.parse(i.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity(i)})}async prepareTurnInput(i,l){let u=Hs(i.config),c=ye(l.prompt).trim();if(!c)return{prompt:"",userImages:l.userImages,userFiles:this.resolveAbsoluteFilePaths(i.config.cwd,l.userFiles)};let g=await oD(c,u);eH(i.config.telemetry,g);let b=th(g.prompt,l.mode??i.config.mode),I=this.resolveAbsoluteFilePaths(i.config.cwd,l.userFiles),k=this.resolveAbsoluteFilePaths(u,g.matchedFiles),T=Array.from(new Set([...I,...k]));return{prompt:b,userImages:l.userImages,userFiles:T.length>0?T:void 0}}async ensureSessionPersisted(i){if(i.artifacts)return;let l=Hs(i.config);if(i.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:i.sessionId,source:i.source,pid:process.pid,status:i.status,interactive:i.interactive,provider:i.config.providerId,model:i.config.modelId,cwd:i.config.cwd,workspaceRoot:l,teamName:i.config.teamName,enableTools:i.config.enableTools,enableSpawn:i.config.enableSpawnAgent,enableTeams:i.config.enableAgentTeams,prompt:i.pendingPrompt,metadata:i.sessionMetadata,startedAt:i.startedAt}),i.compactionState){if(!(await this.persistActiveSessionCompactionState(i,i.compactionState)).updated)i.compactionState=void 0}}async markTurnRunning(i){if(i.status==="running")return;await this.updateStatus(i,"running",null)}async refreshActiveSessionGitMetadata(i,l){try{let u=l??await YA(Hs(i.config));if(!u||!i.artifacts)return;if(VA(i.artifacts.manifest.metadata,u))return;await this.persistSessionMetadata(i.sessionId,(c)=>Eg({...c??{},...i.sessionMetadata??{}},u))}catch(u){i.config.logger?.debug?.("Failed to refresh session git metadata",{sessionId:i.sessionId,error:u})}}async markTurnPending(i){if(i.status==="pending")return;await this.updateStatus(i,"pending",null)}async markTurnIdle(i){if(i.status==="idle")return;await this.updateStatus(i,"idle",null)}async persistSessionMetadata(i,l){let u=this.sessions.get(i),c=await this.invokeOptionalValue("readSessionManifest",i)??u?.artifacts?.manifest,g=l(c?.metadata);if(!u?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:i,metadata:g}))?.updated===!1)return;u.sessionMetadata=g,u.artifacts.manifest.metadata=g}async finalizeSingleRun(i,l){if(Zm(i))return;let u=l==="aborted"||i.aborting,c=l==="error";await this.shutdownSession(i,{status:u?"cancelled":c?"failed":"completed",exitCode:c?1:0,shutdownReason:c?"session_error":"session_complete",endReason:l})}async failSession(i){i.lastInteractiveTurnFinishReason="error",await this.shutdownSession(i,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession(i,l){if(i.pluginCommandsClosing=!0,this.emitTaskCompletedOnTeardown(i,l.status),eh(i),!i.aborting&&!i.agent.canStartRun())i.aborting=!0,i.agent.abort(Error(l.shutdownReason));let u=[],c=(g,b)=>{u.push(b),i.config.logger?.log("Session shutdown cleanup failed",{sessionId:i.sessionId,stage:g,error:b,severity:"warn"}),B(i.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:b,severity:"warn",handled:!0,context:{sessionId:i.sessionId,stage:g,status:l.status,shutdownReason:l.shutdownReason,providerId:i.config.providerId,modelId:i.config.modelId}})};if(i.artifacts){await this.refreshActiveSessionGitMetadata(i);try{await this.updateStatus(i,l.status,l.exitCode)}catch(g){c("update_status",g)}}try{await i.pluginCommandTail,await i.agent.shutdown(l.shutdownReason)}catch(g){c("agent_shutdown",g)}try{await Promise.resolve(i.runtime.shutdown(l.shutdownReason))}catch(g){c("runtime_shutdown",g)}try{await i.pluginSandboxShutdown?.()}catch(g){c("plugin_sandbox_shutdown",g)}if(this.sessions.delete(i.sessionId),this.emit({type:"ended",payload:{sessionId:i.sessionId,reason:l.endReason,ts:Date.now()}}),u.length>0&&l.status==="failed")throw u[0]}async releaseSessionRuntime(i,l){i.pluginCommandsClosing=!0,this.emitTaskCompletedOnTeardown(i);let u=[],c=(g,b)=>{u.push(b),i.config.logger?.log("Session runtime cleanup failed",{sessionId:i.sessionId,stage:g,error:b,severity:"warn"}),B(i.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:b,severity:"warn",handled:!0,context:{sessionId:i.sessionId,stage:g,reason:l,providerId:i.config.providerId,modelId:i.config.modelId}})};if(!i.aborting&&!i.agent.canStartRun())i.aborting=!0,i.agent.abort(Error(l));try{await i.pluginCommandTail,await i.agent.shutdown(l)}catch(g){c("agent_shutdown",g)}try{await Promise.resolve(i.runtime.shutdown(l))}catch(g){c("runtime_shutdown",g)}try{await i.pluginSandboxShutdown?.()}catch(g){c("plugin_sandbox_shutdown",g)}if(this.sessions.delete(i.sessionId),u.length>0)throw u[0]}async updateStatus(i,l,u){if(!i.artifacts)return;let c=await this.invoke("updateSessionStatus",i.sessionId,l,u);if(!c.updated)return;let g=await this.mutateSessionManifest(i,(b)=>{if(b.status=l,Ir(l))delete b.ended_at,b.exit_code=null;else b.ended_at=c.endedAt??ct(),b.exit_code=typeof u==="number"?u:null});if(!g)return;i.status=l,i.updatedAt=c.endedAt??ct(),i.endedAt=Ir(l)?null:g.ended_at,i.exitCode=g.exit_code,this.emitStatus(i.sessionId,l)}async runWithAuthRetry(i,l,u){try{return await l()}catch(c){if(!oy(i.config.providerId)||!Si(c))throw c;return await this.syncOAuthCredentials(i,{forceRefresh:!0}),i.agent.restore(u),l()}}async syncOAuthCredentials(i,l){let u=null;try{u=await this.oauthTokenManager.resolveProviderApiKey({providerId:i.config.providerId,forceRefresh:l?.forceRefresh})}catch(c){if(c instanceof pd)throw Error(`${c.providerId} requires re-authentication.`);throw c}if(!u?.apiKey||i.config.apiKey===u.apiKey)return;i.config.apiKey=u.apiKey,i.agent.updateConnection({apiKey:u.apiKey}),i.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:u.apiKey}),i.runtime.teamRuntime?.updateTeammateConnections({apiKey:u.apiKey})}withSessionPluginCommands(i,l){if(i.pluginCommandsClosing)return Promise.reject(Error("Session plugin commands are shutting down"));let u=(i.pluginCommandTail??Promise.resolve()).then(async()=>(await i.agent.initializeExtensions(),l()));return i.pluginCommandTail=u.catch(()=>{}),u}getSessionOrThrow(i){let l=this.sessions.get(i);if(!l){let u=new tc(i);throw B(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:u,severity:"warn",handled:!0,context:{sessionId:i,activeSessionCount:this.sessions.size}}),u}return l}resolveAbsoluteFilePaths(i,l){if(!l||l.length===0)return[];let u=l.map((c)=>c.trim()).filter((c)=>c.length>0).map((c)=>RP(c)?c:hi(i,c));return Array.from(new Set(u))}getSessionAgentTelemetryIdentity(i){return Fo({agentId:i.agent.getAgentId(),conversationId:i.agent.getConversationId(),teamId:i.runtime.teamRuntime?.getTeamId(),teamName:i.runtime.teamRuntime?.getTeamName(),teamRole:i.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts(i){let l=await this.summarizePersistedTeammateUsage(i.sessionDir,i.rootMessagesPath,i.manifest.session_id),u=Qt(i.initialUsage,l);return this.withPersistedAggregateUsageFloor(u,i.manifest)}async summarizePersistedTeammateUsage(i,l,u){let c=hi(l),g=`${u}.messages.json`,b;try{b=CP(i)}catch{return zr()}let I=zr();for(let k of b){if(!k.endsWith(".messages.json"))continue;if(k===g)continue;let T=hi(i,k);if(T===c)continue;let E=await iu(T);if(E.length===0)continue;I=Qt(I,Pv(E))}return I}withPersistedAggregateUsageFloor(i,l){let u=GW(l.metadata?.aggregateUsage);if(u)return XW(i,u);let c=l.metadata?.aggregatedAgentsCost;if(typeof c!=="number"||!Number.isFinite(c)||c<=i.totalCost)return i;return{...i,totalCost:c}}emitStatus(i,l){this.emitSessionSnapshot(i),this.emit({type:"status",payload:{sessionId:i,status:l}})}async emitSessionSnapshot(i){let l=await this.getSession(i);if(!l)return;this.emit({type:"session_snapshot",payload:{sessionId:i,snapshot:Du({session:l,usage:this.usageBySession.get(i),aggregateUsage:this.aggregateUsageBySession.get(i)})}})}emit(i){this.events.emit(i)}async listRows(i,l={}){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor(i)),qw),l)}async getRow(i){let l=i.trim();if(!l)return;return(await this.listRows(qw)).find((u)=>u.sessionId===l)}async readManifest(i){let l=i.trim();if(!l)return;return await this.invokeOptionalValue("readSessionManifest",l)}invoke(i,...l){return FW(this.sessionService,i,...l)}invokeOptional(i,...l){return qW(this.sessionService,i,...l)}invokeOptionalValue(i,...l){return jW(this.sessionService,i,...l)}}class Xf{sessionsDirPath;db;constructor(i={}){this.sessionsDirPath=i.sessionsDir??xe()}init(){this.getRawDb()}ensureSessionsDir(){if(!VW(this.sessionsDirPath))YW(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return QW(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let i=V(this.sessionDbPath());return Vo(i,{includeLegacyMigrations:!0}),this.db=i,i}close(){this.db?.close?.(),this.db=void 0}run(i,l=[]){return this.getRawDb().prepare(i).run(...l)}queryOne(i,l=[]){return this.getRawDb().prepare(i).get(...l)??void 0}queryAll(i,l=[]){return this.getRawDb().prepare(i).all(...l)}create(i){let l=x();this.run(`INSERT OR REPLACE INTO sessions (
795
+ session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
796
+ provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
797
+ parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
798
+ metadata_json, transcript_path, hook_path, messages_path, updated_at
799
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[i.sessionId,i.source,i.pid,i.startedAt,i.endedAt??null,i.exitCode??null,i.status,0,ot(i.interactive),i.provider,i.model,i.cwd,i.workspaceRoot,i.teamName??null,ot(i.enableTools),ot(i.enableSpawn),ot(i.enableTeams),i.parentSessionId??null,i.parentAgentId??null,i.agentId??null,i.conversationId??null,ot(i.isSubagent),i.prompt??null,i.metadata?JSON.stringify(i.metadata):null,"",i.hookPath??"",i.messagesPath??null,l])}update(i){let l=[],u=[];if(i.endedAt!==void 0)l.push("ended_at = ?"),u.push(i.endedAt);if(i.exitCode!==void 0)l.push("exit_code = ?"),u.push(i.exitCode);if(i.status!==void 0)l.push("status = ?"),u.push(i.status);if(i.prompt!==void 0)l.push("prompt = ?"),u.push(i.prompt);if(i.metadata!==void 0)l.push("metadata_json = ?"),u.push(i.metadata?JSON.stringify(i.metadata):null);if(i.parentSessionId!==void 0)l.push("parent_session_id = ?"),u.push(i.parentSessionId);if(i.parentAgentId!==void 0)l.push("parent_agent_id = ?"),u.push(i.parentAgentId);if(i.agentId!==void 0)l.push("agent_id = ?"),u.push(i.agentId);if(i.conversationId!==void 0)l.push("conversation_id = ?"),u.push(i.conversationId);if(l.length===0)return;l.push("updated_at = ?"),u.push(x()),u.push(i.sessionId),this.run(`UPDATE sessions SET ${l.join(", ")} WHERE session_id = ?`,u)}updateStatus(i,l,u){this.update({sessionId:i,status:l,endedAt:Ir(l)?null:x(),exitCode:Ir(l)?null:u??(l==="failed"?1:0)})}get(i){let l=this.queryOne(`SELECT session_id, source, pid, started_at, ended_at, exit_code, status, interactive,
800
+ provider, model, cwd, workspace_root, team_name,
801
+ enable_tools, enable_spawn, enable_teams,
802
+ parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent,
803
+ prompt, metadata_json, hook_path, messages_path, updated_at
804
+ FROM sessions WHERE session_id = ?`,[i]);if(!l)return;return{sessionId:f(l.session_id),source:f(l.source),pid:Number(l.pid??0),startedAt:f(l.started_at),endedAt:l.ended_at??null,exitCode:l.exit_code??null,status:f(l.status),interactive:wt(l.interactive),provider:f(l.provider),model:f(l.model),cwd:f(l.cwd),workspaceRoot:f(l.workspace_root),teamName:h(l.team_name),enableTools:wt(l.enable_tools),enableSpawn:wt(l.enable_spawn),enableTeams:wt(l.enable_teams),parentSessionId:h(l.parent_session_id),parentAgentId:h(l.parent_agent_id),agentId:h(l.agent_id),conversationId:h(l.conversation_id),isSubagent:wt(l.is_subagent),prompt:h(l.prompt),metadata:(()=>{let u=h(l.metadata_json);if(!u)return;try{let c=JSON.parse(u);if(c&&typeof c==="object"&&!Array.isArray(c))return c}catch{}return})(),hookPath:h(l.hook_path),messagesPath:h(l.messages_path),updatedAt:h(l.updated_at)??x()}}list(i=200){let l=this.queryAll("SELECT session_id FROM sessions ORDER BY started_at DESC LIMIT ?",[i]),u=[];for(let c of l){let g=this.get(f(c.session_id));if(g)u.push(g)}return u}listChildren(i,l=200){let u=this.queryAll(`SELECT session_id FROM sessions WHERE parent_session_id = ?
805
+ ORDER BY started_at ASC LIMIT ?`,[i,l]),c=[];for(let g of u){let b=this.get(f(g.session_id));if(b)c.push(b)}return c}delete(i,l=!1){let u=this.run("DELETE FROM sessions WHERE session_id = ?",[i]).changes??0;if(l)this.run("DELETE FROM sessions WHERE parent_session_id = ?",[i]);return u>0}}var Bw=`
806
+ session_id AS sessionId,
807
+ source,
808
+ pid,
809
+ started_at AS startedAt,
810
+ ended_at AS endedAt,
811
+ exit_code AS exitCode,
812
+ status,
813
+ status_lock AS statusLock,
814
+ interactive,
815
+ provider,
816
+ model,
817
+ cwd,
818
+ workspace_root AS workspaceRoot,
819
+ team_name AS teamName,
820
+ enable_tools AS enableTools,
821
+ enable_spawn AS enableSpawn,
822
+ enable_teams AS enableTeams,
823
+ parent_session_id AS parentSessionId,
824
+ parent_agent_id AS parentAgentId,
825
+ agent_id AS agentId,
826
+ conversation_id AS conversationId,
827
+ is_subagent AS isSubagent,
828
+ prompt,
829
+ metadata_json AS metadata,
830
+ hook_path AS hookPath,
831
+ messages_path AS messagesPath,
832
+ updated_at AS updatedAt`;function Hw(i){i.interactive=i.interactive===1,i.enableTools=i.enableTools===1,i.enableSpawn=i.enableSpawn===1,i.enableTeams=i.enableTeams===1,i.isSubagent=i.isSubagent===1;let l=i.metadata;if(typeof l==="string"&&l.trim())try{let u=JSON.parse(l);i.metadata=u&&typeof u==="object"&&!Array.isArray(u)?u:null}catch{i.metadata=null}else i.metadata=null;return i}function Rp(i){if(!i||Object.keys(i).length===0)return null;return JSON.stringify(i)}async function cK(i){let l;try{l=await o_(i,"r"),await l.sync()}catch{}finally{if(l!==void 0)try{await l.close()}catch{}}}async function pK(i,l){await lK(Xw(i),{recursive:!0});let u=`${i}.${process.pid}.${aK()}.tmp`,c;try{c=await o_(u,"wx"),await c.writeFile(l,"utf8"),await c.sync(),await c.close(),c=void 0,await dK(u,i),await cK(Xw(i))}catch(g){if(c!==void 0)try{await c.close()}catch{}try{await uK(u,{force:!0})}catch{}throw g}}function mK(i){return typeof i==="object"&&i!==null&&"code"in i&&i.code==="ENOENT"}function hK(i){return i!=="."&&i!==".."&&!i.includes("/")&&!i.includes("\\")}function fK(i,l){return{sessionId:i.session_id,source:i.source,pid:i.pid,startedAt:i.started_at,endedAt:i.ended_at??null,exitCode:i.exit_code??null,status:i.status,statusLock:0,interactive:i.interactive,provider:i.provider,model:i.model,cwd:i.cwd,workspaceRoot:i.workspace_root,teamName:i.team_name??null,enableTools:i.enable_tools,enableSpawn:i.enable_spawn,enableTeams:i.enable_teams,parentSessionId:null,parentAgentId:null,agentId:null,conversationId:null,isSubagent:!1,prompt:i.prompt??null,metadata:i.metadata??null,hookPath:"",messagesPath:l,updatedAt:ct()}}class a_{adapter;messagesArtifactUploader;logger;artifacts;constructor(i,l,u){this.adapter=i,this.messagesArtifactUploader=l,this.logger=u,this.artifacts=new AT(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile(i,l,u){XU(l,u,Rv(i))}writeSessionManifest(i,l){zw(Gw(i),{recursive:!0}),Ww(i,`${JSON.stringify(xu.parse(l),null,2)}
833
+ `,"utf8")}readSessionManifest(i){return this.readManifestFile(i).manifest}async readSessionManifestTitle(i){let l=this.artifacts.sessionManifestPath(i,!1),u;try{u=await Kw(l,"utf8")}catch{return}try{let c=JSON.parse(u);if(!c||typeof c!=="object"||Array.isArray(c))return;let g=c.metadata;if(!g||typeof g!=="object"||Array.isArray(g))return;let b=g.title;return typeof b==="string"?b:void 0}catch{return}}readManifestFile(i){let l=this.artifacts.sessionManifestPath(i,!1);if(!sK(l))return{path:l};try{return{path:l,manifest:xu.parse(JSON.parse(iK(l,"utf8")))}}catch{return{path:l}}}readSessionRowFromManifest(i){if(!hK(i))return;let{manifest:l}=this.readManifestFile(i);if(!l||l.session_id!==i)return;return fK(l,this.artifacts.sessionMessagesPath(i))}async resolveSessionRow(i){let l=await this.adapter.getSession(i);if(l)return l;let u=this.readSessionRowFromManifest(i);if(!u)throw Error(`Cannot persist messages for unknown session: ${i}`);return await this.adapter.upsertSession(u),this.logger?.debug("Re-adopted session row from manifest",{sessionId:i}),u}async persistSessionMessages(i,l,u){let c=await this.resolveSessionRow(i),g=typeof c.messagesPath==="string"&&c.messagesPath.trim().length>0?c.messagesPath:this.artifacts.sessionMessagesPath(i),b=M0({updatedAt:ct(),context:Rv(c),messages:l,systemPrompt:u}),I=`${JSON.stringify(b,null,2)}
834
+ `;if(zw(Gw(g),{recursive:!0}),Ww(g,I,"utf8"),!this.messagesArtifactUploader)return;try{await this.messagesArtifactUploader.uploadMessagesFile({sessionId:i,path:g,contents:I,row:c})}catch(k){this.logger?.debug("Failed to upload persisted session messages",{sessionId:i,error:k})}}resolveCompactionPath(i){let{manifest:l}=this.readManifestFile(i);return l?.compaction_path?.trim()||this.artifacts.sessionCompactionPath(i)}updateCompactionPath(i,l){let u=this.readManifestFile(i);if(!u.manifest)return;if(u.manifest.compaction_path===l)return;this.writeSessionManifest(u.path,{...u.manifest,compaction_path:l})}async readSessionCompactionState(i){let l=this.resolveCompactionPath(i);try{return dc(JSON.parse(await Kw(l,"utf8")))}catch(u){if(mK(u))return;this.logger?.debug("Ignoring invalid session compaction state",{sessionId:i,path:l,error:u,recovery:"Canonical history is unchanged; deleting the sidecar is safe."});return}}async persistSessionCompactionState(i,l){let u=this.resolveCompactionPath(i),c=df.parse(l);await pK(u,`${JSON.stringify(c,null,2)}
835
+ `),this.updateCompactionPath(i,u)}async deleteSessionCompactionState(i){await nK(this.resolveCompactionPath(i),{force:!0}),this.updateCompactionPath(i,void 0)}appendStaleSessionHookLog(i,l,u,c,g){let b=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??oK(et(),"hooks.jsonl");rK(b,`${JSON.stringify({ts:i,hookName:"session_shutdown",reason:c,sessionId:l,pid:u,source:g})}
836
+ `,"utf8")}}var Pp=4;class uo{adapter;manifestStore;teamChildren;static STALE_REASON="failed_external_process_exit";static STALE_SOURCE="stale_session_reconciler";static TEAM_HEARTBEAT_LOG_INTERVAL_MS=30000;constructor(i,l={}){this.adapter=i,this.manifestStore=new a_(i,l.messagesArtifactUploader,l.logger),this.teamChildren=new RT(i,this.manifestStore,(u,c,g)=>this.toPersistedMessages(u,c,g),uo.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages(i,l,u){if(!i)return;return l?R0(l.messages,l,u):Lm(i)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest(i,l){this.manifestStore.writeSessionManifest(i,l)}readSessionManifest(i){return this.manifestStore.readSessionManifest(i)}async createRootSessionWithArtifacts(i){let l=i.startedAt??ct(),u=i.sessionId.trim(),c=u.length>0?u:`${Date.now()}_${R(5)}`,g=this.manifestStore.artifacts.sessionMessagesPath(c),b=this.manifestStore.artifacts.sessionCompactionPath(c),I=this.manifestStore.artifacts.sessionManifestPath(c),k=Dm({metadata:vn(i.metadata,{mode:i.mode,version:i.version}),prompt:i.prompt}),T=i.status??"running",E=!Ir(T),A=E?i.endedAt??ct():void 0,C=E?i.exitCode??0:void 0,N={version:1,session_id:c,source:i.source,pid:i.pid,started_at:l,...A?{ended_at:A}:{},...C!==void 0?{exit_code:C}:{},status:T,interactive:i.interactive,provider:i.provider,model:i.model,cwd:i.cwd,workspace_root:i.workspaceRoot,team_name:i.teamName,enable_tools:i.enableTools,enable_spawn:i.enableSpawn,enable_teams:i.enableTeams,prompt:i.prompt?.trim()||void 0,metadata:k,messages_path:g},O={sessionId:c,source:i.source,pid:i.pid,startedAt:l,endedAt:A??null,exitCode:C??null,status:T,statusLock:0,interactive:i.interactive,provider:i.provider,model:i.model,cwd:i.cwd,workspaceRoot:i.workspaceRoot,teamName:i.teamName??null,enableTools:i.enableTools,enableSpawn:i.enableSpawn,enableTeams:i.enableTeams,parentSessionId:null,parentAgentId:null,agentId:null,conversationId:null,isSubagent:!1,prompt:N.prompt??null,metadata:Qs(N.metadata),hookPath:"",messagesPath:g,updatedAt:ct()};return await this.adapter.upsertSession(O),this.manifestStore.initializeMessagesFile(O,g,l),this.manifestStore.writeSessionManifest(I,N),{manifestPath:I,messagesPath:g,compactionPath:b,manifest:N}}async updateSessionStatus(i,l,u){let c;if((await VU(()=>this.adapter.getSession(i),async(g)=>(c=Ir(l)?void 0:ct(),this.adapter.updateSession({sessionId:i,status:l,endedAt:c??null,exitCode:Ir(l)?null:typeof u==="number"?u:null,expectedStatusLock:g.statusLock})),Pp)).updated){if(l==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions(i,"cancelled");return{updated:!0,endedAt:c}}return{updated:!1}}async updateSession(i){for(let l=0;l<Pp;l++){let u=await this.adapter.getSession(i.sessionId);if(!u)return{updated:!1};let c=u.metadata??void 0,g=i.metadata!==void 0?Qs(i.metadata)??{}:Qs(c)??{},b=Oo(typeof c?.title==="string"?c.title:void 0),I=i.title!==void 0?Oo(i.title):b??P0(i.prompt);if(I)g.title=I;else delete g.title;let k=i.metadata!==void 0||i.prompt!==void 0||i.title!==void 0;if(!(await this.adapter.updateSession({sessionId:i.sessionId,prompt:i.prompt,metadata:k?Object.keys(g).length>0?g:null:void 0,title:I,expectedStatusLock:u.statusLock})).updated)continue;let{path:T,manifest:E}=this.manifestStore.readManifestFile(i.sessionId);if(E){if(i.prompt!==void 0)E.prompt=i.prompt??void 0;let A=i.metadata!==void 0?Qs(i.metadata)??{}:Qs(E.metadata)??{};if(I)A.title=I;return E.metadata=Object.keys(A).length>0?JSON.parse(JSON.stringify(A)):void 0,this.manifestStore.writeSessionManifest(T,E),{updated:!0,metadata:E.metadata??null}}return{updated:!0}}return{updated:!1}}queueSpawnRequest(i){return this.teamChildren.queueSpawnRequest(i)}upsertSubagentSession(i){return this.teamChildren.upsertSubagentSession(i)}upsertSubagentSessionFromHook(i){return this.teamChildren.upsertSubagentSessionFromHook(i)}appendSubagentHookAudit(i,l){return this.teamChildren.appendSubagentHookAudit(l),Promise.resolve()}persistSessionMessages(i,l,u){let c=Lm(l);return this.manifestStore.persistSessionMessages(i,c,u)}async readSessionCompactionState(i){return await this.manifestStore.readSessionCompactionState(i)}async persistSessionCompactionState(i,l){await this.manifestStore.persistSessionCompactionState(i,l)}async deleteSessionCompactionState(i){await this.manifestStore.deleteSessionCompactionState(i)}applySubagentStatus(i,l){return this.teamChildren.applySubagentStatus(i,l)}applySubagentStatusBySessionId(i,l){return this.teamChildren.applySubagentStatusBySessionId(i,l)}applyStatusToRunningChildSessions(i,l){return this.teamChildren.applyStatusToRunningChildSessions(i,l)}onTeamTaskStart(i,l,u){return this.teamChildren.onTeamTaskStart(i,l,u)}onTeamTaskEnd(i,l,u,c,g,b){return this.teamChildren.onTeamTaskEnd(i,l,u,c,g,b)}onTeamTaskProgress(i,l,u,c){return this.teamChildren.onTeamTaskProgress(i,l,u,c)}handleSubAgentStart(i,l){return this.teamChildren.handleSubAgentStart(i,l)}handleSubAgentEnd(i,l){return this.teamChildren.handleSubAgentEnd(i,l)}isPidAlive(i){if(!Number.isFinite(i)||i<=0)return!1;try{return process.kill(Math.floor(i),0),!0}catch(l){return typeof l==="object"&&l!==null&&"code"in l&&l.code==="EPERM"}}async reconcileDeadRunningSession(i){if(Ir(i.status)===!1||this.isPidAlive(i.pid))return i;let l=ct(),u=uo.STALE_REASON;for(let c=0;c<Pp;c++){let g=await this.adapter.getSession(i.sessionId);if(!g)return;if(Ir(g.status)===!1)return g;let b={...g.metadata??{},terminal_marker:u,terminal_marker_at:l,terminal_marker_pid:g.pid,terminal_marker_source:uo.STALE_SOURCE},I=await this.adapter.updateSession({sessionId:g.sessionId,status:"failed",endedAt:l,exitCode:1,metadata:b,expectedStatusLock:g.statusLock});if(!I.updated)continue;await this.teamChildren.applyStatusToRunningChildSessions(g.sessionId,"failed");let k=JU(g,{status:"failed",endedAt:l,exitCode:1,metadata:b}),{path:T}=this.manifestStore.readManifestFile(g.sessionId);return this.manifestStore.writeSessionManifest(T,k),this.manifestStore.appendStaleSessionHookLog(l,g.sessionId,g.pid,u,uo.STALE_SOURCE),{...g,status:"failed",endedAt:l,exitCode:1,metadata:b,statusLock:I.statusLock,updatedAt:l}}return await this.adapter.getSession(i.sessionId)}async listSessions(i=200,l={}){let u=Math.max(1,Math.floor(i)),c=Math.min(u*5,2000);await this.reconcileDeadSessions(c);let g=(await this.adapter.listSessions({limit:c,rootOnly:l.rootOnly})).slice(0,u),b=await Promise.all(g.map((I)=>this.manifestStore.readSessionManifestTitle(I.sessionId)));return g.map((I,k)=>{let T=Qs(I.metadata??void 0),E=Oo(b[k]),A=E?{...T??{},title:E}:T;return{...I,metadata:A}})}async listSessionMetadata(i=Number.MAX_SAFE_INTEGER){return(await this.adapter.listSessions({limit:Math.max(1,Math.floor(i))})).map((l)=>({sessionId:l.sessionId,metadata:Qs(l.metadata??void 0)}))}async reconcileDeadSessions(i=2000){let l=Math.max(1,Math.floor(i)),u=(await Promise.all(["idle","running","pending"].map((g)=>this.adapter.listSessions({limit:l,status:g})))).flat(),c=0;for(let g of u){let b=await this.reconcileDeadRunningSession(g);if(b&&b.status!==g.status)c++}return c}async deleteSession(i){let l=i.trim();if(!l)throw Error("session id is required");let u=await this.adapter.getSession(l),c=u??this.manifestStore.readSessionRowFromManifest(l);if(!c)return{deleted:!1};if(await this.adapter.deleteSession(l,!1),!c.isSubagent){let g=await this.adapter.listSessions({limit:2000,parentSessionId:l});await this.adapter.deleteSession(l,!0),await Promise.allSettled(g.map(async(b)=>{await Xv(b.cwd,b.sessionId),Cd(b.messagesPath),await this.deleteSessionCompactionStateIfExists(b.sessionId),Cd(this.manifestStore.artifacts.sessionManifestPath(b.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(b.sessionId)}))}if(!u)return this.manifestStore.artifacts.removeSessionDir(l),{deleted:!0};if(await Xv(c.cwd,l),Cd(c.messagesPath),await this.deleteSessionCompactionStateIfExists(l),Cd(this.manifestStore.artifacts.sessionManifestPath(l,!1)),c.isSubagent)this.manifestStore.artifacts.removeSessionDirIfEmpty(l);else{let g=new Set([this.manifestStore.artifacts.sessionArtifactsDir(l)]);for(let b of[c.messagesPath])if(typeof b==="string"&&b.trim().length>0)g.add(tK(b));for(let b of g)this.manifestStore.artifacts.removeDir(b)}return{deleted:!0}}async deleteSessionCompactionStateIfExists(i){try{await this.manifestStore.deleteSessionCompactionState(i)}catch{}}}class l_{store;sessionsDirPath;constructor(i,l=Ve()){this.store=i,this.sessionsDirPath=l}ensureSessionsDir(){if(!ZW(this.sessionsDirPath))eK(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}async upsertSession(i){this.store.run(`INSERT OR REPLACE INTO sessions (
837
+ session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
838
+ provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
839
+ parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
840
+ metadata_json, transcript_path, hook_path, messages_path, updated_at
841
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[i.sessionId,i.source,i.pid,i.startedAt,i.endedAt??null,i.exitCode??null,i.status,i.statusLock,i.interactive?1:0,i.provider,i.model,i.cwd,i.workspaceRoot,i.teamName??null,i.enableTools?1:0,i.enableSpawn?1:0,i.enableTeams?1:0,i.parentSessionId??null,i.parentAgentId??null,i.agentId??null,i.conversationId??null,i.isSubagent?1:0,i.prompt??null,Rp(i.metadata),"",i.hookPath??"",i.messagesPath??null,i.updatedAt])}async getSession(i){let l=this.store.queryOne(`SELECT ${Bw} FROM sessions WHERE session_id = ?`,[i]);return l?Hw(l):void 0}async listSessions(i){let l=[],u=[];if(i.parentSessionId)l.push("parent_session_id = ?"),u.push(i.parentSessionId);if(i.rootOnly)l.push("is_subagent = 0 AND (parent_session_id IS NULL OR parent_session_id = '')");if(i.status)l.push("status = ?"),u.push(i.status);let c=l.length>0?`WHERE ${l.join(" AND ")}`:"";return this.store.queryAll(`SELECT ${Bw}
842
+ FROM sessions
843
+ ${c}
844
+ ORDER BY started_at DESC
845
+ LIMIT ?`,[...u,i.limit]).map(Hw)}async updateSession(i){if(i.setRunning){if(i.expectedStatusLock===void 0)return{updated:!1,statusLock:0};return{updated:(this.store.run(`UPDATE sessions
846
+ SET status = 'running', ended_at = NULL, exit_code = NULL, updated_at = ?, status_lock = ?,
847
+ parent_session_id = ?, parent_agent_id = ?, agent_id = ?, conversation_id = ?, is_subagent = 1,
848
+ prompt = COALESCE(prompt, ?), metadata_json = ?
849
+ WHERE session_id = ? AND status_lock = ?`,[ct(),i.expectedStatusLock+1,i.parentSessionId??null,i.parentAgentId??null,i.agentId??null,i.conversationId??null,i.prompt??null,Rp(i.metadata),i.sessionId,i.expectedStatusLock]).changes??0)>0,statusLock:i.expectedStatusLock+1}}let l=[],u=[];if(i.status!==void 0)l.push("status = ?"),u.push(i.status);if(i.endedAt!==void 0)l.push("ended_at = ?"),u.push(i.endedAt);if(i.exitCode!==void 0)l.push("exit_code = ?"),u.push(i.exitCode);if(i.prompt!==void 0)l.push("prompt = ?"),u.push(i.prompt??null);if(i.metadata!==void 0)l.push("metadata_json = ?"),u.push(Rp(i.metadata));if(i.parentSessionId!==void 0)l.push("parent_session_id = ?"),u.push(i.parentSessionId??null);if(i.parentAgentId!==void 0)l.push("parent_agent_id = ?"),u.push(i.parentAgentId??null);if(i.agentId!==void 0)l.push("agent_id = ?"),u.push(i.agentId??null);if(i.conversationId!==void 0)l.push("conversation_id = ?"),u.push(i.conversationId??null);if(l.length===0){let b=await this.getSession(i.sessionId);return{updated:!!b,statusLock:b?.statusLock??0}}let c=0;if(i.expectedStatusLock!==void 0)c=i.expectedStatusLock+1,l.push("status_lock = ?"),u.push(c);l.push("updated_at = ?"),u.push(ct());let g=`UPDATE sessions SET ${l.join(", ")} WHERE session_id = ?`;if(u.push(i.sessionId),i.expectedStatusLock!==void 0)g+=" AND status_lock = ?",u.push(i.expectedStatusLock);if((this.store.run(g,u).changes??0)===0)return{updated:!1,statusLock:0};if(i.expectedStatusLock===void 0)c=(await this.getSession(i.sessionId))?.statusLock??0;return{updated:!0,statusLock:c}}async deleteSession(i,l){let u=this.store.run("DELETE FROM sessions WHERE session_id = ?",[i]).changes??0;if(l)this.store.run("DELETE FROM sessions WHERE parent_session_id = ?",[i]);return u>0}async enqueueSpawnRequest(i){this.store.run(`INSERT INTO subagent_spawn_queue (root_session_id, parent_agent_id, task, system_prompt, created_at, consumed_at)
850
+ VALUES (?, ?, ?, ?, ?, NULL)`,[i.rootSessionId,i.parentAgentId,i.task??null,i.systemPrompt??null,ct()])}async claimSpawnRequest(i,l){let u=this.store.queryOne(`SELECT id, task FROM subagent_spawn_queue
851
+ WHERE root_session_id = ? AND parent_agent_id = ? AND consumed_at IS NULL
852
+ ORDER BY id ASC LIMIT 1`,[i,l]);if(!u||typeof u.id!=="number")return;return this.store.run("UPDATE subagent_spawn_queue SET consumed_at = ? WHERE id = ?",[ct(),u.id]),u.task??void 0}}class Jf extends uo{store;constructor(i,l={}){super(new l_(i,l.sessionArtifactsDir),l);this.store=i}createRootSession(i){this.store.run(`INSERT OR REPLACE INTO sessions (
853
+ session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
854
+ provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
855
+ parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
856
+ metadata_json, transcript_path, hook_path, messages_path, updated_at
857
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[i.sessionId,i.source,i.pid,i.startedAt,null,null,"running",0,i.interactive?1:0,i.provider,i.model,i.cwd,i.workspaceRoot,i.teamName??null,i.enableTools?1:0,i.enableSpawn?1:0,i.enableTeams?1:0,null,null,null,null,0,i.prompt??null,i.metadata?JSON.stringify(i.metadata):null,"","",i.messagesPath,ct()])}}function gK(i){return{text:i.text,usage:i.usage,inputTokens:i.usage.inputTokens,outputTokens:i.usage.outputTokens,iterations:i.iterations,finishReason:i.finishReason,toolCalls:i.toolCalls.map((l)=>({name:l.name,input:l.input,output:l.output,error:l.error,durationMs:l.durationMs}))}}function yK(i){return i.mode==="plan"?"plan":i.mode==="yolo"?"yolo":"act"}function j5(i={}){let l=async(c)=>c,u=new Gf({sessionService:new Jf(new Xf),capabilities:{toolExecutors:{submit:l}},fetch:i.fetch,connectorsRequest:i.connectorsRequest,telemetry:i.telemetry});return{async startSession(c,g){let b=(c.cwd?.trim()||c.workspaceRoot).trim(),I=await u.startSession({source:jr.CORE,mode:"automation",sessionMetadata:vn(g?.sessionMetadata,{mode:"automation",trigger:c.source}),interactive:!1,config:{providerId:K(c.provider),modelId:c.model,apiKey:c.apiKey?.trim()||void 0,cwd:b,workspaceRoot:c.workspaceRoot,systemPrompt:c.systemPrompt??"",mode:yK(c),maxIterations:c.maxIterations,enableTools:c.enableTools!==!1,enableSpawnAgent:c.enableSpawn!==!1,enableAgentTeams:c.enableTeams!==!1,disableMcpSettingsTools:c.disableMcpSettingsTools,agentPluginPaths:c.agentPluginPaths,missionLogIntervalSteps:c.missionStepInterval,missionLogIntervalMs:c.missionTimeIntervalMs},toolPolicies:c.toolPolicies??{"*":{autoApprove:c.autoApproveTools!==!1}},localRuntime:{configExtensions:c.configExtensions}});return{sessionId:I.sessionId,startResult:{sessionId:I.sessionId,manifestPath:I.manifestPath,messagesPath:I.messagesPath}}},async sendSession(c,g){let b=await u.runTurn({sessionId:c,prompt:g.prompt,userImages:g.attachments?.userImages,userFiles:g.attachments?.userFiles?.map((I)=>I.content)});if(!b)throw Error("local hub schedule runtime returned no turn result");return{result:gK(b)}},async abortSession(c){return await u.abort(c,Error("hub schedule abort")),{applied:!0}},async stopSession(c){return await u.stopSession(c),{applied:!0}}}}function vK(i){if(typeof i==="string")return i.trim()||void 0;if(!Array.isArray(i))return;return i.map((l)=>{if(l&&typeof l==="object"&&"type"in l&&l.type==="text"&&"text"in l&&typeof l.text==="string")return l.text.trim();return""}).filter(Boolean).join(`
858
+ `).trim()||void 0}var Jw=120,Mp="...";function wK(i){let l=i.trim();if(!l)return"";if(Buffer.byteLength(l,"utf8")<=Jw)return l;let u=Jw-Buffer.byteLength(Mp,"utf8");if(u<=0)return Mp;let c="";for(let g of l){if(Buffer.byteLength(c+g,"utf8")>u)break;c+=g}return`${c}${Mp}`}async function bK(i){let l=i?.sessionId?.trim()||"unknown",u=typeof i?.metadata?.messagesPath==="string"?i.metadata.messagesPath:void 0,c=[...await iu(u)].reverse().find((k)=>k.role==="assistant"),g=c?vK(c.content):void 0,b=i?.workspaceRoot?.trim()||"workspace",I=typeof i?.metadata?.prompt==="string"?i.metadata.prompt.trim():b;return{title:`Task completed (${l})`,body:wK(g&&g.length>0?g:I.length>0?I:b),severity:"info"}}function Vl(i){return!!i&&typeof i==="object"&&!Array.isArray(i)}function Op(i){let l=i?.trim();return l?l:void 0}function IK(i,l){let u=i?.trim();if(!u)return l;let c=Date.parse(u);if(!Number.isFinite(c))return l;return new Date(c).toISOString()}function Vw(i,l){return new Date(new Date(i).getTime()+Math.max(0,Math.floor(l))*1000).toISOString()}function Yw(i,l){return new Date(new Date(i).getTime()-Math.max(0,Math.floor(l))*1000).toISOString()}function kK(i,l){if(!i)return l;return new Date(i).getTime()>=new Date(l).getTime()?i:l}function SK(i,l){let u=i.eventId.trim(),c=i.eventType.trim(),g=i.source.trim(),b=Op(i.subject),I=Op(i.dedupeKey)??`${c}:${g}:${b??u}`;return{eventId:u,eventType:c,source:g,subject:b,occurredAt:IK(i.occurredAt,l),workspaceRoot:Op(i.workspaceRoot),payload:Vl(i.payload)?i.payload:void 0,attributes:Vl(i.attributes)?i.attributes:void 0,dedupeKey:I}}function $p(i,l){if(!l)return;let u=l.split("."),c=i;for(let g of u){if(!Vl(c))return;c=c[g]}return c}function TK(i,l){if(i.attributes&&Object.hasOwn(i.attributes,l))return i.attributes[l];if(i.payload&&Object.hasOwn(i.payload,l))return i.payload[l];let u={eventId:i.eventId,eventType:i.eventType,source:i.source,subject:i.subject,occurredAt:i.occurredAt,workspaceRoot:i.workspaceRoot,dedupeKey:i.dedupeKey,attributes:i.attributes,payload:i.payload},c=$p(u,l);if(c!==void 0)return c;if(i.attributes){let g=$p(i.attributes,l);if(g!==void 0)return g}if(i.payload)return $p(i.payload,l);return}function nu(i,l){if(Array.isArray(l))return l.some((u)=>nu(i,u));if(Array.isArray(i))return i.some((u)=>nu(u,l));if(Vl(l)){if(!Vl(i))return!1;return Object.entries(l).every(([u,c])=>nu(i[u],c))}return Object.is(i,l)}function _K(i,l){if(!l||Object.keys(l).length===0)return!0;return Object.entries(l).every(([u,c])=>nu(TK(i,u),c))}class d_{store;nowFn;logger;constructor(i){this.store=i.store,this.nowFn=i.now??(()=>Date.now()),this.logger=i.logger}ingestEvent(i){let l=new Date(this.nowFn()).toISOString(),u=SK(i,l);try{let c=this.store.eventTransaction(()=>this.materializeEvent(u,l));return this.logger?.debug(c.duplicate?"cron.event.duplicate":"cron.event.processed",{eventId:c.event.eventId,eventType:c.event.eventType,source:c.event.source,status:c.event.processingStatus,matchedSpecCount:c.event.matchedSpecCount,queuedRunCount:c.event.queuedRunCount}),c}catch(c){throw this.logger?.error?.("cron.event.failed",{eventId:u.eventId,eventType:u.eventType,error:c}),c}}materializeEvent(i,l){let u=this.store.insertEventLog(i,{receivedAtIso:l});if(!u.created)return{event:u.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:u.record.dedupeKey}]};let c=this.store.listEventSpecsForType(i.eventType),g=[],b=[],I=[];for(let T of c){if(!_K(i,T.filters)){g.push({specId:T.specId,externalId:T.externalId,reason:"filter_mismatch",dedupeKey:i.dedupeKey});continue}b.push(T);let E=this.materializeForSpec(T,i,u.record.receivedAt);if(E.run)I.push(E.run);else g.push({specId:T.specId,externalId:T.externalId,reason:E.reason,dedupeKey:i.dedupeKey})}let k=b.length===0?"unmatched":I.length>0?"queued":"suppressed";return this.store.updateEventLogProcessing(u.record.eventId,{status:k,matchedSpecCount:b.length,queuedRunCount:I.length,suppressedCount:g.filter((T)=>T.reason!=="filter_mismatch").length}),{event:this.store.getEventLog(u.record.eventId)??u.record,duplicate:!1,matchedSpecs:b,queuedRuns:I,suppressions:g}}materializeForSpec(i,l,u){let c=l.dedupeKey??l.eventId,g=i.debounceSeconds??0;if(g>0){let k=this.store.findQueuedEventRunForDedupe({specId:i.specId,dedupeKey:c});if(k){let T=kK(k.scheduledFor,Vw(u,g)),E=this.store.updateQueuedEventRunForDebounce({runId:k.runId,triggerEventId:l.eventId,scheduledFor:T});if(E)return{run:E,reason:"dedupe_window"}}}let b=i.dedupeWindowSeconds??0;if(b>0&&this.store.hasRecentEventRunForDedupe({specId:i.specId,dedupeKey:c,sinceIso:Yw(u,b)}))return{reason:"dedupe_window"};let I=i.cooldownSeconds??0;if(I>0&&this.store.hasRecentEventRunForSpec({specId:i.specId,sinceIso:Yw(u,I)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:i.specId,specRevision:i.revision,triggerKind:"event",triggerEventId:l.eventId,scheduledFor:g>0?Vw(u,g):u}),reason:"dedupe_window"}}}function MK(i){let l=i.replace(/\\/g,"/");if(l.startsWith("events/")&&l.endsWith(".event.md"))return"event";if(l.endsWith(".cron.md"))return"schedule";return"one_off"}function NK(i){let l=he(i).replace(/\r\n/g,`
859
+ `);if(!l.startsWith(`---
860
+ `))return{frontmatter:void 0,body:i};let u=l.slice(4),c=u.indexOf(`
861
+ ---`);if(c===-1)return{frontmatter:void 0,body:i};let g=u.slice(0,c),b=u.slice(c+4);if(b.startsWith(`
862
+ `))b=b.slice(1);return{frontmatter:g,body:b}}function qr(i){if(typeof i!=="string")return;let l=i.trim();return l.length>0?l:void 0}function OK(i){if(!Array.isArray(i))return;let l=i.map((u)=>typeof u==="string"?u.trim():"").filter((u)=>u.length>0);return l.length>0?l:void 0}function oh(i){if(!i||typeof i!=="object"||Array.isArray(i))return;return i}function $K(i){let l=oh(i);if(!l)return;let u=qr(l.providerId),c=qr(l.modelId);if(u===void 0&&c===void 0)return;return{providerId:u,modelId:c}}function LK(i){if(typeof i!=="string")return;let l=i.trim().toLowerCase();if(l==="act"||l==="plan"||l==="yolo")return l;return}function u_(i,l={}){let u=Array.isArray(i)?i:typeof i==="string"?i.split(","):void 0;if(!u)return;let c=[...new Set(u.map((g)=>typeof g==="string"?g.trim():"").filter((g)=>g.length>0))];if(Array.isArray(i)&&l.preserveEmptyArray)return c;return c.length>0?c:void 0}var DK=new Set(uA);function UK(i){let l=u_(i,{preserveEmptyArray:!0});if(!l)return;let u=l.filter((c)=>!DK.has(c));if(u.length>0)throw Error(`unknown tool(s): ${u.join(", ")}`);return l}var FK=new Set(["rules","skills","plugins"]);function qK(i){let l=u_(i,{preserveEmptyArray:!0});if(!l)return;let u=l.filter((c)=>!FK.has(c));if(u.length>0)throw Error(`unknown extension(s): ${u.join(", ")}`);return l}function Lp(i){if(typeof i!=="number"||!Number.isFinite(i)||i<=0)return;return Math.floor(i)}function Dp(i){if(typeof i!=="number"||!Number.isFinite(i)||i<0)return;return Math.floor(i)}function ah(i){if(i===null||typeof i!=="object")return JSON.stringify(i??null);if(Array.isArray(i))return`[${i.map((u)=>ah(u)).join(",")}]`;let l=Object.entries(i).filter(([,u])=>u!==void 0);return l.sort(([u],[c])=>u<c?-1:u>c?1:0),`{${l.map(([u,c])=>`${JSON.stringify(u)}:${ah(c)}`).join(",")}}`}function c_(i,l){let u=PK("sha256");return u.update(ah(i)),u.update(`
863
+ `),u.update(l),u.digest("hex")}function jK(i){return(i.split("/").pop()??i).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var BK=["schedule","timezone"],HK=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],zK=["cwd"];function Qw(i,l,u,c,g){return{externalId:i,relativePath:i,triggerKind:l,body:u,contentHash:c_(c,u),error:g}}function ps(i,l,u,c,g,b){return{externalId:i,relativePath:l,triggerKind:u,body:c,contentHash:g,error:b}}function WK(i){let l=i.relativePath.replace(/\\/g,"/"),u=MK(l),{frontmatter:c,body:g}=NK(i.raw),b={};if(c!==void 0&&c.trim().length>0)try{let j=X.parse(c);if(j&&typeof j==="object"&&!Array.isArray(j))b=j;else if(j!==null&&j!==void 0)return Qw(l,u,g,{},"frontmatter must be a YAML mapping")}catch(j){return Qw(l,u,g,{},j instanceof Error?`failed to parse frontmatter: ${j.message}`:"failed to parse frontmatter")}let I=c_(b,g),k=qr(b.id),T=k??l;if(u!=="schedule"){for(let j of BK)if(b[j]!==void 0)return ps(T,l,u,g,I,`field "${j}" is only allowed on *.cron.md specs`)}for(let j of zK)if(b[j]!==void 0)return ps(T,l,u,g,I,`field "${j}" is no longer supported; cron specs use workspaceRoot as cwd`);if(u!=="event"){for(let j of HK)if(b[j]!==void 0)return ps(T,l,u,g,I,`field "${j}" is only allowed on .event.md specs`)}let E=qr(b.prompt),A=g.trim(),C=E??(A.length>0?A:void 0);if(!C)return ps(T,l,u,g,I,"prompt is required (frontmatter `prompt` or markdown body)");let N=qr(b.workspaceRoot);if(!N)return ps(T,l,u,g,I,"workspaceRoot is required");let O,L;try{O=UK(b.tools),L=qK(b.extensions)}catch(j){return ps(T,l,u,g,I,j instanceof Error?j.message:String(j))}let D=LK(b.mode);if(b.mode!==void 0&&D===void 0)return ps(T,l,u,g,I,"mode must be one of: act, plan, yolo");let U={id:k,title:qr(b.title)??k??jK(l),prompt:C,workspaceRoot:N,mode:D??"yolo",systemPrompt:qr(b.systemPrompt),modelSelection:$K(b.modelSelection),maxIterations:Lp(b.maxIterations),timeoutSeconds:Lp(b.timeoutSeconds),tools:O,notesDirectory:qr(b.notesDirectory),extensions:L,source:qr(b.source)??"user",tags:OK(b.tags),enabled:typeof b.enabled==="boolean"?b.enabled:!0,metadata:oh(b.metadata)},F;if(u==="schedule"){let j=qr(b.schedule);if(!j)return ps(T,l,u,g,I,"schedule is required for *.cron.md specs");let H=qr(b.timezone);try{wC(j,H)}catch(Q){return ps(T,l,u,g,I,Q instanceof Error?Q.message:String(Q))}F={...U,triggerKind:"schedule",schedule:j,timezone:H}}else if(u==="event"){let j=qr(b.event);if(!j)return ps(T,l,u,g,I,"event is required for .event.md specs");F={...U,triggerKind:"event",event:j,filters:oh(b.filters),debounceSeconds:Dp(b.debounceSeconds),dedupeWindowSeconds:Dp(b.dedupeWindowSeconds),cooldownSeconds:Dp(b.cooldownSeconds),maxParallel:Lp(b.maxParallel)}}else F={...U,triggerKind:"one_off"};return{externalId:T,relativePath:l,triggerKind:u,body:g,contentHash:I,spec:F}}function KK(i,l){return RK(i,l).replace(/\\/g,"/")}function GK(i){if(!EK(i))return[];let l=[],u=[i];while(u.length>0){let c=u.pop();if(!c)continue;let g;try{g=AK(c,{withFileTypes:!0})}catch{continue}for(let b of g){let I=`${c}/${b.name}`;if(b.isDirectory()){if(b.name==="reports")continue;u.push(I);continue}if(!b.isFile())continue;if(!b.name.endsWith(".md"))continue;l.push(I)}}return l}class p_{store;cronDir;constructor(i){this.store=i.store,this.cronDir=Nt(i.specs??(i.workspaceRoot?{scope:"workspace",workspaceRoot:i.workspaceRoot}:void 0))}getCronDir(){return this.cronDir}async reconcileAll(){let i={scanned:0,upserted:0,invalidParses:0,removed:0,changes:[]},l=GK(this.cronDir),u=new Set;for(let g of l){let b=KK(this.cronDir,g);u.add(b),i.scanned+=1;let I=await this.reconcileFile(b,g);if(I){if(i.changes.push(I),i.upserted+=1,I.parse.error)i.invalidParses+=1}}let c=this.store.listSpecs({includeRemoved:!1,limit:1e4});for(let g of c){if(PC(g))continue;if(!u.has(g.sourcePath))this.handleFileDeleted(g),i.removed+=1}return this.refreshScheduleNextRunAt(),i}async reconcileFile(i,l){let u=this.store.getSpecBySourcePath(i),c,g;try{c=CK(l,"utf8"),g=xK(l).mtimeMs}catch{return}let b=WK({relativePath:i,raw:c}),I=this.store.upsertSpec({externalId:b.externalId,sourcePath:i,triggerKind:b.triggerKind,sourceMtimeMs:g,sourceHash:b.contentHash,parseStatus:b.error?"invalid":"valid",parseError:b.error,spec:b.spec});if(!b.error&&b.triggerKind==="schedule"&&I.record.enabled)this.applyScheduleNextRunAt(I.record,{forceReset:!u||u.removed||!u.enabled||u.scheduleExpr!==I.record.scheduleExpr||u.timezone!==I.record.timezone});return{relativePath:i,result:I,parse:b}}handleFileDeleted(i){this.store.markSpecRemoved(i.specId),this.store.cancelQueuedRunsForSpec(i.specId)}refreshScheduleNextRunAt(){let i=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let l of i)this.applyScheduleNextRunAt(l,{forceReset:!1})}applyScheduleNextRunAt(i,l){if(!i.scheduleExpr)return;if(!l.forceReset&&i.nextRunAt)return;try{let u=Date.now(),c=i.lastRunAt?Math.max(u,new Date(i.lastRunAt).getTime()):u,g=Cl(i.scheduleExpr,c,i.timezone),b=new Date(g).toISOString();if(i.nextRunAt!==b)this.store.updateSpecNextRunAt(i.specId,b)}catch{}}}var eG=250;class m_{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor(i){this.reconciler=i.reconciler,this.debounceMs=Math.max(0,i.debounceMs??eG),this.onError=i.onError??(()=>{}),this.onReconciled=i.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let i=this.reconciler.getCronDir();try{JK(i,{recursive:!0});let l=VK.native(i);this.watcher=YK(l,{recursive:!0},(u,c)=>{if(!c)return;let g=String(c).replace(/\\/g,"/");if(!g.endsWith(".md"))return;if(g.startsWith("reports/"))return;this.scheduleReconcile(g)}),this.watcher.on("error",this.onError)}catch(l){this.onError(l)}}stop(){for(let i of this.pending.values())clearTimeout(i);this.pending.clear(),this.watcher?.close(),this.watcher=void 0}dispose(){this.disposed=!0,this.stop()}scheduleReconcile(i){let l=this.pending.get(i);if(l)clearTimeout(l);let u=setTimeout(()=>{this.pending.delete(i),this.reconcileNow(i)},this.debounceMs);this.pending.set(i,u)}async reconcileNow(i){try{let l=ZK(this.reconciler.getCronDir(),i);if(!XK(l)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let u=QK(this.reconciler.getCronDir(),l).replace(/\\/g,"/");await this.reconciler.reconcileFile(u,l),await this.onReconciled()}catch(l){this.onError(l)}}}class h_{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor(i){this.store=new Oh({dbPath:i.dbPath});let l=i.specs;this.reconciler=new p_({store:this.store,specs:l}),this.materializer=new Th({store:this.store}),this.eventIngress=new d_({store:this.store,logger:i.logger}),this.runner=new Mh({store:this.store,materializer:this.materializer,runtimeHandlers:i.runtimeHandlers,workspaceRoot:i.workspaceRoot,specs:l,logger:i.logger,telemetry:i.telemetry,pollIntervalMs:i.pollIntervalMs,claimLeaseSeconds:i.claimLeaseSeconds,globalMaxConcurrency:i.globalMaxConcurrency}),this.watcher=new m_({reconciler:this.reconciler,debounceMs:i.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(u)=>{let c=i.logger;if(c)if(c.error)c.error("cron.watcher.failed",{error:u});else c.log("cron.watcher.failed",{error:u})}})}async start(){if(this.disposed)throw Error("CronService disposed");if(this.started)return;this.started=!0,await this.reconciler.reconcileAll(),this.materializer.materializeAll(),this.watcher.start(),await this.runner.start()}async stop(){this.watcher.stop(),await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,this.watcher.dispose(),await this.runner.dispose(),this.store.close()}listSpecs(i){return this.store.listSpecs(i)}getSpec(i){return this.store.getSpec(i)}listRuns(i){return this.store.listRuns(i)}getRun(i){return this.store.getRun(i)}listActiveRuns(){return this.store.listRuns({status:"running",limit:200})}listUpcomingRuns(i=20){return this.store.listRuns({status:"queued",limit:i})}async reconcileNow(){await this.reconciler.reconcileAll(),this.materializer.materializeAll()}ingestEvent(i){return this.eventIngress.ingestEvent(i)}listEventLogs(i){return this.store.listEventLogs(i)}getEventLog(i){return this.store.getEventLog(i)}}var Zw=2,sG=300000,eb=131072,iG=1e5,nG=2000,oG="bm25(0, 0, 0, 0, 0, 0.5, 8.0, 1.0)";function Vf(i){return i!==null&&typeof i==="object"&&!Array.isArray(i)?i:void 0}function lh(i,l){if(l.length>=eb)return;if(typeof i==="string"){let c=l.parts.length>0?1:0,g=eb-l.length-c;if(g<=0)return;let b=i.slice(0,g);if(!b)return;l.parts.push(b),l.length+=c+b.length;return}if(Array.isArray(i)){for(let c of i)lh(c,l);return}let u=Vf(i);if(!u)return;for(let[c,g]of Object.entries(u)){if(c==="data"||c==="image"||c==="images"||c==="reasoning"||c==="thinking"||c==="metadata")continue;lh(g,l)}}function aG(i){let l=Vf(i),u={length:0,parts:[]};return lh(l?.content??i,u),u.parts.join(`
864
+ `).trim()}function lG(i){let l=Vf(i)?.role;return typeof l==="string"?l:"unknown"}function dG(i){let l=i.metadata?.title,u=typeof l==="string"&&l.trim()?l:i.prompt||i.sessionId;return Wn(u)||i.sessionId}function uG(i){return i.trim().split(/\s+/u).filter(Boolean).map((l)=>`"${l.replaceAll('"','""')}"*`).join(" AND ")}function cG(i){if(i.exec("PRAGMA journal_mode = WAL;"),i.exec("PRAGMA busy_timeout = 5000;"),i.exec(`CREATE TABLE IF NOT EXISTS indexed_sessions (
865
+ session_id TEXT PRIMARY KEY,
866
+ source_revision TEXT NOT NULL,
867
+ indexed_at TEXT NOT NULL,
868
+ document_count INTEGER NOT NULL,
869
+ index_version INTEGER NOT NULL,
870
+ title TEXT NOT NULL DEFAULT ''
871
+ );`),!new Set(i.prepare("PRAGMA table_info(indexed_sessions)").all().map((l)=>l.name)).has("title"))i.exec("ALTER TABLE indexed_sessions ADD COLUMN title TEXT NOT NULL DEFAULT '';");i.exec(`CREATE VIRTUAL TABLE IF NOT EXISTS session_search USING fts5(
872
+ session_id UNINDEXED,
873
+ document_id UNINDEXED,
874
+ ordinal UNINDEXED,
875
+ role UNINDEXED,
876
+ started_at UNINDEXED,
877
+ workspace_root,
878
+ title,
879
+ content,
880
+ tokenize='unicode61 remove_diacritics 2 tokenchars ''_-@'''
881
+ );`)}function pG(i){let l;try{return l=V(i),cG(l),{db:l}}catch(u){try{l?.close?.()}catch{}return{error:u??Error("Session search database initialization failed")}}}class f_{host;db;initializationError;intervalMs;removedDuringRefresh=new Set;failedEvictionSessionIds=new Set;timer;refreshPromise;readyPromise=Promise.resolve();constructor(i,l={}){this.host=i;let u=pG(l.dbPath??rG(xe(),"session-search.db"));this.db=u.db,this.initializationError=u.error,this.intervalMs=l.reconcileIntervalMs??sG}start(){if(!this.db)return;this.readyPromise=this.refreshNow(),this.readyPromise.catch((i)=>console.warn("[hub] session search indexing failed",i)),this.timer=setInterval(()=>{this.refreshNow().catch((i)=>console.warn("[hub] session search reconciliation failed",i))},this.intervalMs),this.timer.unref?.()}async dispose(){if(this.timer)clearInterval(this.timer);this.timer=void 0,await this.refreshPromise?.catch(()=>{return}),this.db?.close?.()}refreshNow(){let i=this.db;if(!i)return Promise.resolve();if(!this.refreshPromise)this.refreshPromise=this.reconcile(i).finally(()=>{this.removedDuringRefresh.clear(),this.refreshPromise=void 0});return this.refreshPromise}removeSession(i){let l=this.db;if(!l)return;let u=i.trim();if(!u)return;if(this.refreshPromise)this.removedDuringRefresh.add(u);try{this.deleteIndexedSession(l,u),this.failedEvictionSessionIds.delete(u)}catch(c){throw this.failedEvictionSessionIds.add(u),c}}async waitUntilReady(){await this.readyPromise}isAvailable(){return this.db!==void 0}getInitializationError(){return this.initializationError}search(i){let l=this.db;if(!l)return[];let u=uG(i.query);if(!u)return[];let c=Math.min(Math.max(Math.trunc(i.limit??50),1),200),g=Math.min(Math.max(c*20,200),nG),b=i.workspaceRoot?.trim(),I=l.prepare(`WITH matches AS MATERIALIZED (
882
+ SELECT session_search.session_id, document_id, ordinal, role, started_at,
883
+ workspace_root, indexed_sessions.title,
884
+ snippet(session_search, 7, '[', ']', '…', 24) AS snippet,
885
+ session_search.rank AS score
886
+ FROM session_search
887
+ JOIN indexed_sessions
888
+ ON indexed_sessions.session_id = session_search.session_id
889
+ WHERE session_search MATCH ?
890
+ AND session_search.rank MATCH ?
891
+ AND (? IS NULL OR workspace_root = ?)
892
+ ORDER BY score, started_at DESC
893
+ LIMIT ?
894
+ ), ranked AS (
895
+ SELECT *, ROW_NUMBER() OVER (
896
+ PARTITION BY session_id ORDER BY score, ordinal
897
+ ) AS session_rank
898
+ FROM matches
899
+ )
900
+ SELECT session_id, document_id, ordinal, role, started_at,
901
+ workspace_root, title, snippet, score
902
+ FROM ranked
903
+ WHERE session_rank = 1
904
+ ORDER BY score, started_at DESC
905
+ LIMIT ?`).all(u,oG,b??null,b??null,g,c);return(this.removedDuringRefresh.size===0&&this.failedEvictionSessionIds.size===0?I:I.filter((k)=>!this.isSessionSuppressed(String(k.session_id)))).map((k)=>{let T=String(k.role);return{sessionId:String(k.session_id),documentId:String(k.document_id),ordinal:Number(k.ordinal),role:T,startedAt:String(k.started_at),workspaceRoot:String(k.workspace_root),title:Wn(String(k.title)),snippet:lr(T,String(k.snippet??"")),score:Number(k.score)}})}isSessionSuppressed(i){return this.removedDuringRefresh.has(i)||this.failedEvictionSessionIds.has(i)}async reconcile(i){let l=await this.host.listSessions(iG),u=new Set(l.map((I)=>I.sessionId)),c=i.prepare("SELECT session_id, source_revision, index_version FROM indexed_sessions").all(),g=new Map(c.map((I)=>[String(I.session_id),I]));for(let I of l){if(this.isSessionSuppressed(I.sessionId))continue;let k=await this.sourceRevision(I);if(this.isSessionSuppressed(I.sessionId))continue;let T=g.get(I.sessionId);if(T?.source_revision===k&&Number(T.index_version)===Zw)continue;await this.indexSession(i,I,k)}for(let I of c){let k=String(I.session_id);if(!u.has(k)||this.isSessionSuppressed(k))this.deleteIndexedSession(i,k),this.failedEvictionSessionIds.delete(k)}let b=i.prepare("SELECT 1 FROM indexed_sessions WHERE session_id = ? LIMIT 1");for(let I of this.failedEvictionSessionIds)if(!b.get(I))this.failedEvictionSessionIds.delete(I)}async sourceRevision(i){if(!i.messagesPath)return`${i.updatedAt}:missing`;let l=await tG(i.messagesPath).catch(()=>{return});return`${i.updatedAt}:${l?.size??0}:${l?.mtimeMs??0}`}async indexSession(i,l,u){let c=await this.host.readSessionMessages(l.sessionId).catch(()=>[]);if(this.removedDuringRefresh.has(l.sessionId))return;let g=dG(l),b=i.prepare(`INSERT INTO session_search (
906
+ session_id, document_id, ordinal, role, started_at,
907
+ workspace_root, title, content
908
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`);i.exec("BEGIN IMMEDIATE;");try{i.prepare("DELETE FROM session_search WHERE session_id = ?").run(l.sessionId),b.run(l.sessionId,`${l.sessionId}:metadata`,-1,"session",l.startedAt,l.workspaceRoot,g,l.prompt?.trim()??"");let I=1;for(let[k,T]of c.entries()){let E=aG(T);if(!E)continue;b.run(l.sessionId,`${l.sessionId}:${k}`,k,lG(T),l.startedAt,l.workspaceRoot,"",E),I+=1}i.prepare(`INSERT INTO indexed_sessions (
909
+ session_id, source_revision, indexed_at, document_count, index_version, title
910
+ ) VALUES (?, ?, ?, ?, ?, ?)
911
+ ON CONFLICT(session_id) DO UPDATE SET
912
+ source_revision = excluded.source_revision,
913
+ indexed_at = excluded.indexed_at,
914
+ document_count = excluded.document_count,
915
+ index_version = excluded.index_version,
916
+ title = excluded.title`).run(l.sessionId,u,x(),I,Zw,g),i.exec("COMMIT;")}catch(I){throw i.exec("ROLLBACK;"),I}}deleteIndexedSession(i,l){i.exec("BEGIN IMMEDIATE;");try{i.prepare("DELETE FROM session_search WHERE session_id = ?").run(l),i.prepare("DELETE FROM indexed_sessions WHERE session_id = ?").run(l),i.exec("COMMIT;")}catch(u){throw i.exec("ROLLBACK;"),u}}}function yG(i){let l=he(i),u=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,c=l.match(u);if(!c)return{data:{},body:l,hadFrontmatter:!1};let[,g,b]=c,I=X.parse(g);return{data:I&&typeof I==="object"&&!Array.isArray(I)?I:{},body:b,hadFrontmatter:!0}}function tb(i,l){return`---
917
+ ${X.stringify(i).trimEnd()}
918
+ ---
919
+ ${l}`}function vG(i,l){let{data:u,body:c,hadFrontmatter:g}=yG(i);if(!g&&l)return i;if(l){if(delete u.disabled,u.enabled===!1)delete u.enabled;if(Object.keys(u).length===0)return c;return tb(u,c)}return u.disabled=!0,tb(u,c)}async function wG({filePath:i,enabled:l}){let u=await fG(i,"utf8"),c=vG(u,l);return await gG(i,c),{filePath:i,enabled:l,disabled:!l}}function v_(i){return{api:{registerTool:(l)=>i.tools.push(l),registerCommand:(l)=>i.commands.push(l),registerMessageBuilder:()=>{},registerRule:(l)=>i.rules.push(l),registerProvider:(l)=>i.providers.push(l),registerAutomationEventType:()=>{},registerMcpServer:(l)=>i.mcpServers.push(l)}}}function w_(i,l){return{pluginName:i.name,pluginPath:l,extension:i,tools:[],rules:[],commands:[],mcpServers:[],providers:[]}}async function kG(i){if(Lf(i.mode)==="sandbox")return SG(i);let l=i.registry??uc(),u=i.workspacePath?{rootPath:i.workspacePath}:void 0,c=new Map,g=await l.loadForSession({pluginPaths:i.pluginPaths,disabledPluginPaths:i.disabledPluginPaths,discoveryFailures:i.discoveryFailures,providerId:i.providerId,modelId:i.modelId,cwd:i.cwd,setupContext:{workspaceInfo:u},onIssue:(T)=>{if(T.lastError?.phase==="setup")c.set(T.pluginPath,T)}}),b=[],I=[...g.failures],k=g.issues.flatMap((T)=>T.state==="failed"?l.get(T.pluginPath):[]);try{for(let T of g.extensions){let E=T.__clinePluginPath;if(!E)continue;let A=w_(T,E);try{await T.setup?.(v_(A).api,{workspaceInfo:u})}catch{}let C=c.get(E);if(C){k.push({...l.get(E)[0]??{name:C.name,pluginPath:E,errorCount:1,timeoutCount:0,sessionIds:[],updatedAt:Date.now()},state:"failed",...C.lastError?{lastError:C.lastError}:{}}),I.push({pluginPath:E,pluginName:T.name,phase:"setup",message:C.lastError?.message??"Plugin setup failed",stack:C.lastError?.stack});continue}b.push(A)}}finally{await g.release()}return{plugins:b,failed:k,failures:I,warnings:g.warnings}}async function SG(i){if(i.pluginPaths.length===0)return{plugins:[],failed:[],failures:[],warnings:[]};let l=i.workspacePath?{rootPath:i.workspacePath}:void 0,u=await ff({pluginPaths:[...i.pluginPaths],transport:"subprocess",cwd:i.cwd,providerId:i.providerId,modelId:i.modelId,workspaceInfo:l}),c=[...u.failures],g=[];try{for(let I of u.extensions??[]){let k=I.__clinePluginPath;if(!k)continue;let T=w_(I,k);try{await I.setup?.(v_(T).api,{workspaceInfo:l})}catch(E){c.push({pluginPath:k,pluginName:I.name,phase:"setup",message:E instanceof Error?E.message:String(E),stack:E instanceof Error?E.stack:void 0});continue}g.push(T)}}finally{await u.shutdown().catch(()=>{})}let b=c.map((I)=>({name:I.pluginName??_$(I.pluginPath),pluginPath:I.pluginPath,state:"failed",lastError:{phase:I.phase==="setup"?"setup":"import",message:I.message,...I.stack?{stack:I.stack}:{},pluginPath:I.pluginPath,timestamp:Date.now()},errorCount:1,timeoutCount:0,sessionIds:[],updatedAt:Date.now()}));return{plugins:g,failed:b,failures:c,warnings:u.warnings}}function TG(i,l){let u=IG(rb(i),rb(l));return u===""||!u.startsWith("..")&&!bG(u)}var _G=32,no=new Map;function EG(i,l){if(!no.has(i)&&no.size>=_G){let u=no.keys().next().value;if(u)no.delete(u)}no.set(i,l)}async function AG(i){let l=i.pluginPaths.map((g)=>`${g}:${mf(g)}`),u=uc(),c=i.pluginPaths.map((g)=>{let b=u.get(g)[0];return b?`${b.state}:${b.updatedAt}`:"unknown"});return JSON.stringify({workspacePath:i.workspacePath,cwd:i.cwd,providerId:i.providerId,modelId:i.modelId,mode:Lf(),pathStats:l,statuses:c})}function sb(i,l){return i.map((u)=>({...u,enabled:!l.has(u.name)}))}function CG(i){return i.sort((l,u)=>{let c=l.name.localeCompare(u.name);if(c!==0)return c;return l.path.localeCompare(u.path)})}async function xG(i){let l=cT({workspacePath:i.workspacePath,cwd:i.cwd}),u=l.paths,c=id(i.disabledToolNames);if(u.length===0&&l.discoveryFailures.length===0)return{tools:[],plugins:[],failures:[],warnings:[]};let g=await AG({pluginPaths:u,workspacePath:i.workspacePath,cwd:i.cwd,providerId:i.providerId,modelId:i.modelId}),b=no.get(g);if(b)return{tools:sb(b.tools,c),plugins:b.plugins,failures:b.failures,warnings:b.warnings};let I=[],k=[],T=await kG({pluginPaths:u,discoveryFailures:l.discoveryFailures,cwd:i.cwd,workspacePath:i.workspacePath,providerId:i.providerId,modelId:i.modelId});for(let C of T.plugins){let{extension:N,pluginPath:O}=C,L=TG(i.workspacePath,O)?"workspace-plugin":"global-plugin";for(let D of C.tools)I.push({name:D.name,pluginName:N.name,path:O,source:L,description:D.description?.trim()||void 0});k.push({pluginName:N.name,path:O,capabilities:[...N.manifest.capabilities].sort(),tools:C.tools.map((D)=>D.name).sort(),rules:C.rules.map((D)=>D.id).sort(),hooks:Object.keys(N.hooks??{}).sort(),commands:C.commands.map((D)=>D.name).sort(),mcpServers:C.mcpServers.map((D)=>D.name).sort(),providers:C.providers.map((D)=>D.name).sort(),state:"ready"})}for(let C of T.failed)k.push({pluginName:C.name,path:C.pluginPath,capabilities:C.capabilities??[],tools:[],rules:[],hooks:[],commands:[],mcpServers:[],providers:[],state:C.state,...C.lastError?{lastError:C.lastError}:{}});let E=CG(I),A={tools:E,plugins:k,failures:T.failures,warnings:T.warnings};if(T.failures.length===0)EG(g,A);return{tools:sb(E,c),plugins:k,failures:T.failures,warnings:T.warnings}}function Eo(i,l){if(!l)return"global";let u=y_(l,i);return!u.startsWith("..")&&!g_(u)?"workspace":"global"}function b_(i,l){return Eo(i,l)==="workspace"?"workspace-plugin":"global-plugin"}function I_(i,l){let u=y_(ch(i),ch(l));return u===""||!u.startsWith("..")&&!g_(u)}function RG(i){try{let l=JSON.parse(hG(i,"utf8"));return typeof l.name==="string"&&l.name.trim()?l.name.trim():void 0}catch{return}}function k_(i,l){let u=dh(i),c=l?ch(l):void 0;while(!c||u!==c&&I_(c,u)){let g=Yf(u,"package.json");if(co(g)){let I=RG(g);if(I)return I;break}let b=dh(u);if(b===u)break;u=b}return Ho(i,uh(i))}function PG(i){let l=new Set(as().disabledPlugins??[]),u=new Map;for(let c of aT(i.workspaceRoot||void 0)){if(!co(c))continue;try{for(let g of lT(c)){if(u.has(g))continue;u.set(g,{id:g,name:k_(g,c),path:g,enabled:!l.has(g),kind:"plugin",source:i.workspaceRoot?b_(g,i.workspaceRoot):"global-plugin",toggleable:!0})}}catch{}}return Oi([...u.values()])}function MG(i){let l=[];for(let u of $f({workspacePath:i.workspaceRoot||void 0,cwd:i.cwd,includeDisabled:!0}))for(let c of wc([u]))l.push({directory:c,pluginName:k_(u),pluginPath:u,source:i.workspaceRoot?b_(u,i.workspaceRoot):"global-plugin"});return l.sort((u,c)=>c.directory.length-u.directory.length)}function NG(i){let l=new Set,u=(c)=>{for(let g of mG(c,{withFileTypes:!0})){let b=Yf(c,g.name);if(g.isDirectory())u(b);else if(g.isFile()&&uh(g.name).toLowerCase()===".md"){let I=Ho(g.name,uh(g.name));l.add(I.toLowerCase()==="skill"?Ho(dh(b)):I)}}};for(let c of wc([i]))try{u(c)}catch{}return[...l].sort()}function OG(i,l){return l.find((u)=>I_(u.directory,i))}function Oi(i){return[...i].sort((l,u)=>{let c=(g)=>{switch(g){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(l.source!==u.source)return c(l.source)-c(u.source);return l.name.localeCompare(u.name)})}function ib(i,l){return l&&Eo(i,l)==="workspace"?"workspace-plugin":"global-plugin"}function nb(i,l){let u=i.diagnostics.filter((c)=>c.pluginPath===l).map((c)=>c.message);return u.length>0?u.join(`
920
+ `):void 0}function $G(i){let l=new Set;for(let c of i.report.plugins){l.add(c.rootPath);let g=!i.disabledPluginNames.has(c.manifest.name),b=ib(c.rootPath,i.workspaceRoot),I=c.skills.map((E)=>E.metadata.name).sort(),k=c.mcpServers.map((E)=>E.registration.name).sort(),T=[`${I.length} skill${I.length===1?"":"s"}`,`${k.length} MCP server${k.length===1?"":"s"}`].join(", ");if(i.plugins.push({id:`agent-plugin:${c.manifest.name}`,name:c.manifest.name,path:c.rootPath,enabled:g,kind:"plugin",source:b,toggleable:!0,agentPlugin:!0,pluginName:c.manifest.name,pluginPath:c.rootPath,description:[c.manifest.description,`Portable Agent Plugin${c.manifest.version?` v${c.manifest.version}`:""} (${T})`].filter(Boolean).join(`
921
+ `),loadError:nb(i.report,c.rootPath),contributions:{inspectionStatus:g?"available":"disabled",capabilities:[...I.length>0?["skills"]:[],...k.length>0?["mcp"]:[]],tools:[],skills:I,rules:[],hooks:[],commands:[],mcpServers:k,providers:[]}}),!g)continue;for(let E of c.skills)i.skills.push({id:`${c.manifest.name}:${E.metadata.name}`,name:E.metadata.name,path:E.filePath,enabled:!0,kind:"skill",source:b,description:E.metadata.description,toggleable:!1,agentPlugin:!0,pluginName:c.manifest.name,pluginPath:c.rootPath});for(let E of c.mcpServers)i.mcp.push({id:E.registration.name,name:E.registration.name,path:Yf(c.rootPath,"mcp.json"),enabled:!0,kind:"mcp",source:b,description:`${E.registration.transport.type}, portable Agent Plugin`,toggleable:!1,agentPlugin:!0,pluginName:c.manifest.name,pluginPath:c.rootPath})}let u=new Set(i.report.diagnostics.filter((c)=>!l.has(c.pluginPath)&&(c.scope==="plugin"||c.scope==="manifest")).map((c)=>c.pluginPath));for(let c of u)i.plugins.push({id:`agent-plugin:invalid:${c}`,name:Ho(c)||c,path:c,enabled:!1,kind:"plugin",source:ib(c,i.workspaceRoot),toggleable:!1,agentPlugin:!0,pluginPath:c,description:"Invalid portable Agent Plugin package.",loadError:nb(i.report,c),contributions:{inspectionStatus:"failed",capabilities:[],tools:[],skills:[],rules:[],hooks:[],commands:[],mcpServers:[],providers:[]}})}function S_(i){return i.workspaceRoot?.trim()||i.cwd?.trim()||""}function ph(i,l){return i.cwd?.trim()||l||process.cwd()}async function ob(i,l){if(i.userInstructionService)return await l(i.userInstructionService);let u=S_(i),c=ph(i,u),g=rh({skills:{workspacePath:u||void 0,includePluginSkills:!0,cwd:c},rules:{workspacePath:u||void 0},workflows:{workspacePath:u||void 0}});try{return await g.start(),await l(g)}finally{g.stop()}}function LG(i,l){if(!i)return;let u=i.listRecords("skill");if(l.id){let c=u.find((g)=>g.id===l.id);if(c)return c}for(let c of u)if(c.filePath===l.path||c.item.name===l.name||c.id===l.name)return c;return}class T_{pluginSource;constructor(i={}){this.pluginSource=i.pluginSource}async list(i={}){return await ob(i,async(l)=>{let u=S_(i),c=MG({workspaceRoot:u,cwd:ph(i,u)}),g=[],b=[],I=[],k=this.pluginSource?[]:PG({workspaceRoot:u}),T=[],E=[];if(this.pluginSource){let N=await this.pluginSource.list(i);k.push(...N.plugins),T.push(...N.tools)}try{let N=await j0({pluginPaths:i.agentPluginPaths,cwd:ph(i,u)});$G({report:N,workspaceRoot:u,disabledPluginNames:Dh(),plugins:k,skills:I,mcp:E})}catch(N){let O=N instanceof Error?N.message:String(N);console.warn(`[agent-plugins] Package discovery failed; listing settings without Agent Plugins: ${O}`)}let A=new Set(k.filter((N)=>N.enabled!==!1).map((N)=>N.path));if(l){for(let N of l.listRecords("workflow")){let O=N.item;g.push({id:N.id,name:O.name,path:N.filePath,enabled:O.disabled!==!0,kind:"workflow",source:Eo(N.filePath,u),description:O.instructions,toggleable:!1})}for(let N of l.listRecords("rule")){let O=N.item;b.push({id:N.id,name:O.name,path:N.filePath,enabled:O.disabled!==!0,kind:"rule",source:Eo(N.filePath,u),description:O.instructions,toggleable:!1})}for(let N of l.listRecords("skill")){let O=N.item,L=OG(N.filePath,c);I.push({id:N.id,name:O.name,path:N.filePath,enabled:O.disabled!==!0,kind:"skill",source:L?.source??Eo(N.filePath,u),description:O.description,pluginName:L?.pluginName,pluginPath:L?.pluginPath,toggleable:!0})}}if(u&&!this.pluginSource&&i.includePluginTools!==!1)try{let N=await xG({workspacePath:u,cwd:i.cwd,providerId:i.availabilityContext?.providerId,modelId:i.availabilityContext?.modelId});for(let L of N.tools)T.push({id:`${L.pluginName}:${L.name}:${L.path}`,name:L.name,path:L.path,enabled:L.enabled&&A.has(L.path),kind:"tool",source:L.source,description:L.description,toggleable:!0,pluginName:L.pluginName,pluginPath:L.path});let O=new Map(N.plugins.map((L)=>[L.path,L]));for(let L of k){if(L.agentPlugin===!0)continue;let D=O.get(L.path),U=!D||D.state==="failed";if(L.enabled!==!1&&D?.lastError)L.loadError??=`Failed during ${D.lastError.phase}: ${D.lastError.message}`;L.contributions={inspectionStatus:L.enabled===!1?"disabled":U?"failed":"available",capabilities:D?.capabilities??[],tools:D?.tools??[],skills:[...new Set([...NG(L.path),...I.filter((F)=>F.pluginPath===L.path).map((F)=>F.name)])].sort(),rules:D?.rules??[],hooks:D?.hooks??[],commands:D?.commands??[],mcpServers:D?.mcpServers??[],providers:D?.providers??[]}}}catch{}let C=nn();if(gI({filePath:C}))try{for(let N of dm({filePath:C}))E.push({id:N.name,name:N.name,path:C,enabled:N.disabled!==!0,kind:"mcp",source:Eo(C,u),description:N.transport.type,toggleable:!0})}catch{}return{workflows:Oi(g.filter((N)=>co(N.path))),rules:Oi(b.filter((N)=>co(N.path))),plugins:k,skills:Oi(I.filter((N)=>co(N.path))),tools:Oi(T),mcp:Oi(E.filter((N)=>co(N.path)))}})}async toggle(i){if(i.type==="skills")return await ob(i,async(l)=>{let u=LG(l,i);if(u?.item.source?.type==="agent-plugin")throw Error(`Skill '${u.item.name}' is contributed by the Agent Plugin '${u.item.source.pluginName}' and cannot be toggled individually; toggle the plugin instead.`);let c=u?.filePath;if(!c)throw Error(`Unable to resolve skill setting '${i.id??i.name??Ho(i.path??"")}'.`);let g=u?.item&&"disabled"in u.item?u.item.disabled!==!0:void 0,b=i.enabled??(g!==void 0?!g:void 0);if(b===void 0)throw Error(`Cannot determine toggle state for skill '${i.id??i.name??Ho(i.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await wG({filePath:c,enabled:b}),await l?.refreshType("skill"),{snapshot:await this.list({...i,userInstructionService:l}),changedTypes:["skills"]}});if(i.type==="tools"){if(!i.name?.trim())throw Error("Tool settings toggle requires a tool name.");if(i.enabled===void 0)nx(i.name);else ax(i.name,!i.enabled);return{snapshot:await this.list(i),changedTypes:["tools"]}}if(i.type==="plugins"){let l=await this.list(i),u=i.id?.trim(),c=i.path?.trim(),g=i.name?.trim(),b=l.plugins.find((T)=>u&&T.id===u||c&&T.path===c||g&&T.name===g);if(!b)throw Error(`Unknown plugin: ${c??u??g??"(missing target)"}`);if(b.agentPlugin===!0){if(b.toggleable!==!0)throw Error(`Agent Plugin '${b.name}' cannot be toggled.`);let T=i.enabled??b.enabled===!1;return dx(b.pluginName??b.name,!T),{snapshot:await this.list(i),changedTypes:["plugins","skills","mcp"]}}let I=b.path;if(this.pluginSource){let T=i.enabled;if(T===void 0)T=!b.enabled;let E=await this.pluginSource.setEnabled({path:I,enabled:T,cwd:i.cwd,workspaceRoot:i.workspaceRoot});return{snapshot:{...l,plugins:[...E.plugins,...l.plugins.filter((A)=>A.agentPlugin===!0)],tools:Oi(E.tools)},changedTypes:["plugins"]}}let k=i.enabled;if(k===void 0)k=!b.enabled;return lx(I,!k),{snapshot:await this.list(i),changedTypes:["plugins"]}}if(i.type==="mcp"){let l=i.name?.trim()||i.id?.trim();if(!l)throw Error("MCP server settings toggle requires a server name.");let u=i.path?.trim()||nn(),c=i.enabled;if(c===void 0){let g=dm({filePath:u}).find((b)=>b.name===l);if(!g)throw Error(`Unknown MCP server: ${l}`);c=g.disabled===!0}return tA({filePath:u,name:l,disabled:!c}),{snapshot:await this.list(i),changedTypes:["mcp"]}}throw Error(`Settings type '${i.type}' does not support toggles.`)}}function Od(i){return i?.trim()||void 0}function A_(i,l){let u=Zf(i,l);return u===""||!u.startsWith(`..${QG}`)&&u!==".."&&!Qf(u)}function ZG(i,l,u){if(!qp(i))return;let c=ub(i),g=l;while(!qp(g)){let I=YG(g);if(I===g)break;g=I}if(!qp(g))return;let b=ub(g);if(!A_(c,b))throw Error(`${u} escapes the workspace through a symbolic link`)}function cb(i,l,u,c){let g=E_(i,Qf(l)?Zf(i,l):l);if(!A_(i,g)||!c&&g===i)throw Error(`${u} must stay within the task workspace`);return ZG(i,g,u),g}function Yl(i){let l=i.resourcePaths??[];if(i.scope==="global"){if(Od(i.workspaceRoot))throw Error("global tasks cannot set workspaceRoot");if(Od(i.cwd))throw Error("global tasks cannot set cwd");if(l.some((T)=>T.trim()))throw Error("global tasks cannot reference workspace files");return{resourcePaths:[]}}let u=Od(i.workspaceRoot);if(!u)throw Error("workspaceRoot is required for workspace tasks");let c=E_(u),g=Od(i.cwd),b=g?cb(c,g,"cwd",!0):void 0,I=[],k=new Set;for(let T of l){let E=T.trim();if(!E)throw Error("resourcePaths must contain only non-empty paths");if(Qf(E)||E.split(/[\\/]+/u).includes(".."))throw Error("resourcePaths must be workspace-relative without '..'");let A=cb(c,E,"resourcePaths",!1),C=Zf(c,A);if(!k.has(C))k.add(C),I.push(C)}return{workspaceRoot:c,cwd:b,resourcePaths:I}}var eX=new Set(["suggestion","follow-up","todo","handoff","idea","reminder"]),tX=new Set(["status","instructions","revision","approvedRevision","createdBy","updatedBy","currentRunId","lastRunId","lastSessionId","error","createdAt","updatedAt","completedAt","archivedAt"]),rX=new Set(["taskId","type","priority","title","description","availableAt","expiresAt","cwd","resourcePaths","assignee","modelSelection","mode","systemPrompt","maxIterations","timeoutSeconds","automationEligible"]);function sX(i){let l=he(i).replace(/\r\n/g,`
922
+ `);if(!l.startsWith(`---
923
+ `))return{body:l};let u=l.slice(4),c=u.indexOf(`
924
+ ---`);if(c===-1)return{body:l};let g=u.slice(c+4);if(g.startsWith(`
925
+ `))g=g.slice(1);return{frontmatter:u.slice(0,c),body:g}}function $d(i,l){return VG("sha256").update(JSON.stringify(i)).update(`
926
+ `).update(l.trim()).digest("hex")}function Br(i){if(typeof i!=="string")return;let l=i.trim();return l.length>0?l:void 0}function pb(i,l){let u=Br(i);if(!u||!Number.isFinite(Date.parse(u)))return Error(`${l} must be a valid ISO-8601 timestamp`);return new Date(u).toISOString()}function mb(i,l){if(i===void 0)return;if(!Number.isInteger(i)||i<=0)return Error(`${l} must be a positive integer`);return i}function iX(i,l){if(i===void 0)return[];if(!Array.isArray(i))return Error(`${l} must be an array of strings`);let u=[],c=new Set;for(let g of i){let b=Br(g);if(!b)return Error(`${l} must contain only non-empty strings`);if(!c.has(b))c.add(b),u.push(b)}return u}function nX(i){if(i===void 0)return;if(!i||typeof i!=="object"||Array.isArray(i))return Error("modelSelection must be a mapping");let l=i,u=Object.keys(l).filter((b)=>b!=="providerId"&&b!=="modelId");if(u.length>0)return Error(`modelSelection contains unknown field(s): ${u.join(", ")}`);let c=Br(l.providerId);if(!c)return Error("modelSelection.providerId is required");let g=Br(l.modelId);return{providerId:c,...g?{modelId:g}:{}}}function tt(i,l,u){return{ok:!1,specPath:i.specPath,contentHash:l,error:u}}function hb(i){let{frontmatter:l,body:u}=sX(i.raw);if(l===void 0)return tt(i,$d({},u),"task spec must begin with YAML frontmatter");let c;try{let H=X.parse(l);if(!H||typeof H!=="object"||Array.isArray(H))return tt(i,$d({},u),"frontmatter must be a YAML mapping");c=H}catch(H){return tt(i,$d({},u),H instanceof Error?`failed to parse frontmatter: ${H.message}`:"failed to parse frontmatter")}let g=$d(c,u),b=Object.keys(c).filter((H)=>tX.has(H));if(b.length>0)return tt(i,g,`operational field(s) cannot be set in a task spec: ${b.join(", ")}`);let I=Object.keys(c).filter((H)=>!rX.has(H));if(I.length>0)return tt(i,g,`unknown task spec field(s): ${I.join(", ")}`);if(i.scope==="workspace"&&!Br(i.workspaceRoot))return tt(i,g,"workspaceRoot is required for workspace-scoped task specs");let k=Br(c.type);if(!k||!eX.has(k))return tt(i,g,"type must be one of: suggestion, follow-up, todo, handoff, idea, reminder");let T=Br(c.title);if(!T)return tt(i,g,"title is required");let E=u.trim();if(!E)return tt(i,g,"markdown body instructions are required");let A=c.priority??3;if(!Number.isInteger(A)||A<0||A>5)return tt(i,g,"priority must be an integer from 0 to 5");let C=pb(c.expiresAt,"expiresAt");if(C instanceof Error)return tt(i,g,C.message);let N;if(c.availableAt!==void 0){let H=pb(c.availableAt,"availableAt");if(H instanceof Error)return tt(i,g,H.message);if(N=H,Date.parse(N)>=Date.parse(C))return tt(i,g,"availableAt must be before expiresAt")}let O=iX(c.resourcePaths,"resourcePaths");if(O instanceof Error)return tt(i,g,O.message);let L;try{L=Yl({scope:i.scope,workspaceRoot:i.workspaceRoot,cwd:Br(c.cwd),resourcePaths:O})}catch(H){return tt(i,g,H instanceof Error?H.message:String(H))}let D=nX(c.modelSelection);if(D instanceof Error)return tt(i,g,D.message);let U=mb(c.maxIterations,"maxIterations");if(U instanceof Error)return tt(i,g,U.message);let F=mb(c.timeoutSeconds,"timeoutSeconds");if(F instanceof Error)return tt(i,g,F.message);let j=c.mode;if(j!==void 0&&j!=="act"&&j!=="plan"&&j!=="yolo")return tt(i,g,"mode must be one of: act, plan, yolo");if(c.automationEligible!==void 0&&typeof c.automationEligible!=="boolean")return tt(i,g,"automationEligible must be a boolean");return{ok:!0,specPath:i.specPath,contentHash:g,spec:{taskId:Br(c.taskId),type:k,title:T,description:Br(c.description),instructions:E,scope:i.scope,workspaceRoot:L.workspaceRoot,cwd:L.cwd,resourcePaths:L.resourcePaths,priority:A,assignee:Br(c.assignee),modelSelection:D,mode:j,systemPrompt:Br(c.systemPrompt),maxIterations:U,timeoutSeconds:F,availableAt:N,expiresAt:C,automationEligible:c.automationEligible!==!1,specPath:i.specPath,contentHash:g}}}function oX(i){let l={taskId:i.taskId,type:i.type,priority:i.priority??3,title:i.title,...i.description?{description:i.description}:{},...i.availableAt?{availableAt:i.availableAt}:{},expiresAt:i.expiresAt,...i.cwd?{cwd:i.cwd}:{},resourcePaths:i.resourcePaths??[],...i.assignee?{assignee:i.assignee}:{},...i.modelSelection?{modelSelection:i.modelSelection}:{},...i.mode?{mode:i.mode}:{},...i.systemPrompt?{systemPrompt:i.systemPrompt}:{},...i.maxIterations!==void 0?{maxIterations:i.maxIterations}:{},...i.timeoutSeconds!==void 0?{timeoutSeconds:i.timeoutSeconds}:{},automationEligible:i.automationEligible!==!1};return`---
927
+ ${X.stringify(l,{lineWidth:0}).trimEnd()}
928
+ ---
929
+
930
+ ${i.instructions.trim()}
931
+ `}function aX(i,l){let u=Date.parse(i.expiresAt),c=new Date(Math.min(Date.now(),u-1)).toISOString();return{taskId:i.taskId,type:i.type,title:i.title,description:i.description,instructions:i.instructions,scope:i.scope,workspaceRoot:i.workspaceRoot,cwd:i.cwd,resourcePaths:i.resourcePaths,priority:i.priority,assignee:i.assignee,modelSelection:i.modelSelection,mode:i.mode,systemPrompt:i.systemPrompt,maxIterations:i.maxIterations,timeoutSeconds:i.timeoutSeconds,availableAt:i.availableAt??c,expiresAt:i.expiresAt,automationEligible:i.automationEligible,createdBy:l,specPath:i.specPath}}function lX(i){let l=i.trim().replace(/[^a-zA-Z0-9._-]+/g,"-");if(!l)throw Error("taskId must contain at least one filename-safe character");return`${l}.task.md`}function dX(i,l){let u=__(i,l);return u===""||!u.startsWith(`..${JG}`)&&u!==".."&&!hh(u)}class C_{specsDir;scope;workspaceRoot;constructor(i){this.scope=i.scope,this.workspaceRoot=i.workspaceRoot?.trim()||void 0,this.specsDir=db(Qa({scope:i.scope,workspaceRoot:this.workspaceRoot,taskSpecsDir:i.taskSpecsDir}))}listSpecPaths(){if(!Qr(this.specsDir))return[];return this.assertSpecsDirSafe(),HG(this.specsDir,{withFileTypes:!0}).filter((i)=>i.isFile()&&i.name.endsWith(".task.md")).map((i)=>Fp(this.specsDir,i.name)).sort((i,l)=>i.localeCompare(l))}listSpecs(){return this.listSpecPaths().map((i)=>{try{return this.readSpec(i)}catch(l){return{ok:!1,specPath:i,contentHash:"",error:l instanceof Error?l.message:String(l)}}})}readSpec(i){this.assertSpecsDirSafe();let l=this.resolveSpecPath(i);if(Up(l).isSymbolicLink())throw Error("task spec files cannot be symbolic links");return hb({specPath:l,raw:zG(l,"utf8"),scope:this.scope,workspaceRoot:this.workspaceRoot})}writeSpec(i,l={}){if(!i.taskId.trim())throw Error("taskId is required");this.ensureSpecsDir();let u=this.resolveWritePath(i.taskId,l.specPath);if(l.createOnly&&Qr(u))throw Error(`task spec already exists: ${u}`);if(Qr(u)&&Up(u).isSymbolicLink())throw Error("task spec files cannot be symbolic links");let c=oX(i),g=hb({specPath:u,raw:c,scope:this.scope,workspaceRoot:this.workspaceRoot});if(!g.ok)throw Error(`invalid task spec: ${g.error}`);let b=Fp(this.specsDir,`.${GG(u)}.${process.pid}.${Date.now()}.tmp`);try{if(KG(b,c,{encoding:"utf8",mode:384}),this.assertExpectedContent(u,l),l.createOnly)jG(b,u);else WG(b,u)}finally{if(Qr(b))lb(b,{force:!0})}return g.spec}resolveWritePath(i,l){return this.resolveSpecPath(l??lX(i))}ensureSpecsDir(){this.assertSpecsDirSafe(),BG(this.specsDir,{recursive:!0}),this.assertSpecsDirSafe()}deleteSpec(i,l={}){this.assertSpecsDirSafe();let u=this.resolveSpecPath(i);if(!Qr(u))return!1;if(l.expectedContentHash){if(this.readSpec(u).contentHash!==l.expectedContentHash)throw Error(`task spec changed before delete: ${u}`)}return lb(u),!0}assertExpectedContent(i,l){if(l.createOnly){if(Qr(i))throw Error(`task spec already exists: ${i}`);return}if(!l.expectedContentHash)return;if(!Qr(i))throw Error(`task spec disappeared before update: ${i}`);if(this.readSpec(i).contentHash!==l.expectedContentHash)throw Error(`task spec changed before update: ${i}`)}assertSpecsDirSafe(){if(Qr(this.specsDir)&&Up(this.specsDir).isSymbolicLink())throw Error("task specs directory cannot be a symbolic link");if(!this.workspaceRoot||!Qr(this.workspaceRoot))return;let i=ab(this.workspaceRoot),l=this.specsDir;while(!Qr(l)){let u=XG(l);if(u===l)break;l=u}if(Qr(l)&&!dX(i,ab(l)))throw Error("task specs directory escapes the workspace")}resolveSpecPath(i){let l=db(hh(i)?i:Fp(this.specsDir,i)),u=__(this.specsDir,l);if(u===""||u.startsWith("..")||hh(u)||!l.endsWith(".task.md"))throw Error("task spec path must be a *.task.md file within the specs directory");return l}}var uX=[`CREATE TABLE IF NOT EXISTS agenda_tasks (
932
+ task_id TEXT PRIMARY KEY,
933
+ type TEXT NOT NULL CHECK (type IN ('suggestion', 'follow-up', 'todo', 'handoff', 'idea', 'reminder')),
934
+ status TEXT NOT NULL CHECK (status IN ('pending_approval', 'approved', 'in_progress', 'completed', 'failed', 'cancelled', 'expired')),
935
+ title TEXT NOT NULL,
936
+ description TEXT,
937
+ instructions TEXT NOT NULL,
938
+ scope TEXT NOT NULL CHECK (scope IN ('workspace', 'global')),
939
+ workspace_root TEXT,
940
+ cwd TEXT,
941
+ resource_paths_json TEXT NOT NULL DEFAULT '[]',
942
+ priority INTEGER NOT NULL DEFAULT 3 CHECK (priority BETWEEN 0 AND 5),
943
+ assignee TEXT,
944
+ model_selection_json TEXT,
945
+ mode TEXT CHECK (mode IS NULL OR mode IN ('act', 'plan', 'yolo')),
946
+ system_prompt TEXT,
947
+ max_iterations INTEGER,
948
+ timeout_seconds INTEGER,
949
+ available_at TEXT NOT NULL,
950
+ expires_at TEXT NOT NULL,
951
+ automation_eligible INTEGER NOT NULL DEFAULT 1,
952
+ revision INTEGER NOT NULL DEFAULT 1,
953
+ approved_revision INTEGER,
954
+ created_by_json TEXT NOT NULL,
955
+ updated_by_json TEXT NOT NULL,
956
+ origin_session_id TEXT,
957
+ origin_task_id TEXT,
958
+ current_run_id TEXT,
959
+ last_run_id TEXT,
960
+ last_session_id TEXT,
961
+ spec_path TEXT UNIQUE,
962
+ error TEXT,
963
+ created_at TEXT NOT NULL,
964
+ updated_at TEXT NOT NULL,
965
+ completed_at TEXT,
966
+ archived_at TEXT,
967
+ CHECK (
968
+ (scope = 'workspace' AND workspace_root IS NOT NULL) OR
969
+ (scope = 'global' AND workspace_root IS NULL)
970
+ )
971
+ );`,`CREATE TABLE IF NOT EXISTS agenda_task_runs (
972
+ run_id TEXT PRIMARY KEY,
973
+ task_id TEXT NOT NULL REFERENCES agenda_tasks(task_id) ON DELETE CASCADE,
974
+ task_revision INTEGER NOT NULL,
975
+ attempt INTEGER NOT NULL,
976
+ status TEXT NOT NULL CHECK (status IN ('starting', 'running', 'completed', 'failed', 'cancelled', 'interrupted')),
977
+ claim_token TEXT,
978
+ claim_until_at TEXT,
979
+ requested_by_client_id TEXT,
980
+ session_id TEXT,
981
+ claimed_at TEXT NOT NULL,
982
+ started_at TEXT,
983
+ completed_at TEXT,
984
+ result_summary TEXT,
985
+ error TEXT,
986
+ created_at TEXT NOT NULL,
987
+ updated_at TEXT NOT NULL,
988
+ UNIQUE (task_id, attempt)
989
+ );`,`CREATE TABLE IF NOT EXISTS agenda_task_automation (
990
+ scope_key TEXT PRIMARY KEY,
991
+ mode TEXT NOT NULL CHECK (mode IN ('manual', 'auto_start', 'unattended')),
992
+ apply_to_agent_created INTEGER NOT NULL DEFAULT 1,
993
+ max_concurrent_runs INTEGER NOT NULL DEFAULT 2,
994
+ max_chain_depth INTEGER NOT NULL DEFAULT 1,
995
+ max_starts_per_hour INTEGER NOT NULL DEFAULT 20,
996
+ enabled_by_json TEXT,
997
+ enabled_at TEXT,
998
+ updated_at TEXT NOT NULL
999
+ );`,`CREATE INDEX IF NOT EXISTS agenda_tasks_ready_idx
1000
+ ON agenda_tasks(status, priority, available_at, expires_at, created_at);`,`CREATE INDEX IF NOT EXISTS agenda_tasks_scope_idx
1001
+ ON agenda_tasks(scope, workspace_root, status, available_at);`,`CREATE INDEX IF NOT EXISTS agenda_tasks_origin_session_idx
1002
+ ON agenda_tasks(origin_session_id, created_at);`,`CREATE INDEX IF NOT EXISTS agenda_task_runs_task_idx
1003
+ ON agenda_task_runs(task_id, attempt DESC);`,`CREATE INDEX IF NOT EXISTS agenda_task_runs_session_idx
1004
+ ON agenda_task_runs(session_id);`,`CREATE UNIQUE INDEX IF NOT EXISTS agenda_task_runs_one_active_idx
1005
+ ON agenda_task_runs(task_id)
1006
+ WHERE status IN ('starting', 'running');`];function cX(i){i.exec("PRAGMA journal_mode = WAL;"),i.exec("PRAGMA busy_timeout = 5000;"),i.exec("PRAGMA foreign_keys = ON;");for(let l of uX)i.exec(l)}var yb={kind:"system",id:"task_store"};class ou extends Error{current;constructor(i){super(`task ${i.taskId} is at revision ${i.revision}; the requested revision is stale`);this.current=i,this.name="AgendaTaskRevisionConflictError"}}function El(i){if(typeof i!=="string"||!i)return;try{return JSON.parse(i)}catch{return}}function es(i){if(typeof i==="number"&&Number.isFinite(i))return Math.floor(i);if(typeof i==="bigint")return Number(i);return}function jp(i){return{taskId:f(i.task_id),type:f(i.type),status:f(i.status),title:f(i.title),description:h(i.description),instructions:f(i.instructions),scope:f(i.scope),workspaceRoot:h(i.workspace_root),cwd:h(i.cwd),resourcePaths:El(i.resource_paths_json)?.filter((l)=>typeof l==="string")??[],priority:es(i.priority)??3,assignee:h(i.assignee),modelSelection:El(i.model_selection_json),mode:h(i.mode),systemPrompt:h(i.system_prompt),maxIterations:es(i.max_iterations),timeoutSeconds:es(i.timeout_seconds),availableAt:f(i.available_at),expiresAt:f(i.expires_at),automationEligible:Number(i.automation_eligible??0)===1,revision:es(i.revision)??1,approvedRevision:es(i.approved_revision),createdBy:El(i.created_by_json)??yb,updatedBy:El(i.updated_by_json)??yb,originSessionId:h(i.origin_session_id),originTaskId:h(i.origin_task_id),currentRunId:h(i.current_run_id),lastRunId:h(i.last_run_id),lastSessionId:h(i.last_session_id),specPath:h(i.spec_path),error:h(i.error),createdAt:f(i.created_at),updatedAt:f(i.updated_at),completedAt:h(i.completed_at),archivedAt:h(i.archived_at)}}function vb(i){return{runId:f(i.run_id),taskId:f(i.task_id),taskRevision:es(i.task_revision)??1,attempt:es(i.attempt)??1,status:f(i.status),claimToken:h(i.claim_token),claimUntilAt:h(i.claim_until_at),requestedByClientId:h(i.requested_by_client_id),sessionId:h(i.session_id),claimedAt:f(i.claimed_at),startedAt:h(i.started_at),completedAt:h(i.completed_at),resultSummary:h(i.result_summary),error:h(i.error),createdAt:f(i.created_at),updatedAt:f(i.updated_at)}}function wb(i){return{scopeKey:f(i.scope_key),mode:f(i.mode),applyToAgentCreated:Number(i.apply_to_agent_created??0)===1,maxConcurrentRuns:es(i.max_concurrent_runs)??2,maxChainDepth:es(i.max_chain_depth)??1,maxStartsPerHour:es(i.max_starts_per_hour)??20,enabledBy:El(i.enabled_by_json),enabledAt:h(i.enabled_at),updatedAt:f(i.updated_at)}}function hl(i,l){let u=i.trim();if(!u)throw Error(`${l} is required`);return u}function Vt(i){return typeof i==="string"&&i.trim()?i.trim():void 0}function Li(i,l){let u=Date.parse(i);if(!Number.isFinite(u))throw Error(`${l} must be a valid ISO-8601 timestamp`);return new Date(u).toISOString()}function bb(i,l){return i==null?void 0:Li(i,l)}function xi(i,l){if(i==null)return;if(!Number.isInteger(i)||i<=0)throw Error(`${l} must be a positive integer`);return i}function Ib(i,l){if(Date.parse(i)>=Date.parse(l))throw Error("availableAt must be before expiresAt")}function Ld(i){return Array(i).fill("?").join(", ")}class x_{db;constructor(i={}){this.db=V(i.dbPath??Ka()),cX(this.db);let l=x();this.db.prepare(`INSERT OR IGNORE INTO agenda_task_automation (
1007
+ scope_key, mode, apply_to_agent_created, max_concurrent_runs,
1008
+ max_chain_depth, max_starts_per_hour, updated_at
1009
+ ) VALUES ('global', 'manual', 1, 2, 1, 20, ?)`).run(l)}close(){this.db.close?.()}createTask(i){let l=x(),u=Vt(i.taskId)??`task_${fb()}`,c=Yl(i),g=Li(i.availableAt??l,"availableAt"),b=Li(i.expiresAt,"expiresAt");Ib(g,b);let I=i.priority??3;if(!Number.isInteger(I)||I<0||I>5)throw Error("priority must be an integer from 0 to 5");let k=xi(i.maxIterations,"maxIterations"),T=xi(i.timeoutSeconds,"timeoutSeconds"),E=i.requiresApproval!==!1,A=E?"pending_approval":"approved",C=E?null:1;this.db.prepare(`INSERT INTO agenda_tasks (
1010
+ task_id, type, status, title, description, instructions, scope,
1011
+ workspace_root, cwd, resource_paths_json, priority, assignee,
1012
+ model_selection_json, mode, system_prompt, max_iterations,
1013
+ timeout_seconds, available_at, expires_at, automation_eligible,
1014
+ revision, approved_revision, created_by_json, updated_by_json, origin_session_id,
1015
+ origin_task_id, spec_path, created_at, updated_at
1016
+ ) VALUES (
1017
+ ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
1018
+ ?, ?, ?, 1, ?, ?, ?, ?, ?, ?, ?, ?
1019
+ )`).run(u,i.type,A,hl(i.title,"title"),Vt(i.description)??null,hl(i.instructions,"instructions"),i.scope,c.workspaceRoot??null,c.cwd??null,JSON.stringify(c.resourcePaths),I,Vt(i.assignee)??null,i.modelSelection?JSON.stringify(i.modelSelection):null,i.mode??null,Vt(i.systemPrompt)??null,k??null,T??null,g,b,i.automationEligible===!1?0:1,C,JSON.stringify(i.createdBy),JSON.stringify(i.createdBy),Vt(i.originSessionId)??null,Vt(i.originTaskId)??null,Vt(i.specPath)??null,l,l);let N=this.getTask(u);if(!N)throw Error(`failed to create task ${u}`);return N}getTask(i){let l=this.db.prepare("SELECT * FROM agenda_tasks WHERE task_id = ?").get(i);return l?jp(l):void 0}getTaskBySpecPath(i){let l=this.db.prepare("SELECT * FROM agenda_tasks WHERE spec_path = ?").get(i);return l?jp(l):void 0}listWorkspaceRoots(){let i=this.db.prepare(`SELECT DISTINCT workspace_root FROM agenda_tasks
1020
+ WHERE scope = 'workspace' AND workspace_root IS NOT NULL
1021
+ ORDER BY workspace_root ASC`).all(),l=new Set;for(let u of i){let c=h(u.workspace_root);if(c)l.add(gb(c))}return[...l].sort((u,c)=>u.localeCompare(c))}listTasks(i={}){if(i.statuses?.length===0||i.types?.length===0||i.priorities?.length===0)return[];let l=[],u=[];if(i.statuses)l.push(`status IN (${Ld(i.statuses.length)})`),u.push(...i.statuses);if(i.types)l.push(`type IN (${Ld(i.types.length)})`),u.push(...i.types);let c=i.workspaceRoot?.trim()?gb(i.workspaceRoot):void 0;if(i.scope==="workspace"){if(l.push("scope = 'workspace'"),c)l.push("workspace_root = ?"),u.push(c)}else if(i.scope==="global")l.push("scope = 'global'");else if(c)l.push("(scope = 'global' OR (scope = 'workspace' AND workspace_root = ?))"),u.push(c);if(i.priorities)l.push(`priority IN (${Ld(i.priorities.length)})`),u.push(...i.priorities);if(typeof i.automationEligible==="boolean")l.push("automation_eligible = ?"),u.push(i.automationEligible?1:0);if(i.availableBefore)l.push("available_at <= ?"),u.push(Li(i.availableBefore,"availableBefore"));if(!i.includeArchived)l.push("archived_at IS NULL");let g=Math.min(1000,Math.max(1,Math.floor(i.limit??200)));return this.db.prepare(`SELECT * FROM agenda_tasks
1022
+ ${l.length>0?`WHERE ${l.join(" AND ")}`:""}
1023
+ ORDER BY priority ASC, available_at ASC, created_at ASC, task_id ASC
1024
+ LIMIT ?`).all(...u,g).map(jp)}updateTask(i){let l=this.getTask(i.taskId);if(!l)return;if(l.revision!==i.expectedRevision)throw new ou(l);if(l.status==="in_progress")throw Error("an in-progress task cannot be edited");let u=i.scope??l.scope,c=Yl({scope:u,workspaceRoot:i.workspaceRoot===null?void 0:i.workspaceRoot??l.workspaceRoot,cwd:i.cwd===null?void 0:i.cwd??l.cwd,resourcePaths:i.resourcePaths??l.resourcePaths}),g=Li(i.availableAt??l.availableAt,"availableAt"),b=Li(i.expiresAt??l.expiresAt,"expiresAt");Ib(g,b);let I=i.priority??l.priority;if(!Number.isInteger(I)||I<0||I>5)throw Error("priority must be an integer from 0 to 5");let k=l.status==="approved"||l.status==="failed"?"pending_approval":l.status,T=l.revision+1,E=x();return this.db.prepare(`UPDATE agenda_tasks SET
1025
+ type = ?, status = ?, title = ?, description = ?, instructions = ?,
1026
+ scope = ?, workspace_root = ?, cwd = ?, resource_paths_json = ?,
1027
+ priority = ?, assignee = ?, model_selection_json = ?, mode = ?,
1028
+ system_prompt = ?, max_iterations = ?, timeout_seconds = ?,
1029
+ available_at = ?, expires_at = ?, automation_eligible = ?, revision = ?,
1030
+ approved_revision = NULL, error = NULL, updated_by_json = ?, updated_at = ?
1031
+ WHERE task_id = ? AND revision = ?`).run(i.type??l.type,k,hl(i.title??l.title,"title"),i.description===null?null:Vt(i.description??l.description)??null,hl(i.instructions??l.instructions,"instructions"),u,c.workspaceRoot??null,c.cwd??null,JSON.stringify(c.resourcePaths),I,i.assignee===null?null:Vt(i.assignee??l.assignee)??null,i.modelSelection===null?null:JSON.stringify(i.modelSelection??l.modelSelection)||null,i.mode===null?null:i.mode??l.mode??null,i.systemPrompt===null?null:Vt(i.systemPrompt??l.systemPrompt)??null,xi(i.maxIterations===null?void 0:i.maxIterations??l.maxIterations,"maxIterations")??null,xi(i.timeoutSeconds===null?void 0:i.timeoutSeconds??l.timeoutSeconds,"timeoutSeconds")??null,g,b,i.automationEligible??l.automationEligible?1:0,T,JSON.stringify(i.updatedBy),E,i.taskId,l.revision),this.getTask(i.taskId)}updateTaskState(i,l,u){let c=this.getTask(i);if(!c)return;if(u!==void 0&&c.revision!==u)throw new ou(c);let g=l.approvedRevision===null?void 0:l.approvedRevision??c.approvedRevision,b=l.status??c.status;if(b==="in_progress"&&g!==c.revision)throw Error("in-progress task must be approved for its current revision");let I=x();return this.db.prepare(`UPDATE agenda_tasks SET
1032
+ status = ?, approved_revision = ?, current_run_id = ?, last_run_id = ?,
1033
+ last_session_id = ?, spec_path = ?, error = ?, completed_at = ?,
1034
+ archived_at = ?, updated_by_json = ?, updated_at = ?
1035
+ WHERE task_id = ? AND revision = ?`).run(b,g??null,l.currentRunId===null?null:l.currentRunId??c.currentRunId??null,l.lastRunId===null?null:l.lastRunId??c.lastRunId??null,l.lastSessionId===null?null:l.lastSessionId??c.lastSessionId??null,l.specPath===null?null:l.specPath??c.specPath??null,l.error===null?null:l.error??c.error??null,l.completedAt===null?null:l.completedAt??c.completedAt??null,l.archivedAt===null?null:l.archivedAt??c.archivedAt??null,JSON.stringify(l.updatedBy??c.updatedBy),I,i,c.revision),this.getTask(i)}deleteTask(i){return(this.db.prepare("DELETE FROM agenda_tasks WHERE task_id = ?").run(i).changes??0)>0}createRun(i){let l=this.getTask(i.taskId);if(!l)throw Error(`task ${i.taskId} does not exist`);if(l.revision!==i.taskRevision)throw new ou(l);let u=this.db.prepare("SELECT COALESCE(MAX(attempt), 0) AS max_attempt FROM agenda_task_runs WHERE task_id = ?").get(i.taskId),c=(es(u?.max_attempt)??0)+1,g=`run_${fb()}`,b=x(),I=i.claimedAt?Li(i.claimedAt,"claimedAt"):b;this.db.prepare(`INSERT INTO agenda_task_runs (
1036
+ run_id, task_id, task_revision, attempt, status, claim_token,
1037
+ claim_until_at, requested_by_client_id, session_id, claimed_at,
1038
+ created_at, updated_at
1039
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(g,i.taskId,i.taskRevision,c,i.status??"starting",Vt(i.claimToken)??null,bb(i.claimUntilAt,"claimUntilAt")??null,Vt(i.requestedByClientId)??null,Vt(i.sessionId)??null,I,b,b);let k=this.getRun(g);if(!k)throw Error(`failed to create run ${g}`);return k}getRun(i){let l=this.db.prepare("SELECT * FROM agenda_task_runs WHERE run_id = ?").get(i);return l?vb(l):void 0}updateRun(i,l){let u=this.getRun(i);if(!u)return;let c=x();return this.db.prepare(`UPDATE agenda_task_runs SET
1040
+ status = ?, claim_token = ?, claim_until_at = ?,
1041
+ requested_by_client_id = ?, session_id = ?, started_at = ?,
1042
+ completed_at = ?, result_summary = ?, error = ?, updated_at = ?
1043
+ WHERE run_id = ?`).run(l.status??u.status,l.claimToken===null?null:l.claimToken??u.claimToken??null,l.claimUntilAt===null?null:l.claimUntilAt??u.claimUntilAt??null,l.requestedByClientId===null?null:l.requestedByClientId??u.requestedByClientId??null,l.sessionId===null?null:l.sessionId??u.sessionId??null,l.startedAt===null?null:l.startedAt??u.startedAt??null,l.completedAt===null?null:l.completedAt??u.completedAt??null,l.resultSummary===null?null:l.resultSummary??u.resultSummary??null,l.error===null?null:l.error??u.error??null,c,i),this.getRun(i)}listRuns(i={}){let l=[],u=[];if(i.taskId)l.push("task_id = ?"),u.push(i.taskId);if(i.sessionId)l.push("session_id = ?"),u.push(i.sessionId);let c=Array.isArray(i.status)?i.status:i.status?[i.status]:void 0;if(c?.length===0)return[];if(c)l.push(`status IN (${Ld(c.length)})`),u.push(...c);let g=Math.min(1000,Math.max(1,Math.floor(i.limit??200)));return this.db.prepare(`SELECT * FROM agenda_task_runs
1044
+ ${l.length>0?`WHERE ${l.join(" AND ")}`:""}
1045
+ ORDER BY created_at DESC, attempt DESC LIMIT ?`).all(...u,g).map(vb)}getAutomationPolicy(i="global"){let l=this.db.prepare("SELECT * FROM agenda_task_automation WHERE scope_key = ?").get(i);if(!l)this.db.prepare(`INSERT OR IGNORE INTO agenda_task_automation (
1046
+ scope_key, mode, apply_to_agent_created, max_concurrent_runs,
1047
+ max_chain_depth, max_starts_per_hour, updated_at
1048
+ ) VALUES (?, 'manual', 1, 2, 1, 20, ?)`).run(i,x()),l=this.db.prepare("SELECT * FROM agenda_task_automation WHERE scope_key = ?").get(i);if(!l)throw Error(`failed to initialize automation policy ${i}`);return wb(l)}listAutomationPolicies(){return this.db.prepare("SELECT * FROM agenda_task_automation ORDER BY scope_key").all().map((i)=>wb(i))}setAutomationPolicy(i){let l=hl(i.scopeKey,"scopeKey"),u=xi(i.maxConcurrentRuns,"maxConcurrentRuns"),c=xi(i.maxChainDepth,"maxChainDepth"),g=xi(i.maxStartsPerHour,"maxStartsPerHour"),b=x();return this.db.prepare(`INSERT INTO agenda_task_automation (
1049
+ scope_key, mode, apply_to_agent_created, max_concurrent_runs,
1050
+ max_chain_depth, max_starts_per_hour, enabled_by_json,
1051
+ enabled_at, updated_at
1052
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
1053
+ ON CONFLICT(scope_key) DO UPDATE SET
1054
+ mode = excluded.mode,
1055
+ apply_to_agent_created = excluded.apply_to_agent_created,
1056
+ max_concurrent_runs = excluded.max_concurrent_runs,
1057
+ max_chain_depth = excluded.max_chain_depth,
1058
+ max_starts_per_hour = excluded.max_starts_per_hour,
1059
+ enabled_by_json = excluded.enabled_by_json,
1060
+ enabled_at = excluded.enabled_at,
1061
+ updated_at = excluded.updated_at`).run(l,i.mode,i.applyToAgentCreated?1:0,u,c,g,i.enabledBy?JSON.stringify(i.enabledBy):null,bb(i.enabledAt,"enabledAt")??null,b),this.getAutomationPolicy(l)}}var Ui={kind:"system",id:"file_reconciler"},Ri={kind:"system",id:"task_manager"},kb={kind:"automation_policy",id:"global"},fl=new Set(["completed","failed","cancelled","interrupted"]),pX=30000,mX=250;function Ps(){return new Date().toISOString()}function Sb(i){return typeof i==="string"&&i.trim()?i.trim():void 0}function Tb(i){let l=Date.parse(i);if(!Number.isFinite(l))throw Error("expiresAt must be a valid ISO-8601 timestamp");if(l<=Date.now())throw Error("expiresAt must be in the future")}function _b(i,l){let u=qG(i,l);return u!==""&&!u.startsWith("..")&&!u.startsWith("/")}function gl(i){if(!i||!mh(i))return!1;try{return UG(i).isDirectory()}catch{return!1}}function Bp(i,l){return JSON.stringify({type:i.type,title:i.title,description:i.description,instructions:i.instructions,scope:i.scope,workspaceRoot:i.workspaceRoot,cwd:i.cwd,resourcePaths:i.resourcePaths,priority:i.priority,assignee:i.assignee,modelSelection:i.modelSelection,mode:i.mode,systemPrompt:i.systemPrompt,maxIterations:i.maxIterations,timeoutSeconds:i.timeoutSeconds,availableAt:i.availableAt??l.availableAt,expiresAt:i.expiresAt,automationEligible:i.automationEligible})}function Hp(i){return JSON.stringify({type:i.type,title:i.title,description:i.description,instructions:i.instructions,scope:i.scope,workspaceRoot:i.workspaceRoot,cwd:i.cwd,resourcePaths:i.resourcePaths,priority:i.priority,assignee:i.assignee,modelSelection:i.modelSelection,mode:i.mode,systemPrompt:i.systemPrompt,maxIterations:i.maxIterations,timeoutSeconds:i.timeoutSeconds,availableAt:i.availableAt,expiresAt:i.expiresAt,automationEligible:i.automationEligible})}function hX(i,l){return{taskId:l.taskId,expectedRevision:l.revision,type:i.type,title:i.title,description:i.description??null,instructions:i.instructions,scope:i.scope,workspaceRoot:i.workspaceRoot??null,cwd:i.cwd??null,resourcePaths:i.resourcePaths,priority:i.priority,assignee:i.assignee??null,modelSelection:i.modelSelection??null,mode:i.mode??null,systemPrompt:i.systemPrompt??null,maxIterations:i.maxIterations??null,timeoutSeconds:i.timeoutSeconds??null,availableAt:i.availableAt??l.availableAt,expiresAt:i.expiresAt,automationEligible:i.automationEligible,updatedBy:Ui}}function fX(i,l){return{...i,type:l.type??i.type,title:l.title??i.title,description:l.description===null?void 0:l.description??i.description,instructions:l.instructions??i.instructions,scope:l.scope??i.scope,workspaceRoot:l.workspaceRoot===null?void 0:l.workspaceRoot??i.workspaceRoot,cwd:l.cwd===null?void 0:l.cwd??i.cwd,resourcePaths:l.resourcePaths??i.resourcePaths,priority:l.priority??i.priority,assignee:l.assignee===null?void 0:l.assignee??i.assignee,modelSelection:l.modelSelection===null?void 0:l.modelSelection??i.modelSelection,mode:l.mode===null?void 0:l.mode??i.mode,systemPrompt:l.systemPrompt===null?void 0:l.systemPrompt??i.systemPrompt,maxIterations:l.maxIterations===null?void 0:l.maxIterations??i.maxIterations,timeoutSeconds:l.timeoutSeconds===null?void 0:l.timeoutSeconds??i.timeoutSeconds,availableAt:l.availableAt??i.availableAt,expiresAt:l.expiresAt??i.expiresAt,automationEligible:l.automationEligible??i.automationEligible}}class R_{runtime;store;ownsStore;globalSpecsDir;watcherDebounceMs;watchFiles;logger;publishEvent;scopes=new Map;activeRuns=new Map;backgroundRuns=new Set;maintenanceTimer;queuedAutomationScopes=new Set;automationEnabled;automationPumping=!1;automationPolicyGeneration=0;started=!1;disposed=!1;constructor(i){this.runtime=i.runtime,this.ownsStore=!i.store,this.store=i.store??new x_({dbPath:i.dbPath}),this.globalSpecsDir=i.globalSpecsDir,this.watcherDebounceMs=Math.max(0,i.watcherDebounceMs??mX),this.watchFiles=i.watchFiles!==!1,this.automationEnabled=i.automationEnabled!==!1,this.logger=i.logger??Ln,this.publishEvent=i.publish??(()=>{})}async start(){if(this.disposed)throw Error("AgendaTaskManager disposed");if(this.started)return;this.started=!0,this.recoverInterruptedRuns(),await this.reconcileSourceForProjection("global",void 0,"startup");for(let i of this.store.listWorkspaceRoots())if(gl(i))await this.reconcileSourceForProjection("workspace",i,"startup");this.expireTasks(),this.maintenanceTimer=setInterval(()=>{this.expireTasks(),this.queueAutomation()},pX),this.maintenanceTimer.unref?.(),this.queueAutomation()}async dispose(){if(this.disposed)return;if(this.disposed=!0,this.maintenanceTimer)clearInterval(this.maintenanceTimer);for(let i of this.scopes.values()){if(i.timer)clearTimeout(i.timer);i.watcher?.close()}this.scopes.clear();for(let i of this.activeRuns.values())if(i.sessionId)await this.runtime.abortSession(i.sessionId,"Hub task manager stopped").catch(()=>{});await Promise.allSettled(this.backgroundRuns);for(let[i,l]of this.activeRuns)this.store.updateRun(l.runId,{status:"interrupted",completedAt:Ps(),error:"Hub task manager stopped before the run completed."}),this.store.updateTaskState(i,{status:"failed",currentRunId:null,error:"Hub task manager stopped before the run completed.",updatedBy:Ri});if(this.activeRuns.clear(),this.ownsStore)this.store.close()}async createTask(i){this.assertUsable(),Tb(i.expiresAt);let l=Yl(i),u={...i,...l},c=Sb(u.taskId)??P("task_");if(await this.reconcileScope(u.scope,u.workspaceRoot),this.store.getTask(c))throw Error(`task ${c} already exists`);let g=this.ensureScope(u.scope,u.workspaceRoot),b=g.resolveWritePath(c,u.specPath);if(mh(b)||this.store.getTaskBySpecPath(b))throw Error(`task spec already exists: ${b}`);let I=this.store.createTask({...u,taskId:c,specPath:b});try{g.writeSpec({...u,taskId:c},{specPath:b,createOnly:!0})}catch(k){throw this.store.deleteTask(c),k}return this.publish("task.created",I),this.expireTask(I),this.queueAutomation(),this.requireTask(c)}async listTasks(i={}){if(this.assertUsable(),!i.scope||i.scope==="global")await this.reconcileSourceForProjection("global",void 0,"list");if(i.workspaceRoot){if(gl(i.workspaceRoot))await this.reconcileSourceForProjection("workspace",i.workspaceRoot,"list")}else if(i.scope!=="global"){for(let l of this.store.listWorkspaceRoots())if(gl(l))await this.reconcileSourceForProjection("workspace",l,"list")}return this.expireTasks(),this.store.listTasks(i)}async getTask(i){this.assertUsable();let l=this.store.getTask(i.trim());if(l?.scope==="workspace"&&gl(l.workspaceRoot))await this.reconcileSourceForProjection("workspace",l.workspaceRoot,"read");else if(l?.scope==="global")await this.reconcileSourceForProjection("global",void 0,"read");let u=this.store.getTask(i.trim());if(u)this.expireTask(u);return this.store.getTask(i.trim())}async updateTask(i){this.assertUsable();let l=this.requireTask(i.taskId);if(i.updatedBy.id!==Ui.id)await this.reconcileSourceForProjection(l.scope,l.workspaceRoot,"update");let u=this.requireTask(i.taskId);if(u.revision!==i.expectedRevision)this.store.updateTask(i);if(u.status==="in_progress")throw Error("an in-progress task cannot be edited");if(u.status==="completed"||u.status==="cancelled"||u.status==="expired")throw Error(`task ${u.taskId} cannot be edited from ${u.status}; create a new task instead`);let c=fX(u,i);Tb(c.expiresAt);let g=Yl(c),b={...c,...g},I={...i,scope:b.scope,workspaceRoot:b.workspaceRoot??null,cwd:b.cwd??null,resourcePaths:b.resourcePaths},k=this.ensureScope(b.scope,b.workspaceRoot),T=u.specPath!==void 0&&_b(k.specsDir,u.specPath);if(!T)await this.reconcileFileStore(k);let E=k.resolveWritePath(u.taskId,T?u.specPath:void 0);if(E!==u.specPath&&(mh(E)||this.store.getTaskBySpecPath(E)))throw Error(`task spec already exists: ${E}`);let A;if(T&&u.specPath){let D=k.readSpec(u.specPath);if(!D.ok)throw Error(`task spec is invalid: ${D.error}`);if(i.updatedBy.id!==Ui.id&&Bp(D.spec,u)!==Hp(u))throw Error(`task spec changed outside the manager; reconcile task ${u.taskId} and retry`);A=D.contentHash}let C,N;try{C=k.writeSpec(b,{specPath:E,expectedContentHash:A,createOnly:!T}),N=this.store.updateTask(I)}catch(D){try{if(C&&T&&u.specPath)k.writeSpec(u,{specPath:u.specPath,expectedContentHash:C.contentHash});else if(C)k.deleteSpec(E,{expectedContentHash:C.contentHash})}catch(U){this.logError("agenda task update rollback failed",U,{taskId:u.taskId,specPath:E})}throw D}if(!N||!C)throw Error(`unknown task: ${i.taskId}`);let O=this.store.updateTaskState(N.taskId,{status:"pending_approval",approvedRevision:null,currentRunId:null,specPath:C.specPath,error:null,completedAt:null,archivedAt:null,updatedBy:i.updatedBy},N.revision);if(u.specPath&&u.specPath!==C.specPath)this.fileStoreForTask(u).deleteSpec(u.specPath);let L=O??this.requireTask(i.taskId);return this.publish("task.updated",L),this.expireTask(L),this.queueAutomation(),this.requireTask(i.taskId)}async approveTask(i,l,u){this.assertUsable();let c=await this.refreshAndVerifyTaskIntent(i);if(this.assertRevision(c,u),this.isExpired(c))throw this.expireTask(c),Error(`task ${i} has expired`);if(c.status==="approved"&&c.approvedRevision===c.revision)return c;if(c.status!=="pending_approval"&&c.status!=="failed")throw Error(`task ${i} cannot be approved from ${c.status}`);let g=this.store.updateTaskState(i,{status:"approved",approvedRevision:c.revision,error:null,updatedBy:l},c.revision);if(!g)throw Error(`unknown task: ${i}`);return this.publish("task.updated",g),this.queueAutomation(),g}async cancelTask(i,l,u,c){this.assertUsable();let g=this.requireTask(i);if(this.assertRevision(g,u),g.status==="cancelled")return g;if(g.status==="completed"||g.status==="expired")throw Error(`task ${i} cannot be cancelled from ${g.status}`);let b=g.currentRunId?this.store.getRun(g.currentRunId):void 0,I=c?.trim()||"Agenda task cancelled";if(b&&!fl.has(b.status))this.store.updateRun(b.runId,{status:"cancelled",completedAt:Ps(),error:c?.trim()||void 0});this.activeRuns.delete(i);let k=this.store.updateTaskState(i,{status:"cancelled",approvedRevision:null,currentRunId:null,error:c?.trim()||null,updatedBy:l},g.revision);if(!k)throw Error(`unknown task: ${i}`);if(this.publish("task.updated",k,b),b?.sessionId)try{await this.runtime.abortSession(b.sessionId,I)}catch(T){this.logError("agenda task session abort failed",T,{taskId:i,runId:b.runId,sessionId:b.sessionId})}return k}async runTask(i,l,u,c){this.assertUsable();let g=await this.refreshAndVerifyTaskIntent(i);if(this.assertRevision(g,u),this.isExpired(g))throw this.expireTask(g),Error(`task ${i} has expired`);if(Date.parse(g.availableAt)>Date.now())throw Error(`task ${i} is not available yet`);if(g.status!=="approved"&&g.status!=="failed")throw Error(`task ${i} must be approved before it can run`);if(g.approvedRevision!==g.revision)throw Error(`task ${i} approval is stale`);if(this.activeRuns.has(i)||g.currentRunId)throw Error(`task ${i} already has an active run`);let b=this.store.createRun({taskId:i,taskRevision:g.revision,requestedByClientId:c}),I=this.store.updateTaskState(i,{currentRunId:b.runId,lastRunId:b.runId,error:null,completedAt:null,updatedBy:l},g.revision);if(!I)throw Error(`unknown task: ${i}`);this.activeRuns.set(i,{runId:b.runId}),this.publish("task.updated",I,b);try{let k=await this.runtime.startSession(I,b,c,{unattended:l.kind==="automation_policy"&&this.store.getAutomationPolicy(I.scope==="workspace"&&I.workspaceRoot?I.workspaceRoot:"global").mode==="unattended"}),T=this.store.getRun(b.runId),E=this.store.getTask(i);if(!T||fl.has(T.status)||E?.status!==g.status||E.currentRunId!==b.runId){if(T&&!fl.has(T.status))this.store.updateRun(b.runId,{status:"cancelled",sessionId:k.sessionId,completedAt:Ps(),error:"Task changed or was cancelled while its session was starting."});else if(T)this.store.updateRun(b.runId,{sessionId:k.sessionId});throw this.activeRuns.delete(i),await this.runtime.abortSession(k.sessionId,"Agenda task was cancelled while its session was starting").catch((C)=>this.logError("cancelled agenda task session abort failed",C,{taskId:i,runId:b.runId,sessionId:k.sessionId})),Error(`task ${i} changed or was cancelled while starting`)}b=this.store.updateRun(b.runId,{status:"running",sessionId:k.sessionId,startedAt:Ps()})??b,I=this.store.updateTaskState(i,{status:"in_progress",lastSessionId:k.sessionId,updatedBy:l})??I,this.activeRuns.set(i,{runId:b.runId,sessionId:k.sessionId}),this.publish("task.run.started",I,b);let A=this.finishRun(I,b,k.sessionId);return this.backgroundRuns.add(A),A.finally(()=>this.backgroundRuns.delete(A)),{task:I,run:b}}catch(k){throw await this.finishRunFailure(I,b,k),k}}async getAutomationPolicy(i="global"){return this.assertUsable(),this.store.getAutomationPolicy(i)}async setAutomationPolicy(i,l){this.assertUsable();let u=Ps(),c=this.store.setAutomationPolicy({...i,enabledBy:i.mode==="manual"?void 0:l,enabledAt:i.mode==="manual"?void 0:u});return this.automationPolicyGeneration+=1,this.publishEvent("task.automation.updated",{policy:c}),this.queueAutomation(c.scopeKey),c}notifyAutomationReadinessChanged(){if(!this.disposed)this.queueAutomation()}async finishRun(i,l,u){try{let c=await this.runtime.runSession(u,i,l),g=this.store.getRun(l.runId);if(!g||fl.has(g.status))return;if(c.status==="completed"){let b=Ps(),I=this.store.updateRun(l.runId,{status:"completed",completedAt:b,resultSummary:c.summary,error:null})??g,k=this.store.updateTaskState(i.taskId,{status:"completed",currentRunId:null,error:null,completedAt:b,updatedBy:Ri})??this.requireTask(i.taskId);this.publish("task.run.completed",k,I)}else if(c.status==="cancelled")await this.cancelTask(i.taskId,Ri,i.revision,c.error||"Task session was cancelled");else await this.finishRunFailure(i,l,Error(c.error||c.summary||"Task session failed"))}catch(c){await this.finishRunFailure(i,l,c)}finally{this.activeRuns.delete(i.taskId);let c=this.store.getTask(i.taskId);(c?.scope==="workspace"&&c.workspaceRoot?this.reconcileScope("workspace",c.workspaceRoot):this.reconcileScope("global")).catch((g)=>this.logError("post-run agenda task reconciliation failed",g,{taskId:i.taskId})),this.queueAutomation()}}async finishRunFailure(i,l,u){let c=this.store.getRun(l.runId);if(!c||fl.has(c.status))return;let g=u instanceof Error?u.message:String(u),b=this.store.updateRun(l.runId,{status:"failed",completedAt:Ps(),error:g})??c,I=this.store.getTask(i.taskId);if(!I||I.status==="cancelled")return;if(I.currentRunId!==l.runId){this.activeRuns.delete(i.taskId),this.publish("task.run.failed",I,b);return}let k=this.store.updateTaskState(i.taskId,{status:"failed",currentRunId:null,error:g,updatedBy:Ri})??I;this.activeRuns.delete(i.taskId),this.publish("task.run.failed",k,b)}ensureScope(i,l){let u=Sb(l);if(i==="workspace"&&!u)throw Error("workspaceRoot is required for workspace task scope");if(i==="workspace"&&!gl(u))throw Error("workspaceRoot must be an existing directory");let c=i==="global"?"global":`workspace:${u}`,g=this.scopes.get(c);if(g)return g.store;let b=new C_({scope:i,workspaceRoot:u,taskSpecsDir:i==="global"?this.globalSpecsDir:void 0}),I={store:b},k=!0;try{b.ensureSpecsDir();let T=this.watchFiles?this.resolveWatchRoot(b.specsDir):void 0;if(T!==void 0)I.watcher=FG(T,(E,A)=>{if(!A||!String(A).endsWith(".task.md"))return;if(I.timer)clearTimeout(I.timer);I.timer=setTimeout(()=>{I.timer=void 0,this.reconcileFileStore(b).catch((C)=>this.logError("agenda task watcher reconciliation failed",C,{specsDir:b.specsDir}))},this.watcherDebounceMs)}),I.watcher.on("error",(E)=>this.logError("agenda task watcher failed",E,{specsDir:b.specsDir}))}catch(T){k=!1,this.logError("agenda task source could not be attached",T,{specsDir:b.specsDir})}if(k)this.scopes.set(c,I);return b}async reconcileScope(i,l){let u=this.ensureScope(i,l);await this.reconcileFileStore(u)}async reconcileSourceForProjection(i,l,u){try{await this.reconcileScope(i,l)}catch(c){this.logError(`agenda task source ${u} reconciliation failed`,c,{scope:i,...l?{workspaceRoot:l}:{}})}}async reconcileFileStore(i){if(this.disposed)return;let l=new Set;for(let c of i.listSpecs()){if(l.add(c.specPath),!c.ok){this.logger.log("agenda task spec is invalid",{severity:"warn",specPath:c.specPath,error:c.error});continue}try{let g=c.spec;if(!g.taskId)g=i.writeSpec({...g,taskId:P("task_")},{specPath:g.specPath,expectedContentHash:g.contentHash});let b=this.store.getTaskBySpecPath(g.specPath);if(b&&g.taskId&&g.taskId!==b.taskId)this.logger.log("agenda task id is immutable for an existing spec",{severity:"warn",taskId:b.taskId,requestedTaskId:g.taskId,specPath:g.specPath}),g=i.writeSpec({...g,taskId:b.taskId},{specPath:g.specPath,expectedContentHash:g.contentHash});let I=g.taskId?this.store.getTask(g.taskId):void 0,k=b??I;if(I?.specPath&&I.specPath!==g.specPath){this.logger.log("agenda task id is already owned by another spec",{severity:"warn",taskId:g.taskId,specPath:g.specPath});continue}if(!k){let T=this.store.createTask(aX(g,Ui));this.publish("task.created",T),this.expireTask(T);continue}if(k.archivedAt){let T=k.status==="cancelled"&&k.error==="Task spec was deleted.",E=this.store.updateTaskState(k.taskId,{status:T?"pending_approval":k.status,approvedRevision:T?null:k.approvedRevision,archivedAt:null,error:T?null:k.error,updatedBy:Ui});if(E)k=E,this.publish("task.updated",E)}if(Bp(g,k)===Hp(k))continue;if(k.status==="in_progress"){this.logger.log("agenda task edit deferred until its run completes",{severity:"warn",taskId:k.taskId});continue}if(k.status==="completed"||k.status==="cancelled"||k.status==="expired"){this.logger.log("terminal agenda task edits are not applied",{severity:"warn",taskId:k.taskId,status:k.status}),i.writeSpec(k,{specPath:g.specPath,expectedContentHash:g.contentHash});continue}await this.updateTask(hX(g,k))}catch(g){this.logError("agenda task spec reconciliation failed",g,{specPath:c.spec.specPath})}}let u=this.store.listTasks({scope:i.scope,workspaceRoot:i.workspaceRoot,includeArchived:!0,limit:1000});for(let c of u){if(!c.specPath||!_b(i.specsDir,c.specPath)||l.has(c.specPath)||c.archivedAt)continue;if(c.status==="in_progress")await this.cancelTask(c.taskId,Ui,c.revision,"Task spec was deleted.");let g=this.store.updateTaskState(c.taskId,{status:c.status==="completed"||c.status==="expired"?c.status:"cancelled",approvedRevision:null,currentRunId:null,error:c.status==="cancelled"?c.error??null:"Task spec was deleted.",archivedAt:Ps(),updatedBy:Ui});if(g)this.publish("task.deleted",g)}this.queueAutomation()}expireTasks(){for(let i of this.store.listTasks({limit:1000}))this.expireTask(i)}expireTask(i){if(!this.isExpired(i))return;if(i.currentRunId||i.status==="in_progress"||i.status==="completed"||i.status==="cancelled"||i.status==="expired")return;let l=this.store.updateTaskState(i.taskId,{status:"expired",approvedRevision:null,currentRunId:null,error:"Task expired before it was started.",updatedBy:Ri});if(l)this.publish("task.updated",l)}isExpired(i){return Date.parse(i.expiresAt)<=Date.now()}recoverInterruptedRuns(){let i=Ps();for(let l of this.store.listRuns({status:["starting","running"],limit:1000})){this.store.updateRun(l.runId,{status:"interrupted",completedAt:i,error:"Hub restarted while this task was running."});let u=this.store.getTask(l.taskId);if(!u||u.currentRunId!==l.runId)continue;if(u.status==="completed"||u.status==="cancelled"||u.status==="expired"){this.store.updateTaskState(u.taskId,{currentRunId:null});continue}if(l.status==="starting"&&u.approvedRevision===l.taskRevision&&u.revision===l.taskRevision&&!this.isExpired(u)){this.store.updateTaskState(u.taskId,{status:"approved",currentRunId:null,error:"Hub restarted before this task session was linked.",updatedBy:Ri});continue}this.store.updateTaskState(u.taskId,{status:l.status==="starting"?"pending_approval":"failed",approvedRevision:l.status==="starting"?null:u.approvedRevision,currentRunId:null,error:"Hub restarted while this task was running.",updatedBy:Ri})}}queueAutomation(i){if(this.disposed||!this.automationEnabled)return;if(i)this.queuedAutomationScopes.add(i);else for(let l of this.store.listAutomationPolicies())this.queuedAutomationScopes.add(l.scopeKey);if(this.automationPumping)return;queueMicrotask(()=>{this.pumpAutomation().catch((l)=>this.logError("agenda task automation pump failed",l,{}))})}async pumpAutomation(){if(this.disposed||this.automationPumping)return;this.automationPumping=!0;let i=this.automationPolicyGeneration;try{while(this.queuedAutomationScopes.size>0){let l=this.queuedAutomationScopes.values().next().value;if(!l)break;this.queuedAutomationScopes.delete(l);let u=this.store.getAutomationPolicy(l);if(u.mode==="manual")continue;this.expireTasks();let c=this.store.listRuns({limit:1000}).filter((I)=>Date.parse(I.claimedAt)>=Date.now()-3600000).length,g=Math.min(Math.max(0,u.maxConcurrentRuns-this.activeRuns.size),Math.max(0,u.maxStartsPerHour-c));if(g<=0)continue;let b=this.store.listTasks({statuses:["pending_approval","approved"],...l==="global"?{}:{scope:"workspace",workspaceRoot:l},automationEligible:!0,availableBefore:Ps(),limit:1000});for(let I of b){if(g<=0)break;if(i!==this.automationPolicyGeneration)return;try{let k=I;if(k.status==="pending_approval"){if(!this.canAutomaticallyApprove(k,u))continue;k=await this.approveTask(k.taskId,kb,k.revision)}if(i!==this.automationPolicyGeneration)return;if(u.mode==="auto_start"&&this.runtime.isInteractiveClientAvailable?.()!==!0)continue;await this.runTask(k.taskId,kb,k.revision),g-=1}catch(k){this.logError("agenda task automation start failed",k,{taskId:I.taskId})}}}}finally{if(this.automationPumping=!1,this.queuedAutomationScopes.size>0)this.queueAutomation()}}canAutomaticallyApprove(i,l){let u=[i.createdBy,i.updatedBy];if(u.some((c)=>c.kind==="system"&&c.id==="file_reconciler"))return!1;if(!l.applyToAgentCreated&&u.some((c)=>c.kind==="agent"))return!1;return this.taskChainDepth(i)<=l.maxChainDepth}taskChainDepth(i){let l=0,u=i,c=new Set([i.taskId]);while(u.originTaskId){if(c.has(u.originTaskId))return Number.POSITIVE_INFINITY;c.add(u.originTaskId);let g=this.store.getTask(u.originTaskId);if(!g)break;l+=1,u=g}return l}fileStoreForTask(i){return this.ensureScope(i.scope,i.workspaceRoot)}async refreshAndVerifyTaskIntent(i){let l=this.requireTask(i);await this.reconcileScope(l.scope,l.workspaceRoot);let u=this.requireTask(i);if(u.archivedAt)throw Error(`task ${i} no longer has an active task spec`);if(!u.specPath)throw Error(`task ${i} has no canonical task spec`);let c;try{c=this.fileStoreForTask(u).readSpec(u.specPath)}catch(g){throw Error(`task ${i} task spec is unavailable: ${g instanceof Error?g.message:String(g)}`)}if(!c.ok)throw Error(`task ${i} task spec is invalid: ${c.error}`);if(c.spec.taskId!==u.taskId||Bp(c.spec,u)!==Hp(u))throw Error(`task ${i} task spec does not match revision ${u.revision}`);return u}requireTask(i){let l=i.trim();if(!l)throw Error("taskId is required");let u=this.store.getTask(l);if(!u)throw Error(`unknown task: ${l}`);return u}assertRevision(i,l){if(i.revision!==l)throw Error(`task ${i.taskId} is at revision ${i.revision}; the requested revision is stale`)}publish(i,l,u){this.publishEvent(i,{task:l,...u?{run:u}:{}},u?.sessionId??l.lastSessionId)}resolveWatchRoot(i){try{return DG.native(i)}catch(l){this.logError("agenda task watcher disabled: specs dir could not be resolved",l,{specsDir:i});return}}logError(i,l,u){if(this.logger.error)this.logger.error(i,{...u,error:l});else this.logger.log(i,{...u,error:l,severity:"error"})}assertUsable(){if(this.disposed)throw Error("AgendaTaskManager disposed")}}function yX(i){if(typeof i!=="object"||i===null||!("error"in i))return;let l=i.error;return typeof l==="string"&&l.trim()?l:void 0}function Eb(i,l,u){let c=yX(u);if(c)return c;let g=l.trim();if(g){let b=g.length>200?`${g.slice(0,200)}...`:g;return`Cline account request failed with status ${i}: ${b}`}return`Cline account request failed with status ${i}`}class P_{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor(i){let l=i.apiBaseUrl.trim();if(!l)throw Error("apiBaseUrl is required");this.apiBaseUrl=l,this.getAuthTokenFn=i.getAuthToken,this.getCurrentUserIdFn=i.getCurrentUserId,this.getOrganizationMemberIdFn=i.getOrganizationMemberId,this.getHeadersFn=i.getHeaders,this.requestTimeoutMs=i.requestTimeoutMs??30000,this.fetchImpl=i.fetchImpl??fetch}async fetchMe(){return this.request("/api/v1/users/me")}async fetchRemoteConfig(){return this.request("/api/v1/users/me/remote-config")}async fetchFeaturebaseToken(){try{return await this.request("/api/v1/users/me/featurebase-token")}catch{return}}async fetchBalance(i){let l=await this.resolveUserId(i);return this.request(`/api/v1/users/${encodeURIComponent(l)}/balance`)}async fetchUsageTransactions(i){let l=await this.resolveUserId(i);return(await this.request(`/api/v1/users/${encodeURIComponent(l)}/usages`)).items??[]}async fetchPaymentTransactions(i){let l=await this.resolveUserId(i);return(await this.request(`/api/v1/users/${encodeURIComponent(l)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchAvailableSubscriptionPlans(i){let l=new URL("/api/v1/plans",this.apiBaseUrl);if(i?.type)l.searchParams.set("type",i.type);return this.request(`${l.pathname}${l.search}`)}async fetchCurrentUserPlan(){return this.request("/api/v1/users/me/plan")}async fetchOrganization(i){let l=i.trim();if(!l)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(l)}`)}async fetchOrganizationBalance(i){let l=i.trim();if(!l)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(l)}/balance`)}async fetchOrganizationUsageTransactions(i){let l=i.organizationId.trim();if(!l)throw Error("organizationId is required");let u=await this.resolveOrganizationMemberId(l,i.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(l)}/members/${encodeURIComponent(u)}/usages`)).items??[]}async switchAccount(i){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:i?.trim()||null},expectNoContent:!0})}async resolveUserId(i){let l=i?.trim();if(l)return l;let u=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(u)return u;let c=await this.fetchMe();if(!c.id?.trim())throw Error("Unable to resolve current user id");return c.id}async resolveOrganizationMemberId(i,l){let u=l?.trim();if(u)return u;let c=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn(i):void 0)?.trim();if(c)return c;let g=(await this.fetchUserOrganizations()).find((b)=>b.organizationId===i)?.memberId;if(!g?.trim())throw Error(`Unable to resolve memberId for organization ${i}`);return g}async request(i,l){let u=(await this.getAuthTokenFn())?.trim();if(!u)throw Error("No Cline account auth token found");let c=this.getHeadersFn?await this.getHeadersFn():{},g=new AbortController,b=setTimeout(()=>g.abort(),this.requestTimeoutMs);try{let I=await this.fetchImpl(new URL(i,this.apiBaseUrl),{method:l?.method??"GET",headers:{Authorization:`Bearer ${u}`,"Content-Type":"application/json",...c??{}},body:l?.body!==void 0?JSON.stringify(l.body):void 0,signal:g.signal});if(I.status===204||l?.expectNoContent){if(!I.ok)throw Error(`Cline account request failed with status ${I.status}`);return}let k=await I.text(),T;if(k.trim())try{T=JSON.parse(k)}catch{if(!I.ok)throw Error(Eb(I.status,k,void 0));throw Error("Cline account response was not valid JSON")}if(!I.ok)throw Error(Eb(I.status,k,T));if(typeof T==="object"&&T!==null){let E=T;if(typeof E.success==="boolean"){if(!E.success)throw Error(E.error||"Cline account request failed");return E.data}}if(T===void 0||T===null)throw Error("Cline account response payload was empty");return T}finally{clearTimeout(b)}}}var wX=610000,bX=3000,yl=15000,IX="CLOUD_SESSION_ERROR:",M_="__cline_create_request__:";function kX(i){return(i.trim().split(`
1062
+ `)[0]??"").trim().slice(0,72)}class ge extends Error{code;detail;connectUrl;status;constructor(i,l,u,c){super(`${IX}${JSON.stringify({code:i,message:l,connectUrl:u})}`);this.code=i,this.detail=l,this.connectUrl=u,this.status=c,this.name="CloudSessionError"}}class N_ extends ge{constructor(i){super("request_failed","Cloud session creation had an ambiguous result. Check your cloud session list or dashboard before starting another task.");this.name="CloudCreationUnconfirmedError",this.cause=i}}class O_ extends Error{constructor(i){super(i instanceof Error?i.message:"Cloud handoff creation was rejected.",{cause:i});this.name="CloudHandoffCreationRejectedError"}}function fh(i){let l=i.length;while(l>0&&i[l-1]==="/")l--;return i.slice(0,l)}function SX(i){return`${M_}${i}`.slice(0,255)}function Ab(i){return i?.startsWith(M_)===!0}function $_(i){switch(i){case"provisioning":case"cloning_repo":case"agent_starting":case"ready":case"failed":return i;default:return}}function zp(i){let l=ne(i.replace(/^workos:/,""));return typeof l?.sub==="string"&&l.sub.trim()?l.sub.trim():void 0}function Cb(i){return new Promise((l,u)=>{if(i.aborted){u(i.reason);return}let c=()=>{clearTimeout(g),u(i.reason)},g=setTimeout(()=>{i.removeEventListener("abort",c),l()},bX);i.addEventListener("abort",c,{once:!0})})}function TX(i,l){if(i&&typeof i==="object"){let u=i.error;if(typeof u==="string"&&u.trim())return u.trim()}return l}function Wp(i,l,u,c){let g=TX(l,`Cloud session request failed (${i})`);if(i===401)return new ge("authentication_required",g);if(i===404)return new ge("session_not_found",g);if(i===410)return new ge("session_expired",g);if(i===412)return new ge("github_not_connected",g,c??`${fh(u)}/dashboard/integrations`);if(i===403&&g.trim().toLowerCase()==="forbidden")return new ge("request_failed","Your active account or organization cannot create cloud sessions. Switch to Personal or another organization in Settings → Account, then try again.",void 0,i);return new ge("request_failed",g,void 0,i)}class L_{options;apiBaseUrl;appBaseUrl;fetchImpl;createTimeoutMs;unconfirmedHandoffCreates=new Set;completedHandoffCreates=new Map;constructor(i){this.options=i,this.apiBaseUrl=fh(i.apiBaseUrl),this.appBaseUrl=fh(i.appBaseUrl),this.fetchImpl=i.fetch??fetch,this.createTimeoutMs=i.createTimeoutMs??wX}async request(i,l={},u,c,g){let b=!1,I;while(!0){let k;try{k=typeof c==="string"?c:await this.options.getAuthToken()}catch(A){if(I)throw Wp(401,void 0,this.appBaseUrl,u);throw A}if(!k?.trim())throw new ge("authentication_required","Sign in to Cline before starting a cloud session.");if(k.trim()===I)throw new ge("authentication_required","The cloud session credential was rejected. Sign in again.");if(typeof c==="object"){if(c.subject?zp(k.trim())!==c.subject:k.trim()!==c.token)throw new ge("authentication_required","The signed-in account changed during cloud session creation.");c.token=k.trim()}g?.();let T=await this.fetchImpl(`${this.apiBaseUrl}${i}`,{...l,signal:l.signal??AbortSignal.timeout(yl),headers:{Accept:"application/json",Authorization:`Bearer ${k.trim()}`,...l.body?{"Content-Type":"application/json"}:{},...l.headers}}),E=T.status===204?void 0:await T.json().catch(()=>{return});if(!T.ok){if(T.status===401&&typeof c==="object"&&!b&&c.subject){b=!0,I=k.trim();continue}throw Wp(T.status,E,this.appBaseUrl,u)}return E?.data}}async list(i){return await this.listWithToken(i)}async listWithToken(i,l,u=!1){let c=i?.trim()?`?organizationId=${encodeURIComponent(i.trim())}`:"";return(await this.request(`/api/v1/session${c}`,{},void 0,l)??[]).flatMap((g)=>{if(!g||typeof g!=="object"||typeof g.id!=="string")return[];return[{...g,title:!u&&Ab(g.title)?void 0:g.title,repoContext:g.repoContext&&typeof g.repoContext==="object"?g.repoContext:{},metadata:{...g.metadata&&typeof g.metadata==="object"?g.metadata:{},...!u&&Ab(g.title)?{createRequestTitle:g.title}:{}}}]})}async listRepositories(i){let l=i?.trim(),u=l?`${this.appBaseUrl}/dashboard/organization/integrations`:`${this.appBaseUrl}/dashboard/integrations`,c=l?`/api/v1/organizations/${encodeURIComponent(l)}/integrations/github/repositories`:"/api/v1/integrations/github/repositories";try{let g=await this.request(c)??[];return{connected:!0,connectUrl:u,repositories:g.flatMap((b)=>{let I=Number(b.id),k=String(b.html_url??b.clone_url??"").trim();if(!Number.isSafeInteger(I)||I<=0||!k)return[];let T=String(b.name??"").trim();return[{id:I,name:T,fullName:String(b.full_name??(T||k)).trim(),url:k,defaultBranch:String(b.default_branch??"").trim()}]})}}catch(g){if(g instanceof ge&&g.code==="session_not_found")return{connected:!1,connectUrl:u,repositories:[]};throw g}}async listBranches(i,l,u={}){if(!Number.isSafeInteger(i)||i<=0)throw new ge("request_failed","Select a GitHub repository before loading branches.");let c=l?.trim(),g=c?`/api/v1/organizations/${encodeURIComponent(c)}/integrations/github/repositories/${i}/branches`:`/api/v1/integrations/github/repositories/${i}/branches`,b=new URLSearchParams,I=u.query?.trim(),k=u.cursor?.trim();if(I)b.set("query",I);if(k)b.set("cursor",k);let T=b.size>0?`${g}?${b}`:g;try{let E=await this.request(T),A=Array.isArray(E)?E:Array.isArray(E?.items)?E.items:[],C=I?.toLowerCase();return{available:!0,branches:A.flatMap((N)=>{let O=String(N.name??"").trim();return O&&(!Array.isArray(E)||!C||O.toLowerCase().includes(C))?[O]:[]}),nextToken:Array.isArray(E)?"":String(E?.nextToken??"").trim()}}catch(E){if(E instanceof ge&&E.code==="session_not_found")return{available:!1,branches:[]};throw E}}async status(i,l={}){return await this.request(`/api/v1/session/${encodeURIComponent(i)}/status`,{signal:l.signal?AbortSignal.any([l.signal,AbortSignal.timeout(yl)]):void 0},void 0,l.authToken)}async create(i){if(i.handoff&&typeof i.handoff.onCreating!=="function")throw new ge("request_failed","Cloud handoff requires an onCreating callback to persist creation intent before dispatch.");let l=(await this.options.getAuthToken())?.trim();if(!l)throw new ge("authentication_required","Sign in to Cline before starting a cloud session.");let u={token:l,subject:zp(l)},c=SX(i.requestId?.trim()||vX()),g=i.handoff?`${u.subject??l}/${i.organizationId??""}/${i.requestId?.trim()??""}`:void 0;if(i.handoff&&!i.requestId?.trim())throw new ge("request_failed","A stable request id is required for cloud handoff creation.");let b=async()=>(await this.listWithToken(i.organizationId??void 0,u,!0)).filter((C)=>C.title===c&&C.repoContext.repoUrl===i.repoUrl&&C.metadata.modelId===i.modelId&&(!i.branch?.trim()||C.repoContext.branch===i.branch.trim())),I=async(C)=>{if(C.status==="failed"||C.expiredAt&&Date.parse(C.expiredAt)<=Date.now()){let O=new ge(C.status==="failed"?"session_failed":"session_expired","The recovered cloud handoff workspace is no longer usable.");try{await this.deleteWithAuth(C.id,u)}catch(L){if(!(L instanceof ge&&(L.code==="session_not_found"||L.code==="session_expired")))throw AggregateError([O,L],"The unusable recovered cloud handoff workspace could not be removed.")}if(g)this.unconfirmedHandoffCreates.delete(g),this.completedHandoffCreates.delete(g);throw await i.handoff?.onOuterSessionRemoved?.(C.id),O}await i.handoff?.onOuterSessionCreated(C.id,{created:!1});let N={sessionId:C.id,status:C.status,sandboxUrl:C.sandboxUrl,cleanupAuthToken:u.token};if(g)this.unconfirmedHandoffCreates.delete(g),this.completedHandoffCreates.set(g,N);return N};if(g){let C=await b();if(C.length>1)throw new ge("request_failed","Cloud handoff creation is ambiguous; inspect your cloud session list before continuing.");if(C[0])return await I(C[0]);let N=this.completedHandoffCreates.get(g);if(N){try{await this.request(`/api/v1/session/${encodeURIComponent(N.sessionId)}/status`,{},void 0,u)}catch(O){if(O instanceof ge&&(O.code==="session_not_found"||O.code==="session_expired"))await i.handoff?.onOuterSessionRemoved?.(N.sessionId),this.completedHandoffCreates.delete(g),this.unconfirmedHandoffCreates.delete(g);throw O}return await i.handoff?.onOuterSessionCreated(N.sessionId,{created:!1}),{...N,cleanupAuthToken:u.token}}if(this.unconfirmedHandoffCreates.has(g))throw new ge("request_failed","Cloud handoff creation is still unconfirmed. Recover the original request before creating another workspace.");this.unconfirmedHandoffCreates.add(g)}try{await i.handoff?.onCreating()}catch(C){if(g)this.unconfirmedHandoffCreates.delete(g);throw C}let k=new AbortController,T=setTimeout(()=>k.abort(),this.createTimeoutMs),E,A=!1;try{let C=await this.request("/api/v1/session",{method:"POST",body:JSON.stringify({modelId:i.modelId,repoUrl:i.repoUrl,...i.sandboxType?{sandboxType:i.sandboxType}:{},title:c,...i.branch?.trim()?{branch:i.branch.trim()}:{},...i.organizationId?.trim()?{organizationId:i.organizationId.trim()}:{}}),signal:k.signal},i.organizationId?.trim()?`${this.appBaseUrl}/dashboard/organization/integrations`:void 0,u,()=>{A=!0}),N=C?.sessionId?.trim();if(!N)throw new ge("request_failed","The cloud session service returned no session id.");E=N,await this.persistHandoffOuterSession(i,N,u,g);let O={sessionId:N,status:C.status?.trim()||"provisioning",sandboxUrl:C.sandboxUrl?.trim()??"",cleanupAuthToken:u.token};if(g)this.unconfirmedHandoffCreates.delete(g),this.completedHandoffCreates.set(g,O);return O}catch(C){if(E)throw C;let N=!A||C instanceof ge&&(C.status!==void 0&&C.status>=400&&C.status<500&&C.status!==408&&C.status!==409||["authentication_required","github_not_connected","session_not_found","session_expired"].includes(C.code));if(g&&N)throw this.unconfirmedHandoffCreates.delete(g),new O_(C);if(k.signal.aborted||!(C instanceof ge)||C instanceof ge&&C.code==="request_failed"&&(C.status===void 0||C.status>=500||C.status===408||C.status===409)){let O=[];try{O=await b()}catch(D){if(i.handoff)throw AggregateError([C,D],"Cloud handoff creation is unconfirmed and its session list could not be checked.")}if(!i.handoff&&!N&&O.length!==1)throw new N_(C);if(O.length>1)throw new ge("request_failed","Cloud session creation had an ambiguous result. Check your cloud session list before trying again.");let L=O[0];if(L){if(i.handoff)return await I(L);return{sessionId:L.id,status:L.status,sandboxUrl:L.sandboxUrl,cleanupAuthToken:u.token}}}else if(g)this.unconfirmedHandoffCreates.delete(g);throw C}finally{clearTimeout(T)}}async persistHandoffOuterSession(i,l,u,c){if(!i.handoff)return;try{await i.handoff.onOuterSessionCreated(l,{created:!0})}catch(g){try{await this.deleteWithAuth(l,u.token)}catch(b){if(!(b instanceof ge&&(b.code==="session_not_found"||b.code==="session_expired")))throw AggregateError([g,b],`Cloud session ${l} was created but its recovery record could not be saved or its sandbox removed.`)}if(c)this.unconfirmedHandoffCreates.delete(c);throw await i.handoff.onOuterSessionRemoved?.(l),g}}async waitUntilReady(i,l,u){l=AbortSignal.any([l,AbortSignal.timeout(this.createTimeoutMs)]);let c=await this.options.getAuthToken(),g=c?{token:c,subject:zp(c)}:void 0;while(!l.aborted){let b;try{b=await this.request(`/api/v1/session/${encodeURIComponent(i)}/status`,{signal:AbortSignal.any([l,AbortSignal.timeout(yl)])},void 0,g)}catch(k){if(l.aborted)throw k;if(k instanceof ge&&k.code!=="request_failed")throw k;await Cb(l);continue}let I=b?.status?.trim().toLowerCase();if(u?.({phase:$_(b?.phase)}),I==="ready"||I==="active")return;if(I==="failed")throw new ge("session_failed",b?.statusReason?.trim()||"The cloud sandbox could not be prepared.");if(I!=="provisioning")throw new ge("request_failed","The cloud session service returned an unexpected provisioning status.");await Cb(l)}throw l.reason}async resume(i,l){return await this.request(`/api/v1/session/${encodeURIComponent(i)}/resume`,{method:"POST",signal:l?AbortSignal.any([l,AbortSignal.timeout(yl)]):void 0})}async delete(i,l){await this.deleteWithAuth(i,l)}async deleteWithAuth(i,l){let u;try{await this.request(`/api/v1/session/${encodeURIComponent(i)}`,{method:"DELETE"},void 0,l)}catch(c){if(!(c instanceof ge)||c.code!=="session_not_found"&&c.code!=="session_expired")throw c;u=c}for(let[c,g]of this.completedHandoffCreates)if(g.sessionId===i)this.completedHandoffCreates.delete(c),this.unconfirmedHandoffCreates.delete(c);if(u)throw u}async updateTitle(i,l){return await this.request(`/api/v1/session/${encodeURIComponent(i)}`,{method:"PATCH",body:JSON.stringify({title:l})})}async history(i){let l=await this.options.getAuthToken();if(!l?.trim())throw new ge("authentication_required","Sign in to Cline to load this session's history.");let u=await this.fetchImpl(`${this.apiBaseUrl}/api/v1/session/${encodeURIComponent(i)}/history`,{headers:{Accept:"application/json",Authorization:`Bearer ${l.trim()}`},signal:AbortSignal.timeout(yl)});if(u.status===404)return null;let c=await u.json().catch(()=>{return});if(!u.ok)throw Wp(u.status,c,this.appBaseUrl);if(!c||typeof c!=="object"||!("version"in c)||c.version!==1||!("messages"in c)||!Array.isArray(c.messages))throw new ge("request_failed","Invalid archived session history");return c.messages}}function xb(i){return i.map((l)=>{let u=l&&typeof l==="object"?l:{};return{role:u.role,content:u.content}})}function Rb(i,l){return i.length===l.length&&JSON.stringify(xb(i))===JSON.stringify(xb(l))}class D_ extends Error{constructor(i,l){super(`Cloud transcript verification failed (local ${i} messages, cloud ${l}).`);this.name="CloudHandoffTranscriptMismatchError"}}function EX(i,l){if(!i||typeof i!=="object")return;let u=i,c=typeof u.id==="string"?u.id.trim():"";if(!c)return;let g=typeof u.display_name==="string"?u.display_name.trim():typeof u.displayName==="string"?u.displayName.trim():"",b=typeof u.name==="string"?u.name.trim():"";return{id:c,name:g||b||c,catalogId:l}}function Kp(i,l){return Array.isArray(i)?i.flatMap((u)=>{let c=EX(u,l);return c?[c]:[]}):[]}async function AX(i,l={}){let u=i.trim(),c=u.length;while(c>0&&u[c-1]==="/")c--;let g=u.slice(0,c),b=async(D)=>{let U=await(l.fetchImpl??fetch)(`${g}${D}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(1e4)});if(!U.ok)throw Error(`HTTP ${U.status}`);return await U.json()},I,k;try{[I,k]=await Promise.all([b("/api/v1/ai/cline/models"),b("/api/v1/ai/cline/recommended-models")])}catch(D){throw Error("Could not load the cloud model catalog.",{cause:D})}let T=I&&typeof I==="object"?I:void 0,E=Kp(Array.isArray(I)?I:T?.data,"cline"),A=k&&typeof k==="object"?k:void 0,C=A?.data&&typeof A.data==="object"?A.data:A,N=Kp(C?.clinePass,"cline-pass"),O=Kp(C?.clineCloud,"cline-cloud"),L=new Set;return[...l.isOrganizationSession?[]:N,...O,...E].filter((D)=>{if(L.has(D.id))return!1;return L.add(D.id),!0})}function Gp(i){return Array.isArray(i?.sessions)?i.sessions.filter((l)=>Boolean(l)&&typeof l==="object"&&!Array.isArray(l)):[]}function Pb(i){let l=i.updatedAt;return typeof l==="number"?l:Date.parse(String(l??""))||0}function Mb(i){let l=i?.metadata&&typeof i.metadata==="object"?i.metadata:void 0;return String(l?.model??i?.model??"").trim()}function Xp(i){let l=i.metadata&&typeof i.metadata==="object"?i.metadata:void 0;return!String(l?.parentSessionId??i.parentSessionId??"").trim()}function U_(i,l="text"){if(!i||typeof i!=="object"||Array.isArray(i))return"";let u=i.content;if(typeof u==="string")return l==="text"?u.trim():"";if(!Array.isArray(u))return"";return u.map((c)=>c&&typeof c==="object"&&!Array.isArray(c)?l==="thinking"&&c.type==="redacted_thinking"?"[redacted]":String(c[l]??""):"").join("").trim()}function au(i){let l=i.trim(),u=l.match(/^<user_input\b[^>]*>([\s\S]*)<\/user_input>$/);return(u?u[1]:l).trim()}function Ku(i,l,u){let c=au(u);return i.filter((g)=>Boolean(g)&&typeof g==="object"&&!Array.isArray(g)&&String(g.role??"").toLowerCase()==="user"&&(c!==""||dN(g))&&au(U_(g))===c).length+l.filter((g)=>au(g.prompt)===c).length}function F_(i){return i.flatMap((l)=>{if(l.event!=="session.pending_prompt_submitted")return[];let u=l.payload?.prompt&&typeof l.payload.prompt==="object"&&!Array.isArray(l.payload.prompt)?l.payload.prompt:void 0,c=String(u?.id??"").trim();if(!c)return[];return[{id:c,prompt:String(u?.prompt??""),steer:u?.delivery==="steer",attachmentCount:typeof u?.attachmentCount==="number"?u.attachmentCount:0,userImages:Array.isArray(u?.userImages)?u.userImages.filter((g)=>typeof g==="string"):void 0}]})}var CX=new Set(["run.completed","run.aborted","run.failed"]),xX=new Set(["assistant.delta","assistant.finished","reasoning.delta","reasoning.finished"]);function Nb(i,l){return i.filter((u)=>Boolean(u)&&typeof u==="object"&&!Array.isArray(u)&&String(u.role??"").toLowerCase()==="assistant").map((u)=>U_(u,l)).filter(Boolean)}function Ob(i,l,u="text"){let c=new Map;for(let g of Nb(l,u))c.set(g,(c.get(g)??0)+1);return Nb(i,u).filter((g)=>{let b=c.get(g)??0;if(b===0)return!0;if(b===1)c.delete(g);else c.set(g,b-1);return!1})}function Gu(i,l,u=new Set){if(!i||typeof i!=="object")return u;if(Array.isArray(i)){for(let b of i)Gu(b,l,u);return u}let c=i,g=l==="tool_use"?c.id:c.tool_use_id;if(c.type===l&&typeof g==="string")u.add(g);for(let b of Object.values(c))Gu(b,l,u);return u}function $b(i,l="assistant"){let u="",c="";for(let g of i)if(g.event===`${l}.delta`)c+=l==="reasoning"&&g.payload?.redacted&&!g.payload?.text?"[redacted]":typeof g.payload?.text==="string"?g.payload.text:"";else if(g.event===`${l}.finished`){let b=g.payload?.[l==="assistant"?"text":"reasoning"],I=typeof b==="string"&&b?b:c;if(I)u=I;c=""}return(u||c).trim()}function RX(i,l,u={}){let c=u.queueSnapshotApplied!==!1,g=Ob(l,u.baselineMessages??[]),b=Ob(l,u.baselineMessages??[],"thinking"),I=Gu(l,"tool_use"),k=Gu(l,"tool_result"),T=new Set(i.slice(0,u.messagesSnapshotEventCutoff??i.length)),E=new Set,A=new Map;for(let D of i.slice(0,u.messagesSnapshotEventCutoff??i.length)){let U=F_([D])[0];if(!U)continue;let F=au(U.prompt),j=A.get(F)??Math.max(0,Ku(l,[],F)-Ku(u.baselineMessages??[],[],F));if(A.set(F,Math.max(0,j-1)),j>0)E.add(D)}let C=[...c?i.slice(u.queueSnapshotEventCutoff??i.length):i].reverse().find((D)=>D.event==="session.pending_prompts"),N=[],O=[],L=(D)=>{if(O.length===0)return;let U=O.filter((oe)=>T.has(oe)),F=(oe)=>{if(!D)return-1;let G=[...U].reverse().findIndex((Pe)=>Pe.event===`${oe}.finished`),se=G<0?-1:U.length-1-G;return se>=0||O.at(-1)?.event==="run.aborted"?se:U.length-1},j=F("assistant"),H=F("reasoning"),Q=$b(U.slice(0,j+1)),z=Q?g.findIndex((oe)=>oe.endsWith(Q)):-1,W=z>=0;if(W)g.splice(z,1);let ee=$b(U.slice(0,H+1),"reasoning"),te=ee?b.findIndex((oe)=>oe.endsWith(ee)):-1;if(te>=0)b.splice(te,1);for(let[oe,G]of O.entries()){if(E.has(G)){N.push({...G,payload:{...G.payload,transcriptReflected:!0}});continue}if(T.has(G)&&xX.has(G.event)&&(G.event.startsWith("reasoning.")?te>=0&&oe<=H:W&&oe<=j))continue;if(G.event==="session.pending_prompts"&&G!==C)continue;if(T.has(G)&&G.event.startsWith("tool.")){let se=String(G.payload?.toolCallId??"").trim();if(k.has(se)||G.event==="tool.started"&&I.has(se))continue}N.push(G)}O=[]};for(let D of i)if(O.push(D),CX.has(D.event))L(!0);return L(!1),N}function Jp(i){let l=structuredClone(i),u=(c)=>{if(!c||typeof c!=="object"||Object.isFrozen(c))return;for(let g of Object.values(c))u(g);Object.freeze(c)};return u(l),l}function eg(i){let l=i?.trim();return l?me(l).slice(0,120):void 0}function q_(i){if(typeof i==="string")return i;if(Array.isArray(i)){let l=[];for(let u of i){if(typeof u==="string"){if(u.trim())l.push(u);continue}if(!u||typeof u!=="object")continue;let c=u,g=typeof c.type==="string"?c.type:"",b=g==="text"?String(c.text??""):g==="thinking"?String(c.thinking??""):g==="tool_use"?`[tool] ${String(c.name??"tool_call")}`:g==="tool_result"?`[tool_result]
1063
+ ${q_(c.content)}`:g==="image"?"[image]":g==="redacted_thinking"?"[redacted_thinking]":typeof c.text==="string"?c.text:"";if(b.trim())l.push(b)}return l.join(`
1064
+ `)}if(i&&typeof i==="object"){let l=i;if(typeof l.text==="string")return l.text}return""}function PX(i){let l=eg(i??void 0);if(!l)return;return l.split(`
1065
+ `)[0]?.trim().slice(0,70)||void 0}function MX(i){for(let l of["user","assistant"])for(let u of i){if(!u||typeof u!=="object")continue;let c=u;if(c.role!==l)continue;let g=eg(q_(c.content));if(!g)continue;return g.split(`
1066
+ `)[0]?.trim().slice(0,70)||void 0}return}function NX(i){let l=i.metadata&&typeof i.metadata==="object"?eg(i.metadata.title):void 0;if(l)return l.slice(0,70);let u=PX(i.prompt);if(u)return u;let c=i.messages?MX(i.messages):void 0;if(c)return c;return`Session ${i.sessionId.slice(-6)}`}function OX(i,l,u,c){let g=l.payload??{},b=()=>{let k=u.get(c);if(k===void 0||!i.messages[k]||i.messages[k]?.role!=="assistant")k=i.messages.length,i.messages.push({role:"assistant",content:[]}),u.set(c,k);let T=i.messages[k];if(!Array.isArray(T.content))T.content=[];return T.content},I=(k,T,E)=>{let A=b(),C=A.at(-1);if(C?.type===k)C[T]=`${C[T]??""}${E}`;else A.push({type:k,[T]:E})};switch(l.event){case"assistant.delta":if(typeof g.text==="string")I("text","text",g.text);return;case"reasoning.delta":if(typeof g.text==="string"&&g.text)I("thinking","thinking",g.text);else if(g.redacted===!0)b().push({type:"redacted_thinking",data:""});return;case"assistant.finished":u.delete(c);return;case"assistant.media":if(g.media)b().push({type:"media",media:structuredClone(g.media)});return;case"tool.started":{let k=String(g.toolCallId??"");if(k&&!i.messages.some((T)=>Array.isArray(T.content)&&T.content.some((E)=>E.type==="tool_use"&&E.id===k)))b().push({type:"tool_use",id:k,name:String(g.toolName??"tool"),input:structuredClone(g.input??{})});return}case"tool.finished":{let k=String(g.toolCallId??"");if(k&&!i.messages.some((T)=>Array.isArray(T.content)&&T.content.some((E)=>E.type==="tool_result"&&E.tool_use_id===k)))i.messages.push({role:"user",content:[{type:"tool_result",tool_use_id:k,content:typeof g.output==="string"?g.output:JSON.stringify(g.output??""),is_error:Boolean(g.error)}]}),u.delete(c);return}case"usage.updated":i.usage=structuredClone(g.totals??g.delta??{});return;case"session.pending_prompts":{let k=Array.isArray(g.prompts)?g.prompts:[];i.promptsInQueue=k.map((T)=>({id:String(T.id??""),prompt:String(T.prompt??""),steer:T.delivery==="steer",attachmentCount:typeof T.attachmentCount==="number"?T.attachmentCount:0,userImages:Array.isArray(T.userImages)?T.userImages.filter((E)=>typeof E==="string"):void 0})).filter((T)=>T.id&&(T.prompt||T.attachmentCount));return}case"session.pending_prompt_submitted":{let k=g.prompt,T=String(k?.id??"");if(!T||i.lastQueuedPromptStartId===T)return;if(i.lastQueuedPromptStartId=T,i.promptsInQueue=i.promptsInQueue.filter((E)=>E.id!==T),g.transcriptReflected!==!0)i.messages.push({role:"user",content:[{type:"text",text:String(k?.prompt??"")}]});i.busy=!0,i.status="running",i.endedAt=void 0,u.delete(c);return}case"run.started":case"session.attached":case"session.updated":{if(typeof l.sequence==="number"&&i.lastHubStatusSequence!==void 0&&l.sequence<i.lastHubStatusSequence)return;if(typeof l.sequence==="number")i.lastHubStatusSequence=l.sequence;let k=g.session,T=typeof k?.status==="string"?k.status:l.event==="run.started"?"running":i.status,E=T==="pending"?"running":T;if(l.event==="session.updated"&&E==="running"&&i.endedAt!==void 0&&!i.busy)return;let A=i.busy;if(i.status=E,i.busy=E==="running",l.event==="run.started"){if(!A)u.delete(c);i.endedAt=void 0}return}case"run.completed":case"run.failed":case"run.aborted":{if(typeof l.sequence==="number"&&i.lastHubStatusSequence!==void 0&&l.sequence<i.lastHubStatusSequence)return;if(typeof l.sequence==="number")i.lastHubStatusSequence=l.sequence;i.status=typeof g.reason==="string"?g.reason:l.event==="run.failed"?"error":l.event==="run.aborted"?"aborted":"completed",i.busy=!1,i.endedAt=Date.now(),u.delete(c);return}}}function Vp(i){return i instanceof Error&&i.name==="HubTransportError"&&["hub_connect_timeout","hub_connect_failed","hub_connection_closed","hub_connection_not_open"].includes(String(i.code))}function Yp(i,l){return i instanceof Error&&i.name==="HubCommandError"&&i.code==="hub_command_timeout"&&(!l||i.command===l)}var nt="/workspace",$X=30000,LX=2000,DX=2000,j_="IMPORTANT: GitHub authentication is handled automatically by the infrastructure. An egress proxy transparently injects credentials into all GitHub traffic. You do NOT need to set up, configure, or manage any tokens, API keys, or credentials, and you must never run `gh auth login` or attempt to authenticate manually. "+"The GitHub CLI (`gh`) is installed and already authenticated — prefer it for GitHub work "+"(`gh pr create`, `gh pr diff`, `gh issue list`, `gh api`, ...). `git` push and pull are authenticated the same way. "+"Simply run the commands normally — credentials are injected transparently.";function UX(i){let l=`cline/${(i.metadata.taskId?.trim()||i.id).slice(-8).toLowerCase()}`,u=i.sandboxType==="resumable"||i.metadata.sandboxType==="resumable";return`${j_}
1067
+
1068
+ Do all work for this task on the branch \`${l}\`: create it from the current checkout before your first change (or check it out if it already exists), and never commit directly to the default branch. `+(u?"Commit and push only when the user asks. ":`SAVE YOUR WORK: This sandbox is temporary. Push your progress to origin so it remains available outside the sandbox. The branch \`${l}\` is a backup of your work-in-progress, not a finished deliverable, so commit to it freely even when the work is incomplete. Commit regularly as you complete meaningful steps, using clear, descriptive messages. The first time you commit, push the branch with \`git push -u origin ${l}\`, and push again after each later commit. `)+"Do not force-push or amend commits that are already pushed unless the user explicitly asks."}function Qp(i){if(!i)return nt;if(Wu.isAbsolute(i)||i.includes("\\")||i.split("/").some((u)=>!u||u==="."||u===".."))throw new ge("request_failed","The handoff workspace path must stay inside the repository.");let l=Wu.join(nt,i);if(!l.startsWith(`${nt}/`))throw new ge("request_failed","The handoff workspace path must stay inside the repository.");return l}function tg(i){let l=i.metadata.cwd;return typeof l==="string"&&Wu.normalize(l)===l&&(l===nt||l.startsWith(`${nt}/`))?l:nt}function Lb(i){let l=i?.metadata&&typeof i.metadata==="object"?i.metadata:void 0,u=l?.handoff&&typeof l.handoff==="object"?l.handoff:void 0;return String(u?.sourceSessionId??"").trim()}class gh extends Error{constructor(i){super(i instanceof Error?i.message:"Cloud conversation creation was not dispatched.",{cause:i});this.name="CloudHandoffSeedRejectedError"}}class yh extends ge{constructor(){super("request_failed","The connection was interrupted and Cline could not confirm whether this message was queued. Check the cloud session before resending it.");this.name="CloudQueueUnconfirmedError"}}class B_ extends Error{constructor(){super("The cloud session was created, but its transcript was not persisted. This cloud runtime cannot durably seed handoff transcripts and must use @cline/core 0.0.72 or newer. Updating the cloud runtime or pod is required; retrying /cloud against this same pod will not help.");this.name="CloudHandoffSeedUnsupportedError"}}function $s(i){let l=i.expiredAt?Date.parse(i.expiredAt):Number.NaN;return Number.isFinite(l)&&l<=Date.now()}function FX(i){return i.trim().startsWith("ses-")}function qX(i,l){let u=new URL(`/api/v1/session/${encodeURIComponent(l)}`,i);return u.protocol=u.protocol==="https:"?"wss:":"ws:",u.toString()}function Zp(i){return{config:{executionTarget:"cloud",provider:"cline",providerId:"cline",model:i.metadata.modelId??"",modelId:i.metadata.modelId??"",repoUrl:i.repoContext.repoUrl??"",branch:i.repoContext.branch??"",cwd:tg(i),workspaceRoot:nt},messages:[],promptsInQueue:[],busy:!1,startedAt:Date.parse(i.createdAt)||Date.now(),endedAt:$s(i)&&i.expiredAt?Date.parse(i.expiredAt):void 0,status:i.status,attachedViaHub:!0}}function em(i,l,u){return{sessionId:i.id,origin:"cloud",executionTarget:"cloud",status:l,provider:"cline",model:i.metadata.modelId??"",repoUrl:i.repoContext.repoUrl??"",branch:i.repoContext.branch??"",cwd:tg(i),workspaceRoot:nt,...u?.trim()?{prompt:u.trim()}:{},metadata:{origin:"cloud",repoUrl:i.repoContext.repoUrl??"",git:{url:i.repoContext.repoUrl??"",branch:i.repoContext.branch??""}}}}function Db(i){return{sessionId:i.id,origin:"cloud",executionTarget:"cloud",status:i.status,provider:"cline",model:i.metadata.modelId??"",cwd:tg(i),workspaceRoot:nt,repoUrl:i.repoContext.repoUrl??"",branch:i.repoContext.branch??"",startedAt:i.createdAt,...i.lastActivityAt?{lastActivityAt:i.lastActivityAt}:{},endedAt:$s(i)?i.expiredAt??void 0:i.status==="failed"?i.lastActivityAt??i.createdAt:void 0,updatedAt:i.updatedAt,...i.title?.trim()?{title:i.title.trim()}:{},metadata:{...i.title?.trim()?{title:i.title.trim()}:{},origin:"cloud",...i.metadata.provisioningPhase?{provisioningPhase:i.metadata.provisioningPhase}:{},repoUrl:i.repoContext.repoUrl??"",git:{url:i.repoContext.repoUrl??"",branch:i.repoContext.branch??""}}}}function jX(i){if(typeof i!=="string")return i;try{return JSON.parse(i)}catch{return i}}function BX(i,l){let u=[...i??[]],c=new Set(u.map((g)=>g.id));for(let g of l)if(!c.has(g.id))u.push(g);return u}class H_{options;sessionGenerations=new Map;sessions=new Map;approvals=new Map;listeners=new Set;detachedSessions=new Set;restoredOptions=new Map;authoritativeMessages=new Map;streamingMessages=new Map;disposed=!1;connections=new Map;connectionPromises=new Map;knownSessions=new Map;unlistedSessions=new Map;pendingInitialTasks;lastListedSessions=[];lastListedOrganizationId;discoveryRefresh;unconfirmedInnerCreates=new Set;createRequests=new Map;provisioningControllers=new Map;sendAbortTokens=new Map;titleWrites=new Map;deletingSessions=new Set;createHubClient;constructor(i){this.options=i,this.pendingInitialTasks=i.pendingInitialTasks??new Map,this.createHubClient=i.createHubClient??((l)=>new sa(l))}restoreCreationOptions(i,l){if(this.restoredOptions.set(i,structuredClone(l)),this.pendingInitialTasks.has(i))this.pendingInitialTasks.set(i,{...this.pendingInitialTasks.get(i),...structuredClone(l)});let u=this.sessions.get(i);if(u)Object.assign(u.config,structuredClone(l))}seedSessionState(i,l){if(!this.sessions.has(i))this.sessions.set(i,structuredClone(l))}stateFromRecord(i){let l=Zp(i);return Object.assign(l.config,this.pendingInitialTasks.get(i.id),this.restoredOptions.get(i.id)),l}getSnapshot(i){let l=this.knownSessions.get(i),u=this.sessions.get(i)??(l?this.stateFromRecord(l):void 0);if(!u)return;let c=this.connections.get(i);return Jp({...u,sessionId:i,record:l,approvals:Array.from(this.approvals.values()).filter((g)=>g.item.sessionId===i).map((g)=>g.item),connectionState:this.detachedSessions.has(i)||this.disposed?"detached":c?.reconnectResolution||c?.rehydrationPromise?"reconnecting":c?c.connected?"connected":c.reconnecting?"reconnecting":"connecting":this.connectionPromises.has(i)?"connecting":"detached",transcriptKnown:c?.transcriptKnown??Boolean(l&&$s(l))})}subscribe(i,l){let u=(c)=>{if(!l||c.sessionId===l)i(c)};return this.listeners.add(u),()=>{this.listeners.delete(u)}}publish(i){let l=i.type==="snapshot"?Object.freeze(i):Jp(i);for(let u of this.listeners)try{u(l)}catch(c){this.options.logger?.error?.("Cloud session subscriber failed",{error:c})}}publishSnapshot(i,l=!1,u){this.cancelScheduledSnapshot(i);let c=this.getSnapshot(i);if(c)this.publish({type:"snapshot",sessionId:i,snapshot:c,replace:l,cause:u});else this.publish({type:"removed",sessionId:i})}snapshotTimers=new Map;cancelScheduledSnapshot(i){clearTimeout(this.snapshotTimers.get(i)),this.snapshotTimers.delete(i)}scheduleSnapshot(i){if(this.disposed||this.detachedSessions.has(i)||this.snapshotTimers.has(i))return;let l=setTimeout(()=>this.publishSnapshot(i),100);l.unref?.(),this.snapshotTimers.set(i,l)}notify(i,l){let u=String(l.sessionId??"");if(i==="cloud_session_sync_failed")this.publish({type:"sync_failed",sessionId:u,message:String(l.message??"Cloud synchronization failed")});else this.publishSnapshot(u,i==="cloud_session_rehydrated",i==="chat_session_status"?"status":i==="chat_session_ended"?"ended":i==="tool_approval_state"?"approvals":void 0)}applyLiveEvent(i,l){let u=this.sessions.get(i);if(u)OX(u,l,this.streamingMessages,i)}async respondApproval(i,l,u){this.assertSessionActive(i);let c=this.approvals.get(`${i}:${l}`);if(!c){if(!this.connections.has(i))throw Error("This cloud session connection is closed; reopen the session to respond.");throw new ge("request_failed","This approval was already resolved or is no longer available.")}await c.resolve(u)}async detach(i){this.detachedSessions.add(i),this.sessionGenerations.set(i,(this.sessionGenerations.get(i)??0)+1),this.connectionPromises.delete(i),this.sendAbortTokens.set(i,Symbol()),this.abortProvisioningControllers(i,Error("Cloud viewer detached")),await this.disposeConnection(i),this.publishSnapshot(i)}isCloudSession(i){return FX(i)||this.knownSessions.has(i)||this.connections.has(i)||this.sessions.get(i)?.config.executionTarget==="cloud"}getCachedDiscoveryRecord(i){let l=this.knownSessions.get(i);return l?Db(l):void 0}async getCrossScopeDiscoveryRecord(i){let l=this.getCachedDiscoveryRecord(i);if(!l)return;try{let u=(await this.options.api.status(i)).status?.trim();return u?{...l,status:u}:l}catch(u){if(u instanceof ge&&(u.code==="session_not_found"||u.code==="session_expired")){this.knownSessions.delete(i),this.unlistedSessions.delete(i),this.pendingInitialTasks.delete(i);return}return l}}async list(){return await this.listInOrganization(await this.resolveActiveOrganizationId())}async listInOrganization(i){if(this.disposed)throw Error("Cloud session controller was disposed");let l=(I)=>this.sessions.get(I)?.title??this.knownSessions.get(I)?.title,u=new Map([...this.knownSessions.keys(),...this.sessions.keys()].map((I)=>[I,l(I)])),c=(I)=>{let k=l(I.id);if(this.titleWrites.has(I.id)||k!==u.get(I.id))I.title=k??I.title},g=(await this.options.api.list(i)).map((I)=>this.preserveConnectedRuntimeModel(I));if(this.disposed)throw Error("Cloud session controller was disposed");this.lastListedOrganizationId=i,this.lastListedSessions=g;for(let I of g)c(I),this.knownSessions.set(I.id,I),this.unlistedSessions.delete(I.id);await Promise.all(Array.from(this.unlistedSessions.entries()).filter(([,I])=>I.organizationId===i).map(([I])=>this.getCrossScopeDiscoveryRecord(I)));let b=await Promise.all(g.map(async(I)=>{if(I.status!=="provisioning")return I;let k=await this.options.api.status(I.id).catch(()=>{return}),T=k?.status?.trim();if(!T)return I;return{...I,status:T,metadata:{...I.metadata,...$_(k?.phase)?{provisioningPhase:k?.phase}:{},...k?.statusReason?.trim()?{statusReason:k.statusReason.trim()}:{}}}}));if(this.disposed)throw Error("Cloud session controller was disposed");for(let I of b){c(I),this.knownSessions.set(I.id,I);let k=this.sessions.get(I.id);if(k)k.title=I.title;if(k?.status==="provisioning"&&I.status!=="provisioning")k.status=I.status;let T=this.connections.get(I.id);if(T)T.remote=I;let E=$s(I);if(E||I.status==="failed"||I.status==="suspended"){if(k)k.busy=!1,k.status=E?"expired":I.status,k.endedAt=E?Date.parse(I.expiredAt??"")||Date.now():Math.max(k.endedAt??0,Date.parse(I.lastActivityAt??I.createdAt)||0)||void 0;if(T)this.disposeConnection(I.id).catch(()=>{return})}}this.lastListedOrganizationId=i,this.lastListedSessions=b;for(let I of b)if(this.sessions.has(I.id))this.publishSnapshot(I.id);return Jp(b)}async handoffTargetExists(i){try{return await this.options.api.status(i),!0}catch(l){if(l instanceof ge&&(l.code==="session_not_found"||l.code==="session_expired"))return!1;throw l}}preserveConnectedRuntimeModel(i){let l=this.connections.get(i.id)?.remote.metadata,u=l?.cwd??this.knownSessions.get(i.id)?.metadata.cwd;return{...i,metadata:{...i.metadata,...l?.modelId?{modelId:l.modelId}:{},...u?{cwd:u}:{}}}}async refreshOrganization(){await this.resolveActiveOrganizationId({fresh:!0})}async resolveActiveOrganizationId(i){return await this.options.getActiveOrganizationId?.(i)}async listRepositories(){return await this.options.api.listRepositories(await this.resolveActiveOrganizationId())}async listModels(){if(this.disposed)throw Error("Cloud session manager was disposed");let i=await this.resolveActiveOrganizationId({fresh:!0}),l=await AX(this.options.apiBaseUrl,{isOrganizationSession:Boolean(i)});if(this.disposed)throw Error("Cloud session manager was disposed");return l}async prepareHandoffRepository(i){let l=await this.resolveActiveOrganizationId(),u=await this.options.api.listRepositories(l);if(!u.connected)throw new ge("github_not_connected","Connect GitHub before handing this session off to cloud.",u.connectUrl);let c=(g)=>g.trim().replace(/\.git$/i,"").replace(/\/+$/,"").toLowerCase();if(!u.repositories.some((g)=>c(g.url)===c(i)))throw new ge("github_not_connected",`The GitHub integration cannot access ${i}. Grant repository access before handing off.`,u.connectUrl);return l?{organizationId:l}:{}}async listBranches(i,l={}){return await this.options.api.listBranches(i,await this.resolveActiveOrganizationId(),l)}async listForDiscovery(i={}){let l,u=(async()=>{let k=await this.resolveActiveOrganizationId();l={organizationId:k};let T=this.discoveryRefresh?.organizationId===k?this.discoveryRefresh?.promise:void 0;if(!T){let E=this.listInOrganization(k).finally(()=>{if(this.discoveryRefresh?.promise===E)this.discoveryRefresh=void 0});this.discoveryRefresh={organizationId:k,promise:E},T=E}return{organizationId:k,records:await T}})(),c=()=>l?{organizationId:l.organizationId,records:this.lastListedOrganizationId===l.organizationId?this.lastListedSessions:[]}:void 0,g;if(i.timeoutMs===void 0)g=await u;else{let k;try{g=await Promise.race([u.catch((T)=>{if(!(T instanceof ge&&T.code==="authentication_required"))this.options.logger?.error?.("Cloud session discovery failed",{error:T});return c()}),new Promise((T)=>{k=setTimeout(()=>T(c()),Math.max(0,i.timeoutMs??0))})])}finally{if(k!==void 0)clearTimeout(k)}}if(!g)return[];let{organizationId:b,records:I}=g;return[...new Map([...Array.from(this.unlistedSessions.values()).filter((k)=>k.organizationId===b).map((k)=>k.record),...I].map((k)=>[k.id,k])).values()].map((k)=>{let T=Db(k),E=this.sessions.get(k.id);if(!E)return T;let A=E.title?.trim()||k.title?.trim();return{...T,status:E.status,prompt:E.prompt,endedAt:E.endedAt!==void 0?new Date(E.endedAt).toISOString():T.endedAt,metadata:{...T.metadata??{},title:NX({sessionId:k.id,metadata:A?{title:A}:void 0,prompt:E.prompt,messages:E.messages})}}})}async create(i){let l=i.requestId?.trim();if(!l)return await this.createOnce(i);let u=this.createRequests.get(l);if(u)return await u;let c=this.createOnce(i).finally(()=>{if(this.createRequests.get(l)===c)this.createRequests.delete(l)});return this.createRequests.set(l,c),await c}trackProvisioningController(i,l){let u=this.provisioningControllers.get(i);if(!u)u=new Set,this.provisioningControllers.set(i,u);return u.add(l),()=>{if(u.delete(l),u.size===0)this.provisioningControllers.delete(i)}}abortProvisioningControllers(i,l){let u=this.provisioningControllers.get(i);if(!u?.size)return!1;for(let c of u)c.abort(l);return!0}async waitUntilReady(i){this.detachedSessions.delete(i),this.assertSessionActive(i);let l=new AbortController,u=this.trackProvisioningController(i,l);try{await this.options.api.waitUntilReady(i,AbortSignal.any([l.signal,AbortSignal.timeout(610000)])),l.signal.throwIfAborted(),this.assertSessionActive(i),await this.refreshKnownSession(i)}finally{u()}}async seedHandoff(i,l){Qp(l.workspaceRelativePath),this.detachedSessions.delete(i);let u=await this.ensureConnection(i,{createInner:!0,handoffSeed:l});if(!u.innerSessionId)throw Error("Cloud Hub did not return an inner session id");return{innerSessionId:u.innerSessionId}}async verifyHandoffTranscript(i,l,u={}){let c=await this.ensureConnection(i),g=c.innerSessionId;if(!g)throw Error("Cloud Hub did not return an inner session id");let b=await c.client.command("session.messages",{sessionId:g},g);this.assertSessionActive(i,c);let I=b.payload?.messages;if(!Array.isArray(I))throw Error("Cloud runtime returned no transcript after seeding.");if(l.length>0&&I.length===0)throw new B_;if(!(u.allowAppendedMessages?I.length>=l.length&&Rb(l,I.slice(0,l.length)):Rb(l,I)))throw new D_(l.length,I.length);c.transcriptKnown=!0;let k=this.sessions.get(i);if(k)k.messages=structuredClone(I),this.authoritativeMessages.set(i,structuredClone(I)),this.streamingMessages.delete(i),this.publishSnapshot(i,!0)}async createOnce(i){if(this.disposed)throw Error("Cloud session manager was disposed");let l=Qp(i.workspaceRelativePath),u=i.organizationId===void 0?await this.resolveActiveOrganizationId({fresh:!0}):i.organizationId??void 0,c=i.handoff,g=!c,b=await this.options.api.create({...i,organizationId:u,...c&&{handoff:{...c,onOuterSessionCreated:async(L,D)=>{g=D?.created===!0,await c.onOuterSessionCreated(L,D)}}}});if(!b?.sessionId?.trim())throw new ge("request_failed","The cloud session service returned an unexpected response; please try again.");if(this.disposed){if(g&&this.options.lateCreateDisposition==="delete")await this.deleteProvisionedSessionAfterDispose(b.sessionId,b.cleanupAuthToken,i.handoff?.onOuterSessionRemoved);throw Error("Cline account changed while the cloud session was starting")}let I={id:b.sessionId,sandboxType:i.sandboxType,status:b.status,sandboxUrl:b.sandboxUrl,repoContext:{repoUrl:i.repoUrl,...i.branch?.trim()?{branch:i.branch.trim()}:{}},metadata:{modelId:i.modelId,cwd:l},createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()};this.knownSessions.set(I.id,I),this.unlistedSessions.set(I.id,{record:I,organizationId:u});let{autoApproveTools:k,thinking:T,reasoningEffort:E,mode:A,workspaceRelativePath:C}=i;this.pendingInitialTasks.set(I.id,{autoApproveTools:k,thinking:T,reasoningEffort:E,mode:A??"act",workspaceRelativePath:C});let N=this.stateFromRecord(I);N.prompt=i.initialPrompt?.trim()||void 0,N.config.mode=i.mode??"act",this.sessions.set(I.id,N);let O;try{if(i.handoff){let L=await i.handoff.resolveMessages();this.assertSessionActive(I.id),O=(await this.seedHandoff(I.id,{sourceSessionId:i.handoff.sourceSessionId,messages:L,mode:i.mode,workspaceRelativePath:i.workspaceRelativePath,config:{autoApproveTools:i.autoApproveTools,thinking:i.thinking,reasoningEffort:i.reasoningEffort},onSeeding:i.handoff.onSeeding})).innerSessionId}}catch(L){if(this.disposed&&g&&this.options.lateCreateDisposition==="delete")await this.deleteProvisionedSessionAfterDispose(I.id,b.cleanupAuthToken,i.handoff?.onOuterSessionRemoved);throw L}return this.assertSessionActive(I.id),this.notify("chat_session_status",{sessionId:I.id,status:N.status}),{sessionId:I.id,origin:"cloud",executionTarget:"cloud",status:I.status,provider:"cline",model:i.modelId,repoUrl:i.repoUrl,branch:i.branch??"",cwd:l,workspaceRoot:nt,...O?{innerSessionId:O}:{},...N.prompt?{prompt:N.prompt}:{}}}async deleteProvisionedSessionAfterDispose(i,l,u){this.knownSessions.delete(i),this.unlistedSessions.delete(i),this.pendingInitialTasks.delete(i),this.sessions.delete(i),await this.options.api.delete(i,l).then(()=>u?.(i)).catch((c)=>{this.options.logger?.log("Failed to clean up a cloud session created during an account change",{sessionId:i,error:c})})}async attach(i,l){let u=this.sessionGenerations.get(i)??0;if(this.detachedSessions.delete(i),l)this.restoreCreationOptions(i,l);let c=await this.ensureKnownSession(i);if(this.assertSessionActive(i),u!==(this.sessionGenerations.get(i)??0))throw Error("Cloud viewer detached during attachment");if(!this.sessions.has(i))this.sessions.set(i,this.stateFromRecord(c));if(c.status==="provisioning"||c.status==="failed")return em(c,c.status,this.sessions.get(i)?.prompt);if($s(c))return await this.disposeConnection(i),await this.attachExpired(c);let g;try{g=await this.ensureConnection(i)}catch(k){let T=await this.refreshKnownSession(i);if(T&&$s(T))return await this.disposeConnection(i),await this.attachExpired(T);throw k}await this.ensureAttached(g);let b=g.remote,I=this.sessions.get(i);return em(b,I?.status??b.status,I?.prompt)}async send(i,l,u,c,g,b){let I=this.sendAbortTokens.get(i),k=this.knownSessions.get(i);if(k&&$s(k))throw new ge("session_expired","This cloud session has expired; its sandbox is gone. Start a new cloud session to continue.");let T=await this.ensureConnection(i,{createInner:!0}),E=()=>this.disposed||T.disposed||this.deletingSessions.has(i)||this.sendAbortTokens.get(i)!==I,A=()=>{if(E())throw Error("Cloud session prompt cancelled")};if(A(),await T.reconnectResolution,A(),await this.ensureAttached(T),await T.reconnectResolution,A(),!T.transcriptKnown)await this.rehydrateAfterTransportDrop(i,T);A(),await this.updateModel(T,c),await T.reconnectResolution,A();let C=T.innerSessionId;if(!C)throw Error("Cloud Hub session was not initialized");let N=this.sessions.get(i),O=u??(N?.busy?"queue":void 0),L=Ku(N?.messages??[],N?.promptsInQueue??[],l),D=O!=="queue"&&O!=="steer",U=N&&O!=="queue"?{role:"user",content:[{type:"text",text:l}]}:void 0;if(N&&U)N.messages=[...N.messages,U];let F=()=>{if(N&&U)N.messages=N.messages.filter((z)=>z!==U),this.publishSnapshot(i)};if(N&&D){let z=N.status!=="running";if(N.busy=!0,N.status="running",z)this.publishSnapshot(i,!1,"status")}let j=new Set,H=!1,Q=()=>{if(H||E())return;H=!0,this.publish({type:"prompt_accepted",sessionId:i,prompt:l,delivery:O})};try{let z=await T.client.command("session.send_input",{prompt:l,delivery:O,...g?.length?{attachments:{userImages:g}}:{}},C,{timeoutMs:O==="queue"?$X:null,onDispatch:(ee)=>{j.add(ee),T.pendingInputs??=new Map,T.pendingInputs.set(ee,{clientId:T.client.getClientId(),ownsBusyState:D,accept:Q})},beforeDispatch:()=>{if(A(),T.innerSessionId!==C)throw Error("The cloud session reconnected before the prompt could be sent. Please try again.");if(b?.beforeDispatch?.(),N&&D)N.prompt||=l;let ee=this.knownSessions.get(i);if(ee&&!ee.title?.trim()&&!this.titleWrites.has(i)){let te=kX(l);if(te){if(ee.title=te,N)N.title=te;let oe=this.options.api.updateTitle?.(i,te).then(()=>{}).catch(()=>{}).finally(()=>{if(this.titleWrites.get(i)===oe)this.titleWrites.delete(i)});if(oe)this.titleWrites.set(i,oe)}}}});Q();let W=O==="queue"||O!=="steer"&&z.payload?.result===void 0;if(W)F();return{sessionId:i,ok:!0,...W?{queued:!0}:{},result:z.payload?.result}}catch(z){if(E())throw F(),z;if(Vp(z)||Yp(z,"session.send_input")){let W;try{W=await this.rehydrateAfterTransportDrop(i,T)}catch(ee){if(A(),F(),N&&D)N.busy=!1,N.status="error";if(O==="queue")throw new yh;throw ee}if(A(),O==="queue")throw new yh;if(O==="steer")throw new ge("request_failed","Cline could not confirm whether this message was accepted. Check the cloud session before resending it.");if(Ku(W.messages,BX(W.prompts,W.submittedPrompts),l)<=L)throw new ge("request_failed","Cline could not confirm whether this message was accepted. Check the cloud session before resending it.");return{sessionId:i,ok:!0,...O==="queue"?{queued:!0}:{},recoveredAfterDisconnect:!0,status:W.status}}if(F(),N&&D)N.busy=!1,N.status="error";throw this.publishSnapshot(i),z}finally{for(let z of j)T.pendingInputs?.delete(z)}}async updateModel(i,l){let u=l?.trim();if(!u||i.remote.metadata.modelId===u)return;let c=i.innerSessionId;if(!c)throw Error("Cloud Hub session was not initialized");await i.client.command("session.update_connection",{sessionId:c,updates:{modelId:u}},c,{beforeDispatch:()=>{if(this.assertSessionActive(i.remote.id,i),i.innerSessionId!==c)throw Error("The cloud session reconnected before the model could be changed. Please try again.")}}),this.assertSessionActive(i.remote.id,i),this.applyModel(i,u)}applyModel(i,l){i.remote.metadata.modelId=l;let u=this.sessions.get(i.remote.id);if(u)u.config.model=l,u.config.modelId=l}async rehydrateAfterTransportDrop(i,l){if(this.assertSessionActive(i,l),l.rehydrationPromise)return l.rehydrationRerunRequested=!0,await l.rehydrationPromise;let u=(async()=>{let c;do l.rehydrationRerunRequested=!1,c=await this.performTransportRehydration(i,l),this.assertSessionActive(i,l);while(l.rehydrationRerunRequested&&!this.disposed);return c})().finally(()=>{if(l.rehydrationPromise===u)l.rehydrationPromise=void 0,this.publishSnapshot(i)});return l.rehydrationPromise=u,await u}async performTransportRehydration(i,l){this.assertSessionActive(i,l);let u=l.innerSessionId;if(!u)throw Error("Cloud Hub session was not initialized");l.bufferingEvents=!0,l.bufferedEvents=[],l.bufferedEventsDropped=0;try{await this.ensureAttached(l),this.assertSessionActive(i,l);let c=await l.client.command("session.get",{includeSnapshot:!0},u);this.assertSessionActive(i,l);let g=c.payload?.session&&typeof c.payload.session==="object"&&!Array.isArray(c.payload.session)?c.payload.session:void 0;this.applySessionModel(l,g);let b=this.sessions.get(i),I=this.authoritativeMessages.get(i)??[],k=String(g?.status??b?.status??"running").trim(),T=k==="pending"?"running":k;if(T==="running"&&!l.transcriptKnown&&!l.pendingInputs?.size)l.externalRun??={progressHydrated:!0};let E=()=>l.client.command("session.messages",{sessionId:u},u),A=await E().catch((z)=>{if(!Yp(z,"session.messages"))throw z;return this.assertSessionActive(i,l),E()});if(this.assertSessionActive(i,l),!Array.isArray(A.payload?.messages))throw Error("Cloud Hub returned an invalid transcript snapshot");let C=A.payload.messages,N=l.bufferedEventsDropped+l.bufferedEvents.length,O=await l.client.command("session.pending_prompts",{sessionId:u},u).catch(()=>{return});this.assertSessionActive(i,l);let L=l.bufferedEventsDropped+l.bufferedEvents.length;if(b){let z=b.status!==T;if(this.authoritativeMessages.set(i,structuredClone(C)),b.messages=structuredClone(C),this.streamingMessages.delete(i),b.status=T,b.busy=T==="running",z)if(T==="completed"||T==="failed"||T==="aborted")b.endedAt=Date.now(),this.notify("chat_session_ended",{sessionId:i,reason:T==="failed"?"error":T});else this.notify("chat_session_status",{sessionId:i,status:T})}let D=O!==void 0&&O.ok!==!1&&Array.isArray(O.payload?.prompts),U=D?this.applyQueueSnapshot(i,O):void 0;l.transcriptKnown=!0;let F=C;this.assertSessionActive(i,l),this.notify("cloud_session_rehydrated",{sessionId:i,status:T,transcriptKnown:!0,messages:F}),this.assertSessionActive(i,l);let j=l.bufferedEvents,H=F_(j),Q=RX(j,C,{queueSnapshotApplied:D,queueSnapshotEventCutoff:Math.max(0,L-l.bufferedEventsDropped),messagesSnapshotEventCutoff:Math.max(0,N-l.bufferedEventsDropped),baselineMessages:I});l.bufferedEvents=[],l.bufferingEvents=!1,l.syncFailureNotified=!1;for(let z of Q)this.forwardEvent(i,l,z);return{status:T,messages:C,prompts:U,submittedPrompts:H}}catch(c){let g=l.bufferedEvents;l.bufferedEvents=[],l.bufferingEvents=!1,this.assertSessionActive(i,l);for(let b of g)this.forwardEvent(i,l,b);if(!l.syncFailureNotified)l.syncFailureNotified=!0,this.notify("cloud_session_sync_failed",{sessionId:i,message:c instanceof Error?c.message:String(c)});throw c}}async abort(i){if(this.sendAbortTokens.set(i,Symbol()),this.abortProvisioningControllers(i,Error("Cloud session prompt cancelled")))return{sessionId:i,ok:!0};let l=await this.ensureConnection(i),u=()=>{if(this.disposed||l.disposed)throw Error("Cloud session connection was disposed")};if(u(),await l.client.connect(),await l.reconnectResolution,u(),await this.resolveInnerSession(i,l),l.innerSessionId){await this.ensureAttached(l),await l.reconnectResolution,u();let g=l.innerSessionId;if(!g)throw Error("Cloud Hub session was not initialized");await l.client.command("run.abort",{sessionId:g},g,{beforeDispatch:()=>{if(u(),l.innerSessionId!==g)throw Error("The cloud session reconnected before Stop could be sent. Please try Stop again.")}})}u();let c=this.sessions.get(i);if(c)c.busy=!1,c.status="aborted";return this.publishSnapshot(i),{sessionId:i,ok:!0}}async pendingPrompts(i){if(this.knownSessions.get(i)?.status==="provisioning")return{sessionId:i,promptsInQueue:[]};if(!(await this.ensureConnection(i)).innerSessionId)return{sessionId:i,promptsInQueue:[]};let l=await this.queueCommand(i,"session.pending_prompts",{});return{sessionId:i,promptsInQueue:this.applyQueueSnapshot(i,l)}}async updatePendingPrompt(i,l,u){let c=await this.queueCommand(i,"session.update_pending_prompt",{promptId:l,...u});return{sessionId:i,updated:c.payload?.updated===!0,promptsInQueue:this.applyQueueSnapshot(i,c)}}async removePendingPrompt(i,l){let u=await this.queueCommand(i,"session.remove_pending_prompt",{promptId:l});return{sessionId:i,removed:u.payload?.removed===!0,promptsInQueue:this.applyQueueSnapshot(i,u)}}async queueCommand(i,l,u){let c=await this.ensureConnection(i),g=c.innerSessionId;if(!g)throw Error("Cloud Hub session was not initialized");await c.client.connect(),await c.reconnectResolution,await this.ensureAttached(c),await c.reconnectResolution;let b=await c.client.command(l,{sessionId:g,...u},g,{beforeDispatch:()=>{if(this.assertSessionActive(i,c),c.innerSessionId!==g)throw Error("The cloud session reconnected before the queue request could be sent. Refresh the queue and try again.")}});return this.assertSessionActive(i,c),b}applyQueueSnapshot(i,l){if(!Array.isArray(l.payload?.prompts))throw Error("Cloud Hub returned an invalid pending-prompts snapshot");let u=l.payload.prompts.map((g)=>({id:typeof g.id==="string"?g.id:"",prompt:typeof g.prompt==="string"?g.prompt:"",steer:g.delivery==="steer",attachmentCount:typeof g.attachmentCount==="number"?g.attachmentCount:0,userImages:Array.isArray(g.userImages)?g.userImages.filter((b)=>typeof b==="string"):void 0})).filter((g)=>g.id),c=this.sessions.get(i);if(c)c.promptsInQueue=u;return this.publishSnapshot(i,!1,"queue"),u}async readMessages(i){let l=this.knownSessions.get(i);if(l?.status==="provisioning"||l?.status==="failed")return[];if(l&&$s(l))return await this.loadArchivedMessages(l)??[];try{let u=await this.ensureConnection(i);if(!u.innerSessionId)return[];return(await this.rehydrateAfterTransportDrop(i,u)).messages}catch(u){let c=await this.refreshKnownSession(i)??l;if(c){let g=await this.loadArchivedMessages(c).catch(()=>null);if(g!==null)return g}throw u}}async updateTitle(i,l){let u=this.titleWrites.get(i),c=(async()=>{await u?.catch(()=>{}),this.assertSessionActive(i),await this.options.api.updateTitle(i,l);let g=this.knownSessions.get(i);if(g)g.title=l;let b=this.sessions.get(i);if(b)b.title=l;this.publishSnapshot(i)})();this.titleWrites.set(i,c);try{await c}finally{if(this.titleWrites.get(i)===c)this.titleWrites.delete(i)}}async delete(i){this.deletingSessions.add(i),this.abortProvisioningControllers(i);try{let l=this.connectionPromises.get(i);if(l)await l.catch(()=>{return});await this.disposeConnection(i);try{await this.options.api.delete(i)}catch(u){let c=u instanceof ge?u.code:"";if(c!=="session_not_found"&&c!=="session_expired")throw u}this.knownSessions.delete(i),this.unlistedSessions.delete(i),this.pendingInitialTasks.delete(i),this.sessions.delete(i),this.authoritativeMessages.delete(i),this.restoredOptions.delete(i),this.publish({type:"removed",sessionId:i}),this.sendAbortTokens.delete(i);for(let[u,c]of this.approvals)if(c.item.sessionId===i)this.approvals.delete(u)}finally{this.deletingSessions.delete(i)}}async dispose(){this.disposed=!0;for(let l of this.snapshotTimers.keys())this.cancelScheduledSnapshot(l);this.sendAbortTokens.clear();for(let l of this.provisioningControllers.values())for(let u of l)u.abort();this.provisioningControllers.clear();let i=new Set([...this.connections.keys(),...this.knownSessions.keys(),...this.sessions.keys()]);for(let[l,u]of this.approvals)if(i.has(u.item.sessionId))this.approvals.delete(l);for(let l of i)this.sessions.delete(l),this.knownSessions.delete(l),this.publish({type:"removed",sessionId:l});if(this.knownSessions.clear(),this.unlistedSessions.clear(),!this.options.pendingInitialTasks)this.pendingInitialTasks.clear();this.listeners.clear(),await Promise.allSettled(Array.from(this.connections.keys()).map((l)=>this.disposeConnection(l)))}async attachExpired(i){let l=this.sessions.get(i.id)??Zp(i);return l.busy=!1,l.status="expired",this.sessions.set(i.id,l),await this.loadArchivedMessages(i).catch(()=>{return}),em(i,"expired")}async loadArchivedMessages(i){let l=this.sessionGenerations.get(i.id),u=await this.options.api.history(i.id);if(this.assertSessionActive(i.id),this.sessionGenerations.get(i.id)!==l)throw Error("Cloud session attachment changed while loading history");if(u===null)return null;let c=this.sessions.get(i.id)??Zp(i);return c.messages=structuredClone(u),this.sessions.set(i.id,c),this.authoritativeMessages.set(i.id,structuredClone(c.messages)),this.publishSnapshot(i.id,!0),u}async refreshKnownSession(i){let l=await this.resolveActiveOrganizationId(),u=await this.options.api.list(l).catch(()=>{return});if(this.disposed)throw Error("Cloud session manager was disposed");if(!u)return this.knownSessions.get(i);for(let c of u)this.knownSessions.set(c.id,c);return u.find((c)=>c.id===i)}async ensureKnownSession(i){let l=this.knownSessions.get(i);if(l)return l;let u=(await this.list()).find((c)=>c.id===i);if(!u)throw new ge("session_not_found",`Cloud session ${i} was not found.`);return this.knownSessions.get(i)??structuredClone(u)}assertSessionActive(i,l){if(this.disposed||l?.disposed||this.detachedSessions.has(i)||l?.generation!==void 0&&l.generation!==(this.sessionGenerations.get(i)??0))throw Error("Cloud session connection was disposed");if(this.deletingSessions.has(i))throw new ge("session_not_found","This cloud session is being deleted.")}async ensureConnection(i,l={}){let u=this.sessionGenerations.get(i)??0,c=()=>{if(this.assertSessionActive(i),u!==(this.sessionGenerations.get(i)??0))throw Error("Cloud viewer detached during connection")};c();let g=this.connectionPromises.get(i),b=g?await g:this.connections.get(i);if(b?.remote.status==="suspended")return await this.disposeConnection(i),c(),await this.ensureConnection(i,l);if(b){if(this.assertSessionActive(i,b),await b.reconnectResolution,this.assertSessionActive(i,b),!b.innerSessionId)await b.client.connect(),await b.reconnectResolution,this.assertSessionActive(i,b),await this.resolveInnerSession(i,b,Boolean(l.handoffSeed)),this.assertSessionActive(i,b);if(l.handoffSeed&&b.innerSessionId)await this.assertHandoffConnectionReusable(b,l.handoffSeed);if(l.createInner&&!b.innerSessionId)await this.createInnerSession(b,l.handoffSeed);return this.assertSessionActive(i,b),b}let I=(async()=>{let k=await this.ensureKnownSession(i);if(c(),!this.pendingInitialTasks.has(i)&&(k.sandboxType==="resumable"||k.metadata.sandboxType==="resumable"||k.status==="suspended")){let C=await this.options.api.status(i).catch(async(O)=>{if(!(O instanceof ge?O.code==="request_failed"&&(O.status===void 0||O.status===408||O.status===429||O.status>=500):O instanceof TypeError||O instanceof Error&&O.name==="TimeoutError"))throw O;return c(),await this.refreshKnownSession(i).catch(()=>{return})});if(c(),C?.status)k.status=C.status;let N=this.sessions.get(i);if(N?.status==="suspended"&&["provisioning","ready","active"].includes(k.status))N.status=k.status,N.busy=!1,N.endedAt=void 0}if(k.status==="suspended"){let C=new AbortController,N=this.trackProvisioningController(i,C);try{try{k=await this.options.api.resume(i,C.signal)}catch(L){if(!(L instanceof ge)||L.status!==409)throw L;c(),C.signal.throwIfAborted();let D=await this.options.api.status(i,{signal:C.signal});if(D.status!=="provisioning"&&D.status!=="ready"&&D.status!=="active")throw L;k={...k,status:D.status}}c(),C.signal.throwIfAborted(),this.knownSessions.set(i,k);let O=this.sessions.get(i);if(O)O.status=k.status,O.busy=!1,O.endedAt=void 0;this.publishSnapshot(i,!1,"status")}finally{N()}}if(k.status==="provisioning"){let C=new AbortController,N=this.trackProvisioningController(i,C);try{if(await this.options.api.waitUntilReady(i,C.signal,({phase:L})=>{k.metadata.provisioningPhase=L,this.notify("chat_session_status",{sessionId:i,status:"provisioning",phase:L})}),this.disposed)throw Error("Cloud session manager was disposed");if(k=await this.refreshKnownSession(i)??k,C.signal.throwIfAborted(),k.status==="provisioning")k.status="ready";let O=this.sessions.get(i);if(O?.status==="provisioning")O.status="idle",O.busy=!1,O.endedAt=void 0}catch(O){if(O instanceof ge&&O.code==="session_failed"){if(k.status="failed",k.metadata.statusReason=O.detail,k.metadata.provisioningPhase="failed",!this.disposed)this.knownSessions.set(i,k);let L=this.sessions.get(i);if(L)L.status="error";this.notify("chat_session_status",{sessionId:i,status:"error"})}throw O}finally{N()}}if(c(),k.status==="failed")throw new ge("session_failed",k.metadata.statusReason||"The cloud sandbox could not be prepared.");if($s(k))throw new ge("session_expired","This cloud session has expired; its sandbox is gone. Start a new cloud session to continue.");this.sessions.set(i,this.sessions.get(i)??this.stateFromRecord(k));let T,E=0,A=this.createHubClient({url:qX(this.options.apiBaseUrl,i),clientId:`${this.options.clientIdentity?.prefix??"cloud"}-${i}-${_X()}`,clientType:this.options.clientIdentity?.type??"cloud-client",displayName:this.options.clientIdentity?.displayName??"Cline cloud session",workspaceRoot:nt,cwd:nt,resolveConnectionHeaders:async()=>{c();let C=E>0;if(E+=1,T)T.connected=!1,T.reconnecting=C,this.publishSnapshot(i);if(C){let O=T;if(O&&!O.disposed){O.transcriptKnown=!1,O.innerSessionId=void 0;let L=(async()=>{if(await this.resolveInnerSession(i,O),O.innerSessionId)await this.rehydrateAfterTransportDrop(i,O)})().catch(()=>this.disposeConnectionIfSessionGone(i,O)).finally(()=>{if(O.reconnectResolution===L)O.reconnectResolution=void 0,O.connected=O.transcriptKnown,this.publishSnapshot(i)});O.reconnectResolution=L}}let N=await this.options.getAuthToken();if(!N?.trim())throw new ge("authentication_required","Sign in to Cline to reconnect this cloud session.");return c(),{Authorization:`Bearer ${N.trim()}`}}});T={generation:u,remote:k,client:A,bufferedEvents:[],bufferedEventsDropped:0,transcriptKnown:!1,seenEventIds:new Set,unsubscribe:()=>{}},T.unsubscribe=A.subscribe(()=>{},{sessionId:k.metadata.taskId?.trim()||i}),this.connections.set(i,T);try{if(await A.connect(),T.connected=!0,this.publishSnapshot(i),this.assertSessionActive(i,T),await this.resolveInnerSession(i,T,Boolean(l.handoffSeed)),this.assertSessionActive(i,T),l.handoffSeed&&T.innerSessionId)await this.assertHandoffConnectionReusable(T,l.handoffSeed);if(l.createInner&&!T.innerSessionId)await this.createInnerSession(T,l.handoffSeed);return this.assertSessionActive(i,T),T}catch(C){if(Vp(C)&&!this.disposed&&!T.disposed&&!this.deletingSessions.has(i))throw C;if(this.connections.get(i)===T)this.connections.delete(i);if(T.disposed=!0,T.unsubscribe(),!this.disposed&&u===(this.sessionGenerations.get(i)??0))this.clearPendingApprovals(i);throw await A.dispose().catch(()=>{return}),C}})().finally(()=>{if(this.connectionPromises.get(i)===I)this.connectionPromises.delete(i)});return this.connectionPromises.set(i,I),await I}async resolveInnerSession(i,l,u=!1){if(this.assertSessionActive(i,l),l.innerSessionId)return;let c=l.remote.metadata.taskId?.trim(),g;if(c)try{let k=await l.client.command("session.get",{sessionId:c},c);this.assertSessionActive(i,l),g=k.payload?.session&&typeof k.payload.session==="object"&&!Array.isArray(k.payload.session)?k.payload.session:void 0}catch(k){if(!Bl(k))throw k}else{let k=await l.client.command("session.list",{limit:100});this.assertSessionActive(i,l),g=Gp(k.payload).filter(Xp).sort((T,E)=>Pb(E)-Pb(T))[0]}let b=String(g?.sessionId??"").trim();if(!b||!g){if(!u&&!this.pendingInitialTasks.has(i))throw Error("This cloud session's task is unavailable. Start a new cloud session to continue.");return}if(l.remote.sandboxType==="resumable"||l.remote.metadata.sandboxType==="resumable")await this.restoreSavedInnerSession(l,b,g),this.assertSessionActive(i,l);this.pendingInitialTasks.delete(i),l.innerSessionId=b,this.subscribeToInnerSession(i,l);let I=Mb(g);if(I)this.applyModel(l,I);await this.ensureAttached(l)}async restoreSavedInnerSession(i,l,u){let c=()=>i.client.command("session.update_connection",{sessionId:l,updates:{}},l);try{await c();return}catch(L){if(!(Bl(L)||L instanceof Error&&L.code==="command_failed"&&L.message===`session not found: ${l}`))throw L}this.assertSessionActive(i.remote.id,i);let g=await i.client.command("session.messages",{},l);this.assertSessionActive(i.remote.id,i);let b=g.payload?.messages;if(!Array.isArray(b)||b.length===0)throw Error("The saved conversation is empty or unavailable.");let I=u.metadata??{},k=u.runtimeOptions??{},T=this.sessions.get(i.remote.id)?.config,E=Object.hasOwn(I,"thinking")?I.thinking:T?.thinking,A=Object.hasOwn(I,"reasoningEffort")?I.reasoningEffort:T?.reasoningEffort,C=typeof I.autoApproveTools==="boolean"?I.autoApproveTools:T?.autoApproveTools,N=u.cwd??u.workspaceRoot??nt,O=u.workspaceRoot??nt;try{let L=await i.client.command("session.create",{workspaceRoot:O,cwd:N,initialMessages:b,metadata:{...I,interactive:!0},sessionConfig:{sessionId:l,providerId:I.provider??"cline",modelId:I.model??I.modelId??i.remote.metadata.modelId,workspaceRoot:O,cwd:N,systemPrompt:k.systemPrompt??I.systemPrompt??"",mode:k.mode??I.mode??"act",...typeof E==="boolean"?{thinking:E}:{},...typeof A==="string"?{reasoningEffort:A}:{},...I.checkpointEnabled===!0?{checkpoint:{enabled:!0}}:{}},runtimeOptions:k,...typeof C==="boolean"?{toolPolicies:{"*":{autoApprove:C}}}:{}});if(this.assertSessionActive(i.remote.id,i),(L.payload?.session?.sessionId??L.payload?.sessionId)!==l)throw Error("Cloud Hub did not restore the requested session.")}catch(L){if(L?.code!=="session_already_exists")throw L;this.assertSessionActive(i.remote.id,i),await c()}}async assertHandoffConnectionReusable(i,l){let u=await i.client.command("session.list",{limit:100});this.assertSessionActive(i.remote.id,i);let c=Gp(u.payload).filter(Xp),[g]=c;if(c.length!==1||String(g?.sessionId??"").trim()!==i.innerSessionId||Lb(g)!==l.sourceSessionId)throw new ge("request_failed","This cloud workspace already contains another conversation. Open it in Cline Cloud or delete it before retrying the handoff.")}async createInnerSession(i,l){if(this.assertSessionActive(i.remote.id,i),i.innerSessionCreation){if(await i.innerSessionCreation,l)await this.assertHandoffConnectionReusable(i,l);return}let u=(async()=>{if(l&&await this.adoptExistingHandoffSession(i,l)){this.unconfirmedInnerCreates.delete(i.remote.id);return}if(l?.recoverOnly||this.unconfirmedInnerCreates.has(i.remote.id))throw new ge("request_failed","Cloud conversation creation is still unconfirmed. Wait for it to appear before trying again.");await this.createInnerSessionOnce(i,l)})().finally(()=>{i.innerSessionCreation=void 0});return i.innerSessionCreation=u,await u}async adoptExistingHandoffSession(i,l){let u=await i.client.command("session.list",{limit:100});this.assertSessionActive(i.remote.id,i);let c=Gp(u.payload).filter(Xp);if(c.length===0)return!1;let[g]=c,b=String(g?.sessionId??"").trim();if(c.length!==1||!b||Lb(g)!==l.sourceSessionId)throw new ge("request_failed","This cloud workspace already contains another conversation. Open it in Cline Cloud or delete it before retrying the handoff.");return i.innerSessionId=b,this.subscribeToInnerSession(i.remote.id,i),this.applySessionModel(i,g),await this.ensureAttached(i),!0}async createInnerSessionOnce(i,l){let u=i.remote.metadata.modelId?.trim();if(!u)throw Error("Cloud session is missing its model id");let c=this.sessions.get(i.remote.id),g=this.pendingInitialTasks.get(i.remote.id)??this.restoredOptions.get(i.remote.id),b=Qp(l?.workspaceRelativePath??g?.workspaceRelativePath),I=l?.mode??g?.mode??"act";try{await l?.onSeeding?.(),this.assertSessionActive(i.remote.id,i)}catch(D){if(l)throw new gh(D);throw D}let k=UX(i.remote),T=l?.config?.thinking??c?.config.thinking,E=l?.config?.reasoningEffort??c?.config.reasoningEffort,A=!1,C=i.client.command("session.create",{workspaceRoot:nt,cwd:b,...l?{initialMessages:l.messages}:{},sessionConfig:{...i.remote.metadata.taskId?.trim()?{sessionId:i.remote.metadata.taskId.trim()}:{},providerId:"cline",modelId:u,workspaceRoot:nt,cwd:b,systemPrompt:l?`${j_}
1069
+
1070
+ This session was handed off from a local workspace to a fresh Linux clone of ${i.remote.repoContext.repoUrl??"the repository"}@${i.remote.repoContext.branch??"the selected branch"} at ${nt}. Earlier transcript references to the local OS, absolute paths, environment, and tool availability are stale.`+(b===nt?"":`
1071
+
1072
+ Continue from the original repository subdirectory at ${b}.`):k,mode:I,enableTools:!0,...typeof T==="boolean"?{thinking:T}:{},...typeof E==="string"?{reasoningEffort:E}:{}},metadata:{source:this.options.clientIdentity?.source??"sdk",provider:"cline",model:u,interactive:!0,thinking:T??null,reasoningEffort:T===!1?null:E??null,...l?{handoff:{from:"local",sourceSessionId:l.sourceSessionId,outerSessionId:i.remote.id}}:{}},runtimeOptions:{mode:I},modelSelection:{provider:"cline",model:u},toolPolicies:{"*":{autoApprove:(l?.config?.autoApproveTools??c?.config.autoApproveTools)!==!1}}},void 0,{beforeDispatch:()=>this.assertSessionActive(i.remote.id,i),onDispatch:()=>{A=!0}}),N;try{N=await C}catch(D){if(l&&!A)throw new gh(D);if(l&&(Yp(D,"session.create")||Vp(D)))this.unconfirmedInnerCreates.add(i.remote.id);throw D}this.assertSessionActive(i.remote.id,i);let O=N.payload?.session&&typeof N.payload.session==="object"?N.payload.session:void 0,L=String(O?.sessionId??N.payload?.sessionId??"").trim();if(!L){if(l)this.unconfirmedInnerCreates.add(i.remote.id);throw Error("Cloud Hub did not return an inner session id")}if(this.unconfirmedInnerCreates.delete(i.remote.id),this.pendingInitialTasks.delete(i.remote.id),i.innerSessionId=L,i.remote.metadata.cwd=b,c)c.config.cwd=b,c.config.mode=I;this.subscribeToInnerSession(i.remote.id,i),this.applySessionModel(i,O),i.transcriptKnown=!l}handleEvent(i,l,u){if(this.disposed||l.disposed)return;if(l.innerSessionId&&u.sessionId&&u.sessionId!==l.innerSessionId)return;let c=u.eventId?.trim();if(c&&!(u.event==="approval.requested"&&u.sequence===void 0)){if(l.seenEventIds.has(c))return;l.seenEventIds.add(c);while(l.seenEventIds.size>DX){let g=l.seenEventIds.values().next().value;if(g)l.seenEventIds.delete(g)}}if(l.bufferingEvents){if(l.bufferedEvents.push(u),l.bufferedEvents.length>LX)l.bufferedEvents.shift(),l.bufferedEventsDropped+=1,this.options.logger?.log("Cloud sync event buffer reached its limit",{sessionId:i,severity:"warn"});return}this.forwardEvent(i,l,u)}forwardEvent(i,l,u){if(this.disposed||l.disposed)return;if(u.event==="session.attached"||u.event==="session.updated"||u.event==="session.created")this.applySessionModel(l,u.payload?.session);if(u.event==="approval.requested"){this.handleApprovalRequested(i,l,u);return}if(u.event==="approval.resolved"){let I=String(u.payload?.approvalId??"").trim();if(I)this.removeApproval(i,I);return}if(u.event==="run.started"){let I=this.sessions.get(i)?.busy,k=u.payload?.requestId,T=typeof k==="string"?l.pendingInputs?.get(k):void 0;if(T&&u.payload?.clientId===T.clientId){if(T.accept(),T.ownsBusyState)l.externalRun=void 0}else if(typeof u.payload?.clientId==="string")l.externalRun??={progressHydrated:Boolean(I)}}let c=l.externalRun,g=u.event==="run.completed"||u.event==="run.failed"||u.event==="run.aborted",b=c&&!c.progressHydrated&&(u.event==="assistant.delta"||u.event==="reasoning.delta"||u.event==="tool.started");if(c&&(b||g)){if(c.progressHydrated=!0,g)l.externalRun=void 0;let I=Boolean(l.rehydrationPromise);if(this.rehydrateAfterTransportDrop(i,l).catch((k)=>{if(this.disposed||l.disposed)return;this.notify("cloud_session_sync_failed",{sessionId:i,message:k instanceof Error?k.message:"Cloud transcript refresh failed"})}),!I){l.bufferedEvents.push(u);return}}if(this.applyLiveEvent(i,u),this.publish({type:"hub_event",sessionId:i,event:{...u,sessionId:i}}),u.event==="assistant.delta"||u.event==="reasoning.delta"||u.event==="tool.updated")this.scheduleSnapshot(i);else this.publishSnapshot(i)}handleApprovalRequested(i,l,u){this.storePendingApproval(i,l,u.payload),this.sendApprovalSnapshot(i)}storePendingApproval(i,l,u){let c=String(u?.approvalId??"").trim();if(!c)return;let g=`${i}:${c}`,b={approvalId:c,requestId:g,sessionId:i,createdAt:new Date(typeof u?.createdAt==="number"?u.createdAt:Date.now()).toISOString(),toolCallId:String(u?.toolCallId??""),toolName:String(u?.toolName??"tool"),input:jX(u?.inputJson),iteration:typeof u?.iteration==="number"?u.iteration:void 0,agentId:typeof u?.agentId==="string"?u.agentId:void 0,conversationId:typeof u?.conversationId==="string"?u.conversationId:void 0};this.approvals.set(g,{item:b,resolve:async(I)=>{if(this.disposed||l.disposed)throw Error("This cloud session connection is closed; reopen the session to respond.");if(await this.ensureAttached(l),this.disposed||l.disposed)throw Error("This cloud session connection is closed; reopen the session to respond.");await l.client.command("approval.respond",{approvalId:c,approved:I.approved,reason:I.reason},l.innerSessionId)}})}removeApproval(i,l){this.approvals.delete(`${i}:${l}`),this.sendApprovalSnapshot(i)}clearPendingApprovals(i){for(let[l,u]of this.approvals)if(u.item.sessionId===i)this.approvals.delete(l);this.sendApprovalSnapshot(i)}sendApprovalSnapshot(i){this.notify("tool_approval_state",{sessionId:i,items:Array.from(this.approvals.values()).filter((l)=>l.item.sessionId===i).map((l)=>l.item)})}async ensureAttached(i){if(this.assertSessionActive(i.remote.id,i),!i.innerSessionId)return;let l=await i.client.command("session.attach",{sessionId:i.innerSessionId},i.innerSessionId);this.assertSessionActive(i.remote.id,i),this.applySessionModel(i,l.payload?.session)}subscribeToInnerSession(i,l){let u=l.innerSessionId;if(!u)return;l.unsubscribe(),this.clearPendingApprovals(i),l.unsubscribe=l.client.subscribe((c)=>this.handleEvent(i,l,c),{sessionId:u})}applySessionModel(i,l){if(!l||typeof l!=="object"||Array.isArray(l))return;let u=Mb(l);if(u)this.applyModel(i,u);let c=l,g=typeof c.cwd==="string"&&Wu.normalize(c.cwd)===c.cwd&&(c.cwd===nt||c.cwd.startsWith(`${nt}/`))?c.cwd:void 0;if(g){i.remote.metadata.cwd=g;let k=this.sessions.get(i.remote.id);if(k)k.config.cwd=g}let b=this.sessions.get(i.remote.id),I=c.runtimeOptions?.mode;if(b&&(I==="act"||I==="plan"||I==="yolo"||I==="zen"))b.config.mode=I}async disposeConnection(i){this.cancelScheduledSnapshot(i);let l=this.connections.get(i);if(this.connections.delete(i),!l)return;l.disposed=!0,l.pendingInputs?.clear(),l.unsubscribe(),this.clearPendingApprovals(i),await l.client.dispose()}async disposeConnectionIfSessionGone(i,l){if(l.disposed||this.disposed)return;let u;try{u=await this.resolveActiveOrganizationId()}catch{return}let c=await this.options.api.list(u).catch(()=>{return});if(!c||l.disposed)return;let g=c.find((I)=>I.id===i),b=g?this.preserveConnectedRuntimeModel(g):void 0;if(!b){await this.disposeConnection(i).catch(()=>{return});return}if(this.knownSessions.set(i,b),l.remote=b,b.status==="failed"||b.status==="suspended"){let I=this.sessions.get(i);if(I)I.busy=!1,I.status=b.status,I.endedAt=Date.parse(b.updatedAt)||Date.now();await this.disposeConnection(i).catch(()=>{return});return}if($s(b))await this.attachExpired(b).catch(()=>{return}),await this.disposeConnection(i).catch(()=>{return})}}var it=e().trim().min(1),HX=e().nullish(),tm=t({mode:s(["act","plan","yolo","zen"]).optional(),workspaceRelativePath:e().optional(),autoApproveTools:r().optional(),thinking:r().optional(),reasoningEffort:s(["low","medium","high","xhigh"]).optional()}),Ub={create:M([tm.extend({sandboxType:s(["standard","resumable"]).optional(),requestId:it.optional(),modelId:it,repoUrl:it,initialPrompt:e().optional(),branch:it.optional(),organizationId:it.nullable().optional()}).strict()]),attach:M([it,tm.nullish()]),send:M([it,e(),s(["queue","steer"]).nullish(),HX,o(e()).nullish()]),abort:M([it]),pendingPrompts:M([it]),updatePendingPrompt:M([it,it,t({prompt:e().optional(),delivery:s(["queue","steer"]).optional()}).strict()]),removePendingPrompt:M([it,it]),readMessages:M([it]),updateTitle:M([it,e()]),delete:M([it]),list:M([]),listForDiscovery:M([t({timeoutMs:n().positive().max(30000).optional()}).nullish()]),getCrossScopeDiscoveryRecord:M([it]),listModels:M([]),listRepositories:M([]),listBranches:M([n().int().positive(),t({cursor:e().optional(),query:e().optional()}).nullish()]),respondApproval:M([it,it,t({approved:r(),reason:e().optional()}).strict()]),refreshOrganization:M([]),restoreCreationOptions:M([it,tm.strict()])};class z_{options;serviceId=gX();scopeGeneration=0;revision=0;organization;organizationGeneration=0;controller;scope;closed=!1;snapshots=new Map;tokenManager;settings=new Sn;scopeTimer;retiring=new Set;activeCommands=0;constructor(i){this.options=i,this.tokenManager=new gc({providerSettingsManager:this.settings,telemetry:i.telemetry,onCredentialsRefreshed:(l,u)=>{let c=this.scope;if(l.provider!=="cline"||!c||c.kind!=="credential"||c.identity!==(l.auth?.accessToken||l.apiKey)||c.apiBaseUrl!==l.baseUrl)return;let g=u.auth?.accountId||u.auth?.accessToken||u.apiKey;if(g)Object.assign(c,{kind:u.auth?.accountId?"account":"credential",identity:g,apiBaseUrl:u.baseUrl})}}),this.scopeTimer=setInterval(()=>this.checkScope(),1000),this.scopeTimer.unref?.()}currentScope(){if(this.options.getScope){let c=this.options.getScope();return c?{kind:"custom",identity:c}:void 0}let i=this.settings.getProviderSettings("cline"),l=i?.auth?.accountId,u=l||i?.auth?.accessToken||i?.apiKey;return u?{kind:l?"account":"credential",identity:u,apiBaseUrl:i?.baseUrl}:void 0}isCurrentScope(i){let l=this.currentScope();return i?.kind===l?.kind&&i?.identity===l?.identity&&i?.apiBaseUrl===l?.apiBaseUrl}checkScope(){if(!this.controller||this.isCurrentScope(this.scope))return;let i=this.controller;this.controller=void 0,this.scope=void 0;for(let u of this.snapshots.keys())this.publish({type:"removed",sessionId:u});this.snapshots.clear(),this.scopeGeneration++,this.options.publish(void 0,{serviceId:this.serviceId,revision:++this.revision,scopeGeneration:this.scopeGeneration});let l=i.dispose().catch((u)=>this.options.logger?.error?.("Cloud controller teardown failed",{error:u})).finally(()=>this.retiring.delete(l));this.retiring.add(l)}getController(){if(this.closed)throw Error("Hub cloud service is closed");if(this.checkScope(),this.controller)return this.controller;this.invalidateOrganization(),this.scope=this.currentScope();let i=this.options.createController?.()??this.createController();return this.controller=i,i.subscribe((l)=>{if(this.controller!==i||this.closed)return;if(l.type==="snapshot")this.snapshots.set(l.sessionId,l.snapshot);if(l.type==="removed")this.snapshots.delete(l.sessionId);this.publish(l)}),i}createController(){let i=ke(),l=this.scope,u=this.settings.getProviderSettings("cline")?.baseUrl?.trim()||i.apiBaseUrl,c=async()=>{if(!this.isCurrentScope(l))throw Error("Cline account changed");let b,I;try{b=(await this.tokenManager.resolveProviderApiKey({providerId:"cline"}))?.apiKey}catch(k){I=k}if(!b&&!(I instanceof pd))b=oi("cline")?.getApiKey(this.settings.getProviderSettings("cline"));if(!b&&I)this.options.logger?.error?.("Cloud account token refresh failed",{error:I}),Fl(this.options.telemetry,"cline",{errorName:I instanceof Error?I.name:"Error",errorCode:"hub_cloud_refresh_failed_no_fallback_token"});if(!this.isCurrentScope(l))throw Error("Cline account changed");return b},g=new P_({apiBaseUrl:u,getAuthToken:c});return new H_({api:new L_({apiBaseUrl:u,appBaseUrl:i.appBaseUrl,getAuthToken:c}),apiBaseUrl:u,getAuthToken:c,logger:this.options.logger,clientIdentity:{prefix:"hub-cloud",type:"hub-cloud",displayName:"Cline Hub cloud session",source:"desktop"},lateCreateDisposition:"preserve",getActiveOrganizationId:async(b)=>{if(b?.fresh)this.invalidateOrganization();let I=this.organization;if(!b?.fresh&&I&&Date.now()-I.at<60000)return I.id;let k=this.organizationGeneration;if(!await c())return;let T=(await g.fetchUserOrganizations())?.find((E)=>E.active)?.organizationId;if(k===this.organizationGeneration)this.organization={id:T,at:Date.now()};return T}})}publish(i){this.options.publish(i,{serviceId:this.serviceId,revision:++this.revision,scopeGeneration:this.scopeGeneration})}snapshot(){return this.checkScope(),{serviceId:this.serviceId,revision:this.revision,scopeGeneration:this.scopeGeneration,snapshots:[...this.snapshots.values()]}}invalidateOrganization(){this.organization=void 0,this.organizationGeneration++}watch(){return this.invalidateOrganization(),this.getController(),this.snapshot()}async command(i,l,u){if(!Object.hasOwn(Ub,i))throw Error(`Unknown cloud operation: ${i}`);let c=i,g=Ub[c].parse(l).map((k)=>k===null?void 0:k);if(c==="create"){let k=g[0];k.sandboxType??="resumable"}this.checkScope();let b=t({serviceId:e(),scopeGeneration:n().int()}).parse(u);if(b.serviceId!==this.serviceId||b.scopeGeneration!==this.scopeGeneration)throw Error("Cloud account changed before request");let I=this.getController();this.activeCommands++;try{let k=await I[c].apply(I,g);if(this.checkScope(),this.controller!==I)throw Error("Cline account changed during cloud operation");return{serviceId:this.serviceId,revision:this.revision,scopeGeneration:this.scopeGeneration,result:k}}finally{this.activeCommands--}}async dispose(){this.closed=!0,clearInterval(this.scopeTimer);let i=this.controller;this.controller=void 0,this.snapshots.clear(),await Promise.all([i?.dispose(),...this.retiring])}}function zX(i){switch(i){case"idle":return"idle";case"pending":return"pending";case"completed":return"completed";case"failed":return"failed";case"cancelled":return"aborted";default:return"running"}}function WX(i){let l=i.metadata&&typeof i.metadata==="object"?JSON.parse(JSON.stringify(i.metadata)):{};if(i.parentSessionId?.trim())l.parentSessionId=i.parentSessionId;if(i.parentAgentId?.trim())l.parentAgentId=i.parentAgentId;if(i.agentId?.trim())l.agentId=i.agentId;if(i.conversationId?.trim())l.conversationId=i.conversationId;if(i.messagesPath?.trim())l.messagesPath=i.messagesPath;if(i.prompt?.trim())l.prompt=i.prompt;if(i.provider?.trim())l.provider=i.provider;if(i.model?.trim())l.model=i.model;if(i.source?.trim())l.source=i.source;if(typeof i.pid==="number")l.pid=i.pid;return Object.keys(l).length>0?l:void 0}function W_(i,l,u,c){return{sessionId:i.sessionId,workspaceRoot:i.workspaceRoot,cwd:i.cwd,createdAt:Date.parse(i.startedAt),updatedAt:Date.parse(i.updatedAt),createdByClientId:l?.createdByClientId??"hub",status:zX(i.status),participants:l?[...l.participants.values()]:[],metadata:WX(i),runtimeOptions:{enableTools:i.enableTools,enableSpawn:i.enableSpawn,enableTeams:i.enableTeams,mode:typeof i.metadata?.mode==="string"?i.metadata.mode:void 0,systemPrompt:typeof i.metadata?.systemPrompt==="string"?i.metadata.systemPrompt:void 0},runtimeSession:i.agentId?{agentId:i.agentId,team:i.teamName?{teamId:i.teamName}:void 0}:void 0,...u?{usage:{...u}}:{},...c?{aggregateUsage:{...c}}:{}}}function ue(i,l){return{version:i.version,requestId:i.requestId,ok:!0,...l!==void 0?{payload:l}:{}}}function ve(i,l,u){return{version:i.version,requestId:i.requestId,ok:!1,error:{code:l,message:u}}}function is(i){return i&&typeof i==="object"&&!Array.isArray(i)?i:void 0}function Qe(i){if(typeof i.payload?.sessionId==="string")return i.payload.sessionId.trim();return i.sessionId?.trim()??""}function Yt(i,l,u){return{version:"v1",event:i,eventId:P("hevt_"),sessionId:u,timestamp:Date.now(),payload:l}}async function Nr(i,l){let u=await i.sessionHost.getSession(l);if(!u)return;let c=await i.sessionHost.getAccumulatedUsage?.(l);return W_(u,i.sessionState.get(l),c?.usage,c?.aggregateUsage)}async function ns(i,l){let u=await i.sessionHost.getSession(l);if(!u)return;let c=await i.sessionHost.getAccumulatedUsage?.(l);return Du({session:u,usage:c?.usage,aggregateUsage:c?.aggregateUsage})}function K_(i,l,u,c,g={}){i.detachedClientsBySession?.get(l)?.delete(u);let b=i.sessionState.get(l);if(b){if(g.interactive!==void 0)b.interactive=g.interactive;if(c==="creator"&&!b.createdByClientId)b.createdByClientId=u;if(!b.participants.has(u))b.participants.set(u,{clientId:u,attachedAt:Date.now(),role:c});return b}let I={createdByClientId:u,interactive:g.interactive??!0,participants:new Map([[u,{clientId:u,attachedAt:Date.now(),role:c}]])};return i.sessionState.set(l,I),I}function KX(i,l,u,c,g={}){i.detachedClientsBySession?.get(l)?.delete(u);let b=i.sessionState.get(l);if(b){if(g.interactive!==void 0)b.interactive=g.interactive;if(!b.participants.has(u))b.participants.set(u,{clientId:u,attachedAt:Date.now(),role:c});return b}let I={interactive:g.interactive??!0,participants:new Map([[u,{clientId:u,attachedAt:Date.now(),role:c}]])};return i.sessionState.set(l,I),I}async function rm(i,l){let u=P("approval_"),c=l.sessionId;if(i.sessionState.get(c)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};let g;try{g=await i.sessionHost.getSession(c)}catch{g=void 0}let b=typeof g?.metadata?.agendaTaskId==="string"?g.metadata.agendaTaskId:void 0;return await new Promise((I)=>{let k=i.buildEvent("approval.requested",{approvalId:u,sessionId:l.sessionId,agentId:l.agentId,conversationId:l.conversationId,iteration:l.iteration,toolCallId:l.toolCallId,toolName:l.toolName,inputJson:JSON.stringify(l.input??null),policy:l.policy,agendaTaskId:b},c);i.pendingApprovals.set(u,{sessionId:c,resolve:I,requestedEvent:k}),i.publish(k)})}function GX(i,l){let u=[];for(let c of i.pendingApprovals.values()){if(!c.requestedEvent)continue;if(l&&c.sessionId!==l)continue;u.push(c.requestedEvent)}return u}function G_(i,l,u){let c=i.pendingApprovals.get(l);if(!c)return;return i.pendingApprovals.delete(l),c.resolve(u),{sessionId:c.sessionId}}function X_(i,l,u){let c=0;for(let[g,b]of[...i.pendingApprovals.entries()]){if(!l({approvalId:g,sessionId:b.sessionId}))continue;i.pendingApprovals.delete(g),b.resolve({approved:!1,reason:u}),i.publish(i.buildEvent("approval.resolved",{approvalId:g,approved:!1,cancelled:!0,reason:u},b.sessionId)),c+=1}return c}async function XX(i,l){let u=typeof l.payload?.approvalId==="string"?l.payload.approvalId.trim():"";if(!i.pendingApprovals.get(u))return ve(l,"approval_not_found",`Unknown approval: ${u}`);let c=typeof l.payload?.reason==="string"?l.payload.reason:l.payload?.payload&&typeof l.payload.payload==="object"&&!Array.isArray(l.payload.payload)&&typeof l.payload.payload.reason==="string"?l.payload.payload.reason:void 0,g=l.payload?.approved===!0,b=G_(i,u,{approved:g,reason:c});if(!b)return ve(l,"approval_not_found",`Unknown approval: ${u}`);return i.publish(i.buildEvent("approval.resolved",{approvalId:u,approved:g,reason:c},b.sessionId)),ue(l,{approvalId:u,approved:g})}function JX(i){if(i instanceof Error)return{name:i.name,message:i.message,stack:i.stack};if(i===void 0)return;return i}var Fb={debug:10,info:20,warn:30,error:40,silent:50};function VX(){let i=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if(i==="debug"||i==="info"||i==="warn"||i==="error"||i==="silent")return i;return process.env.VITEST?"error":"info"}function Ae(i,l,u={}){if(Fb[i]<Fb[VX()])return;let c=JSON.stringify({ts:new Date().toISOString(),level:i,component:"hub",message:l,...Object.fromEntries(Object.entries(u).map(([g,b])=>[g,JX(b)]).filter(([,g])=>g!==void 0))});if(i==="error"||i==="warn"){console.error(`[hub] ${c}`);return}console.log(`[hub] ${c}`)}function Pi(i,l){let u=l instanceof Error?l.stack||l.message:String(l);Ae("error",i,{error:u})}var Xu="The app running this task disconnected before it could respond. Reopen the task to continue.",YX=7000;function QX(i,l,u){let c=[];for(let g of i.pendingCapabilityRequests.values()){if(!g.undeliveredEvent||g.targetClientId!==l||u&&g.sessionId!==u)continue;c.push(g.undeliveredEvent),g.undeliveredEvent=void 0}return c}async function ZX(i,l,u,c,g,b){let I=P("capreq_"),k=performance.now();Ae("info","capability.request.start",{requestId:I,sessionId:l,capabilityName:u,targetClientId:g});let T=(E)=>(Ae("warn","capability.request.end",{requestId:I,sessionId:l,capabilityName:u,targetClientId:g,ok:!1,error:`target_client_${E}`,durationMs:Math.round(performance.now()-k)}),Sg(i.telemetry,{sessionId:l,capabilityName:u,reason:E}),Error(Xu));if(i.detachedClientsBySession?.get(l)?.has(g))throw T("detached");return await new Promise((E,A)=>{let C=i.buildEvent("capability.requested",{requestId:I,targetClientId:g,capabilityName:u,payload:c},l),N=i.clients.has(g);if(i.pendingCapabilityRequests.set(I,{sessionId:l,targetClientId:g,capabilityName:u,onProgress:b,undeliveredEvent:N?void 0:C,resolve:(O)=>{if(Ae(O.ok?"info":"warn","capability.request.end",{requestId:I,sessionId:l,capabilityName:u,targetClientId:g,ok:O.ok,error:O.error,durationMs:Math.round(performance.now()-k)}),!O.ok){if(O.error===Xu)Sg(i.telemetry,{sessionId:l,capabilityName:u,reason:"cancelled_while_waiting"});A(Error(O.error||`Capability ${u} was rejected by ${g}.`));return}E(O.payload)}}),!N){setTimeout(()=>{if(!i.pendingCapabilityRequests.get(I)?.undeliveredEvent)return;i.pendingCapabilityRequests.delete(I),A(T("disconnected"))},YX);return}i.publish(C),Ae("info","capability.request.published",{requestId:I,sessionId:l,capabilityName:u,targetClientId:g})})}function e2(i,l){let u=typeof l.payload?.requestId==="string"?l.payload.requestId.trim():"",c=i.pendingCapabilityRequests.get(u);if(!c)return ue(l,{requestId:u,ignored:!0});if((l.clientId?.trim()||"")!==c.targetClientId)return ve(l,"capability_wrong_client",`Capability request ${u} is owned by ${c.targetClientId}`);if(l.sessionId?.trim()&&l.sessionId.trim()!==c.sessionId)return ve(l,"capability_wrong_session",`Capability request ${u} belongs to session ${c.sessionId}`);let g=l.payload?.payload&&typeof l.payload.payload==="object"&&!Array.isArray(l.payload.payload)?l.payload.payload:{};return c.onProgress?.(g),ue(l,{requestId:u})}function Ql(i,l,u){let c=0;for(let[g,b]of[...i.pendingCapabilityRequests.entries()]){if(!l({requestId:g,...b}))continue;i.pendingCapabilityRequests.delete(g),Ae("warn","capability.request.cancelled",{requestId:g,sessionId:b.sessionId,capabilityName:b.capabilityName,targetClientId:b.targetClientId,reason:u}),b.resolve({ok:!1,error:u}),i.publish(i.buildEvent("capability.resolved",{requestId:g,capabilityName:b.capabilityName,targetClientId:b.targetClientId,ok:!1,cancelled:!0,error:u},b.sessionId)),c+=1}return c}async function t2(i,l){let u=typeof l.payload?.sessionId==="string"?l.payload.sessionId.trim():l.sessionId?.trim()||"",c=typeof l.payload?.capabilityName==="string"?l.payload.capabilityName.trim():"",g=typeof l.payload?.targetClientId==="string"?l.payload.targetClientId.trim():"";if(!u||!c||!g)return ve(l,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let b=l.payload?.payload&&typeof l.payload.payload==="object"&&!Array.isArray(l.payload.payload)?l.payload.payload:{},I=await i.requestCapability(u,c,b,g);return ue(l,I)}catch(b){return ve(l,"capability_request_failed",b instanceof Error?b.message:String(b))}}function r2(i,l){let u=typeof l.payload?.requestId==="string"?l.payload.requestId.trim():"",c=i.pendingCapabilityRequests.get(u);if(!c)return ue(l,{requestId:u,ignored:!0});let g=l.clientId?.trim()||"";if(g!==c.targetClientId)return ve(l,"capability_wrong_client",`Capability request ${u} is owned by ${c.targetClientId}`);if(l.sessionId?.trim()&&l.sessionId.trim()!==c.sessionId)return ve(l,"capability_wrong_session",`Capability request ${u} belongs to session ${c.sessionId}`);i.pendingCapabilityRequests.delete(u);let b=l.payload?.payload&&typeof l.payload.payload==="object"&&!Array.isArray(l.payload.payload)?l.payload.payload:void 0,I=typeof l.payload?.error==="string"?l.payload.error:void 0,k=l.payload?.ok===!0;return Ae(k?"info":"warn","capability.respond",{requestId:u,sessionId:c.sessionId,capabilityName:c.capabilityName,targetClientId:c.targetClientId,respondedByClientId:g,ok:k,error:I}),c.resolve({ok:k,payload:b,error:I}),i.publish(i.buildEvent("capability.resolved",{requestId:u,capabilityName:c.capabilityName,targetClientId:c.targetClientId,respondedByClientId:g,ok:k,payload:b,error:I},c.sessionId)),ue(l,{requestId:u,ok:k})}function s2(i,l){let u=l.payload,c=u?.clientId?.trim()||l.clientId?.trim()||P("client_");return i.clients.set(c,{clientId:c,clientType:u?.clientType??"unknown",displayName:u?.displayName,actorKind:u?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:u?.transport??"native",capabilities:u?.capabilities??[],metadata:u?.metadata,workspaceContext:u?.workspaceContext}),i.publish(i.buildEvent("hub.client.registered",{clientId:c,clientType:u?.clientType??"unknown",displayName:u?.displayName,metadata:u?.metadata,connectedAt:Date.now()})),ue(l,{clientId:c})}function i2(i,l){let u=l.clientId?.trim(),c=u?i.clients.get(u):void 0;if(!u||!c)return ve(l,"client_not_found","Client is not registered with this hub.");let g=is(l.payload?.metadata);if(c.lastSeenAt=Date.now(),g)c.metadata=JSON.parse(JSON.stringify(g));if(Array.isArray(l.payload?.capabilities))c.capabilities=l.payload.capabilities.flatMap((b)=>{if(!b||typeof b!=="object"||Array.isArray(b))return[];let I=b;if(typeof I.name!=="string"||!I.name.trim())return[];return[{name:I.name.trim(),...typeof I.description==="string"?{description:I.description}:{},...Array.isArray(I.scopes)&&I.scopes.every((k)=>typeof k==="string")?{scopes:I.scopes}:{}}]});return ue(l)}function n2(i,l,u){let c=l.clientId?.trim();if(c)i.clients.delete(c),u(c),i.publish(i.buildEvent("hub.client.disconnected",{clientId:c}));return ue(l)}function o2(i,l){return ue(l,{clients:[...i.clients.values()]})}var jb={startedAt:(i)=>typeof i.startedAt==="string"?i.startedAt:void 0,port:(i)=>typeof i.port==="number"?i.port:void 0,baseUrl:(i)=>typeof i.baseUrl==="string"?i.baseUrl:void 0,connectionMode:(i)=>typeof i.connectionMode==="string"?i.connectionMode:void 0,userName:(i)=>typeof i.userName==="string"?i.userName:void 0,botUsername:(i)=>typeof i.botUsername==="string"?i.botUsername:void 0,applicationId:(i)=>typeof i.applicationId==="string"?i.applicationId:void 0,phoneNumberId:(i)=>typeof i.phoneNumberId==="string"?i.phoneNumberId:void 0},u2={discord:{required:["userName","applicationId"],optional:["startedAt","port","baseUrl"]},telegram:{required:["botUsername"],optional:["startedAt"]},gchat:{required:["userName"],optional:["startedAt","port","baseUrl"]},linear:{required:["userName"],optional:["startedAt","port","baseUrl"]},slack:{required:["userName"],optional:["startedAt","connectionMode","port","baseUrl"]},whatsapp:{required:["userName"],optional:["startedAt","phoneNumberId","port","baseUrl"]}};function c2(i){if(!Number.isInteger(i)||i<=0)return!1;try{return process.kill(i,0),!0}catch{return!1}}function p2(i,l){let u;try{let T=JSON.parse(d2(l,"utf8"));if(!T||typeof T!=="object"||Array.isArray(T))return;u=T}catch{return}let c=typeof u.pid==="number"?u.pid:void 0,g=typeof u.hubUrl==="string"?u.hubUrl:typeof u.rpcAddress==="string"?u.rpcAddress:void 0;if(!c||!g||!c2(c))return;let b=u2[i];if(!b)return;let I={};for(let T of b.required){let E=jb[T](u);if(!E||typeof E==="string"&&!E.trim())return;I[T]=E}for(let T of b.optional){let E=jb[T](u);if(E!==void 0)I[T]=E}let k=i==="telegram"?I.botUsername:i==="discord"?I.applicationId:i==="whatsapp"&&typeof u.instanceKey==="string"?u.instanceKey:I.userName;if(!k)return;return{id:`${i}:${k}`,type:i,instanceId:k,pid:c,hubUrl:g,...I}}function m2(){let i=[];for(let{name:l}of mi()){let u=qb(Hn(),l);if(!a2(u))continue;for(let c of l2(u)){if(!c.endsWith(".json")||c.endsWith(".threads.json"))continue;let g=p2(l,qb(u,c));if(g)i.push(g)}}return i.sort((l,u)=>{if(l.type!==u.type)return l.type.localeCompare(u.type);let c=l.botUsername??l.userName??"",g=u.botUsername??u.userName??"";return c.localeCompare(g)})}var h2;function f2(){return h2}function In(i){return typeof i==="object"&&i!==null&&!Array.isArray(i)}function Ju(i){return typeof i==="string"?i.trim():void 0}function Bb(i){if(!In(i))return{};let l={};for(let[u,c]of Object.entries(i))if(typeof c==="string")l[u]=c.trim();return l}function g2(){return Je((i)=>i.listConfigs()).map((i)=>({id:i.channel,type:i.type,configuredAt:i.configuredAt,updatedAt:i.updatedAt})).sort((i,l)=>i.type.localeCompare(l.type))}function rg(){return{available:rr(),active:m2(),configured:g2()}}function y2(i,l){if(i.required&&!l[i.flag]?.trim())throw Error(`${i.label} is required`)}function v2(i,l){let u={};for(let g of i.fields)u[g.flag]=l[g.flag]??g.initialValue??"";let c={};for(let g of i.fields){if(!xo(g,u))continue;y2(g,u),c[g.flag]=u[g.flag]}return c}function w2(i){if(!In(i))throw Error("connector.configure payload must be an object.");let l=Ju(i.channel);if(!l)throw Error("channel is required");let u=bo.find((A)=>A.id===l);if(!u)throw Error(`unknown connector channel: ${l}`);if(!new Set(mi().map((A)=>A.name)).has(u.id))throw Error(`connector channel is not available: ${l}`);let c=Bb(i.values),g=v2(u,c),b=In(i.security)?i.security:{},I=b.enabled===!0,k=Bb(b.values);if(I&&u.security)for(let A of u.security.fields){let C=k[A.key];if(!C)throw Error(A.requiredMessage);let N=A.validate?.(C);if(N)throw Error(N)}let T=I?{enabled:!0,values:k}:{enabled:!1,values:{}},E=ar(u,g,T);return Je((A)=>A.upsertConfig({channel:l,type:l,values:g,security:T,updateConnectArgs:(C)=>or(u,C.connection.connectArgs,E,{replaceSecurityArgs:C.config?.security?.enabled===!0||T.enabled})})),rg()}function b2(i){if(!In(i))throw Error("connector.delete_config payload must be an object.");let l=Ju(i.channel);if(!l)throw Error("channel is required");return Je((u)=>u.deleteConfig(l)),rg()}function I2(i){return Array.isArray(i)?i.filter((l)=>typeof l==="string"):[]}function sg(){let i=f2();if(!i)throw Error("connector supervision is unavailable in this hub; start connectors with the CLI instead");return i}function J_(i){if(!In(i))throw Error("payload must be an object.");let l=Ju(i.channel);if(!l)throw Error("channel is required");let u=Ju(i.instanceId);if(!u)throw Error("instanceId is required");return{channel:l,instanceId:u}}async function k2(i){let{channel:l,instanceId:u}=J_(i),c=In(i)?i:{};return await sg().start({channel:l,instanceId:u,args:I2(c.args),restart:c.restart===!0})}async function S2(i){let{channel:l,instanceId:u}=J_(i),c=In(i)?i:{};return{stopped:await sg().stop({channel:l,instanceId:u,disableAutostart:c.disableAutostart!==!1}),channel:l,instanceId:u}}function T2(i){return i==="connector.configure"||i==="connector.delete_config"||i==="connector.start"||i==="connector.stop"}function vl(i,l,u){if(!T2(l.command))return;Ko(i.telemetry,{ulid:l.sessionId??l.requestId??"hub",tool:l.command,success:u})}async function _2(i,l){try{if(l.command==="connector.channels")return ue(l,rg());if(l.command==="connector.configure"){let u=w2(l.payload);return vl(i,l,!0),ue(l,u)}if(l.command==="connector.delete_config"){let u=b2(l.payload);return vl(i,l,!0),ue(l,u)}if(l.command==="connector.start"){let u=await k2(l.payload);return vl(i,l,!0),ue(l,u)}if(l.command==="connector.stop"){let u=await S2(l.payload);return vl(i,l,!0),ue(l,u)}if(l.command==="connector.supervised")return ue(l,{supervised:sg().list()});return ve(l,"unsupported_connector_command",`unsupported connector command: ${l.command}`)}catch(u){return vl(i,l,!1),ve(l,"connector_command_failed",u instanceof Error?u.message:String(u))}}function Zl(i){return typeof i==="string"&&i.trim().length>0?i:void 0}function ig(i,l,u){let c=u instanceof Error?u.message:String(u);return ve(i,Bl(u)?zh:l,c)}async function E2(i,l){let u=Qe(l),c=Zl(l.payload?.toolName);if(!u||!c)return ve(l,"invalid_mcp_apps_resolve_tool","session.mcp_apps.resolve_tool requires a sessionId and toolName");let g=i.sessionHost.resolveMcpAppTool;if(!g)return ue(l,{});try{let b=await g.call(i.sessionHost,u,c);return ue(l,b?{binding:b}:{})}catch(b){return ig(l,"mcp_apps_resolve_tool_failed",b)}}async function A2(i,l){let u=Qe(l),c=Zl(l.payload?.serverName),g=Zl(l.payload?.uri);if(!u||!c||!g)return ve(l,"invalid_mcp_apps_read_resource","session.mcp_apps.read_resource requires a sessionId, serverName, and uri");let b=i.sessionHost.readMcpAppResource;if(!b)return ve(l,"unsupported_command","This runtime does not support MCP Apps.");try{let I=await b.call(i.sessionHost,u,{serverName:c,uri:g});return ue(l,{result:I})}catch(I){return ig(l,"mcp_apps_read_resource_failed",I)}}async function C2(i,l){let u=Qe(l),c=Zl(l.payload?.serverName),g=Zl(l.payload?.toolName),b=l.payload?.arguments,I=is(b);if(!u||!c||!g||b!==void 0&&!I)return ve(l,"invalid_mcp_apps_call_tool","session.mcp_apps.call_tool requires a sessionId, serverName, toolName, and object arguments");let k=i.sessionHost.callMcpAppTool;if(!k)return ve(l,"unsupported_command","This runtime does not support MCP Apps.");try{let T=await k.call(i.sessionHost,u,{serverName:c,toolName:g,...I?{arguments:I}:{}});return ue(l,{result:T})}catch(T){return ig(l,"mcp_apps_call_tool_failed",T)}}var x2=30000;function R2(i){if(i==="aborted")return"run.aborted";if(i==="error"||i==="failed")return"run.failed";return"run.completed"}function P2(i){if(i.finishReason!=="error")return;return i.text.trim()||void 0}function M2(i,l){let u=i.activeRpcTurnCountBySession;u.set(l,(u.get(l)??0)+1);let c=!1;return()=>{if(c)return;c=!0;let g=(u.get(l)??1)-1;if(g<=0)u.delete(l);else u.set(l,g)}}function Hb(i,l,u){let c=u instanceof Error&&u.message.trim()?u.message:`Unknown session: ${l}`;return ve(i,zh,c)}function N2(i){return i?i:void 0}function O2(i){let l=typeof i.timeoutMs==="number"?i.timeoutMs:typeof i.timeout_ms==="number"?i.timeout_ms:void 0;if(l&&Number.isFinite(l)&&l>0)return Math.floor(l);let u=typeof i.timeoutSeconds==="number"?i.timeoutSeconds:typeof i.timeout_seconds==="number"?i.timeout_seconds:void 0;if(u&&Number.isFinite(u)&&u>0)return Math.floor(u*1000);return}async function $2(i,l,u,c){let g=performance.now(),b=!1,I={command:l.command,requestId:l.requestId,clientId:l.clientId,sessionId:u.sessionId,timeoutMs:c},k=setInterval(()=>{if(b)return;let A=Math.round(performance.now()-g);Ae("warn","run.heartbeat",{...I,elapsedMs:A}),i.publish(i.buildEvent("run.heartbeat",{requestId:l.requestId,elapsedMs:A,...c?{timeoutMs:c}:{}},u.sessionId))},x2),T=i.sessionHost.runTurn(u);T.then((A)=>{if(!b)return;Ae("warn","run.late_end",{...I,elapsedMs:Math.round(performance.now()-g),finishReason:A?.finishReason})},(A)=>{if(!b)return;Ae("error","run.late_error",{...I,elapsedMs:Math.round(performance.now()-g),error:A})});let E;try{if(!c)return await T;return await Promise.race([T,new Promise((A,C)=>{E=setTimeout(()=>{let N=`Hub run ${l.command} timed out after ${c}ms.`;b=!0,clearInterval(k),C(Error(N)),Ae("error","run.timeout",{...I,elapsedMs:Math.round(performance.now()-g)}),X_(i,(O)=>O.sessionId===u.sessionId,N),Ql(i,(O)=>O.sessionId===u.sessionId,N),i.sessionHost.abort(u.sessionId,N).catch((O)=>{Ae("error","run.timeout_abort_failed",{...I,error:O})})},c)})])}finally{if(b=!0,clearInterval(k),E)clearTimeout(E)}}async function vh(i,l){let u=Qe(l),c=l.payload&&typeof l.payload==="object"?l.payload:{},g=typeof c.prompt==="string"?c.prompt:typeof c.input==="string"?c.input:"",b=c.attachments&&typeof c.attachments==="object"&&!Array.isArray(c.attachments)?c.attachments:void 0,I=Array.isArray(b?.userImages)?b.userImages.filter((N)=>typeof N==="string"&&N.trim().length>0):void 0,k=Array.isArray(b?.userFiles)?b.userFiles.filter((N)=>typeof N==="string"&&N.trim().length>0):void 0;if(!g.trim()&&!I?.length&&!k?.length)return ve(l,"invalid_session_input","session input requires a prompt or attachment");if(!await i.sessionHost.getSession(u))return Hb(l,u);i.publish(i.buildEvent("run.started",{...l.requestId?{requestId:l.requestId}:{},...l.clientId?{clientId:l.clientId}:{}},u));let T=O2(c);i.suppressNextTerminalEventBySession.set(u,"run.start.reply");let E=M2(i,u),A;try{try{A=await $2(i,l,{sessionId:u,prompt:g,mode:N2(c.mode),delivery:c.delivery==="queue"||c.delivery==="steer"?c.delivery:void 0,userImages:I,userFiles:k,timeoutMs:T},T)}catch(N){if(i.suppressNextTerminalEventBySession.get(u)==="run.start.reply")i.suppressNextTerminalEventBySession.delete(u);if(Bl(N))return Hb(l,u,N);throw i.publish(i.buildEvent("run.failed",{reason:"error",error:N instanceof Error?N.message:String(N)},u)),N}if(A){let N=await ns(i,u),O=P2(A);if(i.publish(i.buildEvent(R2(A.finishReason),{reason:A.finishReason,...O?{error:O}:{},result:A,...N?{snapshot:N}:{}},u)),i.suppressNextTerminalEventBySession.get(u)==="run.start.reply")i.suppressNextTerminalEventBySession.delete(u)}else i.suppressNextTerminalEventBySession.delete(u)}finally{E()}let C=await ns(i,u);return ue(l,A||C?{...A?{result:A}:{},...C?{snapshot:C}:{}}:void 0)}async function L2(i,l){let u=Qe(l),c=typeof l.payload?.reason==="string"?l.payload.reason:"Run was aborted before pending approval or capability request was resolved.";X_(i,(g)=>g.sessionId===u,c);try{await i.sessionHost.abort(u,l.payload?.reason)}catch(g){Ae("warn","run.abort_failed",{command:l.command,requestId:l.requestId,clientId:l.clientId,sessionId:u,error:g})}finally{Ql(i,(g)=>g.sessionId===u,c)}return ue(l,{applied:!0})}async function D2(i,l){let u=Qe(l);if(!u)return ve(l,"invalid_session_id","run.proceed_while_running requires a sessionId");if(typeof i.sessionHost.proceedWhileRunning!=="function")return ve(l,"unsupported_command","This runtime does not support proceeding while commands are running.");let c=typeof l.payload?.toolCallId==="string"&&l.payload.toolCallId.trim().length>0?l.payload.toolCallId.trim():void 0,g=await i.sessionHost.proceedWhileRunning(u,c);return ue(l,{detachedCount:g})}async function U2(i,l){let u=ba(l.payload?.payload);if(!u)return ve(l,"invalid_hook_payload","session.hook requires a valid hook event payload");return await i.sessionHost.dispatchHookEvent(u),ue(l,{applied:!0})}var q2=32,j2=604800000;class ng extends Error{retryable=!0;constructor(i,l,u){super(`Session ${i} queue is full (${l} pending runs, limit ${u}); retry later.`);this.name="HubRunAdmissionRejectedError"}}function B2(i){let l=i?.replace(/[^a-zA-Z0-9_-]/g,"-");return F2(xe(),l?`hub-runs-${l}.db`:"hub-runs.db")}class V_{db;maxPendingPerSession;closed=!1;constructor(i={}){this.db=V(i.dbPath??B2(i.ownerId)),this.maxPendingPerSession=i.maxPendingPerSession??q2,this.db.exec("PRAGMA journal_mode = WAL;"),this.db.exec("PRAGMA busy_timeout = 5000;"),this.db.exec(`
1073
+ CREATE TABLE IF NOT EXISTS hub_runs (
1074
+ accepted_seq INTEGER PRIMARY KEY AUTOINCREMENT,
1075
+ run_id TEXT NOT NULL UNIQUE,
1076
+ session_id TEXT NOT NULL,
1077
+ state TEXT NOT NULL,
1078
+ input_json TEXT NOT NULL,
1079
+ client_id TEXT,
1080
+ accepted_at INTEGER NOT NULL,
1081
+ started_at INTEGER,
1082
+ ended_at INTEGER,
1083
+ error TEXT
1084
+ );
1085
+ CREATE INDEX IF NOT EXISTS idx_hub_runs_session
1086
+ ON hub_runs(session_id, accepted_seq);
1087
+ CREATE INDEX IF NOT EXISTS idx_hub_runs_state
1088
+ ON hub_runs(state, accepted_seq);
1089
+ `)}admit(i,l,u){let c=this.countPendingBySession(i);if(c>=this.maxPendingPerSession)throw new ng(i,c,this.maxPendingPerSession);let g=P("hrun_"),b=Date.now();return this.db.prepare(`INSERT INTO hub_runs (run_id, session_id, state, input_json, client_id, accepted_at)
1090
+ VALUES (?, ?, 'queued', ?, ?, ?);`).run(g,i,JSON.stringify(l),u??null,b),{runId:g,acceptedAt:b,queuePosition:c}}get(i){let l=this.db.prepare("SELECT * FROM hub_runs WHERE run_id = ?;").get(i);return l?wl(l):void 0}nextQueued(i){let l=this.db.prepare(`SELECT * FROM hub_runs WHERE session_id = ? AND state = 'queued'
1091
+ ORDER BY accepted_seq LIMIT 1;`).get(i);return l?wl(l):void 0}hasRunning(i){let l=this.db.prepare("SELECT COUNT(*) AS n FROM hub_runs WHERE session_id = ? AND state = 'running';").get(i);return Number(l?.n??0)>0}countPendingBySession(i){let l=this.db.prepare(`SELECT COUNT(*) AS n FROM hub_runs
1092
+ WHERE session_id = ? AND state IN ('queued', 'running');`).get(i);return Number(l?.n??0)}countPending(){let i=this.db.prepare("SELECT COUNT(*) AS n FROM hub_runs WHERE state IN ('queued', 'running');").get();return Number(i?.n??0)}markRunning(i){this.db.prepare("UPDATE hub_runs SET state = 'running', started_at = ? WHERE run_id = ? AND state = 'queued';").run(Date.now(),i)}markTerminal(i,l,u){this.db.prepare("UPDATE hub_runs SET state = ?, ended_at = ?, error = ? WHERE run_id = ?;").run(l,Date.now(),u??null,i)}list(i={}){let l=[],u=[];if(i.sessionId)l.push("session_id = ?"),u.push(i.sessionId);return u.push(i.limit??100),this.db.prepare(`SELECT * FROM hub_runs
1093
+ ${l.length?`WHERE ${l.join(" AND ")}`:""}
1094
+ ORDER BY accepted_seq DESC LIMIT ?;`).all(...u).map(wl)}recoverOnStartup(){let i=this.db.prepare("SELECT * FROM hub_runs WHERE state = 'running' ORDER BY accepted_seq;").all().map(wl);this.db.prepare(`UPDATE hub_runs SET state = 'interrupted', ended_at = ?,
1095
+ error = 'Hub daemon exited before the run finished.'
1096
+ WHERE state = 'running';`).run(Date.now());let l=this.db.prepare("SELECT * FROM hub_runs WHERE state = 'queued' ORDER BY accepted_seq;").all().map(wl);return this.db.prepare("DELETE FROM hub_runs WHERE ended_at IS NOT NULL AND ended_at < ?;").run(Date.now()-j2),{interrupted:i.map((u)=>({...u,state:"interrupted"})),requeued:l}}close(){if(this.closed)return;this.closed=!0,this.db.close?.()}}function wl(i){let l={};try{let u=JSON.parse(String(i.input_json));if(u&&typeof u==="object"&&!Array.isArray(u))l=u}catch{}return{runId:String(i.run_id),sessionId:String(i.session_id),state:String(i.state),input:l,clientId:typeof i.client_id==="string"?i.client_id:void 0,acceptedAt:Number(i.accepted_at),startedAt:i.started_at===null?void 0:Number(i.started_at),endedAt:i.ended_at===null?void 0:Number(i.ended_at),error:typeof i.error==="string"?i.error:void 0}}var H2="hub_draining",z2=new Set(["session.create","session.restore","session.fork","run.start","session.send_input","run.enqueue","plugins.commands.run","plugins.commands.list"]);function W2(i){return z2.has(i)}function zb(i){return{version:i.version,requestId:i.requestId,ok:!1,error:{code:H2,message:"Hub is draining and refuses new mutating work; retry once a hub is serving again.",details:{retryable:!0}}}}class Y_{ctx;queue;activeSessions=new Set;constructor(i,l){this.ctx=i,this.queue=l}pump(i){if(this.activeSessions.has(i))return;this.activeSessions.add(i),this.drainSession(i).catch((l)=>{Ae("error","run.queue.pump_failed",{sessionId:i,error:l})}).finally(()=>{if(this.activeSessions.delete(i),this.queue.nextQueued(i))this.pump(i)})}async drainSession(i){for(;;){let l=this.queue.nextQueued(i);if(!l)return;this.queue.markRunning(l.runId),await this.execute(l)}}async execute(i){let l={version:"v1",command:"run.start",requestId:i.runId,clientId:i.clientId,sessionId:i.sessionId,payload:{...i.input,sessionId:i.sessionId}};try{let u=await vh(this.ctx,l);if(u.ok){let c=u.payload?.result?.finishReason;this.queue.markTerminal(i.runId,c==="aborted"?"aborted":c==="error"||c==="failed"?"failed":"completed",c==="error"?"Run finished with an error.":void 0)}else this.queue.markTerminal(i.runId,"failed",u.error?.message??"Run failed.")}catch(u){this.queue.markTerminal(i.runId,"failed",u instanceof Error?u.message:String(u))}}}function K2(i,l,u,c){let g=Qe(l);if(!g)return ve(l,"invalid_session_id","run.enqueue requires a sessionId");let b=l.payload&&typeof l.payload==="object"?l.payload:{};if(!(typeof b.prompt==="string"?b.prompt:typeof b.input==="string"?b.input:"").trim())return ve(l,"invalid_session_input","run.enqueue requires a prompt string");let I;try{I=u.admit(g,b,l.clientId?.trim()||void 0)}catch(k){if(k instanceof ng)return{version:l.version,requestId:l.requestId,ok:!1,error:{code:"run_admission_rejected",message:k.message,details:{retryable:!0}}};throw k}return i.publish(i.buildEvent("run.enqueued",{runId:I.runId,acceptedAt:I.acceptedAt,queuePosition:I.queuePosition,...l.clientId?{clientId:l.clientId}:{}},g)),c.pump(g),ue(l,{...I})}function G2(i,l){let u=Qe(i)||void 0,c=typeof i.payload?.limit==="number"&&Number.isFinite(i.payload.limit)&&i.payload.limit>0?Math.floor(i.payload.limit):void 0;return ue(i,{runs:l.list({sessionId:u,limit:c}).map((g)=>({runId:g.runId,sessionId:g.sessionId,state:g.state,acceptedAt:g.acceptedAt,startedAt:g.startedAt,endedAt:g.endedAt,error:g.error}))})}async function X2(i,l){switch(l.type){case"chunk":return;case"agent_event":await J2(i,l);return;case"hook":if(l.payload.hookEventName==="tool_call")i.publish(i.buildEvent("tool.started",{toolName:l.payload.toolName},l.payload.sessionId));else if(l.payload.hookEventName==="tool_result")i.publish(i.buildEvent("tool.finished",{toolName:l.payload.toolName},l.payload.sessionId));return;case"team_progress":{let u={type:"team_progress_projection",version:1,sessionId:l.payload.sessionId,summary:l.payload.summary,lastEvent:l.payload.lifecycle};i.publish(i.buildEvent("team.progress",u,l.payload.sessionId));return}case"pending_prompts":i.publish(i.buildEvent("session.pending_prompts",{sessionId:l.payload.sessionId,prompts:l.payload.prompts},l.payload.sessionId));return;case"pending_prompt_submitted":{let u={id:l.payload.id,prompt:l.payload.prompt,delivery:l.payload.delivery,attachmentCount:l.payload.attachmentCount,userImages:l.payload.userImages,userFiles:l.payload.userFiles};i.publish(i.buildEvent("session.pending_prompt_submitted",{sessionId:l.payload.sessionId,prompt:u},l.payload.sessionId));return}case"session_snapshot":i.publish(i.buildEvent("session.updated",{sessionId:l.payload.sessionId,snapshot:l.payload.snapshot},l.payload.sessionId));return;case"status":{let[u,c]=await Promise.all([Nr(i,l.payload.sessionId),ns(i,l.payload.sessionId)]);if(u)i.publish(i.buildEvent("session.updated",{session:u,...c?{snapshot:c}:{}},l.payload.sessionId));return}case"ended":await Y2(i,l);return;default:return}}async function J2(i,l){let{sessionId:u,event:c}=l.payload;if(c.type==="iteration_start"){i.publish(i.buildEvent("iteration.started",{iteration:c.iteration},u));return}if(c.type==="iteration_end"){i.publish(i.buildEvent("iteration.finished",{iteration:c.iteration,hadToolCalls:c.hadToolCalls,toolCallCount:c.toolCallCount},u));return}if(c.type==="content_start"){if(c.contentType==="text"&&typeof c.text==="string"&&c.text.length>0){i.publish(i.buildEvent("assistant.delta",{text:c.text},u));return}if(c.contentType==="reasoning"){if(c.redacted&&!c.reasoning){i.publish(i.buildEvent("reasoning.delta",{text:"",redacted:!0},u));return}if(typeof c.reasoning==="string"&&c.reasoning.length>0)i.publish(i.buildEvent("reasoning.delta",{text:c.reasoning,redacted:c.redacted===!0},u));return}if(c.contentType==="tool"){i.publish(i.buildEvent("tool.started",{toolCallId:c.toolCallId,toolName:c.toolName,input:c.input},u));return}}if(c.type==="content_update"&&c.contentType==="tool"){i.publish(i.buildEvent("tool.updated",{toolCallId:c.toolCallId,toolName:c.toolName,update:c.update},u));return}if(c.type==="content_end"){switch(c.contentType){case"text":i.publish(i.buildEvent("assistant.finished",{text:c.text},u));break;case"media":if(c.media)i.publish(i.buildEvent("assistant.media",{media:c.media},u));break;case"reasoning":i.publish(i.buildEvent("reasoning.finished",{reasoning:c.reasoning},u));break;case"tool":i.publish(i.buildEvent("tool.finished",{toolCallId:c.toolCallId,toolName:c.toolName,output:c.output,error:c.error},u));break}return}if(c.type==="notice"){i.publish(i.buildEvent("session.notice",{sessionId:u,message:c.message,noticeType:c.noticeType,...c.displayRole?{displayRole:c.displayRole}:{},...c.reason?{reason:c.reason}:{},...c.metadata?{metadata:c.metadata}:{},agent:{kind:l.payload.teamRole==="teammate"?"teammate":c.parentAgentId?"subagent":"lead",agentId:c.agentId,conversationId:c.conversationId,parentAgentId:c.parentAgentId,teamAgentId:l.payload.teamAgentId,teamRole:l.payload.teamRole}},u));return}if(c.type==="usage"){let g;try{g=await i.sessionHost.getAccumulatedUsage?.(u)}catch{g=void 0}i.publish(i.buildEvent("usage.updated",{sessionId:u,delta:{inputTokens:c.inputTokens,outputTokens:c.outputTokens,cacheReadTokens:c.cacheReadTokens??0,cacheWriteTokens:c.cacheWriteTokens??0,reasoningTokenCount:c.reasoningTokenCount,totalCost:c.cost??0},totals:{inputTokens:c.totalInputTokens,outputTokens:c.totalOutputTokens,cacheReadTokens:c.totalCacheReadTokens??0,cacheWriteTokens:c.totalCacheWriteTokens??0,totalCost:c.totalCost??0},usage:g?.usage,aggregateUsage:g?.aggregateUsage,agent:{kind:l.payload.teamRole==="teammate"?"teammate":c.parentAgentId?"subagent":"lead",agentId:c.agentId,conversationId:c.conversationId,parentAgentId:c.parentAgentId,teamAgentId:l.payload.teamAgentId,teamRole:l.payload.teamRole}},u));return}if(c.type==="done"){i.publish(i.buildEvent("agent.done",{reason:c.reason,text:c.text,iterations:c.iterations,usage:c.usage},u));return}if(c.type==="error")await V2(i,l)}async function V2(i,l){let{sessionId:u,event:c}=l.payload;if(c.type!=="error"||c.recoverable)return;if(c.parentAgentId||l.payload.teamRole==="teammate")return;if((i.activeRpcTurnCountBySession.get(u)??0)>0)return;let g=c.error instanceof Error?c.error.message:String(c.error),b=await ns(i,u);i.publish(i.buildEvent("run.failed",{reason:"error",...g?{error:g,text:g}:{},...b?{snapshot:b}:{}},u))}async function Y2(i,l){let u=i.suppressNextTerminalEventBySession.get(l.payload.sessionId),c=u===l.payload.reason||u==="run.start.reply";if(c)i.suppressNextTerminalEventBySession.delete(l.payload.sessionId);let[g,b]=await Promise.all([Nr(i,l.payload.sessionId),ns(i,l.payload.sessionId)]);if(l.payload.reason==="completed"){let I=await bK(g);i.publish(i.buildEvent("ui.notify",I,l.payload.sessionId))}if(c)return;i.publish(i.buildEvent(l.payload.reason==="aborted"?"run.aborted":l.payload.reason==="error"||l.payload.reason==="failed"?"run.failed":"run.completed",{reason:l.payload.reason,...b?{snapshot:b}:{}},l.payload.sessionId))}var Q2=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function Zi(i){return i&&typeof i==="object"&&!Array.isArray(i)?JSON.parse(JSON.stringify(i)):void 0}function Z2(i,l){let u=typeof i.name==="string"?i.name.trim():"",c=typeof i.description==="string"?i.description:"",g=typeof i.capabilityName==="string"?i.capabilityName.trim():"",b=Zi(i.inputSchema);if(!u||!c||!b||!g||l.has(g))return;return l.add(g),{kind:"tool",capabilityName:g,name:u,description:c,inputSchema:b,...typeof i.successContext==="string"?{successContext:i.successContext}:{},...Zi(i.lifecycle)?{lifecycle:Zi(i.lifecycle)}:{}}}function Q_(i){if(!Array.isArray(i))return[];let l=[],u=new Set;for(let c of i){if(!c||typeof c!=="object"||Array.isArray(c))continue;let g=c,b=g.kind,I=typeof g.capabilityName==="string"?g.capabilityName.trim():"";if(!I||u.has(I))continue;if(b==="tool"){let k=Z2(g,u);if(k)l.push(k);continue}if(b==="toolExecutor"){let k=g.executor;if(!vo(k))continue;u.add(I),l.push({kind:"toolExecutor",capabilityName:I,executor:k});continue}if(b==="hook"){let k=typeof g.name==="string"?g.name.trim():"";if(!k)continue;u.add(I),l.push({kind:"hook",capabilityName:I,name:k});continue}if(b==="compaction"){u.add(I),l.push({kind:"compaction",capabilityName:I,...Zi(g.config)?{config:Zi(g.config)}:{}});continue}if(b==="checkpoint"){u.add(I),l.push({kind:"checkpoint",capabilityName:I,...Zi(g.config)?{config:Zi(g.config)}:{}});continue}if(b==="mistakeLimit"){u.add(I),l.push({kind:"mistakeLimit",capabilityName:I});continue}if(b==="userInstructionService")u.add(I),l.push({kind:"userInstructionService",capabilityName:I})}return l}function Z_(i){let l=i.metadata?{...i.metadata}:void 0;return{sessionId:i.sessionId,agentId:i.agentId,conversationId:i.conversationId,runId:i.runId,iteration:i.iteration,toolCallId:i.toolCallId,metadata:l&&Object.keys(l).length>0?l:void 0}}function eE(i){return Object.hasOwn(i,"update")?i.update:i}function ed(i){return i.trim().replace(/^\/+/,"").toLowerCase()}function eJ(i){let l=(i??[]).map(ed).filter(Boolean);return l.length>0?new Set(l):void 0}function tJ(i,l,u){if(!u)return!0;let c=ed(i),g=ed(l),b=c.includes(":")?c.split(":").at(-1)??c:c,I=g.includes(":")?g.split(":").at(-1)??g:g;return u.has(c)||u.has(g)||u.has(b)||u.has(I)}function wh(i,l){let u=eJ(l);return i.records.skill.map((c)=>({id:c.id,name:c.item.name,description:"description"in c.item&&typeof c.item.description==="string"?c.item.description:void 0,disabled:c.item.disabled===!0,skill:c.item})).filter((c)=>tJ(c.id,c.name,u))}function Wb(i,l){let u=async(c,g)=>{let b=ed(c),I=wh(i,l).filter((T)=>T.id===b||ed(T.name)===b||T.id.endsWith(`:${b}`)).filter((T)=>!T.disabled);if(I.length!==1)return I.length>1?`Skill "${c}" is ambiguous. Use one of: ${I.map((T)=>T.id).join(", ")}`:`Skill "${c}" not found.`;let k=I[0].skill;return UT(k,g)};return Object.defineProperty(u,"configuredSkills",{get:()=>wh(i,l).map(({skill:c,...g})=>g),enumerable:!0}),u}function rJ(i,l,u,c){let g={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},b=async()=>{let I=await c(i,u.capabilityName,{},l);if(I?.snapshot)g=I.snapshot};return{start:b,stop:()=>{},refreshType:async()=>{await b()},listRecords:(I)=>[...g.records[I]],listRuntimeCommands:()=>[...g.runtimeCommands],resolveRuntimeSlashCommand:(I,k)=>{if(!I.startsWith("/")||I.length<2)return I;let T=I.match(/^\/(\S+)/)?.[1];if(!T)return I;let E=Bo(T),A=g.runtimeCommands.find((C)=>Bo(C.name)===E);if(!A)return I;if(A.kind==="skill"&&k?.expandSkillCommands===!1)return I;return`${A.instructions}${I.slice(T.length+1)}`},hasConfiguredSkills:(I)=>wh(g,I).some((k)=>!k.disabled),createSkillsExecutor:(I)=>Wb(g,I),createExtension:(I)=>({name:"cline-hub-user-instructions",manifest:{capabilities:[I.includeRules?"rules":void 0,I.registerSkillsTool?"tools":void 0,I.includeSkills||I.includeWorkflows?"commands":void 0].filter((k)=>Boolean(k))},setup(k){if(I.includeRules)k.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>_I(g.records.rule)});if(I.registerSkillsTool)k.registerTool(pc(Wb(g,I.allowedSkillNames)));for(let T of g.runtimeCommands.filter((E)=>E.kind==="skill"&&I.includeSkills||E.kind==="workflow"&&I.includeWorkflows))k.registerCommand({name:T.name,description:T.description,handler:(E)=>{let A=E.trim();return A?`${T.instructions}
1097
+
1098
+ ${A}`:T.instructions}})}})}}function sJ(i,l,u,c){let g=u.map((b)=>[b.executor,async(...I)=>{let k=I.at(-1),T=I.slice(0,-1);return(await c(i,b.capabilityName,{executor:b.executor,args:T,context:Z_(k)},l,k.emitUpdate?(E)=>{k.emitUpdate?.(eE(E))}:void 0))?.result}]);return g.length>0?Object.fromEntries(g):void 0}function iJ(i,l,u,c){if(u.length===0)return;return u.map((g)=>({name:g.name,description:g.description,inputSchema:g.inputSchema,lifecycle:g.lifecycle,successContext:g.successContext,async execute(b,I){return(await c(i,g.capabilityName,{toolName:g.name,input:b,context:Z_(I)},l,I.emitUpdate?(k)=>{I.emitUpdate?.(eE(k))}:void 0))?.result}}))}var nJ=new Set(["assistant-text-delta","assistant-reasoning-delta","tool-call-delta","tool-updated"]);function oJ(i,l,u,c){let g=new Map(u.map((I)=>[I.name,I])),b={};for(let I of Q2){let k=g.get(I);if(!k)continue;b[I]=async(T)=>{if(I==="onEvent"&&nJ.has(T.type))return;return(await c(i,k.capabilityName,{context:T},l))?.control}}return Object.keys(b).length>0?b:void 0}function tE(i){let l=i.contributions.filter((T)=>T.kind==="toolExecutor"),u=i.contributions.filter((T)=>T.kind==="tool"),c=i.contributions.filter((T)=>T.kind==="hook"),g=i.contributions.find((T)=>T.kind==="compaction"),b=i.contributions.find((T)=>T.kind==="checkpoint"),I=i.contributions.find((T)=>T.kind==="mistakeLimit"),k=i.contributions.find((T)=>T.kind==="userInstructionService");return{hasClientContributions:i.contributions.length>0,toolExecutors:sJ(i.sessionId,i.targetClientId,l,i.requestCapability),localRuntime:{...c.length>0?{hooks:oJ(i.sessionId,i.targetClientId,c,i.requestCapability)}:{},...u.length>0?{extraTools:iJ(i.sessionId,i.targetClientId,u,i.requestCapability)}:{},...g?{compaction:{...i.sessionConfig?.compaction??{},...g.config,compact:async(T)=>(await i.requestCapability(i.sessionId,g.capabilityName,{context:T},i.targetClientId))?.result}}:{},...b?{checkpoint:{...i.sessionConfig?.checkpoint??{},...b.config,createCheckpoint:async(T)=>(await i.requestCapability(i.sessionId,b.capabilityName,{context:T},i.targetClientId))?.result}}:{},...I?{onConsecutiveMistakeLimitReached:async(T)=>(await i.requestCapability(i.sessionId,I.capabilityName,{context:T},i.targetClientId))?.result}:{},...k?{userInstructionService:rJ(i.sessionId,i.targetClientId,k,i.requestCapability)}:{}}}}var Kb="hubCapabilityOwnerClientId";function en(i,l){let u=i?.[l];return typeof u==="string"&&u.trim()?u.trim():void 0}function rE(i){let l=is(i),u=typeof l?.name==="string"?l.name.trim():"";if(!u)return;let c=en(l,"version"),g=en(l,"platform"),b=en(l,"platformVersion");return{name:u,...c?{version:c}:{},...g?{platform:g}:{},...b?{platformVersion:b}:{},...typeof l?.isMultiRoot==="boolean"?{isMultiRoot:l.isMultiRoot}:{}}}function sE(i){let l=is(i),u=en(l,"distinctId"),c=l?.accountId===null?null:en(l,"accountId"),g=en(l,"email"),b=en(l,"organizationId");if(!u&&c===void 0&&!g&&!b)return;return{...u?{distinctId:u}:{},...c!==void 0?{accountId:c}:{},...g?{email:g}:{},...b?{organizationId:b}:{}}}async function iE(i,l){let u=await i.sessionHost.deleteSession(l);i.sessionState.delete(l);try{i.sessionSearch.removeSession(l)}catch(c){Ae("warn","session search eviction failed",{error:c,sessionId:l})}return u}function nE(i,l,u){let c=MU(u);return i.filter((g)=>(l!=="yolo"||g.name!==Bh)&&OU(g.name,c))}function Dd(i){return typeof i==="string"&&i.trim().length>0?i.trim():void 0}function aJ(i){if(i===null)return null;let l=Dn.safeParse(i);return l.success?l.data:void 0}function lJ(i){let l=is(i)??{},u={},c=Dd(l.providerId);if(c)u.providerId=c;let g=Dd(l.modelId);if(g)u.modelId=g;let b=Dd(l.apiKey);if(b!==void 0)u.apiKey=b;let I=Dd(l.baseUrl);if(I!==void 0)u.baseUrl=I;if(l.headers&&typeof l.headers==="object")u.headers=l.headers;if(l.providerConfig&&typeof l.providerConfig==="object")u.providerConfig=l.providerConfig;if(Object.hasOwn(l,"thinking")){if(typeof l.thinking==="boolean"||l.thinking===null)u.thinking=l.thinking}if(Object.hasOwn(l,"reasoningEffort")){let k=aJ(l.reasoningEffort);if(k!==void 0)u.reasoningEffort=k}if(Object.hasOwn(l,"thinkingBudgetTokens")){if(typeof l.thinkingBudgetTokens==="number"&&Number.isFinite(l.thinkingBudgetTokens)&&l.thinkingBudgetTokens>0)u.thinkingBudgetTokens=Math.trunc(l.thinkingBudgetTokens);else if(l.thinkingBudgetTokens===null)u.thinkingBudgetTokens=null}return Ef(u)}function dJ(i,l){return i.sessionState.get(l)?.createdByClientId}function Gb(i){return typeof i==="string"||i===null?i:void 0}function uJ(i){if(!i||!("autoApproveTools"in i)&&!(Kb in i))return i;let l={...i};return delete l[Kb],delete l.autoApproveTools,l}function oE(i,l){let u=is(i),c=is(u?.["*"]);if(typeof c?.autoApprove==="boolean")return c.autoApprove;return l.autoApproveTools===!0}function aE(i){let l=dJ(i.ctx,i.sessionId);if(!l)return ve(i.envelope,"session_wrong_client",`Session ${i.sessionId} has no owner`);if(l!==i.clientId)return ve(i.envelope,"session_wrong_client",`Session ${i.sessionId} is owned by ${l}`);return}function lE(i){let l=is(i);if(!l)return;let u={};for(let[c,g]of Object.entries(l)){let b=is(g)?.enabled;u[c]=typeof b==="boolean"?{enabled:b}:{}}return Object.keys(u).length>0?u:void 0}async function Xb(i,l,u){let c=performance.now(),g={command:l.command,requestId:l.requestId,clientId:l.clientId,sessionId:l.sessionId};Ae("info","session.create.begin",g);let b=l.payload&&typeof l.payload==="object"?l.payload:{},I=b.metadata&&typeof b.metadata==="object"?JSON.parse(JSON.stringify(b.metadata)):{},k=b.sessionConfig&&typeof b.sessionConfig==="object"?JSON.parse(JSON.stringify(b.sessionConfig)):void 0,T=b.runtimeOptions&&typeof b.runtimeOptions==="object"?b.runtimeOptions:{},E=rE(T.clientContext),A=sE(T.userContext),C=dc(b.initialCompactionState);if(typeof k?.mode==="string")I.mode=k.mode;else if(typeof T.mode==="string")I.mode=T.mode;if(typeof k?.systemPrompt==="string")I.systemPrompt=k.systemPrompt;else if(typeof T.systemPrompt==="string")I.systemPrompt=T.systemPrompt;if(k?.checkpoint?.enabled===!0)I.checkpointEnabled=!0;else if(T.checkpointEnabled===!0)I.checkpointEnabled=!0;I.autoApproveTools=oE(b.toolPolicies,T);let N=b.modelSelection&&typeof b.modelSelection==="object"?b.modelSelection:{},O=typeof b.workspaceRoot==="string"&&b.workspaceRoot.trim()?b.workspaceRoot.trim():typeof b.cwd==="string"&&b.cwd.trim()?b.cwd.trim():void 0,L=l.clientId?.trim()||"hub-client",D=Q_(T.clientContributions);Ae("info","session.create.contributions_parsed",{...g,clientId:L,workspaceRoot:O,cwd:typeof b.cwd==="string"?b.cwd:void 0,contributionCount:D.length});let U=(typeof k?.sessionId==="string"?k.sessionId.trim():"")||P(),F=Kn(T.configExtensions);Ae("info","session.create.runtime_build.begin",{...g,sessionId:U,configExtensionCount:F?.length??0}),i.detachedClientsBySession?.get(U)?.delete(L);let j=tE({sessionId:U,targetClientId:L,contributions:D,sessionConfig:k,requestCapability:i.requestCapability});Ae("info","session.create.start_session.begin",{...g,sessionId:U,provider:k?.providerId??(typeof N.provider==="string"?N.provider:typeof I.provider==="string"?I.provider:"hub"),model:k?.modelId??(typeof N.model==="string"?N.model:typeof I.model==="string"?I.model:"hub")});let H=k?.mode??(T.mode==="plan"||T.mode==="yolo"?T.mode:"act"),Q=await i.sessionHost.startSession({source:typeof I.source==="string"?I.source:void 0,interactive:I.interactive!==!1,sessionMetadata:Object.keys(I).length>0?I:void 0,initialMessages:Array.isArray(b.initialMessages)?b.initialMessages:void 0,initialCompactionState:C,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:F,...j.localRuntime,...E||A?{extensionContext:{...j.localRuntime.extensionContext,...E?{client:E}:{},...A?{user:A}:{}}}:{},extensions:[...i.sessionExtensions??[],...j.localRuntime.extensions??[]],extraTools:nE([...i.sessionTools??[],...j.localRuntime.extraTools??[]],H,typeof I.source==="string"?I.source:void 0)},capabilities:{toolExecutors:j.toolExecutors,requestToolApproval:u},config:{...k??{},sessionId:U,providerId:k?.providerId??(typeof N.provider==="string"?N.provider:typeof I.provider==="string"?I.provider:"hub"),modelId:k?.modelId??(typeof N.model==="string"?N.model:typeof I.model==="string"?I.model:"hub"),apiKey:k?.apiKey??(typeof N.apiKey==="string"?N.apiKey:void 0),cwd:k?.cwd??(typeof b.cwd==="string"&&b.cwd.trim()?b.cwd.trim():O),workspaceRoot:k?.workspaceRoot??O,systemPrompt:k?.systemPrompt??(typeof T.systemPrompt==="string"?T.systemPrompt:""),mode:H,maxIterations:k?.maxIterations??(typeof T.maxIterations==="number"?T.maxIterations:void 0),enableTools:k?.enableTools??T.enableTools!==!1,enableSpawnAgent:k?.enableSpawnAgent??T.enableSpawn!==!1,enableAgentTeams:k?.enableAgentTeams??T.enableTeams!==!1,checkpoint:k?.checkpoint??(T.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:k?.teamName??(typeof I.teamName==="string"?I.teamName:void 0)},toolPolicies:b.toolPolicies&&typeof b.toolPolicies==="object"&&!Array.isArray(b.toolPolicies)?JSON.parse(JSON.stringify(b.toolPolicies)):T.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0,plugins:lE(b.plugins)}),z=Q.pluginIssues??[];if(z.length>0)Ae("warn","session.create.plugin_issues",{...g,sessionId:Q.sessionId,plugins:z.map((oe)=>({name:oe.name,state:oe.state,reason:oe.reason,phase:oe.lastError?.phase,message:oe.lastError?.message}))});Ae("info","session.create.start_session.end",{...g,sessionId:Q.sessionId,elapsedMs:Math.round(performance.now()-c),hasImmediateResult:!!Q.result}),K_(i,Q.sessionId,L,"creator",{interactive:I.interactive!==!1}),Ae("info","session.create.read_records.begin",{...g,sessionId:Q.sessionId});let[W,ee]=await Promise.all([Nr(i,Q.sessionId),ns(i,Q.sessionId)]);Ae("info","session.create.read_records.end",{...g,sessionId:Q.sessionId,hasSession:!!W,hasSnapshot:!!ee,elapsedMs:Math.round(performance.now()-c)});let te=z.length>0?{pluginIssues:JSON.parse(JSON.stringify(z))}:{};if(W)i.publish(i.buildEvent("session.created",{session:W,...ee?{snapshot:ee}:{},...te},Q.sessionId));return Ae("info","session.create.reply",{...g,sessionId:Q.sessionId,elapsedMs:Math.round(performance.now()-c)}),ue(l,{session:W,...ee?{snapshot:ee}:{},...te})}async function cJ(i,l,u){let c=l.payload&&typeof l.payload==="object"?l.payload:{},g=typeof c.sessionId==="string"?c.sessionId.trim():l.sessionId?.trim()||"",b=c.checkpointRunCount;if(!g)return ve(l,"invalid_restore","session.restore requires a session id");let I=c.restore&&typeof c.restore==="object"?c.restore:{},k=I.messages!==!1;if(typeof b!=="number")return ve(l,"invalid_restore","checkpointRunCount must be a positive integer");try{let T=c.sessionConfig&&typeof c.sessionConfig==="object"?JSON.parse(JSON.stringify(c.sessionConfig)):void 0;if(k&&!T)return ve(l,"invalid_restore","sessionConfig is required when restore.messages is true");let E=c.runtimeOptions&&typeof c.runtimeOptions==="object"?c.runtimeOptions:{},A=rE(E.clientContext),C=sE(E.userContext),N=dc(c.initialCompactionState),O=c.metadata&&typeof c.metadata==="object"?JSON.parse(JSON.stringify(c.metadata)):{};if(typeof T?.mode==="string")O.mode=T.mode;else if(typeof E.mode==="string")O.mode=E.mode;if(typeof T?.systemPrompt==="string")O.systemPrompt=T.systemPrompt;else if(typeof E.systemPrompt==="string")O.systemPrompt=E.systemPrompt;if(T?.checkpoint?.enabled===!0)O.checkpointEnabled=!0;else if(E.checkpointEnabled===!0)O.checkpointEnabled=!0;O.autoApproveTools=oE(c.toolPolicies,E);let L=c.modelSelection&&typeof c.modelSelection==="object"?c.modelSelection:{},D=l.clientId?.trim()||"hub-client",U=Q_(E.clientContributions),F=(typeof T?.sessionId==="string"?T.sessionId.trim():"")||P(),j=Kn(E.configExtensions);i.detachedClientsBySession?.get(F)?.delete(D);let H=tE({sessionId:F,targetClientId:D,contributions:U,sessionConfig:T,requestCapability:i.requestCapability}),Q=await new Ff().restoreCheckpoint({sessionId:g,checkpointRunCount:b,telemetry:i.telemetry,restore:{messages:I.messages,workspace:I.workspace,omitCheckpointMessageFromSession:I.omitCheckpointMessageFromSession===!0},start:T,cwd:typeof T?.cwd==="string"&&T.cwd.trim()||typeof T?.workspaceRoot==="string"&&T.workspaceRoot.trim()||void 0,getSession:(te)=>i.sessionHost.getSession(te),readMessages:(te)=>i.sessionHost.readSessionMessages(te),buildStartInput:(te)=>{if(te.restoredCheckpointMetadata)O.checkpoint=te.restoredCheckpointMetadata;let oe=typeof c.workspaceRoot==="string"&&c.workspaceRoot.trim()?c.workspaceRoot.trim():typeof c.cwd==="string"&&c.cwd.trim()?c.cwd.trim():te.sourceSession.workspaceRoot||te.sourceSession.cwd,G=T?.mode??(E.mode==="plan"||E.mode==="yolo"?E.mode:"act");return{source:typeof O.source==="string"?O.source:void 0,interactive:O.interactive!==!1,sessionMetadata:{...O,restoredFromSessionId:g,restoredCheckpointRunCount:b},initialMessages:te.initialMessages,initialCompactionState:N,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:j,...H.localRuntime,...A||C?{extensionContext:{...H.localRuntime.extensionContext,...A?{client:A}:{},...C?{user:C}:{}}}:{},extensions:[...i.sessionExtensions??[],...H.localRuntime.extensions??[]],extraTools:nE([...i.sessionTools??[],...H.localRuntime.extraTools??[]],G,typeof O.source==="string"?O.source:void 0)},capabilities:{toolExecutors:H.toolExecutors,requestToolApproval:u},config:{...T??{},sessionId:F,providerId:T?.providerId??(typeof L.provider==="string"?L.provider:te.sourceSession.provider),modelId:T?.modelId??(typeof L.model==="string"?L.model:te.sourceSession.model),apiKey:T?.apiKey??(typeof L.apiKey==="string"?L.apiKey:""),cwd:T?.cwd??te.plan.cwd,workspaceRoot:T?.workspaceRoot??oe,systemPrompt:T?.systemPrompt??(typeof E.systemPrompt==="string"?E.systemPrompt:""),mode:G,maxIterations:T?.maxIterations??(typeof E.maxIterations==="number"?E.maxIterations:void 0),enableTools:T?.enableTools??E.enableTools!==!1,enableSpawnAgent:T?.enableSpawnAgent??E.enableSpawn!==!1,enableAgentTeams:T?.enableAgentTeams??E.enableTeams!==!1,checkpoint:T?.checkpoint??(E.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:T?.teamName??(typeof O.teamName==="string"?O.teamName:void 0)},toolPolicies:c.toolPolicies&&typeof c.toolPolicies==="object"&&!Array.isArray(c.toolPolicies)?JSON.parse(JSON.stringify(c.toolPolicies)):E.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0,plugins:lE(c.plugins)}},startSession:(te)=>i.sessionHost.startSession(te),getStartedSessionId:(te)=>te.sessionId,cleanupStartedSession:async(te)=>{if(!await iE(i,te.sessionId))throw Error(`Failed to clean up restored session ${te.sessionId}`)},readRestoredSession:(te)=>i.sessionHost.getSession(te)});if(!k)return ue(l,{checkpoint:Q.checkpoint});let z=Q.startResult;if(!z)return ve(l,"restore_failed","Checkpoint restore did not start a session");K_(i,z.sessionId,D,"creator",{interactive:O.interactive!==!1});let[W,ee]=await Promise.all([Nr(i,z.sessionId),ns(i,z.sessionId)]);if(W)i.publish(i.buildEvent("session.created",{session:W,...ee?{snapshot:ee}:{}},z.sessionId));return ue(l,{session:W,...ee?{snapshot:ee}:{},messages:Q.messages??[],checkpoint:Q.checkpoint})}catch(T){if(T instanceof Fs)return ve(l,T.code,T.code==="session_not_found"?`Unknown session: ${g}`:T.message);return ve(l,"restore_failed",T instanceof Error?T.message:String(T))}}async function pJ(i,l){let u=Qe(l);if(!u)return ve(l,"invalid_session_attach","session.attach requires a session id");let c=await Nr(i,u);if(!c)return ve(l,"session_not_found",`Unknown session: ${u}`);KX(i,u,l.clientId?.trim()||"hub-client","participant");let g=await Nr(i,u);return i.publish(i.buildEvent("session.attached",{session:g??c},u)),ue(l,{session:g??c})}async function mJ(i,l){let u=Qe(l);if(!u)return ve(l,"invalid_session_detach","session.detach requires a session id");let c=l.clientId?.trim()||"hub-client",g=i.detachedClientsBySession?.get(u);if(!g&&i.detachedClientsBySession)g=new Set,i.detachedClientsBySession.set(u,g);g?.add(c);let b=i.sessionState.get(u);if(b){if(b.participants.delete(c),b.createdByClientId===c)b.createdByClientId=void 0;if(b.participants.size===0)i.sessionState.delete(u)}Ql(i,(T)=>T.sessionId===u&&T.targetClientId===c,Xu);let[I,k]=await Promise.all([Nr(i,u),ns(i,u)]);return i.publish(i.buildEvent("session.detached",I?{session:I,...k?{snapshot:k}:{},clientId:c}:{clientId:c},u)),ue(l)}async function hJ(i,l){let u=Qe(l),c=l.payload?.includeSnapshot===!0,[g,b]=await Promise.all([Nr(i,u),c?ns(i,u):Promise.resolve(void 0)]);return g?ue(l,{session:g,...b?{snapshot:b}:{}}):ve(l,"session_not_found",`Unknown session: ${u}`)}async function fJ(i,l){let u=Qe(l);if(!u)return ve(l,"invalid_session_id","session.messages requires a session id");if(!await Nr(i,u))return ve(l,"session_not_found",`Unknown session: ${u}`);let c=await i.sessionHost.readSessionMessages(u);return ue(l,{sessionId:u,messages:c})}async function gJ(i,l){let u=Qe(l);if(!u)return ve(l,"invalid_session_id","session.compaction.get requires a session id");if(!await Nr(i,u))return ve(l,"session_not_found",`Unknown session: ${u}`);let c=l.clientId?.trim()||"hub-client",g=aE({sessionId:u,ctx:i,clientId:c,envelope:l});if(g)return g;let b=await i.sessionHost.readSessionCompactionState(u);return ue(l,{sessionId:u,state:b})}async function yJ(i,l){let u=typeof l.payload?.limit==="number"?l.payload.limit:200,c=(await i.sessionHost.listSessions(u,{rootOnly:l.payload?.rootOnly===!0})).map((g)=>W_(g,i.sessionState.get(g.sessionId)));return ue(l,{sessions:c})}async function vJ(i,l){let u=l.payload??{};if(typeof u.query!=="string"||!u.query.trim())return ve(l,"invalid_search_query","session.search requires a non-empty query");return ue(l,{hits:i.sessionSearch.search({query:u.query,limit:u.limit,workspaceRoot:u.workspaceRoot})})}async function wJ(i,l){let u=Qe(l),c=uJ(is(l.payload?.metadata)),g=Gb(l.payload?.prompt),b=Gb(l.payload?.title),I=await i.sessionHost.updateSession(u,{metadata:c,...g!==void 0?{prompt:g}:{},...b!==void 0?{title:b}:{}}),[k,T]=await Promise.all([Nr(i,u),ns(i,u)]);if(k)i.publish(i.buildEvent("session.updated",{session:k,...T?{snapshot:T}:{}},u));return{version:l.version,requestId:l.requestId,ok:I.updated,payload:{updated:I.updated,session:k,...T?{snapshot:T}:{}}}}async function bJ(i,l){let u=Qe(l);if(!u)return ve(l,"invalid_session_update_connection","session.update_connection requires a session id");let c=i.sessionHost.updateSessionConnection;if(!c)return ve(l,"unsupported_session_update_connection","runtime host does not support session connection updates");let g=is(l.payload),b=lJ(g?.updates);return await c.call(i.sessionHost,u,b),ue(l,{sessionId:u,updated:!0})}async function IJ(i,l){let u=Qe(l);if(!u)return ve(l,"invalid_session_id","session.compaction.update requires a session id");let c=l.clientId?.trim()||"hub-client",g=await Nr(i,u);if(!g)return ve(l,"session_not_found",`Unknown session: ${u}`);let b=aE({sessionId:u,ctx:i,clientId:c,envelope:l});if(b)return b;let I=l.payload&&typeof l.payload==="object"?l.payload:{},k=dc(I.state);if(!k)return ve(l,"invalid_compaction_state","session.compaction.update requires a valid compaction state");let T=await i.sessionHost.updateSessionCompactionState(u,k),[E,A]=T.updated?await Promise.all([Nr(i,u),ns(i,u)]):[g,void 0];if(T.updated)i.publish(i.buildEvent("session.updated",{session:E??g,...A?{snapshot:A}:{}},u));return{version:l.version,requestId:l.requestId,ok:!0,payload:{updated:T.updated,session:E??g,...A?{snapshot:A}:{}}}}async function kJ(i,l){let u=Qe(l),c=await iE(i,u);return ue(l,{deleted:c})}async function SJ(i,l){let u=Qe(l),c=i.sessionHost.pendingPrompts;if(!c)return ve(l,"pending_prompts_unavailable","Pending prompt service is not available.");let g=await c.list({sessionId:u});return ue(l,{sessionId:u,prompts:g})}async function TJ(i,l){let u=Qe(l),c=i.sessionHost.pendingPrompts;if(!c)return ve(l,"pending_prompts_unavailable","Pending prompt service is not available.");let g=await c.steerFirst({sessionId:u});return ue(l,g)}async function _J(i,l){let u=Qe(l),c=typeof l.payload?.promptId==="string"?l.payload.promptId.trim():"",g=typeof l.payload?.prompt==="string"?l.payload.prompt:void 0,b=l.payload?.delivery==="queue"||l.payload?.delivery==="steer"?l.payload.delivery:void 0,I=i.sessionHost.pendingPrompts;if(!I)return ve(l,"pending_prompts_unavailable","Pending prompt service is not available.");let k=await I.update({sessionId:u,promptId:c,prompt:g,delivery:b});return ue(l,k)}async function EJ(i,l){let u=Qe(l),c=typeof l.payload?.promptId==="string"?l.payload.promptId.trim():"",g=i.sessionHost.pendingPrompts;if(!g)return ve(l,"pending_prompts_unavailable","Pending prompt service is not available.");let b=await g.delete({sessionId:u,promptId:c});return ue(l,b)}var CJ=604800000,xJ=200000,RJ=67108864,PJ=16777216;function MJ(i){let l=i?.replace(/[^a-zA-Z0-9_-]/g,"-");return AJ(xe(),l?`hub-events-${l}.db`:"hub-events.db")}class dE{db;retentionMs;maxRows;maxTotalBytes;appendedBytesSincePrune=0;closed=!1;constructor(i={}){this.db=V(i.dbPath??MJ(i.ownerId)),this.retentionMs=i.retentionMs??CJ,this.maxRows=i.maxRows??xJ,this.maxTotalBytes=i.maxTotalBytes??RJ,this.db.exec("PRAGMA journal_mode = WAL;"),this.db.exec("PRAGMA synchronous = NORMAL;"),this.db.exec("PRAGMA busy_timeout = 5000;"),this.db.exec(`
1099
+ CREATE TABLE IF NOT EXISTS hub_events (
1100
+ sequence INTEGER PRIMARY KEY AUTOINCREMENT,
1101
+ event TEXT NOT NULL,
1102
+ session_id TEXT,
1103
+ envelope_json TEXT NOT NULL,
1104
+ created_at INTEGER NOT NULL
1105
+ );
1106
+ CREATE INDEX IF NOT EXISTS idx_hub_events_session
1107
+ ON hub_events(session_id, sequence);
1108
+ CREATE INDEX IF NOT EXISTS idx_hub_events_created
1109
+ ON hub_events(created_at);
1110
+ `)}append(i){if(this.closed)return i;let l=i.timestamp??Date.now(),u=JSON.stringify(i),c=this.db.prepare(`INSERT INTO hub_events (event, session_id, envelope_json, created_at)
1111
+ VALUES (?, ?, ?, ?);`).run(i.event,i.sessionId??null,u,l)?.lastInsertRowid,g=typeof c==="number"||typeof c==="bigint"?Number(c):this.lastSequence();if(this.appendedBytesSincePrune+=Buffer.byteLength(u),this.appendedBytesSincePrune>=PJ)this.appendedBytesSincePrune=0,this.prune();return{...i,sequence:g}}listAfter(i,l,u){if(this.closed)return[];let c=["sequence > ?"],g=[i];if(l.sessionId)c.push("session_id = ?"),g.push(l.sessionId);return g.push(u),this.db.prepare(`SELECT sequence, envelope_json FROM hub_events
1112
+ WHERE ${c.join(" AND ")} ORDER BY sequence LIMIT ?;`).all(...g).flatMap((b)=>{try{return[{...JSON.parse(String(b.envelope_json)),sequence:Number(b.sequence)}]}catch{return[]}})}lastSequence(){if(this.closed)return 0;let i=this.db.prepare("SELECT MAX(sequence) AS sequence FROM hub_events;").get();return Number(i?.sequence??0)}prune(i=Date.now()){if(this.closed)return;if(this.db.prepare("DELETE FROM hub_events WHERE created_at < ?;").run(i-this.retentionMs),this.db.prepare(`DELETE FROM hub_events WHERE sequence <= (
1113
+ SELECT sequence FROM hub_events ORDER BY sequence DESC
1114
+ LIMIT 1 OFFSET ?
1115
+ );`).run(this.maxRows),this.fileSizeBytes()>this.maxTotalBytes){this.db.prepare(`DELETE FROM hub_events WHERE sequence <= (
1116
+ SELECT sequence FROM (
1117
+ SELECT sequence, SUM(LENGTH(CAST(envelope_json AS BLOB))) OVER (
1118
+ ORDER BY sequence DESC
1119
+ ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING
1120
+ ) AS newer_bytes FROM hub_events
1121
+ )
1122
+ WHERE newer_bytes > ? ORDER BY sequence DESC LIMIT 1
1123
+ );`).run(Math.floor(this.maxTotalBytes/2));try{this.db.exec("VACUUM;")}catch{}}}fileSizeBytes(){let i=(l)=>Number(this.db.prepare(`PRAGMA ${l};`).get()?.[l]??0);return i("page_count")*i("page_size")}close(){if(this.closed)return;this.closed=!0,this.db.close?.()}}function NJ(i){switch(i){case"schedule.create":return"schedule.created";case"schedule.update":case"schedule.enable":case"schedule.disable":return"schedule.updated";case"schedule.delete":return"schedule.deleted";case"schedule.trigger":return"schedule.triggered";default:return}}var OJ=new Set(["task.create","task.list","task.get","task.update","task.approve","task.cancel","task.run","task.automation.get","task.automation.set"]);function $J(i){return OJ.has(i)}function LJ(i){return i.payload&&typeof i.payload==="object"?i.payload:{}}function Ud(i){return typeof i.taskId==="string"?i.taskId.trim():""}function sm(i){let l=i.expectedRevision;if(typeof l!=="number"||!Number.isInteger(l)||l<1)throw Error("expectedRevision must be a positive integer");return l}class uE{tasks;constructor(i){this.tasks=i}async handleCommand(i,l){let u=LJ(i),c={kind:"user",id:i.clientId?.trim()||"hub-client",clientId:i.clientId?.trim()||void 0};try{let g=this.resolveWorkspace(l);switch(i.command){case"task.create":{let b=await this.tasks.createTask({...u,scope:"workspace",workspaceRoot:g,cwd:g,requiresApproval:!1,createdBy:c});return ue(i,{task:b})}case"task.list":{let b=u,[I,k]=await Promise.all([this.tasks.listTasks({...b,scope:"workspace",workspaceRoot:g}),this.tasks.listTasks({...b,scope:"global",workspaceRoot:void 0})]);return ue(i,{tasks:[...I,...k]})}case"task.get":{let b=await this.requireScopedTask(u,g);return ue(i,{task:b})}case"task.update":{let b=await this.requireScopedTask(u,g),I=await this.tasks.updateTask({...u,scope:b.scope,workspaceRoot:b.workspaceRoot??null,cwd:b.cwd??null,updatedBy:c});return ue(i,{task:I})}case"task.approve":return await this.requireScopedTask(u,g),ue(i,{task:await this.tasks.approveTask(Ud(u),c,sm(u))});case"task.cancel":return await this.requireScopedTask(u,g),ue(i,{task:await this.tasks.cancelTask(Ud(u),c,sm(u),typeof u.reason==="string"?u.reason:void 0)});case"task.run":{await this.requireScopedTask(u,g);let b=await this.tasks.runTask(Ud(u),c,sm(u),i.clientId);return ue(i,b)}case"task.automation.get":return ue(i,{policy:await this.tasks.getAutomationPolicy(g)});case"task.automation.set":{let b=u.policy&&typeof u.policy==="object"&&!Array.isArray(u.policy)?u.policy:void 0;if(!b)throw Error("task.automation.set requires a policy object");return ue(i,{policy:await this.tasks.setAutomationPolicy({...b,scopeKey:g},c)})}default:return ve(i,"unsupported_command",`Unsupported agenda task command: ${i.command}`)}}catch(g){return ve(i,"task_command_failed",g instanceof Error?g.message:String(g))}}resolveWorkspace(i){let l=i?.workspaceContext?.workspaceRoot?.trim();if(!i?.clientId||!l)throw Error("task commands require a Hub-authorized workspace");return Jb(l)}async requireScopedTask(i,l){let u=await this.tasks.getTask(Ud(i));if(!u||u.scope==="workspace"&&(!u.workspaceRoot||Jb(u.workspaceRoot)!==l))throw Error("task does not exist in this workspace");return u}}var Fd=!1,DJ=new Set(["skills","workflows","rules","plugins","tools","mcp"]);function bh(i){return typeof i==="object"&&i!==null&&!Array.isArray(i)}function Dl(i,l){let u=i[l];if(u===void 0)return;if(typeof u!=="string")throw Error(`settings payload '${l}' must be a string.`);return u}function cE(i,l){let u=i[l];if(u===void 0)return;if(typeof u!=="boolean")throw Error(`settings payload '${l}' must be a boolean.`);return u}function UJ(i,l){let u=i[l];if(u===void 0)return;if(!Array.isArray(u)||!u.every((c)=>typeof c==="string"))throw Error(`settings payload '${l}' must be an array of strings.`);return u}function pE(i){if(i===void 0)return{};if(!bh(i))throw Error("settings.list payload must be an object.");return{cwd:Dl(i,"cwd"),workspaceRoot:Dl(i,"workspaceRoot"),agentPluginPaths:UJ(i,"agentPluginPaths"),includePluginTools:cE(i,"includePluginTools"),availabilityContext:bh(i.availabilityContext)?i.availabilityContext:void 0}}function FJ(i){if(!bh(i))throw Error("settings.toggle payload must be an object.");let{type:l}=i;if(typeof l!=="string"||!DJ.has(l))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, plugins, tools, mcp.");return{...pE(i),type:l,id:Dl(i,"id"),path:Dl(i,"path"),name:Dl(i,"name"),enabled:cE(i,"enabled")}}var qJ={debug:(i,l)=>Ae("debug",i,l),log:(i,l)=>Ae(l?.severity==="warn"||l?.severity==="error"?"warn":"info",i,l),error:(i,l)=>Ae("error",i,l)};class mE{options;clients=new Map;listeners=new Map;sessionState=new Map;pendingApprovals=new Map;pendingCapabilityRequests=new Map;suppressNextTerminalEventBySession=new Map;activeRpcTurnCountBySession=new Map;schedules;scheduleCommands;tasks;taskCommands;sessionTools=[];sessionExtensions=[];settings;sessionSearch;cronService;sessionHost;hubId=P("hub_");ctx;eventLog;eventLogPruneTimer;runQueue;runExecutor;draining=!1;pendingPluginCommands=new Set;plugins=uc();unsubscribePluginStatus;cloud;constructor(i){this.options=i,this.cloud=new z_({...i.cloudSessionOptions,logger:i.logger,telemetry:i.telemetry,publish:(u,c)=>this.publish(Yt("cloud.event",{event:u,...c},u?.sessionId))}),this.plugins.setLogger(qJ),this.unsubscribePluginStatus=this.plugins.subscribe((u)=>{this.publish(Yt("plugin.status_changed",{plugin:JSON.parse(JSON.stringify(u))}))}),this.sessionHost=i.sessionHost??new Gf({sessionService:new Jf(new Xf),fetch:i.fetch,logger:i.logger,telemetry:i.telemetry}),this.sessionSearch=new f_(this.sessionHost,i.sessionSearchOptions??{});let l=this.sessionSearch.getInitializationError();if(l!==void 0)Pi("session search is unavailable",l);if(this.ctx={isDraining:()=>this.draining,sessionSearch:this.sessionSearch,clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,detachedClientsBySession:new Map,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,activeRpcTurnCountBySession:this.activeRpcTurnCountBySession,telemetry:i.telemetry,sessionTools:this.sessionTools,sessionExtensions:this.sessionExtensions,sessionHost:this.sessionHost,publish:(u)=>this.publish(u),buildEvent:Yt,requestCapability:(u,c,g,b,I)=>ZX(this.ctx,u,c,g,b,I)},this.tasks=new R_({...i.taskOptions,automationEnabled:Fd,watchFiles:Fd&&i.taskOptions?.watchFiles!==!1,runtime:{isInteractiveClientAvailable:()=>[...this.clients.values()].some((u)=>u.capabilities.some((c)=>c.name===gs)),startSession:(u,c,g,b)=>this.startAgendaTaskSession(u,c,g,b?.unattended===!0),runSession:(u,c,g)=>this.runAgendaTaskSession(u,c,g),abortSession:async(u,c)=>{await this.sessionHost.abort(u,c)}},logger:i.taskOptions?.logger??i.logger,publish:(u,c,g)=>{this.publish(Yt(u,c,g))}}),this.taskCommands=new uE(this.tasks),this.schedules=new FI({...i.scheduleOptions,telemetry:i.telemetry,runtimeHandlers:i.runtimeHandlers,eventPublisher:(u,c)=>{let g=u==="schedule.execution.completed"?"schedule.execution_completed":u==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!g)return;this.publish(Yt(g,c&&typeof c==="object"?c:void 0))}}),this.scheduleCommands=new kI(this.schedules),this.sessionTools.push(Fx({todo:Fd?{manager:this.tasks,telemetry:i.telemetry,resolveSessionDefaults:async(u)=>{let c=await this.sessionHost.getSession(u);if(!c)return;let g=!gn(c.workspaceRoot)?c.workspaceRoot:void 0;return{workspaceRoot:g,cwd:g?c.cwd:void 0,modelSelection:{providerId:c.provider,modelId:c.model},originTaskId:typeof c.metadata?.agendaTaskId==="string"?c.metadata.agendaTaskId:void 0}}}:void 0,scheduled:{schedules:this.schedules,telemetry:i.telemetry,publish:(u,c,g)=>{this.publish(Yt(u,c,g))},resolveSessionDefaults:async(u)=>{let c=await this.sessionHost.getSession(u);if(!c)return;return{workspaceRoot:await R1(),modelSelection:{providerId:c.provider,modelId:c.model},interactive:c.interactive}}}})),this.sessionExtensions.push(qx({todoEnabled:Fd})),this.settings=i.settingsService??new T_,i.cronOptions)this.cronService=new h_({runtimeHandlers:i.runtimeHandlers,...i.cronOptions,telemetry:i.telemetry});this.sessionHost.subscribe((u)=>{if(X2(this.ctx,u).catch((c)=>{Pi("session event handling failed",c),B(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:c,severity:"error",handled:!0,context:{eventType:u.type,sessionId:u.payload.sessionId}})}),u.type==="ended")this.sessionSearch.refreshNow().catch((c)=>{Pi("session search indexing failed",c)})})}async startAgendaTaskSession(i,l,u,c=!1){let g=(i.originSessionId?await this.sessionHost.getSession(i.originSessionId):void 0)?.metadata?.autoApproveTools===!0,b=c||g,I=i.modelSelection?.providerId?.trim()||"cline",k=i.modelSelection?.modelId?.trim()||(I==="cline"?hr:""),T=vn({title:i.title,agendaTaskId:i.taskId,agendaTaskRunId:l.runId,agendaTaskAssignee:i.assignee,interactive:!c,source:jr.CORE},{mode:"task",trigger:"agenda_task"}),E=u?.trim()||"agenda-task-manager",A=await Xb(this.ctx,{version:"v1",command:"session.create",requestId:P("task_session_"),clientId:E,payload:{workspaceRoot:i.workspaceRoot,cwd:i.cwd,sessionConfig:{providerId:I,modelId:k,systemPrompt:i.systemPrompt??"",mode:i.mode??"act",maxIterations:i.maxIterations,enableTools:!0,enableSpawnAgent:!0,enableAgentTeams:!0},metadata:T,runtimeOptions:{mode:i.mode??"act",maxIterations:i.maxIterations,enableTools:!0,enableSpawn:!0,enableTeams:!0},toolPolicies:{"*":{autoApprove:b,enabled:!0}}}},(L)=>rm(this.ctx,L));if(!A.ok)throw Error(A.error?.message??"failed to create task session");let C=A.payload?.session,N=A.payload?.snapshot,O=typeof N?.sessionId==="string"?N.sessionId:typeof C?.sessionId==="string"?C.sessionId:"";if(!O)throw Error("task session did not return a session id");return{sessionId:O}}async runAgendaTaskSession(i,l,u){let c=l.resourcePaths.length?`
1124
+
1125
+ Relevant resources (paths are relative to workspace root ${l.workspaceRoot}):
1126
+ ${l.resourcePaths.map((A)=>`- ${A} (absolute: ${Np(l.workspaceRoot??l.cwd??"",A)})`).join(`
1127
+ `)}`:"",g=l.assignee?`
1128
+ Assigned agent: ${l.assignee}. If a configured agent or subagent with this name is available, delegate the work to it and oversee completion; otherwise execute it directly and mention the fallback in the summary.`:"",b=`Execute this approved agenda task.
1129
+
1130
+ Title: ${l.title}
1131
+ Type: ${l.type}
1132
+ Priority: P${l.priority}${g}
1133
+
1134
+ ${l.instructions}${c}`,I=await vh(this.ctx,{version:"v1",command:"run.start",requestId:P("task_run_"),clientId:u.requestedByClientId??"agenda-task-manager",sessionId:i,payload:{sessionId:i,input:b,mode:l.mode??"act",timeoutSeconds:l.timeoutSeconds}});if(!I.ok)return{status:"failed",error:I.error?.message??"task session run failed"};let k=I.payload?.result,T=typeof k?.finishReason==="string"?k.finishReason:void 0,E=typeof k?.text==="string"&&k.text.trim()?k.text.trim():void 0;if(T==="completed")return{status:"completed",summary:E};if(T==="aborted")return{status:"cancelled",summary:E};return{status:"failed",summary:E,error:E??(T?`Task session ended with ${T}`:"Task session did not return a completion result")}}getCronService(){return this.cronService}getHubId(){return this.hubId}async start(){if(this.sessionSearch.start(),await this.tasks.start(),await this.schedules.start(),this.cronService)try{await this.cronService.start()}catch(i){console.error("[hub] cron service start failed",i)}this.startEventLog(),this.startRunQueue()}startEventLog(){if(this.options.eventLog===!1||this.eventLog)return;try{let i=new dE({ownerId:this.options.owner?.ownerId,...this.options.eventLog??{}});i.prune(),this.eventLog=i,this.eventLogPruneTimer=setInterval(()=>{try{i.prune()}catch{}},3600000),this.eventLogPruneTimer.unref?.()}catch(i){Ae("error","event_log.start_failed",{error:i})}}startRunQueue(){if(this.options.runQueue===!1||this.runQueue)return;try{this.runQueue=new V_({ownerId:this.options.owner?.ownerId,...this.options.runQueue??{}}),this.runExecutor=new Y_(this.ctx,this.runQueue);let i=this.runQueue.recoverOnStartup();for(let u of i.interrupted)this.publish(Yt("run.interrupted",{runId:u.runId,error:u.error,reason:"hub_restart"},u.sessionId));let l=new Set(i.requeued.map((u)=>u.sessionId));for(let u of l)this.runExecutor.pump(u);if(i.interrupted.length>0||i.requeued.length>0)Ae("info","run.queue.recovered",{interrupted:i.interrupted.length,requeued:i.requeued.length})}catch(i){Ae("error","run.queue.start_failed",{error:i})}}async stop(){if(this.draining=!0,await Promise.allSettled(this.pendingPluginCommands),this.unsubscribePluginStatus?.(),this.unsubscribePluginStatus=void 0,this.eventLogPruneTimer)clearInterval(this.eventLogPruneTimer),this.eventLogPruneTimer=void 0;for(let i of this.pendingApprovals.keys())G_(this.ctx,i,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(Ql(this.ctx,()=>!0,"Hub shutting down before capability request was resolved."),await this.cloud.dispose(),await this.sessionSearch.dispose(),await this.tasks.dispose(),await this.sessionHost.dispose("hub_server_stop"),await this.schedules.dispose(),this.cronService)try{await this.cronService.dispose()}catch(i){console.error("[hub] cron service stop failed",i)}this.eventLog?.close(),this.eventLog=void 0,this.runQueue?.close(),this.runQueue=void 0,this.runExecutor=void 0}async handleCommand(i,l){try{if(l===null&&(i.command==="cloud.command"||i.command==="cloud.watch"))return ve(i,"client_not_registered","Register before accessing cloud sessions");let u=i.clientId?.trim(),c=l===void 0?this.options.workspaceRoot?.trim()&&u?{clientId:u,workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.workspaceRoot}}:void 0:l??void 0,g=await this.dispatchCommand(i,c);return this.captureFailedReply(i,g),g}catch(u){throw B(this.options.telemetry,{component:"core",operation:"hub.command",error:u,severity:"error",handled:!1,context:this.commandTelemetryContext(i)}),u}}async dispatchCommand(i,l){if(this.draining&&W2(i.command))return zb(i);if($J(i.command))return await this.taskCommands.handleCommand(i,l);if(i.command==="cloud.command"||i.command==="cloud.watch"){let u=i.clientId?.trim();if(!u||!this.clients.has(u)||l&&l.clientId!==u)return ve(i,"client_not_registered","Register before accessing cloud sessions");if(this.draining&&i.command==="cloud.command"&&["create","attach","send"].includes(String(i.payload?.operation)))return zb(i);try{if(i.command==="cloud.watch")return ue(i,this.cloud.watch());let c=await this.cloud.command(String(i.payload?.operation??""),i.payload?.args,i.payload?.scope);return ue(i,c)}catch(c){return ve(i,"cloud_command_failed",c instanceof Error?c.message:String(c))}}switch(i.command){case"client.register":{let u=s2(this.ctx,i);return this.tasks.notifyAutomationReadinessChanged(),u}case"client.update":{let u=i2(this.ctx,i);return this.tasks.notifyAutomationReadinessChanged(),u}case"client.unregister":{let u=n2(this.ctx,i,(c)=>{this.listeners.delete(c),this.detachClientFromSessions(c)});return this.tasks.notifyAutomationReadinessChanged(),u}case"client.list":return o2(this.ctx,i);case"session.create":return await Xb(this.ctx,i,(u)=>rm(this.ctx,u));case"session.restore":return await cJ(this.ctx,i,(u)=>rm(this.ctx,u));case"session.attach":return await pJ(this.ctx,i);case"session.detach":return await mJ(this.ctx,i);case"session.get":return await hJ(this.ctx,i);case"session.messages":return await fJ(this.ctx,i);case"session.compaction.get":return await gJ(this.ctx,i);case"session.list":{let u=await yJ(this.ctx,i);return{...u,payload:{...u.payload,activePluginRequests:this.pendingPluginCommands.size,activeCloudCommands:this.cloud.activeCommands}}}case"session.search":return await vJ(this.ctx,i);case"session.update":return await wJ(this.ctx,i);case"session.update_connection":return await bJ(this.ctx,i);case"session.mcp_apps.resolve_tool":return await E2(this.ctx,i);case"session.mcp_apps.read_resource":return await A2(this.ctx,i);case"session.mcp_apps.call_tool":return await C2(this.ctx,i);case"session.compaction.update":return await IJ(this.ctx,i);case"session.pending_prompts":return await SJ(this.ctx,i);case"session.steer_first_pending_prompt":return await TJ(this.ctx,i);case"session.update_pending_prompt":return await _J(this.ctx,i);case"session.remove_pending_prompt":return await EJ(this.ctx,i);case"session.delete":return await kJ(this.ctx,i);case"session.hook":return await U2(this.ctx,i);case"run.start":case"session.send_input":return await vh(this.ctx,i);case"run.enqueue":{if(!this.runQueue||!this.runExecutor)return{version:i.version,requestId:i.requestId,ok:!1,error:{code:"run_queue_unavailable",message:"This hub has no durable run queue; use run.start instead."}};return K2(this.ctx,i,this.runQueue,this.runExecutor)}case"run.list":{if(!this.runQueue)return ue(i,{runs:[]});return G2(i,this.runQueue)}case"hub.drain":return this.handleHubDrain(i);case"hub.status":return this.handleHubStatus(i);case"plugins.list":case"plugins.status":return ue(i,{plugins:this.plugins.list()});case"plugins.reload":return await this.handlePluginsReload(i);case"run.abort":return await L2(this.ctx,i);case"run.proceed_while_running":return await D2(this.ctx,i);case"capability.request":return await t2(this.ctx,i);case"approval.respond":return await XX(this.ctx,i);case"capability.respond":return r2(this.ctx,i);case"capability.progress":return e2(this.ctx,i);case"ui.notify":return this.publish(Yt("ui.notify",i.payload??{})),ue(i);case"ui.show_window":return this.publish(Yt("ui.show_window",i.payload??{})),ue(i);case"plugins.commands.list":case"plugins.commands.run":{let u=this.sessionHost.pluginCommands;if(!u)return{version:i.version,requestId:i.requestId,ok:!1,error:{code:"plugin_commands_unavailable",message:"This runtime does not support plugin commands"}};if(!l)throw Error("Plugin commands require a Hub-authorized workspace");let c=typeof i.payload?.workspacePath==="string"?i.payload.workspacePath:l.workspaceContext?.workspaceRoot;if(!c)throw Error("workspacePath is required");if(!l.crossWorkspace&&Np(c)!==Np(l.workspaceContext?.workspaceRoot??""))throw Error("Plugin workspace is outside the connection's authority");let g=i.sessionId,b={workspacePath:c,...g?{sessionId:g}:{}},I=Promise.resolve().then(async()=>i.command==="plugins.commands.list"?{catalog:await u.list(b)}:{result:await u.run({...b,prompt:String(i.payload?.prompt??"")})});this.pendingPluginCommands.add(I);try{return{version:i.version,requestId:i.requestId,ok:!0,payload:await I}}finally{this.pendingPluginCommands.delete(I)}}case"settings.list":return await this.handleSettingsList(i);case"settings.toggle":return await this.handleSettingsToggle(i);case"connector.channels":case"connector.configure":case"connector.delete_config":case"connector.start":case"connector.stop":case"connector.supervised":return await _2(this.ctx,i);case"settings.get":case"settings.patch":return{version:i.version,requestId:i.requestId,ok:!1,error:{code:"not_implemented",message:`${i.command} is not implemented yet.`}};default:{let u=await this.scheduleCommands.handleCommand(i,l);if(u.ok){let c=NJ(i.command);if(c)this.publish(Yt(c,u.payload))}return u}}}captureFailedReply(i,l){if(l.ok||!l.error||!jJ(l.error.code))return;B(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(l.error.message),severity:l.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext(i),errorCode:l.error.code}})}commandTelemetryContext(i){return{command:i.command,requestId:i.requestId,clientId:i.clientId,sessionId:typeof i.payload?.sessionId==="string"?i.payload.sessionId:i.sessionId}}async handleSettingsList(i){try{let l=await this.settings.list(pE(i.payload));return{version:i.version,requestId:i.requestId,ok:!0,payload:{snapshot:l}}}catch(l){return{version:i.version,requestId:i.requestId,ok:!1,error:{code:"settings_list_failed",message:l instanceof Error?l.message:String(l)}}}}async handleSettingsToggle(i){try{let l=await this.settings.toggle(FJ(i.payload));return this.publish(Yt("settings.changed",{types:l.changedTypes,snapshot:l.snapshot})),{version:i.version,requestId:i.requestId,ok:!0,payload:{snapshot:l.snapshot,changedTypes:l.changedTypes}}}catch(l){return{version:i.version,requestId:i.requestId,ok:!1,error:{code:"settings_toggle_failed",message:l instanceof Error?l.message:String(l)}}}}handleHubDrain(i){let l=i.payload?.draining!==!1,u=typeof i.payload?.reason==="string"?i.payload.reason:void 0;if(this.draining!==l)this.draining=l,this.publish(Yt("hub.drain_changed",{draining:this.draining,...u?{reason:u}:{}})),Ae("info","hub.drain_changed",{draining:this.draining,reason:u});return ue(i,this.describeStatus())}async handlePluginsReload(i){let l=typeof i.payload?.plugin==="string"?i.payload.plugin.trim():"";if(!l)return ve(i,"invalid_plugin","plugins.reload requires a plugin name or path");let u=await this.plugins.reload(l);if(u.length===0)return ve(i,"plugin_not_found",`No loaded plugin matches "${l}"`);return ue(i,{plugins:u})}handleHubStatus(i){return ue(i,this.describeStatus())}describeStatus(){let i=0;for(let l of this.activeRpcTurnCountBySession.values())i+=l;return{hubId:this.hubId,draining:this.draining,activeRpcTurns:i,activeCloudCommands:this.cloud.activeCommands,activePluginRequests:this.pendingPluginCommands.size,pendingRuns:this.runQueue?.countPending()??0,eventLog:this.eventLog?{lastSequence:this.eventLog.lastSequence()}:void 0,idle:i===0&&this.cloud.activeCommands===0&&this.pendingPluginCommands.size===0&&(this.runQueue?.countPending()??0)===0}}isDraining(){return this.draining}replayEventsAfter(i,l){if(!this.eventLog)return[];return this.eventLog.listAfter(i,{sessionId:l.sessionId},l.limit)}lastEventSequence(){return this.eventLog?.lastSequence()??0}subscribe(i,l,u){let c=this.listeners.get(i)??new Set,g={sessionId:u?.sessionId,listener:l};c.add(g),this.listeners.set(i,c);let b=this.cloud.snapshot();queueMicrotask(()=>{if(!this.listeners.get(i)?.has(g))return;try{g.listener(Yt("cloud.event",{...b,snapshots:g.sessionId?b.snapshots.filter((k)=>k.sessionId===g.sessionId):b.snapshots,...g.sessionId?{sessionId:g.sessionId}:{}},g.sessionId))}catch(k){Pi("listener threw while recovering cloud state",k)}});let I=GX(this.ctx,u?.sessionId);return queueMicrotask(()=>{if(!this.listeners.get(i)?.has(g))return;let k=[...I,...QX(this.ctx,i,u?.sessionId)];for(let T of k)try{g.listener(T)}catch(E){Pi("listener threw while re-issuing pending request",E)}}),()=>{let k=this.listeners.get(i);if(!k)return;if(k.delete(g),k.size===0)this.listeners.delete(i)}}detachClientFromSessions(i){for(let[l,u]of this.sessionState.entries()){if(u.participants.delete(i),u.createdByClientId===i)u.createdByClientId=void 0;if(u.participants.size===0)this.sessionState.delete(l)}Ql(this.ctx,(l)=>l.targetClientId===i,Xu)}publish(i){if(this.eventLog&&i.event!=="cloud.event")try{i=this.eventLog.append(i)}catch(l){Pi(`event log append failed for ${i.event}`,l)}for(let l of this.listeners.values())for(let u of l){if(u.sessionId&&u.sessionId!==i.sessionId)continue;try{u.listener(i)}catch(c){Pi(`listener threw while publishing ${i.event}`,c),B(this.options.telemetry,{component:"core",operation:"hub.publish",error:c,severity:"warn",handled:!0,context:{event:i.event,sessionId:i.sessionId}})}}}}function jJ(i){return i==="session_not_found"||i==="session_messages_not_found"||i==="hub_command_timeout"||i.endsWith("_failed")}var mZ=3;class hE extends Error{lockFile;constructor(i){super(`Hub instance lock is held by a live Hub: ${i}. Connect to the running Hub or diagnose it; never replace it.`);this.name="HubLockHeldError",this.lockFile=i}}function XJ(i){return i instanceof Error&&i.name==="HubLockHeldError"}function JJ(i){return`${i}.instance.lock`}class Ul{db;lockFile;constructor(i,l){this.lockFile=i,this.db=l}get held(){return this.db!==void 0}release(){let i=this.db;if(!i)return;this.db=void 0;try{i.exec("ROLLBACK;")}catch{}i.close?.()}static acquire(i){let l=!1,u;try{KJ(GJ(i),{recursive:!0}),l=WJ(i),u=V(i)}catch{return new Ul(i,void 0)}try{u.exec("PRAGMA busy_timeout = 0;"),u.exec("BEGIN EXCLUSIVE;")}catch(c){if(u.close?.(),VJ(c))throw new hE(i);return new Ul(i,void 0)}if(!l)try{zJ(i,384)}catch{}return new Ul(i,u)}}function VJ(i){let l=i instanceof Error?i.message:String(i),u=i?.code;return u==="SQLITE_BUSY"||u==="SQLITE_LOCKED"||l.includes("SQLITE_BUSY")||l.includes("SQLITE_LOCKED")||l.includes("database is locked")}var eV=200,tV=1000;function nm(i){return{command:i.envelope.command,requestId:i.envelope.requestId,clientId:i.envelope.clientId,sessionId:i.envelope.sessionId}}function bl(i,l,u){return{version:i.envelope.version,requestId:i.envelope.requestId,ok:!1,error:{code:l,message:u}}}function rV(i,l,u=!1){let c=i.envelope.payload??{},g=i.envelope.clientId?.trim(),b=c.clientId?.trim()||g;if(!b||g&&b!==g)throw Error("Registration clientId must match the command connection");let I=c.workspaceContext?.workspaceRoot?.trim(),k=u?I||l?.trim():l?.trim();if(!k)return{clientId:b};let T=im(k);if(!u&&I&&im(I)!==T)throw Error("Registration workspace must match the Hub-authorized workspace");let E=im(c.workspaceContext?.cwd?.trim()||T),A=QJ(T,E);if(A===".."||A.startsWith(`..${ZJ}`)||YJ(A))throw Error("Registration cwd must be inside its workspace");return{clientId:b,workspaceContext:{workspaceRoot:T,cwd:E},...u?{crossWorkspace:!0}:{}}}class fE{transport;telemetry;workspaceRoot;constructor(i,l,u){this.transport=i,this.telemetry=l,this.workspaceRoot=u}attach(i,l={}){let u=new Map,c=new Set,g,b=!1,I=(A)=>{try{i.send(JSON.stringify(A))}catch(C){console.error(`[hub] failed to send websocket frame: ${C instanceof Error?C.stack||C.message:String(C)}`)}},k=(A)=>{if(A.event==="cloud.event"&&!g)return;I({kind:"event",envelope:A})},T=async(A)=>{try{let C=JSON.parse(A.data);switch(C.kind){case"command":{let N;if(g&&C.envelope.command==="client.register"){I({kind:"reply",envelope:bl(C,"client_already_registered","This connection already owns a registered client.")});break}if(g&&C.envelope.clientId?.trim()!==g.clientId){I({kind:"reply",envelope:bl(C,"client_authority_mismatch","Command clientId does not belong to this connection.")});break}if(C.envelope.command==="client.register")try{N=rV(C,this.workspaceRoot,l.allowRegisteredWorkspace)}catch(ee){I({kind:"reply",envelope:bl(C,"invalid_client_registration",ee instanceof Error?ee.message:String(ee))});break}let O=performance.now(),L=!1,D=nm(C);Ae("info","command.start",D);let U=setTimeout(()=>{if(L)return;Ae("warn","command.slow",{...D,elapsedMs:Math.round(performance.now()-O)})},fs),F=this.transport.command(C.envelope,g??null);F.then((ee)=>{if(!L)return;Ae(ee.ok?"warn":"error","command.late_end",{...D,elapsedMs:Math.round(performance.now()-O),ok:ee.ok,errorCode:ee.error?.code,errorMessage:ee.error?.message})},(ee)=>{if(!L)return;Ae("error","command.late_error",{...D,elapsedMs:Math.round(performance.now()-O),error:ee})});let j=!1,H,Q,z=ei(C.envelope.command,C.envelope.timeoutMs);try{Q=z===null?await F:await Promise.race([F,new Promise((ee)=>{H=setTimeout(()=>{j=!0,B(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${C.envelope.command} did not complete within ${z}ms.`),severity:"error",handled:!0,context:{...D,timeoutMs:z}}),ee(bl(C,"hub_command_timeout",`Hub command ${C.envelope.command} did not complete within ${z}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${C.envelope.requestId}.`))},z)})])}catch(ee){if(clearTimeout(U),H)clearTimeout(H);throw ee}if(L=j,clearTimeout(U),H)clearTimeout(H);let W=Math.round(performance.now()-O);if(j)Ae("error","command.timeout",{...D,durationMs:W,timeoutMs:z});else Ae(Q.ok?"info":"warn","command.end",{...D,durationMs:W,ok:Q.ok,errorCode:Q.error?.code,errorMessage:Q.error?.message});if(C.envelope.command==="client.register"&&Q.ok){if(N)c.add(N.clientId),g=N}else if(C.envelope.command==="client.unregister"&&Q.ok){let ee=C.envelope.clientId?.trim();if(ee)c.delete(ee),g=void 0}I({kind:"reply",envelope:Q});break}case"stream.subscribe":{let N=`${C.clientId}:${C.sessionId??"*"}`;if(u.has(N))break;let O=typeof C.sinceSequence==="number"&&Number.isFinite(C.sinceSequence)&&C.sinceSequence>=0?Math.floor(C.sinceSequence):void 0;if(O===void 0||typeof this.transport.replayEventsAfter!=="function"){let z=await this.transport.subscribe(C.clientId,k,{sessionId:C.sessionId});u.set(N,z);break}let L=!1,D=O,U=[],F=new Set,j=(z)=>{if(typeof z.sequence==="number"){if(z.sequence<=D)return;D=z.sequence}if(z.eventId&&F){if(F.has(z.eventId))return;F.add(z.eventId)}k(z)},H=(z)=>{if(!L){U.push(z);return}j(z)},Q=await this.transport.subscribe(C.clientId,H,{sessionId:C.sessionId});u.set(N,Q);try{let z=0;while(!b&&z<tV){let W=D,ee=this.transport.replayEventsAfter(D,{sessionId:C.sessionId,limit:eV});if(ee.length===0)break;for(let te of ee)j(te);if(D<=W)break;z+=1,await new Promise((te)=>setTimeout(te,0))}}finally{L=!0;for(let z of U)j(z);U.length=0,F=void 0}break}case"stream.unsubscribe":{let N=`${C.clientId}:${C.sessionId??"*"}`;u.get(N)?.(),u.delete(N);break}case"reply":case"event":break}}catch(C){let N=typeof A.data==="string"?$t(A.data):void 0;if(!N||N.kind!=="command"){Ae("error","rejected malformed websocket frame",{error:C});return}Ae("error","command.error",{...nm(N),error:C}),B(this.telemetry,{component:"core",operation:"hub.websocket_command",error:C,severity:"error",handled:!0,context:nm(N)}),I({kind:"reply",envelope:bl(N,"command_failed",C instanceof Error?C.message:"Unknown hub error")})}},E=()=>{if(b)return;b=!0;for(let A of u.values())A();u.clear();for(let A of c)this.transport.command({version:"v1",command:"client.unregister",clientId:A});c.clear(),i.removeEventListener("message",T),i.removeEventListener("close",E)};return i.addEventListener("message",T),i.addEventListener("close",E),E}}class gE{transport;constructor(i){this.transport=i}command(i,l){return this.transport.handleCommand(i,l)}subscribe(i,l,u){return this.transport.subscribe(i,l,u)}replayEventsAfter(i,l){return this.transport.replayEventsAfter?.(i,l)??[]}}function yE(i){if(typeof i==="string")return i;if(i instanceof Uint8Array)return Buffer.from(i).toString();if(i instanceof ArrayBuffer)return Buffer.from(i).toString();if(Array.isArray(i))return Buffer.concat(i.map((l)=>Buffer.from(l))).toString();return String(i)}function sV(i){return{send(l){i.send(l)},addEventListener(l,u){if(l==="message"){i.on("message",(c)=>{u({data:yE(c)})});return}i.on("close",u)},removeEventListener(){}}}function iV(i){try{i.write(`HTTP/1.1 400 Bad Request\r
1135
+ Connection: close\r
1136
+ Content-Length: 0\r
1137
+ \r
1138
+ `),i.end()}catch{i.destroy()}}function nV(i){try{i.write(`HTTP/1.1 401 Unauthorized\r
1139
+ Connection: close\r
1140
+ Content-Length: 0\r
1141
+ \r
1142
+ `),i.end()}catch{i.destroy()}}function oV(i){try{i.write(`HTTP/1.1 503 Service Unavailable\r
1143
+ Connection: close\r
1144
+ Content-Length: 0\r
1145
+ \r
1146
+ `),i.end()}catch{i.destroy()}}function qd(i,l){if(!i||!l)return!1;let u=Buffer.from(i,"utf8"),c=Buffer.from(l,"utf8");return u.length===c.length&&BJ(u,c)}function Vb(i,l){let u=i&&typeof i==="object"&&"code"in i&&typeof i.code==="string"?i.code:void 0,c=i instanceof Error?i.message:typeof i==="string"?i:"Unknown startup error",g=`Failed to start hub server on ${l.host}:${l.port}${l.pathname}: ${c}`,b=Error(u?`${g} (${u})`:g);if(u)i.code=u,b.code=u;if(i instanceof Error&&i.stack)b.stack=`${b.name}: ${b.message}
1147
+ Caused by: ${i.stack}`;return b}function aV(i){return i instanceof Error&&"code"in i&&i.code==="EADDRINUSE"}function Yb(i,l,u,c){try{let g=new td(i),b=new td(Do(l,u===0?1:u,c));return g.protocol===b.protocol&&g.hostname===b.hostname&&g.pathname===b.pathname&&(u===0||g.port===b.port)}catch{return!1}}function Qb(i,l,u){return Error(`Hub owner ${i} is already running at ${l}; refusing a second endpoint at ${u}`)}var zs=new Map,Zb="cline-hub-auth.",lV=30000,eI=2000,dV=3000,uV=100;async function tI(i,l){let u;try{return await Promise.race([i.then(()=>!0,()=>!0),new Promise((c)=>{u=setTimeout(()=>c(!1),l)})])}finally{if(u)clearTimeout(u)}}function og(i){return Array.isArray(i)?i.join(","):i??""}function rI(i){return i===32||i===9}function om(i){let l=og(i).trim(),u="bearer";if(l.length<=6||l.slice(0,6).toLowerCase()!=="bearer"||!rI(l.charCodeAt(6)))return null;let c=7;while(c<l.length&&rI(l.charCodeAt(c)))c+=1;return l.slice(c).trim()||null}function cV(i){for(let l of og(i).split(",")){let u=l.trim();if(u.startsWith(Zb))return u.slice(Zb.length).trim()||null}return null}function vE(i){let l=i.trim().toLowerCase();return l==="localhost"||l==="127.0.0.1"||l==="::1"||l==="[::1]"}function pV(i){let l=og(i).trim();if(!l)return!1;try{return vE(new td(l).hostname)}catch{return!1}}async function wE(i){let l=i.owner??nd(),u=i.host??"127.0.0.1",c=i.pathname??"/hub",g=i.port??Vh(),b=g,I=Do(u,g,c),k=Qo(),T=yk(),E=dR(),A=Ul.acquire(JJ(l.discoveryPath));if(!A.held)Ae("warn","instance_lock.unavailable",{lockFile:A.lockFile});let C;try{C=new mE({...i,owner:l}),await C.start()}catch(G){throw A.release(),G}let N=C.getHubId(),O=new fE(new gE(C),i.telemetry,i.workspaceRoot),L=new Set,D=new Date().toISOString(),U={protocolVersion:zi,minClientProtocolVersion:va,maxClientProtocolVersion:wa,capabilities:hs,coreVersion:jl.version,buildId:k,buildEpochMs:T,pid:process.pid,startedAt:D},F=new Set,j,H,Q,z=!1,W=()=>{if(H)return H;if(Q){let le=zs.get(l.discoveryPath);if(le?.server===Q)le.state="closing"}if(j)clearInterval(j),j=void 0;let G=new Promise((le,Ie)=>{oe.close((we)=>{if(we){Ie(we);return}le()})}),se=new Promise((le,Ie)=>{te.close((we)=>{if(we){Ie(we);return}le()})}),Pe=Promise.resolve().then(()=>C.stop()),Le=Pe.then(async()=>{await mR(l.discoveryPath,N)}),Te=(async()=>{let le=(await Promise.allSettled([G,se,Pe,Le])).flatMap((Ie)=>Ie.status==="rejected"?[Ie.reason]:[]);if(le.length>0)throw AggregateError(le,"hub server close failed")})().finally(()=>{if(zs.get(l.discoveryPath)?.server===Q)zs.delete(l.discoveryPath);A.release()});H={transportStopped:Pe,closed:Te};for(let le of F)le.terminate?.();F.clear();for(let le of L)le();return L.clear(),H},ee=()=>W().closed,te=HJ.createServer((G,se)=>{if(!z){se.statusCode=503,se.end("Starting");return}if((G.url??"/")==="/health"){let Le=JSON.stringify({ok:!0,hubId:N,protocolVersion:U.protocolVersion,minClientProtocolVersion:U.minClientProtocolVersion,maxClientProtocolVersion:U.maxClientProtocolVersion,coreVersion:U.coreVersion,buildId:U.buildId,buildEpochMs:U.buildEpochMs,draining:C.isDraining(),host:u,port:b,url:I});se.statusCode=200,se.setHeader("content-type","application/json"),se.end(Le);return}if((G.url??"/")==="/status"){if(!qd(om(G.headers.authorization),E)){se.statusCode=401,se.end("Unauthorized");return}let Le=JSON.stringify({hubId:N,...U,authToken:E,host:u,port:b,url:I,updatedAt:new Date().toISOString()});se.statusCode=200,se.setHeader("content-type","application/json"),se.end(Le);return}if((G.url??"/")==="/version"){se.statusCode=200,se.setHeader("content-type","application/json"),se.end(JSON.stringify(U));return}let Pe=new td(G.url??"/",`http://${u}:${b}`);if(Pe.pathname==="/drain"&&G.method==="POST"){if(!qd(om(G.headers.authorization),E)){se.statusCode=401,se.end("Unauthorized");return}let Le=Pe.searchParams.get("off")===null;C.handleCommand({version:zi,command:"hub.drain",payload:{draining:Le,reason:Pe.searchParams.get("reason")??"authenticated HTTP drain request"}}).then((Te)=>{se.statusCode=Te.ok?200:500,se.setHeader("content-type","application/json"),se.end(JSON.stringify(Te.payload??{ok:Te.ok}))},()=>{se.statusCode=500,se.end("Drain failed")});return}if(Pe.pathname==="/shutdown"&&G.method==="POST"){if(!qd(om(G.headers.authorization),E)){se.statusCode=401,se.end("Unauthorized");return}let Le=!1,Te=()=>{if(Le)return;Le=!0;try{Promise.resolve(i.onShutdownRequested?.()).catch(()=>{return})}catch{}finally{ee().catch(()=>{return})}};se.statusCode=202,se.setHeader("content-type","application/json"),se.setHeader("connection","close");let le=setTimeout(Te,1000);le.unref?.(),se.end(JSON.stringify({ok:!0}),()=>{setImmediate(()=>{clearTimeout(le),Te()})});return}se.statusCode=404,se.end("Not found")}),oe=new Zo.default({noServer:!0});j=setInterval(()=>{for(let G of F){if(G.isAlive===!1){G.heartbeatTerminated=!0;try{G.terminate?.()}catch{}F.delete(G);continue}G.isAlive=!1;try{G.ping?.()}catch{try{G.terminate?.()}catch{}F.delete(G)}}},lV),te.on("upgrade",(G,se,Pe)=>{if(!z){oV(se);return}if(new td(G.url??"/",`http://${u}:${b}`).pathname!==c){se.destroy();return}let Le=qd(cV(G.headers["sec-websocket-protocol"]),E);if(!(Le||vE(u)&&pV(G.headers.origin))){nV(se);return}try{oe.handleUpgrade(G,se,Pe,(Te)=>{let le=Te;le.isAlive=!0,le.on("pong",()=>{le.isAlive=!0}),F.add(le),le.once("close",(we,He)=>{Ae("info","socket.closed",{code:we,reason:yE(He).slice(0,200)||void 0,heartbeatTerminated:le.heartbeatTerminated??!1,serverClosing:H!==void 0})});let Ie=O.attach(sV(Te),{allowRegisteredWorkspace:Le});L.add(Ie),Te.once("close",()=>{F.delete(le),Ie(),L.delete(Ie)})})}catch{iV(se)}});try{await new Promise((G,se)=>{te.once("error",(Pe)=>{se(Vb(Pe,{host:u,port:g,pathname:c}))}),te.listen(g,u,()=>{let Pe=te.address();if(!Pe||typeof Pe==="string"){se(Vb(Error("Failed to resolve hub port"),{host:u,port:g,pathname:c}));return}b=Pe.port,I=Do(u,b,c),G()})})}catch(G){if(j)clearInterval(j),j=void 0;if(G instanceof Error)G.hubInstanceLockHeld=A.held;throw await tI(Promise.resolve().then(()=>C.stop()),eI),A.release(),G}try{await vk(l.discoveryPath,{hubId:N,protocolVersion:zi,minClientProtocolVersion:va,maxClientProtocolVersion:wa,capabilities:[...U.capabilities],coreVersion:jl.version,buildId:k,buildEpochMs:T,authToken:E,host:u,port:b,url:I,pid:process.pid,startedAt:D,updatedAt:D}),z=!0}catch(G){if(!await tI(W().closed,eI))try{te.closeAllConnections(),te.unref()}catch{}throw G}return Q={host:u,port:b,url:I,authToken:E,beginClose:W,close:ee},Q}async function mV(i){let l=i.owner??nd(),u=i.host!==void 0||i.port!==void 0||i.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),c=i.host??"127.0.0.1",g=i.port??Vh(),b=i.pathname??"/hub",I=Do(c,g,b),k=l.discoveryPath,T=(A)=>{if(!u)nc(A.url,A.authToken);return A},E=zs.get(k);if(E){let A=await E.promise;if(E.state==="closing"){if(await A.beginClose().closed.catch(()=>{return}),zs.get(k)===E)zs.delete(k)}else if(Yb(A.url,c,g,b)||i.allowPortFallback===!0)return T({server:A,url:A.url,authToken:A.authToken,action:"reuse"});else throw Qb(l.ownerId,A.url,I)}return await bk(l.discoveryPath,async()=>{let A=await Mr(l.discoveryPath);if(A?.url){let O=await od(A.url,{authToken:A.authToken});if(O?.url&&Xh(O)&&await Ls(O.url,{authToken:A.authToken})){if(Yb(A.url,c,g,b)||i.allowPortFallback===!0)return T({url:O.url,authToken:A.authToken,action:"reuse"});throw Qb(l.ownerId,A.url,I)}if(O?.url){let L={url:O.url,authToken:A.authToken,pid:O.pid??A.pid};if(await Tk(L)){if(await Ls(O.url,{authToken:A.authToken}))return T({url:O.url,authToken:A.authToken,action:"reuse"})}else await ld(L,l.discoveryPath)}else await ea(l.discoveryPath)}let C=async(O)=>{let L=wE({...O,owner:l}),D={promise:L,state:"starting"};zs.set(k,D);try{let U=await L;return D.server=U,D.state="open",T({server:U,url:U.url,authToken:U.authToken,action:"started"})}catch(U){if(zs.get(k)===D)zs.delete(k);throw U}},N=Date.now()+dV;for(;;)try{return await C(i)}catch(O){if(XJ(O)&&Date.now()<N){await new Promise((L)=>setTimeout(L,uV));continue}if(!i.allowPortFallback||!aV(O))throw O;return await C({...i,port:0})}})}function bE(){return re()==="production"?ad():ra()}function hV(i){return re()!=="production"&&!i}async function gZ(i){let l=ic({host:i.host,port:i.port,pathname:i.pathname});return await wE({...i,...l,owner:bE()})}async function yZ(i){let l=i.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),u=ic({host:i.host,port:i.port,pathname:i.pathname});return await mV({...i,...u,allowPortFallback:i.allowPortFallback??hV(l),owner:bE()})}export{fE as BrowserWebSocketHubAdapter,vR as DEFAULT_HUB_HOST,bR as DEFAULT_HUB_PATHNAME,wR as DEFAULT_HUB_PORT,mZ as HUB_LOCK_HELD_EXIT_CODE,z_ as HubCloudSessionService,Hl as HubCommandError,dE as HubEventLogStore,Ul as HubInstanceLock,hE as HubLockHeldError,ng as HubRunAdmissionRejectedError,V_ as HubRunQueue,kI as HubScheduleCommandService,FI as HubScheduleService,mE as HubServerTransport,EP as HubSessionClient,kt as HubTransportError,AP as HubUIClient,gE as NativeHubTransportAdapter,sa as NodeHubClient,Qu as ScheduledTaskInputSchema,Mx as TASKS_SYSTEM_PROMPT_RULE,Bh as TASKS_TOOL_NAME,$x as TasksToolInputSchema,KY as __test__,IP as checkManagedHubBuildMismatch,ea as clearHubDiscovery,mR as clearHubDiscoveryIfOwned,Kh as compareHubBuilds,Ok as connectToHub,kY as createConfiguredTelemetryHandle,Sx as createConfiguredTelemetryService,dR as createHubAuthToken,Do as createHubServerUrl,jY as createInMemoryHubOwnerContext,j5 as createLocalHubScheduleRuntimeHandlers,qx as createTasksPromptExtension,Fx as createTasksTool,wm as ensureCompatibleLocalHubUrl,cu as ensureDetachedHubServer,yZ as ensureHubServer,mV as ensureHubWebSocketServer,zC as executeScheduleOperation,sc as getManagedHubCompatibility,YY as hasActiveHubSessions,Tk as hubHasLiveSessions,BY as isDiscoveryFilePresent,VY as isHubCommandTimeoutError,XJ as isHubLockHeldError,tP as isHubReconnectableTransportError,vE as isLocalHubHostName,pV as isLocalHubOrigin,Xh as isManagedHubReusable,Pk as localHubHasNoActiveSessions,pu as normalizeHubWebSocketUrl,XY as prewarmDetachedHubServer,eQ as probeHubConnection,od as probeHubServer,oc as queryHubSessionActivity,om as readBearerToken,Mr as readHubDiscovery,$R as readSupersededHubDiscovery,nc as rememberRecoverableLocalHubUrl,Ao as requestHubDrain,Mk as requestHubShutdown,Z as resolveClineDataDir,At as resolveClineDir,oP as resolveCompatibleLocalHubUrl,IR as resolveDefaultHubHost,kR as resolveDefaultHubPathname,Vh as resolveDefaultHubPort,yk as resolveHubBuildEpochMs,Qo as resolveHubBuildId,Gh as resolveHubBuildIdentity,ic as resolveHubEndpointOptions,MJ as resolveHubEventLogPath,JJ as resolveHubInstanceLockPath,nd as resolveHubOwnerContext,B2 as resolveHubRunQueuePath,mP as resolveHubUrl,ad as resolveProductionHubOwnerContext,ra as resolveSharedHubOwnerContext,WY as resolveWorkspaceHubOwnerContext,QY as restartLocalHubIfIdleAfterStartupTimeout,ld as retireDiscoveredHub,tQ as sendHubCommand,GY as setHubDaemonLauncher,jR as spawnDetachedHubServer,BR as spawnDetachedHubServerWithRetry,gZ as startHubServer,wE as startHubWebSocketServer,aP as stopLocalHubServerGracefully,Rk as summarizeHubSessionActivity,Ik as toHubHealthUrl,hR as toHubStatusUrl,wK as truncateNotificationBody,JY as upgradeManagedHub,Ls as verifyHubConnection,iQ as watchManagedHubBuildMismatch,bk as withHubStartupLock,vk as writeHubDiscovery};