@cline/core 0.0.95 → 0.2.0-nightly.1793312794

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 (175) hide show
  1. package/dist/ClineCore.d.ts +6 -1
  2. package/dist/account/rpc.d.ts +3 -1
  3. package/dist/account/types.d.ts +2 -0
  4. package/dist/artifacts/cloud/fetch.d.ts +8 -0
  5. package/dist/artifacts/cloud/publish.d.ts +6 -0
  6. package/dist/artifacts/publish.d.ts +30 -0
  7. package/dist/cline-core/runtime-services.d.ts +4 -2
  8. package/dist/cloud/computer-use-prompt.d.ts +9 -0
  9. package/dist/cloud/controller.d.ts +26 -4
  10. package/dist/cloud/hub-client.d.ts +53 -0
  11. package/dist/cloud/hub-protocol.d.ts +32 -0
  12. package/dist/cloud/index.d.ts +5 -0
  13. package/dist/cloud/index.js +34 -17
  14. package/dist/cloud/types.d.ts +4 -1
  15. package/dist/extensions/context/compaction-shared.d.ts +1 -0
  16. package/dist/extensions/context/compaction.d.ts +7 -0
  17. package/dist/extensions/context/summarize-conversation.d.ts +7 -0
  18. package/dist/extensions/context/summary-generation.d.ts +14 -0
  19. package/dist/extensions/mcp/apps.d.ts +16 -0
  20. package/dist/extensions/mcp/client.d.ts +1 -0
  21. package/dist/extensions/mcp/index.d.ts +5 -1
  22. package/dist/extensions/mcp/manager.d.ts +2 -1
  23. package/dist/extensions/mcp/session-apps.d.ts +28 -0
  24. package/dist/extensions/mcp/types.d.ts +22 -0
  25. package/dist/extensions/plugin/plugin-command-origin.d.ts +8 -0
  26. package/dist/extensions/plugin/plugin-registry.d.ts +1 -0
  27. package/dist/extensions/plugin/plugin-runtime.d.ts +7 -0
  28. package/dist/hub/client/index.d.ts +6 -0
  29. package/dist/hub/client/managed-hub-build-watcher.d.ts +2 -0
  30. package/dist/hub/client/plugin-commands.d.ts +4 -0
  31. package/dist/hub/client/session-client.d.ts +2 -0
  32. package/dist/hub/daemon/entry.js +248 -229
  33. package/dist/hub/daemon/index.d.ts +2 -0
  34. package/dist/hub/index.d.ts +1 -0
  35. package/dist/hub/index.js +238 -219
  36. package/dist/hub/runtime-host/hub-runtime-host.d.ts +6 -0
  37. package/dist/hub/server/cloud-session-service.d.ts +52 -0
  38. package/dist/hub/server/handlers/capability-handlers.d.ts +18 -1
  39. package/dist/hub/server/handlers/context.d.ts +13 -2
  40. package/dist/hub/server/handlers/mcp-apps-handlers.d.ts +5 -0
  41. package/dist/hub/server/handlers/session-handlers.d.ts +4 -0
  42. package/dist/hub/server/hub-server-options.d.ts +3 -0
  43. package/dist/hub/server/hub-server-transport.d.ts +2 -0
  44. package/dist/index.d.ts +10 -5
  45. package/dist/index.js +284 -258
  46. package/dist/plugin-runtime/node_modules/@cline/agents/dist/index.js +76 -0
  47. package/dist/plugin-runtime/node_modules/@cline/agents/package.json +1 -0
  48. package/dist/plugin-runtime/node_modules/@cline/core/dist/ai-sdk-bdvd54cj.js +1 -0
  49. package/dist/plugin-runtime/node_modules/@cline/core/dist/anthropic-d88t4w67.js +1 -0
  50. package/dist/plugin-runtime/node_modules/@cline/core/dist/bedrock-4rh6dw0e.js +1 -0
  51. package/dist/plugin-runtime/node_modules/@cline/core/dist/cline-dex049wz.js +1 -0
  52. package/dist/plugin-runtime/node_modules/@cline/core/dist/cloud/index.js +38 -0
  53. package/dist/plugin-runtime/node_modules/@cline/core/dist/community-adrseffv.js +1 -0
  54. package/dist/plugin-runtime/node_modules/@cline/core/dist/foundation-models-embedding-model-strategy-SAVQFBF4-vf44v1q1.js +1 -0
  55. package/dist/plugin-runtime/node_modules/@cline/core/dist/foundation-models-language-model-strategy-BPQO66W7-np6pavev.js +1 -0
  56. package/dist/plugin-runtime/node_modules/@cline/core/dist/getMachineId-bsd-1xg0n8py.js +1 -0
  57. package/dist/plugin-runtime/node_modules/@cline/core/dist/getMachineId-bsd-2h2811k3.js +1 -0
  58. package/dist/plugin-runtime/node_modules/@cline/core/dist/getMachineId-darwin-918h9zb6.js +2 -0
  59. package/dist/plugin-runtime/node_modules/@cline/core/dist/getMachineId-darwin-9g9qz8kw.js +2 -0
  60. package/dist/plugin-runtime/node_modules/@cline/core/dist/getMachineId-linux-8p52y0t4.js +1 -0
  61. package/dist/plugin-runtime/node_modules/@cline/core/dist/getMachineId-linux-cr4wnstr.js +1 -0
  62. package/dist/plugin-runtime/node_modules/@cline/core/dist/getMachineId-unsupported-aa72jh2v.js +1 -0
  63. package/dist/plugin-runtime/node_modules/@cline/core/dist/getMachineId-unsupported-k2y10eep.js +1 -0
  64. package/dist/plugin-runtime/node_modules/@cline/core/dist/getMachineId-win-1hvm2h6v.js +1 -0
  65. package/dist/plugin-runtime/node_modules/@cline/core/dist/getMachineId-win-7nqbajdc.js +1 -0
  66. package/dist/plugin-runtime/node_modules/@cline/core/dist/google-nqn5r579.js +1 -0
  67. package/dist/plugin-runtime/node_modules/@cline/core/dist/hub/daemon/entry.js +1166 -0
  68. package/dist/plugin-runtime/node_modules/@cline/core/dist/hub/index.js +1153 -0
  69. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-0ahmqye5.js +2 -0
  70. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-1jwj53tz.js +2 -0
  71. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-3qy7846d.js +14 -0
  72. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-418gvd4a.js +2 -0
  73. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-4etvmc8g.js +2 -0
  74. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-4pm9q9we.js +1 -0
  75. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-4tgv599k.js +2 -0
  76. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-5hwscy9s.js +15 -0
  77. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-6dpcn5cw.js +9 -0
  78. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-7ycwqbm0.js +1 -0
  79. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-8qjtgvqw.js +9 -0
  80. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-8zb5grad.js +1210 -0
  81. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-94jdgxt6.js +2 -0
  82. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-9g67p34k.js +2 -0
  83. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-a9d2sjh0.js +85 -0
  84. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-agemt17a.js +3 -0
  85. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-bhf7enwn.js +1 -0
  86. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-bnwxdgvg.js +1 -0
  87. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-brjxtvsh.js +4 -0
  88. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-bvb7f701.js +1 -0
  89. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-bwet95hr.js +2 -0
  90. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-cadyf2yp.js +14 -0
  91. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-cxfnnrmh.js +9 -0
  92. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-cyyvppz9.js +6 -0
  93. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-d4pbedxj.js +137 -0
  94. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-ddwn220p.js +12 -0
  95. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-edf1hmcw.js +62 -0
  96. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-ejyd73x5.js +1 -0
  97. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-f25bf131.js +4 -0
  98. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-f4rfmj6q.js +3 -0
  99. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-fet3kwk6.js +1 -0
  100. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-ffna8yzn.js +121 -0
  101. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-g2y6ptdc.js +213 -0
  102. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-ge184xvn.js +6 -0
  103. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-gevnedsc.js +13 -0
  104. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-hkmarmve.js +190 -0
  105. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-kqacxn3s.js +39 -0
  106. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-m3gtj35r.js +14 -0
  107. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-neczvge6.js +21 -0
  108. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-p5k5hnam.js +75 -0
  109. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-sdvqs19c.js +20 -0
  110. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-t75m2pgm.js +146 -0
  111. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-v4-qqb2kabr.js +1 -0
  112. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-v6mehmme.js +12 -0
  113. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-v80fh3x3.js +16 -0
  114. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-vd605jwp.js +2 -0
  115. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-vryppqt1.js +1 -0
  116. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-w55v4n1n.js +2 -0
  117. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-w9n2kgjk.js +140 -0
  118. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-yjbp9r76.js +142 -0
  119. package/dist/plugin-runtime/node_modules/@cline/core/dist/index-ztb3cjfh.js +3 -0
  120. package/dist/plugin-runtime/node_modules/@cline/core/dist/index.js +1 -0
  121. package/dist/plugin-runtime/node_modules/@cline/core/dist/jiti-static-kj4rdeey.js +473 -0
  122. package/dist/plugin-runtime/node_modules/@cline/core/dist/jiti-y9tt7gmq.js +1 -0
  123. package/dist/plugin-runtime/node_modules/@cline/core/dist/langfuse-stream-telemetry-bg81k3qh.js +1 -0
  124. package/dist/plugin-runtime/node_modules/@cline/core/dist/langfuse-telemetry-tkbfbx5w.js +1 -0
  125. package/dist/plugin-runtime/node_modules/@cline/core/dist/mistral-mkw95amh.js +1 -0
  126. package/dist/plugin-runtime/node_modules/@cline/core/dist/multipart-parser-9z19cm6q.js +2 -0
  127. package/dist/plugin-runtime/node_modules/@cline/core/dist/ollama-sjp09b7p.js +1 -0
  128. package/dist/plugin-runtime/node_modules/@cline/core/dist/openai-1eyn4hw0.js +1 -0
  129. package/dist/plugin-runtime/node_modules/@cline/core/dist/openai-compatible-f99c7syq.js +1 -0
  130. package/dist/plugin-runtime/node_modules/@cline/core/dist/orchestration-embedding-model-strategy-GT27AFII-19936r1a.js +1 -0
  131. package/dist/plugin-runtime/node_modules/@cline/core/dist/orchestration-language-model-strategy-YEQPUCOT-eavx3zc3.js +1 -0
  132. package/dist/plugin-runtime/node_modules/@cline/core/dist/services/feature-flags/posthog.js +2 -0
  133. package/dist/plugin-runtime/node_modules/@cline/core/dist/services/telemetry/index.js +1 -0
  134. package/dist/plugin-runtime/node_modules/@cline/core/dist/token-04d0mwe8.js +1 -0
  135. package/dist/plugin-runtime/node_modules/@cline/core/dist/token-util-mt7pvm61.js +1 -0
  136. package/dist/plugin-runtime/node_modules/@cline/core/dist/vertex-6armtc3s.js +1 -0
  137. package/dist/plugin-runtime/node_modules/@cline/core/package.json +1 -0
  138. package/dist/plugin-runtime/node_modules/@cline/llms/dist/index.browser.js +16 -0
  139. package/dist/plugin-runtime/node_modules/@cline/llms/dist/index.js +1 -0
  140. package/dist/plugin-runtime/node_modules/@cline/llms/package.json +1 -0
  141. package/dist/plugin-runtime/node_modules/@cline/sdk/dist/index.js +1 -0
  142. package/dist/plugin-runtime/node_modules/@cline/sdk/package.json +1 -0
  143. package/dist/plugin-runtime/node_modules/@cline/shared/dist/automation/index.js +57 -0
  144. package/dist/plugin-runtime/node_modules/@cline/shared/dist/db/index.js +127 -0
  145. package/dist/plugin-runtime/node_modules/@cline/shared/dist/index.browser.js +110 -0
  146. package/dist/plugin-runtime/node_modules/@cline/shared/dist/index.js +1 -0
  147. package/dist/plugin-runtime/node_modules/@cline/shared/dist/node.js +1 -0
  148. package/dist/plugin-runtime/node_modules/@cline/shared/dist/remote-config/index.js +68 -0
  149. package/dist/plugin-runtime/node_modules/@cline/shared/dist/storage/index.js +1 -0
  150. package/dist/plugin-runtime/node_modules/@cline/shared/dist/types/index.js +1 -0
  151. package/dist/plugin-runtime/node_modules/@cline/shared/package.json +1 -0
  152. package/dist/plugin-runtime/package.json +1 -0
  153. package/dist/{extensions → plugin-runtime}/plugin-sandbox-bootstrap.js +129 -129
  154. package/dist/remote/remote-environments.d.ts +1 -0
  155. package/dist/runtime/config/agent-runtime-config-builder.d.ts +2 -0
  156. package/dist/runtime/host/local-runtime-host.d.ts +10 -0
  157. package/dist/runtime/host/runtime-host.d.ts +6 -0
  158. package/dist/runtime/orchestration/runtime-oauth-token-manager.d.ts +3 -0
  159. package/dist/runtime/orchestration/session-runtime-orchestrator.d.ts +10 -1
  160. package/dist/runtime/orchestration/session-runtime.d.ts +2 -0
  161. package/dist/runtime/tools/subprocess-sandbox.d.ts +22 -0
  162. package/dist/services/cloud-handoff/git-preparation.d.ts +22 -0
  163. package/dist/services/global-settings.d.ts +6 -0
  164. package/dist/services/llms/cline-recommended-models.d.ts +2 -0
  165. package/dist/services/local-runtime-bootstrap.d.ts +1 -0
  166. package/dist/services/plugin-command-api.d.ts +47 -0
  167. package/dist/services/plugin-commands.d.ts +25 -27
  168. package/dist/services/skills-cli.d.ts +2 -0
  169. package/dist/services/telemetry/core-events.d.ts +26 -0
  170. package/dist/services/telemetry/index.js +1 -1
  171. package/dist/services/telemetry/run-health.d.ts +40 -0
  172. package/dist/services/telemetry/stall-signals.d.ts +12 -0
  173. package/dist/types/config.d.ts +1 -0
  174. package/dist/types/session.d.ts +7 -0
  175. package/package.json +6 -5
@@ -0,0 +1,1153 @@
1
+ import{Jt,Mn,yo,xo,bo,vo,wo,Zo,er,Wt,pi,To,tr,ir,nr,_o,Nt,ar,Ge,Lt,Ti,va,ji,wa,Ta,as,Pt,os,pe,ye,_a,rs,Xt,ko,or,xe,Io,me,Wn,rr,dn,So,di,mi,sr,Nn,$i,Ut,Eo,Ln,cr,Un,Ve,Ue,qi,Bt,ne,Ft,_t,Ro,zi,lr,ur,Bn,he,y,S,Fn,Ke,pr,jn,$n,dr,mr,hr,re,Me,kt,qn,Gi,_e,Zt,zn,jt,Ze,gr,fr,yr,xr,br,vr,wr,Gn,U,Vn,Kn,P,_r,Hn,_i,ki,ss,mn,cs,ls,us,ka,Ia,Sa,ps,Ea,Ra,Aa,Oa,Ca,Pa,Da,Ma,Wa,Na,La,Ua,Ba,Fa,ja,ds,Et,Vi,Ki,ms,hs,gs,$a,fs,ys,xs,bs,vs,qa,ws,k,Ii,za,et,Hi,gt,$t,Ga,Va,Rt,Si,Z,He,hn,Qn,be,Ka,Ha,Qa,Ya,Dt,Ja,Xa,ei,gn,Za,kr,Ir,Yn,Sr,Er,eo,to,Qi,Xn,ti,tt,Ei,Zn,io,fn,ct,yn,ft,Mt,Ri,K,Ji,ao,oo,st,qt,xn,ge,hi,ii,bn,ea,Xi,zt,Zi}from"../index-ffna8yzn.js";import{wi,ns,xa,Jo,ba}from"../index-3qy7846d.js";import"../index-hkmarmve.js";import{R,kn,Wi}from"../index-w9n2kgjk.js";import{Yo}from"../index-9g67p34k.js";import{Xo}from"../index-6dpcn5cw.js";import{X}from"../index-d4pbedxj.js";import"../index-ddwn220p.js";import"../index-kqacxn3s.js";import"../index-p5k5hnam.js";import"../index-sdvqs19c.js";import"../index-a9d2sjh0.js";import{Cn,Y,ga,q,un,ot,go,Ko,Ho,x,rt,f,h,wt,V,Qo,Je}from"../index-yjbp9r76.js";import{Xr,ui,Zr,es,ts,is,Pn,Dn}from"../index-cadyf2yp.js";import{fo}from"../index-m3gtj35r.js";import{ya,pn}from"../index-bwet95hr.js";import"../index-418gvd4a.js";import"../index-gevnedsc.js";import"../index-f25bf131.js";import"../index-f4rfmj6q.js";import"../index-5hwscy9s.js";import"../index-cyyvppz9.js";import"../index-ztb3cjfh.js";import{oa,xi}from"../index-bhf7enwn.js";import{v,e,n,r,m,o,t,ae,p,w,W,d,sn,s,a,J,je}from"../index-edf1hmcw.js";import{randomUUID as WE}from"node:crypto";import{existsSync as cI,mkdirSync as lm,readFileSync as pI,renameSync as _h,rmdirSync as KE,rmSync as dm,statSync as GE,unlinkSync as mI,writeFileSync as hI}from"node:fs";import{dirname as fI,join as pg}from"node:path";import{setTimeout as XE}from"node:timers/promises";import{isAbsolute as fA,relative as gA,resolve as po,sep as yA}from"node:path";import{basename as vA}from"node:path";import{execFile as VA}from"node:child_process";import{basename as YA,resolve as QA}from"node:path";import{performance as Rg}from"node:perf_hooks";import{promisify as ZA}from"node:util";import{mkdirSync as dC,writeFileSync as uC}from"node:fs";import{isAbsolute as cC,join as UI}from"node:path";import{randomUUID as el}from"node:crypto";import{realpathSync as hm,statSync as WC}from"node:fs";import{isAbsolute as GI,relative as KC,sep as XI}from"node:path";var ZI=v(ui(),1),ek=v(Zr(),1),tk=v(es(),1),rk=v(fo(),1),sk=v(ya(),1),ia=v(ts(),1),an=v(is(),1),na=v(pn(),1),ik=v(Yo(),1);import{mkdirSync as ex,readFileSync as tx,statSync as rx,writeFileSync as sx}from"node:fs";import{dirname as ix}from"node:path";import{existsSync as bx,mkdirSync as Ix,readFileSync as kx,writeFileSync as Sx}from"node:fs";import{resolve as Tx}from"node:path";var _x=v(Xr(),1),Mi=v(ui(),1);import{resolve as jg}from"node:path";var wk=v(ns(),1),bk=v(Xo(),1);import{spawn as Vx}from"node:child_process";import{closeSync as Yx,mkdirSync as Qx,openSync as Zx,readFileSync as eR,unlinkSync as tR}from"node:fs";import{basename as rR,dirname as sR,join as iR}from"node:path";import{fileURLToPath as nR}from"node:url";import{createHash as oR,randomBytes as Ik}from"node:crypto";import{existsSync as aR}from"node:fs";import{mkdir as fm,open as Kg,readFile as kk,rename as lR,rm as ic,writeFile as dR}from"node:fs/promises";import{dirname as Sk,join as Jh}from"node:path";import{join as MR}from"node:path";import{existsSync as SP}from"node:fs";import{readdirSync as DP}from"node:fs";import{homedir as UP}from"node:os";import{isAbsolute as FP,join as Hc,resolve as li}from"node:path";import{setTimeout as ay}from"node:timers/promises";import{createHash as qP}from"node:crypto";import{createHash as lN}from"node:crypto";import{createHash as TO}from"node:crypto";import{existsSync as RO,readFileSync as PO}from"node:fs";import{basename as MO,dirname as Oy,extname as NO,join as OO,resolve as Vd}from"node:path";import{existsSync as tn,readFileSync as ES}from"node:fs";import{builtinModules as $O,createRequire as LO}from"node:module";import{dirname as AS,extname as CS,isAbsolute as DO,relative as t8,resolve as ht}from"node:path";import{fileURLToPath as xS}from"node:url";import{existsSync as Ly}from"node:fs";import{dirname as Dy,join as wu,resolve as UO}from"node:path";import{fileURLToPath as FO}from"node:url";import{existsSync as Xl}from"node:fs";import{createRequire as PS}from"node:module";import{dirname as bu,join as Ys}from"node:path";import{fileURLToPath as ZO}from"node:url";import{spawn as e$}from"node:child_process";import{basename as t$}from"node:path";import{Worker as By}from"node:worker_threads";import{spawn as tv}from"node:child_process";import{randomUUID as XS}from"node:crypto";import{createWriteStream as gL,existsSync as yL,mkdtempSync as vL,renameSync as rv,rmSync as _u,writeFileSync as wL}from"node:fs";import{readdir as bL,readFile as IL,rm as Qd,stat as sv}from"node:fs/promises";import{tmpdir as JS}from"node:os";import{join as Qs}from"node:path";import{StringDecoder as kL}from"node:string_decoder";import{execFile as SL,spawnSync as M8}from"node:child_process";import{readFile as iv}from"node:fs/promises";import*as Rr from"node:fs/promises";import*as zr from"node:path";import*as a0 from"node:os";import*as _s from"node:fs/promises";import*as ks from"node:path";import{createReadStream as A1}from"node:fs";import*as fc from"node:fs/promises";import*as ni from"node:path";import{createInterface as C1}from"node:readline";import{Readable as x1}from"node:stream";import{randomUUID as R1}from"node:crypto";import{spawn as p0}from"node:child_process";import*as m0 from"node:fs/promises";import*as gc from"node:path";import{mkdir as U1}from"node:fs/promises";import{mkdir as q1,writeFile as j1}from"node:fs/promises";import{join as B1}from"node:path";import{spawn as K1}from"node:child_process";import{realpathSync as G1}from"node:fs";import{readdir as X1}from"node:fs/promises";import J1 from"node:os";import Au from"node:path";import{isMainThread as h0,parentPort as vv,Worker as V1}from"node:worker_threads";import{stat as dD}from"node:fs/promises";import uo from"node:path";import{randomUUID as PD}from"node:crypto";import{mkdirSync as zU,writeFileSync as WU}from"node:fs";import{dirname as KU}from"node:path";import{createHash as fF}from"node:crypto";import{lstat as gF,readdir as z0,readFile as Nf,realpath as Of,stat as Vl}from"node:fs/promises";import{validateHeaderName as yF,validateHeaderValue as vF}from"node:http";import{isIP as wF}from"node:net";import{basename as C4,dirname as bF,isAbsolute as W0,join as Fs,relative as K0,resolve as cn}from"node:path";import{chmodSync as qv,existsSync as hp,mkdirSync as UF,readFileSync as FF,renameSync as qF,rmSync as jF,writeFileSync as BF}from"node:fs";import{basename as jv,dirname as Bm}from"node:path";import{existsSync as yq,mkdirSync as vq,readFileSync as wq,renameSync as bq,rmSync as Iq,writeFileSync as kq}from"node:fs";import{dirname as Y0,join as Sq}from"node:path";import{existsSync as Dq,readFileSync as Uq}from"node:fs";import{dirname as Fq,join as Gm}from"node:path";import{createHash as nj}from"node:crypto";import{resolve as oj}from"node:path";import{setTimeout as aj}from"node:timers/promises";import{existsSync as dj,mkdirSync as uj,readFileSync as cj,writeFileSync as pj}from"node:fs";import{dirname as mj}from"node:path";import{existsSync as wc,readFileSync as Ej,statSync as Aj}from"node:fs";import{basename as pT,dirname as Lu,extname as Cj,join as bc,resolve as Yl}from"node:path";import{execFile as Uj,spawn as Fj}from"node:child_process";import{createHash as qj}from"node:crypto";import{mkdir as jj,readdir as Bj,rm as Du,stat as Hj,writeFile as zj}from"node:fs/promises";import{join as Ql}from"node:path";import{promisify as Wj}from"node:util";import{appendFileSync as rB,readFileSync as sB}from"node:fs";import{join as iB}from"node:path";import{existsSync as oB,readdirSync as aB}from"node:fs";import{basename as lB,extname as dB,join as uB}from"node:path";import{spawn as gB}from"node:child_process";import{createHash as LB}from"node:crypto";import{createHash as VB}from"node:crypto";import{resolve as YB}from"node:path";import{existsSync as su,mkdirSync as eH,readdirSync as tH,rmdirSync as rH,rmSync as sH,unlinkSync as iH}from"node:fs";import{dirname as ow,join as pl}from"node:path";import{execFile as mH}from"node:child_process";import{randomUUID as hH}from"node:crypto";import{promisify as fH}from"node:util";import{appendFileSync as AH}from"node:fs";import{join as CH}from"node:path";import{existsSync as RH,readdirSync as PH,readFileSync as MH}from"node:fs";import{basename as lw,extname as NH,join as OH}from"node:path";import{createHash as uz}from"node:crypto";import{watch as cz}from"node:fs";import{readdir as pz,readFile as mz,stat as hz}from"node:fs/promises";import{join as fz}from"node:path";import{readdir as Wf,readFile as yz,realpath as Ep,stat as Uo}from"node:fs/promises";import{basename as zs,dirname as vz,extname as Bu,isAbsolute as wz,join as Cr,relative as bz,resolve as Hs}from"node:path";import{createHash as Dz}from"node:crypto";import{spawn as Zz}from"node:child_process";import{mkdir as eW}from"node:fs/promises";import{StringDecoder as VT}from"node:string_decoder";import{randomUUID as tW}from"node:crypto";import{appendFileSync as vW,existsSync as no,mkdirSync as Mw,readdirSync as wW,readFileSync as Cp,renameSync as Nw,statSync as bW,writeFileSync as Ow}from"node:fs";import{join as xp}from"node:path";import{existsSync as IW,mkdirSync as kW}from"node:fs";import{join as SW}from"node:path";import{existsSync as zW}from"node:fs";import{readFile as WW}from"node:fs/promises";import{readFile as YW,stat as QW}from"node:fs/promises";import{existsSync as nK,mkdirSync as oK}from"node:fs";import{join as aK}from"node:path";import{existsSync as lK,mkdirSync as dK}from"node:fs";import{dirname as uK}from"node:path";import{appendFileSync as cK,existsSync as pK,mkdirSync as Jw,readFileSync as mK,writeFileSync as Vw}from"node:fs";import{readFile as Yw,rm as hK}from"node:fs/promises";import{dirname as Qw,join as fK}from"node:path";import{randomUUID as gK}from"node:crypto";import{mkdir as yK,open as p_,rename as vK,rm as wK}from"node:fs/promises";import{dirname as Zw}from"node:path";import{resolve as $p}from"node:path";import{existsSync as $K,readdirSync as LK,readFileSync as DK,statSync as UK}from"node:fs";import{relative as FK}from"node:path";import{createHash as qK}from"node:crypto";import{existsSync as sG,mkdirSync as iG,realpathSync as nG,watch as oG}from"node:fs";import{relative as aG,resolve as lG}from"node:path";import{stat as uG}from"node:fs/promises";import{join as cG}from"node:path";import{existsSync as Ao,readdirSync as kG,readFileSync as SG}from"node:fs";import{basename as ta,dirname as uh,extname as ch,isAbsolute as k_,join as rg,relative as S_,resolve as ph}from"node:path";import{readFile as TG,writeFile as _G}from"node:fs/promises";import{isAbsolute as xG,relative as RG,resolve as ab}from"node:path";import{existsSync as hh,realpathSync as KG,statSync as GG,watch as XG}from"node:fs";import{relative as JG}from"node:path";import{existsSync as Yr,linkSync as VG,lstatSync as qp,mkdirSync as YG,readdirSync as QG,readFileSync as ZG,realpathSync as pb,renameSync as e2,rmSync as mb,writeFileSync as t2}from"node:fs";import{basename as r2,dirname as s2,isAbsolute as fh,join as jp,relative as P_,resolve as hb,sep as i2}from"node:path";import{createHash as n2}from"node:crypto";import{existsSync as Bp,realpathSync as fb}from"node:fs";import{dirname as o2,isAbsolute as sg,relative as ig,resolve as M_,sep as a2}from"node:path";import{randomUUID as bb}from"node:crypto";import{resolve as Ib}from"node:path";import{randomUUID as _2}from"node:crypto";import{isAbsolute as Pb}from"node:path";import{randomUUID as A2}from"node:crypto";import{randomUUID as L2}from"node:crypto";import{posix as Xu}from"node:path";import{execFile as eX}from"node:child_process";import{existsSync as TX,readdirSync as _X,readFileSync as EX}from"node:fs";import{join as Xb}from"node:path";import{join as rJ}from"node:path";import{join as WJ}from"node:path";import{resolve as rI}from"node:path";import{timingSafeEqual as oV}from"node:crypto";import aV from"node:http";import{URL as id}from"node:url";import{chmodSync as lV,existsSync as dV,mkdirSync as uV}from"node:fs";import{dirname as cV}from"node:path";import{isAbsolute as fV,relative as gV,resolve as nm,sep as yV}from"node:path";var DE=(i,l,u)=>()=>{if(i)try{l=i(i=0)}catch(c){u=[c]}if(u)throw u[0];return l};async function UE(i,l,u,c){let g=FE(l),b=await jE(u,c);if(g.length===0&&!b)return i;let I=[{type:"text",text:i},...g];if(b)I.push(...b);return I}function FE(i){if(!i||i.length===0)return[];let l=[];for(let u of i){let c=qE(u);if(c)l.push(c)}return l}function qE(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 jE(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 T=I instanceof Error?I.message:String(I);return{type:"file",path:b,content:`Error fetching content: ${T}`}}}));if(c.length===0)return;return c}function BE(i){return i.trim().split(/[\\/]/).at(-1)?.toLowerCase().replace(/\.(?:cmd|exe)$/i,"")??""}function HE(i){if(BE(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 zE(i){return i.type==="stdio"?HE(i)??i:i}function Ec(i){if(!i)return;if(i==="http")return"streamableHttp";return i}function on(){return gn()}function JE(i,l){lm(fI(i),{recursive:!0});let u=`${i}.tmp.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}`;try{hI(u,l,{encoding:"utf8",flag:"wx"}),_h(u,i)}catch(c){try{mI(u)}catch{}throw c}}function VE(i){Atomics.wait(EI,0,0,i)}function YE(i){return`${i}.lock`}function gI(){return`${process.pid}.${Date.now()}.${WE()}`}function yI(i,l){lm(fI(i),{recursive:!0});let u=`${i}.tmp.${l}`;dm(u,{recursive:!0,force:!0}),lm(u,{recursive:!0}),hI(pg(u,`owner.${l}`),l,{encoding:"utf8",flag:"wx"});try{return _h(u,i),{lockDir:i,ownerFile:pg(i,`owner.${l}`)}}catch(c){if(dm(u,{recursive:!0,force:!0}),cI(i))return;throw c}}function vI(i,l){let u;try{u=Date.now()-GE(i).mtimeMs}catch(g){if(g.code==="ENOENT")return;throw g}if(u<Ah)return;l.logger?.log(`[mcp-settings] Stale lock directory at ${i} (age ${u}ms); reclaiming.`,{severity:"warn"});let c=`${i}.stale.${gI()}`;try{_h(i,c)}catch(g){if(g.code==="ENOENT")return;throw g}dm(c,{recursive:!0,force:!0})}function QE(i){try{mI(i.ownerFile)}catch(l){if(l.code!=="ENOENT")throw l}try{KE(i.lockDir)}catch(l){let u=l.code;if(u!=="ENOENT"&&u!=="ENOTEMPTY"&&u!=="EEXIST")throw l}}function wI(i){let l=YE(i);if(nd.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:gI()}}function ZE(i,l){let{lockDir:u,token:c}=wI(i),g=l.timeoutMs??Ah,b=Date.now();while(!0){let I=yI(u,c);if(I)return nd.add(u),I;if(Date.now()-b>g)throw new Eh(`Timed out waiting for MCP settings lock at ${u} after ${g}ms.`);vI(u,l),VE(_I)}}async function eA(i,l){let{lockDir:u,token:c}=wI(i),g=l.timeoutMs??Ah,b=Date.now();while(!0){let I=yI(u,c);if(I)return nd.add(u),I;if(Date.now()-b>g)throw new Eh(`Timed out waiting for MCP settings lock at ${u} after ${g}ms.`);vI(u,l),await XE(_I)}}function bI(i,l,u){try{let c=sA(l),g=iA(c,u);return JE(l,`${JSON.stringify(c,null,2)}
2
+ `),g}finally{nd.delete(i.lockDir),QE(i)}}function tA(i,l,u={}){let c=ZE(i,u);return bI(c,i,l)}async function rA(i,l,u={}){let c=await eA(i,u);return bI(c,i,l)}function sA(i){let l=oA(i);if(!l.mcpServers||typeof l.mcpServers!=="object"||Array.isArray(l.mcpServers))l.mcpServers={};return l}function iA(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 cm("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 cm("MCP settings mutator must be deterministic and free of side effects; repeated calls produced different return values.");return I}function nA(i){let l=pI(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 oA(i){try{return nA(i)}catch(l){if(l.code==="ENOENT")return{};throw l}}function II(i,l){if(!Object.hasOwn(i,l))return;let u=i[l];if(!u||typeof u!=="object"||Array.isArray(u))return;return u}function aA(i,l,u){Object.defineProperty(i,l,{value:u,enumerable:!0,configurable:!0,writable:!0})}function kI(i={}){let l=i.filePath??on(),u=pI(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=TI.safeParse(c);if(!g.success){let b=g.error.issues.map((I)=>{let T=I.path.join(".");return T?`${T}: ${I.message}`:I.message}).join("; ");throw Error(`Invalid MCP settings at "${l}": ${b}`)}return g.data}function Zu(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 lA(i){if(i===void 0)return;let l=Wd.safeParse(i);if(!l.success)return;return Zu(l.data)}function SI(i={}){let l=i.filePath??on();return cI(l)}function um(i={}){let l=kI(i);return Object.entries(l.mcpServers).map(([u,c])=>dA(u,c))}function dA(i,l){return{name:i,transport:zE(l.transport),disabled:l.disabled,timeoutSeconds:l.timeoutSeconds,metadata:l.metadata,oauthClient:l.oauthClient,oauth:l.oauth}}function uA(i){let l=i.filePath??on(),u=i.name.trim();if(!u)throw Error("MCP server settings toggle requires a server name.");tA(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=II(b,u);if(!I)throw Error(`Unknown MCP server: ${u}`);let T={...I};if(i.disabled)T.disabled=!0;else delete T.disabled;aA(b,u,T),c.mcpServers=b})}function cA(i,l={}){let u=kI(l);if(!Object.hasOwn(u.mcpServers,i))return;return Zu(u.mcpServers[i]?.oauth)}function pA(i,l,u){return(c)=>{let g=c.mcpServers,b=II(g,i);if(!b)throw Error(`Unknown MCP server: ${i}`);if(u.expectedOAuthClient!==void 0){let _=Kd.safeParse(b.oauthClient),E=_.success?_.data:void 0,A=u.expectedOAuthClient??void 0;if(E?.clientId!==A?.clientId||E?.clientSecret!==A?.clientSecret)throw new ec(i)}let I=lA(b.oauth)??{},T=Zu(l(I));if(T)b.oauth=T;else delete b.oauth;return T??{}}}async function mA(i,l,u={}){let c=u.filePath??on();return rA(c,pA(i,l,u))}async function hA(i,l={}){let u=um(l);for(let c of u)await i.registerServer(c);return u}var Tn,Ac,Cc,Wd,Kd,mg,hg,fg,gg,yg,vg,xc,wg,bg,Ig,TI,ec,Eh,cm,Ah=1e4,_I=25,EI,nd,AI=DE(()=>{Tn=d(e(),e()),Ac=d(e(),m()),Cc=je((i)=>Ve(i)?Ue(i):void 0,n().optional()),Wd=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(),Kd=t({clientId:e().min(1),clientSecret:e().min(1).optional()}).strip(),mg=t({type:a("stdio"),command:e().min(1),args:o(e()).optional(),cwd:e().min(1).optional(),env:Tn.optional()}),hg=t({type:a("sse"),url:e().url(),headers:Tn.optional()}),fg=t({type:a("streamableHttp"),url:e().url(),headers:Tn.optional()}),gg=w("type",[mg,hg,fg]),yg=t({transport:gg,disabled:r().optional(),timeout:Cc,metadata:Ac.optional(),oauthClient:Kd.optional(),oauth:Wd.optional()}).transform((i)=>({transport:i.transport,disabled:i.disabled,timeoutSeconds:i.timeout,metadata:i.metadata,oauthClient:i.oauthClient,oauth:i.oauth})),vg=s(["stdio","sse","http","streamableHttp"]).optional(),xc=t({type:s(["stdio","sse","streamableHttp"]).optional(),transportType:vg,disabled:r().optional(),timeout:Cc,metadata:Ac.optional(),oauthClient:Kd.optional(),oauth:Wd.optional()}),wg=xc.extend({command:e().min(1),args:o(e()).optional(),cwd:e().min(1).optional(),env:Tn.optional()}).superRefine((i,l)=>{let u=i.type??Ec(i.transportType);if(u&&u!=="stdio")l.addIssue({code:oa.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})),bg=xc.extend({url:e().url(),headers:Tn.optional()}).superRefine((i,l)=>{let u=i.type??Ec(i.transportType)??"sse";if(u!=="sse"&&u!=="streamableHttp")l.addIssue({code:oa.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform((i)=>{if((i.type??Ec(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}}),Ig=p([yg,wg,bg]),TI=t({mcpServers:d(e(),Ig)}).passthrough(),ec=class extends Error{constructor(l){super(`OAuth client configuration changed while authorizing MCP server "${l}". Start authorization again.`);this.name="McpOAuthClientChangedError"}},Eh=class extends Error{constructor(l){super(l);this.name="McpSettingsLockTimeoutError"}},cm=class extends Error{constructor(l){super(l);this.name="McpSettingsMutatorPurityError"}},EI=new Int32Array(new SharedArrayBuffer(4)),nd=new Set});function oi(i,l){return l.crossWorkspace&&i.payload?.allWorkspaces===!0}function kg(i,l){if(typeof l!=="string"||!l.trim())return;let u=po(i,l);if(!CI(i,u))throw Error("schedule cwd is outside the client workspace scope");return u}function Sg(i){return typeof i.workspaceRoot==="string"&&i.workspaceRoot.trim()?po(i.workspaceRoot.trim()):void 0}function CI(i,l){let u=gA(i,l);return u!==".."&&!u.startsWith(`..${yA}`)&&!fA(u)}function Kt(i,l){return{version:i.version,requestId:i.requestId,ok:!0,payload:l}}function Tg(i,l,u){return{version:i.version,requestId:i.requestId??P("hubreq_"),ok:!1,error:{code:l,message:u}}}class xI{schedules;constructor(i){this.schedules=i}async handleCommand(i,l){try{let u=this.resolveScope(l);switch(i.command){case"schedule.create":return Kt(i,{schedule:this.schedules.createSchedule(this.toCreateInput(i.payload??{},u,oi(i,u)))});case"schedule.list":return Kt(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:oi(i,u)?void 0:u.workspaceRoot})});case"schedule.get":return Kt(i,{schedule:this.requireScopedSchedule(i,u)});case"schedule.update":{let c=this.requireScopedSchedule(i,u);return Kt(i,{schedule:this.schedules.updateSchedule(c.scheduleId,this.toUpdateInput(i.payload??{},u,c,oi(i,u)))})}case"schedule.delete":return Kt(i,{deleted:this.schedules.deleteSchedule(this.requireScopedSchedule(i,u).scheduleId)});case"schedule.enable":return Kt(i,{schedule:this.schedules.resumeSchedule(this.requireScopedSchedule(i,u).scheduleId)});case"schedule.disable":return Kt(i,{schedule:this.schedules.pauseSchedule(this.requireScopedSchedule(i,u).scheduleId)});case"schedule.trigger":return Kt(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 Kt(i,{executions:this.listScopedExecutions(i,u)});case"schedule.stats":return Kt(i,{stats:this.schedules.getScheduleStats(this.requireScopedSchedule(i,u).scheduleId)});case"schedule.active":{let c=this.schedules.getActiveExecutions();if(oi(i,u))return Kt(i,{executions:c});let g=this.scopedScheduleIds(u);return Kt(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(oi(i,u))return Kt(i,{runs:c});let g=this.scopedScheduleIds(u);return Kt(i,{runs:c.filter((b)=>g.has(b.scheduleId))})}default:return Tg(i,"unsupported_command",`Unsupported hub schedule command: ${i.command}`)}}catch(u){return Tg(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=po(l.workspaceRoot),c=po(l.cwd?.trim()||u);if(!CI(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||!oi(i,l)&&po(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(oi(i,l))return c;let g=this.scopedScheduleIds(l);return c.filter((b)=>g.has(b.scheduleId))}toCreateInput(i,l,u){let c=_a(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?Sg(i):void 0)??l.workspaceRoot,{allWorkspaces:I,...T}=i;return{...T,modelSelection:g,mode:c,workspaceRoot:b,cwd:kg(b,i.cwd)??(b===l.workspaceRoot?l.cwd:b)}}toUpdateInput(i,l,u,c){let g=_a(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?Sg(i)??po(u.workspaceRoot):l.workspaceRoot,{allWorkspaces:T,..._}=i;return{..._,modelSelection:b,...g===void 0?{}:{mode:g},workspaceRoot:I,...Object.hasOwn(i,"cwd")?{cwd:i.cwd===null?I:kg(I,i.cwd)??(I===l.workspaceRoot?l.cwd:I)}:{}}}}class Ch{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 Gt={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"},wA=[Gt.READ_FILES,Gt.SEARCH_CODEBASE,Gt.RUN_COMMANDS,Gt.FETCH_WEB_CONTENT,Gt.APPLY_PATCH,Gt.EDITOR,Gt.SKILLS,Gt.ASK,Gt.SUBMIT_AND_EXIT];function bA(i){return i.disabled!==!0}function RI(i){if(i.length===0)return"";return`
3
+
4
+ # Rules
5
+ ${i.map((l)=>`## ${l.name}
6
+ ${l.instructions}`).join(`
7
+
8
+ `)}`}function _g(i,l){let u=i?.trim(),c=l?.trim();if(u&&c)return`${u}
9
+
10
+ ${c}`;return u||c||void 0}function PI(i){return i.map((l)=>l.item).filter(bA).sort((l,u)=>l.name.localeCompare(u.name))}function MI(i){return RI(PI(i))}function IA(i){let l=i.getSnapshot("rule");return PI([...l.values()].map((u)=>({item:u.item})))}function kA(i){return RI(IA(i))}var SA=500,Pe={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:gr},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:fr,PROVIDER_STREAM_STARTED:yr,FIRST_CHUNK_RECEIVED:xr,PROVIDER_STREAM_FAILED:br,MAX_TOKENS_RECOVERY:wr,CANCELLED:vr,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:Gn,TOOL_TIMEOUT:"sdk.tool_timeout",PLAN_MODE_COMMAND_BLOCKED:"sdk.plan_mode_command_blocked"},FEATURE_FLAGS:{FLAG_CALLED:"$feature_flag_called"}};function Oe(i,l,u){i?.capture({event:l,properties:u})}function xh(i){if(!i)return;return i.substring(0,SA)}function TA(i){if(typeof i==="string")return"Error";return i.name?.trim()||i.constructor?.name||"Error"}function _A(i){return typeof i==="string"?i:i.message}function Eg(i,l){return i.some((u)=>l.has(u.trim().toLowerCase()))}function EA(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:Eg(u,new Set(["git"])),has_mercurial:Eg(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;Oe(i,Pe.WORKSPACE.INITIALIZED,c)}function AA(i,l,u){Oe(i,Pe.WORKSPACE.INIT_ERROR,{error_type:TA(l),error_message:xh(_A(l)),fallback_to_single_root:u.fallback_to_single_root,workspace_count:u.workspace_count??0})}function Rh(i,l){Oe(i,Pe.USER.AUTH_STARTED,{provider:l})}function Ph(i,l,u){Oe(i,Pe.USER.AUTH_SUCCEEDED,{provider:l,...u})}function cu(i,l,u,c){Oe(i,Pe.USER.AUTH_FAILED,{provider:l,errorMessage:xh(u),...c?.requestId?{request_id:c.requestId}:{}})}function Mh(i,l,u,c){Oe(i,Pe.USER.AUTH_LOGGED_OUT,{provider:l,reason:u,...c})}function Hl(i,l,u){Oe(i,Pe.USER.AUTH_REFRESH_SOFT_FAILURE,{provider:l,...u})}function CA(i,l,u){Oe(i,Pe.USER.AUTH_RUN_RETRY,{provider:l,recovered:u?.recovered})}function xA(i,l){i?.captureRequired(Pe.USER.TELEMETRY_OPT_OUT,l)}function Nh(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 RA(i,l){Oe(i,Pe.TASK.CREATED,l)}function PA(i,l){Oe(i,Pe.TASK.RESTARTED,l)}function Ag(i,l){Oe(i,Pe.TASK.COMPLETED,l)}function NI(i,l){Oe(i,Pe.TASK.CONVERSATION_TURN,{...l,timestamp:new Date().toISOString()})}function MA(i,l){Oe(i,Pe.TASK.TOKEN_USAGE,l)}function NA(i,l,u){Oe(i,Pe.TASK.MODE_SWITCH,{ulid:l,mode:u})}function sa(i,l){Oe(i,Pe.TASK.TOOL_USED,l)}function OA(i,l){Oe(i,Pe.TASK.SKILL_USED,l)}function $A(i,l){Oe(i,Pe.TASK.DIFF_EDIT_FAILED,l)}function LA(i,l){Oe(i,Pe.TASK.MISTAKE_LIMIT_REACHED,{...l,timestamp:new Date().toISOString()})}function Cg(i,l){Oe(i,Pe.TASK.CAPABILITY_OWNER_GONE,l)}function DA(i,l){Oe(i,Pe.TASK.RUN_IDLE,Oh(l))}function UA(i,l){Oe(i,Pe.SDK.TOOL_TIMEOUT,Oh(l))}function FA(i,l){Oe(i,Pe.SDK.PLAN_MODE_COMMAND_BLOCKED,Oh(l))}function Oh(i){let l={};for(let[u,c]of Object.entries(i))if(c!==void 0)l[u]=c;return l}function qA(i,l,u){Oe(i,Pe.TASK.MENTION_USED,{mentionType:l,contentLength:u,timestamp:new Date().toISOString()})}function jA(i,l,u,c){Oe(i,Pe.TASK.MENTION_FAILED,{mentionType:l,errorType:u,errorMessage:xh(c),timestamp:new Date().toISOString()})}function BA(i,l,u,c,g){Oe(i,Pe.TASK.MENTION_SEARCH_RESULTS,{queryLength:l.length,resultCount:u,searchType:c,isEmpty:g,timestamp:new Date().toISOString()})}function $h(i,l){Oe(i,Pe.TASK.AGENT_CREATED,{...l,timestamp:new Date().toISOString()})}function HA(i,l){Oe(i,Pe.TASK.AGENT_TEAM_CREATED,{...l,timestamp:new Date().toISOString()})}function xg(i,l){Oe(i,l.event==="ended"?Pe.TASK.SUBAGENT_COMPLETED:Pe.TASK.SUBAGENT_STARTED,{...l,timestamp:new Date().toISOString()})}function zA(i,l){Oe(i,Pe.HOOKS.DETACHED_RUNTIME,{hookName:l.hookName,durationMs:l.durationMs,exitCode:l.exitCode??void 0,exited:l.exited,timestamp:new Date().toISOString()})}function WA(i,l,u,c){Oe(i,Pe.HOOKS.DISCOVERY_COMPLETED,{hookName:l,globalCount:u,workspaceCount:c,totalCount:u+c,timestamp:new Date().toISOString()})}function KA(i,l){Oe(i,Pe.TASK.COMPACTION_EXECUTED,{...l,timestamp:new Date().toISOString()})}function GA(i,l){Oe(i,Pe.TASK.COMPACTION_SKIPPED,{...l,timestamp:new Date().toISOString()})}function XA(i,l){Oe(i,Pe.TASK.COMPACTION_BUDGET_EMERGENCY,{...l,timestamp:new Date().toISOString()})}function JA(i,l){Oe(i,Pe.SESSION.ERROR_RECORDED,l)}function ma(i,l){try{Oe(i,l.phase==="started"?Pe.SCHEDULE.RUN_STARTED:Pe.SCHEDULE.RUN_FINISHED,{triggerKind:l.triggerKind,attemptCount:l.attemptCount,startDelayMs:l.startDelayMs,...l.phase==="finished"?{outcome:l.outcome,durationMs:l.durationMs}:{}})}catch{}}var eC=ZA(VA);function tC(i,l){return eC("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 rC(i){if(!i||typeof i!=="object"||!("stderr"in i))return"";return typeof i.stderr==="string"?i.stderr.trim():""}function sC(i){if(!i||typeof i!=="object"||!("code"in i))return;return typeof i.code==="number"?i.code:void 0}function OI(i){let l=zl(i.cwd),u=i.git??tC,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(sC(b)===128&&/not a git repository|Kein Git-Repository/i.test(rC(b)))return!1;throw b}},remotes:()=>wi({baseDir:l}).getRemotes(!0),displayBranch:async()=>(await wi({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 iC(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 Pg(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 nC(i,l){let u=iC(i);return u.url===l.url&&u.branch===l.branch}function $I(i){let l=i.find(({name:u})=>u==="origin")??i[0];return(l?.refs.fetch||l?.refs.push)?.trim()||void 0}function zl(i){return QA(i)}async function LI(i){return(await DI(i)).info}function Mg(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 yd(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 DI(i){let l=zl(i),u={rootPath:l,hint:YA(l)||void 0},c={},g;try{let b=OI({cwd:l});if(!await b.isInsideWorkTree())return{info:u,vcsType:"none",gitState:c};try{let I=await b.remotes();if(I.length>0){let T=I.map((E)=>{let A=E.refs.fetch||E.refs.push;return`${E.name}: ${A}`});u.associatedRemoteUrls=T;let _=$I(I);if(_)c.url=_}}catch(I){g??=yd(I)}try{let I=await b.headSha();if(I.length>0)u.latestGitCommitHash=I}catch(I){if(!Mg(I))g??=yd(I)}try{let I=await b.displayBranch();if(I.length>0)u.latestGitBranchName=I,c.branch=I}catch(I){if(!Mg(I))g??=yd(I)}return{info:u,vcsType:"git",gitState:c,error:g}}catch(b){return{info:u,vcsType:"none",gitState:c,error:yd(b)}}}async function oC(i){try{let l=OI({cwd:i});if(!await l.isInsideWorkTree())return{};let[u,c]=await Promise.all([l.remotes(),l.displayBranch()]),g=$I(u);return{...g?{url:g}:{},...c?{branch:c}:{}}}catch{return}}async function aC(i){let l=await LI(i);return Fn(l)}async function lC(i){let l=Rg.now(),u=await DI(i),c=Rg.now()-l,g=u.info;return{workspaceInfo:g,workspaceMetadata:Fn(g),durationMs:c,vcsType:u.vcsType,gitState:u.gitState,initError:u.error}}function Xs(i){if(/[:#\n]/.test(i)||i.includes('"'))return JSON.stringify(i);return i}function Lr(i,l){if(l===void 0||l===null)return;return`${i}: ${Xs(l)}`}function FI(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 pC(i){return i.replace(/[\r\n\u2028\u2029]+/g," ").replace(/[\\`*_[\]{}()#+\-.!<>|]/g,"\\$&")}function mC(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=cC(i.sourcePath)?i.sourcePath:UI(Dt(l),i.sourcePath);return{kind:"file",path:u,label:u}}function pm(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 Ng(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 hC(i,l,u,c){let g=[`runId: ${Xs(i.runId)}`,`specId: ${Xs(l.specId)}`,`scheduleId: ${Xs(l.externalId)}`,`title: ${Xs(l.title)}`,`triggerKind: ${Xs(i.triggerKind)}`,`status: ${Xs(i.status)}`,`definitionSource: ${Xs(u.kind)}`],b=[Lr("sourcePath",u.path),Lr("workspaceRoot",l.workspaceRoot),Lr("schedule",l.scheduleExpr),Lr("timezone",l.timezone),Lr("model",l.providerId||l.modelId?[l.providerId,l.modelId].filter(Boolean).join("/"):void 0),Lr("sessionId",i.sessionId),Lr("startedAt",i.startedAt),Lr("completedAt",i.completedAt),Lr("triggerEventId",i.triggerEventId),Lr("triggerEventType",c?.eventType),Lr("triggerEventSource",c?.source),Lr("triggerEventSubject",c?.subject)];for(let I of b)if(I)g.push(I);return`---
13
+ ${g.join(`
14
+ `)}
15
+ ---
16
+ `}function fC(i,l,u,c){let g=pC(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",T=i.startedAt?` at ${i.startedAt}`:"",_=c.durationMs!==void 0?` in ${pm(c.durationMs)}`:"",E=[`# ${g} — ${b}`,"",`Run of schedule **${g}** (${I})${T}, ${b}${_}.`,"","## Job",""],A=[`- **Definition**: ${u.label}`,l.workspaceRoot?`- **Workspace**: ${l.workspaceRoot}`:"",Ng(l)?`- **Schedule**: ${Ng(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","",FI(C),"");return E.join(`
17
+ `)}function gC(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}${FI(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: ${pm(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(`(${pm(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 yC(i){let l=Ja(i.specs);dC(l,{recursive:!0});let u=UI(l,`${i.run.runId}.md`),c=mC(i.spec,i.specs),g=`${hC(i.run,i.spec,c,i.data.triggerEvent)}
41
+ ${fC(i.run,i.spec,c,i.data)}
42
+ ${gC(i.data)}`;return uC(u,g,"utf8"),u}var vC=5000;class Pi extends Error{}async function Rc(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 wC=15000,bC=90,qI=["rules","skills","plugins"];function IC(i,l){return new Set(i.extensions??qI).has(l)}function kC(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[Gt.ASK]={...u[Gt.ASK],enabled:!1,autoApprove:!0},l==="yolo")u[Gt.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return u}function SC(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 Pl extends Error{constructor(i){super(i);this.name="TimeoutError"}}async function TC(i,l){if(l<=0)return i;let u,c=new Promise((g,b)=>{u=setTimeout(()=>{b(new Pl("cron run timed out"))},l)});try{return await Promise.race([i,c])}finally{if(u)clearTimeout(u)}}var vd={scheduleId:"scheduleId",scheduleName:"scheduleName",scheduleExecutionId:"scheduleExecutionId",scheduleRunNumber:"scheduleRunNumber"};function _C(i,l,u){return{[vd.scheduleId]:i.externalId,[vd.scheduleName]:i.title,[vd.scheduleExecutionId]:l.runId,...u!==void 0?{[vd.scheduleRunNumber]:u}:{}}}class Lh{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??bC)*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??wC);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 Pi("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 Pi("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,T=!1,_,E=Date.now(),A={triggerKind:l.triggerKind,attemptCount:l.attemptCount,startDelayMs:Math.max(0,E-new Date(l.scheduledFor??l.createdAt).getTime())};ma(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 Pl("cron run timed out"));g.throwIfAborted()},M;if(u.timeoutSeconds&&u.timeoutSeconds>0)M=setTimeout(()=>c.abort(new Pl("cron run timed out")),u.timeoutSeconds*1000);let O="preparing the session request",L;try{_=this.startClaimLeaseHeartbeat(i);let D=await Rc(this.buildStartRequest(u),g);N(),O="starting the agent session";let F=this.options.runtimeHandlers.startSession(D,{sessionMetadata:_C(u,l,this.store.getRunOrdinal(l.runId))}).then(async(te)=>{if(g.aborted)await this.cleanupSession(te.sessionId,!0);else I=te.sessionId.trim()});if(await Rc(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 Pi("run lease lost")),N();O="running the agent turn";let j={config:D,prompt:this.buildPrompt(u,b)},B=this.options.runtimeHandlers.sendSession(I,j),Q=await Rc(B,g);if(N(),L=Q.result,L.finishReason==="error")throw Error(L.text||"agent turn ended with an error");let H=Date.now();if(!this.store.completeRun(l.runId,{status:"done",sessionId:I,claimToken:i.claimToken})){ma(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 z=this.writeReport({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...l,sessionId:I,status:"done"},spec:u,data:{finalText:L.text,usage:L.usage,toolCalls:L.toolCalls,durationMs:H-E,triggerEvent:b}});if(z)this.store.attachReportPathToRun(l.runId,z);ma(this.options.telemetry,{...A,phase:"finished",outcome:"success",durationMs:Math.max(0,H-E)}),this.publishScheduleExecutionEvent("schedule.execution.completed",u,l.runId),this.store.updateSpecLastRunAt(u.specId,x())}catch(D){let F=D instanceof Pl;if(I&&g.aborted)await this.cleanupSession(I,!0),T=!0;let j=D instanceof Error?D.message:String(D),B=Date.now(),Q=F?`The run exceeded its ${u.timeoutSeconds}s timeout while ${O} and was cancelled:`:D instanceof Pi?`The run was cancelled while ${O}:`:`The run failed while ${O}:`,H=D instanceof Pi?"cancelled":"failed";if(!this.store.completeRun(l.runId,{status:H,sessionId:I,error:j,claimToken:i.claimToken})){ma(this.options.telemetry,{...A,phase:"finished",outcome:"superseded",durationMs:Math.max(0,B-E)});return}if(l.triggerKind==="one_off")this.store.updateSpecNextRunAt(u.specId,void 0);let z=this.writeReport({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...l,sessionId:I,status:H},spec:u,data:{error:j,errorContext:Q,usage:L?.usage,toolCalls:L?.toolCalls,durationMs:B-E,triggerEvent:b}});if(z)this.store.attachReportPathToRun(l.runId,z);ma(this.options.telemetry,{...A,phase:"finished",outcome:H==="cancelled"?"cancelled":F?"timeout":"failed",durationMs:Math.max(0,B-E)}),this.publishScheduleExecutionEvent("schedule.execution.failed",u,l.runId)}finally{if(M)clearTimeout(M);if(_?.(),I&&!T)await this.cleanupSession(I,g.aborted);this.activeRuns.delete(l.runId)}}writeReport(i){try{return yC(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 TC(this.options.runtimeHandlers[u](i),vC)}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 Pi("run lease lost"))},l);return()=>clearInterval(u)}async buildSystemPrompt(i,l,u,c){let g=SC(i.notesDirectory),b=_g(void 0,g),I=await aC(l),T=Ke({ide:"Cline Cron",workspaceRoot:l,workspaceName:vA(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?_g(T,b)??T:T}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:kC(i,I),configExtensions:qI.filter((T)=>IC(i,T))}}}function ha(i,l,u,c){let g=new Set;function b(I){let T=I.toLowerCase();if(c){let E=c.indexOf(T);if(E!==-1)return E+l}let _=Number(I);if(!Number.isInteger(_)||_<l||_>u)throw Error(`Invalid cron value "${I}" for range [${l}-${u}]`);return _}for(let I of i.split(",")){if(I==="*"){for(let E=l;E<=u;E+=1)g.add(E);continue}let T=I.indexOf("/");if(T!==-1){let E=I.slice(0,T),A=Number(I.slice(T+1));if(!Number.isInteger(A)||A<1)throw Error(`Invalid step "${I.slice(T+1)}"`);let C=l,N=u;if(E!=="*"){let M=E.indexOf("-");if(M!==-1)C=b(E.slice(0,M)),N=b(E.slice(M+1));else C=b(E)}if(C>N)throw Error(`Invalid cron range "${E}"`);for(let M=C;M<=N;M+=A)g.add(M);continue}let _=I.indexOf("-");if(_!==-1){let E=b(I.slice(0,_)),A=b(I.slice(_+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,T)=>I-T)}var EC=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],jI=["sun","mon","tue","wed","thu","fri","sat"];function fa(i,l,u){let c=i[l];if(typeof c!=="string")throw Error(`Invalid cron pattern "${u}": missing field ${l+1}`);return c}function Pc(i,l){let u=i[0];if(typeof u!=="number")throw Error(`Invalid cron pattern: no values parsed for ${l}`);return u}function Dh(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:ha(fa(l,0,i),0,59),hours:ha(fa(l,1,i),0,23),daysOfMonth:ha(fa(l,2,i),1,31),months:ha(fa(l,3,i),1,12,EC),daysOfWeek:ha(fa(l,4,i),0,6,jI)}}function AC(i){Dh(i)}function CC(i,l,u=Date.now()){Ml(i,u,l)}var Og=new Map,xC=new Map(jI.map((i,l)=>[i,l]));function BI(i){let l=i?.trim();return l?l:void 0}function HI(i){let l=Og.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 Og.set(i,u),u}function zI(i){let l=BI(i);if(!l)return;HI(l).format(new Date)}function RC(i,l){let u=HI(l).formatToParts(new Date(i)),c=new Map(u.map((I)=>[I.type,I.value])),g=c.get("weekday")?.toLowerCase().slice(0,3)??"",b=xC.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 PC(i){let l=new Date(i);return{month:l.getMonth()+1,dayOfMonth:l.getDate(),dayOfWeek:l.getDay(),hour:l.getHours(),minute:l.getMinutes()}}function MC(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 NC(i,l,u){let c=Dh(i),g=new Date(l);g.setSeconds(0,0);let b=g.getTime()+60000,I=new Date(l);I.setFullYear(I.getFullYear()+4);let T=I.getTime();while(b<=T){if(MC(c,RC(b,u)))return b;b+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${i}" in timezone "${u}"`)}function Ml(i,l,u){let c=BI(u);if(c)return zI(c),NC(i,l,c);let g=Dh(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:T,dayOfMonth:_,dayOfWeek:E,hour:A,minute:C}=PC(b.getTime());if(!g.months.includes(T)){let N=g.months.find((O)=>O>T)??Pc(g.months,"months"),M=N<=T?1:0;b=new Date(b.getFullYear()+M,N-1,1,0,0,0,0);continue}if(!g.daysOfMonth.includes(_)||!g.daysOfWeek.includes(E)){b=new Date(b.getFullYear(),b.getMonth(),_+1,0,0,0,0);continue}if(!g.hours.includes(A)){let N=g.hours.find((O)=>O>A)??Pc(g.hours,"hours"),M=N<=A?1:0;b=new Date(b.getFullYear(),b.getMonth(),b.getDate()+M,N,0,0,0);continue}if(!g.minutes.includes(C)){let N=g.minutes.find((O)=>O>C)??Pc(g.minutes,"minutes"),M=N<=C?1:0;b=new Date(b.getFullYear(),b.getMonth(),b.getDate(),b.getHours()+M,N,0,0);continue}return b.getTime()}throw Error(`No cron occurrence found within 4 years for pattern "${i}"`)}var OC=[`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 $C(i){i.exec("PRAGMA journal_mode = WAL;"),i.exec("PRAGMA busy_timeout = 5000;"),i.exec("PRAGMA foreign_keys = ON;");for(let l of OC)i.exec(l)}function pu(i){if(!i)return;try{let l=JSON.parse(i);if(l&&typeof l==="object"&&!Array.isArray(l))return l}catch{}return}function Mc(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 ai(i){if(typeof i==="number"&&Number.isFinite(i))return i;if(typeof i==="bigint")return Number(i);return}function Ks(i){return{specId:f(i.spec_id),externalId:f(i.external_id),sourcePath:f(i.source_path),triggerKind:f(i.trigger_kind),sourceMtimeMs:ai(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:pu(h(i.filters_json)),debounceSeconds:ai(i.debounce_seconds),dedupeWindowSeconds:ai(i.dedupe_window_seconds),cooldownSeconds:ai(i.cooldown_seconds),mode:h(i.mode),systemPrompt:h(i.system_prompt),providerId:h(i.provider_id),modelId:h(i.model_id),maxIterations:ai(i.max_iterations),timeoutSeconds:ai(i.timeout_seconds),maxParallel:ai(i.max_parallel),tools:Mc(h(i.tools_json),{preserveEmpty:!0}),notesDirectory:h(i.notes_directory),extensions:Mc(h(i.extensions_json),{preserveEmpty:!0}),source:h(i.source),tags:Mc(h(i.tags_json)),metadata:pu(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 wd(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 $g(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:pu(h(i.payload_json)),attributes:pu(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 Lg(i){return i?JSON.stringify(i):null}var LC=["triggerKind","prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function bd(i){if(i===void 0)return null;if(i&&typeof i==="object")return JSON.stringify(i);return i}function DC(i,l,u,c){for(let I of LC){let T=i[I],_=l[I];if(bd(T)!==bd(_))return!0}let g=i.triggerKind==="one_off"||l.triggerKind==="one_off",b=l.metadata;if(g&&bd(i.metadata?.[ye])!==bd(b?.[ye]))return!0;if(u===!1&&c===!0)return!0;return!1}function UC(i){return(i.split("/").pop()??i).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var WI="hub/schedules/";function FC(i){return`${WI}${i}.cron.md`}function qC(i){return i.source==="hub-schedule"&&i.sourcePath.startsWith(WI)&&i.sourceMtimeMs===void 0}function jC(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[ye];return Object.keys(l).length>0?l:void 0}function mm(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:jC(i)};return l?{...u,triggerKind:"one_off"}:{...u,triggerKind:"schedule",schedule:i.cronPattern.trim(),timezone:i.timezone?.trim()||void 0}}function Dg(i){return JSON.stringify(mm(i))}function BC(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??""),T={...u,...l.metadata??{}};if(I.trim()!==pe)delete T[ye];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(T).length>0?T:void 0}}class Uh{db;constructor(i={}){let l=i.dbPath??Ka();this.db=V(l),$C(this.db)}close(){this.db.close?.()}getSpecBySourcePath(i){let l=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get(i);return l?Ks(l):void 0}getSpec(i){let l=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get(i);return l?Ks(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?Ks(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)=>Ks(b))}createHubSchedule(i){let l=`sched_${el()}`,u=mm(i),c=this.upsertSpec({externalId:l,sourcePath:FC(l),triggerKind:u.triggerKind,sourceHash:Dg(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?Ks(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)=>Ks(g))}updateHubSchedule(i,l){this.db.exec("BEGIN IMMEDIATE;");try{let u=this.getHubSchedule(i);if(!u){this.db.exec("COMMIT;");return}let c=BC(u,l),g=mm(c),b=this.upsertSpec({externalId:i,sourcePath:u.sourcePath,triggerKind:g.triggerKind,sourceHash:Dg(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?.[ye]!==void 0||l.enabled!==void 0)this.initializeHubScheduleNextRun(b.record.specId,c);let T=this.getSpec(b.record.specId);return this.db.exec("COMMIT;"),T}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?.[ye];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?wd(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)=>Ks(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??UC(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_${el()}`;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&&DC(u,g,u.enabled,b),T=I?u.revision+1:u.revision;this.updateSpecRow(u.specId,i,g,b,T,l);let _=this.getSpec(u.specId);if(!_)throw Error("failed to reload cron_spec after update");return{record:_,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(Ml(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=Ks(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 _=new Date(Ml(g.scheduleExpr,l,g.timezone)).toISOString();return this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(_,u,g.specId),this.db.exec("COMMIT;"),{queued:!1,nextRunAt:_}}if(new Date(b).getTime()>l)return this.db.exec("COMMIT;"),{queued:!1,nextRunAt:b};let I=`crun_${el()}`,T;try{T=new Date(Ml(g.scheduleExpr,l,g.timezone)).toISOString()}catch{T=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,T??null,u,g.specId),this.db.exec("COMMIT;"),{queued:!0,run:this.getRun(I),nextRunAt:T}}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?wd(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 T=i.occurredAt.trim()||c,_=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,T,c,i.workspaceRoot?.trim()||null,i.dedupeKey?.trim()||null,Lg(i.payload),Lg(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:_===1}}getEventLog(i){let l=this.db.prepare("SELECT * FROM cron_event_log WHERE event_id = ?").get(i);return l?$g(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)=>$g(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 T of b)u.push(T)}}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)=>wd(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?wd(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_${el()}`,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
+ `),T=Math.max(1,Math.floor(i.maxConcurrency??10));while(b.length<g){let _=I.get(l,l,l,T,l);if(!_)break;let E=f(_.run_id);if(!E)continue;let A=`cclaim_${el()}`;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 mu(i){return i?new Date(i).getTime():void 0}function HC(i){let l=i.metadata?{...i.metadata}:void 0;if(l)delete l.__hubScheduleCreatedBy,delete l.__hubScheduleCwd,delete l.__hubRuntimeOptions;return l}function tl(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:mu(i.nextRunAt),lastRunAt:mu(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:HC(i)}}function zC(i){switch(i){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function Nc(i,l){return{executionId:i.runId,scheduleId:l,sessionId:i.sessionId,triggeredAt:new Date(i.scheduledFor??i.createdAt).getTime(),startedAt:mu(i.startedAt),endedAt:mu(i.completedAt),status:zC(i.status),errorMessage:i.error}}class KI{store;materializer;runner;started=!1;disposed=!1;constructor(i){this.store=new Uh({dbPath:i.dbPath}),this.materializer=new Ch({store:this.store}),this.runner=new Lh({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 tl(this.store.createHubSchedule({...i,timezone:l}))}getSchedule(i){let l=this.store.getHubSchedule(i);return l?tl(l):void 0}listSchedules(i={}){return this.store.listHubSchedules(i).map((l)=>tl(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=tl(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 T=this.store.updateHubSchedule(i,{...l,scheduleId:i});return T?tl(T):void 0}validateScheduleTiming(i,l,u,c){if(i.trim()!==pe){AC(i),zI(l);return}if(l?.trim())throw Error("timezone is only supported for recurring schedules");let g=u?.[ye];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 Nc(u,i)}triggerScheduleNowDetached(i){let l=this.store.enqueueHubScheduleRun(i,"manual");if(!l)return;return this.runner.tick().catch(()=>{return}),Nc(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 Nc(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 GC=s(["create","update","list","get","pause","resume","delete","run_now"]),XC=t({provider_id:e().min(1),model_id:e().min(1).optional()}),tc=t({operation:GC,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:XC.optional(),limit:n().int().positive().max(200).optional()});function _n(i,l,u,c){if(!JI.has(l.operation))return;sa(i.telemetry,{ulid:u.sessionId??u.conversationId??u.agentId,tool:`tasks.scheduled.${l.operation}`,success:c,agentId:u.agentId})}var JI=new Set(["create","update","pause","resume","delete","run_now"]);function Fo(i,l){let u=i?.trim();if(!u)throw Error(`${l} is required for this operation`);return u}function Fh(i,l){try{let u=hm.native(i);if(!WC(u).isDirectory())throw Error("not a directory");return u}catch{throw Error(`${l} does not resolve to an existing safe path`)}}function JC(i,l){try{return hm.native(i)===hm.native(l)}catch{return!1}}function VI(i,l,u){let c=KC(i,l);if(c===".."||c.startsWith(`..${XI}`)||GI(c))throw Error(`${u} is outside the workspace scope`)}function YI(i,l,u){return Fh(GI(l)?l:`${i}${XI}${l}`,u)}function VC(i){let l=Fh(i.workspaceRoot,"workspaceRoot"),u=i.cwd?YI(l,i.cwd,"cwd"):l;return VI(l,u,"cwd"),{...i,workspaceRoot:l,cwd:u}}function En(i,l){if(!i)throw Error("schedule does not exist");if(!JC(i.workspaceRoot,l.workspaceRoot))throw Error("schedule is outside this session's workspace scope");let u=Fh(i.workspaceRoot,"schedule workspaceRoot");if(i.cwd){let c=YI(u,i.cwd,"schedule cwd");VI(u,c,"schedule cwd")}}function Ug(i){if(!i)return;return{providerId:i.provider_id.trim(),modelId:i.model_id?.trim()||void 0}}function Oc(i){if(!i)return;return[...new Set(i.map((l)=>l.trim()).filter(Boolean))]}function QI(i){let l=Date.parse(Fo(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 YC(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:{[ye]:QI(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:Fo(i.cron_pattern,"cron_pattern"),timezone:i.timezone?.trim()||void 0}}throw Error("schedule_type is required for create")}function QC(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:{[ye]:QI(i.run_at)}}}if(i.schedule_type==="recurring"||i.cron_pattern)return{cronPattern:Fo(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 rl(i){return Fo(i.schedule_id,"schedule_id")}async function ZC(i,l,u){let c=tc.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=VC(b);if(JI.has(g.operation)&&!I.interactive)throw Error("schedule mutations require an interactive user session");switch(g.operation){case"create":{let T=i.schedules.createSchedule({name:Fo(g.name,"name"),...YC(g),prompt:Fo(g.prompt,"prompt"),workspaceRoot:I.workspaceRoot,cwd:I.cwd,modelSelection:Ug(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:Oc(g.tags)});return i.publish?.("schedule.created",{schedule:T},u.sessionId),_n(i,g,u,!0),{ok:!0,operation:g.operation,schedule:T}}case"update":{let T=rl(g);En(i.schedules.getSchedule(T),I);let _=i.schedules.updateSchedule(T,{scheduleId:T,...QC(g),name:g.name?.trim()||void 0,prompt:g.prompt?.trim()||void 0,modelSelection:Ug(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:Oc(g.tags)});if(!_)throw Error("schedule does not exist");return i.publish?.("schedule.updated",{schedule:_},u.sessionId),_n(i,g,u,!0),{ok:!0,operation:g.operation,schedule:_}}case"list":{let T=i.schedules.listSchedules({enabled:g.enabled,tags:Oc(g.tags),workspaceRoot:I.workspaceRoot,limit:g.limit??50}).filter((_)=>{try{return En(_,I),!0}catch{return!1}}).slice(0,g.limit??50);return{ok:!0,operation:g.operation,schedules:T}}case"get":{let T=i.schedules.getSchedule(rl(g));return En(T,I),{ok:!0,operation:g.operation,schedule:T}}case"pause":case"resume":{let T=rl(g);En(i.schedules.getSchedule(T),I);let _=g.operation==="pause"?i.schedules.pauseSchedule(T):i.schedules.resumeSchedule(T);if(!_)throw Error("schedule does not exist");return i.publish?.("schedule.updated",{schedule:_},u.sessionId),_n(i,g,u,!0),{ok:!0,operation:g.operation,schedule:_}}case"delete":{let T=rl(g);En(i.schedules.getSchedule(T),I);let _=i.schedules.deleteSchedule(T);if(!_)throw Error("schedule does not exist");return i.publish?.("schedule.deleted",{deleted:_,scheduleId:T},u.sessionId),_n(i,g,u,!0),{ok:!0,operation:g.operation,deleted:_}}case"run_now":{let T=rl(g);En(i.schedules.getSchedule(T),I);let _=i.schedules.triggerScheduleNowDetached(T);if(!_)throw Error("schedule does not exist");return i.publish?.("schedule.triggered",{execution:_},u.sessionId),_n(i,g,u,!0),{ok:!0,operation:g.operation,execution:_}}}}catch(b){return _n(i,g,u,!1),{ok:!1,operation:g.operation,error:{code:"schedule_operation_failed",message:b instanceof Error?b.message:String(b)}}}}var $c=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}),nx=s(["basic","agentic"]).catch("agentic"),ox=sn(s($i),t({enabled:r()}).strip()).optional(),ax=s(["plan","act"]),qh=t({telemetryOptOut:r().default(!1).catch(!1),autoUpdateEnabled:r().default(!0).catch(!0),compactionStrategy:nx.optional(),compactionEnabled:r().optional().catch(void 0),planActMode:ax.optional().catch(void 0),toolAutoApprove:r().optional().catch(void 0),tuiTheme:e().optional().catch(void 0),cloudModelId:e().optional().catch(void 0),disabledTools:$c.optional(),tools:ox,disabledPlugins:$c.optional(),disabledAgentPlugins:$c.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.cloudModelId?.trim())l.cloudModelId=i.cloudModelId.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 Gd(){return qh.parse({})}var Xd;function lx(){Xd=void 0}function dx(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 ux(i){let l;try{l=tx(i,"utf8")}catch{return{value:Gd(),loadFailed:!0}}try{let u=qh.safeParse(JSON.parse(l));return u.success?{value:u.data,loadFailed:!1}:{value:Gd(),loadFailed:!0}}catch{return{value:Gd(),loadFailed:!0}}}function nk(){let i=ei(),l=rx(i,{throwIfNoEntry:!1}),u=l?.mtimeMs??0,c=l?.size??0,g=Xd;if(g&&g.path===i&&g.mtimeMs===u&&g.size===c)return g;let b=l?ux(i):{value:Gd(),loadFailed:!1},I=dx(b.value);return Xd={path:i,mtimeMs:u,size:c,value:I,loadFailed:b.loadFailed},Xd}function Ts(){return nk().value}function od(i,l={}){let u=ei(),c=Ts();ex(ix(u),{recursive:!0});let g=qh.parse(i);if(!c.telemetryOptOut&&g.telemetryOptOut)xA(l.telemetry);sx(u,`${JSON.stringify(g,null,2)}
319
+ `,"utf8"),lx()}function cx(){return Ts().telemetryOptOut}function ad(i){return new Set(i??Ts().disabledTools??[])}function ok(i){return new Set(i??Ts().disabledPlugins??[])}function jh(i){return new Set(i??Ts().disabledAgentPlugins??[])}function ak(i){return $i.includes(i)}function px(){let i=nk();return{web_search:{enabled:!i.loadFailed},...i.value.tools}}function lk(i){return px()[i]?.enabled===!0}function mx(i,l){let u=Ts();od({...u,tools:{...u.tools,[i]:{enabled:l}}})}function hx(i){if(ak(i)){let g=lk(i);return mx(i,!g),g}let l=Ts(),u=new Set(l.disabledTools??[]),c=u.has(i);if(c)u.delete(i);else u.add(i);return od({...l,disabledTools:[...u]}),!c}function fx(i,l){let u=[...new Set(i.map((I)=>I.trim()).filter(Boolean))];if(u.length===0)return;let c=Ts(),g=ad(c.disabledTools),b={...c.tools};for(let I of u){if(ak(I)){b[I]={enabled:!l};continue}if(l)g.add(I);else g.delete(I)}od({...c,disabledTools:[...g],tools:b})}function gx(i,l){return fx([i],l),l}function yx(i,l){let u=i.trim();if(!u)return;let c=Ts(),g=ok(c.disabledPlugins);if(l)g.add(u);else g.delete(u);od({...c,disabledPlugins:[...g]})}function vx(i,l){let u=i.trim();if(!u)return;let c=Ts(),g=jh(c.disabledAgentPlugins);if(l)g.add(u);else g.delete(u);od({...c,disabledAgentPlugins:[...g]})}function dk(i,l){let u=ok(l);if(u.size===0)return[...i];return i.filter((c)=>!u.has(c))}function rc(i,l){let u=ad(l);if(u.size===0)return[...i];return i.filter((c)=>!u.has(c.name))}function wx(i,l){if(!i||i.length===0)return i;let u=ad(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 Ex="machine-id",Fg,qg=!1;function Ax(){if(!qg)Fg=uk(),qg=!0;return Fg??ck()}function Bh(i){let l=i?.trim();if(l)return l;let u=uk();if(u)return u;return ck()}function Cx(){let i=_x;return i.machineIdSync??i.default?.machineIdSync}function uk(){try{let i=Cx();if(!i)return;return i().trim()||void 0}catch{return}}function ck(){let i=He(),l=Tx(i,Ex);try{if(bx(l)){let c=kx(l,"utf8").trim();if(c.length>0)return c}}catch{}let u=`cl-${R()}`;try{Ix(i,{recursive:!0}),Sx(l,u,"utf8")}catch{}return u}class pk{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),T=this.gaugeValues.get(i);if(l===null){if(T){if(T.delete(I),T.size===0)this.gaugeValues.delete(i),this.gauges.delete(i)}return}let _=T;if(!_)_=new Map,this.gaugeValues.set(i,_);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)}_.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=xx(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[T,_]of Object.entries(i)){if(T==="__proto__"||T==="constructor"||T==="prototype")continue;let E=l?`${l}.${T}`:T;if(_===null||_===void 0){g[E]=String(_);continue}if(Array.isArray(_)){let A=_.length>b?_.slice(0,b):_;try{g[E]=JSON.stringify(A)}catch{g[E]="[UnserializableArray]"}if(_.length>b)g[`${E}_truncated`]=!0,g[`${E}_original_length`]=_.length;continue}if(typeof _==="object"){if(_ instanceof Date){g[E]=_.toISOString();continue}if(_ instanceof Error){g[E]=_.message;continue}if(u.has(_)){g[E]="[Circular]";continue}if(c>=I){g[E]="[MaxDepthExceeded]";continue}u.add(_),Object.assign(g,this.flattenProperties(_,E,u,c+1));continue}if(Rx(_)){g[E]=_;continue}try{g[E]=JSON.stringify(_)}catch{g[E]=String(_)}}return g}}function xx(i){switch(typeof i==="string"?i.toLowerCase():i){case"trace":return{text:"TRACE",number:Mi.SeverityNumber.TRACE};case"debug":return{text:"DEBUG",number:Mi.SeverityNumber.DEBUG};case"warn":case"warning":return{text:"WARN",number:Mi.SeverityNumber.WARN};case"error":return{text:"ERROR",number:Mi.SeverityNumber.ERROR};case"fatal":return{text:"FATAL",number:Mi.SeverityNumber.FATAL};default:return{text:"INFO",number:Mi.SeverityNumber.INFO}}}function Rx(i){return typeof i==="string"||typeof i==="number"||typeof i==="boolean"}class mk{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 Hh{adapters;metadata;distinctId;deviceId;commonProperties;constructor(i={}){if(this.adapters=[...i.adapters??[]],i.logger)this.adapters.push(new mk({logger:i.logger}));this.metadata={...i.metadata??{}},this.distinctId=i.distinctId,this.deviceId=i.deviceId??Ax(),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 hk{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 fk{meterProvider;loggerProvider;tracerProvider;options;constructor(i={}){this.options=i;let l=sk.resourceFromAttributes({...i.resourceAttributes,[Pn]:i.serviceName??"cline",...i.serviceVersion?{[Dn]: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)ZI.logs.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer(i="cline",l){return Wi.getTracer(i,l??this.options.serviceVersion)}createAdapter(i){return new pk({...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 Hh({...i,adapters:[l],distinctId:Bh(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=Lc(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)=>$x(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=Lc(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 T of l){let _=Ox(T,{endpoint:u,headers:c,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(_){if(g.push(_),T!=="console")b=!0}}if(g.length===0)return null;let I=new ik.NodeTracerProvider({resource:i,spanProcessors:b?[new Zi,...g]:g});if(b)Vn(I);return I}createLoggerProvider(i){let l=Lc(this.options.logsExporter);if(l.length===0)return null;let u=l.map((c)=>{let g=Nx(c,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!g)return null;return new ia.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 ia.LoggerProvider({resource:i,processors:u})}}function Px(i){let l=new fk(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 Mx(i){if(cx())return{telemetry:new hk(i)};if(i.enabled!==!0)return{telemetry:new Hh({...i,distinctId:Bh(i.distinctId)})};return Px(i)}function jY(i){let{telemetry:l,provider:u,emitProviderCreated:c}=Mx(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 Lc(i){if(!i)return[];return(Array.isArray(i)?i:i.split(",")).map((l)=>l.trim()).filter((l)=>l==="console"||l==="otlp")}function Nx(i,l){if(i==="console")return new ia.ConsoleLogRecordExporter;if(!l.endpoint)return null;let u=zh(l.endpoint,"/v1/logs");return new ek.OTLPLogExporter({url:u,headers:l.headers})}function Ox(i,l){if(i==="console")return new na.SimpleSpanProcessor(new na.ConsoleSpanExporter);if(!l.endpoint)return null;let u=zh(l.endpoint,"/v1/traces");return new na.BatchSpanProcessor(new rk.OTLPTraceExporter({url:u,headers:l.headers}))}function $x(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=zh(l.endpoint,"/v1/metrics");return new an.PeriodicExportingMetricReader({exporter:new tk.OTLPMetricExporter({url:u,headers:l.headers}),exportIntervalMillis:l.interval,exportTimeoutMillis:l.timeout})}function zh(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 Bg=s(["suggestion","follow-up","todo","handoff","idea","reminder"]),Lx=s(["pending_approval","approved","in_progress","completed","failed","cancelled","expired"]),Hg=p([a(0),a(1),a(2),a(3),a(4),a(5)]),Dx=t({provider_id:e().min(1),model_id:e().min(1).optional()}),Wh=t({operation:s(["create","update","list","get"]),task_id:e().min(1).optional(),expected_revision:n().int().positive().optional(),type:Bg.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:Hg.optional(),assignee:e().min(1).nullable().optional(),model_selection:Dx.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(Lx).optional(),types:o(Bg).optional(),priorities:o(Hg).optional(),limit:n().int().positive().max(500).optional()}),Ux=new Set(["create","update"]);function Dc(i,l,u,c){if(!Ux.has(l.operation))return;sa(i.telemetry,{ulid:u.sessionId??u.conversationId??u.agentId,tool:`tasks.todo.${l.operation}`,success:c,agentId:u.agentId})}function An(i,l){let u=i?.trim();if(!u)throw Error(`${l} is required for this operation`);return u}function zg(i){if(i===void 0||i===null)return i;return{providerId:i.provider_id,modelId:i.model_id}}function gk(i,l){return jg(i)===jg(l)}function Wg(i,l){if(!i)throw Error("task does not exist");if(l.workspaceRoot){if(i.scope!=="workspace"||!i.workspaceRoot||!gk(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 Fx(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||!gk(i.workspace_root,l.workspaceRoot))throw Error(`this session can only manage ${u} tasks`)}return u}async function qx(i,l,u){let c=Wh.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 T=Fx(g,I);switch(g.operation){case"create":{let _={type:An(g.type,"type"),title:An(g.title,"title"),description:g.description??void 0,instructions:An(g.instructions,"instructions"),scope:T,workspaceRoot:I.workspaceRoot,cwd:T==="workspace"?(g.cwd??I.cwd)?.trim()||void 0:void 0,resourcePaths:g.resource_paths,priority:g.priority,assignee:g.assignee??void 0,modelSelection:zg(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:An(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(_)};return Dc(i,g,u,!0),E}case"update":{let _=An(g.task_id,"task_id");if(Wg(await i.manager.getTask(_),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:_,expectedRevision:g.expected_revision,type:g.type,title:g.title,description:g.description,instructions:g.instructions,scope:T,workspaceRoot:I.workspaceRoot??null,cwd:g.cwd,resourcePaths:g.resource_paths,priority:g.priority,assignee:g.assignee,modelSelection:zg(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 Dc(i,g,u,!0),E}case"list":{let _={statuses:g.statuses,types:g.types,scope:T,workspaceRoot:I.workspaceRoot,priorities:g.priorities,automationEligible:g.automation_eligible,limit:g.limit};return{ok:!0,operation:g.operation,tasks:await i.manager.listTasks(_)}}case"get":{let _=await i.manager.getTask(An(g.task_id,"task_id"));return Wg(_,I),{ok:!0,operation:g.operation,task:_}}}}catch(I){return Dc(i,g,u,!1),{ok:!1,operation:g.operation,error:{code:"task_operation_failed",message:I instanceof Error?I.message:String(I)}}}}var Kh="tasks",jx='# 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.',Bx="# 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.",Hx=Wh.extend({kind:a("todo")}).strict(),yk=tc.extend({kind:a("scheduled")}).strict(),zx=w("kind",[Hx,yk]),Wx=w("kind",[yk]),vk=["create","update","list","get","pause","resume","delete","run_now"],Kx=t({...tc.shape,...Wh.shape,kind:s(["todo","scheduled"]),operation:s(vk)}).strict(),Gx=t({...tc.shape,kind:s(["scheduled"]),operation:s(vk)}).strict();function Xx(i){let l=i.todo;return k({name:Kh,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?Kx:Gx),retryable:!1,maxRetries:0,execute:async(u,c)=>{let g=(l?zx:Wx).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 qx(l,g.data,c)}}return{kind:"scheduled",...await ZC(i.scheduled,g.data,c)}}})}function Jx(i){return{name:"hub-task-guidance",manifest:{capabilities:["rules"]},setup:(l)=>{l.registerRule({id:"hub:task-guidance",content:i?.todoEnabled===!1?Bx:jx,whenToolAvailable:Kh})}}}var Gh="0.2.0-nightly.1793312794",Wl={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:Gh,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"]},Xh="session_not_found";class sc 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 Kl(i){return i instanceof sc||typeof i==="object"&&i!==null&&"code"in i&&i.code==="session_not_found"}var uR="CLINE_HUB_DISCOVERY_PATH",cR="CLINE_HUB_BUILD_ID",pR="CLINE_HUB_BUILD_EPOCH_MS",mR=30000,hR=15000,Gg=100;function fR(i){return i.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function gR(i){return oR("sha256").update(i).digest("hex").slice(0,12)}function yR(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 vR(){return Ik(32).toString("hex")}function Xg(i){return new Promise((l)=>setTimeout(l,i))}function wR(i){return`${i}.lock`}async function bR(i){try{let l=JSON.parse(await kk(Jh(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 Uc(i){await ic(i,{recursive:!0,force:!0}).catch(()=>{return})}function aa(){let i=process.env[cR]?.trim();if(i)return i;return"sdk-v1-5440fffc790ba5c6e5fa7cf89479eda8b49b27304efecf0ecb12ca78ad581c61".trim()||`source-${String(Wl.version)}`}function Tk(){let i=Number(process.env[pR]);if(Number.isFinite(i)&&i>0)return i;return Number.isFinite(1793312823572)?1793312823572:void 0}function nc(i,l=aa()){let u=Pt(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 Jg(i){return typeof i==="number"&&Number.isFinite(i)&&i>0?i:void 0}function Vg(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 IR(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 Vh(i,l){let u=i.buildId?.trim(),c=l.buildId?.trim();if(u&&c&&u===c)return 0;let g=Jg(i.buildEpochMs),b=Jg(l.buildEpochMs);if(g!==void 0&&b!==void 0&&g!==b)return g<b?-1:1;let I=Vg(i.coreVersion),T=Vg(l.coreVersion);if(I&&T){let _=IR(I,T);if(_!==0)return _}if(u&&c&&u!==c)return u<c?-1:1;return 0}function Yh(){return{buildId:aa(),buildEpochMs:Tk(),coreVersion:String(Wl.version)}}function Qh(i,l){let u=l?.self??Yh(),c=nc(i,u.buildId??"");if(c.compatible)return!0;if(c.reason!=="build_mismatch"&&c.reason!=="missing_build")return!1;return Vh(u,i)<=0}function ld(i=process.argv[1]?.trim()||process.cwd()){let l=`hub-${gR(i)}`,u=process.env[uR]?.trim()||Jh(Z(),"locks","hub","owners",`${fR(l)}.json`);return{ownerId:l,discoveryPath:u}}function oQ(i=`hub-${Date.now().toString(36)}`){return ld(i)}async function Pr(i,l={}){try{let u;try{u=await kk(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 _k(i,l){await Zh(i,async()=>{let u=Sk(i);await fm(u,{recursive:!0});let c=`${i}.${process.pid}.${Ik(6).toString("hex")}.tmp`,g;try{g=await Kg(c,"wx",384),await g.writeFile(`${JSON.stringify(l,null,2)}
320
+ `,{encoding:"utf8"}),await g.sync(),await g.close(),g=void 0,await lR(c,i);let b;try{b=await Kg(u,"r"),await b.sync()}catch{}finally{await b?.close().catch(()=>{return})}}catch(b){throw await g?.close().catch(()=>{return}),await ic(c,{force:!0}).catch(()=>{return}),b}})}async function la(i){await Zh(i,async()=>{await ic(i,{force:!0}).catch(()=>{return})})}async function kR(i,l){return await Zh(i,async()=>{if((await Pr(i))?.hubId!==l)return!1;return await ic(i,{force:!0}),!0})}async function Ek(i,l,u){let c=wR(i);await fm(Sk(c),{recursive:!0});let g=Date.now()+hR;while(!0){try{await fm(c,{recursive:!1})}catch(b){if((b instanceof Error&&"code"in b?String(b.code):"")!=="EEXIST")throw b;let I=await bR(c);if(!I){if(Date.now()>=g){await Uc(c);continue}await Xg(Gg);continue}let T=Date.now()-Date.parse(I.acquiredAt);if(!yR(I.pid)||T>mR){await Uc(c);continue}if(Date.now()>=g)throw Error(`Timed out waiting for hub ${l} lock ${c}`);await Xg(Gg);continue}try{return await dR(Jh(c,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
321
+ `,"utf8"),await u()}finally{await Uc(c)}}}function Zh(i,l){return Ek(`${i}.mutation`,"discovery mutation",l)}function Ak(i,l){return Ek(i,"startup",l)}async function dd(i,l){Ze();try{let u=await fetch(l?.authToken?SR(i):Ck(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 qo(i,l,u="/hub"){return new URL(`ws://${i}:${l}${u}`).toString()}function Ck(i){let l=new URL(i);return l.protocol=l.protocol==="wss:"?"https:":"http:",l.pathname="/health",l.search="",l.toString()}function SR(i){let l=new URL(Ck(i));return l.pathname="/status",l.toString()}function aQ(i){return aR(i)}var TR="CLINE_HUB_HOST",_R="CLINE_HUB_PORT",ER="CLINE_HUB_PATHNAME",AR="127.0.0.1",CR=jn,xR="/hub";function Yg(i){return re(i)==="development"?$n:CR}function RR(i={}){return(i.env??process.env)[TR]?.trim()||AR}function ef(i={}){let l=(i.env??process.env)[_R]?.trim();if(!l)return Yg(i);let u=Number.parseInt(l,10);if(!Number.isInteger(u)||u<1||u>65535)return Yg(i);return u}function PR(i={}){return(i.env??process.env)[ER]?.trim()||xR}function oc(i={},l={}){return{host:i.host??RR(l),port:i.port??ef(l),pathname:i.pathname??PR(l)}}var NR="shared:cline",OR="CLINE_HUB_DISCOVERY_PATH",$R="hub-production";function uQ(i){let l=zl(i.trim());return ld(`workspace:${l||i.trim()}`)}function da(i=NR){return ld(`${i}@${aa()}`)}function ud(){return{ownerId:$R,discoveryPath:process.env[OR]?.trim()||MR(Z(),"locks","hub","production.json")}}var Qg=15000,LR=200,Zg=3000,DR=100,UR=[100,250,500,1000,2000],xk="--cline-hub-daemon",FR=3,qR=60000,gm=new Map,cQ={resetRetireAttempts(){gm.clear()},resolveDaemonEntryArgs:Mk,resolveLaunchCommand:(i,l={})=>Nk(i,l)};function jR(i,l=Date.now()){let u=gm.get(i);if(!u||l-u.windowStartedAt>qR)return gm.set(i,{count:1,windowStartedAt:l}),!0;return u.count+=1,u.count<=FR}function BR(i){return[...i.host?["--host",i.host]:[],...typeof i.port==="number"?["--port",String(i.port)]:[],...i.pathname?["--pathname",i.pathname]:[]]}function HR(){try{let i=iR(Z(),"logs","hub-daemon.log");return Qx(sR(i),{recursive:!0}),{fd:Zx(i,"a"),logPath:i}}catch{return}}function Rk(){return re()==="production"?ud():da()}function Tl(i){return Qh(i)}function zR(i){try{let l=JSON.parse(eR(`${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 Fc(i){try{tR(`${i}.superseded`)}catch{}}function ey(i,l,u){if(!l||l.url!==u)return i;return{...i,authToken:i.authToken??l.authToken,pid:i.pid??l.pid}}async function mo(i,l){try{return await dd(i,{authToken:l})}catch{return}}async function ty(i,l){let u=Date.now()+l;while(Date.now()<u){if(!(await mo(i))?.url)return!0;await new Promise((c)=>setTimeout(c,DR))}return!1}async function cd(i,l){if(!jR(i.url))return!1;await Po(i.url,i.authToken,"retired by newer install").catch(()=>!1),await Fk(i.url,i.authToken).catch(()=>!1);let u=await ty(i.url,Zg);if(!u&&i.pid&&WR(i.pid)){try{process.kill(i.pid,"SIGTERM")}catch{}u=await ty(i.url,Zg)}if(u)await la(l).catch(()=>{return});return u}function WR(i){try{return process.kill(i,0),!0}catch(l){return l?.code==="EPERM"}}async function Pk(i){try{let l=await lc(i.url,i.authToken);return l.activeSessionCount>0||(l.activePluginRequests??0)>0||(l.activeCloudCommands??0)>0}catch{return!1}}async function qc(i,l){if(Tl(i))return"reusable";let u=await Po(i.url,i.authToken,"retired by newer install").catch(()=>!1);if(await Pk(i)){if(u)await Po(i.url,i.authToken,"hub retirement deferred",{off:!0}).catch(()=>!1);return"deferred_busy"}let c=await cd(i,l);if(!c&&u)await Po(i.url,i.authToken,"hub retirement failed",{off:!0}).catch(()=>!1);return c?"retired":"failed"}async function KR(i){if(re()!=="production")return;let l=da();if(l.discoveryPath===i.discoveryPath)return;let u=await Pr(l.discoveryPath);if(u?.url)await cd(u,l.discoveryPath);else await la(l.discoveryPath).catch(()=>{return})}function GR(){let i=import.meta.url.endsWith(".ts")?"ts":"js";return nR(new URL(`./entry.${i}`,import.meta.url))}function Mk(i,l){if(qn(i))return[xk];return[...l&&i.toLowerCase().endsWith(".ts")?["--conditions=development"]:[],i]}var _l;function pQ(i){let l=i?.command.trim();_l=l?{command:l,args:i?.args?[...i.args]:void 0,env:i?.env?{...i.env}:void 0}:void 0}function Nk(i,l){let u,c;if(_l)u=_l.command,c=_l.args??[xk];else{let g=process.execPath?.trim();if(!g)throw Error("unable to resolve runtime executable for hub daemon");let b=rR(g).toLowerCase().includes("bun");u=g,c=Mk(GR(),b)}return{launcher:u,args:[...c,"--cwd",i,...BR(l),...l.manageConnectors===!1?["--no-connectors"]:[]],cwd:i,env:{...zn(Me({...process.env,..._l?.env}),XR()),CLINE_NO_INTERACTIVE:"1",[Zt]:"1"}}}function XR(){let i=Gi(),l=i?.name?.trim();return l?{client:l,version:i?.version,transport:"local"}:void 0}function JR(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 VR(i,l={}){if(jt())return;let u=Nk(i,l),c=HR();try{Vx(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)Yx(c.fd)}}async function YR(i,l={}){for(let u=0;;u++)try{VR(i,l);return}catch(c){let g=UR[u];if(!JR(c)||g===void 0)throw c;await new Promise((b)=>setTimeout(b,g))}}function mQ(i,l={}){if(jt())return;hu(i,l).catch(()=>{})}async function QR(i,l,u={}){let c=u.host!==void 0||u.port!==void 0||u.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),g=oc(u),b=qo(g.host,g.port,g.pathname),I=(M)=>{if(!c)ac(M.url,M.authToken);return M};await KR(i).catch(()=>{return});let T=await Pr(i.discoveryPath),_=T?.url?void 0:zR(i.discoveryPath),E=!1;if(T?.url){let M=T.authToken;if(!M)E=!0,await cd(T,i.discoveryPath);else{let O=await mo(T.url,M);if(O?.url&&Tl(O)&&await Os(O.url,{authToken:M}))return Fc(i.discoveryPath),I({url:O.url,authToken:M});if(O?.url){if(await qc({...O,authToken:M},i.discoveryPath)==="deferred_busy"&&await Os(O.url,{authToken:M}))return I({url:O.url,authToken:M})}else await la(i.discoveryPath).catch(()=>{return})}}let A=await mo(b);if(A?.url){let M=ey(A,T??_,b);if(Tl(A)){let L=[A.authToken,T?.authToken,_?.authToken].filter((D)=>typeof D==="string"&&D.trim().length>0);for(let D of L){if(!await Os(A.url,{authToken:D}))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:D,host:A.host,port:A.port,url:A.url,pid:A.pid??T?.pid??_?.pid,startedAt:A.startedAt??new Date().toISOString(),updatedAt:new Date().toISOString()};try{await _k(i.discoveryPath,F)}catch{}return Fc(i.discoveryPath),I({url:A.url,authToken:D})}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 O=await qc(M,i.discoveryPath);if(O==="deferred_busy"){for(let L of[M.authToken,T?.authToken].filter((D)=>typeof D==="string"&&D.trim().length>0))if(await Os(A.url,{authToken:L}))return I({url:A.url,authToken:L});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(O==="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 YR(l,{...C,manageConnectors:u.manageConnectors});let N=Date.now()+Qg;while(Date.now()<N){let M=await Pr(i.discoveryPath);if(M?.url&&M.authToken){let L=await mo(M.url,M.authToken);if(L?.url&&Tl(L)&&await Os(L.url,{authToken:M.authToken}))return Fc(i.discoveryPath),I({url:L.url,authToken:M.authToken})}let O=await mo(b);if(O?.url&&!Tl(O)){let L=ey(O,M??_,b),D=await qc(L,i.discoveryPath);if(D==="deferred_busy"&&M?.authToken&&await Os(O.url,{authToken:M.authToken}))return I({url:O.url,authToken:M.authToken});if(D==="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((L)=>setTimeout(L,LR))}throw Error(`Timed out after ${Qg}ms waiting for detached hub startup.`)}async function hu(i,l={}){let u=Rk();return await Ak(u.discoveryPath,async()=>QR(u,i,l))}var ZR=5000,eP=500;async function hQ(i={}){let l=Rk(),u=i.workspaceRoot??process.cwd(),c=await Pr(l.discoveryPath),g=c?.url?await mo(c.url,c.authToken):void 0;if(!g?.url)return{outcome:"started",...await hu(u)};let b={...g,authToken:g.authToken??c?.authToken,pid:g.pid??c?.pid};if(nc(g).compatible)return{outcome:"already_current",url:g.url,authToken:b.authToken};if(Vh(Yh(),g)<=0)return{outcome:"hub_not_older",url:g.url,authToken:b.authToken};if(!await Po(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 Po(b.url,b.authToken,"hub upgrade aborted",{off:!0}).catch(()=>!1)},T=Date.now()+(i.waitForIdleMs??ZR),_,E;for(;;){try{let A=await lc(b.url,b.authToken);if(_=A.activeSessionCount,E=(A.activePluginRequests??0)+(A.activeCloudCommands??0),_===0&&E===0)break}catch{}if(Date.now()>=T)break;await new Promise((A)=>setTimeout(A,eP))}if(!(_===0&&E===0)&&i.force!==!0)return await I(),{outcome:"still_busy",url:b.url,authToken:b.authToken,..._!==void 0?{activeSessionCount:_}:{}};if(!await cd(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 hu(u),activeSessionCount:_??0}}function tf(){return re()==="production"?ud():da()}function tP(){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 rP(i){let l=new URL(i);l.protocol=i.protocol==="wss:"?"https:":"http:";let u=xa(l.toString());if(!u)return;return i.protocol==="wss:"?new bk.HttpsProxyAgent(u):new wk.HttpProxyAgent(u)}function Ok(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 Ok(i.data);return String(i)}function sP(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 ry(i){let l=i,u=sP(l.reason);return new St("hub_connection_closed",l.code||u?`Hub connection closed (code=${l.code??0}${u?`, reason=${u}`:""})`:ym,{closeCode:l.code,closeReason:u||void 0})}function jc(i,l){if(i instanceof St)return i;if(i instanceof Error)return new St("hub_connect_failed",i.message);if(i&&typeof i==="object"&&"error"in i&&i.error instanceof Error)return new St("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 St("hub_connect_failed",u);let c=i&&typeof i==="object"&&"type"in i&&typeof i.type==="string"?i.type.trim():"";return new St("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 Bc="*",Id=8000,iP="cline-hub-auth.",$k=new Map,Lk=new Set,nP=3000,oP=3000,aP=100,ym="Hub connection closed",lP=250,dP=5000,sy=0.5;class St extends Error{code;details;constructor(i,l,u){super(l);this.code=i,this.details=u,this.name="HubTransportError"}}function uP(i){return i instanceof St}class jo extends Error{command;code;constructor(i,l,u){super(u);this.command=i,this.code=l,this.name="HubCommandError"}}function fQ(i,l){return i instanceof jo&&i.code==="hub_command_timeout"&&(l===void 0||i.command===l)}function rf(i,l={}){let u=i.searchParams.get("authToken")?.trim();if(i.searchParams.delete("authToken"),u)return u;if(l.skipRegistry)return;let c=sf(i.toString());return c?$k.get(c):void 0}function cP(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 sf(i){if(!cP(i))return;let l=new URL(fu(i));return l.search="",l.hash="",l.toString()}function vm(i){let l=sf(i);return!!l&&Lk.has(l)}function ac(i,l){let u=sf(i);if(u){if(Lk.add(u),l?.trim())$k.set(u,l)}return i}class ua{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 St("hub_connection_closed",ym);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()||rf(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(Wl.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 T of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(T));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=jc(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 St("hub_connect_timeout",`Timed out resolving hub connection headers after ${Id}ms`))},Id)})])}catch(A){let C=A instanceof St?A:new St("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 St("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?rP(i):void 0}catch(E){let A=jc(E,i);if(u===this.connectGeneration)this.lastCloseError=A;throw A}let I=g?new ba(i.toString(),{headers:{...g},agent:b}):new(tP())(i.toString(),l?[`${iP}${l}`]:void 0);this.socket=I;let T=!1,_=new Promise((E,A)=>{let C=!1,N=setTimeout(()=>{if(C)return;C=!0,T=!0;let M=new St("hub_connect_timeout",`Timed out connecting to hub after ${Id}ms`);if(this.socket===I)this.lastCloseError=M,this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{I.close()}catch{}A(M)},Id);I.addEventListener("open",()=>{if(C)return;C=!0,clearTimeout(N),E()}),I.addEventListener("error",(M)=>{if(C)return;C=!0,clearTimeout(N);let O=jc(M,i);if(this.socket===I)this.lastCloseError=O,this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;A(O)}),I.addEventListener("close",(M)=>{if(C)return;C=!0,clearTimeout(N);let O=T?this.lastCloseError:ry(M);if(this.socket===I){if(!T)this.lastCloseError=O,this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0}A(O)})});return I.addEventListener("message",(E)=>{this.handleFrame(JSON.parse(Ok(E)))}),I.addEventListener("close",(E)=>{if(this.socket!==I)return;if(!T)this.lastCloseError=ry(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 _,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:(_)=>{b=!0,c?.onDispatch?.(_)}},T=i!=="client.register"&&i!=="client.unregister";while(!0)try{return await this.commandOnce(i,l,u,I)}catch(_){if(!T||b&&c?.retryAfterDispatch===!1||g>=1||!await this.recoverLocalHubTransport(_))throw _;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=Xt(i,c?.timeoutMs),T=new Promise((E,A)=>{let C=I===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(b))return;A(new jo(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 _=await T;if(!_.ok){if(_.error?.code===Xh){let E=u??(typeof l?.sessionId==="string"?l.sessionId:void 0);throw new sc(E,_.error.message)}throw new jo(i,_.error?.code,_.error?.message??`Hub command ${i} failed`)}return _}async recoverLocalHubTransport(i){if(!vm(this.currentUrl)||!uP(i))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let l=await bm({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(lP*2**this.reconnectAttempt,dP),l=Math.round(i*(1-sy)+Math.random()*i*sy);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(!vm(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let i=await bm({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 St("hub_connection_closed",ym);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 St("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??Bc}subscriptionSessionIdFromKey(i){return i===Bc?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[Bc,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 fu(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 Os(i,l){let u=new ua({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 wm(i,l){let u=fu(i),c=await dd(u,{authToken:l?.authToken});if(!c)return{status:"unreachable",url:u};if(l?.requireCurrentBuild){let g=aa(),b=nc(c,g);if(!b.compatible&&!Qh(c))return{status:b.reason==="unsupported_protocol"?"protocol_mismatch":"build_mismatch",url:u}}else if(!Pt(c).compatible)return{status:"protocol_mismatch",url:u};if(l?.verifyConnection===!0&&!await Os(u,{workspaceRoot:l.workspaceRoot,cwd:l.cwd,authToken:l.authToken}))return{status:"unreachable",url:u};return{status:"compatible",url:u}}async function pP(i){let l=Date.now()+oP;while(Date.now()<l){if(!(await dd(i).catch(()=>{return}))?.url)return!0;await new Promise((u)=>setTimeout(u,aP))}return!1}function mP(i,l){try{return fu(i)===fu(l)}catch{return!1}}function Dk(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 T of I){let _=T&&typeof T==="object"?T.clientId:void 0;if(typeof _==="string"&&_.trim())c.add(_)}}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 gQ(i){let l=Dk(i);return l.activeSessionCount>0||l.activePluginRequests>0||l.activeCloudCommands>0}async function lc(i,l,u){let c=new ua({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:nP});return Dk(g.payload)}finally{await c.dispose().catch(()=>{return})}}async function Uk(i,l,u){try{let c=await lc(i,l,u);return c.activeSessionCount===0&&c.activePluginRequests===0&&c.activeCloudCommands===0}catch{return!1}}async function hP(i,l){let u=`${i.discoveryPath}.superseded`,c=await Pr(u);if(!c?.url||!c.authToken)return;let g=await wm(c.url,{authToken:c.authToken});if(g.status!=="compatible")return;if(await Uk(g.url,c.authToken,l))return;return ac(g.url,c.authToken)}async function fP(i={}){if(i.endpoint?.trim()){let g=await wm(i.endpoint);return g.status==="compatible"?g.url:void 0}let l=tf(),u=await Pr(l.discoveryPath);if(!u?.url)return await hP(l,i);let c=await wm(u.url,{authToken:u.authToken,requireCurrentBuild:!0});if(c.status==="compatible")return ac(c.url,u.authToken);if(c.status==="protocol_mismatch")await la(l.discoveryPath).catch(()=>{return});return}async function bm(i={}){let l=await fP(i);if(l&&await Os(l,{workspaceRoot:i.workspaceRoot,cwd:i.cwd}))return l;if(i.endpoint?.trim())return;try{return(await hu(i.workspaceRoot??process.cwd())).url}catch(u){i.onStartupError?.(u);return}}async function Po(i,l,u,c){Ze();let g=new URL(i),b=l?.trim()||rf(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 Fk(i,l){Ze();let u=new URL(i),c=l?.trim()||rf(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 gP(i=tf()){let l=await Pr(i.discoveryPath,{onError:"throw"});if(!l?.url)return!1;try{if(await Fk(l.url,l.authToken))return!0}catch{}return!1}async function yQ(i){if(!vm(i.url))return;let l=tf(),u=await Pr(l.discoveryPath);if(!u?.url||!mP(u.url,i.url))return;if(!await Uk(u.url,u.authToken,{workspaceRoot:i.workspaceRoot,cwd:i.cwd}))return;if(!await gP())return;if(!await pP(u.url))return;return await la(l.discoveryPath).catch(()=>{return}),await bm({workspaceRoot:i.workspaceRoot,cwd:i.cwd})}function yP(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 vP="cline-hub-auth.";function wP(i){return i.host!==void 0||i.port!==void 0||i.pathname!==void 0}function bP(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 qk(){return re()==="production"?ud():da()}async function IP(i){let l=i.searchParams.get("authToken")?.trim();if(i.searchParams.delete("authToken"),l)return l;let u=qk(),c=await Pr(u.discoveryPath);if(c?.url&&bP(i.toString(),c.url))return c.authToken;return}async function kP(i={}){let l=oc(i);if(!wP(i)){let u=qk(),c=await Pr(u.discoveryPath);if(c?.url)return c.url}return qo(l.host,l.port,l.pathname)}async function jk(i){return await new Promise((l,u)=>{(async()=>{let c=new URL(i),g=await IP(c);c.hash="";let b=new WebSocket(c.toString(),g?[`${vP}${g}`]:void 0),I=new Map,T=0;b.addEventListener("open",()=>{l({send(_){let E=_.requestId??`hub-client-${++T}`;return new Promise((A,C)=>{I.set(E,{resolve:A,reject:C});let N={kind:"command",envelope:{..._,requestId:E}};b.send(JSON.stringify(N))})},close(){b.close()}})}),b.addEventListener("message",(_)=>{let E=JSON.parse(String(_.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 _ of I.values())_.reject(Error("Hub connection closed"));I.clear()}),b.addEventListener("error",(_)=>{u(yP(_,i))})})().catch(u)})}async function wQ(i){try{return(await jk(i)).close(),!0}catch{return!1}}async function bQ(i,l){let u=await kP(i),c=await jk(u);try{return await c.send({version:l.version??"v1",clientId:l.clientId??"hub-client",...l})}finally{c.close()}}var TP=1e4,_P="CLINE_HUB_BUILD_WATCH_INTERVAL_MS";function EP(){let i=Number(process.env[_P]);return Number.isFinite(i)&&i>0?i:TP}async function AP(i,l){try{let u=await lc(i.url,l);return{...i,activeSessionCount:u.activeSessionCount,participantClientCount:u.participantClientCount,activePluginRequests:u.activePluginRequests}}catch{return i}}function CP(){return re()==="production"?ud():da()}function xP(i){try{return SP(`${i}.lock`)}catch{return!1}}async function RP(){let i=CP();if(xP(i.discoveryPath))return;let l=await Pr(i.discoveryPath).catch(()=>{return});if(!l?.url)return;let u=await dd(l.url).catch(()=>{return});if(!u?.url)return;let c=aa(),g=nc(u,c);if(g.compatible)return;let b=(T)=>({url:u.url,reason:T,hubBuildId:u.buildId,hubCoreVersion:u.coreVersion,expectedBuildId:c});if(g.reason==="unsupported_protocol")return b("unsupported_protocol");let I=Yh();if(I.coreVersion&&u.coreVersion&&I.coreVersion===u.coreVersion)return;if(Vh(I,u)>0)return await AP(b("outdated_hub"),l.authToken);return b("build_mismatch")}function SQ(i){if(jt()||process.env.CLINE_HUB_PORT?.trim())return()=>{};let l=i.intervalMs??EP(),u,c,g=!1,b=setInterval(()=>{if(g)return;g=!0,RP().then((I)=>{if(!I){u=void 0,c=void 0;return}let T=`${I.reason}:${I.hubBuildId??""}`;if(T===u)return;if(I.reason==="outdated_hub"&&c!==T){c=T;return}c=void 0,u=T,i.onMismatch(I)}).catch(()=>{return}).finally(()=>{g=!1})},l);return b.unref?.(),()=>{clearInterval(b)}}async function iy(i,l,u,c,g){try{return await i.command(l,u,c,g)}catch(b){if(b instanceof jo&&b.code==="unsupported_command")return;throw b}}function PP(i){return{async list(l){let u=await iy(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 iy(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 nf(i){return i?JSON.parse(JSON.stringify(i)):{}}function kd(i){let l=i?.session&&typeof i.session==="object"?i.session:void 0;if(!l)return;let u=l.metadata&&typeof l.metadata==="object"?nf(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 ny(i,l){return i.error?.message??`hub command failed: ${l}`}function MP(i){let l=nf(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 oy(i){let l=i?.sessionId;return typeof l==="string"&&l.trim()?l.trim():void 0}function NP(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 OP(i){let l=nf(i.payload);if(i.event==="schedule.execution_completed")return{sessionId:i.sessionId?.trim()||oy(l)||"",eventType:"schedule.execution.completed",payload:l};if(i.event==="schedule.execution_failed")return{sessionId:i.sessionId?.trim()||oy(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:MP(i.payload)};case"run.completed":return{sessionId:u,eventType:"runtime.chat.completed",payload:l};default:return}}class $P{client;pluginCommands;constructor(i){this.client=new ua({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=PP(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=kd(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(Kl(u))return;throw u}return kd(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(ny(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(ny(g,"session.restore"));let b=kd(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,T=NP(g.payload);return{sessionId:b?.sessionId,startResult:b?.sessionId?{sessionId:b.sessionId,manifestPath:"",messagesPath:b.messagesPath??""}:void 0,...I?{messages:I}:{},checkpoint:T}}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)=>kd({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=OP(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 LP{client;constructor(i){this.client=new ua({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 jP;function Ls(i){if(typeof i!=="string"||i.length===0)return"unset";return qP("sha256").update(i).digest("hex").slice(0,8)}function lt(i){try{jP?.debug(i)}catch{}}function BP(){let i;return{promise:new Promise((l)=>{i=l}),resolve:i}}async function of(i){let l=await import("node:http"),u=i.host??"127.0.0.1",c=i.timeoutMs??300000,g=i.successHtml??HP,b=BP(),I=!1,T=null,_=null,E=null,A=(M)=>{if(I)return;I=!0,b.resolve(M)},C=()=>{if(T)clearTimeout(T),T=null;let M=E;if(E=null,_)_.close(),_.closeAllConnections?.(),_=null;if(M!==null&&i.onClose)Promise.resolve(i.onClose({host:u,port:M})).catch(()=>{})},N=async()=>(T=setTimeout(()=>{C(),A(null)},c),b.promise);for(let M of i.ports){let O=l.createServer((D,F)=>{try{let j=new URL(D.url||"",`http://${u}:${M}`);if(j.pathname!==i.callbackPath){F.statusCode=404,F.end("Not found");return}let B={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(B.error){F.statusCode=400,F.end(`Authentication failed: ${B.error}`),C(),A(B);return}if(!B.code){F.statusCode=400,F.end("Missing authorization code");return}if(i.expectedState&&B.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(B)}catch{F.statusCode=500,F.end("Internal error")}}),L=await new Promise((D)=>{let F=(j)=>{O.off("error",F),D({bound:!1,error:j})};O.once("error",F),O.listen(M,u,()=>{O.off("error",F),_=O,D({bound:!0})})});if(L.error){if(L.error.code==="EADDRINUSE")continue;throw C(),L.error}if(L.bound){E=M;let D=`http://${u}:${M}${i.callbackPath}`;if(i.onListening)await Promise.resolve(i.onListening({host:u,port:M,callbackUrl:D})).catch(()=>{});return{callbackUrl:D,waitForCallback:N,cancelWait:()=>{C(),A(null)},close:()=>{C(),A(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var HP=`<!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 Bk(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 zP(i){let l=new TextEncoder().encode(i),u=await crypto.subtle.digest("SHA-256",l);return new Uint8Array(u)}function WP(i=32){let l=new Uint8Array(i);return crypto.getRandomValues(l),Bk(l)}async function Hk(){let i=WP(),l=Bk(await zP(i));return{verifier:i,challenge:l}}function af(i){return i.endsWith("/")?i.slice(0,-1):i}function ca(i,l){return new URL(l,`${af(i)}/`).toString()}function gu(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 dc(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 lf(i,l){return Date.now()>=i.expires-l}async function df(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 gu(l,i.parseOptions);if(await c,u)throw u;if(l)return gu(l,i.parseOptions);return{}}var uc={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},zk={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},Wk="https://api.workos.com",KP="/auth",ly=Array.from({length:11},(i,l)=>48801+l),GP=300000,XP=30000,pd=30000,JP=300,VP=5;class Hr 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 YP(i){let l=Date.parse(i);if(Number.isNaN(l))throw Error(`Invalid expiresAt value: ${i}`);return l}function uf(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:YP(i.expiresAt),accountId:c??void 0,email:i.userInfo.email||u.email,metadata:b}}async function cf(i){if(!i)return{};return typeof i==="function"?await i():i}function dy(i,l){if(typeof i!=="number"||!Number.isFinite(i)||i<=0)return l;return Math.floor(i)}function QP(i){return typeof i==="string"&&i.trim()||void 0}function ZP(i){let l=ne(i);if(!l)return{};return{sessionId:QP(l.sid)}}function eM(i){let l={},u=i.metadata?.sessionStartedAtMs;if(typeof u==="number"&&Number.isFinite(u)&&u>0)l.sessionDurationMs=Date.now()-u;return l}function Kk(i){return{...ZP(i.access),...eM(i)}}function pf(i,l){if(!i.success||!i.data?.accessToken)throw Error(l);return i.data}async function tM(i,l){let u=await fetch(ca(Wk,zk.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:i}),signal:AbortSignal.any([AbortSignal.timeout(l?.requestTimeoutMs??pd),...l?.signal?[l.signal]:[]])}),c=await u.json().catch(()=>({}));if(!u.ok)throw new Hr(`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:dy(c.expires_in,JP),pollIntervalSeconds:dy(c.interval,VP)}}async function rM(i){let l=Date.now()+i.expiresInSeconds*1000,u=Math.max(1,i.initialPollIntervalSeconds);while(Date.now()<=l){let c=await fetch(ca(i.workosApiBaseUrl,zk.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 ay(u*1000,void 0,{signal:i.signal});break}case"slow_down":{u+=1,await ay(u*1000,void 0,{signal:i.signal});break}case"access_denied":case"expired_token":case"invalid_grant":throw new Hr(g.error_description||"WorkOS authorization failed",{status:c.status,errorCode:g.error,requestId:c.headers.get("x-request-id")??void 0});default:throw new Hr(`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 sM(i,l,u,c){let g={accessToken:i.accessToken,refreshToken:i.refreshToken},b=await fetch(ca(l.apiBaseUrl,uc.register),{method:"POST",headers:{"Content-Type":"application/json",...await cf(l.headers)},body:JSON.stringify(g),signal:AbortSignal.any([AbortSignal.timeout(l.requestTimeoutMs??pd),...c?[c]:[]])});if(!b.ok){let T=await b.text().catch(()=>""),_=dc(T);throw new Hr(`Token registration failed: ${b.status}${_.message?` - ${_.message}`:""}`,{status:b.status,errorCode:_.code,requestId:b.headers.get("x-request-id")??void 0})}let I=await b.json();return uf(pf(I,"Invalid token exchange response"),u??l.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function iM(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(ca(u.apiBaseUrl,uc.token),{method:"POST",headers:{"Content-Type":"application/json",...await cf(u.headers)},body:JSON.stringify(g),signal:AbortSignal.timeout(u.requestTimeoutMs??pd)});if(!b.ok){let T=await b.text().catch(()=>""),_=dc(T);throw new Hr(`Token exchange failed: ${b.status}${_.message?` - ${_.message}`:""}`,{status:b.status,errorCode:_.code,requestId:b.headers.get("x-request-id")??void 0})}let I=await b.json();return uf(pf(I,"Invalid token exchange response"),c??u.provider,{metadata:{sessionStartedAtMs:Date.now()}})}async function nM(i){Rh(i.telemetry,i.provider??"cline");let l=i.useWorkOSDeviceAuth??!0,u=i.callbackPorts?.length?i.callbackPorts:ly,c=i.callbackPath??KP,g=l?null:await of({ports:u,callbackPath:c,onListening:i.callbacks.onServerListening,onClose:i.callbacks.onServerClose}),b=g?.callbackUrl||`http://127.0.0.1:${u[0]??ly[0]}${c}`;try{let I;if(l){let T=_e().workOsClientId,_=await tM(T,i);i.callbacks.onAuth({url:_.verificationUriComplete??_.verificationUri,instructions:`Enter this code in your browser: ${_.userCode}`});let E=await rM({clientId:T,deviceCode:_.deviceCode,expiresInSeconds:_.expiresInSeconds,initialPollIntervalSeconds:_.pollIntervalSeconds,requestTimeoutMs:i.requestTimeoutMs??pd,workosApiBaseUrl:Wk,onProgress:i.callbacks.onProgress});I=await sM(E,i,i.provider)}else{let T=new URL(ca(i.apiBaseUrl,uc.authorize));T.searchParams.set("client_type","extension"),T.searchParams.set("callback_url",b),T.searchParams.set("redirect_uri",b),i.callbacks.onAuth({url:T.toString(),instructions:"Continue the authentication process in your browser."});let _,E=i.provider,A=await df({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(_=A.code,E=A.provider??E,!_){let C=await i.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),N=gu(C,{includeProvider:!0});_=N.code,E=N.provider??E}if(!_)throw Error("Missing authorization code");I=await iM(_,b,i,E)}return Ph(i.telemetry,i.provider??"cline",Kk(I)),Nh(i.telemetry,{id:I.accountId,email:I.email,provider:i.provider??"cline"}),I}catch(I){throw cu(i.telemetry,i.provider??"cline",I instanceof Error?I.message:String(I),{requestId:I instanceof Hr?I.requestId:void 0}),I}finally{g?.close()}}async function oM(i,l){let u=ca(l.apiBaseUrl,uc.refresh);lt(`cline.refresh.request url=${u} refreshTokenHash=${Ls(i.refresh)}`);let c=await fetch(u,{method:"POST",headers:{"Content-Type":"application/json",...await cf(l.headers)},body:JSON.stringify({refreshToken:i.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(l.requestTimeoutMs??pd)});if(!c.ok){let T=await c.text().catch(()=>""),_=dc(T),E=c.headers.get("x-request-id")??void 0;throw lt(`cline.refresh.error status=${c.status} errorCode=${_.code??"none"} message=${_.message??"none"} requestId=${E??"none"}`),new Hr(`Token refresh failed: ${c.status}${_.message?` - ${_.message}`:""}`,{status:c.status,errorCode:_.code,requestId:E})}let g=await c.json(),b=i.metadata?.provider??l.provider,I=uf(pf(g,"Invalid token refresh response"),b,i);return lt(`cline.refresh.success newAccessTokenHash=${Ls(I.access)} newRefreshTokenHash=${Ls(I.refresh)} expires=${I.expires}`),I}async function aM(i,l,u){if(!i)return lt("cline.getCredentials outcome=no_current_credentials"),null;let c=u?.refreshBufferMs??GP,g=u?.retryableTokenGraceMs??XP,b=u?.forceRefresh===!0;if(!b&&!lf(i,c))return lt(`cline.getCredentials outcome=still_valid forceRefresh=${b}`),i;lt(`cline.getCredentials outcome=needs_refresh forceRefresh=${b} accessTokenHash=${Ls(i.access)}`);try{return await oM(i,l)}catch(I){let T=Kk(i),_=I instanceof Hr&&I.requestId?{request_id:I.requestId}:{},E={status:I instanceof Hr?I.status:void 0,errorCode:I instanceof Hr?I.errorCode:void 0,..._,...T,errorName:I instanceof Error?I.name:void 0};if(I instanceof Hr&&I.isLikelyInvalidGrant())return lt(`cline.getCredentials outcome=invalid_grant status=${I.status} errorCode=${I.errorCode??"none"}`),Mh(l.telemetry,l.provider??"cline","token_invalid",{status:I.status,errorCode:I.errorCode,..._,...T}),null;if(i.expires-Date.now()>g)return lt(`cline.getCredentials outcome=transient_failure_kept_current error=${I instanceof Error?I.message:String(I)}`),Hl(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)}`),Hl(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 Mo 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 lM(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 dM(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=dc(c);throw new Mo(`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 Mo)throw l;return{type:"failed"}}}async function uM(i="pi"){let{verifier:l,challenge:u}=await Hk(),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 cM(){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 pM(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 T=b[0];if(typeof T?.id==="string"&&T.id.length>0)return T.id}let I=c?.chatgpt_account_id;if(typeof I==="string"&&I.length>0)return I;return null}function Gk(i,l){let u=pM(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 mM(i){Rh(i.telemetry,"openai-codex");let l=cM(),{verifier:u,state:c,url:g}=await uM(i.originator),b=await of({host:l.host,ports:[l.port],callbackPath:l.callbackPath,expectedState:c});if(!b.callbackUrl&&!i.onManualCodeInput){let T=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 cu(i.telemetry,"openai-codex",T.message),T}i.onAuth({url:g,instructions:"Continue the authentication process in your browser."});let I;try{let T=await df({waitForCallback:b.waitForCallback,cancelWait:b.cancelWait,onManualCodeInput:i.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(T.error)throw Error(`OAuth error: ${T.error}`);if(T.state&&T.state!==c)throw Error("State mismatch");if(I=T.code,!I){let A=await i.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),C=gu(A,{allowHashCodeState:!0});if(C.state&&C.state!==c)throw Error("State mismatch");I=C.code}if(!I)throw Error("Missing authorization code");let _=await lM(I,u,l.redirectUri);if(_.type!=="success")throw Error("Token exchange failed");let E=Gk(_);return Ph(i.telemetry,"openai-codex"),Nh(i.telemetry,{id:E.accountId,email:E.email,provider:"openai-codex"}),E}catch(T){throw cu(i.telemetry,"openai-codex",T instanceof Error?T.message:String(T)),T}finally{b.close()}}async function hM(i,l){let u=await dM(i);if(u.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let c=Gk(u,l);if(!c.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return c}async function fM(i,l){if(!i)return null;let u=l?.refreshBufferMs??ut.refreshBufferMs,c=l?.retryableTokenGraceMs??ut.retryableTokenGraceMs;if(l?.forceRefresh!==!0&&!lf(i,u))return i;try{return await hM(i.refresh,i)}catch(g){let b={status:g instanceof Mo?g.status:void 0,errorCode:g instanceof Mo?g.errorCode:void 0,errorName:g instanceof Error?g.name:void 0};if(g instanceof Mo&&g.isLikelyInvalidGrant())return Mh(l?.telemetry,"openai-codex","invalid_grant",{status:g.status,errorCode:g.errorCode}),null;let I=i.expires-Date.now()<=c;if(Hl(l?.telemetry,"openai-codex",{...b,tokenExpired:I}),!I)return i;throw g}}class Xk{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 gM="a8331954c0cf48ba99b5dd223a14c6ea",yM="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",vM="openid offline_access",Jk="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",wM="c1aba3deed5740659981a752714eba33",bM="https://login-ext.identity.oraclecloud.com",IM="openid offline_access",Vk="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",kM="/auth/oca",SM=Array.from({length:11},(i,l)=>48801+l),TM=300000,_M=30000,Yk=30000,EM=600000;class No 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 Gs={internal:{clientId:gM,idcsUrl:yM,scopes:vM,baseUrl:Jk},external:{clientId:wM,idcsUrl:bM,scopes:IM,baseUrl:Vk}},Gl=new Map,AM=86400000,CM=300000,xM=32,zc=new Xk(AM,xM);function Qk(i){if(typeof i==="function")return i();return i??"internal"}function Zk(i){return{internal:{clientId:i?.internal?.clientId??Gs.internal.clientId,idcsUrl:i?.internal?.idcsUrl??Gs.internal.idcsUrl,scopes:i?.internal?.scopes??Gs.internal.scopes,baseUrl:i?.internal?.baseUrl??Gs.internal.baseUrl},external:{clientId:i?.external?.clientId??Gs.external.clientId,idcsUrl:i?.external?.idcsUrl??Gs.external.idcsUrl,scopes:i?.external?.scopes??Gs.external.scopes,baseUrl:i?.external?.baseUrl??Gs.external.baseUrl}}}function RM(i=Date.now()){let l=i-EM;for(let[u,c]of Gl.entries())if(c.createdAt<l)Gl.delete(u)}function PM(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 eS(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),T=b?.sub??I?.sub,_=b?.email??I?.email;return{access:c,refresh:g,expires:PM(i,c,i.id_token),accountId:T??u?.accountId,email:_??u?.email,metadata:{...u?.metadata??{},provider:"oca",mode:l,subject:T,idToken:i.id_token}}}async function tS(i,l){let u=af(i),c=zc.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 T=`${u}/oauth2/v1/token`;return zc.set(u,T,Date.now(),CM),T}let I=(await b.json()).token_endpoint||`${u}/oauth2/v1/token`;return zc.set(u,I),I}function rS(i){return{code:i.error,message:i.error_description}}async function MM(i){let l=Gl.get(i.state);if(!l)throw Error("No PKCE verifier found for this state");Gl.delete(i.state);let u=i.mode==="external"?i.config.external:i.config.internal,c=await tS(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 _=rS(I);throw new No(`Token exchange failed: ${b.status}${_.message?` - ${_.message}`:""}`,{status:b.status,errorCode:_.code})}let T=ne(I.id_token);if(!I.id_token||!T)throw Error("No ID token received from OCA");if(T.nonce!==l.nonce)throw Error("OIDC nonce verification failed");return eS(I,i.mode)}function NM(i){let l=i.mode==="external"?i.config.external:i.config.internal,u=new URL(`${af(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 OM(i){Rh(i.telemetry,"oca");let l=Zk(i.config),u=Qk(i.mode),c=i.callbackPorts?.length?i.callbackPorts:SM,g=i.callbackPath??kM,b=i.requestTimeoutMs??Yk,I=await of({ports:c,callbackPath:g,onListening:i.callbacks.onServerListening,onClose:i.callbacks.onServerClose}),T=I.callbackUrl;if(!T)throw Error("Unable to bind local OAuth callback server");let _=R(16),E=R(16),{verifier:A,challenge:C}=await Hk();RM(),Gl.set(_,{verifier:A,nonce:E,mode:u,redirectUri:T,createdAt:Date.now()});let N=NM({callbackUrl:T,mode:u,state:_,nonce:E,challenge:C,config:l});i.callbacks.onAuth({url:N,instructions:"Continue the authentication process in your browser."});try{let M=await df({waitForCallback:I.waitForCallback,cancelWait:I.cancelWait,onManualCodeInput:i.callbacks.onManualCodeInput}),{code:O,state:L}=M;if(M.error)throw Error(`OAuth error: ${M.error}`);if(!O){if(!i.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!L||L!==_)throw Error("State mismatch");let D=await MM({code:O,state:L,mode:u,config:l,requestTimeoutMs:b});return Ph(i.telemetry,"oca"),Nh(i.telemetry,{id:D.accountId,email:D.email,provider:"oca"}),D}catch(M){throw cu(i.telemetry,"oca",M instanceof Error?M.message:String(M)),M}finally{I.close()}}async function $M(i,l={}){let u=Zk(l.config),c=l.requestTimeoutMs??Yk,g=i.metadata?.mode,b=g==="internal"||g==="external"?g:Qk(l.mode),I=b==="external"?u.external:u.internal,T=await tS(I.idcsUrl,c),_=new URLSearchParams({grant_type:"refresh_token",refresh_token:i.refresh,client_id:I.clientId}),E=await fetch(T,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:_,signal:AbortSignal.timeout(c)}),A=await E.json();if(!E.ok){let C=rS(A);throw new No(`Token refresh failed: ${E.status}${C.message?` - ${C.message}`:""}`,{status:E.status,errorCode:C.code})}return eS(A,b,i)}async function LM(i,l,u){if(!i)return null;let c=l?.refreshBufferMs??u?.refreshBufferMs??TM,g=l?.retryableTokenGraceMs??u?.retryableTokenGraceMs??_M;if(l?.forceRefresh!==!0&&!lf(i,c))return i;try{return await $M(i,u)}catch(b){let I=u?.telemetry??l?.telemetry,T={status:b instanceof No?b.status:void 0,errorCode:b instanceof No?b.errorCode:void 0,errorName:b instanceof Error?b.name:void 0};if(b instanceof No&&b.isLikelyInvalidGrant())return Mh(I,"oca","invalid_grant",{status:b.status,errorCode:b.errorCode}),null;let _=i.expires-Date.now()<=g;if(Hl(I,"oca",{...T,tokenExpired:_}),!_)return i;throw b}}var yu="workos:";function DM(i){let l=i.trim();return l.toLowerCase().startsWith(yu)?l:`${yu}${l}`}function UM(i){let l=i.trim();return l.toLowerCase().startsWith(yu)?l.slice(yu.length):l}function FM(i){let l=ne(i)?.exp;if(typeof l==="number"&&l>0)return l*1000;return null}function qM(i,l){let u=i.auth?.expiresAt;if(typeof u==="number"&&Number.isFinite(u)&&u>0)return u;let c=FM(l);if(c)return c;return Date.now()-1}function jM(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:qM(i,g),accountId:i.auth?.accountId,metadata:i.auth?.metadata}}function BM(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 Im(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 BM({...u,storageProviderId:l,formatAccessToken:i.formatAccessToken})},isConfigured(u){return!!u?.auth?.accessToken},normalizeStoredAccessToken:i.normalizeStoredAccessToken}}function uy(i){return Im({providerId:i.providerId,storageProviderId:i.storageProviderId,formatAccessToken:DM,normalizeStoredAccessToken:UM,login:({settings:l,callbacks:u,telemetry:c})=>nM({apiBaseUrl:l?.baseUrl?.trim()||_e().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:u,telemetry:c}),refresh:({settings:l,credentials:u,forceRefresh:c,telemetry:g})=>aM(u,{apiBaseUrl:l.baseUrl?.trim()||_e().apiBaseUrl,telemetry:g},{forceRefresh:c})})}var HM=[uy({providerId:"cline"}),uy({providerId:"cline-pass",storageProviderId:"cline"}),Im({providerId:"oca",login:({settings:i,callbacks:l,telemetry:u})=>OM({mode:i?.oca?.mode,callbacks:l,telemetry:u}),refresh:({settings:i,credentials:l,forceRefresh:u,telemetry:c})=>LM(l,{forceRefresh:u,telemetry:c},{mode:i.oca?.mode,telemetry:c})}),Im({providerId:"openai-codex",login:({callbacks:i,telemetry:l})=>mM({onAuth:i.onAuth,onPrompt:i.onPrompt,onProgress:i.onProgress,onManualCodeInput:i.onManualCodeInput,telemetry:l}),refresh:({credentials:i,forceRefresh:l,telemetry:u})=>fM(i,{forceRefresh:l,telemetry:u})})],zM=new Map(HM.map((i)=>[i.providerId,i]));function ri(i){return zM.get(i.trim().toLowerCase())}function cy(i){return ri(i)!==void 0}function py(i,l){let u=ri(i);if(!u)return null;return jM(l,{normalizeAccessToken:u.normalizeStoredAccessToken})}function WM(i){let l=ri(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 KM(i,l){let u=ri(i);if(u)return u.getApiKey(l);return l?.auth?.accessToken?.trim()||l?.apiKey?.trim()||l?.auth?.apiKey?.trim()||void 0}function sS(i){if(typeof i==="string")return i;if(Array.isArray(i))return i;return JSON.stringify(i)}function GM(i){if(i.metadata?.displayOnly===!0)return[];let l=JM(i.content),u=[],c=i.id??QM(),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,T=!1,_=(C)=>{if(I===void 0)return i.metadata;if(C&&!T)return T=!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(VM),createdAt:i.ts??Date.now(),metadata:_(!0),modelInfo:i.modelInfo,metrics:my(i.metrics)}),b=[]};if(l.length===0)return u.push({id:c,role:i.role,content:[{type:"text",text:sr}],createdAt:i.ts??Date.now(),metadata:i.metadata,modelInfo:i.modelInfo,metrics:my(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:[nS(C)],createdAt:i.ts??Date.now(),metadata:_(!1)})}return E(),u}function Wc(i){return i.flatMap(GM)}function XM(i){let l=i.content.map(oS).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:YM(i.metrics)}}function Sd(i){return i.map(XM)}function iS(i){let l=[];for(let u of i){let c=u.content.map(oS).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 JM(i){if(typeof i==="string")return i.trim().length>0?[{type:"text",text:i}]:[];return[...i]}function VM(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 nS(i)}}function nS(i){return{type:"tool-result",toolCallId:i.tool_use_id,toolName:i.name,output:i.content,isError:i.is_error}}function oS(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:sS(i.output),is_error:i.isError}}}function my(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 YM(i){if(!i)return;return{inputTokens:i.inputTokens,outputTokens:i.outputTokens,cacheReadTokens:i.cacheReadTokens,cacheWriteTokens:i.cacheWriteTokens,cost:i.cost}}var hy=0;function QM(){return hy+=1,`msg_${Date.now().toString(36)}_${hy.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:eN(i),error:i.error,...i.error?{errorClass:hi(i.error)}:{}}];default:return[]}}function eN(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 tN(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=iS(l.messages),I=l.tools.map((T)=>({name:T.name,description:T.description,inputSchema:T.inputSchema}));for await(let T of g.createMessage(l.systemPrompt??"",b,I))for(let _ of ZM(T)){if(_.type==="finish")u=!0;else if(_.type==="tool-call-delta")c=!0;yield _}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:hi(g)}}}}}}}function rN(i){let l=Object.fromEntries(Object.entries(i).filter(([,u])=>u!==void 0));return Object.keys(l).length>0?l:void 0}function sN(i){return i.providerId==="openai-compatible"||i.clientType==="openai-compatible"}function iN(i){let l={region:i.region,apiLine:i.apiLine,openRouterProviderSorting:i.openRouterProviderSorting,modelCatalog:i.modelCatalog};if(sN(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 rN(l)}function nN(i){return typeof i==="number"&&Number.isFinite(i)&&i>0?Math.floor(i):void 0}function aS(i){let l=i.providerConfig,u=l?.knownModels?l.knownModels:i.knownModels??ge[i.providerId]?.models??void 0,c=nN(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 oN(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:Ji(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 lS(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 aN(i,l,u){let c={...lS(i),knownModels:aS(i),maxOutputTokens:i.maxTokensPerTurn,temperature:i.temperature,reasoningEffort:i.reasoningEffort,thinkingBudgetTokens:i.thinkingBudgetTokens,thinking:i.thinking,logger:l,extensionContext:i.extensionContext};if(Xi(K(c.providerId)))return tN(()=>zt(c));let g=bn({fetch:c.fetch,providerConfigs:[{providerId:c.providerId,apiKey:c.apiKey,baseUrl:c.baseUrl,headers:c.headers,timeoutMs:c.timeoutMs,fetch:c.fetch,options:iN(c),models:c.knownModels?Object.entries(c.knownModels).map(([I,T])=>oN(I,T)):void 0}],logger:l,telemetry:u??i.telemetry??i.extensionContext?.telemetry}),b=ea(c);if(b)g.registerProvider(b);return g.createAgentModel({providerId:c.providerId,modelId:c.modelId},{maxTokens:c.maxOutputTokens,temperature:c.temperature})}function dN(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 uN=J(dN),mf=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(uN),system_prompt:e().optional()});function dS(i){return i.filter((l)=>l.metadata?.displayOnly!==!0)}function km(i){return JSON.parse(JSON.stringify(i))}function uS(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 cS(i){if(i.includes(":"))throw TypeError("Message role cannot contain ':' in compaction boundary keys")}function cN(i){let l=uS(i);return cS(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 pS(i){if(!i)return"";let l=uS(i);if(typeof l.id==="string"&&l.id.trim())return`id:${l.id.trim()}`;if(cS(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 mS(i,l=i.length){let u=lN("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(cN(c))),u.update(`
365
+ `);return`sha256:${u.digest("hex")}`}function fy(i){let l=dS(i.sourceMessages),u=l.at(-1),c=pS(u);return mf.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:mS(l),...c?{source_last_message_key:c}:{},messages:km(i.compactedMessages),...i.systemPrompt!==void 0?{system_prompt:i.systemPrompt}:{}})}function Sm(i,l){if(l=dS(l),!(i.source_message_count<=l.length))return;let u=!!i.source_prefix_hash&&mS(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&&pS(c)===i.source_last_message_key;if(!(u||g))return;return[...km(i.messages),...km(l.slice(i.source_message_count))]}function cc(i){let l=mf.safeParse(i);return l.success?l.data:void 0}var pN=new Set(["auto_compaction","compaction_budget_emergency","completion_reminder","loop_detection_notice","manual_compaction","mistake_stop_notice","recovery_notice"]);function mN(i){switch(i){case"user":case"assistant":case"tool":case"system":case"status":case"error":return i;default:return"assistant"}}function hN(i){return i.metadata&&typeof i.metadata==="object"&&!Array.isArray(i.metadata)?i.metadata:void 0}function fN(i){let l=i?.userRunSpan;return typeof l==="number"&&Number.isInteger(l)&&l>=0?l:void 0}function gN(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 yN(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 md(i){if(mN(i.role)!=="user")return 0;let l=hN(i),u=typeof l?.kind==="string"?l.kind:void 0,c=fN(l);if(u==="compaction"||u==="compaction_summary")return c??1;if(c!==void 0)return c;if(u&&pN.has(u))return 0;let g=gN(i);if(!g.hasAttachment&&!me(g.text))return 0;if(!g.hasAttachment&&yN(g.text))return 0;return 1}function vN(i){return md(i)>0}function Tm(i){let l=0;for(let u of i??[])l+=md(u);return l}var wN=128000,bN=0.9,Rn=0.9,IN=4,kN=0.7,SN=20000,gy=8192,yy=2000,hS=2000;function vu(i){return typeof i==="number"&&Number.isFinite(i)&&i>0}function _m(i){let l=vu(i.contextWindow)?i.contextWindow:void 0,u=vu(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*bN}function Nl(i,l){if(i.length<=l)return i;return`${i.slice(0,l)}
367
+ ...[truncated ${i.length-l} chars]`}function TN(i){let l=_m({maxInputTokens:i.maxInputTokens??i.modelInfo?.maxInputTokens,contextWindow:i.modelInfo?.contextWindow});if(l!==void 0)return l;let u=i.knownModels?.[i.modelId];return _m({maxInputTokens:u?.maxInputTokens,contextWindow:u?.contextWindow})}function _N(i){let l=EN(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 EN(i){if(typeof i==="string")return Nl(i,yy);return i.map((l)=>{switch(l.type){case"text":return{...l,text:Nl(l.text,yy)};case"file":return{...l,content:Nl(l.content,hS)};case"image":return l;default:return l}})}function AN(i){return Object.entries(i).map(([l,u])=>`${l}=${JSON.stringify(u)}`).join(", ")}function fS(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]: ${Nl(u.thinking,2000)}`);break;case"redacted_thinking":l.push("[Bot thinking]: [redacted]");break;case"tool_use":l.push(`[Bot tool calls]: ${u.name}(${AN(u.input)})`);break;case"tool_result":l.push(`[Tool result]: ${_N(u.content)}`);break;case"file":l.push(`[${i.role==="user"?"User":"Bot"} file ${u.path}]: ${Nl(u.content,hS)}`);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 CN(i){return i.map(fS).join(`
372
+
373
+ `).trim()}function xN(){let i=new WeakMap;return(l)=>{let u=l,c=i.get(u);if(typeof c==="number")return c;let{replacer:g,imageCount:b}=Ln(),I,T=0;try{I=JSON.stringify(l,g),T=b()}catch{I=fS(l)}let _=Ut(I.length)+T*Eo;return i.set(u,_),_}}function hf(i){return i.metadata?.kind==="compaction_summary"}function gS(i){if(!hf(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 RN(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 Us(i){return i.role==="user"&&i.metadata?.userRunSpan!==0&&!RN(i)&&!hf(i)}function PN(i){for(let l=i.length-1;l>=0;l-=1)if(Us(i[l]))return l;return 0}function yS(i){for(let l=i.length-1;l>=0;l-=1)if(hf(i[l]))return l;return-1}function MN(i){return i.role==="assistant"||Us(i)}function NN(i,l,u){let c=0,g=i.length;for(let T=i.length-1;T>=0;T-=1)if(c+=u(i[T]),g=T,c>=l)break;if(g<=0)return 0;let b=PN(i),I=b>0?Math.min(g,b):g;while(I>0&&!MN(i[I]))I-=1;return I}function Di(i){if(typeof i==="string"&&i.trim().length>0)return[i];if(Array.isArray(i))return i.flatMap((l)=>Di(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(...Di(l[c]));if(Array.isArray(l.files)){for(let c of l.files)if(c&&typeof c==="object")u.push(...Di(c.path))}if(Array.isArray(l.file_paths))u.push(...Di(l.file_paths));return u}return[]}function sl(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 vy(i){let l=[],u=[];for(let c of i){let g=gS(c);if(g){l=sl(l,g.details.readFiles),u=sl(u,g.details.modifiedFiles);continue}if(!Array.isArray(c.content))continue;for(let b of c.content){if(b.type==="file"){l=sl(l,[b.path]);continue}if(b.type!=="tool_use")continue;let I=Di(b.input);if(b.name==="read_files"){l=sl(l,I);continue}if(b.name==="editor"||b.name==="apply_patch")u=sl(u,I)}}return{readFiles:l,modifiedFiles:u}}var wy=100;function by(i){return i.readFiles.length>0||i.editedFiles.length>0||i.commands.length>0}function il(i,l){let u=l.trim();if(u&&!i.includes(u))i.push(u)}function ON(i){if(i.length<=wy)return i;return`${i.slice(0,wy)}...`}function $N(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 LN(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 Iy(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 T=I.input??{};if(I.name==="read_files"){if(Array.isArray(T.files)){for(let _ of T.files)if(_&&typeof _==="object"){let E=$N(_);if(E)il(l,E)}}else for(let _ of Di(T))il(l,_);continue}if(I.name==="editor"||I.name==="apply_patch"){let _=Di(T)[0];if(_)g.set(I.id,_);continue}if(I.name==="run_commands"){let _=Array.isArray(T.commands)?T.commands:[];for(let E of _)if(typeof E==="string"&&E.trim())il(c,ON(E.trim()))}continue}if(I.type==="tool_result"){let T=g.get(I.tool_use_id);if(!T)continue;let _=LN(I.content);il(u,_?`${T}:${_.start}-${_.end}`:T),g.delete(I.tool_use_id)}}}for(let b of g.values())il(u,b);return{readFiles:l,editedFiles:u,commands:c}}function DN(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 UN(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 FN(i,l){if(/^## Files$/im.test(i))return i.trim();return`${i.trim()}
389
+
390
+ ${UN(l)}`.trim()}function ky(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 qN(i){if(vu(i.maxOutputTokens))return Math.floor(i.maxOutputTokens);let l=i.modelInfo?.maxTokens??i.knownModels?.[i.modelId]?.maxTokens;if(vu(l))return Math.min(gy,Math.floor(l));return gy}function jN(i){let l=i.summarizer,u=(g)=>{if(g.providerId==="openai-codex"){let{maxOutputTokens:b,...I}=g;return{...I,thinking:!1}}return{...g,maxOutputTokens:qN(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 BN(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 HN(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 Sy(i){return i.map((l)=>({...l,content:Array.isArray(l.content)?l.content.map((u)=>({...u})):l.content,...l.metadata?{metadata:{...l.metadata}}:{}}))}function $s(i){try{return JSON.stringify(i).length}catch{return String(i).length}}function Td(i,l){return i.reduce((u,c)=>u+l(c),0)}function Kc(i){for(let l=i.length-1;l>=0;l-=1){let u=i[l];if(Us(u))return l}return-1}function zN(i){for(let l=0;l<i.length;l+=1){let u=i[l];if(Us(u))return l}return-1}function ff(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 WN(i){let l=new Map;for(let u=0;u<i.length;u+=1)for(let c of ff(i[u])){let g=l.get(c);if(g)g.add(u);else l.set(c,new Set([u]))}return l}function Gc(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 KN(i,l){let u=WN(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 ff(i[b]))for(let T of u.get(I)??[])if(!c.has(T))g.push(T)}return c}function GN(i){return i.type==="image"||i.type==="media"||i.type==="redacted_thinking"}function XN(i){return i.type==="image"}function JN(i,l,u){if(l.dropThinkingBlocks&&i.type==="thinking")return!0;return l.dropUnsafeOutsideLiveTail&&!u&&GN(i)}function Ty(i,l,u,c="over_budget"){let g=[],b=[];for(let I=0;I<i.length;I+=1){let T=i[I];if(Array.isArray(T.content)&&T.content.length===0){u.push({kind:"dropped_message",path:{messageIndex:l[I]},reason:c,originalSize:$s(T),finalSize:0});continue}g.push(T),b.push(l[I])}return{messages:g,originalIndexes:b}}function VN(i,l,u,c,g,b){return i.map((I,T)=>{if(!Array.isArray(I.content))return I;let _=!1,E=T===c||T>=g,A=I.content.flatMap((C,N)=>{if(JN(C,b,E))return _=!0,u.push({kind:"dropped_block",path:{messageIndex:l[T],blockIndex:N},reason:"unsafe_to_truncate",originalSize:$s(C),finalSize:0}),[];if(C.type==="tool_result"&&Array.isArray(C.content)){let M=C.content.filter((O)=>{if(b.dropUnsafeOutsideLiveTail&&!E&&XN(O))return!1;return!0});if(M.length!==C.content.length){_=!0;let O={...C,content:M};return u.push({kind:"dropped_block",path:{messageIndex:l[T],blockIndex:N},reason:"unsafe_to_truncate",originalSize:$s(C),finalSize:$s(O)}),[O]}}return[C]});return _?{...I,content:A}:I})}function YN(i,l,u){return i.map((c,g)=>{if(!Array.isArray(c.content))return c;let b=!1,I=c.content.filter((T,_)=>{if(T.type!=="thinking")return!0;return b=!0,u.push({kind:"dropped_block",path:{messageIndex:l[g],blockIndex:_},reason:"unsafe_to_truncate",originalSize:$s(T),finalSize:0}),!1});return b?{...c,content:I}:c})}function Oo(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 _y(i,l){if(typeof i==="string")return Oo(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=Oo(c.text,u);return u-=g.length,{...c,text:g}}if(c.type==="file"){let g=Oo(c.content,u);return u-=g.length,{...c,content:g}}return c})}function QN(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:Oo(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:_y(c.content,0)};return c}if(c.type==="text"){let g=Oo(c.text,u);return u-=g.length,{...c,text:g}}if(c.type==="file"){let g=Oo(c.content,u);return u-=g.length,{...c,content:g}}if(c.type==="tool_result"){let g=_y(c.content,u);return u-=QN(g),{...c,content:g}}return c})}}function eO(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 tO(i,l,u){return{messages:i.filter((c,g)=>!u.has(g)),originalIndexes:l.filter((c,g)=>!u.has(g))}}function rO(i,l){if(l<0)return!1;for(let u of i)if(u>=l)return!0;return!1}function Ey(i,l){return l>=0&&i.has(l)}function vS(i){let l=[],u=[],c=HN(i.policyIntent);if(i.targetTokens<=0)return{status:"failed",messages:Sy(i.messages),actions:l,liveTailHandling:"preserved_out_of_band",estimatedTokens:Td(i.messages,i.estimateMessageTokens),warnings:[{code:"budget_impossible",message:"Target budget must be greater than zero."}]};let g=Sy(i.messages),b=g.map((E,A)=>A);if(c.dropThinkingBlocks){let E=Ty(YN(g,b,l),b,l,"unsafe_to_truncate");g=E.messages,b=E.originalIndexes}let I=c.protectLatestTypedUser?Kc(g):-1,T=c.protectLiveTailFromDrop?Gc(g):g.length;if(c.dropUnsafeOutsideLiveTail){let E=Ty(VN(g,b,l,I,T,c),b,l);g=E.messages,b=E.originalIndexes}let _=Td(g,i.estimateMessageTokens);if(_<=i.targetTokens)return{status:"ok",messages:g,actions:l,liveTailHandling:l.length>0?"included_degraded":"included_verbatim",estimatedTokens:_,warnings:u};for(let E=g.length-1;E>=0&&_>i.targetTokens;E-=1){let A=Kc(g);if(E===A)continue;if(c.protectLiveTailFromDrop&&E>=Gc(g))continue;if(!eO(g[E]))continue;let C=$s(g[E]),N=Math.max(1,C/Math.max(1,i.estimateMessageTokens(g[E]))),M=Math.max(16,Math.floor(i.targetTokens*N/Math.max(1,g.length)));g[E]=ZN(g[E],M),l.push({kind:"truncated_text",path:{messageIndex:b[E]},reason:"over_budget",originalSize:C,finalSize:$s(g[E])}),_=Td(g,i.estimateMessageTokens)}for(let E=0;E<g.length&&_>i.targetTokens;){let A=zN(g),C=Kc(g),N=c.protectLiveTailFromDrop?Gc(g):g.length;if(E===A||E===C){l.push({kind:"preserved",path:{messageIndex:b[E]},reason:"protected_live_tail",originalSize:$s(g[E]),finalSize:$s(g[E])}),E+=1;continue}let M=KN(g,E);if(Ey(M,A)){E+=1;continue}if(Ey(M,C)){E+=1;continue}if(rO(M,N)){E+=1;continue}for(let L of M)l.push({kind:"dropped_message",path:{messageIndex:b[L]},reason:M.size>1||ff(g[L]).size>0?"tool_pair_boundary":"over_budget",originalSize:$s(g[L]),finalSize:0});let O=tO(g,b,M);g=O.messages,b=O.originalIndexes,_=Td(g,i.estimateMessageTokens)}if(_>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:_,warnings:u};return{status:"ok",messages:g,actions:l,liveTailHandling:l.length>0?"included_degraded":"included_verbatim",estimatedTokens:_,warnings:u}}async function sO(i){i.signal?.throwIfAborted();let l=await zt(i.signal?{...i.providerConfig,abortSignal:i.signal}:i.providerConfig);i.signal?.throwIfAborted();let u="",c=0,g=!1,b=!1,I;for await(let T of l.createMessage(i.systemPrompt,[{role:"user",content:i.request}]))if(i.signal?.throwIfAborted(),T.type==="text"){if(u+=T.text,i.maxOutputChars&&u.length>i.maxOutputChars)throw Error("Summary exceeded its output limit.")}else if(T.type==="reasoning")c+=T.reasoning?.length??0;else if(T.type==="done"){if(!T.success&&T.error)throw Error(T.error);I=T.incompleteReason??I,g||=!T.success}else if(T.type==="tool_calls")b=!0;return i.signal?.throwIfAborted(),{text:u,reasoningChars:c,failed:g,usedTools:b,incompleteReason:I}}var Xc=1024;function iO(i){return vS({messages:i.messages,targetTokens:Math.max(1,i.targetTokens),policyIntent:"agentic_summary",estimateMessageTokens:i.estimateMessageTokens})}function nO(i){try{return JSON.stringify(i).length}catch{return String(i).length}}async function oO(i){let l=i.context.messages;if(l.length<2)return;let u=NN(l,i.preserveRecentTokens,i.estimateMessageTokens);if(u<=0||u>=l.length)return;let c=l.slice(0,u),g=yS(c),b=g>=0?gS(c[g])?.summary:void 0,I=g>=0?c.slice(g+1):c;if(I.length===0)return;let T=vy(c),_=jN({activeProviderConfig:i.providerConfig,summarizer:i.summarizer}),E=TN(_),A=i.summarizer===void 0,C=Math.max(i.context.budget.request.maxInputTokens,i.context.budget.request.triggerTokens,Xc);if(E===void 0&&!A)i.logger?.log("Agentic compaction summarizer has no known input limit; using conservative summary budget",{severity:"warn",summarizerProviderId:_.providerId,summarizerModelId:_.modelId,fallbackInputLimit:Xc});let N=E??(A?C:Xc),M=Ut(ky({previousSummary:b,conversationText:"",fileOps:T}).length),O=N-M;if(O<=0){i.logger?.debug("Skipped agentic compaction: summarizer budget exhausted",{summarizerProviderId:_.providerId,summarizerModelId:_.modelId,summarizerInputLimit:N,summaryRequestOverheadTokens:M});return}let L=iO({messages:I,targetTokens:O,estimateMessageTokens:i.estimateMessageTokens});if(L.status==="failed"){i.logger?.log("Skipped agentic compaction: summary input budget failed",{severity:"warn",budgetWarnings:L.warnings.map((G)=>G.code),summaryInputEstimatedTokens:L.estimatedTokens,targetTokens:O,summarizerProviderId:_.providerId,summarizerModelId:_.modelId});return}let D=vy(L.messages),F=CN(L.messages),j=ky({previousSummary:b,conversationText:F,fileOps:D});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:Ut(j.length),newMessagesJsonChars:nO(I),summaryInputEstimatedTokens:L.estimatedTokens,summaryInputActions:L.actions.length,summaryInputWarnings:L.warnings.map((G)=>G.code),summaryRequestOverheadTokens:M,summarizerProviderId:_.providerId,summarizerModelId:_.modelId,summarizerInputLimit:N,maxInputTokens:i.context.budget.request.maxInputTokens,triggerTokens:i.context.budget.request.triggerTokens});let B=await sO({providerConfig:_,systemPrompt:"Summarize the provided coding session into a concise continuation note with detailed next steps.",request:j});i.logger?.debug("Generated compaction summary",{outputChars:B.text.length,reasoningChars:B.reasoningChars,incompleteReason:B.incompleteReason,modelId:_.modelId,providerId:_.providerId});let Q=B.text.trim();if(!Q){i.logger?.log("Skipped agentic compaction: summarizer returned no summary text",{severity:"warn",summarizerProviderId:_.providerId,summarizerModelId:_.modelId,summarizerMaxOutputTokens:_.maxOutputTokens,reasoningChars:B.reasoningChars,incompleteReason:B.incompleteReason,likelyCause:B.reasoningChars>0?"output_budget_consumed_by_reasoning":"empty_response"});return}let H=FN(Q,D),z=l.reduce((G,se)=>G+i.estimateMessageTokens(se),0),te=[BN({summary:H,fileOps:D,tokensBefore:z,userRunSpan:Tm(c)}),...l.slice(u)],ee=te.reduce((G,se)=>G+i.estimateMessageTokens(se),0);i.logger?.debug("Performed agentic compaction",{messagesBefore:l.length,messagesAfter:te.length,messagesSummarized:u,messagesPreserved:l.length-u,tokensBefore:z,tokensAfter:ee,maxInputTokens:i.context.budget.request.maxInputTokens});let oe=L.actions.filter((G)=>G.reason==="over_budget"||G.reason==="tool_pair_boundary").length;return{messages:te,budget:{policyIntent:"agentic_summary",actionCount:oe,warningCount:L.warnings.length,liveTailHandling:L.liveTailHandling}}}function Ay(i,l){return i.reduce((u,c)=>u+l(c),0)}function aO(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 lO(i,l){return JSON.stringify(i)!==JSON.stringify(l)}var dO=3;function Cy(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 xy(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
+ ${DN(i)}${u}</SYSTEM_NOTICE>`}}function Jd(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 uO(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<dO;E-=1)if(Cy(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 M=Cy(l[N]);if(M)C.push(M)}return C},I=-1;for(let E=i.length-1;E>=0;E-=1)if(Us(i[E])){I=E;break}let T=[],_=0;while(_<i.length){if(!Us(i[_])){let C=c(i[_]);T.push({message:i[_],firstOriginalIndex:C,lastOriginalIndex:C,isTypedUser:!1}),_+=1;continue}let E=_;while(E+1<i.length&&Us(i[E+1]))E+=1;let A=i[_];if(E>_){let C=[],N=0;for(let M=_;M<=E;M+=1){if(N+=md(i[M]),M>_){let O=c(i[M-1]),L=c(i[M]);if(O!==void 0&&L!==void 0&&L>O+1){let D=Iy(l.slice(O+1,L)),F=b(O+1,L);if(by(D)||F.length>0)C.push(xy(D,F))}}C.push(...Jd(i[M],M===I))}A={...i[_],content:C,metadata:{...i[_].metadata,userRunSpan:N}}}else{let C=Jd(A,_===I);if(Array.isArray(A.content)&&C.length!==A.content.length)A={...A,content:C}}T.push({message:A,firstOriginalIndex:c(i[_]),lastOriginalIndex:c(i[E]),isTypedUser:!0}),_=E+1}for(let E=0;E<T.length;E+=1){let A=T[E];if(!A.isTypedUser||A.lastOriginalIndex===void 0)continue;let C=T[E+1],N=C?C.firstOriginalIndex:l.length;if(N===void 0||N<=A.lastOriginalIndex+1)continue;let M=Iy(l.slice(A.lastOriginalIndex+1,N)),O=b(A.lastOriginalIndex+1,N);if(!by(M)&&O.length===0)continue;A.message={...A.message,content:[...Jd(A.message,!0),xy(M,O)]}}return T.map((E)=>E.message)}function Ry(i){if(!i.metrics)return i;let{metrics:l,...u}=i;return u}function cO(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 pO(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 mO(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 wS="preserved";function bS(i){return i.metadata?.compaction===wS}function hO(i){if(bS(i))return i;return{...i,metadata:{...i.metadata,compaction:wS}}}function fO(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 gO(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 z=0;z<l.length;z+=1)if(Us(l[z]))g.push(z);let b=new Map;for(let z of g){let te=aO(l[z]);if(te)b.set(z,te)}if(b.size===0)return;let I=g[g.length-1],T=0;for(let[z,te]of b)T+=u({...te,content:Jd(te,z===I)});let _=new Set;for(let z=0;z<l.length;z+=1){if(b.has(z))continue;if(bS(l[z]))_.add(z),T+=u(l[z])}let E=new Set;{let z=l.length,te=0;for(let ee=l.length-1;ee>I;ee-=1){if(_.has(ee))break;let oe=u(l[ee]);if(T+te+oe>c)break;te+=oe,z=ee}while(z<l.length&&l[z].role!=="assistant")z+=1;for(let ee=z;ee<l.length;ee+=1)E.add(ee),T+=u(l[ee])}let A=new Map;for(let z=g.length-2;z>=0;z-=1){let te=g[z]+1,ee=g[z+1];for(let oe=ee-1;oe>=te;oe-=1){let G=l[oe];if(_.has(oe))break;if(G.role!=="assistant")continue;if(Array.isArray(G.content)&&G.content.some((Ne)=>Ne.type==="tool_use"))continue;let se=fO(G);if(se){let Ne=u(se);if(T+Ne<=c)A.set(oe,se),T+=Ne}break}}let C=[];for(let z=0;z<l.length;z+=1){let te=b.get(z);if(te){C.push(te);continue}if(_.has(z)||E.has(z)){C.push(l[z]);continue}let ee=A.get(z);if(ee)C.push(ee)}let N=Ay(l,i.estimateMessageTokens),M=Math.min(Math.max(c,T),Math.max(1,i.context.budget.messages.triggerTokens)),O=vS({messages:C,targetTokens:M,policyIntent:"basic_compaction_projection",estimateMessageTokens:i.estimateMessageTokens});if(O.status==="failed")i.logger?.debug("Basic compaction returned best-effort projection",{budgetWarnings:O.warnings.map((z)=>z.code),projectedTokens:O.estimatedTokens,targetTokens:c,maxInputTokens:i.context.budget.request.maxInputTokens});let L=uO(O.messages,l);if(!lO(l,L))return;let D=mO(L[0]),F=pO(D.usageBefore,cO(l)),j={kind:"compaction",reason:i.context.mode==="manual"?"manual_compaction":i.context.mode==="overflow_recovery"?"overflow_recovery_compaction":"auto_compaction",displayRole:"system",messagesRemoved:D.messagesRemoved+(l.length-L.length),...F?{usageBefore:F}:{}},B=L.map((z,te)=>{if(te===0&&Us(z))return Ry({...z,metadata:{...z.metadata,...j,userRunSpan:md(z)}});return Ry(Us(z)?z:hO(z))}),Q=Ay(B,i.estimateMessageTokens),H=O.actions.filter((z)=>z.reason==="over_budget"||z.reason==="tool_pair_boundary").length;return i.logger?.debug("Performed basic compaction",{messagesBefore:l.length,messagesAfter:B.length,messagesRemoved:l.length-B.length,tokensBefore:N,tokensAfter:Q,budgetStatus:O.status,budgetActions:H,budgetWarnings:O.warnings.map((z)=>z.code),targetTokens:c,maxInputTokens:i.context.budget.request.maxInputTokens}),{messages:B,budget:{policyIntent:"basic_compaction_projection",actionCount:H,warningCount:O.warnings.length,liveTailHandling:O.liveTailHandling}}}var yO=0.5;function Py(i,l){if(l.aborted)return!0;return i instanceof Error&&(i.name==="AbortError"||i.name==="AgentRuntimeAbortError")}function Em(i){return i instanceof Error?{errorName:i.name,errorMessage:i.message}:{errorMessage:String(i)}}function IS(i){try{return JSON.stringify(i).length}catch{return String(i).length}}function vO(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=IS(b.content);l+=1,u+=I,c=Math.max(c,I)}}return{toolResultCount:l,toolResultSerializedChars:u,maxToolResultSerializedChars:c}}var Jc={basic:({context:i,estimateMessageTokens:l,logger:u})=>gO({context:i,estimateMessageTokens:l,logger:u}),agentic:({context:i,providerConfig:l,compaction:u,estimateMessageTokens:c,logger:g})=>oO({context:i,providerConfig:l,summarizer:u?.summarizer,preserveRecentTokens:Math.min(u?.preserveRecentTokens??SN,i.budget.messages.targetTokens),estimateMessageTokens:c,logger:g})};function wO(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 bO(i){let l=i.messagePairCount>=5&&typeof i.modelMaxTokens==="number"&&Number.isFinite(i.modelMaxTokens)&&i.modelMaxTokens<i.maxInputTokens?Math.floor(i.maxInputTokens*yO):Math.floor(i.triggerTokens*kN),u=Math.max(1,i.triggerTokens-1);return Math.max(1,Math.min(l,i.maxInputTokens,u))}function My(i,l){return Math.max(1,Math.floor(i-l))}function IO(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 kS(i,l={}){let u={...i.compaction,...l.compaction};if(u.enabled!==!0)return;let c=xN(),g=u?.strategy??"agentic",b=Jc[g],I=l.mode??"auto",T=u?.compact?"custom":g;return async(_)=>{let E=_.overflowRecovery?"overflow_recovery":I,A=_.apiMessages.reduce((ve,Se)=>ve+c(Se),0),C=cr({systemPrompt:_.systemPrompt,messages:_.apiMessages,tools:_.tools}),N=_.messages.reduce((ve,Se)=>ve+c(Se),0),M=Math.max(0,C-A),O=_m({maxInputTokens:_.model.info?.maxInputTokens,contextWindow:_.model.info?.contextWindow});if(E==="auto"&&O===void 0)return;let L=O??wN,D=typeof _.previousRequestInputTokens==="number"&&_.previousRequestInputTokens>0?_.previousRequestInputTokens:0,F=D>0&&C>0?Math.min(IN,Math.max(1,D/C)):1,j=L/F,B=j*Rn,Q=My(B,M),H=C>=B;if(i.logger?.debug("Context compaction diagnostics",{mode:E,strategy:g,iteration:_.iteration,providerId:i.providerId,modelId:i.modelId,requestInputTokens:C,apiMessageTokens:A,messageInputTokens:N,requestOverheadTokens:M,maxInputTokens:j,rawMaxInputTokens:L,actualPreviousInputTokens:D,underestimateFactor:F,requestTriggerTokens:B,messageTriggerTokens:Q,thresholdRatio:Rn,shouldCompact:H,messageCount:_.messages.length,apiMessageCount:_.apiMessages.length,apiMessagesJsonChars:IS(_.apiMessages),...vO(_.apiMessages)}),E==="auto"&&!H)return;let z,te;if(E==="auto")z=bO({maxInputTokens:j,modelMaxTokens:_.model.info?.maxTokens,triggerTokens:B,messagePairCount:IO(_.messages)}),te=My(z,M);else te=wO({messageInputTokens:N,messageTriggerTokens:Q,manualTargetRatio:l.manualTargetRatio}),z=M+te;let ee={agentId:_.agentId,conversationId:_.conversationId,parentAgentId:_.parentAgentId,iteration:_.iteration,messages:_.messages,model:_.model,mode:E,abortSignal:_.abortSignal,budget:{request:{inputTokens:C,maxInputTokens:j,triggerTokens:B,targetTokens:z,overheadTokens:M,thresholdRatio:Rn,utilizationRatio:j>0?C/j:0},messages:{inputTokens:N,triggerTokens:Q,targetTokens:te}}},oe=E==="manual"?"manual_compaction":E==="overflow_recovery"?"overflow_recovery_compaction":"auto_compaction",G=E==="manual"?"":E==="overflow_recovery"?"overflow-recovery-":"auto-";_.emitStatusNotice?.(`${G}compacting`,{kind:oe,reason:oe,phase:"started",iteration:_.iteration,triggerTokens:B,targetTokens:z,maxInputTokens:j,messageTargetTokens:te});let se=_.messages.length,Ne=Date.now(),De={context:ee,providerConfig:{...lS(i),abortSignal:_.abortSignal},compaction:u,estimateMessageTokens:c,logger:i.logger},Te=T,le;if(E==="overflow_recovery"){if(u?.compact){try{le=await u.compact(ee)}catch(ve){if(Py(ve,_.abortSignal))throw ve;i.logger?.log("Custom compaction failed during overflow recovery; falling back to basic compaction",{severity:"warn",...Em(ve)}),le=void 0}if(le?.messages){let ve=le.messages.reduce((Se,Ee)=>Se+c(Ee),0);if(!(le.messages.length>0&&ve<N&&ve<=te))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:ve,messageTargetTokens:te}),le=void 0}}if(!le?.messages)Te="basic",le=await Jc.basic(De)}else if(u?.compact)le=await u.compact(ee);else try{le=await b(De)}catch(ve){if(g!=="agentic"||Py(ve,_.abortSignal))throw ve;i.logger?.log("Agentic compaction failed; falling back to basic compaction",{severity:"warn",...Em(ve)}),Te="basic",le=await Jc.basic(De)}let ke=Date.now()-Ne,we=i.sessionId??_.conversationId,Xe={agentId:_.agentId,conversationId:_.conversationId,parentAgentId:_.parentAgentId??void 0};if(le?.messages){let ve=le.messages.reduce((Ee,Ae)=>Ee+c(Ae),0),Se=M+ve;if(i.logger?.log("Context compaction completed",{severity:"info",strategy:Te,maxInputTokens:j,messageInputTokens:N,apiInputTokens:A,requestInputTokens:C,requestOverheadTokens:M,afterMessageTokens:ve,afterRequestTokens:Se,tokensSaved:C-Se,utilizationBefore:`${(C/j*100).toFixed(1)}%`,utilizationAfter:`${(Se/j*100).toFixed(1)}%`,thresholdTrigger:`${(Rn*100).toFixed(1)}%`,messagesBefore:se,messagesAfter:le.messages.length,messagesRemoved:se-le.messages.length}),_.emitStatusNotice?.(`${G}compacted`,{kind:oe,reason:oe,phase:"completed",iteration:_.iteration,tokensBefore:C,tokensAfter:Se,messagesBefore:se,messagesAfter:le.messages.length,maxInputTokens:j}),KA(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:B,maxInputTokens:j,thresholdRatio:Rn,durationMs:ke,provider:i.providerId,modelId:i.modelId,...Xe}),le.budget&&(le.budget.actionCount>0||le.budget.warningCount>0))XA(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,...Xe}),_.emitStatusNotice?.("compaction-budget-adjusted",{kind:"compaction_budget_emergency",reason:"compaction_budget_emergency",iteration:_.iteration,policyIntent:le.budget.policyIntent,actionCount:le.budget.actionCount,warningCount:le.budget.warningCount})}else _.emitStatusNotice?.(`${G}compaction-skipped`,{kind:oe,reason:oe,phase:"skipped",iteration:_.iteration,maxInputTokens:j}),GA(i.telemetry,{ulid:we,strategy:Te,mode:E,reason:"no_result",tokensBefore:C,triggerTokens:B,maxInputTokens:j,thresholdRatio:Rn,durationMs:ke,provider:i.providerId,modelId:i.modelId,...Xe});return le}}function kO(i){let l=kS(i.config,{mode:"manual",compaction:{enabled:!0,strategy:"agentic",preserveRecentTokens:0}}),u=l!==void 0;return async(c)=>{if(u&&l&&yS(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,...Em(g)})}return i.next?.(c)}}function SO(i){return async(l)=>{let u=i.getState?.(),c=u?Sm(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,T=fy({sourceMessages:l.messages,compactedMessages:b.messages,conversationId:l.conversationId,systemPrompt:I});return await i.saveState?.(T,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=fy({sourceMessages:l.messages,compactedMessages:g.messages,conversationId:l.conversationId,systemPrompt:g.systemPrompt});await i.saveState?.(b,l.messages)}return g}}var Ny=64,_O=/[^a-zA-Z0-9_-]+/g,SS=8,EO=1,AO="mcp_tool";function CO(i){return TO("sha1").update(i).digest("hex").slice(0,SS)}function xO(i){return i.replace(_O,"_")}var gf=({serverName:i,toolName:l})=>{let u=`${i}__${l}`,c=xO(u);if(c===u&&u.length<=Ny)return u;let g=CO(u),b=Ny-EO-SS;return`${c.slice(0,b)||AO}_${g}`},TS=new WeakSet;function _S(i){return TS.add(i),i}function $y(i){return TS.has(i)}var Uy="CLINE_PLUGIN_RUNTIME_DIR",Fy=!1,qy;function jy(i){return Ly(wu(i,"plugin-sandbox-bootstrap.js"))&&Ly(wu(i,"node_modules","@cline","core","package.json"))}function qO(){let i=process.env[Uy]?.trim();if(i){let u=UO(i);if(!jy(u))throw Error(`${Uy} does not contain a complete plugin runtime: ${i}`);return u}if(typeof __CLINE_PLUGIN_RUNTIME_DIR__<"u")return __CLINE_PLUGIN_RUNTIME_DIR__;if(Fy)return qy;Fy=!0;let l=Dy(FO(import.meta.url));for(;;){for(let c of[l,wu(l,"plugin-runtime"),wu(l,"dist","plugin-runtime")])if(jy(c))return qy=c,c;let u=Dy(l);if(u===l)return;l=u}}var jO;function BO(){return jO}var HO=AS(xS(import.meta.url)),a8=LO(import.meta.url),zO=ht(HO,"..","..","..","..",".."),l8=KO(zO),d8=new Set($O.flatMap((i)=>[i,i.replace(/^node:/,"")])),Yd=new Set(ar),WO=["development","node","import","require","default"];function KO(i){let l={},u={"@cline/sdk":ht(i,"packages/sdk/src/index.ts"),"@cline/agents":ht(i,"packages/agents/src/index.ts"),"@cline/core":ht(i,"packages/core/src/index.ts"),"@cline/llms":ht(i,"packages/llms/src/index.ts"),"@cline/shared":ht(i,"packages/shared/src/index.ts"),"@cline/shared/storage":ht(i,"packages/shared/src/storage/index.ts"),"@cline/shared/db":ht(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=ht(i,"packages",c),b=ht(g,"package.json");if(!tn(b))continue;try{let I=JSON.parse(ES(b,"utf8"));if(typeof I.name!=="string"||!I.exports)continue;if(typeof I.exports==="string"){let T=ht(g,I.exports);if(tn(T))l[I.name]=T;continue}if(typeof I.exports!=="object")continue;for(let[T,_]of Object.entries(I.exports)){let E=GO(g,_);if(!E)continue;let A=T==="."?I.name:`${I.name}/${T.replace(/^\.\//,"")}`;l[A]=E}}catch{}}return l}function GO(i,l){let u=RS(l);if(!u)return null;let c=XO(i,u);for(let g of c)if(tn(g))return g;return null}function RS(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 WO){let g=RS(u[c],l);if(g)return g}return null}function XO(i,l){let u=l.replace(/^\.\//,""),c=[ht(i,l)];if(u.startsWith("dist/")){let g=u.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[ht(i,`${g}.ts`),ht(i,`${g}.tsx`),ht(i,`${g}.mts`),ht(i,`${g}.cts`),...c]}return c}function JO(i){return!(i.startsWith(".")||i.startsWith("/")||i.startsWith("file:")||i.startsWith("data:")||i.startsWith("http:")||i.startsWith("https:"))}function VO(i,l){let u=l.startsWith("file:")?xS(l):DO(l)?l:ht(AS(i),l);if(tn(u)&&Yd.has(CS(u)))return u;for(let c of Yd){let g=`${u}${c}`;if(tn(g))return g}for(let c of Yd){let g=ht(u,`index${c}`);if(tn(g))return g}return null}function YO(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 yf(i){let l=[],u=(c,g)=>{if(g.has(c))return;g.add(c);let b;try{b=ES(c,"utf8")}catch{l.push(`${c}:missing`);return}if(l.push(`${c}:${b.length}:${QO(b)}`),!Yd.has(CS(c)))return;for(let I of YO(b)){if(JO(I))continue;let T=VO(c,I);if(T)u(T,g)}};return u(i,new Set),l.join("|")}function QO(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 Iu=2147483647;function MS(i){return typeof i==="number"&&Number.isInteger(i)&&i>0&&i<=2147483647?i:void 0}var r$=300;function Vc(i){if(i instanceof Error)return i;return Error(String(i))}function Am(i){return i.exitCode===null&&i.signalCode===null}function _d(i){return Am(i)&&i.connected}var s$="CLINE_JS_RUNTIME_PATH";function Cm(i){let l=i?.trim();if(!l)return!1;let u=t$(l).toLowerCase();return u==="node"||u==="node.exe"||u==="bun"||u==="bun.exe"}function vf(i,l={}){let u=l.isBunRuntime??typeof globalThis.Bun<"u",c=l.selfExecPath??process.execPath;return u&&!!i&&i===c&&!Cm(i)}function NS(i={}){let l=i.env??process.env,u=i.runtimeExecutable?.trim()||l[s$]?.trim();if(u)return u;let c=i.execPath?.trim()||process.execPath;if(Cm(c))return c;for(let g of[l.BUN_EXEC_PATH,l.npm_node_execpath,l.NODE]){let b=g?.trim();if(b&&Cm(b))return b}if(vf(c,i.host))return c;return"node"}function i$(i,l={}){if(l.launcher)return[l.launcher.command,...l.launcher.argsPrefix,...i];let u=NS({env:l.env,execPath:l.execPath,runtimeExecutable:l.runtimeExecutable}),c=vf(u)?["--use-system-ca",...i]:i;return kt([u,...c],{env:l.env,execArgv:l.execArgv,debugRole:l.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class OS{options;idleTimeoutMs;process=null;requestCounter=0;pending=new Map;idleTimer;shutdowns=new Map;constructor(i){if(this.options=i,this.idleTimeoutMs=MS(i.idleTimeoutMs),i.idleTimeoutMs!==void 0&&this.idleTimeoutMs===void 0)throw RangeError(`idleTimeoutMs must be an integer between 1 and ${Iu}`)}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||!_d(i)||this.hasPendingRequests(i))return;let l=setTimeout(()=>{if(this.idleTimer===l)this.idleTimer=void 0;if(this.process!==i||!_d(i)||this.hasPendingRequests(i))return;this.shutdownProcess(i).catch(()=>{})},this.idleTimeoutMs);l.unref(),this.idleTimer=l}start(){if(this.process&&_d(this.process))return;let i=this.process;if(this.process=null,this.clearIdleTimer(),i&&Am(i))this.shutdownProcess(i).catch(()=>{});let l=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],u=i$(l,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable,launcher:this.options.launcher}),c=u[0]??NS(this.options),g={...Me(process.env)};if(this.options.launcher)delete g.BUN_BE_BUN;else if(vf(c))g.BUN_BE_BUN="1";let b=e$(c,u.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:g,windowsHide:!0});this.process=b;let I="",T=(_)=>{let E=I+_;I=E.length>4000?E.slice(-4000):E};b.stderr?.setEncoding("utf8"),b.stderr?.on("data",(_)=>{T(_)}),b.on("message",(_)=>{this.onMessage(b,_)}),b.on("error",(_)=>{this.failPendingForProcess(b,Error(`${this.processLabel} process error: ${Vc(_).message}`))}),b.on("exit",(_,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(_)}, signal=${String(E)})${A?`: ${A}`:""}`))}),this.armIdleTimer(b)}async call(i,l,u={}){this.start();let c=this.process;if(!c||!_d(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,T)=>{let _={child:c,resolve:(E)=>I(E),reject:T};if((u.timeoutMs??0)>0)_.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,_);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}": ${Vc(E).message}`))})}catch(E){this.clearPendingRequest(g),T(Vc(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(!Am(i)){this.failPendingForProcess(i,Error(`${this.processLabel} shutdown`));return}await new Promise((l)=>{let u=setTimeout(()=>{try{i.kill("SIGKILL")}catch{}l()},r$);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 Yc(i){if(i instanceof Error)return i;return Error(String(i))}class $S{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=MS(i.idleTimeoutMs),i.idleTimeoutMs!==void 0&&this.idleTimeoutMs===void 0)throw RangeError(`idleTimeoutMs must be an integer between 1 and ${Iu}`)}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 By(this.options.bootstrapFile,this.workerOptions(!1)):new By(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=Yc(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:Me(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 T={worker:i,resolve:(_)=>b(_),reject:I};if((c.timeoutMs??0)>0)T.timeout=setTimeout(()=>{let _=this.clearPendingRequest(g);if(!_)return;this.shutdownWorker(_.worker).catch(()=>{}),_.reject(Error(`${this.label} call timed out after ${c.timeoutMs}ms: ${l}`))},c.timeoutMs);this.pending.set(g,T);try{let _={type:"call",id:g,method:l,args:u},E=this.outboxes.get(i);if(E)E.push({id:g,message:structuredClone(_)});else i.postMessage(_)}catch(_){this.clearPendingRequest(g),I(Yc(_))}})}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(Yc(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 n$="CLINE_PLUGIN_IDLE_TIMEOUT_MS",LS="CLINE_PLUGIN_BOOTSTRAP_PATH",o$=1800000,a$="__cline_tool_update",l$="__cline_setup_started";function d$(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 hd(i){return(i instanceof Error?i.message:String(i)).includes("Unknown sandbox plugin id:")}function u$(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function c$(){let i=process.env.CLINE_WRAPPER_PATH?.trim();if(!i)return;try{let l=PS(i).resolve(`${u$()}/package.json`),u=Ys(bu(l),"extensions","plugin-sandbox-bootstrap.js");return Xl(u)?u:void 0}catch{return}}function p$(){let i=process.execPath?.trim();if(!i)return;let l=Ys(bu(bu(i)),"extensions","plugin-sandbox-bootstrap.js");return Xl(l)?l:void 0}function m$(i){let l=i.exists??Xl;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 h$(){let i=bu(ZO(import.meta.url)),l=PS(import.meta.url),u=process.env[LS]?.trim();if(u&&Xl(u))return{file:u};let c=Ys(i,"plugin-sandbox-bootstrap.ts"),g=Xl(c)?void 0:qO();if(g)return{file:Ys(g,"plugin-sandbox-bootstrap.js")};let b=m$({siblingCandidates:[Ys(i,"plugin-sandbox-bootstrap.js"),Ys(i,"plugin-sandbox-bootstrap.mjs"),Ys(i,"extensions","plugin-sandbox-bootstrap.js"),Ys(i,"agents","plugin-sandbox-bootstrap.js")],sourceBootstrapPath:c,installedCandidates:[c$(),p$()]});if(!b||"file"in b)return b;let I=b.sourcePath,T="jiti";try{T=l.resolve("jiti")}catch{}return{sourcePath:I,script:[`const createJiti = require(${JSON.stringify(T)});`,`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 Qc,f$=!1;function g$(){if(f$)throw new ku;if(Qc??=h$(),!Qc)throw new ku;return Qc}class ku extends Error{constructor(){super(`This build does not ship plugin-sandbox-bootstrap.js, so plugins cannot run. Set ${LS} to a copy of the file, or reinstall Cline.`);this.name="PluginBootstrapMissingError"}}function y$(i,l){return{extensions:[],pluginPaths:[],disabledByPolicy:[],warnings:[],failures:i.map((u)=>({pluginPath:u,phase:"load",message:l.message,stack:l.stack})),shutdown:async()=>{}}}function nl(i,l,u){if(typeof i==="number"&&Number.isInteger(i)&&i>0&&i<=Iu)return i;if(u){let c=process.env[u];if(c){let g=Number(c);if(Number.isInteger(g)&&g>0&&g<=Iu)return g}}return l}async function wf(i){let l=nl(i.idleTimeoutMs,o$,n$),u;try{u=g$()}catch(F){if(F instanceof ku)return y$(i.pluginPaths,F);throw F}let c="file"in u?{bootstrapFile:u.file}:{bootstrapScript:u.script},g=nl(i.importTimeoutMs,4000,"CLINE_PLUGIN_IMPORT_TIMEOUT_MS"),b=nl(i.hookTimeoutMs,3000),I=i.setupTimeoutMs===void 0?void 0:nl(i.setupTimeoutMs,4000),T=g+(I??0),_=new Map,E=(F)=>{let j=F.payload;if(F.name===a$){_.get(String(j?.callId))?.(j?.update);return}if(F.name===l$){i.onSetupStarted?.(String(j?.pluginPath));return}i.onEvent?.(F)},A=i.transport==="worker"?new $S({name:"plugin-worker",...c,idleTimeoutMs:l,onEvent:E,onUnexpectedExit:i.onUnexpectedExit,disposeMethod:"dispose",disposeTimeoutMs:b}):new OS({name:"plugin-sandbox",launcher:"bootstrapFile"in c?BO():void 0,...c,idleTimeoutMs:l,onEvent:E}),C=nl(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},M,O=()=>(M??=A.call("initialize",N,{timeoutMs:T}).finally(()=>{M=void 0}),M),L;try{L=await A.call("initialize",N,{timeoutMs:T})}catch(F){throw await A.shutdown().catch(()=>{}),F}let D=L.plugins.map(d$);return{extensions:D.map((F)=>{let j={name:F.name,__clinePluginPath:F.pluginPath,manifest:F.manifest,setup:(B)=>{b$(B,A,F,C,O,_),I$(B,A,F,C,O),k$(B,A,F,C,O),T$(B,A,F,C,O),S$(B,F)}};return j.hooks=E$(A,F,b,O),j}),disabledByPolicy:L.disabledByPolicy??[],failures:L.failures,pluginPaths:D.map((F)=>F.pluginPath),shutdown:async()=>{await A.shutdown()},warnings:L.warnings}}function v$(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 xm(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)=>xm(g,l)??null);let c={};for(let[g,b]of Object.entries(i)){let I=xm(b,l);if(I!==void 0)c[g]=I}return c}finally{l.delete(i)}}var Hy=new Set;function DS(i,l,u){let c=`${i}:${l}`;if(Hy.has(c))return;Hy.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 US(i,l,u){try{return await i(l)}catch(c){if(!v$(c))throw c;return u(c),await i(xm(l))}}var w$=0;function b$(i,l,u,c,g,b){for(let I of u.contributions?.tools??[]){let T={...I.definition??{},name:I.name,description:I.description??"",inputSchema:I.inputSchema??{type:"object",properties:{}},timeoutMs:I.timeoutMs,retryable:I.retryable,execute:async(_,E)=>{let{signal:A,emitUpdate:C,emitEvent:N,...M}=E??{},O=`${u.pluginId}:${++w$}`;if(C)b.set(O,C);let L=()=>{l.call("abortToolCall",{callId:O,reason:A?.reason instanceof Error?A.reason.message:void 0}).catch(()=>{})};A?.addEventListener("abort",L,{once:!0});let D=async(F)=>{let{input:j,context:B}=F,Q=()=>({pluginId:u.pluginId,contributionId:I.id,input:j,context:B,callId:O,aborted:A?.aborted===!0});try{return await l.call("executeTool",Q(),{timeoutMs:I.timeoutMs??c})}catch(H){if(!hd(H))throw H;return await g(),await l.call("executeTool",Q(),{timeoutMs:I.timeoutMs??c})}};try{return await US(D,{input:_,context:M},(F)=>DS("tool",I.name,F))}finally{A?.removeEventListener("abort",L),b.delete(O)}}};i.registerTool(T)}}function I$(i,l,u,c,g){for(let b of u.contributions?.commands??[])i.registerCommand(_S({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(T){if(!hd(T))throw T;return await g(),await l.call("executeCommand",{pluginId:u.pluginId,contributionId:b.id,input:I},{timeoutMs:c})}}}))}function k$(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(!hd(I))throw I;return await g(),await l.call("resolveRuleContent",{pluginId:u.pluginId,contributionId:b.id},{timeoutMs:c})}}:b.content??""})}function S$(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 T$(i,l,u,c,g){for(let b of u.contributions?.messageBuilders??[])i.registerMessageBuilder({name:b.name,async build(I){try{let T=await l.call("buildMessages",{pluginId:u.pluginId,contributionId:b.id,messages:I},{timeoutMs:c});return zy(T)?T:I}catch(T){if(!hd(T))throw T;await g();let _=await l.call("buildMessages",{pluginId:u.pluginId,contributionId:b.id,messages:I},{timeoutMs:c});return zy(_)?_:I}}})}function zy(i){return Array.isArray(i)&&i.every((l)=>typeof l==="object"&&l!==null&&("role"in l)&&("content"in l))}function _$(i,l,u,c,g){return async(b)=>await US(async(I)=>{try{return await i.call("invokeHook",{pluginId:l,hookName:u,payload:I},{timeoutMs:c})}catch(T){if(!hd(T))throw T;return await g(),await i.call("invokeHook",{pluginId:l,hookName:u,payload:I},{timeoutMs:c})}},b,(I)=>DS("hook",u,I))}function E$(i,l,u,c){let g={};for(let b of l.hooks??[])g[b]=_$(i,l.pluginId,b,u,c);return Object.keys(g).length>0?g:void 0}var A$=4000,C$=4000,x$=3000,R$=60000,P$=5,M$="CLINE_PLUGIN_IMPORT_TIMEOUT_MS";class bf extends Error{label;timeoutMs;constructor(i,l){super(`${i} timed out after ${l}ms`);this.label=i,this.timeoutMs=l,this.name="PluginCallTimeoutError"}}function N$(i){let l=process.env[i]?.trim();if(!l)return;let u=Number(l);return Number.isFinite(u)&&u>0?u:void 0}function Zc(i){if(i instanceof Error)return{message:i.message,stack:i.stack};return{message:String(i)}}function FS(i){let l=Oy(i);for(let u=0;u<4;u++){let c=OO(l,"package.json");if(RO(c)){try{let b=JSON.parse(PO(c,"utf8"));if(b&&typeof b==="object"&&"cline"in b)return l}catch{}return i}let g=Oy(l);if(g===l)break;l=g}return i}function El(i,l){return l===i?MO(i,NO(i)):Qi(i,l)}function O$(i){let l=Vd(i);return El(l,FS(l))}function ep(i,l,u){return new Promise((c,g)=>{let b=!1,I=setTimeout(()=>{b=!0,g(new bf(u,l))},l);I.unref?.(),Promise.resolve().then(i).then((T)=>{if(b)return;b=!0,clearTimeout(I),c(T)},(T)=>{if(b)return;b=!0,clearTimeout(I),g(T)})})}function $$(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 L$(i){return{extension:void 0,importId:i,setupFailed:!1,closed:!1,disposers:[]}}class If{entries=new Map;listeners=new Set;logger;defaults;failureThreshold;constructor(i={}){this.logger=i.logger,this.defaults={import:i.importTimeoutMs??N$(M$)??A$,setup:i.setupTimeoutMs??C$,hook:i.hookTimeoutMs??x$,call:i.toolTimeoutMs??R$},this.failureThreshold=i.failureThreshold??P$}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 M of this.recordDiscovery(i,c))l.push(this.toInitializationFailure(M));let I=[];for(let M of i.pluginPaths){let O=this.ensureEntry(Vd(M));if(O.exportName=i.exportName,this.refreshEntry(O),O.nameResolved&&!this.isEnabledForSession(O,i)){c.push(this.policyIssue(O));continue}if(O.blocked){l.push(this.toInitializationFailure(O)),c.push(this.toIssue(O,"error"));continue}I.push(O)}let T=await Promise.all(I.map((M)=>this.startWorkerCopy(M,i,b,g))),_=new Map,E=0;for(let M of T){let{entry:O}=M;if("error"in M){if(M.importId!==O.importId){c.push(this.staleIssue(O,M.phase,M.error,g));continue}if(M.phase==="setup")this.recordFailure(O,"setup",M.error,{sessionId:g,state:"failed"});else this.recordFailure(O,"import",M.error,{fatal:!0,sessionId:g});l.push(this.toInitializationFailure(O)),c.push(this.toIssue(O,"error"));continue}if("policyDisabled"in M){c.push(this.policyIssue(O));continue}if(!M.instance)continue;let{instance:L}=M;if(!this.isEnabledForSession(O,i)){c.push(this.policyIssue(O)),await L.shutdown?.().catch(()=>{});continue}let D=_.get(O.name);if(D)u.push({type:"duplicate_plugin_override",pluginName:O.name,pluginPath:O.pluginPath,overriddenPluginPath:D.entry.pluginPath,message:`Plugin "${O.name}" from ${O.pluginPath} overrides ${D.entry.pluginPath}`}),await D.instance.shutdown?.().catch(()=>{});_.set(O.name,{entry:O,instance:L,order:E++})}let A=[..._.values()].sort((M,O)=>M.order-O.order);if(g)for(let{entry:M}of A)M.sessions.set(g,i.onIssue);let C=A.map(({entry:M,instance:O})=>this.wrapForSession(M,O,i,b)),N;return{extensions:C,pluginPaths:A.map(({entry:M})=>M.pluginPath),failures:l,warnings:u,issues:c,release:()=>(N??=Promise.all(A.map(({entry:M,instance:O})=>this.releaseInstance(M,O,g,b))).then(()=>{return}),N)}}refreshEntry(i){let l=yf(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=L$(g),I=!1,T=!1,_=l.setupContext,E=Date.now(),A;try{A=await wf({transport:"worker",pluginPaths:[i.pluginPath],exportName:l.exportName,importTimeoutMs:u.import,setupTimeoutMs:u.setup,hookTimeoutMs:u.hook,contributionTimeoutMs:u.call,onEvent:l.emitEvent,onSetupStarted:()=>{T=!0},policy:l.policy,policyNames:{[i.pluginPath]:[El(i.pluginPath,i.pluginRoot)]},onUnexpectedExit:(O)=>{if(!I||b.closed)return;this.recordFailure(i,"uncaught",O,{fatal:!0,instance:b,sessionId:c})},providerId:l.providerId,modelId:l.modelId,cwd:l.cwd,workspaceInfo:_?.workspaceInfo,session:_?.session,client:_?.client,user:_?.user,logger:_?.logger,telemetryAvailable:Boolean(_?.telemetry)})}catch(O){return{entry:i,error:O,phase:T?"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],M=A.extensions?.[0];if(N||!M){if(await A.shutdown().catch(()=>{}),!N)return{entry:i};let O=Error(N.message);if(N.stack)O.stack=N.stack;return{entry:i,error:O,phase:N.phase==="setup"?"setup":"import",importId:g}}if(I=!0,b.extension=M,b.shutdown=A.shutdown,g===i.importId){if(i.name=M.name,i.nameResolved=!0,i.extension=M,!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}=Zc(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 $$(l.policy,[i.name,El(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=Vd(l);return[...this.entries.values()].filter((c)=>c.pluginPath===u||c.name===l||El(c.pluginPath,c.pluginRoot)===l)}ensureEntry(i){let l=Vd(i),u=this.entries.get(l);if(!u){let c=FS(l);u={pluginPath:l,pluginRoot:c,name:El(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?(T,_)=>u.emitEvent?.({name:T,payload:_}):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(T,_)=>{if(!this.isUsable(i,l))return;let E={...u.setupContext?.session??{},..._.session??{}},A={...u.setupContext??{},..._,session:Object.keys(E).length>0?E:void 0,cwd:u.cwd??_.cwd,emitEvent:b,onDispose:(C)=>{if(typeof C==="function")l.disposers.push(C)}};await this.runSetup(i,l,(C)=>I.call(g,C,A),T,u,c)}:void 0}}async runSetup(i,l,u,c,g,b){let I={tools:[],commands:[],calls:[]},T=new Set(l.extension.manifest.capabilities),_=(N,M)=>{if(!T.has(N))throw Error(`${M} requires the "${N}" capability`)},E={registerTool:(N)=>{I.tools.push(N)},registerCommand:(N)=>{I.commands.push(N)},registerRule:(N)=>{_("rules","registerRule");let M=this.wrapRule(i,l,N,g,b);I.calls.push((O)=>O.registerRule(M))},registerMessageBuilder:(N)=>{let M=this.wrapMessageBuilder(i,l,N,g,b);I.calls.push((O)=>O.registerMessageBuilder(M))},registerProvider:(N)=>{I.calls.push((M)=>M.registerProvider(N))},registerAutomationEventType:(N)=>{_("automationEvents","registerAutomationEventType"),I.calls.push((M)=>M.registerAutomationEventType(N))},registerMcpServer:(N)=>{_("mcp","registerMcpServer"),I.calls.push((M)=>M.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 ep(()=>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,T]of Object.entries(u)){if(typeof T!=="function")continue;let _=`hook:${I}`;b[I]=async(...E)=>{if(!this.isUsable(i,l))return;try{return await this.guardedCall(i,l,_,g.hook,c,()=>T.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,T)=>(this.assertUsable(i,l,`tool "${u.name}"`),this.guardedCall(i,l,b,u.timeoutMs??g.call,c,()=>u.execute(I,{...T,cwd:T.cwd??c.cwd,emitEvent:T.emitEvent??l.emitEvent}),()=>T.signal?.aborted===!0))}}wrapCommand(i,l,u,c,g){let b=u.handler;if(typeof b!=="function")return u;let I={...u,handler:async(T)=>(this.assertUsable(i,l,`command "/${u.name}"`),this.guardedCall(i,l,`command:${u.name}`,g.call,c,()=>b.call(u,T)))};return _S(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 T=Date.now();try{let _=await ep(b,c,`Plugin "${i.name}" ${u}`);if(l.importId===i.importId)i.consecutiveFailures=0;return this.warnIfSlow(i,u,T,c,g),_}catch(_){if(!I?.())this.recordFailure(i,u,_,{instance:l,sessionId:g.sessionId});throw _}}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 ep(g,c.hook,`Plugin "${i.name}" dispose`)}catch(b){let{message:I,stack:T}=Zc(b);this.log("warn","plugin.error",i,{phase:"dispose",sessionId:u,errorMessage:I,stack:T})}await l.shutdown?.().catch(()=>{})}recordFailure(i,l,u,c){let{message:g,stack:b}=Zc(u),I=u instanceof bf,T=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:T,stack:b});let _={phase:l,message:`${c.messagePrefix??""}${g}`,...b?{stack:b}:{},pluginPath:i.pluginPath,timestamp:Date.now(),...c.sessionId?{sessionId:c.sessionId}:{},...I?{timedOut:I}:{}};if(T){let O=c.notify??(c.sessionId?i.sessions.get(c.sessionId):void 0);try{O?.({name:i.name,pluginPath:i.pluginPath,state:c.state??"degraded",reason:"error",lastError:_})}catch{}return}if(i.errorCount+=1,I)i.timeoutCount+=1;i.consecutiveFailures+=1,i.lastError=_;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"),M=[];if(C&&!c.state){for(let O of i.sessions.values())if(O)M.push(O)}if(c.notify&&!M.includes(c.notify))M.push(c.notify);for(let O of M)try{O(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 D$(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 Wy;function pc(){return Wy??=new If,Wy}var U$=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"]),F$=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"]),Ed=new Set(["install","i","ci","add","remove","rm","uninstall","unlink","link","update","up","upgrade","dedupe","prune","publish"]),Al=new Set(["install","uninstall","add","remove"]),q$=new Set(["add","remove","rm","install","uninstall","update","new","init","publish"]),j$=new Set(["install","uninstall","update","cleanup"]),B$=new Set(["install","require","remove","update"]),H$=new Set(["install","get"]),z$=new Set(["add","remove"]),W$=new Set(["install","uninstall","upgrade"]),K$=new Set(["install","update","delete","push"]),ci=new Set(["install","reinstall","remove","purge","uninstall","upgrade","autoremove","add","del"]),G$={git:F$,npm:Ed,pnpm:Ed,yarn:Ed,bun:Ed,pip:Al,pip3:Al,pipx:Al,uv:Al,cargo:q$,apt:ci,"apt-get":ci,dnf:ci,yum:ci,apk:ci,brew:ci,snap:ci,gem:j$,composer:B$,go:H$,dotnet:z$,winget:W$,nuget:K$},X$={stash:new Set(["list","show"]),worktree:new Set(["list"]),submodule:new Set(["status","summary"])},J$=new Set(["sudo","doas","env","command","builtin","nohup","time","nice","stdbuf","timeout","xargs"]),V$=new Set(["if","then","else","elif","fi","while","until","do","done","for","case","esac","!","{","}"]),Ky=/^[A-Za-z_][A-Za-z0-9_]*\+?=/;function qS(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 Gy(i){return(i.replace(/["']/g,"").split(/[/\\]/).pop()??i).toLowerCase().replace(/\.exe$/,"")}function Y$(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 Rm(i){let l=0;while(l<i.length&&(Ky.test(i[l])||V$.has(i[l])))l+=1;while(l<i.length&&J$.has(Gy(i[l]))){l+=1;while(l<i.length&&(i[l].startsWith("-")||i[l]==="{}"||Ky.test(i[l])||/^\d+[smhd]?$/.test(i[l])))l+=1}if(l>=i.length)return;let u=Gy(i[l]),c=i.slice(l+1);if(u==="tee")return c.filter((I)=>!I.startsWith("-")).some((I)=>!qS(I))?"`tee`":void 0;if(U$.has(u))return`\`${u}\``;let g=G$[u];if(g){if(u==="git"&&c.some((_)=>_==="--help"||_==="-h"))return;let I=0;while(I<c.length&&c[I].startsWith("-"))I+=u==="git"&&/^-[cC]$/.test(c[I])?2:1;let T=c[I]?.toLowerCase();if(T&&g.has(T)){let _=c[I+1]?.toLowerCase();if(u==="git"&&_!==void 0&&X$[T]?.has(_))return;return`\`${u} ${T}\``}if(u==="yarn"&&c.length===0)return"`yarn` (install)";return}if(/^python[\d.]*$/.test(u)){let I=c.indexOf("-m"),T=I===-1?void 0:c[I+1]?.toLowerCase();if(T==="pip"||T==="pip3"){let _=c.slice(I+2).find((E)=>!E.startsWith("-"))?.toLowerCase();if(_&&Al.has(_))return`\`pip ${_}\``}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,T)=>(I==="-i"||I==="--include")&&c[T+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,T)=>I==="--spider"||/^-[A-Za-z]*O-$/.test(I)||I==="--output-document=-"||I==="-O"&&c[T+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 T=[];for(let E=I+1;E<c.length&&c[E]!==";"&&c[E]!=="+";E+=1)T.push(c[E]);let _=Rm(T);if(_)return _}return}return}function Q$(i){if(typeof i!=="string")return Rm([i.command,...i.args??[]]);let l=Y$(i),u=l.matchAll(/(?:^|[^<>])(?:>{1,2}|&>{1,2})\s*([^\s;&|<>()]+)/g);for(let c of u)if(!qS(c[1]))return`output redirection (\`> ${c[1]}\`)`;for(let c of l.split(/[\n;|&()`]+/)){let g=Rm(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 Ui=6000,Fi=e().describe("The absolute path of a text file to read content from"),Su=t({start_line:xi.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:xi.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"),jS=t({path:Fi,start_line:Su.shape.start_line,end_line:Su.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"),BS=t({files:o(jS).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.")}),Xy={start_line:Su.shape.start_line,end_line:Su.shape.end_line},On=p([jS,t({file_path:Fi,...Xy}).transform(({file_path:i,...l})=>({path:i,...l})),t({filePath:Fi,...Xy}).transform(({filePath:i,...l})=>({path:i,...l}))]),eL=p([BS,On,o(On),o(e()),e(),t({files:o(p([Fi,On]))}),t({files:On}),t({files:Fi}),t({file_paths:o(Fi)}),t({file_paths:e()}),t({paths:o(p([Fi,On]))}),t({paths:On}),t({paths:e()})]),HS=t({queries:o(e()).describe("Array of regex search queries to execute")}),tL=p([HS,o(e()),e(),t({queries:e()})]),Tu=e().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${Ui*2} characters) to avoid timeouts.`),Pm=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.")}),zS=p([Tu,Pm]),WS=t({commands:o(Tu).min(1).describe("Array of complete shell command strings to execute.")}),rL=t({commands:o(zS)}),sL=p([WS,rL,t({commands:zS}),o(Pm),Pm,t({command:Tu}),t({cmd:Tu}),o(e()),e()]),iL=t({url:e().describe("The URL to fetch"),prompt:e().min(2).describe("Analysis prompt for the fetched content")}),Jy=t({requests:o(iL).describe("Array of the URLs for the web fetch requests")}),Vy=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 ${Ui} 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 ${Ui} 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:xi.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."),KS=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."),nL=p([KS,e()]),Yy=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")}),Qy=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")}),Zy=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 pa(i){if(i instanceof Error)return i.message;return String(i)}function oL(i){if(typeof i.old_text==="string"&&i.old_text.length>Ui)return`Editor input too large: old_text was ${i.old_text.length} characters, exceeding the recommended limit of ${Ui}. 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>Ui)return`Editor input too large: new_text was ${i.new_text.length} characters, exceeding the recommended limit of ${Ui}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}class mc extends Error{timeoutMs;constructor(i,l){super(i);this.name="TimeoutError",this.timeoutMs=l}}function si(i,l,u){return Promise.race([i,new Promise((c,g)=>{setTimeout(()=>g(new mc(u,l)),l)})])}function tp(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 aL(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 lL=new Set(["start_line","end_line"]);function dL(i){if(i===null||typeof i!=="object"||Array.isArray(i))return!1;let l=Object.keys(i);return l.length>0&&l.every((u)=>lL.has(u))}function ev(i){let l=[];for(let u of i){if(dL(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 uL(i){if(Array.isArray(i))return ev(i);if(i!==null&&typeof i==="object")for(let l of["files","paths"]){let u=i[l];if(Array.isArray(u))return{...i,[l]:ev(u)}}return i}function GS(i){let l=cL(y(sL,i));if(l.length===0)throw Error("run_commands requires at least one command; the commands list was empty.");return l}function cL(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 pL(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 rp=200;function mL(i){let l=pL(i);if(l.length<=rp)return l;let u=l.length-rp;return`${l.slice(0,rp)} ... [command truncated: ${u} more chars; full command is in the tool call input]`}var hL="core.plan-mode-command-guard";function fL(i={}){return{name:hL,manifest:{capabilities:["hooks"]},hooks:{beforeTool:(l)=>{if(l.tool.name!==Gt.RUN_COMMANDS)return;let u;try{u=GS(l.input)}catch{return}for(let c of u){let g=Q$(c);if(g)return FA(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 TL=2000,_L=4096;function EL(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 VS(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 sp(i){return VS(i)==="missing"?{status:"missing"}:{status:"unavailable"}}function AL(i){let l=i.trim();return l?{status:"found",token:`${process.platform}:${l}`}:void 0}function CL(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 kf(i){if(!Number.isSafeInteger(i)||i<=0)return{status:"missing"};if(process.platform==="linux"){let u;try{u=await iv(`/proc/${i}/stat`,"utf8")}catch{return sp(i)}let c=CL(u);if(c.status!=="running")return c;try{let g=(await iv("/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=VS(i);if(l!=="running")return{status:l};try{let u=EL(i);return await new Promise((c)=>{SL(u.file,u.args,{encoding:"utf8",env:u.env,maxBuffer:_L,timeout:TL,windowsHide:!0},(g,b)=>{let I=!g&&typeof b==="string"?AL(b):void 0;c(I??sp(i))})})}catch{return sp(i)}}var Jl=48000;function nv(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 Zd=2000,Mm=2000,YS=48000,eu=48000,ov=10485760,xL=86400000,RL=60000,QS="cline-command-",ZS="output.log",e0="active-command.json",t0="completed-at",PL=48,ML=1000;function r0(i){return typeof i==="number"&&Number.isFinite(i)?Math.max(0,i):xL}function NL(i){return typeof i==="number"&&Number.isFinite(i)?Math.max(1,i):RL}function OL(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 Nm(i,l){let u=`${i}.${XS()}.tmp`;try{wL(u,l,"utf8");try{rv(u,i)}catch(c){if(c instanceof Error&&"code"in c&&["EEXIST","EPERM"].includes(String(c.code)))_u(i,{force:!0}),rv(u,i);else throw c}}finally{_u(u,{force:!0})}}function $L(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 av(i){try{return await IL(i,"utf8")}catch(l){if(l instanceof Error&&"code"in l&&l.code==="ENOENT")return;throw l}}async function s0(i,l){let u=Qs(i,e0),c=Qs(i,t0),g=await av(c),b=$L(g,l.nowMs),I=await av(u);if(b!==void 0){if(I!==void 0)await Qd(u,{force:!0})}else if(I!==void 0){let _=OL(I);if(_){let E;try{E=await l.probeProcessStartToken(_.pid)}catch{E={status:"unavailable"}}if(E.status==="found"&&E.token===_.processStartToken)return lv(i,l),!1;if(E.status==="unavailable")return lv(i,l),!1}Nm(c,String(l.nowMs)),await Qd(u,{force:!0}),b=l.nowMs}if(b===void 0)try{b=(await sv(Qs(i,ZS))).mtimeMs}catch{b=(await sv(i)).mtimeMs}let T=l.nowMs-l.retentionMs;if(b>T)return n0(i,Math.max(0,b+l.retentionMs-l.nowMs)),!1;return await Qd(i,{recursive:!0,force:!0}),!0}function lv(i,l,u=l.activeCommandPollIntervalMs){setTimeout(()=>{s0(i,{...l,nowMs:Date.now()}).catch(()=>{return})},u).unref()}async function LL(i={}){let l=i.tempDirectory??JS(),u=r0(i.retentionMs),c=i.nowMs??Date.now(),g=i.processStartTokenProbe??kf,b=NL(i.activeCommandPollIntervalMs),I;try{I=await bL(l,{withFileTypes:!0})}catch{return 0}let T=0;for(let _ of I){if(!_.isDirectory()||!_.name.startsWith(QS))continue;let E=Qs(l,_.name);try{if(await s0(E,{retentionMs:u,nowMs:c,probeProcessStartToken:g,activeCommandPollIntervalMs:b}))T+=1}catch{}}return T}class Sf extends Error{exitCode;output;constructor(i,l){super(`Command exited with code ${i}`);this.exitCode=i,this.output=l,this.name="CommandExitError"}}function tu(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 Tf extends Error{signal;output;constructor(i,l){super(tu(null,i));this.signal=i,this.output=l,this.name="CommandTerminationError"}}class i0 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&&!yL(l.cwd))this.missing="cwd";else this.missing="executable"}}function dv(i){let l=Math.ceil(i/2),u=Math.max(1,i-l),c=new kL("utf8"),g="",b="",I=0,T=(_)=>{if(!_)return;I+=_.length;let E=l-g.length;if(E>0){g+=_.slice(0,E),b=(b+_.slice(E)).slice(-u);return}b=(b+_).slice(-u)};return{append(_){let E=c.write(_);return T(E),E},current(){return{text:g+b,totalChars:I,dropped:I>g.length+b.length}},snapshot(){let _=c.end();return T(_),{text:g+b,totalChars:I,dropped:I>g.length+b.length,finalChunk:_}}}}function DL(i,l,u,c){let g=i.emitUpdate,b=typeof c==="number"&&Number.isFinite(c)?Math.max(1,Math.floor(Math.min(Jl,c))):Jl,I={},T=[],_,E=!1,A=()=>{if(!_)return;clearTimeout(_),_=void 0},C=()=>{if(A(),!g){I={},T=[];return}let M=I,O=T;I={},T=[];for(let L of O){let D=M[L];if(!D?.chunk)continue;let F=D.droppedChars>0?`\x1B[0m[${D.droppedChars} command-output characters skipped while streaming]
435
+ `:"",j=F.length<b?F+D.chunk.slice(-(b-F.length)):D.chunk.slice(-b);g({stream:L,chunk:j,executionId:l,detachable:u(),...D.droppedChars>0?{truncated:!0,droppedChars:D.droppedChars}:{}})}},N=()=>{if(!g||_||E)return;_=setTimeout(C,PL),_.unref()};return{append(M,O){if(!g||E||!O)return;let L=I[M];if(!L)L={chunk:"",droppedChars:0},I[M]=L,T.push(M);if(O.length>=b)L.droppedChars+=L.chunk.length+O.length-b,L.chunk=O.slice(-b);else{let D=L.chunk.length+O.length-b;if(D>0)L.droppedChars+=D,L.chunk=L.chunk.slice(D);L.chunk+=O}N()},flush:C,stop(M={}){if(E)return;if(M.flush)C();else A(),I={},T=[];E=!0}}}function n0(i,l){setTimeout(()=>{Qd(i,{recursive:!0,force:!0}).catch(()=>{return})},l).unref()}function UL(i,l){let u=vL(Qs(JS(),QS)),c=Qs(u,ZS),g=Qs(u,e0),b=Qs(u,t0);try{Nm(g,`${JSON.stringify(l)}
436
+ `)}catch(O){throw _u(u,{recursive:!0,force:!0}),O}let I=gL(c,{encoding:"utf8"}),T=0,_=!1,E=!0,A=!1,C=!1,N=!1,M=()=>{if(N)return;N=!0,n0(u,i)};return I.on("error",()=>{E=!1}),I.once("close",()=>{if(E=!1,A=!0,C)M()}),{path:c,write(O){if(!O||_||!E)return;let L=ov-T;if(L<=0){_=!0,E=!1,I.end();return}let D=Buffer.from(O,"utf8"),F=D.length<=L?D:D.subarray(0,L);if(I.write(F),T+=F.length,F.length<D.length||T>=ov)_=!0,E=!1,I.end()},complete:()=>{if(C)return;C=!0;try{Nm(b,String(Date.now()))}catch{}try{_u(g,{force:!0})}catch{}if(A){M();return}E=!1,I.end()}}}function FL(i,l,u,c,g,b,I,T=kf){if(l.signal?.aborted)return Promise.reject(Error("Command was aborted"));return new Promise((_,E)=>{let A=process.platform==="win32",C=tv(i.executable,i.args,{cwd:i.cwd,env:{...process.env,...i.env},stdio:["pipe","pipe","pipe"],detached:!A,windowsHide:!0}),N=C.pid,M=dv(c),O=dv(c),L=XS(),D=Boolean(I&&l.sessionId),F=!1,j,B=!1,Q=!1,H=!1,z,te=!1,ee,oe=()=>{},G=DL(l,L,()=>F,c),se=(ve)=>{if(Q)return;Q=!0,ve()},Ne=async()=>{if(!N)return;if(A){await new Promise((ve)=>{let Se=!1,Ee,Ae=()=>{if(Se)return;Se=!0,clearTimeout(Be),ve()};try{Ee=tv("taskkill.exe",["/PID",String(N),"/T","/F"],{stdio:"ignore",shell:!1,windowsHide:!0})}catch{C.kill(),ve();return}let Be=setTimeout(()=>{Ee.kill(),C.kill(),Ae()},5000);Ee.once("error",()=>{C.kill(),Ae()}),Ee.once("close",(Ye)=>{if(Ye!==0)C.kill();Ae()})});return}try{process.kill(-N,"SIGKILL")}catch{C.kill("SIGKILL")}},De,Te=()=>ke(Error("Command was aborted")),le=()=>{if(clearTimeout(De),z)clearTimeout(z);l.signal?.removeEventListener("abort",Te),oe()},ke=(ve)=>{if(B||Q)return;B=!0,G.stop({flush:!0}),le(),Ne().finally(()=>se(()=>E(ve)))};if(De=setTimeout(()=>ke(new mc(`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||B||Q||!N||C.exitCode!==null||C.signalCode!==null)return!1;if(!j)return!1;let ve=UL(b,{version:1,executionId:L,pid:N,processStartToken:j,detachedAtMs:Date.now()});G.stop({flush:!0}),te=!0,ee=ve;let Se=M.current(),Ee=O.current();if(ee.write(Se.text),Ee.text)ee.write(`
437
+ [stderr]
438
+ ${Ee.text}`);le(),C.unref(),C.stdout?.unref?.(),C.stderr?.unref?.();let Ae=[`[Command is still running. Output will continue in ${ee.path}]`,g?Se.text+(Ee.text?`
439
+ [stderr]
440
+ ${Ee.text}`:""):Se.text].filter(Boolean).join(`
441
+ `);return se(()=>_(Ae)),!0};C.once("spawn",()=>{if(B)return;l.emitUpdate?.({stream:"stdout",chunk:"",executionId:L,detachable:!1});let ve=l.sessionId;if(!D||!N||!ve||!I)return;(async()=>{let Se=await T(N);if(Se.status!=="found"||B||Q||C.exitCode!==null||C.signalCode!==null)return;j=Se.token,F=!0,oe=I.register({executionId:L,sessionId:ve,toolCallId:l.toolCallId,detach:we}),l.emitUpdate?.({stream:"stdout",chunk:"",executionId:L,detachable:!0})})().catch(()=>{return})}),C.stdout?.on("data",(ve)=>{let Se=M.append(ve);if(!Se)return;if(te){ee?.write(Se);return}G.append("stdout",Se)}),C.stderr?.on("data",(ve)=>{let Se=O.append(ve);if(!Se)return;if(te){ee?.write(Se);return}G.append("stderr",Se)});let Xe=(ve,Se,Ee)=>{let Ae=M.snapshot(),Be=O.snapshot();if(Ae.finalChunk)G.append("stdout",Ae.finalChunk);if(Be.finalChunk)G.append("stderr",Be.finalChunk);if(G.stop({flush:!0}),le(),ve!==0){let Ye=g?Ae.text+(Be.text?`
442
+ [stderr]
443
+ ${Be.text}`:""):Ae.text,Ct=Ae.dropped||g&&Be.dropped,vt=g?Ae.totalChars+Be.totalChars:Ae.totalChars;if(Ct||Ye.length>c)Ye=nv(Ye,{maxChars:c,totalChars:vt});let Nr=`[${tu(ve,Se)}]`,bt=Ye.length>0?`${Nr}
444
+ ${Ye}`:Nr,xt=Ee?`${bt}
445
+ ${Ee}`:bt;se(()=>E(ve===null?new Tf(Se,xt):new Sf(ve,xt)))}else{let Ye=g?Ae.text+(Be.text?`
446
+ [stderr]
447
+ ${Be.text}`:""):Ae.text;if(Ae.dropped||g&&Be.dropped||Ye.length>c){let Ct=g?Ae.totalChars+Be.totalChars:Ae.totalChars;Ye=nv(Ye,{maxChars:c,totalChars:Ct})}se(()=>_(Ee?`${Ye}
448
+ ${Ee}`:Ye))}};C.on("close",(ve,Se)=>{if(B||H)return;let Ee=M.snapshot(),Ae=O.snapshot();if(te){if(z)clearTimeout(z);ee?.write(Ee.finalChunk),ee?.write(Ae.finalChunk),ee?.write(`
449
+ [${tu(ve,Se)}]
450
+ `),ee?.complete();return}Xe(ve,Se??null,"")}),C.on("exit",(ve,Se)=>{if(B)return;z=setTimeout(()=>{if(B||H)return;if(te){let Ee=M.snapshot(),Ae=O.snapshot();ee?.write(Ee.finalChunk),ee?.write(Ae.finalChunk),ee?.write(`
451
+ [${tu(ve,Se)}]
452
+ `),ee?.complete();return}if(Q)return;H=!0,C.stdout?.unref?.(),C.stderr?.unref?.(),C.unref(),Xe(ve,Se??null,"[Command completed with background processes still running; their output is no longer captured]")},ML)}),C.on("error",(ve)=>{if(B)return;if(te){ee?.write(`
453
+ [Command failed: ${ve.message}]
454
+ `),ee?.complete();return}G.stop({flush:!0}),le(),se(()=>E(new i0(ve,{cwd:i.cwd})))}),C.stdin?.on("error",(ve)=>{if(B||Q)return;ke(Error(`Failed to write command input: ${ve.message}`))}),C.stdin?.end(i.input,"utf8")})}function qL(i={}){let{shell:l=_t(process.platform),timeoutMs:u=30000,env:c={},combineOutput:g=!0,executionController:b,processStartTokenProbe:I=kf}=i,T=r0(i.detachedLogRetentionMs),_=i.maxOutputChars??i.maxOutputBytes??Jl;return(E,A,C)=>{let N=typeof E!=="string"&&"args"in E?{executable:E.command,args:E.args??[]}:lr(l,typeof E==="string"?E:E.command);return FL({executable:N.executable,args:N.args,cwd:A,env:c,input:N.input},C,u,_,g,T,b,I)}}function uv(i,l){let u=i.metadata?.[l];return typeof u==="string"?u:void 0}function jL(i,l,u){UA(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:uv(l,"mode"),source:uv(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 BL(i){let l=i.match(/(?<![<])<<-?\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_./-]+))/);return l?.[1]??l?.[2]??l?.[3]}function HL(i){let l=[];for(let u=0;u<i.length;u+=1){let c=i[u],g=BL(c);if(!g){l.push(c);continue}let b=i.findIndex((T,_)=>_>u&&T.trim()===g);if(b===-1){l.push(c);continue}let I=[c];while(u<b){u+=1;let T=i[u];I.push(T)}l.push(I.join(`
455
+ `))}return l}function zL(i){let l=[],u=[],c=()=>{if(u.length>0)l.push(...HL(u)),u=[]};for(let g of i){if(typeof g==="string"){u.push(g);continue}c(),l.push(g)}return c(),l}async function WL(i,l){let{executor:u,cwd:c,context:g,timeoutMs:b,timeoutSource:I,telemetry:T}=l;return Promise.all(i.map(async(_,E)=>{let A=Date.now(),C=mL(_),N=g.emitUpdate?{...g,emitUpdate:(M)=>{let O=M&&typeof M==="object"&&!Array.isArray(M)?M:{update:M};g.emitUpdate?.({...O,commandIndex:E,query:C})}}:g;try{let M=await si(u(_,c,N),b,`Command timed out after ${b}ms`);return{query:C,result:M,success:!0}}catch(M){if(M instanceof mc)jL(T,g,{effectiveTimeoutMs:M.timeoutMs,timeoutSource:I,commandCount:i.length,durationMs:Date.now()-A});if(M instanceof Sf||M instanceof Tf)return{query:C,result:M.output,error:M.message,success:!1};let O=pa(M);return{query:C,result:"",error:`Command failed: ${O}`,success:!1}}}))}function KL(i,l={}){let u=l.fileReadTimeoutMs??1e4;return k({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 ${Zd} lines / ~${Math.round(YS/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(BS),timeoutMs:u*2,retryable:!0,maxRetries:1,execute:async(c,g)=>{let b=y(eL,uL(c)),I;if(typeof b==="string")I=[{path:b}];else if(Array.isArray(b))I=b.map((T)=>typeof T==="string"?{path:T}:T);else if("files"in b)I=(Array.isArray(b.files)?b.files:[b.files]).map((T)=>typeof T==="string"?{path:T}:T);else if("file_paths"in b)I=(Array.isArray(b.file_paths)?b.file_paths:[b.file_paths]).map((T)=>({path:T}));else if("paths"in b)I=(Array.isArray(b.paths)?b.paths:[b.paths]).map((T)=>typeof T==="string"?{path:T}:T);else I=[b];return Promise.all(I.map(async(T)=>{let _=aL(T);if(_)return{query:tp(T),result:"",error:`Invalid file range: ${_}`,success:!1};try{let E=await si(i(T,g),u,`File read timed out after ${u}ms`);return{query:tp(T),result:E,success:!0}}catch(E){let A=pa(E);return{query:tp(T),result:"",error:`Error reading file: ${A}`,success:!1}}}))}})}function GL(i,l={}){let u=l.searchTimeoutMs??30000,c=l.cwd??process.cwd();return k({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(eu/1000)}k characters per query is middle-truncated; narrow patterns beat broad ones.`,inputSchema:S(HS),timeoutMs:u*2,retryable:!0,maxRetries:1,execute:async(g,b)=>{let I=y(tL,g),T=Array.isArray(I)?I:typeof I==="object"?Array.isArray(I.queries)?I.queries:[I.queries]:[I];return Promise.all(T.map(async(_)=>{try{let E=await si(i(_,c,b),u,`Search timed out after ${u}ms`);return{query:_,result:E,success:!0}}catch(E){let A=pa(E);return{query:_,result:"",error:`Search failed: ${A}`,success:!1}}}))}})}var cv="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. ",XL="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 JL(i,l){let u=Ro(i);if(u==="powershell"||u==="cmd"){let g=zi(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,T=`${b} ${u==="powershell"?"-Command":"/c"}`,_=u==="powershell"?"';'":"'&&'";return`Run non-interactive shell commands from the root of the workspace${l?" in Windows environment":""}. `+cv+`Output beyond ~${Math.round(Jl/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 ${_} to sequence commands. Write commands directly; do not wrap them in another ${T} invocation. `+(u==="powershell"?XL:"")+"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. "+cv+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(Jl/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 VL(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,T=typeof I==="function"?I:()=>I??_t(process.platform),_=()=>JL(T(),b),E=k({name:"run_commands",description:_(),inputSchema:S(WS),timeoutMs:u*2,retryable:!1,maxRetries:0,execute:async(A,C)=>{let N=zL(GS(A));return WL(N,{executor:i,cwd:g,context:C,timeoutMs:u,timeoutSource:c,telemetry:l.telemetry})}});if(typeof I==="function")Object.defineProperty(E,"description",{get:_,enumerable:!0});return E}function YL(i,l={}){let u=l.webFetchTimeoutMs??30000;return k({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(Jy),timeoutMs:u*2,retryable:!0,maxRetries:2,execute:async(c,g)=>{let b=y(Jy,c);return Promise.all(b.requests.map(async(I)=>{try{let T=await si(i(I.url,I.prompt,g),u,`Web fetch timed out after ${u}ms`);return{query:I.url,result:T,success:!0}}catch(T){let _=pa(T);return{query:I.url,result:"",error:`Error fetching web content: ${_}`,success:!1}}}))}})}var QL=`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 k({name:"apply_patch",description:QL,inputSchema:S(KS),timeoutMs:u,retryable:!1,maxRetries:0,execute:async(g,b)=>{let I=y(nL,g),T=typeof I==="string"?I:I.input;try{return{query:"apply_patch",result:await si(i({input:T},c,b),u,`apply_patch timed out after ${u}ms`),success:!0}}catch(_){return{query:"apply_patch",result:"",error:`apply_patch failed: ${pa(_)}`,success:!1}}}})}function e1(i,l={}){let u=l.editorTimeoutMs??30000,c=l.cwd??process.cwd();return k({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(Vy),timeoutMs:u,retryable:!1,maxRetries:0,execute:async(g,b)=>{let I=y(Vy,g),T=I.insert_line==null?"edit":"insert",_=oL(I);if(_)return{query:`${T}:${I.path}`,result:"",error:_,success:!1};try{let E=await si(i(I,c,b),u,`Editor operation timed out after ${u}ms`);return{query:`${T}:${I.path}`,result:E,success:!0}}catch(E){let A=pa(E);return{query:`${T}:${I.path}`,result:"",error:`Editor operation failed: ${A}`,success:!1}}}})}function hc(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=k({name:"skills",description:c,inputSchema:S(Yy),timeoutMs:u,retryable:!1,maxRetries:0,execute:async(b,I)=>{let T=y(Yy,b);return si(i(T.skill,T.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 t1(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 r1(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(Qy),retryable:!1,maxRetries:0,execute:async(l,u)=>{let c=y(Qy,l),g=await i(c.question,c.options,u);return t1(g)}}}function s1(i,l={}){let u=l.submitTimeoutMs??15000;return k({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(Zy),lifecycle:{completesRun:!0},timeoutMs:u,retryable:!1,maxRetries:0,execute:async(c,g)=>{let b=y(Zy,c);return si(i(b.summary,b.verified,g),u,`submit_and_exit timed out after ${u}ms`)}})}function i1(i){let{executors:l,enableReadFiles:u=!0,enableSearch:c=!0,enableBash:g=!0,enableWebFetch:b=!0,enableApplyPatch:I=!1,enableEditor:T=!0,enableSkills:_=!0,enableAskQuestion:E=!0,enableSubmitAndExit:A=!1,...C}=i,N=[];if(u&&l.readFile)N.push(KL(l.readFile,C));if(c&&l.search)N.push(GL(l.search,C));if(g&&l.bash)N.push(VL(l.bash,C));if(b&&l.webFetch)N.push(YL(l.webFetch,C));if(T&&l.editor)N.push(e1(l.editor,C));else if(I&&l.applyPatch)N.push(ZL(l.applyPatch,C));if(_&&l.skills)N.push(hc(l.skills,C));let M=A?l.submit:void 0;if(E&&l.askQuestion&&!M)N.push(r1(l.askQuestion));if(M)N.push(s1(M,C));return N}var $e={BEGIN:"*** Begin Patch",END:"*** End Patch",ADD:"*** Add File: ",UPDATE:"*** Update File: ",DELETE:"*** Delete File: ",MOVE:"*** Move to: ",SECTION:"@@",END_FILE:"*** End of File"},n1=["%%bash","apply_patch","EOF","```"];class yt extends Error{constructor(i){super(i);this.name="DiffError"}}function jr(i){let l={"‐":"-","‑":"-","‒":"-","–":"-","—":"-","−":"-","“":'"',"”":'"',"„":'"',"«":'"',"»":'"',"‘":"'","’":"'","‛":"'"," ":" "," ":" "};return i.normalize("NFC").replace(/./gu,(u)=>l[u]??u).replace(/\\`/g,"`").replace(/\\'/g,"'").replace(/\\"/g,'"')}class o0{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($e.BEGIN))this.index++}hasMoreLines(){return this.index<this.lines.length}isEndMarker(){return this.lines[this.index]?.startsWith($e.END)??!1}parseNextAction(){let i=this.lines[this.index];if(i?.startsWith($e.UPDATE)){this.parseUpdate(i.substring($e.UPDATE.length).trim());return}if(i?.startsWith($e.DELETE)){this.parseDelete(i.substring($e.DELETE.length).trim());return}if(i?.startsWith($e.ADD)){this.parseAdd(i.substring($e.ADD.length).trim());return}throw new yt(`Unknown line while parsing: ${i}`)}checkDuplicate(i,l){if(i in this.patch.actions)throw new yt(`Duplicate ${l} for file: ${i}`)}parseUpdate(i){this.checkDuplicate(i,"update"),this.currentPath=i,this.index++;let l=this.lines[this.index]?.startsWith($e.MOVE)?(this.lines[this.index++]??"").substring($e.MOVE.length).trim():void 0;if(!(i in this.currentFiles))throw new yt(`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=[$e.END,$e.UPDATE,$e.DELETE,$e.ADD,$e.END_FILE];while(!b.some((I)=>this.lines[this.index]?.startsWith(I.trim()))){let I=this.lines[this.index],T=I?.startsWith("@@ ")?I.substring(3):void 0;if(T!==void 0||(I==="@@"?I:void 0)!==void 0)this.index++;else if(g!==0)throw new yt(`Invalid Line:
493
+ ${this.lines[this.index]}`);if(T?.trim()){let L=jr(T.trim());for(let D=g;D<c.length;D++){let F=c[D];if(F&&(jr(F)===L||jr(F.trim())===L)){if(g=D+1,jr(F.trim())===L&&jr(F)!==L)this.fuzz++;break}}}let[_,E,A,C]=l1(this.lines,this.index),[N,M,O]=a1(c,_,g,C);if(N===-1){let L=_.join(`
494
+ `);this.addWarning({path:this.currentPath||l,chunkIndex:u.chunks.length,message:`Could not find matching context (similarity: ${O.toFixed(2)}). Chunk skipped.`,context:L.length>200?`${L.substring(0,200)}...`:L}),this.index=A}else{this.fuzz+=M;for(let L of E)L.origIndex+=N,u.chunks.push(L);g=N+_.length,this.index=A}}return u}parseDelete(i){if(this.checkDuplicate(i,"delete"),!(i in this.currentFiles))throw new yt(`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 yt(`Add File Error: File already exists: ${i}`);this.index++;let l=[],u=[$e.END,$e.UPDATE,$e.DELETE,$e.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 yt(`Invalid Add File line (missing '+'): ${c}`);l.push(c.substring(1))}this.patch.actions[i]={type:"add",newFile:l.join(`
495
+ `),chunks:[]}}}function pv(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=o1(c,u);return(u.length-g)/u.length}function o1(i,l){let u=l.length+1,c=i.length+1,g=Array(u*c).fill(0),b=(T,_)=>g[T*c+_]??0,I=(T,_,E)=>{g[T*c+_]=E};for(let T=0;T<=l.length;T++)I(T,0,T);for(let T=0;T<=i.length;T++)I(0,T,T);for(let T=1;T<=l.length;T++)for(let _=1;_<=i.length;_++)if(l[T-1]===i[_-1])I(T,_,b(T-1,_-1));else I(T,_,1+Math.min(b(T-1,_-1),b(T,_-1),b(T-1,_)));return b(l.length,i.length)}function a1(i,l,u,c){if(l.length===0)return[u,0,1];let g=0,b=(I)=>{let T=jr(l.join(`
496
+ `));for(let E=I;E<i.length;E++){let A=jr(i.slice(E,E+l.length).join(`
497
+ `));if(A===T)return[E,0,1];let C=pv(A,T);if(C>g)g=C}for(let E=I;E<i.length;E++){let A=jr(i.slice(E,E+l.length).map((N)=>N.trimEnd()).join(`
498
+ `)),C=jr(l.map((N)=>N.trimEnd()).join(`
499
+ `));if(A===C)return[E,1,1]}for(let E=I;E<i.length;E++){let A=jr(i.slice(E,E+l.length).map((N)=>N.trim()).join(`
500
+ `)),C=jr(l.map((N)=>N.trim()).join(`
501
+ `));if(A===C)return[E,100,1]}let _=0.66;for(let E=I;E<i.length;E++){let A=jr(i.slice(E,E+l.length).join(`
502
+ `)),C=pv(A,T);if(C>=_)return[E,1000,C];if(C>g)g=C}return[-1,0,g]};if(c){let[I,T,_]=b(i.length-l.length);if(I!==-1)return[I,T,_];return[I,T,_]=b(u),[I,T+1e4,_]}return b(u)}function l1(i,l){let u=l,c=[],g=[],b=[],I=[],T="keep",_=["@@",$e.END,$e.UPDATE,$e.DELETE,$e.ADD,$e.END_FILE];while(u<i.length){let E=i[u];if(!E||_.some((N)=>E.startsWith(N.trim())))break;if(E==="***")break;if(E.startsWith("***"))throw new yt(`Invalid line: ${E}`);u++;let A=T,C=E;if(C[0]==="+")T="add";else if(C[0]==="-")T="delete";else if(C[0]===" ")T="keep";else T="keep",C=` ${C}`;if(C=C.slice(1),T==="keep"&&A!==T){if(b.length||g.length)I.push({origIndex:c.length-g.length,delLines:g,insLines:b});g=[],b=[]}if(T==="delete")g.push(C),c.push(C);else if(T==="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]===$e.END_FILE)return u++,[c,I,u,!0];return[c,I,u,!1]}function l0(i){if(a0.EOL===`\r
503
+ `&&!i.includes("\r"))return i.replaceAll(`
504
+ `,`\r
505
+ `);return i}function _f(i){return i.includes(`\r
506
+ `)?`\r
507
+ `:`
508
+ `}function Om(i,l){return i.split(/\r\n|\n/).join(l)}function Eu(i,l,u){let c=zr.isAbsolute(l),g=c?zr.normalize(l):zr.resolve(i,l);if(!u||c)return g;let b=zr.relative(i,g);if(b.startsWith("..")||zr.isAbsolute(b))throw new yt(`Path must stay within cwd: ${l}`);return g}function d1(i){return i.split(`
509
+ `).map((l)=>l.replace(/\r$/,""))}function mv(i){if(i.trim()==="")return!1;return n1.some((l)=>i.startsWith(l))}function u1(i){let l=0,u=i.length;while(l<u&&mv(i[l]??""))l++;while(u>l&&mv(i[u-1]??""))u--;return i.slice(l,u)}function c1(i){let l=d1(i),u=l.findIndex((b)=>b.startsWith($e.BEGIN)),c=-1;for(let b=l.length-1;b>=0;b--)if(l[b]?.startsWith($e.END)){c=b;break}if(u!==-1||c!==-1){if(u===-1||c===-1||c<u)throw new yt("Invalid patch text - incomplete sentinels. Try breaking it into smaller patches.");return{lines:l.slice(u,c+1)}}let g=u1(l);while(g.length>0&&g[0]==="")g.shift();while(g.length>0&&g[g.length-1]==="")g.pop();return{lines:[$e.BEGIN,...g,$e.END]}}function hv(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 p1(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 yt(`${u}: chunk.origIndex ${I.origIndex} > lines.length ${c.length}`);if(b>I.origIndex)throw new yt(`${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 m1(i,l,u,c){let g=hv(i,[$e.UPDATE,$e.DELETE]),b={},I={};for(let T of g){let _=Eu(l,T,c),E;try{E=await Rr.readFile(_,u)}catch{throw new yt(`File not found: ${T}`)}b[T]=E.replace(/\r\n/g,`
512
+ `),I[T]=_f(E)}for(let T of hv(i,[$e.ADD])){let _=Eu(l,T,c);try{b[T]=await Rr.readFile(_,u)}catch{}}return{files:b,eols:I}}function h1(i,l){let u={},c=l.files,g=(b,I)=>I===void 0?void 0:Om(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 yt("ADD action without file content");u[b]={type:"add",newContent:l0(I.newFile)};break;case"update":u[b]={type:"update",oldContent:g(b,c[b]),newContent:g(b,p1(c[b]??"",I.chunks,b)),movePath:I.movePath};break}return u}function f1(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 g1(i,l,u,c){let g=[];for(let[b,I]of Object.entries(i)){let T=Eu(l,b,c);switch(I.type){case"delete":await Rr.rm(T,{force:!0}),g.push(`${b}: [deleted]`);break;case"add":if(I.newContent===void 0)throw new yt(`Cannot create ${b} with no content`);await Rr.mkdir(zr.dirname(T),{recursive:!0}),await Rr.writeFile(T,I.newContent,{encoding:u}),g.push(b);break;case"update":{if(I.newContent===void 0)throw new yt(`UPDATE change for ${b} has no new content`);if(I.movePath){let _=Eu(l,I.movePath,c);await Rr.mkdir(zr.dirname(_),{recursive:!0}),await Rr.writeFile(_,I.newContent,{encoding:u}),await Rr.rm(T,{force:!0}),g.push(`${b} -> ${I.movePath}`)}else await Rr.writeFile(T,I.newContent,{encoding:u}),g.push(b);break}}}return g}async function y1(i,l,u={}){let{encoding:c="utf-8",restrictToCwd:g=!0}=u,b=c1(i),I=await m1(b.lines,l,c,g),T=new o0(b.lines,I.files),{patch:_,fuzz:E}=T.parse();if(_.warnings&&_.warnings.length>0)throw new yt(f1(_.warnings));return{changes:h1(_,I),fuzz:E}}function v1(i={}){let{encoding:l="utf-8",restrictToCwd:u=!0}=i;return async(c,g,b)=>{let{changes:I,fuzz:T}=await y1(c.input,g,{encoding:l,restrictToCwd:u}),_=await g1(I,g,l,u),E=["Successfully applied patch to the following files:"];for(let A of _)E.push(A);if(T>0)E.push(`Note: Patch applied with fuzz factor ${T}`);return E.join(`
516
+ `)}}function w1(i,l,u){let c=ks.isAbsolute(l),g=c?ks.normalize(l):ks.resolve(i,l);if(!u)return g;if(c)return g;let b=ks.relative(i,g);if(b.startsWith("..")||ks.isAbsolute(b))throw Error(`Path must stay within cwd: ${l}`);return g}function b1(i,l){if(l.length===0)return 0;return i.split(l).length-1}function I1(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,T=g.length;while(I>b&&T>b&&c[I-1]===g[T-1])I--,T--;let _=I-b,E=T-b,A=_,C=E;if(_+E>u)A=Math.min(_,Math.max(Math.ceil(u/2),u-E)),C=Math.min(E,u-A);let N=["```diff"];for(let L=b;L<b+A;L++)N.push(`-${L+1}: ${c[L]}`);for(let L=b;L<b+C;L++)N.push(`+${L+1}: ${g[L]}`);let M=_-A,O=E-C;if(M>0||O>0)N.push(`... diff truncated (${M} more removed, ${O} more added lines) ...`);return N.push("```"),N.join(`
517
+ `)}async function k1(i,l,u){return await _s.mkdir(ks.dirname(i),{recursive:!0}),await _s.writeFile(i,l0(l),{encoding:u}),`File created successfully at: ${i}`}async function S1(i){try{return await _s.access(i),!0}catch{return!1}}async function T1(i,l,u,c,g){let b=await _s.readFile(i,c),I=_f(b),T=Om(l,I),_=Om(u??"",I),E=b1(b,T);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(T,()=>_);await _s.writeFile(i,A,{encoding:c});let C=I1(b,A,g);return`Edited ${i}
518
+ ${C}`}async function _1(i,l,u,c){let g=await _s.readFile(i,c),b=_f(g),I=g.split(/\r\n|\n/),T=I.length+1;if(l<1||l>T)throw Error(`Invalid insert_line: ${l}. insert_line must be a positive one-based boundary line in the range 1-${T}. Use ${T} to append at EOF.`);let _=l-1;return I.splice(_,0,...u.split(/\r\n|\n/)),await _s.writeFile(i,I.join(b),{encoding:c}),`Inserted content at line ${l} in ${i}.`}function E1(i={}){let{encoding:l="utf-8",restrictToCwd:u=!0,maxDiffLines:c=200}=i;return async(g,b,I)=>{let T=w1(b,g.path,u);if(g.insert_line!=null)return _1(T,g.insert_line,g.new_text,l);if(!await S1(T))return k1(T,g.new_text,l);if(g.old_text==null)throw Error(`${T} 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 T1(T,g.old_text,g.new_text,l,c)}}var P1=16777216,M1=5,d0="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 Ef{sessionId;maxBytes;entries=new Map;referencesByToolCall=new Map;iteration=0;bytes=0;constructor(i,l=P1){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=R1(),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(d0);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>=M1)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 u0(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 c0(i){let{textual:l,images:u}=u0(i);return{text:typeof l==="string"?l:JSON.stringify(l,null,2),images:u}}function N1(i){let{textual:l,images:u}=u0(i);return{text:typeof l==="string"?l:l===void 0?void 0:X.stringify(l,{blockQuote:"literal",lineWidth:0}),images:u}}var O1=new Map([[".gif","image/gif"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"]]),$1={maxFileSizeBytes:1e7,encoding:"utf-8",includeLineNumbers:!0},fv=1e8,L1=50000;function gv(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 yv(i,l,u,c,g){if(g?.aborted)throw i.destroy(),gv(g);let b=Math.max(u??1,1),I=c??Number.POSITIVE_INFINITY,T=Number.isFinite(I),_=T?I:b+L1-1,E=[],A=0,C=0,N=!1,M=!1,O=Number.isFinite(I)?Math.min(I,b+Zd-1):b+Zd-1,L=l?String(O).length+3:0,D=C1({input:i,crlfDelay:Number.POSITIVE_INFINITY}),F=g?()=>i.destroy(gv(g)):void 0;if(g&&F)g.addEventListener("abort",F,{once:!0});try{for await(let te of D){if(C+=1,C>I){C=I;break}if(!T&&N&&C>=_){M=!0;break}if(C<b||N)continue;if(E.length>=Zd){N=!0;continue}let ee=te;if(ee.length>Mm)ee=`${ee.slice(0,Mm)} [line truncated]`;let oe=A+ee.length+L+1;if(oe>YS&&E.length>0){N=!0;continue}E.push({lineNumber:C,text:ee}),A=oe}}finally{if(g&&F)g.removeEventListener("abort",F);D.close(),i.destroy()}let j=String(E[E.length-1]?.lineNumber??C).length,B=E.map(({lineNumber:te,text:ee})=>l?`${String(te).padStart(j," ")} | ${ee}`:ee).join(`
519
+ `),Q=E[E.length-1]?.lineNumber;if(Q===void 0)return B;let H=Math.min(I,C);if(Q>=H)return B;let z=M?`${C}+ lines`:H;return`${B}
520
+
521
+ [Showing lines ${b}-${Q} of ${z}. Use start_line/end_line to read other sections.]`}function D1(i={}){let{maxFileSizeBytes:l,encoding:u,includeLineNumbers:c}={...$1,...i};return async(g,b)=>{let{path:I,start_line:T,end_line:_}=g;if(I.startsWith("cline://")){b.signal?.throwIfAborted();let O=b.metadata?.toolResultCache;if(!(O instanceof Ef))throw Error(d0);return yv(x1.from([O.read(I)]),c,T,_,b.signal)}let E=ni.isAbsolute(I)?ni.normalize(I):ni.resolve(process.cwd(),I),A=za(E)??E,C=ni.extname(A).toLowerCase(),N=O1.get(C),M=await fc.stat(A);if(!M.isFile())throw Error(`Path is not a file: ${A}`);if(N){if(M.size>l)throw Error(`Image file too large: ${M.size} bytes (max: ${l} bytes).`);if(b.metadata?.modelSupportsImages!==!0)throw Error("Current model does not support image input");let O=await fc.readFile(A);return[{type:"text",text:"Successfully read image"},{type:"image",data:O.toString("base64"),mediaType:N}]}if(M.size>fv)throw Error(`Text file too large to stream safely: ${M.size} bytes (max: ${fv} bytes). Use a targeted command such as sed, grep, head, or tail to inspect specific sections.`);return yv(A1(A,{encoding:u}),c,T,_,b.signal)}}async function F1(){let i=Qa();return await U1(i,{recursive:!0,mode:448}),i}var H1=`# 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 z1(){let i=Ga();await q1(i,{recursive:!0,mode:448});let l=B1(i,gt);try{await j1(l,H1,{flag:"wx"})}catch(u){if(u.code!=="EEXIST")throw u}return i}async function W1(i){let l=i.cwd?.trim()??"",u=i.workspaceRoot?.trim()??"",c=l||u||await z1();return{...i,cwd:l||c,workspaceRoot:u||c}}var Y1=15000,Q1=600000,Z1=1000,eD=new Set([".git","node_modules","vendor","dist","build",".next","coverage",".turbo",".cache","target","out"]);function wv(i){let l=i&&typeof i==="object"&&"code"in i?String(i.code??""):"";return l==="EACCES"||l==="EPERM"||l==="ENOENT"}var $o=new Map;function tD(){if(!h0)return!1;return!0}function rD(i){if($o.size<=1)return;for(let[l,u]of $o.entries()){if(u.pending)continue;if(i-u.lastAccessedAt>Q1)$o.delete(l)}}async function sD(i){let l=(await new Promise((u,c)=>{let g=K1("rg",["--files","--hidden","-g","!.git"],{cwd:i,stdio:["ignore","pipe","pipe"],windowsHide:!0}),b="",I="";g.stdout.on("data",(T)=>{b+=T.toString()}),g.stderr.on("data",(T)=>{I+=T.toString()}),g.on("error",c),g.on("close",(T)=>{if(T===0){u(b);return}c(Error(I||`rg exited with code ${T}`))})})).split(/\r?\n/).map((u)=>u.trim()).filter((u)=>u.length>0).map((u)=>u.replace(/\\/g,"/"));return new Set(l)}async function f0(i,l,u){let c;try{c=await X1(l,{withFileTypes:!0})}catch(g){if(wv(g))return;throw g}for(let g of c){let b=Au.join(l,g.name);if(g.isDirectory()){if(eD.has(g.name))continue;try{await f0(i,b,u)}catch(I){if(wv(I))continue;throw I}continue}if(g.isFile())u.add(Ft(Au.relative(i,b)))}}async function iD(i){let l=new Set;return await f0(i,i,l),l}function nD(i){let l=(c)=>{try{return G1.native(c)}catch{return Au.resolve(c)}},u=l(i);return u===l(J1.homedir())||u===Au.parse(u).root}async function ru(i){if(nD(i))return new Set;try{return await sD(i)}catch{return iD(i)}}function oD(){if(h0||!vv)return;let i=vv;i.on("message",(l)=>{if(l.type!=="index")return;ru(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 g0{worker=new V1(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:(T)=>{clearTimeout(I),g(T)},reject:(T)=>{clearTimeout(I),b(T)}})}),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)}}oD();var ip;function aD(){if(!tD())return null;if(ip===void 0)ip=new g0;return ip}async function lD(i){let l=aD();if(!l)return ru(i);try{let u=await l.requestIndex(i);if(u===null)return ru(i);return new Set(u)}catch{return ru(i)}}async function y0(i,l={}){let u=l.ttlMs??Y1,c=Date.now();rD(c);let g=$o.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=lD(i).then((I)=>($o.set(i,{files:I,lastBuiltAt:Date.now(),lastAccessedAt:Date.now(),pending:null}),I));return $o.set(i,{files:g?.files??new Set,lastBuiltAt:g?.lastBuiltAt??0,lastAccessedAt:c,pending:b}),b}var uD=new Set("),.:;!?`'\""),cD=/^[(`'"]+/;function pD(i){let l=i.length;while(l>0&&uD.has(i.charAt(l-1)))l-=1;return i.slice(0,l)}function mD(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=pD(g.replace(cD,""));if(b.length===0||b.includes("@"))continue;u.push(b)}return Array.from(new Set(u))}function hD(i,l){let u=i.replace(/\\/g,"/"),c=uo.isAbsolute(u)?uo.resolve(u):uo.resolve(l,u),g=uo.relative(l,c);if(g.startsWith("..")||uo.isAbsolute(g))return;return Ft(g)}async function fD(i,l,u={}){let c=mD(i);if(c.length===0)return{prompt:i,mentions:[],matchedFiles:[],ignoredMentions:[]};let{maxFiles:g,maxFileBytes:b,maxTotalBytes:I}=u,T=await y0(l,{ttlMs:u.ttlMs}),_=[],E=[],A=[],C=0;for(let N of c){if(g&&A.length>=g){E.push(N);continue}let M=hD(N,l);if(!M||!T.has(M)){E.push(N);continue}if(!b||!I){_.push(M);continue}let O=uo.join(l,M);try{if(!(await dD(O)).isFile()){E.push(N);continue}let L=C+b;if(L>I){E.push(N);continue}C=L,_.push(M)}catch{E.push(N)}}return{prompt:i,mentions:c,matchedFiles:_,ignoredMentions:E}}var gD=10485760,yD=["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"],vD=["node_modules","vendor",".git","dist","build",".next","coverage","__pycache__",".venv","venv",".cache",".turbo",".output","out","target","bin","obj"],fi=null;function wD(){if(fi!==null)return Promise.resolve(fi);return new Promise((i)=>{let l=p0("rg",["--version"],{stdio:["ignore","pipe","pipe"],windowsHide:!0});l.on("close",(u)=>{fi=u===0,i(fi)}),l.on("error",()=>{fi=!1,i(!1)}),setTimeout(()=>{if(!l.killed)l.kill("SIGTERM");if(fi===null)fi=!1,i(!1)},1000)})}function bD(i,l,u,c,g=5000,b){return new Promise((I)=>{let T=p0("rg",["--json",`--context=${c}`,"--max-count=1","-i",i],{cwd:l,stdio:["ignore","pipe","pipe"],windowsHide:!0}),_="",E=!1,A=()=>{if(!T.killed)T.kill("SIGTERM")},C=setTimeout(()=>{if(!E)E=!0,A(),I(null)},g),N=(M)=>{if(!E)E=!0,clearTimeout(C),A(),I(M)};if(b?.aborted){A(),I(null);return}b?.addEventListener("abort",()=>{N(null)}),T.stdout.on("data",(M)=>{if(_.length>gD)return;_+=M.toString()}),T.stderr.on("data",()=>{}),T.on("close",(M)=>{if(M===0||M===1){try{let O=[],L=_.slice(0,_.lastIndexOf(`
540
+ `)+1).split(`
541
+ `).filter((D)=>D.trim());for(let D of L){if(O.length>=u)break;let F=JSON.parse(D);if(F.type==="match"){let j=F.data,B=[];if(F.data.submatches&&F.data.submatches.length>0){let Q=F.data.submatches[0];O.push({file:j.path.text,line:j.line_number,column:(Q?.start??0)+1,match:Q?.match?.text??"",context:B})}}else if(F.type==="context"&&O.length>0){let j=O[O.length-1],B=F.data.line_number===j.line?">":" ";j.context.push(`${B} ${F.data.line_number}: ${F.data.lines?.text??F.data.line?.text??""}`)}}N(O.length>0?O:null)}catch{N(null)}return}N(null)}),T.on("error",()=>{N(null)})})}function ID(i,l,u,c){let g=i.split("/"),b=g[g.length-1]??"";if(g.length-1>c)return!1;for(let T=0;T<g.length-1;T++)if(l.has(g[T]??""))return!1;let I=gc.posix.extname(b).slice(1).toLowerCase();return u.has(I)||!I&&!b.startsWith(".")}function kD(i={}){let{includeExtensions:l=yD,excludeDirs:u=vD,maxResults:c=100,contextLines:g=2,maxDepth:b=20}=i,I=new Set(u),T=new Set(l.map((_)=>_.toLowerCase()));return async(_,E,A)=>{if(A.signal?.aborted)throw Error("Search operation aborted");let C=await wD(),N=null;if(C)N=await bD(_,E,c,g,5000,A.signal);if(N){let j=[`Found ${N.length} result${N.length===1?"":"s"} for pattern: ${_}`,""];for(let B of N)j.push(`${B.file}:${B.line}:${B.column}`),j.push(...B.context),j.push("");if(N.length>=c)j.push(`(Showing first ${c} results. Refine your search for more specific results.)`);return bv(j.join(`
542
+ `))}let M;try{M=new RegExp(_,"gim")}catch(j){throw Error(`Invalid regex pattern: ${_}. ${j instanceof Error?j.message:""}`)}let O=[],L=0,D=await y0(E);for(let j of D){if(A.signal?.aborted)throw Error("Search operation aborted");if(!ID(j,I,T,b))continue;if(O.length>=c)break;L++;let B=gc.join(E,j);try{let Q=(await m0.readFile(B,"utf-8")).split(`
543
+ `);for(let H=0;H<Q.length;H++){let z=Q[H];M.lastIndex=0;let te=M.exec(z);while(te!==null){if(O.length>=c)break;let ee=Math.max(0,H-g),oe=Math.min(Q.length-1,H+g),G=[];for(let se=ee;se<=oe;se++){let Ne=se===H?">":" ";G.push(`${Ne} ${se+1}: ${Q[se].slice(0,Mm)}`)}if(O.push({file:j,line:H+1,column:te.index+1,match:te[0],context:G}),te.index===M.lastIndex)M.lastIndex++;te=M.exec(z)}}}catch{}}if(O.length===0)return`No results found for pattern: ${_}
544
+ Searched ${L} files.`;let F=[`Found ${O.length} result${O.length===1?"":"s"} for pattern: ${_}`,`Searched ${L} files.`,""];for(let j of O)F.push(`${j.file}:${j.line}:${j.column}`),F.push(...j.context),F.push("");if(O.length>=c)F.push(`(Showing first ${c} results. Refine your search for more specific results.)`);return bv(F.join(`
545
+ `))}}function bv(i){if(i.length<=eu)return i;let l=Math.ceil(eu/2),u=Math.max(1,eu-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 SD(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 TD(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,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(_.signal)N=()=>A.abort(),_.signal.addEventListener("abort",N);try{let M=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&&M.status>=300&&M.status<400)return`Redirect to: ${M.headers.get("location")}`;if(!M.ok)throw Error(`HTTP ${M.status}: ${M.statusText}`);let O=M.headers.get("content-type")||"",L=M.body?.getReader();if(!L)throw Error("Failed to read response body");let D=[],F=0;while(!0){let{done:te,value:ee}=await L.read();if(te)break;if(F+=ee.length,F>u)throw L.cancel().catch(()=>{}),Error(`Response too large: exceeded ${u} bytes`);D.push(ee)}let j=new Uint8Array(F),B=0;for(let te of D)j.set(te,B),B+=te.length;let Q=new TextDecoder("utf-8").decode(j),H;if(O.includes("text/html")||O.includes("application/xhtml"))H=SD(Q);else if(O.includes("application/json"))try{let te=JSON.parse(Q);H=JSON.stringify(te,null,2)}catch{H=Q}else H=Q;let z=[`URL: ${I}`,`Content-Type: ${O}`,`Size: ${F} bytes`,"","--- Content ---",H.slice(0,50000)];if(H.length>50000)z.push(`
552
+ [Content truncated: showing first 50000 of ${H.length} characters]`);return z.push("","--- Analysis Request ---",`Prompt: ${T}`),z.join(`
553
+ `)}catch(M){if(clearTimeout(C),M instanceof Error){if(M.name==="AbortError")throw Error(`Request timed out after ${l}ms`);throw M}throw Error(`Fetch failed: ${String(M)}`)}finally{if(_.signal&&N)_.signal.removeEventListener("abort",N)}}}class v0{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 _D(i={}){return qL(i)}function ED(i={}){return{readFile:D1(i.fileRead),search:kD(i.search),bash:_D(i.bash),webFetch:TD(i.webFetch),applyPatch:v1(i.applyPatch),editor:E1(i.editor)}}var AD={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"},CD=[{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 Iv(i,l){if(!l||l.length===0)return!0;let u=i.toLowerCase();return l.some((c)=>u.includes(c.toLowerCase()))}function xD(i,l,u,c){if(i.mode&&i.mode!=="any"&&i.mode!==c)return!1;return Iv(l,i.providerIdIncludes)&&Iv(u,i.modelIdIncludes)}function RD(i,l,u,c){if(!c||c.length===0)return{};let g=new Map;for(let I of c){if(!xD(I,i,l,u))continue;for(let T of I.disableTools??[])g.set(T,!1);for(let T of I.enableTools??[])g.set(T,!0)}let b={};for(let[I,T]of g.entries())b[AD[I]]=T;return b}var Af={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 Cf(i){if(i.mode==="plan")return"plan";if(i.mode==="yolo")return"yolo";return"act"}var Es=(i)=>new RegExp(i,"iu"),MD=[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(Es),ND=Es(String.raw`\b(?:stuck|hung|hanging|frozen|unresponsive|not\s+responding|no\s+response)\b|卡住|卡了|没反应|不动了`),OD=Es(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}$`),$D=Es(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`),LD=Es(String.raw`^(?:hello+|hi+|hey+|ping|yo|你好|在吗)\s*[??!.]*$`),DD=Es(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`),UD=Es(String.raw`(?:[.!?:;)\]}"'\x60*>|_~。!?:)」』…]|[←-⯿\u{1F000}-\u{1FAFF}☀-➿️])\s*$`),FD=Es(String.raw`\n\s*(?:[-*•]|\d+[.)])\s+\S[^\n]*$`),qD=Es(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`),jD=Es(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*$`),BD=Es(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 HD(i){let l=i.trim(),u=Array.from(l).length;if(!l||u>200)return"none";if(MD.some((c)=>c.test(l)))return"probe";if(u<=40&&ND.test(l))return"probe";if(u<=80&&OD.test(l))return"nudge";if($D.test(l))return"nudge";if(LD.test(l))return"greeting";return"none"}function zD(i){let l=i.trimEnd();if(!l)return"empty_turn";if(l.length<600&&DD.test(l))return"api_error";if((l.split("```").length-1)%2===1)return"truncated_text";if(!UD.test(l)&&!FD.test(l))return"truncated_text";let u=l.slice(l.lastIndexOf(`
554
+
555
+ `)+1);if(qD.test(u))return"async_promise";if(jD.test(u)&&!BD.test(u.slice(-300)))return"intent_without_action";return"none"}var kv=60000;function WD(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 KD(i){return i.content.map((l)=>l.type==="text"?l.text:"").join("")}class w0{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?WD(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:zD(this.turnMessage?KD(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+kv-Date.now();this.idleTimer=setTimeout(()=>{let l=Date.now()-this.lastEventAt;if(l<kv){this.scheduleIdleCheck();return}this.idleReported=!0,this.idleTimer=void 0,DA(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 b0=8000,GD=50000,XD=6000000,JD=200000,VD=12000,YD=65536,Ol=2000,Sv=40000,QD=8,np={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"]),gi="[outdated - see the latest file content]",Tv="Tool execution was interrupted before a result was produced.",_v=(i)=>`
556
+
557
+ ...[truncated ${i} chars]...
558
+
559
+ `,$l=(i)=>`
560
+
561
+ ...[truncated ${i} chars to fit provider request budget]...
562
+
563
+ `,eU=(i)=>`
564
+
565
+ ...[assistant text truncated: omitted ${i} chars]...
566
+
567
+ `,Ev=(i)=>`
568
+
569
+ ...[assistant text truncated: omitted ${i} chars to fit provider request budget]...
570
+
571
+ `,tU=(i)=>`
572
+
573
+ ...[assistant text truncated: omitted ${i} chars due to repeated tool-call markup]...
574
+
575
+ `;function rU(i=process.env){return{maxToolResultChars:Cv(i[np.maxToolResultChars]),maxTotalTextBytes:Cv(i[np.maxTotalTextBytes]),minOutdatedRewriteBytes:iU(i[np.minOutdatedRewriteBytes])}}class I0{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=ol(i.maxToolResultChars,b0),this.maxFileContentChars=ol(i.maxFileContentChars,GD),this.maxTotalTextBytes=ol(i.maxTotalTextBytes,XD),this.mediaBudget=i.mediaBudget??{},this.maxAssistantTextChars=ol(i.maxAssistantTextChars,JD),this.maxAssistantToolMarkupChars=ol(i.maxAssistantToolMarkupChars,VD),this.minOutdatedRewriteBytes=nU(i.minOutdatedRewriteBytes,YD)}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=xe(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 T=this.transformBlock(I,c.role);if(T!==I)g=!0;return T});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=xe(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=Cl(i.content,this.maxFileContentChars,_v);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}=c0(i.content);if(typeof b==="string"&&b.length>this.maxToolResultChars){let T=[{type:"text",text:this.truncateMiddle(b)},...I];if(c.uri){let _={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=ze(_.text);if(this.recoveryNoticeBytes+E<=this.maxTotalTextBytes/2)this.recoveryNoticeBytes+=E,this.recoveryNotices.add(_),T.push(_)}return{...i,content:T}}}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((T)=>b.has(this.toReadLocatorKey(T))&&this.isOutdatedReadLocator(T,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 T=this.extractLocatorsFromReadToolInput(b.input);if(T.length>0)this.readLocatorsByToolUseIdCache.set(b.id,T)}}else if(b.type==="tool_result"){let I=this.resolveToolName(b);if(!this.isReadTool(I)||b.is_error===!0)continue;let T=this.getReadLocators(b);for(let _ of T)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(_),b.tool_use_id),this.isFullFileRead(_))this.latestFullContentOwnerByPathCache.set(_.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 T=this.committedOutdatedRewrites.get(b.tool_use_id),_=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),!T?.has(N))_.add(N)}if(T){for(let C of T)if(!E.has(C))T.delete(C);if(T.size===0)this.committedOutdatedRewrites.delete(b.tool_use_id)}if(_.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 _)A.add(C);c+=this.estimateOutdatedReclaimBytes(b.content,_)}}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 T of b)I.add(T)}}estimateOutdatedReclaimBytes(i,l){let u=this.extractReadLocatorsFromToolResultContent(i),c=u.length>0&&u.every((_)=>l.has(this.toReadLocatorKey(_))),g=(_)=>{let E;try{E=JSON.parse(_)}catch{return c||u.length===0?ze(this.truncateMiddle(_)):0}let A=Array.isArray(E)?E:[E],C=0;for(let N of A){let M=this.extractLocatorFromResultEntry(N);if(M&&l.has(this.toReadLocatorKey(M)))C+=this.providerBoundEntryBytes(N)}return C};if(typeof i==="string")return g(i);let b=new Set(l),I=0;for(let _ of i)if(_.type==="text")I+=this.countOutdatedImageEntries(_.text,b);let T=0;for(let _ of i)if(_.type==="text")T+=g(_.text);else if(_.type==="image"){if(I>0)I-=1,T+=ze(_.data)}else if(Js(_)){let E=this.extractLocatorFromResultEntry(_);if(E&&l.has(this.toReadLocatorKey(E)))T+=this.providerBoundEntryBytes(_)}else if(_.type==="file"){if(l.has(this.toReadLocatorKey({path:_.path,startLine:null,endLine:null})))T+=ze(this.truncateMiddle(_.content))}return T}providerBoundEntryBytes(i){let l=this.truncateNestedStrings(i);return ze(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=(T)=>{let _=u.at(-1);if(this.shouldMergeUserAfterToolResults(_,T)){u[u.length-1]={..._,content:[..._.content,...this.contentBlocksForUserMerge(T.content)]},g=!0;return}u.push(T)};for(let T of i){if(this.isToolResultOnlyMessage(T)){if(I(this.appendMissingToolResults(T,c)),c.size>0)c.clear(),g=!0;continue}if(Array.isArray(T.content)){let _=T.content.filter((A)=>A.type==="tool_result"),E=T.content.filter((A)=>A.type!=="tool_result");if(_.length>0){let A=this.appendMissingToolResults({...T,role:"user",content:_},c);if(I(A),c.size>0)c.clear();g=!0}if(E.length>0||_.length===0){if(_.length===0)b();let A=_.length>0?{...T,content:E}:T;if(I(A),A.role==="assistant")this.trackMissingToolCalls(A,l,c)}continue}b(),I(T)}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?`${Tv} Tool: ${i}.`:Tv}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(Js(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)??gi;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:gi}}if(b.type==="image"){if(g===0)return b;return g-=1,{type:"text",text:gi}}if(Js(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:gi};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,T=this.extractLocatorFromResultEntry(I);if(!T)continue;if(!l.has(this.toReadLocatorKey(T)))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=gi;else if(typeof c.content==="string")c.content=gi;else c.result=gi;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(Js(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(xf(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 Cl(i,this.maxToolResultChars,_v)}truncateAssistantText(i){if(this.hasRepeatedToolCallMarkup(i))return Cl(i,this.maxAssistantToolMarkupChars,tU);return Cl(i,this.maxAssistantTextChars,eU)}hasRepeatedToolCallMarkup(i){if(i.length<=this.maxAssistantToolMarkupChars)return!1;let l=0;for(let u of i.matchAll(sU))if(l+=1,l>=QD)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 T=aU(I);if(I.type==="tool_result"&&T.type==="tool_result"&&Array.isArray(I.content)&&Array.isArray(T.content))I.content.forEach((_,E)=>{if(this.recoveryNotices.has(_))this.recoveryNotices.add(T.content[E])});return T})}}),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,T=Math.min(b.minBytes,g);if(I<=T)continue;let _=l-this.maxTotalTextBytes,E=Math.max(T,I-_),A=oU(b.get(),E,b.makeMarker);b.set(A),l-=I-ze(A)}return u}countMessageTextBytes(i){let l=0;for(let u of i){if(typeof u.content==="string"){l+=ze(u.content);continue}for(let c of u.content)if(c.type==="text")l+=ze(c.text);else if(c.type==="thinking")l+=ze(c.thinking);else if(c.type==="file")l+=ze(c.content);else if(c.type==="tool_use")l+=Cu(c.input);else if(c.type==="tool_result"){if(typeof c.content==="string")l+=ze(c.content);else for(let g of c.content)if(g.type==="text")l+=ze(g.text);else if(g.type==="file")l+=ze(g.content);else if(Js(g))l+=Cu(g)}}return l}collectTruncationCandidates(i){let l=[],u=[];for(let c of i){if(c.role==="assistant"&&typeof c.content==="string"){l.push({byteLength:ze(c.content),minBytes:Sv,makeMarker:Ev,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"){xu(g.input,u);continue}if(c.role==="assistant"&&g.type==="text"){l.push({byteLength:ze(g.text),minBytes:Sv,makeMarker:Ev,get:()=>g.text,set:(b)=>{g.text=b}});continue}if(g.type!=="tool_result")continue;if(typeof g.content==="string"){l.push({byteLength:ze(g.content),minBytes:Ol,makeMarker:$l,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:ze(b.text),minBytes:Ol,makeMarker:$l,get:()=>b.text,set:(I)=>{b.text=I}});else if(b.type==="file")l.push({byteLength:ze(b.content),minBytes:Ol,makeMarker:$l,get:()=>b.content,set:(I)=>{b.content=I}});else if(Js(b))xu(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=di(),c=!1,g=i.map((b)=>{if(!Array.isArray(b.content))return b;let I=!1,T=b.content.map((_)=>{let E=this.applyMediaBudgetToBlock(_,l,u);if(E!==_)I=!0;return E});if(!I)return b;return c=!0,{...b,content:T}});return c?g:i}resolveMediaBudget(){return So(this.mediaBudget)}applyMediaBudgetToBlock(i,l,u){if(op(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(op(i))return this.limitImageContent(i,l,u);if(Js(i))return this.limitNestedMedia(i,l,u);return i}limitNestedMedia(i,l,u){if(op(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 T=this.limitNestedMedia(I,l,u);if(T!==I)c=!0;g[b]=T}return c?g:i}return i}limitImageContent(i,l,u){if(!k0(i))return{type:"text",text:dn};let c=mi(i.mediaType,i.data,{maxImageEncodedBytes:l.maxImageEncodedBytes,maxImageDecodedBytes:l.maxImageDecodedBytes,maxTotalMediaBytes:l.maxTotalMediaBytes},u);if(!c.ok)return{type:"text",text:dn};return{...i,data:c.base64,mediaType:c.mediaType}}}var Av=String.raw`[\|\uFF5C]`,sU=new RegExp(String.raw`<\s*(?:${Av}\s*)?DSML\s*(?:${Av}\s*)?(?:tool_calls|invoke)\b[^>]*>|<\s*/?\s*(?:tool_calls?|tool_call|function_calls?|function_call|invoke)\b[^>]*>`,"gi");function ze(i){return Buffer.byteLength(i,"utf8")}function Cv(i){if(i===void 0)return;let l=Number.parseInt(i,10);return Number.isFinite(l)&&l>0?l:void 0}function iU(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 ol(i,l){return typeof i==="number"&&Number.isFinite(i)&&i>0?Math.floor(i):l}function nU(i,l){if(typeof i!=="number"||Number.isNaN(i)||i<0)return l;return Number.isFinite(i)?Math.floor(i):i}function Cl(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),T=Math.max(0,Math.floor((l-I.length)/2)),_=i.slice(0,T),E=T>0?i.slice(-T):"";return`${_}${I}${E}`}function oU(i,l,u){if(ze(i)<=l)return i;let c=0,g=i.length,b="";while(c<=g){let I=c+g>>>1,T=Cl(i,I,u);if(ze(T)<=l)b=T,c=I+1;else g=I-1}return b}function aU(i){if(i.type==="tool_use")return{...i,input:Ru(i.input)};if(i.type!=="tool_result"||typeof i.content==="string")return{...i};return{...i,content:i.content.map((l)=>Js(l)?Ru(l):{...l})}}function Js(i){if(i===null||typeof i!=="object")return!1;let l=i.type;return l!=="text"&&l!=="image"&&l!=="file"}function op(i){return i!==null&&typeof i==="object"&&i.type==="image"}function k0(i){return i!==null&&typeof i==="object"&&i.type==="image"&&typeof i.data==="string"&&typeof i.mediaType==="string"}function xf(i){return k0(i)}function Cu(i){if(typeof i==="string")return ze(i);if(Array.isArray(i)){let l=0;for(let u of i)l+=Cu(u);return l}if(i!==null&&typeof i==="object"){if(xf(i))return 0;let l=0;for(let u of Object.values(i))l+=Cu(u);return l}return 0}function xu(i,l){if(Array.isArray(i)){i.forEach((u,c)=>{if(typeof u==="string")l.push({byteLength:ze(u),minBytes:Ol,makeMarker:$l,get:()=>i[c],set:(g)=>{i[c]=g}});else xu(u,l)});return}if(i!==null&&typeof i==="object"){if(xf(i))return;let u=i;for(let c of Object.keys(u)){let g=u[c];if(typeof g==="string")l.push({byteLength:ze(g),minBytes:Ol,makeMarker:$l,get:()=>u[c],set:(b)=>{u[c]=b}});else xu(g,l)}}}function Ru(i){if(Array.isArray(i))return i.map(Ru);if(i!==null&&typeof i==="object"){let l={};for(let[u,c]of Object.entries(i))l[u]=Ru(c);return l}return i}function ap(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class S0{messages=[];conversationId=ap();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=ap(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=ap(),this.sessionStarted=!1}restore(i){this.messages=[...i],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function lU(i){let{agentConfig:l}=i,u=dU(l),c=uU(l),g=i.hooks,b=cU(l.maxParallelToolCalls);return{distinctId:l.distinctId,clientName:l.extensionContext?.client?.name,clientVersion:l.extensionContext?.client?.version,clineCoreVersion:Gh,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 dU(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 uU(i){let l=i.providerConfig?.family;return{id:i.modelId,provider:i.providerId,family:l}}function cU(i){if(i===void 0)return;return i>=2?"parallel":"sequential"}function Rf(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 pU(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function mU(i){i.lastToolName="",i.lastToolSignature="",i.consecutiveIdenticalCount=0}function $m(i){if(i==null||typeof i!=="object")return i;if(Array.isArray(i))return i.map($m);let l={};for(let u of Object.keys(i).sort())l[u]=$m(i[u]);return l}function hU(i){if(i==null)return"null";if(typeof i==="string")return i;if(typeof i!=="object")return String(i);try{return JSON.stringify($m(i))}catch{return String(i)}}function fU(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 xv={softThreshold:3,hardThreshold:5};class T0{config;state=pU();constructor(i){this.config={softThreshold:i?.softThreshold??xv.softThreshold,hardThreshold:i?.hardThreshold??xv.hardThreshold}}inspect(i){let l=hU(i.input),u=fU(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(){mU(this.state)}}class _0{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 yU(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:gU({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 gU(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 yU(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 vU(i){switch(i){case"auto_compaction":case"manual_compaction":case"compaction_budget_emergency":return i;default:return}}function wU(i){let l=i.content.filter((u)=>u.type==="text");if(l.length===0)return;return l.map((u)=>u.text).join("")}function bU(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 IU(i){return i.content.find((l)=>l.type==="tool-result")}function kU(i){switch(i){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function SU(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 E0{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:vU(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=wU(i);if(u!==void 0)l.push({type:"content_end",contentType:"text",text:u});let c=bU(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=IU(i.message),g=c?.output,b=SU(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,T=this.lastUsage.reasoningTokenCount??0,_=(i.reasoningTokenCount??0)-T;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:_===0?void 0:Math.max(0,_),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:kU(i.status),text:i.outputText,iterations:i.iterations,usage:l}]}}var TU="session_run_in_progress";class A0 extends Error{agentId;code=TU;constructor(i){super(`SessionRuntime.shutdown called while a run is in progress${i?` (agentId=${i})`:""}`);this.agentId=i,this.name="SessionRunInProgressError"}}function _U(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 EU(i){let l=(typeof i.content==="function"?await i.content():i.content).trim();return l.length>0?l:void 0}function AU(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 CU(i,l){let u=l?.["*"]??{},c=l?.[i]??{};return{...u,...c}.enabled!==!1}function xU(i,l){return i.filter((u)=>CU(u.name,l))}function Rv(i,l){return rc(xU(i,l))}function RU(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((T)=>Boolean(T?.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:Nn(g?.options,I.options)},c={...c,...I.messages?{messages:I.messages}:{},...I.tools?{tools:I.tools}:{},...I.options?{options:Nn(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 yc{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 E0;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_${PD()}`,this.parentAgentId=i.parentAgentId,this.logger=l.logger??i.logger,this.telemetry=l.telemetry??i.telemetry,this.createAgentRuntimeImpl=l.createAgentRuntimeImpl??Cn,this.conversation=new S0(i.initialMessages),this.toolResultCache=new Ef(i.sessionId??this.agentId);let u=rU();this.maxCachedResultChars=u.maxToolResultChars??b0,this.messageBuilder=new I0({...u,getToolResultRecovery:(I)=>this.cacheableToolNames.has(I.name??"")?{uri:this.toolResultCache.uriFor(I.tool_use_id)}:void 0}),this.contributionRegistry=Nt({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 _0({maxConsecutiveMistakes:c,onLimitReached:i.onConsecutiveMistakeLimitReached,onLimitTelemetry:(I)=>{LA(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,T,_)=>PU(this.logger,I,T,_),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(I,T)=>{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 T0(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=Rf(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 A0(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 EU(u);if(c)l.push(c)}return AU(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{JA(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||!Ii(l.text))return l;if(!await this.config.onAuthError().catch(()=>!1))return l;let u=await this.executeRunInternal({isContinue:!0});return CA(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 H=await NU(u,i.userImages,i.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({id:crypto.randomUUID(),role:"user",content:H})}let c=aN(this.config,this.logger,this.telemetry),g=new Map;for(let H of this.contributionRegistry.getRegisteredTools())g.set(H.name,H);let b=Rv([...g.values()],this.config.toolPolicies),I=new Map;for(let H of b)I.set(H.name,H);for(let H of this.config.tools)I.set(H.name,H);let T=this.conversation.getConversationId(),_=Pv(this.config),E=Zo(_??{})||!er(_??{}),A=Rv(Array.from(I.values()),this.config.toolPolicies),C=E?[]:A,N=await this.composeSystemPrompt(new Set(C.map((H)=>H.name))),M=Wc(this.conversation.getMessages());this.cacheableToolNames=new Set(C.filter((H)=>H.resultPolicy==="cache-oversized").map((H)=>H.name.toLowerCase()));let O=this.telemetry&&new w0(this.telemetry,{sessionId:this.config.sessionId,isSubagent:Boolean(this.parentAgentId),providerId:this.config.providerId,modelId:this.config.modelId}),L=lU({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:T,parentAgentId:this.parentAgentId,model:c,logger:this.logger,telemetry:this.telemetry,runEndTelemetryProperties:O?()=>O.endProperties():void 0,tools:C,toolContextMetadata:{modelSupportsImages:Wt(_??{}),...this.config.toolContextMetadata,toolResultCache:this.toolResultCache},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(_,C),initialMessages:M,completionPolicy:E?null:void 0,systemPrompt:N}),D=this.createAgentRuntimeImpl(L);this.activeRuntime=D;let F=D.subscribe((H)=>{if(H.type==="run-started"&&this.abortRequested)D.abort(this.abortReason);O?.observe(H),this.handleRuntimeEvent(H)});if(this.config.abortSignal)if(this.config.abortSignal.aborted)this.handleExternalAbort();else this.config.abortSignal.addEventListener("abort",this.handleExternalAbort,{once:!0});let j,B;try{if(i.isContinue)j=await D.continue(void 0);else j=await D.run("")}catch(H){B=H instanceof Error?H:Error(String(H))}finally{F(),O?.dispose(),this.config.abortSignal?.removeEventListener("abort",this.handleExternalAbort);try{await this.activeTrackerWork}catch(H){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:H})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(j&&j.messages.length>0){let H=Sd(j.messages);this.conversation.replaceMessages(H)}let Q=new Date;try{return this.buildLegacyResult({runResult:j,thrownError:B,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=RU([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}=c0(sS(b.output));if(typeof I==="string"&&I.length>this.maxCachedResultChars){let{text:T}=N1(b.output);if(typeof T==="string")this.toolResultCache.store(u.toolCall.toolCallId,T)}}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=Sd(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:Wc(I.messages)}:{},...I.systemPrompt!==void 0?{systemPrompt:I.systemPrompt}:{}}}}async prepareMessagesForModelRequest(i){let l=await this.prepareProviderMessagesForApi(iS(i));return Wc(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((_)=>_.type==="tool-result"),b=g?.type==="tool-result"&&g.isError===!0,I=b?_U(g?.type==="tool-result"?g.output:void 0):void 0,T={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(T),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(Sd(i));return}if(l.length===0)return;let u=new Set(this.conversation.getMessages().map((g)=>g.id).filter((g)=>typeof g==="string")),c=Sd(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":MU(l),T=(l?.status==="failed"?l.error?.message:void 0)||l?.outputText||"",_=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=Pv(this.config);if(u)throw u;return{text:T,usage:_,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 PU(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 MU(i){if(!i)return"error";switch(i.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function NU(i,l,u,c){return await Promise.resolve(),UE(i,l,u,c)}function Pv(i){return aS(i)?.[i.modelId]}function OU(i,l){let u=i.trim();if(l.providerId.toLowerCase()!=="cline")return u;return Ke({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 $U(i,l){let u=i.trim();if(l.providerId.toLowerCase()!=="cline")return u;return Ke({ide:l.clineIdeName||"Terminal",workspaceRoot:l.cwd?.trim()||"/",providerId:l.providerId,overridePrompt:u,metadata:l.workspaceMetadata,platform:l.clinePlatform})}function C0(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 x0(i){let l=i.configProvider.getRuntimeConfig(),u=i.kind==="teammate"?OU(i.prompt,l):$U(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 R0(i){let l=x0(i),u=new yc(l);if(l.onEvent)u.subscribeEvents(l.onEvent);return u}var LU=t({systemPrompt:e().describe("System prompt defining the sub-agent's behavior"),task:e().describe("Task for the sub-agent to complete")});function P0(i){return k({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(LU),execute:async(l,u)=>{let c=i.createSubAgentTools?await i.createSubAgentTools(l,u):i.subAgentTools??[],g=R0({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(),T=u.agentId;if(i.onSubAgentStart)try{await i.onSubAgentStart({subAgentId:b,conversationId:I,parentAgentId:T,input:l})}catch{}try{let _=await g.run(l.task),E={text:_.text,iterations:_.iterations,finishReason:_.finishReason,usage:{inputTokens:_.usage.inputTokens,outputTokens:_.usage.outputTokens}};if(i.onSubAgentEnd)try{await i.onSubAgentEnd({subAgentId:b,conversationId:I,parentAgentId:T,input:l,result:E,agentResult:_})}catch{}return E}catch(_){if(i.onSubAgentEnd)try{await i.onSubAgentEnd({subAgentId:b,conversationId:I,parentAgentId:T,input:l,error:_ instanceof Error?_:Error(String(_))})}catch{}throw _}},timeoutMs:300000,retryable:!1})}function Qr(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 M0(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 yi(i,l){if(i===void 0)throw Error(`Missing required field: ${l}`);return i}function DU(i){let l=i.result;if(!l)return;return{textPreview:M0(l.text,us),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 Ad(i){return i?.toISOString()}function lp(i){return{id:i.id,agentId:i.agentId,taskId:i.taskId,status:i.status,messagePreview:M0(i.message,ls),priority:i.priority,retryCount:i.retryCount,maxRetries:i.maxRetries,nextAttemptAt:Ad(i.nextAttemptAt),continueConversation:i.continueConversation,startedAt:i.startedAt.toISOString(),endedAt:Ad(i.endedAt),leaseOwner:i.leaseOwner,heartbeatAt:Ad(i.heartbeatAt),lastProgressAt:Ad(i.lastProgressAt),lastProgressMessage:i.lastProgressMessage,currentActivity:i.currentActivity,error:i.error,resultSummary:DU(i)}}function UU(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 FU=["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 N0(i){let l=[];if(i.createBaseTools)l.push(...i.createBaseTools());l.push(...Pf({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:x0({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 qU(i){let l=i.leadAgentId??"lead",u=i.restoredFromPersistence===!0,c=Pf({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;N0({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 Pf(i){let l=i.allowSpawn??!0,u=i.includeSpawnTool??!0,c=i.includeManagementTools??!0,g=[];if(u)g.push(k({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:S(ka),execute:async(I)=>{let T=y(ka,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 _={agentId:T.agentId,rolePrompt:T.rolePrompt};if(N0({runtime:i.runtime,requesterId:i.requesterId,teammateConfigProvider:i.teammateConfigProvider,createBaseTools:i.createBaseTools,spec:_}),!c)i.onLeadToolsUnlocked?.(Pf({...i,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return y($a,{agentId:T.agentId,status:"spawned"})}}));if(!c)return g;g.push(k({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:S(Ia),execute:async(I)=>{let T=y(Ia,I);if(i.runtime.getMemberRole(i.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return i.runtime.shutdownTeammate(T.agentId,T.reason),y($a,{agentId:T.agentId,status:"stopped"})}})),g.push(k({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:S(Sa),execute:async(I)=>(y(Sa,I),y(ds,i.runtime.getSnapshot()))})),g.push(k({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(Ea),execute:async(I)=>{let T=y(Ea,I);switch(T.action){case"create":{let _=new Set(ps.create??[]),E=Object.entries(I).filter(([C,N])=>_.has(C)&&N!=null).map(([C])=>C),A=i.runtime.createTask({title:yi(T.title,"title"),description:yi(T.description,"description"),dependsOn:T.dependsOn,assignee:T.assignee,createdBy:i.requesterId});return y(Et,{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(Et,{action:"list",tasks:i.runtime.listTaskItems({status:T.status,assignee:T.assignee})});case"claim":{let _=i.runtime.claimTask(yi(T.taskId,"taskId"),i.requesterId);return y(Et,{action:"claim",taskId:_.id,status:_.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 _=i.runtime.completeTask(yi(T.taskId,"taskId"),i.requesterId,yi(T.summary,"summary"));return y(Et,{action:"complete",taskId:_.id,status:_.status})}case"block":{let _=i.runtime.blockTask(yi(T.taskId,"taskId"),i.requesterId,yi(T.reason,"reason"));return y(Et,{action:"block",taskId:_.id,status:_.status})}}}}));let b=new Map;return g.push(k({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:S(Ra),execute:async(I)=>{let T=y(Ra,I);if(T.runMode==="async"){let A=i.runtime.startTeammateRun(T.agentId,T.task,{taskId:T.taskId||void 0,fromAgentId:i.requesterId,continueConversation:T.continueConversation||void 0});return y(Vi,{agentId:T.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${T.agentId} and queued as ${A.id}.`,runId:A.id})}let _=b.get(T.agentId);if(_){let A=await _;return y(Vi,{...A,status:"joined",deduped:!0,message:`Task for ${T.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let E=i.runtime.routeToTeammate(T.agentId,T.task,{taskId:T.taskId||void 0,fromAgentId:i.requesterId,continueConversation:T.continueConversation||void 0}).then((A)=>y(Vi,{agentId:T.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${T.agentId} and completed in sync mode.`,text:A.text,iterations:A.iterations})).finally(()=>{b.delete(T.agentId)});return b.set(T.agentId,E),await E}})),g.push(k({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:S(Oa),execute:async(I)=>{let T=y(Oa,I),_=i.runtime.cancelRun(T.runId,T.reason);return y(fs,{runId:_.id,status:_.status})}})),g.push(k({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(Aa),execute:async(I)=>y(Ki.array(),i.runtime.listRuns(y(Aa,I)).map(lp))})),g.push(k({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(Ca),timeoutMs:cs,execute:async(I)=>{let T=y(Ca,I);if(T.runId){let A=await i.runtime.awaitRun(T.runId);return UU(A),y(Ki,lp(A))}let _=await i.runtime.awaitAllRuns(),E=_.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(Ki.array(),_.map(lp))}})),g.push(k({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:S(Pa),execute:async(I)=>{let T=y(Pa,I),_=i.runtime.sendMessage(i.requesterId,T.toAgentId,T.subject,T.body,T.taskId??void 0);return y(ys,{id:_.id,toAgentId:_.toAgentId})}})),g.push(k({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:S(Da),execute:async(I)=>{let T=y(Da,I),_=i.runtime.broadcast(i.requesterId,T.subject,T.body,{taskId:T.taskId??void 0});return y(xs,{delivered:_.length})}})),g.push(k({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:S(Ma),execute:async(I)=>{let T=y(Ma,I);return y(ms.array(),i.runtime.listMailbox(i.requesterId,{unreadOnly:T.unreadOnly,markRead:!0}))}})),g.push(k({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:S(Wa),execute:async(I)=>{let T=y(Wa,I),_=i.runtime.appendMissionLog({agentId:i.requesterId,taskId:T.taskId||void 0,kind:T.kind,summary:T.summary,evidence:T.evidence?.length?T.evidence:void 0,nextAction:T.nextAction||void 0});return y(bs,{id:_.id})}})),g.push(k({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:S(Na),execute:async(I)=>{if(y(Na,I),i.runtime.getMemberRole(i.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return i.runtime.cleanup(),y(vs,{status:"cleaned"})}})),g.push(k({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:S(La),execute:async(I)=>{let T=y(La,I),_=i.runtime.createOutcome({title:T.title,requiredSections:T.requiredSections,createdBy:i.requesterId});return y(gs,{outcomeId:_.id,status:_.status,requiredSections:_.requiredSections})}})),g.push(k({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:S(Ua),execute:async(I)=>{let T=y(Ua,I),_=i.runtime.attachOutcomeFragment({outcomeId:T.outcomeId,section:T.section,sourceAgentId:i.requesterId,sourceRunId:T.sourceRunId||void 0,content:T.content});return y(qa,{fragmentId:_.id,status:_.status})}})),g.push(k({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:S(Ba),execute:async(I)=>{let T=y(Ba,I),_=i.runtime.reviewOutcomeFragment({fragmentId:T.fragmentId,reviewedBy:i.requesterId,approved:T.approved});return y(qa,{fragmentId:_.id,status:_.status})}})),g.push(k({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:S(Fa),execute:async(I)=>{let T=y(Fa,I),_=i.runtime.finalizeOutcome(T.outcomeId);return y(ws,{outcomeId:_.id,status:_.status})}})),g.push(k({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:S(ja),execute:async(I)=>(y(ja,I),y(hs.array(),i.runtime.listOutcomes()))})),g}function jU(i){if(i==="vscode")return"vscode";if(i==="cli"||i?.startsWith("cline-cli"))return"cli";return}var BU=[{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:P0({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...FU]}];function HU(i,l){if(!l)return!0;return!BU.find((u)=>u.id===i||u.headlessToolNames.includes(i))?.unavailableClientTypes?.includes(l)}function O0(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={...ED(b),...u??{}};return i1({...c,shell:g,executors:I})}var GU=_r,XU=["idle","running","pending"];function JU(i){return!XU.includes(i)}function Ar(i){return!JU(i)}var Fr={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"},$0="sessionHistoryOrigin";function Lo(i){return typeof i==="string"&&i.trim()?i.trim():void 0}function VU(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 Fr.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 Fr.JETBRAINS;if(l.includes("neovim"))return Fr.NEOVIM;if(l.includes("kanban"))return Fr.KANBAN;if(l.includes("desktop"))return Fr.DESKTOP;if(l.includes("cline-platform"))return Fr.WEB;if(l.includes("cline-cli")||l.includes("cline-acp"))return Fr.CLI;if(l.includes("cline-sdk")||l.includes("cline-core"))return Fr.CORE;return}function Bo(i){let l=i?.[$0];if(!l||typeof l!=="object"||Array.isArray(l))return;let u=l,c=Lo(u.mode);if(!c)return;let g=Lo(u.version),b=Lo(u.trigger);return{mode:c,...g?{version:g}:{},...b?{trigger:b}:{}}}function ln(i,l){let u=Bo(i),c=Lo(l.mode)??u?.mode??"user",g=Lo(l.version)??u?.version,b=Lo(l.trigger)??u?.trigger;return{...i??{},[$0]:{mode:c,...g?{version:g}:{},...b?{trigger:b}:{}}}}function Pu(i){return i.replace(/[^a-zA-Z0-9._-]+/g,"_")}function Mv(i,l){let u=Pu(i),c=Pu(l),g=`${u}__${c}`;return g.length>180?g.slice(0,180):g}function YU(i,l){let u=Pu(i),c=Pu(l);return`${u}__teamtask__${c}__${R(6)}`}function Mf(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 L0(i){if(Mf(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 QU(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(GU),Mu=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 eF(i){if(!i)return!1;return Object.values(i).some((l)=>typeof l==="function")}function Nv(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 tF(i){return JSON.stringify(i,(l,u)=>{if(u instanceof Error)return{name:u.name,message:u.message,stack:u.stack};return u})}function qs(i){return typeof i==="string"&&i.trim()?i.trim():void 0}function Lm(i,l){let u={...i};u.id=qs(u.id)??R();let c=u.modelInfo&&typeof u.modelInfo==="object"?{...u.modelInfo}:void 0,g={id:qs(c?.id)??qs(u.modelId)??qs(l?.id),provider:qs(c?.provider)??qs(u.providerId)??qs(l?.provider),family:qs(c?.family)??qs(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 Dm(i){return i.map((l)=>Lm(l))}function D0(i,l,u=[]){let c=i.map((_,E)=>{let A=u[E],C=A?.role===_.role&&JSON.stringify(A.content)===JSON.stringify(_.content)?{...A,..._}:{..._};return Lm(C)}),g=u.length,b=[];for(let _=g;_<c.length;_+=1)if(c[_]?.role==="assistant"&&c[_]?.metadata?.displayOnly!==!0)b.push(_);if(b.length===0){let _=[...c].reverse().findIndex((E)=>E.role==="assistant"&&E.metadata?.displayOnly!==!0);if(_===-1)return c;b.push(c.length-1-_)}let I=b[b.length-1],T=b.some((_)=>c[_]?.metrics);for(let _ of b){let E=c[_],A=E.metrics;if(!A&&_===I&&!T){let C=l.usage;A={inputTokens:C.inputTokens,outputTokens:C.outputTokens,cacheReadTokens:C.cacheReadTokens??0,cacheWriteTokens:C.cacheWriteTokens??0,cost:C.totalCost}}c[_]={...Lm(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 Ov(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 rF=120;function Do(i){let l=i?.trim();return l?l.slice(0,rF):void 0}function U0(i){let l=Io(xe(i??"")).trim();if(!l)return;return Do(l.split(`
583
+ `)[0]?.trim())}function Vs(i){if(!i)return;let l={...i},u=Do(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 Um(i){let l=Vs(i.metadata)??{},u=i.title!==void 0?Do(i.title):U0(i.prompt);if(u)l.title=u;return Object.keys(l).length>0?l:void 0}function $v(i){let l=Bo(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(Mf(i.sessionId))return{agent:"teammate",sessionId:i.sessionId,taskType:"team",origin:u};if(L0(i.sessionId))return{agent:"subagent",sessionId:i.sessionId,taskType:"subagent_task",origin:u};return{agent:"lead",sessionId:i.sessionId,origin:u}}function F0(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:Dm(i.messages),...i.systemPrompt?{system_prompt:i.systemPrompt}:{}}}function sF(i,l,u){zU(KU(i),{recursive:!0}),WU(i,`${JSON.stringify(F0({updatedAt:l,context:u,messages:[]}),null,2)}
584
+ `,"utf8")}function iF(i,l){return Mu.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 nF(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 Br(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function Tr(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 q0(i){let l=Br();for(let u of i)l=Tr(l,u);return l}function al(i){return typeof i==="number"&&Number.isFinite(i)?i:0}function Lv(i){let l=Br();for(let u of i){let c=u.metrics;if(!c)continue;l=Tr(l,{inputTokens:al(c.inputTokens),outputTokens:al(c.outputTokens),cacheReadTokens:al(c.cacheReadTokens),cacheWriteTokens:al(c.cacheWriteTokens),totalCost:al(c.cost)})}return l}function oF(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 j0(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 zo(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 aF(i){return{inputTokens:i.inputTokens,outputTokens:i.outputTokens,cacheWriteTokens:i.cacheWriteTokens,cacheReadTokens:i.cacheReadTokens,totalCost:i.cost}}function lF(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 dF(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 dp(i,l,u){let{sessionId:c,config:g,liveSession:b,emit:I}=i,T=g.telemetry,_=b?.runtime.teamRuntime,E=u?.isPrimaryAgentEvent??!0,A=j0(l),C=zo({agentId:u?.agentId??A.agentId,conversationId:u?.conversationId??A.conversationId,parentAgentId:u?.parentAgentId??A.parentAgentId,createdByAgentId:u?.createdByAgentId,teamId:u?.teamId??_?.getTeamId(),teamName:u?.teamName??_?.getTeamName(),teamRole:u?.teamRole,teamAgentId:u?.teamAgentId});if(l.type==="content_start"&&l.contentType==="tool"&&l.toolName==="skills"){let N=oF(l.input);if(N)OA(T,{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",M=!l.error;if(sa(T,{ulid:c,tool:N,autoApproved:void 0,success:M,modelId:g.modelId,provider:g.providerId,...C}),!M&&(N==="editor"||N==="apply_patch"))$A(T,{ulid:c,modelId:g.modelId,provider:g.providerId,errorType:l.error,...C})}if(l.type==="usage"&&b?.turnUsageBaseline){let N=aF(l);if(E){b.turnPrimaryUsage=Tr(b.turnPrimaryUsage??Br(),N);let O=Tr(b.turnUsageBaseline,b.turnPrimaryUsage);i.usageBySession.set(c,O),NI(T,{ulid:c,provider:g.providerId,model:g.modelId,source:"assistant",mode:g.mode,...C}),MA(T,{ulid:c,...lF(l),provider:g.providerId,model:g.modelId,...C})}else{let O=dF({isPrimaryAgentEvent:E,overrides:u,eventMetadata:A}),L=b.turnUsageByAgent??new Map;b.turnUsageByAgent=L,L.set(O,Tr(L.get(O)??Br(),N))}let M=Tr(b.turnPrimaryUsage??Br(),q0(b.turnUsageByAgent?.values()??[]));i.aggregateUsageBySession.set(c,Tr(b.turnAggregateUsageBaseline??b.turnUsageBaseline,M))}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:tF(l),ts:Date.now()}})}function js(i){return i.workspaceRoot??i.cwd}var uF=new Set(["name","description","license","compatibility","metadata","allowed-tools"]),Fm=64,cF=1024,pF=500;function B0(i){return typeof i==="object"&&i!==null&&!Array.isArray(i)}function ll(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 mF(i,l){let u=i.normalize("NFKC");if(u.length===0||u.length>Fm)throw Error(`Skill name must be between 1 and ${Fm} 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 hF(i){if(i===void 0)return;if(!B0(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 H0(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(!B0(c))throw Error("SKILL.md frontmatter must be a YAML mapping.");let g=Object.keys(c).filter((N)=>!uF.has(N)).sort();if(g.length>0)throw Error(`Unexpected frontmatter field${g.length===1?"":"s"}: ${g.join(", ")}.`);let b=ll(c.name,"name",{required:!0,maxLength:Fm}),I=mF(b,l),T=ll(c.description,"description",{required:!0,maxLength:cF}),_=ll(c.license,"license"),E=ll(c.compatibility,"compatibility",{maxLength:pF});if(c.compatibility!==void 0&&!E)throw Error("Frontmatter field 'compatibility' cannot be empty.");let A=ll(c["allowed-tools"],"allowed-tools"),C=hF(c.metadata);return{metadata:{name:I,description:T,..._!==void 0?{license:_}:{},...E!==void 0?{compatibility:E}:{},...C!==void 0?{metadata:C}:{},...A!==void 0?{"allowed-tools":A}:{}},instructions:u[2].trim(),frontmatter:c}}var up="https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",Dv="https://agent-plugins.org/schemas/1.0.0/mcp.schema.json",IF=new Set(["$schema","name","version","description","author","homepage","repository","license","keywords","extensions"]),kF=new Set(["name","email","url"]),SF=/^(?!.*(?:--|\.\.))[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?$/,cp="${PLUGIN_ROOT}",pp="${PLUGIN_DATA}";function rn(i){return typeof i==="object"&&i!==null&&!Array.isArray(i)}function qm(i,l){let u=K0(i,l);return u===""||!u.startsWith("..")&&!W0(u)}function Tt(i){return i instanceof Error?i.message:String(i)}function $f(i){let l=i?.code;return l==="ENOENT"||l==="ENOTDIR"}function dt(i){return{level:i.level??"error",...i}}async function jm(i){let l=await Of(i);if(!(await Vl(l)).isDirectory())throw Error("expected a directory");return l}async function Ll(i,l,u){let c=await Of(l);if(!qm(i,c))throw Error(`path resolves outside the plugin root: ${l}`);let g=await Vl(c);if(!(u==="file"?g.isFile():g.isDirectory()))throw Error(`expected a regular ${u}: ${l}`);return c}async function Uv(i,l){let u=cn(l);if(!qm(i,u))throw Error(`path resolves outside its permitted root: ${l}`);let c=u;while(!0)try{let g=await Of(c),b=cn(g,K0(c,u));if(!qm(i,b))throw Error(`path resolves outside its permitted root: ${l}`);return b}catch(g){if(!$f(g))throw g;let b=bF(c);if(b===c)throw g;c=b}}async function Fv(i){try{return await Vl(i),!0}catch(l){if($f(l))return!1;throw l}}async function Nu(i){try{return await gF(i),!0}catch(l){if($f(l))return!1;throw l}}async function TF(i){let l;try{l=await jm(i)}catch{return[]}let u=[],c;try{c=await z0(l,{withFileTypes:!0})}catch{return[]}for(let g of c){let b=Fs(l,g.name),I;try{I=await jm(b)}catch{continue}let T=!1;try{T=await Nu(Fs(I,$t))}catch{continue}if(T)u.push(I)}return u.sort((g,b)=>g.localeCompare(b))}async function _F(i,l){let u=cn(i.cwd??process.cwd()),c=[];for(let T of i.pluginPaths??[]){let _=T.trim();if(!_)continue;let E=cn(u,_);try{c.push(await jm(E))}catch(A){l.push(dt({scope:"plugin",pluginPath:E,message:`Cannot load Agent Plugin directory: ${Tt(A)}`}))}}let g=i.searchPaths??to();for(let T of g)c.push(...await TF(T));let b=[],I=new Set;for(let T of c)if(!I.has(T))I.add(T),b.push(T);return b}function dl(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 EF(i,l,u){if(!rn(i))throw Error("plugin.json must contain a JSON object.");for(let I of Object.keys(i).filter((T)=>!IF.has(T)).sort())u.push(dt({level:"warning",scope:"manifest",pluginPath:l,message:`Ignoring unknown plugin.json field '${I}'.`}));if(i.$schema!==up)throw Error(`Unsupported or missing plugin.json $schema; expected '${up}'.`);if(typeof i.name!=="string")throw Error("Manifest field 'name' must be a string.");if(i.name.length<1||i.name.length>64||!SF.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((T)=>!kF.has(T));if(I.length>0)throw Error(`Manifest author contains unknown field '${I.sort()[0]}'.`);for(let[T,_]of Object.entries(i.author))if(typeof _!=="string")throw Error(`Manifest author field '${T}' 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:up,name:i.name,...dl(i,"version")!==void 0?{version:i.version}:{},...dl(i,"description")!==void 0?{description:i.description}:{},...c?{author:c}:{},...dl(i,"homepage")!==void 0?{homepage:i.homepage}:{},...dl(i,"repository")!==void 0?{repository:i.repository}:{},...dl(i,"license")!==void 0?{license:i.license}:{},...g?{keywords:g}:{},...b?{extensions:b}:{}}}async function AF(i,l){let u=Fs(i,$t),c=await Ll(i,u,"file"),g;try{g=JSON.parse(await Nf(c,"utf8"))}catch(b){throw Error(`Invalid plugin.json: ${Tt(b)}`)}return{manifestPath:c,manifest:EF(g,i,l)}}async function CF(i,l,u){let c=Fs(i,et),g;try{g=await Nu(c)}catch(_){return u.push(dt({scope:"skills",pluginPath:i,pluginName:l,componentPath:c,message:`Cannot inspect Agent Plugin skills component: ${Tt(_)}`})),[]}if(!g)return[];let b;try{b=await Ll(i,c,"directory")}catch(_){return u.push(dt({scope:"skills",pluginPath:i,pluginName:l,componentPath:c,message:`Invalid Agent Plugin skills component: ${Tt(_)}`})),[]}let I=[],T;try{T=await z0(b,{withFileTypes:!0})}catch(_){return u.push(dt({scope:"skills",pluginPath:i,pluginName:l,componentPath:b,message:`Cannot read Agent Plugin skills component: ${Tt(_)}`})),[]}for(let _ of T.sort((E,A)=>E.name.localeCompare(A.name))){let E=Fs(b,_.name),A;try{A=await Ll(i,E,"directory")}catch(O){if(_.isSymbolicLink())u.push(dt({scope:"skill",pluginPath:i,pluginName:l,componentPath:E,componentName:_.name,message:`Skipping invalid Agent Plugin skill directory '${_.name}': ${Tt(O)}`}));continue}let C=Fs(A,"SKILL.md"),N;try{N=await Nu(C)}catch(O){u.push(dt({scope:"skill",pluginPath:i,pluginName:l,componentPath:C,componentName:_.name,message:`Cannot inspect Agent Plugin skill '${_.name}': ${Tt(O)}`}));continue}if(!N)continue;let M;try{M=await Ll(i,C,"file")}catch(O){u.push(dt({scope:"skill",pluginPath:i,pluginName:l,componentPath:C,componentName:_.name,message:`Skipping invalid Agent Plugin skill '${_.name}': ${Tt(O)}`}));continue}try{let O=H0(await Nf(M,"utf8"),_.name);I.push({pluginName:l,pluginRoot:i,directoryPath:A,filePath:M,metadata:O.metadata})}catch(O){u.push(dt({scope:"skill",pluginPath:i,pluginName:l,componentPath:M,componentName:_.name,message:`Skipping invalid Agent Plugin skill '${_.name}': ${Tt(O)}`}))}}return I}function Lf(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 xF(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 G0(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 mp(i,l,u){return i.replace(/\$\{PLUGIN_(ROOT|DATA)\}/g,(c,g)=>g==="ROOT"?l:u)}function RF(i,l,u){let c=fF("sha256").update(u).digest("hex").slice(0,12);return Fs(i,`${l}-${c}`)}function PF(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 MF(i){if(Lf(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 Uv(i.pluginRoot,cn(i.pluginRoot,i.server.command)),await Fv(l)){if(!(await Vl(l)).isFile())throw Error("stdio MCP 'command' must resolve to a regular file.")}}else{if(W0(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=xF(i.server.args,"args")?.map((T)=>mp(T,i.pluginRoot,i.pluginDataPath)),c=G0(i.server.env,"env")??{};for(let T of Object.keys(c))if(process.platform==="win32"?T.toUpperCase()==="PLUGIN_ROOT"||T.toUpperCase()==="PLUGIN_DATA":T==="PLUGIN_ROOT"||T==="PLUGIN_DATA")throw Error(`stdio MCP env cannot configure reserved key '${T}'.`);let g=Object.fromEntries(Object.entries(c).map(([T,_])=>[T,mp(_,i.pluginRoot,i.pluginDataPath)])),b=PF(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 T;if(i.server.cwd.startsWith("./"))T=i.pluginRoot;else if(i.server.cwd===cp||i.server.cwd.startsWith(`${cp}/`))T=i.pluginRoot;else if(i.server.cwd===pp||i.server.cwd.startsWith(`${pp}/`))T=i.pluginDataPath;else throw Error(`stdio MCP 'cwd' must begin with './', '${cp}', or '${pp}'.`);let _=mp(i.server.cwd,i.pluginRoot,i.pluginDataPath);if(I=await Uv(T,i.server.cwd.startsWith("./")?cn(i.pluginRoot,_):_),await Fv(I)&&!(await Vl(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 NF(i){let l=i.replace(/^\[|\]$/g,"").toLowerCase();if(l==="localhost"||l==="::1")return!0;if(wF(l)===4)return l.split(".")[0]==="127";return!1}function OF(i,l){if(Lf(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:"&&!NF(u.hostname))throw Error(`${l} MCP endpoints must use HTTPS unless loopback.`);let c=G0(i.headers,"headers"),g=new Set;for(let[b,I]of Object.entries(c??{})){let T=b.toLowerCase();if(g.has(T))throw Error(`Duplicate case-insensitive MCP header '${b}'.`);g.add(T);try{yF(b),vF(b,I)}catch(_){throw Error(`Invalid MCP header '${b}': ${Tt(_)}`)}}return l==="sse"?{type:"sse",url:u.toString(),...c?{headers:c}:{}}:{type:"streamableHttp",url:u.toString(),...c?{headers:c}:{}}}async function $F(i){let l=Fs(i.pluginRoot,"mcp.json"),u;try{u=await Nu(l)}catch(T){return i.diagnostics.push(dt({scope:"mcp",pluginPath:i.pluginRoot,pluginName:i.pluginName,componentPath:l,message:`Cannot inspect Agent Plugin MCP component: ${Tt(T)}`})),[]}if(!u)return[];let c;try{c=await Ll(i.pluginRoot,l,"file")}catch(T){return i.diagnostics.push(dt({scope:"mcp",pluginPath:i.pluginRoot,pluginName:i.pluginName,componentPath:l,message:`Invalid Agent Plugin MCP component: ${Tt(T)}`})),[]}let g;try{g=JSON.parse(await Nf(c,"utf8"))}catch(T){return i.diagnostics.push(dt({scope:"mcp",pluginPath:i.pluginRoot,pluginName:i.pluginName,componentPath:c,message:`Invalid mcp.json: ${Tt(T)}`})),[]}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(Lf(g,new Set(["$schema","mcpServers"]),"mcp.json"),g.$schema!==Dv)throw Error(`Unsupported or mismatched mcp.json $schema; expected '${Dv}'.`);if(!rn(g.mcpServers))throw Error("mcp.json field 'mcpServers' must be an object.")}catch(T){return i.diagnostics.push(dt({scope:"mcp",pluginPath:i.pluginRoot,pluginName:i.pluginName,componentPath:c,message:`Invalid Agent Plugin MCP component: ${Tt(T)}`})),[]}let b=RF(i.pluginDataRoot,i.pluginName,i.pluginRoot),I=[];for(let[T,_]of Object.entries(g.mcpServers).sort(([E],[A])=>E.localeCompare(A)))try{if(!rn(_))throw Error("server configuration must be an object.");if(_.type!=="stdio"&&_.type!=="streamable-http"&&_.type!=="sse")throw Error("server has an unsupported or missing transport type.");let E,A;if(_.type==="stdio")A=b,E=await MF({server:_,pluginRoot:i.pluginRoot,pluginDataPath:A});else E=OF(_,_.type);let C={name:`${i.pluginName}.${T}`,transport:E,metadata:{source:"agent-plugin",pluginName:i.pluginName,pluginPath:i.pluginRoot,serverName:T,...A?{pluginDataPath:A}:{}}};I.push({pluginName:i.pluginName,pluginRoot:i.pluginRoot,...A?{pluginDataPath:A}:{},serverName:T,registration:C})}catch(E){i.diagnostics.push(dt({scope:"mcp-server",pluginPath:i.pluginRoot,pluginName:i.pluginName,componentPath:c,componentName:T,message:`Skipping invalid Agent Plugin MCP server '${T}': ${Tt(E)}`}))}return I}async function LF(i,l){let u;try{u=await AF(i,l)}catch(b){l.push(dt({scope:"manifest",pluginPath:i,componentPath:Fs(i,$t),message:`Rejecting Agent Plugin: ${Tt(b)}`}));return}let{manifest:c,manifestPath:g}=u;return{rootPath:i,manifestPath:g,manifest:c}}async function DF(i,l,u){let{rootPath:c,manifest:g}=i,[b,I]=await Promise.all([CF(c,g.name,u),$F({pluginRoot:c,pluginName:g.name,pluginDataRoot:l,diagnostics:u})]);return{...i,skills:b,mcpServers:I}}async function X0(i={}){let l=[],u=await _F(i,l),c=cn(i.pluginDataRoot??Fs(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 LF(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 DF(A,c,l))}let T=[],_=new Set;for(let E of b)for(let A of E.mcpServers){if(_.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}_.add(A.registration.name),T.push(A)}return{plugins:b,skills:b.flatMap((E)=>E.skills),mcpServers:T,diagnostics:l}}function HF(i){return Object.fromEntries(Object.entries(i).map(([l,u])=>[l,{...u}]))}function zF(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 WF=Object.values(ge).map((i)=>({id:i.provider.id,baseUrl:i.provider.baseUrl??"",modelsSourceUrl:i.provider.modelsSourceUrl,modelId:i.provider.defaultModelId,knownModels:HF(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})),KF=Object.fromEntries(WF.map((i)=>[i.id,i]));function GF(){return Object.fromEntries(Object.entries(KF).filter(([,i])=>zF(i)))}function XF(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 JF="https://models.dev/api.json",VF=600000,YF=5000,Bv=new Map,fp=new Map;async function QF(i,l){let u=Object.assign((...c)=>{let[g,b]=c,I=AbortSignal.timeout(YF),T=b?.signal?AbortSignal.any([b.signal,I]):I;return globalThis.fetch(g,{...b,signal:T})},globalThis.fetch);return io(i,u,{includeClineCloudModels:l})}async function ZF(i={}){let l=i.url??JF,u=i.cacheTtlMs??VF,c=i.includeClineCloudModels===!0,g=`${l}\x00cloud=${c}`,b=Date.now(),I=Bv.get(g);if(I&&I.expiresAt>b)return I.data;let T=fp.get(g);if(T)return T;let _=QF(l,c).then((E)=>(Bv.set(g,{data:E,expiresAt:b+u}),E)).finally(()=>{fp.delete(g)});return fp.set(g,_),_}function eq(i){return Object.fromEntries(Object.entries(i).map(([l,u])=>[l,{baseUrl:u.baseUrl,modelId:u.modelId,capabilities:XF(u.capabilities)}]))}var tq=eq(GF()),Hv=Mt,rq=K,zv=e().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),sq=s(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),iq=s(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),nq=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()}),oq=t({enabled:r().optional(),effort:Jt.optional(),budgetTokens:n().int().positive().optional()}),aq=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()}),lq=t({projectId:e().optional(),region:e().optional()}),dq=t({apiVersion:e().optional(),useIdentity:r().optional()}),uq=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()}),cq=t({mode:s(["internal","external"]).optional(),usePromptCache:r().optional()}),pq=t({loadLatestOnInit:r().optional(),includeClineCloudModels:r().optional(),loadPrivateOnAuth:r().optional(),url:e().url().optional(),cacheTtlMs:n().int().positive().optional(),failOnError:r().optional()}),J0=t({provider:zv,apiKey:e().optional(),auth:nq.optional(),model:e().optional(),protocol:sq.optional(),client:iq.optional(),routingProviderId:zv.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:oq.optional(),aws:aq.optional(),gcp:lq.optional(),azure:dq.optional(),sap:uq.optional(),oca:cq.optional(),region:e().optional(),apiLine:s(["china","international"]).optional(),capabilities:o(s(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:pq.optional()});function mq(i){return i.protocol==="openai-responses"||i.client==="openai"}function Hm(i,l={}){let u=i.provider,c=rq(u),g=l.includeKnownModels!==!1,b=i.reasoning?.effort||"none",I=b==="none"?void 0:b,T=tq[c],_=ao(c),E=Object.keys(_)[0],A=KM(c,i),C=i.baseUrl??oo(c,i.apiLine)??(c==="oca"?i.oca?.mode==="internal"?Jk:Vk:T?.baseUrl),N=i.routingProviderId??(mq(i)&&c!==Hv.OPENAI_NATIVE?Hv.OPENAI_NATIVE:void 0),M=g?T?.knownModels??(Object.keys(_).length>0?_:void 0):void 0,O={providerId:u,clientType:i.client,routingProviderId:N,modelId:i.model??T?.modelId??E??"default",...g?{knownModels:M}:{},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??T?.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(O).filter(([L,D])=>D!==void 0))}var zm=J0,V0=t({providerId:e().min(1),modelId:e().min(1)}),hq=t({voiceInput:V0.optional()}),fq=t({bedrockProfile:r().optional()}),gq=t({settings:J0,updatedAt:e().datetime(),tokenSource:s(["manual","oauth","migration"]).default("manual")}),Wv=t({version:a(1),lastUsedProvider:e().min(1).optional(),modes:hq.default({}),repairs:fq.optional(),providers:d(e(),gq)});function Wm(){return{version:1,modes:{},providers:{}}}var gp=n().finite().positive().optional().catch(void 0),ul=n().finite().nonnegative().optional().catch(void 0),Tq=t({id:e().optional(),name:e().optional(),maxTokens:gp,contextWindow:gp,maxInputTokens:gp,capabilities:o(xo).optional(),supportsVision:r().optional(),supportsAttachments:r().optional(),supportsReasoning:r().optional(),operation:vo.optional(),operationModes:o(wo).optional(),modalities:bo.optional(),inputPrice:ul,outputPrice:ul,cacheReadsPrice:ul,cacheWritesPrice:ul,temperature:ul,apiFormat:yo.optional()}).passthrough(),_q=t({name:e(),baseUrl:e(),defaultModelId:e().optional(),protocol:mr.optional(),client:hr.optional(),capabilities:o(dr).optional(),modelsSourceUrl:e().optional()}).passthrough(),Q0=t({provider:_q.optional(),models:d(e(),Tq).optional(),discoveredModelIds:o(e()).optional()}).passthrough(),Eq=t({version:a(1),providers:d(e(),Q0)}),Aq=t({version:a(1),providers:d(e(),m())}),Kv=new Set,Z0={apiKeyOptional:!0};function eT(i){return i.split(/[-_]/).filter(Boolean).map((l)=>l.charAt(0).toUpperCase()+l.slice(1)).join(" ")}function Cq(i){return Sq(Y0(i.getFilePath()),"models.json")}function Km(){return{version:1,providers:{}}}function xq(i){let l=Aq.safeParse(i);if(!l.success)return lt("models.json content is not a valid models file envelope; starting from an empty registry"),Km();let u={};for(let[c,g]of Object.entries(l.data.providers)){let b=Q0.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 tT(i){if(!yq(i))return Km();try{let l=wq(i,"utf8");return xq(JSON.parse(l))}catch{lt(`models.json at ${i} exists but is unreadable or invalid JSON; treating as an empty registry`)}return Km()}function Rq(i,l){vq(Y0(i),{recursive:!0});let u=Eq.parse(l),c=`${i}.${process.pid}.tmp`;try{kq(c,`${JSON.stringify(u,null,2)}
585
+ `,"utf8"),bq(c,i)}catch(g){throw Iq(c,{force:!0}),g}}function rT(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 sT(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 Pq(i){return i!=null&&typeof i.name==="string"&&typeof i.baseUrl==="string"}function iT(i,l){return i??l??"openai-chat"}function nT(i,l,u){return i??u??(l==="openai-responses"?"openai":"openai-compatible")}function oT(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 Mq(i,l){let u=aT(i);for(let[c,g]of Object.entries(l??{})){let b=g.id?.trim()||c.trim();if(!b)continue;let I=u[b]?.capabilities,T=I&&g.capabilities?{...g,capabilities:[...new Set([...I,...g.capabilities])]}:g;xn(i,b,oT(b,T,I,I!==void 0))}}function Nq(i,l,u){return{...l??{},id:i,name:l?.name??i,capabilities:l?.capabilities??u}}function aT(i){return Object.assign({},...Ei(i).map((l)=>ct(l)))}function Oq(i){let l=i.provider.trim();if(!l||Ri(l))return;let u=i.baseUrl?.trim();if(!u)return;let c=ge[l],g=aT(l),b=sT(i.capabilities),I=b.length>0?b:void 0,T=i.model?.trim(),_={...g,...c?.models??{}};if(T)_[T]=Nq(T,_[T],I);let E=Object.keys(_).filter(Boolean),A=T||E[0];if(!A)return;let C=iT(i.protocol,c?.provider.protocol),N=nT(i.client,C,c?.provider.client);qt({provider:{id:l,name:c?.provider.name??eT(l),description:c?.provider.description,protocol:C,client:N,baseUrl:u,modelsSourceUrl:c?.provider.modelsSourceUrl,defaultModelId:A,capabilities:rT(i.capabilities)??c?.provider.capabilities,source:"file",metadata:Z0},models:_})}function yp(i){for(let l of Object.values(i.providers))Oq(l.settings)}function $q(i,l){let u=l.models??{};if(!Pq(l.provider)){Mq(i,u);return}let c=sT(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=iT(l.provider.protocol,void 0),T=nT(l.provider.client,I,void 0),_=Object.fromEntries(g.map(({id:E,model:A})=>[E,{...oT(E,A,c.length>0?c:void 0),status:"active"}]));qt({provider:{id:i,name:l.provider.name.trim()||eT(i),protocol:I,client:T,baseUrl:l.provider.baseUrl,modelsSourceUrl:l.provider.modelsSourceUrl,defaultModelId:b,capabilities:rT(l.provider.capabilities),source:"file",metadata:Z0},models:_})}function Lq(i){let l=Cq(i);if(Kv.has(l))return;let u=tT(l);for(let[c,g]of Object.entries(u.providers))$q(c,g);Kv.add(l)}var Ou="openai",qq="openai-compatible",jq=128000;function lT(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 Bq(i){return i==="credentials"?"iam":i}function Gv(i){if(!Dq(i))return;try{let l=Uq(i,"utf8"),u=JSON.parse(l);if(u&&typeof u==="object"&&!Array.isArray(u))return u}catch{}return}function Hq(i){let l=i.dataDir??Z(),u=i.globalStatePath??Gm(l,"globalState.json"),c=i.secretsPath??Gm(l,"secrets.json"),g=Gv(u),b=Gv(c);if(!g&&!b)return;return{globalState:g??{},secrets:b??{}}}function Xm(i){return K(i)}function $u(i){if(i===Ou)return i;return K(i)}function zq(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 Wq(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=Jt.safeParse(g),I=b.success?b.data:void 0,T=typeof c==="number"&&Number.isInteger(c)&&c>0?c:void 0;if(!I&&T===void 0)return;return{...I?{effort:I}:{},...T!==void 0?{budgetTokens:T}:{}}}function Kq(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 Gq(i){let l=ct(i),u=st(i),c=u?.provider.defaultModelId;if(c&&(l[c]||u?.models?.[c]))return c;return Object.keys(l)[0]??void 0}function Xq(i,l){if(!l||i!=="cline")return l;let u=st(i)?.models;if(!u)return l;if(u[l])return l;for(let c of ft){if(!l.startsWith(c.aliasPrefix))continue;let g=`${c.canonicalPrefix}${l.slice(c.aliasPrefix.length)}`;if(u[g])return g}return}function Jq(i,l,u,c){let g=Xm(i),b=ie(c==="plan"?l.planModeApiProvider:l.actModeApiProvider),I=b?$u(b):void 0,T=Xq(g,zq(l,i,c,I))??Gq(g),_=Wq(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,Kq(u));if(i==="cline")try{let F=ie(u["cline:clineAccountId"]);if(F)C.auth={...C.auth??{},...lT(F)}}catch{}if(i===Ou&&l.openAiHeaders)C.headers=l.openAiHeaders;if(i==="bedrock"){let F=Bq(l.awsAuthentication),j=ie(l.awsProfile),B=F==="profile"||l.awsUseProfile===!0||F===void 0&&j!==void 0,Q=B&&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:B?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===Ou&&(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},M=ie(A[i]),O=ie(N[i]),L={provider:g,...M?{apiKey:M}:{},...T?{model:T}:{},...O?{baseUrl:O}:{},..._?{reasoning:_}:{},...E?{timeout:E}:{},...C},D=zm.safeParse(L);if(!D.success)return;return Object.keys(L).filter((F)=>F!=="provider").length>0?D.data:void 0}function cl(i){return typeof i==="number"&&Number.isFinite(i)&&i>0?i:void 0}function Vq(i,l,u){if(i!==qq)return;if(!l.baseUrl||!l.model)return;let c=cl(u?.contextWindow)??jq,g=cl(u?.maxTokens),b=cl(u?.inputPrice),I=cl(u?.outputPrice),T=cl(u?.temperature),_=["streaming","tools"];if(u?.supportsImages!==!1)_.push("images");if(u?.supportsPromptCache===!0)_.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:_,...g!==void 0?{maxTokens:g}:{},...b!==void 0?{inputPrice:b}:{},...I!==void 0?{outputPrice:I}:{},...T!==void 0?{temperature:T}:{}}}}}function Yq(i,l){let u=new Set;for(let g of[i.actModeApiProvider,i.planModeApiProvider]){let b=ie(g);if(b)u.add($u(b))}if(ie(l.apiKey))u.add("anthropic");if(ie(l.openRouterApiKey))u.add("openrouter");if(ie(l.openAiApiKey))u.add(Ou);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=lT(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 Qq(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=Hq(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",T=ie(b==="plan"?c.planModeApiProvider:c.actModeApiProvider),_=T?$u(T):void 0,E=ie(b==="plan"?c.actModeApiProvider:c.planModeApiProvider),A=E?$u(E):void 0,C=Yq(c,g),N=Wm();N.providers={...l.providers},N.lastUsedProvider=l.lastUsedProvider,N.modes=l.modes,N.repairs=l.repairs;let M=new Date().toISOString(),O=0,L=Gm(Fq(i.providerSettingsManager.getFilePath()),"models.json"),D=tT(L),F=0;for(let H of C){let z=Xm(H);if(N.providers[z])continue;let te=H!==_&&H===A?I:b,ee=Jq(H,c,g,te);if(!ee)continue;N.providers[z]={settings:ee,updatedAt:M,tokenSource:"migration"},O+=1;let oe=Vq(z,ee,te==="plan"?c.planModeOpenAiModelInfo:c.actModeOpenAiModelInfo);if(oe&&!D.providers[z])D.providers[z]=oe,F+=1}let j=Qq(N,c,M);if(O===0&&F===0&&!j)return{migrated:!1,providerCount:Object.keys(l.providers).length,lastUsedProvider:l.lastUsedProvider};let B=ie(b==="plan"?c.planModeApiProvider:c.actModeApiProvider),Q=B?Xm(B):void 0;if(N.lastUsedProvider=l.lastUsedProvider??(Q&&N.providers[Q]?Q:Object.keys(N.providers)[0]),i.providerSettingsManager.write(N),F>0)Rq(L,D);return{migrated:O>0||F>0||j,providerCount:Object.keys(N.providers).length,lastUsedProvider:N.lastUsedProvider}}function ej(){return new Date().toISOString()}var tj="cline",rj="cline-pass",dT=/[\p{Cc}\p{Cf}]/gu;function Vr(i){if(typeof i!=="string")return i;let l=i.replace(dT,"").trim();return l.length>0?l:void 0}function sj(i){let l={...i,apiKey:Vr(i.apiKey)};if(i.auth)l.auth={...i.auth,apiKey:Vr(i.auth.apiKey),accessToken:Vr(i.auth.accessToken),refreshToken:Vr(i.auth.refreshToken)};if(i.aws)l.aws={...i.aws,accessKey:Vr(i.aws.accessKey),secretKey:Vr(i.aws.secretKey),sessionToken:Vr(i.aws.sessionToken)};if(i.gcp)l.gcp={...i.gcp,projectId:Vr(i.gcp.projectId),region:Vr(i.gcp.region)};if(i.sap)l.sap={...i.sap,clientId:Vr(i.sap.clientId),clientSecret:Vr(i.sap.clientSecret)};if(i.headers)l.headers=Object.fromEntries(Object.entries(i.headers).map(([u,c])=>[u,c.replace(dT,"").trim()]));return l}function ij(i){if(jv(i)!=="providers.json")return;let l=Bm(i);if(jv(l)!=="settings")return;return Bm(l)}class In{filePath;dataDir;constructor(i={}){if(this.filePath=i.filePath??Xa(),this.dataDir=i.dataDir??ij(this.filePath),this.dataDir||!i.filePath)Zq({providerSettingsManager:this,dataDir:this.dataDir});if(Lq(this),yp(this.read()),hp(this.filePath))try{qv(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!hp(this.filePath))return Wm();try{let i=FF(this.filePath,"utf8"),l=JSON.parse(i),u=Wv.safeParse(l);if(u.success){yp(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=${Ls(c?.accessToken)} clineRefreshTokenHash=${Ls(c?.refreshToken)}`),u.data}}catch{}return Wm()}write(i){let l=Wv.parse(i),u=Bm(this.filePath);if(!hp(u))UF(u,{recursive:!0,mode:448});let c=`${this.filePath}.${process.pid}.tmp`;try{BF(c,`${JSON.stringify(l,null,2)}
586
+ `,{encoding:"utf8",mode:384}),qF(c,this.filePath)}catch(g){throw jF(c,{force:!0}),g}try{qv(this.filePath,384)}catch{}yp(l)}saveProviderSettings(i,l={}){let u=sj(zm.parse(i)),c=this.read(),g=u.provider,b=l.setLastUsed!==!1,I=c.providers[g],T=l.tokenSource??I?.tokenSource??"manual",_={...c,providers:{...c.providers,[g]:{settings:u,updatedAt:ej(),tokenSource:T}},lastUsedProvider:b?g:c.lastUsedProvider};this.write(_);let E=c.providers.cline?.settings?.auth,A=u.provider==="cline"?u.auth:_.providers.cline?.settings?.auth,C=!!E?.accessToken&&!A?.accessToken;return lt(`providers.save providerId=${g} tokenSource=${T} clineAuthWasPresent=${!!E?.accessToken} clineAuthIsPresent=${!!A?.accessToken} authDropped=${C}`),_}resolveProviderSettings(i,l){let u=i.providers[l]?.settings,c=ri(l)?.storageProviderId;if(!c||c===l)return u;let g=i.providers[c]?.settings;if(!g)return u;return zm.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=V0.parse(i);else delete l.modes.voiceInput;return this.write(l),l}resolveLastUsedProviderId(i,l){let u=i.lastUsedProvider;if(u===rj&&l.isClinePassEnabled===!1)return tj;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 Hm(u,l)}getLastUsedProviderConfig(i={}){let l=this.getLastUsedProviderSettings(i);if(!l)return;return Hm(l,i)}async refreshCatalog(){try{await ZF({})}catch{}}}async function lj(i,l,u){let c=nj("sha256").update(l).digest("hex"),g=V(`${oj(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(T){let _=T instanceof Error?T.message:String(T),E=T?.code;if(!(E==="SQLITE_BUSY"||E==="SQLITE_LOCKED"||/SQLITE_BUSY|SQLITE_LOCKED|database is locked/.test(_)))throw T;if(Date.now()>=I)throw Error("Timed out waiting for another process to refresh OAuth credentials.");await aj(25)}return await u()}finally{try{if(b)g.exec("ROLLBACK;")}finally{g.close?.()}}}function vp(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 fd 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 vc{providerSettingsManager;telemetry;onCredentialsRefreshed;refreshInFlight=new Map;constructor(i){this.providerSettingsManager=i?.providerSettingsManager??new In,this.telemetry=i?.telemetry,this.onCredentialsRefreshed=i?.onCredentialsRefreshed}async resolveProviderApiKey(i){let l=ri(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||!py(i,g))return null;let b=g.auth,I=lj(this.providerSettingsManager.getFilePath(),l,()=>this.resolveProviderApiKeyInternal(i,l,u&&vp(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=ri(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=py(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=${Ls(b.access)} refreshTokenHash=${Ls(b.refresh)}`);let I=await c.refresh({settings:g,credentials:b,forceRefresh:u,telemetry:this.telemetry}),T=this.providerSettingsManager.getProviderSettings(l);if(!vp(g.auth,T?.auth))return null;if(!I)throw lt(`oauth.resolve providerId=${i} outcome=refresh_returned_null`),new fd(i);let _=WM({manager:this.providerSettingsManager,providerId:i,settings:{...g,...T},credentials:I,setLastUsed:!1,save:!1}),E=!vp(g.auth,_.auth);if(E)lt(`oauth.resolve.refreshed providerId=${i} newAccessTokenHash=${Ls(I.access)} newRefreshTokenHash=${Ls(I.refresh)} savingToDisk=true`),this.providerSettingsManager.saveProviderSettings(_,{setLastUsed:!1,tokenSource:"oauth"}),this.onCredentialsRefreshed?.(g,_);else lt(`oauth.resolve providerId=${i} outcome=not_refreshed`);return{apiKey:c.getApiKey(_)??I.access,accountId:I.accountId,refreshed:E}}}var hj=3600000,fj=604800000,Xv=2;class uT{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??hj,this.cacheFilePath=i.cacheFilePath,this.persistentCacheMaxAgeMs=i.persistentCacheMaxAgeMs??fj,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||!dj(this.cacheFilePath))return;let i=JSON.parse(cj(this.cacheFilePath,"utf8"));if(!i||typeof i!=="object")return;let l=i;if(l.version!==Xv||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;uj(mj(this.cacheFilePath),{recursive:!0,mode:448});let i=this.getCacheSnapshot(),l={version:Xv,updatedAt:i.updateTime,userId:i.userId,flagsPayload:i.flagsPayload};pj(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??Lt[i]??void 0;if(!this.cache.has(i)||this.cache.get(i)!==c)this.telemetry?.capture({event:Pe.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}),Lt[i]??!1}}getBooleanFlagEnabled(i){return this.cache.get(i)===!0}getFlagPayload(i){return this.cache.get(i)??Lt[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 Jv(){return new In().getProviderSettings("cline")?.auth?.accountId?.trim()||void 0}async function Df(i){let l=Jv(),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 uT({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"),T=new I({client:b(u),config:{}});try{return await T.getAllFlagsAndPayloads(g)}finally{await T.dispose()}}}})};let c=Jn;try{return c.pending??=c.service.poll().finally(()=>{c.pending=void 0}),await c.pending,Jn===c&&Jv()===l&&c.service.getCacheSnapshot().flagsPayload?.featureFlags?.[i]===!0}catch{return!1}}var r3=wj(gj(yn)??{recommended:[],free:[],clinePass:[]},fn());function Cd(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 gj(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(Cd).filter((E)=>E!==null),I=c.map(Cd).filter((E)=>E!==null),T=g.map(Cd).filter((E)=>E!==null),_=(Array.isArray(l.clineCloud)?l.clineCloud:[]).map(Cd).filter((E)=>E!==null);if(b.length===0&&I.length===0&&T.length===0)return null;return{recommended:b,free:I,clinePass:T,clineCloud:_}}function wp(i){return i.replace(/\s*\(free\)\s*$/i,"").replace(/:free$/i,"").trim()}function yj(i){let l=[i];for(let u of ft)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 vj(i,l){for(let g of l)for(let b of yj(i.id)){let I=g?.[b]?.name?.trim();if(I)return wp(I)}let u=i.name?.trim();if(u&&u!==i.id)return wp(u);let c=i.id.split("/").at(-1)??i.id;return wp(c)}function wj(i,l){let u=(c,g)=>c.map((b)=>({...b,name:vj(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 bj(i){let l=i?.auth?.accessToken?.trim()||i?.apiKey?.trim();return l&&l.length>0?l:void 0}var Vv=["COMPOSIO_SEARCH_TOOLS","COMPOSIO_MANAGE_CONNECTIONS","COMPOSIO_WAIT_FOR_CONNECTIONS","COMPOSIO_MULTI_EXECUTE_TOOL"];async function Ij(i,l){let u;try{let c=i("/api/v1/connectors/meta-tools/sessions",{method:"POST",signal:AbortSignal.timeout(5000)}),g=new Promise((N,M)=>{u=setTimeout(()=>M(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]),T=I?.data?.sessionId,_=I?.data?.tools;if(typeof T!=="string"||!T||!Array.isArray(_))return;let E=_.filter((N)=>typeof N?.slug==="string"&&Vv.some((M)=>M===N.slug)),A=new Set(E.map((N)=>N.slug)),C=Vv.filter((N)=>!A.has(N));if(C.length>0){l?.log?.(`composio-tools: meta-tool session missing required tools: ${C.join(", ")}`);return}return{sessionId:T,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 kj(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(_){return{successful:!1,error:`Cline connectors request failed: ${_ instanceof Error?_.message:String(_)}`}}let I=await b.text(),T;try{T=I?JSON.parse(I):void 0}catch{T=void 0}if(!b.ok){let _=T!==void 0?JSON.stringify(T).slice(0,600):I.slice(0,600);return{successful:!1,error:`Cline connectors proxy returned HTTP ${b.status} for ${u}${_?`: ${_}`:""}`}}return T??{successful:!0}}var Sj=120000;function Dl(){return new In().getProviderSettings("cline")?.auth?.accountId?.trim()||void 0}var Yv;async function cT(i){let l=new In,u;try{Yv??=new vc,u=(await Yv.resolveProviderApiKey({providerId:"cline"}))?.apiKey??void 0}catch(c){if(c instanceof fd)return}if(u??=bj(l.getProviderSettings("cline")),!u||Dl()!==i)return;return{baseUrl:(l.getProviderSettings("cline")?.baseUrl?.trim()||_e().apiBaseUrl).replace(/\/+$/,""),token:u}}async function Tj(i){if(Dl()!==i)return{error:{successful:!1,error:"The Cline account changed. Start a new session to use connector tools."}};if(!await Df(Ge.CLINE_COMPOSIO_BETA))return{error:{successful:!1,error:"Composio connectors are not enabled for this account."}};let l=await cT(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 Qv(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 _j(i){let l=i?.request,u=l?void 0:Dl(),c,g;if(l)c=l,g=async()=>({request:l});else{if(!u)return;if(!await Df(Ge.CLINE_COMPOSIO_BETA))return;if(Dl()!==u)return;let T=await cT(u);if(!T)return;c=Qv(T),g=async()=>{let _=await Tj(u);if("error"in _)return _;return{request:Qv(_.auth)}}}let b=await Ij(c,{log:(T)=>i?.logger?.log?.(T)});if(!b?.tools.length)return;let I;try{I=b.tools.map((T)=>k({name:T.slug.toLowerCase(),resultPolicy:"cache-oversized",description:T.description||T.name||T.slug,inputSchema:T.input_parameters??{type:"object",properties:{}},timeoutMs:Sj,retryable:!1,execute:async(_)=>{let E=await g();if("error"in E)return E.error;return kj(E.request,b.sessionId,T.slug,_)}}))}catch(T){i?.logger?.log?.(`composio-tools: invalid meta-tool schemas: ${T instanceof Error?T.message:String(T)}`);return}return{name:"composio-tools",manifest:{capabilities:["tools"]},setup(T){if(!l&&Dl()!==u)return;for(let _ of I)T.registerTool(_);i?.logger?.log?.(`composio-tools: registered ${I.length} meta tool(s) for this session`)}}}var Uf="package.json",xj="package";function mT(i){return eo(i)}function hT(i){return Xn(i)}function Rj(i){try{return wc(i)&&Aj(i).isDirectory()}catch{return!1}}function gd(i){let l=[],u=new Set;for(let c of i){let g=Yl(c);if(u.has(g))continue;u.add(g),l.push(g)}return l}function fT(i){let l=gd(i);return dk(l)}function Ff(i){return mT(i).flatMap((l)=>hT(l)).filter((l)=>wc(l))}function Pj(i,l){let u=[];for(let c of i)try{u.push(...ti([c],l))}catch{}return u}function bp(i){return typeof i==="object"&&i!==null}function Mj(i){try{let l=JSON.parse(Ej(bc(i,Uf),"utf8"));if(!bp(l)||!bp(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(!bp(g)||!Array.isArray(g.paths))continue;for(let b of g.paths)if(typeof b==="string")c.push(b)}return c}catch{return[]}}function gT(i,l){let u=Yl(l);return Mj(i).some((c)=>Yl(i,c)===u)}function Nj(i,l){return pT(i)===xj&&wc(bc(Lu(i),Uf))&&gT(Lu(i),l)}function Oj(i){let l=Yl(i),u=[],c=Lu(l);while(!0){if(Nj(c,l)){u.push(c);break}if(wc(bc(c,Uf))){if(gT(c,l))u.push(c);break}let g=Lu(c);if(g===c)break;c=g}return gd(u)}function yT(i={}){let l=i.cwd??process.cwd(),u=[],c=[];for(let T of i.pluginPaths??[])try{c.push(...ti([T],l))}catch(_){u.push({pluginPath:Yl(l,T),error:_})}let g=gd([...c,...Ff(i.workspacePath)]);if(i.includeDisabled)return{paths:g,disabledPaths:[],discoveryFailures:u};let b=dk(g),I=new Set(b);return{paths:b,disabledPaths:g.filter((T)=>!I.has(T)),discoveryFailures:u}}function qf(i={}){let l=i.cwd??process.cwd(),u=Ff(i.workspacePath),c=[...ti(i.pluginPaths??[],l),...u];return i.includeDisabled?gd(c):fT(c)}function $j(i={}){let l=i.cwd??process.cwd(),u=Ff(i.workspacePath),c=Pj(i.pluginPaths??[],l);return fT([...c,...u])}function Ic(i){let l=[];for(let u of i)for(let c of Oj(u)){let g=bc(c,et);if(Rj(g))l.push(g)}return gd(l)}function Lj(i={}){return Ic($j(i))}var Dj="CLINE_PLUGIN_MODE";function jf(i){let l=process.env[Dj]?.trim();return i??(l==="sandbox"?l:"worker")}async function vT(i={}){if(jf(i.mode)==="worker"){let c=yT(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??pc()).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=qf(i);if(l.length===0)return{extensions:[],failures:[],warnings:[],pluginPaths:[],issues:[]};let u=await wf({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??pT(c.pluginPath,Cj(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 Uu=Wj(Uj),wT="cline checkpoint session=",Jm=67108864,Kj=1209600000;function Gj(i){return i.includes(wT)}function bT(){return Ql(Z(),"checkpoint-scratch")}function IT(i,l){let u=qj("sha256").update(`${i}\x00${l}`).digest("hex").slice(0,32);return Ql(bT(),u)}async function Xj(){try{let i=bT(),l=Date.now()-Kj,u=await Bj(i,{withFileTypes:!0});await Promise.all(u.map(async(c)=>{if(!c.isDirectory())return;let g=Ql(i,c.name);try{if((await Hj(g)).mtimeMs<l)await Du(g,{recursive:!0,force:!0})}catch{}}))}catch{}}function Ip(i,l){i?.log(l,{severity:"warn"})}function Jj(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 Ht(i,l){let u=await Uu("git",["-C",i,...l],{windowsHide:!0});return{stdout:u.stdout.trim(),stderr:u.stderr.trim()}}var Bf=["-c","core.ignorestat=false","-c","core.splitIndex=false"];async function xd(i,l,u){return(await Uu("git",["-C",i,...Bf,...u],{windowsHide:!0,maxBuffer:Jm,env:{...process.env,GIT_INDEX_FILE:l}})).stdout.trim()}function Vj(i,l,u,c){return new Promise((g,b)=>{let I=Fj("git",["-C",i,...Bf,...u],{windowsHide:!0,env:{...process.env,GIT_INDEX_FILE:l},stdio:["pipe","ignore","pipe"]}),T="";I.stderr.on("data",(_)=>{T+=_}),I.on("error",b),I.on("close",(_)=>{if(_===0)g();else b(Error(`git ${u[0]} exited with ${_}: ${T.trim()}`))}),I.stdin.on("error",()=>{}),I.stdin.end(c)})}async function Yj(i,l){let u=(await Uu("git",["-C",i,"ls-files","--others","--exclude-standard","-z"],{windowsHide:!0,maxBuffer:Jm})).stdout.split("\x00").filter(Boolean);if(u.length===0)return;await jj(l,{recursive:!0,mode:448});let c=Ql(l,"index"),g=Ql(l,"pathspec");await zj(g,`${u.join("\x00")}\x00`);let b=["add","--force","--pathspec-from-file",g,"--pathspec-file-nul"];try{await xd(i,c,b)}catch(A){if(String(A.stderr??"").includes("did not match any files"))throw A;await Du(c,{force:!0}),await Du(`${c}.lock`,{force:!0}),await xd(i,c,b)}let I=await Uu("git",["-C",i,...Bf,"ls-files","-z"],{windowsHide:!0,maxBuffer:Jm,env:{...process.env,GIT_INDEX_FILE:c}}),T=new Set(u.map((A)=>A.endsWith("/")?A.slice(0,-1):A)),_=I.stdout.split("\x00").filter(Boolean).filter((A)=>!T.has(A));if(_.length>0)await Vj(i,c,["update-index","-z","--force-remove","--stdin"],`${_.join("\x00")}\x00`);let E=await xd(i,c,["write-tree"]);if(!E)return;return await xd(i,c,["commit-tree",E,"-m","untracked files on cline checkpoint"])||void 0}async function Qj(i,l,u){let c=(await Ht(i,["stash","create",u])).stdout,g=await Yj(i,l);if(c){if(!g)return c;let _=(await Ht(i,["rev-parse",`${c}^{tree}`])).stdout,E=(await Ht(i,["rev-parse",`${c}^1`])).stdout,A=(await Ht(i,["rev-parse",`${c}^2`])).stdout;if(!_||!E||!A)return c;return(await Ht(i,["commit-tree",_,"-p",E,"-p",A,"-p",g,"-m",u])).stdout||c}if(!g)return;let b=(await Ht(i,["rev-parse","HEAD"])).stdout,I=(await Ht(i,["rev-parse","HEAD^{tree}"])).stdout;if(!b||!I)return;let T=(await Ht(i,["commit-tree",I,"-p",b,"-m","index on cline checkpoint"])).stdout;if(!T)return;return(await Ht(i,["commit-tree",I,"-p",b,"-p",T,"-p",g,"-m",u])).stdout||void 0}async function Zv(i,l){if(!i)return;await Du(IT(i,l),{recursive:!0,force:!0}).catch(()=>{return});let u=`refs/cline/checkpoints/${l}/`;try{let{stdout:c}=await Ht(i,["for-each-ref","--format=%(refname)",u]),g=c.trim().split(`
588
+ `).filter(Boolean);await Promise.allSettled(g.map((b)=>Ht(i,["update-ref","-d",b])))}catch{}}async function Zj(i,l,u){if(!i||u.length===0)return;await Promise.allSettled(u.map((c)=>Ht(i,["update-ref",`refs/cline/checkpoints/${l}/${c.runCount}`,c.ref])))}function eB(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 tB(i){Xj();let l,u,c=async()=>{if(l===!0)return!0;try{l=(await Ht(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(),T=(N)=>{i.telemetry?.capture({event:"checkpoint.snapshot",properties:{sessionId:i.sessionId,runCount:b,outcome:N,durationMs:Date.now()-I}})},_=async(N)=>{try{let M=(await Ht(i.cwd,["rev-parse","HEAD"])).stdout.trim();if(!M)return;return{ref:M,createdAt:Date.now(),runCount:b,kind:"commit"}}catch(M){Ip(i.logger,`${N}: ${M instanceof Error?M.message:String(M)}`);return}},E=`${wT}${i.sessionId} run=${b}`,A="";try{A=await Qj(i.cwd,IT(i.cwd,i.sessionId),E)??""}catch(N){Ip(i.logger,`Checkpoint snapshot failed after ${Date.now()-I}ms: ${N instanceof Error?N.message:String(N)}`);let M=await _("Checkpoint HEAD fallback failed");return T(M?"head_fallback":"skipped"),M}if(!A){let N=await _("Checkpoint HEAD fallback failed");return T(N?"head_clean":"skipped"),N}let C=`refs/cline/checkpoints/${i.sessionId}/${b}`;try{await Ht(i.cwd,["update-ref",C,A])}catch(N){Ip(i.logger,`Checkpoint store failed: ${N instanceof Error?N.message:String(N)}`),T("skipped");return}return T("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 T=Tm(b.messages);if(T<1)return;let _=await i.readSessionMetadata(),E=Jj(_),A=Tm(I)>=1,C=E?.history.some((O)=>O.runCount===T)??!1;if(!A&&C)return;let N=await g(T);if(!N)return;if(E?.latest.ref===N.ref)return;let M=eB(E?.history??[],N);await i.writeSessionMetadata({..._??{},checkpoint:{latest:N,history:M}});return}}}function nB(i,l){if(!l)return;return{name:i,manifest:{capabilities:["hooks"]},hooks:l}}function cB(i){return kr(i)}var kT;((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"})(kT||={});var pB={["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"},mB=new Map(Object.values(kT).map((i)=>[i.toLowerCase(),i])),hB=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function fB(i){let l=dB(i).toLowerCase();if(!hB.has(l))return;let u=lB(i,l).trim().toLowerCase();return mB.get(u)}function ST(i){let l=[],u=new Set,c=cB(i).filter((g)=>oB(g));for(let g of c)try{for(let b of aB(g,{withFileTypes:!0})){if(!b.isFile())continue;let I=fB(b.name);if(!I)continue;let T=uB(g,b.name);if(u.has(T))continue;u.add(T),l.push({fileName:I,hookEventName:pB[I],path:T})}}catch{}return l.sort((g,b)=>g.path.localeCompare(b.path))}var yB=30000,vB=1000;function wB(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 ew(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 bB(i){for(let l of[i.stdin,i.stdout,i.stderr]){if(!l||l.destroyed)continue;l.removeAllListeners("data"),l.destroy()}}async function IB(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()},T=(E)=>{let A=E.code;return A==="EPIPE"||A==="EOF"||A==="ERR_STREAM_DESTROYED"},_=(E)=>{if(T(E)){I(c);return}I(()=>g(E))};u.on("error",_),u.once("close",()=>u.off("error",_)),u.end(l,(E)=>{if(E){if(T(E)){I(c);return}I(()=>g(E));return}I(c)})})}async function tw(i,l){let u=kt(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=gB(u[0],u.slice(1),{cwd:l.cwd,env:Me(l.env),stdio:c?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:c,windowsHide:!0}),b="",I="",T=!1,_;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",(M)=>N(ew(M,u)))}),A=new Promise((C,N)=>{let M=!1,O,L=()=>{if(_)clearTimeout(_);if(O)clearTimeout(O)},D=(F)=>{if(M)return;M=!0,L();let{parsedJson:j,parseError:B}=wB(b);C({exitCode:F,stdout:b,stderr:I,parsedJson:j,parseError:B,timedOut:T})};if(g.once("error",(F)=>{L(),N(ew(F,u))}),g.once("close",(F)=>D(F)),!c)g.once("exit",(F)=>{O=setTimeout(()=>{D(F),bB(g)},vB),O.unref?.()})});if(c)A.catch(()=>{return});if(!c&&(l.timeoutMs??0)>0)_=setTimeout(()=>{T=!0,g.kill("SIGKILL")},l.timeoutMs);if(c&&l.onDetachedSettled){let C=Date.now(),N=l.onDetachedSettled,M=!1,O,L=(F)=>{if(M)return;if(M=!0,O)clearTimeout(O);N({command:u,...F})},D=l.detachedObservationMs??yB;O=setTimeout(()=>L({durationMs:D,exitCode:null,exited:!1}),D),O.unref?.(),A.then((F)=>L({durationMs:Date.now()-C,exitCode:F.exitCode,exited:!0})).catch(()=>{if(M=!0,O)clearTimeout(O)})}if(await Promise.race([Promise.all([E,IB(g,JSON.stringify(i))]),A]),c){g.unref();return}return await A}var kp=50000;function kB(i){if(i===void 0||i.length<=kp)return i;return`${i.slice(0,kp)}
590
+ [hook context truncated: exceeded ${kp} characters]`}var S3=t({contextModification:e().optional(),cancel:r().optional(),review:r().optional(),errorMessage:e().optional(),context:e().optional(),overrideInput:m().optional()}).passthrough();function Fu(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 Ul(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 SB(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 TB(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:kB(u??c),cancelReason:g===!0?c??u:void 0,overrideInput:Object.hasOwn(l,"overrideInput")?l.overrideInput:void 0}}function Vm(i){let l=String(i??"").toLowerCase();return l.includes("cancel")||l.includes("abort")||l.includes("interrupt")}function It(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 Ym(i,l){if(l.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await tw(i,l)}catch(u){let c=AB(l.command,process.platform,u);if(!c)throw u;return await tw(i,{...l,command:c})}}function _B(i){try{let l=sB(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 EB(i){return!!(i&&typeof i==="object"&&("code"in i)&&i.code==="ENOENT")}function AB(i,l=process.platform,u){if(l!=="win32"||!EB(u))return;if(i[0]!=="py"||i[1]!=="-3")return;return["python",...i.slice(2)]}function TT(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 TT(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 CB(i){let l=_B(i);if(l&&l.length>0)return[...TT(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 kt(["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 xB(i){let l={};for(let u of ST(i)){if(!u.hookEventName)continue;let c=u.hookEventName,g=l[c]??[];g.push(CB(u.path)),l[c]=g}return l}async function Sp(i){let l;for(let u of i.commands){let c=u.join(" ");try{let g=await Ym(i.payload,{command:u,cwd:i.cwd,env:process.env,detached:!1,timeoutMs:i.timeoutMs});if(g?.timedOut){Ul(i.logger,`hook command timed out: ${c}`);continue}if(g?.parseError){Ul(i.logger,`hook command returned invalid JSON control output: ${c} (${g.parseError})`);continue}l=SB(l,TB(g?.parsedJson))}catch(g){Ul(i.logger,`hook command failed: ${c}`,g)}}return l}async function ro(i){if(i.detached){let l=i.onHookRuntime,u=i.payload.hookName;for(let c of i.commands){let g=c.join(" ");Ym(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)=>{Ul(i.logger,`hook command failed: ${g}`,b)})}return}await Promise.all(i.commands.map(async(l)=>{let u=l.join(" ");try{await Ym(i.payload,{command:l,cwd:i.cwd,env:process.env,detached:i.detached})}catch(c){Ul(i.logger,`hook command failed: ${u}`,c)}}))}function Zs(i){return{agentId:i.agentId,conversationId:i.conversationId??i.runId??i.agentId,parentAgentId:i.parentAgentId??null}}function Qm(i,l){return{...Zs(i.snapshot),userMessage:l}}function _T(i){return{...Zs(i.snapshot),iteration:i.snapshot.iteration,call:{id:i.toolCall.toolCallId,name:i.toolCall.toolName,input:i.input}}}function ET(i){return{...Zs(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 AT(i){return i.filter((l)=>l.type==="text"&&typeof l.text==="string").map((l)=>l.text).join("")}function RB(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 rw(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 PB(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)??iB(tt(),"hooks.jsonl");tt(b),rB(b,g,"utf8")};return{beforeRun:async(c)=>{let g=Qm(c,"");u({...It(g,l),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(c)=>{let g=_T(c);u({...It(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:Fu(g.call.input)}});return},afterTool:async(c)=>{let g=ET(c);u({...It(g,l),hookName:"tool_result",iteration:g.iteration,tool_result:g.record,postToolUse:{toolName:g.record.name,parameters:Fu(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=Zs(c);if(g.status==="completed"){u({...It(b,l),hookName:"agent_end",iteration:g.iterations,turn:{outputText:g.outputText,status:g.status},taskComplete:{taskMetadata:{}}});return}if(g.status==="aborted"||Vm(g.error?.message)){u({...It(b,l),hookName:"agent_abort",reason:g.error?.message,taskCancel:{taskMetadata:{}}});return}if(g.error)u({...It(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=Qm({snapshot:c.snapshot},AT(c.message.content));u({...It(g,l),hookName:"prompt_submit",userPromptSubmit:{prompt:g.userMessage,attachments:[]}})}}}function MB(i){let l=xB(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 M=C==="agent_resume"?{...It(A,i),hookName:C,taskResume:{taskMetadata:{},previousState:{}}}:{...It(A,i),hookName:C,taskStart:{taskMetadata:{}}};if(!i.blockingRunStartHooks){await ro({commands:N,cwd:i.cwd,logger:i.logger,detached:i.detachAsyncHooks??!0,onHookRuntime:i.onHookRuntime,payload:M});return}return Sp({commands:N,cwd:i.cwd,logger:i.logger,timeoutMs:i.toolCallTimeoutMs??120000,payload:M})},c=async(A)=>{let C=l.prompt_submit??[];if(C.length>0)await ro({commands:C,cwd:i.cwd,logger:i.logger,detached:i.detachAsyncHooks??!0,onHookRuntime:i.onHookRuntime,payload:{...It(A,i),hookName:"prompt_submit",userPromptSubmit:{prompt:A.userMessage,attachments:[]}}})},g=async(A)=>{let C=l.tool_call??[];if(C.length===0)return;return Sp({commands:C,cwd:i.cwd,logger:i.logger,timeoutMs:i.toolCallTimeoutMs??120000,payload:{...It(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:Fu(A.call.input)}}})},b=async(A)=>{let C=l.tool_result??[];if(C.length===0)return;return Sp({commands:C,cwd:i.cwd,logger:i.logger,timeoutMs:i.toolCallTimeoutMs??120000,payload:{...It(A,i),hookName:"tool_result",iteration:A.iteration,tool_result:A.record,postToolUse:{toolName:A.record.name,parameters:Fu(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 ro({commands:C,cwd:i.cwd,logger:i.logger,detached:i.detachAsyncHooks??!0,onHookRuntime:i.onHookRuntime,payload:{...It(A,i),hookName:"agent_end",iteration:A.iteration,turn:A.turn,taskComplete:{taskMetadata:{}}}})},T=async(A)=>{let C=l.agent_error??[];if(C.length===0)return;await ro({commands:C,cwd:i.cwd,logger:i.logger,detached:i.detachAsyncHooks??!0,onHookRuntime:i.onHookRuntime,payload:{...It(A,i),hookName:"agent_error",iteration:A.iteration,error:{name:A.error.name,message:A.error.message,stack:A.error.stack}}})},_=async(A)=>{if(Vm(A.reason)){let N=l.agent_abort??[];if(N.length>0)await ro({commands:N,cwd:i.cwd,logger:i.logger,detached:i.detachAsyncHooks??!0,onHookRuntime:i.onHookRuntime,payload:{...It(A,i),hookName:"agent_abort",reason:A.reason,taskCancel:{taskMetadata:{}}}})}let C=l.session_shutdown??[];if(C.length===0)return;await ro({commands:C,cwd:i.cwd,logger:i.logger,detached:i.detachAsyncHooks??!0,onHookRuntime:i.onHookRuntime,payload:{...It(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(Zs(A.snapshot),C);return rw(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(Qm({snapshot:A.snapshot},AT(A.message.content)))}}if((l.tool_call?.length??0)>0)E.beforeTool=async(A)=>{let C=await g(_T(A));return RB(C)};if((l.tool_result?.length??0)>0)E.afterTool=async(A)=>{let C=await b(ET(A));return rw(C)};if((l.agent_end?.length??0)>0)E.afterRun=async({snapshot:A,result:C})=>{if(C.status!=="completed")return;await I({...Zs(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:M}=C;if(M.status==="aborted"||Vm(M.error?.message)){await _({...Zs(N),reason:M.error?.message});return}if(M.error)await T({...Zs(N),iteration:M.iterations,error:M.error})}}return E}function NB(i){return nB("core.hook_config_files",MB(i))}function vi(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 T=I,_=[g?.appendContext,T.appendContext].filter((E)=>typeof E==="string"&&E.length>0).join(`
594
+
595
+ `);if(T.stop===!0)return{...g??{},...T,stop:!0};g={...g??{},...T,stop:g?.stop===!0||T.stop===!0?!0:T.stop,appendContext:_||void 0,options:g?.options||T.options?{...g?.options??{},...T.options??{}}:void 0}}return g}}function sw(i){let l=i.filter((u)=>u!==void 0);if(l.length===0)return;return{beforeRun:vi(l,"beforeRun"),afterRun:vi(l,"afterRun"),beforeModel:vi(l,"beforeModel"),afterModel:vi(l,"afterModel"),beforeTool:vi(l,"beforeTool"),afterTool:vi(l,"afterTool"),onEvent:vi(l,"onEvent")}}function Zm(...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 Ps(i){let l=i?.trim();return l?l:void 0}function OB(i){let l=i.client,u=VU(l)??Ps(i.source),c=Ps(l.version),g=Ps(l.platform)??Ps(l.name),b=Ps(l.platformVersion)??c,I={cline_type:u,extension_version:c,platform:g,platform_version:b};if(i.user?.accountId===void 0)return I;let T=typeof i.user.accountId==="string"?Ps(i.user.accountId):void 0;return{...I,distinct_id:T??Ps(i.user.distinctId),user_id:T,account_id:T,account_email:T?Ps(i.user.email):void 0,organization_id:T?Ps(i.user.organizationId):void 0}}function CT(i,l){let u={},c={},g,b=(I)=>({...l,...c,...u,...I,...g?{distinct_id:g}:{}});return{setDistinctId(I){g=Ps(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,T)=>i.captureRequired(I,b(T)),recordCounter:(I,T,_,E,A)=>i.recordCounter(I,T,b(_),E,A),recordHistogram:(I,T,_,E,A)=>i.recordHistogram(I,T,b(_),E,A),recordGauge:(I,T,_,E,A)=>i.recordGauge(I,T,b(_),E,A),flush:()=>i.flush(),dispose:async()=>{}}}function $B(i,l){return CT(i,OB(l))}class xT{manifest;listeners=new Set;constructor(i){this.manifest=ki.parse(i??{workspaces:{}})}async addWorkspacePath(i){let l=await LI(i);return this.manifest=ss(this.manifest,l),this.emit({type:"workspace_added",workspace:l}),l}async switchWorkspace(i){let l=zl(i),u=this.manifest.workspaces[l];if(u)return this.manifest=ki.parse({...this.manifest,currentWorkspacePath:l}),this.emit({type:"workspace_switched",workspace:u}),u;let c=await this.addWorkspacePath(l);return this.manifest=ki.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=zl(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 iw=new Set,nw=new Set;function DB(i,l){return LB("sha256").update(i).update("\x00").update(l?.trim()??"").digest("hex")}function UB(i){if(i.vcsTypes&&i.vcsTypes.length>0)return i.vcsTypes;return[i.vcsType==="git"?"git":"none"]}function FB(i){if(!i.telemetry)return;let l=DB(i.rootPath,i.dedupeScope),u=i.rootCount??1;if(!iw.has(l))iw.add(l),EA(i.telemetry,{root_count:u,vcs_types:UB(i),init_duration_ms:i.durationMs,feature_flag_enabled:i.featureFlagEnabled??!0,is_remote_workspace:i.isRemoteWorkspace});if(i.initError&&!nw.has(l)){nw.add(l);let c=Error(i.initError.message);c.name=i.initError.errorType||"Error",AA(i.telemetry,c,{fallback_to_single_root:!0,workspace_count:u})}}function qB(i){return`${i.pluginName??i.pluginPath}: ${i.message}`}function jB(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(qB).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 BB(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 HB(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 zB(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 Rd(i,l){return _i(i,l)}function WB(i,l,u){if(i.systemPrompt?.trim())return i.systemPrompt;return Ke({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 KB(i,l,u,c,g,b){let I=c.getProviderSettings(i.providerId),T=g||I?.modelCatalog?{...g??{},...I?.modelCatalog??{}}:void 0,_=i.providerConfig?.providerId===i.providerId?i.providerConfig:void 0,E=Zn({providerId:i.providerId,sessionId:l,source:u,defaultSource:Fr.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:Gh,openAiCodex:{accountId:_?.accountId??I?.auth?.accountId,accessToken:_?.accessToken??i.apiKey??I?.auth?.accessToken??I?.apiKey,userAgentVersion:process.env.npm_package_version},headers:{stored:I?.headers,config:i.headers,session:_?.headers}}),A={...I??{},provider:i.providerId,model:i.modelId,apiKey:i.apiKey??I?.apiKey,baseUrl:i.baseUrl??I?.baseUrl,headers:void 0,reasoning:zB(i,I?.reasoning),modelCatalog:T},C={...Hm(A),..._??{}};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 GB(i){let{input:l,sessionId:u,sessionOrigin:c,providerSettingsManager:g,defaultTelemetry:b,defaultLogger:I,defaultCapabilities:T,defaultToolPolicies:_,defaultFetch:E,connectorsRequest:A,onPluginEvent:C,onPluginIssue:N,onTeamEvent:M,createSubAgentLifecycleCallbacks:O,createSpawnTool:L,localRuntime:D,readSessionMetadata:F,writeSessionMetadata:j}=i,B=js(l.config),{modelCatalogDefaults:Q,userInstructionService:H,configExtensions:z,onTeamRestored:te,...ee}=D??{},oe=Object.keys(ee).length>0?ee:void 0,{workspaceInfo:G,workspaceMetadata:se,gitState:Ne,durationMs:De,vcsType:Te,initError:le}=await lC(B),ke=oe?.extensionContext,we=ke?.client?void 0:HB(l.config.headers),Xe=ke?.client??we,ve=ke?.telemetry??oe?.telemetry??(b&&Xe?$B(b,{client:Xe,source:l.source,user:ke?.user}):b),Se=ve&&c?CT(ve,{session_origin:c.mode,session_origin_trigger:c.trigger}):ve,Ee={...ke??{},...we?{client:we}:{},workspace:{...G,...ke?.workspace??{}},session:{...ke?.session??{},sessionId:u},logger:ke?.logger??oe?.logger??I,telemetry:Se};FB({telemetry:Ee.telemetry,rootPath:G.rootPath,dedupeScope:Ee.client?.name??l.source,workspaceInfo:G,rootCount:1,vcsType:Te,durationMs:De,initError:le,featureFlagEnabled:!0});let Ae=Rd(z,"hooks")?NB({cwd:l.config.cwd,workspacePath:B,rootSessionId:u,logger:oe?.logger,workspaceInfo:G,onHookRuntime:(Qe)=>zA(Ee.telemetry,Qe)}):void 0,Be=eF(oe?.hooks)?void 0:PB({rootSessionId:u,workspacePath:B,workspaceInfo:G}),Ye=sw([oe?.hooks,Be]),Ct,vt,Nr=[];if(Rd(z,"plugins"))try{vt=await vT({pluginPaths:oe?.pluginPaths,workspacePath:B,cwd:l.config.cwd,onEvent:C,providerId:l.config.providerId,modelId:l.config.modelId,workspaceInfo:G,session:Ee.session,client:Ee.client,user:Ee.user,logger:Ee.logger,telemetry:Ee.telemetry,automation:Ee.automation,policy:l.plugins,hookErrorMode:l.config.hookErrorMode,onIssue:N}),Nr.push(...vt.issues??[]),Ct=vt.failures.length?vt.failures.map((Qe)=>Qe.message).join("; "):void 0,jB(vt.failures,vt.warnings,oe?.logger??Ee.logger)}catch(Qe){let Ws=Qe instanceof Error?Qe.message:String(Qe);(oe?.logger??Ee.logger)?.log(`Plugin loading failed; the session has no plugins: ${Ws}`,{severity:"error",sessionId:u}),Ct=Ws,Nr.push({name:"plugins",pluginPath:B,state:"failed",reason:"error",lastError:{phase:"discover",message:Ws,stack:Qe instanceof Error?Qe.stack:void 0,pluginPath:B,timestamp:Date.now(),sessionId:u}})}let bt;if(Rd(z,"plugins"))try{bt=await X0({pluginPaths:l.config.agentPluginPaths,cwd:l.config.cwd,disabledPluginNames:[...jh()]}),BB(bt.diagnostics,Ee.logger)}catch(Qe){let Ws=Qe instanceof Error?Qe.message:String(Qe);Ee.logger?.log(`[agent-plugins] Package discovery failed; continuing without Agent Plugins: ${Ws}`,{severity:"error"})}let xt=await _j({request:A,logger:oe?.logger}),Kr=[...Ae?[Ae]:[],...xt?[xt]:[]],Or=Kr.length>0?Kr:void 0,As=Nv(Or,Nv(oe?.extensions,wx(vt?.extensions))),Re=Rd(z,"plugins")?Ic(vt?.pluginPaths??[]):void 0,Ot={...l.config,...oe??{},sessionId:u,hooks:Ye,extensions:As,extensionContext:Ee,telemetry:Ee.telemetry,logger:Ee.logger},Gr=KB(Ot,u,l.source,g,Q,E),de=sw([Ot.hooks,Ot.checkpoint?.enabled===!0?tB({cwd:Ot.cwd,sessionId:u,logger:Ot.logger,createCheckpoint:Ot.checkpoint?.createCheckpoint,telemetry:Ot.telemetry,readSessionMetadata:F,writeSessionMetadata:j}):void 0]),Fe={...Ot,providerConfig:Gr,workspaceMetadata:se,systemPrompt:WB(Ot,G,se),hooks:de},mt=l.toolPolicies??Ot.toolPolicies??_,Ie=Zm(T,l.capabilities),Le=Ie?.requestToolApproval,Jr=Ie?.toolExecutors,Sn=O?.(Fe),Tc=new xT({currentWorkspacePath:G.rootPath,workspaces:{[G.rootPath]:G}});return{effectiveInput:l,config:Fe,providerConfig:Gr,workspaceMetadata:se,workspaceInfo:G,gitState:Ne,extensions:As,hooks:de,toolPolicies:mt,requestToolApproval:Le,pluginSandboxShutdown:vt?.shutdown,pluginIssues:Nr,pluginCommandError:Ct,runtimeBuilderInput:{config:Fe,hooks:de,extensions:As,onTeamEvent:M,createSpawnTool:L,onTeamRestored:te,onSubAgentEvent:Sn?.onSubAgentEvent,onSubAgentStart:Sn?.onSubAgentStart,onSubAgentEnd:Sn?.onSubAgentEnd,userInstructionService:H,pluginSkillDirectories:Re,agentPluginSkills:bt?.skills,agentPluginMcpServers:bt?.mcpServers,configExtensions:z,toolExecutors:Jr,toolPolicies:mt,workspaceManager:Tc,logger:Fe.logger,telemetry:Fe.telemetry,requestToolApproval:Le}}}function Hf(i){return i.trim().replace(/^\/+/,"").toLowerCase()}function XB(i){let l=i.trimStart().match(/^\/(\S+)([\s\S]*)$/);return l?{name:Hf(l[1]),input:l[2].trim()}:void 0}function JB(i){let l=typeof i==="string"?{reply:i}:i;return{reply:l?.reply?.trim()||void 0,submitPrompt:l?.submitPrompt?.trim()||void 0}}function RT(i){let l=new Map;for(let u of i){let c=Hf(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 PT(i,l,u={}){let c=XB(l);if(!c)return;let g=i.find((I)=>Hf(I.name)===c.name&&I.handler);if(!g?.handler)return;let b=!1;try{let I=JB(await g.handler(c.input));return b=!0,I}finally{try{sa(u.telemetry,{ulid:u.sessionId??P(),tool:`plugin_command:${c.name}`,modelId:u.modelId,provider:u.provider,success:b,...u.agentIdentity})}catch{}}}var QB=30000,ZB=600000;class MT{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)=>PT(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=YB(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=VB("sha256");try{let u=qf({cwd:i,workspacePath:i});l.update(JSON.stringify(u));for(let c of u)l.update(yf(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<QB))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??vT)({cwd:i.workspacePath,workspacePath:i.workspacePath,registry:new If({logger:this.options.logger})});i.shutdown=c.shutdown;let g=Nt({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:RT(i.commands)}}}function pt(){return new Date().toISOString()}function Pd(i){if(!i||!su(i))return;try{iH(i)}catch{}}function nH(i){let l=Mf(i);if(l)return{rootSessionId:l.rootSessionId,fileStem:`${l.agentId}__${l.teamTaskId}`};let u=L0(i);if(u)return{rootSessionId:u.rootSessionId,fileStem:u.agentId};return{rootSessionId:i,fileStem:i}}class NT{ensureSessionsDir;constructor(i){this.ensureSessionsDir=i}sessionArtifactsDir(i){return pl(this.ensureSessionsDir(),i)}ensureSessionArtifactsDir(i){let l=this.sessionArtifactsDir(i);if(!su(l))eH(l,{recursive:!0});return l}sessionMessagesPath(i){return pl(this.sessionArtifactsDir(i),`${i}.messages.json`)}sessionCompactionPath(i){return pl(this.sessionArtifactsDir(i),`${i}.compaction.json`)}sessionManifestPath(i,l=!1){let u=l?this.ensureSessionArtifactsDir(i):this.sessionArtifactsDir(i);return pl(u,`${i}.json`)}removeSessionDirIfEmpty(i){let l=this.sessionArtifactsDir(i),u=this.ensureSessionsDir();while(l.startsWith(u)&&l!==u){if(!su(l)){l=ow(l);continue}try{if(tH(l).length>0)break;rH(l)}catch{break}l=ow(l)}}removeSessionDir(i){this.removeDir(this.sessionArtifactsDir(i))}removeDir(i){if(!su(i))return;try{sH(i,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths(i,l,u){let{rootSessionId:c,fileStem:g}=nH(i),b=this.sessionArtifactsDir(c);return{messagesPath:pl(b,`${g}.messages.json`)}}}function oH(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 aH(i,l,u,c,g){if(u)PA(i.telemetry,{ulid:l,provider:i.providerId,model:i.modelId,...g});else RA(i.telemetry,{ulid:l,provider:i.providerId,model:i.modelId,...g});lH(i.telemetry,{workspacePath:c})}function lH(i,l){let u=Si("Hooks"),c=ST(l.workspacePath),g=new Map,b=u.replace(/\\/g,"/");for(let I of c){let T=I.hookEventName??"unknown",_=g.get(T)??{global:0,workspace:0},E=I.path.replace(/\\/g,"/");if(E===b||E.startsWith(`${b}/`))_.global+=1;else _.workspace+=1;g.set(T,_)}for(let[I,T]of g.entries())WA(i,I,T.global,T.workspace)}function dH(i,l){for(let u of l.mentions)BA(i,u,l.matchedFiles.includes(u)?1:0,"file",!l.matchedFiles.includes(u));for(let u of l.matchedFiles)qA(i,"file",u.length);for(let u of l.ignoredMentions)jA(i,"file","not_found",u)}function uH(i){return i?JSON.parse(JSON.stringify(i)):void 0}function cH(i){return i?JSON.parse(JSON.stringify(i)):void 0}function pH(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():"",T=Number(b.createdAt),_=Number(b.runCount);if(!I||!Number.isFinite(T)||!Number.isInteger(_))return[];return[{ref:I,createdAt:T,runCount:_,...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 qu(i){let{session:l}=i,u=uH(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:cH(i.messages)}:{},...i.usage?{usage:{...i.usage}}:{},...i.aggregateUsage?{aggregateUsage:{...i.aggregateUsage}}:{},...(()=>{let c=pH(u);return c?{checkpoint:c}:{}})()}}var qe=fH(mH);async function aw(i,l){try{return(await qe("git",["-C",i,"rev-parse","--verify","--quiet",l],{windowsHide:!0})).stdout.trim()||void 0}catch{return}}async function gH(i){if((await qe("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 qe("git",["-C",i,"rev-parse","--verify","HEAD"],{windowsHide:!0})).stdout.trim(),u=await aw(i,"refs/stash"),c=hH(),g=`refs/cline/restore-transactions/${c}`;await qe("git",["-C",i,"stash","push","--include-untracked","--message",`cline restore transaction ${c}`],{windowsHide:!0});let b=await aw(i,"refs/stash"),I=b!==void 0&&b!==u;if(I)try{await qe("git",["-C",i,"update-ref",g,b],{windowsHide:!0}),await qe("git",["-C",i,"stash","drop","stash@{0}"],{windowsHide:!0})}catch(_){try{await qe("git",["-C",i,"reset","--hard",l],{windowsHide:!0}),await qe("git",["-C",i,"clean","-fd"],{windowsHide:!0}),await qe("git",["-C",i,"stash","apply","--index",b],{windowsHide:!0})}catch(E){throw AggregateError([_,E],"Workspace snapshot and rollback both failed")}throw _}let T=!1;return{async commit(){if(T)return;if(T=!0,!I)return;await qe("git",["-C",i,"update-ref","-d",g],{windowsHide:!0}).catch(()=>{return})},async rollback(){if(T)return;if(await qe("git",["-C",i,"reset","--hard",l],{windowsHide:!0}),await qe("git",["-C",i,"clean","-fd"],{windowsHide:!0}),I)await qe("git",["-C",i,"stash","apply","--index",g],{windowsHide:!0}),await qe("git",["-C",i,"update-ref","-d",g],{windowsHide:!0});T=!0}}}function OT(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 yH(i,l){let u=OT(i).filter((g)=>g.runCount<=l),c=u.at(-1);return c?{latest:c,history:u}:void 0}function vH(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 $T(i,l){let u=0;for(let c=0;c<i.length;c+=1){let g=i[c];if(!g)continue;let b=md(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 wH(i,l){let{index:u}=$T(i,l);return i.slice(0,u+1)}function bH(i,l){let{index:u,span:c}=$T(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 IH(i){let l=i.checkpointRunCount;if(!Number.isInteger(l)||l<1)throw Error("checkpointRunCount must be a positive integer");let u=vH(OT(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:wH(i.messages??[],l)}:{}}}async function kH(i,l){if(l.kind)return l.kind;let u=await qe("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&&Gj(b)?"stash":"commit"}async function SH(i,l){try{return await qe("git",["-C",i,"cat-file","-e",`${l}^3^{commit}`],{windowsHide:!0}),!0}catch{return!1}}async function TH(i,l,u){try{let c=await qe("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 _H(i,l){if((await qe("git",["-C",i,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${i} is not a git repository`);await qe("git",["-C",i,"cat-file","-e",`${l.ref}^{commit}`],{windowsHide:!0});let u=await kH(i,l),c=u==="commit"?l.ref:`${l.ref}^1`,g=(await qe("git",["-C",i,"rev-parse","--verify",`${c}^{commit}`],{windowsHide:!0})).stdout.trim(),b=(await qe("git",["-C",i,"rev-parse","--verify","HEAD"],{windowsHide:!0})).stdout.trim();if(b!==g){let T=await TH(i,g,b),_=T&&T>0?`${T} commit${T===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: ${_}. 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 qe("git",["-C",i,"cat-file","-e",`${l.ref}^2^{commit}`],{windowsHide:!0});let I=await SH(i,l.ref);if(await qe("git",["-C",i,"update-ref","-m","cline: checkpoint restore","HEAD",g,b],{windowsHide:!0}),await qe("git",["-C",i,"reset","--hard"],{windowsHide:!0}),I)await qe("git",["-C",i,"clean","-fd"],{windowsHide:!0});if(u==="commit")return;await qe("git",["-C",i,"stash","apply",l.ref],{windowsHide:!0})}class Ds extends Error{code;constructor(i,l){super(l);this.code=i,this.name="SessionVersioningError"}}function EH(i){let l=i.sessionId.trim();if(!l)throw new Ds("invalid_restore","sessionId is required");if(!i.restoreMessages&&!i.restoreWorkspace)throw new Ds("invalid_restore","restore.messages or restore.workspace must be true");if(i.restoreMessages&&i.requiresStart)throw new Ds("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger(i.checkpointRunCount)||i.checkpointRunCount<1)throw new Ds("invalid_restore","checkpointRunCount must be a positive integer");return l}class zf{async restoreCheckpoint(i){let l=i.restore?.messages!==!1,u=i.restore?.workspace!==!1,c=Date.now(),g,b=(B,Q)=>{i.telemetry?.capture({event:"checkpoint.restore",properties:{sessionId:i.sessionId,checkpointRunCount:i.checkpointRunCount,restoreWorkspace:u,restoreMessages:l,checkpointKind:g?.kind??"unknown",outcome:B,durationMs:Date.now()-c,...Q}})},I,T,_;try{let B=EH({sessionId:i.sessionId,restoreMessages:l,restoreWorkspace:u,requiresStart:i.start===void 0,checkpointRunCount:i.checkpointRunCount}),Q=await i.getSession(B);if(!Q)throw new Ds("session_not_found",`Session ${B} not found`);if(I=Q,T=l?await i.readMessages(B):void 0,l&&T?.length===0)throw new Ds("session_messages_not_found",`No messages found for session ${B}`);_=IH({session:I,messages:T,checkpointRunCount:i.checkpointRunCount,cwd:i.cwd,restoreMessages:l}),g=_.checkpoint}catch(B){throw b("failed",{phase:"plan"}),B}let E=qu({session:I,messages:T}),A,C=[],N,M;if(l){let{startSession:B,getStartedSessionId:Q,cleanupStartedSession:H}=i;if(!i.start||!B||!Q||!H)throw new Ds("invalid_restore","startSession, getStartedSessionId, and cleanupStartedSession are required when restore.messages is true");M={startSession:B,getStartedSessionId:Q,cleanupStartedSession:H},A=yH(I,i.checkpointRunCount),C=i.restore?.omitCheckpointMessageFromSession?bH(T??[],i.checkpointRunCount):_.messages??[];let z={sourceSession:I,sourceMessages:T,sourceSnapshot:E,plan:_,restoredCheckpointMetadata:A,initialMessages:C,restoreMessages:l,restoreWorkspace:u,checkpointRunCount:i.checkpointRunCount};N=i.buildStartInput?await i.buildStartInput(z,i.start):i.start}let O=i.applyWorkspaceCheckpoint??_H,L=i.beginWorkspaceRestoreTransaction??(i.applyWorkspaceCheckpoint?void 0:gH),D=u&&L?await L(_.cwd):void 0,F=!1,j;try{if(u)await O(_.cwd,_.checkpoint);if(!M)return await D?.commit(),F=!0,b("success"),{checkpoint:_.checkpoint,sourceSnapshot:E};let B=await M.startSession(N);j={result:B,cleanup:M.cleanupStartedSession};let Q=M.getStartedSessionId(B);if(!Q)throw new Ds("invalid_restore","Restored session did not return a session id");await(i.retainCheckpointRefs??Zj)(_.cwd,Q,A?.history??[]);let H=i.readRestoredSession?await i.readRestoredSession(Q):void 0,z=H?qu({session:H,messages:C}):void 0;return await D?.commit(),F=!0,b("success"),{sessionId:Q,startResult:B,messages:_.messages,checkpoint:_.checkpoint,sourceSnapshot:E,...z?{restoredSnapshot:z}:{}}}catch(B){let Q=[];if(j)try{await j.cleanup(j.result)}catch(H){Q.push(H)}if(D&&!F)try{await D.rollback()}catch(H){Q.push(H)}if(b("failed",{workspaceRolledBack:!!D&&!F,recovered:Q.length===0}),Q.length>0)throw AggregateError([B,...Q],"Checkpoint restore failed and recovery did not complete");throw B}}}var xH=ae({task:e().optional(),systemPrompt:e().optional()});class LT{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=Bo(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:Um({metadata:ln(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=Kn(i.sessionContext);if(!l)return;let u=xH.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=Mv(l,i.agentId),g=await this.adapter.getSession(c),b=pt(),I=this.manifestStore.artifacts.subagentArtifactPaths(c,i.agentId,this.activeTeamTaskSessionId(l,i.parentAgentId)),T=i.prompt??g?.prompt??void 0;if(!T)T=await this.adapter.claimSpawnRequest(l,i.parentAgentId)??`Subagent run by ${i.parentAgentId}`;if(!g){let _=this.buildSubsessionRow(u,{sessionId:c,mode:"subagent",parentSessionId:l,parentAgentId:i.parentAgentId,agentId:i.agentId,conversationId:i.conversationId,prompt:T,startedAt:b,...I});return await this.adapter.upsertSession(_),this.manifestStore.initializeMessagesFile(_,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??T??null,metadata:Um({metadata:ln(g.metadata,{mode:"subagent",version:Bo(u.metadata)?.version}),prompt:g.prompt??T??null}),expectedStatusLock:g.statusLock}),c}async upsertSubagentSessionFromHook(i){if(!i.parent_agent_id)return;let l=Kn(i.sessionContext);if(!l)return;if(i.hookName==="session_shutdown"){let u=Mv(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,QU(l))}async applySubagentStatusBySessionId(i,l){let u=await this.adapter.getSession(i);if(!u)return;let c=Ar(l)?null:pt(),g=Ar(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=YU(i,l),b=pt(),{messagesPath:I}=this.manifestStore.artifacts.subagentArtifactPaths(g,l),T=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(T),this.manifestStore.initializeMessagesFile(T,I,b);let _=this.teamTaskQueueKey(i,l),E=this.teamTaskSessionsByAgent.get(_)??[];E.push(g),this.teamTaskSessionsByAgent.set(_,E)}async onTeamTaskEnd(i,l,u,c,g,b){let I=this.teamTaskQueueKey(i,l),T=this.teamTaskSessionsByAgent.get(I);if(!T||T.length===0)return;let _=T.shift();if(T.length===0)this.teamTaskSessionsByAgent.delete(I);if(!_)return;let E=g?.messages??b,A=this.toPersistedMessages(E,g,b);if(A)await this.manifestStore.persistSessionMessages(_,A);await this.applySubagentStatusBySessionId(_,u),this.teamTaskLastHeartbeatBySession.delete(_),this.teamTaskLastProgressLineBySession.delete(_)}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 T=c?.kind??"progress";if(T==="heartbeat"){let E=Date.now(),A=this.teamTaskLastHeartbeatBySession.get(b)??0;if(E-A<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(b,E)}let _=T==="heartbeat"?"[progress] heartbeat":T==="text"?`[progress] text: ${I}`:`[progress] ${I}`;if(this.teamTaskLastProgressLineBySession.get(b)===_)return;this.teamTaskLastProgressLineBySession.set(b,_)}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)??CH(tt(),"hooks.jsonl");AH(l,`${JSON.stringify({ts:pt(),...i})}
596
+ `,"utf8")}}var DT=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 $H(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 T=I.index,_=i.slice(u,T);try{let E=X.parse(_);if(!E||typeof E!=="object"||Array.isArray(E))continue;DT.parse(E);let A=i.slice(T+I[0].length);g={frontmatter:_,body:A}}catch{}}if(g)return g;throw Error("Missing closing YAML frontmatter delimiter in agent config file.")}function dw(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 LH(i){return i.trim().toLowerCase()}function DH(i){let l=NH(i).toLowerCase();return l===".yml"||l===".yaml"}function UH(i,l={}){let{frontmatter:u,body:c}=$H(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=DT.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:dw(b.tools),skills:dw(b.skills),providerId:b.providerId,modelId:b.modelId,maxIterations:b.maxIterations,systemPrompt:I,path:l.path}}function FH(i){let l=i.searchPaths??Za(i.workspaceRoot),u=new Map,c=[];for(let g of l.filter(Boolean)){if(!RH(g))continue;let b;try{b=PH(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()||!DH(I.name))continue;let T=OH(g,I.name);try{let _=MH(T,"utf8"),E=UH(_,{path:T}),A=LH(E.name);if(!u.has(A))u.set(A,E)}catch(_){c.push({path:T,error:_ instanceof Error?_:Error(String(_))})}}}return{configs:Array.from(u.values()).sort((g,b)=>(g.path?lw(g.path):g.name).localeCompare(b.path?lw(b.path):b.name)),errors:c}}var Tp="subagent_",iu=64,qH=t({prompt:e().trim().min(1).describe("Task for the subagent to perform")});function jH(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 BH(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 HH(i){let l=jH(i)||"agent",u=BH(i).slice(0,6),c=`${Tp}${l}`;if(c.length<=iu)return c;let g=iu-Tp.length-u.length-1,b=l.slice(0,Math.max(1,g));return`${Tp}${b}_${u}`.slice(0,iu)}function zH(i){let l=new Set,u=[];for(let c of[...i].sort((g,b)=>g.name.localeCompare(b.name))){let g=HH(c.name),b=g,I=2;while(l.has(b)){let T=`_${I++}`,_=Math.max(1,iu-T.length);b=`${g.slice(0,_)}${T}`}l.add(b),u.push({toolName:b,config:c})}return u}function WH(i,l){return{...i,providerId:l.providerId??i.providerId,modelId:l.modelId??i.modelId,maxIterations:l.maxIterations??i.maxIterations}}function KH(i){return zH(i.agents).map(({toolName:l,config:u})=>k({name:l,executionMode:"parallel",description:`Use the "${u.name}" subagent: ${u.description}`,inputSchema:S(qH),execute:async(c,g)=>{let b=i.configProvider.getRuntimeConfig(),I=C0(WH(b,u)),T=i.createSubAgentTools?await i.createSubAgentTools(u,c,g):[],_=R0({kind:"subagent",prompt:u.systemPrompt,configProvider:I,tools:T,maxIterations:u.maxIterations,parentAgentId:g.agentId,abortSignal:g.signal,onEvent:i.onSubAgentEvent,hookErrorMode:i.hookErrorMode}),E=_.getAgentId(),A=_.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 M=await _.run(c.prompt),O={text:M.text,iterations:M.iterations,finishReason:M.finishReason,usage:{inputTokens:M.usage.inputTokens,outputTokens:M.usage.outputTokens}};if(i.onSubAgentEnd)try{await i.onSubAgentEnd({subAgentId:E,conversationId:A,parentAgentId:C,input:N,result:O,agentResult:M})}catch{}return O}catch(M){if(i.onSubAgentEnd)try{await i.onSubAgentEnd({subAgentId:E,conversationId:A,parentAgentId:C,input:N,error:M instanceof Error?M:Error(String(M))})}catch{}throw M}},timeoutMs:300000,retryable:!1}))}function kc(i){let l=i.type;switch(l){case"agent_event":return!1;case"run_progress":return UT(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 GH(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 UT(i);default:return!1}}function UT(i){return i.type==="run_progress"&&i.run.status==="queued"}var uw=4000;function cw(i){return typeof i==="object"&&i!==null}function Md(i,l=0){return typeof i==="number"&&Number.isFinite(i)?i:l}function _p(i){return typeof i==="number"&&Number.isFinite(i)?i:void 0}function XH(i){return i.length>uw?`${i.slice(0,uw-3)}...`:i}function Wo(i){if(!cw(i))return;let l=cw(i.usage)?i.usage:{},u=i.finishReason;return{text:XH(typeof i.text==="string"?i.text:""),iterations:Md(i.iterations),finishReason:typeof u==="string"?u:"completed",durationMs:Md(i.durationMs),usage:{inputTokens:Md(l.inputTokens),outputTokens:Md(l.outputTokens),cacheReadTokens:_p(l.cacheReadTokens),cacheWriteTokens:_p(l.cacheWriteTokens),totalCost:_p(l.totalCost)}}}function JH(i){if(i.result===void 0)return i;return{...i,result:Wo(i.result)}}function ju(i){switch(i.type){case"task_end":{let{messages:l,result:u,error:c,...g}=i;return{...g,result:Wo(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:JH(i.run)};default:return i}}function Ms(){return new Date().toISOString()}function pw(i,l){if(l<=0)return 0;return Math.round(i/l*100)}function VH(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 YH(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},T=0,_=0;for(let D of l.members)if(u[D.status]+=1,D.role==="lead")T+=1;else _+=1;let E=[],A=[],C=l.tasks.filter((D)=>D.status==="completed").length,N=new Map(l.tasks.map((D)=>[D.id,D]));for(let D of l.tasks){if(c[D.status]+=1,D.status==="blocked"){E.push(D.id);continue}if(D.status!=="pending")continue;if(D.dependsOn.every((F)=>N.get(F)?.status==="completed"))A.push(D.id)}let M=[],O,L=0;for(let D of l.runs){if(g[D.status]+=1,D.status==="queued"||D.status==="running")M.push(D.id);let F=D.startedAt.getTime();if(F>=L)L=F,O=D.id}for(let D of l.outcomes)b[D.status]+=1;for(let D of l.outcomeFragments)I[D.status]+=1;return{teamName:i,updatedAt:Ms(),members:{total:l.members.length,byStatus:u,leadCount:T,teammateCount:_},tasks:{total:l.tasks.length,byStatus:c,blockedTaskIds:E,readyTaskIds:A,completionPct:pw(C,l.tasks.length)},runs:{total:l.runs.length,byStatus:g,activeRunIds:M,latestRunId:O},outcomes:{total:l.outcomes.length,byStatus:b,finalizedPct:pw(b.finalized,l.outcomes.length),missingRequiredSections:VH(l.outcomes,l.outcomeFragments)},fragments:{total:l.outcomeFragments.length,byStatus:I}}}function QH(i){let{event:l}=i;switch(l.type){case"team_task_updated":return{teamName:i.teamName,sessionId:i.sessionId,eventType:l.type,ts:Ms(),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:Ms(),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:Ms(),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:Ms(),outcomeId:l.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:i.teamName,sessionId:i.sessionId,eventType:l.type,ts:Ms(),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:Ms(),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:Ms(),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:Ms(),agentId:l.agentId}}return{teamName:i.teamName,sessionId:i.sessionId,eventType:l.type,ts:Ms()}}function Nd(){return{reset:!1,tasks:new Set,mailbox:new Set,missionLog:new Set,runs:new Set,outcomes:new Set,outcomeFragments:new Set}}function xl(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 mw(i,l){return i?.abortRequested===!0||i?.status==="stopped"&&xl(l)}function ZH(i){if(i.finishReason==="aborted")return"cancelled";if(i.finishReason==="error")return"failed";return"completed"}var ez=600000,hw="recovered_queued";function tz(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 FT{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=Nd();runQueue=[];queuedRunDispatchTimer;outcomes=new Map;outcomeFragments=new Map;missionLogIntervalSteps;missionLogIntervalMs;maxConcurrentRuns;constructor(i){this.teamName=i.teamName,this.teamId=`t_${ur(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((T)=>T.toAgentId===i&&(!u||!T.readAt)),I=typeof g==="number"&&g>0?b.slice(Math.max(0,b.length-g)):b;if(c){let T=new Date,_=!1;for(let E of I)if(!E.readAt)E.readAt=T,this.dirty.mailbox.add(E.id),_=!0;if(_)this.notifyStateDirty()}return I.map((T)=>({...T}))}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=Nd(),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:Wo(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,so(i.tasks.map((u)=>u.id),"task_")),this.messageCounter=Math.max(this.messageCounter,so(i.mailbox.map((u)=>u.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,so(i.missionLog.map((u)=>u.id),"log_")),this.runCounter=Math.max(this.runCounter,so((i.runs??[]).map((u)=>u.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,so((i.outcomes??[]).map((u)=>u.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,so((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:ez,consumePendingUserMessage:()=>{let I=this.members.get(i);if(!I||!I.pendingSteerMessage)return;let T=I.pendingSteerMessage;return I.pendingSteerMessage=void 0,T},onEvent:(I)=>{l.onEvent?.(I),this.emitEvent({type:"agent_event",agentId:i,event:I}),this.trackMeaningfulEvent(i,I)}},g=new yc(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(!xl(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),T=ZH(I);if(this.emitEvent({type:"task_end",agentId:i,status:T,result:I}),T==="completed")this.recordProgressStep(i,`Completed a delegated run (${I.iterations} iterations)`,u?.taskId,!0);else if(T==="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=mw(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===hw;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?tz(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=Wo(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(xl(c)&&mw(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 fw(l);return{...u}}async awaitAllRuns(i=250){while(Array.from(this.runs.values()).some((l)=>["queued","running"].includes(l.status)))await fw(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(!xl(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=hw,!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(!xl(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=Nd(),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=Nd();let l=(g,b)=>{let I=[];for(let T of g){let _=b(T);if(_!==void 0)I.push({..._})}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 fw(i){return new Promise((l)=>setTimeout(l,i))}function so(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 rz(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}),th(i);break}default:break}}async function sz(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 iz=1000,gw=new WeakMap;function nz(i,l,u,c,g=Date.now){let b=i.runtime.teamRuntime;if(!b)return;let I=()=>oz(i,l,u,c),T=gw.get(b);if(!T)T={last:0},gw.set(b,T);if(kc(u)){T.pending=void 0,I();return}let _=g(),E=iz-(_-T.last);if(E<=0){T.last=_,T.pending=void 0,I();return}if(T.pending=I,!T.timer){let A=T;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 oz(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:QH({teamName:b,sessionId:l,event:u}),summary:YH(b,g.exportState())}})}function eh(i){return i.activeTeamRunIds.size>0||i.pendingTeamRunUpdates.length>0}function az(i,l){if(i.aborting)return!1;if(!(l==="completed"||l==="max_iterations"))return!1;return i.config.enableAgentTeams===!0&&eh(i)}function th(i){let l=i.teamRunWaiters.splice(0);for(let u of l)u()}async function lz(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 dz(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 rh(`System-delivered teammate async run updates:
602
+ ${u.join(`
603
+ `)}
604
+
605
+ ${g}`,i.config.mode)}function rh(i,l){return or(i,l==="plan"?"plan":l==="yolo"?"yolo":"act")}function gz(i){return uz("sha1").update(i).digest("hex")}function qT(i){return Boolean(i&&typeof i==="object"&&"code"in i)}function yw(i){return qT(i)&&i.code==="ENOENT"}function vw(i){return qT(i)&&(i.code==="EACCES"||i.code==="EPERM")}class jT{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=cz(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(!yw(u)&&!vw(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:T}=b;if(u.add(b.directoryPath),i.includeFile&&!i.includeFile(I,T))continue;try{let _=await mz(T,"utf8"),E={type:i.type,directoryPath:b.directoryPath,fileName:I,filePath:T,content:_},A=i.parseFile(E),C=i.resolveId(A,E).trim();if(!C)continue;l.set(C,{type:i.type,id:C,item:A,filePath:T,fingerprint:gz(_)})}catch(_){if(this.emitParseErrors)this.emit({kind:"error",type:i.type,error:_,filePath:T})}}}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 pz(i,{withFileTypes:!0}),u=[];for(let c of l){let g=fz(i,c.name);if(!(c.isFile()||c.isSymbolicLink()&&await hz(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(yw(l)||vw(l))return[];throw l}}}var Fl="SKILL.md",Iz="managed.json",kz=new Set([".md",".markdown",".txt"]);function ql(i){return i.trim().toLowerCase()}function vn(i){let l=i;return l?.code==="ENOENT"||l?.code==="ENOTDIR"||l?.code==="EACCES"||l?.code==="EPERM"||l?.code==="ELOOP"}function Hu(i){return kz.has(Bu(i).toLowerCase())}function BT(i){let l=[],u=new Set;for(let c of i){let g=Hs(c);if(u.has(g))continue;u.add(g),l.push(c)}return l}function Sz(i){let l=[...i?.directories??xz(i?.workspacePath)];if(i?.pluginSkillDirectories)l.push(...i.pluginSkillDirectories);else if(i?.includePluginSkills)l.push(...Lj({pluginPaths:i.pluginPaths,workspacePath:i.workspacePath,cwd:i.cwd??i.workspacePath}));if(i?.agentPluginSkills)l.push(...i.agentPluginSkills.map((u)=>u.directoryPath));return BT(l)}function ww(i,l){let u=bz(i,l);return u===""||!u.startsWith("..")&&!wz(u)}async function Tz(i){try{let[l,u,c]=await Promise.all([Ep(i.pluginRoot),Ep(i.directoryPath),Ep(i.filePath)]);if(l!==Hs(i.pluginRoot)||!ww(l,u)||!ww(l,c)||!(await Uo(u)).isDirectory()||!(await Uo(c)).isFile())return[];return[{directoryPath:i.directoryPath,fileName:Fl,filePath:c}]}catch(l){if(vn(l))return[];throw l}}async function Kf(i){try{let l=await Wf(i,{withFileTypes:!0}),u=[];for(let c of l){if(!c.isDirectory())continue;let g=Cr(i,c.name),b=Cr(g,Iz);try{let I=await yz(b,"utf8"),T=JSON.parse(I);if(T&&typeof T==="object")u.push(g)}catch(I){if(vn(I))continue;if(I?.name==="SyntaxError")continue;throw I}}return u.sort((c,g)=>c.localeCompare(g))}catch(l){if(vn(l))return[];throw l}}function Gf(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 T=I instanceof Error?I.message:String(I);return{data:{},body:l,hadFrontmatter:!0,parseError:T}}}function zu(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 Go(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 _z(i,l){if(zs(i.filePath).toLowerCase()!==gt.toLowerCase())return zs(i.filePath,Bu(i.filePath));if(l&&Hs(i.filePath)===Hs(l,gt))return"Workspace AGENTS.md";if(Hs(i.filePath)===Hs(Yn()))return"Global AGENTS.md";return zs(i.filePath,Bu(i.filePath))}function Ez(i,l){let{data:u,body:c,parseError:g}=Gf(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=zu(u.name,"name",!1)??l.trim();if(!I)throw Error("Missing skill name.");return{name:I,description:zu(u.description,"description",!1),disabled:Go(u.disabled,"disabled")??(Go(u.enabled,"enabled")===!1?!0:void 0),instructions:b,frontmatter:u}}function Az(i,l){let{data:u,body:c,parseError:g}=Gf(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=zu(u.name,"name",!1)??l.trim();if(!I)throw Error("Missing rule name.");return{name:I,disabled:Go(u.disabled,"disabled")??(Go(u.enabled,"enabled")===!1?!0:void 0),instructions:b,frontmatter:u}}function Cz(i,l){let{data:u,body:c,parseError:g}=Gf(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=zu(u.name,"name",!1)??l.trim();if(!I)throw Error("Missing workflow name.");return{name:I,disabled:Go(u.disabled,"disabled")??(Go(u.enabled,"enabled")===!1?!0:void 0),instructions:b,frontmatter:u}}function xz(i){return Ir(i)}function Rz(i){return Sr(i)}function Pz(i){return Er(i)}async function HT(i){if(zs(i)===".cline"){let l=await Kf(i);return(await Promise.all(l.map((u)=>HT(Cr(u,et))))).flat()}try{let l=await Wf(i,{withFileTypes:!0}),u=[];for(let c of l){if(c.isFile()&&c.name===Fl){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 Uo(g).then((b)=>b.isDirectory()).catch((b)=>{if(vn(b))return!1;throw b}))u.push({directoryPath:g,fileName:Fl,filePath:Cr(g,Fl)})}return u}catch(l){if(vn(l))return[];throw l}}async function Wu(i){if(zs(i)===".cline"){let l=await Kf(i);return(await Promise.all(l.map((u)=>Wu(Cr(u,"rules.md"))))).flat()}try{if((await Uo(i)).isFile())return[{directoryPath:vz(i),fileName:zs(i),filePath:i}]}catch(l){if(!vn(l))throw l}try{let l=await Wf(i,{withFileTypes:!0}),u=[];for(let g of l){if(!Hu(g.name))continue;let b=Cr(i,g.name);if(!(g.isFile()||g.isSymbolicLink()&&await Uo(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 Uo(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(vn(l))return[];throw l}}async function Mz(i){if(zs(i)===".cline"){let l=await Kf(i);return(await Promise.all(l.map((u)=>Wu(Cr(u,Hi))))).flat()}return Wu(i)}function Nz(i){let l=Sz(i),u=new Map((i?.agentPluginSkills??[]).map((g)=>[Hs(g.directoryPath),g])),c=i?.workspacePath?Cr(i.workspacePath,".cline"):void 0;return{type:"skill",directories:c?BT([...l,c]):l,discoverFiles:(g)=>{let b=u.get(Hs(g));return b?Tz(b):HT(g)},includeFile:(g)=>g===Fl,parseFile:(g)=>{let b=u.get(Hs(g.directoryPath));if(!b)return Ez(g.content,zs(g.directoryPath));let I=H0(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"?`${ql(g.source.pluginName)}:${ql(g.name)}`:ql(g.name)}}function Oz(i){let l=i?.directories??Rz(i?.workspacePath),u=i?.workspacePath?Cr(i.workspacePath,".cline"):void 0;return{type:"rule",directories:u?[...l,u]:l,discoverFiles:Wu,includeFile:(c,g)=>c===".clinerules"||Hu(c)||Hu(g),parseFile:(c)=>Az(c.content,_z(c,i?.workspacePath)),resolveId:(c)=>ql(c.name)}}function $z(i){let l=i?.directories??Pz(i?.workspacePath),u=i?.workspacePath?Cr(i.workspacePath,".cline"):void 0;return{type:"workflow",directories:u?[...l,u]:l,discoverFiles:Mz,includeFile:(c)=>Hu(c),parseFile:(c)=>Cz(c.content,zs(c.filePath,Bu(c.filePath))),resolveId:(c)=>ql(c.name)}}function Lz(i){let l=[Nz(i?.skills),Oz(i?.rules),$z(i?.workflows)];return new jT(l,{debounceMs:i?.debounceMs,emitParseErrors:i?.emitParseErrors})}function Vo(i){return i.trim().toLowerCase().replace(/\s+/g,"-").replace(/[^\p{L}\p{N}_.:@-]+/gu,"-").replace(/-+/g,"-").replace(/^-/,"").replace(/-$/,"")}function Uz(i){let l=Vo(i).replace(/[^a-z0-9_-]+/g,"-").replace(/^-/,"").replace(/-$/,""),u=Dz("sha256").update(i).digest("hex").slice(0,12);return`${l||"command"}-${u}`}function Fz(i,l){if(i.description?.trim())return Bn(i.description,".");if(l==="workflow")return;return Bn(i.instructions,".")}function qz(i){return i.disabled!==!0}function jz(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 bw(i,l){return[...i.getSnapshot(l).entries()].map(([u,c])=>({id:u,record:c})).filter(({record:u})=>qz(u.item)).map(({id:u,record:c})=>({id:u,name:Vo(c.item.name)||`${l}-${Uz(u)}`,instructions:jz(c.item,l),description:Fz(c.item,l),kind:l})).sort((u,c)=>u.name.localeCompare(c.name)||u.id.localeCompare(c.id))}function Xf(i){let l=new Map;for(let u of[...bw(i,"skill"),...bw(i,"workflow")])if(!l.has(u.name))l.set(u.name,u);return[...l.values()].sort((u,c)=>u.name.localeCompare(c.name))}function Bz(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=Vo(g);if(!b)return i;let I=g.length+1,T=i.slice(I),_=Xf(l).find((E)=>E.name===b);if(!_)return i;if(_.kind==="skill"&&u?.expandSkillCommands===!1)return i;return`${_.instructions}${T}`}function Hz(i){return i.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;")}function zT(i,l){let u=l?.trim(),c=u?`
607
+ <command-args>${u}</command-args>`:"",g=i.source?.type==="agent-plugin"?`
608
+ <skill-root>${Hz(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 Ku(i){return i.trim().replace(/^\/+/,"").toLowerCase()}function zz(i){if(!i||i.length===0)return;let l=i.map(Ku).filter((u)=>u.length>0);return l.length>0?new Set(l):void 0}function Wz(i,l,u){if(!u)return!0;let c=Ku(i),g=Ku(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 Sc(i,l){let u=zz(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)=>Wz(c.id,c.name,u))}function Kz(i,l){return Sc(i,l).filter((u)=>!u.disabled).map((u)=>u.name.trim()).filter((u)=>u.length>0).sort((u,c)=>u.localeCompare(c))}function Gz(i,l,u){let c=Ku(l);if(!c)return{error:"Missing skill name."};let g=Sc(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,T=g.filter(({id:A})=>{if(A===I)return!0;return A.endsWith(`:${I}`)}),_=T.filter(({skill:A})=>A.disabled!==!0);if(_.length===1){let{id:A,skill:C}=_[0];return{id:A,skill:C}}if(_.length>1)return{error:`Skill "${l}" is ambiguous. Use one of: ${_.map(({id:A})=>A).join(", ")}`};if(T.length===1){let{skill:A}=T[0];return{error:`Skill "${A.name}" is configured but disabled.`}}if(T.length>1)return{error:`Skill "${l}" is ambiguous, and all matches are disabled: ${T.map(({id:A})=>A).join(", ")}`};let E=Kz(i,u);return{error:E.length>0?`Skill "${l}" not found. Available skills: ${E.join(", ")}`:"No skills are currently available."}}function WT(i,l=Promise.resolve(),u){let c=new Set,g=async(b,I)=>{await l;let T=Gz(i,b,u);if("error"in T)return T.error;let{id:_,skill:E}=T;if(c.has(_))return`Skill "${E.name}" is already running.`;c.add(_);try{return zT(E,I)}finally{c.delete(_)}};return Object.defineProperty(g,"configuredSkills",{get:()=>Sc(i,u).map(({skill:b,...I})=>I),enumerable:!0,configurable:!1}),g}function Xz(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:()=>kA(i.watcher)});if(i.registerSkillsTool)u.registerTool(hc(WT(i.watcher,l,i.allowedSkillNames)));for(let c of Xf(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 Od(i){return i.trim().replace(/^\/+/,"").toLowerCase()}function Iw(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,T)=>{let _=Od(b);if(!_)return"Missing skill name.";let E=c(),A=E.filter(({metadata:O})=>Od(O.id)===_),C=A.length>0?A:E.filter(({metadata:O})=>{let L=Od(O.id);return Od(O.name)===_||L.endsWith(`:${_}`)}),N=C.filter(({metadata:O})=>!O.disabled);if(N.length===1)return N[0].executor(N[0].metadata.id,I,T);if(N.length>1)return`Skill "${b}" is ambiguous. Use one of: ${N.map(({metadata:O})=>O.id).join(", ")}`;if(C.length>0)return`Skill "${b}" is configured but disabled.`;let M=E.filter(({metadata:O})=>!O.disabled).map(({metadata:O})=>O.id).sort((O,L)=>O.localeCompare(L));return M.length>0?`Skill "${b}" not found. Available skills: ${M.join(", ")}`:"No skills are currently available."};return Object.defineProperty(g,"configuredSkills",{get:()=>c().map(({metadata:b})=>b),enumerable:!0,configurable:!1}),g}function Jz(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=Vo(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)=>Iw(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:()=>MI(l("rule"))});if(c.registerSkillsTool)g.registerTool(hc(Iw(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 T=I.trim();return T?`${b.instructions}
616
+
617
+ ${T}`:b.instructions}})}})}}class KT{watcher;ready;stopped=!1;constructor(i){this.watcher=Lz(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 Xf(this.watcher)}resolveRuntimeSlashCommand(i,l){return Bz(i,this.watcher,l)}hasConfiguredSkills(i){return Sc(this.watcher,i).some((l)=>!l.disabled)}createSkillsExecutor(i){return WT(this.watcher,(this.ready??Promise.resolve()).catch(()=>{}),i)}createExtension(i){return Xz({...i,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function sh(i){return new KT(i)}var Vz=["model","app"];function GT(){return{extensions:{["io.modelcontextprotocol/ui"]:{mimeTypes:["text/html;profile=mcp-app"]}}}}function XT(i){try{return new URL(i).protocol==="ui:"}catch{return!1}}function Yz(i){return typeof i==="object"&&i!==null&&!Array.isArray(i)}function Jf(i){let l=i._meta?.ui;if(!Yz(l))return;let u=typeof l.resourceUri==="string"&&XT(l.resourceUri)?l.resourceUri:void 0,c=Array.isArray(l.visibility)?l.visibility.filter((g)=>g==="model"||g==="app"):Vz;return{resourceUri:u,visibility:c}}function JT(i){return Jf(i)?.visibility.includes("model")??!0}function Qz(i){return Jf(i)?.visibility.includes("app")??!0}AI();function YT(i){return Ue(i)*1000}function kw(i,l,u){if(!(i instanceof q)||i.code!==Y.RequestTimeout)return i;return new q(i.code,qi(l,u),i.data)}var rW=new Set([301,302,303,307,308]),Sw=20,sW=new Set(["authorization","cookie","proxy-authorization"]),iW=new Set(["mcp-protocol-version","mcp-session-id"]);function nW(i){if(!i.headers||!i.restrictConfiguredHeadersToOrigin)return i.headers;let l=Object.entries(i.headers).filter(([u])=>{let c=u.toLowerCase();if(iW.has(c))return!1;return c!=="authorization"||!i.oauthProvider});return l.length>0?Object.fromEntries(l):void 0}function oW(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((T,_)=>{let E=_.toLowerCase();if(u.has(E)||sW.has(E))I.push(_)});for(let T of I)b.delete(T)};return async(b,I)=>{let T=b instanceof Request?new Request(b,I):new Request(String(b),I),_=new URL(T.url),E=T.method,A=E==="GET"||E==="HEAD"?void 0:await T.clone().arrayBuffer(),C=new Headers(T.headers);if(_.origin!==l)g(C);for(let N=0;;N+=1){let M=await c(_,{method:E,headers:C,body:A,redirect:"manual",signal:T.signal});if(!rW.has(M.status))return M;if(N>=Sw)throw await M.body?.cancel().catch(()=>{return}),Error(`MCP endpoint exceeded ${Sw} redirects.`);let O=M.headers.get("location");if(!O)return M;let L=new URL(O,_);if(await M.body?.cancel().catch(()=>{return}),L.origin!==l)g(C);if(M.status===303&&E!=="GET"&&E!=="HEAD"||(M.status===301||M.status===302)&&E==="POST")E="GET",A=void 0,C.delete("content-length"),C.delete("content-type");_=L}}}function aW(i){return{client_name:"Cline",redirect_uris:[i],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function Tw(i){return i?{client_id:i.clientId,...i.clientSecret?{client_secret:i.clientSecret}:{}}:void 0}function nu(i,l){return i?.client_id===l?.client_id&&i?.client_secret===l?.client_secret}function ml(i,l,u){if(!nu(l.clientInformation,u))throw new ec(i)}function _w(i){let l={};try{l=cA(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(T)=>{try{l=await mA(i.serverName,T,{filePath:i.settingsPath,expectedOAuthClient:b})}catch(_){if(i.settingsPath||_ instanceof ec)throw _;l=Zu(T(l))??{}}};return{provider:{get redirectUrl(){return l.redirectUrl??i.redirectUrl},get clientMetadata(){return aW(l.redirectUrl??i.redirectUrl)},state:()=>(c=tW(),c),clientInformation:g,saveClientInformation:async(T)=>{let _=l.clientInformation;await I((E)=>{ml(i.serverName,E,_);let A=!nu(E.clientInformation,T);return{...E,clientInformation:T,...A?{tokens:void 0,lastAuthenticatedAt:void 0}:{},redirectUrl:i.redirectUrl,lastError:void 0}})},tokens:()=>g()?.client_id&&nu(l.clientInformation,g())?l.tokens:void 0,saveTokens:async(T)=>{let _=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)ml(i.serverName,A,E);return{...A,tokens:T,clientInformation:E,redirectUrl:i.redirectUrl,lastError:void 0,lastAuthenticatedAt:_}})},redirectToAuthorization:async(T)=>{u=T.toString(),await i.onAuthorizationUrl?.(u)},saveCodeVerifier:async(T)=>{let _=g();await I((E)=>(ml(i.serverName,E,_),{...E,codeVerifier:T,redirectUrl:i.redirectUrl}))},codeVerifier:()=>{if(!l.codeVerifier)throw Error(`Missing OAuth code verifier for MCP server "${i.serverName}".`);return l.codeVerifier},invalidateCredentials:async(T)=>{let _=l.clientInformation;await I((E)=>{if(ml(i.serverName,E,_),T==="all")return{lastError:E.lastError,redirectUrl:E.redirectUrl};return{...E,...T==="client"?{clientInformation:void 0}:{},...T==="tokens"?{tokens:void 0,lastAuthenticatedAt:void 0}:{},...T==="verifier"?{codeVerifier:void 0}:{},...T==="discovery"?{discoveryState:void 0}:{}}})},saveDiscoveryState:async(T)=>{let _=l.clientInformation;await I((E)=>(ml(i.serverName,E,_),{...E,discoveryState:T}))},discoveryState:()=>l.discoveryState},getLastAuthorizationUrl:()=>u,getLastOAuthState:()=>c,resetInteractiveState:async()=>{await I((T)=>{let _=i.clientInformation,E=_!==void 0&&!nu(T.clientInformation,_);return{...T,..._?{clientInformation:_}:{},...E?{tokens:void 0,lastAuthenticatedAt:void 0}:{},codeVerifier:void 0,discoveryState:void 0,lastError:void 0,redirectUrl:i.redirectUrl}})},markError:async(T)=>{await I((_)=>({..._,lastError:T}))},markConnectionError:async(T)=>{await I((_)=>({..._,lastError:T,authorizationRequired:void 0}))},markAuthorizationRequired:async(T)=>{await I((_)=>({..._,lastError:T,authorizationRequired:!0}))},clearError:async()=>{await I((T)=>({...T,lastError:void 0,authorizationRequired:void 0}))}}}function lW(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=nW({headers:l.headers,oauthProvider:i.oauthProvider,restrictConfiguredHeadersToOrigin:i.restrictConfiguredHeadersToOrigin}),c=u?{headers:u}:void 0,g=i.restrictConfiguredHeadersToOrigin&&u?oW({endpointUrl:l.url,configuredHeaders:u,baseFetch:i.fetch}):i.fetch,b=i.oauthProvider?g:async(I,T)=>{let _=await(g??globalThis.fetch)(I,T);if(_.status===401)throw await _.body?.cancel().catch(()=>{return}),new ot("MCP server requires authorization");return _};if(l.type==="sse")return new Ko(new URL(l.url),{authProvider:i.oauthProvider,requestInit:c,eventSourceInit:{fetch:(I,T)=>(g??globalThis.fetch)(I,T)},fetch:b});return new Ho(new URL(l.url),{authProvider:i.oauthProvider,requestInit:c,fetch:b})}function Ew(i){return i instanceof ot||i instanceof go&&i.code===401}var dW="2024-11-05",uW=1e4,cW=1e4,Aw="http://127.0.0.1:1456/mcp/oauth/callback",Cw=250,Ap=2000;function nn(i){return i instanceof Error?i.message:String(i)}async function $d(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 pW(i,l,u){let c=nn(l),g=nn(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 xw(i){return Buffer.from(`${JSON.stringify(i)}
618
+ `,"utf8")}function Rw(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 ih{buffer="";decoder=new VT("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 nh{buffer="";decoder=new VT("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 QT{registration;process;processClose;nextRequestId=1;pending=new Map;framedParser=new ih;newlineParser=new nh;stderrBuffer="";stdinFailure;stdinFailureTimer;connected=!1;protocolMode="newline";requestTimeoutMs;connectAttemptTimeoutMs;mcpApps;constructor(i,l=!1){this.registration=i,this.mcpApps=l,this.requestTimeoutMs=YT(i.timeoutSeconds),this.connectAttemptTimeoutMs=Ve(i.timeoutSeconds)?this.requestTimeoutMs:uW}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:dW,capabilities:this.mcpApps?GT():{},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(()=>{}),pW(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 eW(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 $d(l,Ap))throw Error(`MCP process for "${this.registration.name}" did not close during disconnect.`);return}if(!i.stdin.destroyed)i.stdin.end();if(await $d(l,Cw))return;if(i.kill(),await $d(l,Ap))return;if(i.kill("SIGKILL"),!await $d(l,Ap))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=ga.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 ih,this.newlineParser=new nh,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: ${nn(g)}`))}),c.stdin.on("error",(g)=>{if(this.process!==c)return;if(this.stdinFailure??=nn(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(()=>{})},Cw),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}": ${nn(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}:{}},T=new Promise((_,E)=>{let A=setTimeout(()=>{this.takePending(b),E(this.createTimeoutError(i,u))},u),C=c?()=>{let N=this.takePending(b);if(!N)return;let M=c.reason instanceof Error?c.reason:Object.assign(Error(`MCP request aborted for "${this.registration.name}" (${i}).`),{name:"AbortError"});N.reject(M)}:void 0;if(this.pending.set(b,{resolve:_,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 T;try{g.stdin.write(this.protocolMode==="framed"?Rw(I):xw(I))}catch(_){let E=this.takePending(b);if(E)E.reject(_ instanceof Error?_:Error(String(_)))}return T}createTimeoutError(i,l){return Error(qi(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"?Rw(c):xw(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 ZT{registration;options;client;authContext;requestTimeoutMs;connectAttemptTimeoutMs;constructor(i,l){this.registration=i,this.options=l,this.requestTimeoutMs=YT(i.timeoutSeconds),this.connectAttemptTimeoutMs=Ve(i.timeoutSeconds)?this.requestTimeoutMs:cW}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=_w({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??Aw,clientInformation:Tw(this.registration.oauthClient)});this.authContext=i;let l=await i.provider.tokens()?i.provider:void 0,u;try{u=new un({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"},this.options.mcpApps?{capabilities:GT()}:void 0);let c=lW({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=kw(c,this.registration.name,this.connectAttemptTimeoutMs),b=Ew(c),I=b?this.formatUnauthorizedMessage(i.getLastAuthorizationUrl()):nn(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??_w({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??Aw,clientInformation:Tw(this.registration.oauthClient)}),u=kw(i,this.registration.name,this.requestTimeoutMs),c=Ew(i),g=c?this.formatUnauthorizedMessage(l.getLastAuthorizationUrl()):nn(u);if(c&&!this.hasStaticAuthorizationHeader())await l.markAuthorizationRequired(g);else await l.markConnectionError(g);throw Error(g)}}function Pw(i={}){return(l)=>l.transport.type==="stdio"?new QT(l,i.mcpApps):new ZT(l,i)}AI();var mW=5000;function Vt(){return Date.now()}function hW(i){return i.map((l)=>({name:l.name,description:l.description,inputSchema:l.inputSchema,...l._meta?{_meta:l._meta}:{}}))}class e_{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor(i){this.clientFactory=i.clientFactory,this.toolsCacheTtlMs=i.toolsCacheTtlMs??mW}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:Vt()});return}let u=JSON.stringify(l.registration.transport)!==JSON.stringify(i.transport),c=Ve(l.registration.timeoutSeconds)!==Ve(i.timeoutSeconds)||Ue(l.registration.timeoutSeconds)!==Ue(i.timeoutSeconds);if(l.registration={...i},l.updatedAt=Vt(),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=Vt(),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&&Vt()-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=hW(u);return l.toolCache=c,l.toolCacheUpdatedAt=Vt(),l.updatedAt=Vt(),c})}async callTool(i){return this.runExclusive(i.serverName,async()=>{let l=this.requireServer(i.serverName),u=await this.ensureConnectedClient(l);return l.updatedAt=Vt(),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=Vt(),!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=Vt();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=Vt()}catch(u){throw await l?.disconnect().catch(()=>{}),i.status="disconnected",i.lastError=u instanceof Error?u.message:String(u),i.updatedAt=Vt(),u}}async disconnectState(i){if(!i.client){i.status="disconnected",i.updatedAt=Vt();return}try{await i.client.disconnect()}finally{i.status="disconnected",i.updatedAt=Vt()}}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 fW(i){let l=new Set(i.serverNames),u=i.nameTransform??gf,c=new Map;for(let[I,T]of i.agentTools)for(let _ of T.filter(JT)){let E=Jf(_)?.resourceUri;c.set(u({serverName:I,toolName:_.name}),E?{serverName:I,toolName:_.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,T){return(await i.manager.listTools(I)).find((_)=>_.name===T)}return{async resolveTool(I){return c.get(I)},async readResource(I){if(g(I.serverName),!XT(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 T=await b(I.serverName,I.toolName);if(!T)throw Error(`MCP tool "${I.toolName}" was not found on server "${I.serverName}".`);if(!Qz(T))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 gW(i,l){let u=l.description?.trim();if(u)return u;return`Execute MCP tool "${l.name}" from server "${i}".`}async function yW(i){let l=await i.provider.listTools(i.serverName),u=i.nameTransform??gf;return l.filter(JT).map((c)=>{let g=u({serverName:i.serverName,toolName:c.name});return k({name:g,resultPolicy:"cache-oversized",description:gW(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 TW(){return be()}function _W(i){let l=Bt(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 T={agentId:b.trim(),rolePrompt:I};if(typeof g.modelId==="string"&&g.modelId.trim())T.modelId=g.modelId.trim();if(typeof g.maxIterations==="number"&&Number.isFinite(g.maxIterations))T.maxIterations=Math.max(1,Math.floor(g.maxIterations));u.push(T)}return u}function $w(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 t_=2000,EW=2592000000,Lw=["agent_event","run_progress"],Dw=2,AW=["team_tasks","team_runs","team_outcomes","team_outcome_fragments","team_mailbox","team_mission_log"];function lo(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 hl(i,l){if(typeof i!=="string"||i.length===0)return l;return Bt(i)??l}var fl=(i)=>typeof i==="string"?i:"";function Uw(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 r_{teamDirPath;db;retentionPerTeam;retentionMs;constructor(i={}){this.teamDirPath=i.teamDir??TW(),this.retentionPerTeam=i.eventRetentionPerTeam??t_,this.retentionMs=i.eventRetentionMs??EW}init(){this.getRawDb()}close(){this.db?.close?.(),this.db=void 0}ensureTeamDir(){if(!IW(this.teamDirPath))kW(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return SW(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)<Dw)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)=>fl(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=hl(c?.state_json,void 0);if(g)this.writeDelta(i,u,Uw($w(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 (${Lw.map(()=>"?").join(",")})`).run(...Lw);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 T=hl(g.get(I)?.payload_json,void 0);if(T&&typeof T==="object")b.run(JSON.stringify(ju(T)),I)}i.prepare("UPDATE team_store_schema_version SET version = ? WHERE lock = 1").run(Dw),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)=>fl(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=Qr(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 T=hl(I.data_json,void 0);return T===void 0?[]:[T]});try{return $w({teamId:fl(u.team_id),teamName:l,members:hl(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 ?",[Qr(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=Qr(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?_W(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, ?)`,[Qr(i),x(),l,JSON.stringify(u),c??null])}persistBatch(i,l){let u=Qr(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=Qr(i),g=this.getRawDb();this.withTransaction(()=>{this.writeDelta(g,c,Uw(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 AW)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,lo(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:Wo(b.result)};g.run(l,I.id,I.agentId,I.taskId??null,I.status,I.message,lo(I.startedAt),lo(I.endedAt),I.error??null,I.leaseOwner??null,lo(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}),lo(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,lo(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=Qr(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=hl(b.data_json,void 0),T=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,T,u,fl(b.run_id)])}}),c.map((b)=>fl(b.run_id))}handleTeamEvent(i,l){if(!kc(l))return;this.appendTeamEvent(i,l.type,ju(l)),this.pruneTeamEvents(this.getRawDb(),Qr(i))}}var Fw=4194304;function qw(){return new Date().toISOString()}function jw(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 s_{teamDirPath;constructor(i={}){this.teamDirPath=i.teamDir??hn()}init(){this.ensureTeamDir()}listTeamNames(){if(!no(this.teamDirPath))return[];return wW(this.teamDirPath,{withFileTypes:!0}).filter((i)=>i.isDirectory()).filter((i)=>no(this.statePath(i.name))).map((i)=>i.name).sort()}readState(i){let l=this.readEnvelope(i);return l?.teamState?jw(l.teamState):void 0}readHistory(i,l=200){let u=this.historyPath(i);if(!no(u))return[];return Cp(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?jw(l.teamState):void 0,teammates:l?.teammates??[],interruptedRunIds:[]}}handleTeamEvent(i,l){if(!kc(l))return;this.appendHistory(i,[{type:l.type,payload:ju(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=qw(),c=this.historyPath(i);vW(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=bW(i).size}catch{return}if(l<Fw)return;let u=Cp(i,"utf8").split(`
790
+ `).filter(Boolean),c=[],g=0;for(let I=u.length-1;I>=0&&c.length<t_;I--){let T=u[I];if(g+=Buffer.byteLength(T,"utf8")+1,g>Fw/2&&c.length>0)break;c.push(T)}c.reverse();let b=`${i}.tmp`;Ow(b,`${c.join(`
791
+ `)}
792
+ `,"utf8"),Nw(b,i)}persistRuntime(i,l,u){this.ensureTeamSubdir(i);let c={version:1,updatedAt:qw(),teamState:{...l,runs:l.runs.map((I)=>({...I,result:Wo(I.result)}))},teammates:u},g=this.statePath(i),b=`${g}.tmp`;Ow(b,`${JSON.stringify(c,null,2)}
793
+ `,"utf8"),Nw(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(!no(this.teamDirPath))Mw(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir(i){let l=xp(this.ensureTeamDir(),Qr(i));if(!no(l))Mw(l,{recursive:!0});return l}statePath(i){return xp(this.ensureTeamDir(),Qr(i),"state.json")}historyPath(i){return xp(this.ensureTeamDir(),Qr(i),"task-history.jsonl")}readEnvelope(i){let l=this.statePath(i);if(!no(l))return;try{let u=JSON.parse(Cp(l,"utf8"));if(u?.version===1&&u.teamState)return u}catch{}return}}function CW(i={}){try{let l=new r_(i);return l.init(),l}catch{let l=new s_({teamDir:i.teamDir});return l.init(),l}}var xW=300,RW=60000,Bw=5000;class i_{opts;pendingEvents=[];teammatesDirty=!1;timer;lastFlushAt=0;disposed=!1;constructor(i){this.opts={batchMs:xW,telemetryFlushMs:RW,now:Date.now,...i}}onEvent(i){if(this.disposed)return;if(!kc(i)){if(this.opts.now()-this.lastFlushAt>=this.opts.telemetryFlushMs)this.schedule();return}if(this.pendingEvents.push({type:i.type,payload:ju(i)}),GH(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>Bw?b.slice(-Bw):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 Ld(i,l){return _i(i,l)}function n_(i,l){let u=l?.["*"]??{},c=l?.[i]??{};return{...u,...c}.enabled!==!1}function PW(i,l){return i.filter((u)=>n_(u.name,l))}function oh(i,l){return rc(PW(i,l))}var MW={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 NW(i){let l=i.trim().toLowerCase();return MW[l]??l}function OW(i,l){if(l.tools===void 0)return i;let u=new Set(l.tools.map(NW));if(l.skills!==void 0)u.add("skills");return i.filter((c)=>u.has(c.name))}function $W(){return`team-${R(5)}`}function ou(i,l,u,c,g,b,I,T,_,E){let A=Af[Cf({mode:u})],C=RD(l,c,u,g??CD);return oh(O0({cwd:i,telemetry:_,executorOptions:{bash:{executionController:E}},...A,enableSkills:!!I,...C,executors:{...I?{skills:I}:{},...T??{}}}),b)}function LW(i){return ou(i.cwd,i.providerId,i.mode,i.modelId,i.toolRoutingRules,i.toolPolicies,DW,i.toolExecutors).some((l)=>l.name==="skills")}var DW=async()=>"";async function UW(i){let l=on(),u=i.includeSettings&&SI({filePath:l});if(!u&&!i.agentPluginServers?.length)return{tools:[]};let c=Pw({settingsPath:l,mcpApps:i.mcpApps}),g=Pw({restrictConfiguredHeadersToOrigin:!0,mcpApps:i.mcpApps}),b=new e_({clientFactory:(N)=>N.metadata?.source==="agent-plugin"?g(N):c(N)}),I=[];if(u)try{I=await hA(b,{filePath:l})}catch(N){let M=N instanceof Error?N.message:String(N);i.logger?.log(`[mcp] Failed to load MCP settings, skipping settings-backed MCP tools: ${M}`)}let T=new Set(I.map((N)=>N.name));for(let N of i.agentPluginServers??[]){let M=N.registration;if(T.has(M.name)){i.logger?.log(`[agent-plugins] MCP server '${M.name}' conflicts with an existing server and was skipped.`,{severity:"error"});continue}try{await b.registerServer(M),I.push(M),T.add(M.name)}catch(O){let L=O instanceof Error?O.message:String(O);i.logger?.log(`[agent-plugins] Failed to register MCP server '${M.name}', skipping: ${L}`,{severity:"error"})}}if(I.length===0)return await b.dispose().catch(()=>{}),{tools:[]};let _=I.filter((N)=>N.disabled!==!0),E=await Promise.allSettled(_.map(async(N)=>{let M=await b.listTools(N.name),O=await yW({serverName:N.name,provider:{listTools:async()=>M,callTool:(L)=>b.callTool(L)},timeoutMs:Ue(N.timeoutSeconds)*1000});return{descriptors:M,tools:O}})),A=[],C=new Map;for(let[N,M]of E.entries())if(M.status==="fulfilled")A.push(...M.value.tools),C.set(_[N].name,M.value.descriptors);else{let O=M.reason instanceof Error?M.reason.message:String(M.reason);i.logger?.log(`[mcp] Failed to load tools from MCP server "${_[N].name}", skipping: ${O}`)}return{tools:A,...i.mcpApps?{mcpApps:fW({manager:b,serverNames:_.map((N)=>N.name),agentTools:C,isToolEnabled:(N)=>n_(N,i.toolPolicies)&&!i.disabledToolNames?.has(N)})}:{},shutdown:async()=>{await b.dispose()}}}function FW(i,l){if(!i)return;for(let u of i.getTeammateIds())try{i.shutdownTeammate(u,l)}catch{}}function qW(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 jW(i){let l=Af[Cf({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 o_{teamRuntimeEntries=new Map;async build(i){let{config:l,hooks:u,extensions:c,logger:g,telemetry:b,createSpawnTool:I,onTeamRestored:T,userInstructionService:_,configExtensions:E,toolExecutors:A}=i,C=i.onTeamEvent??(()=>{}),N=jW(l),M=[];if(N.enableTools&&N.mode!=="yolo"&&lk("web_search")&&ii({providerId:l.providerId,modelId:l.modelId},"web_search"))M.push({name:"web_search"});if(N.enableTools&&ii({providerId:l.providerId,modelId:l.modelId},"image_generation"))M.push({name:"image_generation",outputFormat:"png"});let O=l.workspaceRoot??l.cwd,L=i.toolPolicies??l.toolPolicies,D=ad(),F=[],j=l.teamName?.trim()||$W(),B=l.sessionId?.trim()||j,Q=N.enableSpawnAgent?FH({workspaceRoot:O}):{configs:[],errors:[]},H=Q.configs.some((Ie)=>Ie.skills!==void 0),z=Ld(E,"rules"),te=Ld(E,"skills"),ee=te||H,oe=Ld(E,"workflows"),G=Ld(E,"plugins"),se=z||te||oe,Ne=!1,De=[],Te=_,le,ke;for(let Ie of Q.errors)(g??l.logger)?.log?.(`[agents] Failed to load agent config at ${Ie.path}: ${Ie.error.message}`);if(!Te&&(se||H))Te=sh({skills:ee?{workspacePath:O,includePluginSkills:G,pluginSkillDirectories:G?i.pluginSkillDirectories:void 0,pluginPaths:l.pluginPaths,cwd:l.cwd,agentPluginSkills:G?i.agentPluginSkills:void 0}:{workspacePath:O},rules:{workspacePath:l.cwd},workflows:{workspacePath:l.cwd}}),De.push(Te);else if(Te&&G&&i.agentPluginSkills?.length&&(se||H)){let Ie=sh({skills:{directories:[],agentPluginSkills:i.agentPluginSkills},rules:{directories:[]},workflows:{directories:[]}});De.push(Ie),Te=Jz([Te,Ie])}if(Te)await Te.start().catch(()=>{});let we=N.enableTools&&te&&Boolean(Te)&&Te?.hasConfiguredSkills(l.skills)===!0&&LW({cwd:l.cwd,providerId:l.providerId,mode:N.mode,modelId:l.modelId,toolRoutingRules:l.toolRoutingRules,toolPolicies:L,toolExecutors:A}),Xe=Te&&se?Te.createExtension({includeRules:z,includeSkills:te,includeWorkflows:oe,registerSkillsTool:we,allowedSkillNames:l.skills}):void 0,ve=N.mode==="plan"&&N.enableTools?fL({telemetry:b??l.telemetry}):void 0,Se=[Xe,ve].filter((Ie)=>Ie!==void 0),Ee=Se.length>0?[...c??l.extensions??[],...Se]:c??l.extensions;if(N.enableTools){F.push(...ou(l.cwd,l.providerId,N.mode,l.modelId,l.toolRoutingRules,L,void 0,A,b??l.telemetry,i.runCommandExecutionController));let Ie=G?i.agentPluginMcpServers:void 0;if(!N.disableMcpSettingsTools||Ie?.length){let Le=await UW({logger:l.logger,includeSettings:!N.disableMcpSettingsTools,mcpApps:N.mcpApps,toolPolicies:L,disabledToolNames:D,agentPluginServers:Ie});F.push(...Le.tools),le=Le.shutdown,ke=Le.mcpApps}}let Ae,Be=N.enableAgentTeams?CW():void 0,Ye=Be?.loadRuntime(B),Ct=Ye?.state,vt=Ye?.teammates??[],Nr=new Map(vt.map((Ie)=>[Ie.agentId,Ie])),bt=Be?new i_({teamKey:B,store:Be,source:()=>Ae,teammates:()=>Array.from(Nr.values()),onError:(Ie)=>(g??l.logger)?.log?.(`[team] failed to persist team state: ${Ie instanceof Error?Ie.message:String(Ie)}`)}):void 0,xt=l.sessionId||j,Kr,Or=[],As=!1,Re=C0({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:Ee,logger:g??l.logger,telemetry:i.telemetry??l.telemetry,workspaceMetadata:l.workspaceMetadata});if(N.enableSpawnAgent){if(Q.configs.length>0)F.push(...oh(KH({configProvider:Re,agents:Q.configs,createSubAgentTools:(Ie)=>N.enableTools?OW(ou(l.cwd,Ie.providerId??l.providerId,N.mode,Ie.modelId??l.modelId,l.toolRoutingRules,L,Ie.skills!==void 0&&Te?.createSkillsExecutor?Te.createSkillsExecutor(Ie.skills):void 0,A,b??l.telemetry,i.runCommandExecutionController),Ie):[],hookErrorMode:l.hookErrorMode,onSubAgentEvent:i.onSubAgentEvent,onSubAgentStart:i.onSubAgentStart,onSubAgentEnd:i.onSubAgentEnd}),L))}if(!this.teamRuntimeEntries.has(xt))this.teamRuntimeEntries.set(xt,{delegatedAgentConfigProvider:Re});let Ot=()=>{if(!N.enableAgentTeams)return;let Ie=this.teamRuntimeEntries.get(xt)??{delegatedAgentConfigProvider:Re};if(this.teamRuntimeEntries.set(xt,Ie),Ae=Ie.runtime,!Ae){if(Ae=new FT({teamName:j,leadAgentId:l.sessionId||"lead",missionLogIntervalSteps:N.missionLogIntervalSteps,missionLogIntervalMs:N.missionLogIntervalMs,onStateDirty:()=>bt?.markStateDirty(),onTeamEvent:(Le)=>{if(C(Le),bt){if(Le.type==="teammate_spawned"&&Le.teammate?.rolePrompt){let Jr={agentId:Le.agentId,rolePrompt:Le.teammate.rolePrompt,modelId:Le.teammate.modelId,maxIterations:Le.teammate.maxIterations};Nr.set(Jr.agentId,Jr),bt.markTeammatesDirty()}if(Le.type==="teammate_shutdown"&&!qW(Le.reason))Nr.delete(Le.agentId),bt.markTeammatesDirty();bt.onEvent(Le)}}}),Ct)Ae.hydrateState(Ct),As=!0;Ie.runtime=Ae}if(!Ne){if(!Ae)return;Ne=!0;let Le=qU({runtime:Ae,leadAgentId:l.sessionId||"lead",restoredFromPersistence:Boolean(Ct),restoredTeammates:vt,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(Jr)=>{Or=Jr,Kr?.addTools(Jr)},createBaseTools:N.enableTools?()=>ou(l.cwd,l.providerId,N.mode,l.modelId,l.toolRoutingRules,L,void 0,A,b??l.telemetry,i.runCommandExecutionController):void 0,teammateConfigProvider:Re});if(As)Ae.recoverActiveRuns("runtime_recovered");if(Le.restoredFromPersistence)T?.();F.push(...Le.tools)}return Ae};if(N.enableSpawnAgent&&I){let Ie=I();F.push({...Ie,execute:async(Le,Jr)=>(Ot(),Ie.execute(Le,Jr))})}if(N.enableAgentTeams)Ot();let Gr=oh(F,L),de=Gr.some((Ie)=>Ie.name==="submit_and_exit"&&Ie.lifecycle?.completesRun===!0),Fe=N.enableAgentTeams?()=>{let Ie=this.teamRuntimeEntries.get(xt)?.runtime;if(!Ie)return;let Le=Ie.listTasks(),Jr=Le.some((Qe)=>Qe.status==="in_progress"||Qe.status==="pending"),Sn=Ie.listRuns({}),Tc=Sn.some((Qe)=>Qe.status==="running"||Qe.status==="queued");if(Jr||Tc){let Qe=Le.filter(($r)=>$r.status==="in_progress"||$r.status==="pending").map(($r)=>`${$r.id} (${$r.status}): ${$r.title}`).join(", "),Ws=Sn.filter(($r)=>$r.status==="running"||$r.status==="queued").map(($r)=>`${$r.id} (${$r.status})`).join(", "),_c=[];if(Qe)_c.push(`Unfinished tasks: ${Qe}`);if(Ws)_c.push(`Active runs: ${Ws}`);return`[SYSTEM] You still have team obligations. ${_c.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,mt=de?{requireCompletionTool:!0,...Fe?{completionGuard:Fe}:{}}:Fe?{completionGuard:Fe}:void 0;return{tools:Gr,modelTools:M,logger:g??l.logger,telemetry:b??l.telemetry,teamRuntime:Ae,teamRestoredFromPersistence:Boolean(Ct),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(xt)?.delegatedAgentConfigProvider??Re,extensions:Ee,completionPolicy:mt,mcpApps:ke,registerLeadAgent:(Ie)=>{if(Kr=Ie,Or.length>0)Ie.addTools(rc(Or,[...D]))},shutdown:async(Ie)=>{FW(Ae,Ie),bt?.dispose(),this.teamRuntimeEntries.delete(xt),await le?.();for(let Le of De)Le.stop()}}}}class a_{list(i){return i?Dr(i):[]}update(i,l){if(!i)return{sessionId:l.sessionId,prompts:[],updated:!1};let u=l.promptId.trim(),c=i.pendingPrompts.findIndex((_)=>_.id===u);if(c<0)return{sessionId:l.sessionId,prompts:Dr(i),updated:!1};let g=i.pendingPrompts[c];if(!g)return{sessionId:l.sessionId,prompts:Dr(i),updated:!1};let b=l.prompt===void 0?g.prompt:xe(l.prompt).trim();if(!b)throw Error("prompt cannot be empty");let I=l.delivery??g.delivery,T={...g,prompt:b,mode:l.mode??g.mode,delivery:I};return i.pendingPrompts.splice(c,1),HW(i,T,c,g.delivery),{sessionId:l.sessionId,prompts:Dr(i),prompt:Gu(T),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:Dr(i),removed:!1};let[g]=i.pendingPrompts.splice(c,1);return{sessionId:l.sessionId,prompts:Dr(i),prompt:g?Gu(g):void 0,removed:!0}}enqueue(i,l){let{prompt:u,mode:c,delivery:g,userImages:b,userFiles:I}=l,T=i.pendingPrompts.findIndex((_)=>_.prompt===u);if(T>=0){let[_]=i.pendingPrompts.splice(T,1),E={..._,prompt:u,mode:c??_.mode,userImages:b??_.userImages,userFiles:I??_.userFiles};if(g==="steer"||_.delivery==="steer")i.pendingPrompts.unshift({...E,delivery:"steer"});else i.pendingPrompts.push(E)}else{let _={id:`pending_${Date.now()}_${R(5)}`,prompt:u,mode:c,delivery:g,userImages:b,userFiles:I};if(g==="steer")i.pendingPrompts.unshift(_);else i.pendingPrompts.push(_)}return Dr(i)}consumeSteer(i){let l=i.pendingPrompts.findIndex((c)=>c.delivery==="steer");if(l<0)return{prompts:Dr(i)};let[u]=i.pendingPrompts.splice(l,1);return{entry:u,prompts:Dr(i)}}shiftNext(i){return{entry:i.pendingPrompts.shift(),prompts:Dr(i)}}requeueFront(i,l){return i.pendingPrompts.unshift(l),Dr(i)}clear(i){return i.pendingPrompts.length=0,[]}}class l_{deps;service=new a_;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:Dr(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(BW(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=Gu(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 BW(i){return typeof i==="object"&&i!==null&&"finishReason"in i&&i.finishReason==="error"}function Gu(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 Dr(i){return i.pendingPrompts.map(Gu)}function HW(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 d_{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 au(i){let l=i?.trim();if(!l||!zW(l))return[];try{let u=(await WW(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 Hw(i){return i?{...i}:void 0}async function KW(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 GW(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 Vf{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=j0(u);if(!!c&&(!b.agentId||b.agentId===Rp(c.agent))){let I={agentId:Rp(c.agent),conversationId:c.agent.getConversationId(),...c?.runtime.teamRuntime?{teamRole:"lead"}:{}};this.rememberSessionIdentity(i,I),dp(g,u,{...I,isPrimaryAgentEvent:!0});return}dp(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>Vf.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(rz(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};dp(c,l.event,{agentId:l.agentId,teamRole:"teammate",teamAgentId:l.agentId,isPrimaryAgentEvent:!1})}if(l.type==="teammate_spawned"){let c=zo({agentId:l.teammate.runtimeAgentId??l.agentId,conversationId:l.teammate.conversationId,parentAgentId:l.teammate.parentAgentId,createdByAgentId:Rp(u.agent),teamId:u.runtime.teamRuntime?.getTeamId(),teamName:u.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:l.agentId});if(c)$h(u.config.telemetry,{ulid:i,modelId:l.teammate.modelId??u.config.modelId,provider:u.config.providerId,...c})}}if(await sz(i,l,this.deps.invokeBackendOptional),u)nz(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 _=this.deps.getSession(i)?.config.extensionContext?.automation??u;if(!_)return;let E=l.payload&&typeof l.payload==="object"?l.payload:void 0;if(!E)return;await _.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 T=l.name==="steer_message"?"steer":l.name==="queue_message"?"queue":g?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(b,{prompt:I,delivery:T})}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 T={...g.properties&&typeof g.properties==="object"?g.properties:{},plugin_name:b,session_id:i};if(g.required===!0)c.captureRequired(`plugin.${I}`,T);else c.capture({event:`plugin.${I}`,properties:T});return}if(g.kind==="metric"){let I=typeof g.name==="string"?g.name.trim():"",T=typeof g.value==="number"?g.value:NaN;if(!I||Number.isNaN(T))return;let _={...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,T,_,E,A);else if(g.metric==="histogram")c.recordHistogram(C,T,_,E,A);else if(g.metric==="gauge")c.recordGauge(C,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 T=b.metadata&&typeof b.metadata==="object"?{...b.metadata}:{};if(T.sessionId??=i,typeof b.pluginName==="string"&&b.pluginName)T.pluginName=b.pluginName;if(b.level==="debug"){g.debug(I,T);return}if(b.level==="error"){if(g.error)g.error(I,T);else g.log(I,{...T,severity:"error"});return}g.log(I,T)}}function Rp(i){return i.getAgentId()}function zw(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:js(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 Yf(i,l){let u=i[l];return typeof u==="function"?u:null}async function XW(i,l,...u){let c=Yf(i,l);if(!c)throw Error(`session service method not available: ${l}`);return Promise.resolve(c.apply(i,u))}async function JW(i,l,...u){let c=Yf(i,l);if(!c)return;await Promise.resolve(c.apply(i,u))}async function VW(i,l,...u){let c=Yf(i,l);if(!c)return;return await Promise.resolve(c.apply(i,u))}function u_(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=zo({agentId:c.subAgentId,conversationId:c.conversationId,parentAgentId:c.parentAgentId,teamId:g?.getTeamId(),teamName:g?.getTeamName(),createdByAgentId:c.parentAgentId});if(b)$h(l.telemetry,{ulid:u,modelId:l.modelId,provider:l.providerId,...b});xg(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,T=c.result?.text?c.result.text.split(`
794
+ `).length:0;xg(l.telemetry,{event:"ended",ulid:u,durationMs:I,outputLines:T,errorMessage:c.error?String(c.error):void 0,agentId:c.subAgentId,parentId:c.parentAgentId,...zo({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 c_(i,l,u,c){let g=u_(i,l,u);return P0({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?O0({cwd:l.cwd,telemetry:l.telemetry,...Af[Cf({mode:l.mode})],executors:c}):[];if(l.enableSpawnAgent)b.push(c_(i,l,u,c));return rc(b)},...g})}var ZW=20480000;async function eK(i){let l=await QW(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 YW(i,"utf8");if(u.includes("\x00"))throw Error("Cannot read binary file into context.");return u}var Ww=5000,Pp;function tK(i,l){if(Pp)return;Pp=LL().then(()=>{return}).catch((u)=>{Pp=void 0,i?.error?.("Detached command log recovery failed",{error:u}),U(l,{component:"core",operation:"command.detached_log_recovery",error:u,severity:"warn",handled:!0})})}function gl(i){return typeof i==="number"&&Number.isFinite(i)?i:void 0}function rK(i){if(!i||typeof i!=="object"||Array.isArray(i))return;let l=i,u=gl(l.inputTokens),c=gl(l.outputTokens),g=gl(l.cacheReadTokens),b=gl(l.cacheWriteTokens),I=gl(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 sK(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 Kw(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 iK(i){return i==="steer_message"||i==="queue_message"||i==="pending_prompt"}class Qf{runtimeAddress=void 0;pendingPrompts;pluginCommands;pluginCommandManager;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;distinctId;defaultLogger;defaultFetch;connectorsRequest;events=new d_;sessions=new Map;manifestMutationQueues=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new zf;runCommandExecutionController=new v0;constructor(i){let l=UP();if(l)Va(l);let u=Bh(i.distinctId);if(this.distinctId=u,this.sessionService=i.sessionService,this.runtimeBuilder=i.runtimeBuilder??new o_,this.createAgentInstance=i.createAgent??((c)=>new yc(c)),this.defaultCapabilities=Zm(i.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=i.toolPolicies,this.providerSettingsManager=i.providerSettingsManager??new In,this.oauthTokenManager=i.oauthTokenManager??new vc({providerSettingsManager:this.providerSettingsManager,telemetry:i.telemetry}),this.defaultTelemetry=i.telemetry,this.defaultLogger=i.logger,this.pluginCommandManager=new MT({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(li(c.workspacePath)!==li(js(g.config)))throw Error("Plugin command workspace does not match the session");return this.withSessionPluginCommands(g,()=>({workspacePath:js(g.config),sessionId:c.sessionId,status:g.pluginCommandError?"error":"ready",error:g.pluginCommandError,commands:RT(g.agent.getExtensionRegistry().commands.filter($y))}))},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(li(c.workspacePath)!==li(js(g.config)))throw Error("Plugin command workspace does not match the session");return this.withSessionPluginCommands(g,()=>PT(g.agent.getExtensionRegistry().commands.filter($y),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,tK(this.defaultLogger,this.defaultTelemetry),this.pendingPromptsController=new l_({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 Vf({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 T=this.sessions.get(c);(T?.config.logger??this.defaultLogger)?.error?.("Failed to persist session messages from agent event",{sessionId:c,error:I}),U(T?.config.telemetry??this.defaultTelemetry,{component:"core",operation:"session.persist_messages_on_agent_event",error:I,severity:"warn",handled:!0,context:{sessionId:c,providerId:T?.config.providerId,modelId:T?.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,T=I?{...i.config,cwd:I.cwd,workspaceRoot:I.workspace_root}:await W1(i.config);return await this.startResolvedSession({...i,config:T},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??Fr.CLI,b=pt(),I=await this.applyInitialOAuthCredentials(i),T=I.initialMessages??[],_=T.length>0?Lv(T):Br(),E=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!E)throw Error("session service method not available: ensureSessionsDir");let A=Hc(E,l),C=Hc(A,`${l}.messages.json`),N=Hc(A,`${l}.json`),M=js(i.config),O=i.interactive===!0&&!I.prompt?.trim(),L=Mu.parse({version:1,session_id:l,source:g,pid:process.pid,started_at:b,status:O?"idle":"running",interactive:i.interactive===!0,provider:I.config.providerId,model:I.config.modelId,cwd:I.config.cwd,workspace_root:M,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}),D,F,j=u&&T.length>0&&!I.prompt?.trim();if(j){let de=c??await this.invokeOptionalValue("readSessionManifest",l);if(de)L=de,D={manifestPath:N,messagesPath:de.messages_path||C,compactionPath:de.compaction_path,manifest:de},F=await this.invokeOptionalValue("readSessionCompactionState",l)}let B=await this.seedAggregateUsageFromArtifacts({initialUsage:_,sessionDir:A,rootMessagesPath:D?.messagesPath??C,manifest:L});this.usageBySession.set(l,_),this.aggregateUsageBySession.set(l,B);let Q=Zm(this.defaultCapabilities,i.capabilities),H=Q?.toolExecutors??this.toolExecutors,z=i.localRuntime,te=z?.extensionContext?.logger??z?.logger,ee=z?.extensionContext?.automation,oe=z?.extensionContext?.telemetry??z?.telemetry??this.defaultTelemetry,G,se=[],Ne={getSession:(de)=>this.sessions.get(de),subAgentStarts:this.subAgentStarts,onAgentEvent:(de,Fe,mt)=>this.eventBridge.dispatchAgentEvent(de,Fe,mt),invokeBackendOptional:(de,...Fe)=>this.invokeOptional(de,...Fe)},De=Bo(D?.manifest.metadata),Te=Bo(ln(I.sessionMetadata,{mode:I.mode??De?.mode,trigger:I.mode?void 0:De?.trigger}));G=await GB({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,te);return}if(se&&iK(de.name)){se.push(de);return}this.eventBridge.handlePluginEvent(l,de,ee,oe)},onPluginIssue:(de)=>{if(!G)return;this.eventBridge.dispatchAgentEvent(l,G.config,{type:"notice",noticeType:"status",displayRole:"status",message:D$(de),metadata:{pluginIssue:de}})},onTeamEvent:(de)=>{this.eventBridge.handleTeamEvent(l,de),G.config.onTeamEvent?.(de)},createSpawnTool:()=>c_(Ne,G.config,l,H),createSubAgentLifecycleCallbacks:(de)=>u_(Ne,de,l),readSessionMetadata:async()=>(await this.getSession(l))?.metadata,writeSessionMetadata:async(de)=>{await this.persistSessionMetadata(l,()=>de)}});let le=ln(Pg({...D?.manifest.metadata??{},...I.sessionMetadata??{}},G.gitState),{mode:Te?.mode,trigger:Te?.trigger,version:G.config.extensionContext?.client?.version});if(!D)L.metadata=le;let ke;try{ke=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,Xe=G.providerConfig;if(ke.teamRuntime&&!we.teamName?.trim())we.teamName=ke.teamRuntime.getTeamName();let ve=async()=>{let de=this.sessions.get(l);if(!de||!cy(de.config.providerId))return!1;try{return await this.syncOAuthCredentials(de,{forceRefresh:!0}),!0}catch{return!1}};ke.delegatedAgentConfigProvider?.updateConnectionDefaults({onAuthError:ve});let Se=[...ke.tools,...we.extraTools??[]],Ee=ke.extensions??G.extensions,Ae=I.initialCompactionState,Be,Ye=Ae??F,Ct=kS(we),vt=j?oH(L.metadata):void 0,Nr=vt?kO({config:we,importedFrom:vt.tool,next:Ct}):Ct,bt=Ye?{...Ye,conversation_id:Ye.conversation_id?.trim()||l}:void 0,xt=SO({compact:Nr,getState:()=>Be?.compactionState,prepareApiMessages:(de)=>{let Fe=Be?.agent;if(!Fe)throw Error("Compaction prepareTurn ran before the session runtime was created");return Fe.prepareProviderMessagesForApi(de)},saveState:async(de,Fe)=>{let mt=Be;if(!mt)return;let Ie={...de,conversation_id:mt.sessionId};try{if(!(await this.persistActiveSessionCompactionState(mt,Ie,Fe)).updated)we.logger?.debug?.("Skipped stale session compaction state",{sessionId:mt.sessionId,sourceMessageCount:Ie.source_message_count})}catch(Le){we.logger?.error?.("Failed to persist session compaction state",{sessionId:mt.sessionId,error:Le}),U(we.telemetry,{component:"core",operation:"session.persist_compaction_state",severity:"warn",handled:!0,error:Le,context:{sessionId:mt.sessionId,providerId:we.providerId,modelId:we.modelId}})}}}),Kr={distinctId:this.distinctId,sessionId:l,providerId:Xe.providerId,modelId:Xe.modelId,apiKey:Xe.apiKey,baseUrl:Xe.baseUrl,headers:Xe.headers,onAuthError:ve,knownModels:Xe.knownModels,providerConfig:Xe,thinking:we.thinking,reasoningEffort:we.reasoningEffort??Xe.reasoningEffort,thinkingBudgetTokens:we.thinkingBudgetTokens,maxTokensPerTurn:we.maxTokensPerTurn,temperature:we.temperature,systemPrompt:we.systemPrompt,maxIterations:we.maxIterations,execution:we.execution,prepareTurn:xt,tools:Se,modelTools:ke.modelTools,hooks:G.hooks,extensions:Ee,hookErrorMode:we.hookErrorMode,initialMessages:G.effectiveInput.initialMessages,userFileContentLoader:eK,toolPolicies:G.toolPolicies,requestToolApproval:G.requestToolApproval?async(de)=>{let Fe=G.requestToolApproval,mt=this.sessions.get(l);if(mt)await this.markTurnPending(mt);try{if(!Fe)return{approved:!1,reason:"Tool approval callback is not configured."};return await Fe(de)}finally{let Ie=this.sessions.get(l);if(Ie?.status==="pending")await this.markTurnRunning(Ie)}}:void 0,telemetry:we.telemetry,onConsecutiveMistakeLimitReached:we.onConsecutiveMistakeLimitReached,completionPolicy:ke.completionPolicy,consumePendingUserMessage:()=>{let de=this.pendingPromptsController.consumeSteer(l);return de?rh(de.prompt,de.mode??we.mode):void 0},logger:ke.logger??we.logger,extensionContext:we.extensionContext,onEvent:(de)=>this.eventBridge.dispatchAgentEvent(l,we,de)};Kr.hooks={...Kr.hooks,onEvent:async(de)=>{if(await G.hooks?.onEvent?.(de),de.type!=="assistant-message")return;let Fe=this.sessions.get(l);if(!Fe)return;let mt=Fe.agent.getMessages();try{await this.invoke("persistSessionMessages",l,mt,we.systemPrompt)}catch(Ie){we.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:l,error:Ie}),U(we.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:Ie,severity:"warn",handled:!0,context:{sessionId:l,providerId:we.providerId,modelId:we.modelId}})}}};let Or=this.createAgentInstance(Kr);if(Kr.onEvent)Or.subscribeEvents(Kr.onEvent);ke.registerLeadAgent?.(Or);let As=zo({agentId:Or.getAgentId(),conversationId:Or.getConversationId(),teamId:ke.teamRuntime?.getTeamId(),teamName:ke.teamRuntime?.getTeamName(),teamRole:ke.teamRuntime?"lead":void 0});if(aH(we,l,u,M,As),As)$h(we.telemetry,{ulid:l,modelId:we.modelId,provider:we.providerId,...As});if(ke.teamRuntime)HA(we.telemetry,{ulid:l,teamId:ke.teamRuntime.getTeamId(),teamName:ke.teamRuntime.getTeamName(),leadAgentId:Or.getAgentId(),restoredFromPersistence:ke.teamRestoredFromPersistence===!0});let Re={sessionId:l,config:we,sessionMetadata:le,...D?{artifacts:D}:{},source:g,startedAt:D?.manifest.started_at??b,updatedAt:D?.manifest.ended_at??D?.manifest.started_at??b,pendingPrompt:L.prompt,runtime:ke,agent:Or,started:!1,status:D?.manifest.status??(O?"idle":"running"),aborting:!1,interactive:i.interactive===!0,persistedMessages:T,compactionState:bt,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:G.pluginSandboxShutdown,pluginCommandError:G.pluginCommandError,submitAndExitObserved:!1,taskCompletedEmitted:!1,lastInteractiveTurnFinishReason:void 0};if(Be=Re,Re.compactionState&&!this.isCompactionStateForSession(Re.sessionId,Re.compactionState,Re))Re.config.logger?.log?.("Ignoring session compaction state for a different conversation",{severity:"warn",sessionId:Re.sessionId,conversationId:Re.compactionState.conversation_id}),Re.compactionState=void 0;this.sessions.set(l,Re);let Ot=se??[];se=null;for(let de of Ot)this.eventBridge.handlePluginEvent(l,de,ee,oe);if(D)await this.refreshActiveSessionGitMetadata(Re,G.gitState);if(T.length>0&&!D)try{await this.ensureSessionPersisted(Re),await this.invoke("persistSessionMessages",l,T,Re.config.systemPrompt)}catch(de){Re.config.logger?.error?.("Failed to persist seeded session messages at start",{sessionId:l,error:de}),U(Re.config.telemetry,{component:"core",operation:"session.persist_seeded_messages",error:de,severity:"warn",handled:!0,context:{sessionId:l,providerId:Re.config.providerId,modelId:Re.config.modelId}})}this.emitStatus(l,Re.status);let Gr;try{if(I.prompt?.trim())if(Gr=await this.executeTurn(Re,{prompt:I.prompt,userImages:I.userImages,userFiles:I.userFiles}),!Re.interactive)await this.finalizeSingleRun(Re,Gr.finishReason);else await this.completeInteractiveTurn(Re,Gr.finishReason)}catch(de){if(Re.interactive&&Re.aborting)Gr=await this.completeAbortedInteractiveTurn(Re);else{U(Re.config.telemetry,{component:"core",operation:"session.start",error:de,severity:"error",handled:!1,context:{sessionId:Re.sessionId,providerId:Re.config.providerId,modelId:Re.config.modelId}});try{await this.failSession(Re)}catch(Fe){Re.config.logger?.error?.("Session failure cleanup threw",{sessionId:Re.sessionId,error:Fe})}throw de}}return{sessionId:l,manifest:L,manifestPath:N,messagesPath:C,result:Gr,...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:HD(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 U(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=Hw(this.usageBySession.get(i)),u=Hw(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,th(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{sa(c.telemetry??this.defaultTelemetry,{ulid:i,tool:gf({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&&!Ar(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&&!Ar(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 zw(l);let u=i.trim();if(!u)return;let c=await this.getRow(u);if(c)return Ov(c);let g=await this.readManifest(u);return g?GW(g):void 0}async listSessions(i=200,l={}){let u=(await this.listRows(i,l)).map(Ov),c=new Set(u.map((g)=>g.sessionId));for(let g of this.sessions.values()){if(c.has(g.sessionId))continue;u.unshift(zw(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),T=l.source_message_count>0&&I.length>=l.source_message_count,_=T?I:void 0;if(T){if(!await this.canPersistCompactionState(u,l,c,void 0,I))return{updated:!1};c.agent.restore(I)}return await this.persistActiveSessionCompactionState(c,l,_)}if(!await this.canPersistCompactionState(u,l,void 0,g))return{updated:!1};let b=await this.invokeOptionalValue("readSessionCompactionState",u);if(Kw(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 Sm(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&&Sm(c,u??i.agent.getMessages())!==void 0;if(c&&(g?Kw(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 au(u.messagesPath);let c=await this.readManifest(l);return au(c?.messages_path)}async dispatchHookEvent(i){await KW(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=Rf(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(az(i,I.finishReason)){let T=await lz(i);if(T.length===0)break;let _=dz(i,T);I=await this.executeAgentTurn(i,_)}return I}finally{i.lastTurnEndedAt=Date.now(),await this.refreshActiveSessionGitMetadata(i)}}async completeInteractiveTurn(i,l){if(eh(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=Br();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}),U(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)??Br(),T=this.aggregateUsageBySession.get(i.sessionId)??I;i.turnUsageBaseline=I,i.turnAggregateUsageBaseline=T,i.turnPrimaryUsage=Br(),i.turnUsageByAgent=new Map,NA(i.config.telemetry,i.sessionId,i.config.mode),NI(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 _=()=>{let L=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 L},E=await this.runWithAuthRetry(i,_,b);i.started=!0;let A=D0(E.messages,E,b);i.persistedMessages=A;let C=q0(i.turnUsageByAgent?.values()??[]),N=Tr(I,E.usage),M=Tr(Tr(Br(),E.usage),C),O=Tr(T,M);return this.usageBySession.set(i.sessionId,N),this.aggregateUsageBySession.set(i.sessionId,O),await this.persistSessionMetadata(i.sessionId,(L)=>({...L??{},totalCost:N.totalCost,aggregatedAgentsCost:O.totalCost,usage:N,aggregateUsage:O})),await this.invoke("persistSessionMessages",i.sessionId,A,i.config.systemPrompt),this.observeTaskCompletionTool(i,E),E}catch(_){U(i.config.telemetry,{component:"core",operation:"session.turn",error:_,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 _}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===Gt.SUBMIT_AND_EXIT&&u.error===void 0))return;i.submitAndExitObserved=!0,i.taskCompletedEmitted=!0,Ag(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,Ag(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=js(i.config),c=xe(l.prompt).trim();if(!c)return{prompt:"",userImages:l.userImages,userFiles:this.resolveAbsoluteFilePaths(i.config.cwd,l.userFiles)};let g=await fD(c,u);dH(i.config.telemetry,g);let b=rh(g.prompt,l.mode??i.config.mode),I=this.resolveAbsoluteFilePaths(i.config.cwd,l.userFiles),T=this.resolveAbsoluteFilePaths(u,g.matchedFiles),_=Array.from(new Set([...I,...T]));return{prompt:b,userImages:l.userImages,userFiles:_.length>0?_:void 0}}async ensureSessionPersisted(i){if(i.artifacts)return;let l=js(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 oC(js(i.config));if(!u||!i.artifacts)return;if(nC(i.artifacts.manifest.metadata,u))return;await this.persistSessionMetadata(i.sessionId,(c)=>Pg({...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(eh(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),th(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"}),U(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"}),U(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,Ar(l))delete b.ended_at,b.exit_code=null;else b.ended_at=c.endedAt??pt(),b.exit_code=typeof u==="number"?u:null});if(!g)return;i.status=l,i.updatedAt=c.endedAt??pt(),i.endedAt=Ar(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(!cy(i.config.providerId)||!Ii(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 fd)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 sc(i);throw U(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)=>FP(c)?c:li(i,c));return Array.from(new Set(u))}getSessionAgentTelemetryIdentity(i){return zo({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=Tr(i.initialUsage,l);return this.withPersistedAggregateUsageFloor(u,i.manifest)}async summarizePersistedTeammateUsage(i,l,u){let c=li(l),g=`${u}.messages.json`,b;try{b=DP(i)}catch{return Br()}let I=Br();for(let T of b){if(!T.endsWith(".messages.json"))continue;if(T===g)continue;let _=li(i,T);if(_===c)continue;let E=await au(_);if(E.length===0)continue;I=Tr(I,Lv(E))}return I}withPersistedAggregateUsageFloor(i,l){let u=rK(l.metadata?.aggregateUsage);if(u)return sK(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:qu({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)),Ww),l)}async getRow(i){let l=i.trim();if(!l)return;return(await this.listRows(Ww)).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 XW(this.sessionService,i,...l)}invokeOptional(i,...l){return JW(this.sessionService,i,...l)}invokeOptionalValue(i,...l){return VW(this.sessionService,i,...l)}}class Zf{sessionsDirPath;db;constructor(i={}){this.sessionsDirPath=i.sessionsDir??be()}init(){this.getRawDb()}ensureSessionsDir(){if(!nK(this.sessionsDirPath))oK(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return aK(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let i=V(this.sessionDbPath());return Qo(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,rt(i.interactive),i.provider,i.model,i.cwd,i.workspaceRoot,i.teamName??null,rt(i.enableTools),rt(i.enableSpawn),rt(i.enableTeams),i.parentSessionId??null,i.parentAgentId??null,i.agentId??null,i.conversationId??null,rt(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:Ar(l)?null:x(),exitCode:Ar(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 Gw=`
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 Xw(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 Mp(i){if(!i||Object.keys(i).length===0)return null;return JSON.stringify(i)}async function bK(i){let l;try{l=await p_(i,"r"),await l.sync()}catch{}finally{if(l!==void 0)try{await l.close()}catch{}}}async function IK(i,l){await yK(Zw(i),{recursive:!0});let u=`${i}.${process.pid}.${gK()}.tmp`,c;try{c=await p_(u,"wx"),await c.writeFile(l,"utf8"),await c.sync(),await c.close(),c=void 0,await vK(u,i),await bK(Zw(i))}catch(g){if(c!==void 0)try{await c.close()}catch{}try{await wK(u,{force:!0})}catch{}throw g}}function kK(i){return typeof i==="object"&&i!==null&&"code"in i&&i.code==="ENOENT"}function SK(i){return i!=="."&&i!==".."&&!i.includes("/")&&!i.includes("\\")}function TK(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:pt()}}class m_{adapter;messagesArtifactUploader;logger;artifacts;constructor(i,l,u){this.adapter=i,this.messagesArtifactUploader=l,this.logger=u,this.artifacts=new NT(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile(i,l,u){sF(l,u,$v(i))}writeSessionManifest(i,l){Jw(Qw(i),{recursive:!0}),Vw(i,`${JSON.stringify(Mu.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 Yw(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(!pK(l))return{path:l};try{return{path:l,manifest:Mu.parse(JSON.parse(mK(l,"utf8")))}}catch{return{path:l}}}readSessionRowFromManifest(i){if(!SK(i))return;let{manifest:l}=this.readManifestFile(i);if(!l||l.session_id!==i)return;return TK(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=F0({updatedAt:pt(),context:$v(c),messages:l,systemPrompt:u}),I=`${JSON.stringify(b,null,2)}
834
+ `;if(Jw(Qw(g),{recursive:!0}),Vw(g,I,"utf8"),!this.messagesArtifactUploader)return;try{await this.messagesArtifactUploader.uploadMessagesFile({sessionId:i,path:g,contents:I,row:c})}catch(T){this.logger?.debug("Failed to upload persisted session messages",{sessionId:i,error:T})}}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 cc(JSON.parse(await Yw(l,"utf8")))}catch(u){if(kK(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=mf.parse(l);await IK(u,`${JSON.stringify(c,null,2)}
835
+ `),this.updateCompactionPath(i,u)}async deleteSessionCompactionState(i){await hK(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)??fK(tt(),"hooks.jsonl");cK(b,`${JSON.stringify({ts:i,hookName:"session_shutdown",reason:c,sessionId:l,pid:u,source:g})}
836
+ `,"utf8")}}var Np=4;class ho{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 m_(i,l.messagesArtifactUploader,l.logger),this.teamChildren=new LT(i,this.manifestStore,(u,c,g)=>this.toPersistedMessages(u,c,g),ho.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages(i,l,u){if(!i)return;return l?D0(l.messages,l,u):Dm(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??pt(),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),T=Um({metadata:ln(i.metadata,{mode:i.mode,version:i.version}),prompt:i.prompt}),_=i.status??"running",E=!Ar(_),A=E?i.endedAt??pt():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:_,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:T,messages_path:g},M={sessionId:c,source:i.source,pid:i.pid,startedAt:l,endedAt:A??null,exitCode:C??null,status:_,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:Vs(N.metadata),hookPath:"",messagesPath:g,updatedAt:pt()};return await this.adapter.upsertSession(M),this.manifestStore.initializeMessagesFile(M,g,l),this.manifestStore.writeSessionManifest(I,N),{manifestPath:I,messagesPath:g,compactionPath:b,manifest:N}}async updateSessionStatus(i,l,u){let c;if((await nF(()=>this.adapter.getSession(i),async(g)=>(c=Ar(l)?void 0:pt(),this.adapter.updateSession({sessionId:i,status:l,endedAt:c??null,exitCode:Ar(l)?null:typeof u==="number"?u:null,expectedStatusLock:g.statusLock})),Np)).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<Np;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?Vs(i.metadata)??{}:Vs(c)??{},b=Do(typeof c?.title==="string"?c.title:void 0),I=i.title!==void 0?Do(i.title):b??U0(i.prompt);if(I)g.title=I;else delete g.title;let T=i.metadata!==void 0||i.prompt!==void 0||i.title!==void 0;if(!(await this.adapter.updateSession({sessionId:i.sessionId,prompt:i.prompt,metadata:T?Object.keys(g).length>0?g:null:void 0,title:I,expectedStatusLock:u.statusLock})).updated)continue;let{path:_,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?Vs(i.metadata)??{}:Vs(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(_,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=Dm(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(Ar(i.status)===!1||this.isPidAlive(i.pid))return i;let l=pt(),u=ho.STALE_REASON;for(let c=0;c<Np;c++){let g=await this.adapter.getSession(i.sessionId);if(!g)return;if(Ar(g.status)===!1)return g;let b={...g.metadata??{},terminal_marker:u,terminal_marker_at:l,terminal_marker_pid:g.pid,terminal_marker_source:ho.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 T=iF(g,{status:"failed",endedAt:l,exitCode:1,metadata:b}),{path:_}=this.manifestStore.readManifestFile(g.sessionId);return this.manifestStore.writeSessionManifest(_,T),this.manifestStore.appendStaleSessionHookLog(l,g.sessionId,g.pid,u,ho.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,T)=>{let _=Vs(I.metadata??void 0),E=Do(b[T]),A=E?{..._??{},title:E}:_;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:Vs(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 Zv(b.cwd,b.sessionId),Pd(b.messagesPath),await this.deleteSessionCompactionStateIfExists(b.sessionId),Pd(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 Zv(c.cwd,l),Pd(c.messagesPath),await this.deleteSessionCompactionStateIfExists(l),Pd(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(uK(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 h_{store;sessionsDirPath;constructor(i,l=He()){this.store=i,this.sessionsDirPath=l}ensureSessionsDir(){if(!lK(this.sessionsDirPath))dK(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,Mp(i.metadata),"",i.hookPath??"",i.messagesPath??null,i.updatedAt])}async getSession(i){let l=this.store.queryOne(`SELECT ${Gw} FROM sessions WHERE session_id = ?`,[i]);return l?Xw(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 ${Gw}
842
+ FROM sessions
843
+ ${c}
844
+ ORDER BY started_at DESC
845
+ LIMIT ?`,[...u,i.limit]).map(Xw)}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 = ?`,[pt(),i.expectedStatusLock+1,i.parentSessionId??null,i.parentAgentId??null,i.agentId??null,i.conversationId??null,i.prompt??null,Mp(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(Mp(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(pt());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,pt()])}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 = ?",[pt(),u.id]),u.task??void 0}}class eg extends ho{store;constructor(i,l={}){super(new h_(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,pt()])}}function _K(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 EK(i){return i.mode==="plan"?"plan":i.mode==="yolo"?"yolo":"act"}function o6(i={}){let l=async(c)=>c,u=new Qf({sessionService:new eg(new Zf),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:Fr.CORE,mode:"automation",sessionMetadata:ln(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:EK(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:_K(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 AK(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 eb=120,Op="...";function CK(i){let l=i.trim();if(!l)return"";if(Buffer.byteLength(l,"utf8")<=eb)return l;let u=eb-Buffer.byteLength(Op,"utf8");if(u<=0)return Op;let c="";for(let g of l){if(Buffer.byteLength(c+g,"utf8")>u)break;c+=g}return`${c}${Op}`}async function xK(i){let l=i?.sessionId?.trim()||"unknown",u=typeof i?.metadata?.messagesPath==="string"?i.metadata.messagesPath:void 0,c=[...await au(u)].reverse().find((T)=>T.role==="assistant"),g=c?AK(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:CK(g&&g.length>0?g:I.length>0?I:b),severity:"info"}}function Zl(i){return!!i&&typeof i==="object"&&!Array.isArray(i)}function Lp(i){let l=i?.trim();return l?l:void 0}function RK(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 tb(i,l){return new Date(new Date(i).getTime()+Math.max(0,Math.floor(l))*1000).toISOString()}function rb(i,l){return new Date(new Date(i).getTime()-Math.max(0,Math.floor(l))*1000).toISOString()}function PK(i,l){if(!i)return l;return new Date(i).getTime()>=new Date(l).getTime()?i:l}function MK(i,l){let u=i.eventId.trim(),c=i.eventType.trim(),g=i.source.trim(),b=Lp(i.subject),I=Lp(i.dedupeKey)??`${c}:${g}:${b??u}`;return{eventId:u,eventType:c,source:g,subject:b,occurredAt:RK(i.occurredAt,l),workspaceRoot:Lp(i.workspaceRoot),payload:Zl(i.payload)?i.payload:void 0,attributes:Zl(i.attributes)?i.attributes:void 0,dedupeKey:I}}function Dp(i,l){if(!l)return;let u=l.split("."),c=i;for(let g of u){if(!Zl(c))return;c=c[g]}return c}function NK(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=Dp(u,l);if(c!==void 0)return c;if(i.attributes){let g=Dp(i.attributes,l);if(g!==void 0)return g}if(i.payload)return Dp(i.payload,l);return}function lu(i,l){if(Array.isArray(l))return l.some((u)=>lu(i,u));if(Array.isArray(i))return i.some((u)=>lu(u,l));if(Zl(l)){if(!Zl(i))return!1;return Object.entries(l).every(([u,c])=>lu(i[u],c))}return Object.is(i,l)}function OK(i,l){if(!l||Object.keys(l).length===0)return!0;return Object.entries(l).every(([u,c])=>lu(NK(i,u),c))}class f_{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=MK(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 _ of c){if(!OK(i,_.filters)){g.push({specId:_.specId,externalId:_.externalId,reason:"filter_mismatch",dedupeKey:i.dedupeKey});continue}b.push(_);let E=this.materializeForSpec(_,i,u.record.receivedAt);if(E.run)I.push(E.run);else g.push({specId:_.specId,externalId:_.externalId,reason:E.reason,dedupeKey:i.dedupeKey})}let T=b.length===0?"unmatched":I.length>0?"queued":"suppressed";return this.store.updateEventLogProcessing(u.record.eventId,{status:T,matchedSpecCount:b.length,queuedRunCount:I.length,suppressedCount:g.filter((_)=>_.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 T=this.store.findQueuedEventRunForDedupe({specId:i.specId,dedupeKey:c});if(T){let _=PK(T.scheduledFor,tb(u,g)),E=this.store.updateQueuedEventRunForDebounce({runId:T.runId,triggerEventId:l.eventId,scheduledFor:_});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:rb(u,b)}))return{reason:"dedupe_window"};let I=i.cooldownSeconds??0;if(I>0&&this.store.hasRecentEventRunForSpec({specId:i.specId,sinceIso:rb(u,I)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:i.specId,specRevision:i.revision,triggerKind:"event",triggerEventId:l.eventId,scheduledFor:g>0?tb(u,g):u}),reason:"dedupe_window"}}}function jK(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 BK(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 Ur(i){if(typeof i!=="string")return;let l=i.trim();return l.length>0?l:void 0}function HK(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 ah(i){if(!i||typeof i!=="object"||Array.isArray(i))return;return i}function zK(i){let l=ah(i);if(!l)return;let u=Ur(l.providerId),c=Ur(l.modelId);if(u===void 0&&c===void 0)return;return{providerId:u,modelId:c}}function WK(i){if(typeof i!=="string")return;let l=i.trim().toLowerCase();if(l==="act"||l==="plan"||l==="yolo")return l;return}function g_(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 KK=new Set(wA);function GK(i){let l=g_(i,{preserveEmptyArray:!0});if(!l)return;let u=l.filter((c)=>!KK.has(c));if(u.length>0)throw Error(`unknown tool(s): ${u.join(", ")}`);return l}var XK=new Set(["rules","skills","plugins"]);function JK(i){let l=g_(i,{preserveEmptyArray:!0});if(!l)return;let u=l.filter((c)=>!XK.has(c));if(u.length>0)throw Error(`unknown extension(s): ${u.join(", ")}`);return l}function Up(i){if(typeof i!=="number"||!Number.isFinite(i)||i<=0)return;return Math.floor(i)}function Fp(i){if(typeof i!=="number"||!Number.isFinite(i)||i<0)return;return Math.floor(i)}function lh(i){if(i===null||typeof i!=="object")return JSON.stringify(i??null);if(Array.isArray(i))return`[${i.map((u)=>lh(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)}:${lh(c)}`).join(",")}}`}function y_(i,l){let u=qK("sha256");return u.update(lh(i)),u.update(`
863
+ `),u.update(l),u.digest("hex")}function VK(i){return(i.split("/").pop()??i).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var YK=["schedule","timezone"],QK=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],ZK=["cwd"];function sb(i,l,u,c,g){return{externalId:i,relativePath:i,triggerKind:l,body:u,contentHash:y_(c,u),error:g}}function Cs(i,l,u,c,g,b){return{externalId:i,relativePath:l,triggerKind:u,body:c,contentHash:g,error:b}}function eG(i){let l=i.relativePath.replace(/\\/g,"/"),u=jK(l),{frontmatter:c,body:g}=BK(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 sb(l,u,g,{},"frontmatter must be a YAML mapping")}catch(j){return sb(l,u,g,{},j instanceof Error?`failed to parse frontmatter: ${j.message}`:"failed to parse frontmatter")}let I=y_(b,g),T=Ur(b.id),_=T??l;if(u!=="schedule"){for(let j of YK)if(b[j]!==void 0)return Cs(_,l,u,g,I,`field "${j}" is only allowed on *.cron.md specs`)}for(let j of ZK)if(b[j]!==void 0)return Cs(_,l,u,g,I,`field "${j}" is no longer supported; cron specs use workspaceRoot as cwd`);if(u!=="event"){for(let j of QK)if(b[j]!==void 0)return Cs(_,l,u,g,I,`field "${j}" is only allowed on .event.md specs`)}let E=Ur(b.prompt),A=g.trim(),C=E??(A.length>0?A:void 0);if(!C)return Cs(_,l,u,g,I,"prompt is required (frontmatter `prompt` or markdown body)");let N=Ur(b.workspaceRoot);if(!N)return Cs(_,l,u,g,I,"workspaceRoot is required");let M,O;try{M=GK(b.tools),O=JK(b.extensions)}catch(j){return Cs(_,l,u,g,I,j instanceof Error?j.message:String(j))}let L=WK(b.mode);if(b.mode!==void 0&&L===void 0)return Cs(_,l,u,g,I,"mode must be one of: act, plan, yolo");let D={id:T,title:Ur(b.title)??T??VK(l),prompt:C,workspaceRoot:N,mode:L??"yolo",systemPrompt:Ur(b.systemPrompt),modelSelection:zK(b.modelSelection),maxIterations:Up(b.maxIterations),timeoutSeconds:Up(b.timeoutSeconds),tools:M,notesDirectory:Ur(b.notesDirectory),extensions:O,source:Ur(b.source)??"user",tags:HK(b.tags),enabled:typeof b.enabled==="boolean"?b.enabled:!0,metadata:ah(b.metadata)},F;if(u==="schedule"){let j=Ur(b.schedule);if(!j)return Cs(_,l,u,g,I,"schedule is required for *.cron.md specs");let B=Ur(b.timezone);try{CC(j,B)}catch(Q){return Cs(_,l,u,g,I,Q instanceof Error?Q.message:String(Q))}F={...D,triggerKind:"schedule",schedule:j,timezone:B}}else if(u==="event"){let j=Ur(b.event);if(!j)return Cs(_,l,u,g,I,"event is required for .event.md specs");F={...D,triggerKind:"event",event:j,filters:ah(b.filters),debounceSeconds:Fp(b.debounceSeconds),dedupeWindowSeconds:Fp(b.dedupeWindowSeconds),cooldownSeconds:Fp(b.cooldownSeconds),maxParallel:Up(b.maxParallel)}}else F={...D,triggerKind:"one_off"};return{externalId:_,relativePath:l,triggerKind:u,body:g,contentHash:I,spec:F}}function tG(i,l){return FK(i,l).replace(/\\/g,"/")}function rG(i){if(!$K(i))return[];let l=[],u=[i];while(u.length>0){let c=u.pop();if(!c)continue;let g;try{g=LK(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 v_{store;cronDir;constructor(i){this.store=i.store,this.cronDir=Dt(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=rG(this.cronDir),u=new Set;for(let g of l){let b=tG(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(qC(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=DK(l,"utf8"),g=UK(l).mtimeMs}catch{return}let b=eG({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=Ml(i.scheduleExpr,c,i.timezone),b=new Date(g).toISOString();if(i.nextRunAt!==b)this.store.updateSpecNextRunAt(i.specId,b)}catch{}}}var dG=250;class w_{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor(i){this.reconciler=i.reconciler,this.debounceMs=Math.max(0,i.debounceMs??dG),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{iG(i,{recursive:!0});let l=nG.native(i);this.watcher=oG(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=lG(this.reconciler.getCronDir(),i);if(!sG(l)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let u=aG(this.reconciler.getCronDir(),l).replace(/\\/g,"/");await this.reconciler.reconcileFile(u,l),await this.onReconciled()}catch(l){this.onError(l)}}}class b_{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor(i){this.store=new Uh({dbPath:i.dbPath});let l=i.specs;this.reconciler=new v_({store:this.store,specs:l}),this.materializer=new Ch({store:this.store}),this.eventIngress=new f_({store:this.store,logger:i.logger}),this.runner=new Lh({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 w_({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 ib=2,pG=300000,nb=131072,mG=1e5,hG=2000,fG="bm25(0, 0, 0, 0, 0, 0.5, 8.0, 1.0)";function tg(i){return i!==null&&typeof i==="object"&&!Array.isArray(i)?i:void 0}function dh(i,l){if(l.length>=nb)return;if(typeof i==="string"){let c=l.parts.length>0?1:0,g=nb-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)dh(c,l);return}let u=tg(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;dh(g,l)}}function gG(i){let l=tg(i),u={length:0,parts:[]};return dh(l?.content??i,u),u.parts.join(`
864
+ `).trim()}function yG(i){let l=tg(i)?.role;return typeof l==="string"?l:"unknown"}function vG(i){let l=i.metadata?.title,u=typeof l==="string"&&l.trim()?l:i.prompt||i.sessionId;return Wn(u)||i.sessionId}function wG(i){return i.trim().split(/\s+/u).filter(Boolean).map((l)=>`"${l.replaceAll('"','""')}"*`).join(" AND ")}function bG(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 IG(i){let l;try{return l=V(i),bG(l),{db:l}}catch(u){try{l?.close?.()}catch{}return{error:u??Error("Session search database initialization failed")}}}class I_{host;db;initializationError;intervalMs;removedDuringRefresh=new Set;failedEvictionSessionIds=new Set;timer;refreshPromise;readyPromise=Promise.resolve();constructor(i,l={}){this.host=i;let u=IG(l.dbPath??cG(be(),"session-search.db"));this.db=u.db,this.initializationError=u.error,this.intervalMs=l.reconcileIntervalMs??pG}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=wG(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),hG),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,fG,b??null,b??null,g,c);return(this.removedDuringRefresh.size===0&&this.failedEvictionSessionIds.size===0?I:I.filter((T)=>!this.isSessionSuppressed(String(T.session_id)))).map((T)=>{let _=String(T.role);return{sessionId:String(T.session_id),documentId:String(T.document_id),ordinal:Number(T.ordinal),role:_,startedAt:String(T.started_at),workspaceRoot:String(T.workspace_root),title:Wn(String(T.title)),snippet:rr(_,String(T.snippet??"")),score:Number(T.score)}})}isSessionSuppressed(i){return this.removedDuringRefresh.has(i)||this.failedEvictionSessionIds.has(i)}async reconcile(i){let l=await this.host.listSessions(mG),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 T=await this.sourceRevision(I);if(this.isSessionSuppressed(I.sessionId))continue;let _=g.get(I.sessionId);if(_?.source_revision===T&&Number(_.index_version)===ib)continue;await this.indexSession(i,I,T)}for(let I of c){let T=String(I.session_id);if(!u.has(T)||this.isSessionSuppressed(T))this.deleteIndexedSession(i,T),this.failedEvictionSessionIds.delete(T)}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 uG(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=vG(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[T,_]of c.entries()){let E=gG(_);if(!E)continue;b.run(l.sessionId,`${l.sessionId}:${T}`,T,yG(_),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,ib,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 EG(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 ob(i,l){return`---
917
+ ${X.stringify(i).trimEnd()}
918
+ ---
919
+ ${l}`}function AG(i,l){let{data:u,body:c,hadFrontmatter:g}=EG(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 ob(u,c)}return u.disabled=!0,ob(u,c)}async function CG({filePath:i,enabled:l}){let u=await TG(i,"utf8"),c=AG(u,l);return await _G(i,c),{filePath:i,enabled:l,disabled:!l}}function T_(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 __(i,l){return{pluginName:i.name,pluginPath:l,extension:i,tools:[],rules:[],commands:[],mcpServers:[],providers:[]}}async function PG(i){if(jf(i.mode)==="sandbox")return MG(i);let l=i.registry??pc(),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:(_)=>{if(_.lastError?.phase==="setup")c.set(_.pluginPath,_)}}),b=[],I=[...g.failures],T=g.issues.flatMap((_)=>_.state==="failed"?l.get(_.pluginPath):[]);try{for(let _ of g.extensions){let E=_.__clinePluginPath;if(!E)continue;let A=__(_,E);try{await _.setup?.(T_(A).api,{workspaceInfo:u})}catch{}let C=c.get(E);if(C){T.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:_.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:T,failures:I,warnings:g.warnings}}async function MG(i){if(i.pluginPaths.length===0)return{plugins:[],failed:[],failures:[],warnings:[]};let l=i.workspacePath?{rootPath:i.workspacePath}:void 0,u=await wf({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 T=I.__clinePluginPath;if(!T)continue;let _=__(I,T);try{await I.setup?.(T_(_).api,{workspaceInfo:l})}catch(E){c.push({pluginPath:T,pluginName:I.name,phase:"setup",message:E instanceof Error?E.message:String(E),stack:E instanceof Error?E.stack:void 0});continue}g.push(_)}}finally{await u.shutdown().catch(()=>{})}let b=c.map((I)=>({name:I.pluginName??O$(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 NG(i,l){let u=RG(ab(i),ab(l));return u===""||!u.startsWith("..")&&!xG(u)}var OG=32,co=new Map;function $G(i,l){if(!co.has(i)&&co.size>=OG){let u=co.keys().next().value;if(u)co.delete(u)}co.set(i,l)}async function LG(i){let l=i.pluginPaths.map((g)=>`${g}:${yf(g)}`),u=pc(),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:jf(),pathStats:l,statuses:c})}function lb(i,l){return i.map((u)=>({...u,enabled:!l.has(u.name)}))}function DG(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 UG(i){let l=yT({workspacePath:i.workspacePath,cwd:i.cwd}),u=l.paths,c=ad(i.disabledToolNames);if(u.length===0&&l.discoveryFailures.length===0)return{tools:[],plugins:[],failures:[],warnings:[]};let g=await LG({pluginPaths:u,workspacePath:i.workspacePath,cwd:i.cwd,providerId:i.providerId,modelId:i.modelId}),b=co.get(g);if(b)return{tools:lb(b.tools,c),plugins:b.plugins,failures:b.failures,warnings:b.warnings};let I=[],T=[],_=await PG({pluginPaths:u,discoveryFailures:l.discoveryFailures,cwd:i.cwd,workspacePath:i.workspacePath,providerId:i.providerId,modelId:i.modelId});for(let C of _.plugins){let{extension:N,pluginPath:M}=C,O=NG(i.workspacePath,M)?"workspace-plugin":"global-plugin";for(let L of C.tools)I.push({name:L.name,pluginName:N.name,path:M,source:O,description:L.description?.trim()||void 0});T.push({pluginName:N.name,path:M,capabilities:[...N.manifest.capabilities].sort(),tools:C.tools.map((L)=>L.name).sort(),rules:C.rules.map((L)=>L.id).sort(),hooks:Object.keys(N.hooks??{}).sort(),commands:C.commands.map((L)=>L.name).sort(),mcpServers:C.mcpServers.map((L)=>L.name).sort(),providers:C.providers.map((L)=>L.name).sort(),state:"ready"})}for(let C of _.failed)T.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=DG(I),A={tools:E,plugins:T,failures:_.failures,warnings:_.warnings};if(_.failures.length===0)$G(g,A);return{tools:lb(E,c),plugins:T,failures:_.failures,warnings:_.warnings}}function Co(i,l){if(!l)return"global";let u=S_(l,i);return!u.startsWith("..")&&!k_(u)?"workspace":"global"}function E_(i,l){return Co(i,l)==="workspace"?"workspace-plugin":"global-plugin"}function A_(i,l){let u=S_(ph(i),ph(l));return u===""||!u.startsWith("..")&&!k_(u)}function FG(i){try{let l=JSON.parse(SG(i,"utf8"));return typeof l.name==="string"&&l.name.trim()?l.name.trim():void 0}catch{return}}function C_(i,l){let u=uh(i),c=l?ph(l):void 0;while(!c||u!==c&&A_(c,u)){let g=rg(u,"package.json");if(Ao(g)){let I=FG(g);if(I)return I;break}let b=uh(u);if(b===u)break;u=b}return ta(i,ch(i))}function qG(i){let l=new Set(Ts().disabledPlugins??[]),u=new Map;for(let c of mT(i.workspaceRoot||void 0)){if(!Ao(c))continue;try{for(let g of hT(c)){if(u.has(g))continue;u.set(g,{id:g,name:C_(g,c),path:g,enabled:!l.has(g),kind:"plugin",source:i.workspaceRoot?E_(g,i.workspaceRoot):"global-plugin",toggleable:!0})}}catch{}}return Ni([...u.values()])}function jG(i){let l=[];for(let u of qf({workspacePath:i.workspaceRoot||void 0,cwd:i.cwd,includeDisabled:!0}))for(let c of Ic([u]))l.push({directory:c,pluginName:C_(u),pluginPath:u,source:i.workspaceRoot?E_(u,i.workspaceRoot):"global-plugin"});return l.sort((u,c)=>c.directory.length-u.directory.length)}function BG(i){let l=new Set,u=(c)=>{for(let g of kG(c,{withFileTypes:!0})){let b=rg(c,g.name);if(g.isDirectory())u(b);else if(g.isFile()&&ch(g.name).toLowerCase()===".md"){let I=ta(g.name,ch(g.name));l.add(I.toLowerCase()==="skill"?ta(uh(b)):I)}}};for(let c of Ic([i]))try{u(c)}catch{}return[...l].sort()}function HG(i,l){return l.find((u)=>A_(u.directory,i))}function Ni(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 db(i,l){return l&&Co(i,l)==="workspace"?"workspace-plugin":"global-plugin"}function ub(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 zG(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=db(c.rootPath,i.workspaceRoot),I=c.skills.map((E)=>E.metadata.name).sort(),T=c.mcpServers.map((E)=>E.registration.name).sort(),_=[`${I.length} skill${I.length===1?"":"s"}`,`${T.length} MCP server${T.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}`:""} (${_})`].filter(Boolean).join(`
921
+ `),loadError:ub(i.report,c.rootPath),contributions:{inspectionStatus:g?"available":"disabled",capabilities:[...I.length>0?["skills"]:[],...T.length>0?["mcp"]:[]],tools:[],skills:I,rules:[],hooks:[],commands:[],mcpServers:T,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:rg(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:ta(c)||c,path:c,enabled:!1,kind:"plugin",source:db(c,i.workspaceRoot),toggleable:!1,agentPlugin:!0,pluginPath:c,description:"Invalid portable Agent Plugin package.",loadError:ub(i.report,c),contributions:{inspectionStatus:"failed",capabilities:[],tools:[],skills:[],rules:[],hooks:[],commands:[],mcpServers:[],providers:[]}})}function x_(i){return i.workspaceRoot?.trim()||i.cwd?.trim()||""}function mh(i,l){return i.cwd?.trim()||l||process.cwd()}async function cb(i,l){if(i.userInstructionService)return await l(i.userInstructionService);let u=x_(i),c=mh(i,u),g=sh({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 WG(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 R_{pluginSource;constructor(i={}){this.pluginSource=i.pluginSource}async list(i={}){return await cb(i,async(l)=>{let u=x_(i),c=jG({workspaceRoot:u,cwd:mh(i,u)}),g=[],b=[],I=[],T=this.pluginSource?[]:qG({workspaceRoot:u}),_=[],E=[];if(this.pluginSource){let N=await this.pluginSource.list(i);T.push(...N.plugins),_.push(...N.tools)}try{let N=await X0({pluginPaths:i.agentPluginPaths,cwd:mh(i,u)});zG({report:N,workspaceRoot:u,disabledPluginNames:jh(),plugins:T,skills:I,mcp:E})}catch(N){let M=N instanceof Error?N.message:String(N);console.warn(`[agent-plugins] Package discovery failed; listing settings without Agent Plugins: ${M}`)}let A=new Set(T.filter((N)=>N.enabled!==!1).map((N)=>N.path));if(l){for(let N of l.listRecords("workflow")){let M=N.item;g.push({id:N.id,name:M.name,path:N.filePath,enabled:M.disabled!==!0,kind:"workflow",source:Co(N.filePath,u),description:M.instructions,toggleable:!1})}for(let N of l.listRecords("rule")){let M=N.item;b.push({id:N.id,name:M.name,path:N.filePath,enabled:M.disabled!==!0,kind:"rule",source:Co(N.filePath,u),description:M.instructions,toggleable:!1})}for(let N of l.listRecords("skill")){let M=N.item,O=HG(N.filePath,c);I.push({id:N.id,name:M.name,path:N.filePath,enabled:M.disabled!==!0,kind:"skill",source:O?.source??Co(N.filePath,u),description:M.description,pluginName:O?.pluginName,pluginPath:O?.pluginPath,toggleable:!0})}}if(u&&!this.pluginSource&&i.includePluginTools!==!1)try{let N=await UG({workspacePath:u,cwd:i.cwd,providerId:i.availabilityContext?.providerId,modelId:i.availabilityContext?.modelId});for(let O of N.tools)_.push({id:`${O.pluginName}:${O.name}:${O.path}`,name:O.name,path:O.path,enabled:O.enabled&&A.has(O.path),kind:"tool",source:O.source,description:O.description,toggleable:!0,pluginName:O.pluginName,pluginPath:O.path});let M=new Map(N.plugins.map((O)=>[O.path,O]));for(let O of T){if(O.agentPlugin===!0)continue;let L=M.get(O.path),D=!L||L.state==="failed";if(O.enabled!==!1&&L?.lastError)O.loadError??=`Failed during ${L.lastError.phase}: ${L.lastError.message}`;O.contributions={inspectionStatus:O.enabled===!1?"disabled":D?"failed":"available",capabilities:L?.capabilities??[],tools:L?.tools??[],skills:[...new Set([...BG(O.path),...I.filter((F)=>F.pluginPath===O.path).map((F)=>F.name)])].sort(),rules:L?.rules??[],hooks:L?.hooks??[],commands:L?.commands??[],mcpServers:L?.mcpServers??[],providers:L?.providers??[]}}}catch{}let C=on();if(SI({filePath:C}))try{for(let N of um({filePath:C}))E.push({id:N.name,name:N.name,path:C,enabled:N.disabled!==!0,kind:"mcp",source:Co(C,u),description:N.transport.type,toggleable:!0})}catch{}return{workflows:Ni(g.filter((N)=>Ao(N.path))),rules:Ni(b.filter((N)=>Ao(N.path))),plugins:T,skills:Ni(I.filter((N)=>Ao(N.path))),tools:Ni(_),mcp:Ni(E.filter((N)=>Ao(N.path)))}})}async toggle(i){if(i.type==="skills")return await cb(i,async(l)=>{let u=WG(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??ta(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??ta(i.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await CG({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)hx(i.name);else gx(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((_)=>u&&_.id===u||c&&_.path===c||g&&_.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 _=i.enabled??b.enabled===!1;return vx(b.pluginName??b.name,!_),{snapshot:await this.list(i),changedTypes:["plugins","skills","mcp"]}}let I=b.path;if(this.pluginSource){let _=i.enabled;if(_===void 0)_=!b.enabled;let E=await this.pluginSource.setEnabled({path:I,enabled:_,cwd:i.cwd,workspaceRoot:i.workspaceRoot});return{snapshot:{...l,plugins:[...E.plugins,...l.plugins.filter((A)=>A.agentPlugin===!0)],tools:Ni(E.tools)},changedTypes:["plugins"]}}let T=i.enabled;if(T===void 0)T=!b.enabled;return yx(I,!T),{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()||on(),c=i.enabled;if(c===void 0){let g=um({filePath:u}).find((b)=>b.name===l);if(!g)throw Error(`Unknown MCP server: ${l}`);c=g.disabled===!0}return uA({filePath:u,name:l,disabled:!c}),{snapshot:await this.list(i),changedTypes:["mcp"]}}throw Error(`Settings type '${i.type}' does not support toggles.`)}}function Dd(i){return i?.trim()||void 0}function N_(i,l){let u=ig(i,l);return u===""||!u.startsWith(`..${a2}`)&&u!==".."&&!sg(u)}function l2(i,l,u){if(!Bp(i))return;let c=fb(i),g=l;while(!Bp(g)){let I=o2(g);if(I===g)break;g=I}if(!Bp(g))return;let b=fb(g);if(!N_(c,b))throw Error(`${u} escapes the workspace through a symbolic link`)}function gb(i,l,u,c){let g=M_(i,sg(l)?ig(i,l):l);if(!N_(i,g)||!c&&g===i)throw Error(`${u} must stay within the task workspace`);return l2(i,g,u),g}function ed(i){let l=i.resourcePaths??[];if(i.scope==="global"){if(Dd(i.workspaceRoot))throw Error("global tasks cannot set workspaceRoot");if(Dd(i.cwd))throw Error("global tasks cannot set cwd");if(l.some((_)=>_.trim()))throw Error("global tasks cannot reference workspace files");return{resourcePaths:[]}}let u=Dd(i.workspaceRoot);if(!u)throw Error("workspaceRoot is required for workspace tasks");let c=M_(u),g=Dd(i.cwd),b=g?gb(c,g,"cwd",!0):void 0,I=[],T=new Set;for(let _ of l){let E=_.trim();if(!E)throw Error("resourcePaths must contain only non-empty paths");if(sg(E)||E.split(/[\\/]+/u).includes(".."))throw Error("resourcePaths must be workspace-relative without '..'");let A=gb(c,E,"resourcePaths",!1),C=ig(c,A);if(!T.has(C))T.add(C),I.push(C)}return{workspaceRoot:c,cwd:b,resourcePaths:I}}var d2=new Set(["suggestion","follow-up","todo","handoff","idea","reminder"]),u2=new Set(["status","instructions","revision","approvedRevision","createdBy","updatedBy","currentRunId","lastRunId","lastSessionId","error","createdAt","updatedAt","completedAt","archivedAt"]),c2=new Set(["taskId","type","priority","title","description","availableAt","expiresAt","cwd","resourcePaths","assignee","modelSelection","mode","systemPrompt","maxIterations","timeoutSeconds","automationEligible"]);function p2(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 Ud(i,l){return n2("sha256").update(JSON.stringify(i)).update(`
926
+ `).update(l.trim()).digest("hex")}function qr(i){if(typeof i!=="string")return;let l=i.trim();return l.length>0?l:void 0}function yb(i,l){let u=qr(i);if(!u||!Number.isFinite(Date.parse(u)))return Error(`${l} must be a valid ISO-8601 timestamp`);return new Date(u).toISOString()}function vb(i,l){if(i===void 0)return;if(!Number.isInteger(i)||i<=0)return Error(`${l} must be a positive integer`);return i}function m2(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=qr(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 h2(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=qr(l.providerId);if(!c)return Error("modelSelection.providerId is required");let g=qr(l.modelId);return{providerId:c,...g?{modelId:g}:{}}}function nt(i,l,u){return{ok:!1,specPath:i.specPath,contentHash:l,error:u}}function wb(i){let{frontmatter:l,body:u}=p2(i.raw);if(l===void 0)return nt(i,Ud({},u),"task spec must begin with YAML frontmatter");let c;try{let B=X.parse(l);if(!B||typeof B!=="object"||Array.isArray(B))return nt(i,Ud({},u),"frontmatter must be a YAML mapping");c=B}catch(B){return nt(i,Ud({},u),B instanceof Error?`failed to parse frontmatter: ${B.message}`:"failed to parse frontmatter")}let g=Ud(c,u),b=Object.keys(c).filter((B)=>u2.has(B));if(b.length>0)return nt(i,g,`operational field(s) cannot be set in a task spec: ${b.join(", ")}`);let I=Object.keys(c).filter((B)=>!c2.has(B));if(I.length>0)return nt(i,g,`unknown task spec field(s): ${I.join(", ")}`);if(i.scope==="workspace"&&!qr(i.workspaceRoot))return nt(i,g,"workspaceRoot is required for workspace-scoped task specs");let T=qr(c.type);if(!T||!d2.has(T))return nt(i,g,"type must be one of: suggestion, follow-up, todo, handoff, idea, reminder");let _=qr(c.title);if(!_)return nt(i,g,"title is required");let E=u.trim();if(!E)return nt(i,g,"markdown body instructions are required");let A=c.priority??3;if(!Number.isInteger(A)||A<0||A>5)return nt(i,g,"priority must be an integer from 0 to 5");let C=yb(c.expiresAt,"expiresAt");if(C instanceof Error)return nt(i,g,C.message);let N;if(c.availableAt!==void 0){let B=yb(c.availableAt,"availableAt");if(B instanceof Error)return nt(i,g,B.message);if(N=B,Date.parse(N)>=Date.parse(C))return nt(i,g,"availableAt must be before expiresAt")}let M=m2(c.resourcePaths,"resourcePaths");if(M instanceof Error)return nt(i,g,M.message);let O;try{O=ed({scope:i.scope,workspaceRoot:i.workspaceRoot,cwd:qr(c.cwd),resourcePaths:M})}catch(B){return nt(i,g,B instanceof Error?B.message:String(B))}let L=h2(c.modelSelection);if(L instanceof Error)return nt(i,g,L.message);let D=vb(c.maxIterations,"maxIterations");if(D instanceof Error)return nt(i,g,D.message);let F=vb(c.timeoutSeconds,"timeoutSeconds");if(F instanceof Error)return nt(i,g,F.message);let j=c.mode;if(j!==void 0&&j!=="act"&&j!=="plan"&&j!=="yolo")return nt(i,g,"mode must be one of: act, plan, yolo");if(c.automationEligible!==void 0&&typeof c.automationEligible!=="boolean")return nt(i,g,"automationEligible must be a boolean");return{ok:!0,specPath:i.specPath,contentHash:g,spec:{taskId:qr(c.taskId),type:T,title:_,description:qr(c.description),instructions:E,scope:i.scope,workspaceRoot:O.workspaceRoot,cwd:O.cwd,resourcePaths:O.resourcePaths,priority:A,assignee:qr(c.assignee),modelSelection:L,mode:j,systemPrompt:qr(c.systemPrompt),maxIterations:D,timeoutSeconds:F,availableAt:N,expiresAt:C,automationEligible:c.automationEligible!==!1,specPath:i.specPath,contentHash:g}}}function f2(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 g2(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 y2(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 v2(i,l){let u=P_(i,l);return u===""||!u.startsWith(`..${i2}`)&&u!==".."&&!fh(u)}class O_{specsDir;scope;workspaceRoot;constructor(i){this.scope=i.scope,this.workspaceRoot=i.workspaceRoot?.trim()||void 0,this.specsDir=hb(Ya({scope:i.scope,workspaceRoot:this.workspaceRoot,taskSpecsDir:i.taskSpecsDir}))}listSpecPaths(){if(!Yr(this.specsDir))return[];return this.assertSpecsDirSafe(),QG(this.specsDir,{withFileTypes:!0}).filter((i)=>i.isFile()&&i.name.endsWith(".task.md")).map((i)=>jp(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(qp(l).isSymbolicLink())throw Error("task spec files cannot be symbolic links");return wb({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&&Yr(u))throw Error(`task spec already exists: ${u}`);if(Yr(u)&&qp(u).isSymbolicLink())throw Error("task spec files cannot be symbolic links");let c=f2(i),g=wb({specPath:u,raw:c,scope:this.scope,workspaceRoot:this.workspaceRoot});if(!g.ok)throw Error(`invalid task spec: ${g.error}`);let b=jp(this.specsDir,`.${r2(u)}.${process.pid}.${Date.now()}.tmp`);try{if(t2(b,c,{encoding:"utf8",mode:384}),this.assertExpectedContent(u,l),l.createOnly)VG(b,u);else e2(b,u)}finally{if(Yr(b))mb(b,{force:!0})}return g.spec}resolveWritePath(i,l){return this.resolveSpecPath(l??y2(i))}ensureSpecsDir(){this.assertSpecsDirSafe(),YG(this.specsDir,{recursive:!0}),this.assertSpecsDirSafe()}deleteSpec(i,l={}){this.assertSpecsDirSafe();let u=this.resolveSpecPath(i);if(!Yr(u))return!1;if(l.expectedContentHash){if(this.readSpec(u).contentHash!==l.expectedContentHash)throw Error(`task spec changed before delete: ${u}`)}return mb(u),!0}assertExpectedContent(i,l){if(l.createOnly){if(Yr(i))throw Error(`task spec already exists: ${i}`);return}if(!l.expectedContentHash)return;if(!Yr(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(Yr(this.specsDir)&&qp(this.specsDir).isSymbolicLink())throw Error("task specs directory cannot be a symbolic link");if(!this.workspaceRoot||!Yr(this.workspaceRoot))return;let i=pb(this.workspaceRoot),l=this.specsDir;while(!Yr(l)){let u=s2(l);if(u===l)break;l=u}if(Yr(l)&&!v2(i,pb(l)))throw Error("task specs directory escapes the workspace")}resolveSpecPath(i){let l=hb(fh(i)?i:jp(this.specsDir,i)),u=P_(this.specsDir,l);if(u===""||u.startsWith("..")||fh(u)||!l.endsWith(".task.md"))throw Error("task spec path must be a *.task.md file within the specs directory");return l}}var w2=[`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 b2(i){i.exec("PRAGMA journal_mode = WAL;"),i.exec("PRAGMA busy_timeout = 5000;"),i.exec("PRAGMA foreign_keys = ON;");for(let l of w2)i.exec(l)}var kb={kind:"system",id:"task_store"};class du 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 Rl(i){if(typeof i!=="string"||!i)return;try{return JSON.parse(i)}catch{return}}function Is(i){if(typeof i==="number"&&Number.isFinite(i))return Math.floor(i);if(typeof i==="bigint")return Number(i);return}function Hp(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:Rl(i.resource_paths_json)?.filter((l)=>typeof l==="string")??[],priority:Is(i.priority)??3,assignee:h(i.assignee),modelSelection:Rl(i.model_selection_json),mode:h(i.mode),systemPrompt:h(i.system_prompt),maxIterations:Is(i.max_iterations),timeoutSeconds:Is(i.timeout_seconds),availableAt:f(i.available_at),expiresAt:f(i.expires_at),automationEligible:Number(i.automation_eligible??0)===1,revision:Is(i.revision)??1,approvedRevision:Is(i.approved_revision),createdBy:Rl(i.created_by_json)??kb,updatedBy:Rl(i.updated_by_json)??kb,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 Sb(i){return{runId:f(i.run_id),taskId:f(i.task_id),taskRevision:Is(i.task_revision)??1,attempt:Is(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 Tb(i){return{scopeKey:f(i.scope_key),mode:f(i.mode),applyToAgentCreated:Number(i.apply_to_agent_created??0)===1,maxConcurrentRuns:Is(i.max_concurrent_runs)??2,maxChainDepth:Is(i.max_chain_depth)??1,maxStartsPerHour:Is(i.max_starts_per_hour)??20,enabledBy:Rl(i.enabled_by_json),enabledAt:h(i.enabled_at),updatedAt:f(i.updated_at)}}function yl(i,l){let u=i.trim();if(!u)throw Error(`${l} is required`);return u}function Yt(i){return typeof i==="string"&&i.trim()?i.trim():void 0}function Oi(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 _b(i,l){return i==null?void 0:Oi(i,l)}function bi(i,l){if(i==null)return;if(!Number.isInteger(i)||i<=0)throw Error(`${l} must be a positive integer`);return i}function Eb(i,l){if(Date.parse(i)>=Date.parse(l))throw Error("availableAt must be before expiresAt")}function Fd(i){return Array(i).fill("?").join(", ")}class $_{db;constructor(i={}){this.db=V(i.dbPath??Ha()),b2(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=Yt(i.taskId)??`task_${bb()}`,c=ed(i),g=Oi(i.availableAt??l,"availableAt"),b=Oi(i.expiresAt,"expiresAt");Eb(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 T=bi(i.maxIterations,"maxIterations"),_=bi(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,yl(i.title,"title"),Yt(i.description)??null,yl(i.instructions,"instructions"),i.scope,c.workspaceRoot??null,c.cwd??null,JSON.stringify(c.resourcePaths),I,Yt(i.assignee)??null,i.modelSelection?JSON.stringify(i.modelSelection):null,i.mode??null,Yt(i.systemPrompt)??null,T??null,_??null,g,b,i.automationEligible===!1?0:1,C,JSON.stringify(i.createdBy),JSON.stringify(i.createdBy),Yt(i.originSessionId)??null,Yt(i.originTaskId)??null,Yt(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?Hp(l):void 0}getTaskBySpecPath(i){let l=this.db.prepare("SELECT * FROM agenda_tasks WHERE spec_path = ?").get(i);return l?Hp(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(Ib(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 (${Fd(i.statuses.length)})`),u.push(...i.statuses);if(i.types)l.push(`type IN (${Fd(i.types.length)})`),u.push(...i.types);let c=i.workspaceRoot?.trim()?Ib(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 (${Fd(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(Oi(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(Hp)}updateTask(i){let l=this.getTask(i.taskId);if(!l)return;if(l.revision!==i.expectedRevision)throw new du(l);if(l.status==="in_progress")throw Error("an in-progress task cannot be edited");let u=i.scope??l.scope,c=ed({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=Oi(i.availableAt??l.availableAt,"availableAt"),b=Oi(i.expiresAt??l.expiresAt,"expiresAt");Eb(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 T=l.status==="approved"||l.status==="failed"?"pending_approval":l.status,_=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,T,yl(i.title??l.title,"title"),i.description===null?null:Yt(i.description??l.description)??null,yl(i.instructions??l.instructions,"instructions"),u,c.workspaceRoot??null,c.cwd??null,JSON.stringify(c.resourcePaths),I,i.assignee===null?null:Yt(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:Yt(i.systemPrompt??l.systemPrompt)??null,bi(i.maxIterations===null?void 0:i.maxIterations??l.maxIterations,"maxIterations")??null,bi(i.timeoutSeconds===null?void 0:i.timeoutSeconds??l.timeoutSeconds,"timeoutSeconds")??null,g,b,i.automationEligible??l.automationEligible?1:0,_,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 du(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 du(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=(Is(u?.max_attempt)??0)+1,g=`run_${bb()}`,b=x(),I=i.claimedAt?Oi(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",Yt(i.claimToken)??null,_b(i.claimUntilAt,"claimUntilAt")??null,Yt(i.requestedByClientId)??null,Yt(i.sessionId)??null,I,b,b);let T=this.getRun(g);if(!T)throw Error(`failed to create run ${g}`);return T}getRun(i){let l=this.db.prepare("SELECT * FROM agenda_task_runs WHERE run_id = ?").get(i);return l?Sb(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 (${Fd(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(Sb)}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 Tb(l)}listAutomationPolicies(){return this.db.prepare("SELECT * FROM agenda_task_automation ORDER BY scope_key").all().map((i)=>Tb(i))}setAutomationPolicy(i){let l=yl(i.scopeKey,"scopeKey"),u=bi(i.maxConcurrentRuns,"maxConcurrentRuns"),c=bi(i.maxChainDepth,"maxChainDepth"),g=bi(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,_b(i.enabledAt,"enabledAt")??null,b),this.getAutomationPolicy(l)}}var Li={kind:"system",id:"file_reconciler"},Ai={kind:"system",id:"task_manager"},Ab={kind:"automation_policy",id:"global"},vl=new Set(["completed","failed","cancelled","interrupted"]),I2=30000,k2=250;function Rs(){return new Date().toISOString()}function Cb(i){return typeof i==="string"&&i.trim()?i.trim():void 0}function xb(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 Rb(i,l){let u=JG(i,l);return u!==""&&!u.startsWith("..")&&!u.startsWith("/")}function wl(i){if(!i||!hh(i))return!1;try{return GG(i).isDirectory()}catch{return!1}}function zp(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 Wp(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 S2(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:Li}}function T2(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 L_{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 $_({dbPath:i.dbPath}),this.globalSpecsDir=i.globalSpecsDir,this.watcherDebounceMs=Math.max(0,i.watcherDebounceMs??k2),this.watchFiles=i.watchFiles!==!1,this.automationEnabled=i.automationEnabled!==!1,this.logger=i.logger??Un,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(wl(i))await this.reconcileSourceForProjection("workspace",i,"startup");this.expireTasks(),this.maintenanceTimer=setInterval(()=>{this.expireTasks(),this.queueAutomation()},I2),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:Rs(),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:Ai});if(this.activeRuns.clear(),this.ownsStore)this.store.close()}async createTask(i){this.assertUsable(),xb(i.expiresAt);let l=ed(i),u={...i,...l},c=Cb(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(hh(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(T){throw this.store.deleteTask(c),T}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(wl(i.workspaceRoot))await this.reconcileSourceForProjection("workspace",i.workspaceRoot,"list")}else if(i.scope!=="global"){for(let l of this.store.listWorkspaceRoots())if(wl(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"&&wl(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!==Li.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=T2(u,i);xb(c.expiresAt);let g=ed(c),b={...c,...g},I={...i,scope:b.scope,workspaceRoot:b.workspaceRoot??null,cwd:b.cwd??null,resourcePaths:b.resourcePaths},T=this.ensureScope(b.scope,b.workspaceRoot),_=u.specPath!==void 0&&Rb(T.specsDir,u.specPath);if(!_)await this.reconcileFileStore(T);let E=T.resolveWritePath(u.taskId,_?u.specPath:void 0);if(E!==u.specPath&&(hh(E)||this.store.getTaskBySpecPath(E)))throw Error(`task spec already exists: ${E}`);let A;if(_&&u.specPath){let L=T.readSpec(u.specPath);if(!L.ok)throw Error(`task spec is invalid: ${L.error}`);if(i.updatedBy.id!==Li.id&&zp(L.spec,u)!==Wp(u))throw Error(`task spec changed outside the manager; reconcile task ${u.taskId} and retry`);A=L.contentHash}let C,N;try{C=T.writeSpec(b,{specPath:E,expectedContentHash:A,createOnly:!_}),N=this.store.updateTask(I)}catch(L){try{if(C&&_&&u.specPath)T.writeSpec(u,{specPath:u.specPath,expectedContentHash:C.contentHash});else if(C)T.deleteSpec(E,{expectedContentHash:C.contentHash})}catch(D){this.logError("agenda task update rollback failed",D,{taskId:u.taskId,specPath:E})}throw L}if(!N||!C)throw Error(`unknown task: ${i.taskId}`);let M=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 O=M??this.requireTask(i.taskId);return this.publish("task.updated",O),this.expireTask(O),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&&!vl.has(b.status))this.store.updateRun(b.runId,{status:"cancelled",completedAt:Rs(),error:c?.trim()||void 0});this.activeRuns.delete(i);let T=this.store.updateTaskState(i,{status:"cancelled",approvedRevision:null,currentRunId:null,error:c?.trim()||null,updatedBy:l},g.revision);if(!T)throw Error(`unknown task: ${i}`);if(this.publish("task.updated",T,b),b?.sessionId)try{await this.runtime.abortSession(b.sessionId,I)}catch(_){this.logError("agenda task session abort failed",_,{taskId:i,runId:b.runId,sessionId:b.sessionId})}return T}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 T=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"}),_=this.store.getRun(b.runId),E=this.store.getTask(i);if(!_||vl.has(_.status)||E?.status!==g.status||E.currentRunId!==b.runId){if(_&&!vl.has(_.status))this.store.updateRun(b.runId,{status:"cancelled",sessionId:T.sessionId,completedAt:Rs(),error:"Task changed or was cancelled while its session was starting."});else if(_)this.store.updateRun(b.runId,{sessionId:T.sessionId});throw this.activeRuns.delete(i),await this.runtime.abortSession(T.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:T.sessionId})),Error(`task ${i} changed or was cancelled while starting`)}b=this.store.updateRun(b.runId,{status:"running",sessionId:T.sessionId,startedAt:Rs()})??b,I=this.store.updateTaskState(i,{status:"in_progress",lastSessionId:T.sessionId,updatedBy:l})??I,this.activeRuns.set(i,{runId:b.runId,sessionId:T.sessionId}),this.publish("task.run.started",I,b);let A=this.finishRun(I,b,T.sessionId);return this.backgroundRuns.add(A),A.finally(()=>this.backgroundRuns.delete(A)),{task:I,run:b}}catch(T){throw await this.finishRunFailure(I,b,T),T}}async getAutomationPolicy(i="global"){return this.assertUsable(),this.store.getAutomationPolicy(i)}async setAutomationPolicy(i,l){this.assertUsable();let u=Rs(),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||vl.has(g.status))return;if(c.status==="completed"){let b=Rs(),I=this.store.updateRun(l.runId,{status:"completed",completedAt:b,resultSummary:c.summary,error:null})??g,T=this.store.updateTaskState(i.taskId,{status:"completed",currentRunId:null,error:null,completedAt:b,updatedBy:Ai})??this.requireTask(i.taskId);this.publish("task.run.completed",T,I)}else if(c.status==="cancelled")await this.cancelTask(i.taskId,Ai,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||vl.has(c.status))return;let g=u instanceof Error?u.message:String(u),b=this.store.updateRun(l.runId,{status:"failed",completedAt:Rs(),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 T=this.store.updateTaskState(i.taskId,{status:"failed",currentRunId:null,error:g,updatedBy:Ai})??I;this.activeRuns.delete(i.taskId),this.publish("task.run.failed",T,b)}ensureScope(i,l){let u=Cb(l);if(i==="workspace"&&!u)throw Error("workspaceRoot is required for workspace task scope");if(i==="workspace"&&!wl(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 O_({scope:i,workspaceRoot:u,taskSpecsDir:i==="global"?this.globalSpecsDir:void 0}),I={store:b},T=!0;try{b.ensureSpecsDir();let _=this.watchFiles?this.resolveWatchRoot(b.specsDir):void 0;if(_!==void 0)I.watcher=XG(_,(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=!1,this.logError("agenda task source could not be attached",_,{specsDir:b.specsDir})}if(T)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,T=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(!T){let _=this.store.createTask(g2(g,Li));this.publish("task.created",_),this.expireTask(_);continue}if(T.archivedAt){let _=T.status==="cancelled"&&T.error==="Task spec was deleted.",E=this.store.updateTaskState(T.taskId,{status:_?"pending_approval":T.status,approvedRevision:_?null:T.approvedRevision,archivedAt:null,error:_?null:T.error,updatedBy:Li});if(E)T=E,this.publish("task.updated",E)}if(zp(g,T)===Wp(T))continue;if(T.status==="in_progress"){this.logger.log("agenda task edit deferred until its run completes",{severity:"warn",taskId:T.taskId});continue}if(T.status==="completed"||T.status==="cancelled"||T.status==="expired"){this.logger.log("terminal agenda task edits are not applied",{severity:"warn",taskId:T.taskId,status:T.status}),i.writeSpec(T,{specPath:g.specPath,expectedContentHash:g.contentHash});continue}await this.updateTask(S2(g,T))}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||!Rb(i.specsDir,c.specPath)||l.has(c.specPath)||c.archivedAt)continue;if(c.status==="in_progress")await this.cancelTask(c.taskId,Li,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:Rs(),updatedBy:Li});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:Ai});if(l)this.publish("task.updated",l)}isExpired(i){return Date.parse(i.expiresAt)<=Date.now()}recoverInterruptedRuns(){let i=Rs();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:Ai});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:Ai})}}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:Rs(),limit:1000});for(let I of b){if(g<=0)break;if(i!==this.automationPolicyGeneration)return;try{let T=I;if(T.status==="pending_approval"){if(!this.canAutomaticallyApprove(T,u))continue;T=await this.approveTask(T.taskId,Ab,T.revision)}if(i!==this.automationPolicyGeneration)return;if(u.mode==="auto_start"&&this.runtime.isInteractiveClientAvailable?.()!==!0)continue;await this.runTask(T.taskId,Ab,T.revision),g-=1}catch(T){this.logError("agenda task automation start failed",T,{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||zp(c.spec,u)!==Wp(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 KG.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 E2(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 Mb(i,l,u){let c=E2(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 D_{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 T=await I.text(),_;if(T.trim())try{_=JSON.parse(T)}catch{if(!I.ok)throw Error(Mb(I.status,T,void 0));throw Error("Cline account response was not valid JSON")}if(!I.ok)throw Error(Mb(I.status,T,_));if(typeof _==="object"&&_!==null){let E=_;if(typeof E.success==="boolean"){if(!E.success)throw Error(E.error||"Cline account request failed");return E.data}}if(_===void 0||_===null)throw Error("Cline account response payload was empty");return _}finally{clearTimeout(b)}}}var C2=610000,x2=3000,bl=15000,R2="CLOUD_SESSION_ERROR:",U_="__cline_create_request__:";function P2(i){return(i.trim().split(`
1062
+ `)[0]??"").trim().slice(0,72)}class ue extends Error{code;detail;connectUrl;status;constructor(i,l,u,c){super(`${R2}${JSON.stringify({code:i,message:l,connectUrl:u})}`);this.code=i,this.detail=l,this.connectUrl=u,this.status=c,this.name="CloudSessionError"}}class F_ extends ue{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 q_ extends Error{constructor(i){super(i instanceof Error?i.message:"Cloud handoff creation was rejected.",{cause:i});this.name="CloudHandoffCreationRejectedError"}}function gh(i){let l=i.length;while(l>0&&i[l-1]==="/")l--;return i.slice(0,l)}function M2(i){return`${U_}${i}`.slice(0,255)}function Nb(i){return i?.startsWith(U_)===!0}function j_(i){switch(i){case"provisioning":case"cloning_repo":case"agent_starting":case"ready":case"failed":return i;default:return}}function Kp(i){let l=ne(i.replace(/^workos:/,""));return typeof l?.sub==="string"&&l.sub.trim()?l.sub.trim():void 0}function Ob(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()},x2);i.addEventListener("abort",c,{once:!0})})}function N2(i,l){if(i&&typeof i==="object"){let u=i.error;if(typeof u==="string"&&u.trim())return u.trim()}return l}function Gp(i,l,u,c){let g=N2(l,`Cloud session request failed (${i})`);if(i===401)return new ue("authentication_required",g);if(i===404)return new ue("session_not_found",g);if(i===410)return new ue("session_expired",g);if(i===412)return new ue("github_not_connected",g,c??`${gh(u)}/dashboard/integrations`);if(i===403&&g.trim().toLowerCase()==="forbidden")return new ue("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 ue("request_failed",g,void 0,i)}class B_{options;apiBaseUrl;appBaseUrl;fetchImpl;createTimeoutMs;unconfirmedHandoffCreates=new Set;completedHandoffCreates=new Map;constructor(i){this.options=i,this.apiBaseUrl=gh(i.apiBaseUrl),this.appBaseUrl=gh(i.appBaseUrl),this.fetchImpl=i.fetch??fetch,this.createTimeoutMs=i.createTimeoutMs??C2}async request(i,l={},u,c,g){let b=!1,I;while(!0){let T;try{T=typeof c==="string"?c:await this.options.getAuthToken()}catch(A){if(I)throw Gp(401,void 0,this.appBaseUrl,u);throw A}if(!T?.trim())throw new ue("authentication_required","Sign in to Cline before starting a cloud session.");if(T.trim()===I)throw new ue("authentication_required","The cloud session credential was rejected. Sign in again.");if(typeof c==="object"){if(c.subject?Kp(T.trim())!==c.subject:T.trim()!==c.token)throw new ue("authentication_required","The signed-in account changed during cloud session creation.");c.token=T.trim()}g?.();let _=await this.fetchImpl(`${this.apiBaseUrl}${i}`,{...l,signal:l.signal??AbortSignal.timeout(bl),headers:{Accept:"application/json",Authorization:`Bearer ${T.trim()}`,...l.body?{"Content-Type":"application/json"}:{},...l.headers}}),E=_.status===204?void 0:await _.json().catch(()=>{return});if(!_.ok){if(_.status===401&&typeof c==="object"&&!b&&c.subject){b=!0,I=T.trim();continue}throw Gp(_.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&&Nb(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&&Nb(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),T=String(b.html_url??b.clone_url??"").trim();if(!Number.isSafeInteger(I)||I<=0||!T)return[];let _=String(b.name??"").trim();return[{id:I,name:_,fullName:String(b.full_name??(_||T)).trim(),url:T,defaultBranch:String(b.default_branch??"").trim()}]})}}catch(g){if(g instanceof ue&&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 ue("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(),T=u.cursor?.trim();if(I)b.set("query",I);if(T)b.set("cursor",T);let _=b.size>0?`${g}?${b}`:g;try{let E=await this.request(_),A=Array.isArray(E)?E:Array.isArray(E?.items)?E.items:[],C=I?.toLowerCase();return{available:!0,branches:A.flatMap((N)=>{let M=String(N.name??"").trim();return M&&(!Array.isArray(E)||!C||M.toLowerCase().includes(C))?[M]:[]}),nextToken:Array.isArray(E)?"":String(E?.nextToken??"").trim()}}catch(E){if(E instanceof ue&&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(bl)]):void 0},void 0,l.authToken)}async create(i){if(i.handoff&&typeof i.handoff.onCreating!=="function")throw new ue("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 ue("authentication_required","Sign in to Cline before starting a cloud session.");let u={token:l,subject:Kp(l)},c=M2(i.requestId?.trim()||A2()),g=i.handoff?`${u.subject??l}/${i.organizationId??""}/${i.requestId?.trim()??""}`:void 0;if(i.handoff&&!i.requestId?.trim())throw new ue("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 M=new ue(C.status==="failed"?"session_failed":"session_expired","The recovered cloud handoff workspace is no longer usable.");try{await this.deleteWithAuth(C.id,u)}catch(O){if(!(O instanceof ue&&(O.code==="session_not_found"||O.code==="session_expired")))throw AggregateError([M,O],"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),M}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 ue("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(M){if(M instanceof ue&&(M.code==="session_not_found"||M.code==="session_expired"))await i.handoff?.onOuterSessionRemoved?.(N.sessionId),this.completedHandoffCreates.delete(g),this.unconfirmedHandoffCreates.delete(g);throw M}return await i.handoff?.onOuterSessionCreated(N.sessionId,{created:!1}),{...N,cleanupAuthToken:u.token}}if(this.unconfirmedHandoffCreates.has(g))throw new ue("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 T=new AbortController,_=setTimeout(()=>T.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:T.signal},i.organizationId?.trim()?`${this.appBaseUrl}/dashboard/organization/integrations`:void 0,u,()=>{A=!0}),N=C?.sessionId?.trim();if(!N)throw new ue("request_failed","The cloud session service returned no session id.");E=N,await this.persistHandoffOuterSession(i,N,u,g);let M={sessionId:N,status:C.status?.trim()||"provisioning",sandboxUrl:C.sandboxUrl?.trim()??"",cleanupAuthToken:u.token};if(g)this.unconfirmedHandoffCreates.delete(g),this.completedHandoffCreates.set(g,M);return M}catch(C){if(E)throw C;let N=!A||C instanceof ue&&(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 q_(C);if(T.signal.aborted||!(C instanceof ue)||C instanceof ue&&C.code==="request_failed"&&(C.status===void 0||C.status>=500||C.status===408||C.status===409)){let M=[];try{M=await b()}catch(L){if(i.handoff)throw AggregateError([C,L],"Cloud handoff creation is unconfirmed and its session list could not be checked.")}if(!i.handoff&&!N&&M.length!==1)throw new F_(C);if(M.length>1)throw new ue("request_failed","Cloud session creation had an ambiguous result. Check your cloud session list before trying again.");let O=M[0];if(O){if(i.handoff)return await I(O);return{sessionId:O.id,status:O.status,sandboxUrl:O.sandboxUrl,cleanupAuthToken:u.token}}}else if(g)this.unconfirmedHandoffCreates.delete(g);throw C}finally{clearTimeout(_)}}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 ue&&(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:Kp(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(bl)])},void 0,g)}catch(T){if(l.aborted)throw T;if(T instanceof ue&&T.code!=="request_failed")throw T;await Ob(l);continue}let I=b?.status?.trim().toLowerCase();if(u?.({phase:j_(b?.phase)}),I==="ready"||I==="active")return;if(I==="failed")throw new ue("session_failed",b?.statusReason?.trim()||"The cloud sandbox could not be prepared.");if(I!=="provisioning")throw new ue("request_failed","The cloud session service returned an unexpected provisioning status.");await Ob(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(bl)]):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 ue)||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 ue("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(bl)});if(u.status===404)return null;let c=await u.json().catch(()=>{return});if(!u.ok)throw Gp(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 ue("request_failed","Invalid archived session history");return c.messages}}var O2="CLINE_CLOUD_COMPUTER_USE";function $2(i){let l=ge.cline?.models?.[i];return l?Wt(l):!1}var H_="## Verify your work visually\n\nThis sandbox may have a virtual display and standard Linux tools for computer use: Xvfb, xdotool, ImageMagick (`import`), wmctrl, and Chromium. Check with `command -v Xvfb xdotool import chromium` the first time you need them. If any are missing, skip visual verification and don't try to install them. To see a screenshot, call `read_files` on the image file.\n\n### When to verify\n\nUse your judgment. Verify when a change affects something a user sees or interacts with (a navbar style, a new dialog, a form flow, a terminal UI). Skip it when there's nothing to look at (a git operation, a config tweak, a refactor with no visible effect).\n\n### Display, input, and screenshots\n\n- Start the display if it isn't running: `Xvfb :99 -screen 0 1280x800x24 -nolisten tcp &`, and run every GUI command with `DISPLAY=:99` (for example `export DISPLAY=:99` at the start of the command). Keep the display as small as the check allows so screenshots stay legible. To check a phone layout, restart Xvfb at 390x844 and relaunch the app window at 0,0 with the same size.\n- Start the app (for example `bun run dev &`) and wait until it's serving.\n- Open web apps in a normal Chromium window so screenshots look like a real browser:\n `chromium --new-window http://localhost:5173 --remote-debugging-port=9222 --window-position=0,0 --window-size=1280,800 --force-device-scale-factor=1 --user-data-dir=\"$(mktemp -d)\" --no-first-run --no-default-browser-check --disable-features=Translate --disable-gpu --no-sandbox &`\n - `--remote-debugging-port=9222` exposes the Chrome DevTools Protocol, so you can inspect the DOM, console, and network when a screenshot alone doesn't explain a problem.\n - A fixed position and size, plus `--force-device-scale-factor=1`, keep screenshot pixels equal to click coordinates.\n - A fresh `--user-data-dir` and the first-run flags keep restore prompts and popups out of screenshots. `--disable-gpu` and `--no-sandbox` are needed in this container.\n- Drive the app with xdotool: `key`, `type --delay 40 --`, `mousemove X Y click 1` (buttons 4 and 5 scroll). Find the window with `xdotool search --sync --onlyvisible --class chromium | tail -1` and focus it with `xdotool windowfocus --sync <id>`.\n- Take screenshots of the whole display, for example `import -window root /tmp/cu-shots/03-filtered.png`, so every frame has the same size and framing. Wait about half a second after each action so the UI settles. To look closely at one area, crop a copy instead of capturing a region.\n- Take a fresh screenshot before every click and click in that screenshot's coordinates; layouts move. If a click misses, look again before retrying.\n- Move the pointer out of the way before screenshots you'll show the user, so hover states don't leak in.\n\nExample of a loop that works well:\n\n```bash\nexport DISPLAY=:99\nmkdir -p /tmp/cu-shots\nWID=$(xdotool search --sync --onlyvisible --class chromium | tail -1)\nxdotool windowfocus --sync \"$WID\"\nxdotool key ctrl+k && sleep 0.5 && import -window root /tmp/cu-shots/01-palette.png\nxdotool type --delay 40 -- \"over\" && sleep 0.5 && import -window root /tmp/cu-shots/02-search.png\nxdotool mousemove 640 228 click 1 && sleep 0.5 && import -window root /tmp/cu-shots/03-filtered.png\n```\n\n### What to check\n\n- Check the states that usually break: empty, loading, error, long content, dark mode, and a narrow viewport.\n- If something looks wrong, fix it, reload, and check again.\n- Read only the screenshots you need; each one costs context (about 1.4k tokens at 1280x800).\n- Never close the window you're testing, and never put secrets (tokens, passwords, `.env` contents) on screen.\n\n### Show the user what you verified\n\nThe user can't see this sandbox, and its files disappear when it stops. When you've verified something, publish the few screenshots that prove it with the `publish_artifacts` tool, which uploads them to this session so the user can open them. Pass absolute paths, for example `{\"files\": [{\"path\": \"/tmp/cu-shots/01-palette.png\"}, {\"path\": \"/tmp/cu-shots/03-filtered.png\"}]}`.\n\n- Publish frames for the reader, not a log of every input: usually 1 to 8 per thing you verified, in the order that tells the story (at most 20 per call).\n- The tool reports an `artifactId` or an `error` for each file. To retry a failed file, pass the same `artifactId` back. If publishing fails or the tool isn't available, say so in your answer and carry on.\n- In your answer, say what each published screenshot shows, in order, and call out anything you couldn't fix.";function $b(i){let l=0,u=i.length;while(l<u&&i[l]==="/")l+=1;while(u>l&&i[u-1]==="/")u-=1;let c=i.slice(l,u);return c.toLowerCase().endsWith(".git")?c.slice(0,-4):c}function yh(i){let l=i.trim();if(!l)return null;let u=l.match(/^(?:[^@/\s]+@)?github\.com:([^\s]+)$/i);if(u?.[1]){let c=$b(u[1]);return c.split("/").length===2?`https://github.com/${c}`:null}try{let c=new URL(l);if(c.hostname.toLowerCase()!=="github.com")return null;if(!new Set(["https:","http:","ssh:","git:"]).has(c.protocol))return null;let g=$b(c.pathname);return g.split("/").length===2?`https://github.com/${g}`:null}catch{return null}}function Lb(i){return i.map((l)=>{let u=l&&typeof l==="object"?l:{};return{role:u.role,content:u.content}})}function Db(i,l){return i.length===l.length&&JSON.stringify(Lb(i))===JSON.stringify(Lb(l))}class z_ extends Error{constructor(i,l){super(`Cloud transcript verification failed (local ${i} messages, cloud ${l}).`);this.name="CloudHandoffTranscriptMismatchError"}}function D2(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 Xp(i,l){return Array.isArray(i)?i.flatMap((u)=>{let c=D2(u,l);return c?[c]:[]}):[]}async function U2(i,l={}){let u=i.trim(),c=u.length;while(c>0&&u[c-1]==="/")c--;let g=u.slice(0,c),b=async(L)=>{let D=await(l.fetchImpl??fetch)(`${g}${L}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(1e4)});if(!D.ok)throw Error(`HTTP ${D.status}`);return await D.json()},I,T;try{[I,T]=await Promise.all([b("/api/v1/ai/cline/models"),b("/api/v1/ai/cline/recommended-models")])}catch(L){throw Error("Could not load the cloud model catalog.",{cause:L})}let _=I&&typeof I==="object"?I:void 0,E=Xp(Array.isArray(I)?I:_?.data,"cline"),A=T&&typeof T==="object"?T:void 0,C=A?.data&&typeof A.data==="object"?A.data:A,N=Xp(C?.clinePass,"cline-pass"),M=Xp(C?.clineCloud,"cline-cloud"),O=new Set;return[...l.isOrganizationSession?[]:N,...M,...E].filter((L)=>{if(O.has(L.id))return!1;return O.add(L.id),!0})}function Jp(i){return Array.isArray(i?.sessions)?i.sessions.filter((l)=>Boolean(l)&&typeof l==="object"&&!Array.isArray(l)):[]}function Ub(i){let l=i.updatedAt;return typeof l==="number"?l:Date.parse(String(l??""))||0}function Fb(i){let l=i?.metadata&&typeof i.metadata==="object"?i.metadata:void 0;return String(l?.model??i?.model??"").trim()}function Vp(i){let l=i.metadata&&typeof i.metadata==="object"?i.metadata:void 0;return!String(l?.parentSessionId??i.parentSessionId??"").trim()}function W_(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 uu(i){let l=i.trim(),u=l.match(/^<user_input\b[^>]*>([\s\S]*)<\/user_input>$/);return(u?u[1]:l).trim()}function Ju(i,l,u){let c=uu(u);return i.filter((g)=>Boolean(g)&&typeof g==="object"&&!Array.isArray(g)&&String(g.role??"").toLowerCase()==="user"&&(c!==""||vN(g))&&uu(W_(g))===c).length+l.filter((g)=>uu(g.prompt)===c).length}function K_(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 F2=new Set(["run.completed","run.aborted","run.failed"]),q2=new Set(["assistant.delta","assistant.finished","reasoning.delta","reasoning.finished"]);function qb(i,l){return i.filter((u)=>Boolean(u)&&typeof u==="object"&&!Array.isArray(u)&&String(u.role??"").toLowerCase()==="assistant").map((u)=>W_(u,l)).filter(Boolean)}function jb(i,l,u="text"){let c=new Map;for(let g of qb(l,u))c.set(g,(c.get(g)??0)+1);return qb(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 Vu(i,l,u=new Set){if(!i||typeof i!=="object")return u;if(Array.isArray(i)){for(let b of i)Vu(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))Vu(b,l,u);return u}function Bb(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 j2(i,l,u={}){let c=u.queueSnapshotApplied!==!1,g=jb(l,u.baselineMessages??[]),b=jb(l,u.baselineMessages??[],"thinking"),I=Vu(l,"tool_use"),T=Vu(l,"tool_result"),_=new Set(i.slice(0,u.messagesSnapshotEventCutoff??i.length)),E=new Set,A=new Map;for(let L of i.slice(0,u.messagesSnapshotEventCutoff??i.length)){let D=K_([L])[0];if(!D)continue;let F=uu(D.prompt),j=A.get(F)??Math.max(0,Ju(l,[],F)-Ju(u.baselineMessages??[],[],F));if(A.set(F,Math.max(0,j-1)),j>0)E.add(L)}let C=[...c?i.slice(u.queueSnapshotEventCutoff??i.length):i].reverse().find((L)=>L.event==="session.pending_prompts"),N=[],M=[],O=(L)=>{if(M.length===0)return;let D=M.filter((oe)=>_.has(oe)),F=(oe)=>{if(!L)return-1;let G=[...D].reverse().findIndex((Ne)=>Ne.event===`${oe}.finished`),se=G<0?-1:D.length-1-G;return se>=0||M.at(-1)?.event==="run.aborted"?se:D.length-1},j=F("assistant"),B=F("reasoning"),Q=Bb(D.slice(0,j+1)),H=Q?g.findIndex((oe)=>oe.endsWith(Q)):-1,z=H>=0;if(z)g.splice(H,1);let te=Bb(D.slice(0,B+1),"reasoning"),ee=te?b.findIndex((oe)=>oe.endsWith(te)):-1;if(ee>=0)b.splice(ee,1);for(let[oe,G]of M.entries()){if(E.has(G)){N.push({...G,payload:{...G.payload,transcriptReflected:!0}});continue}if(_.has(G)&&q2.has(G.event)&&(G.event.startsWith("reasoning.")?ee>=0&&oe<=B:z&&oe<=j))continue;if(G.event==="session.pending_prompts"&&G!==C)continue;if(_.has(G)&&G.event.startsWith("tool.")){let se=String(G.payload?.toolCallId??"").trim();if(T.has(se)||G.event==="tool.started"&&I.has(se))continue}N.push(G)}M=[]};for(let L of i)if(M.push(L),F2.has(L.event))O(!0);return O(!1),N}function Yp(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 ng(i){let l=i?.trim();return l?me(l).slice(0,120):void 0}function G_(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
+ ${G_(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 B2(i){let l=ng(i??void 0);if(!l)return;return l.split(`
1065
+ `)[0]?.trim().slice(0,70)||void 0}function H2(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=ng(G_(c.content));if(!g)continue;return g.split(`
1066
+ `)[0]?.trim().slice(0,70)||void 0}return}function z2(i){let l=i.metadata&&typeof i.metadata==="object"?ng(i.metadata.title):void 0;if(l)return l.slice(0,70);let u=B2(i.prompt);if(u)return u;let c=i.messages?H2(i.messages):void 0;if(c)return c;return`Session ${i.sessionId.slice(-6)}`}function W2(i,l,u,c){let g=l.payload??{},b=()=>{let T=u.get(c);if(T===void 0||!i.messages[T]||i.messages[T]?.role!=="assistant")T=i.messages.length,i.messages.push({role:"assistant",content:[]}),u.set(c,T);let _=i.messages[T];if(!Array.isArray(_.content))_.content=[];return _.content},I=(T,_,E)=>{let A=b(),C=A.at(-1);if(C?.type===T)C[_]=`${C[_]??""}${E}`;else A.push({type: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 T=String(g.toolCallId??"");if(T&&!i.messages.some((_)=>Array.isArray(_.content)&&_.content.some((E)=>E.type==="tool_use"&&E.id===T)))b().push({type:"tool_use",id:T,name:String(g.toolName??"tool"),input:structuredClone(g.input??{})});return}case"tool.finished":{let T=String(g.toolCallId??"");if(T&&!i.messages.some((_)=>Array.isArray(_.content)&&_.content.some((E)=>E.type==="tool_result"&&E.tool_use_id===T)))i.messages.push({role:"user",content:[{type:"tool_result",tool_use_id:T,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 T=Array.isArray(g.prompts)?g.prompts:[];i.promptsInQueue=T.map((_)=>({id:String(_.id??""),prompt:String(_.prompt??""),steer:_.delivery==="steer",attachmentCount:typeof _.attachmentCount==="number"?_.attachmentCount:0,userImages:Array.isArray(_.userImages)?_.userImages.filter((E)=>typeof E==="string"):void 0})).filter((_)=>_.id&&(_.prompt||_.attachmentCount));return}case"session.pending_prompt_submitted":{let T=g.prompt,_=String(T?.id??"");if(!_||i.lastQueuedPromptStartId===_)return;if(i.lastQueuedPromptStartId=_,i.promptsInQueue=i.promptsInQueue.filter((E)=>E.id!==_),g.transcriptReflected!==!0)i.messages.push({role:"user",content:[{type:"text",text:String(T?.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 T=g.session,_=typeof T?.status==="string"?T.status:l.event==="run.started"?"running":i.status,E=_==="pending"?"running":_;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 Qp(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 Zp(i,l){return i instanceof Error&&i.name==="HubCommandError"&&i.code==="hub_command_timeout"&&(!l||i.command===l)}var at="/workspace",K2=30000,G2=2000,X2=2000,X_="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 J2(i,l={}){let u=`cline/${(i.metadata.taskId?.trim()||i.id).slice(-8).toLowerCase()}`,c=i.sandboxType==="resumable"||i.metadata.sandboxType==="resumable";return`${X_}
1067
+
1068
+ Do all work for this task on the branch \`${u}\`: 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. `+(c?"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 \`${u}\` 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 ${u}\`, and push again after each later commit. `)+"Do not force-push or amend commits that are already pushed unless the user explicitly asks."+(l.computerUse?`
1069
+
1070
+ ${H_}`:"")}function em(i){if(!i)return at;if(Xu.isAbsolute(i)||i.includes("\\")||i.split("/").some((u)=>!u||u==="."||u===".."))throw new ue("request_failed","The handoff workspace path must stay inside the repository.");let l=Xu.join(at,i);if(!l.startsWith(`${at}/`))throw new ue("request_failed","The handoff workspace path must stay inside the repository.");return l}function og(i){let l=i.metadata.cwd;return typeof l==="string"&&Xu.normalize(l)===l&&(l===at||l.startsWith(`${at}/`))?l:at}function Hb(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 vh extends Error{constructor(i){super(i instanceof Error?i.message:"Cloud conversation creation was not dispatched.",{cause:i});this.name="CloudHandoffSeedRejectedError"}}class wh extends ue{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 J_ 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 Ns(i){let l=i.expiredAt?Date.parse(i.expiredAt):Number.NaN;return Number.isFinite(l)&&l<=Date.now()}function V2(i){return i.trim().startsWith("ses-")}function Y2(i,l){let u=new URL(`/api/v1/session/${encodeURIComponent(l)}`,i);return u.protocol=u.protocol==="https:"?"wss:":"ws:",u.toString()}function tm(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:og(i),workspaceRoot:at},messages:[],promptsInQueue:[],busy:!1,startedAt:Date.parse(i.createdAt)||Date.now(),endedAt:Ns(i)&&i.expiredAt?Date.parse(i.expiredAt):void 0,status:i.status,attachedViaHub:!0}}function rm(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:og(i),workspaceRoot:at,...u?.trim()?{prompt:u.trim()}:{},metadata:{origin:"cloud",repoUrl:i.repoContext.repoUrl??"",git:{url:i.repoContext.repoUrl??"",branch:i.repoContext.branch??""}}}}function zb(i){return{sessionId:i.id,origin:"cloud",executionTarget:"cloud",status:i.status,provider:"cline",model:i.metadata.modelId??"",cwd:og(i),workspaceRoot:at,repoUrl:i.repoContext.repoUrl??"",branch:i.repoContext.branch??"",startedAt:i.createdAt,...i.lastActivityAt?{lastActivityAt:i.lastActivityAt}:{},endedAt:Ns(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 Q2(i){if(typeof i!=="string")return i;try{return JSON.parse(i)}catch{return i}}function Z2(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 V_{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;initialSends=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 ua(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=tm(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 Yp({...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&&Ns(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):Yp(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)W2(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 ue("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 V2(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?zb(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 ue&&(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 T=l(I.id);if(this.titleWrites.has(I.id)||T!==u.get(I.id))I.title=T??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 T=await this.options.api.status(I.id).catch(()=>{return}),_=T?.status?.trim();if(!_)return I;return{...I,status:_,metadata:{...I.metadata,...j_(T?.phase)?{provisioningPhase:T?.phase}:{},...T?.statusReason?.trim()?{statusReason:T.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 T=this.sessions.get(I.id);if(T)T.title=I.title;if(T?.status==="provisioning"&&I.status!=="provisioning")T.status=I.status;let _=this.connections.get(I.id);if(_)_.remote=I;let E=Ns(I);if(E||I.status==="failed"||I.status==="suspended"){if(T)T.busy=!1,T.status=E?"expired":I.status,T.endedAt=E?Date.parse(I.expiredAt??"")||Date.now():Math.max(T.endedAt??0,Date.parse(I.lastActivityAt??I.createdAt)||0)||void 0;if(_)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 Yp(b)}async handoffTargetExists(i){try{return await this.options.api.status(i),!0}catch(l){if(l instanceof ue&&(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 U2(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 ue("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 ue("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 T=await this.resolveActiveOrganizationId();l={organizationId:T};let _=this.discoveryRefresh?.organizationId===T?this.discoveryRefresh?.promise:void 0;if(!_){let E=this.listInOrganization(T).finally(()=>{if(this.discoveryRefresh?.promise===E)this.discoveryRefresh=void 0});this.discoveryRefresh={organizationId:T,promise:E},_=E}return{organizationId:T,records:await _}})(),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 T;try{g=await Promise.race([u.catch((_)=>{if(!(_ instanceof ue&&_.code==="authentication_required"))this.options.logger?.error?.("Cloud session discovery failed",{error:_});return c()}),new Promise((_)=>{T=setTimeout(()=>_(c()),Math.max(0,i.timeoutMs??0))})])}finally{if(T!==void 0)clearTimeout(T)}}if(!g)return[];let{organizationId:b,records:I}=g;return[...new Map([...Array.from(this.unlistedSessions.values()).filter((T)=>T.organizationId===b).map((T)=>T.record),...I].map((T)=>[T.id,T])).values()].map((T)=>{let _=zb(T),E=this.sessions.get(T.id);if(!E)return _;let A=E.title?.trim()||T.title?.trim();return{..._,status:E.status,prompt:E.prompt,endedAt:E.endedAt!==void 0?new Date(E.endedAt).toISOString():_.endedAt,metadata:{..._.metadata??{},title:z2({sessionId:T.id,metadata:A?{title:A}:void 0,prompt:E.prompt,messages:E.messages})}}})}async create(i){let l=i.requestId?.trim();if(!l)return this.createSession(i);let u=this.createRequests.get(l);if(u)return u;let c=this.createSession(i).finally(()=>{if(this.createRequests.get(l)===c)this.createRequests.delete(l)});return this.createRequests.set(l,c),c}async createSession(i){let{initialMessage:l,...u}=i;if(!l)return this.createOnce(u);let c=!1,g,b={lifecycle:{beforeDispatch:()=>{c=!0}},settled:new Promise((_)=>{g=_})},I,T;try{I=await this.createOnce({...u,initialPrompt:l.text},(E)=>{if(T=E,!this.initialSends.has(E))this.initialSends.set(E,b)});let _=await this.send(I.sessionId,l.text,"queue",i.modelId,l.images,b.lifecycle);return g(),{...I,initialSend:_}}catch(_){let E={dispatched:c,message:_ instanceof Error?_.message:String(_),..._ instanceof Error&&"detail"in _&&typeof _.detail==="string"?{detail:_.detail}:{}};if(g(E),!I)throw _;return{...I,initialSend:E}}finally{if(T&&this.initialSends.get(T)===b)this.initialSends.delete(T)}}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){em(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 J_;if(!(u.allowAppendedMessages?I.length>=l.length&&Db(l,I.slice(0,l.length)):Db(l,I)))throw new z_(l.length,I.length);c.transcriptKnown=!0;let T=this.sessions.get(i);if(T)T.messages=structuredClone(I),this.authoritativeMessages.set(i,structuredClone(I)),this.streamingMessages.delete(i),this.publishSnapshot(i,!0)}async createOnce(i,l){if(this.disposed)throw Error("Cloud session manager was disposed");let u=em(i.workspaceRelativePath),c=i.organizationId===void 0?await this.resolveActiveOrganizationId({fresh:!0}):i.organizationId??void 0,g=i.handoff,b=!g,I=await this.options.api.create({...i,organizationId:c,...g&&{handoff:{...g,onOuterSessionCreated:async(L,D)=>{b=D?.created===!0,await g.onOuterSessionCreated(L,D)}}}});if(!I?.sessionId?.trim())throw new ue("request_failed","The cloud session service returned an unexpected response; please try again.");if(this.disposed){if(b&&this.options.lateCreateDisposition==="delete")await this.deleteProvisionedSessionAfterDispose(I.sessionId,I.cleanupAuthToken,i.handoff?.onOuterSessionRemoved);throw Error("Cline account changed while the cloud session was starting")}let T={id:I.sessionId,sandboxType:i.sandboxType,status:I.status,sandboxUrl:I.sandboxUrl,repoContext:{repoUrl:i.repoUrl,...i.branch?.trim()?{branch:i.branch.trim()}:{}},metadata:{modelId:i.modelId,cwd:u},createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()};l?.(T.id),this.knownSessions.set(T.id,T),this.unlistedSessions.set(T.id,{record:T,organizationId:c});let{autoApproveTools:_,thinking:E,reasoningEffort:A,mode:C,workspaceRelativePath:N}=i;this.pendingInitialTasks.set(T.id,{autoApproveTools:_,thinking:E,reasoningEffort:A,mode:C??"act",workspaceRelativePath:N});let M=this.stateFromRecord(T);M.prompt=i.initialPrompt?.trim()||void 0,M.config.mode=i.mode??"act",this.sessions.set(T.id,M);let O;try{if(i.handoff){let L=await i.handoff.resolveMessages();this.assertSessionActive(T.id),O=(await this.seedHandoff(T.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&&b&&this.options.lateCreateDisposition==="delete")await this.deleteProvisionedSessionAfterDispose(T.id,I.cleanupAuthToken,i.handoff?.onOuterSessionRemoved);throw L}return this.assertSessionActive(T.id),this.notify("chat_session_status",{sessionId:T.id,status:M.status}),{sessionId:T.id,origin:"cloud",executionTarget:"cloud",status:T.status,provider:"cline",model:i.modelId,repoUrl:i.repoUrl,branch:i.branch??"",cwd:u,workspaceRoot:at,...O?{innerSessionId:O}:{},...M.prompt?{prompt:M.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 rm(c,c.status,this.sessions.get(i)?.prompt);if(Ns(c))return await this.disposeConnection(i),await this.attachExpired(c);let g;try{g=await this.ensureConnection(i)}catch(T){let _=await this.refreshKnownSession(i);if(_&&Ns(_))return await this.disposeConnection(i),await this.attachExpired(_);throw T}await this.ensureAttached(g);let b=g.remote,I=this.sessions.get(i);return rm(b,I?.status??b.status,I?.prompt)}async send(i,l,u,c,g,b){let I=this.sendAbortTokens.get(i),T=this.initialSends.get(i);if(T&&b!==T.lifecycle){if(await T.settled)throw new ue("request_failed","The initial cloud prompt was not confirmed. Check the cloud task before sending another message.")}let _=this.knownSessions.get(i);if(_&&Ns(_))throw new ue("session_expired","This cloud session has expired; its sandbox is gone. Start a new cloud session to continue.");let E=await this.ensureConnection(i,{createInner:!0}),A=()=>this.disposed||E.disposed||this.deletingSessions.has(i)||this.sendAbortTokens.get(i)!==I,C=()=>{if(A())throw Error("Cloud session prompt cancelled")};if(C(),await E.reconnectResolution,C(),await this.ensureAttached(E),await E.reconnectResolution,C(),!E.transcriptKnown)await this.rehydrateAfterTransportDrop(i,E);C(),await this.updateModel(E,c),await E.reconnectResolution,C();let N=E.innerSessionId;if(!N)throw Error("Cloud Hub session was not initialized");let M=this.sessions.get(i),O=u??(M?.busy?"queue":void 0),L=Ju(M?.messages??[],M?.promptsInQueue??[],l),D=O!=="queue"&&O!=="steer",F=M&&O!=="queue"?{role:"user",content:[{type:"text",text:l}]}:void 0;if(M&&F)M.messages=[...M.messages,F];let j=()=>{if(M&&F)M.messages=M.messages.filter((z)=>z!==F),this.publishSnapshot(i)};if(M&&D){let z=M.status!=="running";if(M.busy=!0,M.status="running",z)this.publishSnapshot(i,!1,"status")}let B=new Set,Q=!1,H=()=>{if(Q||A())return;Q=!0,this.publish({type:"prompt_accepted",sessionId:i,prompt:l,delivery:O})};try{let z=await E.client.command("session.send_input",{prompt:l,delivery:O,...g?.length?{attachments:{userImages:g}}:{}},N,{timeoutMs:O==="queue"?K2:null,onDispatch:(ee)=>{B.add(ee),E.pendingInputs??=new Map,E.pendingInputs.set(ee,{clientId:E.client.getClientId(),ownsBusyState:D,accept:H})},beforeDispatch:()=>{if(C(),E.innerSessionId!==N)throw Error("The cloud session reconnected before the prompt could be sent. Please try again.");if(b?.beforeDispatch?.(),M&&D)M.prompt||=l;let ee=this.knownSessions.get(i);if(ee&&!ee.title?.trim()&&!this.titleWrites.has(i)){let oe=P2(l);if(oe){if(ee.title=oe,M)M.title=oe;let G=this.options.api.updateTitle?.(i,oe).then(()=>{}).catch(()=>{}).finally(()=>{if(this.titleWrites.get(i)===G)this.titleWrites.delete(i)});if(G)this.titleWrites.set(i,G)}}}});H();let te=O==="queue"||O!=="steer"&&z.payload?.result===void 0;if(te)j();return{sessionId:i,ok:!0,...te?{queued:!0}:{},result:z.payload?.result}}catch(z){if(A())throw j(),z;if(Qp(z)||Zp(z,"session.send_input")){let te;try{te=await this.rehydrateAfterTransportDrop(i,E)}catch(ee){if(C(),j(),M&&D)M.busy=!1,M.status="error";if(O==="queue")throw new wh;throw ee}if(C(),O==="queue")throw new wh;if(O==="steer")throw new ue("request_failed","Cline could not confirm whether this message was accepted. Check the cloud session before resending it.");if(Ju(te.messages,Z2(te.prompts,te.submittedPrompts),l)<=L)throw new ue("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:te.status}}if(j(),M&&D)M.busy=!1,M.status="error";throw this.publishSnapshot(i),z}finally{for(let z of B)E.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)??[],T=String(g?.status??b?.status??"running").trim(),_=T==="pending"?"running":T;if(_==="running"&&!l.transcriptKnown&&!l.pendingInputs?.size)l.externalRun??={progressHydrated:!0};let E=()=>l.client.command("session.messages",{sessionId:u},u),A=await E().catch((H)=>{if(!Zp(H,"session.messages"))throw H;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,M=await l.client.command("session.pending_prompts",{sessionId:u},u).catch(()=>{return});this.assertSessionActive(i,l);let O=l.bufferedEventsDropped+l.bufferedEvents.length;if(b){let H=b.status!==_;if(this.authoritativeMessages.set(i,structuredClone(C)),b.messages=structuredClone(C),this.streamingMessages.delete(i),b.status=_,b.busy=_==="running",H)if(_==="completed"||_==="failed"||_==="aborted")b.endedAt=Date.now(),this.notify("chat_session_ended",{sessionId:i,reason:_==="failed"?"error":_});else this.notify("chat_session_status",{sessionId:i,status:_})}let L=M!==void 0&&M.ok!==!1&&Array.isArray(M.payload?.prompts),D=L?this.applyQueueSnapshot(i,M):void 0;l.transcriptKnown=!0;let F=C;this.assertSessionActive(i,l),this.notify("cloud_session_rehydrated",{sessionId:i,status:_,transcriptKnown:!0,messages:F}),this.assertSessionActive(i,l);let j=l.bufferedEvents,B=K_(j),Q=j2(j,C,{queueSnapshotApplied:L,queueSnapshotEventCutoff:Math.max(0,O-l.bufferedEventsDropped),messagesSnapshotEventCutoff:Math.max(0,N-l.bufferedEventsDropped),baselineMessages:I});l.bufferedEvents=[],l.bufferingEvents=!1,l.syncFailureNotified=!1;for(let H of Q)this.forwardEvent(i,l,H);return{status:_,messages:C,prompts:D,submittedPrompts:B}}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&&Ns(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 ue?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)??tm(i);return l.busy=!1,l.status="expired",this.sessions.set(i.id,l),await this.loadArchivedMessages(i).catch(()=>{return}),rm(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)??tm(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 ue("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 ue("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 T=await this.ensureKnownSession(i);if(c(),!this.pendingInitialTasks.has(i)&&(T.sandboxType==="resumable"||T.metadata.sandboxType==="resumable"||T.status==="suspended")){let C=await this.options.api.status(i).catch(async(M)=>{if(!(M instanceof ue?M.code==="request_failed"&&(M.status===void 0||M.status===408||M.status===429||M.status>=500):M instanceof TypeError||M instanceof Error&&M.name==="TimeoutError"))throw M;return c(),await this.refreshKnownSession(i).catch(()=>{return})});if(c(),C?.status)T.status=C.status;let N=this.sessions.get(i);if(N?.status==="suspended"&&["provisioning","ready","active"].includes(T.status))N.status=T.status,N.busy=!1,N.endedAt=void 0}if(T.status==="suspended"){let C=new AbortController,N=this.trackProvisioningController(i,C);try{try{T=await this.options.api.resume(i,C.signal)}catch(O){if(!(O instanceof ue)||O.status!==409)throw O;c(),C.signal.throwIfAborted();let L=await this.options.api.status(i,{signal:C.signal});if(L.status!=="provisioning"&&L.status!=="ready"&&L.status!=="active")throw O;T={...T,status:L.status}}c(),C.signal.throwIfAborted(),this.knownSessions.set(i,T);let M=this.sessions.get(i);if(M)M.status=T.status,M.busy=!1,M.endedAt=void 0;this.publishSnapshot(i,!1,"status")}finally{N()}}if(T.status==="provisioning"){let C=new AbortController,N=this.trackProvisioningController(i,C);try{if(await this.options.api.waitUntilReady(i,C.signal,({phase:O})=>{T.metadata.provisioningPhase=O,this.notify("chat_session_status",{sessionId:i,status:"provisioning",phase:O})}),this.disposed)throw Error("Cloud session manager was disposed");if(T=await this.refreshKnownSession(i)??T,C.signal.throwIfAborted(),T.status==="provisioning")T.status="ready";let M=this.sessions.get(i);if(M?.status==="provisioning")M.status="idle",M.busy=!1,M.endedAt=void 0}catch(M){if(M instanceof ue&&M.code==="session_failed"){if(T.status="failed",T.metadata.statusReason=M.detail,T.metadata.provisioningPhase="failed",!this.disposed)this.knownSessions.set(i,T);let O=this.sessions.get(i);if(O)O.status="error";this.notify("chat_session_status",{sessionId:i,status:"error"})}throw M}finally{N()}}if(c(),T.status==="failed")throw new ue("session_failed",T.metadata.statusReason||"The cloud sandbox could not be prepared.");if(Ns(T))throw new ue("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(T));let _,E=0,A=this.createHubClient({url:Y2(this.options.apiBaseUrl,i),clientId:`${this.options.clientIdentity?.prefix??"cloud"}-${i}-${L2()}`,clientType:this.options.clientIdentity?.type??"cloud-client",displayName:this.options.clientIdentity?.displayName??"Cline cloud session",workspaceRoot:at,cwd:at,resolveConnectionHeaders:async()=>{c();let C=E>0;if(E+=1,_)_.connected=!1,_.reconnecting=C,this.publishSnapshot(i);if(C){let M=_;if(M&&!M.disposed){M.transcriptKnown=!1,M.innerSessionId=void 0;let O=(async()=>{if(await this.resolveInnerSession(i,M),M.innerSessionId)await this.rehydrateAfterTransportDrop(i,M)})().catch(()=>this.disposeConnectionIfSessionGone(i,M)).finally(()=>{if(M.reconnectResolution===O)M.reconnectResolution=void 0,M.connected=M.transcriptKnown,this.publishSnapshot(i)});M.reconnectResolution=O}}let N=await this.options.getAuthToken();if(!N?.trim())throw new ue("authentication_required","Sign in to Cline to reconnect this cloud session.");return c(),{Authorization:`Bearer ${N.trim()}`}}});_={generation:u,remote:T,client:A,bufferedEvents:[],bufferedEventsDropped:0,transcriptKnown:!1,seenEventIds:new Set,unsubscribe:()=>{}},_.unsubscribe=A.subscribe(()=>{},{sessionId:T.metadata.taskId?.trim()||i}),this.connections.set(i,_);try{if(await A.connect(),_.connected=!0,this.publishSnapshot(i),this.assertSessionActive(i,_),await this.resolveInnerSession(i,_,Boolean(l.handoffSeed)),this.assertSessionActive(i,_),l.handoffSeed&&_.innerSessionId)await this.assertHandoffConnectionReusable(_,l.handoffSeed);if(l.createInner&&!_.innerSessionId)await this.createInnerSession(_,l.handoffSeed);return this.assertSessionActive(i,_),_}catch(C){if(Qp(C)&&!this.disposed&&!_.disposed&&!this.deletingSessions.has(i))throw C;if(this.connections.get(i)===_)this.connections.delete(i);if(_.disposed=!0,_.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 T=await l.client.command("session.get",{sessionId:c},c);this.assertSessionActive(i,l),g=T.payload?.session&&typeof T.payload.session==="object"&&!Array.isArray(T.payload.session)?T.payload.session:void 0}catch(T){if(!Kl(T))throw T}else{let T=await l.client.command("session.list",{limit:100});this.assertSessionActive(i,l),g=Jp(T.payload).filter(Vp).sort((_,E)=>Ub(E)-Ub(_))[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=Fb(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(N){if(!(Kl(N)||N instanceof Error&&N.code==="command_failed"&&N.message===`session not found: ${l}`))throw N}this.assertSessionActive(i.remote.id,i);let g=u.metadata??{},b=u.runtimeOptions??{},I=this.sessions.get(i.remote.id)?.config,T=Object.hasOwn(g,"thinking")?g.thinking:I?.thinking,_=Object.hasOwn(g,"reasoningEffort")?g.reasoningEffort:I?.reasoningEffort,E=typeof g.autoApproveTools==="boolean"?g.autoApproveTools:I?.autoApproveTools,A=u.cwd??u.workspaceRoot??at,C=u.workspaceRoot??at;try{let N={workspaceRoot:C,cwd:A,metadata:{...g,interactive:!0},sessionConfig:{sessionId:l,providerId:g.provider??"cline",modelId:g.model??g.modelId??i.remote.metadata.modelId,workspaceRoot:C,cwd:A,systemPrompt:b.systemPrompt??g.systemPrompt??"",mode:b.mode??g.mode??"act",...typeof T==="boolean"?{thinking:T}:{},...typeof _==="string"?{reasoningEffort:_}:{},...g.checkpointEnabled===!0?{checkpoint:{enabled:!0}}:{}},runtimeOptions:b,...typeof E==="boolean"?{toolPolicies:{"*":{autoApprove:E}}}:{}},M=await i.client.command("session.resume",N).catch(async(O)=>{if(!(O instanceof jo)||O.code!=="unsupported_command")throw O;this.assertSessionActive(i.remote.id,i);let L=await i.client.command("session.messages",{},l);this.assertSessionActive(i.remote.id,i);let D=L.payload?.messages;if(!Array.isArray(D)||D.length===0)throw Error("The saved conversation is empty or unavailable.");return i.client.command("session.create",{...N,initialMessages:D})});if(this.assertSessionActive(i.remote.id,i),(M.payload?.session?.sessionId??M.payload?.sessionId)!==l)throw Error("Cloud Hub did not restore the requested session.")}catch(N){if(N?.code!=="session_already_exists")throw N;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=Jp(u.payload).filter(Vp),[g]=c;if(c.length!==1||String(g?.sessionId??"").trim()!==i.innerSessionId||Hb(g)!==l.sourceSessionId)throw new ue("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 ue("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=Jp(u.payload).filter(Vp);if(c.length===0)return!1;let[g]=c,b=String(g?.sessionId??"").trim();if(c.length!==1||!b||Hb(g)!==l.sourceSessionId)throw new ue("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 resolveComputerUse(i){if(!$2(i))return!1;try{return await this.options.isComputerUseEnabled?.()===!0}catch(l){return this.options.logger?.debug("Cloud computer-use gate failed",{error:l}),!1}}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=em(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 vh(D);throw D}let T=await this.resolveComputerUse(u),_=J2(i.remote,{computerUse:T}),E=l?.config?.thinking??c?.config.thinking,A=l?.config?.reasoningEffort??c?.config.reasoningEffort,C=!1,N=i.client.command("session.create",{workspaceRoot:at,cwd:b,...l?{initialMessages:l.messages}:{},sessionConfig:{...i.remote.metadata.taskId?.trim()?{sessionId:i.remote.metadata.taskId.trim()}:{},providerId:"cline",modelId:u,workspaceRoot:at,cwd:b,systemPrompt:l?`${X_}
1071
+
1072
+ 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 ${at}. Earlier transcript references to the local OS, absolute paths, environment, and tool availability are stale.`+(b===at?"":`
1073
+
1074
+ Continue from the original repository subdirectory at ${b}.`)+(T?`
1075
+
1076
+ ${H_}`:""):_,mode:I,enableTools:!0,...typeof E==="boolean"?{thinking:E}:{},...typeof A==="string"?{reasoningEffort:A}:{}},metadata:{source:this.options.clientIdentity?.source??"sdk",provider:"cline",model:u,interactive:!0,thinking:E??null,reasoningEffort:E===!1?null:A??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:()=>{C=!0}}),M;try{M=await N}catch(D){if(l&&!C)throw new vh(D);if(l&&(Zp(D,"session.create")||Qp(D)))this.unconfirmedInnerCreates.add(i.remote.id);throw D}this.assertSessionActive(i.remote.id,i);let O=M.payload?.session&&typeof M.payload.session==="object"?M.payload.session:void 0,L=String(O?.sessionId??M.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>X2){let g=l.seenEventIds.values().next().value;if(g)l.seenEventIds.delete(g)}}if(l.bufferingEvents){if(l.bufferedEvents.push(u),l.bufferedEvents.length>G2)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,T=u.payload?.requestId,_=typeof T==="string"?l.pendingInputs?.get(T):void 0;if(_&&u.payload?.clientId===_.clientId){if(_.accept(),_.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((T)=>{if(this.disposed||l.disposed)return;this.notify("cloud_session_sync_failed",{sessionId:i,message:T instanceof Error?T.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:Q2(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=Fb(l);if(u)this.applyModel(i,u);let c=l,g=typeof c.cwd==="string"&&Xu.normalize(c.cwd)===c.cwd&&(c.cwd===at||c.cwd.startsWith(`${at}/`))?c.cwd:void 0;if(g){i.remote.metadata.cwd=g;let T=this.sessions.get(i.remote.id);if(T)T.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(Ns(b))await this.attachExpired(b).catch(()=>{return}),await this.disposeConnection(i).catch(()=>{return})}}async function Bi(i,l,u={}){try{return await new Promise((c,g)=>{let b=eX("git",l,{cwd:i,env:{...process.env,...u.env,GIT_TERMINAL_PROMPT:"0",GIT_NO_REPLACE_OBJECTS:"1",GIT_GRAFT_FILE:"/dev/null"},encoding:"utf8",maxBuffer:8388608,timeout:u.timeout??60000},(I,T)=>I?g(I):c(T.trimEnd()));if(u.input!==void 0)b.stdin?.on("error",g),b.stdin?.end(u.input)})}catch(c){let g=c instanceof Error&&"code"in c?c.code:void 0,b=g===null&&c instanceof Error&&"killed"in c&&c.killed===!0?`timed out after ${(u.timeout??60000)/1000} seconds`:`failed${typeof g==="number"?` (exit code ${g})`:""}. Check Git authentication, permissions, and repository state`;throw Error(`Git ${l[0]} ${b}.`)}}async function tX(i,l){let u=(await Bi(i,["remote","get-url","--all",l])).split(`
1077
+ `),c=(await Bi(i,["remote","get-url","--push","--all",l])).split(`
1078
+ `),g=yh(u[0]??""),b=c[0];if(g&&b&&u.length===1&&c.length===1&&yh(b)===g)return{repoUrl:g,pushUrl:b};return}async function Y_(i){let l=await tX(i.root,i.remote);if(!l||l.repoUrl!==i.repoUrl)throw Error("The remote changed after confirmation. Run /cloud again to review the destination.");return l.pushUrl}async function rX(i,l){if(await Y_(i),(await Bi(i.root,["ls-remote","--heads",i.remote,`refs/heads/${i.branch}`])).split(/\s/)[0]!==l)throw Error("The published branch changed during preparation. Run /cloud again.")}async function sX(i){let l=await Y_(i);if((await Bi(i.root,["ls-remote","--heads",i.remote,`refs/heads/${i.branch}`])).trim())throw Error("The proposed handoff branch already exists. Run /cloud again.");let u=i.treeSha===await Bi(i.root,["rev-parse",`${i.headSha}^{tree}`])?i.headSha:await Bi(i.root,["commit-tree","-p",i.headSha,"--no-gpg-sign","-m","Cline cloud handoff checkpoint",i.treeSha]);try{await Bi(i.root,["-c","push.followTags=false","-c","push.recurseSubmodules=no","push",l,`${u}:refs/heads/${i.branch}`],{timeout:600000})}catch{throw Error(`Couldn't complete the push. Check GitHub write access, branch rules (including required signatures), pre-push hooks, and your connection. Check whether ${i.branch} was published before retrying.`)}return u}var We=e().trim().min(1),iX=e().nullish(),sm=e().min(1).refine((i)=>!i.startsWith("-")&&!/\p{Cc}/u.test(i)),Wb=e().regex(/^(?:[0-9a-f]{40}|[0-9a-f]{64})$/),nX=t({id:We,root:sm.refine(Pb),workspaceRelativePath:e().refine((i)=>!i||!Pb(i)&&!i.split(/[\\/]/).some((l)=>!l||l==="."||l==="..")&&!/\p{Cc}/u.test(i)),repoUrl:sm,remote:sm,branch:e().regex(/^cline\/handoff-[0-9a-f-]{12}$/),headSha:Wb,treeSha:Wb}).strict().refine((i)=>yh(i.repoUrl)===i.repoUrl,"Git publication must target the selected GitHub repository"),bh=t({mode:s(["act","plan","yolo","zen"]).optional(),workspaceRelativePath:e().optional(),autoApproveTools:r().optional(),thinking:r().optional(),reasoningEffort:s(["low","medium","high","xhigh"]).optional()}),Q_=bh.extend({sandboxType:s(["standard","resumable"]).optional(),requestId:We.optional(),modelId:We,repoUrl:We,initialPrompt:e().optional(),initialMessage:t({text:e().refine((i)=>i.trim().length>0),images:o(e()).optional()}).strict().optional(),branch:We.optional(),organizationId:We.nullable().optional(),localGit:nX.optional()}).strict().superRefine((i,l)=>{if(!i.localGit)return;if(i.organizationId===void 0)l.addIssue({code:"custom",path:["organizationId"],message:"Local Git publication requires organizationId from preparation, or null for Personal"});if(!i.requestId||!i.initialMessage)l.addIssue({code:"custom",message:"Local Git publication requires requestId and initialMessage"});if(i.repoUrl!==i.localGit.repoUrl||i.branch!==i.localGit.branch||(i.workspaceRelativePath??"")!==i.localGit.workspaceRelativePath)l.addIssue({code:"custom",message:"Cloud workspace must match the approved Git preparation"})}),Kb={create:W([Q_]),attach:W([We,bh.nullish()]),send:W([We,e(),s(["queue","steer"]).nullish(),iX,o(e()).nullish()]),abort:W([We]),pendingPrompts:W([We]),updatePendingPrompt:W([We,We,t({prompt:e().optional(),delivery:s(["queue","steer"]).optional()}).strict()]),removePendingPrompt:W([We,We]),readMessages:W([We]),updateTitle:W([We,e()]),delete:W([We]),list:W([]),listForDiscovery:W([t({timeoutMs:n().positive().max(30000).optional()}).nullish()]),getCrossScopeDiscoveryRecord:W([We]),listModels:W([]),listRepositories:W([]),listBranches:W([n().int().positive(),t({cursor:e().optional(),query:e().optional()}).nullish()]),respondApproval:W([We,We,t({approved:r(),reason:e().optional()}).strict()]),refreshOrganization:W([]),prepareHandoffRepository:W([We]),restoreCreationOptions:W([We,bh.strict()])};function oX(i){let l=i?.auth;return JSON.stringify([l?.accessToken,l?.refreshToken,l?.expiresAt,i?.apiKey,i?.baseUrl])}class Z_{options;serviceId=_2();scopeGeneration=0;revision=0;organization;organizationGeneration=0;controller;scope;closed=!1;snapshots=new Map;tokenManager;settings=new In;scopeTimer;retiring=new Set;publications=new Map;activeCommands=0;constructor(i){this.options=i,this.tokenManager=new vc({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=_e(),l=this.scope,u=this.settings.getProviderSettings("cline")?.baseUrl?.trim().replace(/\/api\/v1\/*$/,"")||i.apiBaseUrl,c,g=async()=>{if(!this.isCurrentScope(l))throw Error("Cline account changed");let I=oX(this.settings.getProviderSettings("cline"));if(I===c)return;c=void 0;let T,_;try{T=(await this.tokenManager.resolveProviderApiKey({providerId:"cline"}))?.apiKey}catch(E){_=E}if(_ instanceof fd){if(c=I,!this.isCurrentScope(l))throw Error("Cline account changed");return}if(!T)T=ri("cline")?.getApiKey(this.settings.getProviderSettings("cline"));if(!T&&_)this.options.logger?.error?.("Cloud account token refresh failed",{error:_}),Hl(this.options.telemetry,"cline",{errorName:_ instanceof Error?_.name:"Error",errorCode:"hub_cloud_refresh_failed_no_fallback_token"});if(!this.isCurrentScope(l))throw Error("Cline account changed");return T},b=new D_({apiBaseUrl:u,getAuthToken:g});return new V_({api:new B_({apiBaseUrl:u,appBaseUrl:i.appBaseUrl,getAuthToken:g}),apiBaseUrl:u,getAuthToken:g,logger:this.options.logger,clientIdentity:{prefix:"hub-cloud",type:"hub-cloud",displayName:"Cline Hub cloud session",source:"desktop"},lateCreateDisposition:"preserve",isComputerUseEnabled:async()=>process.env[O2]==="1"||await Df(Ge.CLOUD_COMPUTER_USE),getActiveOrganizationId:async(I)=>{if(I?.fresh)this.invalidateOrganization();let T=this.organization;if(!I?.fresh&&T&&Date.now()-T.at<60000)return T.id;let _=this.organizationGeneration;if(!await g())return;let E=(await b.fetchUserOrganizations())?.find((A)=>A.active)?.organizationId;if(_===this.organizationGeneration)this.organization={id:E,at:Date.now()};return E}})}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(Kb,i))throw Error(`Unknown cloud operation: ${i}`);let c=i,g=Kb[c].parse(l).map((T)=>T===null?void 0:T);if(c==="create"){let T=g[0];T.sandboxType??="resumable"}let b=t({serviceId:e(),scopeGeneration:n().int(),expectedAccountId:We.optional()}).parse(u),I=this.getController();if(b.serviceId!==this.serviceId||b.scopeGeneration!==this.scopeGeneration)throw Error("Cloud account changed before request");if(b.expectedAccountId!==void 0){let T=this.scope;if(T?.kind!=="account"||T.identity!==b.expectedAccountId)throw Error("The cloud account does not match the signed-in account. Sign in again before continuing.")}this.activeCommands++;try{let T=c==="create"?await this.create(I,Q_.parse(g[0])):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:T}}finally{this.activeCommands--}}create(i,l){let{localGit:u,...c}=l;if(!u)return i.create(c);let g=`${this.scopeGeneration}:${l.requestId}`,b=this.publications.get(g);if(b){if(b.planId!==u.id)throw Error("The request already has a different Git preparation");return b.result}let I=()=>{if(this.checkScope(),this.closed||this.controller!==i)throw Error("Cline account changed during cloud publication")},T=Promise.resolve().then(async()=>{I();let _=l.initialMessage?.images??[],E=di();for(let M of _){let O=mi(void 0,M,{},E);if(!O.ok)throw Error(O.message)}let{organizationId:A}=await i.prepareHandoffRepository(u.repoUrl);if(I(),(A??null)!==(c.organizationId??null))throw Error("The cloud organization changed before publication");let C=await i.listModels();if(I(),!C.some((M)=>M.id===l.modelId))throw Error("The selected model is not available in Cline Cloud for this account");let N=await sX(u);return I(),await rX(u,N),I(),i.create(c)}).finally(()=>this.publications.delete(g));return this.publications.set(g,{planId:u.id,result:T}),T}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 aX(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 lX(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 eE(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:aX(i.status),participants:l?[...l.participants.values()]:[],metadata:lX(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 ce(i,l){return{version:i.version,requestId:i.requestId,ok:!0,...l!==void 0?{payload:l}:{}}}function fe(i,l,u){return{version:i.version,requestId:i.requestId,ok:!1,error:{code:l,message:u}}}function Wr(i){return i&&typeof i==="object"&&!Array.isArray(i)?i:void 0}function it(i){if(typeof i.payload?.sessionId==="string")return i.payload.sessionId.trim();return i.sessionId?.trim()??""}function Qt(i,l,u){return{version:"v1",event:i,eventId:P("hevt_"),sessionId:u,timestamp:Date.now(),payload:l}}async function Mr(i,l){let u=await i.sessionHost.getSession(l);if(!u)return;let c=await i.sessionHost.getAccumulatedUsage?.(l);return eE(u,i.sessionState.get(l),c?.usage,c?.aggregateUsage)}async function Ss(i,l){let u=await i.sessionHost.getSession(l);if(!u)return;let c=await i.sessionHost.getAccumulatedUsage?.(l);return qu({session:u,usage:c?.usage,aggregateUsage:c?.aggregateUsage})}function tE(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 dX(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 qd(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 T=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:T}),i.publish(T)})}function uX(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 rE(i,l,u){let c=i.pendingApprovals.get(l);if(!c)return;return i.pendingApprovals.delete(l),c.resolve(u),{sessionId:c.sessionId}}function sE(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 cX(i,l){let u=typeof l.payload?.approvalId==="string"?l.payload.approvalId.trim():"";if(!i.pendingApprovals.get(u))return fe(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=rE(i,u,{approved:g,reason:c});if(!b)return fe(l,"approval_not_found",`Unknown approval: ${u}`);return i.publish(i.buildEvent("approval.resolved",{approvalId:u,approved:g,reason:c},b.sessionId)),ce(l,{approvalId:u,approved:g})}function pX(i){if(i instanceof Error)return{name:i.name,message:i.message,stack:i.stack};if(i===void 0)return;return i}var Gb={debug:10,info:20,warn:30,error:40,silent:50};function mX(){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 Ce(i,l,u={}){if(Gb[i]<Gb[mX()])return;let c=JSON.stringify({ts:new Date().toISOString(),level:i,component:"hub",message:l,...Object.fromEntries(Object.entries(u).map(([g,b])=>[g,pX(b)]).filter(([,g])=>g!==void 0))});if(i==="error"||i==="warn"){console.error(`[hub] ${c}`);return}console.log(`[hub] ${c}`)}function Ci(i,l){let u=l instanceof Error?l.stack||l.message:String(l);Ce("error",i,{error:u})}var Yu="The app running this task disconnected before it could respond. Reopen the task to continue.",hX=7000;function fX(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 gX(i,l,u,c,g,b){let I=P("capreq_"),T=performance.now();Ce("info","capability.request.start",{requestId:I,sessionId:l,capabilityName:u,targetClientId:g});let _=(E)=>(Ce("warn","capability.request.end",{requestId:I,sessionId:l,capabilityName:u,targetClientId:g,ok:!1,error:`target_client_${E}`,durationMs:Math.round(performance.now()-T)}),Cg(i.telemetry,{sessionId:l,capabilityName:u,reason:E}),Error(Yu));if(i.detachedClientsBySession?.get(l)?.has(g))throw _("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:(M)=>{if(Ce(M.ok?"info":"warn","capability.request.end",{requestId:I,sessionId:l,capabilityName:u,targetClientId:g,ok:M.ok,error:M.error,durationMs:Math.round(performance.now()-T)}),!M.ok){if(M.error===Yu)Cg(i.telemetry,{sessionId:l,capabilityName:u,reason:"cancelled_while_waiting"});A(Error(M.error||`Capability ${u} was rejected by ${g}.`));return}E(M.payload)}}),!N){setTimeout(()=>{if(!i.pendingCapabilityRequests.get(I)?.undeliveredEvent)return;i.pendingCapabilityRequests.delete(I),A(_("disconnected"))},hX);return}i.publish(C),Ce("info","capability.request.published",{requestId:I,sessionId:l,capabilityName:u,targetClientId:g})})}function yX(i,l){let u=typeof l.payload?.requestId==="string"?l.payload.requestId.trim():"",c=i.pendingCapabilityRequests.get(u);if(!c)return ce(l,{requestId:u,ignored:!0});if((l.clientId?.trim()||"")!==c.targetClientId)return fe(l,"capability_wrong_client",`Capability request ${u} is owned by ${c.targetClientId}`);if(l.sessionId?.trim()&&l.sessionId.trim()!==c.sessionId)return fe(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),ce(l,{requestId:u})}function td(i,l,u){let c=0;for(let[g,b]of[...i.pendingCapabilityRequests.entries()]){if(!l({requestId:g,...b}))continue;i.pendingCapabilityRequests.delete(g),Ce("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 vX(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 fe(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 ce(l,I)}catch(b){return fe(l,"capability_request_failed",b instanceof Error?b.message:String(b))}}function wX(i,l){let u=typeof l.payload?.requestId==="string"?l.payload.requestId.trim():"",c=i.pendingCapabilityRequests.get(u);if(!c)return ce(l,{requestId:u,ignored:!0});let g=l.clientId?.trim()||"";if(g!==c.targetClientId)return fe(l,"capability_wrong_client",`Capability request ${u} is owned by ${c.targetClientId}`);if(l.sessionId?.trim()&&l.sessionId.trim()!==c.sessionId)return fe(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,T=l.payload?.ok===!0;return Ce(T?"info":"warn","capability.respond",{requestId:u,sessionId:c.sessionId,capabilityName:c.capabilityName,targetClientId:c.targetClientId,respondedByClientId:g,ok:T,error:I}),c.resolve({ok:T,payload:b,error:I}),i.publish(i.buildEvent("capability.resolved",{requestId:u,capabilityName:c.capabilityName,targetClientId:c.targetClientId,respondedByClientId:g,ok:T,payload:b,error:I},c.sessionId)),ce(l,{requestId:u,ok:T})}function bX(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()})),ce(l,{clientId:c})}function IX(i,l){let u=l.clientId?.trim(),c=u?i.clients.get(u):void 0;if(!u||!c)return fe(l,"client_not_found","Client is not registered with this hub.");let g=Wr(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((T)=>typeof T==="string")?{scopes:I.scopes}:{}}]});return ce(l)}function kX(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 ce(l)}function SX(i,l){return ce(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},AX={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 CX(i){if(!Number.isInteger(i)||i<=0)return!1;try{return process.kill(i,0),!0}catch{return!1}}function xX(i,l){let u;try{let _=JSON.parse(EX(l,"utf8"));if(!_||typeof _!=="object"||Array.isArray(_))return;u=_}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||!CX(c))return;let b=AX[i];if(!b)return;let I={};for(let _ of b.required){let E=Jb[_](u);if(!E||typeof E==="string"&&!E.trim())return;I[_]=E}for(let _ of b.optional){let E=Jb[_](u);if(E!==void 0)I[_]=E}let T=i==="telegram"?I.botUsername:i==="discord"?I.applicationId:i==="whatsapp"&&typeof u.instanceKey==="string"?u.instanceKey:I.userName;if(!T)return;return{id:`${i}:${T}`,type:i,instanceId:T,pid:c,hubUrl:g,...I}}function RX(){let i=[];for(let{name:l}of pi()){let u=Xb(Qn(),l);if(!TX(u))continue;for(let c of _X(u)){if(!c.endsWith(".json")||c.endsWith(".threads.json"))continue;let g=xX(l,Xb(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 PX;function MX(){return PX}function wn(i){return typeof i==="object"&&i!==null&&!Array.isArray(i)}function Qu(i){return typeof i==="string"?i.trim():void 0}function Vb(i){if(!wn(i))return{};let l={};for(let[u,c]of Object.entries(i))if(typeof c==="string")l[u]=c.trim();return l}function NX(){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 ag(){return{available:nr(),active:RX(),configured:NX()}}function OX(i,l){if(i.required&&!l[i.flag]?.trim())throw Error(`${i.label} is required`)}function $X(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(!To(g,u))continue;OX(g,u),c[g.flag]=u[g.flag]}return c}function LX(i){if(!wn(i))throw Error("connector.configure payload must be an object.");let l=Qu(i.channel);if(!l)throw Error("channel is required");let u=_o.find((A)=>A.id===l);if(!u)throw Error(`unknown connector channel: ${l}`);if(!new Set(pi().map((A)=>A.name)).has(u.id))throw Error(`connector channel is not available: ${l}`);let c=Vb(i.values),g=$X(u,c),b=wn(i.security)?i.security:{},I=b.enabled===!0,T=Vb(b.values);if(I&&u.security)for(let A of u.security.fields){let C=T[A.key];if(!C)throw Error(A.requiredMessage);let N=A.validate?.(C);if(N)throw Error(N)}let _=I?{enabled:!0,values:T}:{enabled:!1,values:{}},E=tr(u,g,_);return Je((A)=>A.upsertConfig({channel:l,type:l,values:g,security:_,updateConnectArgs:(C)=>ir(u,C.connection.connectArgs,E,{replaceSecurityArgs:C.config?.security?.enabled===!0||_.enabled})})),ag()}function DX(i){if(!wn(i))throw Error("connector.delete_config payload must be an object.");let l=Qu(i.channel);if(!l)throw Error("channel is required");return Je((u)=>u.deleteConfig(l)),ag()}function UX(i){return Array.isArray(i)?i.filter((l)=>typeof l==="string"):[]}function lg(){let i=MX();if(!i)throw Error("connector supervision is unavailable in this hub; start connectors with the CLI instead");return i}function iE(i){if(!wn(i))throw Error("payload must be an object.");let l=Qu(i.channel);if(!l)throw Error("channel is required");let u=Qu(i.instanceId);if(!u)throw Error("instanceId is required");return{channel:l,instanceId:u}}async function FX(i){let{channel:l,instanceId:u}=iE(i),c=wn(i)?i:{};return await lg().start({channel:l,instanceId:u,args:UX(c.args),restart:c.restart===!0})}async function qX(i){let{channel:l,instanceId:u}=iE(i),c=wn(i)?i:{};return{stopped:await lg().stop({channel:l,instanceId:u,disableAutostart:c.disableAutostart!==!1}),channel:l,instanceId:u}}function jX(i){return i==="connector.configure"||i==="connector.delete_config"||i==="connector.start"||i==="connector.stop"}function Il(i,l,u){if(!jX(l.command))return;sa(i.telemetry,{ulid:l.sessionId??l.requestId??"hub",tool:l.command,success:u})}async function BX(i,l){try{if(l.command==="connector.channels")return ce(l,ag());if(l.command==="connector.configure"){let u=LX(l.payload);return Il(i,l,!0),ce(l,u)}if(l.command==="connector.delete_config"){let u=DX(l.payload);return Il(i,l,!0),ce(l,u)}if(l.command==="connector.start"){let u=await FX(l.payload);return Il(i,l,!0),ce(l,u)}if(l.command==="connector.stop"){let u=await qX(l.payload);return Il(i,l,!0),ce(l,u)}if(l.command==="connector.supervised")return ce(l,{supervised:lg().list()});return fe(l,"unsupported_connector_command",`unsupported connector command: ${l.command}`)}catch(u){return Il(i,l,!1),fe(l,"connector_command_failed",u instanceof Error?u.message:String(u))}}function rd(i){return typeof i==="string"&&i.trim().length>0?i:void 0}function dg(i,l,u){let c=u instanceof Error?u.message:String(u);return fe(i,Kl(u)?Xh:l,c)}async function HX(i,l){let u=it(l),c=rd(l.payload?.toolName);if(!u||!c)return fe(l,"invalid_mcp_apps_resolve_tool","session.mcp_apps.resolve_tool requires a sessionId and toolName");let g=i.sessionHost.resolveMcpAppTool;if(!g)return ce(l,{});try{let b=await g.call(i.sessionHost,u,c);return ce(l,b?{binding:b}:{})}catch(b){return dg(l,"mcp_apps_resolve_tool_failed",b)}}async function zX(i,l){let u=it(l),c=rd(l.payload?.serverName),g=rd(l.payload?.uri);if(!u||!c||!g)return fe(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 fe(l,"unsupported_command","This runtime does not support MCP Apps.");try{let I=await b.call(i.sessionHost,u,{serverName:c,uri:g});return ce(l,{result:I})}catch(I){return dg(l,"mcp_apps_read_resource_failed",I)}}async function WX(i,l){let u=it(l),c=rd(l.payload?.serverName),g=rd(l.payload?.toolName),b=l.payload?.arguments,I=Wr(b);if(!u||!c||!g||b!==void 0&&!I)return fe(l,"invalid_mcp_apps_call_tool","session.mcp_apps.call_tool requires a sessionId, serverName, toolName, and object arguments");let T=i.sessionHost.callMcpAppTool;if(!T)return fe(l,"unsupported_command","This runtime does not support MCP Apps.");try{let _=await T.call(i.sessionHost,u,{serverName:c,toolName:g,...I?{arguments:I}:{}});return ce(l,{result:_})}catch(_){return dg(l,"mcp_apps_call_tool_failed",_)}}var KX=30000;function GX(i){if(i==="aborted")return"run.aborted";if(i==="error"||i==="failed")return"run.failed";return"run.completed"}function XX(i){if(i.finishReason!=="error")return;return i.text.trim()||void 0}function JX(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 Yb(i,l,u){let c=u instanceof Error&&u.message.trim()?u.message:`Unknown session: ${l}`;return fe(i,Xh,c)}function VX(i){return i?i:void 0}function YX(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 QX(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},T=setInterval(()=>{if(b)return;let A=Math.round(performance.now()-g);Ce("warn","run.heartbeat",{...I,elapsedMs:A}),i.publish(i.buildEvent("run.heartbeat",{requestId:l.requestId,elapsedMs:A,...c?{timeoutMs:c}:{}},u.sessionId))},KX),_=i.sessionHost.runTurn(u);_.then((A)=>{if(!b)return;Ce("warn","run.late_end",{...I,elapsedMs:Math.round(performance.now()-g),finishReason:A?.finishReason})},(A)=>{if(!b)return;Ce("error","run.late_error",{...I,elapsedMs:Math.round(performance.now()-g),error:A})});let E;try{if(!c)return await _;return await Promise.race([_,new Promise((A,C)=>{E=setTimeout(()=>{let N=`Hub run ${l.command} timed out after ${c}ms.`;b=!0,clearInterval(T),C(Error(N)),Ce("error","run.timeout",{...I,elapsedMs:Math.round(performance.now()-g)}),sE(i,(M)=>M.sessionId===u.sessionId,N),td(i,(M)=>M.sessionId===u.sessionId,N),i.sessionHost.abort(u.sessionId,N).catch((M)=>{Ce("error","run.timeout_abort_failed",{...I,error:M})})},c)})])}finally{if(b=!0,clearInterval(T),E)clearTimeout(E)}}async function Ih(i,l){let u=it(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,T=Array.isArray(b?.userFiles)?b.userFiles.filter((N)=>typeof N==="string"&&N.trim().length>0):void 0;if(!g.trim()&&!I?.length&&!T?.length)return fe(l,"invalid_session_input","session input requires a prompt or attachment");if(!await i.sessionHost.getSession(u))return Yb(l,u);i.publish(i.buildEvent("run.started",{...l.requestId?{requestId:l.requestId}:{},...l.clientId?{clientId:l.clientId}:{}},u));let _=YX(c);i.suppressNextTerminalEventBySession.set(u,"run.start.reply");let E=JX(i,u),A;try{try{A=await QX(i,l,{sessionId:u,prompt:g,mode:VX(c.mode),delivery:c.delivery==="queue"||c.delivery==="steer"?c.delivery:void 0,userImages:I,userFiles:T,timeoutMs:_},_)}catch(N){if(i.suppressNextTerminalEventBySession.get(u)==="run.start.reply")i.suppressNextTerminalEventBySession.delete(u);if(Kl(N))return Yb(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 Ss(i,u),M=XX(A);if(i.publish(i.buildEvent(GX(A.finishReason),{reason:A.finishReason,...M?{error:M}:{},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 Ss(i,u);return ce(l,A||C?{...A?{result:A}:{},...C?{snapshot:C}:{}}:void 0)}async function ZX(i,l){let u=it(l),c=typeof l.payload?.reason==="string"?l.payload.reason:"Run was aborted before pending approval or capability request was resolved.";sE(i,(g)=>g.sessionId===u,c);try{await i.sessionHost.abort(u,l.payload?.reason)}catch(g){Ce("warn","run.abort_failed",{command:l.command,requestId:l.requestId,clientId:l.clientId,sessionId:u,error:g})}finally{td(i,(g)=>g.sessionId===u,c)}return ce(l,{applied:!0})}async function eJ(i,l){let u=it(l);if(!u)return fe(l,"invalid_session_id","run.proceed_while_running requires a sessionId");if(typeof i.sessionHost.proceedWhileRunning!=="function")return fe(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 ce(l,{detachedCount:g})}async function tJ(i,l){let u=va(l.payload?.payload);if(!u)return fe(l,"invalid_hook_payload","session.hook requires a valid hook event payload");return await i.sessionHost.dispatchHookEvent(u),ce(l,{applied:!0})}var sJ=32,iJ=604800000;class ug 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 nJ(i){let l=i?.replace(/[^a-zA-Z0-9_-]/g,"-");return rJ(be(),l?`hub-runs-${l}.db`:"hub-runs.db")}class nE{db;maxPendingPerSession;closed=!1;constructor(i={}){this.db=V(i.dbPath??nJ(i.ownerId)),this.maxPendingPerSession=i.maxPendingPerSession??sJ,this.db.exec("PRAGMA journal_mode = WAL;"),this.db.exec("PRAGMA busy_timeout = 5000;"),this.db.exec(`
1079
+ CREATE TABLE IF NOT EXISTS hub_runs (
1080
+ accepted_seq INTEGER PRIMARY KEY AUTOINCREMENT,
1081
+ run_id TEXT NOT NULL UNIQUE,
1082
+ session_id TEXT NOT NULL,
1083
+ state TEXT NOT NULL,
1084
+ input_json TEXT NOT NULL,
1085
+ client_id TEXT,
1086
+ accepted_at INTEGER NOT NULL,
1087
+ started_at INTEGER,
1088
+ ended_at INTEGER,
1089
+ error TEXT
1090
+ );
1091
+ CREATE INDEX IF NOT EXISTS idx_hub_runs_session
1092
+ ON hub_runs(session_id, accepted_seq);
1093
+ CREATE INDEX IF NOT EXISTS idx_hub_runs_state
1094
+ ON hub_runs(state, accepted_seq);
1095
+ `)}admit(i,l,u){let c=this.countPendingBySession(i);if(c>=this.maxPendingPerSession)throw new ug(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)
1096
+ 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?kl(l):void 0}nextQueued(i){let l=this.db.prepare(`SELECT * FROM hub_runs WHERE session_id = ? AND state = 'queued'
1097
+ ORDER BY accepted_seq LIMIT 1;`).get(i);return l?kl(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
1098
+ 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
1099
+ ${l.length?`WHERE ${l.join(" AND ")}`:""}
1100
+ ORDER BY accepted_seq DESC LIMIT ?;`).all(...u).map(kl)}recoverOnStartup(){let i=this.db.prepare("SELECT * FROM hub_runs WHERE state = 'running' ORDER BY accepted_seq;").all().map(kl);this.db.prepare(`UPDATE hub_runs SET state = 'interrupted', ended_at = ?,
1101
+ error = 'Hub daemon exited before the run finished.'
1102
+ WHERE state = 'running';`).run(Date.now());let l=this.db.prepare("SELECT * FROM hub_runs WHERE state = 'queued' ORDER BY accepted_seq;").all().map(kl);return this.db.prepare("DELETE FROM hub_runs WHERE ended_at IS NOT NULL AND ended_at < ?;").run(Date.now()-iJ),{interrupted:i.map((u)=>({...u,state:"interrupted"})),requeued:l}}close(){if(this.closed)return;this.closed=!0,this.db.close?.()}}function kl(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 oJ="hub_draining",aJ=new Set(["session.create","session.resume","session.restore","session.fork","run.start","session.send_input","run.enqueue","plugins.commands.run","plugins.commands.list"]);function lJ(i){return aJ.has(i)}function Qb(i){return{version:i.version,requestId:i.requestId,ok:!1,error:{code:oJ,message:"Hub is draining and refuses new mutating work; retry once a hub is serving again.",details:{retryable:!0}}}}class oE{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)=>{Ce("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 Ih(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 dJ(i,l,u,c){let g=it(l);if(!g)return fe(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 fe(l,"invalid_session_input","run.enqueue requires a prompt string");let I;try{I=u.admit(g,b,l.clientId?.trim()||void 0)}catch(T){if(T instanceof ug)return{version:l.version,requestId:l.requestId,ok:!1,error:{code:"run_admission_rejected",message:T.message,details:{retryable:!0}}};throw T}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),ce(l,{...I})}function uJ(i,l){let u=it(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 ce(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 cJ(i,l){switch(l.type){case"chunk":return;case"agent_event":await pJ(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([Mr(i,l.payload.sessionId),Ss(i,l.payload.sessionId)]);if(u)i.publish(i.buildEvent("session.updated",{session:u,...c?{snapshot:c}:{}},l.payload.sessionId));return}case"ended":await hJ(i,l);return;default:return}}async function pJ(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 mJ(i,l)}async function mJ(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 Ss(i,u);i.publish(i.buildEvent("run.failed",{reason:"error",...g?{error:g,text:g}:{},...b?{snapshot:b}:{}},u))}async function hJ(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([Mr(i,l.payload.sessionId),Ss(i,l.payload.sessionId)]);if(l.payload.reason==="completed"){let I=await xK(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 fJ=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function Yi(i){return i&&typeof i==="object"&&!Array.isArray(i)?JSON.parse(JSON.stringify(i)):void 0}function gJ(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=Yi(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}:{},...Yi(i.lifecycle)?{lifecycle:Yi(i.lifecycle)}:{}}}function aE(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 T=gJ(g,u);if(T)l.push(T);continue}if(b==="toolExecutor"){let T=g.executor;if(!ko(T))continue;u.add(I),l.push({kind:"toolExecutor",capabilityName:I,executor:T});continue}if(b==="hook"){let T=typeof g.name==="string"?g.name.trim():"";if(!T)continue;u.add(I),l.push({kind:"hook",capabilityName:I,name:T});continue}if(b==="compaction"){u.add(I),l.push({kind:"compaction",capabilityName:I,...Yi(g.config)?{config:Yi(g.config)}:{}});continue}if(b==="checkpoint"){u.add(I),l.push({kind:"checkpoint",capabilityName:I,...Yi(g.config)?{config:Yi(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 lE(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 dE(i){return Object.hasOwn(i,"update")?i.update:i}function sd(i){return i.trim().replace(/^\/+/,"").toLowerCase()}function yJ(i){let l=(i??[]).map(sd).filter(Boolean);return l.length>0?new Set(l):void 0}function vJ(i,l,u){if(!u)return!0;let c=sd(i),g=sd(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 kh(i,l){let u=yJ(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)=>vJ(c.id,c.name,u))}function Zb(i,l){let u=async(c,g)=>{let b=sd(c),I=kh(i,l).filter((_)=>_.id===b||sd(_.name)===b||_.id.endsWith(`:${b}`)).filter((_)=>!_.disabled);if(I.length!==1)return I.length>1?`Skill "${c}" is ambiguous. Use one of: ${I.map((_)=>_.id).join(", ")}`:`Skill "${c}" not found.`;let T=I[0].skill;return zT(T,g)};return Object.defineProperty(u,"configuredSkills",{get:()=>kh(i,l).map(({skill:c,...g})=>g),enumerable:!0}),u}function wJ(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,T)=>{if(!I.startsWith("/")||I.length<2)return I;let _=I.match(/^\/(\S+)/)?.[1];if(!_)return I;let E=Vo(_),A=g.runtimeCommands.find((C)=>Vo(C.name)===E);if(!A)return I;if(A.kind==="skill"&&T?.expandSkillCommands===!1)return I;return`${A.instructions}${I.slice(_.length+1)}`},hasConfiguredSkills:(I)=>kh(g,I).some((T)=>!T.disabled),createSkillsExecutor:(I)=>Zb(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((T)=>Boolean(T))},setup(T){if(I.includeRules)T.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>MI(g.records.rule)});if(I.registerSkillsTool)T.registerTool(hc(Zb(g,I.allowedSkillNames)));for(let _ of g.runtimeCommands.filter((E)=>E.kind==="skill"&&I.includeSkills||E.kind==="workflow"&&I.includeWorkflows))T.registerCommand({name:_.name,description:_.description,handler:(E)=>{let A=E.trim();return A?`${_.instructions}
1103
+
1104
+ ${A}`:_.instructions}})}})}}function bJ(i,l,u,c){let g=u.map((b)=>[b.executor,async(...I)=>{let T=I.at(-1),_=I.slice(0,-1);return(await c(i,b.capabilityName,{executor:b.executor,args:_,context:lE(T)},l,T.emitUpdate?(E)=>{T.emitUpdate?.(dE(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:lE(I)},l,I.emitUpdate?(T)=>{I.emitUpdate?.(dE(T))}:void 0))?.result}}))}var kJ=new Set(["assistant-text-delta","assistant-reasoning-delta","tool-call-delta","tool-updated"]);function SJ(i,l,u,c){let g=new Map(u.map((I)=>[I.name,I])),b={};for(let I of fJ){let T=g.get(I);if(!T)continue;b[I]=async(_)=>{if(I==="onEvent"&&kJ.has(_.type))return;return(await c(i,T.capabilityName,{context:_},l))?.control}}return Object.keys(b).length>0?b:void 0}function uE(i){let l=i.contributions.filter((_)=>_.kind==="toolExecutor"),u=i.contributions.filter((_)=>_.kind==="tool"),c=i.contributions.filter((_)=>_.kind==="hook"),g=i.contributions.find((_)=>_.kind==="compaction"),b=i.contributions.find((_)=>_.kind==="checkpoint"),I=i.contributions.find((_)=>_.kind==="mistakeLimit"),T=i.contributions.find((_)=>_.kind==="userInstructionService");return{hasClientContributions:i.contributions.length>0,toolExecutors:bJ(i.sessionId,i.targetClientId,l,i.requestCapability),localRuntime:{...c.length>0?{hooks:SJ(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(_)=>(await i.requestCapability(i.sessionId,g.capabilityName,{context:_},i.targetClientId))?.result}}:{},...b?{checkpoint:{...i.sessionConfig?.checkpoint??{},...b.config,createCheckpoint:async(_)=>(await i.requestCapability(i.sessionId,b.capabilityName,{context:_},i.targetClientId))?.result}}:{},...I?{onConsecutiveMistakeLimitReached:async(_)=>(await i.requestCapability(i.sessionId,I.capabilityName,{context:_},i.targetClientId))?.result}:{},...T?{userInstructionService:wJ(i.sessionId,i.targetClientId,T,i.requestCapability)}:{}}}}var eI="hubCapabilityOwnerClientId";function en(i,l){let u=i?.[l];return typeof u==="string"&&u.trim()?u.trim():void 0}function cE(i){let l=Wr(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 pE(i){let l=Wr(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 mE(i,l){let u=await i.sessionHost.deleteSession(l);i.sessionState.delete(l);try{i.sessionSearch.removeSession(l)}catch(c){Ce("warn","session search eviction failed",{error:c,sessionId:l})}return u}function hE(i,l,u){let c=jU(u);return i.filter((g)=>(l!=="yolo"||g.name!==Kh)&&HU(g.name,c))}function jd(i){return typeof i==="string"&&i.trim().length>0?i.trim():void 0}function TJ(i){if(i===null)return null;let l=Mn.safeParse(i);return l.success?l.data:void 0}function _J(i){let l=Wr(i)??{},u={},c=jd(l.providerId);if(c)u.providerId=c;let g=jd(l.modelId);if(g)u.modelId=g;let b=jd(l.apiKey);if(b!==void 0)u.apiKey=b;let I=jd(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 T=TJ(l.reasoningEffort);if(T!==void 0)u.reasoningEffort=T}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 Rf(u)}function EJ(i,l){return i.sessionState.get(l)?.createdByClientId}function tI(i){return typeof i==="string"||i===null?i:void 0}function AJ(i){if(!i||!("autoApproveTools"in i)&&!(eI in i))return i;let l={...i};return delete l[eI],delete l.autoApproveTools,l}function fE(i,l){let u=Wr(i),c=Wr(u?.["*"]);if(typeof c?.autoApprove==="boolean")return c.autoApprove;return l.autoApproveTools===!0}function gE(i){let l=EJ(i.ctx,i.sessionId);if(!l)return fe(i.envelope,"session_wrong_client",`Session ${i.sessionId} has no owner`);if(l!==i.clientId)return fe(i.envelope,"session_wrong_client",`Session ${i.sessionId} is owned by ${l}`);return}function yE(i){let l=Wr(i);if(!l)return;let u={};for(let[c,g]of Object.entries(l)){let b=Wr(g)?.enabled;u[c]=typeof b==="boolean"?{enabled:b}:{}}return Object.keys(u).length>0?u:void 0}async function CJ(i,l,u){let c=Wr(l.payload?.sessionConfig),g=typeof c?.sessionId==="string"?c.sessionId.trim():"";if(!g)return fe(l,"invalid_resume","sessionConfig.sessionId is required");if(!await i.sessionHost.getSession(g))return fe(l,"session_not_found","The saved session was not found.");let b=await(i.sessionHost.readLiveSessionMessages?i.sessionHost.readLiveSessionMessages(g):i.sessionHost.readSessionMessages(g));if(b.length===0)return fe(l,"session_messages_not_found","The saved conversation is empty or unavailable.");return Sh(i,{...l,payload:{...l.payload,initialMessages:b}},u)}async function Sh(i,l,u){let c=performance.now(),g={command:l.command,requestId:l.requestId,clientId:l.clientId,sessionId:l.sessionId};Ce("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)):{},T=b.sessionConfig&&typeof b.sessionConfig==="object"?JSON.parse(JSON.stringify(b.sessionConfig)):void 0,_=b.runtimeOptions&&typeof b.runtimeOptions==="object"?b.runtimeOptions:{},E=cE(_.clientContext),A=pE(_.userContext),C=cc(b.initialCompactionState);if(typeof T?.mode==="string")I.mode=T.mode;else if(typeof _.mode==="string")I.mode=_.mode;if(typeof T?.systemPrompt==="string")I.systemPrompt=T.systemPrompt;else if(typeof _.systemPrompt==="string")I.systemPrompt=_.systemPrompt;if(T?.checkpoint?.enabled===!0)I.checkpointEnabled=!0;else if(_.checkpointEnabled===!0)I.checkpointEnabled=!0;I.autoApproveTools=fE(b.toolPolicies,_);let N=b.modelSelection&&typeof b.modelSelection==="object"?b.modelSelection:{},M=typeof b.workspaceRoot==="string"&&b.workspaceRoot.trim()?b.workspaceRoot.trim():typeof b.cwd==="string"&&b.cwd.trim()?b.cwd.trim():void 0,O=l.clientId?.trim()||"hub-client",L=aE(_.clientContributions);Ce("info","session.create.contributions_parsed",{...g,clientId:O,workspaceRoot:M,cwd:typeof b.cwd==="string"?b.cwd:void 0,contributionCount:L.length});let D=(typeof T?.sessionId==="string"?T.sessionId.trim():"")||P(),F=Hn(_.configExtensions);Ce("info","session.create.runtime_build.begin",{...g,sessionId:D,configExtensionCount:F?.length??0}),i.detachedClientsBySession?.get(D)?.delete(O);let j=uE({sessionId:D,targetClientId:O,contributions:L,sessionConfig:T,requestCapability:i.requestCapability});Ce("info","session.create.start_session.begin",{...g,sessionId:D,provider:T?.providerId??(typeof N.provider==="string"?N.provider:typeof I.provider==="string"?I.provider:"hub"),model:T?.modelId??(typeof N.model==="string"?N.model:typeof I.model==="string"?I.model:"hub")});let B=T?.mode??(_.mode==="plan"||_.mode==="yolo"?_.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:hE([...i.sessionTools??[],...j.localRuntime.extraTools??[]],B,typeof I.source==="string"?I.source:void 0)},capabilities:{toolExecutors:j.toolExecutors,requestToolApproval:u},config:{...T??{},sessionId:D,providerId:T?.providerId??(typeof N.provider==="string"?N.provider:typeof I.provider==="string"?I.provider:"hub"),modelId:T?.modelId??(typeof N.model==="string"?N.model:typeof I.model==="string"?I.model:"hub"),apiKey:T?.apiKey??(typeof N.apiKey==="string"?N.apiKey:void 0),cwd:T?.cwd??(typeof b.cwd==="string"&&b.cwd.trim()?b.cwd.trim():M),workspaceRoot:T?.workspaceRoot??M,systemPrompt:T?.systemPrompt??(typeof _.systemPrompt==="string"?_.systemPrompt:""),mode:B,maxIterations:T?.maxIterations??(typeof _.maxIterations==="number"?_.maxIterations:void 0),enableTools:T?.enableTools??_.enableTools!==!1,enableSpawnAgent:T?.enableSpawnAgent??_.enableSpawn!==!1,enableAgentTeams:T?.enableAgentTeams??_.enableTeams!==!1,checkpoint:T?.checkpoint??(_.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:T?.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)):_.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0,plugins:yE(b.plugins)}),H=Q.pluginIssues??[];if(H.length>0)Ce("warn","session.create.plugin_issues",{...g,sessionId:Q.sessionId,plugins:H.map((oe)=>({name:oe.name,state:oe.state,reason:oe.reason,phase:oe.lastError?.phase,message:oe.lastError?.message}))});Ce("info","session.create.start_session.end",{...g,sessionId:Q.sessionId,elapsedMs:Math.round(performance.now()-c),hasImmediateResult:!!Q.result}),tE(i,Q.sessionId,O,"creator",{interactive:I.interactive!==!1}),Ce("info","session.create.read_records.begin",{...g,sessionId:Q.sessionId});let[z,te]=await Promise.all([Mr(i,Q.sessionId),Ss(i,Q.sessionId)]);Ce("info","session.create.read_records.end",{...g,sessionId:Q.sessionId,hasSession:!!z,hasSnapshot:!!te,elapsedMs:Math.round(performance.now()-c)});let ee=H.length>0?{pluginIssues:JSON.parse(JSON.stringify(H))}:{};if(z)i.publish(i.buildEvent("session.created",{session:z,...te?{snapshot:te}:{},...ee},Q.sessionId));return Ce("info","session.create.reply",{...g,sessionId:Q.sessionId,elapsedMs:Math.round(performance.now()-c)}),ce(l,{session:z,...te?{snapshot:te}:{},...ee})}async function xJ(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 fe(l,"invalid_restore","session.restore requires a session id");let I=c.restore&&typeof c.restore==="object"?c.restore:{},T=I.messages!==!1;if(typeof b!=="number")return fe(l,"invalid_restore","checkpointRunCount must be a positive integer");try{let _=c.sessionConfig&&typeof c.sessionConfig==="object"?JSON.parse(JSON.stringify(c.sessionConfig)):void 0;if(T&&!_)return fe(l,"invalid_restore","sessionConfig is required when restore.messages is true");let E=c.runtimeOptions&&typeof c.runtimeOptions==="object"?c.runtimeOptions:{},A=cE(E.clientContext),C=pE(E.userContext),N=cc(c.initialCompactionState),M=c.metadata&&typeof c.metadata==="object"?JSON.parse(JSON.stringify(c.metadata)):{};if(typeof _?.mode==="string")M.mode=_.mode;else if(typeof E.mode==="string")M.mode=E.mode;if(typeof _?.systemPrompt==="string")M.systemPrompt=_.systemPrompt;else if(typeof E.systemPrompt==="string")M.systemPrompt=E.systemPrompt;if(_?.checkpoint?.enabled===!0)M.checkpointEnabled=!0;else if(E.checkpointEnabled===!0)M.checkpointEnabled=!0;M.autoApproveTools=fE(c.toolPolicies,E);let O=c.modelSelection&&typeof c.modelSelection==="object"?c.modelSelection:{},L=l.clientId?.trim()||"hub-client",D=aE(E.clientContributions),F=(typeof _?.sessionId==="string"?_.sessionId.trim():"")||P(),j=Hn(E.configExtensions);i.detachedClientsBySession?.get(F)?.delete(L);let B=uE({sessionId:F,targetClientId:L,contributions:D,sessionConfig:_,requestCapability:i.requestCapability}),Q=await new zf().restoreCheckpoint({sessionId:g,checkpointRunCount:b,telemetry:i.telemetry,restore:{messages:I.messages,workspace:I.workspace,omitCheckpointMessageFromSession:I.omitCheckpointMessageFromSession===!0},start:_,cwd:typeof _?.cwd==="string"&&_.cwd.trim()||typeof _?.workspaceRoot==="string"&&_.workspaceRoot.trim()||void 0,getSession:(ee)=>i.sessionHost.getSession(ee),readMessages:(ee)=>i.sessionHost.readSessionMessages(ee),buildStartInput:(ee)=>{if(ee.restoredCheckpointMetadata)M.checkpoint=ee.restoredCheckpointMetadata;let oe=typeof c.workspaceRoot==="string"&&c.workspaceRoot.trim()?c.workspaceRoot.trim():typeof c.cwd==="string"&&c.cwd.trim()?c.cwd.trim():ee.sourceSession.workspaceRoot||ee.sourceSession.cwd,G=_?.mode??(E.mode==="plan"||E.mode==="yolo"?E.mode:"act");return{source:typeof M.source==="string"?M.source:void 0,interactive:M.interactive!==!1,sessionMetadata:{...M,restoredFromSessionId:g,restoredCheckpointRunCount:b},initialMessages:ee.initialMessages,initialCompactionState:N,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:j,...B.localRuntime,...A||C?{extensionContext:{...B.localRuntime.extensionContext,...A?{client:A}:{},...C?{user:C}:{}}}:{},extensions:[...i.sessionExtensions??[],...B.localRuntime.extensions??[]],extraTools:hE([...i.sessionTools??[],...B.localRuntime.extraTools??[]],G,typeof M.source==="string"?M.source:void 0)},capabilities:{toolExecutors:B.toolExecutors,requestToolApproval:u},config:{..._??{},sessionId:F,providerId:_?.providerId??(typeof O.provider==="string"?O.provider:ee.sourceSession.provider),modelId:_?.modelId??(typeof O.model==="string"?O.model:ee.sourceSession.model),apiKey:_?.apiKey??(typeof O.apiKey==="string"?O.apiKey:""),cwd:_?.cwd??ee.plan.cwd,workspaceRoot:_?.workspaceRoot??oe,systemPrompt:_?.systemPrompt??(typeof E.systemPrompt==="string"?E.systemPrompt:""),mode:G,maxIterations:_?.maxIterations??(typeof E.maxIterations==="number"?E.maxIterations:void 0),enableTools:_?.enableTools??E.enableTools!==!1,enableSpawnAgent:_?.enableSpawnAgent??E.enableSpawn!==!1,enableAgentTeams:_?.enableAgentTeams??E.enableTeams!==!1,checkpoint:_?.checkpoint??(E.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:_?.teamName??(typeof M.teamName==="string"?M.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:yE(c.plugins)}},startSession:(ee)=>i.sessionHost.startSession(ee),getStartedSessionId:(ee)=>ee.sessionId,cleanupStartedSession:async(ee)=>{if(!await mE(i,ee.sessionId))throw Error(`Failed to clean up restored session ${ee.sessionId}`)},readRestoredSession:(ee)=>i.sessionHost.getSession(ee)});if(!T)return ce(l,{checkpoint:Q.checkpoint});let H=Q.startResult;if(!H)return fe(l,"restore_failed","Checkpoint restore did not start a session");tE(i,H.sessionId,L,"creator",{interactive:M.interactive!==!1});let[z,te]=await Promise.all([Mr(i,H.sessionId),Ss(i,H.sessionId)]);if(z)i.publish(i.buildEvent("session.created",{session:z,...te?{snapshot:te}:{}},H.sessionId));return ce(l,{session:z,...te?{snapshot:te}:{},messages:Q.messages??[],checkpoint:Q.checkpoint})}catch(_){if(_ instanceof Ds)return fe(l,_.code,_.code==="session_not_found"?`Unknown session: ${g}`:_.message);return fe(l,"restore_failed",_ instanceof Error?_.message:String(_))}}async function RJ(i,l){let u=it(l);if(!u)return fe(l,"invalid_session_attach","session.attach requires a session id");let c=await Mr(i,u);if(!c)return fe(l,"session_not_found",`Unknown session: ${u}`);dX(i,u,l.clientId?.trim()||"hub-client","participant");let g=await Mr(i,u);return i.publish(i.buildEvent("session.attached",{session:g??c},u)),ce(l,{session:g??c})}async function PJ(i,l){let u=it(l);if(!u)return fe(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)}td(i,(_)=>_.sessionId===u&&_.targetClientId===c,Yu);let[I,T]=await Promise.all([Mr(i,u),Ss(i,u)]);return i.publish(i.buildEvent("session.detached",I?{session:I,...T?{snapshot:T}:{},clientId:c}:{clientId:c},u)),ce(l)}async function MJ(i,l){let u=it(l),c=l.payload?.includeSnapshot===!0,[g,b]=await Promise.all([Mr(i,u),c?Ss(i,u):Promise.resolve(void 0)]);return g?ce(l,{session:g,...b?{snapshot:b}:{}}):fe(l,"session_not_found",`Unknown session: ${u}`)}async function NJ(i,l){let u=it(l);if(!u)return fe(l,"invalid_session_id","session.messages requires a session id");if(!await Mr(i,u))return fe(l,"session_not_found",`Unknown session: ${u}`);let c=await i.sessionHost.readSessionMessages(u);return ce(l,{sessionId:u,messages:c})}async function OJ(i,l){let u=it(l);if(!u)return fe(l,"invalid_session_id","session.compaction.get requires a session id");if(!await Mr(i,u))return fe(l,"session_not_found",`Unknown session: ${u}`);let c=l.clientId?.trim()||"hub-client",g=gE({sessionId:u,ctx:i,clientId:c,envelope:l});if(g)return g;let b=await i.sessionHost.readSessionCompactionState(u);return ce(l,{sessionId:u,state:b})}async function $J(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)=>eE(g,i.sessionState.get(g.sessionId)));return ce(l,{sessions:c})}async function LJ(i,l){let u=l.payload??{};if(typeof u.query!=="string"||!u.query.trim())return fe(l,"invalid_search_query","session.search requires a non-empty query");return ce(l,{hits:i.sessionSearch.search({query:u.query,limit:u.limit,workspaceRoot:u.workspaceRoot})})}async function DJ(i,l){let u=it(l),c=AJ(Wr(l.payload?.metadata)),g=tI(l.payload?.prompt),b=tI(l.payload?.title),I=await i.sessionHost.updateSession(u,{metadata:c,...g!==void 0?{prompt:g}:{},...b!==void 0?{title:b}:{}}),[T,_]=await Promise.all([Mr(i,u),Ss(i,u)]);if(T)i.publish(i.buildEvent("session.updated",{session:T,..._?{snapshot:_}:{}},u));return{version:l.version,requestId:l.requestId,ok:I.updated,payload:{updated:I.updated,session:T,..._?{snapshot:_}:{}}}}async function UJ(i,l){let u=it(l);if(!u)return fe(l,"invalid_session_update_connection","session.update_connection requires a session id");let c=i.sessionHost.updateSessionConnection;if(!c)return fe(l,"unsupported_session_update_connection","runtime host does not support session connection updates");let g=Wr(l.payload),b=_J(g?.updates);return await c.call(i.sessionHost,u,b),ce(l,{sessionId:u,updated:!0})}async function FJ(i,l){let u=it(l);if(!u)return fe(l,"invalid_session_id","session.compaction.update requires a session id");let c=l.clientId?.trim()||"hub-client",g=await Mr(i,u);if(!g)return fe(l,"session_not_found",`Unknown session: ${u}`);let b=gE({sessionId:u,ctx:i,clientId:c,envelope:l});if(b)return b;let I=l.payload&&typeof l.payload==="object"?l.payload:{},T=cc(I.state);if(!T)return fe(l,"invalid_compaction_state","session.compaction.update requires a valid compaction state");let _=await i.sessionHost.updateSessionCompactionState(u,T),[E,A]=_.updated?await Promise.all([Mr(i,u),Ss(i,u)]):[g,void 0];if(_.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:_.updated,session:E??g,...A?{snapshot:A}:{}}}}async function qJ(i,l){let u=it(l),c=await mE(i,u);return ce(l,{deleted:c})}async function jJ(i,l){let u=it(l),c=i.sessionHost.pendingPrompts;if(!c)return fe(l,"pending_prompts_unavailable","Pending prompt service is not available.");let g=await c.list({sessionId:u});return ce(l,{sessionId:u,prompts:g})}async function BJ(i,l){let u=it(l),c=i.sessionHost.pendingPrompts;if(!c)return fe(l,"pending_prompts_unavailable","Pending prompt service is not available.");let g=await c.steerFirst({sessionId:u});return ce(l,g)}async function HJ(i,l){let u=it(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 fe(l,"pending_prompts_unavailable","Pending prompt service is not available.");let T=await I.update({sessionId:u,promptId:c,prompt:g,delivery:b});return ce(l,T)}async function zJ(i,l){let u=it(l),c=typeof l.payload?.promptId==="string"?l.payload.promptId.trim():"",g=i.sessionHost.pendingPrompts;if(!g)return fe(l,"pending_prompts_unavailable","Pending prompt service is not available.");let b=await g.delete({sessionId:u,promptId:c});return ce(l,b)}var KJ=604800000,GJ=200000,XJ=67108864,JJ=16777216;function VJ(i){let l=i?.replace(/[^a-zA-Z0-9_-]/g,"-");return WJ(be(),l?`hub-events-${l}.db`:"hub-events.db")}class vE{db;retentionMs;maxRows;maxTotalBytes;appendedBytesSincePrune=0;closed=!1;constructor(i={}){this.db=V(i.dbPath??VJ(i.ownerId)),this.retentionMs=i.retentionMs??KJ,this.maxRows=i.maxRows??GJ,this.maxTotalBytes=i.maxTotalBytes??XJ,this.db.exec("PRAGMA journal_mode = WAL;"),this.db.exec("PRAGMA synchronous = NORMAL;"),this.db.exec("PRAGMA busy_timeout = 5000;"),this.db.exec(`
1105
+ CREATE TABLE IF NOT EXISTS hub_events (
1106
+ sequence INTEGER PRIMARY KEY AUTOINCREMENT,
1107
+ event TEXT NOT NULL,
1108
+ session_id TEXT,
1109
+ envelope_json TEXT NOT NULL,
1110
+ created_at INTEGER NOT NULL
1111
+ );
1112
+ CREATE INDEX IF NOT EXISTS idx_hub_events_session
1113
+ ON hub_events(session_id, sequence);
1114
+ CREATE INDEX IF NOT EXISTS idx_hub_events_created
1115
+ ON hub_events(created_at);
1116
+ `)}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)
1117
+ 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>=JJ)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
1118
+ 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 <= (
1119
+ SELECT sequence FROM hub_events ORDER BY sequence DESC
1120
+ LIMIT 1 OFFSET ?
1121
+ );`).run(this.maxRows),this.fileSizeBytes()>this.maxTotalBytes){this.db.prepare(`DELETE FROM hub_events WHERE sequence <= (
1122
+ SELECT sequence FROM (
1123
+ SELECT sequence, SUM(LENGTH(CAST(envelope_json AS BLOB))) OVER (
1124
+ ORDER BY sequence DESC
1125
+ ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING
1126
+ ) AS newer_bytes FROM hub_events
1127
+ )
1128
+ WHERE newer_bytes > ? ORDER BY sequence DESC LIMIT 1
1129
+ );`).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 YJ(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 QJ=new Set(["task.create","task.list","task.get","task.update","task.approve","task.cancel","task.run","task.automation.get","task.automation.set"]);function ZJ(i){return QJ.has(i)}function eV(i){return i.payload&&typeof i.payload==="object"?i.payload:{}}function Bd(i){return typeof i.taskId==="string"?i.taskId.trim():""}function im(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 wE{tasks;constructor(i){this.tasks=i}async handleCommand(i,l){let u=eV(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 ce(i,{task:b})}case"task.list":{let b=u,[I,T]=await Promise.all([this.tasks.listTasks({...b,scope:"workspace",workspaceRoot:g}),this.tasks.listTasks({...b,scope:"global",workspaceRoot:void 0})]);return ce(i,{tasks:[...I,...T]})}case"task.get":{let b=await this.requireScopedTask(u,g);return ce(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 ce(i,{task:I})}case"task.approve":return await this.requireScopedTask(u,g),ce(i,{task:await this.tasks.approveTask(Bd(u),c,im(u))});case"task.cancel":return await this.requireScopedTask(u,g),ce(i,{task:await this.tasks.cancelTask(Bd(u),c,im(u),typeof u.reason==="string"?u.reason:void 0)});case"task.run":{await this.requireScopedTask(u,g);let b=await this.tasks.runTask(Bd(u),c,im(u),i.clientId);return ce(i,b)}case"task.automation.get":return ce(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 ce(i,{policy:await this.tasks.setAutomationPolicy({...b,scopeKey:g},c)})}default:return fe(i,"unsupported_command",`Unsupported agenda task command: ${i.command}`)}}catch(g){return fe(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 rI(l)}async requireScopedTask(i,l){let u=await this.tasks.getTask(Bd(i));if(!u||u.scope==="workspace"&&(!u.workspaceRoot||rI(u.workspaceRoot)!==l))throw Error("task does not exist in this workspace");return u}}var Hd=!1,tV=new Set(["skills","workflows","rules","plugins","tools","mcp"]);function Th(i){return typeof i==="object"&&i!==null&&!Array.isArray(i)}function jl(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 bE(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 rV(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 IE(i){if(i===void 0)return{};if(!Th(i))throw Error("settings.list payload must be an object.");return{cwd:jl(i,"cwd"),workspaceRoot:jl(i,"workspaceRoot"),agentPluginPaths:rV(i,"agentPluginPaths"),includePluginTools:bE(i,"includePluginTools"),availabilityContext:Th(i.availabilityContext)?i.availabilityContext:void 0}}function sV(i){if(!Th(i))throw Error("settings.toggle payload must be an object.");let{type:l}=i;if(typeof l!=="string"||!tV.has(l))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, plugins, tools, mcp.");return{...IE(i),type:l,id:jl(i,"id"),path:jl(i,"path"),name:jl(i,"name"),enabled:bE(i,"enabled")}}var iV={debug:(i,l)=>Ce("debug",i,l),log:(i,l)=>Ce(l?.severity==="warn"||l?.severity==="error"?"warn":"info",i,l),error:(i,l)=>Ce("error",i,l)};class kE{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=pc();unsubscribePluginStatus;cloud;constructor(i){this.options=i,this.cloud=new Z_({...i.cloudSessionOptions,logger:i.logger,telemetry:i.telemetry,publish:(u,c)=>this.publish(Qt("cloud.event",{event:u,...c},u?.sessionId))}),this.plugins.setLogger(iV),this.unsubscribePluginStatus=this.plugins.subscribe((u)=>{this.publish(Qt("plugin.status_changed",{plugin:JSON.parse(JSON.stringify(u))}))}),this.sessionHost=i.sessionHost??new Qf({sessionService:new eg(new Zf),fetch:i.fetch,logger:i.logger,telemetry:i.telemetry}),this.sessionSearch=new I_(this.sessionHost,i.sessionSearchOptions??{});let l=this.sessionSearch.getInitializationError();if(l!==void 0)Ci("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:Qt,requestCapability:(u,c,g,b,I)=>gX(this.ctx,u,c,g,b,I)},this.tasks=new L_({...i.taskOptions,automationEnabled:Hd,watchFiles:Hd&&i.taskOptions?.watchFiles!==!1,runtime:{isInteractiveClientAvailable:()=>[...this.clients.values()].some((u)=>u.capabilities.some((c)=>c.name===os)),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(Qt(u,c,g))}}),this.taskCommands=new wE(this.tasks),this.schedules=new KI({...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(Qt(g,c&&typeof c==="object"?c:void 0))}}),this.scheduleCommands=new xI(this.schedules),this.sessionTools.push(Xx({todo:Hd?{manager:this.tasks,telemetry:i.telemetry,resolveSessionDefaults:async(u)=>{let c=await this.sessionHost.getSession(u);if(!c)return;let g=!mn(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(Qt(u,c,g))},resolveSessionDefaults:async(u)=>{let c=await this.sessionHost.getSession(u);if(!c)return;return{workspaceRoot:await F1(),modelSelection:{providerId:c.provider,modelId:c.model},interactive:c.interactive}}}})),this.sessionExtensions.push(Jx({todoEnabled:Hd})),this.settings=i.settingsService??new R_,i.cronOptions)this.cronService=new b_({runtimeHandlers:i.runtimeHandlers,...i.cronOptions,telemetry:i.telemetry});this.sessionHost.subscribe((u)=>{if(cJ(this.ctx,u).catch((c)=>{Ci("session event handling failed",c),U(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)=>{Ci("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",T=i.modelSelection?.modelId?.trim()||(I==="cline"?pr:""),_=ln({title:i.title,agendaTaskId:i.taskId,agendaTaskRunId:l.runId,agendaTaskAssignee:i.assignee,interactive:!c,source:Fr.CORE},{mode:"task",trigger:"agenda_task"}),E=u?.trim()||"agenda-task-manager",A=await Sh(this.ctx,{version:"v1",command:"session.create",requestId:P("task_session_"),clientId:E,payload:{workspaceRoot:i.workspaceRoot,cwd:i.cwd,sessionConfig:{providerId:I,modelId:T,systemPrompt:i.systemPrompt??"",mode:i.mode??"act",maxIterations:i.maxIterations,enableTools:!0,enableSpawnAgent:!0,enableAgentTeams:!0},metadata:_,runtimeOptions:{mode:i.mode??"act",maxIterations:i.maxIterations,enableTools:!0,enableSpawn:!0,enableTeams:!0},toolPolicies:{"*":{autoApprove:b,enabled:!0}}}},(O)=>qd(this.ctx,O));if(!A.ok)throw Error(A.error?.message??"failed to create task session");let C=A.payload?.session,N=A.payload?.snapshot,M=typeof N?.sessionId==="string"?N.sessionId:typeof C?.sessionId==="string"?C.sessionId:"";if(!M)throw Error("task session did not return a session id");return{sessionId:M}}async runAgendaTaskSession(i,l,u){let c=l.resourcePaths.length?`
1130
+
1131
+ Relevant resources (paths are relative to workspace root ${l.workspaceRoot}):
1132
+ ${l.resourcePaths.map((A)=>`- ${A} (absolute: ${$p(l.workspaceRoot??l.cwd??"",A)})`).join(`
1133
+ `)}`:"",g=l.assignee?`
1134
+ 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.
1135
+
1136
+ Title: ${l.title}
1137
+ Type: ${l.type}
1138
+ Priority: P${l.priority}${g}
1139
+
1140
+ ${l.instructions}${c}`,I=await Ih(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 T=I.payload?.result,_=typeof T?.finishReason==="string"?T.finishReason:void 0,E=typeof T?.text==="string"&&T.text.trim()?T.text.trim():void 0;if(_==="completed")return{status:"completed",summary:E};if(_==="aborted")return{status:"cancelled",summary:E};return{status:"failed",summary:E,error:E??(_?`Task session ended with ${_}`:"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 vE({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){Ce("error","event_log.start_failed",{error:i})}}startRunQueue(){if(this.options.runQueue===!1||this.runQueue)return;try{this.runQueue=new nE({ownerId:this.options.owner?.ownerId,...this.options.runQueue??{}}),this.runExecutor=new oE(this.ctx,this.runQueue);let i=this.runQueue.recoverOnStartup();for(let u of i.interrupted)this.publish(Qt("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)Ce("info","run.queue.recovered",{interrupted:i.interrupted.length,requeued:i.requeued.length})}catch(i){Ce("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())rE(this.ctx,i,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(td(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 fe(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 U(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&&lJ(i.command))return Qb(i);if(ZJ(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 fe(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 Qb(i);try{if(i.command==="cloud.watch")return ce(i,this.cloud.watch());let c=i.payload?.args;if(i.payload?.operation==="create"&&Array.isArray(c)&&c[0]?.localGit!==void 0&&!l?.crossWorkspace)throw Error("Local Git publication requires a token-authenticated Hub workspace");let g=await this.cloud.command(String(i.payload?.operation??""),i.payload?.args,i.payload?.scope);return ce(i,g)}catch(c){return fe(i,"cloud_command_failed",c instanceof Error?c.message:String(c))}}switch(i.command){case"client.register":{let u=bX(this.ctx,i);return this.tasks.notifyAutomationReadinessChanged(),u}case"client.update":{let u=IX(this.ctx,i);return this.tasks.notifyAutomationReadinessChanged(),u}case"client.unregister":{let u=kX(this.ctx,i,(c)=>{this.listeners.delete(c),this.detachClientFromSessions(c)});return this.tasks.notifyAutomationReadinessChanged(),u}case"client.list":return SX(this.ctx,i);case"session.create":return await Sh(this.ctx,i,(u)=>qd(this.ctx,u));case"session.resume":return await CJ(this.ctx,i,(u)=>qd(this.ctx,u));case"session.restore":return await xJ(this.ctx,i,(u)=>qd(this.ctx,u));case"session.attach":return await RJ(this.ctx,i);case"session.detach":return await PJ(this.ctx,i);case"session.get":return await MJ(this.ctx,i);case"session.messages":return await NJ(this.ctx,i);case"session.compaction.get":return await OJ(this.ctx,i);case"session.list":{let u=await $J(this.ctx,i);return{...u,payload:{...u.payload,activePluginRequests:this.pendingPluginCommands.size,activeCloudCommands:this.cloud.activeCommands}}}case"session.search":return await LJ(this.ctx,i);case"session.update":return await DJ(this.ctx,i);case"session.update_connection":return await UJ(this.ctx,i);case"session.mcp_apps.resolve_tool":return await HX(this.ctx,i);case"session.mcp_apps.read_resource":return await zX(this.ctx,i);case"session.mcp_apps.call_tool":return await WX(this.ctx,i);case"session.compaction.update":return await FJ(this.ctx,i);case"session.pending_prompts":return await jJ(this.ctx,i);case"session.steer_first_pending_prompt":return await BJ(this.ctx,i);case"session.update_pending_prompt":return await HJ(this.ctx,i);case"session.remove_pending_prompt":return await zJ(this.ctx,i);case"session.delete":return await qJ(this.ctx,i);case"session.hook":return await tJ(this.ctx,i);case"run.start":case"session.send_input":return await Ih(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 dJ(this.ctx,i,this.runQueue,this.runExecutor)}case"run.list":{if(!this.runQueue)return ce(i,{runs:[]});return uJ(i,this.runQueue)}case"hub.drain":return this.handleHubDrain(i);case"hub.status":return this.handleHubStatus(i);case"plugins.list":case"plugins.status":return ce(i,{plugins:this.plugins.list()});case"plugins.reload":return await this.handlePluginsReload(i);case"run.abort":return await ZX(this.ctx,i);case"run.proceed_while_running":return await eJ(this.ctx,i);case"capability.request":return await vX(this.ctx,i);case"approval.respond":return await cX(this.ctx,i);case"capability.respond":return wX(this.ctx,i);case"capability.progress":return yX(this.ctx,i);case"ui.notify":return this.publish(Qt("ui.notify",i.payload??{})),ce(i);case"ui.show_window":return this.publish(Qt("ui.show_window",i.payload??{})),ce(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&&$p(c)!==$p(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 BX(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=YJ(i.command);if(c)this.publish(Qt(c,u.payload))}return u}}}captureFailedReply(i,l){if(l.ok||!l.error||!nV(l.error.code))return;U(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(IE(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(sV(i.payload));return this.publish(Qt("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(Qt("hub.drain_changed",{draining:this.draining,...u?{reason:u}:{}})),Ce("info","hub.drain_changed",{draining:this.draining,reason:u});return ce(i,this.describeStatus())}async handlePluginsReload(i){let l=typeof i.payload?.plugin==="string"?i.payload.plugin.trim():"";if(!l)return fe(i,"invalid_plugin","plugins.reload requires a plugin name or path");let u=await this.plugins.reload(l);if(u.length===0)return fe(i,"plugin_not_found",`No loaded plugin matches "${l}"`);return ce(i,{plugins:u})}handleHubStatus(i){return ce(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(Qt("cloud.event",{...b,snapshots:g.sessionId?b.snapshots.filter((T)=>T.sessionId===g.sessionId):b.snapshots,...g.sessionId?{sessionId:g.sessionId}:{}},g.sessionId))}catch(T){Ci("listener threw while recovering cloud state",T)}});let I=uX(this.ctx,u?.sessionId);return queueMicrotask(()=>{if(!this.listeners.get(i)?.has(g))return;let T=[...I,...fX(this.ctx,i,u?.sessionId)];for(let _ of T)try{g.listener(_)}catch(E){Ci("listener threw while re-issuing pending request",E)}}),()=>{let T=this.listeners.get(i);if(!T)return;if(T.delete(g),T.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)}td(this.ctx,(l)=>l.targetClientId===i,Yu)}publish(i){if(this.eventLog&&i.event!=="cloud.event")try{i=this.eventLog.append(i)}catch(l){Ci(`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){Ci(`listener threw while publishing ${i.event}`,c),U(this.options.telemetry,{component:"core",operation:"hub.publish",error:c,severity:"warn",handled:!0,context:{event:i.event,sessionId:i.sessionId}})}}}}function nV(i){return i==="session_not_found"||i==="session_messages_not_found"||i==="hub_command_timeout"||i.endsWith("_failed")}var LZ=3;class SE 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 pV(i){return i instanceof Error&&i.name==="HubLockHeldError"}function mV(i){return`${i}.instance.lock`}class Bl{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{uV(cV(i),{recursive:!0}),l=dV(i),u=V(i)}catch{return new Bl(i,void 0)}try{u.exec("PRAGMA busy_timeout = 0;"),u.exec("BEGIN EXCLUSIVE;")}catch(c){if(u.close?.(),hV(c))throw new SE(i);return new Bl(i,void 0)}if(!l)try{lV(i,384)}catch{}return new Bl(i,u)}}function hV(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 vV=200,wV=1000;function om(i){return{command:i.envelope.command,requestId:i.envelope.requestId,clientId:i.envelope.clientId,sessionId:i.envelope.sessionId}}function Sl(i,l,u){return{version:i.envelope.version,requestId:i.envelope.requestId,ok:!1,error:{code:l,message:u}}}function bV(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(),T=u?I||l?.trim():l?.trim();if(!T)return{clientId:b};let _=nm(T);if(!u&&I&&nm(I)!==_)throw Error("Registration workspace must match the Hub-authorized workspace");let E=nm(c.workspaceContext?.cwd?.trim()||_),A=gV(_,E);if(A===".."||A.startsWith(`..${yV}`)||fV(A))throw Error("Registration cwd must be inside its workspace");return{clientId:b,workspaceContext:{workspaceRoot:_,cwd:E},...u?{crossWorkspace:!0}:{}}}class TE{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)}`)}},T=(A)=>{if(A.event==="cloud.event"&&!g)return;I({kind:"event",envelope:A})},_=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:Sl(C,"client_already_registered","This connection already owns a registered client.")});break}if(g&&C.envelope.clientId?.trim()!==g.clientId){I({kind:"reply",envelope:Sl(C,"client_authority_mismatch","Command clientId does not belong to this connection.")});break}if(C.envelope.command==="client.register")try{N=bV(C,this.workspaceRoot,l.allowRegisteredWorkspace)}catch(te){I({kind:"reply",envelope:Sl(C,"invalid_client_registration",te instanceof Error?te.message:String(te))});break}let M=performance.now(),O=!1,L=om(C);Ce("info","command.start",L);let D=setTimeout(()=>{if(O)return;Ce("warn","command.slow",{...L,elapsedMs:Math.round(performance.now()-M)})},rs),F=this.transport.command(C.envelope,g??null);F.then((te)=>{if(!O)return;Ce(te.ok?"warn":"error","command.late_end",{...L,elapsedMs:Math.round(performance.now()-M),ok:te.ok,errorCode:te.error?.code,errorMessage:te.error?.message})},(te)=>{if(!O)return;Ce("error","command.late_error",{...L,elapsedMs:Math.round(performance.now()-M),error:te})});let j=!1,B,Q,H=Xt(C.envelope.command,C.envelope.timeoutMs);try{Q=H===null?await F:await Promise.race([F,new Promise((te)=>{B=setTimeout(()=>{j=!0,U(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${C.envelope.command} did not complete within ${H}ms.`),severity:"error",handled:!0,context:{...L,timeoutMs:H}}),te(Sl(C,"hub_command_timeout",`Hub command ${C.envelope.command} did not complete within ${H}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${C.envelope.requestId}.`))},H)})])}catch(te){if(clearTimeout(D),B)clearTimeout(B);throw te}if(O=j,clearTimeout(D),B)clearTimeout(B);let z=Math.round(performance.now()-M);if(j)Ce("error","command.timeout",{...L,durationMs:z,timeoutMs:H});else Ce(Q.ok?"info":"warn","command.end",{...L,durationMs:z,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 te=C.envelope.clientId?.trim();if(te)c.delete(te),g=void 0}I({kind:"reply",envelope:Q});break}case"stream.subscribe":{let N=`${C.clientId}:${C.sessionId??"*"}`;if(u.has(N))break;let M=typeof C.sinceSequence==="number"&&Number.isFinite(C.sinceSequence)&&C.sinceSequence>=0?Math.floor(C.sinceSequence):void 0;if(M===void 0||typeof this.transport.replayEventsAfter!=="function"){let H=await this.transport.subscribe(C.clientId,T,{sessionId:C.sessionId});u.set(N,H);break}let O=!1,L=M,D=[],F=new Set,j=(H)=>{if(typeof H.sequence==="number"){if(H.sequence<=L)return;L=H.sequence}if(H.eventId&&F){if(F.has(H.eventId))return;F.add(H.eventId)}T(H)},B=(H)=>{if(!O){D.push(H);return}j(H)},Q=await this.transport.subscribe(C.clientId,B,{sessionId:C.sessionId});u.set(N,Q);try{let H=0;while(!b&&H<wV){let z=L,te=this.transport.replayEventsAfter(L,{sessionId:C.sessionId,limit:vV});if(te.length===0)break;for(let ee of te)j(ee);if(L<=z)break;H+=1,await new Promise((ee)=>setTimeout(ee,0))}}finally{O=!0;for(let H of D)j(H);D.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"?Bt(A.data):void 0;if(!N||N.kind!=="command"){Ce("error","rejected malformed websocket frame",{error:C});return}Ce("error","command.error",{...om(N),error:C}),U(this.telemetry,{component:"core",operation:"hub.websocket_command",error:C,severity:"error",handled:!0,context:om(N)}),I({kind:"reply",envelope:Sl(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",_),i.removeEventListener("close",E)};return i.addEventListener("message",_),i.addEventListener("close",E),E}}class _E{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 EE(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 IV(i){return{send(l){i.send(l)},addEventListener(l,u){if(l==="message"){i.on("message",(c)=>{u({data:EE(c)})});return}i.on("close",u)},removeEventListener(){}}}function kV(i){try{i.write(`HTTP/1.1 400 Bad Request\r
1141
+ Connection: close\r
1142
+ Content-Length: 0\r
1143
+ \r
1144
+ `),i.end()}catch{i.destroy()}}function SV(i){try{i.write(`HTTP/1.1 401 Unauthorized\r
1145
+ Connection: close\r
1146
+ Content-Length: 0\r
1147
+ \r
1148
+ `),i.end()}catch{i.destroy()}}function TV(i){try{i.write(`HTTP/1.1 503 Service Unavailable\r
1149
+ Connection: close\r
1150
+ Content-Length: 0\r
1151
+ \r
1152
+ `),i.end()}catch{i.destroy()}}function zd(i,l){if(!i||!l)return!1;let u=Buffer.from(i,"utf8"),c=Buffer.from(l,"utf8");return u.length===c.length&&oV(u,c)}function sI(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}
1153
+ Caused by: ${i.stack}`;return b}function _V(i){return i instanceof Error&&"code"in i&&i.code==="EADDRINUSE"}function iI(i,l,u,c){try{let g=new id(i),b=new id(qo(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 nI(i,l,u){return Error(`Hub owner ${i} is already running at ${l}; refusing a second endpoint at ${u}`)}var Bs=new Map,oI="cline-hub-auth.",EV=30000,aI=2000,AV=3000,CV=100;async function lI(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 cg(i){return Array.isArray(i)?i.join(","):i??""}function dI(i){return i===32||i===9}function am(i){let l=cg(i).trim(),u="bearer";if(l.length<=6||l.slice(0,6).toLowerCase()!=="bearer"||!dI(l.charCodeAt(6)))return null;let c=7;while(c<l.length&&dI(l.charCodeAt(c)))c+=1;return l.slice(c).trim()||null}function xV(i){for(let l of cg(i).split(",")){let u=l.trim();if(u.startsWith(oI))return u.slice(oI.length).trim()||null}return null}function AE(i){let l=i.trim().toLowerCase();return l==="localhost"||l==="127.0.0.1"||l==="::1"||l==="[::1]"}function RV(i){let l=cg(i).trim();if(!l)return!1;try{return AE(new id(l).hostname)}catch{return!1}}async function CE(i){let l=i.owner??ld(),u=i.host??"127.0.0.1",c=i.pathname??"/hub",g=i.port??ef(),b=g,I=qo(u,g,c),T=aa(),_=Tk(),E=vR(),A=Bl.acquire(mV(l.discoveryPath));if(!A.held)Ce("warn","instance_lock.unavailable",{lockFile:A.lockFile});let C;try{C=new kE({...i,owner:l}),await C.start()}catch(G){throw A.release(),G}let N=C.getHubId(),M=new TE(new _E(C),i.telemetry,i.workspaceRoot),O=new Set,L=new Date().toISOString(),D={protocolVersion:ji,minClientProtocolVersion:wa,maxClientProtocolVersion:Ta,capabilities:as,coreVersion:Wl.version,buildId:T,buildEpochMs:_,pid:process.pid,startedAt:L},F=new Set,j,B,Q,H=!1,z=()=>{if(B)return B;if(Q){let le=Bs.get(l.discoveryPath);if(le?.server===Q)le.state="closing"}if(j)clearInterval(j),j=void 0;let G=new Promise((le,ke)=>{oe.close((we)=>{if(we){ke(we);return}le()})}),se=new Promise((le,ke)=>{ee.close((we)=>{if(we){ke(we);return}le()})}),Ne=Promise.resolve().then(()=>C.stop()),De=Ne.then(async()=>{await kR(l.discoveryPath,N)}),Te=(async()=>{let le=(await Promise.allSettled([G,se,Ne,De])).flatMap((ke)=>ke.status==="rejected"?[ke.reason]:[]);if(le.length>0)throw AggregateError(le,"hub server close failed")})().finally(()=>{if(Bs.get(l.discoveryPath)?.server===Q)Bs.delete(l.discoveryPath);A.release()});B={transportStopped:Ne,closed:Te};for(let le of F)le.terminate?.();F.clear();for(let le of O)le();return O.clear(),B},te=()=>z().closed,ee=aV.createServer((G,se)=>{if(!H){se.statusCode=503,se.end("Starting");return}if((G.url??"/")==="/health"){let De=JSON.stringify({ok:!0,hubId:N,protocolVersion:D.protocolVersion,minClientProtocolVersion:D.minClientProtocolVersion,maxClientProtocolVersion:D.maxClientProtocolVersion,coreVersion:D.coreVersion,buildId:D.buildId,buildEpochMs:D.buildEpochMs,draining:C.isDraining(),host:u,port:b,url:I});se.statusCode=200,se.setHeader("content-type","application/json"),se.end(De);return}if((G.url??"/")==="/status"){if(!zd(am(G.headers.authorization),E)){se.statusCode=401,se.end("Unauthorized");return}let De=JSON.stringify({hubId:N,...D,authToken:E,host:u,port:b,url:I,updatedAt:new Date().toISOString()});se.statusCode=200,se.setHeader("content-type","application/json"),se.end(De);return}if((G.url??"/")==="/version"){se.statusCode=200,se.setHeader("content-type","application/json"),se.end(JSON.stringify(D));return}let Ne=new id(G.url??"/",`http://${u}:${b}`);if(Ne.pathname==="/drain"&&G.method==="POST"){if(!zd(am(G.headers.authorization),E)){se.statusCode=401,se.end("Unauthorized");return}let De=Ne.searchParams.get("off")===null;C.handleCommand({version:ji,command:"hub.drain",payload:{draining:De,reason:Ne.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(Ne.pathname==="/shutdown"&&G.method==="POST"){if(!zd(am(G.headers.authorization),E)){se.statusCode=401,se.end("Unauthorized");return}let De=!1,Te=()=>{if(De)return;De=!0;try{Promise.resolve(i.onShutdownRequested?.()).catch(()=>{return})}catch{}finally{te().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 Jo.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)}}},EV),ee.on("upgrade",(G,se,Ne)=>{if(!H){TV(se);return}if(new id(G.url??"/",`http://${u}:${b}`).pathname!==c){se.destroy();return}let De=zd(xV(G.headers["sec-websocket-protocol"]),E);if(!(De||AE(u)&&RV(G.headers.origin))){SV(se);return}try{oe.handleUpgrade(G,se,Ne,(Te)=>{let le=Te;le.isAlive=!0,le.on("pong",()=>{le.isAlive=!0}),F.add(le),le.once("close",(we,Xe)=>{Ce("info","socket.closed",{code:we,reason:EE(Xe).slice(0,200)||void 0,heartbeatTerminated:le.heartbeatTerminated??!1,serverClosing:B!==void 0})});let ke=M.attach(IV(Te),{allowRegisteredWorkspace:De});O.add(ke),Te.once("close",()=>{F.delete(le),ke(),O.delete(ke)})})}catch{kV(se)}});try{await new Promise((G,se)=>{ee.once("error",(Ne)=>{se(sI(Ne,{host:u,port:g,pathname:c}))}),ee.listen(g,u,()=>{let Ne=ee.address();if(!Ne||typeof Ne==="string"){se(sI(Error("Failed to resolve hub port"),{host:u,port:g,pathname:c}));return}b=Ne.port,I=qo(u,b,c),G()})})}catch(G){if(j)clearInterval(j),j=void 0;if(G instanceof Error)G.hubInstanceLockHeld=A.held;throw await lI(Promise.resolve().then(()=>C.stop()),aI),A.release(),G}try{await _k(l.discoveryPath,{hubId:N,protocolVersion:ji,minClientProtocolVersion:wa,maxClientProtocolVersion:Ta,capabilities:[...D.capabilities],coreVersion:Wl.version,buildId:T,buildEpochMs:_,authToken:E,host:u,port:b,url:I,pid:process.pid,startedAt:L,updatedAt:L}),H=!0}catch(G){if(!await lI(z().closed,aI))try{ee.closeAllConnections(),ee.unref()}catch{}throw G}return Q={host:u,port:b,url:I,authToken:E,beginClose:z,close:te},Q}async function PV(i){let l=i.owner??ld(),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??ef(),b=i.pathname??"/hub",I=qo(c,g,b),T=l.discoveryPath,_=(A)=>{if(!u)ac(A.url,A.authToken);return A},E=Bs.get(T);if(E){let A=await E.promise;if(E.state==="closing"){if(await A.beginClose().closed.catch(()=>{return}),Bs.get(T)===E)Bs.delete(T)}else if(iI(A.url,c,g,b)||i.allowPortFallback===!0)return _({server:A,url:A.url,authToken:A.authToken,action:"reuse"});else throw nI(l.ownerId,A.url,I)}return await Ak(l.discoveryPath,async()=>{let A=await Pr(l.discoveryPath);if(A?.url){let M=await dd(A.url,{authToken:A.authToken});if(M?.url&&Qh(M)&&await Os(M.url,{authToken:A.authToken})){if(iI(A.url,c,g,b)||i.allowPortFallback===!0)return _({url:M.url,authToken:A.authToken,action:"reuse"});throw nI(l.ownerId,A.url,I)}if(M?.url){let O={url:M.url,authToken:A.authToken,pid:M.pid??A.pid};if(await Pk(O)){if(await Os(M.url,{authToken:A.authToken}))return _({url:M.url,authToken:A.authToken,action:"reuse"})}else await cd(O,l.discoveryPath)}else await la(l.discoveryPath)}let C=async(M)=>{let O=CE({...M,owner:l}),L={promise:O,state:"starting"};Bs.set(T,L);try{let D=await O;return L.server=D,L.state="open",_({server:D,url:D.url,authToken:D.authToken,action:"started"})}catch(D){if(Bs.get(T)===L)Bs.delete(T);throw D}},N=Date.now()+AV;for(;;)try{return await C(i)}catch(M){if(pV(M)&&Date.now()<N){await new Promise((O)=>setTimeout(O,CV));continue}if(!i.allowPortFallback||!_V(M))throw M;return await C({...i,port:0})}})}function xE(){return re()==="production"?ud():da()}function MV(i){return re()!=="production"&&!i}async function FZ(i){let l=oc({host:i.host,port:i.port,pathname:i.pathname});return await CE({...i,...l,owner:xE()})}async function qZ(i){let l=i.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),u=oc({host:i.host,port:i.port,pathname:i.pathname});return await PV({...i,...u,allowPortFallback:i.allowPortFallback??MV(l),owner:xE()})}export{TE as BrowserWebSocketHubAdapter,AR as DEFAULT_HUB_HOST,xR as DEFAULT_HUB_PATHNAME,CR as DEFAULT_HUB_PORT,LZ as HUB_LOCK_HELD_EXIT_CODE,Z_ as HubCloudSessionService,jo as HubCommandError,vE as HubEventLogStore,Bl as HubInstanceLock,SE as HubLockHeldError,ug as HubRunAdmissionRejectedError,nE as HubRunQueue,xI as HubScheduleCommandService,KI as HubScheduleService,kE as HubServerTransport,$P as HubSessionClient,St as HubTransportError,LP as HubUIClient,_E as NativeHubTransportAdapter,ua as NodeHubClient,tc as ScheduledTaskInputSchema,jx as TASKS_SYSTEM_PROMPT_RULE,Kh as TASKS_TOOL_NAME,zx as TasksToolInputSchema,cQ as __test__,RP as checkManagedHubBuildMismatch,la as clearHubDiscovery,kR as clearHubDiscoveryIfOwned,Vh as compareHubBuilds,jk as connectToHub,jY as createConfiguredTelemetryHandle,Mx as createConfiguredTelemetryService,vR as createHubAuthToken,qo as createHubServerUrl,oQ as createInMemoryHubOwnerContext,o6 as createLocalHubScheduleRuntimeHandlers,Jx as createTasksPromptExtension,Xx as createTasksTool,bm as ensureCompatibleLocalHubUrl,hu as ensureDetachedHubServer,qZ as ensureHubServer,PV as ensureHubWebSocketServer,ZC as executeScheduleOperation,nc as getManagedHubCompatibility,gQ as hasActiveHubSessions,Pk as hubHasLiveSessions,aQ as isDiscoveryFilePresent,fQ as isHubCommandTimeoutError,pV as isHubLockHeldError,uP as isHubReconnectableTransportError,AE as isLocalHubHostName,RV as isLocalHubOrigin,Qh as isManagedHubReusable,Uk as localHubHasNoActiveSessions,fu as normalizeHubWebSocketUrl,mQ as prewarmDetachedHubServer,wQ as probeHubConnection,dd as probeHubServer,lc as queryHubSessionActivity,am as readBearerToken,Pr as readHubDiscovery,zR as readSupersededHubDiscovery,ac as rememberRecoverableLocalHubUrl,Po as requestHubDrain,Fk as requestHubShutdown,Z as resolveClineDataDir,Rt as resolveClineDir,fP as resolveCompatibleLocalHubUrl,RR as resolveDefaultHubHost,PR as resolveDefaultHubPathname,ef as resolveDefaultHubPort,Tk as resolveHubBuildEpochMs,aa as resolveHubBuildId,Yh as resolveHubBuildIdentity,oc as resolveHubEndpointOptions,VJ as resolveHubEventLogPath,mV as resolveHubInstanceLockPath,ld as resolveHubOwnerContext,nJ as resolveHubRunQueuePath,kP as resolveHubUrl,ud as resolveProductionHubOwnerContext,da as resolveSharedHubOwnerContext,uQ as resolveWorkspaceHubOwnerContext,yQ as restartLocalHubIfIdleAfterStartupTimeout,cd as retireDiscoveredHub,bQ as sendHubCommand,pQ as setHubDaemonLauncher,VR as spawnDetachedHubServer,YR as spawnDetachedHubServerWithRetry,FZ as startHubServer,CE as startHubWebSocketServer,gP as stopLocalHubServerGracefully,Dk as summarizeHubSessionActivity,Ck as toHubHealthUrl,SR as toHubStatusUrl,CK as truncateNotificationBody,hQ as upgradeManagedHub,Os as verifyHubConnection,SQ as watchManagedHubBuildMismatch,Ak as withHubStartupLock,_k as writeHubDiscovery};