sliccy 6.201.0 → 6.203.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/dist/node-server/_shared/tray-sync-protocol.d.ts +12 -0
  2. package/dist/node-server/_shared/tray-sync-protocol.d.ts.map +1 -1
  3. package/dist/node-server/_shared/tray-sync-protocol.js.map +1 -1
  4. package/dist/node-server/hosted-bootstrap.d.ts +2 -0
  5. package/dist/node-server/hosted-bootstrap.js +7 -2
  6. package/dist/ui/.vite/manifest.json +250 -246
  7. package/dist/ui/assets/{SKILL-BIdAO7Ya.js → SKILL-9iH3AJo5.js} +1 -1
  8. package/dist/ui/assets/{account-store-BIWge689.js → account-store-DPU7N0cx.js} +1 -1
  9. package/dist/ui/assets/{account-store-fwzaDw-l.js → account-store-DV19MM14.js} +1 -1
  10. package/dist/ui/assets/{adobe-Dt7h_Eeo.js → adobe-ChzlrFtS.js} +1 -1
  11. package/dist/ui/assets/{adobe-ClIr3I-p.js → adobe-JivCmBzw.js} +1 -1
  12. package/dist/ui/assets/{agent-panels-6vt0IiNY.js → agent-panels-CZRnK6r6.js} +1 -1
  13. package/dist/ui/assets/{almost-bash-shell-headless-aWQGQfiU.js → almost-bash-shell-headless-BzuFWfJx.js} +32 -32
  14. package/dist/ui/assets/{anthropic-messages-DzHtdQv6.js → anthropic-messages-DkH6AeKE.js} +1 -1
  15. package/dist/ui/assets/{apply-layout-CwT2Do6O.js → apply-layout-DK1tk7At.js} +1 -1
  16. package/dist/ui/assets/{apps-Cop3IMqB.js → apps-BOtYHk2V.js} +1 -1
  17. package/dist/ui/assets/{azure-openai-DX46kUX4.js → azure-openai-8WyKNQDc.js} +1 -1
  18. package/dist/ui/assets/{azure-openai-zbk8uXvL.js → azure-openai-B_oKZfwW.js} +1 -1
  19. package/dist/ui/assets/{azure-openai-responses-DUWFmnAS.js → azure-openai-responses-BlGLmNYQ.js} +1 -1
  20. package/dist/ui/assets/{backend-hostfs-Df2XNlz8.js → backend-hostfs-CDnaze3f.js} +1 -1
  21. package/dist/ui/assets/bedrock-camp-BQ8gVLI_.js +1 -0
  22. package/dist/ui/assets/bedrock-camp-ClMYvDsy.js +1 -0
  23. package/dist/ui/assets/{cdp-XN5cbfSn.js → cdp-TKwtUN29.js} +4 -4
  24. package/dist/ui/assets/{cerebras-DiGN-Haj.js → cerebras-BOCP9MIX.js} +1 -1
  25. package/dist/ui/assets/{cerebras-C0GqThJV.js → cerebras-Bg9sQEa5.js} +1 -1
  26. package/dist/ui/assets/{compat-qQM4gjF_.js → compat-Dy2zIWAW.js} +2 -2
  27. package/dist/ui/assets/{composer-speech-C9zLLxJI.js → composer-speech-DC_sSdYk.js} +1 -1
  28. package/dist/ui/assets/{connect-surface-DiTVhpil.js → connect-surface-C2tAdJO4.js} +1 -1
  29. package/dist/ui/assets/{core-DEHCydPY.js → core-D8SLLGdB.js} +1 -1
  30. package/dist/ui/assets/{directed-approval-DhuKdSBd.js → directed-approval-Cr-jwHvt.js} +1 -1
  31. package/dist/ui/assets/{emscripten-vfs-hook-DvF0wI_4.js → emscripten-vfs-hook-D_oRGXFa.js} +1 -1
  32. package/dist/ui/assets/{ensure-speech-assets-CaC3KtN4.js → ensure-speech-assets-Le3eCseO.js} +1 -1
  33. package/dist/ui/assets/{frozen-archive-writer-CZ5Gk5Jm.js → frozen-archive-writer-VpFKTRLh.js} +1 -1
  34. package/dist/ui/assets/{fs-DnZiIMaX.js → fs-C5qc-0Vs.js} +2 -2
  35. package/dist/ui/assets/{fs-_sfsk7nR.js → fs-DnxVqG8S.js} +1 -1
  36. package/dist/ui/assets/{gelatiere-store-CpiC3WMb.js → gelatiere-store-Dd2SBj-h.js} +1 -1
  37. package/dist/ui/assets/{gelatiere-unit-SfjAgxf3.js → gelatiere-unit-i3KpBjAC.js} +1 -1
  38. package/dist/ui/assets/{github-B6Ro4Vyj.js → github-C49eau1p.js} +2 -2
  39. package/dist/ui/assets/{github-vlErpMqL.js → github-ChsDm6km.js} +1 -1
  40. package/dist/ui/assets/{github-auth-CF5dasUt.js → github-auth-NOsjs7VX.js} +1 -1
  41. package/dist/ui/assets/{github-copilot-B4eBPv32.js → github-copilot-DygCcItL.js} +1 -1
  42. package/dist/ui/assets/{github-copilot-CY_TJo2b.js → github-copilot-InUVaY7X.js} +1 -1
  43. package/dist/ui/assets/{github-install-0wR_oHGJ.js → github-install-W2R2vdBh.js} +1 -1
  44. package/dist/ui/assets/{github-zip-DsWAwpGB.js → github-zip-IVtBM0DQ.js} +1 -1
  45. package/dist/ui/assets/{google-generative-ai-mk59e_TJ.js → google-generative-ai-_Gek_V8v.js} +1 -1
  46. package/dist/ui/assets/{google-vertex-DJUeZm26.js → google-vertex-BF9Vjq0f.js} +1 -1
  47. package/dist/ui/assets/{hear-B3Htg_ED.js → hear-DoR-Mb8I.js} +1 -1
  48. package/dist/ui/assets/{help-C8hYsF1D.js → help-Dsyq5Nog.js} +1 -1
  49. package/dist/ui/assets/{installer-CgaA1tWS.js → installer-XF1rrBlO.js} +1 -1
  50. package/dist/ui/assets/{ipk-mamba-LOopc1Fr.js → ipk-mamba-VkehwtJJ.js} +1 -1
  51. package/dist/ui/assets/{js-realm-worker-MHB9dm0v.js → js-realm-worker-BCxOM4nf.js} +2 -2
  52. package/dist/ui/assets/{jsh-executor-mbEWF1Zm.js → jsh-executor-CwG2QLdu.js} +2 -2
  53. package/dist/ui/assets/{kernel-worker-C0D-prE8.js → kernel-worker-B-z88l5w.js} +70 -70
  54. package/dist/ui/assets/{legacy-api-aliases-DtQJ5I7w.js → legacy-api-aliases-DoI0tM7F.js} +1 -1
  55. package/dist/ui/assets/{lick-ws-bridge-D-SjYzwa.js → lick-ws-bridge-CnZAffru.js} +1 -1
  56. package/dist/ui/assets/{lick-ws-bridge-BMOgjdw-.js → lick-ws-bridge-Dr8ndBaj.js} +1 -1
  57. package/dist/ui/assets/{live-session-curation-DBB0BC3B.js → live-session-curation-EtIGz3m_.js} +1 -1
  58. package/dist/ui/assets/{live-session-snapshot-DkrES4VI.js → live-session-snapshot-Chxvnh3i.js} +1 -1
  59. package/dist/ui/assets/{local-llm-CY6c2sXr.js → local-llm-DP9jY8ei.js} +1 -1
  60. package/dist/ui/assets/{local-llm-B6BSSNT-.js → local-llm-IPiYDH2F.js} +1 -1
  61. package/dist/ui/assets/{main-CUMpx04_.js → main-CCtTYJED.js} +3 -3
  62. package/dist/ui/assets/{main-cherry-C6pVbdgb.js → main-cherry-CP8J7wCy.js} +1 -1
  63. package/dist/ui/assets/{memory-curation-seam-CknJYtxR.js → memory-curation-seam-Babzek1S.js} +1 -1
  64. package/dist/ui/assets/{memory-health-DsnSZmSb.js → memory-health-detJjF2Z.js} +1 -1
  65. package/dist/ui/assets/{memory-write-execute-ntAccCje.js → memory-write-execute-DaTYSj3P.js} +1 -1
  66. package/dist/ui/assets/{merge-folded-cost-into-frozen-pKLMgpaS.js → merge-folded-cost-into-frozen-COnnhDR_.js} +1 -1
  67. package/dist/ui/assets/{mistral-conversations-DSJIHP5s.js → mistral-conversations-2yMfObrW.js} +1 -1
  68. package/dist/ui/assets/{models-BSkXF4T6.js → models-YdybRRvT.js} +1 -1
  69. package/dist/ui/assets/{mount-DBdwrDMi.js → mount-DfD8gFP5.js} +1 -1
  70. package/dist/ui/assets/{mount-CkyzZCYy.js → mount-QjQDkMSN.js} +3 -3
  71. package/dist/ui/assets/{new-session-P03v_FCK.js → new-session-UC6BDORV.js} +2 -2
  72. package/dist/ui/assets/{oauth-bootstrap-D9xVBRhw.js → oauth-bootstrap-WrECDaLR.js} +2 -2
  73. package/dist/ui/assets/{onboarding-orchestrator-DH0uHEvH.js → onboarding-orchestrator-CkW7uge6.js} +1 -1
  74. package/dist/ui/assets/{openai-codex-DoyWM1Ht.js → openai-codex-DPJ_vCCM.js} +1 -1
  75. package/dist/ui/assets/{openai-codex-responses-DK0TuYYs.js → openai-codex-responses-BM2lIIbg.js} +1 -1
  76. package/dist/ui/assets/{openai-codex-BBlwDBce.js → openai-codex-wwvKPu2w.js} +1 -1
  77. package/dist/ui/assets/{openai-completions-Vz0p13Z7.js → openai-completions-CkwaxmCT.js} +1 -1
  78. package/dist/ui/assets/{openai-responses-CjehV1Ys.js → openai-responses-CZLQAwyI.js} +1 -1
  79. package/dist/ui/assets/{openai-responses-shared-BN7PRIa9.js → openai-responses-shared-CdC6rVE7.js} +1 -1
  80. package/dist/ui/assets/{openrouter-CSuhnV2D.js → openrouter-BrVi5wZp.js} +1 -1
  81. package/dist/ui/assets/{openrouter-D6arc4g-.js → openrouter-DlaUjjFd.js} +1 -1
  82. package/dist/ui/assets/{openrouter-free-BmtrgcsS.js → openrouter-free-BjAX0noS.js} +1 -1
  83. package/dist/ui/assets/{openrouter-free-mGS0IcRu.js → openrouter-free-DlmWYxx3.js} +1 -1
  84. package/dist/ui/assets/{openrouter-oauth-LxxPcj62.js → openrouter-oauth-CotObMHL.js} +1 -1
  85. package/dist/ui/assets/{openrouter-oauth-BeWa_JYM.js → openrouter-oauth-DEVAARXc.js} +1 -1
  86. package/dist/ui/assets/{opfs-mount-DiGAsjln.js → opfs-mount-C81BQ3Hp.js} +1 -1
  87. package/dist/ui/assets/{panel-rpc-handlers-Dn9LkDA4.js → panel-rpc-handlers-BDpfMaFf.js} +2 -2
  88. package/dist/ui/assets/{panelize-shell-BCnZJqfR.js → panelize-shell-CWND8C1O.js} +1 -1
  89. package/dist/ui/assets/{pi-edit-execution-C8DevsMX.js → pi-edit-execution-DhrrHmSn.js} +1 -1
  90. package/dist/ui/assets/{provider-CoQm7QFw.js → provider-BHN9xujO.js} +2 -2
  91. package/dist/ui/assets/{provider-TW1uhiOX.js → provider-BInQoZGg.js} +1 -1
  92. package/dist/ui/assets/{provider-settings-DuyZH9Vl.js → provider-settings-Bu5gz-LR.js} +1 -1
  93. package/dist/ui/assets/provider-store-access-WdcwS_v-.js +1 -0
  94. package/dist/ui/assets/provider-store-access-_wxLVWcl.js +1 -0
  95. package/dist/ui/assets/{providers-DKsHZCA-.js → providers-CVGcOz8C.js} +1 -1
  96. package/dist/ui/assets/{providers-BxT3TeA_.js → providers-CxLVqA65.js} +2 -2
  97. package/dist/ui/assets/{quick-llm-Bg2Nrvfp.js → quick-llm-BJ58ea-a.js} +1 -1
  98. package/dist/ui/assets/{realm-inprocess-DzH1E2Sz.js → realm-inprocess-EJM3lmZg.js} +2 -2
  99. package/dist/ui/assets/{realm-unhandled-rejections-NauY91jT.js → realm-unhandled-rejections-Bhogzq6N.js} +1 -1
  100. package/dist/ui/assets/{realm-unhandled-rejections-QsexeLeD.js → realm-unhandled-rejections-s-PhYuPd.js} +1 -1
  101. package/dist/ui/assets/{recovery-screen-BF0gjjXu.js → recovery-screen-DGf55I4c.js} +1 -1
  102. package/dist/ui/assets/{remote-terminal-view-DA7UMUr3.js → remote-terminal-view-Bp3lGbMV.js} +2 -2
  103. package/dist/ui/assets/{restore-BEtGf9q0.js → restore-D4J7Iipz.js} +1 -1
  104. package/dist/ui/assets/{run-JnbiSyNj.js → run-4894R-6V.js} +1 -1
  105. package/dist/ui/assets/{run-BQj4zYFq.js → run-CsNup5LG.js} +1 -1
  106. package/dist/ui/assets/{run-CoVp9_Ry.js → run-CwCKQG5L.js} +1 -1
  107. package/dist/ui/assets/{run-CCsrR9by.js → run-DIbAFNVF.js} +2 -2
  108. package/dist/ui/assets/{run-C6DlavC0.js → run-H7FpUL-C.js} +1 -1
  109. package/dist/ui/assets/{run-DrtRMJvT.js → run-WAB2mNcP.js} +2 -2
  110. package/dist/ui/assets/{session-command-memory-BpLXPvLD.js → session-command-memory-B1IiJc6S.js} +2 -2
  111. package/dist/ui/assets/{session-jsonl-B9EILxP9.js → session-jsonl-C5QAPMRG.js} +1 -1
  112. package/dist/ui/assets/{session-jsonl-DxLd1YSX.js → session-jsonl-zVsVHQvd.js} +1 -1
  113. package/dist/ui/assets/{session-search-index-lCF3ljFt.js → session-search-index-TyG0DYjv.js} +1 -1
  114. package/dist/ui/assets/{setup-feature-flags-remote-tTbAi367.js → setup-feature-flags-remote-DyrKcJQ_.js} +1 -1
  115. package/dist/ui/assets/{setup-model-catalog-BSHpsEXu.js → setup-model-catalog-Df-3eMqH.js} +1 -1
  116. package/dist/ui/assets/{signed-fetch-Ua68AiAx.js → signed-fetch-COgfkyhb.js} +1 -1
  117. package/dist/ui/assets/{silent-renew-backoff-BlLiATFB.js → silent-renew-backoff-DR_6_gkt.js} +1 -1
  118. package/dist/ui/assets/slicc-version-BgdYERF-.js +1 -0
  119. package/dist/ui/assets/{snapshot-BhBl90YV.js → snapshot-BYRnZgun.js} +1 -1
  120. package/dist/ui/assets/{snapshot-features-CBi1abGg.js → snapshot-features-DSTI8Xk-.js} +1 -1
  121. package/dist/ui/assets/{soundscape-CV__wATK.js → soundscape-DFt-r2N_.js} +1 -1
  122. package/dist/ui/assets/{speak-cixBBa3H.js → speak-CGCALDqP.js} +1 -1
  123. package/dist/ui/assets/{sprinkle-manager-CLGgMjDC.js → sprinkle-manager-BPEzclVV.js} +1 -1
  124. package/dist/ui/assets/{sprinkle-renderer-Cy7BLn0s.js → sprinkle-renderer-C9P4tF37.js} +1 -1
  125. package/dist/ui/assets/{state-BXsN9U2z.js → state-IyXxuFsn.js} +1 -1
  126. package/dist/ui/assets/{store-BJyU-CYi.js → store-BDCbScJg.js} +1 -1
  127. package/dist/ui/assets/{store-kUYDPLXq.js → store-BqhDES-R.js} +1 -1
  128. package/dist/ui/assets/{sudo-au9s7W2X.js → sudo-CSQogkQw.js} +1 -1
  129. package/dist/ui/assets/{supervisor-B23ZJCMt.js → supervisor-Bt6KNGEa.js} +1 -1
  130. package/dist/ui/assets/{sync-dialog-B7UF9HL4.js → sync-dialog-DyP9oa-d.js} +1 -1
  131. package/dist/ui/assets/{transformers-env-B-a9NNff.js → transformers-env-9Kdr8jF9.js} +1 -1
  132. package/dist/ui/assets/{tray-leader-B_Vq-WZW.js → tray-leader-DPbQ9-cY.js} +1 -1
  133. package/dist/ui/assets/{tray-leave-runtime-CJ9DB8b-.js → tray-leave-runtime-CTKWa3jj.js} +1 -1
  134. package/dist/ui/assets/{tray-sidecar-DGC5RaA1.js → tray-sidecar-DMBX7ZXv.js} +1 -1
  135. package/dist/ui/assets/{upgrade-detection-CtG6sgvq.js → upgrade-detection-kNZzwNpV.js} +1 -1
  136. package/dist/ui/assets/{upskill-lick-skip-CQVojEjb.js → upskill-lick-skip-DeQBgND8.js} +1 -1
  137. package/dist/ui/assets/{voice-reply-BaoXYcfq.js → voice-reply-B2Ov5r4z.js} +1 -1
  138. package/dist/ui/assets/{wc-attach-ChnevSwE.js → wc-attach-PXx7zOo9.js} +2 -2
  139. package/dist/ui/assets/{wc-browser-D5BkgbmD.js → wc-browser-BVPmHApK.js} +1 -1
  140. package/dist/ui/assets/{wc-computers-C80pamWN.js → wc-computers-GFq20Asc.js} +1 -1
  141. package/dist/ui/assets/{wc-detached-BpD5Lm2I.js → wc-detached-BFgijHFC.js} +1 -1
  142. package/dist/ui/assets/{wc-extension-DFZKeSHK.js → wc-extension-ClH2hzKe.js} +2 -2
  143. package/dist/ui/assets/{wc-follower-Dyfqc0rV.js → wc-follower-DRjxOqlY.js} +3 -3
  144. package/dist/ui/assets/{wc-follower-oauth-Czn5aUEf.js → wc-follower-oauth-Dv4HM0CS.js} +1 -1
  145. package/dist/ui/assets/{wc-gelatiere-CbHMk8MW.js → wc-gelatiere-BcT-4QSH.js} +1 -1
  146. package/dist/ui/assets/{wc-live-C_AjU03k.js → wc-live-CTO9I9nC.js} +5 -5
  147. package/dist/ui/assets/{wc-nav-CFWvpLIa.js → wc-nav-23A2dSMz.js} +2 -2
  148. package/dist/ui/assets/{wc-onboarding-CIOt6HoW.js → wc-onboarding-C7IxqgPn.js} +2 -2
  149. package/dist/ui/assets/{wc-permissions-B2Dng0gG.js → wc-permissions-CS69eQxj.js} +2 -2
  150. package/dist/ui/assets/{wc-placeholder-DMOuLW-n.js → wc-placeholder-BhMoGONH.js} +3 -3
  151. package/dist/ui/assets/{wc-secret-request-4kBGCOLm.js → wc-secret-request-CS4jusXt.js} +1 -1
  152. package/dist/ui/assets/{wc-settings-DUAWGFnD.js → wc-settings-CieLSxcx.js} +3 -3
  153. package/dist/ui/assets/{wc-shell-BoXgif1h.js → wc-shell-BK14Hdh_.js} +3 -3
  154. package/dist/ui/assets/{wc-shortcut-config-DcFa5MNI.js → wc-shortcut-config-B06eYu9d.js} +1 -1
  155. package/dist/ui/assets/{wc-sprinkles-D-inHzhw.js → wc-sprinkles-hFRbzywq.js} +2 -2
  156. package/dist/ui/assets/{wc-transcript-export-BCgcOhv0.js → wc-transcript-export-DOqtuC95.js} +2 -2
  157. package/dist/ui/assets/wc-tray-zDNVj29T.js +5 -0
  158. package/dist/ui/assets/welcome-detection-le5-bkR_.js +1 -0
  159. package/dist/ui/assets/{whisper-session-Bs5HxMaY.js → whisper-session-DO48ERvc.js} +2 -2
  160. package/dist/ui/assets/{xai-grok-BFuf62tf.js → xai-grok-CqRCInHV.js} +1 -1
  161. package/dist/ui/assets/{xai-grok-BR_Z9tbO.js → xai-grok-fxnzs1zt.js} +1 -1
  162. package/dist/ui/index.html +6 -6
  163. package/dist/ui/packages/webapp/index.html +6 -6
  164. package/package.json +2 -2
  165. package/dist/ui/assets/bedrock-camp-CMfZujT_.js +0 -1
  166. package/dist/ui/assets/bedrock-camp-Ck_nFSMy.js +0 -1
  167. package/dist/ui/assets/provider-store-access-BqCZs6PG.js +0 -1
  168. package/dist/ui/assets/provider-store-access-C_esRWyN.js +0 -1
  169. package/dist/ui/assets/slicc-version-DYbMRVIh.js +0 -1
  170. package/dist/ui/assets/wc-tray-BBorz0ro.js +0 -5
  171. package/dist/ui/assets/welcome-detection-CDOBtsDy.js +0 -1
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{C as t,S as n,_ as r,a as i,b as a,c as o,f as s,g as c,h as l,i as u,m as d,o as f,p,r as m,s as h,t as ee,u as g,v as te,x as ne,y as re}from"./almost-bash-shell-headless-aWQGQfiU.js";import{t as _}from"./logger-LESFN7Hj.js";import{r as ie,t as ae}from"./base64-BPBW1Gzr.js";import{i as oe,r as se}from"./handoff-link-B3It6xQY.js";import{a as ce,b as le,f as ue,g as de,h as fe,i as pe,m as me,p as he,v as ge,x as _e,y as ve}from"./account-store-fwzaDw-l.js";import{n as ye}from"./proxied-fetch-DXaTHROw.js";import{t as be}from"./slugify-BYJ6QVAt.js";import{i as xe,n as Se,t as Ce}from"./archive-redaction-ByV7X5fs.js";import{i as we,r as Te}from"./host-command-guuPK7VN.js";import{o as Ee}from"./snapshot-BhBl90YV.js";import{n as De,r as Oe}from"./panel-rpc-DW7W4w6_.js";import{i as ke,l as Ae,o as je,r as Me}from"./feature-flags-QlgHaQc1.js";import{a as Ne,t as Pe}from"./providers-DKsHZCA-.js";import{c as Fe,d as Ie,o as Le,s as Re,t as ze,u as Be}from"./api-endpoint-D8lUKmPu.js";import{$ as Ve,A as He,At as Ue,B as We,C as Ge,Ct as Ke,D as qe,Dt as v,E as Je,Et as Ye,F as Xe,H as Ze,I as Qe,J as $e,K as et,L as tt,M as nt,Mt as y,N as rt,Nt as it,O as at,Ot as ot,P as st,Q as ct,R as lt,St as ut,T as dt,Tt as b,U as ft,V as pt,W as mt,X as ht,Y as gt,Z as _t,_ as vt,_t as yt,a as bt,at as x,b as xt,bt as St,c as Ct,ct as S,d as wt,dt as Tt,et as Et,f as Dt,ft as Ot,g as kt,gt as At,h as jt,ht as Mt,i as Nt,it as Pt,j as Ft,jt as It,k as Lt,kt as C,l as Rt,lt as zt,m as Bt,mt as Vt,n as Ht,nt as Ut,o as Wt,ot as Gt,p as Kt,pt as w,q as qt,r as Jt,rt as T,s as Yt,st as E,t as Xt,tt as Zt,u as Qt,ut as $t,v as en,vt as tn,w as nn,wt as D,x as rn,xt as an,y as on,yt as sn,z as cn}from"./build-BRNa03GH.js";import{a as ln}from"./models-4WTk3EBD.js";import{o as un,t as dn}from"./compat-uEPf6-XW.js";import{a as fn,r as pn,t as mn}from"./core-VO3EvqHP.js";import{i as hn,n as gn,r as _n,t as vn}from"./context-compaction-Dpr7xgBZ.js";import{t as yn}from"./secrets-bridge-client-BiJrSKN9.js";import{n as bn,t as xn}from"./image-markers-CwM1dvoI.js";import{i as Sn}from"./tool-ui-DRnUkp2g.js";import{c as Cn,t as wn}from"./claude-model-version-ceOteQ2f.js";import{a as Tn,n as En,t as Dn}from"./path-utils-DNJG-zQf.js";import{t as On}from"./merge-file-core-VJlzucJY.js";import{i as kn,n as An,r as jn,t as Mn}from"./workspace-mode-D0kUKBVS.js";import{C as Nn,D as Pn,E as O,O as Fn,S as In,T as Ln,_ as Rn,a as zn,c as Bn,d as Vn,f as Hn,g as Un,h as Wn,l as Gn,m as Kn,n as qn,o as Jn,p as Yn,r as Xn,s as Zn,t as Qn,u as $n,v as er,w as tr,y as nr}from"./record-COQlaFL1.js";import{a as rr,c as ir,d as ar,i as or,l as sr,n as cr,o as lr,r as ur,s as dr,u as fr}from"./descriptor-CKLcFFX3.js";import{n as pr,t as mr}from"./thinking-level-5x0UAu9N.js";import{t as k}from"./types-D8gIX-W-.js";import{i as hr,n as gr}from"./mount-index-CQfmUPuZ.js";import{a as _r,i as vr,n as yr,r as br,s as xr,t as Sr}from"./signed-fetch-Ua68AiAx.js";import{n as Cr}from"./mount-table-store-DrF_Ifaz.js";import{t as wr}from"./remote-cache-UwMD8EkX.js";import"./mount-DBdwrDMi.js";import{i as Tr,n as Er,r as Dr}from"./fs-_sfsk7nR.js";import{i as Or,n as kr,t as Ar}from"./key-B2Bki3fU.js";import{n as jr,r as Mr,t as Nr}from"./tray-leader-status-CpkFr6n7.js";import"./tray-runtime-config-CTm013-K.js";import{r as Pr}from"./slicc-version-DYbMRVIh.js";import{r as Fr}from"./virtual-device-paths-CS5o4QVz.js";import{a as Ir,i as Lr,r as Rr}from"./cost-command-D0tJNxsl.js";import{_ as zr,a as Br,c as Vr,d as Hr,f as Ur,g as Wr,h as Gr,l as Kr,m as qr,n as Jr,p as Yr,r as Xr,s as Zr,t as Qr,u as $r,v as ei}from"./sudoers-BdBYQPUn.js";import{n as ti,r as ni,t as ri}from"./sudo-fs-CGjo9awW.js";import{t as ii}from"./llm-session-id-BZyXP_j2.js";import{t as ai}from"./src-CUSndb9K.js";import{a as oi,i as si,n as ci,o as li,s as ui}from"./memory-budget-CFfevxz_.js";import{i as di}from"./browser-DuyhpHbR.js";import{t as fi}from"./jsh-discovery-CnvNKojr.js";import{t as pi}from"./process-manager-BkhAohXT.js";import{i as mi,o as hi,r as gi,t as _i}from"./jsh-executor-mbEWF1Zm.js";import{C as vi,_ as yi,b as bi,f as xi,h as Si,l as Ci,n as wi,r as Ti,x as Ei}from"./sync-exec-dispatch-BwrIjhDd.js";import{n as Di}from"./just-bash-compat-B-SPHuh_.js";import{t as Oi}from"./lick-target-env-8JxfVcIV.js";const ki=[`/workspace`,`/shared`,`/scoops`,`/home`];var Ai=class{pending=new Map;issue(e,t,n){return new Promise((r,i)=>{let a=setTimeout(()=>{this.pending.delete(e),i(Error(n))},t);this.pending.set(e,{resolve:r,reject:i,timer:a})})}has(e){return this.pending.has(e)}resolve(e,t){this.take(e)?.resolve(t)}reject(e,t){this.take(e)?.reject(t)}rejectAll(e){for(let[,t]of this.pending)clearTimeout(t.timer),t.reject(Error(e));this.pending.clear()}get size(){return this.pending.size}take(e){let t=this.pending.get(e);if(t)return this.pending.delete(e),clearTimeout(t.timer),t}};function ji(e,t,n,r){return new Promise((i,a)=>{if(r?.signal?.aborted){a(r.error());return}let o=null,s=!1,c,l=()=>{s=!0,clearTimeout(u),c&&r?.signal?.removeEventListener(`abort`,c),o?.()},u=setTimeout(()=>{l(),a(Error(n))},t);r?.signal&&(c=()=>{l(),a(r.error())},r.signal.addEventListener(`abort`,c,{once:!0})),o=e(e=>{l(),i(e)}),s&&o()})}const Mi=_(`cdp`);function Ni(e){return e===4001?`CDP connection superseded by another SLICC tab/window on this instance`:e===4002?`CDP connection reset by proxy (upstream Chrome connection was re-established)`:`CDP connection closed`}var Pi=class{ws=null;nextId=1;_superseded=!1;pending=new Ai;listeners=new Map;_state=`disconnected`;stateListeners=new Set;lastNotifiedState=`disconnected`;lastNotifiedReason;get state(){return this._state}onStateChange(e){return this.stateListeners.add(e),()=>{this.stateListeners.delete(e)}}get superseded(){return this._superseded}async connect(e){if(this._state!==`disconnected`)throw Error(`Cannot connect: state is ${this._state}`);if(!e?.url)throw Error(`CDPClient.connect() requires a WebSocket URL`);let{url:t,timeout:n=5e3,protocols:r}=e;return this._state=`connecting`,new Promise((e,i)=>{let a=setTimeout(()=>{this.cleanup(),i(Error(`CDP connection timed out after ${n}ms`))},n);try{this.ws=r===void 0?new WebSocket(t):new WebSocket(t,r)}catch(e){clearTimeout(a),this._state=`disconnected`,i(e);return}this.ws.onopen=()=>{clearTimeout(a),this._state=`connected`,this._superseded=!1,Mi.info(`Connected`,{url:t}),this.notifyState(`connected`),e()},this.ws.onerror=e=>{clearTimeout(a),this._state===`connecting`&&(Mi.error(`Connection failed`,{url:t}),this.cleanup(),i(Error(`CDP WebSocket connection failed`)))},this.ws.onmessage=e=>{this.handleMessage(e.data)},this.ws.onclose=e=>{this.handleClose(e?.code)}})}disconnect(){this.ws&&(this.ws.onclose=null,this.ws.close()),this._superseded=!1,this.cleanup(),Mi.info(`Disconnected`)}async send(e,t,n,r=3e4){if(this._state!==`connected`||!this.ws)throw Error(`CDP client is not connected`);let i=this.nextId++,a={id:i,method:e};t&&(a.params=t),n&&(a.sessionId=n),Mi.debug(`Send`,{method:e,id:i,sessionId:n});let o=this.pending.issue(i,r,`CDP command timed out after ${r}ms: ${e}`);return this.ws.send(JSON.stringify(a)),o}on(e,t){let n=this.listeners.get(e);n||(n=new Set,this.listeners.set(e,n)),n.add(t)}off(e,t){let n=this.listeners.get(e);n&&(n.delete(t),n.size===0&&this.listeners.delete(e))}once(e,t=3e4){return ji(t=>(this.on(e,t),()=>this.off(e,t)),t,`Timed out waiting for event: ${e}`)}handleMessage(e){let t;try{t=JSON.parse(e)}catch{return}if(`id`in t&&typeof t.id==`number`){let e=t;Mi.debug(`Response`,{id:e.id,hasError:!!e.error}),e.error?(Mi.error(`Command error`,{id:e.id,code:e.error.code,message:e.error.message}),this.pending.reject(e.id,Error(`CDP error: ${e.error.message} (${e.error.code})`))):this.pending.resolve(e.id,e.result??{});return}if(`method`in t){let e=t;Mi.debug(`Event`,{method:e.method,sessionId:e.sessionId});let n=this.listeners.get(e.method);if(n){let t=e.sessionId?{...e.params,sessionId:e.sessionId}:e.params??{};for(let e of n)try{e(t)}catch{}}}}handleClose(e){e===4001?(this._superseded=!0,Mi.warn(`CDP slot superseded by another SLICC tab/window on this instance`,{code:e})):e===4002?Mi.warn(`CDP proxy reset its upstream Chrome connection — sessions dropped`,{code:e,pendingCommands:this.pending.size}):Mi.error(`Connection closed unexpectedly`,{pendingCommands:this.pending.size}),this.cleanup(Ni(e))}cleanup(e=`CDP client disconnected`){this.ws=null,this._state=`disconnected`,this.pending.rejectAll(e),this.notifyState(`disconnected`,e)}notifyState(e,t){if(e!==this.lastNotifiedState||t!==this.lastNotifiedReason){this.lastNotifiedState=e,this.lastNotifiedReason=t;for(let n of this.stateListeners)try{n(e,t)}catch{}}}};function Fi(e){for(let t of e)if(t.rel.includes(`ai-catalog`))return{kind:`ai-catalog`,url:t.href};return null}function Ii(e){return[e.origin??``,e.kind??``,e.url??``].join(`\0`)}const Li=[{kind:`ai-catalog`,path:`/.well-known/ai-catalog.json`},{kind:`llms-txt`,path:`/llms.txt`}];async function Ri(e,t,n={}){let r=n.timeoutMs??3e3,i;try{i=new URL(e).origin}catch{return[]}return(await Promise.all(Li.map(e=>zi(i,e,t,r)))).filter(e=>e!==null)}async function zi(e,t,n,r){let i=e+t.path,a=new AbortController,o=setTimeout(()=>a.abort(Error(`timeout`)),r);try{let e=await n(i,{method:`GET`,signal:a.signal,redirect:`manual`,credentials:`omit`});return e.status!==200||!Bi(e.headers.get(`content-type`),t.kind)?null:{kind:t.kind,url:i}}catch{return null}finally{clearTimeout(o)}}function Bi(e,t){if(e==null)return!0;let n=e.toLowerCase();return n.length===0?!0:n.includes(`text/html`)||n.includes(`application/xhtml`)?!1:t===`ai-catalog`?n.includes(`json`)||n.includes(`text/plain`)||n.includes(`octet-stream`):n.includes(`text/plain`)||n.includes(`markdown`)||n.includes(`octet-stream`)}const Vi=3e4;var Hi=class extends Error{constructor(e=`CDP bridge rejected the session token (bridge-token-required). Open SLICC again from Sliccstart to pick up a fresh token.`){super(e),this.name=`CdpBridgeRejectedError`}},Ui=class extends Error{constructor(){super(`CDP reconnect is backing off`),this.name=`CdpReconnectBackoffError`}};function Wi(e,t=Math.random){let n=Math.min(Vi,250*2**Math.min(Math.max(0,e),16)),r=Math.round(n*.2*t());return Math.min(Vi,n+r)}var Gi=class extends Error{step;name=`CommandAbortedError`;constructor(e){super(`Browser command aborted while ${e}. A CDP round trip already in flight cannot be cancelled, so it may still have been applied to the page; nothing after it was started.`),this.step=e}};function Ki(e,t){if(e?.aborted)throw new Gi(t)}function qi(e,t){return e?{signal:e,error:()=>new Gi(t)}:void 0}function Ji(e,t,n){return new Promise((r,i)=>{if(t?.aborted){i(new Gi(n));return}let a=()=>{clearTimeout(o),i(new Gi(n))},o=setTimeout(()=>{t?.removeEventListener(`abort`,a),r()},e);t?.addEventListener(`abort`,a,{once:!0})})}function Yi(e,t,n){return t?t.aborted?Promise.reject(new Gi(n)):new Promise((r,i)=>{let a=()=>i(new Gi(n));t.addEventListener(`abort`,a,{once:!0}),e.then(()=>{t.removeEventListener(`abort`,a),r()},e=>{t.removeEventListener(`abort`,a),i(e instanceof Error?e:Error(String(e)))})}):e}const Xi=_(`har-recorder`);var Zi=class{recordings=new Map;client;fs;eventCleanup=new Map;constructor(e,t){this.client=e,this.fs=t}async startRecording(e,t,n,r){let i=`rec-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;Ki(r,`about to enable Network on tab ${e}`),await this.client.send(`Network.enable`,{},t),Ki(r,`about to enable Page on tab ${e}`),await this.client.send(`Page.enable`,{},t),Ki(r,`about to read the URL of tab ${e}`);let a=(await this.client.send(`Runtime.evaluate`,{expression:`location.href`,returnByValue:!0},t)).result?.value??`about:blank`,o={id:i,targetId:e,sessionId:t,filterCode:n,pendingRequests:new Map,entries:[],startTime:Date.now(),currentUrl:a,snapshotCount:0};return this.recordings.set(i,o),this.setupEventListeners(o),await this.ensureDir(`/recordings/${i}`),Xi.debug(`Started recording`,{recordingId:i,targetId:e,currentUrl:a}),i}setupEventListeners(e){let{sessionId:t,id:n}=e,r=n=>{let r=n;r.sessionId===t&&this.handleRequestWillBeSent(e,r)},i=n=>{let r=n;r.sessionId===t&&this.handleResponseReceived(e,r)},a=r=>{let i=r;i.sessionId===t&&this.handleLoadingFinished(e,i).catch(e=>{Xi.error(`Failed to process loadingFinished event`,{recordingId:n,requestId:i.requestId,error:e instanceof Error?e.message:String(e)})})},o=n=>{let r=n;r.sessionId===t&&this.handleLoadingFailed(e,r)},s=r=>{let i=r;if(i.sessionId!==t)return;let a=i.frame;if(!a?.parentId&&a?.url){let t=[...e.entries],r=e.currentUrl;e.currentUrl=a.url,e.entries=[],e.pendingRequests.clear(),this.saveSnapshotWithEntries(e,`navigation`,t,r).catch(e=>{Xi.error(`Failed to save navigation snapshot`,{recordingId:n,error:e instanceof Error?e.message:String(e)})})}};this.client.on(`Network.requestWillBeSent`,r),this.client.on(`Network.responseReceived`,i),this.client.on(`Network.loadingFinished`,a),this.client.on(`Network.loadingFailed`,o),this.client.on(`Page.frameNavigated`,s),this.eventCleanup.set(n,()=>{this.client.off(`Network.requestWillBeSent`,r),this.client.off(`Network.responseReceived`,i),this.client.off(`Network.loadingFinished`,a),this.client.off(`Network.loadingFailed`,o),this.client.off(`Page.frameNavigated`,s)})}handleRequestWillBeSent(e,t){let{requestId:n,request:r,timestamp:i}=t;!n||!r||i==null||e.pendingRequests.set(n,{requestId:n,startTime:i*1e3,request:{method:r.method,url:r.url,headers:r.headers,postData:r.postData}})}handleResponseReceived(e,t){let{requestId:n,response:r}=t;if(!n||!r)return;let i=e.pendingRequests.get(n);i&&(i.response={status:r.status,statusText:r.statusText,headers:r.headers,mimeType:r.mimeType},i.timing=r.timing)}async handleLoadingFinished(e,t){let{requestId:n,timestamp:r}=t;if(!n||r==null)return;let i=e.pendingRequests.get(n);if(!i)return;i.endTime=r*1e3;try{let t=await this.client.send(`Network.getResponseBody`,{requestId:n},e.sessionId);i.responseBody=t.body,i.responseBodyBase64=t.base64Encoded===!0}catch{}let a=this.buildHarEntry(i);a&&e.entries.push(a),e.pendingRequests.delete(n)}handleLoadingFailed(e,t){let{requestId:n}=t;n&&e.pendingRequests.delete(n)}buildHarEntry(e){if(!e.response)return null;let{request:t,response:n,timing:r,startTime:i,endTime:a,responseBody:o,responseBodyBase64:s}=e,c=a?a-i:0,l=[];try{let e=new URL(t.url);l=Array.from(e.searchParams.entries()).map(([e,t])=>({name:e,value:t}))}catch{}let u=r?(()=>{let e=(e,t)=>{if(e==null||t==null||e<0||t<0)return-1;let n=t-e;return n>=0?n:-1},t=r.dnsStart>=0?r.dnsStart:r.connectStart>=0?r.connectStart:0;return{blocked:t>0?t:-1,dns:e(r.dnsStart,r.dnsEnd),connect:e(r.connectStart,r.connectEnd),ssl:e(r.sslStart,r.sslEnd),send:e(r.sendStart,r.sendEnd),wait:e(r.sendEnd,r.receiveHeadersStart),receive:e(r.receiveHeadersStart,r.receiveHeadersEnd)}})():{blocked:-1,dns:-1,connect:-1,ssl:-1,send:0,wait:c,receive:0},d={size:o?.length??0,mimeType:n.mimeType??`application/octet-stream`};o&&(d.text=o,s&&(d.encoding=`base64`));let f;return t.postData&&(f={mimeType:t.headers[`content-type`]??t.headers[`Content-Type`]??`text/plain`,text:t.postData}),{startedDateTime:new Date(i).toISOString(),time:c,request:{method:t.method,url:t.url,httpVersion:`HTTP/1.1`,cookies:[],headers:Object.entries(t.headers).map(([e,t])=>({name:e,value:t})),queryString:l,postData:f,headersSize:-1,bodySize:t.postData?.length??0},response:{status:n.status,statusText:n.statusText,httpVersion:`HTTP/1.1`,cookies:[],headers:Object.entries(n.headers).map(([e,t])=>({name:e,value:t})),content:d,redirectURL:n.headers.location??n.headers.Location??``,headersSize:-1,bodySize:d.size},cache:{},timings:u}}async saveSnapshot(e,t){return this.saveSnapshotWithEntries(e,t,e.entries,e.currentUrl)}async applyFilter(e,t){return Qi(e,t)}async saveSnapshotWithEntries(e,t,n,r){if(n.length===0)return Xi.debug(`No entries to save`,{recordingId:e.id,trigger:t}),null;let i=e.filterCode?await this.applyFilter(n,e.filterCode):n;if(i.length===0)return Xi.debug(`All entries filtered out`,{recordingId:e.id,trigger:t}),null;e.snapshotCount++;let a=new Date().toISOString().replace(/[:.]/g,`-`),o=this.urlToSlug(r),s=`${e.snapshotCount.toString().padStart(3,`0`)}-${a}-${t}-${o}.har`,c=`/recordings/${e.id}/${s}`,l={log:{version:`1.2`,creator:{name:`SLICC HAR Recorder`,version:`1.0.0`},entries:i}};return await this.fs.writeFile(c,JSON.stringify(l,null,2)),Xi.debug(`Saved HAR snapshot`,{recordingId:e.id,path:c,entryCount:i.length}),c}urlToSlug(e){try{let t=new URL(e);return`${t.hostname}${t.pathname}`.replace(/[^a-zA-Z0-9]/g,`-`).replace(/-+/g,`-`).replace(/^-|-$/g,``).slice(0,50)||`page`}catch{return`page`}}async stopRecording(e){let t=this.recordings.get(e);if(!t)throw Error(`Recording not found: ${e}`);await this.saveSnapshot(t,`close`);let n=this.eventCleanup.get(e);n&&(n(),this.eventCleanup.delete(e));try{await this.client.send(`Network.disable`,{},t.sessionId)}catch{}this.recordings.delete(e);let r=`/recordings/${e}`;return Xi.debug(`Stopped recording`,{recordingId:e,snapshotCount:t.snapshotCount}),r}getRecording(e){return this.recordings.get(e)}getRecordingByTarget(e){for(let[t,n]of this.recordings)if(n.targetId===e)return t}async ensureDir(e){await this.fs.mkdir(e,{recursive:!0})}};function Qi(e,t){try{let n=Function(`entry`,`return (${t})(entry);`),r=[];for(let t of e)try{let e=n(t);if(e===!1)continue;typeof e==`object`&&e?r.push(e):r.push(t)}catch(e){Xi.error(`Filter function error on entry, keeping it`,{error:e instanceof Error?e.message:String(e)}),r.push(t)}return r}catch(t){return Xi.error(`Failed to compile filter, returning unfiltered`,{error:t instanceof Error?t.message:String(t)}),e}}var $i=class{maxSessions;onEvict;sessions=new Map;pinnedTargets=new Map;appliedSends=new Map;constructor(e=32,t){this.maxSessions=e,this.onEvict=t}get size(){return this.sessions.size}get(e){return this.sessions.get(e)}has(e){return this.sessions.has(e)}values(){return this.sessions.values()}entries(){return this.sessions.entries()}snapshot(){return[...this.sessions]}remember(e,t){this.pruneAppliedSends(),this.sessions.set(e,t),this.enforceCap(e)}touch(e,t){this.sessions.delete(e),this.sessions.set(e,t)}take(e){let t=this.sessions.get(e);return t&&this.sessions.delete(e),t}delete(e){this.sessions.delete(e)}clear(){this.sessions.clear()}pin(e){this.pinnedTargets.set(e,(this.pinnedTargets.get(e)??0)+1);let t=!1;return()=>{if(t)return;t=!0;let n=(this.pinnedTargets.get(e)??1)-1;n>0?this.pinnedTargets.set(e,n):this.pinnedTargets.delete(e),this.enforceCap()}}isPinned(e){return this.pinnedTargets.has(e)}enforceCap(e){for(;this.sessions.size>this.maxSessions;){let t;for(let n of this.sessions.keys())if(!(n===e||this.pinnedTargets.has(n))){t=n;break}if(t===void 0)return;let n=this.sessions.get(t);this.sessions.delete(t),n&&this.onEvict?.(t,n)}}noteApplied(e){this.appliedSends.set(e,(this.appliedSends.get(e)??0)+1)}appliedCount(e){return this.appliedSends.get(e)??0}pruneAppliedSends(){if(this.appliedSends.size<=this.maxSessions*4)return;let e=new Set([...this.sessions.values()].map(e=>e.sessionId));for(let t of[...this.appliedSends.keys()])e.has(t)||this.appliedSends.delete(t)}findBySessionId(e){for(let[t,n]of this.sessions)if(n.sessionId===e)return[t,n]}findByTargetOrLocalId(e){let t=[];for(let[n,r]of this.sessions)(n===e||r.remote?.localTargetId===e)&&t.push([n,r]);return t}anyOnTransport(e){for(let t of this.sessions.values())if(t.transport===e)return!0;return!1}anyMatchingRemote(e,t){for(let n of this.sessions.values())if(n.remote?.runtimeId===e&&n.remote.localTargetId===t)return!0;return!1}};const ea=`(function() {
1
+ import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{C as t,S as n,_ as r,a as i,b as a,c as o,f as s,g as c,h as l,i as u,m as d,o as f,p,r as m,s as h,t as ee,u as g,v as te,x as ne,y as re}from"./almost-bash-shell-headless-BzuFWfJx.js";import{t as _}from"./logger-LESFN7Hj.js";import{r as ie,t as ae}from"./base64-BPBW1Gzr.js";import{i as oe,r as se}from"./handoff-link-B3It6xQY.js";import{a as ce,b as le,f as ue,g as de,h as fe,i as pe,m as me,p as he,v as ge,x as _e,y as ve}from"./account-store-DV19MM14.js";import{n as ye}from"./proxied-fetch-DXaTHROw.js";import{t as be}from"./slugify-BYJ6QVAt.js";import{i as xe,n as Se,t as Ce}from"./archive-redaction-ByV7X5fs.js";import{i as we,r as Te}from"./host-command-guuPK7VN.js";import{o as Ee}from"./snapshot-BYRnZgun.js";import{n as De,r as Oe}from"./panel-rpc-DW7W4w6_.js";import{i as ke,l as Ae,o as je,r as Me}from"./feature-flags-QlgHaQc1.js";import{a as Ne,t as Pe}from"./providers-CVGcOz8C.js";import{c as Fe,d as Ie,o as Le,s as Re,t as ze,u as Be}from"./api-endpoint-D8lUKmPu.js";import{$ as Ve,A as He,At as Ue,B as We,C as Ge,Ct as Ke,D as qe,Dt as v,E as Je,Et as Ye,F as Xe,H as Ze,I as Qe,J as $e,K as et,L as tt,M as nt,Mt as y,N as rt,Nt as it,O as at,Ot as ot,P as st,Q as ct,R as lt,St as ut,T as dt,Tt as b,U as ft,V as pt,W as mt,X as ht,Y as gt,Z as _t,_ as vt,_t as yt,a as bt,at as x,b as xt,bt as St,c as Ct,ct as S,d as wt,dt as Tt,et as Et,f as Dt,ft as Ot,g as kt,gt as At,h as jt,ht as Mt,i as Nt,it as Pt,j as Ft,jt as It,k as Lt,kt as C,l as Rt,lt as zt,m as Bt,mt as Vt,n as Ht,nt as Ut,o as Wt,ot as Gt,p as Kt,pt as w,q as qt,r as Jt,rt as T,s as Yt,st as E,t as Xt,tt as Zt,u as Qt,ut as $t,v as en,vt as tn,w as nn,wt as D,x as rn,xt as an,y as on,yt as sn,z as cn}from"./build-BRNa03GH.js";import{a as ln}from"./models-4WTk3EBD.js";import{o as un,t as dn}from"./compat-uEPf6-XW.js";import{a as fn,r as pn,t as mn}from"./core-VO3EvqHP.js";import{i as hn,n as gn,r as _n,t as vn}from"./context-compaction-Dpr7xgBZ.js";import{t as yn}from"./secrets-bridge-client-BiJrSKN9.js";import{n as bn,t as xn}from"./image-markers-CwM1dvoI.js";import{i as Sn}from"./tool-ui-DRnUkp2g.js";import{c as Cn,t as wn}from"./claude-model-version-ceOteQ2f.js";import{a as Tn,n as En,t as Dn}from"./path-utils-DNJG-zQf.js";import{t as On}from"./merge-file-core-VJlzucJY.js";import{i as kn,n as An,r as jn,t as Mn}from"./workspace-mode-D0kUKBVS.js";import{C as Nn,D as Pn,E as O,O as Fn,S as In,T as Ln,_ as Rn,a as zn,c as Bn,d as Vn,f as Hn,g as Un,h as Wn,l as Gn,m as Kn,n as qn,o as Jn,p as Yn,r as Xn,s as Zn,t as Qn,u as $n,v as er,w as tr,y as nr}from"./record-COQlaFL1.js";import{a as rr,c as ir,d as ar,i as or,l as sr,n as cr,o as lr,r as ur,s as dr,u as fr}from"./descriptor-CKLcFFX3.js";import{n as pr,t as mr}from"./thinking-level-5x0UAu9N.js";import{t as k}from"./types-D8gIX-W-.js";import{i as hr,n as gr}from"./mount-index-CQfmUPuZ.js";import{a as _r,i as vr,n as yr,r as br,s as xr,t as Sr}from"./signed-fetch-COgfkyhb.js";import{n as Cr}from"./mount-table-store-DrF_Ifaz.js";import{t as wr}from"./remote-cache-UwMD8EkX.js";import"./mount-DfD8gFP5.js";import{i as Tr,n as Er,r as Dr}from"./fs-DnxVqG8S.js";import{i as Or,n as kr,t as Ar}from"./key-B2Bki3fU.js";import{n as jr,r as Mr,t as Nr}from"./tray-leader-status-CpkFr6n7.js";import"./tray-runtime-config-CTm013-K.js";import{r as Pr}from"./slicc-version-BgdYERF-.js";import{r as Fr}from"./virtual-device-paths-CS5o4QVz.js";import{a as Ir,i as Lr,r as Rr}from"./cost-command-D0tJNxsl.js";import{_ as zr,a as Br,c as Vr,d as Hr,f as Ur,g as Wr,h as Gr,l as Kr,m as qr,n as Jr,p as Yr,r as Xr,s as Zr,t as Qr,u as $r,v as ei}from"./sudoers-BdBYQPUn.js";import{n as ti,r as ni,t as ri}from"./sudo-fs-CGjo9awW.js";import{t as ii}from"./llm-session-id-BZyXP_j2.js";import{t as ai}from"./src-CUSndb9K.js";import{a as oi,i as si,n as ci,o as li,s as ui}from"./memory-budget-CFfevxz_.js";import{i as di}from"./browser-DuyhpHbR.js";import{t as fi}from"./jsh-discovery-CnvNKojr.js";import{t as pi}from"./process-manager-BkhAohXT.js";import{i as mi,o as hi,r as gi,t as _i}from"./jsh-executor-CwG2QLdu.js";import{C as vi,_ as yi,b as bi,f as xi,h as Si,l as Ci,n as wi,r as Ti,x as Ei}from"./sync-exec-dispatch-BwrIjhDd.js";import{n as Di}from"./just-bash-compat-B-SPHuh_.js";import{t as Oi}from"./lick-target-env-8JxfVcIV.js";const ki=[`/workspace`,`/shared`,`/scoops`,`/home`];var Ai=class{pending=new Map;issue(e,t,n){return new Promise((r,i)=>{let a=setTimeout(()=>{this.pending.delete(e),i(Error(n))},t);this.pending.set(e,{resolve:r,reject:i,timer:a})})}has(e){return this.pending.has(e)}resolve(e,t){this.take(e)?.resolve(t)}reject(e,t){this.take(e)?.reject(t)}rejectAll(e){for(let[,t]of this.pending)clearTimeout(t.timer),t.reject(Error(e));this.pending.clear()}get size(){return this.pending.size}take(e){let t=this.pending.get(e);if(t)return this.pending.delete(e),clearTimeout(t.timer),t}};function ji(e,t,n,r){return new Promise((i,a)=>{if(r?.signal?.aborted){a(r.error());return}let o=null,s=!1,c,l=()=>{s=!0,clearTimeout(u),c&&r?.signal?.removeEventListener(`abort`,c),o?.()},u=setTimeout(()=>{l(),a(Error(n))},t);r?.signal&&(c=()=>{l(),a(r.error())},r.signal.addEventListener(`abort`,c,{once:!0})),o=e(e=>{l(),i(e)}),s&&o()})}const Mi=_(`cdp`);function Ni(e){return e===4001?`CDP connection superseded by another SLICC tab/window on this instance`:e===4002?`CDP connection reset by proxy (upstream Chrome connection was re-established)`:`CDP connection closed`}var Pi=class{ws=null;nextId=1;_superseded=!1;pending=new Ai;listeners=new Map;_state=`disconnected`;stateListeners=new Set;lastNotifiedState=`disconnected`;lastNotifiedReason;get state(){return this._state}onStateChange(e){return this.stateListeners.add(e),()=>{this.stateListeners.delete(e)}}get superseded(){return this._superseded}async connect(e){if(this._state!==`disconnected`)throw Error(`Cannot connect: state is ${this._state}`);if(!e?.url)throw Error(`CDPClient.connect() requires a WebSocket URL`);let{url:t,timeout:n=5e3,protocols:r}=e;return this._state=`connecting`,new Promise((e,i)=>{let a=setTimeout(()=>{this.cleanup(),i(Error(`CDP connection timed out after ${n}ms`))},n);try{this.ws=r===void 0?new WebSocket(t):new WebSocket(t,r)}catch(e){clearTimeout(a),this._state=`disconnected`,i(e);return}this.ws.onopen=()=>{clearTimeout(a),this._state=`connected`,this._superseded=!1,Mi.info(`Connected`,{url:t}),this.notifyState(`connected`),e()},this.ws.onerror=e=>{clearTimeout(a),this._state===`connecting`&&(Mi.error(`Connection failed`,{url:t}),this.cleanup(),i(Error(`CDP WebSocket connection failed`)))},this.ws.onmessage=e=>{this.handleMessage(e.data)},this.ws.onclose=e=>{this.handleClose(e?.code)}})}disconnect(){this.ws&&(this.ws.onclose=null,this.ws.close()),this._superseded=!1,this.cleanup(),Mi.info(`Disconnected`)}async send(e,t,n,r=3e4){if(this._state!==`connected`||!this.ws)throw Error(`CDP client is not connected`);let i=this.nextId++,a={id:i,method:e};t&&(a.params=t),n&&(a.sessionId=n),Mi.debug(`Send`,{method:e,id:i,sessionId:n});let o=this.pending.issue(i,r,`CDP command timed out after ${r}ms: ${e}`);return this.ws.send(JSON.stringify(a)),o}on(e,t){let n=this.listeners.get(e);n||(n=new Set,this.listeners.set(e,n)),n.add(t)}off(e,t){let n=this.listeners.get(e);n&&(n.delete(t),n.size===0&&this.listeners.delete(e))}once(e,t=3e4){return ji(t=>(this.on(e,t),()=>this.off(e,t)),t,`Timed out waiting for event: ${e}`)}handleMessage(e){let t;try{t=JSON.parse(e)}catch{return}if(`id`in t&&typeof t.id==`number`){let e=t;Mi.debug(`Response`,{id:e.id,hasError:!!e.error}),e.error?(Mi.error(`Command error`,{id:e.id,code:e.error.code,message:e.error.message}),this.pending.reject(e.id,Error(`CDP error: ${e.error.message} (${e.error.code})`))):this.pending.resolve(e.id,e.result??{});return}if(`method`in t){let e=t;Mi.debug(`Event`,{method:e.method,sessionId:e.sessionId});let n=this.listeners.get(e.method);if(n){let t=e.sessionId?{...e.params,sessionId:e.sessionId}:e.params??{};for(let e of n)try{e(t)}catch{}}}}handleClose(e){e===4001?(this._superseded=!0,Mi.warn(`CDP slot superseded by another SLICC tab/window on this instance`,{code:e})):e===4002?Mi.warn(`CDP proxy reset its upstream Chrome connection — sessions dropped`,{code:e,pendingCommands:this.pending.size}):Mi.error(`Connection closed unexpectedly`,{pendingCommands:this.pending.size}),this.cleanup(Ni(e))}cleanup(e=`CDP client disconnected`){this.ws=null,this._state=`disconnected`,this.pending.rejectAll(e),this.notifyState(`disconnected`,e)}notifyState(e,t){if(e!==this.lastNotifiedState||t!==this.lastNotifiedReason){this.lastNotifiedState=e,this.lastNotifiedReason=t;for(let n of this.stateListeners)try{n(e,t)}catch{}}}};function Fi(e){for(let t of e)if(t.rel.includes(`ai-catalog`))return{kind:`ai-catalog`,url:t.href};return null}function Ii(e){return[e.origin??``,e.kind??``,e.url??``].join(`\0`)}const Li=[{kind:`ai-catalog`,path:`/.well-known/ai-catalog.json`},{kind:`llms-txt`,path:`/llms.txt`}];async function Ri(e,t,n={}){let r=n.timeoutMs??3e3,i;try{i=new URL(e).origin}catch{return[]}return(await Promise.all(Li.map(e=>zi(i,e,t,r)))).filter(e=>e!==null)}async function zi(e,t,n,r){let i=e+t.path,a=new AbortController,o=setTimeout(()=>a.abort(Error(`timeout`)),r);try{let e=await n(i,{method:`GET`,signal:a.signal,redirect:`manual`,credentials:`omit`});return e.status!==200||!Bi(e.headers.get(`content-type`),t.kind)?null:{kind:t.kind,url:i}}catch{return null}finally{clearTimeout(o)}}function Bi(e,t){if(e==null)return!0;let n=e.toLowerCase();return n.length===0?!0:n.includes(`text/html`)||n.includes(`application/xhtml`)?!1:t===`ai-catalog`?n.includes(`json`)||n.includes(`text/plain`)||n.includes(`octet-stream`):n.includes(`text/plain`)||n.includes(`markdown`)||n.includes(`octet-stream`)}const Vi=3e4;var Hi=class extends Error{constructor(e=`CDP bridge rejected the session token (bridge-token-required). Open SLICC again from Sliccstart to pick up a fresh token.`){super(e),this.name=`CdpBridgeRejectedError`}},Ui=class extends Error{constructor(){super(`CDP reconnect is backing off`),this.name=`CdpReconnectBackoffError`}};function Wi(e,t=Math.random){let n=Math.min(Vi,250*2**Math.min(Math.max(0,e),16)),r=Math.round(n*.2*t());return Math.min(Vi,n+r)}function Gi(e=typeof window<`u`?window.location:null){return e?.host?`${e.protocol===`https:`?`wss:`:`ws:`}//${e.host}/cdp`:`ws://localhost:5710/cdp`}var Ki=class{lastConnectOptions=null;supersededHandler=null;supersededNotified=!1;reconnectAttempt=0;reconnectNotBefore=0;bridgeRejection=null;bridgeRejectedHandler=null;bridgeRejectedNotified=!1;classifyConnectFailure=async()=>`transient`;primeConnectOptions(e){this.lastConnectOptions=e?{...e}:{}}setSupersededHandler(e){this.supersededHandler=e}setBridgeRejectedHandler(e){this.bridgeRejectedHandler=e}setConnectFailureClassifier(e){this.classifyConnectFailure=e}async connect(e,t){if(this.bridgeRejection)throw this.notifyBridgeRejected(),new Hi(this.bridgeRejection);this.lastConnectOptions=t?{...t}:{};try{await e.connect({url:t?.url??Gi(),timeout:t?.timeout,...t?.protocols===void 0?{}:{protocols:t.protocols}})}catch(e){throw await this.noteReconnectFailure(t),this.bridgeRejection?new Hi(this.bridgeRejection):e}this.noteReconnectSuccess()}async ensureLocalConnected(e){if(e.superseded===!0){this.notifySuperseded();return}if(e.state===`disconnected`){this.throwIfReconnectPaused();let t=this.lastConnectOptions;try{await e.connect({url:t?.url??Gi(),...t?.timeout===void 0?{}:{timeout:t.timeout},...t?.protocols===void 0?{}:{protocols:t.protocols}})}catch(e){throw await this.noteReconnectFailure(t??void 0),this.bridgeRejection?new Hi(this.bridgeRejection):e}this.noteReconnectSuccess()}}async ensureConnected(e){if(e.client.superseded===!0){this.notifySuperseded();return}if(e.client.state===`disconnected`){this.throwIfReconnectPaused();let t=e.client;e.restoreLocalAfterRemoteDrop(),e.clearSessionsForTransport(t),e.getClient().state===`disconnected`&&await this.connect(e.getClient(),this.lastConnectOptions??void 0)}}throwIfReconnectPaused(){if(this.bridgeRejection)throw this.notifyBridgeRejected(),new Hi(this.bridgeRejection);if(Date.now()<this.reconnectNotBefore)throw new Ui}noteReconnectSuccess(){this.reconnectAttempt=0,this.reconnectNotBefore=0,this.supersededNotified=!1}async noteReconnectFailure(e){if(await this.classifyConnectFailure({url:e?.url??``,...e?.protocols===void 0?{}:{protocols:e.protocols}})===`terminal`){this.bridgeRejection=new Hi().message,this.notifyBridgeRejected();return}let t=Wi(this.reconnectAttempt);this.reconnectAttempt+=1,this.reconnectNotBefore=Date.now()+t}notifyBridgeRejected(){if(!this.bridgeRejectedNotified){this.bridgeRejectedNotified=!0;try{this.bridgeRejectedHandler?.()}catch{}}}notifySuperseded(){if(!this.supersededNotified){this.supersededNotified=!0;try{this.supersededHandler?.()}catch{}}}},qi=class extends Error{step;name=`CommandAbortedError`;constructor(e){super(`Browser command aborted while ${e}. A CDP round trip already in flight cannot be cancelled, so it may still have been applied to the page; nothing after it was started.`),this.step=e}};function Ji(e,t){if(e?.aborted)throw new qi(t)}function Yi(e,t){return e?{signal:e,error:()=>new qi(t)}:void 0}function Xi(e,t,n){return new Promise((r,i)=>{if(t?.aborted){i(new qi(n));return}let a=()=>{clearTimeout(o),i(new qi(n))},o=setTimeout(()=>{t?.removeEventListener(`abort`,a),r()},e);t?.addEventListener(`abort`,a,{once:!0})})}function Zi(e,t,n){return t?t.aborted?Promise.reject(new qi(n)):new Promise((r,i)=>{let a=()=>i(new qi(n));t.addEventListener(`abort`,a,{once:!0}),e.then(()=>{t.removeEventListener(`abort`,a),r()},e=>{t.removeEventListener(`abort`,a),i(e instanceof Error?e:Error(String(e)))})}):e}var Qi=class{contexts=new Map;for(e,t){let n=`${t}:${e}`,r=this.contexts.get(n);return r||(r=new Map,this.contexts.set(n,r)),r}peek(e,t){return this.contexts.get(`${t}:${e}`)}drop(e){this.contexts.delete(`main:${e}`),this.contexts.delete(`isolated:${e}`)}get size(){return this.contexts.size}};const $i=_(`har-recorder`);var ea=class{recordings=new Map;client;fs;eventCleanup=new Map;constructor(e,t){this.client=e,this.fs=t}async startRecording(e,t,n,r){let i=`rec-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;Ji(r,`about to enable Network on tab ${e}`),await this.client.send(`Network.enable`,{},t),Ji(r,`about to enable Page on tab ${e}`),await this.client.send(`Page.enable`,{},t),Ji(r,`about to read the URL of tab ${e}`);let a=(await this.client.send(`Runtime.evaluate`,{expression:`location.href`,returnByValue:!0},t)).result?.value??`about:blank`,o={id:i,targetId:e,sessionId:t,filterCode:n,pendingRequests:new Map,entries:[],startTime:Date.now(),currentUrl:a,snapshotCount:0};return this.recordings.set(i,o),this.setupEventListeners(o),await this.ensureDir(`/recordings/${i}`),$i.debug(`Started recording`,{recordingId:i,targetId:e,currentUrl:a}),i}setupEventListeners(e){let{sessionId:t,id:n}=e,r=n=>{let r=n;r.sessionId===t&&this.handleRequestWillBeSent(e,r)},i=n=>{let r=n;r.sessionId===t&&this.handleResponseReceived(e,r)},a=r=>{let i=r;i.sessionId===t&&this.handleLoadingFinished(e,i).catch(e=>{$i.error(`Failed to process loadingFinished event`,{recordingId:n,requestId:i.requestId,error:e instanceof Error?e.message:String(e)})})},o=n=>{let r=n;r.sessionId===t&&this.handleLoadingFailed(e,r)},s=r=>{let i=r;if(i.sessionId!==t)return;let a=i.frame;if(!a?.parentId&&a?.url){let t=[...e.entries],r=e.currentUrl;e.currentUrl=a.url,e.entries=[],e.pendingRequests.clear(),this.saveSnapshotWithEntries(e,`navigation`,t,r).catch(e=>{$i.error(`Failed to save navigation snapshot`,{recordingId:n,error:e instanceof Error?e.message:String(e)})})}};this.client.on(`Network.requestWillBeSent`,r),this.client.on(`Network.responseReceived`,i),this.client.on(`Network.loadingFinished`,a),this.client.on(`Network.loadingFailed`,o),this.client.on(`Page.frameNavigated`,s),this.eventCleanup.set(n,()=>{this.client.off(`Network.requestWillBeSent`,r),this.client.off(`Network.responseReceived`,i),this.client.off(`Network.loadingFinished`,a),this.client.off(`Network.loadingFailed`,o),this.client.off(`Page.frameNavigated`,s)})}handleRequestWillBeSent(e,t){let{requestId:n,request:r,timestamp:i}=t;!n||!r||i==null||e.pendingRequests.set(n,{requestId:n,startTime:i*1e3,request:{method:r.method,url:r.url,headers:r.headers,postData:r.postData}})}handleResponseReceived(e,t){let{requestId:n,response:r}=t;if(!n||!r)return;let i=e.pendingRequests.get(n);i&&(i.response={status:r.status,statusText:r.statusText,headers:r.headers,mimeType:r.mimeType},i.timing=r.timing)}async handleLoadingFinished(e,t){let{requestId:n,timestamp:r}=t;if(!n||r==null)return;let i=e.pendingRequests.get(n);if(!i)return;i.endTime=r*1e3;try{let t=await this.client.send(`Network.getResponseBody`,{requestId:n},e.sessionId);i.responseBody=t.body,i.responseBodyBase64=t.base64Encoded===!0}catch{}let a=this.buildHarEntry(i);a&&e.entries.push(a),e.pendingRequests.delete(n)}handleLoadingFailed(e,t){let{requestId:n}=t;n&&e.pendingRequests.delete(n)}buildHarEntry(e){if(!e.response)return null;let{request:t,response:n,timing:r,startTime:i,endTime:a,responseBody:o,responseBodyBase64:s}=e,c=a?a-i:0,l=[];try{let e=new URL(t.url);l=Array.from(e.searchParams.entries()).map(([e,t])=>({name:e,value:t}))}catch{}let u=r?(()=>{let e=(e,t)=>{if(e==null||t==null||e<0||t<0)return-1;let n=t-e;return n>=0?n:-1},t=r.dnsStart>=0?r.dnsStart:r.connectStart>=0?r.connectStart:0;return{blocked:t>0?t:-1,dns:e(r.dnsStart,r.dnsEnd),connect:e(r.connectStart,r.connectEnd),ssl:e(r.sslStart,r.sslEnd),send:e(r.sendStart,r.sendEnd),wait:e(r.sendEnd,r.receiveHeadersStart),receive:e(r.receiveHeadersStart,r.receiveHeadersEnd)}})():{blocked:-1,dns:-1,connect:-1,ssl:-1,send:0,wait:c,receive:0},d={size:o?.length??0,mimeType:n.mimeType??`application/octet-stream`};o&&(d.text=o,s&&(d.encoding=`base64`));let f;return t.postData&&(f={mimeType:t.headers[`content-type`]??t.headers[`Content-Type`]??`text/plain`,text:t.postData}),{startedDateTime:new Date(i).toISOString(),time:c,request:{method:t.method,url:t.url,httpVersion:`HTTP/1.1`,cookies:[],headers:Object.entries(t.headers).map(([e,t])=>({name:e,value:t})),queryString:l,postData:f,headersSize:-1,bodySize:t.postData?.length??0},response:{status:n.status,statusText:n.statusText,httpVersion:`HTTP/1.1`,cookies:[],headers:Object.entries(n.headers).map(([e,t])=>({name:e,value:t})),content:d,redirectURL:n.headers.location??n.headers.Location??``,headersSize:-1,bodySize:d.size},cache:{},timings:u}}async saveSnapshot(e,t){return this.saveSnapshotWithEntries(e,t,e.entries,e.currentUrl)}async applyFilter(e,t){return ta(e,t)}async saveSnapshotWithEntries(e,t,n,r){if(n.length===0)return $i.debug(`No entries to save`,{recordingId:e.id,trigger:t}),null;let i=e.filterCode?await this.applyFilter(n,e.filterCode):n;if(i.length===0)return $i.debug(`All entries filtered out`,{recordingId:e.id,trigger:t}),null;e.snapshotCount++;let a=new Date().toISOString().replace(/[:.]/g,`-`),o=this.urlToSlug(r),s=`${e.snapshotCount.toString().padStart(3,`0`)}-${a}-${t}-${o}.har`,c=`/recordings/${e.id}/${s}`,l={log:{version:`1.2`,creator:{name:`SLICC HAR Recorder`,version:`1.0.0`},entries:i}};return await this.fs.writeFile(c,JSON.stringify(l,null,2)),$i.debug(`Saved HAR snapshot`,{recordingId:e.id,path:c,entryCount:i.length}),c}urlToSlug(e){try{let t=new URL(e);return`${t.hostname}${t.pathname}`.replace(/[^a-zA-Z0-9]/g,`-`).replace(/-+/g,`-`).replace(/^-|-$/g,``).slice(0,50)||`page`}catch{return`page`}}async stopRecording(e){let t=this.recordings.get(e);if(!t)throw Error(`Recording not found: ${e}`);await this.saveSnapshot(t,`close`);let n=this.eventCleanup.get(e);n&&(n(),this.eventCleanup.delete(e));try{await this.client.send(`Network.disable`,{},t.sessionId)}catch{}this.recordings.delete(e);let r=`/recordings/${e}`;return $i.debug(`Stopped recording`,{recordingId:e,snapshotCount:t.snapshotCount}),r}getRecording(e){return this.recordings.get(e)}getRecordingByTarget(e){for(let[t,n]of this.recordings)if(n.targetId===e)return t}async ensureDir(e){await this.fs.mkdir(e,{recursive:!0})}};function ta(e,t){try{let n=Function(`entry`,`return (${t})(entry);`),r=[];for(let t of e)try{let e=n(t);if(e===!1)continue;typeof e==`object`&&e?r.push(e):r.push(t)}catch(e){$i.error(`Filter function error on entry, keeping it`,{error:e instanceof Error?e.message:String(e)}),r.push(t)}return r}catch(t){return $i.error(`Failed to compile filter, returning unfiltered`,{error:t instanceof Error?t.message:String(t)}),e}}var na=class{maxSessions;onEvict;sessions=new Map;pinnedTargets=new Map;appliedSends=new Map;constructor(e=32,t){this.maxSessions=e,this.onEvict=t}get size(){return this.sessions.size}get(e){return this.sessions.get(e)}has(e){return this.sessions.has(e)}values(){return this.sessions.values()}entries(){return this.sessions.entries()}snapshot(){return[...this.sessions]}remember(e,t){this.pruneAppliedSends(),this.sessions.set(e,t),this.enforceCap(e)}touch(e,t){this.sessions.delete(e),this.sessions.set(e,t)}take(e){let t=this.sessions.get(e);return t&&this.sessions.delete(e),t}delete(e){this.sessions.delete(e)}clear(){this.sessions.clear()}pin(e){this.pinnedTargets.set(e,(this.pinnedTargets.get(e)??0)+1);let t=!1;return()=>{if(t)return;t=!0;let n=(this.pinnedTargets.get(e)??1)-1;n>0?this.pinnedTargets.set(e,n):this.pinnedTargets.delete(e),this.enforceCap()}}isPinned(e){return this.pinnedTargets.has(e)}enforceCap(e){for(;this.sessions.size>this.maxSessions;){let t;for(let n of this.sessions.keys())if(!(n===e||this.pinnedTargets.has(n))){t=n;break}if(t===void 0)return;let n=this.sessions.get(t);this.sessions.delete(t),n&&this.onEvict?.(t,n)}}noteApplied(e){this.appliedSends.set(e,(this.appliedSends.get(e)??0)+1)}appliedCount(e){return this.appliedSends.get(e)??0}pruneAppliedSends(){if(this.appliedSends.size<=this.maxSessions*4)return;let e=new Set([...this.sessions.values()].map(e=>e.sessionId));for(let t of[...this.appliedSends.keys()])e.has(t)||this.appliedSends.delete(t)}findBySessionId(e){for(let[t,n]of this.sessions)if(n.sessionId===e)return[t,n]}findByTargetOrLocalId(e){let t=[];for(let[n,r]of this.sessions)(n===e||r.remote?.localTargetId===e)&&t.push([n,r]);return t}anyOnTransport(e){for(let t of this.sessions.values())if(t.transport===e)return!0;return!1}anyMatchingRemote(e,t){for(let n of this.sessions.values())if(n.remote?.runtimeId===e&&n.remote.localTargetId===t)return!0;return!1}};const ra=`(function() {
2
2
  'use strict';
3
3
 
4
4
  // ===== DOM Utilities =====
@@ -868,34 +868,34 @@ import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{C as t,S as n,_ as r,a
868
868
  } catch(e) {
869
869
  return { role: 'RootWebArea', name: '', description: 'Error: ' + (e.message || String(e)) };
870
870
  }
871
- })()`,ta=_(`tab-handle`);function na(e){try{let t=atob(e.slice(0,48));return t.startsWith(`‰PNG\r
871
+ })()`,ia=_(`tab-handle`);function aa(e){try{let t=atob(e.slice(0,48));return t.startsWith(`‰PNG\r
872
872
  
873
- `)?(t.charCodeAt(16)<<24|t.charCodeAt(17)<<16|t.charCodeAt(18)<<8|t.charCodeAt(19))>>>0:0}catch{return 0}}function ra(e,t,n,r,i){return ji(r=>{let i=e=>{let t=e.sessionId;(typeof t!=`string`||t===n)&&r(e)};return e.on(t,i),()=>e.off(t,i)},r,`Timed out waiting for event: ${t}`,i)}var ia=class{host;targetId;sessionId;transport;signal;constructor(e,t,n,r,i){this.host=e,this.targetId=t,this.sessionId=n,this.transport=r,this.signal=i}send(e,t={}){return Ki(this.signal,`about to send ${e}`),this.transport.send(e,t,this.sessionId)}async navigate(e){await this.send(`Page.enable`);let t=ra(this.transport,`Page.loadEventFired`,this.sessionId,3e4,qi(this.signal,`waiting for ${e} to fire its load event`));t.catch(()=>void 0),await this.send(`Page.navigate`,{url:e}),await t}async bringToFront(){await this.host.runGlobal(this.targetId,async()=>{await this.send(`Page.bringToFront`)})}async screenshot(e){let t={format:e?.format??`png`,captureBeyondViewport:!!(e?.clip||e?.fullPage)};e?.quality!==void 0&&(t.quality=e.quality),(e?.clip||e?.fullPage)&&(t.clip=await this.captureClip(e));let n;try{n=await this.send(`Page.captureScreenshot`,t)}catch(r){if(e?.foregroundFallback===!1)throw r;n=await this.host.wakeCapture(this,t)}let r=n.data;return e?.maxWidth?await this.applyMaxWidth(r,e.maxWidth,t):r}async captureClip(e){if(e.clip)return{...e.clip,scale:e.clip.scale??1};let t=0,n=0;try{await this.send(`Runtime.enable`);let e=await this.send(`Runtime.evaluate`,{expression:`JSON.stringify({ w: window.innerWidth, h: document.documentElement.scrollHeight })`,returnByValue:!0}),r=JSON.parse(e.result?.value??`{}`);t=r.w??0,n=r.h??0}catch(e){ta.warn(`fullPage: failed to evaluate scroll dimensions, falling back to viewport`,e)}return{x:0,y:0,width:t||1280,height:n||800,scale:1}}async applyMaxWidth(e,t,n){let r=na(e);if(!r||r<=t)return e;let i=await this.maxWidthClip(n);n.captureBeyondViewport=!0;let a=(i.scale??1)*(t/r),o=null,s=0;for(let e=0;e<3;e++){i.scale=a;let e;try{e=(await this.send(`Page.captureScreenshot`,n)).data}catch(e){ta.warn(`maxWidth re-capture failed`,e);break}let r=na(e);if(!r)return e;if(r<=t&&r>s&&(o=e,s=r),r<=t&&r>=t*.98)break;let c=a*t/r;if(!Number.isFinite(c)||c<=0)break;a=c}return o??e}async maxWidthClip(e){let t=e.clip;if(t)return t;let n=1280,r=800,i=0,a=0;try{await this.send(`Runtime.enable`);let e=await this.send(`Runtime.evaluate`,{expression:`JSON.stringify({w:window.innerWidth,h:window.innerHeight,x:window.scrollX,y:window.scrollY})`,returnByValue:!0}),t=JSON.parse(e.result?.value??`{}`);n=t.w||1280,r=t.h||800,typeof t.x==`number`&&(i=t.x),typeof t.y==`number`&&(a=t.y)}catch{}let o={x:i,y:a,width:n,height:r};return e.clip=o,o}async setViewportOverride(e,t,n){let r=this.host.viewportOverride(this.targetId),i={width:e,height:t,deviceScaleFactor:n?.deviceScaleFactor??r?.deviceScaleFactor??1,mobile:n?.mobile??r?.mobile??!1,...(n?.userAgent??r?.userAgent)!==void 0&&{userAgent:n?.userAgent??r?.userAgent}};await this.applyViewportOverride(i),this.host.recordViewportOverride(this.targetId,i)}async applyViewportOverride(e){await this.send(`Emulation.setDeviceMetricsOverride`,{width:e.width,height:e.height,deviceScaleFactor:e.deviceScaleFactor,mobile:e.mobile}),e.mobile&&await this.send(`Emulation.setTouchEmulationEnabled`,{enabled:!0,maxTouchPoints:5}),e.userAgent!==void 0&&await this.send(`Emulation.setUserAgentOverride`,{userAgent:e.userAgent})}async evaluate(e,t){return await this.send(`Runtime.enable`),sa(await this.send(`Runtime.evaluate`,{expression:e,awaitPromise:t?.awaitPromise??!0,returnByValue:t?.returnByValue??!0}),`Evaluation failed`)}async evaluateInFrame(e,t,n){let r=n?.world===`main`?`main`:`isolated`,i;try{i=await this.resolveFrameContext(e,r)}catch(t){throw Error(`Failed to resolve ${r===`main`?`main world`:`isolated world`} for frame ${e}: ${t instanceof Error?t.message:String(t)}`)}r===`isolated`&&await this.send(`Runtime.enable`);let a={expression:t,contextId:i,awaitPromise:n?.awaitPromise??!0,returnByValue:n?.returnByValue??!0},o;try{o=await this.send(`Runtime.evaluate`,a)}catch(t){if(!ca(t))throw t;this.host.frameContexts(this.sessionId,r).delete(e),i=await this.resolveFrameContext(e,r),o=await this.send(`Runtime.evaluate`,{...a,contextId:i})}let s=oa(o);if(s===null)return o.result?.value;if(this.host.frameContexts(this.sessionId,r).delete(e),!ca(Error(s)))throw Error(`Evaluation in frame ${e} failed: ${s}`);i=await this.resolveFrameContext(e,r);let c=await this.send(`Runtime.evaluate`,{...a,contextId:i}),l=oa(c);if(l!==null)throw Error(`Evaluation in frame ${e} failed: ${l}`);return c.result?.value}async resolveFrameContext(e,t){let n=this.host.frameContexts(this.sessionId,t),r=n.get(e);if(r!==void 0)return r;if(t===`isolated`){let t=(await this.send(`Page.createIsolatedWorld`,{frameId:e,worldName:`__slicc_iframe`})).executionContextId;return n.set(e,t),t}await this.send(`Runtime.enable`);let i=n.get(e);if(i===void 0&&(await this.send(`Runtime.disable`),await this.send(`Runtime.enable`),i=n.get(e)),i===void 0)throw Error(`Failed to find main world execution context for frame ${e}`);return i}async click(e,t=0){let n=await this.boundingBox(e);if(!n)throw Error(`Element not found: ${e}`);await this.clickAt(n.x+n.width/2,n.y+n.height/2,t)}async type(e){for(let t of e)await this.send(`Input.dispatchKeyEvent`,{type:`keyDown`,text:t}),await this.send(`Input.dispatchKeyEvent`,{type:`keyUp`,text:t})}async insertText(e){await this.send(`Input.insertText`,{text:e})}async waitForSelector(e,t){let n=t?.timeout??3e4,r=t?.interval??100,i=Date.now(),a=`polling for selector ${e}`;for(;Date.now()-i<n;){if(Ki(this.signal,a),await this.evaluate(`!!document.querySelector(${JSON.stringify(e)})`))return;await Ji(r,this.signal,a)}throw Error(`waitForSelector timed out after ${n}ms: ${e}`)}async clickByBackendNodeId(e,t=0){let n=await this.resolveNodeObjectId(e),r=await this.nodeBox(n);if(!r||r.width===0||r.height===0){await this.send(`Runtime.callFunctionOn`,{objectId:n,functionDeclaration:`function() { this.click(); }`});return}await this.clickAt(r.x+r.width/2,r.y+r.height/2,t)}async dblclickByBackendNodeId(e,t=`left`,n=0){let{x:r,y:i}=await this.resolveNodeCenter(e);for(let e of[1,2])await this.send(`Input.dispatchMouseEvent`,{type:`mousePressed`,x:r,y:i,button:t,clickCount:e,modifiers:n}),await this.send(`Input.dispatchMouseEvent`,{type:`mouseReleased`,x:r,y:i,button:t,clickCount:e,modifiers:n})}async hoverByBackendNodeId(e){let{x:t,y:n}=await this.resolveNodeCenter(e);await this.send(`Input.dispatchMouseEvent`,{type:`mouseMoved`,x:t,y:n})}async selectByBackendNodeId(e,t){let n=await this.resolveNodeObjectId(e);await this.send(`Runtime.callFunctionOn`,{objectId:n,functionDeclaration:`function(val) { this.value = val; this.dispatchEvent(new Event('change', { bubbles: true })); }`,arguments:[{value:t}],returnByValue:!0})}async setCheckedByBackendNodeId(e,t){let n=await this.resolveNodeObjectId(e);return(await this.send(`Runtime.callFunctionOn`,{objectId:n,functionDeclaration:`function() { return this.checked; }`,returnByValue:!0})).result?.value===t?`already`:(await this.clickByBackendNodeId(e),`toggled`)}async dragByBackendNodeIds(e,t){let n=await this.resolveNodeCenter(e),r=await this.resolveNodeCenter(t);await this.send(`Input.dispatchMouseEvent`,{type:`mousePressed`,x:n.x,y:n.y,button:`left`,clickCount:1}),await this.send(`Input.dispatchMouseEvent`,{type:`mouseMoved`,x:r.x,y:r.y}),await this.send(`Input.dispatchMouseEvent`,{type:`mouseReleased`,x:r.x,y:r.y,button:`left`,clickCount:1})}async getFrameTree(){await this.send(`Page.enable`);let e=await this.send(`Page.getFrameTree`),t=[];return aa(e.frameTree,t),t}async getAccessibilityTree(){let e=await this.evaluate(ea,{awaitPromise:!1,returnByValue:!0});if(!e||typeof e!=`object`)return{role:`RootWebArea`,name:``};let t=fa(e);try{let e=(await this.send(`Accessibility.getFullAXTree`)).nodes;Array.isArray(e)&&da(t,la(e))}catch{}return t}async getAccessibilityTreeForFrame(e){if(!e)return this.getAccessibilityTree();let t=await this.evaluateInFrame(e,ea,{awaitPromise:!1,returnByValue:!0});return!t||typeof t!=`object`?{role:`RootWebArea`,name:``}:fa(t)}async clickAt(e,t,n){await this.send(`Input.dispatchMouseEvent`,{type:`mousePressed`,x:e,y:t,button:`left`,clickCount:1,modifiers:n}),await this.send(`Input.dispatchMouseEvent`,{type:`mouseReleased`,x:e,y:t,button:`left`,clickCount:1,modifiers:n})}async resolveNodeObjectId(e){await this.send(`DOM.enable`),await this.send(`Runtime.enable`);let t=(await this.send(`DOM.resolveNode`,{backendNodeId:e})).object;if(!t?.objectId)throw Error(`Could not resolve backend node ${e} to a DOM element`);return t.objectId}async nodeBox(e){return(await this.send(`Runtime.callFunctionOn`,{objectId:e,functionDeclaration:`function() {
873
+ `)?(t.charCodeAt(16)<<24|t.charCodeAt(17)<<16|t.charCodeAt(18)<<8|t.charCodeAt(19))>>>0:0}catch{return 0}}function oa(e,t,n,r,i){return ji(r=>{let i=e=>{let t=e.sessionId;(typeof t!=`string`||t===n)&&r(e)};return e.on(t,i),()=>e.off(t,i)},r,`Timed out waiting for event: ${t}`,i)}var sa=class{host;targetId;sessionId;transport;signal;constructor(e,t,n,r,i){this.host=e,this.targetId=t,this.sessionId=n,this.transport=r,this.signal=i}send(e,t={}){return Ji(this.signal,`about to send ${e}`),this.transport.send(e,t,this.sessionId)}async navigate(e){await this.send(`Page.enable`);let t=oa(this.transport,`Page.loadEventFired`,this.sessionId,3e4,Yi(this.signal,`waiting for ${e} to fire its load event`));t.catch(()=>void 0),await this.send(`Page.navigate`,{url:e}),await t}async bringToFront(){await this.host.runGlobal(this.targetId,async()=>{await this.send(`Page.bringToFront`)})}async screenshot(e){let t={format:e?.format??`png`,captureBeyondViewport:!!(e?.clip||e?.fullPage)};e?.quality!==void 0&&(t.quality=e.quality),(e?.clip||e?.fullPage)&&(t.clip=await this.captureClip(e));let n;try{n=await this.send(`Page.captureScreenshot`,t)}catch(r){if(e?.foregroundFallback===!1)throw r;n=await this.host.wakeCapture(this,t)}let r=n.data;return e?.maxWidth?await this.applyMaxWidth(r,e.maxWidth,t):r}async captureClip(e){if(e.clip)return{...e.clip,scale:e.clip.scale??1};let t=0,n=0;try{await this.send(`Runtime.enable`);let e=await this.send(`Runtime.evaluate`,{expression:`JSON.stringify({ w: window.innerWidth, h: document.documentElement.scrollHeight })`,returnByValue:!0}),r=JSON.parse(e.result?.value??`{}`);t=r.w??0,n=r.h??0}catch(e){ia.warn(`fullPage: failed to evaluate scroll dimensions, falling back to viewport`,e)}return{x:0,y:0,width:t||1280,height:n||800,scale:1}}async applyMaxWidth(e,t,n){let r=aa(e);if(!r||r<=t)return e;let i=await this.maxWidthClip(n);n.captureBeyondViewport=!0;let a=(i.scale??1)*(t/r),o=null,s=0;for(let e=0;e<3;e++){i.scale=a;let e;try{e=(await this.send(`Page.captureScreenshot`,n)).data}catch(e){ia.warn(`maxWidth re-capture failed`,e);break}let r=aa(e);if(!r)return e;if(r<=t&&r>s&&(o=e,s=r),r<=t&&r>=t*.98)break;let c=a*t/r;if(!Number.isFinite(c)||c<=0)break;a=c}return o??e}async maxWidthClip(e){let t=e.clip;if(t)return t;let n=1280,r=800,i=0,a=0;try{await this.send(`Runtime.enable`);let e=await this.send(`Runtime.evaluate`,{expression:`JSON.stringify({w:window.innerWidth,h:window.innerHeight,x:window.scrollX,y:window.scrollY})`,returnByValue:!0}),t=JSON.parse(e.result?.value??`{}`);n=t.w||1280,r=t.h||800,typeof t.x==`number`&&(i=t.x),typeof t.y==`number`&&(a=t.y)}catch{}let o={x:i,y:a,width:n,height:r};return e.clip=o,o}async setViewportOverride(e,t,n){let r=this.host.viewportOverride(this.targetId),i={width:e,height:t,deviceScaleFactor:n?.deviceScaleFactor??r?.deviceScaleFactor??1,mobile:n?.mobile??r?.mobile??!1,...(n?.userAgent??r?.userAgent)!==void 0&&{userAgent:n?.userAgent??r?.userAgent}};await this.applyViewportOverride(i),this.host.recordViewportOverride(this.targetId,i)}async applyViewportOverride(e){await this.send(`Emulation.setDeviceMetricsOverride`,{width:e.width,height:e.height,deviceScaleFactor:e.deviceScaleFactor,mobile:e.mobile}),e.mobile&&await this.send(`Emulation.setTouchEmulationEnabled`,{enabled:!0,maxTouchPoints:5}),e.userAgent!==void 0&&await this.send(`Emulation.setUserAgentOverride`,{userAgent:e.userAgent})}async evaluate(e,t){return await this.send(`Runtime.enable`),ua(await this.send(`Runtime.evaluate`,{expression:e,awaitPromise:t?.awaitPromise??!0,returnByValue:t?.returnByValue??!0}),`Evaluation failed`)}async evaluateInFrame(e,t,n){let r=n?.world===`main`?`main`:`isolated`,i;try{i=await this.resolveFrameContext(e,r)}catch(t){throw Error(`Failed to resolve ${r===`main`?`main world`:`isolated world`} for frame ${e}: ${t instanceof Error?t.message:String(t)}`)}r===`isolated`&&await this.send(`Runtime.enable`);let a={expression:t,contextId:i,awaitPromise:n?.awaitPromise??!0,returnByValue:n?.returnByValue??!0},o;try{o=await this.send(`Runtime.evaluate`,a)}catch(t){if(!da(t))throw t;this.host.frameContexts(this.sessionId,r).delete(e),i=await this.resolveFrameContext(e,r),o=await this.send(`Runtime.evaluate`,{...a,contextId:i})}let s=la(o);if(s===null)return o.result?.value;if(this.host.frameContexts(this.sessionId,r).delete(e),!da(Error(s)))throw Error(`Evaluation in frame ${e} failed: ${s}`);i=await this.resolveFrameContext(e,r);let c=await this.send(`Runtime.evaluate`,{...a,contextId:i}),l=la(c);if(l!==null)throw Error(`Evaluation in frame ${e} failed: ${l}`);return c.result?.value}async resolveFrameContext(e,t){let n=this.host.frameContexts(this.sessionId,t),r=n.get(e);if(r!==void 0)return r;if(t===`isolated`){let t=(await this.send(`Page.createIsolatedWorld`,{frameId:e,worldName:`__slicc_iframe`})).executionContextId;return n.set(e,t),t}await this.send(`Runtime.enable`);let i=n.get(e);if(i===void 0&&(await this.send(`Runtime.disable`),await this.send(`Runtime.enable`),i=n.get(e)),i===void 0)throw Error(`Failed to find main world execution context for frame ${e}`);return i}async click(e,t=0){let n=await this.boundingBox(e);if(!n)throw Error(`Element not found: ${e}`);await this.clickAt(n.x+n.width/2,n.y+n.height/2,t)}async type(e){for(let t of e)await this.send(`Input.dispatchKeyEvent`,{type:`keyDown`,text:t}),await this.send(`Input.dispatchKeyEvent`,{type:`keyUp`,text:t})}async insertText(e){await this.send(`Input.insertText`,{text:e})}async waitForSelector(e,t){let n=t?.timeout??3e4,r=t?.interval??100,i=Date.now(),a=`polling for selector ${e}`;for(;Date.now()-i<n;){if(Ji(this.signal,a),await this.evaluate(`!!document.querySelector(${JSON.stringify(e)})`))return;await Xi(r,this.signal,a)}throw Error(`waitForSelector timed out after ${n}ms: ${e}`)}async clickByBackendNodeId(e,t=0){let n=await this.resolveNodeObjectId(e),r=await this.nodeBox(n);if(!r||r.width===0||r.height===0){await this.send(`Runtime.callFunctionOn`,{objectId:n,functionDeclaration:`function() { this.click(); }`});return}await this.clickAt(r.x+r.width/2,r.y+r.height/2,t)}async dblclickByBackendNodeId(e,t=`left`,n=0){let{x:r,y:i}=await this.resolveNodeCenter(e);for(let e of[1,2])await this.send(`Input.dispatchMouseEvent`,{type:`mousePressed`,x:r,y:i,button:t,clickCount:e,modifiers:n}),await this.send(`Input.dispatchMouseEvent`,{type:`mouseReleased`,x:r,y:i,button:t,clickCount:e,modifiers:n})}async hoverByBackendNodeId(e){let{x:t,y:n}=await this.resolveNodeCenter(e);await this.send(`Input.dispatchMouseEvent`,{type:`mouseMoved`,x:t,y:n})}async selectByBackendNodeId(e,t){let n=await this.resolveNodeObjectId(e);await this.send(`Runtime.callFunctionOn`,{objectId:n,functionDeclaration:`function(val) { this.value = val; this.dispatchEvent(new Event('change', { bubbles: true })); }`,arguments:[{value:t}],returnByValue:!0})}async setCheckedByBackendNodeId(e,t){let n=await this.resolveNodeObjectId(e);return(await this.send(`Runtime.callFunctionOn`,{objectId:n,functionDeclaration:`function() { return this.checked; }`,returnByValue:!0})).result?.value===t?`already`:(await this.clickByBackendNodeId(e),`toggled`)}async dragByBackendNodeIds(e,t){let n=await this.resolveNodeCenter(e),r=await this.resolveNodeCenter(t);await this.send(`Input.dispatchMouseEvent`,{type:`mousePressed`,x:n.x,y:n.y,button:`left`,clickCount:1}),await this.send(`Input.dispatchMouseEvent`,{type:`mouseMoved`,x:r.x,y:r.y}),await this.send(`Input.dispatchMouseEvent`,{type:`mouseReleased`,x:r.x,y:r.y,button:`left`,clickCount:1})}async getFrameTree(){await this.send(`Page.enable`);let e=await this.send(`Page.getFrameTree`),t=[];return ca(e.frameTree,t),t}async getAccessibilityTree(){let e=await this.evaluate(ra,{awaitPromise:!1,returnByValue:!0});if(!e||typeof e!=`object`)return{role:`RootWebArea`,name:``};let t=ha(e);try{let e=(await this.send(`Accessibility.getFullAXTree`)).nodes;Array.isArray(e)&&ma(t,fa(e))}catch{}return t}async getAccessibilityTreeForFrame(e){if(!e)return this.getAccessibilityTree();let t=await this.evaluateInFrame(e,ra,{awaitPromise:!1,returnByValue:!0});return!t||typeof t!=`object`?{role:`RootWebArea`,name:``}:ha(t)}async clickAt(e,t,n){await this.send(`Input.dispatchMouseEvent`,{type:`mousePressed`,x:e,y:t,button:`left`,clickCount:1,modifiers:n}),await this.send(`Input.dispatchMouseEvent`,{type:`mouseReleased`,x:e,y:t,button:`left`,clickCount:1,modifiers:n})}async resolveNodeObjectId(e){await this.send(`DOM.enable`),await this.send(`Runtime.enable`);let t=(await this.send(`DOM.resolveNode`,{backendNodeId:e})).object;if(!t?.objectId)throw Error(`Could not resolve backend node ${e} to a DOM element`);return t.objectId}async nodeBox(e){return(await this.send(`Runtime.callFunctionOn`,{objectId:e,functionDeclaration:`function() {
874
874
  this.scrollIntoView({ block: 'center', inline: 'center' });
875
875
  const r = this.getBoundingClientRect();
876
876
  return { x: r.x, y: r.y, width: r.width, height: r.height };
877
- }`,returnByValue:!0})).result?.value}async resolveNodeCenter(e){let t=await this.resolveNodeObjectId(e),n=await this.nodeBox(t);if(!n||n.width===0||n.height===0)throw Error(`Element with backend node ${e} has no dimensions`);return{x:n.x+n.width/2,y:n.y+n.height/2}}async boundingBox(e){await this.send(`DOM.enable`);let t=(await this.send(`DOM.getDocument`,{depth:0})).root.nodeId,n;try{n=(await this.send(`DOM.querySelector`,{nodeId:t,selector:e})).nodeId}catch{return null}if(!n)return null;let r=(await this.send(`DOM.getBoxModel`,{nodeId:n})).model;if(!r)return null;let i=r.content;return{x:i[0],y:i[1],width:r.width,height:r.height}}};function aa(e,t){if(t.push({frameId:e.frame.id,parentFrameId:e.frame.parentId,url:e.frame.url,name:e.frame.name??``,securityOrigin:e.frame.securityOrigin}),Array.isArray(e.childFrames))for(let n of e.childFrames)aa(n,t)}function oa(e){let t=e.exceptionDetails;return t?t.exception?.description??t.text:null}function sa(e,t){let n=oa(e);if(n!==null)throw Error(`${t}: ${n}`);return e.result?.value}function ca(e){let t=e instanceof Error?e.message:String(e);return t.includes(`Cannot find context with specified id`)||t.includes(`Execution context was destroyed`)}function la(e){let t=new Map;for(let n of e){let e=typeof n.backendDOMNodeId==`number`?n.backendDOMNodeId:null;if(e===null)continue;let r=n.role,i=n.name,a=typeof r?.value==`string`?r.value.toLowerCase():``,o=typeof i?.value==`string`?i.value:``;if(!a)continue;let s=ua(a,o);t.has(s)||t.set(s,e)}return t}function ua(e,t){return`${e.toLowerCase()}|${t.replace(/\s+/g,` `).trim()}`}function da(e,t){let n=ua(e.role,e.name),r=t.get(n);if(r!==void 0&&(e.backendNodeId=r),e.children)for(let n of e.children)da(n,t)}function fa(e){let t={role:Ee(e.role,`unknown`),name:Ee(e.name)},n=Ee(e.value);n!==``&&(t.value=n);let r=Ee(e.description);return r!==``&&(t.description=r),Array.isArray(e.children)&&e.children.length>0&&(t.children=e.children.map(e=>fa(e)).filter(e=>e.role!==`unknown`)),t}const pa=_(`browser-api`),ma=[`Session with given id not found`,`Target closed`,`No session with given id`,`No tab attached for sessionId`];var ha=class extends Error{};function ga(e){let t=e instanceof Error?e.message:String(e);return ma.some(e=>t.includes(e))}function _a(e){let t=e??{queueDepth:0,tabWaitMs:0,bridgeWaitMs:0,acquisitions:0};return{queueDepth:t.queueDepth,totalWaitMs:t.tabWaitMs+t.bridgeWaitMs,tabWaitMs:t.tabWaitMs,bridgeWaitMs:t.bridgeWaitMs,acquisitions:t.acquisitions}}function va(e=typeof window<`u`?window.location:null){return e?.host?`${e.protocol===`https:`?`wss:`:`ws:`}//${e.host}/cdp`:`ws://localhost:5710/cdp`}var ya=class{inner;onApplied;onStateChange;constructor(e,t){this.inner=e,this.onApplied=t,e.onStateChange&&(this.onStateChange=t=>e.onStateChange(t))}get state(){return this.inner.state}get superseded(){return this.inner.superseded}get isExtensionBridge(){return this.inner.isExtensionBridge}connect(e){return this.inner.connect(e)}disconnect(){this.inner.disconnect()}async send(e,t,n,r){let i=r===void 0?await this.inner.send(e,t,n):await this.inner.send(e,t,n,r);return n&&this.onApplied(n),i}on(e,t){this.inner.on(e,t)}off(e,t){this.inner.off(e,t)}once(e,t){return this.inner.once(e,t)}},ba=class{client;localClient;sessionId=null;attachedTargetId=null;trayTargetProvider=null;remoteTargetInfo=null;_frameContexts=new Map;sessions=new $i(32,(e,t)=>{pa.debug(`Evicting least-recently-used CDP session`,{targetId:e}),this.detachSession(e,t)});_listenedTransports=new Set;_sessionReplacedSubs=new Map;_tabLocks=new Map;_bridgeLock=Promise.resolve();_bridgeHold=null;_bridgeWaiters=0;_viewportOverrides=new Map;_tabLockStats=new Map;_onSessionChange;_lastConnectOptions=null;supersededHandler=null;supersededNotified=!1;_reconnectAttempt=0;_reconnectNotBefore=0;_bridgeRejection=null;bridgeRejectedHandler=null;bridgeRejectedNotified=!1;classifyConnectFailure=async()=>`transient`;handleJavaScriptDialogOpening=e=>{this.dismissJavaScriptDialog(e)};async dismissJavaScriptDialog(e){let t=typeof e.sessionId==`string`?e.sessionId:this.sessionId;if(t)try{await this.transportForSession(t).send(`Page.handleJavaScriptDialog`,{accept:!1},t,5e3),pa.warn(`Auto-dismissed unexpected JavaScript dialog`,{sessionId:t,type:e.type,message:e.message,url:e.url})}catch(e){pa.warn(`Failed to auto-dismiss JavaScript dialog`,{sessionId:t,error:e instanceof Error?e.message:String(e)})}}handleExecutionContextCreated=e=>{let t=this.eventSessionId(e);if(!t)return;let n=e.context,r=n?.auxData?.frameId;n?.auxData?.isDefault===!0&&r&&typeof n.id==`number`&&this.frameContexts(t,`main`).set(r,n.id)};handleExecutionContextDestroyed=e=>{let t=this.eventSessionId(e);if(!t)return;let n=e.executionContextId;if(typeof n!=`number`)return;let r=this._frameContexts.get(`main:${t}`);if(r)for(let[e,t]of r)t===n&&r.delete(e)};handleExecutionContextsCleared=e=>{let t=this.eventSessionId(e);t&&this._frameContexts.get(`main:${t}`)?.clear()};eventSessionId(e){let t=e.sessionId;return typeof t==`string`?t:this.sessionId}handleDetachedFromTarget=e=>{let t=e.sessionId;if(typeof t!=`string`)return;let n=this.sessions.findBySessionId(t);n&&this.forgetSession(n[0],n[1])};handleTargetDestroyed=e=>{let t=e.targetId;if(typeof t!=`string`)return;let n=this.sessions.findByTargetOrLocalId(t)[0];n&&this.forgetSession(n[0],n[1])};constructor(e){this.client=e??new Pi,this.localClient=this.client,this.addTransportListeners(this.client)}getTransport(){return this.accountedTransportFor(this.client)}getUnderlyingTransport(){return this.client}_accountedTransports=new WeakMap;accountedTransportFor(e){if(e instanceof ya)return e;let t=this._accountedTransports.get(e);return t||(t=new ya(e,e=>this.noteApplied(e)),this._accountedTransports.set(e,t)),t}noteApplied(e){this.sessions.noteApplied(e)}createHarRecorder(e,t){return new Zi(t,e)}setSessionChangeCallback(e){this._onSessionChange=e}onSessionReplaced(e,t){let n=this._sessionReplacedSubs.get(e);return n||(n=new Set,this._sessionReplacedSubs.set(e,n)),n.add(t),()=>{let n=this._sessionReplacedSubs.get(e);n&&(n.delete(t),n.size===0&&this._sessionReplacedSubs.delete(e))}}getSessionId(){return this.sessionId}getAttachedTargetId(){return this.attachedTargetId}async withTab(e,t,n){let r=n?.signal;Ki(r,`starting a command on tab ${e}`);let i=this.tabCounters(e);i.queueDepth+=1;let a;try{a=await this.acquireTabLock(e,i,r)}catch(e){throw--i.queueDepth,e}let o=this.sessions.pin(e);try{return i.acquisitions+=1,await this.runOnTab(e,t,r)}finally{o(),--i.queueDepth,a()}}async runOnTab(e,t,n){try{return await this.attemptOnTab(e,t,n)}catch(r){if(r instanceof ha||!ga(r))throw r;return pa.warn(`Stale CDP session — re-attaching and retrying once`,{targetId:e,error:r instanceof Error?r.message:String(r)}),this.invalidateSession(e),await this.attemptOnTab(e,t,n)}}async attemptOnTab(e,t,n){let r=await this.attachHandle(e,this.reentrantOwner(e),n);Ki(n,`about to run a command on tab ${e}`);let i=r.sessionId,a=this.sessions.appliedCount(i);try{return await t(r)}catch(t){if(!ga(t))throw t;let n=this.sessions.appliedCount(i)-a;if(n===0)throw t;this.invalidateSession(e);let r=t instanceof Error?t.message:String(t);throw pa.warn(`CDP session reset mid-command — not replaying`,{targetId:e,applied:n,reason:r}),new ha(`The CDP session for tab ${e} was reset mid-command, after ${n} command(s) had already been applied, so the outcome is unknown. The tab has been re-armed: check the page state before repeating this command. (underlying error: ${r})`)}}async attachHandle(e,t,n){let r=await this.attachToPageOwned(e,t,n),i=this.sessions.get(e);return new ia(this,e,r,this.accountedTransportFor(i?.transport??this.client),n)}handleFor(e,t){return new ia(this,e,t.sessionId,this.accountedTransportFor(t.transport))}getTabLockStats(e){if(e!==void 0)return _a(this._tabLockStats.get(e));let t={queueDepth:0,tabWaitMs:0,bridgeWaitMs:0,acquisitions:0};for(let e of this._tabLockStats.values())t.queueDepth+=e.queueDepth,t.tabWaitMs+=e.tabWaitMs,t.bridgeWaitMs+=e.bridgeWaitMs,t.acquisitions+=e.acquisitions;return _a(t)}tabCounters(e){let t=this._tabLockStats.get(e);return t||(t={queueDepth:0,tabWaitMs:0,bridgeWaitMs:0,acquisitions:0},this._tabLockStats.set(e,t)),t}async acquireTabLock(e,t,n){let r,i=new Promise(e=>{r=e}),a=this._tabLocks.get(e);this._tabLocks.set(e,i);let o=()=>{this._tabLocks.get(e)===i&&this._tabLocks.delete(e),r()};if(a){let r=Date.now();try{await Yi(a,n,`queued for the lock on tab ${e}`)}catch(e){throw t.tabWaitMs+=Date.now()-r,a.then(o,o),e}t.tabWaitMs+=Date.now()-r}return o}async acquireBridgeLock(e){if(e?.owner!==void 0&&this._bridgeHold?.owner===e.owner)return()=>void 0;let t,n=new Promise(e=>{t=e}),r=this._bridgeLock,i=this._bridgeHold!==null||this._bridgeWaiters>0;if(this._bridgeLock=n,i){this._bridgeWaiters+=1;let t=Date.now();try{await r}finally{--this._bridgeWaiters}e?.counters&&(e.counters.bridgeWaitMs+=Date.now()-t)}let a={release:t,owner:Symbol(`bridge-hold`),targetId:e?.targetId??null};this._bridgeHold=a;let o=!1;return()=>{o||(o=!0,this._bridgeHold===a&&(this._bridgeHold=null),t())}}reentrantOwner(e){let t=this._bridgeHold;if(!(!t||e===null||t.targetId!==e))return t.owner}async runGlobal(e,t){let n=await this.acquireBridgeLock({owner:this.reentrantOwner(e),targetId:e});try{return await t()}finally{n()}}viewportOverride(e){return this._viewportOverrides.get(e)}recordViewportOverride(e,t){this._viewportOverrides.set(e,t)}frameContexts(e,t){let n=`${t}:${e}`,r=this._frameContexts.get(n);return r||(r=new Map,this._frameContexts.set(n,r)),r}dropFrameContexts(e){this._frameContexts.delete(`main:${e}`),this._frameContexts.delete(`isolated:${e}`)}async reapplyViewportOverride(e,t){let n=this._viewportOverrides.get(e);if(n)try{await this.handleFor(e,t).applyViewportOverride(n)}catch(t){pa.warn(`Failed to re-apply viewport override on re-attach`,{targetId:e,error:t instanceof Error?t.message:String(t)})}}setTrayTargetProvider(e){this.trayTargetProvider=e}async listAllTargets(){let e=await this.listPages();if(!this.trayTargetProvider)return e;let t=!this.remoteTargetInfo,n=new Set(e.map(e=>e.targetId)),r=this.trayTargetProvider.getTargets().filter(e=>!t||!(e.runtimeId===`leader`&&n.has(e.localTargetId))).map(e=>({targetId:e.targetId,title:e.title,url:e.url,kind:e.kind,capabilities:e.capabilities}));return[...e,...r]}async connect(e){if(this._bridgeRejection)throw this.notifyBridgeRejected(),new Hi(this._bridgeRejection);this._lastConnectOptions=e?{...e}:{};try{await this.client.connect({url:e?.url??va(),timeout:e?.timeout,...e?.protocols===void 0?{}:{protocols:e.protocols}})}catch(t){throw await this.noteReconnectFailure(e),this._bridgeRejection?new Hi(this._bridgeRejection):t}this.noteReconnectSuccess()}async reconnectIfNeeded(){await this.ensureConnected(),this.client!==this.localClient&&await this.ensureLocalConnected()}primeConnectOptions(e){this._lastConnectOptions=e?{...e}:{}}setCdpSupersededHandler(e){this.supersededHandler=e}setCdpBridgeRejectedHandler(e){this.bridgeRejectedHandler=e}setCdpConnectFailureClassifier(e){this.classifyConnectFailure=e}throwIfReconnectPaused(){if(this._bridgeRejection)throw this.notifyBridgeRejected(),new Hi(this._bridgeRejection);if(Date.now()<this._reconnectNotBefore)throw new Ui}noteReconnectSuccess(){this._reconnectAttempt=0,this._reconnectNotBefore=0,this.supersededNotified=!1}async noteReconnectFailure(e){if(await this.classifyConnectFailure({url:e?.url??``,...e?.protocols===void 0?{}:{protocols:e.protocols}})===`terminal`){this._bridgeRejection=new Hi().message,this.notifyBridgeRejected();return}let t=Wi(this._reconnectAttempt);this._reconnectAttempt+=1,this._reconnectNotBefore=Date.now()+t}notifyBridgeRejected(){if(!this.bridgeRejectedNotified){this.bridgeRejectedNotified=!0;try{this.bridgeRejectedHandler?.()}catch{}}}notifySuperseded(){if(!this.supersededNotified){this.supersededNotified=!0;try{this.supersededHandler?.()}catch{}}}async createPage(e){return await this.ensureConnected(),await this.ensureLocalConnected(),(await this.localClient.send(`Target.createTarget`,{url:e??`about:blank`,background:!0})).targetId}async openWindow(e,t={}){await this.ensureConnected(),await this.ensureLocalConnected(),Ca(t);let n=t.focus!==!1,r={url:e||`about:blank`,newWindow:!0,background:!n};t.decorated===!1&&(r.decorated=!1);let i=t.state;i&&i!==`normal`?r.windowState=i:(t.width!==void 0&&(r.width=t.width),t.height!==void 0&&(r.height=t.height),t.left!==void 0&&(r.left=t.left),t.top!==void 0&&(r.top=t.top),i&&(r.windowState=i));let a=(await this.localClient.send(`Target.createTarget`,r)).targetId;if(typeof a!=`string`||!a)throw Error(`Target.createTarget did not return a usable targetId`);return a}async getWindowBounds(e){await this.ensureConnected();let t=Ta((await(await this.transportForWindowOps(e)).send(`Browser.getWindowForTarget`,{targetId:Sa(e)})).bounds),n=await this.readDevicePixelRatio(e);return{...t,dpr:n}}async setWindowBounds(e,t){await this.ensureConnected(),Ca(t);let n=await this.transportForWindowOps(e),r=Sa(e),i=await n.send(`Browser.getWindowForTarget`,{targetId:r}),a=i.windowId;if(typeof a!=`number`)throw Error(`Browser.getWindowForTarget did not return a windowId`);let o=Ta(i.bounds),s=t.state;(t.left!==void 0||t.top!==void 0||t.width!==void 0||t.height!==void 0)&&o.state!==`normal`&&await n.send(`Browser.setWindowBounds`,{windowId:a,bounds:{windowState:`normal`}});let c={};s&&s!==`normal`?c.windowState=s:(t.left!==void 0&&(c.left=t.left),t.top!==void 0&&(c.top=t.top),t.width!==void 0&&(c.width=t.width),t.height!==void 0&&(c.height=t.height),s&&(c.windowState=s)),await n.send(`Browser.setWindowBounds`,{windowId:a,bounds:c});let l=Ta((await n.send(`Browser.getWindowBounds`,{windowId:a})).bounds),u=await this.readDevicePixelRatio(e);return{...l,dpr:u}}async readDevicePixelRatio(e){try{let t=await this.withTab(e,e=>e.evaluate(`window.devicePixelRatio`,{awaitPromise:!1,returnByValue:!0}));return typeof t==`number`&&Number.isFinite(t)&&t>0?t:1}catch{return 1}}async transportForWindowOps(e){if(this.trayTargetProvider?.createRemoteTransport&&e.includes(`:`)){let t=e.indexOf(`:`),n=e.substring(0,t),r=e.substring(t+1);return this.trayTargetProvider.createRemoteTransport(n,r)}return await this.ensureLocalConnected(),this.localClient}async createRemotePage(e,t){if(!this.trayTargetProvider?.openRemoteTab)throw Error(`Remote tab opening not available (no tray target provider)`);return this.trayTargetProvider.openRemoteTab(e,t??`about:blank`)}async closePage(e){if(await this.ensureConnected(),this._viewportOverrides.delete(e),await this.dropSession(e),this.trayTargetProvider?.createRemoteTransport&&e.includes(`:`)){let t=e.indexOf(`:`),n=e.substring(0,t),r=e.substring(t+1);{let e=this.trayTargetProvider.createRemoteTransport(n,r);try{await e.send(`Target.closeTarget`,{targetId:r})}finally{this.trayTargetProvider.removeRemoteTransport&&this.trayTargetProvider.removeRemoteTransport(n,r)}return}}await this.localClient.send(`Target.closeTarget`,{targetId:e})}disconnect(){this.clearSessions(),this.client.disconnect()}async listPages(){return await this.ensureConnected(),await this.ensureLocalConnected(),((await this.localClient.send(`Target.getTargets`)).targetInfos??[]).filter(e=>e.type===`page`).map(e=>({targetId:e.targetId,title:e.title,url:e.url,...e.active?{active:!0}:{}}))}async attachToPage(e){return this.attachToPageOwned(e,this.reentrantOwner(e))}async attachToPageOwned(e,t,n){let r=await this.acquireBridgeLock({owner:t,targetId:e,counters:this.tabCounters(e)});try{await this.ensureConnected();let t=this.sessions.get(e);return t?(this.activateSession(e,t),t.sessionId):await(this.trayTargetProvider?.createRemoteTransport&&e.includes(`:`)?this.attachRemoteTarget(e,n):this.attachLocalTarget(e,n))}finally{r()}}async selectTab(e){await this.withTab(e,async()=>void 0)}async bringTabToFront(e){await this.withTab(e,e=>e.bringToFront())}async attachRemoteTarget(e,t){let n=e.indexOf(`:`),r=e.substring(0,n),i=e.substring(n+1),a=this.trayTargetProvider?.createRemoteTransport?.(r,i);if(!a)throw Error(`No remote transport for target ${e}`);Ki(t,`about to attach to tray tab ${e}`);let o={sessionId:(await a.send(`Target.attachToTarget`,{targetId:i,flatten:!0})).sessionId,transport:a,remote:{runtimeId:r,localTargetId:i}};return this.rememberSession(e,o),this.activateSession(e,o),Ki(t,`about to enable Page on tray tab ${e}`),await a.send(`Page.enable`,{},o.sessionId),Ki(t,`about to restore the viewport of tray tab ${e}`),await this.reapplyViewportOverride(e,o),this.notifySessionChange(e,o),o.sessionId}async attachLocalTarget(e,t){this.useLocalTransport(),await this.ensureLocalConnected(),Ki(t,`about to attach to tab ${e}`);let n={sessionId:(await this.localClient.send(`Target.attachToTarget`,{targetId:e,flatten:!0})).sessionId,transport:this.localClient};return this.rememberSession(e,n),this.activateSession(e,n),Ki(t,`about to enable Page on tab ${e}`),await this.localClient.send(`Page.enable`,{},n.sessionId),Ki(t,`about to restore the viewport of tab ${e}`),await this.reapplyViewportOverride(e,n),this.notifySessionChange(e,n),n.sessionId}async detach(){let e=this.attachedTargetId;e&&(await this.dropSession(e),this.useLocalTransport())}async wakeCapture(e,t){let n=await this.acquireBridgeLock({owner:this.reentrantOwner(e.targetId),targetId:e.targetId});try{return await this.wakeCaptureLocked(e,t,this._bridgeHold?.owner)}finally{n()}}async wakeCaptureLocked(e,t,n){let r=e.targetId,i=await this.findFocusedLocalPage(r,n).catch(()=>null),a=await this.attachHandle(r,n);try{return await a.send(`Page.bringToFront`),await a.send(`Page.captureScreenshot`,t)}finally{if(i)try{await(await this.attachHandle(i,n)).send(`Page.bringToFront`),await this.attachToPageOwned(r,n)}catch{}}}async findFocusedLocalPage(e,t){let n=await this.listPages();for(let r of n)if(!(!r.targetId||r.targetId===e)&&!r.targetId.includes(`:`))try{if(await(await this.attachHandle(r.targetId,t)).evaluate(`document.hasFocus()`)===!0)return r.targetId}catch{}return null}async ensureLocalConnected(){if(this.localClient.superseded===!0){this.notifySuperseded();return}if(this.localClient.state===`disconnected`){this.throwIfReconnectPaused();let e=this._lastConnectOptions;try{await this.localClient.connect({url:e?.url??va(),...e?.timeout===void 0?{}:{timeout:e.timeout},...e?.protocols===void 0?{}:{protocols:e.protocols}})}catch(t){throw await this.noteReconnectFailure(e??void 0),this._bridgeRejection?new Hi(this._bridgeRejection):t}this.noteReconnectSuccess()}}async ensureConnected(){if(this.client.superseded===!0){this.notifySuperseded();return}if(this.client.state===`disconnected`){this.throwIfReconnectPaused();let e=this.client;this.remoteTargetInfo&&this.trayTargetProvider?.removeRemoteTransport&&(this.trayTargetProvider.removeRemoteTransport(this.remoteTargetInfo.runtimeId,this.remoteTargetInfo.localTargetId),this.setClient(this.localClient),this.remoteTargetInfo=null),this.clearSessionsForTransport(e),this.client.state===`disconnected`&&await this.connect(this._lastConnectOptions??void 0)}}transportForSession(e){return this.sessions.findBySessionId(e)?.[1].transport??this.client}addTransportListeners(e){this._listenedTransports.has(e)||(this._listenedTransports.add(e),e.on(`Page.javascriptDialogOpening`,this.handleJavaScriptDialogOpening),e.on(`Runtime.executionContextCreated`,this.handleExecutionContextCreated),e.on(`Runtime.executionContextDestroyed`,this.handleExecutionContextDestroyed),e.on(`Runtime.executionContextsCleared`,this.handleExecutionContextsCleared),e.on(`Target.detachedFromTarget`,this.handleDetachedFromTarget),e.on(`Target.targetDestroyed`,this.handleTargetDestroyed))}releaseLifecycleTransport(e){e!==this.localClient&&this._listenedTransports.has(e)&&(this.sessions.anyOnTransport(e)||(this._listenedTransports.delete(e),e.off(`Page.javascriptDialogOpening`,this.handleJavaScriptDialogOpening),e.off(`Runtime.executionContextCreated`,this.handleExecutionContextCreated),e.off(`Runtime.executionContextDestroyed`,this.handleExecutionContextDestroyed),e.off(`Runtime.executionContextsCleared`,this.handleExecutionContextsCleared),e.off(`Target.detachedFromTarget`,this.handleDetachedFromTarget),e.off(`Target.targetDestroyed`,this.handleTargetDestroyed)))}setClient(e){this.addTransportListeners(e),this.client=e}useLocalTransport(){let e=this.remoteTargetInfo;this.remoteTargetInfo=null,this.setClient(this.localClient),e&&(this.sessions.anyMatchingRemote(e.runtimeId,e.localTargetId)||this.trayTargetProvider?.removeRemoteTransport?.(e.runtimeId,e.localTargetId))}rememberSession(e,t){this.addTransportListeners(t.transport),this.sessions.remember(e,t)}activateSession(e,t){t.remote?(this.setClient(t.transport),this.remoteTargetInfo={...t.remote}):this.client!==t.transport&&this.useLocalTransport(),this.sessionId=t.sessionId,this.attachedTargetId=e,this.sessions.touch(e,t)}notifySessionChange(e,t){let n=this.accountedTransportFor(t.transport);this._onSessionChange?.(t.sessionId,n,e);let r=this._sessionReplacedSubs.get(e);if(r)for(let i of[...r])try{i(t.sessionId,n,e)}catch(t){pa.warn(`session-replaced subscriber threw`,{targetId:e,error:t instanceof Error?t.message:String(t)})}}forgetSession(e,t){this.unregisterSession(e),this.disposeSessionTransport(t)}unregisterSession(e){let t=this.sessions.get(e);t&&this.dropFrameContexts(t.sessionId),this.sessions.delete(e),this.attachedTargetId===e&&(this.sessionId=null,this.attachedTargetId=null)}disposeSessionTransport(e){this.releaseLifecycleTransport(e.transport),e.remote&&(this.sessions.anyMatchingRemote(e.remote.runtimeId,e.remote.localTargetId)||this.trayTargetProvider?.removeRemoteTransport?.(e.remote.runtimeId,e.remote.localTargetId))}async detachSession(e,t){this.unregisterSession(e);try{await t.transport.send(`Target.detachFromTarget`,{sessionId:t.sessionId})}catch{}finally{this.disposeSessionTransport(t)}}async dropSession(e){let t=this.sessions.get(e);if(!t){this.attachedTargetId===e&&(this.sessionId=null,this.attachedTargetId=null);return}await this.detachSession(e,t)}invalidateSession(e){let t=this.sessions.get(e);t&&this.forgetSession(e,t)}clearSessionsForTransport(e){for(let[t,n]of this.sessions.snapshot())n.transport===e&&this.forgetSession(t,n)}clearSessions(){for(let[e,t]of this.sessions.snapshot())this.forgetSession(e,t);this.sessions.clear(),this.sessionId=null,this.attachedTargetId=null}};const xa=new Set([`normal`,`minimized`,`maximized`,`fullscreen`]);function Sa(e){let t=e.indexOf(`:`);return t>=0?e.substring(t+1):e}function Ca(e){let t=e.state;if(!(!t||t===`normal`)){if(!xa.has(t))throw Error(`window state must be one of ${[...xa].join(`|`)} (got ${JSON.stringify(t)})`);if(e.left!==void 0||e.top!==void 0||e.width!==void 0||e.height!==void 0)throw Error(`window state '${t}' cannot be combined with left/top/width/height (chrome.windows + CDP both reject the mix)`)}}function wa(e){return typeof e==`object`&&!!e}function Ta(e){let t=wa(e)?e:{},n=t.windowState??t.state,r=typeof n==`string`&&xa.has(n)?n:`normal`;return{left:Ea(t.left,0),top:Ea(t.top,0),width:Ea(t.width,0),height:Ea(t.height,0),state:r}}function Ea(e,t){return typeof e==`number`&&Number.isFinite(e)?e:t}const Da=_(`panel-rpc-cdp`);var Oa=class{getPanelRpc;runtimeId;localTargetId;timeoutMs;eventListeners=new Map;pendingOnce=new Set;key;_state=`connected`;pushRegistered=!1;constructor(e,t,n,r=3e4){this.getPanelRpc=e,this.runtimeId=t,this.localTargetId=n,this.timeoutMs=r,this.key=`${t}:${n}`}get state(){return this._state}async connect(){}disconnect(){this._state=`disconnected`;for(let e of this.pendingOnce)clearTimeout(e.timer),e.reject(Error(`Transport disconnected`));this.pendingOnce.clear();let e=this.getPanelRpc();e&&(this.pushRegistered&&=(e.unregisterPushTarget(this.key),!1),e.call(`remote-cdp-detach`,{runtimeId:this.runtimeId,localTargetId:this.localTargetId}).catch(e=>{Da.error(`remote-cdp detach failed (page-side session may leak)`,{key:this.key,error:e instanceof Error?e.message:String(e)})})),this.eventListeners.clear()}async send(e,t,n,r){if(this._state===`disconnected`)throw Error(`Transport disconnected`);let i=this.getPanelRpc();if(!i)throw Error(`cdp: no page bridge to the leader tray (panel-RPC client)`);let a=r??this.timeoutMs,o=Math.max(a,De)+5e3;return i.call(`remote-cdp-send`,{runtimeId:this.runtimeId,localTargetId:this.localTargetId,method:e,params:t,sessionId:n,timeout:a},{timeoutMs:o})}on(e,t){let n=this.eventListeners.get(e),r=!n||n.size===0;n||(n=new Set,this.eventListeners.set(e,n)),n.add(t),r&&this.subscribe(e)}off(e,t){let n=this.eventListeners.get(e);n&&(n.delete(t),n.size===0&&(this.eventListeners.delete(e),this.unsubscribe(e)))}once(e,t){return new Promise((n,r)=>{let i=t??this.timeoutMs,a={reject:r,timer:void 0},o=()=>{clearTimeout(a.timer),this.pendingOnce.delete(a),this.off(e,s)};a.timer=setTimeout(()=>{o(),r(Error(`Remote CDP event timed out: ${e}`))},i);let s=e=>{o(),n(e)};this.pendingOnce.add(a),this.on(e,s)})}handleEvent(e,t){let n=this.eventListeners.get(e);if(n)for(let e of[...n])e(t)}ensurePushRegistered(e){this.pushRegistered||=(e.registerPushTarget(this.key,e=>this.handleEvent(e.method,e.params??{})),!0)}subscribe(e){let t=this.getPanelRpc();if(!t){Da.error(`remote-cdp subscribe skipped: no panel-RPC client`,{key:this.key,event:e});return}this.ensurePushRegistered(t),t.call(`remote-cdp-subscribe`,{runtimeId:this.runtimeId,localTargetId:this.localTargetId,event:e}).catch(t=>{Da.error(`remote-cdp subscribe failed; events for this transport will not arrive`,{key:this.key,event:e,error:t instanceof Error?t.message:String(t)})})}unsubscribe(e){let t=this.getPanelRpc();t&&t.call(`remote-cdp-unsubscribe`,{runtimeId:this.runtimeId,localTargetId:this.localTargetId,event:e}).catch(t=>{Da.error(`remote-cdp unsubscribe failed (page-side forwarder may leak)`,{key:this.key,event:e,error:t instanceof Error?t.message:String(t)})})}};function ka(e){let t=new Map,n=(e,t)=>`${e}:${t}`;return{getTargets(){return[]},createRemoteTransport(r,i){let a=n(r,i),o=t.get(a);return o||(o=new Oa(e,r,i),t.set(a,o)),o},removeRemoteTransport(e,r){let i=n(e,r),a=t.get(i);a&&(a.disconnect(),t.delete(i))},async openRemoteTab(t,n){let r=e();if(!r)throw Error(`cdp: no page bridge to the leader tray (panel-RPC client)`);let{targetId:i}=await r.call(`remote-open-tab`,{runtimeId:t,url:n});return i}}}function Aa(e){return`slicc_feature_flags_remote:${e}`}let ja=null;function Ma(e,t){let n=Pa(t);ja=e,Me(e,Fa(n,e)??{})}function Na(e,t){if(!ja||e!==void 0&&e!==Aa(ja))return!1;let n=Pa(t);return Ae(ja,Fa(n,ja)??{}),!0}function Pa(e){if(e!==void 0)return e;try{let e=globalThis.localStorage;return typeof e?.getItem!=`function`||typeof e.setItem!=`function`?void 0:e}catch{return}}function Fa(e,t){try{let n=e?.getItem(Aa(t));return n?Ia(JSON.parse(n)):null}catch{return null}}function Ia(e){return!La(e)||Object.values(e).some(e=>typeof e!=`string`)?null:e}function La(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}const Ra=_(`stale-asset`),za=/dynamically imported module|importing a module script failed|expected a javascript module|module script/i;function Ba(e){return za.test(e)}let Va=null;function Ha(e){if(!e){Va=null;return}Va=e}function Ua(e=!1){if(!Va||typeof BroadcastChannel!=`function`)return;let t=new BroadcastChannel(`slicc-stale-asset-reload`);try{t.postMessage({type:`stale-asset-reload`,instanceId:Va,replayTurn:e})}finally{t.close()}}function Wa(e){Ba(e instanceof Error?e.message:String(e))&&Ua()}function Ga(e,t){return!e||e===t?!1:(Ra.warn(`mixed build graph: page ${e} vs worker ${t} — requesting reload`),Ua(),!0)}var Ka=class{_state=`disconnected`;nextCommandId=1;listeners=new Map;pendingCommands=new Ai;unsubscribe=null;stateListeners=new Set;lastNotifiedState=`disconnected`;lastNotifiedReason;opts;label;constructor(e){this.opts=e,this.label=e.label??`CDP transport`}get state(){return this._state}onStateChange(e){return this.stateListeners.add(e),()=>{this.stateListeners.delete(e)}}async connect(e){if(this._state!==`disconnected`)throw Error(`Cannot connect: state is ${this._state}`);this.unsubscribe||=this.opts.subscribeIncoming(e=>this.handleIncoming(e)),this._state=`connected`,this.notifyState(`connected`)}disconnect(){this.unsubscribe?.(),this.unsubscribe=null;let e=`${this.label} disconnected`;this.pendingCommands.rejectAll(e),this.listeners.clear(),this._state=`disconnected`,this.notifyState(`disconnected`,e)}async send(e,t,n,r=3e4){if(this._state!==`connected`)throw Error(`${this.label} is not connected`);let i=this.nextCommandId++,a=this.opts.buildCommandEnvelope(i,e,t,n),o=this.pendingCommands.issue(i,r,`CDP command timed out after ${r}ms: ${e}`);return this.opts.sendEnvelope(a).catch(e=>{this.pendingCommands.reject(i,Error(`Failed to send CDP command: ${e instanceof Error?e.message:String(e)}`))}),o}on(e,t){let n=this.listeners.get(e),r=!n;n||(n=new Set,this.listeners.set(e,n)),n.add(t),r&&this.opts.onSubscribeEvent?.(e)}off(e,t){let n=this.listeners.get(e);n&&(n.delete(t),n.size===0&&(this.listeners.delete(e),this.opts.onUnsubscribeEvent?.(e)))}once(e,t=3e4){return ji(t=>(this.on(e,t),()=>this.off(e,t)),t,`Timed out waiting for event: ${e}`)}handleIncoming(e){let t=this.opts.parseControl?.(e)??null;if(t){this.handleControl(t);return}let n=this.opts.parseResponse(e);if(n){this.handleResponse(n);return}let r=this.opts.parseEvent(e);r&&this.handleEvent(r)}handleControl(e){if(e.kind===`ready`){this.opts.onUpstreamReady?.();return}let t=e.reason??`upstream connection reset`,n=`${this.label}: upstream CDP connection was reset (${t})`;this.pendingCommands.rejectAll(n),this._state=`disconnected`,this.opts.onUpstreamReset?.(t),this.notifyState(`disconnected`,n)}notifyState(e,t){if(e!==this.lastNotifiedState||t!==this.lastNotifiedReason){this.lastNotifiedState=e,this.lastNotifiedReason=t;for(let n of this.stateListeners)try{n(e,t)}catch{}}}handleResponse(e){if(!this.pendingCommands.has(e.id)){this.opts.onUnknownResponseId?.(e.id);return}e.error?this.pendingCommands.reject(e.id,Error(e.error)):this.pendingCommands.resolve(e.id,e.result??{})}handleEvent(e){let t=this.listeners.get(e.method);if(t)for(let n of t)try{n(e.params??{})}catch(t){this.opts.onListenerError?.(e.method,t)}}};function qa(e){let t=!1,n=()=>{t||(t=!0,typeof e.start==`function`&&e.start())};return{onMessage:t=>{let r=e=>{t(e.data)};return e.addEventListener(`message`,r),n(),()=>{e.removeEventListener(`message`,r)}},send:(t,n)=>{n&&n.length>0?e.postMessage(t,n):e.postMessage(t)}}}function Ja(e){let t=qa(e);return{onMessage:e=>t.onMessage(e),send:(e,n)=>{t.send({source:`offscreen`,payload:e},n)}}}var Ya=class extends Ka{constructor(e){let t=qa(e),n=0;super({label:`WorkerCdpProxy`,buildCommandEnvelope:(e,t,r,i)=>({type:`cdp-cmd`,id:e,method:t,params:r,sessionId:i,gen:n}),sendEnvelope:e=>(t.send(e),Promise.resolve()),subscribeIncoming:e=>t.onMessage(e),parseResponse:e=>{let t=e;if(t?.type!==`cdp-response`)return null;if(typeof t.id!=`number`||!Number.isFinite(t.id))return console.warn(`[WorkerCdpProxy] dropping cdp-response with invalid id`,t),null;let n=e;return{id:n.id,result:n.result,error:n.error}},parseEvent:e=>{let t=e;if(t?.type!==`cdp-event`)return null;if(typeof t.method!=`string`)return console.warn(`[WorkerCdpProxy] dropping cdp-event with invalid method`,t),null;let n=e;return{method:n.method,params:n.params}},parseControl:e=>{let t=e;return t?.type===`cdp-reset`?typeof t.reason==`string`?{kind:`reset`,reason:t.reason}:{kind:`reset`}:t?.type===`cdp-ready`?{kind:`ready`}:null},onUpstreamReset:e=>{n+=1,console.warn(`[WorkerCdpProxy] page CDP connection reset; sessions are stale`,e)},onUpstreamReady:()=>{console.info(`[WorkerCdpProxy] page CDP connection restored`)},onSubscribeEvent:e=>{t.send({type:`cdp-subscribe`,event:e})},onUnsubscribeEvent:e=>{t.send({type:`cdp-unsubscribe`,event:e})}})}};function Xa(e,t){return e.find(e=>e.folder===t)??e.find(e=>e.folder===`${t}-scoop`)??e.find(e=>e.name===t)}const Za=/^[\p{ID_Start}_$][\p{ID_Continue}_$\u200C\u200D]*$/u;function Qa(e){return Za.test(e)}function $a(e,t){return`(${e} && ${t})`}function A(e,t){return`(${e} || ${t})`}function eo(e){return`!(${e})`}function to(e){return`Array.isArray(${e})`}function no(e){return`typeof ${e} === "bigint"`}function ro(e){return`typeof ${e} === "boolean"`}function io(e){return`Number.isInteger(${e})`}function ao(e){return`${e} === null`}function oo(e){return`Number.isFinite(${e})`}function so(e){return $a(co(e),eo(to(e)))}function co(e){return`typeof ${e} === "object" && ${e} !== null`}function lo(e){return`typeof ${e} === "string"`}function uo(e){return`typeof ${e} === "symbol"`}function fo(e){return`${e} === undefined`}function po(e){return`typeof ${e} === "function"`}function mo(e){return`Guard.IsConstructor(${e})`}function ho(e,t){return`${e} === ${t}`}function go(e,t){return`${e} > ${t}`}function _o(e,t){return`${e} < ${t}`}function vo(e,t){return`${e} <= ${t}`}function yo(e,t){return`${e} >= ${t}`}function bo(e,t){return`Guard.IsMinLength(${e}, ${t})`}function xo(e,t){return`Guard.IsMaxLength(${e}, ${t})`}function So(e,t,n,r){return w(t,`0`)?`${e}.every((${n[0]}, ${n[1]}) => ${r})`:`((value, callback) => { for(let index = ${t}; index < value.length; index++) if (!callback(value[index], index)) return false; return true })(${e}, (${n[0]}, ${n[1]}) => ${r})`}function Co(e){return`Object.entries(${e})`}function wo(e){return`Object.getOwnPropertyNames(${e})`}function To(e,t){return w(t,`"__proto__"`)||w(t,`"constructor"`)?`Object.prototype.hasOwnProperty.call(${e}, ${t})`:`${t} in ${e}`}function Eo(e,t){return`Guard.IsDeepEqual(${e}, ${t})`}function Do(e){return`[${e.join(`, `)}]`}function Oo(e,t){return`((${e.join(`, `)}) => ${t})`}function j(e,t){return`${e}(${t.join(`, `)})`}function ko(e,t){return`new ${e}(${t.join(`, `)})`}function M(e,t){return`${e}${Qa(t)?`.${t}`:`[${N(t)}]`}`}function N(e){return v(e)?JSON.stringify(e):`${e}`}function Ao(e,t,n){return`(${e} ? ${t} : ${n})`}function jo(e){return`{ ${e.join(`; `)}; }`}function Mo(e,t){return`const ${e} = ${t}`}function No(e,t){return`if(${e}) { ${t} }`}function Po(e){return`return ${e}`}function P(e){return w(e.length,0)?`true`:e.reduce((e,t)=>$a(e,t))}function Fo(e){return w(e.length,0)?`false`:e.reduce((e,t)=>A(e,t))}function Io(e){return`++${e}`}function Lo(e,t){return`Guard.IsMultipleOf(${e}, ${t})`}var Ro=it;function zo(e,t){return t[e.length]?.(...e)??(()=>{throw Error(`Invalid Arguments`)})()}let Bo;function Vo(){try{return Uo(`null`)(),!0}catch{return!1}}function Ho(){return C(Bo)&&(Bo=Vo()),Bo&&Zt().useAcceleration}function Uo(...e){return new globalThis.Function(...e)}function Wo(e){switch(e.keyword){case`additionalProperties`:return`must not have additional properties`;case`anyOf`:return`must match a schema in anyOf`;case`boolean`:return`schema is false`;case`const`:return`must be equal to constant`;case`contains`:return`must contain at least 1 valid item`;case`dependencies`:return`must have properties ${e.params.dependencies.join(`, `)} when property ${e.params.property} is present`;case`dependentRequired`:return`must have properties ${e.params.dependencies.join(`, `)} when property ${e.params.property} is present`;case`enum`:return`must be equal to one of the allowed values`;case`exclusiveMaximum`:return`must be ${e.params.comparison} ${e.params.limit}`;case`exclusiveMinimum`:return`must be ${e.params.comparison} ${e.params.limit}`;case`format`:return`must match format "${e.params.format}"`;case`if`:return`must match "${e.params.failingKeyword}" schema`;case`maxItems`:return`must not have more than ${e.params.limit} items`;case`maxLength`:return`must not have more than ${e.params.limit} characters`;case`maxProperties`:return`must not have more than ${e.params.limit} properties`;case`maximum`:return`must be ${e.params.comparison} ${e.params.limit}`;case`minItems`:return`must not have fewer than ${e.params.limit} items`;case`minLength`:return`must not have fewer than ${e.params.limit} characters`;case`minProperties`:return`must not have fewer than ${e.params.limit} properties`;case`minimum`:return`must be ${e.params.comparison} ${e.params.limit}`;case`multipleOf`:return`must be multiple of ${e.params.multipleOf}`;case`not`:return`must not be valid`;case`oneOf`:return`must match exactly one schema in oneOf`;case`pattern`:return`must match pattern "${e.params.pattern}"`;case`propertyNames`:return`property names ${e.params.propertyNames.join(`, `)} are invalid`;case`required`:return`must have required properties ${e.params.requiredProperties.join(`, `)}`;case`type`:return typeof e.params.type==`string`?`must be ${e.params.type}`:`must be either ${e.params.type.join(` or `)}`;case`unevaluatedItems`:return`must not have unevaluated items`;case`unevaluatedProperties`:return`must not have unevaluated properties`;case`uniqueItems`:return`must not have duplicate items`;case`~refine`:return e.params.message;default:return`an unknown validation error occurred`}}let Go=Wo;function Ko(){return Go}const qo=[/prompt is too long/i,/request_too_large/i,/input is too long for requested model/i,/exceeds the context window/i,/exceeds (?:the )?(?:model'?s )?maximum context length(?: of [\d,]+ tokens?|\s*\([\d,]+\))/i,/input token count.*exceeds the maximum/i,/maximum prompt length is \d+/i,/reduce the length of the messages/i,/maximum context length is \d+ tokens/i,/exceeds (?:the )?maximum allowed input length of [\d,]+ tokens?/i,/input \(\d+ tokens\) is longer than the model'?s context length \(\d+ tokens\)/i,/exceeds the limit of \d+/i,/exceeds the available context size/i,/greater than the context length/i,/context window exceeds limit/i,/exceeded model token limit/i,/too large for model with \d+ maximum context length/i,/prompt has [\d,]+ tokens?, but the configured context size is [\d,]+ tokens?/i,/model_context_window_exceeded/i,/prompt too long; exceeded (?:max )?context length/i,/range of input length should be/i,/context[_ ]length[_ ]exceeded/i,/too many tokens/i,/token limit exceeded/i,/^4(?:00|13)\s*(?:status code)?\s*\(no body\)/i],Jo=[/^(Throttling error|Service unavailable):/i,/rate limit/i,/too many requests/i];function Yo(e,t){return!!(e.stopReason===`error`&&e.errorMessage&&!Jo.some(t=>t.test(e.errorMessage))&&qo.some(t=>t.test(e.errorMessage))||t&&e.stopReason===`stop`&&e.usage.input+e.usage.cacheRead>t||t&&e.stopReason===`length`&&e.usage.output===0&&e.usage.input+e.usage.cacheRead>=t*.99)}function Xo(e){return E(e,`~refine`)&&S(e[`~refine`])&&x(e[`~refine`],0,e=>b(e)&&E(e,`check`)&&E(e,`error`)&&Vt(e.check)&&Vt(e.error))}function Zo(e){return b(e)&&!S(e)}function Qo(e){return $t(e)}function F(e){return Zo(e)||Qo(e)}function $o(e){return E(e,`additionalItems`)&&F(e.additionalItems)}function es(e){return E(e,`additionalProperties`)&&F(e.additionalProperties)}function ts(e){return E(e,`allOf`)&&S(e.allOf)&&e.allOf.every(e=>F(e))}function ns(e){return E(e,`$anchor`)&&v(e.$anchor)}function rs(e){return E(e,`anyOf`)&&S(e.anyOf)&&e.anyOf.every(e=>F(e))}function is(e){return E(e,`const`)}function as(e){return E(e,`contains`)&&F(e.contains)}function os(e){return E(e,`default`)}function ss(e){return E(e,`dependencies`)&&b(e.dependencies)&&Object.values(e.dependencies).every(e=>F(e)||S(e)&&e.every(e=>v(e)))}function cs(e){return E(e,`dependentRequired`)&&b(e.dependentRequired)&&Object.values(e.dependentRequired).every(e=>S(e)&&e.every(e=>v(e)))}function ls(e){return E(e,`dependentSchemas`)&&b(e.dependentSchemas)&&Object.values(e.dependentSchemas).every(e=>F(e))}function us(e){return E(e,`$dynamicAnchor`)&&v(e.$dynamicAnchor)}function ds(e){return E(e,`$dynamicRef`)&&v(e.$dynamicRef)}function fs(e){return E(e,`else`)&&F(e.else)}function ps(e){return E(e,`enum`)&&S(e.enum)}function ms(e){return E(e,`exclusiveMaximum`)&&(D(e.exclusiveMaximum)||zt(e.exclusiveMaximum))}function hs(e){return E(e,`exclusiveMinimum`)&&(D(e.exclusiveMinimum)||zt(e.exclusiveMinimum))}function gs(e){return E(e,`format`)&&v(e.format)}function _s(e){return E(e,`$id`)&&v(e.$id)}function vs(e){return E(e,`if`)&&F(e.if)}function ys(e){return E(e,`items`)&&(F(e.items)||S(e.items)&&e.items.every(e=>F(e)))}function bs(e){return ys(e)&&S(e.items)}function xs(e){return E(e,`maximum`)&&(D(e.maximum)||zt(e.maximum))}function Ss(e){return E(e,`maxContains`)&&D(e.maxContains)}function Cs(e){return E(e,`maxItems`)&&D(e.maxItems)}function ws(e){return E(e,`maxLength`)&&D(e.maxLength)}function Ts(e){return E(e,`maxProperties`)&&D(e.maxProperties)}function Es(e){return E(e,`minimum`)&&(D(e.minimum)||zt(e.minimum))}function Ds(e){return E(e,`minContains`)&&D(e.minContains)}function Os(e){return E(e,`minItems`)&&D(e.minItems)}function ks(e){return E(e,`minLength`)&&D(e.minLength)}function As(e){return E(e,`minProperties`)&&D(e.minProperties)}function js(e){return E(e,`multipleOf`)&&(D(e.multipleOf)||zt(e.multipleOf))}function Ms(e){return E(e,`not`)&&F(e.not)}function Ns(e){return E(e,`oneOf`)&&S(e.oneOf)&&e.oneOf.every(e=>F(e))}function Ps(e){return E(e,`pattern`)&&(v(e.pattern)||e.pattern instanceof RegExp)}function Fs(e){return E(e,`patternProperties`)&&b(e.patternProperties)&&Object.values(e.patternProperties).every(e=>F(e))}function Is(e){return E(e,`prefixItems`)&&S(e.prefixItems)&&e.prefixItems.every(e=>F(e))}function Ls(e){return E(e,`properties`)&&b(e.properties)&&Object.values(e.properties).every(e=>F(e))}function Rs(e){return E(e,`propertyNames`)&&(b(e.propertyNames)||F(e.propertyNames))}function zs(e){return E(e,`$recursiveAnchor`)&&$t(e.$recursiveAnchor)}function Bs(e){return zs(e)&&w(e.$recursiveAnchor,!0)}function Vs(e){return E(e,`$recursiveRef`)&&v(e.$recursiveRef)}function Hs(e){return E(e,`$ref`)&&v(e.$ref)}function Us(e){return E(e,`required`)&&S(e.required)&&e.required.every(e=>v(e))}function Ws(e){return E(e,`then`)&&F(e.then)}function Gs(e){return E(e,`type`)&&(v(e.type)||S(e.type)&&e.type.every(e=>v(e)))}function Ks(e){return E(e,`uniqueItems`)&&$t(e.uniqueItems)}function qs(e){return E(e,`unevaluatedItems`)&&F(e.unevaluatedItems)}function Js(e){return E(e,`unevaluatedProperties`)&&F(e.unevaluatedProperties)}function Ys(e){return qs(e)||Js(e)||y(e).some(t=>Zs(e[t]))}function Xs(e){return e.some(e=>Zs(e))}function Zs(e){return S(e)?Xs(e):b(e)?Ys(e):!1}function Qs(e,t){return Zs(t)||y(e).some(t=>Zs(e[t]))}var $s=class{constructor(e){this.hasUnevaluated=e}UseUnevaluated(){return this.hasUnevaluated}Push(){return j(M(`context`,`Push`),[])}Pop(){return j(M(`context`,`Pop`),[])}AddIndex(e){return j(M(`context`,`AddIndex`),[e])}AddKey(e){return j(M(`context`,`AddKey`),[e])}Merge(e){return j(M(`context`,`Merge`),[e])}},ec=class{constructor(){let e=new Set,t=new Set;this.stack=[{indices:e,keys:t}]}Push(){let e=new Set,t=new Set;return this.stack.push({indices:e,keys:t}),!0}Pop(){return this.stack.pop(),!0}AddIndex(e){return this.GetIndices().add(e),!0}AddKey(e){return this.GetKeys().add(e),!0}GetIndices(){return this.stack[this.stack.length-1].indices}GetKeys(){return this.stack[this.stack.length-1].keys}Merge(e){for(let t of e)t.GetIndices().forEach(e=>this.GetIndices().add(e)),t.GetKeys().forEach(e=>this.GetKeys().add(e));return!0}},tc=class extends ec{constructor(e){super(),this.callback=e}AddError(e){return this.callback(e),!1}},nc=class extends tc{constructor(){super(e=>this.errors.push(e)),this.errors=[]}AddError(e){return this.errors.push(e),!1}GetErrors(){return this.errors}};const rc={identifier:`External`,variables:[]};function ic(e){let t=`External[${rc.variables.length}]`;return rc.variables.push(e),t}function ac(){rc.variables=[]}function oc(){return{...rc}}function sc(e,t,n,r){return So(ic(n[`~refine`].map(e=>e)),N(0),[`refinement`,`_`],j(M(`refinement`,`check`),[r]))}function cc(e,t,n,r){return x(n[`~refine`],0,(e,t)=>e.check(r))}function lc(e,t,n,r,i,a){return Gt(i[`~refine`],0,(e,i)=>e.check(a)||t.AddError({keyword:`~refine`,schemaPath:n,instancePath:r,params:{index:i,message:e.error(a)}}))}let uc=0;function I(){return`var_${uc++}`}function dc(e){return ys(e)&&S(e.items)}function fc(e,t,n,r){if(!dc(n))return N(!0);let[i,a]=[I(),I()],o=Bf(e,t,n.additionalItems,i),s=_o(a,N(n.items.length)),c=t.AddIndex(a),l=t.UseUnevaluated()?A(s,$a(o,c)):A(s,o);return j(M(r,`every`),[Oo([i,a],l)])}function pc(e,t,n,r){return!dc(n)||r.every((r,i)=>sn(i,n.items.length)||Vf(e,t,n.additionalItems,r)&&t.AddIndex(i))}function mc(e,t,n,r,i,a){return!dc(i)||a.every((a,o)=>{let s=`${n}/additionalItems`,c=`${r}/${o}`;return sn(o,i.items.length)||Hf(e,t,s,c,i.additionalItems,a)&&t.AddIndex(o)})}function hc(e){return`^${e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}$`}function gc(e){let t=[];return Fs(e)&&t.push(...y(e.patternProperties)),Ls(e)&&t.push(...y(e.properties).map(hc)),w(t.length,0)?`(?!)`:`(${t.join(`|`)})`}function _c(e,t,n){return Us(t)&&Ls(t)&&!Fs(t)&&w(t.additionalProperties,!1)&&w(y(t.properties).length,t.required.length)}function vc(e,t,n){return ho(M(j(M(`Object`,`getOwnPropertyNames`),[n]),`length`),N(t.required.length))}function yc(e,t,n,r){let[i,a]=[I(),I()],o=ic(new RegExp(gc(n))),s=Bf(e,t,n.additionalProperties,`${r}[${i}]`),c=j(M(o,`test`),[i]),l=t.AddKey(i),u=t.UseUnevaluated()?A(c,$a(s,l)):A(c,s);return So(wo(r),N(0),[i,a],u)}function bc(e,t,n,r){return _c(t,n,r)?vc(t,n,r):yc(e,t,n,r)}function xc(e,t,n,r){let i=new RegExp(gc(n));return x(y(r),0,(a,o)=>i.test(a)||Vf(e,t,n.additionalProperties,r[a])&&t.AddKey(a))}function Sc(e,t,n,r,i,a){let o=new RegExp(gc(i)),s=[];return Gt(y(a),0,(c,l)=>{let u=`${n}/additionalProperties`,d=`${r}/${c}`,f=new nc,p=o.test(c)||Hf(e,f,u,d,i.additionalProperties,a[c])&&t.AddKey(c);return p||s.push(c),p})||t.AddError({keyword:`additionalProperties`,schemaPath:n,instancePath:r,params:{additionalProperties:s}})}function Cc(e,t,n,r,i){let a=Mo(`results`,`[]`),o=n.map((e,t)=>Mo(`context_${t}`,ko(`CheckContext`,[]))),s=n.map((n,i)=>Mo(`condition_${i}`,j(Oo([`context`],R(e,t,n,r)),[`context_${i}`]))),c=n.map((e,t)=>No(`condition_${t}`,j(M(`results`,`push`),[`context_${t}`]))),l=Po($a(i,t.Merge(`results`)));return j(Oo([],jo([a,...o,...s,...c,l])),[])}function wc(e,t,n,r){return Cc(e,t,n.allOf,r,ho(M(`results`,`length`),N(n.allOf.length)))}function Tc(e,t,n,r){return P(n.allOf.map(n=>R(e,t,n,r)))}function Ec(e,t,n,r){return t.UseUnevaluated()?wc(e,t,n,r):Tc(e,t,n,r)}function Dc(e,t,n,r){let i=n.allOf.reduce((t,n)=>{let i=new ec;return z(e,i,n,r)?[...t,i]:t},[]);return w(i.length,n.allOf.length)&&t.Merge(i)}function Oc(e,t,n,r,i,a){let o=[],s=i.allOf.reduce((t,i,s)=>{let c=`${n}/allOf/${s}`,l=new nc,u=B(e,l,c,r,i,a);return u||o.push(l),u?[...t,l]:t},[]),c=w(s.length,i.allOf.length)&&t.Merge(s);return c||o.forEach(e=>e.GetErrors().forEach(e=>t.AddError(e))),c}function kc(e,t,n,r){return Cc(e,t,n.anyOf,r,go(M(`results`,`length`),N(0)))}function Ac(e,t,n,r){return Fo(n.anyOf.map(n=>R(e,t,n,r)))}function jc(e,t,n,r){return t.UseUnevaluated()?kc(e,t,n,r):Ac(e,t,n,r)}function Mc(e,t,n,r){let i=n.anyOf.reduce((t,n)=>{let i=new ec;return z(e,i,n,r)?[...t,i]:t},[]);return At(i.length,0)&&t.Merge(i)}function Nc(e,t,n,r,i,a){let o=[],s=i.anyOf.reduce((t,i,s)=>{let c=new nc,l=B(e,c,`${n}/anyOf/${s}`,r,i,a);return l||o.push(c),l?[...t,c]:t},[]),c=At(s.length,0)&&t.Merge(s);return c||o.forEach(e=>e.GetErrors().forEach(e=>t.AddError(e))),c||t.AddError({keyword:`anyOf`,schemaPath:n,instancePath:r,params:{}})}function Pc(e,t,n,r){return N(!!n)}function Fc(e,t,n,r){return n}function Ic(e,t,n,r,i,a){return Fc(e,t,i,a)||t.AddError({keyword:`boolean`,schemaPath:n,instancePath:r,params:{}})}function Lc(e,t,n,r){return It(n.const)?ho(r,N(n.const)):Eo(r,ic(n.const))}function Rc(e,t,n,r){return It(n.const)?w(r,n.const):Ot(r,n.const)}function zc(e,t,n,r,i,a){return Rc(e,t,i,a)||t.AddError({keyword:`const`,schemaPath:n,instancePath:r,params:{allowedValue:i.const}})}function Bc(e){return!(Ds(e)&&w(e.minContains,0))}function Vc(e,t,n,r){if(!Bc(n))return N(!0);let i=I();return $a(eo(ho(M(r,`length`),N(0))),j(M(r,`some`),[Oo([i],R(e,t,n.contains,i))]))}function Hc(e,t,n,r){return!Bc(n)||!w(r.length,0)&&r.some(r=>z(e,t,n.contains,r))}function Uc(e,t,n,r,i,a){return Hc(e,t,i,a)||t.AddError({keyword:`contains`,schemaPath:n,instancePath:r,params:{minContains:1}})}function Wc(e,t,n,r){return A(ho(M(wo(r),`length`),N(0)),P(T(n.dependencies).map(([n,i])=>{let a=eo(To(r,N(n))),o=R(e,t,i,r);return A(a,S(i)?(e=>P(e.map(e=>To(r,N(e)))))(i):o)})))}function Gc(e,t,n,r){let i=w(y(r).length,0),a=x(T(n.dependencies),0,([n,i])=>!E(r,n)||(S(i)?i.every(e=>E(r,e)):z(e,t,i,r)));return i||a}function Kc(e,t,n,r,i,a){let o=w(y(a).length,0),s=Gt(T(i.dependencies),0,([i,o])=>{let s=`${n}/dependencies/${i}`;return!E(a,i)||(S(o)?o.every(e=>E(a,e)||t.AddError({keyword:`dependencies`,schemaPath:n,instancePath:r,params:{property:i,dependencies:o}})):B(e,t,s,r,o,a))});return o||s}function qc(e,t,n,r){return A(ho(M(wo(r),`length`),N(0)),P(T(n.dependentRequired).map(([e,t])=>A(eo(To(r,N(e))),P(t.map(e=>To(r,N(e))))))))}function Jc(e,t,n,r){let i=w(y(r).length,0),a=x(T(n.dependentRequired),0,([e,t])=>!E(r,e)||t.every(e=>E(r,e)));return i||a}function Yc(e,t,n,r,i,a){let o=w(y(a).length,0),s=Gt(T(i.dependentRequired),0,([e,i])=>!E(a,e)||Gt(i,0,o=>E(a,o)||t.AddError({keyword:`dependentRequired`,schemaPath:n,instancePath:r,params:{property:e,dependencies:i}})));return o||s}function Xc(e,t,n,r){return A(ho(M(wo(r),`length`),N(0)),P(T(n.dependentSchemas).map(([n,i])=>A(eo(To(r,N(n))),R(e,t,i,r)))))}function Zc(e,t,n,r){let i=w(y(r).length,0),a=x(T(n.dependentSchemas),0,([n,i])=>!E(r,n)||z(e,t,i,r));return i||a}function Qc(e,t,n,r,i,a){let o=w(y(a).length,0),s=Gt(T(i.dependentSchemas),0,([i,o])=>{let s=`${n}/dependentSchemas/${i}`;return!E(a,i)||B(e,t,s,r,o,a)});return o||s}function $c(e,t,n,r){return Qf(e,t,e.DynamicRef(n)??!1,r)}function el(e,t,n,r){let i=e.DynamicRef(n)??!1;return F(i)&&z(e,t,i,r)}function tl(e,t,n,r,i,a){let o=e.DynamicRef(i)??!1;return F(o)&&B(e,t,`#`,r,o,a)}function nl(e,t,n,r){return Fo(n.enum.map(e=>It(e)?ho(r,N(e)):Eo(r,ic(e))))}function rl(e,t,n,r){return n.enum.some(e=>It(e)?w(r,e):Ot(r,e))}function il(e,t,n,r,i,a){return rl(e,t,i,a)||t.AddError({keyword:`enum`,schemaPath:n,instancePath:r,params:{allowedValues:i.enum}})}function al(e,t,n,r){return _o(r,N(n.exclusiveMaximum))}function ol(e,t,n,r){return sn(r,n.exclusiveMaximum)}function sl(e,t,n,r,i,a){return ol(e,t,i,a)||t.AddError({keyword:`exclusiveMaximum`,schemaPath:n,instancePath:r,params:{comparison:`<`,limit:i.exclusiveMaximum}})}function cl(e,t,n,r){return go(r,N(n.exclusiveMinimum))}function ll(e,t,n,r){return At(r,n.exclusiveMinimum)}function ul(e,t,n,r,i,a){return ll(e,t,i,a)||t.AddError({keyword:`exclusiveMinimum`,schemaPath:n,instancePath:r,params:{comparison:`>`,limit:i.exclusiveMinimum}})}const dl=[0,31,28,31,30,31,30,31,31,30,31,30,31],fl=/^(\d\d\d\d)-(\d\d)-(\d\d)$/;function pl(e){return e%4==0&&(e%100!=0||e%400==0)}function ml(e){let t=fl.exec(e);if(!t)return!1;let n=+t[1],r=+t[2],i=+t[3];return r>=1&&r<=12&&i>=1&&i<=(r===2&&pl(n)?29:dl[r])}const hl=/^(\d\d):(\d\d):(\d\d(?:\.\d+)?)(?:Z|([+-])(\d\d):(\d\d))?$/i;function gl(e,t=!0){let n=hl.exec(e);if(!n)return!1;let r=+n[1],i=+n[2],a=+n[3],o=n[4]===`-`?-1:1,s=+(n[5]||0),c=+(n[6]||0);if(s>23||c>59||t&&!n[4]&&e.toLowerCase().indexOf(`z`)===-1)return!1;if(r<=23&&i<=59&&a<60)return!0;let l=i-c*o,u=r-s*o-+(l<0);return(u===23||u===-1)&&(l===59||l===-1)&&a<61}function _l(e,t=!0){let n=e.split(/T/i);return n.length===2&&ml(n[0])&&gl(n[1],t)}const vl=/^P((\d+Y(\d+M(\d+D)?)?|\d+M(\d+D)?|\d+D)(T(\d+H(\d+M(\d+S)?)?|\d+M(\d+S)?|\d+S))?|T(\d+H(\d+M(\d+S)?)?|\d+M(\d+S)?|\d+S)|\d+W)$/;function yl(e){return vl.test(e)}const bl=/^(?!.*\.\.)[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i;function xl(e){return bl.test(e)}function Sl(e,t,n){e=n?Math.floor(e/700):e>>1,e+=Math.floor(e/t);let r=0;for(;e>455;)e=Math.floor(e/35),r+=36;return r+Math.floor(36*e/(e+38))}function Cl(e){let t=[],n=128,r=0,i=72,a=e.lastIndexOf(`-`);if(a>0)for(let n=0;n<a;n++){let r=e.charCodeAt(n);if(r>=128)throw Error(`Invalid punycode: non-basic before delimiter`);t.push(r)}let o=a<0?0:a+1;for(;o<e.length;){let a=r,s=1,c=36;for(;;){if(o>=e.length)throw Error(`Invalid punycode: unexpected end of input`);let t=e.charCodeAt(o++),n;if(t>=97&&t<=122)n=t-97;else if(t>=48&&t<=57)n=t-48+26;else if(t>=65&&t<=90)Qe();else throw Error(`Invalid punycode: bad digit character`);r+=n*s;let a=c<=i?1:c>=i+26?26:c-i;if(n<a)break;s*=36-a,c+=36}let l=t.length+1;i=Sl(r-a,l,a===0),n+=Math.floor(r/l),r%=l,t.splice(r,0,n),r++}return globalThis.String.fromCodePoint(...t)}function wl(e){return/\p{Mn}/u.test(String.fromCodePoint(e))}function Tl(e){return/\p{Mc}/u.test(String.fromCodePoint(e))}function El(e){return/\p{Me}/u.test(String.fromCodePoint(e))}function Dl(e){return wl(e)||Tl(e)||El(e)}const Ol=new Set([1600,2042,12334,12335,12337,12338,12339,12340,12341,12347]),kl=new Set([2381,2509,2637,2765,2893,3021,3149,3277,3387,3388,3405,3530,6980,7082,7083,43456,69702,69759,69817,69939,69940,70080,70197,70477,70722,70850,71103,71231,71350,72767,73028,73029]);function Al(e){return/\p{Script=Greek}/u.test(String.fromCodePoint(e))}function jl(e){return/\p{Script=Hebrew}/u.test(String.fromCodePoint(e))}function Ml(e){return/\p{Script=Hiragana}/u.test(String.fromCodePoint(e))}function Nl(e){return/\p{Script=Katakana}/u.test(String.fromCodePoint(e))}function Pl(e){return/\p{Script=Han}/u.test(String.fromCodePoint(e))}function Fl(e){return e>=1632&&e<=1641}function Il(e){return e>=1776&&e<=1785}function Ll(e){return kl.has(e)}function Rl(e){if(e.length===0)return Qe();let t=[...e].map(e=>e.codePointAt(0)),n=t.length;if(t[0]===45||t[n-1]===45||n>=4&&t[2]===45&&t[3]===45||Dl(t[0]))return!1;let r=!1,i=!1,a=!1;for(let e=0;e<n;e++){let n=t[e];if(Ol.has(n))return!1;(Ml(n)||Nl(n)||Pl(n))&&(r=!0),Fl(n)&&(i=!0),Il(n)&&(a=!0);let o=t[e-1],s=t[e+1];switch(n){case 183:if(o!==108||s!==108)return!1;break;case 885:if(s===void 0||!Al(s))return!1;break;case 1523:case 1524:if(o===void 0||!jl(o))return!1;break;case 8204:if(o===void 0||o<128&&!Ll(o))return!1;break;case 8205:if(o===void 0||!Ll(o))return!1}}return!(e.includes(`・`)&&!r||i&&a)}function zl(e){if(e.charCodeAt(0)===45||e.charCodeAt(e.length-1)===45||e.length>=4&&e.charCodeAt(2)===45&&e.charCodeAt(3)===45)return!1;for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(!(n>=97&&n<=122||n>=65&&n<=90||n>=48&&n<=57||n===45))return!1}return!0}function Bl(e){return e.toLowerCase().startsWith(`xn--`)}function Vl(e){try{let t=e.slice(4).toLowerCase();if(t.lastIndexOf(`-`)===0)return!1;let n=Cl(t);return n?Rl(n):!1}catch{return!1}}function Hl(e){return e.length===0||e.length>63?!1:Bl(e)?Vl(e):Rl(e)}function Ul(e){return e.length===0||e.length>63?!1:Bl(e)?Vl(e):zl(e)}function Wl(e){if(e.length===0||e.length>253||e.charCodeAt(e.length-1)===46)return!1;for(let t of e.split(`.`))if(!Ul(t))return!1;return!0}const Gl=/^(?!.*\.\.)[\p{L}\p{N}!#$%&'*+/=?^_`{|}~-]+(?:\.[\p{L}\p{N}!#$%&'*+/=?^_`{|}~-]+)*@[\p{L}\p{N}](?:[\p{L}\p{N}-]{0,61}[\p{L}\p{N}])?(?:\.[\p{L}\p{N}](?:[\p{L}\p{N}-]{0,61}[\p{L}\p{N}])?)*$/iu;function Kl(e){return Gl.test(e)}function ql(e){if(e.length===0||e.includes(` `))return!1;let t=e.normalize(`NFC`).replace(/[\u002E\u3002\uFF0E\uFF61]/g,`.`);if(t.length>253)return!1;for(let e of t.split(`.`))if(!Hl(e))return!1;return!0}function Jl(e,t,n){let r=0,i=0,a=0,o=0;for(let s=t;s<n;s++){let t=e.charCodeAt(s);if(t===46){if(a===0||i>255||o===48&&a>1)return!1;r++,i=0,a=0,o=0}else if(t>=48&&t<=57)a===0&&(o=t),i=i*10+(t-48),a++;else return!1}return r===3&&a>0&&i<=255&&!(o===48&&a>1)}function Yl(e){return Jl(e,0,e.length)}function Xl(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function Zl(e){let t=e.length;if(t===0)return!1;let n=0,r=!1,i=0;if(e.charCodeAt(0)===58&&e.charCodeAt(1)===58){if(t===2)return!0;r=!0,i=2}for(;i<t;){let a=0,o=i;for(;i<t&&Xl(e.charCodeAt(i));)i++,a++;if(a===0)return!1;let s=e.charCodeAt(i);if(s===46){if(!Jl(e,o,t))return!1;n+=2,i=t;break}if(a>4)return!1;if(n++,i===t)break;if(s!==58)return!1;if(i++,e.charCodeAt(i)===58){if(r||e.charCodeAt(i+1)===58)return!1;if(r=!0,i++,i===t)break}}return r?n<=7:n===8}function Ql(e){try{return new URL(e,`http://example.com`),!0}catch{return!1}}function $l(e){if(e.includes(` `)||e.includes(`\\`)||/[\x00-\x1F\x7F]/.test(e)||/%(?![0-9a-fA-F]{2})/.test(e))return!1;if(e===``)return!0;let t=e.indexOf(`:`);return t>0&&/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(e.substring(0,t))?Ql(e):e.match(/^([a-zA-Z][a-zA-Z0-9+\-.]*)(\/\/)/)&&t===-1?!1:Ql(e)}function eu(e){try{return new URL(e),!0}catch{return!1}}const tu=/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i;function nu(e){return tu.test(e)}const ru=/^(?:\/(?:[^~/]|~0|~1)*)*$/;function iu(e){return ru.test(e)}function au(e){if(e.length===0)return!1;try{return new RegExp(e),!0}catch{return!1}}const ou=/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/;function su(e){return ou.test(e)}const cu=/^(?!.*[^\x00-\x7F])(?!.*\\)(?:(?:[a-z][a-z0-9+\-.]*:)?(?:\/\/[^\s[\]{}<>^`|]*)?|[^\s[\]{}<>^`|]*)(?:\?[^\s[\]{}<>^`|]*)?(?:#[^\s[\]{}<>^`|]*)?$/i;function lu(e){return cu.test(e)}const uu=/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i;function du(e){return uu.test(e)}function fu(e){return e>=97&&e<=122||e>=65&&e<=90}function pu(e){return fu(e)||e>=48&&e<=57}function mu(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function hu(e){return pu(e)||e===43||e===45||e===46}function gu(e){return pu(e)||e===45||e===46||e===95||e===126}function _u(e){return e===33||e===36||e===38||e===39||e===40||e===41||e===42||e===43||e===44||e===59||e===61}function vu(e){return gu(e)||_u(e)||e===58||e===64}function yu(e){let t=e.length;if(t===0||!fu(e.charCodeAt(0)))return!1;let n=1;for(;n<t;){let t=e.charCodeAt(n);if(t===58)break;if(!hu(t))return!1;n++}if(e.charCodeAt(n)!==58)return!1;if(n++,e.charCodeAt(n)===47&&e.charCodeAt(n+1)===47){n+=2;let r=n,i=-1;for(let r=n;r<t;r++){let t=e.charCodeAt(r);if(t===64){i=r;break}if(t===47||t===63||t===35)break}if(i!==-1){for(let t=r;t<i;t++){let n=e.charCodeAt(t);if(n===91||n===93)return!1;if(n===37){if(t+2>=i||!mu(e.charCodeAt(t+1))||!mu(e.charCodeAt(t+2)))return!1;t+=2}else if(!gu(n)&&!_u(n)&&n!==58)return!1}n=i+1}if(e.charCodeAt(n)===91){for(n++;n<t&&e.charCodeAt(n)!==93;)n++;if(e.charCodeAt(n)!==93)return!1;n++}else for(;n<t;){let t=e.charCodeAt(n);if(t===47||t===63||t===35||t===58)break;if(t<128&&!gu(t)&&!_u(t))return!1;n++}if(e.charCodeAt(n)===58)for(n++;n<t;){let t=e.charCodeAt(n);if(t===47||t===63||t===35)break;if(t<48||t>57)return!1;n++}}for(;n<t;){let r=e.charCodeAt(n);if(r===37){if(n+2>=t||!mu(e.charCodeAt(n+1))||!mu(e.charCodeAt(n+2)))return!1;n+=2}else if(r>127)return!1;else if(!(vu(r)||r===47||r===63||r===35))return!1;n++}return!0}const bu=/^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu;function xu(e){return bu.test(e)}const Su=/^[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i;function Cu(e){return Su.test(e)}const L=new Map;function wu(){L.clear()}function Tu(){return[...L.entries()]}function Eu(e,t){L.set(e,t)}function Du(e){return L.has(e)}function Ou(e){return L.get(e)}function ku(e,t){return L.get(e)?.(t)??!0}function Au(){wu(),L.set(`date-time`,_l),L.set(`date`,ml),L.set(`duration`,yl),L.set(`email`,xl),L.set(`hostname`,Wl),L.set(`idn-email`,Kl),L.set(`idn-hostname`,ql),L.set(`ipv4`,Yl),L.set(`ipv6`,Zl),L.set(`iri-reference`,$l),L.set(`iri`,eu),L.set(`json-pointer-uri-fragment`,nu),L.set(`json-pointer`,iu),L.set(`regex`,au),L.set(`relative-json-pointer`,su),L.set(`time`,gl),L.set(`uri-reference`,lu),L.set(`uri-template`,du),L.set(`uri`,yu),L.set(`url`,xu),L.set(`uuid`,Cu)}Au();var ju=e({Clear:()=>wu,Entries:()=>Tu,Get:()=>Ou,Has:()=>Du,IsDate:()=>ml,IsDateTime:()=>_l,IsDuration:()=>yl,IsEmail:()=>xl,IsHostname:()=>Wl,IsIPv4:()=>Yl,IsIPv6:()=>Zl,IsIdnEmail:()=>Kl,IsIdnHostname:()=>ql,IsIri:()=>eu,IsIriReference:()=>$l,IsJsonPointer:()=>iu,IsJsonPointerUriFragment:()=>nu,IsRegex:()=>au,IsRelativeJsonPointer:()=>su,IsTime:()=>gl,IsUri:()=>yu,IsUriReference:()=>lu,IsUriTemplate:()=>du,IsUrl:()=>xu,IsUuid:()=>Cu,Reset:()=>Au,Set:()=>Eu,Test:()=>ku});function Mu(e,t,n,r){return j(M(`Format`,`Test`),[N(n.format),r])}function Nu(e,t,n,r){return ku(n.format,r)}function Pu(e,t,n,r,i,a){return Nu(e,t,i,a)||t.AddError({keyword:`format`,schemaPath:n,instancePath:r,params:{format:i.format}})}function Fu(e,t,n,r){let i=!Ws(n)||n.then,a=!fs(n)||n.else;return Ao(R(e,t,n.if,r),R(e,t,i,r),R(e,t,a,r))}function Iu(e,t,n,r){let i=!Ws(n)||n.then,a=!fs(n)||n.else;return z(e,t,n.if,r)?z(e,t,i,r):z(e,t,a,r)}function Lu(e,t,n,r,i,a){let o=!Ws(i)||i.then,s=!fs(i)||i.else,c=new nc,l=B(e,c,`${n}/if`,r,i.if,a)?B(e,c,`${n}/then`,r,o,a)||t.AddError({keyword:`if`,schemaPath:n,instancePath:r,params:{failingKeyword:`then`}}):B(e,t,`${n}/else`,r,s,a)||t.AddError({keyword:`if`,schemaPath:n,instancePath:r,params:{failingKeyword:`else`}});return l&&t.Merge([c]),l}function Ru(e,t,n,r){return P(n.items.map((n,i)=>{let a=vo(M(r,`length`),N(i)),o=Bf(e,t,n,`${r}[${i}]`),s=t.AddIndex(N(i));return A(a,t.UseUnevaluated()?$a(o,s):o)}))}function zu(e,t,n,r){return x(n.items,0,(n,i)=>tn(r.length,i)||Vf(e,t,n,r[i])&&t.AddIndex(i))}function Bu(e,t,n,r,i,a){return Gt(i.items,0,(i,o)=>{let s=`${n}/items/${o}`,c=`${r}/${o}`;return tn(a.length,o)||Hf(e,t,s,c,i,a[o])&&t.AddIndex(o)})}function Vu(e,t,n,r){let i=Is(n)?n.prefixItems.length:0,a=Bf(e,t,n.items,`element`),o=t.AddIndex(`index`),s=t.UseUnevaluated()?$a(a,o):a;return So(r,N(i),[`element`,`index`],s)}function Hu(e,t,n,r){let i=Is(n)?n.prefixItems.length:0;return x(r,i,(r,i)=>Vf(e,t,n.items,r)&&t.AddIndex(i))}function Uu(e,t,n,r,i,a){let o=Is(i)?i.prefixItems.length:0;return Gt(a,o,(a,o)=>Hf(e,t,`${n}/items`,`${r}/${o}`,i.items,a)&&t.AddIndex(o))}function Wu(e,t,n,r){return bs(n)?Ru(e,t,n,r):Vu(e,t,n,r)}function Gu(e,t,n,r){return bs(n)?zu(e,t,n,r):Hu(e,t,n,r)}function Ku(e,t,n,r,i,a){return bs(i)?Bu(e,t,n,r,i,a):Uu(e,t,n,r,i,a)}function qu(e){return as(e)}function Ju(e,t,n,r){if(!qu(n))return N(!0);let[i,a]=[I(),I()];return vo(j(M(r,`reduce`),[Oo([i,a],Ao(R(e,t,n.contains,a),Io(i),i)),N(0)]),N(n.maxContains))}function Yu(e,t,n,r){if(!qu(n))return!0;let i=r.reduce((r,i)=>z(e,t,n.contains,i)?++r:r,0);return tn(i,n.maxContains)}function Xu(e,t,n,r,i,a){let o=Ds(i)?i.minContains:1;return Yu(e,t,i,a)||t.AddError({keyword:`contains`,schemaPath:n,instancePath:r,params:{minContains:o,maxContains:i.maxContains}})}function Zu(e,t,n,r){return vo(r,N(n.maximum))}function Qu(e,t,n,r){return tn(r,n.maximum)}function $u(e,t,n,r,i,a){return Qu(e,t,i,a)||t.AddError({keyword:`maximum`,schemaPath:n,instancePath:r,params:{comparison:`<=`,limit:i.maximum}})}function ed(e,t,n,r){return vo(M(r,`length`),N(n.maxItems))}function td(e,t,n,r){return tn(r.length,n.maxItems)}function nd(e,t,n,r,i,a){return td(e,t,i,a)||t.AddError({keyword:`maxItems`,schemaPath:n,instancePath:r,params:{limit:i.maxItems}})}function rd(e,t,n,r){return xo(r,N(n.maxLength))}function id(e,t,n,r){return St(r,n.maxLength)}function ad(e,t,n,r,i,a){return id(e,t,i,a)||t.AddError({keyword:`maxLength`,schemaPath:n,instancePath:r,params:{limit:i.maxLength}})}function od(e,t,n,r){return vo(M(wo(r),`length`),N(n.maxProperties))}function sd(e,t,n,r){return tn(y(r).length,n.maxProperties)}function cd(e,t,n,r,i,a){return sd(e,t,i,a)||t.AddError({keyword:`maxProperties`,schemaPath:n,instancePath:r,params:{limit:i.maxProperties}})}function ld(e){return as(e)}function ud(e,t,n,r){if(!ld(n))return N(!0);let[i,a]=[I(),I()];return yo(j(M(r,`reduce`),[Oo([i,a],Ao(R(e,t,n.contains,a),Io(i),i)),N(0)]),N(n.minContains))}function dd(e,t,n,r){if(!ld(n))return!0;let i=r.reduce((r,i)=>z(e,t,n.contains,i)?++r:r,0);return Mt(i,n.minContains)}function fd(e,t,n,r,i,a){return dd(e,t,i,a)||t.AddError({keyword:`contains`,schemaPath:n,instancePath:r,params:{minContains:i.minContains}})}function pd(e,t,n,r){return yo(r,N(n.minimum))}function md(e,t,n,r){return Mt(r,n.minimum)}function hd(e,t,n,r,i,a){return md(e,t,i,a)||t.AddError({keyword:`minimum`,schemaPath:n,instancePath:r,params:{comparison:`>=`,limit:i.minimum}})}function gd(e,t,n,r){return yo(M(r,`length`),N(n.minItems))}function _d(e,t,n,r){return Mt(r.length,n.minItems)}function vd(e,t,n,r,i,a){return _d(e,t,i,a)||t.AddError({keyword:`minItems`,schemaPath:n,instancePath:r,params:{limit:i.minItems}})}function yd(e,t,n,r){return bo(r,N(n.minLength))}function bd(e,t,n,r){return an(r,n.minLength)}function xd(e,t,n,r,i,a){return bd(e,t,i,a)||t.AddError({keyword:`minLength`,schemaPath:n,instancePath:r,params:{limit:i.minLength}})}function Sd(e,t,n,r){return yo(M(wo(r),`length`),N(n.minProperties))}function Cd(e,t,n,r){return Mt(y(r).length,n.minProperties)}function wd(e,t,n,r,i,a){return Cd(e,t,i,a)||t.AddError({keyword:`minProperties`,schemaPath:n,instancePath:r,params:{limit:i.minProperties}})}function Td(e,t,n,r){return Lo(r,N(n.multipleOf))}function Ed(e,t,n,r){return ut(r,n.multipleOf)}function Dd(e,t,n,r,i,a){return Ed(e,t,i,a)||t.AddError({keyword:`multipleOf`,schemaPath:n,instancePath:r,params:{multipleOf:i.multipleOf}})}function Od(e,t,n,r){return Cc(e,t,[n.not],r,eo(ho(M(`results`,`length`),N(1))))}function kd(e,t,n,r){return eo(R(e,t,n.not,r))}function Ad(e,t,n,r){return t.UseUnevaluated()?Od(e,t,n,r):kd(e,t,n,r)}function jd(e,t,n,r){let i=new ec;return!z(e,i,n.not,r)&&t.Merge([i])}function Md(e,t,n,r,i,a){return jd(e,t,i,a)||t.AddError({keyword:`not`,schemaPath:n,instancePath:r,params:{}})}function Nd(e,t,n,r){return Cc(e,t,n.oneOf,r,ho(M(`results`,`length`),N(1)))}function Pd(e,t,n,r){return ho(j(M(Do(n.oneOf.map(n=>R(e,t,n,r))),`reduce`),[Oo([`count`,`result`],Ao(ho(`result`,N(!0)),Io(`count`),`count`)),N(0)]),N(1))}function Fd(e,t,n,r){return t.UseUnevaluated()?Nd(e,t,n,r):Pd(e,t,n,r)}function Id(e,t,n,r){let i=n.oneOf.reduce((t,n)=>{let i=new ec;return z(e,i,n,r)?[...t,i]:t},[]);return w(i.length,1)&&t.Merge(i)}function Ld(e,t,n,r,i,a){let o=[],s=[],c=i.oneOf.reduce((t,i,c)=>{let l=new nc,u=B(e,l,`${n}/oneOf/${c}`,r,i,a);return u&&s.push(c),u||o.push(l),u?[...t,l]:t},[]),l=w(c.length,1)&&t.Merge(c);return!l&&w(s.length,0)&&o.forEach(e=>e.GetErrors().forEach(e=>t.AddError(e))),l||t.AddError({keyword:`oneOf`,schemaPath:n,instancePath:r,params:{passingSchemas:s}})}function Rd(e,t,n,r){return j(M(ic(v(n.pattern)?new RegExp(n.pattern,`u`):n.pattern),`test`),[r])}function zd(e,t,n,r){return(v(n.pattern)?new RegExp(n.pattern,`u`):n.pattern).test(r)}function Bd(e,t,n,r,i,a){return zd(e,t,i,a)||t.AddError({keyword:`pattern`,schemaPath:n,instancePath:r,params:{pattern:i.pattern}})}function Vd(e,t,n,r){return P(T(n.patternProperties).map(([n,i])=>{let[a,o]=[I(),I()],s=eo(j(M(ic(new RegExp(n,`u`)),`test`),[a])),c=Bf(e,t,i,o),l=t.AddKey(a),u=t.UseUnevaluated()?A(s,$a(c,l)):A(s,c);return So(Co(r),N(0),[`[${a}, ${o}]`,`_`],u)}))}function Hd(e,t,n,r){return x(T(n.patternProperties),0,([n,i])=>{let a=new RegExp(n,`u`);return x(T(r),0,([n,r])=>!a.test(n)||Vf(e,t,i,r)&&t.AddKey(n))})}function Ud(e,t,n,r,i,a){return Gt(T(i.patternProperties),0,([i,o])=>{let s=`${n}/patternProperties/${i}`,c=new RegExp(i,`u`);return Gt(T(a),0,([n,i])=>{let a=`${r}/${n}`;return!c.test(n)||Hf(e,t,s,a,o,i)&&t.AddKey(n)})})}function Wd(e,t,n,r){return P(n.prefixItems.map((n,i)=>{let a=vo(M(r,`length`),N(i)),o=Bf(e,t,n,`${r}[${i}]`),s=t.AddIndex(N(i));return A(a,t.UseUnevaluated()?$a(o,s):o)}))}function Gd(e,t,n,r){return w(r.length,0)||x(n.prefixItems,0,(n,i)=>tn(r.length,i)||Vf(e,t,n,r[i])&&t.AddIndex(i))}function Kd(e,t,n,r,i,a){return w(a.length,0)||Gt(i.prefixItems,0,(i,o)=>{let s=`${n}/prefixItems/${o}`,c=`${r}/${o}`;return tn(a.length,o)||Hf(e,t,s,c,i,a[o])&&t.AddIndex(o)})}function qd(e,t){return e.includes(t)||Zt().exactOptionalPropertyTypes}function Jd(e,t){return fo(M(e,t))}function Yd(e,t){return C(e[t])}function Xd(e,t,n,r){let i=Us(n)?n.required:[];return P(T(n.properties).map(([n,a])=>{let o=eo(To(r,N(n))),s=Bf(e,t,a,M(r,n)),c=t.AddKey(N(n)),l=t.UseUnevaluated()?$a(s,c):s,u=i.includes(n)?l:A(o,l);return qd(i,n)?u:A(Jd(r,n),u)}))}function Zd(e,t,n,r){let i=Us(n)?n.required:[];return x(T(n.properties),0,([n,a])=>{let o=!E(r,n)||Vf(e,t,a,r[n])&&t.AddKey(n);return qd(i,n)?o:Yd(r,n)||o})}function Qd(e,t,n,r,i,a){let o=Us(i)?i.required:[];return Gt(T(i.properties),0,([i,s])=>{let c=`${n}/properties/${i}`,l=`${r}/${i}`,u=()=>!E(a,i)||Hf(e,t,c,l,s,a[i])&&t.AddKey(i);return qd(o,i)?u():Yd(a,i)||u()})}function $d(e,t,n,r){let[i,a]=[I(),I()];return So(wo(r),N(0),[i,a],R(e,t,n.propertyNames,i))}function ef(e,t,n,r){return x(y(r),0,(r,i)=>z(e,t,n.propertyNames,r))}function tf(e,t,n,r,i,a){let o=[];return Gt(y(a),0,(t,a)=>{let s=`${r}/${t}`,c=`${n}/propertyNames`,l=B(e,new nc,c,s,i.propertyNames,t);return l||o.push(t),l})||t.AddError({keyword:`propertyNames`,schemaPath:n,instancePath:r,params:{propertyNames:o}})}function nf(e,t,n,r){return Qf(e,t,e.RecursiveRef(n)??!1,r)}function rf(e,t,n,r){let i=e.RecursiveRef(n)??!1;return F(i)&&z(e,t,i,r)}function af(e,t,n,r,i,a){let o=e.RecursiveRef(i)??!1;return F(o)&&B(e,t,`#`,r,o,a)}function of(e,t,n,r){let i=Oo([`context`,`value`],Qf(e,t,n,`value`));return j(Oo([`context`,`value`],jo([Mo(`nextContext`,ko(`CheckContext`,[])),Mo(`result`,j(i,[`nextContext`,`value`])),No(`result`,t.Merge(`[nextContext]`)),Po(`result`)])),[`context`,r])}function sf(e,t,n,r){return Qf(e,t,n,r)}function cf(e,t,n,r){let i=e.Ref(n)??!1;return t.UseUnevaluated()?of(e,t,i,r):sf(e,t,i,r)}function lf(e,t,n,r){let i=e.Ref(n)??!1,a=new ec,o=F(i)&&z(e,a,i,r);return o&&t.Merge([a]),o}function uf(e,t,n,r,i,a){let o=e.Ref(i)??!1,s=new nc,c=F(o)&&B(e,s,`#`,r,o,a);return c&&t.Merge([s]),c||s.GetErrors().forEach(e=>t.AddError(e)),c}function df(e,t,n,r){return P(n.required.map(e=>To(r,N(e))))}function ff(e,t,n,r){return x(n.required,0,e=>E(r,e))}function pf(e,t,n,r,i,a){let o=[];return Gt(i.required,0,e=>{let t=E(a,e);return t||o.push(e),t})||t.AddError({keyword:`required`,schemaPath:n,instancePath:r,params:{requiredProperties:o}})}function mf(e,t,n,r){return w(n,`object`)?so(r):w(n,`array`)?to(r):w(n,`boolean`)?ro(r):w(n,`integer`)?io(r):w(n,`number`)?oo(r):w(n,`null`)?ao(r):w(n,`string`)?lo(r):w(n,`bigint`)?no(r):w(n,`constructor`)?mo(r):w(n,`function`)?po(r):w(n,`symbol`)?uo(r):w(n,`undefined`)||w(n,`void`)?fo(r):N(!0)}function hf(e,t,n,r,i){return w(n,`object`)?Ye(i):w(n,`array`)?S(i):w(n,`boolean`)?$t(i):w(n,`integer`)?yt(i):w(n,`number`)?D(i):w(n,`null`)?Ke(i):w(n,`string`)?v(i):w(n,`bigint`)?zt(i):w(n,`constructor`)?Tt(i):w(n,`function`)?Vt(i):w(n,`symbol`)?ot(i):w(n,`undefined`)?C(i):!w(n,`void`)||C(i)}function gf(e,t,n,r){return Fo(n.map(n=>mf(e,t,n,r)))}function _f(e,t,n,r,i){return n.some(n=>hf(e,t,n,r,i))}function vf(e,t,n,r){return S(n.type)?gf(e,t,n.type,r):mf(e,t,n.type,r)}function yf(e,t,n,r){return S(n.type)?_f(e,t,n.type,n,r):hf(e,t,n.type,n,r)}function bf(e,t,n,r,i,a){return(S(i.type)?_f(e,t,i.type,i,a):hf(e,t,i.type,i,a))||t.AddError({keyword:`type`,schemaPath:n,instancePath:r,params:{type:i.type}})}function xf(e,t,n,r){let[i,a]=[I(),I()],o=j(M(`context`,`GetIndices`),[]),s=j(M(`indices`,`has`),[i]),c=R(e,t,n.unevaluatedItems,a),l=j(M(`context`,`AddIndex`),[i]),u=So(r,N(0),[a,i],$a(A(s,c),l));return j(Oo([`context`],jo([Mo(`indices`,o),Po(u)])),[`context`])}function Sf(e,t,n,r){let i=t.GetIndices();return x(r,0,(r,a)=>(i.has(a)||z(e,t,n.unevaluatedItems,r))&&t.AddIndex(a))}function Cf(e,t,n,r,i,a){let o=t.GetIndices(),s=[];return Gt(a,0,(a,c)=>{let l=new nc,u=(o.has(c)||B(e,l,n,r,i.unevaluatedItems,a))&&t.AddIndex(c);return u||s.push(c),u})||t.AddError({keyword:`unevaluatedItems`,schemaPath:n,instancePath:r,params:{unevaluatedItems:s}})}function wf(e,t,n,r){let[i,a]=[I(),I()],o=j(M(`context`,`GetKeys`),[]),s=j(M(`keys`,`has`),[i]),c=j(M(`context`,`AddKey`),[i]),l=R(e,t,n.unevaluatedProperties,a),u=So(Co(r),N(0),[`[${i}, ${a}]`,`_`],A(s,$a(l,c)));return j(Oo([`context`],jo([Mo(`keys`,o),Po(u)])),[`context`])}function Tf(e,t,n,r){let i=t.GetKeys();return x(T(r),0,([r,a])=>i.has(r)||z(e,t,n.unevaluatedProperties,a)&&t.AddKey(r))}function Ef(e,t,n,r,i,a){let o=t.GetKeys(),s=[];return Gt(T(a),0,([a,c])=>{let l=new nc,u=o.has(a)||B(e,l,n,r,i.unevaluatedProperties,c)&&t.AddKey(a);return u||s.push(a),u})||t.AddError({keyword:`unevaluatedProperties`,schemaPath:n,instancePath:r,params:{unevaluatedProperties:s}})}function Df(e){return!w(e.uniqueItems,!1)}function Of(e,t,n,r){return Df(n)?ho(M(ko(`Set`,[j(M(r,`map`),[M(`Hashing`,`Hash`)])]),`size`),M(r,`length`)):N(!0)}function kf(e,t,n,r){if(!Df(n))return!0;let i=new Set(r.map(st)).size,a=r.length;return w(i,a)}function Af(e,t,n,r,i,a){if(!Df(i))return!0;let o=new Set,s=a.reduce((e,t,n)=>{let r=st(t);return o.has(r)?[...e,n]:(o.add(r),e)},[]);return w(s.length,0)||t.AddError({keyword:`uniqueItems`,schemaPath:n,instancePath:r,params:{duplicateItems:s}})}function jf(e,t){return Gs(e)&&(S(e.type)&&At(e.type.length,0)&&x(e.type,0,e=>w(e,t))||w(e.type,t))}function Mf(e){return jf(e,`object`)}function Nf(e){return Zo(e)&&(es(e)||ss(e)||cs(e)||ls(e)||Ls(e)||Fs(e)||Rs(e)||As(e)||Ts(e)||Us(e)||Js(e))}function Pf(e){return jf(e,`array`)}function Ff(e){return Zo(e)&&($o(e)||ys(e)||as(e)||Ss(e)||Cs(e)||Ds(e)||Os(e)||Is(e)||qs(e)||Ks(e))}function If(e){return jf(e,`string`)}function Lf(e){return Zo(e)&&(ks(e)||ws(e)||gs(e)||Ps(e))}function Rf(e){return jf(e,`number`)||jf(e,`bigint`)}function zf(e){return Zo(e)&&(Es(e)||xs(e)||ms(e)||hs(e)||js(e))}function Bf(e,t,n,r){return t.UseUnevaluated()?$a($a(t.Push(),R(e,t,n,r)),t.Pop()):R(e,t,n,r)}function R(e,t,n,r){e.Push(n);let i=[];if(Qo(n))return Pc(e,t,n,r);if(Gs(n)&&i.push(vf(e,t,n,r)),Nf(n)){let a=[];Us(n)&&a.push(df(e,t,n,r)),es(n)&&a.push(bc(e,t,n,r)),ss(n)&&a.push(Wc(e,t,n,r)),cs(n)&&a.push(qc(e,t,n,r)),ls(n)&&a.push(Xc(e,t,n,r)),Fs(n)&&a.push(Vd(e,t,n,r)),Ls(n)&&a.push(Xd(e,t,n,r)),Rs(n)&&a.push($d(e,t,n,r)),As(n)&&a.push(Sd(e,t,n,r)),Ts(n)&&a.push(od(e,t,n,r));let o=P(a),s=A(eo(so(r)),o);i.push(Mf(n)?o:s)}if(Ff(n)){let a=[];$o(n)&&a.push(fc(e,t,n,r)),as(n)&&a.push(Vc(e,t,n,r)),ys(n)&&a.push(Wu(e,t,n,r)),Ss(n)&&a.push(Ju(e,t,n,r)),Cs(n)&&a.push(ed(e,t,n,r)),Ds(n)&&a.push(ud(e,t,n,r)),Os(n)&&a.push(gd(e,t,n,r)),Is(n)&&a.push(Wd(e,t,n,r)),Ks(n)&&a.push(Of(e,t,n,r));let o=P(a),s=A(eo(to(r)),o);i.push(Pf(n)?o:s)}if(Lf(n)){let a=[];ws(n)&&a.push(rd(e,t,n,r)),ks(n)&&a.push(yd(e,t,n,r)),gs(n)&&a.push(Mu(e,t,n,r)),Ps(n)&&a.push(Rd(e,t,n,r));let o=P(a),s=A(eo(lo(r)),o);i.push(If(n)?o:s)}if(zf(n)){let a=[];ms(n)&&a.push(al(e,t,n,r)),hs(n)&&a.push(cl(e,t,n,r)),xs(n)&&a.push(Zu(e,t,n,r)),Es(n)&&a.push(pd(e,t,n,r)),js(n)&&a.push(Td(e,t,n,r));let o=P(a),s=A(eo(A(oo(r),no(r))),o);i.push(Rf(n)?o:s)}Hs(n)&&i.push(cf(e,t,n,r)),Vs(n)&&i.push(nf(e,t,n,r)),ds(n)&&i.push($c(e,t,n,r)),is(n)&&i.push(Lc(e,t,n,r)),ps(n)&&i.push(nl(e,t,n,r)),vs(n)&&i.push(Fu(e,t,n,r)),Ms(n)&&i.push(Ad(e,t,n,r)),ts(n)&&i.push(Ec(e,t,n,r)),rs(n)&&i.push(jc(e,t,n,r)),Ns(n)&&i.push(Fd(e,t,n,r)),qs(n)&&i.push(A(eo(to(r)),xf(e,t,n,r))),Js(n)&&i.push(A(eo(co(r)),wf(e,t,n,r))),Xo(n)&&i.push(sc(e,t,n,r));let a=P(i);return e.Pop(n),a}function Vf(e,t,n,r){return t.Push()&&z(e,t,n,r)&&t.Pop()}function z(e,t,n,r){e.Push(n);let i=Qo(n)?Fc(e,t,n,r):(!Gs(n)||yf(e,t,n,r))&&(!(b(r)&&!S(r))||(!Us(n)||ff(e,t,n,r))&&(!es(n)||xc(e,t,n,r))&&(!ss(n)||Gc(e,t,n,r))&&(!cs(n)||Jc(e,t,n,r))&&(!ls(n)||Zc(e,t,n,r))&&(!Fs(n)||Hd(e,t,n,r))&&(!Ls(n)||Zd(e,t,n,r))&&(!Rs(n)||ef(e,t,n,r))&&(!As(n)||Cd(e,t,n,r))&&(!Ts(n)||sd(e,t,n,r)))&&(!S(r)||(!$o(n)||pc(e,t,n,r))&&(!as(n)||Hc(e,t,n,r))&&(!ys(n)||Gu(e,t,n,r))&&(!Ss(n)||Yu(e,t,n,r))&&(!Cs(n)||td(e,t,n,r))&&(!Ds(n)||dd(e,t,n,r))&&(!Os(n)||_d(e,t,n,r))&&(!Is(n)||Gd(e,t,n,r))&&(!Ks(n)||kf(e,t,n,r)))&&(!v(r)||(!ws(n)||id(e,t,n,r))&&(!ks(n)||bd(e,t,n,r))&&(!gs(n)||Nu(e,t,n,r))&&(!Ps(n)||zd(e,t,n,r)))&&(!(D(r)||zt(r))||(!ms(n)||ol(e,t,n,r))&&(!hs(n)||ll(e,t,n,r))&&(!xs(n)||Qu(e,t,n,r))&&(!Es(n)||md(e,t,n,r))&&(!js(n)||Ed(e,t,n,r)))&&(!Hs(n)||lf(e,t,n,r))&&(!Vs(n)||rf(e,t,n,r))&&(!ds(n)||el(e,t,n,r))&&(!is(n)||Rc(e,t,n,r))&&(!ps(n)||rl(e,t,n,r))&&(!vs(n)||Iu(e,t,n,r))&&(!Ms(n)||jd(e,t,n,r))&&(!ts(n)||Dc(e,t,n,r))&&(!rs(n)||Mc(e,t,n,r))&&(!Ns(n)||Id(e,t,n,r))&&(!qs(n)||!S(r)||Sf(e,t,n,r))&&(!Js(n)||!b(r)||Tf(e,t,n,r))&&(!Xo(n)||cc(e,t,n,r));return e.Pop(n),i}function Hf(e,t,n,r,i,a){return t.Push()&&B(e,t,n,r,i,a)&&t.Pop()}function B(e,t,n,r,i,a){e.Push(i);let o=Qo(i)?Ic(e,t,n,r,i,a):!!((!Gs(i)||bf(e,t,n,r,i,a))&+(!(b(a)&&!S(a))||!!((!Us(i)||pf(e,t,n,r,i,a))&+(!es(i)||Sc(e,t,n,r,i,a))&(!ss(i)||Kc(e,t,n,r,i,a))&(!cs(i)||Yc(e,t,n,r,i,a))&(!ls(i)||Qc(e,t,n,r,i,a))&(!Fs(i)||Ud(e,t,n,r,i,a))&(!Ls(i)||Qd(e,t,n,r,i,a))&(!Rs(i)||tf(e,t,n,r,i,a))&(!As(i)||wd(e,t,n,r,i,a))&(!Ts(i)||cd(e,t,n,r,i,a))))&(!S(a)||!!((!$o(i)||mc(e,t,n,r,i,a))&+(!as(i)||Uc(e,t,n,r,i,a))&(!ys(i)||Ku(e,t,n,r,i,a))&(!Ss(i)||Xu(e,t,n,r,i,a))&(!Cs(i)||nd(e,t,n,r,i,a))&(!Ds(i)||fd(e,t,n,r,i,a))&(!Os(i)||vd(e,t,n,r,i,a))&(!Is(i)||Kd(e,t,n,r,i,a))&(!Ks(i)||Af(e,t,n,r,i,a))))&(!v(a)||!!((!ws(i)||ad(e,t,n,r,i,a))&+(!ks(i)||xd(e,t,n,r,i,a))&(!gs(i)||Pu(e,t,n,r,i,a))&(!Ps(i)||Bd(e,t,n,r,i,a))))&(!(D(a)||zt(a))||!!((!ms(i)||sl(e,t,n,r,i,a))&+(!hs(i)||ul(e,t,n,r,i,a))&(!xs(i)||$u(e,t,n,r,i,a))&(!Es(i)||hd(e,t,n,r,i,a))&(!js(i)||Dd(e,t,n,r,i,a))))&(!Hs(i)||uf(e,t,n,r,i,a))&(!Vs(i)||af(e,t,n,r,i,a))&(!ds(i)||tl(e,t,n,r,i,a))&(!is(i)||zc(e,t,n,r,i,a))&(!ps(i)||il(e,t,n,r,i,a))&(!vs(i)||Lu(e,t,n,r,i,a))&(!Ms(i)||Md(e,t,n,r,i,a))&(!ts(i)||Oc(e,t,n,r,i,a))&(!rs(i)||Nc(e,t,n,r,i,a))&(!Ns(i)||Ld(e,t,n,r,i,a))&(!qs(i)||!S(a)||Cf(e,t,n,r,i,a))&(!Js(i)||!b(a)||Ef(e,t,n,r,i,a)))&&(!Xo(i)||lc(e,t,n,r,i,a));return e.Pop(i),o}const Uf=[0],Wf=new Map,Gf=new Map;function Kf(){return st(Uf[0]++)}function qf(e,t){Wf.has(e)||Wf.set(e,new Map);let n=Wf.get(e);if(n.has(t))return n.get(t);let r=Kf();return n.set(t,r),r}function Jf(e,t,n,r){return e.UseUnevaluated()?j(`check_${n}`,[`context`,r]):j(`check_${n}`,[r])}function Yf(e,t,n,r){let i=R(e,t,n,`value`);return t.UseUnevaluated()?Mo(`check_${r}`,Oo([`context`,`value`],i)):Mo(`check_${r}`,Oo([`value`],i))}function Xf(){Uf[0]=0,Wf.clear(),Gf.clear()}function Zf(){return[...Gf.values()]}function Qf(e,t,n,r){let i=qf(n,e.BaseURL().href),a=Jf(t,n,i,r);return Gf.has(i)?a:(Gf.set(i,``),Gf.set(i,Yf(e,t,n,i)),a)}function $f(e,t){return b(t)&&!Ue(e)?t[e]:void 0}function ep(e,t){return e.reduce((e,t)=>$f(t,e),t)}function tp(e){if(w(e.length,0))return[];let t=e.split(`/`).map(e=>e.replace(/~1/g,`/`).replace(/~0/g,`~`));return t.length>0&&t[0]===``?t.slice(1):t}function np(e,t){return ep(tp(t),e)}function rp(e,t,n){if(e.$id===n.hash)return e;let r=new URL(e.$id,t.href),i=new URL(n.href,t.href);if(w(r.pathname,i.pathname))return n.hash.startsWith(`#`)?op(e,t,n):e}function ip(e,t,n){let r=new URL(`#${e.$anchor}`,t.href),i=new URL(n.href,t.href);return w(r.href,i.href)?e:void 0}function ap(e,t,n){let r=new URL(`#${e.$dynamicAnchor}`,t.href),i=new URL(n.href,t.href);return w(r.href,i.href)?e:void 0}function op(e,t,n){if(n.href.endsWith(`#`))return e;if(!n.hash.startsWith(`#`))return;let r=decodeURIComponent(n.hash.slice(1));if(r.startsWith(`/`))return np(e,r)}function sp(e,t,n){if(_s(e)){let r=rp(e,t,n);if(!C(r))return r}if(ns(e)){let r=ip(e,t,n);if(!C(r))return r}if(us(e)){let r=ap(e,t,n);if(!C(r))return r}return op(e,t,n)}function cp(e,t,n){return e.reduce((e,r)=>{let i=up(r,t,n);return C(i)?e:i},void 0)}function lp(e,t,n){return y(e).reduce((r,i)=>{let a=up(e[i],t,n);return C(a)?r:a},void 0)}function up(e,t,n){let r=Zo(e)&&_s(e)?new URL(e.$id,t.href):t;if(Zo(e)){let t=sp(e,r,n);if(!C(t))return t}if(S(e))return cp(e,r,n);if(b(e))return lp(e,r,n)}function dp(e,t){let n=new URL(`http://unknown/`),r=_s(e)?new URL(e.$id,n.href):n;return up(e,r,new URL(t,r.href))}function fp(e,t,n,r){let i=n.$dynamicRef.startsWith(`#`)?dp(t,n.$dynamicRef):dp(e,n.$dynamicRef);if(!C(i))return!Zo(i)||!us(i)||new URL(n.$dynamicRef,`http://unknown/`).hash.startsWith(`#/`)?i:r.find(e=>e.$dynamicAnchor===i.$dynamicAnchor)??i}var pp=function(e,t,n,r){if(n===`a`&&!r)throw TypeError(`Private accessor was defined without a getter`);if(typeof t==`function`?e!==t||!r:!t.has(e))throw TypeError(`Cannot read private member from an object whose class did not declare it`);return n===`m`?r:n===`a`?r.call(e):r?r.value:t.get(e)},mp,hp,gp,_p,vp,yp=class{constructor(e,t){mp.add(this),this.context=e,this.schema=t,this.ids=[],this.anchors=[],this.recursiveAnchors=[],this.dynamicAnchors=[]}BaseURL(){return this.ids.reduce((e,t)=>new URL(t.$id,e),new URL(`http://unknown`))}Base(){return this.ids[this.ids.length-1]??this.schema}Push(e){Zo(e)&&(_s(e)&&(this.ids.push(e),pp(this,mp,`m`,hp).call(this,e)),ns(e)&&this.anchors.push(e),Bs(e)&&this.recursiveAnchors.push(e),us(e)&&this.dynamicAnchors.push(e))}Pop(e){Zo(e)&&(_s(e)&&(this.ids.pop(),pp(this,mp,`m`,gp).call(this,e)),ns(e)&&this.anchors.pop(),Bs(e)&&this.recursiveAnchors.pop(),us(e)&&this.dynamicAnchors.pop())}Ref(e){return pp(this,mp,`m`,_p).call(this,e)??pp(this,mp,`m`,vp).call(this,e)}RecursiveRef(e){return Bs(this.Base())?dp(this.recursiveAnchors[0],e.$recursiveRef):dp(this.Base(),e.$recursiveRef)}DynamicRef(e){let t=this.schema;return fp(t,this.Base(),e,this.dynamicAnchors)}};mp=new WeakSet,hp=function e(t,n=!0){if(!Zo(t))return;let r=t;if(!(!n&&_s(r))){!n&&us(r)&&this.dynamicAnchors.push(r);for(let t of y(r))pp(this,mp,`m`,e).call(this,r[t],!1)}},gp=function e(t,n=!0){if(!Zo(t))return;let r=t;if(!(!n&&_s(r))){!n&&us(r)&&this.dynamicAnchors.pop();for(let t of y(r))pp(this,mp,`m`,e).call(this,r[t],!1)}},_p=function(e){return E(this.context,e.$ref)?this.context[e.$ref]:void 0},vp=function(e){let t=this.schema;return e.$ref.startsWith(`#`)?dp(this.Base(),e.$ref):dp(t,e.$ref)};function bp(e){return`${e.Functions().join(`;
878
- `)}; return (value) => { ${(e.UseUnevaluated()?[`const context = new CheckContext({}, {})`,`return ${e.Entry()}`]:[`return ${e.Entry()}`]).join(`; `)} }`}function xp(e,t){return Uo(`CheckContext`,`Guard`,`Format`,`Hashing`,e.External().identifier,t)(ec,it,ju,Xe,e.External().variables)}function Sp(e){let t=new yp(e.Context(),e.Schema()),n=new ec;return r=>z(t,n,e.Schema(),r)}function Cp(e,t){return Ho()?xp(e,t):Sp(e)}var wp=class{constructor(e,t,n){this.isAccelerated=e,this.code=t,this.check=n}IsAccelerated(){return this.isAccelerated}Code(){return this.code}Check(e){return this.check(e)}},Tp=class{constructor(e,t,n,r,i,a){this.context=e,this.schema=t,this.external=n,this.functions=r,this.entry=i,this.useUnevaluated=a}Context(){return this.context}Schema(){return this.schema}UseUnevaluated(){return this.useUnevaluated}External(){return this.external}Functions(){return this.functions}Entry(){return this.entry}Evaluate(){let e=bp(this),t=Cp(this,e);return new wp(Ho(),e,t)}};function Ep(...e){let[t,n]=zo(e,{2:(e,t)=>[e,t],1:e=>[{},e]});ac(),Xf();let r=new yp(t,n),i=new $s(Qs(t,n)),a=Qf(r,i,n,`value`),o=Zf();return new Tp(t,n,oc(),o,a,i.UseUnevaluated())}function Dp(...e){let[t,n,r]=zo(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]}),i=Zt(),a=Ko(),o=[];return[B(new yp(t,n),new tc(e=>{if(!Mt(o.length,i.maxErrors))return o.push({...e,message:a(e)})}),`#`,``,n,r),o]}function Op(...e){let[t,n,r]=zo(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return z(new yp(t,n),new ec,n,r)}function kp(...e){let[t,n,r]=zo(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return Op(t,n,r)}function Ap(...e){let[t,n,r]=zo(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]}),[i,a]=Dp(t,n,r);return a}var jp=class extends Error{constructor(e,t,n){super(e),Object.defineProperty(this,"cause",{value:{source:e,errors:n,value:t},writable:!1,configurable:!1,enumerable:!1})}};function Mp(e,t,n){return S(n)?n.map(n=>Up(e,t.items,n)):n}function Np(e,t,n){return Up({...e,...t.$defs},$e(t.$ref),n)}function Pp(e,t){let n=E(t,`unevaluatedProperties`)?{additionalProperties:t.unevaluatedProperties}:{},r=Jt(e,t),i=Ht(r);return Ze(i)?Nt(i,n):i}function Fp(e,t,n){return Up(e,Pp(e,t),n)}function Ip(e){return E(e,`additionalProperties`)?e.additionalProperties:void 0}function Lp(e,t,n){if(!b(n)||S(n))return n;let r=Ip(t);for(let i of y(n)){if(E(t.properties,i)){n[i]=Up(e,t.properties[i],n[i]);continue}if($t(r)&&w(r,!0)||Et(r)&&kp(e,r,n[i])){n[i]=Up(e,r,n[i]);continue}delete n[i]}return n}function Rp(e,t,n){if(!b(n))return n;let r=Ip(t),[i,a]=[new RegExp(wt(t)),Dt(t)];for(let t of y(n)){if(i.test(t)){n[t]=Up(e,a,n[t]);continue}if($t(r)&&w(r,!0)||Et(r)&&kp(e,r,n[t])){n[t]=Up(e,r,n[t]);continue}delete n[t]}return n}function zp(e,t,n){return E(e,t.$ref)?Up(e,e[t.$ref],n):n}function Bp(e,t,n){if(!S(n))return n;let r=Math.min(n.length,t.items.length);for(let i=0;i<r;i++)n[i]=Up(e,t.items[i],n[i]);return At(n.length,r)?n.slice(0,r):n}function Vp(e){return Ut(e)}function Hp(e,t,n){for(let r of t.anyOf){let t=Up(e,r,Vp(n));if(kp(e,r,t))return t}return n}function Up(e,t,n){return ct(t)?Mp(e,t,n):We(t)?Np(e,t,n):lt(t)?Fp(e,t,n):Ze(t)?Lp(e,t,n):Ct(t)?Rp(e,t,n):qt(t)?zp(e,t,n):Kt(t)?Bp(e,t,n):kt(t)?Hp(e,t,n):n}function Wp(e,t){for(let n of Ro.Keys(e))Ro.HasPropertyKey(t,n)||(t[n]=e[n]);return t}function Gp(e){let t={};for(let n of Ro.Keys(e))t[n]=Jp(e[n]);return t}function Kp(e){return qp(Xt(e))}function qp(e){return e.map(e=>Jp(e))}function Jp(e){return Wp(e,ct(e)?Ve(Jp(e.items),_t(e)):lt(e)?tt(qp(e.allOf)):kt(e)?vt(Kp(e.anyOf)):Ze(e)?ft(Gp(e.properties)):Ct(e)?Rt(Qt(e),Jp(Dt(e))):Kt(e)?Bt(qp(e.items)):e)}function Yp(e){return Jp(e)}function Xp(...e){let[t,n,r]=zo(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return Up(t,Zt().unionPrioritySort?Yp(n):n,r)}function Zp(e){return b(e)&&E(e,`value`)}function V(e){return{value:e}}function Qp(e){return S(e)?V(e):V([e])}function $p(e){return w(e,!0)?V(BigInt(1)):V(BigInt(0))}const em=/^-?(0|[1-9]\d*)n$/,tm=/^-?(0|[1-9]\d*)\.\d+$/,nm=/^-?(0|[1-9]\d*)$/;function rm(e){return em.test(e)}function im(e){return tm.test(e)}function am(e){return nm.test(e)}function om(e){let t=e.toLowerCase();return rm(e)?V(BigInt(e.slice(0,e.length-1))):im(e)?V(BigInt(e.split(`.`)[0])):am(e)?V(BigInt(e)):w(t,`false`)?V(BigInt(0)):w(t,`true`)?V(BigInt(1)):void 0}function sm(e){return zt(e)?V(e):$t(e)?$p(e):D(e)?V(BigInt(Math.trunc(e))):Ke(e)?V(BigInt(0)):v(e)?om(e):C(e)?V(BigInt(0)):void 0}function cm(e){return w(e,BigInt(0))?V(!1):w(e,BigInt(1))?V(!0):void 0}function lm(e){return w(e,0)?V(!1):w(e,1)?V(!0):void 0}function um(e){return w(e.toLowerCase(),`false`)?V(!1):w(e.toLowerCase(),`true`)?V(!0):w(e,`0`)?V(!1):w(e,`1`)?V(!0):void 0}function dm(e){return zt(e)?cm(e):$t(e)?V(e):D(e)?lm(e):Ke(e)?V(!1):v(e)?um(e):C(e)?V(!1):void 0}function fm(e){return w(e,BigInt(0))?V(null):void 0}function pm(e){return w(e,!1)?V(null):void 0}function mm(e){return w(e,0)?V(null):void 0}function hm(e){let t=e.toLowerCase();return w(t,`undefined`)||w(t,`null`)||w(e,``)||w(e,`0`)?V(null):void 0}function gm(e){return zt(e)?fm(e):$t(e)?pm(e):D(e)?mm(e):Ke(e)?V(null):v(e)?hm(e):C(e)?V(null):void 0}const _m=BigInt(2**53-1),vm=BigInt(-(2**53-1));function ym(e){return e<=_m&&e>=vm?V(Number(e)):void 0}function bm(e){return V(+!!e)}function xm(e){let t=+e;if(D(t))return V(t);let n=e.toLowerCase();if(w(n,`false`))return V(0);if(w(n,`true`))return V(1);let r=sm(e);if(Zp(r))return r.value<=_m&&r.value>=vm?V(Number(r.value)):void 0}function Sm(e){return zt(e)?ym(e):$t(e)?bm(e):D(e)?V(e):Ke(e)?V(0):v(e)?xm(e):C(e)?V(0):void 0}function Cm(e){return zt(e)||$t(e)||D(e)?V(e.toString()):Ke(e)?V(`null`):v(e)?V(e):C(e)?V(``):void 0}function wm(e){return w(e,BigInt(0))?V(void 0):void 0}function Tm(e){return w(e,!1)?V(void 0):void 0}function Em(e){return w(e,0)?V(void 0):void 0}function Dm(e){let t=e.toLowerCase();return w(t,`undefined`)||w(t,`null`)||w(e,``)||w(e,`0`)?V(void 0):void 0}function Om(e){return zt(e)?wm(e):$t(e)?Tm(e):D(e)?Em(e):Ke(e)?V(void 0):v(e)?Dm(e):C(e)?V(e):void 0}function km(e,t,n){return Qp(n).value.map(n=>nh(e,t.items,n))}function Am(e,t,n){let r=sm(n);return Zp(r)?r.value:n}function jm(e,t,n){let r=dm(n);return Zp(r)?r.value:n}function Mm(e,t,n){return nh({...e,...t.$defs},$e(t.$ref),n)}function Nm(e,t,n){return nh(e,Ht(t),n)}function Pm(e,t,n){let r=Sm(n);return Zp(r)?Math.trunc(r.value):n}function Fm(e,t,n){let r=Jt(e,t);return nh(e,Ht(r),n)}function Im(e,t,n){let r=sm(n);return Zp(r)&&w(t.const,r.value)?r.value:n}function Lm(e,t,n){let r=dm(n);return Zp(r)&&w(t.const,r.value)?r.value:n}function Rm(e,t,n){let r=Sm(n);return Zp(r)&&w(t.const,r.value)?r.value:n}function zm(e,t,n){let r=Cm(n);return Zp(r)&&w(t.const,r.value)?r.value:n}function Bm(e,t,n){return w(t.const,n)?n:dt(t)?Im(e,t,n):Je(t)?Lm(e,t,n):qe(t)?Rm(e,t,n):at(t)?zm(e,t,n):Qe()}function Vm(e,t,n){let r=gm(n);return Zp(r)?r.value:n}function Hm(e,t,n){let r=Sm(n);return Zp(r)?r.value:n}function Um(e,t,n,r){let i=y(r);for(let[a,o]of t)for(let t of i)a.test(t)||(r[t]=nh(e,n,r[t]));return r}function Wm(e,t,n){return mt(e)&&C(n[t])}function Gm(e,t,n){let r=Pt(t.properties),i=y(n);for(let[t,a]of r)for(let r of i)!t.test(r)||Wm(a,r,n)||(n[r]=nh(e,a,n[r]));return E(t,`additionalProperties`)&&b(t.additionalProperties)?Um(e,r,t.additionalProperties,n):n}function Km(e,t,n){return Ye(n)?Gm(e,t,n):n}function qm(e,t,n){let r=Pt(t.patternProperties),i=y(n);for(let[t,a]of r)for(let r of i)t.test(r)&&(n[r]=nh(e,a,n[r]));return E(t,`additionalProperties`)&&b(t.additionalProperties)?Um(e,r,t.additionalProperties,n):n}function Jm(e,t,n){return Ye(n)?qm(e,t,n):n}function Ym(e,t,n){return E(e,t.$ref)?nh(e,e[t.$ref],n):n}function Xm(e,t,n){let r=Cm(n);return Zp(r)?r.value:n}function Zm(e,t,n){return nh(e,Ht(t),n)}function Qm(e,t,n){if(!S(n))return n;for(let r=0;r<Math.min(t.items.length,n.length);r++)n[r]=nh(e,t.items[r],n[r]);return n}function $m(e,t,n){let r=Om(n);return Zp(r)?r.value:n}function eh(e,t,n){if(t.anyOf.some(t=>kp(e,t,n)))return n;let r=t.anyOf.map(t=>nh(e,t,Vp(n))).find(n=>kp(e,t,n));return C(r)?n:r}function th(e,t,n){return Zp(Om(n))?void 0:n}function nh(e,t,n){return ct(t)?km(e,t,n):nt(t)?Am(e,t,n):Ft(t)?jm(e,t,n):We(t)?Mm(e,t,n):cn(t)?Nm(e,t,n):He(t)?Pm(e,t,n):lt(t)?Fm(e,t,n):nn(t)?Bm(e,t,n):Ge(t)?Vm(e,t,n):rn(t)?Hm(e,t,n):Ze(t)?Km(e,t,n):Ct(t)?Jm(e,t,n):qt(t)?Ym(e,t,n):en(t)?Xm(e,t,n):bt(t)?Zm(e,t,n):Kt(t)?Qm(e,t,n):Yt(t)?$m(e,t,n):kt(t)?eh(e,t,n):Wt(t)?th(e,t,n):n}function rh(...e){let[t,n,r]=zo(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return nh(t,n,r)}function ih(e,t,n){if(!S(n))return n;for(let r=0;r<n.length;r++)n[r]=ph(e,t.items,n[r]);return n}function ah(e,t,n){return ph({...e,...t.$defs},$e(t.$ref),n)}function oh(e,t){return C(t)?Vt(e.default)?e.default():Vp(e.default):t}function sh(e,t,n){let r=Jt(e,t);return ph(e,Ht(r),n)}function ch(e,t,n){if(!b(n))return n;let r=y(t.properties);for(let i of r){let r=ph(e,t.properties[i],n[i]);C(r)&&(mt(t.properties[i])||!E(t.properties[i],`default`))||(n[i]=r)}if(!es(t)||$t(t.additionalProperties))return n;for(let i of y(n))r.includes(i)||(n[i]=ph(e,t.additionalProperties,n[i]));return n}function lh(e,t,n){if(!b(n))return n;let[r,i]=[new RegExp(wt(t)),Dt(t)];for(let t of y(n))r.test(t)&&os(i)&&(n[t]=ph(e,i,n[t]));if(!es(t))return n;for(let i of y(n))r.test(i)||(n[i]=ph(e,t.additionalProperties,n[i]));return n}function uh(e,t,n){return E(e,t.$ref)?ph(e,e[t.$ref],n):n}function dh(e,t,n){if(!S(n))return n;let[r,i]=[t.items,Math.max(t.items.length,n.length)];for(let t=0;t<i;t++)t<r.length&&(n[t]=ph(e,r[t],n[t]));return n}function fh(e,t,n){for(let r of t.anyOf){let t=ph(e,r,Vp(n));if(kp(e,r,t))return t}return n}function ph(e,t,n){let r=os(t)?oh(t,n):n;return ct(t)?ih(e,t,r):We(t)?ah(e,t,r):lt(t)?sh(e,t,r):Ze(t)?ch(e,t,r):Ct(t)?lh(e,t,r):qt(t)?uh(e,t,r):Kt(t)?dh(e,t,r):kt(t)?fh(e,t,r):r}function mh(...e){let[t,n,r]=zo(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return ph(t,n,r)}function hh(e){return(...t)=>{let[n,r,i]=zo(t,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return e.reduce((e,t)=>t(n,r,e),i)}}function gh(e,t,n){return t[`~codec`].decode(n)}function _h(e,t,n){return t[`~codec`].encode(n)}function H(e,t,n,r){return rt(n)?w(e,`Decode`)?gh(t,n,r):_h(t,n,r):r}function vh(e,t,n,r){if(!S(r))return r;for(let i=0;i<r.length;i++)r[i]=U(e,t,n.items,r[i]);return H(e,t,n,r)}function yh(e,t,n,r){let i=H(e,t,n,r);if(!S(i))return i;for(let r=0;r<i.length;r++)i[r]=U(e,t,n.items,i[r]);return i}function bh(e,t,n,r){return w(e,`Decode`)?vh(e,t,n,r):yh(e,t,n,r)}function xh(e,t,n,r){return r=U(e,{...t,...n.$defs},$e(n.$ref),r),H(e,t,n,r)}function Sh(e){return e.reduce((e,t)=>({...e,...t}),{})}function Ch(e,t){for(let n of t)if(!Ot(e,n))return n;return e}function wh(e,t,n,r){if(w(n.allOf.length,0))return H(e,t,n,r);let i=n.allOf.map(n=>U(e,t,n,Xp(n,Vp(r))));return H(e,t,n,i.every(e=>b(e))?Sh(i):Ch(r,i))}function Th(e,t,n,r){if(w(n.allOf.length,0))return H(e,t,n,r);let i=H(e,t,n,r),a=n.allOf.map(n=>U(e,t,n,Xp(n,Vp(i))));return a.every(e=>b(e))?Sh(a):Ch(i,a)}function Eh(e,t,n,r){return w(e,`Decode`)?wh(e,t,n,r):Th(e,t,n,r)}function Dh(e,t,n,r){if(!Ye(r))return r;for(let i of y(n.properties))!E(r,i)||Wm(n.properties[i],i,r)||(r[i]=U(e,t,n.properties[i],r[i]));return H(e,t,n,r)}function Oh(e,t,n,r){let i=H(e,t,n,r);if(!Ye(i))return i;for(let r of y(n.properties))!E(i,r)||Wm(n.properties[r],r,i)||(i[r]=U(e,t,n.properties[r],i[r]));return i}function kh(e,t,n,r){return w(e,`Decode`)?Dh(e,t,n,r):Oh(e,t,n,r)}function Ah(e,t,n,r){if(!Ye(r))return r;let i=new RegExp(wt(n));for(let a of y(r))i.test(a)&&(r[a]=U(e,t,Dt(n),r[a]));return H(e,t,n,r)}function jh(e,t,n,r){let i=H(e,t,n,r);if(!Ye(i))return i;let a=new RegExp(wt(n));for(let r of y(i))a.test(r)&&(i[r]=U(e,t,Dt(n),i[r]));return i}function Mh(e,t,n,r){return w(e,`Decode`)?Ah(e,t,n,r):jh(e,t,n,r)}function Nh(e,t,n,r){return E(t,n.$ref)?U(e,t,t[n.$ref],r):r}function Ph(e,t,n,r){return w(e,`Decode`)?H(e,t,n,Nh(e,t,n,r)):Nh(e,t,n,H(e,t,n,r))}function Fh(e,t,n,r){if(!S(r))return r;for(let i=0;i<Math.min(n.items.length,r.length);i++)r[i]=U(e,t,n.items[i],r[i]);return H(e,t,n,r)}function Ih(e,t,n,r){let i=H(e,t,n,r);if(!S(i))return r;for(let r=0;r<Math.min(n.items.length,i.length);r++)i[r]=U(e,t,n.items[r],i[r]);return i}function Lh(e,t,n,r){return w(e,`Decode`)?Fh(e,t,n,r):Ih(e,t,n,r)}function Rh(e,t,n,r){for(let i of n.anyOf)if(kp(t,i,r))return H(e,t,n,U(e,t,i,r));return r}function zh(e,t,n,r){let i=H(e,t,n,r);for(let r of n.anyOf){let n=U(e,t,r,Vp(i));if(kp(t,r,n))return n}return i}function Bh(e,t,n,r){return w(e,`Decode`)?Rh(e,t,n,r):zh(e,t,n,r)}function U(e,t,n,r){return ct(n)?bh(e,t,n,r):We(n)?xh(e,t,n,r):lt(n)?Eh(e,t,n,r):Ze(n)?kh(e,t,n,r):Ct(n)?Mh(e,t,n,r):qt(n)?Ph(e,t,n,r):Kt(n)?Lh(e,t,n,r):kt(n)?Bh(e,t,n,r):H(e,t,n,r)}var Vh=class extends jp{constructor(e,t){super(`Decode`,e,t)}};function Hh(e,t,n){if(!kp(e,t,n))throw new Vh(n,Ap(e,t,n));return n}function Uh(e,t,n){return U(`Decode`,e,Zt().unionPrioritySort?Yp(t):t,n)}const Wh=hh([(e,t,n)=>Vp(n),(e,t,n)=>mh(e,t,n),(e,t,n)=>rh(e,t,n),(e,t,n)=>Xp(e,t,n),(e,t,n)=>Hh(e,t,n),(e,t,n)=>Uh(e,t,n)]);function Gh(...e){let[t,n,r]=zo(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return Wh(t,n,r)}var Kh=class extends jp{constructor(e,t){super(`Encode`,e,t)}};function qh(e,t,n){if(!kp(e,t,n))throw new Kh(n,Ap(e,t,n));return n}function Jh(e,t,n){return U(`Encode`,e,Zt().unionPrioritySort?Yp(t):t,n)}const Yh=hh([(e,t,n)=>Vp(n),(e,t,n)=>Jh(e,t,n),(e,t,n)=>mh(e,t,n),(e,t,n)=>rh(e,t,n),(e,t,n)=>Xp(e,t,n),(e,t,n)=>qh(e,t,n)]);function Xh(...e){let[t,n,r]=zo(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return Yh(t,n,r)}function Zh(e,t){return rt(t)||ag(e,t.items)}function Qh(e,t){return rt(t)||ng({...e,...t.$defs},$e(t.$ref))}function $h(e,t){return rt(t)||t.allOf.some(t=>ag(e,t))}function eg(e,t){return rt(t)||y(t.properties).some(n=>ag(e,t.properties[n]))}function tg(e,t){return rt(t)||ag(e,Dt(t))}function ng(e,t){return!og.has(t.$ref)&&(og.add(t.$ref),rt(t)||E(e,t.$ref)&&ag(e,e[t.$ref]))}function rg(e,t){return rt(t)||t.items.some(t=>ag(e,t))}function ig(e,t){return rt(t)||t.anyOf.some(t=>ag(e,t))}function ag(e,t){return ct(t)?Zh(e,t):We(t)?Qh(e,t):lt(t)?$h(e,t):Ze(t)?eg(e,t):Ct(t)?tg(e,t):qt(t)?ng(e,t):Kt(t)?rg(e,t):kt(t)?ig(e,t):rt(t)}const og=new Set;function sg(...e){let[t,n]=zo(e,{2:(e,t)=>[e,t],1:e=>[{},e]});return og.clear(),ag(t,n)}var cg=class extends Error{constructor(e,t){super(t),this.type=e}};function lg(e,t){return Vt(t.default)?t.default(t):b(t.default)?Vp(t.default):t.default}function ug(e,t){if(Ks(t)&&!os(t))throw new cg(t,`Arrays with uniqueItems constraints must specify a default annotation`);let n=Os(t)?t.minItems:0;return Array.from({length:n},()=>jg(e,t.items))}function dg(e,t){return hs(t)?BigInt(t.exclusiveMinimum)+BigInt(1):Es(t)?BigInt(t.minimum):BigInt(0)}function fg(e,t){return!1}function pg(e,t){let n=jg(e,t.instanceType);return class{constructor(){Object.assign(this,n)}}}function mg(e,t){return jg({...e,...t.$defs},$e(t.$ref))}function hg(e,t){return jg(e,Ht(t))}function gg(e,t){let n=jg(e,t.returnType);return()=>n}function _g(e,t){return hs(t)&&D(t.exclusiveMinimum)?t.exclusiveMinimum+1:Es(t)?t.minimum:0}function vg(e,t){let n=Jt(e,t);return jg(e,Ht(n))}function yg(e,t){return t.const}function bg(e,t){throw new cg(t,`Cannot create TNever types`)}function xg(e,t){return null}function Sg(e,t){return hs(t)&&D(t.exclusiveMinimum)?t.exclusiveMinimum+1:Es(t)?t.minimum:0}function Cg(e,t){return(C(t.required)?[]:t.required).reduce((n,r)=>({...n,[r]:jg(e,t.properties[r])}),{})}function wg(e,t){if(As(t)&&!os(t))throw new cg(t,`Record with the minProperties constraint must have a default annotation`);return{}}function Tg(e,t){return E(e,t.$ref)?jg(e,e[t.$ref]):(()=>{throw new cg(t,`Unable to deref Ref`)})()}function Eg(e,t){if((Ps(t)||gs(t))&&!os(t))throw Error(`Strings with format or pattern constraints must specify default`);let n=ks(t)?t.minLength:0;return``.padEnd(n)}function Dg(e,t){return Symbol()}function Og(e,t){let n=jt(t.pattern);if(en(n))throw new cg(t,`Unable to create TemplateLiteral due to infinite type expansion`);return jg(e,n)}function kg(e,t){return Array.from({length:t.minItems},(n,r)=>jg(e,t.items[r]))}function Ag(e,t){if(w(t.anyOf.length,0))throw Error(`Unable to create Union with no variants`);return jg(e,t.anyOf[0])}function jg(e,t){return os(t)?lg(e,t):ct(t)?ug(e,t):nt(t)?dg(e,t):Ft(t)?fg(e,t):ht(t)?pg(e,t):We(t)?mg(e,t):cn(t)?hg(e,t):gt(t)?gg(e,t):He(t)?_g(e,t):lt(t)?vg(e,t):nn(t)?yg(e,t):et(t)?bg(e,t):Ge(t)?xg(e,t):rn(t)?Sg(e,t):Ze(t)?Cg(e,t):Ct(t)?wg(e,t):qt(t)?Tg(e,t):en(t)?Eg(e,t):xt(t)?Dg(e,t):bt(t)?Og(e,t):Kt(t)?kg(e,t):Yt(t)?void 0:kt(t)?Ag(e,t):(Wt(t),void 0)}function Mg(...e){let[t,n]=zo(e,{2:(e,t)=>[e,t],1:e=>[{},e]});return jg(t,n)}var Ng=class extends jp{constructor(e,t){super(`Parse`,e,t)}};function Pg(e,t,n){if(!kp(e,t,n))throw new Ng(n,Ap(e,t,n));return n}const Fg=hh([(e,t,n)=>Vp(n),(e,t,n)=>mh(e,t,n),(e,t,n)=>rh(e,t,n),(e,t,n)=>Xp(e,t,n),(e,t,n)=>Pg(e,t,n)]),Ig=ft({type:Lt(`insert`),path:on(),value:pt()}),Lg=Object({type:Lt(`update`),path:on(),value:pt()}),Rg=ft({type:Lt(`delete`),path:on()});vt([Ig,Lg,Rg]);var zg=class{constructor(e,t){this.hasCodec=sg(e,t),this.buildResult=Ep(e,t),this.evaluateResult=this.buildResult.Evaluate()}IsAccelerated(){return this.evaluateResult.IsAccelerated()}Context(){return this.buildResult.Context()}Type(){return this.buildResult.Schema()}Code(){return this.evaluateResult.Code()}Check(e){return this.evaluateResult.Check(e)}Parse(e){if(this.Check(e))return e;if(Zt().correctiveParse)return Fg(this.Context(),this.Type(),e);throw new Ng(e,this.Errors(e))}Errors(e){return this.IsAccelerated()&&this.Check(e)?[]:Ap(this.Context(),this.Type(),e)}Clean(e){return Xp(this.Context(),this.Type(),e)}Convert(e){return rh(this.Context(),this.Type(),e)}Create(){return Mg(this.Context(),this.Type())}Default(e){return mh(this.Context(),this.Type(),e)}Decode(e){return this.hasCodec?Gh(this.Context(),this.Type(),e):this.Parse(e)}Encode(e){return this.hasCodec?Xh(this.Context(),this.Type(),e):this.Parse(e)}};function Bg(...e){let[t,n]=zo(e,{2:(e,t)=>[e,t],1:e=>[{},e]});return new zg(t,n)}const Vg=new WeakMap,Hg=Symbol.for(`TypeBox.Kind`);function Ug(e){return typeof e.type==`string`?[e.type]:Array.isArray(e.type)?e.type.filter(e=>typeof e==`string`):[]}function Wg(e,t){switch(t){case`number`:return typeof e==`number`;case`integer`:return typeof e==`number`&&Number.isInteger(e);case`boolean`:return typeof e==`boolean`;case`string`:return typeof e==`string`;case`null`:return e===null;case`array`:return Array.isArray(e);case`object`:return typeof e==`object`&&!!e&&!Array.isArray(e);default:return!1}}function Gg(e){try{return Qg(e)}catch{return}}function Kg(e,t){switch(t){case`number`:if(e===null)return 0;if(typeof e==`string`&&e.trim()!==``){let t=Number(e);if(Number.isFinite(t))return t}return typeof e==`boolean`?+!!e:e;case`integer`:if(e===null)return 0;if(typeof e==`string`&&e.trim()!==``){let t=Number(e);if(Number.isInteger(t))return t}return typeof e==`boolean`?+!!e:e;case`boolean`:if(e===null)return!1;if(typeof e==`string`){if(e===`true`)return!0;if(e===`false`)return!1}if(typeof e==`number`){if(e===1)return!0;if(e===0)return!1}return e;case`string`:return e===null?``:typeof e==`number`||typeof e==`boolean`?String(e):e;case`null`:return e===``||e===0||e===!1?null:e;default:return e}}function qg(e,t){let n=t.properties,r=new Set(n?Object.keys(n):[]);if(n)for(let[t,r]of Object.entries(n))t in e&&(e[t]=Xg(e[t],r));if(t.additionalProperties&&typeof t.additionalProperties==`object`)for(let[n,i]of Object.entries(e))r.has(n)||(e[n]=Xg(i,t.additionalProperties))}function Jg(e,t){if(Array.isArray(t.items)){for(let n=0;n<e.length;n++){let r=t.items[n];r&&(e[n]=Xg(e[n],r))}return}if(t.items&&typeof t.items==`object`)for(let n=0;n<e.length;n++)e[n]=Xg(e[n],t.items)}function Yg(e,t){for(let n of t)if(Gg(n)?.Check(e))return e;for(let n of t){let t=Xg(structuredClone(e),n);if(Gg(n)?.Check(t))return t}return e}function Xg(e,t){let n=e;if(Array.isArray(t.allOf))for(let e of t.allOf)n=Xg(n,e);Array.isArray(t.anyOf)&&(n=Yg(n,t.anyOf)),Array.isArray(t.oneOf)&&(n=Yg(n,t.oneOf));let r=Ug(t),i=r.length>1&&r.some(e=>Wg(n,e));if(r.length>0&&!i)for(let e of r){let t=Kg(n,e);if(t!==n){n=t;break}}return r.includes(`object`)&&typeof n==`object`&&n&&!Array.isArray(n)&&qg(n,t),r.includes(`array`)&&Array.isArray(n)&&Jg(n,t),n}function Zg(e,t){if(Array.isArray(e)){if(Array.isArray(t.items))for(let n=0;n<e.length;n++){let r=t.items[n];r&&Zg(e[n],r)}else if(t.items)for(let n of e)Zg(n,t.items);return}if(typeof e!=`object`||!e||!t.properties)return;let n=e,r=new Set(t.required??[]);for(let[e,i]of Object.entries(t.properties))e in n&&(n[e]===null&&!r.has(e)&&typeof i.$ref!=`string`&&Gg(i)?.Check(null)===!1?delete n[e]:Zg(n[e],i))}function Qg(e){let t=e,n=Vg.get(t);if(n)return n;let r=Bg(e);return Vg.set(t,r),r}function $g(e){if(e.keyword===`required`){let t=e.params.requiredProperties?.[0];if(t){let n=e.instancePath.replace(/^\//,``).replace(/\//g,`.`);return n?`${n}.${t}`:t}}return e.instancePath.replace(/^\//,``).replace(/\//g,`.`)||`root`}function e_(e,t){let n=structuredClone(t.arguments);Zg(n,e.parameters),rh(e.parameters,n);let r=Qg(e.parameters);if(!Object.getOwnPropertySymbols(e.parameters).includes(Hg)){let t=Xg(n,e.parameters);if(t!==n){if(typeof n==`object`&&n&&typeof t==`object`&&t){for(let e of Object.keys(n))delete n[e];Object.assign(n,t)}else return r.Check(t)?t:n}}if(r.Check(n))return n;let i=r.Errors(n).map(e=>` - ${$g(e)}: ${e.message}`).join(`
879
- `)||`Unknown validation error`,a=`Validation failed for tool "${t.name}":\n${i}\n\nReceived arguments:\n${JSON.stringify(t.arguments,null,2)}`;throw Error(a)}function t_(){throw Error(`No default stream function configured. Pass streamFn explicitly or call setDefaultStreamFn().`)}async function n_(e,t,n,r,i,a){let o=[...e],s={...t,messages:[...t.messages,...e]};await r({type:`agent_start`}),await r({type:`turn_start`});for(let t of e)await r({type:`message_start`,message:t}),await r({type:`message_end`,message:t});return await i_(s,o,n,i,r,a??t_()),o}async function r_(e,t,n,r,i){if(e.messages.length===0)throw Error(`Cannot continue: no messages in context`);if(e.messages[e.messages.length-1].role===`assistant`)throw Error(`Cannot continue from message role: assistant`);let a=[],o={...e};return await n({type:`agent_start`}),await n({type:`turn_start`}),await i_(o,a,t,r,n,i??t_()),a}async function i_(e,t,n,r,i,a){let o=e,s=n,c,l=await s.getSteeringMessages?.()||[];for(;;){let e=!0;for(;e||l.length>0;){if(c){let e=await s.prepareNextTurn?.(c);e&&(o=e.context??o,s={...s,model:e.model??s.model,reasoning:e.thinkingLevel===void 0?s.reasoning:e.thinkingLevel===`off`?void 0:e.thinkingLevel}),l.length===0&&(l=await s.getSteeringMessages?.()||[]),await i({type:`turn_start`})}if(l.length>0){for(let e of l)await i({type:`message_start`,message:e}),await i({type:`message_end`,message:e}),o.messages.push(e),t.push(e);l=[]}let n=await a_(o,s,r,i,a);if(t.push(n),n.stopReason===`error`||n.stopReason===`aborted`){await i({type:`turn_end`,message:n,toolResults:[]}),await i({type:`agent_end`,messages:t});return}let u=n.content.filter(e=>e.type===`toolCall`),d=[];if(e=!1,u.length>0){let a=n.stopReason===`length`?await o_(u,i):await s_(o,n,s,r,i);d.push(...a.messages),e=!a.terminate;for(let e of d)o.messages.push(e),t.push(e)}if(await i({type:`turn_end`,message:n,toolResults:d}),c={message:n,toolResults:d,context:o,newMessages:t},await s.shouldStopAfterTurn?.(c)){await i({type:`agent_end`,messages:t});return}l=await s.getSteeringMessages?.()||[]}let n=await s.getFollowUpMessages?.()||[];if(n.length>0){l=n;continue}break}await i({type:`agent_end`,messages:t})}async function a_(e,t,n,r,i){let a=e.messages;t.transformContext&&(a=await t.transformContext(a,n));let o=await t.convertToLlm(a),s={systemPrompt:e.systemPrompt,messages:o,tools:e.tools},c=(t.getApiKey?await t.getApiKey(t.model.provider):void 0)||t.apiKey,l=await i(t.model,s,{...t,apiKey:c,signal:n}),u=null,d=!1;for await(let t of l)switch(t.type){case`start`:u=t.partial,e.messages.push(u),d=!0,await r({type:`message_start`,message:{...u}});break;case`text_start`:case`text_delta`:case`text_end`:case`thinking_start`:case`thinking_delta`:case`thinking_end`:case`toolcall_start`:case`toolcall_delta`:case`toolcall_end`:u&&(u=t.partial,e.messages[e.messages.length-1]=u,await r({type:`message_update`,assistantMessageEvent:t,message:{...u}}));break;case`done`:case`error`:{let t=await l.result();return d?e.messages[e.messages.length-1]=t:e.messages.push(t),d||await r({type:`message_start`,message:{...t}}),await r({type:`message_end`,message:t}),t}}let f=await l.result();return d?e.messages[e.messages.length-1]=f:(e.messages.push(f),await r({type:`message_start`,message:{...f}})),await r({type:`message_end`,message:f}),f}async function o_(e,t){let n=[];for(let r of e){await t({type:`tool_execution_start`,toolCallId:r.id,toolName:r.name,args:r.arguments});let e={toolCall:r,result:h_(`Tool call "${r.name}" was not executed: the response hit the output token limit, so its arguments may be truncated. Re-issue the tool call with complete arguments.`),isError:!0};await g_(e,t);let i=__(e);await v_(i,t),n.push(i)}return{messages:n,terminate:!1}}async function s_(e,t,n,r,i){let a=t.content.filter(e=>e.type===`toolCall`),o=a.some(t=>e.tools?.find(e=>e.name===t.name)?.executionMode===`sequential`);return n.toolExecution===`sequential`||o?c_(e,t,a,n,r,i):l_(e,t,a,n,r,i)}async function c_(e,t,n,r,i,a){let o=[],s=[];for(let c of n){await a({type:`tool_execution_start`,toolCallId:c.id,toolName:c.name,args:c.arguments});let n=await f_(e,t,c,r,i),l;l=n.kind===`immediate`?{toolCall:c,result:n.result,isError:n.isError}:await m_(e,t,n,await p_(n,i,a),r,i),await g_(l,a);let u=__(l);if(await v_(u,a),o.push(l),s.push(u),i?.aborted)break}return{messages:s,terminate:u_(o)}}async function l_(e,t,n,r,i,a){let o=[];for(let s of n){await a({type:`tool_execution_start`,toolCallId:s.id,toolName:s.name,args:s.arguments});let n=await f_(e,t,s,r,i);if(n.kind===`immediate`){let e={toolCall:s,result:n.result,isError:n.isError};if(await g_(e,a),o.push(e),i?.aborted)break;continue}if(o.push(async()=>{let o=await p_(n,i,a),s=await m_(e,t,n,o,r,i);return await g_(s,a),s}),i?.aborted)break}let s=await Promise.all(o.map(e=>typeof e==`function`?e():Promise.resolve(e))),c=[];for(let e of s){let t=__(e);await v_(t,a),c.push(t)}return{messages:c,terminate:u_(s)}}function u_(e){return e.length>0&&e.every(e=>e.result.terminate===!0)}function d_(e,t){if(!e.prepareArguments)return t;let n=e.prepareArguments(t.arguments);return n===t.arguments?t:{...t,arguments:n}}async function f_(e,t,n,r,i){let a=e.tools?.find(e=>e.name===n.name);if(!a)return{kind:`immediate`,result:h_(`Tool ${n.name} not found`),isError:!0};try{let o=e_(a,d_(a,n));if(r.beforeToolCall){let a=await r.beforeToolCall({assistantMessage:t,toolCall:n,args:o,context:e},i);if(i?.aborted)return{kind:`immediate`,result:h_(`Operation aborted`),isError:!0};if(a?.block){let e=h_(a.reason||`Tool execution was blocked`);return a.terminate===!0&&(e.terminate=!0),{kind:`immediate`,result:e,isError:!0}}}return i?.aborted?{kind:`immediate`,result:h_(`Operation aborted`),isError:!0}:{kind:`prepared`,toolCall:n,tool:a,args:o}}catch(e){return{kind:`immediate`,result:h_(e instanceof Error?e.message:String(e)),isError:!0}}}async function p_(e,t,n){let r=[],i=!0;try{let a=await e.tool.execute(e.toolCall.id,e.args,t,t=>{i&&r.push(Promise.resolve(n({type:`tool_execution_update`,toolCallId:e.toolCall.id,toolName:e.toolCall.name,args:e.toolCall.arguments,partialResult:t})))});return i=!1,await Promise.all(r),{result:a,isError:!1}}catch(e){return i=!1,await Promise.all(r),{result:h_(e instanceof Error?e.message:String(e)),isError:!0}}finally{i=!1}}async function m_(e,t,n,r,i,a){let o=r.result,s=r.isError;if(i.afterToolCall)try{let r=await i.afterToolCall({assistantMessage:t,toolCall:n.toolCall,args:n.args,result:o,isError:s,context:e},a);r&&(o={...o,content:r.content??o.content,details:r.details??o.details,usage:r.usage??o.usage,terminate:r.terminate??o.terminate},s=r.isError??s)}catch(e){o=h_(e instanceof Error?e.message:String(e)),s=!0}return{toolCall:n.toolCall,result:o,isError:s}}function h_(e){return{content:[{type:`text`,text:e}],details:{}}}async function g_(e,t){await t({type:`tool_execution_end`,toolCallId:e.toolCall.id,toolName:e.toolCall.name,result:e.result,isError:e.isError})}function __(e){return{role:`toolResult`,toolCallId:e.toolCall.id,toolName:e.toolCall.name,content:e.result.content??[],details:e.result.details,usage:e.result.usage,...e.result.addedToolNames?.length?{addedToolNames:e.result.addedToolNames}:{},isError:e.isError,timestamp:Date.now()}}async function v_(e,t){await t({type:`message_start`,message:e}),await t({type:`message_end`,message:e})}function y_(e){return e.filter(e=>e.role===`user`||e.role===`assistant`||e.role===`toolResult`)}const b_={input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},x_={id:`unknown`,name:`unknown`,api:`unknown`,provider:`unknown`,baseUrl:``,reasoning:!1,input:[],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:0,maxTokens:0};function S_(e){let t=e?.tools?.slice()??[],n=e?.messages?.slice()??[];return{systemPrompt:e?.systemPrompt??``,model:e?.model??x_,thinkingLevel:e?.thinkingLevel??`off`,get tools(){return t},set tools(e){t=e.slice()},get messages(){return n},set messages(e){n=e.slice()},isStreaming:!1,streamingMessage:void 0,pendingToolCalls:new Set,errorMessage:void 0}}var C_=class{messages=[];mode;constructor(e){this.mode=e}enqueue(e){this.messages.push(e)}hasItems(){return this.messages.length>0}drain(){if(this.mode===`all`){let e=this.messages.slice();return this.messages=[],e}let e=this.messages[0];return e?(this.messages=this.messages.slice(1),[e]):[]}clear(){this.messages=[]}},w_=class{_state;listeners=new Set;steeringQueue;followUpQueue;convertToLlm;transformContext;streamFunction;getApiKey;onPayload;onResponse;beforeToolCall;afterToolCall;shouldStopAfterTurn;prepareNextTurn;prepareNextTurnWithContext;activeRun;sessionId;thinkingBudgets;transport;maxRetryDelayMs;toolExecution;constructor(e){let t=e??{};this._state=S_(t.initialState),this.convertToLlm=t.convertToLlm??y_,this.transformContext=t.transformContext,this.streamFunction=t.streamFn??t_(),this.getApiKey=t.getApiKey,this.onPayload=t.onPayload,this.onResponse=t.onResponse,this.beforeToolCall=t.beforeToolCall,this.afterToolCall=t.afterToolCall,this.shouldStopAfterTurn=t.shouldStopAfterTurn,this.prepareNextTurn=t.prepareNextTurn,this.prepareNextTurnWithContext=t.prepareNextTurnWithContext,this.steeringQueue=new C_(t.steeringMode??`one-at-a-time`),this.followUpQueue=new C_(t.followUpMode??`one-at-a-time`),this.sessionId=t.sessionId,this.thinkingBudgets=t.thinkingBudgets,this.transport=t.transport??`auto`,this.maxRetryDelayMs=t.maxRetryDelayMs,this.toolExecution=t.toolExecution??`parallel`}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}get state(){return this._state}set steeringMode(e){this.steeringQueue.mode=e}get steeringMode(){return this.steeringQueue.mode}set followUpMode(e){this.followUpQueue.mode=e}get followUpMode(){return this.followUpQueue.mode}steer(e){this.steeringQueue.enqueue(e)}followUp(e){this.followUpQueue.enqueue(e)}clearSteeringQueue(){this.steeringQueue.clear()}clearFollowUpQueue(){this.followUpQueue.clear()}clearAllQueues(){this.clearSteeringQueue(),this.clearFollowUpQueue()}hasQueuedMessages(){return this.steeringQueue.hasItems()||this.followUpQueue.hasItems()}get signal(){return this.activeRun?.abortController.signal}abort(){this.activeRun?.abortController.abort()}waitForIdle(){return this.activeRun?.promise??Promise.resolve()}reset(){if(this.activeRun)throw Error(`Agent is already processing. Wait for completion before resetting.`);this._state.messages=[],this._state.isStreaming=!1,this._state.streamingMessage=void 0,this._state.pendingToolCalls=new Set,this._state.errorMessage=void 0,this.clearFollowUpQueue(),this.clearSteeringQueue()}async prompt(e,t){if(this.activeRun)throw Error(`Agent is already processing a prompt. Use steer() or followUp() to queue messages, or wait for completion.`);let n=this.normalizePromptInput(e,t);await this.runPromptMessages(n)}async continue(){if(this.activeRun)throw Error(`Agent is already processing. Wait for completion before continuing.`);let e=this._state.messages[this._state.messages.length-1];if(!e)throw Error(`No messages to continue from`);if(e.role===`assistant`){let e=this.steeringQueue.drain();if(e.length>0){await this.runPromptMessages(e,{skipInitialSteeringPoll:!0});return}let t=this.followUpQueue.drain();if(t.length>0){await this.runPromptMessages(t);return}throw Error(`Cannot continue from message role: assistant`)}await this.runContinuation()}normalizePromptInput(e,t){if(Array.isArray(e))return e;if(typeof e!=`string`)return[e];let n=[{type:`text`,text:e}];return t&&t.length>0&&n.push(...t),[{role:`user`,content:n,timestamp:Date.now()}]}async runPromptMessages(e,t={}){await this.runWithLifecycle(async n=>{await n_(e,this.createContextSnapshot(),this.createLoopConfig(t),e=>this.processEvents(e),n,this.streamFunction)})}async runContinuation(){await this.runWithLifecycle(async e=>{await r_(this.createContextSnapshot(),this.createLoopConfig(),e=>this.processEvents(e),e,this.streamFunction)})}createContextSnapshot(){return{systemPrompt:this._state.systemPrompt,messages:this._state.messages.slice(),tools:this._state.tools.slice()}}createLoopConfig(e={}){let t=e.skipInitialSteeringPoll===!0,n=this.shouldStopAfterTurn;return{model:this._state.model,reasoning:this._state.thinkingLevel===`off`?void 0:this._state.thinkingLevel,sessionId:this.sessionId,onPayload:this.onPayload,onResponse:this.onResponse,transport:this.transport,thinkingBudgets:this.thinkingBudgets,maxRetryDelayMs:this.maxRetryDelayMs,toolExecution:this.toolExecution,beforeToolCall:this.beforeToolCall,afterToolCall:this.afterToolCall,shouldStopAfterTurn:n?async e=>await n(e,this.signal):void 0,prepareNextTurn:this.prepareNextTurnWithContext||this.prepareNextTurn?async e=>this.prepareNextTurnWithContext?await this.prepareNextTurnWithContext(e,this.signal):await this.prepareNextTurn?.(this.signal):void 0,convertToLlm:this.convertToLlm,transformContext:this.transformContext,getApiKey:this.getApiKey,getSteeringMessages:async()=>t?(t=!1,[]):this.steeringQueue.drain(),getFollowUpMessages:async()=>this.followUpQueue.drain()}}async runWithLifecycle(e){if(this.activeRun)throw Error(`Agent is already processing.`);let t=new AbortController,n=()=>{},r=new Promise(e=>{n=e});this.activeRun={promise:r,resolve:n,abortController:t},this._state.isStreaming=!0,this._state.streamingMessage=void 0,this._state.errorMessage=void 0;try{await e(t.signal)}catch(e){await this.handleRunFailure(e,t.signal.aborted)}finally{this.finishRun()}}async handleRunFailure(e,t){let n={role:`assistant`,content:[{type:`text`,text:``}],api:this._state.model.api,provider:this._state.model.provider,model:this._state.model.id,usage:b_,stopReason:t?`aborted`:`error`,errorMessage:e instanceof Error?e.message:String(e),timestamp:Date.now()};await this.processEvents({type:`message_start`,message:n}),await this.processEvents({type:`message_end`,message:n}),await this.processEvents({type:`turn_end`,message:n,toolResults:[]}),await this.processEvents({type:`agent_end`,messages:[n]})}finishRun(){this._state.isStreaming=!1,this._state.streamingMessage=void 0,this._state.pendingToolCalls=new Set,this.activeRun?.resolve(),this.activeRun=void 0}async processEvents(e){switch(e.type){case`message_start`:this._state.streamingMessage=e.message;break;case`message_update`:this._state.streamingMessage=e.message;break;case`message_end`:this._state.streamingMessage=void 0,this._state.messages.push(e.message);break;case`tool_execution_start`:{let t=new Set(this._state.pendingToolCalls);t.add(e.toolCallId),this._state.pendingToolCalls=t;break}case`tool_execution_end`:{let t=new Set(this._state.pendingToolCalls);t.delete(e.toolCallId),this._state.pendingToolCalls=t;break}case`turn_end`:e.message.role===`assistant`&&e.message.errorMessage&&(this._state.errorMessage=e.message.errorMessage);break;case`agent_end`:this._state.streamingMessage=void 0}let t=this.activeRun?.abortController.signal;if(!t)throw Error(`Agent listener invoked outside active run`);for(let n of this.listeners)await n(e,t)}};function T_(e){if(!Number.isFinite(e)||e<=0)return`0 B`;let t=[`B`,`KB`,`MB`,`GB`],n=e,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r++;return`${n>=10||r===0?Math.round(n):Math.round(n*10)/10} ${t[r]}`}function E_(e){let t=e.mimeType||`application/octet-stream`;return`${e.name} (${t}, ${T_(e.size)})`}function D_(e){let t=E_(e);return e.kind===`image`&&e.data?e.path?`[Attached image: ${t} — full-resolution copy saved to ${e.path}]`:`[Attached image: ${t}]`:e.kind===`text`&&e.text!==void 0?[`----- BEGIN ATTACHMENT ${t} -----`,e.text,`----- END ATTACHMENT ${e.name} -----`].join(`
880
- `):e.path?`[Attached ${e.kind===`image`?`image`:e.kind===`text`?`text file`:`file`} saved to ${e.path} — ${t}. Read it from the virtual filesystem when you need its contents.]`:e.error?`[Attachment not included: ${t}. ${e.error}]`:`[Attachment not included: ${t}. Unsupported binary attachment.]`}function O_(e,t){if(!t?.length)return e;let n=t.map(D_),r=e.trim();return r?`${r}\n\n${n.join(`
877
+ }`,returnByValue:!0})).result?.value}async resolveNodeCenter(e){let t=await this.resolveNodeObjectId(e),n=await this.nodeBox(t);if(!n||n.width===0||n.height===0)throw Error(`Element with backend node ${e} has no dimensions`);return{x:n.x+n.width/2,y:n.y+n.height/2}}async boundingBox(e){await this.send(`DOM.enable`);let t=(await this.send(`DOM.getDocument`,{depth:0})).root.nodeId,n;try{n=(await this.send(`DOM.querySelector`,{nodeId:t,selector:e})).nodeId}catch{return null}if(!n)return null;let r=(await this.send(`DOM.getBoxModel`,{nodeId:n})).model;if(!r)return null;let i=r.content;return{x:i[0],y:i[1],width:r.width,height:r.height}}};function ca(e,t){if(t.push({frameId:e.frame.id,parentFrameId:e.frame.parentId,url:e.frame.url,name:e.frame.name??``,securityOrigin:e.frame.securityOrigin}),Array.isArray(e.childFrames))for(let n of e.childFrames)ca(n,t)}function la(e){let t=e.exceptionDetails;return t?t.exception?.description??t.text:null}function ua(e,t){let n=la(e);if(n!==null)throw Error(`${t}: ${n}`);return e.result?.value}function da(e){let t=e instanceof Error?e.message:String(e);return t.includes(`Cannot find context with specified id`)||t.includes(`Execution context was destroyed`)}function fa(e){let t=new Map;for(let n of e){let e=typeof n.backendDOMNodeId==`number`?n.backendDOMNodeId:null;if(e===null)continue;let r=n.role,i=n.name,a=typeof r?.value==`string`?r.value.toLowerCase():``,o=typeof i?.value==`string`?i.value:``;if(!a)continue;let s=pa(a,o);t.has(s)||t.set(s,e)}return t}function pa(e,t){return`${e.toLowerCase()}|${t.replace(/\s+/g,` `).trim()}`}function ma(e,t){let n=pa(e.role,e.name),r=t.get(n);if(r!==void 0&&(e.backendNodeId=r),e.children)for(let n of e.children)ma(n,t)}function ha(e){let t={role:Ee(e.role,`unknown`),name:Ee(e.name)},n=Ee(e.value);n!==``&&(t.value=n);let r=Ee(e.description);return r!==``&&(t.description=r),Array.isArray(e.children)&&e.children.length>0&&(t.children=e.children.map(e=>ha(e)).filter(e=>e.role!==`unknown`)),t}function ga(e){let t=e??{queueDepth:0,tabWaitMs:0,bridgeWaitMs:0,acquisitions:0};return{queueDepth:t.queueDepth,totalWaitMs:t.tabWaitMs+t.bridgeWaitMs,tabWaitMs:t.tabWaitMs,bridgeWaitMs:t.bridgeWaitMs,acquisitions:t.acquisitions}}var _a=class{tabLocks=new Map;bridgeLock=Promise.resolve();bridgeHold=null;bridgeWaiters=0;tabLockStats=new Map;getStats(e){if(e!==void 0)return ga(this.tabLockStats.get(e));let t={queueDepth:0,tabWaitMs:0,bridgeWaitMs:0,acquisitions:0};for(let e of this.tabLockStats.values())t.queueDepth+=e.queueDepth,t.tabWaitMs+=e.tabWaitMs,t.bridgeWaitMs+=e.bridgeWaitMs,t.acquisitions+=e.acquisitions;return ga(t)}countersFor(e){let t=this.tabLockStats.get(e);return t||(t={queueDepth:0,tabWaitMs:0,bridgeWaitMs:0,acquisitions:0},this.tabLockStats.set(e,t)),t}liveOwner(){return this.bridgeHold?.owner}reentrantOwner(e){let t=this.bridgeHold;if(!(!t||e===null||t.targetId!==e))return t.owner}async holdTabLock(e,t,n){Ji(t,`starting a command on tab ${e}`);let r=this.countersFor(e);r.queueDepth+=1;let i;try{i=await this.acquireTabLock(e,r,t)}catch(e){throw--r.queueDepth,e}try{return await n(r)}finally{--r.queueDepth,i()}}async acquireTabLock(e,t,n){let r,i=new Promise(e=>{r=e}),a=this.tabLocks.get(e);this.tabLocks.set(e,i);let o=()=>{this.tabLocks.get(e)===i&&this.tabLocks.delete(e),r()};if(a){let r=Date.now();try{await Zi(a,n,`queued for the lock on tab ${e}`)}catch(e){throw t.tabWaitMs+=Date.now()-r,a.then(o,o),e}t.tabWaitMs+=Date.now()-r}return o}async acquireBridgeLock(e){if(e?.owner!==void 0&&this.bridgeHold?.owner===e.owner)return()=>void 0;let t,n=new Promise(e=>{t=e}),r=this.bridgeLock,i=this.bridgeHold!==null||this.bridgeWaiters>0;if(this.bridgeLock=n,i){this.bridgeWaiters+=1;let t=Date.now();try{await r}finally{--this.bridgeWaiters}e?.counters&&(e.counters.bridgeWaitMs+=Date.now()-t)}let a={release:t,owner:Symbol(`bridge-hold`),targetId:e?.targetId??null};this.bridgeHold=a;let o=!1;return()=>{o||(o=!0,this.bridgeHold===a&&(this.bridgeHold=null),t())}}async runGlobal(e,t){let n=await this.acquireBridgeLock({owner:this.reentrantOwner(e),targetId:e});try{return await t()}finally{n()}}},va=class{overrides=new Map;get(e){return this.overrides.get(e)}set(e,t){this.overrides.set(e,t)}delete(e){this.overrides.delete(e)}has(e){return this.overrides.has(e)}get size(){return this.overrides.size}};const ya=_(`browser-api`),ba=[`Session with given id not found`,`Target closed`,`No session with given id`,`No tab attached for sessionId`];var xa=class extends Error{};function Sa(e){let t=e instanceof Error?e.message:String(e);return ba.some(e=>t.includes(e))}var Ca=class{inner;onApplied;onStateChange;constructor(e,t){this.inner=e,this.onApplied=t,e.onStateChange&&(this.onStateChange=t=>e.onStateChange(t))}get state(){return this.inner.state}get superseded(){return this.inner.superseded}get isExtensionBridge(){return this.inner.isExtensionBridge}connect(e){return this.inner.connect(e)}disconnect(){this.inner.disconnect()}async send(e,t,n,r){let i=r===void 0?await this.inner.send(e,t,n):await this.inner.send(e,t,n,r);return n&&this.onApplied(n),i}on(e,t){this.inner.on(e,t)}off(e,t){this.inner.off(e,t)}once(e,t){return this.inner.once(e,t)}},wa=class{client;localClient;sessionId=null;attachedTargetId=null;trayTargetProvider=null;remoteTargetInfo=null;frames=new Qi;sessions=new na(32,(e,t)=>{ya.debug(`Evicting least-recently-used CDP session`,{targetId:e}),this.detachSession(e,t)});_listenedTransports=new Set;_sessionReplacedSubs=new Map;locks=new _a;viewports=new va;connection=new Ki;_onSessionChange;handleJavaScriptDialogOpening=e=>{this.dismissJavaScriptDialog(e)};async dismissJavaScriptDialog(e){let t=typeof e.sessionId==`string`?e.sessionId:this.sessionId;if(t)try{await this.transportForSession(t).send(`Page.handleJavaScriptDialog`,{accept:!1},t,5e3),ya.warn(`Auto-dismissed unexpected JavaScript dialog`,{sessionId:t,type:e.type,message:e.message,url:e.url})}catch(e){ya.warn(`Failed to auto-dismiss JavaScript dialog`,{sessionId:t,error:e instanceof Error?e.message:String(e)})}}handleExecutionContextCreated=e=>{let t=this.eventSessionId(e);if(!t)return;let n=e.context,r=n?.auxData?.frameId;n?.auxData?.isDefault===!0&&r&&typeof n.id==`number`&&this.frames.for(t,`main`).set(r,n.id)};handleExecutionContextDestroyed=e=>{let t=this.eventSessionId(e);if(!t)return;let n=e.executionContextId;if(typeof n!=`number`)return;let r=this.frames.peek(t,`main`);if(r)for(let[e,t]of r)t===n&&r.delete(e)};handleExecutionContextsCleared=e=>{let t=this.eventSessionId(e);t&&this.frames.peek(t,`main`)?.clear()};eventSessionId(e){let t=e.sessionId;return typeof t==`string`?t:this.sessionId}handleDetachedFromTarget=e=>{let t=e.sessionId;if(typeof t!=`string`)return;let n=this.sessions.findBySessionId(t);n&&this.forgetSession(n[0],n[1])};handleTargetDestroyed=e=>{let t=e.targetId;if(typeof t!=`string`)return;let n=this.sessions.findByTargetOrLocalId(t)[0];n&&this.forgetSession(n[0],n[1])};constructor(e){this.client=e??new Pi,this.localClient=this.client,this.addTransportListeners(this.client)}getTransport(){return this.accountedTransportFor(this.client)}getUnderlyingTransport(){return this.client}_accountedTransports=new WeakMap;accountedTransportFor(e){if(e instanceof Ca)return e;let t=this._accountedTransports.get(e);return t||(t=new Ca(e,e=>this.noteApplied(e)),this._accountedTransports.set(e,t)),t}noteApplied(e){this.sessions.noteApplied(e)}createHarRecorder(e,t){return new ea(t,e)}setSessionChangeCallback(e){this._onSessionChange=e}onSessionReplaced(e,t){let n=this._sessionReplacedSubs.get(e);return n||(n=new Set,this._sessionReplacedSubs.set(e,n)),n.add(t),()=>{let n=this._sessionReplacedSubs.get(e);n&&(n.delete(t),n.size===0&&this._sessionReplacedSubs.delete(e))}}getSessionId(){return this.sessionId}getAttachedTargetId(){return this.attachedTargetId}async withTab(e,t,n){let r=n?.signal;return this.locks.holdTabLock(e,r,async n=>{let i=this.sessions.pin(e);try{return n.acquisitions+=1,await this.runOnTab(e,t,r)}finally{i()}})}async runOnTab(e,t,n){try{return await this.attemptOnTab(e,t,n)}catch(r){if(r instanceof xa||!Sa(r))throw r;return ya.warn(`Stale CDP session — re-attaching and retrying once`,{targetId:e,error:r instanceof Error?r.message:String(r)}),this.invalidateSession(e),await this.attemptOnTab(e,t,n)}}async attemptOnTab(e,t,n){let r=await this.attachHandle(e,this.locks.reentrantOwner(e),n);Ji(n,`about to run a command on tab ${e}`);let i=r.sessionId,a=this.sessions.appliedCount(i);try{return await t(r)}catch(t){if(!Sa(t))throw t;let n=this.sessions.appliedCount(i)-a;if(n===0)throw t;this.invalidateSession(e);let r=t instanceof Error?t.message:String(t);throw ya.warn(`CDP session reset mid-command — not replaying`,{targetId:e,applied:n,reason:r}),new xa(`The CDP session for tab ${e} was reset mid-command, after ${n} command(s) had already been applied, so the outcome is unknown. The tab has been re-armed: check the page state before repeating this command. (underlying error: ${r})`)}}async attachHandle(e,t,n){let r=await this.attachToPageOwned(e,t,n),i=this.sessions.get(e);return new sa(this,e,r,this.accountedTransportFor(i?.transport??this.client),n)}handleFor(e,t){return new sa(this,e,t.sessionId,this.accountedTransportFor(t.transport))}getTabLockStats(e){return this.locks.getStats(e)}async runGlobal(e,t){return this.locks.runGlobal(e,t)}viewportOverride(e){return this.viewports.get(e)}recordViewportOverride(e,t){this.viewports.set(e,t)}frameContexts(e,t){return this.frames.for(e,t)}dropFrameContexts(e){this.frames.drop(e)}async reapplyViewportOverride(e,t){let n=this.viewports.get(e);if(n)try{await this.handleFor(e,t).applyViewportOverride(n)}catch(t){ya.warn(`Failed to re-apply viewport override on re-attach`,{targetId:e,error:t instanceof Error?t.message:String(t)})}}setTrayTargetProvider(e){this.trayTargetProvider=e}async listAllTargets(){let e=await this.listPages();if(!this.trayTargetProvider)return e;let t=!this.remoteTargetInfo,n=new Set(e.map(e=>e.targetId)),r=this.trayTargetProvider.getTargets().filter(e=>!t||!(e.runtimeId===`leader`&&n.has(e.localTargetId))).map(e=>({targetId:e.targetId,title:e.title,url:e.url,kind:e.kind,capabilities:e.capabilities}));return[...e,...r]}async connect(e){await this.connection.connect(this.client,e)}async reconnectIfNeeded(){await this.ensureConnected(),this.client!==this.localClient&&await this.ensureLocalConnected()}primeConnectOptions(e){this.connection.primeConnectOptions(e)}setCdpSupersededHandler(e){this.connection.setSupersededHandler(e)}setCdpBridgeRejectedHandler(e){this.connection.setBridgeRejectedHandler(e)}setCdpConnectFailureClassifier(e){this.connection.setConnectFailureClassifier(e)}async createPage(e){return await this.ensureConnected(),await this.ensureLocalConnected(),(await this.localClient.send(`Target.createTarget`,{url:e??`about:blank`,background:!0})).targetId}async openWindow(e,t={}){await this.ensureConnected(),await this.ensureLocalConnected(),Da(t);let n=t.focus!==!1,r={url:e||`about:blank`,newWindow:!0,background:!n};t.decorated===!1&&(r.decorated=!1);let i=t.state;i&&i!==`normal`?r.windowState=i:(t.width!==void 0&&(r.width=t.width),t.height!==void 0&&(r.height=t.height),t.left!==void 0&&(r.left=t.left),t.top!==void 0&&(r.top=t.top),i&&(r.windowState=i));let a=(await this.localClient.send(`Target.createTarget`,r)).targetId;if(typeof a!=`string`||!a)throw Error(`Target.createTarget did not return a usable targetId`);return a}async getWindowBounds(e){await this.ensureConnected();let t=ka((await(await this.transportForWindowOps(e)).send(`Browser.getWindowForTarget`,{targetId:Ea(e)})).bounds),n=await this.readDevicePixelRatio(e);return{...t,dpr:n}}async setWindowBounds(e,t){await this.ensureConnected(),Da(t);let n=await this.transportForWindowOps(e),r=Ea(e),i=await n.send(`Browser.getWindowForTarget`,{targetId:r}),a=i.windowId;if(typeof a!=`number`)throw Error(`Browser.getWindowForTarget did not return a windowId`);let o=ka(i.bounds),s=t.state;(t.left!==void 0||t.top!==void 0||t.width!==void 0||t.height!==void 0)&&o.state!==`normal`&&await n.send(`Browser.setWindowBounds`,{windowId:a,bounds:{windowState:`normal`}});let c={};s&&s!==`normal`?c.windowState=s:(t.left!==void 0&&(c.left=t.left),t.top!==void 0&&(c.top=t.top),t.width!==void 0&&(c.width=t.width),t.height!==void 0&&(c.height=t.height),s&&(c.windowState=s)),await n.send(`Browser.setWindowBounds`,{windowId:a,bounds:c});let l=ka((await n.send(`Browser.getWindowBounds`,{windowId:a})).bounds),u=await this.readDevicePixelRatio(e);return{...l,dpr:u}}async readDevicePixelRatio(e){try{let t=await this.withTab(e,e=>e.evaluate(`window.devicePixelRatio`,{awaitPromise:!1,returnByValue:!0}));return typeof t==`number`&&Number.isFinite(t)&&t>0?t:1}catch{return 1}}async transportForWindowOps(e){if(this.trayTargetProvider?.createRemoteTransport&&e.includes(`:`)){let t=e.indexOf(`:`),n=e.substring(0,t),r=e.substring(t+1);return this.trayTargetProvider.createRemoteTransport(n,r)}return await this.ensureLocalConnected(),this.localClient}async createRemotePage(e,t){if(!this.trayTargetProvider?.openRemoteTab)throw Error(`Remote tab opening not available (no tray target provider)`);return this.trayTargetProvider.openRemoteTab(e,t??`about:blank`)}async closePage(e){if(await this.ensureConnected(),this.viewports.delete(e),await this.dropSession(e),this.trayTargetProvider?.createRemoteTransport&&e.includes(`:`)){let t=e.indexOf(`:`),n=e.substring(0,t),r=e.substring(t+1);{let e=this.trayTargetProvider.createRemoteTransport(n,r);try{await e.send(`Target.closeTarget`,{targetId:r})}finally{this.trayTargetProvider.removeRemoteTransport&&this.trayTargetProvider.removeRemoteTransport(n,r)}return}}await this.localClient.send(`Target.closeTarget`,{targetId:e})}disconnect(){this.clearSessions(),this.client.disconnect()}async listPages(){return await this.ensureConnected(),await this.ensureLocalConnected(),((await this.localClient.send(`Target.getTargets`)).targetInfos??[]).filter(e=>e.type===`page`).map(e=>({targetId:e.targetId,title:e.title,url:e.url,...e.active?{active:!0}:{}}))}async attachToPage(e){return this.attachToPageOwned(e,this.locks.reentrantOwner(e))}async attachToPageOwned(e,t,n){let r=await this.locks.acquireBridgeLock({owner:t,targetId:e,counters:this.locks.countersFor(e)});try{await this.ensureConnected();let t=this.sessions.get(e);return t?(this.activateSession(e,t),t.sessionId):await(this.trayTargetProvider?.createRemoteTransport&&e.includes(`:`)?this.attachRemoteTarget(e,n):this.attachLocalTarget(e,n))}finally{r()}}async selectTab(e){await this.withTab(e,async()=>void 0)}async bringTabToFront(e){await this.withTab(e,e=>e.bringToFront())}async attachRemoteTarget(e,t){let n=e.indexOf(`:`),r=e.substring(0,n),i=e.substring(n+1),a=this.trayTargetProvider?.createRemoteTransport?.(r,i);if(!a)throw Error(`No remote transport for target ${e}`);Ji(t,`about to attach to tray tab ${e}`);let o={sessionId:(await a.send(`Target.attachToTarget`,{targetId:i,flatten:!0})).sessionId,transport:a,remote:{runtimeId:r,localTargetId:i}};return this.rememberSession(e,o),this.activateSession(e,o),Ji(t,`about to enable Page on tray tab ${e}`),await a.send(`Page.enable`,{},o.sessionId),Ji(t,`about to restore the viewport of tray tab ${e}`),await this.reapplyViewportOverride(e,o),this.notifySessionChange(e,o),o.sessionId}async attachLocalTarget(e,t){this.useLocalTransport(),await this.ensureLocalConnected(),Ji(t,`about to attach to tab ${e}`);let n={sessionId:(await this.localClient.send(`Target.attachToTarget`,{targetId:e,flatten:!0})).sessionId,transport:this.localClient};return this.rememberSession(e,n),this.activateSession(e,n),Ji(t,`about to enable Page on tab ${e}`),await this.localClient.send(`Page.enable`,{},n.sessionId),Ji(t,`about to restore the viewport of tab ${e}`),await this.reapplyViewportOverride(e,n),this.notifySessionChange(e,n),n.sessionId}async detach(){let e=this.attachedTargetId;e&&(await this.dropSession(e),this.useLocalTransport())}async wakeCapture(e,t){let n=await this.locks.acquireBridgeLock({owner:this.locks.reentrantOwner(e.targetId),targetId:e.targetId});try{return await this.wakeCaptureLocked(e,t,this.locks.liveOwner())}finally{n()}}async wakeCaptureLocked(e,t,n){let r=e.targetId,i=await this.findFocusedLocalPage(r,n).catch(()=>null),a=await this.attachHandle(r,n);try{return await a.send(`Page.bringToFront`),await a.send(`Page.captureScreenshot`,t)}finally{if(i)try{await(await this.attachHandle(i,n)).send(`Page.bringToFront`),await this.attachToPageOwned(r,n)}catch{}}}async findFocusedLocalPage(e,t){let n=await this.listPages();for(let r of n)if(!(!r.targetId||r.targetId===e)&&!r.targetId.includes(`:`))try{if(await(await this.attachHandle(r.targetId,t)).evaluate(`document.hasFocus()`)===!0)return r.targetId}catch{}return null}async ensureLocalConnected(){await this.connection.ensureLocalConnected(this.localClient)}async ensureConnected(){await this.connection.ensureConnected({client:this.client,restoreLocalAfterRemoteDrop:()=>{this.remoteTargetInfo&&this.trayTargetProvider?.removeRemoteTransport&&(this.trayTargetProvider.removeRemoteTransport(this.remoteTargetInfo.runtimeId,this.remoteTargetInfo.localTargetId),this.setClient(this.localClient),this.remoteTargetInfo=null)},clearSessionsForTransport:e=>this.clearSessionsForTransport(e),getClient:()=>this.client})}transportForSession(e){return this.sessions.findBySessionId(e)?.[1].transport??this.client}addTransportListeners(e){this._listenedTransports.has(e)||(this._listenedTransports.add(e),e.on(`Page.javascriptDialogOpening`,this.handleJavaScriptDialogOpening),e.on(`Runtime.executionContextCreated`,this.handleExecutionContextCreated),e.on(`Runtime.executionContextDestroyed`,this.handleExecutionContextDestroyed),e.on(`Runtime.executionContextsCleared`,this.handleExecutionContextsCleared),e.on(`Target.detachedFromTarget`,this.handleDetachedFromTarget),e.on(`Target.targetDestroyed`,this.handleTargetDestroyed))}releaseLifecycleTransport(e){e!==this.localClient&&this._listenedTransports.has(e)&&(this.sessions.anyOnTransport(e)||(this._listenedTransports.delete(e),e.off(`Page.javascriptDialogOpening`,this.handleJavaScriptDialogOpening),e.off(`Runtime.executionContextCreated`,this.handleExecutionContextCreated),e.off(`Runtime.executionContextDestroyed`,this.handleExecutionContextDestroyed),e.off(`Runtime.executionContextsCleared`,this.handleExecutionContextsCleared),e.off(`Target.detachedFromTarget`,this.handleDetachedFromTarget),e.off(`Target.targetDestroyed`,this.handleTargetDestroyed)))}setClient(e){this.addTransportListeners(e),this.client=e}useLocalTransport(){let e=this.remoteTargetInfo;this.remoteTargetInfo=null,this.setClient(this.localClient),e&&(this.sessions.anyMatchingRemote(e.runtimeId,e.localTargetId)||this.trayTargetProvider?.removeRemoteTransport?.(e.runtimeId,e.localTargetId))}rememberSession(e,t){this.addTransportListeners(t.transport),this.sessions.remember(e,t)}activateSession(e,t){t.remote?(this.setClient(t.transport),this.remoteTargetInfo={...t.remote}):this.client!==t.transport&&this.useLocalTransport(),this.sessionId=t.sessionId,this.attachedTargetId=e,this.sessions.touch(e,t)}notifySessionChange(e,t){let n=this.accountedTransportFor(t.transport);this._onSessionChange?.(t.sessionId,n,e);let r=this._sessionReplacedSubs.get(e);if(r)for(let i of[...r])try{i(t.sessionId,n,e)}catch(t){ya.warn(`session-replaced subscriber threw`,{targetId:e,error:t instanceof Error?t.message:String(t)})}}forgetSession(e,t){this.unregisterSession(e),this.disposeSessionTransport(t)}unregisterSession(e){let t=this.sessions.get(e);t&&this.dropFrameContexts(t.sessionId),this.sessions.delete(e),this.attachedTargetId===e&&(this.sessionId=null,this.attachedTargetId=null)}disposeSessionTransport(e){this.releaseLifecycleTransport(e.transport),e.remote&&(this.sessions.anyMatchingRemote(e.remote.runtimeId,e.remote.localTargetId)||this.trayTargetProvider?.removeRemoteTransport?.(e.remote.runtimeId,e.remote.localTargetId))}async detachSession(e,t){this.unregisterSession(e);try{await t.transport.send(`Target.detachFromTarget`,{sessionId:t.sessionId})}catch{}finally{this.disposeSessionTransport(t)}}async dropSession(e){let t=this.sessions.get(e);if(!t){this.attachedTargetId===e&&(this.sessionId=null,this.attachedTargetId=null);return}await this.detachSession(e,t)}invalidateSession(e){let t=this.sessions.get(e);t&&this.forgetSession(e,t)}clearSessionsForTransport(e){for(let[t,n]of this.sessions.snapshot())n.transport===e&&this.forgetSession(t,n)}clearSessions(){for(let[e,t]of this.sessions.snapshot())this.forgetSession(e,t);this.sessions.clear(),this.sessionId=null,this.attachedTargetId=null}};const Ta=new Set([`normal`,`minimized`,`maximized`,`fullscreen`]);function Ea(e){let t=e.indexOf(`:`);return t>=0?e.substring(t+1):e}function Da(e){let t=e.state;if(!(!t||t===`normal`)){if(!Ta.has(t))throw Error(`window state must be one of ${[...Ta].join(`|`)} (got ${JSON.stringify(t)})`);if(e.left!==void 0||e.top!==void 0||e.width!==void 0||e.height!==void 0)throw Error(`window state '${t}' cannot be combined with left/top/width/height (chrome.windows + CDP both reject the mix)`)}}function Oa(e){return typeof e==`object`&&!!e}function ka(e){let t=Oa(e)?e:{},n=t.windowState??t.state,r=typeof n==`string`&&Ta.has(n)?n:`normal`;return{left:Aa(t.left,0),top:Aa(t.top,0),width:Aa(t.width,0),height:Aa(t.height,0),state:r}}function Aa(e,t){return typeof e==`number`&&Number.isFinite(e)?e:t}const ja=_(`panel-rpc-cdp`);var Ma=class{getPanelRpc;runtimeId;localTargetId;timeoutMs;eventListeners=new Map;pendingOnce=new Set;key;_state=`connected`;pushRegistered=!1;constructor(e,t,n,r=3e4){this.getPanelRpc=e,this.runtimeId=t,this.localTargetId=n,this.timeoutMs=r,this.key=`${t}:${n}`}get state(){return this._state}async connect(){}disconnect(){this._state=`disconnected`;for(let e of this.pendingOnce)clearTimeout(e.timer),e.reject(Error(`Transport disconnected`));this.pendingOnce.clear();let e=this.getPanelRpc();e&&(this.pushRegistered&&=(e.unregisterPushTarget(this.key),!1),e.call(`remote-cdp-detach`,{runtimeId:this.runtimeId,localTargetId:this.localTargetId}).catch(e=>{ja.error(`remote-cdp detach failed (page-side session may leak)`,{key:this.key,error:e instanceof Error?e.message:String(e)})})),this.eventListeners.clear()}async send(e,t,n,r){if(this._state===`disconnected`)throw Error(`Transport disconnected`);let i=this.getPanelRpc();if(!i)throw Error(`cdp: no page bridge to the leader tray (panel-RPC client)`);let a=r??this.timeoutMs,o=Math.max(a,De)+5e3;return i.call(`remote-cdp-send`,{runtimeId:this.runtimeId,localTargetId:this.localTargetId,method:e,params:t,sessionId:n,timeout:a},{timeoutMs:o})}on(e,t){let n=this.eventListeners.get(e),r=!n||n.size===0;n||(n=new Set,this.eventListeners.set(e,n)),n.add(t),r&&this.subscribe(e)}off(e,t){let n=this.eventListeners.get(e);n&&(n.delete(t),n.size===0&&(this.eventListeners.delete(e),this.unsubscribe(e)))}once(e,t){return new Promise((n,r)=>{let i=t??this.timeoutMs,a={reject:r,timer:void 0},o=()=>{clearTimeout(a.timer),this.pendingOnce.delete(a),this.off(e,s)};a.timer=setTimeout(()=>{o(),r(Error(`Remote CDP event timed out: ${e}`))},i);let s=e=>{o(),n(e)};this.pendingOnce.add(a),this.on(e,s)})}handleEvent(e,t){let n=this.eventListeners.get(e);if(n)for(let e of[...n])e(t)}ensurePushRegistered(e){this.pushRegistered||=(e.registerPushTarget(this.key,e=>this.handleEvent(e.method,e.params??{})),!0)}subscribe(e){let t=this.getPanelRpc();if(!t){ja.error(`remote-cdp subscribe skipped: no panel-RPC client`,{key:this.key,event:e});return}this.ensurePushRegistered(t),t.call(`remote-cdp-subscribe`,{runtimeId:this.runtimeId,localTargetId:this.localTargetId,event:e}).catch(t=>{ja.error(`remote-cdp subscribe failed; events for this transport will not arrive`,{key:this.key,event:e,error:t instanceof Error?t.message:String(t)})})}unsubscribe(e){let t=this.getPanelRpc();t&&t.call(`remote-cdp-unsubscribe`,{runtimeId:this.runtimeId,localTargetId:this.localTargetId,event:e}).catch(t=>{ja.error(`remote-cdp unsubscribe failed (page-side forwarder may leak)`,{key:this.key,event:e,error:t instanceof Error?t.message:String(t)})})}};function Na(e){let t=new Map,n=(e,t)=>`${e}:${t}`;return{getTargets(){return[]},createRemoteTransport(r,i){let a=n(r,i),o=t.get(a);return o||(o=new Ma(e,r,i),t.set(a,o)),o},removeRemoteTransport(e,r){let i=n(e,r),a=t.get(i);a&&(a.disconnect(),t.delete(i))},async openRemoteTab(t,n){let r=e();if(!r)throw Error(`cdp: no page bridge to the leader tray (panel-RPC client)`);let{targetId:i}=await r.call(`remote-open-tab`,{runtimeId:t,url:n});return i}}}function Pa(e){return`slicc_feature_flags_remote:${e}`}let Fa=null;function Ia(e,t){let n=Ra(t);Fa=e,Me(e,za(n,e)??{})}function La(e,t){if(!Fa||e!==void 0&&e!==Pa(Fa))return!1;let n=Ra(t);return Ae(Fa,za(n,Fa)??{}),!0}function Ra(e){if(e!==void 0)return e;try{let e=globalThis.localStorage;return typeof e?.getItem!=`function`||typeof e.setItem!=`function`?void 0:e}catch{return}}function za(e,t){try{let n=e?.getItem(Pa(t));return n?Ba(JSON.parse(n)):null}catch{return null}}function Ba(e){return!Va(e)||Object.values(e).some(e=>typeof e!=`string`)?null:e}function Va(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}const Ha=_(`stale-asset`),Ua=/dynamically imported module|importing a module script failed|expected a javascript module|module script/i;function Wa(e){return Ua.test(e)}let Ga=null;function Ka(e){if(!e){Ga=null;return}Ga=e}function qa(e=!1){if(!Ga||typeof BroadcastChannel!=`function`)return;let t=new BroadcastChannel(`slicc-stale-asset-reload`);try{t.postMessage({type:`stale-asset-reload`,instanceId:Ga,replayTurn:e})}finally{t.close()}}function Ja(e){Wa(e instanceof Error?e.message:String(e))&&qa()}function Ya(e,t){return!e||e===t?!1:(Ha.warn(`mixed build graph: page ${e} vs worker ${t} — requesting reload`),qa(),!0)}var Xa=class{_state=`disconnected`;nextCommandId=1;listeners=new Map;pendingCommands=new Ai;unsubscribe=null;stateListeners=new Set;lastNotifiedState=`disconnected`;lastNotifiedReason;opts;label;constructor(e){this.opts=e,this.label=e.label??`CDP transport`}get state(){return this._state}onStateChange(e){return this.stateListeners.add(e),()=>{this.stateListeners.delete(e)}}async connect(e){if(this._state!==`disconnected`)throw Error(`Cannot connect: state is ${this._state}`);this.unsubscribe||=this.opts.subscribeIncoming(e=>this.handleIncoming(e)),this._state=`connected`,this.notifyState(`connected`)}disconnect(){this.unsubscribe?.(),this.unsubscribe=null;let e=`${this.label} disconnected`;this.pendingCommands.rejectAll(e),this.listeners.clear(),this._state=`disconnected`,this.notifyState(`disconnected`,e)}async send(e,t,n,r=3e4){if(this._state!==`connected`)throw Error(`${this.label} is not connected`);let i=this.nextCommandId++,a=this.opts.buildCommandEnvelope(i,e,t,n),o=this.pendingCommands.issue(i,r,`CDP command timed out after ${r}ms: ${e}`);return this.opts.sendEnvelope(a).catch(e=>{this.pendingCommands.reject(i,Error(`Failed to send CDP command: ${e instanceof Error?e.message:String(e)}`))}),o}on(e,t){let n=this.listeners.get(e),r=!n;n||(n=new Set,this.listeners.set(e,n)),n.add(t),r&&this.opts.onSubscribeEvent?.(e)}off(e,t){let n=this.listeners.get(e);n&&(n.delete(t),n.size===0&&(this.listeners.delete(e),this.opts.onUnsubscribeEvent?.(e)))}once(e,t=3e4){return ji(t=>(this.on(e,t),()=>this.off(e,t)),t,`Timed out waiting for event: ${e}`)}handleIncoming(e){let t=this.opts.parseControl?.(e)??null;if(t){this.handleControl(t);return}let n=this.opts.parseResponse(e);if(n){this.handleResponse(n);return}let r=this.opts.parseEvent(e);r&&this.handleEvent(r)}handleControl(e){if(e.kind===`ready`){this.opts.onUpstreamReady?.();return}let t=e.reason??`upstream connection reset`,n=`${this.label}: upstream CDP connection was reset (${t})`;this.pendingCommands.rejectAll(n),this._state=`disconnected`,this.opts.onUpstreamReset?.(t),this.notifyState(`disconnected`,n)}notifyState(e,t){if(e!==this.lastNotifiedState||t!==this.lastNotifiedReason){this.lastNotifiedState=e,this.lastNotifiedReason=t;for(let n of this.stateListeners)try{n(e,t)}catch{}}}handleResponse(e){if(!this.pendingCommands.has(e.id)){this.opts.onUnknownResponseId?.(e.id);return}e.error?this.pendingCommands.reject(e.id,Error(e.error)):this.pendingCommands.resolve(e.id,e.result??{})}handleEvent(e){let t=this.listeners.get(e.method);if(t)for(let n of t)try{n(e.params??{})}catch(t){this.opts.onListenerError?.(e.method,t)}}};function Za(e){let t=!1,n=()=>{t||(t=!0,typeof e.start==`function`&&e.start())};return{onMessage:t=>{let r=e=>{t(e.data)};return e.addEventListener(`message`,r),n(),()=>{e.removeEventListener(`message`,r)}},send:(t,n)=>{n&&n.length>0?e.postMessage(t,n):e.postMessage(t)}}}function Qa(e){let t=Za(e);return{onMessage:e=>t.onMessage(e),send:(e,n)=>{t.send({source:`offscreen`,payload:e},n)}}}var $a=class extends Xa{constructor(e){let t=Za(e),n=0;super({label:`WorkerCdpProxy`,buildCommandEnvelope:(e,t,r,i)=>({type:`cdp-cmd`,id:e,method:t,params:r,sessionId:i,gen:n}),sendEnvelope:e=>(t.send(e),Promise.resolve()),subscribeIncoming:e=>t.onMessage(e),parseResponse:e=>{let t=e;if(t?.type!==`cdp-response`)return null;if(typeof t.id!=`number`||!Number.isFinite(t.id))return console.warn(`[WorkerCdpProxy] dropping cdp-response with invalid id`,t),null;let n=e;return{id:n.id,result:n.result,error:n.error}},parseEvent:e=>{let t=e;if(t?.type!==`cdp-event`)return null;if(typeof t.method!=`string`)return console.warn(`[WorkerCdpProxy] dropping cdp-event with invalid method`,t),null;let n=e;return{method:n.method,params:n.params}},parseControl:e=>{let t=e;return t?.type===`cdp-reset`?typeof t.reason==`string`?{kind:`reset`,reason:t.reason}:{kind:`reset`}:t?.type===`cdp-ready`?{kind:`ready`}:null},onUpstreamReset:e=>{n+=1,console.warn(`[WorkerCdpProxy] page CDP connection reset; sessions are stale`,e)},onUpstreamReady:()=>{console.info(`[WorkerCdpProxy] page CDP connection restored`)},onSubscribeEvent:e=>{t.send({type:`cdp-subscribe`,event:e})},onUnsubscribeEvent:e=>{t.send({type:`cdp-unsubscribe`,event:e})}})}};function eo(e,t){return e.find(e=>e.folder===t)??e.find(e=>e.folder===`${t}-scoop`)??e.find(e=>e.name===t)}const to=/^[\p{ID_Start}_$][\p{ID_Continue}_$\u200C\u200D]*$/u;function no(e){return to.test(e)}function ro(e,t){return`(${e} && ${t})`}function A(e,t){return`(${e} || ${t})`}function io(e){return`!(${e})`}function ao(e){return`Array.isArray(${e})`}function oo(e){return`typeof ${e} === "bigint"`}function so(e){return`typeof ${e} === "boolean"`}function co(e){return`Number.isInteger(${e})`}function lo(e){return`${e} === null`}function uo(e){return`Number.isFinite(${e})`}function fo(e){return ro(po(e),io(ao(e)))}function po(e){return`typeof ${e} === "object" && ${e} !== null`}function mo(e){return`typeof ${e} === "string"`}function ho(e){return`typeof ${e} === "symbol"`}function go(e){return`${e} === undefined`}function _o(e){return`typeof ${e} === "function"`}function vo(e){return`Guard.IsConstructor(${e})`}function yo(e,t){return`${e} === ${t}`}function bo(e,t){return`${e} > ${t}`}function xo(e,t){return`${e} < ${t}`}function So(e,t){return`${e} <= ${t}`}function Co(e,t){return`${e} >= ${t}`}function wo(e,t){return`Guard.IsMinLength(${e}, ${t})`}function To(e,t){return`Guard.IsMaxLength(${e}, ${t})`}function Eo(e,t,n,r){return w(t,`0`)?`${e}.every((${n[0]}, ${n[1]}) => ${r})`:`((value, callback) => { for(let index = ${t}; index < value.length; index++) if (!callback(value[index], index)) return false; return true })(${e}, (${n[0]}, ${n[1]}) => ${r})`}function Do(e){return`Object.entries(${e})`}function Oo(e){return`Object.getOwnPropertyNames(${e})`}function ko(e,t){return w(t,`"__proto__"`)||w(t,`"constructor"`)?`Object.prototype.hasOwnProperty.call(${e}, ${t})`:`${t} in ${e}`}function Ao(e,t){return`Guard.IsDeepEqual(${e}, ${t})`}function jo(e){return`[${e.join(`, `)}]`}function Mo(e,t){return`((${e.join(`, `)}) => ${t})`}function j(e,t){return`${e}(${t.join(`, `)})`}function No(e,t){return`new ${e}(${t.join(`, `)})`}function M(e,t){return`${e}${no(t)?`.${t}`:`[${N(t)}]`}`}function N(e){return v(e)?JSON.stringify(e):`${e}`}function Po(e,t,n){return`(${e} ? ${t} : ${n})`}function Fo(e){return`{ ${e.join(`; `)}; }`}function Io(e,t){return`const ${e} = ${t}`}function Lo(e,t){return`if(${e}) { ${t} }`}function Ro(e){return`return ${e}`}function P(e){return w(e.length,0)?`true`:e.reduce((e,t)=>ro(e,t))}function zo(e){return w(e.length,0)?`false`:e.reduce((e,t)=>A(e,t))}function Bo(e){return`++${e}`}function Vo(e,t){return`Guard.IsMultipleOf(${e}, ${t})`}var Ho=it;function Uo(e,t){return t[e.length]?.(...e)??(()=>{throw Error(`Invalid Arguments`)})()}let Wo;function Go(){try{return qo(`null`)(),!0}catch{return!1}}function Ko(){return C(Wo)&&(Wo=Go()),Wo&&Zt().useAcceleration}function qo(...e){return new globalThis.Function(...e)}function Jo(e){switch(e.keyword){case`additionalProperties`:return`must not have additional properties`;case`anyOf`:return`must match a schema in anyOf`;case`boolean`:return`schema is false`;case`const`:return`must be equal to constant`;case`contains`:return`must contain at least 1 valid item`;case`dependencies`:return`must have properties ${e.params.dependencies.join(`, `)} when property ${e.params.property} is present`;case`dependentRequired`:return`must have properties ${e.params.dependencies.join(`, `)} when property ${e.params.property} is present`;case`enum`:return`must be equal to one of the allowed values`;case`exclusiveMaximum`:return`must be ${e.params.comparison} ${e.params.limit}`;case`exclusiveMinimum`:return`must be ${e.params.comparison} ${e.params.limit}`;case`format`:return`must match format "${e.params.format}"`;case`if`:return`must match "${e.params.failingKeyword}" schema`;case`maxItems`:return`must not have more than ${e.params.limit} items`;case`maxLength`:return`must not have more than ${e.params.limit} characters`;case`maxProperties`:return`must not have more than ${e.params.limit} properties`;case`maximum`:return`must be ${e.params.comparison} ${e.params.limit}`;case`minItems`:return`must not have fewer than ${e.params.limit} items`;case`minLength`:return`must not have fewer than ${e.params.limit} characters`;case`minProperties`:return`must not have fewer than ${e.params.limit} properties`;case`minimum`:return`must be ${e.params.comparison} ${e.params.limit}`;case`multipleOf`:return`must be multiple of ${e.params.multipleOf}`;case`not`:return`must not be valid`;case`oneOf`:return`must match exactly one schema in oneOf`;case`pattern`:return`must match pattern "${e.params.pattern}"`;case`propertyNames`:return`property names ${e.params.propertyNames.join(`, `)} are invalid`;case`required`:return`must have required properties ${e.params.requiredProperties.join(`, `)}`;case`type`:return typeof e.params.type==`string`?`must be ${e.params.type}`:`must be either ${e.params.type.join(` or `)}`;case`unevaluatedItems`:return`must not have unevaluated items`;case`unevaluatedProperties`:return`must not have unevaluated properties`;case`uniqueItems`:return`must not have duplicate items`;case`~refine`:return e.params.message;default:return`an unknown validation error occurred`}}let Yo=Jo;function Xo(){return Yo}const Zo=[/prompt is too long/i,/request_too_large/i,/input is too long for requested model/i,/exceeds the context window/i,/exceeds (?:the )?(?:model'?s )?maximum context length(?: of [\d,]+ tokens?|\s*\([\d,]+\))/i,/input token count.*exceeds the maximum/i,/maximum prompt length is \d+/i,/reduce the length of the messages/i,/maximum context length is \d+ tokens/i,/exceeds (?:the )?maximum allowed input length of [\d,]+ tokens?/i,/input \(\d+ tokens\) is longer than the model'?s context length \(\d+ tokens\)/i,/exceeds the limit of \d+/i,/exceeds the available context size/i,/greater than the context length/i,/context window exceeds limit/i,/exceeded model token limit/i,/too large for model with \d+ maximum context length/i,/prompt has [\d,]+ tokens?, but the configured context size is [\d,]+ tokens?/i,/model_context_window_exceeded/i,/prompt too long; exceeded (?:max )?context length/i,/range of input length should be/i,/context[_ ]length[_ ]exceeded/i,/too many tokens/i,/token limit exceeded/i,/^4(?:00|13)\s*(?:status code)?\s*\(no body\)/i],Qo=[/^(Throttling error|Service unavailable):/i,/rate limit/i,/too many requests/i];function $o(e,t){return!!(e.stopReason===`error`&&e.errorMessage&&!Qo.some(t=>t.test(e.errorMessage))&&Zo.some(t=>t.test(e.errorMessage))||t&&e.stopReason===`stop`&&e.usage.input+e.usage.cacheRead>t||t&&e.stopReason===`length`&&e.usage.output===0&&e.usage.input+e.usage.cacheRead>=t*.99)}function es(e){return E(e,`~refine`)&&S(e[`~refine`])&&x(e[`~refine`],0,e=>b(e)&&E(e,`check`)&&E(e,`error`)&&Vt(e.check)&&Vt(e.error))}function ts(e){return b(e)&&!S(e)}function ns(e){return $t(e)}function F(e){return ts(e)||ns(e)}function rs(e){return E(e,`additionalItems`)&&F(e.additionalItems)}function is(e){return E(e,`additionalProperties`)&&F(e.additionalProperties)}function as(e){return E(e,`allOf`)&&S(e.allOf)&&e.allOf.every(e=>F(e))}function os(e){return E(e,`$anchor`)&&v(e.$anchor)}function ss(e){return E(e,`anyOf`)&&S(e.anyOf)&&e.anyOf.every(e=>F(e))}function cs(e){return E(e,`const`)}function ls(e){return E(e,`contains`)&&F(e.contains)}function us(e){return E(e,`default`)}function ds(e){return E(e,`dependencies`)&&b(e.dependencies)&&Object.values(e.dependencies).every(e=>F(e)||S(e)&&e.every(e=>v(e)))}function fs(e){return E(e,`dependentRequired`)&&b(e.dependentRequired)&&Object.values(e.dependentRequired).every(e=>S(e)&&e.every(e=>v(e)))}function ps(e){return E(e,`dependentSchemas`)&&b(e.dependentSchemas)&&Object.values(e.dependentSchemas).every(e=>F(e))}function ms(e){return E(e,`$dynamicAnchor`)&&v(e.$dynamicAnchor)}function hs(e){return E(e,`$dynamicRef`)&&v(e.$dynamicRef)}function gs(e){return E(e,`else`)&&F(e.else)}function _s(e){return E(e,`enum`)&&S(e.enum)}function vs(e){return E(e,`exclusiveMaximum`)&&(D(e.exclusiveMaximum)||zt(e.exclusiveMaximum))}function ys(e){return E(e,`exclusiveMinimum`)&&(D(e.exclusiveMinimum)||zt(e.exclusiveMinimum))}function bs(e){return E(e,`format`)&&v(e.format)}function xs(e){return E(e,`$id`)&&v(e.$id)}function Ss(e){return E(e,`if`)&&F(e.if)}function Cs(e){return E(e,`items`)&&(F(e.items)||S(e.items)&&e.items.every(e=>F(e)))}function ws(e){return Cs(e)&&S(e.items)}function Ts(e){return E(e,`maximum`)&&(D(e.maximum)||zt(e.maximum))}function Es(e){return E(e,`maxContains`)&&D(e.maxContains)}function Ds(e){return E(e,`maxItems`)&&D(e.maxItems)}function Os(e){return E(e,`maxLength`)&&D(e.maxLength)}function ks(e){return E(e,`maxProperties`)&&D(e.maxProperties)}function As(e){return E(e,`minimum`)&&(D(e.minimum)||zt(e.minimum))}function js(e){return E(e,`minContains`)&&D(e.minContains)}function Ms(e){return E(e,`minItems`)&&D(e.minItems)}function Ns(e){return E(e,`minLength`)&&D(e.minLength)}function Ps(e){return E(e,`minProperties`)&&D(e.minProperties)}function Fs(e){return E(e,`multipleOf`)&&(D(e.multipleOf)||zt(e.multipleOf))}function Is(e){return E(e,`not`)&&F(e.not)}function Ls(e){return E(e,`oneOf`)&&S(e.oneOf)&&e.oneOf.every(e=>F(e))}function Rs(e){return E(e,`pattern`)&&(v(e.pattern)||e.pattern instanceof RegExp)}function zs(e){return E(e,`patternProperties`)&&b(e.patternProperties)&&Object.values(e.patternProperties).every(e=>F(e))}function Bs(e){return E(e,`prefixItems`)&&S(e.prefixItems)&&e.prefixItems.every(e=>F(e))}function Vs(e){return E(e,`properties`)&&b(e.properties)&&Object.values(e.properties).every(e=>F(e))}function Hs(e){return E(e,`propertyNames`)&&(b(e.propertyNames)||F(e.propertyNames))}function Us(e){return E(e,`$recursiveAnchor`)&&$t(e.$recursiveAnchor)}function Ws(e){return Us(e)&&w(e.$recursiveAnchor,!0)}function Gs(e){return E(e,`$recursiveRef`)&&v(e.$recursiveRef)}function Ks(e){return E(e,`$ref`)&&v(e.$ref)}function qs(e){return E(e,`required`)&&S(e.required)&&e.required.every(e=>v(e))}function Js(e){return E(e,`then`)&&F(e.then)}function Ys(e){return E(e,`type`)&&(v(e.type)||S(e.type)&&e.type.every(e=>v(e)))}function Xs(e){return E(e,`uniqueItems`)&&$t(e.uniqueItems)}function Zs(e){return E(e,`unevaluatedItems`)&&F(e.unevaluatedItems)}function Qs(e){return E(e,`unevaluatedProperties`)&&F(e.unevaluatedProperties)}function $s(e){return Zs(e)||Qs(e)||y(e).some(t=>tc(e[t]))}function ec(e){return e.some(e=>tc(e))}function tc(e){return S(e)?ec(e):b(e)?$s(e):!1}function nc(e,t){return tc(t)||y(e).some(t=>tc(e[t]))}var rc=class{constructor(e){this.hasUnevaluated=e}UseUnevaluated(){return this.hasUnevaluated}Push(){return j(M(`context`,`Push`),[])}Pop(){return j(M(`context`,`Pop`),[])}AddIndex(e){return j(M(`context`,`AddIndex`),[e])}AddKey(e){return j(M(`context`,`AddKey`),[e])}Merge(e){return j(M(`context`,`Merge`),[e])}},ic=class{constructor(){let e=new Set,t=new Set;this.stack=[{indices:e,keys:t}]}Push(){let e=new Set,t=new Set;return this.stack.push({indices:e,keys:t}),!0}Pop(){return this.stack.pop(),!0}AddIndex(e){return this.GetIndices().add(e),!0}AddKey(e){return this.GetKeys().add(e),!0}GetIndices(){return this.stack[this.stack.length-1].indices}GetKeys(){return this.stack[this.stack.length-1].keys}Merge(e){for(let t of e)t.GetIndices().forEach(e=>this.GetIndices().add(e)),t.GetKeys().forEach(e=>this.GetKeys().add(e));return!0}},ac=class extends ic{constructor(e){super(),this.callback=e}AddError(e){return this.callback(e),!1}},oc=class extends ac{constructor(){super(e=>this.errors.push(e)),this.errors=[]}AddError(e){return this.errors.push(e),!1}GetErrors(){return this.errors}};const sc={identifier:`External`,variables:[]};function cc(e){let t=`External[${sc.variables.length}]`;return sc.variables.push(e),t}function lc(){sc.variables=[]}function uc(){return{...sc}}function dc(e,t,n,r){return Eo(cc(n[`~refine`].map(e=>e)),N(0),[`refinement`,`_`],j(M(`refinement`,`check`),[r]))}function fc(e,t,n,r){return x(n[`~refine`],0,(e,t)=>e.check(r))}function pc(e,t,n,r,i,a){return Gt(i[`~refine`],0,(e,i)=>e.check(a)||t.AddError({keyword:`~refine`,schemaPath:n,instancePath:r,params:{index:i,message:e.error(a)}}))}let mc=0;function I(){return`var_${mc++}`}function hc(e){return Cs(e)&&S(e.items)}function gc(e,t,n,r){if(!hc(n))return N(!0);let[i,a]=[I(),I()],o=Wf(e,t,n.additionalItems,i),s=xo(a,N(n.items.length)),c=t.AddIndex(a),l=t.UseUnevaluated()?A(s,ro(o,c)):A(s,o);return j(M(r,`every`),[Mo([i,a],l)])}function _c(e,t,n,r){return!hc(n)||r.every((r,i)=>sn(i,n.items.length)||Gf(e,t,n.additionalItems,r)&&t.AddIndex(i))}function vc(e,t,n,r,i,a){return!hc(i)||a.every((a,o)=>{let s=`${n}/additionalItems`,c=`${r}/${o}`;return sn(o,i.items.length)||Kf(e,t,s,c,i.additionalItems,a)&&t.AddIndex(o)})}function yc(e){return`^${e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}$`}function bc(e){let t=[];return zs(e)&&t.push(...y(e.patternProperties)),Vs(e)&&t.push(...y(e.properties).map(yc)),w(t.length,0)?`(?!)`:`(${t.join(`|`)})`}function xc(e,t,n){return qs(t)&&Vs(t)&&!zs(t)&&w(t.additionalProperties,!1)&&w(y(t.properties).length,t.required.length)}function Sc(e,t,n){return yo(M(j(M(`Object`,`getOwnPropertyNames`),[n]),`length`),N(t.required.length))}function Cc(e,t,n,r){let[i,a]=[I(),I()],o=cc(new RegExp(bc(n))),s=Wf(e,t,n.additionalProperties,`${r}[${i}]`),c=j(M(o,`test`),[i]),l=t.AddKey(i),u=t.UseUnevaluated()?A(c,ro(s,l)):A(c,s);return Eo(Oo(r),N(0),[i,a],u)}function wc(e,t,n,r){return xc(t,n,r)?Sc(t,n,r):Cc(e,t,n,r)}function Tc(e,t,n,r){let i=new RegExp(bc(n));return x(y(r),0,(a,o)=>i.test(a)||Gf(e,t,n.additionalProperties,r[a])&&t.AddKey(a))}function Ec(e,t,n,r,i,a){let o=new RegExp(bc(i)),s=[];return Gt(y(a),0,(c,l)=>{let u=`${n}/additionalProperties`,d=`${r}/${c}`,f=new oc,p=o.test(c)||Kf(e,f,u,d,i.additionalProperties,a[c])&&t.AddKey(c);return p||s.push(c),p})||t.AddError({keyword:`additionalProperties`,schemaPath:n,instancePath:r,params:{additionalProperties:s}})}function Dc(e,t,n,r,i){let a=Io(`results`,`[]`),o=n.map((e,t)=>Io(`context_${t}`,No(`CheckContext`,[]))),s=n.map((n,i)=>Io(`condition_${i}`,j(Mo([`context`],R(e,t,n,r)),[`context_${i}`]))),c=n.map((e,t)=>Lo(`condition_${t}`,j(M(`results`,`push`),[`context_${t}`]))),l=Ro(ro(i,t.Merge(`results`)));return j(Mo([],Fo([a,...o,...s,...c,l])),[])}function Oc(e,t,n,r){return Dc(e,t,n.allOf,r,yo(M(`results`,`length`),N(n.allOf.length)))}function kc(e,t,n,r){return P(n.allOf.map(n=>R(e,t,n,r)))}function Ac(e,t,n,r){return t.UseUnevaluated()?Oc(e,t,n,r):kc(e,t,n,r)}function jc(e,t,n,r){let i=n.allOf.reduce((t,n)=>{let i=new ic;return z(e,i,n,r)?[...t,i]:t},[]);return w(i.length,n.allOf.length)&&t.Merge(i)}function Mc(e,t,n,r,i,a){let o=[],s=i.allOf.reduce((t,i,s)=>{let c=`${n}/allOf/${s}`,l=new oc,u=B(e,l,c,r,i,a);return u||o.push(l),u?[...t,l]:t},[]),c=w(s.length,i.allOf.length)&&t.Merge(s);return c||o.forEach(e=>e.GetErrors().forEach(e=>t.AddError(e))),c}function Nc(e,t,n,r){return Dc(e,t,n.anyOf,r,bo(M(`results`,`length`),N(0)))}function Pc(e,t,n,r){return zo(n.anyOf.map(n=>R(e,t,n,r)))}function Fc(e,t,n,r){return t.UseUnevaluated()?Nc(e,t,n,r):Pc(e,t,n,r)}function Ic(e,t,n,r){let i=n.anyOf.reduce((t,n)=>{let i=new ic;return z(e,i,n,r)?[...t,i]:t},[]);return At(i.length,0)&&t.Merge(i)}function Lc(e,t,n,r,i,a){let o=[],s=i.anyOf.reduce((t,i,s)=>{let c=new oc,l=B(e,c,`${n}/anyOf/${s}`,r,i,a);return l||o.push(c),l?[...t,c]:t},[]),c=At(s.length,0)&&t.Merge(s);return c||o.forEach(e=>e.GetErrors().forEach(e=>t.AddError(e))),c||t.AddError({keyword:`anyOf`,schemaPath:n,instancePath:r,params:{}})}function Rc(e,t,n,r){return N(!!n)}function zc(e,t,n,r){return n}function Bc(e,t,n,r,i,a){return zc(e,t,i,a)||t.AddError({keyword:`boolean`,schemaPath:n,instancePath:r,params:{}})}function Vc(e,t,n,r){return It(n.const)?yo(r,N(n.const)):Ao(r,cc(n.const))}function Hc(e,t,n,r){return It(n.const)?w(r,n.const):Ot(r,n.const)}function Uc(e,t,n,r,i,a){return Hc(e,t,i,a)||t.AddError({keyword:`const`,schemaPath:n,instancePath:r,params:{allowedValue:i.const}})}function Wc(e){return!(js(e)&&w(e.minContains,0))}function Gc(e,t,n,r){if(!Wc(n))return N(!0);let i=I();return ro(io(yo(M(r,`length`),N(0))),j(M(r,`some`),[Mo([i],R(e,t,n.contains,i))]))}function Kc(e,t,n,r){return!Wc(n)||!w(r.length,0)&&r.some(r=>z(e,t,n.contains,r))}function qc(e,t,n,r,i,a){return Kc(e,t,i,a)||t.AddError({keyword:`contains`,schemaPath:n,instancePath:r,params:{minContains:1}})}function Jc(e,t,n,r){return A(yo(M(Oo(r),`length`),N(0)),P(T(n.dependencies).map(([n,i])=>{let a=io(ko(r,N(n))),o=R(e,t,i,r);return A(a,S(i)?(e=>P(e.map(e=>ko(r,N(e)))))(i):o)})))}function Yc(e,t,n,r){let i=w(y(r).length,0),a=x(T(n.dependencies),0,([n,i])=>!E(r,n)||(S(i)?i.every(e=>E(r,e)):z(e,t,i,r)));return i||a}function Xc(e,t,n,r,i,a){let o=w(y(a).length,0),s=Gt(T(i.dependencies),0,([i,o])=>{let s=`${n}/dependencies/${i}`;return!E(a,i)||(S(o)?o.every(e=>E(a,e)||t.AddError({keyword:`dependencies`,schemaPath:n,instancePath:r,params:{property:i,dependencies:o}})):B(e,t,s,r,o,a))});return o||s}function Zc(e,t,n,r){return A(yo(M(Oo(r),`length`),N(0)),P(T(n.dependentRequired).map(([e,t])=>A(io(ko(r,N(e))),P(t.map(e=>ko(r,N(e))))))))}function Qc(e,t,n,r){let i=w(y(r).length,0),a=x(T(n.dependentRequired),0,([e,t])=>!E(r,e)||t.every(e=>E(r,e)));return i||a}function $c(e,t,n,r,i,a){let o=w(y(a).length,0),s=Gt(T(i.dependentRequired),0,([e,i])=>!E(a,e)||Gt(i,0,o=>E(a,o)||t.AddError({keyword:`dependentRequired`,schemaPath:n,instancePath:r,params:{property:e,dependencies:i}})));return o||s}function el(e,t,n,r){return A(yo(M(Oo(r),`length`),N(0)),P(T(n.dependentSchemas).map(([n,i])=>A(io(ko(r,N(n))),R(e,t,i,r)))))}function tl(e,t,n,r){let i=w(y(r).length,0),a=x(T(n.dependentSchemas),0,([n,i])=>!E(r,n)||z(e,t,i,r));return i||a}function nl(e,t,n,r,i,a){let o=w(y(a).length,0),s=Gt(T(i.dependentSchemas),0,([i,o])=>{let s=`${n}/dependentSchemas/${i}`;return!E(a,i)||B(e,t,s,r,o,a)});return o||s}function rl(e,t,n,r){return np(e,t,e.DynamicRef(n)??!1,r)}function il(e,t,n,r){let i=e.DynamicRef(n)??!1;return F(i)&&z(e,t,i,r)}function al(e,t,n,r,i,a){let o=e.DynamicRef(i)??!1;return F(o)&&B(e,t,`#`,r,o,a)}function ol(e,t,n,r){return zo(n.enum.map(e=>It(e)?yo(r,N(e)):Ao(r,cc(e))))}function sl(e,t,n,r){return n.enum.some(e=>It(e)?w(r,e):Ot(r,e))}function cl(e,t,n,r,i,a){return sl(e,t,i,a)||t.AddError({keyword:`enum`,schemaPath:n,instancePath:r,params:{allowedValues:i.enum}})}function ll(e,t,n,r){return xo(r,N(n.exclusiveMaximum))}function ul(e,t,n,r){return sn(r,n.exclusiveMaximum)}function dl(e,t,n,r,i,a){return ul(e,t,i,a)||t.AddError({keyword:`exclusiveMaximum`,schemaPath:n,instancePath:r,params:{comparison:`<`,limit:i.exclusiveMaximum}})}function fl(e,t,n,r){return bo(r,N(n.exclusiveMinimum))}function pl(e,t,n,r){return At(r,n.exclusiveMinimum)}function ml(e,t,n,r,i,a){return pl(e,t,i,a)||t.AddError({keyword:`exclusiveMinimum`,schemaPath:n,instancePath:r,params:{comparison:`>`,limit:i.exclusiveMinimum}})}const hl=[0,31,28,31,30,31,30,31,31,30,31,30,31],gl=/^(\d\d\d\d)-(\d\d)-(\d\d)$/;function _l(e){return e%4==0&&(e%100!=0||e%400==0)}function vl(e){let t=gl.exec(e);if(!t)return!1;let n=+t[1],r=+t[2],i=+t[3];return r>=1&&r<=12&&i>=1&&i<=(r===2&&_l(n)?29:hl[r])}const yl=/^(\d\d):(\d\d):(\d\d(?:\.\d+)?)(?:Z|([+-])(\d\d):(\d\d))?$/i;function bl(e,t=!0){let n=yl.exec(e);if(!n)return!1;let r=+n[1],i=+n[2],a=+n[3],o=n[4]===`-`?-1:1,s=+(n[5]||0),c=+(n[6]||0);if(s>23||c>59||t&&!n[4]&&e.toLowerCase().indexOf(`z`)===-1)return!1;if(r<=23&&i<=59&&a<60)return!0;let l=i-c*o,u=r-s*o-+(l<0);return(u===23||u===-1)&&(l===59||l===-1)&&a<61}function xl(e,t=!0){let n=e.split(/T/i);return n.length===2&&vl(n[0])&&bl(n[1],t)}const Sl=/^P((\d+Y(\d+M(\d+D)?)?|\d+M(\d+D)?|\d+D)(T(\d+H(\d+M(\d+S)?)?|\d+M(\d+S)?|\d+S))?|T(\d+H(\d+M(\d+S)?)?|\d+M(\d+S)?|\d+S)|\d+W)$/;function Cl(e){return Sl.test(e)}const wl=/^(?!.*\.\.)[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i;function Tl(e){return wl.test(e)}function El(e,t,n){e=n?Math.floor(e/700):e>>1,e+=Math.floor(e/t);let r=0;for(;e>455;)e=Math.floor(e/35),r+=36;return r+Math.floor(36*e/(e+38))}function Dl(e){let t=[],n=128,r=0,i=72,a=e.lastIndexOf(`-`);if(a>0)for(let n=0;n<a;n++){let r=e.charCodeAt(n);if(r>=128)throw Error(`Invalid punycode: non-basic before delimiter`);t.push(r)}let o=a<0?0:a+1;for(;o<e.length;){let a=r,s=1,c=36;for(;;){if(o>=e.length)throw Error(`Invalid punycode: unexpected end of input`);let t=e.charCodeAt(o++),n;if(t>=97&&t<=122)n=t-97;else if(t>=48&&t<=57)n=t-48+26;else if(t>=65&&t<=90)Qe();else throw Error(`Invalid punycode: bad digit character`);r+=n*s;let a=c<=i?1:c>=i+26?26:c-i;if(n<a)break;s*=36-a,c+=36}let l=t.length+1;i=El(r-a,l,a===0),n+=Math.floor(r/l),r%=l,t.splice(r,0,n),r++}return globalThis.String.fromCodePoint(...t)}function Ol(e){return/\p{Mn}/u.test(String.fromCodePoint(e))}function kl(e){return/\p{Mc}/u.test(String.fromCodePoint(e))}function Al(e){return/\p{Me}/u.test(String.fromCodePoint(e))}function jl(e){return Ol(e)||kl(e)||Al(e)}const Ml=new Set([1600,2042,12334,12335,12337,12338,12339,12340,12341,12347]),Nl=new Set([2381,2509,2637,2765,2893,3021,3149,3277,3387,3388,3405,3530,6980,7082,7083,43456,69702,69759,69817,69939,69940,70080,70197,70477,70722,70850,71103,71231,71350,72767,73028,73029]);function Pl(e){return/\p{Script=Greek}/u.test(String.fromCodePoint(e))}function Fl(e){return/\p{Script=Hebrew}/u.test(String.fromCodePoint(e))}function Il(e){return/\p{Script=Hiragana}/u.test(String.fromCodePoint(e))}function Ll(e){return/\p{Script=Katakana}/u.test(String.fromCodePoint(e))}function Rl(e){return/\p{Script=Han}/u.test(String.fromCodePoint(e))}function zl(e){return e>=1632&&e<=1641}function Bl(e){return e>=1776&&e<=1785}function Vl(e){return Nl.has(e)}function Hl(e){if(e.length===0)return Qe();let t=[...e].map(e=>e.codePointAt(0)),n=t.length;if(t[0]===45||t[n-1]===45||n>=4&&t[2]===45&&t[3]===45||jl(t[0]))return!1;let r=!1,i=!1,a=!1;for(let e=0;e<n;e++){let n=t[e];if(Ml.has(n))return!1;(Il(n)||Ll(n)||Rl(n))&&(r=!0),zl(n)&&(i=!0),Bl(n)&&(a=!0);let o=t[e-1],s=t[e+1];switch(n){case 183:if(o!==108||s!==108)return!1;break;case 885:if(s===void 0||!Pl(s))return!1;break;case 1523:case 1524:if(o===void 0||!Fl(o))return!1;break;case 8204:if(o===void 0||o<128&&!Vl(o))return!1;break;case 8205:if(o===void 0||!Vl(o))return!1}}return!(e.includes(`・`)&&!r||i&&a)}function Ul(e){if(e.charCodeAt(0)===45||e.charCodeAt(e.length-1)===45||e.length>=4&&e.charCodeAt(2)===45&&e.charCodeAt(3)===45)return!1;for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(!(n>=97&&n<=122||n>=65&&n<=90||n>=48&&n<=57||n===45))return!1}return!0}function Wl(e){return e.toLowerCase().startsWith(`xn--`)}function Gl(e){try{let t=e.slice(4).toLowerCase();if(t.lastIndexOf(`-`)===0)return!1;let n=Dl(t);return n?Hl(n):!1}catch{return!1}}function Kl(e){return e.length===0||e.length>63?!1:Wl(e)?Gl(e):Hl(e)}function ql(e){return e.length===0||e.length>63?!1:Wl(e)?Gl(e):Ul(e)}function Jl(e){if(e.length===0||e.length>253||e.charCodeAt(e.length-1)===46)return!1;for(let t of e.split(`.`))if(!ql(t))return!1;return!0}const Yl=/^(?!.*\.\.)[\p{L}\p{N}!#$%&'*+/=?^_`{|}~-]+(?:\.[\p{L}\p{N}!#$%&'*+/=?^_`{|}~-]+)*@[\p{L}\p{N}](?:[\p{L}\p{N}-]{0,61}[\p{L}\p{N}])?(?:\.[\p{L}\p{N}](?:[\p{L}\p{N}-]{0,61}[\p{L}\p{N}])?)*$/iu;function Xl(e){return Yl.test(e)}function Zl(e){if(e.length===0||e.includes(` `))return!1;let t=e.normalize(`NFC`).replace(/[\u002E\u3002\uFF0E\uFF61]/g,`.`);if(t.length>253)return!1;for(let e of t.split(`.`))if(!Kl(e))return!1;return!0}function Ql(e,t,n){let r=0,i=0,a=0,o=0;for(let s=t;s<n;s++){let t=e.charCodeAt(s);if(t===46){if(a===0||i>255||o===48&&a>1)return!1;r++,i=0,a=0,o=0}else if(t>=48&&t<=57)a===0&&(o=t),i=i*10+(t-48),a++;else return!1}return r===3&&a>0&&i<=255&&!(o===48&&a>1)}function $l(e){return Ql(e,0,e.length)}function eu(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function tu(e){let t=e.length;if(t===0)return!1;let n=0,r=!1,i=0;if(e.charCodeAt(0)===58&&e.charCodeAt(1)===58){if(t===2)return!0;r=!0,i=2}for(;i<t;){let a=0,o=i;for(;i<t&&eu(e.charCodeAt(i));)i++,a++;if(a===0)return!1;let s=e.charCodeAt(i);if(s===46){if(!Ql(e,o,t))return!1;n+=2,i=t;break}if(a>4)return!1;if(n++,i===t)break;if(s!==58)return!1;if(i++,e.charCodeAt(i)===58){if(r||e.charCodeAt(i+1)===58)return!1;if(r=!0,i++,i===t)break}}return r?n<=7:n===8}function nu(e){try{return new URL(e,`http://example.com`),!0}catch{return!1}}function ru(e){if(e.includes(` `)||e.includes(`\\`)||/[\x00-\x1F\x7F]/.test(e)||/%(?![0-9a-fA-F]{2})/.test(e))return!1;if(e===``)return!0;let t=e.indexOf(`:`);return t>0&&/^[a-zA-Z][a-zA-Z0-9+\-.]*$/.test(e.substring(0,t))?nu(e):e.match(/^([a-zA-Z][a-zA-Z0-9+\-.]*)(\/\/)/)&&t===-1?!1:nu(e)}function iu(e){try{return new URL(e),!0}catch{return!1}}const au=/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i;function ou(e){return au.test(e)}const su=/^(?:\/(?:[^~/]|~0|~1)*)*$/;function cu(e){return su.test(e)}function lu(e){if(e.length===0)return!1;try{return new RegExp(e),!0}catch{return!1}}const uu=/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/;function du(e){return uu.test(e)}const fu=/^(?!.*[^\x00-\x7F])(?!.*\\)(?:(?:[a-z][a-z0-9+\-.]*:)?(?:\/\/[^\s[\]{}<>^`|]*)?|[^\s[\]{}<>^`|]*)(?:\?[^\s[\]{}<>^`|]*)?(?:#[^\s[\]{}<>^`|]*)?$/i;function pu(e){return fu.test(e)}const mu=/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i;function hu(e){return mu.test(e)}function gu(e){return e>=97&&e<=122||e>=65&&e<=90}function _u(e){return gu(e)||e>=48&&e<=57}function vu(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function yu(e){return _u(e)||e===43||e===45||e===46}function bu(e){return _u(e)||e===45||e===46||e===95||e===126}function xu(e){return e===33||e===36||e===38||e===39||e===40||e===41||e===42||e===43||e===44||e===59||e===61}function Su(e){return bu(e)||xu(e)||e===58||e===64}function Cu(e){let t=e.length;if(t===0||!gu(e.charCodeAt(0)))return!1;let n=1;for(;n<t;){let t=e.charCodeAt(n);if(t===58)break;if(!yu(t))return!1;n++}if(e.charCodeAt(n)!==58)return!1;if(n++,e.charCodeAt(n)===47&&e.charCodeAt(n+1)===47){n+=2;let r=n,i=-1;for(let r=n;r<t;r++){let t=e.charCodeAt(r);if(t===64){i=r;break}if(t===47||t===63||t===35)break}if(i!==-1){for(let t=r;t<i;t++){let n=e.charCodeAt(t);if(n===91||n===93)return!1;if(n===37){if(t+2>=i||!vu(e.charCodeAt(t+1))||!vu(e.charCodeAt(t+2)))return!1;t+=2}else if(!bu(n)&&!xu(n)&&n!==58)return!1}n=i+1}if(e.charCodeAt(n)===91){for(n++;n<t&&e.charCodeAt(n)!==93;)n++;if(e.charCodeAt(n)!==93)return!1;n++}else for(;n<t;){let t=e.charCodeAt(n);if(t===47||t===63||t===35||t===58)break;if(t<128&&!bu(t)&&!xu(t))return!1;n++}if(e.charCodeAt(n)===58)for(n++;n<t;){let t=e.charCodeAt(n);if(t===47||t===63||t===35)break;if(t<48||t>57)return!1;n++}}for(;n<t;){let r=e.charCodeAt(n);if(r===37){if(n+2>=t||!vu(e.charCodeAt(n+1))||!vu(e.charCodeAt(n+2)))return!1;n+=2}else if(r>127)return!1;else if(!(Su(r)||r===47||r===63||r===35))return!1;n++}return!0}const wu=/^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu;function Tu(e){return wu.test(e)}const Eu=/^[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i;function Du(e){return Eu.test(e)}const L=new Map;function Ou(){L.clear()}function ku(){return[...L.entries()]}function Au(e,t){L.set(e,t)}function ju(e){return L.has(e)}function Mu(e){return L.get(e)}function Nu(e,t){return L.get(e)?.(t)??!0}function Pu(){Ou(),L.set(`date-time`,xl),L.set(`date`,vl),L.set(`duration`,Cl),L.set(`email`,Tl),L.set(`hostname`,Jl),L.set(`idn-email`,Xl),L.set(`idn-hostname`,Zl),L.set(`ipv4`,$l),L.set(`ipv6`,tu),L.set(`iri-reference`,ru),L.set(`iri`,iu),L.set(`json-pointer-uri-fragment`,ou),L.set(`json-pointer`,cu),L.set(`regex`,lu),L.set(`relative-json-pointer`,du),L.set(`time`,bl),L.set(`uri-reference`,pu),L.set(`uri-template`,hu),L.set(`uri`,Cu),L.set(`url`,Tu),L.set(`uuid`,Du)}Pu();var Fu=e({Clear:()=>Ou,Entries:()=>ku,Get:()=>Mu,Has:()=>ju,IsDate:()=>vl,IsDateTime:()=>xl,IsDuration:()=>Cl,IsEmail:()=>Tl,IsHostname:()=>Jl,IsIPv4:()=>$l,IsIPv6:()=>tu,IsIdnEmail:()=>Xl,IsIdnHostname:()=>Zl,IsIri:()=>iu,IsIriReference:()=>ru,IsJsonPointer:()=>cu,IsJsonPointerUriFragment:()=>ou,IsRegex:()=>lu,IsRelativeJsonPointer:()=>du,IsTime:()=>bl,IsUri:()=>Cu,IsUriReference:()=>pu,IsUriTemplate:()=>hu,IsUrl:()=>Tu,IsUuid:()=>Du,Reset:()=>Pu,Set:()=>Au,Test:()=>Nu});function Iu(e,t,n,r){return j(M(`Format`,`Test`),[N(n.format),r])}function Lu(e,t,n,r){return Nu(n.format,r)}function Ru(e,t,n,r,i,a){return Lu(e,t,i,a)||t.AddError({keyword:`format`,schemaPath:n,instancePath:r,params:{format:i.format}})}function zu(e,t,n,r){let i=!Js(n)||n.then,a=!gs(n)||n.else;return Po(R(e,t,n.if,r),R(e,t,i,r),R(e,t,a,r))}function Bu(e,t,n,r){let i=!Js(n)||n.then,a=!gs(n)||n.else;return z(e,t,n.if,r)?z(e,t,i,r):z(e,t,a,r)}function Vu(e,t,n,r,i,a){let o=!Js(i)||i.then,s=!gs(i)||i.else,c=new oc,l=B(e,c,`${n}/if`,r,i.if,a)?B(e,c,`${n}/then`,r,o,a)||t.AddError({keyword:`if`,schemaPath:n,instancePath:r,params:{failingKeyword:`then`}}):B(e,t,`${n}/else`,r,s,a)||t.AddError({keyword:`if`,schemaPath:n,instancePath:r,params:{failingKeyword:`else`}});return l&&t.Merge([c]),l}function Hu(e,t,n,r){return P(n.items.map((n,i)=>{let a=So(M(r,`length`),N(i)),o=Wf(e,t,n,`${r}[${i}]`),s=t.AddIndex(N(i));return A(a,t.UseUnevaluated()?ro(o,s):o)}))}function Uu(e,t,n,r){return x(n.items,0,(n,i)=>tn(r.length,i)||Gf(e,t,n,r[i])&&t.AddIndex(i))}function Wu(e,t,n,r,i,a){return Gt(i.items,0,(i,o)=>{let s=`${n}/items/${o}`,c=`${r}/${o}`;return tn(a.length,o)||Kf(e,t,s,c,i,a[o])&&t.AddIndex(o)})}function Gu(e,t,n,r){let i=Bs(n)?n.prefixItems.length:0,a=Wf(e,t,n.items,`element`),o=t.AddIndex(`index`),s=t.UseUnevaluated()?ro(a,o):a;return Eo(r,N(i),[`element`,`index`],s)}function Ku(e,t,n,r){let i=Bs(n)?n.prefixItems.length:0;return x(r,i,(r,i)=>Gf(e,t,n.items,r)&&t.AddIndex(i))}function qu(e,t,n,r,i,a){let o=Bs(i)?i.prefixItems.length:0;return Gt(a,o,(a,o)=>Kf(e,t,`${n}/items`,`${r}/${o}`,i.items,a)&&t.AddIndex(o))}function Ju(e,t,n,r){return ws(n)?Hu(e,t,n,r):Gu(e,t,n,r)}function Yu(e,t,n,r){return ws(n)?Uu(e,t,n,r):Ku(e,t,n,r)}function Xu(e,t,n,r,i,a){return ws(i)?Wu(e,t,n,r,i,a):qu(e,t,n,r,i,a)}function Zu(e){return ls(e)}function Qu(e,t,n,r){if(!Zu(n))return N(!0);let[i,a]=[I(),I()];return So(j(M(r,`reduce`),[Mo([i,a],Po(R(e,t,n.contains,a),Bo(i),i)),N(0)]),N(n.maxContains))}function $u(e,t,n,r){if(!Zu(n))return!0;let i=r.reduce((r,i)=>z(e,t,n.contains,i)?++r:r,0);return tn(i,n.maxContains)}function ed(e,t,n,r,i,a){let o=js(i)?i.minContains:1;return $u(e,t,i,a)||t.AddError({keyword:`contains`,schemaPath:n,instancePath:r,params:{minContains:o,maxContains:i.maxContains}})}function td(e,t,n,r){return So(r,N(n.maximum))}function nd(e,t,n,r){return tn(r,n.maximum)}function rd(e,t,n,r,i,a){return nd(e,t,i,a)||t.AddError({keyword:`maximum`,schemaPath:n,instancePath:r,params:{comparison:`<=`,limit:i.maximum}})}function id(e,t,n,r){return So(M(r,`length`),N(n.maxItems))}function ad(e,t,n,r){return tn(r.length,n.maxItems)}function od(e,t,n,r,i,a){return ad(e,t,i,a)||t.AddError({keyword:`maxItems`,schemaPath:n,instancePath:r,params:{limit:i.maxItems}})}function sd(e,t,n,r){return To(r,N(n.maxLength))}function cd(e,t,n,r){return St(r,n.maxLength)}function ld(e,t,n,r,i,a){return cd(e,t,i,a)||t.AddError({keyword:`maxLength`,schemaPath:n,instancePath:r,params:{limit:i.maxLength}})}function ud(e,t,n,r){return So(M(Oo(r),`length`),N(n.maxProperties))}function dd(e,t,n,r){return tn(y(r).length,n.maxProperties)}function fd(e,t,n,r,i,a){return dd(e,t,i,a)||t.AddError({keyword:`maxProperties`,schemaPath:n,instancePath:r,params:{limit:i.maxProperties}})}function pd(e){return ls(e)}function md(e,t,n,r){if(!pd(n))return N(!0);let[i,a]=[I(),I()];return Co(j(M(r,`reduce`),[Mo([i,a],Po(R(e,t,n.contains,a),Bo(i),i)),N(0)]),N(n.minContains))}function hd(e,t,n,r){if(!pd(n))return!0;let i=r.reduce((r,i)=>z(e,t,n.contains,i)?++r:r,0);return Mt(i,n.minContains)}function gd(e,t,n,r,i,a){return hd(e,t,i,a)||t.AddError({keyword:`contains`,schemaPath:n,instancePath:r,params:{minContains:i.minContains}})}function _d(e,t,n,r){return Co(r,N(n.minimum))}function vd(e,t,n,r){return Mt(r,n.minimum)}function yd(e,t,n,r,i,a){return vd(e,t,i,a)||t.AddError({keyword:`minimum`,schemaPath:n,instancePath:r,params:{comparison:`>=`,limit:i.minimum}})}function bd(e,t,n,r){return Co(M(r,`length`),N(n.minItems))}function xd(e,t,n,r){return Mt(r.length,n.minItems)}function Sd(e,t,n,r,i,a){return xd(e,t,i,a)||t.AddError({keyword:`minItems`,schemaPath:n,instancePath:r,params:{limit:i.minItems}})}function Cd(e,t,n,r){return wo(r,N(n.minLength))}function wd(e,t,n,r){return an(r,n.minLength)}function Td(e,t,n,r,i,a){return wd(e,t,i,a)||t.AddError({keyword:`minLength`,schemaPath:n,instancePath:r,params:{limit:i.minLength}})}function Ed(e,t,n,r){return Co(M(Oo(r),`length`),N(n.minProperties))}function Dd(e,t,n,r){return Mt(y(r).length,n.minProperties)}function Od(e,t,n,r,i,a){return Dd(e,t,i,a)||t.AddError({keyword:`minProperties`,schemaPath:n,instancePath:r,params:{limit:i.minProperties}})}function kd(e,t,n,r){return Vo(r,N(n.multipleOf))}function Ad(e,t,n,r){return ut(r,n.multipleOf)}function jd(e,t,n,r,i,a){return Ad(e,t,i,a)||t.AddError({keyword:`multipleOf`,schemaPath:n,instancePath:r,params:{multipleOf:i.multipleOf}})}function Md(e,t,n,r){return Dc(e,t,[n.not],r,io(yo(M(`results`,`length`),N(1))))}function Nd(e,t,n,r){return io(R(e,t,n.not,r))}function Pd(e,t,n,r){return t.UseUnevaluated()?Md(e,t,n,r):Nd(e,t,n,r)}function Fd(e,t,n,r){let i=new ic;return!z(e,i,n.not,r)&&t.Merge([i])}function Id(e,t,n,r,i,a){return Fd(e,t,i,a)||t.AddError({keyword:`not`,schemaPath:n,instancePath:r,params:{}})}function Ld(e,t,n,r){return Dc(e,t,n.oneOf,r,yo(M(`results`,`length`),N(1)))}function Rd(e,t,n,r){return yo(j(M(jo(n.oneOf.map(n=>R(e,t,n,r))),`reduce`),[Mo([`count`,`result`],Po(yo(`result`,N(!0)),Bo(`count`),`count`)),N(0)]),N(1))}function zd(e,t,n,r){return t.UseUnevaluated()?Ld(e,t,n,r):Rd(e,t,n,r)}function Bd(e,t,n,r){let i=n.oneOf.reduce((t,n)=>{let i=new ic;return z(e,i,n,r)?[...t,i]:t},[]);return w(i.length,1)&&t.Merge(i)}function Vd(e,t,n,r,i,a){let o=[],s=[],c=i.oneOf.reduce((t,i,c)=>{let l=new oc,u=B(e,l,`${n}/oneOf/${c}`,r,i,a);return u&&s.push(c),u||o.push(l),u?[...t,l]:t},[]),l=w(c.length,1)&&t.Merge(c);return!l&&w(s.length,0)&&o.forEach(e=>e.GetErrors().forEach(e=>t.AddError(e))),l||t.AddError({keyword:`oneOf`,schemaPath:n,instancePath:r,params:{passingSchemas:s}})}function Hd(e,t,n,r){return j(M(cc(v(n.pattern)?new RegExp(n.pattern,`u`):n.pattern),`test`),[r])}function Ud(e,t,n,r){return(v(n.pattern)?new RegExp(n.pattern,`u`):n.pattern).test(r)}function Wd(e,t,n,r,i,a){return Ud(e,t,i,a)||t.AddError({keyword:`pattern`,schemaPath:n,instancePath:r,params:{pattern:i.pattern}})}function Gd(e,t,n,r){return P(T(n.patternProperties).map(([n,i])=>{let[a,o]=[I(),I()],s=io(j(M(cc(new RegExp(n,`u`)),`test`),[a])),c=Wf(e,t,i,o),l=t.AddKey(a),u=t.UseUnevaluated()?A(s,ro(c,l)):A(s,c);return Eo(Do(r),N(0),[`[${a}, ${o}]`,`_`],u)}))}function Kd(e,t,n,r){return x(T(n.patternProperties),0,([n,i])=>{let a=new RegExp(n,`u`);return x(T(r),0,([n,r])=>!a.test(n)||Gf(e,t,i,r)&&t.AddKey(n))})}function qd(e,t,n,r,i,a){return Gt(T(i.patternProperties),0,([i,o])=>{let s=`${n}/patternProperties/${i}`,c=new RegExp(i,`u`);return Gt(T(a),0,([n,i])=>{let a=`${r}/${n}`;return!c.test(n)||Kf(e,t,s,a,o,i)&&t.AddKey(n)})})}function Jd(e,t,n,r){return P(n.prefixItems.map((n,i)=>{let a=So(M(r,`length`),N(i)),o=Wf(e,t,n,`${r}[${i}]`),s=t.AddIndex(N(i));return A(a,t.UseUnevaluated()?ro(o,s):o)}))}function Yd(e,t,n,r){return w(r.length,0)||x(n.prefixItems,0,(n,i)=>tn(r.length,i)||Gf(e,t,n,r[i])&&t.AddIndex(i))}function Xd(e,t,n,r,i,a){return w(a.length,0)||Gt(i.prefixItems,0,(i,o)=>{let s=`${n}/prefixItems/${o}`,c=`${r}/${o}`;return tn(a.length,o)||Kf(e,t,s,c,i,a[o])&&t.AddIndex(o)})}function Zd(e,t){return e.includes(t)||Zt().exactOptionalPropertyTypes}function Qd(e,t){return go(M(e,t))}function $d(e,t){return C(e[t])}function ef(e,t,n,r){let i=qs(n)?n.required:[];return P(T(n.properties).map(([n,a])=>{let o=io(ko(r,N(n))),s=Wf(e,t,a,M(r,n)),c=t.AddKey(N(n)),l=t.UseUnevaluated()?ro(s,c):s,u=i.includes(n)?l:A(o,l);return Zd(i,n)?u:A(Qd(r,n),u)}))}function tf(e,t,n,r){let i=qs(n)?n.required:[];return x(T(n.properties),0,([n,a])=>{let o=!E(r,n)||Gf(e,t,a,r[n])&&t.AddKey(n);return Zd(i,n)?o:$d(r,n)||o})}function nf(e,t,n,r,i,a){let o=qs(i)?i.required:[];return Gt(T(i.properties),0,([i,s])=>{let c=`${n}/properties/${i}`,l=`${r}/${i}`,u=()=>!E(a,i)||Kf(e,t,c,l,s,a[i])&&t.AddKey(i);return Zd(o,i)?u():$d(a,i)||u()})}function rf(e,t,n,r){let[i,a]=[I(),I()];return Eo(Oo(r),N(0),[i,a],R(e,t,n.propertyNames,i))}function af(e,t,n,r){return x(y(r),0,(r,i)=>z(e,t,n.propertyNames,r))}function of(e,t,n,r,i,a){let o=[];return Gt(y(a),0,(t,a)=>{let s=`${r}/${t}`,c=`${n}/propertyNames`,l=B(e,new oc,c,s,i.propertyNames,t);return l||o.push(t),l})||t.AddError({keyword:`propertyNames`,schemaPath:n,instancePath:r,params:{propertyNames:o}})}function sf(e,t,n,r){return np(e,t,e.RecursiveRef(n)??!1,r)}function cf(e,t,n,r){let i=e.RecursiveRef(n)??!1;return F(i)&&z(e,t,i,r)}function lf(e,t,n,r,i,a){let o=e.RecursiveRef(i)??!1;return F(o)&&B(e,t,`#`,r,o,a)}function uf(e,t,n,r){let i=Mo([`context`,`value`],np(e,t,n,`value`));return j(Mo([`context`,`value`],Fo([Io(`nextContext`,No(`CheckContext`,[])),Io(`result`,j(i,[`nextContext`,`value`])),Lo(`result`,t.Merge(`[nextContext]`)),Ro(`result`)])),[`context`,r])}function df(e,t,n,r){return np(e,t,n,r)}function ff(e,t,n,r){let i=e.Ref(n)??!1;return t.UseUnevaluated()?uf(e,t,i,r):df(e,t,i,r)}function pf(e,t,n,r){let i=e.Ref(n)??!1,a=new ic,o=F(i)&&z(e,a,i,r);return o&&t.Merge([a]),o}function mf(e,t,n,r,i,a){let o=e.Ref(i)??!1,s=new oc,c=F(o)&&B(e,s,`#`,r,o,a);return c&&t.Merge([s]),c||s.GetErrors().forEach(e=>t.AddError(e)),c}function hf(e,t,n,r){return P(n.required.map(e=>ko(r,N(e))))}function gf(e,t,n,r){return x(n.required,0,e=>E(r,e))}function _f(e,t,n,r,i,a){let o=[];return Gt(i.required,0,e=>{let t=E(a,e);return t||o.push(e),t})||t.AddError({keyword:`required`,schemaPath:n,instancePath:r,params:{requiredProperties:o}})}function vf(e,t,n,r){return w(n,`object`)?fo(r):w(n,`array`)?ao(r):w(n,`boolean`)?so(r):w(n,`integer`)?co(r):w(n,`number`)?uo(r):w(n,`null`)?lo(r):w(n,`string`)?mo(r):w(n,`bigint`)?oo(r):w(n,`constructor`)?vo(r):w(n,`function`)?_o(r):w(n,`symbol`)?ho(r):w(n,`undefined`)||w(n,`void`)?go(r):N(!0)}function yf(e,t,n,r,i){return w(n,`object`)?Ye(i):w(n,`array`)?S(i):w(n,`boolean`)?$t(i):w(n,`integer`)?yt(i):w(n,`number`)?D(i):w(n,`null`)?Ke(i):w(n,`string`)?v(i):w(n,`bigint`)?zt(i):w(n,`constructor`)?Tt(i):w(n,`function`)?Vt(i):w(n,`symbol`)?ot(i):w(n,`undefined`)?C(i):!w(n,`void`)||C(i)}function bf(e,t,n,r){return zo(n.map(n=>vf(e,t,n,r)))}function xf(e,t,n,r,i){return n.some(n=>yf(e,t,n,r,i))}function Sf(e,t,n,r){return S(n.type)?bf(e,t,n.type,r):vf(e,t,n.type,r)}function Cf(e,t,n,r){return S(n.type)?xf(e,t,n.type,n,r):yf(e,t,n.type,n,r)}function wf(e,t,n,r,i,a){return(S(i.type)?xf(e,t,i.type,i,a):yf(e,t,i.type,i,a))||t.AddError({keyword:`type`,schemaPath:n,instancePath:r,params:{type:i.type}})}function Tf(e,t,n,r){let[i,a]=[I(),I()],o=j(M(`context`,`GetIndices`),[]),s=j(M(`indices`,`has`),[i]),c=R(e,t,n.unevaluatedItems,a),l=j(M(`context`,`AddIndex`),[i]),u=Eo(r,N(0),[a,i],ro(A(s,c),l));return j(Mo([`context`],Fo([Io(`indices`,o),Ro(u)])),[`context`])}function Ef(e,t,n,r){let i=t.GetIndices();return x(r,0,(r,a)=>(i.has(a)||z(e,t,n.unevaluatedItems,r))&&t.AddIndex(a))}function Df(e,t,n,r,i,a){let o=t.GetIndices(),s=[];return Gt(a,0,(a,c)=>{let l=new oc,u=(o.has(c)||B(e,l,n,r,i.unevaluatedItems,a))&&t.AddIndex(c);return u||s.push(c),u})||t.AddError({keyword:`unevaluatedItems`,schemaPath:n,instancePath:r,params:{unevaluatedItems:s}})}function Of(e,t,n,r){let[i,a]=[I(),I()],o=j(M(`context`,`GetKeys`),[]),s=j(M(`keys`,`has`),[i]),c=j(M(`context`,`AddKey`),[i]),l=R(e,t,n.unevaluatedProperties,a),u=Eo(Do(r),N(0),[`[${i}, ${a}]`,`_`],A(s,ro(l,c)));return j(Mo([`context`],Fo([Io(`keys`,o),Ro(u)])),[`context`])}function kf(e,t,n,r){let i=t.GetKeys();return x(T(r),0,([r,a])=>i.has(r)||z(e,t,n.unevaluatedProperties,a)&&t.AddKey(r))}function Af(e,t,n,r,i,a){let o=t.GetKeys(),s=[];return Gt(T(a),0,([a,c])=>{let l=new oc,u=o.has(a)||B(e,l,n,r,i.unevaluatedProperties,c)&&t.AddKey(a);return u||s.push(a),u})||t.AddError({keyword:`unevaluatedProperties`,schemaPath:n,instancePath:r,params:{unevaluatedProperties:s}})}function jf(e){return!w(e.uniqueItems,!1)}function Mf(e,t,n,r){return jf(n)?yo(M(No(`Set`,[j(M(r,`map`),[M(`Hashing`,`Hash`)])]),`size`),M(r,`length`)):N(!0)}function Nf(e,t,n,r){if(!jf(n))return!0;let i=new Set(r.map(st)).size,a=r.length;return w(i,a)}function Pf(e,t,n,r,i,a){if(!jf(i))return!0;let o=new Set,s=a.reduce((e,t,n)=>{let r=st(t);return o.has(r)?[...e,n]:(o.add(r),e)},[]);return w(s.length,0)||t.AddError({keyword:`uniqueItems`,schemaPath:n,instancePath:r,params:{duplicateItems:s}})}function Ff(e,t){return Ys(e)&&(S(e.type)&&At(e.type.length,0)&&x(e.type,0,e=>w(e,t))||w(e.type,t))}function If(e){return Ff(e,`object`)}function Lf(e){return ts(e)&&(is(e)||ds(e)||fs(e)||ps(e)||Vs(e)||zs(e)||Hs(e)||Ps(e)||ks(e)||qs(e)||Qs(e))}function Rf(e){return Ff(e,`array`)}function zf(e){return ts(e)&&(rs(e)||Cs(e)||ls(e)||Es(e)||Ds(e)||js(e)||Ms(e)||Bs(e)||Zs(e)||Xs(e))}function Bf(e){return Ff(e,`string`)}function Vf(e){return ts(e)&&(Ns(e)||Os(e)||bs(e)||Rs(e))}function Hf(e){return Ff(e,`number`)||Ff(e,`bigint`)}function Uf(e){return ts(e)&&(As(e)||Ts(e)||vs(e)||ys(e)||Fs(e))}function Wf(e,t,n,r){return t.UseUnevaluated()?ro(ro(t.Push(),R(e,t,n,r)),t.Pop()):R(e,t,n,r)}function R(e,t,n,r){e.Push(n);let i=[];if(ns(n))return Rc(e,t,n,r);if(Ys(n)&&i.push(Sf(e,t,n,r)),Lf(n)){let a=[];qs(n)&&a.push(hf(e,t,n,r)),is(n)&&a.push(wc(e,t,n,r)),ds(n)&&a.push(Jc(e,t,n,r)),fs(n)&&a.push(Zc(e,t,n,r)),ps(n)&&a.push(el(e,t,n,r)),zs(n)&&a.push(Gd(e,t,n,r)),Vs(n)&&a.push(ef(e,t,n,r)),Hs(n)&&a.push(rf(e,t,n,r)),Ps(n)&&a.push(Ed(e,t,n,r)),ks(n)&&a.push(ud(e,t,n,r));let o=P(a),s=A(io(fo(r)),o);i.push(If(n)?o:s)}if(zf(n)){let a=[];rs(n)&&a.push(gc(e,t,n,r)),ls(n)&&a.push(Gc(e,t,n,r)),Cs(n)&&a.push(Ju(e,t,n,r)),Es(n)&&a.push(Qu(e,t,n,r)),Ds(n)&&a.push(id(e,t,n,r)),js(n)&&a.push(md(e,t,n,r)),Ms(n)&&a.push(bd(e,t,n,r)),Bs(n)&&a.push(Jd(e,t,n,r)),Xs(n)&&a.push(Mf(e,t,n,r));let o=P(a),s=A(io(ao(r)),o);i.push(Rf(n)?o:s)}if(Vf(n)){let a=[];Os(n)&&a.push(sd(e,t,n,r)),Ns(n)&&a.push(Cd(e,t,n,r)),bs(n)&&a.push(Iu(e,t,n,r)),Rs(n)&&a.push(Hd(e,t,n,r));let o=P(a),s=A(io(mo(r)),o);i.push(Bf(n)?o:s)}if(Uf(n)){let a=[];vs(n)&&a.push(ll(e,t,n,r)),ys(n)&&a.push(fl(e,t,n,r)),Ts(n)&&a.push(td(e,t,n,r)),As(n)&&a.push(_d(e,t,n,r)),Fs(n)&&a.push(kd(e,t,n,r));let o=P(a),s=A(io(A(uo(r),oo(r))),o);i.push(Hf(n)?o:s)}Ks(n)&&i.push(ff(e,t,n,r)),Gs(n)&&i.push(sf(e,t,n,r)),hs(n)&&i.push(rl(e,t,n,r)),cs(n)&&i.push(Vc(e,t,n,r)),_s(n)&&i.push(ol(e,t,n,r)),Ss(n)&&i.push(zu(e,t,n,r)),Is(n)&&i.push(Pd(e,t,n,r)),as(n)&&i.push(Ac(e,t,n,r)),ss(n)&&i.push(Fc(e,t,n,r)),Ls(n)&&i.push(zd(e,t,n,r)),Zs(n)&&i.push(A(io(ao(r)),Tf(e,t,n,r))),Qs(n)&&i.push(A(io(po(r)),Of(e,t,n,r))),es(n)&&i.push(dc(e,t,n,r));let a=P(i);return e.Pop(n),a}function Gf(e,t,n,r){return t.Push()&&z(e,t,n,r)&&t.Pop()}function z(e,t,n,r){e.Push(n);let i=ns(n)?zc(e,t,n,r):(!Ys(n)||Cf(e,t,n,r))&&(!(b(r)&&!S(r))||(!qs(n)||gf(e,t,n,r))&&(!is(n)||Tc(e,t,n,r))&&(!ds(n)||Yc(e,t,n,r))&&(!fs(n)||Qc(e,t,n,r))&&(!ps(n)||tl(e,t,n,r))&&(!zs(n)||Kd(e,t,n,r))&&(!Vs(n)||tf(e,t,n,r))&&(!Hs(n)||af(e,t,n,r))&&(!Ps(n)||Dd(e,t,n,r))&&(!ks(n)||dd(e,t,n,r)))&&(!S(r)||(!rs(n)||_c(e,t,n,r))&&(!ls(n)||Kc(e,t,n,r))&&(!Cs(n)||Yu(e,t,n,r))&&(!Es(n)||$u(e,t,n,r))&&(!Ds(n)||ad(e,t,n,r))&&(!js(n)||hd(e,t,n,r))&&(!Ms(n)||xd(e,t,n,r))&&(!Bs(n)||Yd(e,t,n,r))&&(!Xs(n)||Nf(e,t,n,r)))&&(!v(r)||(!Os(n)||cd(e,t,n,r))&&(!Ns(n)||wd(e,t,n,r))&&(!bs(n)||Lu(e,t,n,r))&&(!Rs(n)||Ud(e,t,n,r)))&&(!(D(r)||zt(r))||(!vs(n)||ul(e,t,n,r))&&(!ys(n)||pl(e,t,n,r))&&(!Ts(n)||nd(e,t,n,r))&&(!As(n)||vd(e,t,n,r))&&(!Fs(n)||Ad(e,t,n,r)))&&(!Ks(n)||pf(e,t,n,r))&&(!Gs(n)||cf(e,t,n,r))&&(!hs(n)||il(e,t,n,r))&&(!cs(n)||Hc(e,t,n,r))&&(!_s(n)||sl(e,t,n,r))&&(!Ss(n)||Bu(e,t,n,r))&&(!Is(n)||Fd(e,t,n,r))&&(!as(n)||jc(e,t,n,r))&&(!ss(n)||Ic(e,t,n,r))&&(!Ls(n)||Bd(e,t,n,r))&&(!Zs(n)||!S(r)||Ef(e,t,n,r))&&(!Qs(n)||!b(r)||kf(e,t,n,r))&&(!es(n)||fc(e,t,n,r));return e.Pop(n),i}function Kf(e,t,n,r,i,a){return t.Push()&&B(e,t,n,r,i,a)&&t.Pop()}function B(e,t,n,r,i,a){e.Push(i);let o=ns(i)?Bc(e,t,n,r,i,a):!!((!Ys(i)||wf(e,t,n,r,i,a))&+(!(b(a)&&!S(a))||!!((!qs(i)||_f(e,t,n,r,i,a))&+(!is(i)||Ec(e,t,n,r,i,a))&(!ds(i)||Xc(e,t,n,r,i,a))&(!fs(i)||$c(e,t,n,r,i,a))&(!ps(i)||nl(e,t,n,r,i,a))&(!zs(i)||qd(e,t,n,r,i,a))&(!Vs(i)||nf(e,t,n,r,i,a))&(!Hs(i)||of(e,t,n,r,i,a))&(!Ps(i)||Od(e,t,n,r,i,a))&(!ks(i)||fd(e,t,n,r,i,a))))&(!S(a)||!!((!rs(i)||vc(e,t,n,r,i,a))&+(!ls(i)||qc(e,t,n,r,i,a))&(!Cs(i)||Xu(e,t,n,r,i,a))&(!Es(i)||ed(e,t,n,r,i,a))&(!Ds(i)||od(e,t,n,r,i,a))&(!js(i)||gd(e,t,n,r,i,a))&(!Ms(i)||Sd(e,t,n,r,i,a))&(!Bs(i)||Xd(e,t,n,r,i,a))&(!Xs(i)||Pf(e,t,n,r,i,a))))&(!v(a)||!!((!Os(i)||ld(e,t,n,r,i,a))&+(!Ns(i)||Td(e,t,n,r,i,a))&(!bs(i)||Ru(e,t,n,r,i,a))&(!Rs(i)||Wd(e,t,n,r,i,a))))&(!(D(a)||zt(a))||!!((!vs(i)||dl(e,t,n,r,i,a))&+(!ys(i)||ml(e,t,n,r,i,a))&(!Ts(i)||rd(e,t,n,r,i,a))&(!As(i)||yd(e,t,n,r,i,a))&(!Fs(i)||jd(e,t,n,r,i,a))))&(!Ks(i)||mf(e,t,n,r,i,a))&(!Gs(i)||lf(e,t,n,r,i,a))&(!hs(i)||al(e,t,n,r,i,a))&(!cs(i)||Uc(e,t,n,r,i,a))&(!_s(i)||cl(e,t,n,r,i,a))&(!Ss(i)||Vu(e,t,n,r,i,a))&(!Is(i)||Id(e,t,n,r,i,a))&(!as(i)||Mc(e,t,n,r,i,a))&(!ss(i)||Lc(e,t,n,r,i,a))&(!Ls(i)||Vd(e,t,n,r,i,a))&(!Zs(i)||!S(a)||Df(e,t,n,r,i,a))&(!Qs(i)||!b(a)||Af(e,t,n,r,i,a)))&&(!es(i)||pc(e,t,n,r,i,a));return e.Pop(i),o}const qf=[0],Jf=new Map,Yf=new Map;function Xf(){return st(qf[0]++)}function Zf(e,t){Jf.has(e)||Jf.set(e,new Map);let n=Jf.get(e);if(n.has(t))return n.get(t);let r=Xf();return n.set(t,r),r}function Qf(e,t,n,r){return e.UseUnevaluated()?j(`check_${n}`,[`context`,r]):j(`check_${n}`,[r])}function $f(e,t,n,r){let i=R(e,t,n,`value`);return t.UseUnevaluated()?Io(`check_${r}`,Mo([`context`,`value`],i)):Io(`check_${r}`,Mo([`value`],i))}function ep(){qf[0]=0,Jf.clear(),Yf.clear()}function tp(){return[...Yf.values()]}function np(e,t,n,r){let i=Zf(n,e.BaseURL().href),a=Qf(t,n,i,r);return Yf.has(i)?a:(Yf.set(i,``),Yf.set(i,$f(e,t,n,i)),a)}function rp(e,t){return b(t)&&!Ue(e)?t[e]:void 0}function ip(e,t){return e.reduce((e,t)=>rp(t,e),t)}function ap(e){if(w(e.length,0))return[];let t=e.split(`/`).map(e=>e.replace(/~1/g,`/`).replace(/~0/g,`~`));return t.length>0&&t[0]===``?t.slice(1):t}function op(e,t){return ip(ap(t),e)}function sp(e,t,n){if(e.$id===n.hash)return e;let r=new URL(e.$id,t.href),i=new URL(n.href,t.href);if(w(r.pathname,i.pathname))return n.hash.startsWith(`#`)?up(e,t,n):e}function cp(e,t,n){let r=new URL(`#${e.$anchor}`,t.href),i=new URL(n.href,t.href);return w(r.href,i.href)?e:void 0}function lp(e,t,n){let r=new URL(`#${e.$dynamicAnchor}`,t.href),i=new URL(n.href,t.href);return w(r.href,i.href)?e:void 0}function up(e,t,n){if(n.href.endsWith(`#`))return e;if(!n.hash.startsWith(`#`))return;let r=decodeURIComponent(n.hash.slice(1));if(r.startsWith(`/`))return op(e,r)}function dp(e,t,n){if(xs(e)){let r=sp(e,t,n);if(!C(r))return r}if(os(e)){let r=cp(e,t,n);if(!C(r))return r}if(ms(e)){let r=lp(e,t,n);if(!C(r))return r}return up(e,t,n)}function fp(e,t,n){return e.reduce((e,r)=>{let i=mp(r,t,n);return C(i)?e:i},void 0)}function pp(e,t,n){return y(e).reduce((r,i)=>{let a=mp(e[i],t,n);return C(a)?r:a},void 0)}function mp(e,t,n){let r=ts(e)&&xs(e)?new URL(e.$id,t.href):t;if(ts(e)){let t=dp(e,r,n);if(!C(t))return t}if(S(e))return fp(e,r,n);if(b(e))return pp(e,r,n)}function hp(e,t){let n=new URL(`http://unknown/`),r=xs(e)?new URL(e.$id,n.href):n;return mp(e,r,new URL(t,r.href))}function gp(e,t,n,r){let i=n.$dynamicRef.startsWith(`#`)?hp(t,n.$dynamicRef):hp(e,n.$dynamicRef);if(!C(i))return!ts(i)||!ms(i)||new URL(n.$dynamicRef,`http://unknown/`).hash.startsWith(`#/`)?i:r.find(e=>e.$dynamicAnchor===i.$dynamicAnchor)??i}var _p=function(e,t,n,r){if(n===`a`&&!r)throw TypeError(`Private accessor was defined without a getter`);if(typeof t==`function`?e!==t||!r:!t.has(e))throw TypeError(`Cannot read private member from an object whose class did not declare it`);return n===`m`?r:n===`a`?r.call(e):r?r.value:t.get(e)},vp,yp,bp,xp,Sp,Cp=class{constructor(e,t){vp.add(this),this.context=e,this.schema=t,this.ids=[],this.anchors=[],this.recursiveAnchors=[],this.dynamicAnchors=[]}BaseURL(){return this.ids.reduce((e,t)=>new URL(t.$id,e),new URL(`http://unknown`))}Base(){return this.ids[this.ids.length-1]??this.schema}Push(e){ts(e)&&(xs(e)&&(this.ids.push(e),_p(this,vp,`m`,yp).call(this,e)),os(e)&&this.anchors.push(e),Ws(e)&&this.recursiveAnchors.push(e),ms(e)&&this.dynamicAnchors.push(e))}Pop(e){ts(e)&&(xs(e)&&(this.ids.pop(),_p(this,vp,`m`,bp).call(this,e)),os(e)&&this.anchors.pop(),Ws(e)&&this.recursiveAnchors.pop(),ms(e)&&this.dynamicAnchors.pop())}Ref(e){return _p(this,vp,`m`,xp).call(this,e)??_p(this,vp,`m`,Sp).call(this,e)}RecursiveRef(e){return Ws(this.Base())?hp(this.recursiveAnchors[0],e.$recursiveRef):hp(this.Base(),e.$recursiveRef)}DynamicRef(e){let t=this.schema;return gp(t,this.Base(),e,this.dynamicAnchors)}};vp=new WeakSet,yp=function e(t,n=!0){if(!ts(t))return;let r=t;if(!(!n&&xs(r))){!n&&ms(r)&&this.dynamicAnchors.push(r);for(let t of y(r))_p(this,vp,`m`,e).call(this,r[t],!1)}},bp=function e(t,n=!0){if(!ts(t))return;let r=t;if(!(!n&&xs(r))){!n&&ms(r)&&this.dynamicAnchors.pop();for(let t of y(r))_p(this,vp,`m`,e).call(this,r[t],!1)}},xp=function(e){return E(this.context,e.$ref)?this.context[e.$ref]:void 0},Sp=function(e){let t=this.schema;return e.$ref.startsWith(`#`)?hp(this.Base(),e.$ref):hp(t,e.$ref)};function wp(e){return`${e.Functions().join(`;
878
+ `)}; return (value) => { ${(e.UseUnevaluated()?[`const context = new CheckContext({}, {})`,`return ${e.Entry()}`]:[`return ${e.Entry()}`]).join(`; `)} }`}function Tp(e,t){return qo(`CheckContext`,`Guard`,`Format`,`Hashing`,e.External().identifier,t)(ic,it,Fu,Xe,e.External().variables)}function Ep(e){let t=new Cp(e.Context(),e.Schema()),n=new ic;return r=>z(t,n,e.Schema(),r)}function Dp(e,t){return Ko()?Tp(e,t):Ep(e)}var Op=class{constructor(e,t,n){this.isAccelerated=e,this.code=t,this.check=n}IsAccelerated(){return this.isAccelerated}Code(){return this.code}Check(e){return this.check(e)}},kp=class{constructor(e,t,n,r,i,a){this.context=e,this.schema=t,this.external=n,this.functions=r,this.entry=i,this.useUnevaluated=a}Context(){return this.context}Schema(){return this.schema}UseUnevaluated(){return this.useUnevaluated}External(){return this.external}Functions(){return this.functions}Entry(){return this.entry}Evaluate(){let e=wp(this),t=Dp(this,e);return new Op(Ko(),e,t)}};function Ap(...e){let[t,n]=Uo(e,{2:(e,t)=>[e,t],1:e=>[{},e]});lc(),ep();let r=new Cp(t,n),i=new rc(nc(t,n)),a=np(r,i,n,`value`),o=tp();return new kp(t,n,uc(),o,a,i.UseUnevaluated())}function jp(...e){let[t,n,r]=Uo(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]}),i=Zt(),a=Xo(),o=[];return[B(new Cp(t,n),new ac(e=>{if(!Mt(o.length,i.maxErrors))return o.push({...e,message:a(e)})}),`#`,``,n,r),o]}function Mp(...e){let[t,n,r]=Uo(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return z(new Cp(t,n),new ic,n,r)}function Np(...e){let[t,n,r]=Uo(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return Mp(t,n,r)}function Pp(...e){let[t,n,r]=Uo(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]}),[i,a]=jp(t,n,r);return a}var Fp=class extends Error{constructor(e,t,n){super(e),Object.defineProperty(this,"cause",{value:{source:e,errors:n,value:t},writable:!1,configurable:!1,enumerable:!1})}};function Ip(e,t,n){return S(n)?n.map(n=>qp(e,t.items,n)):n}function Lp(e,t,n){return qp({...e,...t.$defs},$e(t.$ref),n)}function Rp(e,t){let n=E(t,`unevaluatedProperties`)?{additionalProperties:t.unevaluatedProperties}:{},r=Jt(e,t),i=Ht(r);return Ze(i)?Nt(i,n):i}function zp(e,t,n){return qp(e,Rp(e,t),n)}function Bp(e){return E(e,`additionalProperties`)?e.additionalProperties:void 0}function Vp(e,t,n){if(!b(n)||S(n))return n;let r=Bp(t);for(let i of y(n)){if(E(t.properties,i)){n[i]=qp(e,t.properties[i],n[i]);continue}if($t(r)&&w(r,!0)||Et(r)&&Np(e,r,n[i])){n[i]=qp(e,r,n[i]);continue}delete n[i]}return n}function Hp(e,t,n){if(!b(n))return n;let r=Bp(t),[i,a]=[new RegExp(wt(t)),Dt(t)];for(let t of y(n)){if(i.test(t)){n[t]=qp(e,a,n[t]);continue}if($t(r)&&w(r,!0)||Et(r)&&Np(e,r,n[t])){n[t]=qp(e,r,n[t]);continue}delete n[t]}return n}function Up(e,t,n){return E(e,t.$ref)?qp(e,e[t.$ref],n):n}function Wp(e,t,n){if(!S(n))return n;let r=Math.min(n.length,t.items.length);for(let i=0;i<r;i++)n[i]=qp(e,t.items[i],n[i]);return At(n.length,r)?n.slice(0,r):n}function Gp(e){return Ut(e)}function Kp(e,t,n){for(let r of t.anyOf){let t=qp(e,r,Gp(n));if(Np(e,r,t))return t}return n}function qp(e,t,n){return ct(t)?Ip(e,t,n):We(t)?Lp(e,t,n):lt(t)?zp(e,t,n):Ze(t)?Vp(e,t,n):Ct(t)?Hp(e,t,n):qt(t)?Up(e,t,n):Kt(t)?Wp(e,t,n):kt(t)?Kp(e,t,n):n}function Jp(e,t){for(let n of Ho.Keys(e))Ho.HasPropertyKey(t,n)||(t[n]=e[n]);return t}function Yp(e){let t={};for(let n of Ho.Keys(e))t[n]=Qp(e[n]);return t}function Xp(e){return Zp(Xt(e))}function Zp(e){return e.map(e=>Qp(e))}function Qp(e){return Jp(e,ct(e)?Ve(Qp(e.items),_t(e)):lt(e)?tt(Zp(e.allOf)):kt(e)?vt(Xp(e.anyOf)):Ze(e)?ft(Yp(e.properties)):Ct(e)?Rt(Qt(e),Qp(Dt(e))):Kt(e)?Bt(Zp(e.items)):e)}function $p(e){return Qp(e)}function em(...e){let[t,n,r]=Uo(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return qp(t,Zt().unionPrioritySort?$p(n):n,r)}function tm(e){return b(e)&&E(e,`value`)}function V(e){return{value:e}}function nm(e){return S(e)?V(e):V([e])}function rm(e){return w(e,!0)?V(BigInt(1)):V(BigInt(0))}const im=/^-?(0|[1-9]\d*)n$/,am=/^-?(0|[1-9]\d*)\.\d+$/,om=/^-?(0|[1-9]\d*)$/;function sm(e){return im.test(e)}function cm(e){return am.test(e)}function lm(e){return om.test(e)}function um(e){let t=e.toLowerCase();return sm(e)?V(BigInt(e.slice(0,e.length-1))):cm(e)?V(BigInt(e.split(`.`)[0])):lm(e)?V(BigInt(e)):w(t,`false`)?V(BigInt(0)):w(t,`true`)?V(BigInt(1)):void 0}function dm(e){return zt(e)?V(e):$t(e)?rm(e):D(e)?V(BigInt(Math.trunc(e))):Ke(e)?V(BigInt(0)):v(e)?um(e):C(e)?V(BigInt(0)):void 0}function fm(e){return w(e,BigInt(0))?V(!1):w(e,BigInt(1))?V(!0):void 0}function pm(e){return w(e,0)?V(!1):w(e,1)?V(!0):void 0}function mm(e){return w(e.toLowerCase(),`false`)?V(!1):w(e.toLowerCase(),`true`)?V(!0):w(e,`0`)?V(!1):w(e,`1`)?V(!0):void 0}function hm(e){return zt(e)?fm(e):$t(e)?V(e):D(e)?pm(e):Ke(e)?V(!1):v(e)?mm(e):C(e)?V(!1):void 0}function gm(e){return w(e,BigInt(0))?V(null):void 0}function _m(e){return w(e,!1)?V(null):void 0}function vm(e){return w(e,0)?V(null):void 0}function ym(e){let t=e.toLowerCase();return w(t,`undefined`)||w(t,`null`)||w(e,``)||w(e,`0`)?V(null):void 0}function bm(e){return zt(e)?gm(e):$t(e)?_m(e):D(e)?vm(e):Ke(e)?V(null):v(e)?ym(e):C(e)?V(null):void 0}const xm=BigInt(2**53-1),Sm=BigInt(-(2**53-1));function Cm(e){return e<=xm&&e>=Sm?V(Number(e)):void 0}function wm(e){return V(+!!e)}function Tm(e){let t=+e;if(D(t))return V(t);let n=e.toLowerCase();if(w(n,`false`))return V(0);if(w(n,`true`))return V(1);let r=dm(e);if(tm(r))return r.value<=xm&&r.value>=Sm?V(Number(r.value)):void 0}function Em(e){return zt(e)?Cm(e):$t(e)?wm(e):D(e)?V(e):Ke(e)?V(0):v(e)?Tm(e):C(e)?V(0):void 0}function Dm(e){return zt(e)||$t(e)||D(e)?V(e.toString()):Ke(e)?V(`null`):v(e)?V(e):C(e)?V(``):void 0}function Om(e){return w(e,BigInt(0))?V(void 0):void 0}function km(e){return w(e,!1)?V(void 0):void 0}function Am(e){return w(e,0)?V(void 0):void 0}function jm(e){let t=e.toLowerCase();return w(t,`undefined`)||w(t,`null`)||w(e,``)||w(e,`0`)?V(void 0):void 0}function Mm(e){return zt(e)?Om(e):$t(e)?km(e):D(e)?Am(e):Ke(e)?V(void 0):v(e)?jm(e):C(e)?V(e):void 0}function Nm(e,t,n){return nm(n).value.map(n=>oh(e,t.items,n))}function Pm(e,t,n){let r=dm(n);return tm(r)?r.value:n}function Fm(e,t,n){let r=hm(n);return tm(r)?r.value:n}function Im(e,t,n){return oh({...e,...t.$defs},$e(t.$ref),n)}function Lm(e,t,n){return oh(e,Ht(t),n)}function Rm(e,t,n){let r=Em(n);return tm(r)?Math.trunc(r.value):n}function zm(e,t,n){let r=Jt(e,t);return oh(e,Ht(r),n)}function Bm(e,t,n){let r=dm(n);return tm(r)&&w(t.const,r.value)?r.value:n}function Vm(e,t,n){let r=hm(n);return tm(r)&&w(t.const,r.value)?r.value:n}function Hm(e,t,n){let r=Em(n);return tm(r)&&w(t.const,r.value)?r.value:n}function Um(e,t,n){let r=Dm(n);return tm(r)&&w(t.const,r.value)?r.value:n}function Wm(e,t,n){return w(t.const,n)?n:dt(t)?Bm(e,t,n):Je(t)?Vm(e,t,n):qe(t)?Hm(e,t,n):at(t)?Um(e,t,n):Qe()}function Gm(e,t,n){let r=bm(n);return tm(r)?r.value:n}function Km(e,t,n){let r=Em(n);return tm(r)?r.value:n}function qm(e,t,n,r){let i=y(r);for(let[a,o]of t)for(let t of i)a.test(t)||(r[t]=oh(e,n,r[t]));return r}function Jm(e,t,n){return mt(e)&&C(n[t])}function Ym(e,t,n){let r=Pt(t.properties),i=y(n);for(let[t,a]of r)for(let r of i)!t.test(r)||Jm(a,r,n)||(n[r]=oh(e,a,n[r]));return E(t,`additionalProperties`)&&b(t.additionalProperties)?qm(e,r,t.additionalProperties,n):n}function Xm(e,t,n){return Ye(n)?Ym(e,t,n):n}function Zm(e,t,n){let r=Pt(t.patternProperties),i=y(n);for(let[t,a]of r)for(let r of i)t.test(r)&&(n[r]=oh(e,a,n[r]));return E(t,`additionalProperties`)&&b(t.additionalProperties)?qm(e,r,t.additionalProperties,n):n}function Qm(e,t,n){return Ye(n)?Zm(e,t,n):n}function $m(e,t,n){return E(e,t.$ref)?oh(e,e[t.$ref],n):n}function eh(e,t,n){let r=Dm(n);return tm(r)?r.value:n}function th(e,t,n){return oh(e,Ht(t),n)}function nh(e,t,n){if(!S(n))return n;for(let r=0;r<Math.min(t.items.length,n.length);r++)n[r]=oh(e,t.items[r],n[r]);return n}function rh(e,t,n){let r=Mm(n);return tm(r)?r.value:n}function ih(e,t,n){if(t.anyOf.some(t=>Np(e,t,n)))return n;let r=t.anyOf.map(t=>oh(e,t,Gp(n))).find(n=>Np(e,t,n));return C(r)?n:r}function ah(e,t,n){return tm(Mm(n))?void 0:n}function oh(e,t,n){return ct(t)?Nm(e,t,n):nt(t)?Pm(e,t,n):Ft(t)?Fm(e,t,n):We(t)?Im(e,t,n):cn(t)?Lm(e,t,n):He(t)?Rm(e,t,n):lt(t)?zm(e,t,n):nn(t)?Wm(e,t,n):Ge(t)?Gm(e,t,n):rn(t)?Km(e,t,n):Ze(t)?Xm(e,t,n):Ct(t)?Qm(e,t,n):qt(t)?$m(e,t,n):en(t)?eh(e,t,n):bt(t)?th(e,t,n):Kt(t)?nh(e,t,n):Yt(t)?rh(e,t,n):kt(t)?ih(e,t,n):Wt(t)?ah(e,t,n):n}function sh(...e){let[t,n,r]=Uo(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return oh(t,n,r)}function ch(e,t,n){if(!S(n))return n;for(let r=0;r<n.length;r++)n[r]=_h(e,t.items,n[r]);return n}function lh(e,t,n){return _h({...e,...t.$defs},$e(t.$ref),n)}function uh(e,t){return C(t)?Vt(e.default)?e.default():Gp(e.default):t}function dh(e,t,n){let r=Jt(e,t);return _h(e,Ht(r),n)}function fh(e,t,n){if(!b(n))return n;let r=y(t.properties);for(let i of r){let r=_h(e,t.properties[i],n[i]);C(r)&&(mt(t.properties[i])||!E(t.properties[i],`default`))||(n[i]=r)}if(!is(t)||$t(t.additionalProperties))return n;for(let i of y(n))r.includes(i)||(n[i]=_h(e,t.additionalProperties,n[i]));return n}function ph(e,t,n){if(!b(n))return n;let[r,i]=[new RegExp(wt(t)),Dt(t)];for(let t of y(n))r.test(t)&&us(i)&&(n[t]=_h(e,i,n[t]));if(!is(t))return n;for(let i of y(n))r.test(i)||(n[i]=_h(e,t.additionalProperties,n[i]));return n}function mh(e,t,n){return E(e,t.$ref)?_h(e,e[t.$ref],n):n}function hh(e,t,n){if(!S(n))return n;let[r,i]=[t.items,Math.max(t.items.length,n.length)];for(let t=0;t<i;t++)t<r.length&&(n[t]=_h(e,r[t],n[t]));return n}function gh(e,t,n){for(let r of t.anyOf){let t=_h(e,r,Gp(n));if(Np(e,r,t))return t}return n}function _h(e,t,n){let r=us(t)?uh(t,n):n;return ct(t)?ch(e,t,r):We(t)?lh(e,t,r):lt(t)?dh(e,t,r):Ze(t)?fh(e,t,r):Ct(t)?ph(e,t,r):qt(t)?mh(e,t,r):Kt(t)?hh(e,t,r):kt(t)?gh(e,t,r):r}function vh(...e){let[t,n,r]=Uo(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return _h(t,n,r)}function yh(e){return(...t)=>{let[n,r,i]=Uo(t,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return e.reduce((e,t)=>t(n,r,e),i)}}function bh(e,t,n){return t[`~codec`].decode(n)}function xh(e,t,n){return t[`~codec`].encode(n)}function H(e,t,n,r){return rt(n)?w(e,`Decode`)?bh(t,n,r):xh(t,n,r):r}function Sh(e,t,n,r){if(!S(r))return r;for(let i=0;i<r.length;i++)r[i]=U(e,t,n.items,r[i]);return H(e,t,n,r)}function Ch(e,t,n,r){let i=H(e,t,n,r);if(!S(i))return i;for(let r=0;r<i.length;r++)i[r]=U(e,t,n.items,i[r]);return i}function wh(e,t,n,r){return w(e,`Decode`)?Sh(e,t,n,r):Ch(e,t,n,r)}function Th(e,t,n,r){return r=U(e,{...t,...n.$defs},$e(n.$ref),r),H(e,t,n,r)}function Eh(e){return e.reduce((e,t)=>({...e,...t}),{})}function Dh(e,t){for(let n of t)if(!Ot(e,n))return n;return e}function Oh(e,t,n,r){if(w(n.allOf.length,0))return H(e,t,n,r);let i=n.allOf.map(n=>U(e,t,n,em(n,Gp(r))));return H(e,t,n,i.every(e=>b(e))?Eh(i):Dh(r,i))}function kh(e,t,n,r){if(w(n.allOf.length,0))return H(e,t,n,r);let i=H(e,t,n,r),a=n.allOf.map(n=>U(e,t,n,em(n,Gp(i))));return a.every(e=>b(e))?Eh(a):Dh(i,a)}function Ah(e,t,n,r){return w(e,`Decode`)?Oh(e,t,n,r):kh(e,t,n,r)}function jh(e,t,n,r){if(!Ye(r))return r;for(let i of y(n.properties))!E(r,i)||Jm(n.properties[i],i,r)||(r[i]=U(e,t,n.properties[i],r[i]));return H(e,t,n,r)}function Mh(e,t,n,r){let i=H(e,t,n,r);if(!Ye(i))return i;for(let r of y(n.properties))!E(i,r)||Jm(n.properties[r],r,i)||(i[r]=U(e,t,n.properties[r],i[r]));return i}function Nh(e,t,n,r){return w(e,`Decode`)?jh(e,t,n,r):Mh(e,t,n,r)}function Ph(e,t,n,r){if(!Ye(r))return r;let i=new RegExp(wt(n));for(let a of y(r))i.test(a)&&(r[a]=U(e,t,Dt(n),r[a]));return H(e,t,n,r)}function Fh(e,t,n,r){let i=H(e,t,n,r);if(!Ye(i))return i;let a=new RegExp(wt(n));for(let r of y(i))a.test(r)&&(i[r]=U(e,t,Dt(n),i[r]));return i}function Ih(e,t,n,r){return w(e,`Decode`)?Ph(e,t,n,r):Fh(e,t,n,r)}function Lh(e,t,n,r){return E(t,n.$ref)?U(e,t,t[n.$ref],r):r}function Rh(e,t,n,r){return w(e,`Decode`)?H(e,t,n,Lh(e,t,n,r)):Lh(e,t,n,H(e,t,n,r))}function zh(e,t,n,r){if(!S(r))return r;for(let i=0;i<Math.min(n.items.length,r.length);i++)r[i]=U(e,t,n.items[i],r[i]);return H(e,t,n,r)}function Bh(e,t,n,r){let i=H(e,t,n,r);if(!S(i))return r;for(let r=0;r<Math.min(n.items.length,i.length);r++)i[r]=U(e,t,n.items[r],i[r]);return i}function Vh(e,t,n,r){return w(e,`Decode`)?zh(e,t,n,r):Bh(e,t,n,r)}function Hh(e,t,n,r){for(let i of n.anyOf)if(Np(t,i,r))return H(e,t,n,U(e,t,i,r));return r}function Uh(e,t,n,r){let i=H(e,t,n,r);for(let r of n.anyOf){let n=U(e,t,r,Gp(i));if(Np(t,r,n))return n}return i}function Wh(e,t,n,r){return w(e,`Decode`)?Hh(e,t,n,r):Uh(e,t,n,r)}function U(e,t,n,r){return ct(n)?wh(e,t,n,r):We(n)?Th(e,t,n,r):lt(n)?Ah(e,t,n,r):Ze(n)?Nh(e,t,n,r):Ct(n)?Ih(e,t,n,r):qt(n)?Rh(e,t,n,r):Kt(n)?Vh(e,t,n,r):kt(n)?Wh(e,t,n,r):H(e,t,n,r)}var Gh=class extends Fp{constructor(e,t){super(`Decode`,e,t)}};function Kh(e,t,n){if(!Np(e,t,n))throw new Gh(n,Pp(e,t,n));return n}function qh(e,t,n){return U(`Decode`,e,Zt().unionPrioritySort?$p(t):t,n)}const Jh=yh([(e,t,n)=>Gp(n),(e,t,n)=>vh(e,t,n),(e,t,n)=>sh(e,t,n),(e,t,n)=>em(e,t,n),(e,t,n)=>Kh(e,t,n),(e,t,n)=>qh(e,t,n)]);function Yh(...e){let[t,n,r]=Uo(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return Jh(t,n,r)}var Xh=class extends Fp{constructor(e,t){super(`Encode`,e,t)}};function Zh(e,t,n){if(!Np(e,t,n))throw new Xh(n,Pp(e,t,n));return n}function Qh(e,t,n){return U(`Encode`,e,Zt().unionPrioritySort?$p(t):t,n)}const $h=yh([(e,t,n)=>Gp(n),(e,t,n)=>Qh(e,t,n),(e,t,n)=>vh(e,t,n),(e,t,n)=>sh(e,t,n),(e,t,n)=>em(e,t,n),(e,t,n)=>Zh(e,t,n)]);function eg(...e){let[t,n,r]=Uo(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return $h(t,n,r)}function tg(e,t){return rt(t)||lg(e,t.items)}function ng(e,t){return rt(t)||og({...e,...t.$defs},$e(t.$ref))}function rg(e,t){return rt(t)||t.allOf.some(t=>lg(e,t))}function ig(e,t){return rt(t)||y(t.properties).some(n=>lg(e,t.properties[n]))}function ag(e,t){return rt(t)||lg(e,Dt(t))}function og(e,t){return!ug.has(t.$ref)&&(ug.add(t.$ref),rt(t)||E(e,t.$ref)&&lg(e,e[t.$ref]))}function sg(e,t){return rt(t)||t.items.some(t=>lg(e,t))}function cg(e,t){return rt(t)||t.anyOf.some(t=>lg(e,t))}function lg(e,t){return ct(t)?tg(e,t):We(t)?ng(e,t):lt(t)?rg(e,t):Ze(t)?ig(e,t):Ct(t)?ag(e,t):qt(t)?og(e,t):Kt(t)?sg(e,t):kt(t)?cg(e,t):rt(t)}const ug=new Set;function dg(...e){let[t,n]=Uo(e,{2:(e,t)=>[e,t],1:e=>[{},e]});return ug.clear(),lg(t,n)}var fg=class extends Error{constructor(e,t){super(t),this.type=e}};function pg(e,t){return Vt(t.default)?t.default(t):b(t.default)?Gp(t.default):t.default}function mg(e,t){if(Xs(t)&&!us(t))throw new fg(t,`Arrays with uniqueItems constraints must specify a default annotation`);let n=Ms(t)?t.minItems:0;return Array.from({length:n},()=>Fg(e,t.items))}function hg(e,t){return ys(t)?BigInt(t.exclusiveMinimum)+BigInt(1):As(t)?BigInt(t.minimum):BigInt(0)}function gg(e,t){return!1}function _g(e,t){let n=Fg(e,t.instanceType);return class{constructor(){Object.assign(this,n)}}}function vg(e,t){return Fg({...e,...t.$defs},$e(t.$ref))}function yg(e,t){return Fg(e,Ht(t))}function bg(e,t){let n=Fg(e,t.returnType);return()=>n}function xg(e,t){return ys(t)&&D(t.exclusiveMinimum)?t.exclusiveMinimum+1:As(t)?t.minimum:0}function Sg(e,t){let n=Jt(e,t);return Fg(e,Ht(n))}function Cg(e,t){return t.const}function wg(e,t){throw new fg(t,`Cannot create TNever types`)}function Tg(e,t){return null}function Eg(e,t){return ys(t)&&D(t.exclusiveMinimum)?t.exclusiveMinimum+1:As(t)?t.minimum:0}function Dg(e,t){return(C(t.required)?[]:t.required).reduce((n,r)=>({...n,[r]:Fg(e,t.properties[r])}),{})}function Og(e,t){if(Ps(t)&&!us(t))throw new fg(t,`Record with the minProperties constraint must have a default annotation`);return{}}function kg(e,t){return E(e,t.$ref)?Fg(e,e[t.$ref]):(()=>{throw new fg(t,`Unable to deref Ref`)})()}function Ag(e,t){if((Rs(t)||bs(t))&&!us(t))throw Error(`Strings with format or pattern constraints must specify default`);let n=Ns(t)?t.minLength:0;return``.padEnd(n)}function jg(e,t){return Symbol()}function Mg(e,t){let n=jt(t.pattern);if(en(n))throw new fg(t,`Unable to create TemplateLiteral due to infinite type expansion`);return Fg(e,n)}function Ng(e,t){return Array.from({length:t.minItems},(n,r)=>Fg(e,t.items[r]))}function Pg(e,t){if(w(t.anyOf.length,0))throw Error(`Unable to create Union with no variants`);return Fg(e,t.anyOf[0])}function Fg(e,t){return us(t)?pg(e,t):ct(t)?mg(e,t):nt(t)?hg(e,t):Ft(t)?gg(e,t):ht(t)?_g(e,t):We(t)?vg(e,t):cn(t)?yg(e,t):gt(t)?bg(e,t):He(t)?xg(e,t):lt(t)?Sg(e,t):nn(t)?Cg(e,t):et(t)?wg(e,t):Ge(t)?Tg(e,t):rn(t)?Eg(e,t):Ze(t)?Dg(e,t):Ct(t)?Og(e,t):qt(t)?kg(e,t):en(t)?Ag(e,t):xt(t)?jg(e,t):bt(t)?Mg(e,t):Kt(t)?Ng(e,t):Yt(t)?void 0:kt(t)?Pg(e,t):(Wt(t),void 0)}function Ig(...e){let[t,n]=Uo(e,{2:(e,t)=>[e,t],1:e=>[{},e]});return Fg(t,n)}var Lg=class extends Fp{constructor(e,t){super(`Parse`,e,t)}};function Rg(e,t,n){if(!Np(e,t,n))throw new Lg(n,Pp(e,t,n));return n}const zg=yh([(e,t,n)=>Gp(n),(e,t,n)=>vh(e,t,n),(e,t,n)=>sh(e,t,n),(e,t,n)=>em(e,t,n),(e,t,n)=>Rg(e,t,n)]),Bg=ft({type:Lt(`insert`),path:on(),value:pt()}),Vg=Object({type:Lt(`update`),path:on(),value:pt()}),Hg=ft({type:Lt(`delete`),path:on()});vt([Bg,Vg,Hg]);var Ug=class{constructor(e,t){this.hasCodec=dg(e,t),this.buildResult=Ap(e,t),this.evaluateResult=this.buildResult.Evaluate()}IsAccelerated(){return this.evaluateResult.IsAccelerated()}Context(){return this.buildResult.Context()}Type(){return this.buildResult.Schema()}Code(){return this.evaluateResult.Code()}Check(e){return this.evaluateResult.Check(e)}Parse(e){if(this.Check(e))return e;if(Zt().correctiveParse)return zg(this.Context(),this.Type(),e);throw new Lg(e,this.Errors(e))}Errors(e){return this.IsAccelerated()&&this.Check(e)?[]:Pp(this.Context(),this.Type(),e)}Clean(e){return em(this.Context(),this.Type(),e)}Convert(e){return sh(this.Context(),this.Type(),e)}Create(){return Ig(this.Context(),this.Type())}Default(e){return vh(this.Context(),this.Type(),e)}Decode(e){return this.hasCodec?Yh(this.Context(),this.Type(),e):this.Parse(e)}Encode(e){return this.hasCodec?eg(this.Context(),this.Type(),e):this.Parse(e)}};function Wg(...e){let[t,n]=Uo(e,{2:(e,t)=>[e,t],1:e=>[{},e]});return new Ug(t,n)}const Gg=new WeakMap,Kg=Symbol.for(`TypeBox.Kind`);function qg(e){return typeof e.type==`string`?[e.type]:Array.isArray(e.type)?e.type.filter(e=>typeof e==`string`):[]}function Jg(e,t){switch(t){case`number`:return typeof e==`number`;case`integer`:return typeof e==`number`&&Number.isInteger(e);case`boolean`:return typeof e==`boolean`;case`string`:return typeof e==`string`;case`null`:return e===null;case`array`:return Array.isArray(e);case`object`:return typeof e==`object`&&!!e&&!Array.isArray(e);default:return!1}}function Yg(e){try{return n_(e)}catch{return}}function Xg(e,t){switch(t){case`number`:if(e===null)return 0;if(typeof e==`string`&&e.trim()!==``){let t=Number(e);if(Number.isFinite(t))return t}return typeof e==`boolean`?+!!e:e;case`integer`:if(e===null)return 0;if(typeof e==`string`&&e.trim()!==``){let t=Number(e);if(Number.isInteger(t))return t}return typeof e==`boolean`?+!!e:e;case`boolean`:if(e===null)return!1;if(typeof e==`string`){if(e===`true`)return!0;if(e===`false`)return!1}if(typeof e==`number`){if(e===1)return!0;if(e===0)return!1}return e;case`string`:return e===null?``:typeof e==`number`||typeof e==`boolean`?String(e):e;case`null`:return e===``||e===0||e===!1?null:e;default:return e}}function Zg(e,t){let n=t.properties,r=new Set(n?Object.keys(n):[]);if(n)for(let[t,r]of Object.entries(n))t in e&&(e[t]=e_(e[t],r));if(t.additionalProperties&&typeof t.additionalProperties==`object`)for(let[n,i]of Object.entries(e))r.has(n)||(e[n]=e_(i,t.additionalProperties))}function Qg(e,t){if(Array.isArray(t.items)){for(let n=0;n<e.length;n++){let r=t.items[n];r&&(e[n]=e_(e[n],r))}return}if(t.items&&typeof t.items==`object`)for(let n=0;n<e.length;n++)e[n]=e_(e[n],t.items)}function $g(e,t){for(let n of t)if(Yg(n)?.Check(e))return e;for(let n of t){let t=e_(structuredClone(e),n);if(Yg(n)?.Check(t))return t}return e}function e_(e,t){let n=e;if(Array.isArray(t.allOf))for(let e of t.allOf)n=e_(n,e);Array.isArray(t.anyOf)&&(n=$g(n,t.anyOf)),Array.isArray(t.oneOf)&&(n=$g(n,t.oneOf));let r=qg(t),i=r.length>1&&r.some(e=>Jg(n,e));if(r.length>0&&!i)for(let e of r){let t=Xg(n,e);if(t!==n){n=t;break}}return r.includes(`object`)&&typeof n==`object`&&n&&!Array.isArray(n)&&Zg(n,t),r.includes(`array`)&&Array.isArray(n)&&Qg(n,t),n}function t_(e,t){if(Array.isArray(e)){if(Array.isArray(t.items))for(let n=0;n<e.length;n++){let r=t.items[n];r&&t_(e[n],r)}else if(t.items)for(let n of e)t_(n,t.items);return}if(typeof e!=`object`||!e||!t.properties)return;let n=e,r=new Set(t.required??[]);for(let[e,i]of Object.entries(t.properties))e in n&&(n[e]===null&&!r.has(e)&&typeof i.$ref!=`string`&&Yg(i)?.Check(null)===!1?delete n[e]:t_(n[e],i))}function n_(e){let t=e,n=Gg.get(t);if(n)return n;let r=Wg(e);return Gg.set(t,r),r}function r_(e){if(e.keyword===`required`){let t=e.params.requiredProperties?.[0];if(t){let n=e.instancePath.replace(/^\//,``).replace(/\//g,`.`);return n?`${n}.${t}`:t}}return e.instancePath.replace(/^\//,``).replace(/\//g,`.`)||`root`}function i_(e,t){let n=structuredClone(t.arguments);t_(n,e.parameters),sh(e.parameters,n);let r=n_(e.parameters);if(!Object.getOwnPropertySymbols(e.parameters).includes(Kg)){let t=e_(n,e.parameters);if(t!==n){if(typeof n==`object`&&n&&typeof t==`object`&&t){for(let e of Object.keys(n))delete n[e];Object.assign(n,t)}else return r.Check(t)?t:n}}if(r.Check(n))return n;let i=r.Errors(n).map(e=>` - ${r_(e)}: ${e.message}`).join(`
879
+ `)||`Unknown validation error`,a=`Validation failed for tool "${t.name}":\n${i}\n\nReceived arguments:\n${JSON.stringify(t.arguments,null,2)}`;throw Error(a)}function a_(){throw Error(`No default stream function configured. Pass streamFn explicitly or call setDefaultStreamFn().`)}async function o_(e,t,n,r,i,a){let o=[...e],s={...t,messages:[...t.messages,...e]};await r({type:`agent_start`}),await r({type:`turn_start`});for(let t of e)await r({type:`message_start`,message:t}),await r({type:`message_end`,message:t});return await c_(s,o,n,i,r,a??a_()),o}async function s_(e,t,n,r,i){if(e.messages.length===0)throw Error(`Cannot continue: no messages in context`);if(e.messages[e.messages.length-1].role===`assistant`)throw Error(`Cannot continue from message role: assistant`);let a=[],o={...e};return await n({type:`agent_start`}),await n({type:`turn_start`}),await c_(o,a,t,r,n,i??a_()),a}async function c_(e,t,n,r,i,a){let o=e,s=n,c,l=await s.getSteeringMessages?.()||[];for(;;){let e=!0;for(;e||l.length>0;){if(c){let e=await s.prepareNextTurn?.(c);e&&(o=e.context??o,s={...s,model:e.model??s.model,reasoning:e.thinkingLevel===void 0?s.reasoning:e.thinkingLevel===`off`?void 0:e.thinkingLevel}),l.length===0&&(l=await s.getSteeringMessages?.()||[]),await i({type:`turn_start`})}if(l.length>0){for(let e of l)await i({type:`message_start`,message:e}),await i({type:`message_end`,message:e}),o.messages.push(e),t.push(e);l=[]}let n=await l_(o,s,r,i,a);if(t.push(n),n.stopReason===`error`||n.stopReason===`aborted`){await i({type:`turn_end`,message:n,toolResults:[]}),await i({type:`agent_end`,messages:t});return}let u=n.content.filter(e=>e.type===`toolCall`),d=[];if(e=!1,u.length>0){let a=n.stopReason===`length`?await u_(u,i):await d_(o,n,s,r,i);d.push(...a.messages),e=!a.terminate;for(let e of d)o.messages.push(e),t.push(e)}if(await i({type:`turn_end`,message:n,toolResults:d}),c={message:n,toolResults:d,context:o,newMessages:t},await s.shouldStopAfterTurn?.(c)){await i({type:`agent_end`,messages:t});return}l=await s.getSteeringMessages?.()||[]}let n=await s.getFollowUpMessages?.()||[];if(n.length>0){l=n;continue}break}await i({type:`agent_end`,messages:t})}async function l_(e,t,n,r,i){let a=e.messages;t.transformContext&&(a=await t.transformContext(a,n));let o=await t.convertToLlm(a),s={systemPrompt:e.systemPrompt,messages:o,tools:e.tools},c=(t.getApiKey?await t.getApiKey(t.model.provider):void 0)||t.apiKey,l=await i(t.model,s,{...t,apiKey:c,signal:n}),u=null,d=!1;for await(let t of l)switch(t.type){case`start`:u=t.partial,e.messages.push(u),d=!0,await r({type:`message_start`,message:{...u}});break;case`text_start`:case`text_delta`:case`text_end`:case`thinking_start`:case`thinking_delta`:case`thinking_end`:case`toolcall_start`:case`toolcall_delta`:case`toolcall_end`:u&&(u=t.partial,e.messages[e.messages.length-1]=u,await r({type:`message_update`,assistantMessageEvent:t,message:{...u}}));break;case`done`:case`error`:{let t=await l.result();return d?e.messages[e.messages.length-1]=t:e.messages.push(t),d||await r({type:`message_start`,message:{...t}}),await r({type:`message_end`,message:t}),t}}let f=await l.result();return d?e.messages[e.messages.length-1]=f:(e.messages.push(f),await r({type:`message_start`,message:{...f}})),await r({type:`message_end`,message:f}),f}async function u_(e,t){let n=[];for(let r of e){await t({type:`tool_execution_start`,toolCallId:r.id,toolName:r.name,args:r.arguments});let e={toolCall:r,result:y_(`Tool call "${r.name}" was not executed: the response hit the output token limit, so its arguments may be truncated. Re-issue the tool call with complete arguments.`),isError:!0};await b_(e,t);let i=x_(e);await S_(i,t),n.push(i)}return{messages:n,terminate:!1}}async function d_(e,t,n,r,i){let a=t.content.filter(e=>e.type===`toolCall`),o=a.some(t=>e.tools?.find(e=>e.name===t.name)?.executionMode===`sequential`);return n.toolExecution===`sequential`||o?f_(e,t,a,n,r,i):p_(e,t,a,n,r,i)}async function f_(e,t,n,r,i,a){let o=[],s=[];for(let c of n){await a({type:`tool_execution_start`,toolCallId:c.id,toolName:c.name,args:c.arguments});let n=await g_(e,t,c,r,i),l;l=n.kind===`immediate`?{toolCall:c,result:n.result,isError:n.isError}:await v_(e,t,n,await __(n,i,a),r,i),await b_(l,a);let u=x_(l);if(await S_(u,a),o.push(l),s.push(u),i?.aborted)break}return{messages:s,terminate:m_(o)}}async function p_(e,t,n,r,i,a){let o=[];for(let s of n){await a({type:`tool_execution_start`,toolCallId:s.id,toolName:s.name,args:s.arguments});let n=await g_(e,t,s,r,i);if(n.kind===`immediate`){let e={toolCall:s,result:n.result,isError:n.isError};if(await b_(e,a),o.push(e),i?.aborted)break;continue}if(o.push(async()=>{let o=await __(n,i,a),s=await v_(e,t,n,o,r,i);return await b_(s,a),s}),i?.aborted)break}let s=await Promise.all(o.map(e=>typeof e==`function`?e():Promise.resolve(e))),c=[];for(let e of s){let t=x_(e);await S_(t,a),c.push(t)}return{messages:c,terminate:m_(s)}}function m_(e){return e.length>0&&e.every(e=>e.result.terminate===!0)}function h_(e,t){if(!e.prepareArguments)return t;let n=e.prepareArguments(t.arguments);return n===t.arguments?t:{...t,arguments:n}}async function g_(e,t,n,r,i){let a=e.tools?.find(e=>e.name===n.name);if(!a)return{kind:`immediate`,result:y_(`Tool ${n.name} not found`),isError:!0};try{let o=i_(a,h_(a,n));if(r.beforeToolCall){let a=await r.beforeToolCall({assistantMessage:t,toolCall:n,args:o,context:e},i);if(i?.aborted)return{kind:`immediate`,result:y_(`Operation aborted`),isError:!0};if(a?.block){let e=y_(a.reason||`Tool execution was blocked`);return a.terminate===!0&&(e.terminate=!0),{kind:`immediate`,result:e,isError:!0}}}return i?.aborted?{kind:`immediate`,result:y_(`Operation aborted`),isError:!0}:{kind:`prepared`,toolCall:n,tool:a,args:o}}catch(e){return{kind:`immediate`,result:y_(e instanceof Error?e.message:String(e)),isError:!0}}}async function __(e,t,n){let r=[],i=!0;try{let a=await e.tool.execute(e.toolCall.id,e.args,t,t=>{i&&r.push(Promise.resolve(n({type:`tool_execution_update`,toolCallId:e.toolCall.id,toolName:e.toolCall.name,args:e.toolCall.arguments,partialResult:t})))});return i=!1,await Promise.all(r),{result:a,isError:!1}}catch(e){return i=!1,await Promise.all(r),{result:y_(e instanceof Error?e.message:String(e)),isError:!0}}finally{i=!1}}async function v_(e,t,n,r,i,a){let o=r.result,s=r.isError;if(i.afterToolCall)try{let r=await i.afterToolCall({assistantMessage:t,toolCall:n.toolCall,args:n.args,result:o,isError:s,context:e},a);r&&(o={...o,content:r.content??o.content,details:r.details??o.details,usage:r.usage??o.usage,terminate:r.terminate??o.terminate},s=r.isError??s)}catch(e){o=y_(e instanceof Error?e.message:String(e)),s=!0}return{toolCall:n.toolCall,result:o,isError:s}}function y_(e){return{content:[{type:`text`,text:e}],details:{}}}async function b_(e,t){await t({type:`tool_execution_end`,toolCallId:e.toolCall.id,toolName:e.toolCall.name,result:e.result,isError:e.isError})}function x_(e){return{role:`toolResult`,toolCallId:e.toolCall.id,toolName:e.toolCall.name,content:e.result.content??[],details:e.result.details,usage:e.result.usage,...e.result.addedToolNames?.length?{addedToolNames:e.result.addedToolNames}:{},isError:e.isError,timestamp:Date.now()}}async function S_(e,t){await t({type:`message_start`,message:e}),await t({type:`message_end`,message:e})}function C_(e){return e.filter(e=>e.role===`user`||e.role===`assistant`||e.role===`toolResult`)}const w_={input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},T_={id:`unknown`,name:`unknown`,api:`unknown`,provider:`unknown`,baseUrl:``,reasoning:!1,input:[],cost:{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:0,maxTokens:0};function E_(e){let t=e?.tools?.slice()??[],n=e?.messages?.slice()??[];return{systemPrompt:e?.systemPrompt??``,model:e?.model??T_,thinkingLevel:e?.thinkingLevel??`off`,get tools(){return t},set tools(e){t=e.slice()},get messages(){return n},set messages(e){n=e.slice()},isStreaming:!1,streamingMessage:void 0,pendingToolCalls:new Set,errorMessage:void 0}}var D_=class{messages=[];mode;constructor(e){this.mode=e}enqueue(e){this.messages.push(e)}hasItems(){return this.messages.length>0}drain(){if(this.mode===`all`){let e=this.messages.slice();return this.messages=[],e}let e=this.messages[0];return e?(this.messages=this.messages.slice(1),[e]):[]}clear(){this.messages=[]}},O_=class{_state;listeners=new Set;steeringQueue;followUpQueue;convertToLlm;transformContext;streamFunction;getApiKey;onPayload;onResponse;beforeToolCall;afterToolCall;shouldStopAfterTurn;prepareNextTurn;prepareNextTurnWithContext;activeRun;sessionId;thinkingBudgets;transport;maxRetryDelayMs;toolExecution;constructor(e){let t=e??{};this._state=E_(t.initialState),this.convertToLlm=t.convertToLlm??C_,this.transformContext=t.transformContext,this.streamFunction=t.streamFn??a_(),this.getApiKey=t.getApiKey,this.onPayload=t.onPayload,this.onResponse=t.onResponse,this.beforeToolCall=t.beforeToolCall,this.afterToolCall=t.afterToolCall,this.shouldStopAfterTurn=t.shouldStopAfterTurn,this.prepareNextTurn=t.prepareNextTurn,this.prepareNextTurnWithContext=t.prepareNextTurnWithContext,this.steeringQueue=new D_(t.steeringMode??`one-at-a-time`),this.followUpQueue=new D_(t.followUpMode??`one-at-a-time`),this.sessionId=t.sessionId,this.thinkingBudgets=t.thinkingBudgets,this.transport=t.transport??`auto`,this.maxRetryDelayMs=t.maxRetryDelayMs,this.toolExecution=t.toolExecution??`parallel`}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}get state(){return this._state}set steeringMode(e){this.steeringQueue.mode=e}get steeringMode(){return this.steeringQueue.mode}set followUpMode(e){this.followUpQueue.mode=e}get followUpMode(){return this.followUpQueue.mode}steer(e){this.steeringQueue.enqueue(e)}followUp(e){this.followUpQueue.enqueue(e)}clearSteeringQueue(){this.steeringQueue.clear()}clearFollowUpQueue(){this.followUpQueue.clear()}clearAllQueues(){this.clearSteeringQueue(),this.clearFollowUpQueue()}hasQueuedMessages(){return this.steeringQueue.hasItems()||this.followUpQueue.hasItems()}get signal(){return this.activeRun?.abortController.signal}abort(){this.activeRun?.abortController.abort()}waitForIdle(){return this.activeRun?.promise??Promise.resolve()}reset(){if(this.activeRun)throw Error(`Agent is already processing. Wait for completion before resetting.`);this._state.messages=[],this._state.isStreaming=!1,this._state.streamingMessage=void 0,this._state.pendingToolCalls=new Set,this._state.errorMessage=void 0,this.clearFollowUpQueue(),this.clearSteeringQueue()}async prompt(e,t){if(this.activeRun)throw Error(`Agent is already processing a prompt. Use steer() or followUp() to queue messages, or wait for completion.`);let n=this.normalizePromptInput(e,t);await this.runPromptMessages(n)}async continue(){if(this.activeRun)throw Error(`Agent is already processing. Wait for completion before continuing.`);let e=this._state.messages[this._state.messages.length-1];if(!e)throw Error(`No messages to continue from`);if(e.role===`assistant`){let e=this.steeringQueue.drain();if(e.length>0){await this.runPromptMessages(e,{skipInitialSteeringPoll:!0});return}let t=this.followUpQueue.drain();if(t.length>0){await this.runPromptMessages(t);return}throw Error(`Cannot continue from message role: assistant`)}await this.runContinuation()}normalizePromptInput(e,t){if(Array.isArray(e))return e;if(typeof e!=`string`)return[e];let n=[{type:`text`,text:e}];return t&&t.length>0&&n.push(...t),[{role:`user`,content:n,timestamp:Date.now()}]}async runPromptMessages(e,t={}){await this.runWithLifecycle(async n=>{await o_(e,this.createContextSnapshot(),this.createLoopConfig(t),e=>this.processEvents(e),n,this.streamFunction)})}async runContinuation(){await this.runWithLifecycle(async e=>{await s_(this.createContextSnapshot(),this.createLoopConfig(),e=>this.processEvents(e),e,this.streamFunction)})}createContextSnapshot(){return{systemPrompt:this._state.systemPrompt,messages:this._state.messages.slice(),tools:this._state.tools.slice()}}createLoopConfig(e={}){let t=e.skipInitialSteeringPoll===!0,n=this.shouldStopAfterTurn;return{model:this._state.model,reasoning:this._state.thinkingLevel===`off`?void 0:this._state.thinkingLevel,sessionId:this.sessionId,onPayload:this.onPayload,onResponse:this.onResponse,transport:this.transport,thinkingBudgets:this.thinkingBudgets,maxRetryDelayMs:this.maxRetryDelayMs,toolExecution:this.toolExecution,beforeToolCall:this.beforeToolCall,afterToolCall:this.afterToolCall,shouldStopAfterTurn:n?async e=>await n(e,this.signal):void 0,prepareNextTurn:this.prepareNextTurnWithContext||this.prepareNextTurn?async e=>this.prepareNextTurnWithContext?await this.prepareNextTurnWithContext(e,this.signal):await this.prepareNextTurn?.(this.signal):void 0,convertToLlm:this.convertToLlm,transformContext:this.transformContext,getApiKey:this.getApiKey,getSteeringMessages:async()=>t?(t=!1,[]):this.steeringQueue.drain(),getFollowUpMessages:async()=>this.followUpQueue.drain()}}async runWithLifecycle(e){if(this.activeRun)throw Error(`Agent is already processing.`);let t=new AbortController,n=()=>{},r=new Promise(e=>{n=e});this.activeRun={promise:r,resolve:n,abortController:t},this._state.isStreaming=!0,this._state.streamingMessage=void 0,this._state.errorMessage=void 0;try{await e(t.signal)}catch(e){await this.handleRunFailure(e,t.signal.aborted)}finally{this.finishRun()}}async handleRunFailure(e,t){let n={role:`assistant`,content:[{type:`text`,text:``}],api:this._state.model.api,provider:this._state.model.provider,model:this._state.model.id,usage:w_,stopReason:t?`aborted`:`error`,errorMessage:e instanceof Error?e.message:String(e),timestamp:Date.now()};await this.processEvents({type:`message_start`,message:n}),await this.processEvents({type:`message_end`,message:n}),await this.processEvents({type:`turn_end`,message:n,toolResults:[]}),await this.processEvents({type:`agent_end`,messages:[n]})}finishRun(){this._state.isStreaming=!1,this._state.streamingMessage=void 0,this._state.pendingToolCalls=new Set,this.activeRun?.resolve(),this.activeRun=void 0}async processEvents(e){switch(e.type){case`message_start`:this._state.streamingMessage=e.message;break;case`message_update`:this._state.streamingMessage=e.message;break;case`message_end`:this._state.streamingMessage=void 0,this._state.messages.push(e.message);break;case`tool_execution_start`:{let t=new Set(this._state.pendingToolCalls);t.add(e.toolCallId),this._state.pendingToolCalls=t;break}case`tool_execution_end`:{let t=new Set(this._state.pendingToolCalls);t.delete(e.toolCallId),this._state.pendingToolCalls=t;break}case`turn_end`:e.message.role===`assistant`&&e.message.errorMessage&&(this._state.errorMessage=e.message.errorMessage);break;case`agent_end`:this._state.streamingMessage=void 0}let t=this.activeRun?.abortController.signal;if(!t)throw Error(`Agent listener invoked outside active run`);for(let n of this.listeners)await n(e,t)}};function k_(e){if(!Number.isFinite(e)||e<=0)return`0 B`;let t=[`B`,`KB`,`MB`,`GB`],n=e,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r++;return`${n>=10||r===0?Math.round(n):Math.round(n*10)/10} ${t[r]}`}function A_(e){let t=e.mimeType||`application/octet-stream`;return`${e.name} (${t}, ${k_(e.size)})`}function j_(e){let t=A_(e);return e.kind===`image`&&e.data?e.path?`[Attached image: ${t} — full-resolution copy saved to ${e.path}]`:`[Attached image: ${t}]`:e.kind===`text`&&e.text!==void 0?[`----- BEGIN ATTACHMENT ${t} -----`,e.text,`----- END ATTACHMENT ${e.name} -----`].join(`
880
+ `):e.path?`[Attached ${e.kind===`image`?`image`:e.kind===`text`?`text file`:`file`} saved to ${e.path} — ${t}. Read it from the virtual filesystem when you need its contents.]`:e.error?`[Attachment not included: ${t}. ${e.error}]`:`[Attachment not included: ${t}. Unsupported binary attachment.]`}function M_(e,t){if(!t?.length)return e;let n=t.map(j_),r=e.trim();return r?`${r}\n\n${n.join(`
881
881
 
882
882
  `)}`:n.join(`
883
883
 
884
- `)}function k_(e){return e?.length?e.filter(e=>e.kind===`image`&&e.data).map(e=>({type:`image`,data:e.data,mimeType:e.mimeType})):[]}const A_=`sessions`;function j_(){return new Promise((e,t)=>{let n=indexedDB.open(`agent-sessions`,1);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(A_)||e.createObjectStore(A_,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}var M_=class{dbPromise=null;getDB(){return this.dbPromise||=j_().then(e=>(e.onversionchange=()=>{e.close(),this.dbPromise=null},e.onclose=()=>{this.dbPromise=null},e)),this.dbPromise}async save(e){let t=await this.getDB();return new Promise((n,r)=>{let i=t.transaction(A_,`readwrite`).objectStore(A_).put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async load(e){let t=await this.getDB();return new Promise((n,r)=>{let i=t.transaction(A_,`readonly`).objectStore(A_).get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async delete(e){let t=await this.getDB();return new Promise((n,r)=>{let i=t.transaction(A_,`readwrite`).objectStore(A_).delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async loadAll(){let e=await this.getDB();return new Promise((t,n)=>{let r=e.transaction(A_,`readonly`).objectStore(A_).getAll();r.onsuccess=()=>t(r.result??[]),r.onerror=()=>n(r.error)})}async list(){let e=await this.getDB();return new Promise((t,n)=>{let r=e.transaction(A_,`readonly`).objectStore(A_).getAll();r.onsuccess=()=>{t((r.result??[]).map(e=>({id:e.id,updatedAt:e.updatedAt})))},r.onerror=()=>n(r.error)})}async clearAll(){let e=await this.getDB();return new Promise((t,n)=>{let r=e.transaction(A_,`readwrite`).objectStore(A_).clear();r.onsuccess=()=>t(),r.onerror=()=>n(r.error)})}static newId(){return`session-${Date.now()}-${Math.random().toString(36).slice(2,8)}`}static createSession(e,t){let n=Date.now();return{id:e,messages:[],config:t,createdAt:n,updatedAt:n}}static updateMessages(e,t){return{...e,messages:t,updatedAt:Date.now()}}},N_=class{resolve;providerId;now;#e=null;#t=null;#n=null;#r=null;constructor(e,t,n=Date.now){this.resolve=e,this.providerId=t,this.now=n}#i(e){return e===`ok`?6e4:e===`unsupported`?18e5:3e5}isStale(){let e=this.#e;return!e||this.#t!==this.providerId()||this.now()-e.at>=this.#i(e.outcome)}snapshot(){return this.#t===this.providerId()?this.#e?.window??null:null}async refresh(e={}){if(!e.force&&!this.isStale())return this.snapshot();let t=this.providerId();return this.#n!==null&&this.#r===t?this.#n:(this.#n=this.resolve().then(e=>{let n=e?{...e,at:this.now()}:null;return this.#a(t,n?`ok`:`unsupported`,n),n}).catch(()=>{let e=this.snapshot();return this.#a(t,`failed`,e),e}).finally(()=>{this.#r===t&&(this.#n=null,this.#r=null)}),this.#r=t,this.#n)}#a(e,t,n){e===this.providerId()&&(this.#t=e,this.#e={outcome:t,window:n,at:this.now()})}clear(){this.#e=null,this.#t=null}},P_=e({clearBudgetWindowCache:()=>B_,getBudgetWindowSnapshot:()=>R_,refreshBudgetWindow:()=>z_});async function F_(){let e=ue();if(!e)return null;let t=Pe(e);if(!t?.getBudgetUsage)return null;let n=await t.getBudgetUsage();return n?{...n,providerId:e}:null}function I_(){try{return ue()}catch{return``}}const L_=new N_(F_,I_);function R_(){return L_.snapshot()}function z_(e){return L_.refresh(e)}function B_(){L_.clear()}const V_=`abject.abortive.abrasive.absolute.abstruse.abundant.abyssal.accessible.acerbic.acrid.adamant.adept.adlerian.adornian.adroit.adventurous.aeolian.aerated.aesthetic.affable.aged.ageless.agile.airborne.airlocked.airy.akkadian.alabaster.alacritous.alert.alien.alloyed.allusive.aloof.alpha.alpine.alternate.altruistic.amaranthine.amber.ambidextrous.ambivalent.ambrosial.amiable.amorphous.ample.analog.analytical.ancestral.ancient.angelic.animated.animist.anomalous.antediluvian.antic.antlered.apollinairian.apollonian.apt.aquatic.arbitrary.arcadian.arcane.archaic.archimedean.ardent.arduous.arendtian.argent.argentine.argive.aristotelian.armstrongian.aromatic.arresting.artful.arthurian.articulate.artificial.artisanal.artless.ascetic.ashen.ashy.asimovian.aspiring.assiduous.assyrian.asteroidal.astral.astute.asynchronous.athenian.atlantean.atomic.attentive.attic.audacious.audenesque.augmented.august.augustan.aureate.auric.auroral.austenian.austere.austral.authentic.autonomous.autumnal.avalonian.avid.avuncular.aztec.azure.babbagean.babylonian.bacchic.bachian.bactrian.ballardian.ballistic.balmy.banksian.barefoot.barreled.barthesian.bartokian.bashy.baudelairean.bayesian.beatific.beckettesque.beckettian.beethovenian.beguiling.bellicose.bemused.benevolent.benign.benjaminian.bergmanesque.beta.bewitched.binary.bionic.bismarckian.bitter.bitwise.blackened.blakean.blameless.bland.blazar.blazing.blended.blessed.blissful.blistered.blithe.blooming.blunt.blustery.boeotian.boggy.bohrian.boingy.boisterous.bold.bolted.bombastic.bonny.boolean.boreal.borgesian.borgian.bosky.botticellian.bottled.bouncy.boundless.bountiful.bourbon.bradburyan.brahmsian.braised.brambly.brash.brave.brazen.bready.breathless.brechtian.breezy.briared.briery.bright.brilliant.brined.briny.brisk.bristling.briton.brittenesque.broadband.brontean.bronzed.brooding.browned.browningesque.brucknerian.brumal.brusque.bubbling.bubbly.bucolic.budding.bunuelian.buoyant.burnished.burnt.buttered.buttery.bygone.byronic.bytewise.byzantine.cacophonous.caesarean.callow.calm.candescent.candid.candied.canny.cantorian.capable.capricious.caramelized.caravaggesque.carbon.carefree.carolingian.cartesian.carved.casked.cast.cavafian.cavalier.celebrated.celestial.celtic.ceramic.cerebral.ceremonious.cerulean.cervantine.cezannesque.chagallian.chalky.chaplinesque.charcoal.charismatic.charmed.charming.charred.chaucerian.cheeky.cheerful.chekhovian.cherished.cherubic.chewy.chilled.chilly.chimerical.chipper.chirpy.chivalrous.chopinesque.chromospheric.chronal.chthonic.chubby.chunky.churchillian.cimmerian.cindered.circumspect.circumstellar.citrusy.civil.clandestine.clangy.clarified.clarkean.classic.clement.clever.cloaked.clockwork.clompy.cloned.cloudlike.cloudy.clunky.clustered.coastal.cobalt.cognitive.coherent.coleridgean.colossal.coltranesque.comely.cometary.compiled.complacent.composite.concurrent.conradian.constablean.convivial.copernican.copious.coplandesque.cordial.corinthian.corked.cornelian.coronal.cortical.cosmic.coy.cozy.cracked.crackling.crafty.cranky.crashy.creamy.credible.crepuscular.cretan.crimson.crisp.crispy.crowned.crumbly.crunchy.crushed.cryo.cryofrozen.cryogenic.cryonic.cryptic.crystalline.cuddly.cumulative.cunning.cupric.cured.curious.cursed.cursory.cushy.cybernetic.cyberpunk.cynical.cyprian.daliesque.dancy.dandy.dantean.dantesque.dapper.dappled.daring.dark.darwinian.dashing.dashy.dauntless.davisian.dawning.dazzling.deathless.debonair.deboned.debussyan.decanted.decompiled.decorous.decrypted.deep.deferential.deft.degasian.delectable.deleuzian.delian.deliberate.delicate.delirious.delphic.delta.demure.depressurized.derridean.destined.devout.dewy.dexterous.diaphanous.diced.dickensian.dickian.dickinsonian.didactic.dieselpunk.diffident.digital.dignified.diligent.dimensional.dinky.dionysian.discerning.discreet.disheveled.disparate.distant.distinct.distributed.diurnal.divine.dizzy.docile.docked.dogged.doomed.dorian.dormant.dostoevskian.dotty.doughty.doughy.downy.dozy.draconic.dreamful.dreamy.drifting.dripping.drizzly.droll.drowsy.druidic.dulcet.dun.dunky.durkheimian.dusky.dwarven.dynamic.dystopian.eager.earnest.earthy.eastward.easygoing.ebony.ebullient.eclectic.eclipsed.ecstatic.edenic.edwardian.effervescent.effulgent.effusive.einsteinian.elamite.elastic.elated.eldritch.electric.electronic.elegant.elegiac.elgarian.eliotian.eliotic.elizabethan.ellingtonian.eloquent.elusive.elven.elvish.elysian.embered.emergent.eminent.emphatic.emulsified.enchanted.encoded.encrypted.endearing.endless.endogenous.energetic.enhanced.enigmatic.enthralling.ephemeral.epic.epicurean.equanimous.errant.erudite.escherian.esoteric.esteemed.eternal.ethereal.ethiopian.etruscan.euclidean.eulerian.euphonious.euphoric.evanescent.evening.eventide.everlasting.evocative.exacting.exalted.exemplary.exo.exogenous.expansive.expressive.exquisite.extraterrestrial.extruded.exuberant.fabled.fabulous.facetious.faithful.fallow.fanciful.fantastic.faradayic.faraway.farmhouse.fastidious.fated.fateful.fathomless.faulknerian.faunal.fearless.feathered.feathery.fecund.federated.feisty.felicitous.felliniesque.fenny.fermented.ferny.ferrous.fervent.fervid.festive.fetching.fey.fickle.fierce.fiery.filleted.filtered.fitzgeraldian.fizzy.flaky.flamboyant.flamed.flashy.flawless.fleecy.fleet.fleeting.flexible.flickering.flinty.floral.florid.flouncy.flourishing.flowering.fluent.fluffy.fluid.fluvial.foamy.folded.fond.foraged.forged.formidable.forthright.fortuitous.forward.foucauldian.fourier.fractal.fragrant.frank.frankish.freckled.free.fresh.freudian.friedmanite.frisky.frizzy.frolicsome.frosted.frosty.frothy.frozen.frugal.fruiting.fruity.funky.furred.furtive.futuristic.fuzzy.gaelic.galactic.galbraithian.galilean.gallant.gallic.galvanic.gamesome.gamma.gandhian.garlanded.garrulous.gauguinesque.gaussian.gauzy.generous.genetic.genial.genomic.genteel.gentle.geomagnetic.georgian.gershwinesque.ghostly.giant.gibsonian.giddy.gifted.giga.giggly.gilded.giottesque.glacial.glad.glazed.gleaming.gleeful.glimmering.glistening.glorious.glossy.glowing.gnomish.godardian.godelian.goethean.goethesque.gogolian.golden.gooey.goofy.gorgeous.gorsy.gossamer.gothic.gowned.goyaesque.graceful.gracious.grainy.grand.grassy.grated.gravitic.gregarious.grilled.groovy.ground.grounded.guileless.gushy.gusty.habermasian.habsburg.hadrianic.halcyon.hale.hallowed.haloed.halved.hamiltonian.han.handelian.handmade.handsome.hanoverian.hapless.happy.hardy.hardyesque.harmonious.hashed.haunted.haydnesque.hayekian.hazy.heady.heaneyesque.hearthside.hearty.heathen.heathered.heavenly.hegelian.heideggerian.heinesque.heinleinian.heirloom.heisenbergian.heliacal.hellenic.hellish.hemingwayesque.herbal.herbertian.herculean.hermetic.heroic.hexed.hibernal.hilbertian.histrionic.hitchcockian.hittite.hoar.hoary.hobbesian.hobbitish.hogarthian.holderlinian.holo.holographic.holy.homerian.homeric.homeward.honest.honeyed.honky.hooded.hooved.hopeful.hopkinsian.hopperesque.hoppy.horatian.horned.hospitable.hot.housemade.huggy.humble.humean.humming.humorous.hunky.hunnish.hurrian.hushed.hydraulic.hyper.hyperborean.hypersonic.hyperspatial.hypnotic.iberian.ibsenite.iced.icy.ideal.idyllic.igneous.illustrious.imaginative.immaculate.immense.immortal.impassioned.impeccable.impetuous.impish.impressive.incan.incandescent.incisive.incorrigible.indefatigable.indelible.indigo.indolent.indomitable.industrious.ineffable.inexorable.infernal.infinite.infra.infrared.infused.ingenious.ingenuous.inimitable.innocuous.inquisitive.insatiable.inspired.intense.intergalactic.interstellar.intragalactic.intrepid.intricate.intrinsic.intuitive.inventive.inveterate.invincible.inward.ionian.ionic.ionospheric.irenic.iridescent.irrepressible.ithacan.itinerant.ivory.jacobean.jammy.jangly.jaunty.jazzy.jeffersonian.jiggly.jingly.jocular.jocund.johnsonian.jolly.jouncy.jovial.jovian.joycean.joyful.joyous.jubilant.judicious.juiced.juicy.jumped.jumpy.jungian.junky.justinianic.jute.kafkaesque.kandinskian.kantian.keatonesque.keatsian.keen.keplerian.keynesian.kierkegaardian.kindly.kindred.kinetic.kiplingesque.klimtian.knowing.kooky.kubrickian.kurosawan.lacanian.laconic.lacquered.lacustrine.lacy.lamarckian.lambda.lambent.laminated.landed.languid.lanky.laplacian.larkinesque.laser.latent.lathed.latin.lattice.laudable.launched.laureled.lavish.layered.leaden.leafy.lean.learned.legendary.leguinian.leibnizian.lemian.lemurian.lenient.leonardesque.liberal.libyan.lidar.light.lighthearted.likable.lilac.lilting.liminal.limpid.lincolnesque.lingering.linnaean.lissome.lisztian.literate.lithe.littoral.lively.loamy.local.lockean.lofty.logical.loopy.loose.loquacious.lorcaesque.lorcan.lossless.lossy.lovecraftian.lovelacean.loyal.lucent.lucid.lucky.ludic.lukewarm.luminal.luminous.lunar.luscious.lush.lushy.lusitanian.lustrous.lydian.lynchian.lyotardian.lyric.lyrical.macerated.machiavellian.macro.magical.magnanimous.magnetar.magnetic.magnetospheric.magnificent.magrittean.mahlerian.majestic.mallarmean.malleable.malthusian.malty.mandelan.manetesque.manifold.marbled.marshy.martial.martian.marvelous.marxian.maser.masked.masterful.matchless.matin.matissean.mature.matutinal.mauve.maverick.mawkish.maxwellian.mayan.meandering.mechanical.median.medicean.mega.mellifluous.mellow.melodic.mendelian.merciful.mercurial.merovingian.merry.meshed.meta.metamorphic.meteoric.meticulous.metternichian.mettlesome.michelangelesque.micro.microwave.midnight.mighty.mild.milled.miltonian.miltonic.minced.mindful.mineral.ming.mingusian.minoan.minty.miraculous.mired.miroesque.mirthful.mischievous.misty.mobile.modest.modular.molecular.molieresque.momentous.mondrianesque.monetian.monkish.mono.montane.moonless.moonlit.mordant.morning.mossy.motley.mottled.mouthwatering.mozartian.mughal.multiversal.munificent.murmuring.mushy.musical.mutable.mutant.mycenaean.mysterious.mystical.mythic.nabokovian.nameless.nano.nanoscale.napoleonic.narrowband.nascent.natty.neat.nebular.nebulous.nefarious.neptunian.nerudian.networked.neural.neutron.neutronic.newtonian.nietzschean.nifty.nimble.noble.nocturnal.nonchalant.nonpareil.noontide.norse.northward.nostalgic.notable.novel.nozickian.nuanced.nubian.nuclear.numinous.nutty.oaky.obdurate.oblique.observant.obstinate.obtuse.oceanic.ochre.odyssean.olden.olympian.omega.omni.onward.opaline.opportune.optical.optimistic.opulent.oracular.orbital.orbiting.orderly.original.ornate.orphic.orwellian.osirian.ostentatious.otherworldly.otiose.ottoman.outgoing.outspoken.outward.overcast.overclocked.ovidian.pacific.pagan.painstaking.palatial.pale.pallid.palpable.paradisal.paradoxical.parallel.paramount.parkerish.parsonian.parthian.passionate.pastoral.patched.pathless.patient.pavlovian.peaceable.peaceful.peachy.pearly.peaty.pebbly.peeled.peered.peerless.pelagic.pellucid.penetrating.pensive.peppered.peppery.peppy.perceptive.perennial.perfect.perfumed.perky.persian.persistent.perspicacious.persuasive.pert.pervasive.pessoan.petaled.petrarchan.phantom.pharaonic.phased.philosophical.phlegmatic.phoenician.photonic.photospheric.phrygian.picassoesque.pickled.pictish.picturesque.pillowy.pindaric.pinteresque.piping.piquant.pirandellian.pithy.pivotal.pixelated.placid.planckian.planetary.planetoid.plangent.plasmic.plathian.platinum.platonic.playful.pleasant.plentiful.pliant.plinky.plonky.plucky.plumed.plummy.plush.plushy.plutonian.plutonic.pneumatic.poached.poesque.poetic.poignant.poised.polished.polite.pollockian.poly.polygonal.polymer.polynesian.popean.popped.popular.portly.posh.positronic.posthuman.potent.pouncy.powdery.powerful.pragmatic.prancy.precise.precocious.precognitive.preeminent.premier.prescient.pressed.pressurized.prestigious.pretty.primeval.primordial.princely.printed.pristine.private.prized.prodigious.profane.proficient.profound.profuse.prokofievian.prolific.promethean.prompt.proper.prophetic.prosaic.prosperous.protean.proto.protostellar.proud.proustian.providential.prudent.psionic.puccinian.puckish.pudgy.puffed.pulled.pulsar.punctilious.punctual.pungent.punic.pure.purposeful.pushkinian.pynchonesque.pythagorean.quaint.quantum.quartered.quasar.questing.quick.quiescent.quiet.quintessential.quirky.quixotic.rabelaisian.racinian.radar.radiant.radio.rainwashed.rainy.rakish.rambunctious.raphaelesque.rapid.rapturous.rare.rational.ravelian.rawlsian.raytraced.ready.reasonable.rebooted.receptive.recondite.recursive.redolent.reduced.reedy.refined.reflective.refulgent.regal.relativistic.relaxed.reliable.remarkable.rembrandtesque.remote.rendered.renoiresque.renowned.replete.replicated.resilient.resinous.resolute.resourceful.respectful.resplendent.responsive.restful.restive.restless.reticent.retro.reverent.rhapsodic.rhodian.rhythmic.ricardian.rich.richelieuvian.riemannian.rigorous.rilkean.rimbaudian.rimed.ringed.ripe.ripening.rippling.risible.riverine.riveted.roaming.roaring.roasted.robed.robotic.robust.rolled.roly.roman.romanov.romantic.rompy.rooseveltian.roseate.rosy.rothkoesque.rousing.rousseauian.rowdy.royal.rubenesque.ruddy.runic.rushy.russet.rustic.sabine.sable.sacred.sagacious.sage.saintly.salient.saline.salingeresque.salted.salty.salubrious.samian.sandaled.sandy.sanguine.sapid.sapient.sapphic.sardonic.sarmatian.sartrean.sassy.satiny.saturnian.saturnine.saucy.savory.savvy.saxon.scalding.scarlet.schielesque.schillerian.schoenbergian.scholarly.schubertian.schumannesque.schumpeterian.scintillating.scorched.scorsesean.scrappy.scruffy.scrupulous.scythian.seaborne.seamless.seared.seasonal.seaward.secure.sedate.sedgy.sedimentary.sedulous.seemly.seismic.selenic.selfless.sensible.sensitive.sentient.sentimental.seraphic.sere.serene.seuratian.shaded.shadowed.shadowy.shaggy.shaken.shakespearean.shamanic.shannonian.sharded.sharp.shaved.shavian.shelleyan.shielded.shimmering.shiny.shoreless.shostakovian.shrewd.shucked.sibelian.sibilant.sibylline.sicilian.sidereal.sienna.sifted.sigma.silicon.silken.silky.silly.silty.silver.silvered.simmering.simulated.sincere.singed.singing.singular.sinuous.sisyphean.sizzling.skeptical.skillful.skinnerian.skittish.skyward.sleek.sleepless.sleepy.slender.sliced.slick.slipstreamed.slow.sly.smart.smashy.smithian.smoked.smoky.smoldering.smooth.snappy.snazzy.snoozy.snowy.snug.snuggly.soaring.sociable.socratic.sodden.soft.sogdian.solar.solarpunk.solemn.solid.somnolent.sonar.song.sonic.sonorous.sooty.soporific.soulful.sound.soundless.sour.southward.sovereign.spaceborne.spacefaring.spacious.sparkling.sparkly.spartan.special.speckled.spectacular.spectral.speedy.spellbound.spiced.spicy.spielbergian.spiffy.spinozan.spirited.splashy.splendid.split.sploshy.spontaneous.spooky.sporty.spotless.spotted.sprightly.sproingy.spry.spun.spunky.squally.squashy.squelchy.squiggly.squishy.staid.stainless.stalwart.starborn.starfaring.starless.starlit.stasisbound.stately.steadfast.steady.steaming.steampunk.steely.steeped.steinbeckian.stellar.stellarborn.sticky.stirred.stirring.stoic.stoical.stolid.stompy.stoppardian.storied.stormy.stout.strained.stratospheric.straussian.stravinskian.streaky.stretched.striking.strindbergian.striped.strong.stuart.stubby.studious.stunning.sturdy.stygian.suave.subatomic.sublime.suborbital.subsonic.substantial.subtle.succinct.succulent.sudsy.sugared.sugary.sumerian.summery.sunless.sunlit.sunny.sunward.superb.supergalactic.superlative.superluminal.supersonic.supple.supreme.sure.surreptitious.svelte.swanky.sweeping.sweet.swift.swiftian.swirled.swooshy.sylvan.sympathetic.synaptic.synchronous.synthetic.syrupy.tableside.tachyonic.taciturn.talented.talleyrandian.tame.tang.tangy.tarantinoesque.tarkovskian.tart.tasteful.tattered.taut.tawny.tectonic.telekinetic.telepathic.temperate.tempered.temporal.tenacious.tender.tennysonian.tenuous.tepid.tera.terran.terrific.terse.textured.thackerayan.thankful.thawed.theban.thessalian.theta.thorny.thorough.thoughtful.thracian.threadbare.thriving.thundery.tidal.tidy.timeless.timely.timeworn.tinkly.tiny.tipsy.tireless.titanesque.titanian.titanic.titanium.titianesque.toasted.toasty.tocharian.tokenized.tolerant.tolkienesque.tolstoyan.tonic.tonky.toothsome.torched.totemic.tough.towering.trackless.tranquil.transcendent.transhuman.treacly.treasured.tremendous.tremulous.trenchant.tricky.trim.triumphant.trojan.trollopian.truculent.true.truffautian.truffled.trusty.truthful.tudor.turbo.turingian.turneresque.twangy.twilight.twilit.twinkling.twinkly.ubiquitous.ultra.ultrasonic.ultraviolet.umami.umber.unassuming.unbounded.uncanny.uncorked.unctuous.undaunted.underworldly.undocked.undying.unearthly.unerring.unflappable.unique.unknown.unruffled.upbeat.upgraded.upright.upstanding.upward.uranian.urbane.utopian.vacuous.valeryan.valiant.valorous.vandal.vangoghian.vast.veblenian.vectorized.vedic.vehement.veiled.velazquezian.velvet.velvety.venerable.venturous.venusian.veracious.verbose.verdant.verdian.verdurous.verlainian.vermeerian.vermilion.vernal.verneian.versatile.vesper.vespertine.vibrant.victorian.vigilant.vigorous.vintage.violet.virgilian.virtual.virtuous.visceral.vital.vivacious.vivid.vocal.voidborn.voidward.volcanic.voltairean.voluble.vonnegutian.voracious.voxel.vroomy.wacky.wagnerian.wakeful.waking.wan.wandering.warholian.warm.warped.wary.washingtonian.wayward.wealthy.weathered.weberian.welcome.welded.wellesian.wellsian.westward.whacky.whimsical.whimsy.whipped.whisked.whispering.whistlerian.whitmanesque.whole.wholesome.whooshy.wide.wiggly.wild.wildean.willowy.wilsonian.wily.windswept.windy.winged.winning.winsome.wintry.wired.wireframe.wireless.wise.wishful.wispy.wistful.wittgensteinian.witty.wobbly.wodehousian.wondrous.wonky.wooded.woody.woolly.woozy.wordless.wordsworthian.wormholed.worthy.wraithlike.wreathed.wriggly.wry.xenial.xeno.yanky.yearning.yeasty.yeatsian.young.youthful.yuletide.yummy.zany.zappy.zealous.zested.zestful.zesty.zeta.zingy.zippy.zodiacal.zonked.zonky.zoomy.zoroastrian`.split(`.`),H_=`abalone.absinthe.absyrtus.accelerator.achilles.acorn.acquerello.actuator.adobo.adonis.aeetes.aegis.aello.aeneas.aengus.aether.affogato.afterburner.agartha.agate.agni.agnolotti.aioli.airlock.ajax.aji.albatross.alder.ale.alecto.aleppo.alfheim.allegory.alliteration.almond.amaranth.amaretto.amaterasu.ambrosia.americano.amphiaraus.anago.anapest.ancho.anchovy.android.andromeda.anise.annal.annwn.ansible.antaeus.antenna.anthem.antigone.antimony.antistrophe.anubis.aoidos.aperol.aphelion.aphrodite.apogee.apollo.apple.apricot.aquamarine.aquavit.aqueduct.arabica.arachne.arawn.arbor.arborio.arc.arcadia.arch.archipelago.ares.argo.argon.argonaut.aria.ariadne.ark.arke.armagnac.array.arrow.artemis.arthur.artichoke.artifact.arugula.asgard.asgardia.ash.asparagus.aspen.assam.assonance.asteroid.astronaut.atalanta.athena.atlantis.atlas.atoll.atom.atropos.aubergine.augean.aura.aurora.avalon.avalonia.avocado.awning.axion.axle.azurite.bacchus.bagna.baharat.balder.ballad.balladeer.banana.banshee.baozi.bard.barge.barium.barley.barn.basalt.basil.basilisk.basmati.bastet.bastion.bay.bayleaf.beacon.beam.bean.bearing.beech.beetroot.behemoth.bellini.beowulf.bergamot.berth.beryl.beryllium.bifrost.biodome.birch.biscotti.bismuth.bisque.bit.bittern.blackberry.blast.blaster.blini.block.blodeuwedd.bloodstone.blossom.bluebell.blueberry.bolt.bomba.bonito.boom.borage.boson.botargo.bottarga.bouillon.boundary.bow.bower.bragi.bramble.bran.branch.brandy.branwen.breeze.brew.bridge.brigid.brioche.broccoli.brook.brulee.brunhild.brush.bucatini.buckler.buckwheat.buffer.bulkhead.bunting.burrata.burst.bus.busiris.butte.butter.buttercup.butterscotch.byte.cabbage.cabin.cacao.cachaca.cache.cacus.cadence.caesura.calamarata.calamari.calcite.caldera.calliope.calvados.calypso.cam.camellia.camelot.camembert.campari.canal.cannelloni.cannoli.canopy.cantaloupe.cantata.canticle.canvas.canyon.canzone.capacitor.capellini.caper.capon.cappelletti.cappuccino.capsule.caramel.cardamom.cardoon.carillon.carnaroli.carnation.carol.carrier.carrot.cascade.cashew.cassandra.cassis.castle.castor.cavatelli.caviar.cayenne.cedar.celaeno.celeriac.cell.centaur.cerberi.cerberus.cernunnos.ceryneian.cesium.ceto.ceylon.chaff.chaffinch.chai.chain.chalk.chamomile.champagne.chandra.channel.chanson.chanterelle.chard.charon.chartreuse.cheddar.cherry.chert.chervil.chestnut.chickweed.chicory.chili.chime.chimera.chimichurri.chimney.chip.chipotle.chirashi.chiron.chive.chocolate.chorale.chorizo.chorus.chronicle.chrysanthemum.chrysaor.chrysomallus.chutney.ciabatta.cibola.cider.cilantro.cinder.cinnamon.cipher.circe.circlet.circuit.cirque.cistern.citadel.citrine.citron.clementine.cliff.clio.clipper.cloak.clotho.cloud.clove.clover.cluster.coal.cobbler.cockaigne.cockpit.cocoa.coconut.codex.coffee.cog.cognac.coif.coil.col.colchis.collider.colony.combe.comet.compote.concerto.conchiglie.conduit.confit.console.consomme.consonance.continuum.contour.cookies.coordinate.core.coriander.cormorant.corona.coronet.cortado.corvette.cosmos.cottage.couplet.course.couscous.cove.cowl.cowslip.crab.craft.crag.cranberry.crane.crayon.cream.creme.crepe.cress.crocus.croissant.crosne.crown.cruiser.crumble.cryopod.cryosleep.crystal.cuchulainn.cuckoo.cucumber.cuirass.cumin.cupid.curlew.currant.current.curry.custard.cyborg.cycle.cyclops.cyclotron.cylinder.dactyl.daedalus.daemon.daffodil.dagda.dahlia.daiquiri.dais.daisy.dale.dam.dandelion.danu.daphne.darjeeling.dart.dashi.date.dawn.daydream.deck.deirdre.demeter.destroyer.dew.diadem.diary.dill.dimension.diode.diomedean.dionysus.ditalini.ditch.djinn.dock.doenjang.domain.donburi.donjon.door.doppio.dove.downlink.dreadnought.dream.drift.droid.dryad.dukkah.dulce.dumpling.dune.durga.dusk.dust.dyke.eagle.earlgrey.easel.echidna.echo.eclair.eclipse.ecliptic.edamame.eddy.edelweiss.edge.egret.einsteinium.elderflower.eldorado.electra.elegy.elm.elysium.ember.endive.enigma.enjambment.enkidu.envoi.eos.epigram.epistle.epode.erato.erinyes.eros.erymanthian.escargot.espresso.estuary.eumenides.euryale.eurybia.eurydice.eurytion.excalibur.exoplanet.fable.fafnir.falcon.fancy.farfalle.fate.feather.feldspar.fell.fence.fennel.fenrir.fenugreek.fermion.fern.fettuccine.fiddlehead.field.fig.finch.finn.fionn.firebird.firefly.fission.fizz.fjord.flake.flame.flare.flash.flicker.flint.flue.fluorite.flux.flywheel.focaccia.fog.folio.fondant.forge.fortress.foxglove.fragment.fraise.frame.frangipane.frappe.freesia.fregola.freighter.freya.frigate.frigg.frost.fudge.fugue.fumarole.furies.fusilli.fusion.gaia.galahad.galangal.galatea.galaxy.galette.galleon.gallium.ganache.ganesh.gannet.gantry.ganymede.garam.gardenia.garlic.garuda.gateway.gauntlet.gawain.gazebo.gear.gelato.gemelli.genmaicha.genoise.geranium.germ.germanium.geryon.geyser.ghazal.ghee.ghost.gilgamesh.ginger.gingko.ginnungagap.girder.glacier.glade.glaze.gleam.gleeman.glen.glimmer.glint.glitter.gloss.glow.gluon.gnocchi.gochujang.goldfinch.golem.goose.gooseberry.gorgon.gouda.governor.gradient.graeae.granary.granite.grapefruit.grappa.gratin.graviton.greave.grebe.gremolata.grenadine.grendel.grid.griffin.gruyere.guajillo.guava.gudrun.guinevere.gunkan.gwydion.gyoza.gyroscope.habanero.habitat.hades.hadron.haiku.hall.halloumi.halo.halva.hamachi.hangar.hanuman.harissa.harpies.harpy.harvest.hatch.hauberk.hawthorn.haze.hazel.hazelnut.heading.headland.heap.heart.hearth.heather.hecate.hedge.heimdall.hel.helheim.helios.helium.helix.helle.hellebore.helm.hemistich.hephaestus.hera.hermes.heron.hesperides.hestia.hibiscus.hippogriff.hirame.hive.hoisin.hojicha.hollandaise.hollow.holly.hologram.honey.honeycomb.honeysuckle.hood.hoopoe.horizon.horseradish.horus.hrothgar.hub.huckleberry.hue.huginn.hull.husk.hut.hyacinth.hydra.hydras.hylas.hymn.hyperborea.hypercube.hyperdrive.hyperion.hyperspace.hyssop.iamb.ibis.icarus.idas.idunn.idyll.igniter.igraine.ikura.indium.indra.inductor.infusion.injector.ink.inlet.inspiration.ion.iridium.iris.ishtar.isis.isolde.isotope.ivy.iwashi.izanagi.jackdaw.jackfruit.jalapeno.janus.jasmine.jason.jasper.javelin.jay.jet.jiaozi.jongleur.jonquil.jormungandr.jotunheim.journal.julep.jumpgate.juniper.juno.jupiter.kaffir.kale.kali.kampachi.karaage.karasumi.katsu.keel.keep.kefir.kelpie.kenning.kernel.kestrel.khinkali.kiln.kimchi.kingfisher.kinmedai.kirsch.kite.kitsune.kiwi.koan.kohlrabi.kombucha.koshihikari.kraken.krypton.kumquat.kvass.lachesis.lacquer.ladon.ladons.laertes.lager.lagoon.lake.lakshmi.lambic.lament.lance.lancelot.lander.lane.langoustine.lantern.lapis.lark.larkspur.lasagna.latte.laureate.laurel.lava.lavender.leaf.leda.leek.legend.lemon.lemonbalm.lemongrass.lemuria.lens.lentil.lepton.lernaean.lethe.letter.levee.lever.leviathan.lightyear.lily.lime.limerick.limoncello.linden.linguine.link.linnet.lir.lithium.lityerses.lobster.loch.lock.lodge.loki.loop.loquat.lotus.lovage.lugh.lullaby.lungo.luster.lychee.lynceus.lyonesse.lyricist.macadamia.macaron.macchiato.madai.madeleine.madrigal.magma.magnolia.magpie.mail.mainframe.maki.makrut.malachite.manannan.mango.manicotti.manor.manti.manticore.mantle.mantou.manuscript.maple.marble.marduk.margarita.marigold.marjoram.marquee.marrow.martini.marvel.marzipan.masago.masala.mascarpone.mast.matcha.matrix.mead.meadow.mech.medea.medusa.megaera.meleager.memoir.mentaiko.mercury.meringue.merlin.merlot.mesa.mesh.metaphor.meteor.meter.mezcal.mezzaluna.mica.midas.midgard.mill.mimir.mimosa.minerva.minotaur.minstrel.mint.minuet.miracle.mirin.mirror.miso.missive.mist.mjolnir.mocha.module.moira.mojito.molasses.mole.momo.monolith.moonbase.moonbeam.moonstone.moor.mopsus.mordred.morel.morgana.morpheus.morrigan.moss.mote.motet.mousse.mu.mulberry.muninn.muon.muse.muspelheim.mustard.myrtle.mystery.myth.nadir.naga.naiad.nanite.nanobot.narcissus.neapolitan.nebula.nectarine.needle.negroni.nemean.nemesis.neon.neptune.neptunium.nereid.nereus.nessus.nest.nestor.net.nettle.neutrino.nexus.niamh.nib.nibble.nibiru.niflheim.nightingale.nigiri.nike.niobe.njord.nocturne.node.nog.nori.norn.note.nougat.nova.nozzle.nuada.nutmeg.nyx.oak.oasis.oat.obelisk.oberon.obsidian.oceanid.oceanus.octave.octavo.ocypete.ode.odin.odysseus.oisin.okonomiyaki.olive.olympus.oni.onigiri.oolong.oracle.orange.orb.orbit.orbiter.orchard.orchid.oreads.orecchiette.oregano.orion.orpheus.orthros.orthrus.orzo.oscillator.osiris.osmium.osprey.ouroboros.outline.outpost.ouzo.oven.overture.owl.oyster.paccheri.packet.padron.page.palace.palette.palladium.palm.pan.pandan.pandora.panettone.pansotti.pansy.pantoum.papaya.pappardelle.paprika.papyrus.parable.paradox.parcae.parchment.parfait.parmesan.parsec.parsley.parsnip.particle.partridge.parvati.pasilla.passionfruit.pastel.pastis.patina.pavilion.pavlova.peach.peak.pear.pebble.pecan.pegasi.pegasus.pekoe.peleus.pelican.pelmeni.pen.pencil.penelope.penne.peony.pepper.peppermint.percival.peregrine.pergola.peridot.perigee.perihelion.perry.persephone.perseus.persillade.persimmon.pesto.petal.petrel.phase.pheasant.phoenix.pholus.phorcys.photon.phrixus.pickle.pierogi.pigment.pimento.pine.pineapple.ping.pinot.pipe.pipit.piquillo.pisco.pistachio.piston.pith.plane.plasma.plate.plover.plum.plume.pluto.plutonium.poblano.pod.podarge.poet.polenta.pollux.polyphemus.pomegranate.pomelo.pond.pontus.ponzu.pooka.pool.poplar.poppy.porcini.port.portal.porter.porthole.poseidon.positron.prairie.praline.prelude.primrose.prism.probe.profile.prometheus.prosciutto.prosecco.proteus.protocol.psalm.psyche.pudding.puffin.pulse.pumice.pumpkin.purslane.pwyll.pylon.pyrrhic.quadrant.quail.quark.quarto.quartz.quatrain.qubit.quetzalcoatl.queue.quill.quince.quinoa.quiver.radish.radium.radon.ragnarok.rain.rama.ramen.ramp.rampart.ramson.raspberry.ratatoskr.raven.ravioli.ray.reactor.realm.reaper.reed.reef.refrain.region.register.relay.relic.remnant.requiem.reservoir.residue.resistor.resonator.reverie.rhapsode.rhapsody.rhea.rhiannon.rhodium.rhododendron.rhubarb.rhyme.ricotta.riddle.ridge.riesling.rigatoni.rim.ring.risotto.ristretto.river.roast.robin.robusta.roc.rocket.rod.romesco.rondeau.rooibos.rook.root.rose.rosemary.rosewater.roundel.rover.rowan.rubidium.rum.rune.saba.saffron.saga.saison.sake.salmoriglio.salsa.salsify.sambal.sambuca.samphire.sancerre.sandpiper.sangria.sanma.sansho.saraswati.sashimi.sasquatch.satellite.satyr.sauternes.savanna.sawara.sazerac.scaffold.scalar.scallop.scansion.scepter.schnapps.schooner.scop.scorzonera.scotchbonnet.scroll.sector.seed.sekhmet.selene.selenite.selenium.selkie.sencha.sensor.sequoia.serenade.serrano.servo.sesame.sestina.sextet.shack.shade.shadow.shaft.shale.shallot.shambhala.shard.shed.sheen.sherbet.sherry.shield.shimmer.ship.shishito.shiso.shiva.shoyu.shrub.shumai.shuttle.sibyl.sif.signal.sigurd.silhouette.silo.simile.simurgh.singularity.siren.sita.skadi.skald.skiff.skuld.skylark.slant.slate.sleipnir.sling.slipstream.sliver.sloop.sluice.smithy.smoke.snowdrop.socket.sofrito.sonata.sonnet.soot.sorbet.sorrel.souffle.soul.soy.spaceport.spaghetti.spark.sparkle.sparrow.spear.speck.specter.speculoos.spelt.sphere.sphinx.sphinxes.spindle.spinel.spiral.spire.spirit.splinter.spoke.spondee.spore.spring.spritz.spruce.sriracha.ssamjang.stack.stanza.starbase.starlight.starling.starport.starship.stasis.station.steam.stellarator.steppe.stheno.stork.stracciatella.strawberry.stream.strontium.strophe.strozzapreti.strut.stylus.stymphalian.styx.subspace.sumac.summit.sunbeam.sunstone.supernova.surge.surya.susanoo.sushi.svartalfheim.swallow.swan.swarm.sycamore.syleus.synchrotron.tabard.tachyon.tagliatelle.tahini.takoyaki.taliesin.tamari.tamarind.tangerine.tanka.tanker.tapenade.tapioca.tarako.taranis.tare.tarn.tarragon.tartarus.telamon.telemetry.teleporter.tellurium.temaki.tempura.tengu.tensor.tent.tequila.tercet.teriyaki.terminal.tern.terraform.tesseract.tethys.thalassa.thalia.thallium.thaumas.themis.theseus.thistle.thor.thorium.thoth.threshold.throne.throttle.thrush.thruster.thule.thunderbird.thyme.tiamat.tiara.tide.tint.tintagel.tiphys.tiramisu.tirnanog.tisane.tisiphone.titan.tobiko.toccata.toddy.toffee.tofu.tokamak.tomatillo.tomato.tome.tone.tonka.tonkatsu.tor.tortellini.torus.tourmaline.tower.trace.track.transducer.transistor.treacle.trellis.triolet.tristan.triton.trochee.trofie.trope.troubadour.trouvere.truffle.trunk.truss.tug.tulip.tundra.tungsten.turbine.turmeric.turquoise.turret.twinkle.typhon.tyr.udon.ulysses.unagi.uni.unicorn.uplink.uramaki.urania.uranium.urd.urfa.uther.vale.valhalla.valkyrie.valve.vanadium.vanaheim.vanilla.vapor.vareniki.varnish.varuna.vector.veil.vellum.vent.venus.verbena.verdandi.verge.verjus.vermouth.verse.vessel.vesta.vestige.vialone.viewport.villanelle.vishnu.vodka.volcano.volta.volume.vortex.vulcan.wall.walnut.waltz.warbler.warpgate.wasabi.wash.watercress.watermelon.wave.waypoint.web.weir.well.wendigo.wheat.whisky.whisper.wiglaf.willow.wimple.window.wisteria.wonder.wonton.woodcock.woodpecker.word.wormhole.wraith.wren.wyrm.wyvern.xenon.yacht.yakitori.yama.yarrow.yeti.yew.yggdrasil.yokai.yuzu.zaatar.zabaglione.zenith.zephyr.zeus.zinnia.zircon.zirconium.ziti.zone.zucchini`.split(`.`);V_.length*H_.length;const U_=new Set([`webhook`,`cron`,`sprinkle`,`fswatch`,`session-reload`,`navigate`,`discovery`,`upgrade`,`workflow`,`bash`,`jshd`,`preview`,`scoop-notify`,`scoop-idle`,`scoop-wait`,`sudo-request`]);function W_(e){return e!=null&&U_.has(e)}const G_=new Set([`send_message`,`list_scoops`,`list_tasks`,`sudo_request`,`list_sudo_requests`,`lick_confirm`,`lick_dismiss`]),K_=65536;function q_(e,t=K_){return e.length<=t?e:`${e.slice(0,t)}\n… [tool output truncated for the chat transcript: showing ${Z_(t)} of ${Z_(e.length)} — the agent received the full output]`}function J_(e,t=K_,n=4){if(typeof e==`string`)return q_(e,t);if(typeof e!=`object`||!e||n<=0)return e;if(Array.isArray(e)){let r=null;for(let i=0;i<e.length;i++){let a=J_(e[i],t,n-1);a!==e[i]&&(r??=[...e],r[i]=a)}return r??e}let r=null;for(let[i,a]of Object.entries(e)){let o=J_(a,t,n-1);o!==a&&(r??={...e},r[i]=o)}return r??e}function Y_(e,t=K_){if(!e)return e;if(!bn().test(e))return q_(e,t);let n=q_(e.replace(bn(),``).trim(),t);return n.length>0?`${n}\n[screenshot omitted from transcript]`:`[screenshot]`}function X_(e,t=K_){if(e.length<=t)return e;if(!bn().test(e))return q_(e,t);let n=[],r=0;for(let i of e.matchAll(bn()))n.push(q_(e.slice(r,i.index),t)),n.push(i[0]),r=(i.index??0)+i[0].length;return n.push(q_(e.slice(r),t)),n.join(``)}function Z_(e){return e>=1048576?`${(e/1048576).toFixed(1)} MB`:`${Math.round(e/1024)} KB`}var Q_=e({agentMessagesToChatMessages:()=>$_,lickChannelFromBody:()=>mv,lickChannelFromSenderName:()=>pv,lickIdFromBody:()=>hv,splitEnvelopes:()=>fv,unwrapMessageEnvelope:()=>dv});function $_(e,t={}){let{source:n=`cone`,idSeed:r=uv,hiddenToolNames:i=G_,uncapped:a=!1}=t,o=[],s=null,c=new Set;for(let t of e)rv(t)?(o.push(...ev(t,r)),s=null):iv(t)?(s=tv(t,n,r,i,c,a),o.push(s)):av(t)&&nv(t,s,c,a);return o}function ev(e,t){let n=ov(e.content);if(n.length===0)return[];let r=[];for(let i of fv(n)){if(i.body.length===0&&i.sender==null)continue;let n=(i.sender?pv(i.sender):null)??mv(i.body),a=n?hv(i.body):void 0,o={id:n===`sudo-request`&&a?`sudo-request-${a}`:t(),role:`user`,content:i.body,timestamp:e.timestamp};n&&(o.source=`lick`,o.channel=n,a&&(o.lickId=a)),r.push(o)}return r}function tv(e,t,n,r,i,a=!1){let o=[];for(let t of lv(e,a))r.has(t.name)?i.add(t.id):o.push(t);let s={id:n(),role:`assistant`,content:ov(e.content),timestamp:e.timestamp,source:t,model:e.model},{usage:c}=e;return c&&(s.usage={input:c.input,output:c.output,cacheRead:c.cacheRead,cacheWrite:c.cacheWrite,cost:{input:c.cost.input,output:c.cost.output,cacheRead:c.cost.cacheRead,cacheWrite:c.cost.cacheWrite,total:c.cost.total}}),o.length>0&&(s.toolCalls=o),s}function nv(e,t,n,r=!1){if(n.has(e.toolCallId))return;let i=t?.toolCalls?.find(t=>t.id===e.toolCallId);if(!i)return;let a=ov(e.content);i.result=r?a:q_(a),i.isError=e.isError}function rv(e){return e.role===`user`}function iv(e){return e.role===`assistant`}function av(e){return e.role===`toolResult`}function ov(e){if(typeof e==`string`)return e;if(!Array.isArray(e))return``;let t=[];for(let n of e)sv(n)&&t.push(n.text);return t.join(``)}function sv(e){return e.type===`text`}function cv(e){return e.type===`toolCall`}function lv(e,t=!1){if(!Array.isArray(e.content))return[];let n=[];for(let r of e.content)cv(r)&&n.push({id:r.id,name:r.name,input:t?r.arguments:J_(r.arguments)});return n}function uv(){return Date.now().toString(36)+Math.random().toString(36).slice(2,8)}function dv(e){if(!e.startsWith(`[`))return null;let t=e.indexOf(`] `);if(t<=0||e.lastIndexOf(`
885
- `,t)!==-1)return null;let n=e.slice(t+2);if(n.startsWith(`User: `))return{sender:`User`,body:n.slice(6)};for(let e of U_){let t=`${e}:`;if(!n.startsWith(t))continue;let r=n.indexOf(`
884
+ `)}function N_(e){return e?.length?e.filter(e=>e.kind===`image`&&e.data).map(e=>({type:`image`,data:e.data,mimeType:e.mimeType})):[]}const P_=`sessions`;function F_(){return new Promise((e,t)=>{let n=indexedDB.open(`agent-sessions`,1);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(P_)||e.createObjectStore(P_,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}var I_=class{dbPromise=null;getDB(){return this.dbPromise||=F_().then(e=>(e.onversionchange=()=>{e.close(),this.dbPromise=null},e.onclose=()=>{this.dbPromise=null},e)),this.dbPromise}async save(e){let t=await this.getDB();return new Promise((n,r)=>{let i=t.transaction(P_,`readwrite`).objectStore(P_).put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async load(e){let t=await this.getDB();return new Promise((n,r)=>{let i=t.transaction(P_,`readonly`).objectStore(P_).get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async delete(e){let t=await this.getDB();return new Promise((n,r)=>{let i=t.transaction(P_,`readwrite`).objectStore(P_).delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async loadAll(){let e=await this.getDB();return new Promise((t,n)=>{let r=e.transaction(P_,`readonly`).objectStore(P_).getAll();r.onsuccess=()=>t(r.result??[]),r.onerror=()=>n(r.error)})}async list(){let e=await this.getDB();return new Promise((t,n)=>{let r=e.transaction(P_,`readonly`).objectStore(P_).getAll();r.onsuccess=()=>{t((r.result??[]).map(e=>({id:e.id,updatedAt:e.updatedAt})))},r.onerror=()=>n(r.error)})}async clearAll(){let e=await this.getDB();return new Promise((t,n)=>{let r=e.transaction(P_,`readwrite`).objectStore(P_).clear();r.onsuccess=()=>t(),r.onerror=()=>n(r.error)})}static newId(){return`session-${Date.now()}-${Math.random().toString(36).slice(2,8)}`}static createSession(e,t){let n=Date.now();return{id:e,messages:[],config:t,createdAt:n,updatedAt:n}}static updateMessages(e,t){return{...e,messages:t,updatedAt:Date.now()}}},L_=class{resolve;providerId;now;#e=null;#t=null;#n=null;#r=null;constructor(e,t,n=Date.now){this.resolve=e,this.providerId=t,this.now=n}#i(e){return e===`ok`?6e4:e===`unsupported`?18e5:3e5}isStale(){let e=this.#e;return!e||this.#t!==this.providerId()||this.now()-e.at>=this.#i(e.outcome)}snapshot(){return this.#t===this.providerId()?this.#e?.window??null:null}async refresh(e={}){if(!e.force&&!this.isStale())return this.snapshot();let t=this.providerId();return this.#n!==null&&this.#r===t?this.#n:(this.#n=this.resolve().then(e=>{let n=e?{...e,at:this.now()}:null;return this.#a(t,n?`ok`:`unsupported`,n),n}).catch(()=>{let e=this.snapshot();return this.#a(t,`failed`,e),e}).finally(()=>{this.#r===t&&(this.#n=null,this.#r=null)}),this.#r=t,this.#n)}#a(e,t,n){e===this.providerId()&&(this.#t=e,this.#e={outcome:t,window:n,at:this.now()})}clear(){this.#e=null,this.#t=null}},R_=e({clearBudgetWindowCache:()=>W_,getBudgetWindowSnapshot:()=>H_,refreshBudgetWindow:()=>U_});async function z_(){let e=ue();if(!e)return null;let t=Pe(e);if(!t?.getBudgetUsage)return null;let n=await t.getBudgetUsage();return n?{...n,providerId:e}:null}function B_(){try{return ue()}catch{return``}}const V_=new L_(z_,B_);function H_(){return V_.snapshot()}function U_(e){return V_.refresh(e)}function W_(){V_.clear()}const G_=`abject.abortive.abrasive.absolute.abstruse.abundant.abyssal.accessible.acerbic.acrid.adamant.adept.adlerian.adornian.adroit.adventurous.aeolian.aerated.aesthetic.affable.aged.ageless.agile.airborne.airlocked.airy.akkadian.alabaster.alacritous.alert.alien.alloyed.allusive.aloof.alpha.alpine.alternate.altruistic.amaranthine.amber.ambidextrous.ambivalent.ambrosial.amiable.amorphous.ample.analog.analytical.ancestral.ancient.angelic.animated.animist.anomalous.antediluvian.antic.antlered.apollinairian.apollonian.apt.aquatic.arbitrary.arcadian.arcane.archaic.archimedean.ardent.arduous.arendtian.argent.argentine.argive.aristotelian.armstrongian.aromatic.arresting.artful.arthurian.articulate.artificial.artisanal.artless.ascetic.ashen.ashy.asimovian.aspiring.assiduous.assyrian.asteroidal.astral.astute.asynchronous.athenian.atlantean.atomic.attentive.attic.audacious.audenesque.augmented.august.augustan.aureate.auric.auroral.austenian.austere.austral.authentic.autonomous.autumnal.avalonian.avid.avuncular.aztec.azure.babbagean.babylonian.bacchic.bachian.bactrian.ballardian.ballistic.balmy.banksian.barefoot.barreled.barthesian.bartokian.bashy.baudelairean.bayesian.beatific.beckettesque.beckettian.beethovenian.beguiling.bellicose.bemused.benevolent.benign.benjaminian.bergmanesque.beta.bewitched.binary.bionic.bismarckian.bitter.bitwise.blackened.blakean.blameless.bland.blazar.blazing.blended.blessed.blissful.blistered.blithe.blooming.blunt.blustery.boeotian.boggy.bohrian.boingy.boisterous.bold.bolted.bombastic.bonny.boolean.boreal.borgesian.borgian.bosky.botticellian.bottled.bouncy.boundless.bountiful.bourbon.bradburyan.brahmsian.braised.brambly.brash.brave.brazen.bready.breathless.brechtian.breezy.briared.briery.bright.brilliant.brined.briny.brisk.bristling.briton.brittenesque.broadband.brontean.bronzed.brooding.browned.browningesque.brucknerian.brumal.brusque.bubbling.bubbly.bucolic.budding.bunuelian.buoyant.burnished.burnt.buttered.buttery.bygone.byronic.bytewise.byzantine.cacophonous.caesarean.callow.calm.candescent.candid.candied.canny.cantorian.capable.capricious.caramelized.caravaggesque.carbon.carefree.carolingian.cartesian.carved.casked.cast.cavafian.cavalier.celebrated.celestial.celtic.ceramic.cerebral.ceremonious.cerulean.cervantine.cezannesque.chagallian.chalky.chaplinesque.charcoal.charismatic.charmed.charming.charred.chaucerian.cheeky.cheerful.chekhovian.cherished.cherubic.chewy.chilled.chilly.chimerical.chipper.chirpy.chivalrous.chopinesque.chromospheric.chronal.chthonic.chubby.chunky.churchillian.cimmerian.cindered.circumspect.circumstellar.citrusy.civil.clandestine.clangy.clarified.clarkean.classic.clement.clever.cloaked.clockwork.clompy.cloned.cloudlike.cloudy.clunky.clustered.coastal.cobalt.cognitive.coherent.coleridgean.colossal.coltranesque.comely.cometary.compiled.complacent.composite.concurrent.conradian.constablean.convivial.copernican.copious.coplandesque.cordial.corinthian.corked.cornelian.coronal.cortical.cosmic.coy.cozy.cracked.crackling.crafty.cranky.crashy.creamy.credible.crepuscular.cretan.crimson.crisp.crispy.crowned.crumbly.crunchy.crushed.cryo.cryofrozen.cryogenic.cryonic.cryptic.crystalline.cuddly.cumulative.cunning.cupric.cured.curious.cursed.cursory.cushy.cybernetic.cyberpunk.cynical.cyprian.daliesque.dancy.dandy.dantean.dantesque.dapper.dappled.daring.dark.darwinian.dashing.dashy.dauntless.davisian.dawning.dazzling.deathless.debonair.deboned.debussyan.decanted.decompiled.decorous.decrypted.deep.deferential.deft.degasian.delectable.deleuzian.delian.deliberate.delicate.delirious.delphic.delta.demure.depressurized.derridean.destined.devout.dewy.dexterous.diaphanous.diced.dickensian.dickian.dickinsonian.didactic.dieselpunk.diffident.digital.dignified.diligent.dimensional.dinky.dionysian.discerning.discreet.disheveled.disparate.distant.distinct.distributed.diurnal.divine.dizzy.docile.docked.dogged.doomed.dorian.dormant.dostoevskian.dotty.doughty.doughy.downy.dozy.draconic.dreamful.dreamy.drifting.dripping.drizzly.droll.drowsy.druidic.dulcet.dun.dunky.durkheimian.dusky.dwarven.dynamic.dystopian.eager.earnest.earthy.eastward.easygoing.ebony.ebullient.eclectic.eclipsed.ecstatic.edenic.edwardian.effervescent.effulgent.effusive.einsteinian.elamite.elastic.elated.eldritch.electric.electronic.elegant.elegiac.elgarian.eliotian.eliotic.elizabethan.ellingtonian.eloquent.elusive.elven.elvish.elysian.embered.emergent.eminent.emphatic.emulsified.enchanted.encoded.encrypted.endearing.endless.endogenous.energetic.enhanced.enigmatic.enthralling.ephemeral.epic.epicurean.equanimous.errant.erudite.escherian.esoteric.esteemed.eternal.ethereal.ethiopian.etruscan.euclidean.eulerian.euphonious.euphoric.evanescent.evening.eventide.everlasting.evocative.exacting.exalted.exemplary.exo.exogenous.expansive.expressive.exquisite.extraterrestrial.extruded.exuberant.fabled.fabulous.facetious.faithful.fallow.fanciful.fantastic.faradayic.faraway.farmhouse.fastidious.fated.fateful.fathomless.faulknerian.faunal.fearless.feathered.feathery.fecund.federated.feisty.felicitous.felliniesque.fenny.fermented.ferny.ferrous.fervent.fervid.festive.fetching.fey.fickle.fierce.fiery.filleted.filtered.fitzgeraldian.fizzy.flaky.flamboyant.flamed.flashy.flawless.fleecy.fleet.fleeting.flexible.flickering.flinty.floral.florid.flouncy.flourishing.flowering.fluent.fluffy.fluid.fluvial.foamy.folded.fond.foraged.forged.formidable.forthright.fortuitous.forward.foucauldian.fourier.fractal.fragrant.frank.frankish.freckled.free.fresh.freudian.friedmanite.frisky.frizzy.frolicsome.frosted.frosty.frothy.frozen.frugal.fruiting.fruity.funky.furred.furtive.futuristic.fuzzy.gaelic.galactic.galbraithian.galilean.gallant.gallic.galvanic.gamesome.gamma.gandhian.garlanded.garrulous.gauguinesque.gaussian.gauzy.generous.genetic.genial.genomic.genteel.gentle.geomagnetic.georgian.gershwinesque.ghostly.giant.gibsonian.giddy.gifted.giga.giggly.gilded.giottesque.glacial.glad.glazed.gleaming.gleeful.glimmering.glistening.glorious.glossy.glowing.gnomish.godardian.godelian.goethean.goethesque.gogolian.golden.gooey.goofy.gorgeous.gorsy.gossamer.gothic.gowned.goyaesque.graceful.gracious.grainy.grand.grassy.grated.gravitic.gregarious.grilled.groovy.ground.grounded.guileless.gushy.gusty.habermasian.habsburg.hadrianic.halcyon.hale.hallowed.haloed.halved.hamiltonian.han.handelian.handmade.handsome.hanoverian.hapless.happy.hardy.hardyesque.harmonious.hashed.haunted.haydnesque.hayekian.hazy.heady.heaneyesque.hearthside.hearty.heathen.heathered.heavenly.hegelian.heideggerian.heinesque.heinleinian.heirloom.heisenbergian.heliacal.hellenic.hellish.hemingwayesque.herbal.herbertian.herculean.hermetic.heroic.hexed.hibernal.hilbertian.histrionic.hitchcockian.hittite.hoar.hoary.hobbesian.hobbitish.hogarthian.holderlinian.holo.holographic.holy.homerian.homeric.homeward.honest.honeyed.honky.hooded.hooved.hopeful.hopkinsian.hopperesque.hoppy.horatian.horned.hospitable.hot.housemade.huggy.humble.humean.humming.humorous.hunky.hunnish.hurrian.hushed.hydraulic.hyper.hyperborean.hypersonic.hyperspatial.hypnotic.iberian.ibsenite.iced.icy.ideal.idyllic.igneous.illustrious.imaginative.immaculate.immense.immortal.impassioned.impeccable.impetuous.impish.impressive.incan.incandescent.incisive.incorrigible.indefatigable.indelible.indigo.indolent.indomitable.industrious.ineffable.inexorable.infernal.infinite.infra.infrared.infused.ingenious.ingenuous.inimitable.innocuous.inquisitive.insatiable.inspired.intense.intergalactic.interstellar.intragalactic.intrepid.intricate.intrinsic.intuitive.inventive.inveterate.invincible.inward.ionian.ionic.ionospheric.irenic.iridescent.irrepressible.ithacan.itinerant.ivory.jacobean.jammy.jangly.jaunty.jazzy.jeffersonian.jiggly.jingly.jocular.jocund.johnsonian.jolly.jouncy.jovial.jovian.joycean.joyful.joyous.jubilant.judicious.juiced.juicy.jumped.jumpy.jungian.junky.justinianic.jute.kafkaesque.kandinskian.kantian.keatonesque.keatsian.keen.keplerian.keynesian.kierkegaardian.kindly.kindred.kinetic.kiplingesque.klimtian.knowing.kooky.kubrickian.kurosawan.lacanian.laconic.lacquered.lacustrine.lacy.lamarckian.lambda.lambent.laminated.landed.languid.lanky.laplacian.larkinesque.laser.latent.lathed.latin.lattice.laudable.launched.laureled.lavish.layered.leaden.leafy.lean.learned.legendary.leguinian.leibnizian.lemian.lemurian.lenient.leonardesque.liberal.libyan.lidar.light.lighthearted.likable.lilac.lilting.liminal.limpid.lincolnesque.lingering.linnaean.lissome.lisztian.literate.lithe.littoral.lively.loamy.local.lockean.lofty.logical.loopy.loose.loquacious.lorcaesque.lorcan.lossless.lossy.lovecraftian.lovelacean.loyal.lucent.lucid.lucky.ludic.lukewarm.luminal.luminous.lunar.luscious.lush.lushy.lusitanian.lustrous.lydian.lynchian.lyotardian.lyric.lyrical.macerated.machiavellian.macro.magical.magnanimous.magnetar.magnetic.magnetospheric.magnificent.magrittean.mahlerian.majestic.mallarmean.malleable.malthusian.malty.mandelan.manetesque.manifold.marbled.marshy.martial.martian.marvelous.marxian.maser.masked.masterful.matchless.matin.matissean.mature.matutinal.mauve.maverick.mawkish.maxwellian.mayan.meandering.mechanical.median.medicean.mega.mellifluous.mellow.melodic.mendelian.merciful.mercurial.merovingian.merry.meshed.meta.metamorphic.meteoric.meticulous.metternichian.mettlesome.michelangelesque.micro.microwave.midnight.mighty.mild.milled.miltonian.miltonic.minced.mindful.mineral.ming.mingusian.minoan.minty.miraculous.mired.miroesque.mirthful.mischievous.misty.mobile.modest.modular.molecular.molieresque.momentous.mondrianesque.monetian.monkish.mono.montane.moonless.moonlit.mordant.morning.mossy.motley.mottled.mouthwatering.mozartian.mughal.multiversal.munificent.murmuring.mushy.musical.mutable.mutant.mycenaean.mysterious.mystical.mythic.nabokovian.nameless.nano.nanoscale.napoleonic.narrowband.nascent.natty.neat.nebular.nebulous.nefarious.neptunian.nerudian.networked.neural.neutron.neutronic.newtonian.nietzschean.nifty.nimble.noble.nocturnal.nonchalant.nonpareil.noontide.norse.northward.nostalgic.notable.novel.nozickian.nuanced.nubian.nuclear.numinous.nutty.oaky.obdurate.oblique.observant.obstinate.obtuse.oceanic.ochre.odyssean.olden.olympian.omega.omni.onward.opaline.opportune.optical.optimistic.opulent.oracular.orbital.orbiting.orderly.original.ornate.orphic.orwellian.osirian.ostentatious.otherworldly.otiose.ottoman.outgoing.outspoken.outward.overcast.overclocked.ovidian.pacific.pagan.painstaking.palatial.pale.pallid.palpable.paradisal.paradoxical.parallel.paramount.parkerish.parsonian.parthian.passionate.pastoral.patched.pathless.patient.pavlovian.peaceable.peaceful.peachy.pearly.peaty.pebbly.peeled.peered.peerless.pelagic.pellucid.penetrating.pensive.peppered.peppery.peppy.perceptive.perennial.perfect.perfumed.perky.persian.persistent.perspicacious.persuasive.pert.pervasive.pessoan.petaled.petrarchan.phantom.pharaonic.phased.philosophical.phlegmatic.phoenician.photonic.photospheric.phrygian.picassoesque.pickled.pictish.picturesque.pillowy.pindaric.pinteresque.piping.piquant.pirandellian.pithy.pivotal.pixelated.placid.planckian.planetary.planetoid.plangent.plasmic.plathian.platinum.platonic.playful.pleasant.plentiful.pliant.plinky.plonky.plucky.plumed.plummy.plush.plushy.plutonian.plutonic.pneumatic.poached.poesque.poetic.poignant.poised.polished.polite.pollockian.poly.polygonal.polymer.polynesian.popean.popped.popular.portly.posh.positronic.posthuman.potent.pouncy.powdery.powerful.pragmatic.prancy.precise.precocious.precognitive.preeminent.premier.prescient.pressed.pressurized.prestigious.pretty.primeval.primordial.princely.printed.pristine.private.prized.prodigious.profane.proficient.profound.profuse.prokofievian.prolific.promethean.prompt.proper.prophetic.prosaic.prosperous.protean.proto.protostellar.proud.proustian.providential.prudent.psionic.puccinian.puckish.pudgy.puffed.pulled.pulsar.punctilious.punctual.pungent.punic.pure.purposeful.pushkinian.pynchonesque.pythagorean.quaint.quantum.quartered.quasar.questing.quick.quiescent.quiet.quintessential.quirky.quixotic.rabelaisian.racinian.radar.radiant.radio.rainwashed.rainy.rakish.rambunctious.raphaelesque.rapid.rapturous.rare.rational.ravelian.rawlsian.raytraced.ready.reasonable.rebooted.receptive.recondite.recursive.redolent.reduced.reedy.refined.reflective.refulgent.regal.relativistic.relaxed.reliable.remarkable.rembrandtesque.remote.rendered.renoiresque.renowned.replete.replicated.resilient.resinous.resolute.resourceful.respectful.resplendent.responsive.restful.restive.restless.reticent.retro.reverent.rhapsodic.rhodian.rhythmic.ricardian.rich.richelieuvian.riemannian.rigorous.rilkean.rimbaudian.rimed.ringed.ripe.ripening.rippling.risible.riverine.riveted.roaming.roaring.roasted.robed.robotic.robust.rolled.roly.roman.romanov.romantic.rompy.rooseveltian.roseate.rosy.rothkoesque.rousing.rousseauian.rowdy.royal.rubenesque.ruddy.runic.rushy.russet.rustic.sabine.sable.sacred.sagacious.sage.saintly.salient.saline.salingeresque.salted.salty.salubrious.samian.sandaled.sandy.sanguine.sapid.sapient.sapphic.sardonic.sarmatian.sartrean.sassy.satiny.saturnian.saturnine.saucy.savory.savvy.saxon.scalding.scarlet.schielesque.schillerian.schoenbergian.scholarly.schubertian.schumannesque.schumpeterian.scintillating.scorched.scorsesean.scrappy.scruffy.scrupulous.scythian.seaborne.seamless.seared.seasonal.seaward.secure.sedate.sedgy.sedimentary.sedulous.seemly.seismic.selenic.selfless.sensible.sensitive.sentient.sentimental.seraphic.sere.serene.seuratian.shaded.shadowed.shadowy.shaggy.shaken.shakespearean.shamanic.shannonian.sharded.sharp.shaved.shavian.shelleyan.shielded.shimmering.shiny.shoreless.shostakovian.shrewd.shucked.sibelian.sibilant.sibylline.sicilian.sidereal.sienna.sifted.sigma.silicon.silken.silky.silly.silty.silver.silvered.simmering.simulated.sincere.singed.singing.singular.sinuous.sisyphean.sizzling.skeptical.skillful.skinnerian.skittish.skyward.sleek.sleepless.sleepy.slender.sliced.slick.slipstreamed.slow.sly.smart.smashy.smithian.smoked.smoky.smoldering.smooth.snappy.snazzy.snoozy.snowy.snug.snuggly.soaring.sociable.socratic.sodden.soft.sogdian.solar.solarpunk.solemn.solid.somnolent.sonar.song.sonic.sonorous.sooty.soporific.soulful.sound.soundless.sour.southward.sovereign.spaceborne.spacefaring.spacious.sparkling.sparkly.spartan.special.speckled.spectacular.spectral.speedy.spellbound.spiced.spicy.spielbergian.spiffy.spinozan.spirited.splashy.splendid.split.sploshy.spontaneous.spooky.sporty.spotless.spotted.sprightly.sproingy.spry.spun.spunky.squally.squashy.squelchy.squiggly.squishy.staid.stainless.stalwart.starborn.starfaring.starless.starlit.stasisbound.stately.steadfast.steady.steaming.steampunk.steely.steeped.steinbeckian.stellar.stellarborn.sticky.stirred.stirring.stoic.stoical.stolid.stompy.stoppardian.storied.stormy.stout.strained.stratospheric.straussian.stravinskian.streaky.stretched.striking.strindbergian.striped.strong.stuart.stubby.studious.stunning.sturdy.stygian.suave.subatomic.sublime.suborbital.subsonic.substantial.subtle.succinct.succulent.sudsy.sugared.sugary.sumerian.summery.sunless.sunlit.sunny.sunward.superb.supergalactic.superlative.superluminal.supersonic.supple.supreme.sure.surreptitious.svelte.swanky.sweeping.sweet.swift.swiftian.swirled.swooshy.sylvan.sympathetic.synaptic.synchronous.synthetic.syrupy.tableside.tachyonic.taciturn.talented.talleyrandian.tame.tang.tangy.tarantinoesque.tarkovskian.tart.tasteful.tattered.taut.tawny.tectonic.telekinetic.telepathic.temperate.tempered.temporal.tenacious.tender.tennysonian.tenuous.tepid.tera.terran.terrific.terse.textured.thackerayan.thankful.thawed.theban.thessalian.theta.thorny.thorough.thoughtful.thracian.threadbare.thriving.thundery.tidal.tidy.timeless.timely.timeworn.tinkly.tiny.tipsy.tireless.titanesque.titanian.titanic.titanium.titianesque.toasted.toasty.tocharian.tokenized.tolerant.tolkienesque.tolstoyan.tonic.tonky.toothsome.torched.totemic.tough.towering.trackless.tranquil.transcendent.transhuman.treacly.treasured.tremendous.tremulous.trenchant.tricky.trim.triumphant.trojan.trollopian.truculent.true.truffautian.truffled.trusty.truthful.tudor.turbo.turingian.turneresque.twangy.twilight.twilit.twinkling.twinkly.ubiquitous.ultra.ultrasonic.ultraviolet.umami.umber.unassuming.unbounded.uncanny.uncorked.unctuous.undaunted.underworldly.undocked.undying.unearthly.unerring.unflappable.unique.unknown.unruffled.upbeat.upgraded.upright.upstanding.upward.uranian.urbane.utopian.vacuous.valeryan.valiant.valorous.vandal.vangoghian.vast.veblenian.vectorized.vedic.vehement.veiled.velazquezian.velvet.velvety.venerable.venturous.venusian.veracious.verbose.verdant.verdian.verdurous.verlainian.vermeerian.vermilion.vernal.verneian.versatile.vesper.vespertine.vibrant.victorian.vigilant.vigorous.vintage.violet.virgilian.virtual.virtuous.visceral.vital.vivacious.vivid.vocal.voidborn.voidward.volcanic.voltairean.voluble.vonnegutian.voracious.voxel.vroomy.wacky.wagnerian.wakeful.waking.wan.wandering.warholian.warm.warped.wary.washingtonian.wayward.wealthy.weathered.weberian.welcome.welded.wellesian.wellsian.westward.whacky.whimsical.whimsy.whipped.whisked.whispering.whistlerian.whitmanesque.whole.wholesome.whooshy.wide.wiggly.wild.wildean.willowy.wilsonian.wily.windswept.windy.winged.winning.winsome.wintry.wired.wireframe.wireless.wise.wishful.wispy.wistful.wittgensteinian.witty.wobbly.wodehousian.wondrous.wonky.wooded.woody.woolly.woozy.wordless.wordsworthian.wormholed.worthy.wraithlike.wreathed.wriggly.wry.xenial.xeno.yanky.yearning.yeasty.yeatsian.young.youthful.yuletide.yummy.zany.zappy.zealous.zested.zestful.zesty.zeta.zingy.zippy.zodiacal.zonked.zonky.zoomy.zoroastrian`.split(`.`),K_=`abalone.absinthe.absyrtus.accelerator.achilles.acorn.acquerello.actuator.adobo.adonis.aeetes.aegis.aello.aeneas.aengus.aether.affogato.afterburner.agartha.agate.agni.agnolotti.aioli.airlock.ajax.aji.albatross.alder.ale.alecto.aleppo.alfheim.allegory.alliteration.almond.amaranth.amaretto.amaterasu.ambrosia.americano.amphiaraus.anago.anapest.ancho.anchovy.android.andromeda.anise.annal.annwn.ansible.antaeus.antenna.anthem.antigone.antimony.antistrophe.anubis.aoidos.aperol.aphelion.aphrodite.apogee.apollo.apple.apricot.aquamarine.aquavit.aqueduct.arabica.arachne.arawn.arbor.arborio.arc.arcadia.arch.archipelago.ares.argo.argon.argonaut.aria.ariadne.ark.arke.armagnac.array.arrow.artemis.arthur.artichoke.artifact.arugula.asgard.asgardia.ash.asparagus.aspen.assam.assonance.asteroid.astronaut.atalanta.athena.atlantis.atlas.atoll.atom.atropos.aubergine.augean.aura.aurora.avalon.avalonia.avocado.awning.axion.axle.azurite.bacchus.bagna.baharat.balder.ballad.balladeer.banana.banshee.baozi.bard.barge.barium.barley.barn.basalt.basil.basilisk.basmati.bastet.bastion.bay.bayleaf.beacon.beam.bean.bearing.beech.beetroot.behemoth.bellini.beowulf.bergamot.berth.beryl.beryllium.bifrost.biodome.birch.biscotti.bismuth.bisque.bit.bittern.blackberry.blast.blaster.blini.block.blodeuwedd.bloodstone.blossom.bluebell.blueberry.bolt.bomba.bonito.boom.borage.boson.botargo.bottarga.bouillon.boundary.bow.bower.bragi.bramble.bran.branch.brandy.branwen.breeze.brew.bridge.brigid.brioche.broccoli.brook.brulee.brunhild.brush.bucatini.buckler.buckwheat.buffer.bulkhead.bunting.burrata.burst.bus.busiris.butte.butter.buttercup.butterscotch.byte.cabbage.cabin.cacao.cachaca.cache.cacus.cadence.caesura.calamarata.calamari.calcite.caldera.calliope.calvados.calypso.cam.camellia.camelot.camembert.campari.canal.cannelloni.cannoli.canopy.cantaloupe.cantata.canticle.canvas.canyon.canzone.capacitor.capellini.caper.capon.cappelletti.cappuccino.capsule.caramel.cardamom.cardoon.carillon.carnaroli.carnation.carol.carrier.carrot.cascade.cashew.cassandra.cassis.castle.castor.cavatelli.caviar.cayenne.cedar.celaeno.celeriac.cell.centaur.cerberi.cerberus.cernunnos.ceryneian.cesium.ceto.ceylon.chaff.chaffinch.chai.chain.chalk.chamomile.champagne.chandra.channel.chanson.chanterelle.chard.charon.chartreuse.cheddar.cherry.chert.chervil.chestnut.chickweed.chicory.chili.chime.chimera.chimichurri.chimney.chip.chipotle.chirashi.chiron.chive.chocolate.chorale.chorizo.chorus.chronicle.chrysanthemum.chrysaor.chrysomallus.chutney.ciabatta.cibola.cider.cilantro.cinder.cinnamon.cipher.circe.circlet.circuit.cirque.cistern.citadel.citrine.citron.clementine.cliff.clio.clipper.cloak.clotho.cloud.clove.clover.cluster.coal.cobbler.cockaigne.cockpit.cocoa.coconut.codex.coffee.cog.cognac.coif.coil.col.colchis.collider.colony.combe.comet.compote.concerto.conchiglie.conduit.confit.console.consomme.consonance.continuum.contour.cookies.coordinate.core.coriander.cormorant.corona.coronet.cortado.corvette.cosmos.cottage.couplet.course.couscous.cove.cowl.cowslip.crab.craft.crag.cranberry.crane.crayon.cream.creme.crepe.cress.crocus.croissant.crosne.crown.cruiser.crumble.cryopod.cryosleep.crystal.cuchulainn.cuckoo.cucumber.cuirass.cumin.cupid.curlew.currant.current.curry.custard.cyborg.cycle.cyclops.cyclotron.cylinder.dactyl.daedalus.daemon.daffodil.dagda.dahlia.daiquiri.dais.daisy.dale.dam.dandelion.danu.daphne.darjeeling.dart.dashi.date.dawn.daydream.deck.deirdre.demeter.destroyer.dew.diadem.diary.dill.dimension.diode.diomedean.dionysus.ditalini.ditch.djinn.dock.doenjang.domain.donburi.donjon.door.doppio.dove.downlink.dreadnought.dream.drift.droid.dryad.dukkah.dulce.dumpling.dune.durga.dusk.dust.dyke.eagle.earlgrey.easel.echidna.echo.eclair.eclipse.ecliptic.edamame.eddy.edelweiss.edge.egret.einsteinium.elderflower.eldorado.electra.elegy.elm.elysium.ember.endive.enigma.enjambment.enkidu.envoi.eos.epigram.epistle.epode.erato.erinyes.eros.erymanthian.escargot.espresso.estuary.eumenides.euryale.eurybia.eurydice.eurytion.excalibur.exoplanet.fable.fafnir.falcon.fancy.farfalle.fate.feather.feldspar.fell.fence.fennel.fenrir.fenugreek.fermion.fern.fettuccine.fiddlehead.field.fig.finch.finn.fionn.firebird.firefly.fission.fizz.fjord.flake.flame.flare.flash.flicker.flint.flue.fluorite.flux.flywheel.focaccia.fog.folio.fondant.forge.fortress.foxglove.fragment.fraise.frame.frangipane.frappe.freesia.fregola.freighter.freya.frigate.frigg.frost.fudge.fugue.fumarole.furies.fusilli.fusion.gaia.galahad.galangal.galatea.galaxy.galette.galleon.gallium.ganache.ganesh.gannet.gantry.ganymede.garam.gardenia.garlic.garuda.gateway.gauntlet.gawain.gazebo.gear.gelato.gemelli.genmaicha.genoise.geranium.germ.germanium.geryon.geyser.ghazal.ghee.ghost.gilgamesh.ginger.gingko.ginnungagap.girder.glacier.glade.glaze.gleam.gleeman.glen.glimmer.glint.glitter.gloss.glow.gluon.gnocchi.gochujang.goldfinch.golem.goose.gooseberry.gorgon.gouda.governor.gradient.graeae.granary.granite.grapefruit.grappa.gratin.graviton.greave.grebe.gremolata.grenadine.grendel.grid.griffin.gruyere.guajillo.guava.gudrun.guinevere.gunkan.gwydion.gyoza.gyroscope.habanero.habitat.hades.hadron.haiku.hall.halloumi.halo.halva.hamachi.hangar.hanuman.harissa.harpies.harpy.harvest.hatch.hauberk.hawthorn.haze.hazel.hazelnut.heading.headland.heap.heart.hearth.heather.hecate.hedge.heimdall.hel.helheim.helios.helium.helix.helle.hellebore.helm.hemistich.hephaestus.hera.hermes.heron.hesperides.hestia.hibiscus.hippogriff.hirame.hive.hoisin.hojicha.hollandaise.hollow.holly.hologram.honey.honeycomb.honeysuckle.hood.hoopoe.horizon.horseradish.horus.hrothgar.hub.huckleberry.hue.huginn.hull.husk.hut.hyacinth.hydra.hydras.hylas.hymn.hyperborea.hypercube.hyperdrive.hyperion.hyperspace.hyssop.iamb.ibis.icarus.idas.idunn.idyll.igniter.igraine.ikura.indium.indra.inductor.infusion.injector.ink.inlet.inspiration.ion.iridium.iris.ishtar.isis.isolde.isotope.ivy.iwashi.izanagi.jackdaw.jackfruit.jalapeno.janus.jasmine.jason.jasper.javelin.jay.jet.jiaozi.jongleur.jonquil.jormungandr.jotunheim.journal.julep.jumpgate.juniper.juno.jupiter.kaffir.kale.kali.kampachi.karaage.karasumi.katsu.keel.keep.kefir.kelpie.kenning.kernel.kestrel.khinkali.kiln.kimchi.kingfisher.kinmedai.kirsch.kite.kitsune.kiwi.koan.kohlrabi.kombucha.koshihikari.kraken.krypton.kumquat.kvass.lachesis.lacquer.ladon.ladons.laertes.lager.lagoon.lake.lakshmi.lambic.lament.lance.lancelot.lander.lane.langoustine.lantern.lapis.lark.larkspur.lasagna.latte.laureate.laurel.lava.lavender.leaf.leda.leek.legend.lemon.lemonbalm.lemongrass.lemuria.lens.lentil.lepton.lernaean.lethe.letter.levee.lever.leviathan.lightyear.lily.lime.limerick.limoncello.linden.linguine.link.linnet.lir.lithium.lityerses.lobster.loch.lock.lodge.loki.loop.loquat.lotus.lovage.lugh.lullaby.lungo.luster.lychee.lynceus.lyonesse.lyricist.macadamia.macaron.macchiato.madai.madeleine.madrigal.magma.magnolia.magpie.mail.mainframe.maki.makrut.malachite.manannan.mango.manicotti.manor.manti.manticore.mantle.mantou.manuscript.maple.marble.marduk.margarita.marigold.marjoram.marquee.marrow.martini.marvel.marzipan.masago.masala.mascarpone.mast.matcha.matrix.mead.meadow.mech.medea.medusa.megaera.meleager.memoir.mentaiko.mercury.meringue.merlin.merlot.mesa.mesh.metaphor.meteor.meter.mezcal.mezzaluna.mica.midas.midgard.mill.mimir.mimosa.minerva.minotaur.minstrel.mint.minuet.miracle.mirin.mirror.miso.missive.mist.mjolnir.mocha.module.moira.mojito.molasses.mole.momo.monolith.moonbase.moonbeam.moonstone.moor.mopsus.mordred.morel.morgana.morpheus.morrigan.moss.mote.motet.mousse.mu.mulberry.muninn.muon.muse.muspelheim.mustard.myrtle.mystery.myth.nadir.naga.naiad.nanite.nanobot.narcissus.neapolitan.nebula.nectarine.needle.negroni.nemean.nemesis.neon.neptune.neptunium.nereid.nereus.nessus.nest.nestor.net.nettle.neutrino.nexus.niamh.nib.nibble.nibiru.niflheim.nightingale.nigiri.nike.niobe.njord.nocturne.node.nog.nori.norn.note.nougat.nova.nozzle.nuada.nutmeg.nyx.oak.oasis.oat.obelisk.oberon.obsidian.oceanid.oceanus.octave.octavo.ocypete.ode.odin.odysseus.oisin.okonomiyaki.olive.olympus.oni.onigiri.oolong.oracle.orange.orb.orbit.orbiter.orchard.orchid.oreads.orecchiette.oregano.orion.orpheus.orthros.orthrus.orzo.oscillator.osiris.osmium.osprey.ouroboros.outline.outpost.ouzo.oven.overture.owl.oyster.paccheri.packet.padron.page.palace.palette.palladium.palm.pan.pandan.pandora.panettone.pansotti.pansy.pantoum.papaya.pappardelle.paprika.papyrus.parable.paradox.parcae.parchment.parfait.parmesan.parsec.parsley.parsnip.particle.partridge.parvati.pasilla.passionfruit.pastel.pastis.patina.pavilion.pavlova.peach.peak.pear.pebble.pecan.pegasi.pegasus.pekoe.peleus.pelican.pelmeni.pen.pencil.penelope.penne.peony.pepper.peppermint.percival.peregrine.pergola.peridot.perigee.perihelion.perry.persephone.perseus.persillade.persimmon.pesto.petal.petrel.phase.pheasant.phoenix.pholus.phorcys.photon.phrixus.pickle.pierogi.pigment.pimento.pine.pineapple.ping.pinot.pipe.pipit.piquillo.pisco.pistachio.piston.pith.plane.plasma.plate.plover.plum.plume.pluto.plutonium.poblano.pod.podarge.poet.polenta.pollux.polyphemus.pomegranate.pomelo.pond.pontus.ponzu.pooka.pool.poplar.poppy.porcini.port.portal.porter.porthole.poseidon.positron.prairie.praline.prelude.primrose.prism.probe.profile.prometheus.prosciutto.prosecco.proteus.protocol.psalm.psyche.pudding.puffin.pulse.pumice.pumpkin.purslane.pwyll.pylon.pyrrhic.quadrant.quail.quark.quarto.quartz.quatrain.qubit.quetzalcoatl.queue.quill.quince.quinoa.quiver.radish.radium.radon.ragnarok.rain.rama.ramen.ramp.rampart.ramson.raspberry.ratatoskr.raven.ravioli.ray.reactor.realm.reaper.reed.reef.refrain.region.register.relay.relic.remnant.requiem.reservoir.residue.resistor.resonator.reverie.rhapsode.rhapsody.rhea.rhiannon.rhodium.rhododendron.rhubarb.rhyme.ricotta.riddle.ridge.riesling.rigatoni.rim.ring.risotto.ristretto.river.roast.robin.robusta.roc.rocket.rod.romesco.rondeau.rooibos.rook.root.rose.rosemary.rosewater.roundel.rover.rowan.rubidium.rum.rune.saba.saffron.saga.saison.sake.salmoriglio.salsa.salsify.sambal.sambuca.samphire.sancerre.sandpiper.sangria.sanma.sansho.saraswati.sashimi.sasquatch.satellite.satyr.sauternes.savanna.sawara.sazerac.scaffold.scalar.scallop.scansion.scepter.schnapps.schooner.scop.scorzonera.scotchbonnet.scroll.sector.seed.sekhmet.selene.selenite.selenium.selkie.sencha.sensor.sequoia.serenade.serrano.servo.sesame.sestina.sextet.shack.shade.shadow.shaft.shale.shallot.shambhala.shard.shed.sheen.sherbet.sherry.shield.shimmer.ship.shishito.shiso.shiva.shoyu.shrub.shumai.shuttle.sibyl.sif.signal.sigurd.silhouette.silo.simile.simurgh.singularity.siren.sita.skadi.skald.skiff.skuld.skylark.slant.slate.sleipnir.sling.slipstream.sliver.sloop.sluice.smithy.smoke.snowdrop.socket.sofrito.sonata.sonnet.soot.sorbet.sorrel.souffle.soul.soy.spaceport.spaghetti.spark.sparkle.sparrow.spear.speck.specter.speculoos.spelt.sphere.sphinx.sphinxes.spindle.spinel.spiral.spire.spirit.splinter.spoke.spondee.spore.spring.spritz.spruce.sriracha.ssamjang.stack.stanza.starbase.starlight.starling.starport.starship.stasis.station.steam.stellarator.steppe.stheno.stork.stracciatella.strawberry.stream.strontium.strophe.strozzapreti.strut.stylus.stymphalian.styx.subspace.sumac.summit.sunbeam.sunstone.supernova.surge.surya.susanoo.sushi.svartalfheim.swallow.swan.swarm.sycamore.syleus.synchrotron.tabard.tachyon.tagliatelle.tahini.takoyaki.taliesin.tamari.tamarind.tangerine.tanka.tanker.tapenade.tapioca.tarako.taranis.tare.tarn.tarragon.tartarus.telamon.telemetry.teleporter.tellurium.temaki.tempura.tengu.tensor.tent.tequila.tercet.teriyaki.terminal.tern.terraform.tesseract.tethys.thalassa.thalia.thallium.thaumas.themis.theseus.thistle.thor.thorium.thoth.threshold.throne.throttle.thrush.thruster.thule.thunderbird.thyme.tiamat.tiara.tide.tint.tintagel.tiphys.tiramisu.tirnanog.tisane.tisiphone.titan.tobiko.toccata.toddy.toffee.tofu.tokamak.tomatillo.tomato.tome.tone.tonka.tonkatsu.tor.tortellini.torus.tourmaline.tower.trace.track.transducer.transistor.treacle.trellis.triolet.tristan.triton.trochee.trofie.trope.troubadour.trouvere.truffle.trunk.truss.tug.tulip.tundra.tungsten.turbine.turmeric.turquoise.turret.twinkle.typhon.tyr.udon.ulysses.unagi.uni.unicorn.uplink.uramaki.urania.uranium.urd.urfa.uther.vale.valhalla.valkyrie.valve.vanadium.vanaheim.vanilla.vapor.vareniki.varnish.varuna.vector.veil.vellum.vent.venus.verbena.verdandi.verge.verjus.vermouth.verse.vessel.vesta.vestige.vialone.viewport.villanelle.vishnu.vodka.volcano.volta.volume.vortex.vulcan.wall.walnut.waltz.warbler.warpgate.wasabi.wash.watercress.watermelon.wave.waypoint.web.weir.well.wendigo.wheat.whisky.whisper.wiglaf.willow.wimple.window.wisteria.wonder.wonton.woodcock.woodpecker.word.wormhole.wraith.wren.wyrm.wyvern.xenon.yacht.yakitori.yama.yarrow.yeti.yew.yggdrasil.yokai.yuzu.zaatar.zabaglione.zenith.zephyr.zeus.zinnia.zircon.zirconium.ziti.zone.zucchini`.split(`.`);G_.length*K_.length;const q_=new Set([`webhook`,`cron`,`sprinkle`,`fswatch`,`session-reload`,`navigate`,`discovery`,`upgrade`,`workflow`,`bash`,`jshd`,`preview`,`scoop-notify`,`scoop-idle`,`scoop-wait`,`sudo-request`]);function J_(e){return e!=null&&q_.has(e)}const Y_=new Set([`send_message`,`list_scoops`,`list_tasks`,`sudo_request`,`list_sudo_requests`,`lick_confirm`,`lick_dismiss`]),X_=65536;function Z_(e,t=X_){return e.length<=t?e:`${e.slice(0,t)}\n… [tool output truncated for the chat transcript: showing ${tv(t)} of ${tv(e.length)} — the agent received the full output]`}function Q_(e,t=X_,n=4){if(typeof e==`string`)return Z_(e,t);if(typeof e!=`object`||!e||n<=0)return e;if(Array.isArray(e)){let r=null;for(let i=0;i<e.length;i++){let a=Q_(e[i],t,n-1);a!==e[i]&&(r??=[...e],r[i]=a)}return r??e}let r=null;for(let[i,a]of Object.entries(e)){let o=Q_(a,t,n-1);o!==a&&(r??={...e},r[i]=o)}return r??e}function $_(e,t=X_){if(!e)return e;if(!bn().test(e))return Z_(e,t);let n=Z_(e.replace(bn(),``).trim(),t);return n.length>0?`${n}\n[screenshot omitted from transcript]`:`[screenshot]`}function ev(e,t=X_){if(e.length<=t)return e;if(!bn().test(e))return Z_(e,t);let n=[],r=0;for(let i of e.matchAll(bn()))n.push(Z_(e.slice(r,i.index),t)),n.push(i[0]),r=(i.index??0)+i[0].length;return n.push(Z_(e.slice(r),t)),n.join(``)}function tv(e){return e>=1048576?`${(e/1048576).toFixed(1)} MB`:`${Math.round(e/1024)} KB`}var nv=e({agentMessagesToChatMessages:()=>rv,lickChannelFromBody:()=>vv,lickChannelFromSenderName:()=>_v,lickIdFromBody:()=>yv,splitEnvelopes:()=>gv,unwrapMessageEnvelope:()=>hv});function rv(e,t={}){let{source:n=`cone`,idSeed:r=mv,hiddenToolNames:i=Y_,uncapped:a=!1}=t,o=[],s=null,c=new Set;for(let t of e)sv(t)?(o.push(...iv(t,r)),s=null):cv(t)?(s=av(t,n,r,i,c,a),o.push(s)):lv(t)&&ov(t,s,c,a);return o}function iv(e,t){let n=uv(e.content);if(n.length===0)return[];let r=[];for(let i of gv(n)){if(i.body.length===0&&i.sender==null)continue;let n=(i.sender?_v(i.sender):null)??vv(i.body),a=n?yv(i.body):void 0,o={id:n===`sudo-request`&&a?`sudo-request-${a}`:t(),role:`user`,content:i.body,timestamp:e.timestamp};n&&(o.source=`lick`,o.channel=n,a&&(o.lickId=a)),r.push(o)}return r}function av(e,t,n,r,i,a=!1){let o=[];for(let t of pv(e,a))r.has(t.name)?i.add(t.id):o.push(t);let s={id:n(),role:`assistant`,content:uv(e.content),timestamp:e.timestamp,source:t,model:e.model},{usage:c}=e;return c&&(s.usage={input:c.input,output:c.output,cacheRead:c.cacheRead,cacheWrite:c.cacheWrite,cost:{input:c.cost.input,output:c.cost.output,cacheRead:c.cost.cacheRead,cacheWrite:c.cost.cacheWrite,total:c.cost.total}}),o.length>0&&(s.toolCalls=o),s}function ov(e,t,n,r=!1){if(n.has(e.toolCallId))return;let i=t?.toolCalls?.find(t=>t.id===e.toolCallId);if(!i)return;let a=uv(e.content);i.result=r?a:Z_(a),i.isError=e.isError}function sv(e){return e.role===`user`}function cv(e){return e.role===`assistant`}function lv(e){return e.role===`toolResult`}function uv(e){if(typeof e==`string`)return e;if(!Array.isArray(e))return``;let t=[];for(let n of e)dv(n)&&t.push(n.text);return t.join(``)}function dv(e){return e.type===`text`}function fv(e){return e.type===`toolCall`}function pv(e,t=!1){if(!Array.isArray(e.content))return[];let n=[];for(let r of e.content)fv(r)&&n.push({id:r.id,name:r.name,input:t?r.arguments:Q_(r.arguments)});return n}function mv(){return Date.now().toString(36)+Math.random().toString(36).slice(2,8)}function hv(e){if(!e.startsWith(`[`))return null;let t=e.indexOf(`] `);if(t<=0||e.lastIndexOf(`
885
+ `,t)!==-1)return null;let n=e.slice(t+2);if(n.startsWith(`User: `))return{sender:`User`,body:n.slice(6)};for(let e of q_){let t=`${e}:`;if(!n.startsWith(t))continue;let r=n.indexOf(`
886
886
  `),i=r===-1?n.length:r,a=n.slice(0,i),o=-1,s=a.indexOf(`[`,t.length);if(s>t.length&&(o=a.lastIndexOf(`: `,s)),o<t.length&&(o=n.indexOf(`: `,t.length)),!(o<0||o>=i))return{sender:n.slice(0,o),body:n.slice(o+2)}}let r=n.indexOf(`
887
887
  `),i=r===-1?n.length:r,a=n.indexOf(`: `);if(a<=0||a>=i)return null;let o=n.slice(0,a);return o.includes(`
888
- `)?null:{sender:o,body:n.slice(a+2)}}function fv(e){if(e.length===0)return[];let t=e.split(`
888
+ `)?null:{sender:o,body:n.slice(a+2)}}function gv(e){if(e.length===0)return[];let t=e.split(`
889
889
  `);if(!t[0].startsWith(`[`))return[{sender:null,body:e}];let n=[],r=null,i=()=>{if(!r)return;let e=r.rest.length>0?`${r.firstLine}\n${r.rest.join(`
890
- `)}`:r.firstLine,t=dv(e);t?n.push({sender:t.sender,body:t.body}):n.push({sender:null,body:e}),r=null};for(let e of t){if(e.startsWith(`[`)&&/^\[[^\]\n]+\] /.test(e)&&e.includes(`: `)&&dv(e)){i(),r={firstLine:e,rest:[]};continue}r?r.rest.push(e):r={firstLine:e,rest:[]}}return i(),n.length===0?[{sender:null,body:e}]:n}function pv(e){let t=e.indexOf(`:`);if(t<=0)return null;let n=e.slice(0,t);return W_(n)?n:null}function mv(e){let t=/^\[@[^\]\s]+ (completed|idle)\]/.exec(e);return t?t[1]===`idle`?`scoop-idle`:`scoop-notify`:/^\[@[^\]\s]+ sudo-request\]/.test(e)?`sudo-request`:/^\[scoop_wait [^\]]+\]/.test(e)?`scoop-wait`:e.startsWith(`[Session Reload]`)?`session-reload`:null}function hv(e){return/^(?:Lick ID|Request ID): (\S+)/m.exec(e)?.[1]}function gv(e){let t=$_(e.messages,{source:e.name}),n=t.filter(e=>e.role===`assistant`).length,r=[`# Agent session: ${e.name}`,``,`- jid: ${e.jid}`,`- exit code: ${e.exitCode}`,`- turns: ${n}`,`- messages: ${e.messages.length}`,`- timestamp: ${e.timestamp}`,``,`## Prompt`,``,e.prompt.length>0?e.prompt:`_(empty prompt)_`,``,`---`,``];if(t.length===0)r.push(`_(no messages captured)_`,``);else for(let e of t)_v(r,e);return Se(r.join(`
891
- `),Ce())}function _v(e,t){e.push(`## ${t.role}`,``);let n=t.content.trim();n.length>0&&e.push(n,``);for(let n of t.toolCalls??[])vv(e,n)}function vv(e,t){e.push(`### tool: ${t.name}`,``,`Input:`,``,"```json",yv(t.input),"```",``),t.result!==void 0&&e.push(t.isError?`Result (error):`:`Result:`,``,"```",t.result,"```",``)}function yv(e){try{return JSON.stringify(e,null,2)??String(e)}catch{return String(e)}}const bv=_(`agent-bridge`),xv=`__slicc_agent`;function Sv(e){for(let t=0;t<8;t++){let t=e.generateName(),n=`agent_${Jv(t)}`;if(!e.orchestrator.getScoops().some(e=>e.jid===n))return t}return e.generateUid()}function Cv(e,t){if(t===void 0)return null;let n=e.getScoops().find(e=>e.jid===t);if(!n)return null;let r=Bn(n);if(!r||r.length===0)return null;let i=Gn(n);return i?{modelId:r,providerId:i}:{modelId:r}}function wv(e,t){let n=e.getWorkUnits(),r=(t===null?null:n.rootOf(t))??n.resolveDefaultRoot();return lr(r?.descriptor.workspace??cr)}function Tv(e,t){if(t===void 0)return null;let n=e.getScoops().find(e=>e.jid===t);if(!n)return null;let r=Wn(n).level;return r&&pr(r)?r:null}function Ev(e,t){let n=e.modelId,r,i;if(n!==void 0){let a=e.modelProviderId!==void 0&&n!==``?`${e.modelProviderId}:${n}`:n,o=a===``?{ok:!1,error:`unknown model: ${n}`}:t(a);if(!o.ok)return{error:{finalText:`agent: ${o.error}`,exitCode:1}};r=o.selection.modelId,i=o.selection.providerId}let a=e.thinkingLevel;if(a!==void 0&&!pr(a))return{error:{finalText:`agent: invalid thinking level: ${String(a)} (one of: ${mr.join(`, `)})`,exitCode:1}};let o=jn(e.workspaceMode);if(!o.ok)return{error:{finalText:`agent: ${o.error}`,exitCode:1}};let s=e.backgroundAfterSeconds;if(s!==void 0&&(typeof s!=`number`||!Number.isFinite(s)||s<0))return{error:{finalText:`agent: invalid backgroundAfterSeconds: ${String(s)} (seconds >= 0)`,exitCode:1}};let c=Dv(e);if(c)return c;let l=e.name;if(l!==void 0&&!Fv(l))return{error:{finalText:`agent: invalid name: ${l} (lowercase tokens joined by single dashes)`,exitCode:1}};for(let[t,n]of[[`maxTurns`,e.maxTurns],[`maxWallClockMs`,e.maxWallClockMs]])if(n!==void 0&&(!Number.isInteger(n)||n<=0))return{error:{finalText:`agent: ${t} must be a positive integer: ${String(n)}`,exitCode:1}};return{resolvedModelId:r,resolvedProviderId:i}}function Dv(e){let t=e.mergeOnSuccess,n=[[`successReceiptPath`,e.successReceiptPath],[`outcomeReceiptPath`,e.outcomeReceiptPath],[`mergeOnSuccess.targetPath`,t?.targetPath],[`mergeOnSuccess.basePath`,t?.basePath],[`mergeOnSuccess.draftPath`,t?.draftPath]],r=t===void 0?void 0:``;for(let[e,t]of n){let n=t??(e.startsWith(`mergeOnSuccess`)?r:void 0);if(n!==void 0&&!n.startsWith(`/`))return{error:{finalText:`agent: ${e} must be absolute: ${String(t)}`,exitCode:1}}}return null}function Ov(e){return/^agent run terminated: .*\bbound\b.*\bexceeded\b/.test(e)}async function kv(e,t){let n=async t=>{try{let n=await e.readFile(t,{encoding:`utf-8`});return typeof n==`string`?n:new TextDecoder().decode(n)}catch(e){if(ny(e,`ENOENT`))return``;throw e}},r=async()=>{for(let n of[t.basePath,t.draftPath])try{await e.rm(n)}catch{}},i=async t=>{try{let n=await e.readFile(t,{encoding:`utf-8`});return typeof n==`string`?n:new TextDecoder().decode(n)}catch(e){if(ny(e,`ENOENT`))return null;throw e}};try{let a=await i(t.draftPath);if(a===null)return await r(),{applied:!1,conflicts:0};let o=await n(t.targetPath);if(a===o)return await r(),{applied:!1,conflicts:0};let s=await i(t.basePath);if(s===null)return{applied:!1,conflicts:0,error:`base snapshot missing; target left as-is`};if(a===s)return await r(),{applied:!1,conflicts:0};if(o===s)return await e.writeFile(t.targetPath,a),await r(),{applied:!0,conflicts:0};let c=On(o,s,a,{favor:`theirs`});return await e.writeFile(t.targetPath,c.content),await r(),{applied:!0,conflicts:c.conflicts}}catch(e){let n=ty(e);return bv.warn(`mergeOnSuccess failed; target left as-is, staging kept`,{target:t.targetPath,error:n}),{applied:!1,conflicts:0,error:n}}}async function Av(e,t,n,r){try{let i=t.slice(0,t.lastIndexOf(`/`));return i&&await e.mkdir(i,{recursive:!0}),await e.writeFile(t,JSON.stringify({status:n.exitCode===0?`ok`:`failed`,exitCode:n.exitCode,finishedAt:new Date().toISOString(),...n.exitCode===0&&!r?.promotedOnTrip?{}:{reason:n.finalText.slice(0,500)},...r?{merge:r}:{}},null,2)),!0}catch(e){return bv.warn(`outcome receipt write failed`,{path:t,error:ty(e)}),!1}}async function jv(e,t){try{let n=t.slice(0,t.lastIndexOf(`/`));n&&await e.mkdir(n,{recursive:!0}),await e.writeFile(t,new Date().toISOString())}catch(e){bv.warn(`success receipt write failed`,{path:t,error:ty(e)})}}async function Mv(e,t,n,r){try{await e.orchestrator.notifyScoopOutcome(t,{exitCode:r.exitCode,...n?{receiptPath:n}:{},...r.exitCode!==0||Ov(r.finalText)?{reason:r.finalText.slice(0,500)}:{}})}catch(e){bv.warn(`pass outcome notify failed`,{jid:t,error:ty(e)})}}async function Nv(e,t,n,r){t.notifyOnComplete!==!0||!t.outcomeReceiptPath||await Mv(e,n,r.receiptWritten?t.outcomeReceiptPath:void 0,r.outcome)}const Pv=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;function Fv(e){return Pv.test(e)}const Iv=`agent: name already in use`;async function Lv(e,t,n,r,i){if(t.persistSession===!1)return;let a=t.persistSession===!0?`/sessions`:`/tmp`,o=new Date().toISOString().replace(/[:.]/g,`-`),s=`${a}/agent-${r}-${o}.md`;try{let c=e.orchestrator.getScoopContext(n),l=typeof c?.getAgentMessages==`function`?c.getAgentMessages():[],u=gv({name:r,jid:n,prompt:t.prompt,exitCode:i.exitCode,messages:l,timestamp:o});await e.sharedFs.mkdir(a,{recursive:!0}),await e.sharedFs.writeFile(s,u)}catch(e){bv.warn(`agent session archive write failed`,{path:s,error:ty(e)})}}function Rv(e,t,n,r,i,a){let o=Xv(e.cwd),s=Zv(e.workspaceMode),c={visiblePaths:$v(e,a,s),writablePaths:ey([...Qv(e.writablePaths,o,s),`${i}/`,`/tmp/`]),workspaceMode:s,allowedCommands:e.allowedCommands};return e.maxTurns!==void 0&&(c.maxTurns=e.maxTurns),e.maxWallClockMs!==void 0&&(c.maxWallClockMs=e.maxWallClockMs),e.backgroundAfterSeconds!==void 0&&(c.backgroundAfterSeconds=e.backgroundAfterSeconds),t&&(c.modelId=t,n!==void 0&&(c.modelProviderId=n)),r!==void 0&&(c.thinkingLevel=r),e.structuredOutputSchema!==void 0&&(c.structuredOutputSchema=e.structuredOutputSchema),c}function zv(e,t){let n={sendMessages:[],responseBuffer:``,scoopError:null,unsubscribe:null};return n.unsubscribe=e.observeScoop(t,{onSendMessage:e=>{n.sendMessages.push(e)},onResponse:(e,t)=>{t?n.responseBuffer+=e:n.responseBuffer=e},onError:e=>{n.scoopError===null&&(n.scoopError=e)}}),n}async function Bv(e,t,n,r,i){if(await e.sendPrompt(t,n,`agent`,`agent`),i.scoopError!==null)return{finalText:i.scoopError,exitCode:1};if(r){let n=e.getScoopContext(t),r=n?.getStructuredOutput?.();for(let a=0;a<2&&!r?.captured;a++){if(await e.sendPrompt(t,`You did not call StructuredOutput. Call it now with your result, matching the schema.`,`agent`,`agent`),i.scoopError!==null)return{finalText:i.scoopError,exitCode:1};r=n?.getStructuredOutput?.()}return r?.captured?{finalText:JSON.stringify(r.value),exitCode:0}:{finalText:`agent: scoop did not produce StructuredOutput`,exitCode:1}}return{finalText:i.sendMessages.length>0?i.sendMessages[i.sendMessages.length-1]:i.responseBuffer,exitCode:0}}async function Vv(e,t,n,r){try{await e.orchestrator.unregisterScoop(t)}catch(e){bv.warn(`unregisterScoop failed`,{jid:t,error:ty(e)})}try{await e.sharedFs.rm(r,{recursive:!0})}catch(e){ny(e,`ENOENT`)||bv.warn(`scratch folder cleanup failed`,{folder:n,error:ty(e)})}if(e.sessionStore)try{await e.sessionStore.delete(t)}catch(e){bv.warn(`sessionStore.delete failed`,{jid:t,error:ty(e)})}}async function Hv(e,t,n,r,i){let a=await Uv(e,t,n,r,i),o;a.exitCode===0&&t.mergeOnSuccess?(o=await kv(e.sharedFs,t.mergeOnSuccess),o.error!==void 0&&(a={finalText:`agent: mergeOnSuccess failed: ${o.error}`,exitCode:1})):t.mergeOnSuccess&&Ov(a.finalText)&&(o=await kv(e.sharedFs,t.mergeOnSuccess),o.applied?(o.promotedOnTrip=!0,bv.info(`run tripped its bound; staged rewrite promoted`,{target:t.mergeOnSuccess.targetPath,conflicts:o.conflicts}),a={finalText:`${a.finalText} — staged rewrite promoted`,exitCode:0}):o.error===void 0&&(o=void 0)),a.exitCode===0&&t.successReceiptPath&&await jv(e.sharedFs,t.successReceiptPath);let s=!1;return t.outcomeReceiptPath&&(s=await Av(e.sharedFs,t.outcomeReceiptPath,a,o)),{outcome:a,receiptWritten:s}}async function Uv(e,t,n,r,i){try{await e.orchestrator.registerScoop(n)}catch(e){return{finalText:i.scoopError??ty(e),exitCode:1}}try{let n=await Bv(e.orchestrator,r,t.prompt,t.structuredOutputSchema,i);return t.signal?.aborted?{finalText:`agent: aborted`,exitCode:1}:n||{finalText:i.scoopError??``,exitCode:1}}catch(e){return{finalText:i.scoopError??ty(e),exitCode:1}}}function Wv(e,t,n=null,r={}){let i={orchestrator:e,sharedFs:t,sessionStore:n,generateName:r.generateName??qv,generateUid:r.generateUid??Kv,resolveModel:r.resolveModel??Yv};async function a(e){let t=Ev(e,i.resolveModel);if(`error`in t)return t.error;let n=Cv(i.orchestrator,e.parentJid),r=t.resolvedModelId??n?.modelId??``,a=t.resolvedModelId===void 0?n?.providerId:t.resolvedProviderId,o=e.thinkingLevel??Tv(i.orchestrator,e.parentJid)??void 0,s=e.name===void 0?Sv(i):e.name,c=`agent-${s}`,l=`agent_${Jv(s)}`,u=new Set(i.orchestrator.getScoops().map(e=>e.jid));if(e.name!==void 0&&u.has(l))return{finalText:`${Iv}: ${s}`,exitCode:1};let d=(e.exclusiveWith??[]).find(e=>u.has(`agent_${Jv(e)}`));if(d!==void 0)return{finalText:`${Iv}: ${d}`,exitCode:1};let f=`/scoops/${c}`,p=e.parentJid??O(i.orchestrator.getScoops())[0]?.jid??null,m=Rv(e,r,a,o,f,wv(i.orchestrator,p)),h={jid:l,name:c,folder:c,requiresTrigger:!1,assistantLabel:c,addedAt:new Date().toISOString(),config:m,configSchemaVersion:3,notifyOnComplete:e.notifyOnComplete===!0,parentJid:p,...e.outcomeReceiptPath?{outcomeReceiptPath:e.outcomeReceiptPath}:{}},ee=zv(i.orchestrator,l),g=()=>{try{i.orchestrator.stopScoop(l)}catch(e){bv.warn(`stopScoop on abort failed`,{jid:l,error:ty(e)})}};if(e.signal?.addEventListener(`abort`,g,{once:!0}),e.signal?.aborted)return e.signal.removeEventListener(`abort`,g),ee.unsubscribe?.(),{finalText:`agent: aborted before start`,exitCode:1};let te={finalText:``,exitCode:1};try{let t=await Hv(i,e,h,l,ee);return te=t.outcome,await Nv(i,e,l,t),te}finally{e.signal?.removeEventListener(`abort`,g),ee.unsubscribe?.(),await Lv(i,e,l,s,te),await Vv(i,l,c,f)}}return{spawn:a}}function Gv(e,t,n=null,r={}){let i=Wv(e,t,n,r);return globalThis[xv]=i,bv.info(`agent bridge published on globalThis.__slicc_agent`),i}function Kv(){let e=globalThis;return typeof e.crypto?.randomUUID==`function`?e.crypto.randomUUID().replace(/-/g,``).slice(0,12):`${Date.now().toString(36)}${Math.random().toString(36).slice(2,8)}`}function qv(){return`${V_[Math.floor(Math.random()*V_.length)]}-${H_[Math.floor(Math.random()*H_.length)]}`}function Jv(e){return e.replace(/-/g,`_`)}function Yv(e){try{return de(e)}catch(t){return bv.warn(`defaultResolveModel: provider/account lookup threw; treating model as unknown`,{modelId:e,error:t instanceof Error?t.message:String(t)}),{ok:!1,error:`unknown model: ${e}`}}}function Xv(e){let t=En(e);return t.endsWith(`/`)?t:`${t}/`}function Zv(e){let t=jn(e);return t.ok?t.mode:Mn}function Qv(e,t,n=Mn){let r=n===`private`?[t]:[t,`/shared/`];return e===void 0||e.some(e=>typeof e!=`string`||!e.startsWith(`/`)||e.includes(`\0`))?r:e.map(Xv)}function $v(e,t,n=Mn){if(e.visiblePaths!==void 0)return e.visiblePaths.map(Xv);if(n===`private`)return[];let r=[...t];return e.invokingCwd&&e.invokingCwd.length>0&&r.push(Xv(e.invokingCwd)),ey(r)}function ey(e){let t=new Set,n=[];for(let r of e)t.has(r)||(t.add(r),n.push(r));return n}function ty(e){return e instanceof Error?e.message:String(e)}function ny(e,t){if(typeof e!=`object`||!e)return!1;let n=e.code;return typeof n==`string`&&n===t}const ry=`sessions`;function iy(){return new Promise((e,t)=>{let n=indexedDB.open(`browser-coding-agent`,1);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(ry)||e.createObjectStore(ry,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}var ay=class{db=null;async init(){await this.getDb()}async getDb(){if(!this.db){let e=await iy();e.onversionchange=()=>{e.close(),this.db=null},e.onclose=()=>{this.db=null},this.db=e}return this.db}async save(e){let t=await this.getDb();return new Promise((n,r)=>{let i=t.transaction(ry,`readwrite`);i.objectStore(ry).put(e),i.oncomplete=()=>n(),i.onerror=()=>r(i.error)})}async load(e){let t=await this.getDb();return new Promise((n,r)=>{let i=t.transaction(ry,`readonly`).objectStore(ry).get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async list(){let e=await this.getDb();return new Promise((t,n)=>{let r=e.transaction(ry,`readonly`).objectStore(ry).getAll();r.onsuccess=()=>{t(r.result.sort((e,t)=>t.updatedAt-e.updatedAt).map(e=>e.id))},r.onerror=()=>n(r.error)})}async delete(e){let t=await this.getDb();return new Promise((n,r)=>{let i=t.transaction(ry,`readwrite`);i.objectStore(ry).delete(e),i.oncomplete=()=>n(),i.onerror=()=>r(i.error)})}async saveMessages(e,t){let n=await this.load(e),r=n?{...n,messages:t,updatedAt:Date.now()}:{id:e,messages:t,createdAt:Date.now(),updatedAt:Date.now()};await this.save(r)}};const oy={summarizing:`summarizing`,fallback:`fallback`,cancelled:`discarded`,idle:`summarized`};var sy=class{mintId;open=new Map;settled=new Map;constructor(e){this.mintId=e}apply(e,t,n,r){if(t===`extracting-memory`)return null;let i=this.open.get(e)??this.lateRetraction(e,t,n)??r;if(t!==`summarizing`&&!i)return null;t!==`summarizing`&&(this.open.delete(e),this.settled.delete(e));let a=i??this.mintId(e);if(t===`summarizing`&&this.open.set(e,a),(t===`idle`||t===`fallback`)&&n.roundId&&this.settled.set(e,{messageId:a,roundId:n.roundId}),t===`cancelled`)return{kind:`retract`,messageId:a};let o={trigger:n.trigger,state:oy[t],...n.transcriptPath?{transcriptPath:n.transcriptPath}:{}};return t===`summarizing`?{kind:`open`,messageId:a,marker:o}:{kind:`settle`,messageId:a,marker:o}}forget(e){this.open.delete(e),this.settled.delete(e)}lateRetraction(e,t,n){if(t!==`cancelled`||!n.roundId)return;let r=this.settled.get(e);return r?.roundId===n.roundId?r.messageId:void 0}},cy=e({formatMountRecoveryPrompt:()=>hy,mdInlineCode:()=>my,recoverMounts:()=>fy,shellQuote:()=>py});function ly(e){return e instanceof Error?e.message:String(e)}async function uy(e,t,n,r){let i=await Cr(t.idbHandleKey),a=typeof i?.name==`string`?i.name:``,o={kind:`local`,path:e,dirName:a};if(!i||!(`queryPermission`in i))return{entry:o,ok:!1};let s;try{s=await i.queryPermission({mode:`readwrite`})}catch(t){return r?.warn?.(`queryPermission threw on persisted handle`,{path:e,error:ly(t)}),{entry:o,ok:!1}}if(s!==`granted`)return{entry:o,ok:!1};try{let s=hr.fromHandle(i,{mountId:t.mountId});return await n.mount(e,s,{limits:gr}),r?.info?.(`Restored mount from previous session`,{path:e,name:a}),{entry:o,ok:!0}}catch(t){return r?.warn?.(`Failed to re-mount persisted handle`,{path:e,error:ly(t)}),{entry:o,ok:!1}}}async function dy(e,t,n,r){let{kind:i,source:a,profile:o,mountId:s}=t,c=i===`s3`?`S3`:i===`aem`?`AEM`:`DA`;try{let t={source:a,profile:o,cache:new wr({mountId:s,ttlMs:3e4}),mountId:s},l=i===`s3`?new vr({...t,signedFetch:yr(o)}):i===`aem`?new xr({...t,signedFetch:Sr()}):new _r({...t,signedFetch:Sr()});return await n.mount(e,l),r?.info?.(`Restored ${c} mount from previous session`,{path:e,source:a}),{entry:{kind:i,path:e,source:a,profile:o,reason:``},ok:!0}}catch(t){let n=ly(t);return r?.warn?.(`Failed to restore ${c} mount`,{path:e,error:n}),{entry:{kind:i,path:e,source:a,profile:o,reason:n},ok:!1}}}async function fy(e,t,n){let r=[],i=[];for(let{targetPath:a,descriptor:o}of e){if(o.kind===`hostfs`)continue;let e=o.kind===`local`?await uy(a,o,t,n):await dy(a,o,t,n);(e.ok?r:i).push(e.entry)}return{restored:r,needsRecovery:i}}function py(e){return`'${e.replace(/'/g,`'\\''`)}'`}function my(e){let t=e.replace(/\r\n|[\r\n]/g,` `),n=t.match(/`+/g),r=n?Math.max(...n.map(e=>e.length))+1:1,i="`".repeat(r);return`${i}${t.startsWith("`")||t.endsWith("`")?` ${t} `:t}${i}`}function hy(e){if(!Array.isArray(e)||e.length===0)return null;let t=e.length===1?`mount point`:`mount points`,n=e.length===1?`it`:`them`,r=e.filter(e=>e.kind===`local`),i=e.filter(e=>e.kind===`s3`||e.kind===`da`||e.kind===`aem`),a=[`[Session Reload] Mount recovery required for ${e.length} ${t}.`,``];if(r.length>0){let e=r.map(({path:e,dirName:t})=>{let n=t?` (previously mounted from ${my(t)})`:``;return`- ${my(e)}${n}`}),i=r.map(({path:e})=>` mount ${py(e)}`);a.push(`The page was reloaded and the following local ${t} lost filesystem permission. The browser cannot restore access without a fresh user gesture, so ${n} cannot be used until the user re-authorizes:`,``,...e,``,`Please tell the user what happened and ask whether they want to re-mount. If yes, run the corresponding command(s) so the folder picker opens and they can re-select the same directory:`,``,...i,``)}if(i.length>0){let e=i.map(({path:e,source:t,profile:n,reason:r})=>{let i=n==="default"?``:` --profile ${py(n)}`,a=`mount --source ${py(t)}${i} ${py(e)}`;return`- ${my(e)} (${my(t)}, profile ${my(n)}) — ${r}\n Retry: ${my(a)}`});a.push(`The following remote ${t} could not be auto-restored:`,``,...e,``)}return a.push("If the user no longer needs a mount, run `mount unmount <path>` (with the path shell-quoted the same way) to clear the stale entry instead."),a.join(`
892
- `)}const gy=new Set([`webhook`,`cron`,`sprinkle`,`fswatch`,`session-reload`,`navigate`,`upgrade`,`cherry`,`workflow`,`bash`,`jshd`,`sudo-request`,`preview`,`discovery`]);function _y(e){return e!=null&&gy.has(e)}const vy={webhook:`Webhook Event`,sprinkle:`Sprinkle Event`,fswatch:`File Watch Event`,"session-reload":`Session Reload`,navigate:`Navigate Event`,upgrade:`Upgrade Event`,cherry:`Cherry Event`,workflow:`Workflow Event`,bash:`Background Command`,jshd:`jshd Unit`,cron:`Cron Event`,"sudo-request":`Scoop Access Request`,preview:`Preview`,discovery:`Discovery Event`};function yy(e){switch(e.type){case`webhook`:return e.webhookName;case`sprinkle`:return e.sprinkleName;case`fswatch`:return e.fswatchName;case`session-reload`:return by(e);case`navigate`:return e.navigateUrl;case`upgrade`:return`${e.upgradeFromVersion??`unknown`}→${e.upgradeToVersion??`unknown`}`;case`cherry`:return e.cherryName;case`workflow`:return e.workflowName;case`bash`:return e.bashJobId;case`jshd`:return e.jshdName;case`sudo-request`:return e.sudoScoopName;case`discovery`:return e.discoveryUrl??e.discoveryOrigin;default:return e.cronName}}function by(e){let t=e.body?.reason;return typeof t==`string`&&t?t:`mount-recovery`}function xy(e){let t=e.body,n=Array.isArray(t?.tools)?t.tools:[],r=n.map(e=>{let t=e.args?` ${e.args}`:``;return`- \`${e.toolName??`unknown`}\`${t}`});return`[Session Reload: tool-call-interrupted]\nThe page reloaded while your last turn was running. ${n.length===1?`A tool call was`:`${n.length} tool calls were`} still in flight, so ${n.length===1?`its result was`:`their results were`} lost:\n${r.join(`
893
- `)}\n\nThey were NOT re-run automatically, because tool calls can have side effects — each may or may not have completed. Check the current state (files, tabs, processes) before deciding whether to run any of them again, then continue the task.`}function Sy(e,t){let n=e.body,r=e.lickId;if(n?.reason===`tool-call-interrupted`){let n=r?`\n\nLick ID: ${r}\nCall \`lick_dismiss\` with this lick id once you have dealt with it.`:``;return{label:t,content:`${xy(e)}${n}`}}if(n?.reason===`mount-recovery`){let e=hy(n.mounts??[]);return e===null?null:{label:t,content:`${e}${r?`\n\nLick ID: ${r}\nThis card is actionable: call \`lick_confirm\` with this lick id to re-run the listed \`mount …\` command(s) so the user can re-authorize, or \`lick_dismiss\` to leave them unmounted. The card flips to ✓ on confirm / muted ✗ on dismiss.`:``}`}}let i=jy(e,t);if(!r)return i;let a=`\n\nLick ID: ${r}\nThis card is informational — there is NO confirm action. Call \`lick_dismiss\` with this lick id to acknowledge and clear it. The card flips to muted ✗ on dismiss.`;return{label:i.label,content:`${i.content}${a}`}}function Cy(e,t){let n=e.upgradeFromVersion??`unknown`,r=e.upgradeToVersion??`unknown`,i=e.body?.releasedAt??null,a=i?`\nReleased: ${i}`:``,o=e.lickId;return{label:t,content:`[${t}: ${n}→${r}]\n\nSLICC was upgraded from \`${n}\` to \`${r}\`.${a}${o?`\n\nLick ID: ${o}\nUse the **upgrade** skill (\`/workspace/skills/upgrade/SKILL.md\`). The card is a binary action: call \`lick_confirm\` with this lick id to **Update workspace files** (it runs the three-way merge of bundled vfs-root content into the user's VFS), or \`lick_dismiss\` to clear it. The card flips to ✓ on confirm / muted ✗ on dismiss. Reviewing the changelog is a separate step you can run first — it is NOT a card action.`:`
894
-
895
- Use the **upgrade** skill (\`/workspace/skills/upgrade/SKILL.md\`) to offer the user a three-way merge of bundled vfs-root content into their workspace (bundled snapshot vs user's VFS, reconciled with the GitHub tag-to-tag diff).`}`}}function wy(e,t){let n=e.cherryOrigin??`unknown origin`,r=e.cherryRuntimeId??`unknown`;return{label:t,content:`[${t}: ${e.cherryName??`unnamed`}] from ${n} (runtime ${r})\n\`\`\`json\n${JSON.stringify(e.body,null,2)}\n\`\`\``}}function Ty(e,t){let n=e.previewOrigin??`unknown origin`;return{label:t,content:`Preview tab ${(e.previewLifecycle??`unknown`)===`connected`?`connected`:`disconnected`} from ${n}`}}function Ey(e,t){let n=e.workflowName??`workflow`,r=e.resultPath??`(no result file)`,i=e.preview??``;return{label:t,content:`[${t}: ${n}] ${e.body?.status??`complete`} — ${i}\nFull result: ${r} (read it only if you need the whole thing).`}}function Dy(e,t){let n=e.jshdName??`unknown`,r=e.jshdRestarts??0,i=e.resultPath;return{label:t,content:`[${t}: ${n}] marked errored after ${r} restarts.\nThe restart policy stopped trying so the unit does not crash-loop.\n${i?`Logs: ${i} (page with \`jshd logs ${n}\`).`:`No log file was written.`}${e.preview?.length?`\n\n\`\`\`\n${e.preview}\n\`\`\``:``}\n\nInspect with \`jshd status ${n}\`; start it again with \`jshd start -n ${n}\` after fixing the script.`}}function Oy(e,t){let n=e.bashJobId??`unknown job`,r=e.bashJobPid===void 0?``:` (pid ${e.bashJobPid})`,i=e.bashCommand??`(unknown command)`,a=e.bashExitCode,o=a===0?`succeeded`:a===130||a===137||a===143?`was terminated (exit code ${a}) — killed by a signal, not by its own failure`:`failed (exit code ${a??`unknown`})`,s=e.resultPath;return{label:t,content:`[${t}: ${n}${r}] \`${i}\` ${o}.\n${s?`Full output: ${s} (page it with \`sed -n\`/\`tail\`/\`grep\` if the preview below is cut).`:`Its output could NOT be written to a file — the preview below is all that survived.`}${e.preview?.length?`\n\n\`\`\`\n${e.preview}\n\`\`\``:``}\n\nThis is the delayed result of a command that was detached earlier in this session — do not re-run it. Act on it if it still matters, otherwise acknowledge and move on.`}}function ky(e,t){let n=e.sudoScoopName??`a scoop`,r=e.lickId??`(unknown)`,i=e.sudoKind??`unknown`,a=e.sudoDetail??``,o=[`[${t}: ${n}]`,`Lick ID: ${r}`,`Kind: ${i}`,`Detail: ${a}`];return e.sudoReason&&o.push(`Reason given: ${e.sudoReason}`),e.sudoSuggestedPattern&&o.push(`Suggested pattern: ${e.sudoSuggestedPattern}`),o.push(``,`Use the lick_confirm tool with lick_id="${r}" to approve (or always-approve with a pattern), or lick_dismiss with lick_id="${r}" and a reason to deny.`),{label:t,content:o.join(`
896
- `)}}function Ay(e,t){let n=e.discoveryOrigin??`an origin`,r=e.discoveryUrl??`(unknown URL)`,i=e.discoveryKind===`llms-txt`?`an llms.txt digest`:`an ai-catalog manifest`,a=e.discoveryKind??`unknown`;return{label:t,content:`${e.originLabel?`_Forwarded from ${e.originLabel}._\n\n`:``}[${t}: ${r}]\n${n} advertises ${i} (kind: ${a}) at ${r}.${e.discoveryKind===`llms-txt`&&e.lickId?`\n\nLick ID: ${e.lickId}\nThis card is dismiss-only: call \`lick_dismiss\` to add the advertising host to \`/etc/llmstxtignore\` and silence future discoveries without a prompt. There is NO confirm action.`:`
897
- This is informational — there is no card action.`}\nYou MAY fetch it (e.g. \`curl ${r}\`) when relevant.`}}function jy(e,t){let n=yy(e);return{label:t,content:`${e.originLabel?`_Forwarded from ${e.originLabel}._\n\n`:``}[${t}: ${n}]\n\`\`\`json\n${JSON.stringify(e.body,null,2)}\n\`\`\``}}function My(e,t){let n=e.headers,r=n?.[`x-slicc-preview-conn`];if(!r)return jy(e,t);let i=n[`x-slicc-preview-token`]??``;return{label:`Preview Event`,content:`[Preview event: ${e.body?.name??`event`}] from tab${i?` (preview:${i}:${r})`:` (conn ${r})`}\n\`\`\`json\n${JSON.stringify(e.body,null,2)}\n\`\`\``}}function Ny(e,t){let n=jy(e,t),r=e.lickId;if(!r)return n;let i=e.body?.verb===`upskill`?`\n\nLick ID: ${r}\nUpskill install. To install, call \`lick_confirm\` with this lick id (it runs \`upskill … --all\` with any branch/path scope from the body, so it installs EVERY skill under that scope — a broad path can be many); to skip, call \`lick_dismiss\`. The card flips to ✓ on confirm / muted ✗ on dismiss.`:`\n\nLick ID: ${r}\nExternal handoff — stays human-gated. Show the approval dip and wait for the user; do NOT use \`lick_confirm\` / \`lick_dismiss\` here. Carry the lick id in the dip action so the card resolves: slicc.lick({action:'accept'|'dismiss', data:{lickId:'${r}'}}).`;return{label:n.label,content:`${n.content}${i}`}}function Py(e){let t=vy[e.type];return e.type===`session-reload`?Sy(e,t):e.type===`upgrade`?Cy(e,t):e.type===`cherry`?wy(e,t):e.type===`preview`?Ty(e,t):e.type===`workflow`?Ey(e,t):e.type===`bash`?Oy(e,t):e.type===`jshd`?Dy(e,t):e.type===`sudo-request`?ky(e,t):e.type===`navigate`?Ny(e,t):e.type===`webhook`?My(e,t):e.type===`discovery`?Ay(e,t):jy(e,t)}function Fy(e,t=Date.now){let n=e.parentId===null,r=e.folder??e.name,i=n?e.config:Iy(e,r),a={jid:e.id??(n?`cone_${t()}`:`scoop_${r}_${t()}`),name:e.name,folder:r,requiresTrigger:!n,assistantLabel:n?`sliccy`:r,addedAt:new Date(t()).toISOString(),parentJid:e.parentId,...i?{config:i,configSchemaVersion:3}:{},...e.notifyOnComplete===!1?{notifyOnComplete:!1}:{},...!n&&e.onParentClose===`detach`?{onParentClose:`detach`}:{}};return n||(a.trigger=`@${r}`),a}function Iy(e,t){let n=kn(e.workspace?.mode??e.config?.workspaceMode),r=e.workspace?.from??`/workspace`,i=rr(n,t,{root:r},e.workspace?.from),a=e.config;return{...a,workspaceMode:n,visiblePaths:a?.visiblePaths===void 0?i.visiblePaths:a.visiblePaths,writablePaths:a?.writablePaths===void 0?i.writablePaths:a.writablePaths}}function Ly(e,t){if(e.parentId===null||e.workspace?.from!==void 0)return e;let n=t.getScoop(e.parentId);return n?{...e,workspace:{mode:e.workspace?.mode??e.config?.workspaceMode??`shared-readonly`,from:fr(n).root}}:e}var Ry=class{host;constructor(e){this.host=e}async create(e){e.parentId===null&&e.workspace?.mode!==void 0&&kn(e.workspace.mode);let t=Fy(Ly(e,this.host));if(Uy(t.jid,e=>this.host.getScoop(e)),e.parentId!==null){let n=this.host.getScoop(e.parentId);if(!n)throw Error(`Parent work unit not found: ${e.parentId}`);Rn(t,n)}return await this.host.registerScoop(t),this.get(t.jid).descriptor}async createMany(e){if(e.length===0)return[];Wy(e,e=>this.host.getScoop(e),()=>this.host.getScoops());let t=Hy(e);for(let e of t)e.id&&Uy(e.id,e=>this.host.getScoop(e));let n=Ky(t),r=[],i=new Map;try{for(let e of n){let t=await this.create(e);r.push(t.id),i.set(e,t)}}catch(e){for(let e=r.length-1;e>=0;e--)await this.close(r[e]).catch(()=>void 0);throw e}return t.map(e=>i.get(e))}async join(e,t){return(await this.host.waitForScoops(e,t?.timeoutMs)).map(e=>({id:e.jid,summary:e.summary,timedOut:e.timedOut}))}list(){return this.host.getScoops().map(e=>this.get(e.jid).descriptor)}get(e){return this.host.getScoop(e)?this.host.ensureLiveUnit(e):null}getParent(e){let t=this.host.getScoop(e)?.parentJid;return t?this.get(t):null}getChildren(e){return nr(this.host.getScoops(),e).map(e=>this.get(e.jid)).filter(e=>e!==null)}roots(){return O(this.host.getScoops()).map(e=>this.get(e.jid)).filter(e=>e!==null)}resolveDefaultRoot(){return this.roots()[0]??null}rootOf(e){let t=new Set,n=this.host.getScoop(e);for(;n&&n.parentJid!==null;){if(t.has(n.jid))return null;t.add(n.jid),n=this.host.getScoop(n.parentJid)}return n?this.get(n.jid):null}abort(e,t){let n=this.get(e);return n?n.abort(t):Promise.resolve()}async promote(e){let t=this.host.getScoop(e);if(!t)throw Error(`Work unit not found: ${e}`);if(t.parentJid===null)return this.get(e).descriptor;let n=kr(t),r=By(t,t.parentJid);t.parentJid=null,$n(t);try{await this.host.persistScoop(t)}catch(e){throw Vy(t,r),e}return await this.host.rekeyConversation?.(n,{key:kr(t),workUnitId:t.jid,workspaceId:Or(t),folder:t.folder,legacyKeys:{agentSessionId:t.jid,chatSessionId:qn(t)}}),await this.host.reinitLiveUnit(e),this.get(e).descriptor}detach(e){return this.promote(e)}async close(e,t){let n=this.get(e);if(!n)return;let r=this.getChildren(e);for(let e of r)zy(e,t)===`detach`?await this.promote(e.descriptor.id):await this.close(e.descriptor.id,t);await n.close()}};function zy(e,t){return t?.descendants??e.descriptor.onParentClose}function By(e,t){return{parentJid:t,trigger:e.trigger,requiresTrigger:e.requiresTrigger,approvesGuestRequests:e.approvesGuestRequests,onParentClose:e.onParentClose}}function Vy(e,t){e.parentJid=t.parentJid,e.trigger=t.trigger,e.requiresTrigger=t.requiresTrigger,e.approvesGuestRequests=t.approvesGuestRequests,e.onParentClose=t.onParentClose}function Hy(e){let t=Date.now();return e.map(e=>{if(e.id)return e;let n=e.folder??e.name,r=e.parentId===null?`cone_${t++}`:`scoop_${n}_${t++}`;return{...e,id:r}})}function Uy(e,t){if(t(e))throw Error(`Work unit already exists: ${e}`)}function Wy(e,t,n){let r=new Set;for(let n of e)if(n.id){if(r.has(n.id))throw Error(`Duplicate work unit id in createMany: ${n.id}`);Uy(n.id,t),r.add(n.id)}Gy(e,n);let i=[],a=new Set;for(let n of e)n.parentId!==null&&(t(n.parentId)||r.has(n.parentId)||a.has(n.parentId)||(a.add(n.parentId),i.push(n.parentId)));if(i.length>0)throw Error(`Parent work unit not found: ${i.join(`, `)}`)}function Gy(e,t){let n=new Set(t().map(e=>e.folder)),r=new Set;for(let t of e){let e=t.folder??t.name;if(r.has(e)||n.has(e))throw Error(`Duplicate work unit folder in createMany: ${e}`);r.add(e)}}function Ky(e){let t=e.length;if(t<=1)return e.slice();let n=new Map;for(let r=0;r<t;r++){let t=e[r].id;t&&n.set(t,r)}let r=Array(t).fill(0),i=Array.from({length:t},()=>[]);for(let a=0;a<t;a++){let t=e[a].parentId;if(t===null)continue;let o=n.get(t);o!==void 0&&(i[o].push(a),r[a]+=1)}let a=[];for(let e=0;e<t;e++)r[e]===0&&a.push(e);let o=[];for(let t=0;t<a.length;t++){let n=a[t];o.push(e[n]);for(let e of i[n])--r[e],r[e]===0&&a.push(e)}if(o.length!==t)throw Error(`createMany cycle: parentId edges in this batch form a cycle`);return o}const qy=_(`kernel-agent-event-stream`);var Jy=class{listeners=new Set;messageIds=new Map;subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}clear(e){this.messageIds.delete(e)}publish(e){let t=this.translate(e);for(let n of t)for(let t of this.listeners)try{t(e.scoopJid,n)}catch(e){qy.error(`onAgentEvent listener threw`,{error:e instanceof Error?e.message:String(e)})}}translate(e){let{scoopJid:t,eventType:n}=e,r=[],i=()=>{let e=this.messageIds.get(t);return e||(e=`scoop-${t}-${Yy()}`,this.messageIds.set(t,e),r.push({type:`message_start`,messageId:e})),e};switch(n){case`text_delta`:{let t=i();r.push({type:`content_delta`,messageId:t,text:e.text??``});break}case`tool_start`:{let t=i();r.push({type:`tool_use_start`,messageId:t,toolName:e.toolName??``,toolInput:e.toolInput,toolCallId:e.toolCallId});break}case`tool_end`:{let n=this.messageIds.get(t);if(!n)return r;r.push({type:`tool_result`,messageId:n,toolName:e.toolName??``,result:e.toolResult??``,isError:e.isError,toolCallId:e.toolCallId});break}case`tool_ui`:{let t=e.displayScoopJid?`tool-ui-${e.requestId??``}`:i();r.push({type:`tool_ui`,messageId:t,toolName:e.toolName??``,requestId:e.requestId??``,html:e.html??``});break}case`tool_ui_done`:{let n=e.displayScoopJid?`tool-ui-${e.requestId??``}`:this.messageIds.get(t);if(!n)return r;r.push({type:`tool_ui_done`,messageId:n,requestId:e.requestId??``});break}case`tool_progress`:{let n=this.messageIds.get(t);if(!n||!e.progress)return r;r.push({type:`tool_progress`,messageId:n,toolName:e.toolName??``,progress:e.progress,toolCallId:e.toolCallId});break}case`response_done`:{let n=this.messageIds.get(t);if(!n)return r;r.push({type:`content_done`,messageId:n,model:e.model,usage:e.usage}),this.messageIds.delete(t);break}case`turn_end`:this.messageIds.delete(t)}return r}};function Yy(){return Date.now().toString(36)+Math.random().toString(36).slice(2,8)}var Xy=class{statuses=new Map;activeScoopJid=null;setStatus(e,t){this.statuses.set(e,t)}clearStatus(e){this.statuses.delete(e)}setActiveScoopJid(e){this.activeScoopJid=e}getActiveScoopJid(){return this.activeScoopJid}projectScoop(e){let t=Zy(e);return{jid:e.jid,name:e.name,folder:e.folder,parentId:e.parentJid,assistantLabel:e.assistantLabel,status:this.statuses.get(e.jid)??`ready`,...t?{config:t}:{}}}projectScoops(e){return e.map(e=>this.projectScoop(e))}buildStateSnapshot(e,t){let n=this.projectScoops(e),r=O(e)[0];return{type:`state-snapshot`,scoops:n,activeScoopJid:this.activeScoopJid??r?.jid??null,trayRuntimeStatus:t}}};function Zy(e){let t=Bn(e),n=Gn(e),{level:r,effortOverride:i}=Wn(e);if(t!==void 0||n!==void 0||r!==void 0||i!==void 0)return{...t===void 0?{}:{modelId:t},...n===void 0?{}:{modelProviderId:n},...r===void 0?{}:{thinkingLevel:r},...i===void 0?{}:{effortOverride:i}}}const W={SCOOPS:`scoops`,MESSAGES:`messages`,SESSIONS:`sessions`,TASKS:`tasks`,STATE:`state`,WEBHOOKS:`webhooks`,CRONTASKS:`crontasks`};let Qy=null;function $y(e){if(!e.objectStoreNames.contains(W.MESSAGES)){let t=e.createObjectStore(W.MESSAGES,{keyPath:`id`});t.createIndex(`chatJid`,`chatJid`),t.createIndex(`timestamp`,`timestamp`),t.createIndex(`chatJid_timestamp`,[`chatJid`,`timestamp`])}e.objectStoreNames.contains(W.SESSIONS)||e.createObjectStore(W.SESSIONS,{keyPath:`groupFolder`}),e.objectStoreNames.contains(W.TASKS)||e.createObjectStore(W.TASKS,{keyPath:`id`}).createIndex(`groupFolder`,`groupFolder`),e.objectStoreNames.contains(W.STATE)||e.createObjectStore(W.STATE,{keyPath:`key`})}function eb(e,t){let n=e.isMain??!1;return{jid:e.jid,name:e.name,folder:e.folder,trigger:n?void 0:e.trigger||`@${e.folder}`,requiresTrigger:!n&&(e.requiresTrigger??!0),parentJid:n?null:t??null,assistantLabel:n?`sliccy`:e.config?.assistantName||e.folder,addedAt:e.addedAt,config:e.config?{systemPromptAppend:e.config.systemPromptAppend,timeout:e.config.timeout,assistantName:e.config.assistantName}:void 0}}function tb(e,t){if(t.objectStoreNames.contains(`groups`)){let n=e.target.transaction.objectStore(`groups`).getAll();n.onsuccess=()=>{let e=n.result;t.deleteObjectStore(`groups`);let r=t.createObjectStore(W.SCOOPS,{keyPath:`jid`});r.createIndex(`type`,`type`);let i=e.find(e=>e.isMain)?.jid;for(let t of e)r.put(eb(t,i))};return}t.objectStoreNames.contains(W.SCOOPS)||t.createObjectStore(W.SCOOPS,{keyPath:`jid`}).createIndex(`type`,`type`)}function nb(e){e.objectStoreNames.contains(W.WEBHOOKS)||e.createObjectStore(W.WEBHOOKS,{keyPath:`id`}),e.objectStoreNames.contains(W.CRONTASKS)||e.createObjectStore(W.CRONTASKS,{keyPath:`id`})}function rb(e){let t=e.target.result,n=e.oldVersion;n<1&&$y(t),n<2&&tb(e,t),n<3&&nb(t)}function ib(){if(!Qy)return null;let e=Object.values(W).every(e=>Qy.objectStoreNames.contains(e));return Qy.version===3&&e?Qy:(Qy.close(),Qy=null,null)}function ab(e){e.onversionchange=()=>{e.close(),Qy===e&&(Qy=null)},e.onclose=()=>{Qy===e&&(Qy=null)}}async function ob(){return ib()||new Promise((e,t)=>{let n=indexedDB.open(`slicc-groups`,3);n.onupgradeneeded=rb,n.onsuccess=()=>{let t=n.result;ab(t),Qy=t,e(t)},n.onerror=()=>t(n.error)})}async function G(e,t=`readonly`){return(await ob()).transaction(e,t).objectStore(e)}async function sb(e){let t=await G(W.SCOOPS,`readwrite`);return new Promise((n,r)=>{let i=t.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function cb(){let e=await G(W.SCOOPS);return new Promise((t,n)=>{let r=e.getAll();r.onsuccess=()=>{let e={};for(let t of r.result)e[t.jid]=t;t(e)},r.onerror=()=>n(r.error)})}async function lb(e){let t=await G(W.SCOOPS,`readwrite`);return new Promise((n,r)=>{let i=t.delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function ub(){let e=await G(W.MESSAGES,`readwrite`);return new Promise((t,n)=>{let r=e.clear();r.onsuccess=()=>t(),r.onerror=()=>n(r.error)})}async function db(e){let t=(await G(W.MESSAGES,`readwrite`)).index(`chatJid_timestamp`),n=IDBKeyRange.bound([e,``],[e,`￿`],!1,!1);return new Promise((e,r)=>{let i=t.openCursor(n);i.onsuccess=()=>{let t=i.result;if(!t){e();return}t.delete(),t.continue()},i.onerror=()=>r(i.error)})}async function fb(e){let t=await G(W.MESSAGES,`readwrite`);return new Promise((n,r)=>{let i=t.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function pb(e){let t=await G(W.MESSAGES,`readwrite`);return new Promise((n,r)=>{let i=t.delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function mb(e){let t=(await G(W.MESSAGES)).index(`chatJid_timestamp`),n=IDBKeyRange.bound([e,``],[e,`￿`],!1,!1);return new Promise((e,r)=>{let i=t.getAll(n);i.onsuccess=()=>e(i.result),i.onerror=()=>r(i.error)})}const hb=`wm1:`;function gb(e){if(!e)return{ts:``,ids:new Set};if(e.startsWith(hb))try{let t=JSON.parse(e.slice(4));return{ts:t.ts,ids:new Set(t.ids)}}catch{}return{ts:e,ids:null}}function _b(e){let t=e.ids?Array.from(e.ids):[];return`${hb}${JSON.stringify({ts:e.ts,ids:t})}`}function vb(e,t){return e.timestamp>t.ts?!0:e.timestamp<t.ts||t.ids===null?!1:!t.ids.has(e.id)}function yb(e,t){if(t.length===0)return e;let n=e.ts;for(let e of t)e.timestamp>n&&(n=e.timestamp);let r=new Set;if(e.ts===n&&e.ids)for(let t of e.ids)r.add(t);for(let e of t)e.timestamp===n&&r.add(e.id);return{ts:n,ids:r}}async function bb(e,t,n){let r=(await G(W.MESSAGES)).index(`chatJid_timestamp`),i=gb(t),a=IDBKeyRange.bound([e,i.ts],[e,`￿`],!1,!1);return new Promise((e,t)=>{let o=r.getAll(a);o.onsuccess=()=>{let t=o.result.filter(e=>vb(e,i));n&&(t=t.filter(e=>e.senderName!==n)),e(t)},o.onerror=()=>t(o.error)})}async function xb(e){let t=await G(W.TASKS,`readwrite`);return new Promise((n,r)=>{let i=t.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Sb(e){let t=await G(W.TASKS);return new Promise((n,r)=>{let i=t.get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async function Cb(){let e=await G(W.TASKS);return new Promise((t,n)=>{let r=e.getAll();r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error)})}async function wb(e){let t=await G(W.TASKS,`readwrite`);return new Promise((n,r)=>{let i=t.delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Tb(e){let t=await G(W.STATE);return new Promise((n,r)=>{let i=t.get(e);i.onsuccess=()=>n(i.result?.value??null),i.onerror=()=>r(i.error)})}async function Eb(e,t){let n=await G(W.STATE,`readwrite`);return new Promise((r,i)=>{let a=n.put({key:e,value:t});a.onsuccess=()=>r(),a.onerror=()=>i(a.error)})}async function Db(){await ob()}async function Ob(e){let t=await G(W.WEBHOOKS,`readwrite`);return new Promise((n,r)=>{let i=t.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function kb(e){let t=await G(W.WEBHOOKS);return new Promise((n,r)=>{let i=t.get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async function Ab(){try{let e=await G(W.WEBHOOKS);return new Promise((t,n)=>{let r=e.getAll();r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error)})}catch{return[]}}async function jb(e){let t=await G(W.WEBHOOKS,`readwrite`);return new Promise((n,r)=>{let i=t.delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Mb(e){let t=await G(W.CRONTASKS,`readwrite`);return new Promise((n,r)=>{let i=t.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Nb(e){let t=await G(W.CRONTASKS);return new Promise((n,r)=>{let i=t.get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async function Pb(){try{let e=await G(W.CRONTASKS);return new Promise((t,n)=>{let r=e.getAll();r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error)})}catch{return[]}}async function Fb(e){let t=await G(W.CRONTASKS,`readwrite`);return new Promise((n,r)=>{let i=t.delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}_(`tray-leader`);function Ib(){return Lb(jr(),Te())}function Lb(e,t){return{leader:{state:e.state,session:e.session?{workerBaseUrl:e.session.workerBaseUrl,trayId:e.session.trayId,createdAt:e.session.createdAt,controllerId:e.session.controllerId,controllerUrl:e.session.controllerUrl,joinUrl:e.session.joinUrl,webhookUrl:e.session.webhookUrl,...e.session.leaderKey===void 0?{}:{leaderKey:e.session.leaderKey},...e.session.leaderWebSocketUrl===void 0?{}:{leaderWebSocketUrl:e.session.leaderWebSocketUrl},runtime:e.session.runtime}:null,error:e.error??null,reconnectAttempts:e.reconnectAttempts??0},follower:{state:t.state,joinUrl:t.joinUrl,trayId:t.trayId,error:t.error,lastError:t.lastError,reconnectAttempts:t.reconnectAttempts,attachAttempts:t.attachAttempts,lastAttachCode:t.lastAttachCode,connectingSince:t.connectingSince,lastPingTime:t.lastPingTime}}}const Rb=`__slicc_binary__`;function zb(e){if(!e||typeof e!=`object`)return!1;let t=e;return t[Rb]===`b64`&&typeof t.data==`string`}function Bb(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Uint8Array)}function Vb(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Uint8Array)&&!zb(e)}function Hb(e){if(e instanceof Uint8Array)return{[Rb]:`b64`,data:ie(e)};if(Array.isArray(e))return e.map(Hb);if(Bb(e)){let t={};for(let[n,r]of Object.entries(e))t[n]=Hb(r);return t}return e}function Ub(e){if(zb(e))return ae(e.data);if(Array.isArray(e))return e.map(Ub);if(Vb(e)){let t={};for(let[n,r]of Object.entries(e))t[n]=Ub(r);return t}return e}const Wb=_(`panel-transport`);function Gb(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function Kb(){return{onMessage:e=>{let t=(t,n,r)=>(Gb(t)&&e(Ub(t)),!1);return chrome.runtime.onMessage.addListener(t),()=>chrome.runtime.onMessage.removeListener(t)},send:(e,t)=>{let n=Hb(e);chrome.runtime.sendMessage({source:`offscreen`,payload:n}).catch(e=>{let t=e instanceof Error?e.message:String(e);/receiving end does not exist/i.test(t)||Wb.error(`Offscreen → panel transport send failed`,{error:t})})}}}const qb=_(`kernel-bridge`);function Jb(){return globalThis}function Yb(e){if(typeof e!=`object`||!e)return null;let t=e;if(t.action!==`accept`&&t.action!==`dismiss`)return null;let n=t.data,r=n&&typeof n.lickId==`string`?n.lickId:null;return r?{lickId:r,accepted:t.action===`accept`}:null}var Xb=class{orchestrator=null;agentSpawnAborts=new Map;browserAPI=null;messageBuffers=new Map;conesBeingCreated=new Map;currentMessageId=new Map;compactionRows=new sy(e=>`compaction-${e}-${Zb()}`);pendingMarkers=new Map;scoopPresentation=new Xy;transcriptsPublished=!1;agentEventStream=new Jy;sessionStore=null;followerSync=null;followerActive=!1;_transport;transportUnsubscribe=null;constructor(e){this._transport=e??null}get transport(){return this._transport||=Kb(),this._transport}async bind(e,t){this.orchestrator=e,this.browserAPI=t??null,this.transportUnsubscribe?.(),this.transportUnsubscribe=this.setupMessageListener();let n=new ay;await n.init(),this.sessionStore=n}static createCallbacks(e){return{onResponse:(t,n,r)=>{let i=e.getOrCreateAssistantMsg(t);r?i.content+=n:(i.content=n,i.isStreaming=!1),e.emit({type:`agent-event`,scoopJid:t,eventType:`text_delta`,text:n})},onResponseDone:t=>{let n=e.getLatestAssistantMetadata(t),r=e.currentMessageId.get(t);if(r){let i=e.getBuffer(t).find(e=>e.id===r);i&&(i.isStreaming=!1,n&&Object.assign(i,n)),e.currentMessageId.delete(t)}e.flushPendingMarkers(t),e.emit({type:`agent-event`,scoopJid:t,eventType:`response_done`,...n??{}})},onSendMessage:(t,n)=>{let r=e.getBuffer(t),i=`msg-${Zb()}`;r.push({id:i,role:`assistant`,content:n,timestamp:Date.now()}),e.emit({type:`agent-event`,scoopJid:t,eventType:`text_delta`,text:n}),e.emit({type:`agent-event`,scoopJid:t,eventType:`response_done`})},onStatusChange:(t,n)=>{e.scoopPresentation.setStatus(t,n),n===`ready`&&e.currentMessageId.delete(t),(n===`ready`||n===`error`)&&e.flushPendingMarkers(t),e.emit({type:`scoop-status`,scoopJid:t,status:n}),e.emitScoopList()},onCompactionStateChange:(t,n,r)=>{let i=e.compactionRows.apply(t,n,r);e.emit({type:`compaction-state`,scoopJid:t,state:n,trigger:r.trigger,...r.transcriptPath?{transcriptPath:r.transcriptPath}:{},...r.failure?{failure:r.failure}:{},...r.roundId?{roundId:r.roundId}:{},...i?{rowId:i.messageId}:{}}),e.recordCompactionRow(t,i)},onError:(t,n,r)=>{e.recordErrorCard(t,n),e.emit({type:`error`,scoopJid:t,error:n,...r?.endTurn===!1?{endTurn:!1}:{}})},onLickBackpressure:(t,n)=>{e.emit({type:`lick-backpressure`,scoopJid:t,...n})},onToolStart:(t,n,r,i)=>{G_.has(n)||e.bufferToolStart(t,n,r,i)},onToolEnd:(t,n,r,i,a)=>{G_.has(n)||e.bufferToolEnd(t,n,r,i,a)},onToolUI:(t,n,r,i,a)=>{e.emit({type:`agent-event`,scoopJid:t,eventType:`tool_ui`,toolName:n,requestId:r,html:i,...a?{displayScoopJid:a}:{}})},onToolUIDone:(t,n,r)=>{e.emit({type:`agent-event`,scoopJid:t,eventType:`tool_ui_done`,requestId:n,...r?{displayScoopJid:r}:{}})},onToolProgress:(t,n,r,i)=>{e.emit({type:`agent-event`,scoopJid:t,eventType:`tool_progress`,toolName:n,progress:r,toolCallId:i})},onIncomingMessage:(t,n)=>e.bufferIncomingMessage(t,n),onMessageUpdate:(t,n)=>e.applyMessageUpdate(t,n),onScoopUnregistered:t=>e.evictScoopState(t)}}bufferToolStart(e,t,n,r){let i=J_(n),a=this.getOrCreateAssistantMsg(e);a.toolCalls||=[],a.toolCalls.push({id:r??Zb(),name:t,input:i}),this.emit({type:`agent-event`,scoopJid:e,eventType:`tool_start`,toolName:t,toolInput:i,toolCallId:r})}bufferToolEnd(e,t,n,r,i){let a=this.currentMessageId.get(e);if(a){let o=this.getBuffer(e).find(e=>e.id===a);if(o?.toolCalls){let e=i?o.toolCalls.find(e=>e.id===i):[...o.toolCalls].reverse().find(e=>e.name===t&&e.result===void 0);e&&(e.result=Y_(n),e.isError=r)}}this.emit({type:`agent-event`,scoopJid:e,eventType:`tool_end`,toolName:t,toolResult:X_(n),isError:r,toolCallId:i})}bufferIncomingMessage(e,t){let n={id:t.id,role:`user`,content:t.channel===`delegation`?`**[Instructions from sliccy]**\n\n${t.content}`:t.content,attachments:t.attachments,timestamp:new Date(t.timestamp).getTime(),source:t.channel===`delegation`?`delegation`:void 0,channel:t.channel,lickId:t.lickId,lickState:t.lickState};this.getBuffer(e).push(n),this.notifyPanelIncomingMessage(e,t)}evictScoopState(e){this.messageBuffers.delete(e.jid),this.currentMessageId.delete(e.jid),this.agentEventStream.clear(e.jid),this.scoopPresentation.clearStatus(e.jid),e.parentJid!==null&&this.sessionStore&&this.sessionStore.delete(qn(e)).catch(t=>{console.warn(`[kernel-bridge] Failed to delete session for unregistered scoop:`,e.folder,t)}),this.emitScoopList()}notifyPanelIncomingMessage(e,t){this.emit({type:`incoming-message`,scoopJid:e,message:{id:t.id,content:t.content,attachments:t.attachments,channel:t.channel,senderName:t.senderName,fromAssistant:t.fromAssistant,timestamp:t.timestamp,lickId:t.lickId,lickState:t.lickState}})}applyMessageUpdate(e,t){let n=this.messageBuffers.get(e)?.find(e=>t.lickId&&e.lickId===t.lickId||e.id===t.messageId);n&&(n.lickState=t.lickState),this.emit({type:`message-updated`,scoopJid:e,messageId:t.messageId,lickId:t.lickId,lickState:t.lickState})}toScoopSnapshot(e){return this.scoopPresentation.projectScoop(e)}buildStateSnapshot(){return this.scoopPresentation.buildStateSnapshot(this.orchestrator?.getScoops()??[],Ib())}emitTrayRuntimeStatus(){let e={type:`tray-runtime-status`,...Ib()};this.emit(e)}setFollowerSync(e){this.followerSync=e}setFollowerActive(e){this.followerActive=e}setActiveScoopJid(e){this.scoopPresentation.setActiveScoopJid(e)}getActiveScoopJid(){return this.scoopPresentation.getActiveScoopJid()}onAgentEvent(e){return this.agentEventStream.subscribe(e)}getMessagesForJid(e){return this.getBuffer(e)}async routeSprinkleLick(e,t,n,r){if(!this.orchestrator)return;let i=Yb(t);i&&this.orchestrator.resolveNavigateHandoffByHuman(i.lickId,i.accepted);let a=this.orchestrator.getScoops(),o=te(e),s=[];n&&s.push({source:`explicit target`,value:n}),o&&o!==n&&s.push({source:`configured route`,value:o});let c=[],l;for(let e of s){if(l=Xa(a,e.value),l)break;c.push(e)}if(l||=this.originRootOf(a,r?.unitJid)??O(a)[0],c.length>0&&qb.warn(`Sprinkle lick target could not be resolved; using fallback`,{sprinkleName:e,unresolvedTargets:c,fallbackJid:l?.jid}),!l)return;let u=`sprinkle-${e}-${Date.now()}`,d=Py({type:`sprinkle`,sprinkleName:e,timestamp:new Date().toISOString(),body:t,originLabel:r?.label})?.content??`[Sprinkle Event: ${e}]\n\`\`\`json\n${JSON.stringify(t,null,2)}\n\`\`\``,f=c.map(({source:e,value:t})=>`${e} ${JSON.stringify(t)}`).join(` and `),p=d+(f?`\n\n> Delivery note: ${f} could not be resolved; delivered to fallback ${JSON.stringify(l.folder)}.`:``),m={id:u,chatJid:l.jid,senderId:`sprinkle`,senderName:`sprinkle:${e}`,content:p,timestamp:new Date().toISOString(),fromAssistant:!1,channel:`sprinkle`};this.getBuffer(l.jid).push({id:u,role:`user`,content:p,timestamp:Date.now(),source:`lick`,channel:`sprinkle`}),await this.orchestrator.handleMessage(m)}originRootOf(e,t){if(t)return Ln(e,e.find(e=>e.jid===t))}applyFollowerSnapshot(e){if(!this.orchestrator)return;let t=O(this.orchestrator.getScoops())[0];if(!t)return;let n=$b(e).map((t,n)=>({...t,isStreaming:e[n]?.isStreaming}));this.messageBuffers.set(t.jid,n),this.currentMessageId.delete(t.jid),this.agentEventStream.clear(t.jid),this.emit({type:`scoop-messages-replaced`,scoopJid:t.jid,messages:n})}getConeJid(){return this.orchestrator?O(this.orchestrator.getScoops())[0]?.jid??null:null}emitFollowerAgentEvent(e){let t=this.getConeJid();if(t)switch(e.type){case`content_delta`:this.emit({type:`agent-event`,scoopJid:t,eventType:`text_delta`,text:e.text});break;case`content_done`:this.emit({type:`agent-event`,scoopJid:t,eventType:`response_done`,model:e.model,usage:e.usage});break;case`tool_use_start`:this.emit({type:`agent-event`,scoopJid:t,eventType:`tool_start`,toolName:e.toolName,toolInput:e.toolInput});break;case`tool_result`:this.emit({type:`agent-event`,scoopJid:t,eventType:`tool_end`,toolName:e.toolName,toolResult:e.result,isError:e.isError});break;case`turn_end`:this.emit({type:`agent-event`,scoopJid:t,eventType:`turn_end`});break;case`error`:this.emit({type:`error`,scoopJid:t,error:e.error})}}emitFollowerIncomingMessage(e,t){let n=this.getConeJid();n&&this.emit({type:`incoming-message`,scoopJid:n,message:{id:e,content:t,channel:`web`,senderName:`User`,fromAssistant:!1,timestamp:new Date().toISOString()}})}emitFollowerStatus(e){let t=this.getConeJid();if(!t)return;let n=e===`processing`?`processing`:`ready`;this.scoopPresentation.setStatus(t,n),this.emit({type:`scoop-status`,scoopJid:t,status:n})}async buildBufferFromCanonicalRecord(e){let t=this.orchestrator?.getConversationStore?.();if(!t)return null;let{conversationKeyFor:n}=await import(`./key-B2Bki3fU.js`).then(e=>e.r),r=await t.load(n(e));if(!r)return null;let{toChatMessages:i}=await Promise.resolve().then(()=>PC),a=await i(r,{source:Kn(e)});return a.length===0?null:this.overlayPersistedLickDecisionsOn(e,$b(a))}async overlayPersistedLickDecisionsOn(e,t){if(!t.some(e=>e.channel===`sudo-request`||e.lickId||e.lickState))return t;let n=[];try{let t=await this.orchestrator?.getMessagesForScoop?.(e.jid);if(t)for(let e of t)n.push({id:e.id,content:e.content,channel:e.channel,lickId:e.lickId,lickState:e.lickState})}catch{}return ix(t,n)}async hydrateBuffersFromRecords(){if(this.orchestrator)for(let e of this.orchestrator.getScoops()){let t=this.messageBuffers.get(e.jid);if(t&&t.length>0)continue;let n=await this.buildBufferFromCanonicalRecord(e);n&&(this.messageBuffers.set(e.jid,n),this.currentMessageId.delete(e.jid),this.agentEventStream.clear(e.jid))}}publishHydratedTranscripts(){if(this.transcriptsPublished||!this.orchestrator)return;let e=this.orchestrator.getScoops();if(e.length!==0){for(let t of e){let e=this.messageBuffers.get(t.jid);!e||e.length===0||this.emitTranscript(t.jid,e)}this.emitScoopList(),this.transcriptsPublished=!0}}emitTranscript(e,t){this.emit({type:`scoop-messages-replaced`,scoopJid:e,messages:t,queuedIds:this.queuedIdsFor(e)})}queuedIdsFor(e){if(!(this.followerSync||!this.orchestrator))return this.orchestrator.getQueuedMessageIds(e)}async handleRequestScoopMessages(e){if(await this.conesBeingCreated.get(e),!this.orchestrator)return;let t=this.orchestrator.getScoops().find(t=>t.jid===e);if(!t)return;let n=this.messageBuffers.get(e);if(n&&n.length>0){this.emitTranscript(e,n);return}let r=await this.buildBufferFromCanonicalRecord(t);if(r){this.messageBuffers.set(e,r),this.currentMessageId.delete(e),this.agentEventStream.clear(e),this.emitTranscript(e,r);return}this.emitTranscript(e,[])}async handleConeCreate(e,t,n,r){if(!this.orchestrator)return;let i=this.orchestrator.getScoops(),a=Xn(e,i),o=a===Qn,s=O(i)[0],c=r??(s?Zn(s):void 0),l=t?.trim(),u={...Fy({parentId:null,name:e,folder:a}),assistantLabel:o?`sliccy`:e,...l?{config:{systemPromptAppend:`This cone is for: ${l}`}}:{},...c?{model:c}:{}},d=()=>{};this.conesBeingCreated.set(u.jid,new Promise(e=>{d=e}));let f=()=>{this.conesBeingCreated.delete(u.jid),d()};try{await this.orchestrator.registerScoop(u),this.emit({type:`scoop-created`,scoop:this.toScoopSnapshot(u)});let e=n?.trim();if(!e)return;let t=this.handleUserMessage({type:`user-message`,scoopJid:u.jid,text:e,messageId:`msg-${Date.now()}-${Math.random().toString(36).slice(2,8)}`});f(),await t}finally{f()}}async handleRequestSudoApproval(e,t){let n={decision:`deny`},r=t.approver;if(r&&r.kind!==`user`){let i=this.orchestrator;if(!i)console.warn(`[kernel-bridge] directed approval before orchestrator init — denying`);else try{n=await i.enqueueDirectedApproval(r,t)}catch(e){console.warn(`[kernel-bridge] directed approval threw — denying`,e)}this.emit({type:`sudo-approval`,requestId:e,decision:n});return}let i=this.orchestrator?.getSudoManager()??null;if(!i)console.warn(`[kernel-bridge] request-sudo-approval before SudoManager init — denying`);else try{n=await i.approve(t)}catch(e){console.warn(`[kernel-bridge] sudo approval threw — denying`,e)}this.emit({type:`sudo-approval`,requestId:e,decision:n})}async handleRequestSessionStats(e){let t=0,n=0,r=[],i=[],a=[];try{let e=this.orchestrator?.getSessionCosts()??[];t=(this.orchestrator?.getSessionCosts({includeDropped:!0})??[]).reduce((e,t)=>e+t.usage.cost.total,0),n=this.orchestrator?.getBurnRate()??0,r=this.orchestrator?.getContextFills()??[],i=(this.orchestrator?.getModelCosts()??[]).map(e=>({model:e.model,cost:e.cost,turns:e.turns,tokens:e.input+e.output+e.cacheRead+e.cacheWrite})),a=e.map(e=>({name:e.name,model:e.model,cost:e.usage.cost.total,type:e.type,source:e.source}))}catch{}let o=await this.resolveBudgetWindow();this.emit({type:`session-stats`,requestId:e,totalCost:t,burnRate:n,fills:r,models:i,scoops:a,...o?{budget:o}:{}})}budgetProbePending=!0;async resolveBudgetWindow(){return this.budgetProbePending?(this.budgetProbePending=!1,await Promise.race([z_().catch(()=>null),new Promise(e=>setTimeout(()=>e(null),2500))])??void 0):(z_().catch(()=>null),R_()??void 0)}async handleRequestScoopTranscript(e,t){let n=()=>{this.emit({type:`scoop-transcript`,requestId:e,scoopJid:t,transcript:``})};if(!this.orchestrator){n();return}let r=this.orchestrator.getScoops().find(e=>e.jid===t);if(!r){n();return}let i=this.messageBuffers.get(t);if(i&&i.length>0){this.emit({type:`scoop-transcript`,requestId:e,scoopJid:t,transcript:Qb(i)});return}let a=this.orchestrator.getScoopContext(t);if(a){let{agentMessagesToChatMessages:n}=await Promise.resolve().then(()=>Q_),i=a.getAgentMessages();if(i.length>0){let a=n(i,{source:Kn(r)});this.emit({type:`scoop-transcript`,requestId:e,scoopJid:t,transcript:Qb(a)});return}}n()}async handleRequestScoopChatMessages(e,t){let n=()=>{this.emit({type:`scoop-chat-messages`,requestId:e,scoopJid:t,messages:[]})};if(!this.orchestrator){n();return}let r=this.orchestrator.getScoops().find(e=>e.jid===t);if(!r){n();return}let i=this.messageBuffers.get(t);if(i&&i.length>0){this.emit({type:`scoop-chat-messages`,requestId:e,scoopJid:t,messages:i});return}let a=await this.buildBufferFromCanonicalRecord(r);if(a){this.emit({type:`scoop-chat-messages`,requestId:e,scoopJid:t,messages:a});return}n()}async recordCompactionRow(e,t){if(!t||t.kind===`open`)return;let n=this.orchestrator?.getScoops().find(t=>t.jid===e);if(!n)return;let r=this.getBuffer(e);if(t.kind===`retract`){let e=r.findIndex(e=>e.id===t.messageId);e>=0&&r.splice(e,1)}else{let e=r.find(e=>e.id===t.messageId);e?e.compaction=t.marker:r.push({id:t.messageId,role:`assistant`,content:``,timestamp:Date.now(),compaction:t.marker})}let i=this.orchestrator?.getConversationStore?.();if(!i)return;let{conversationKeyFor:a}=await import(`./key-B2Bki3fU.js`).then(e=>e.r),o=a(n);if(t.kind===`retract`){this.dropPendingMarker(e,t.messageId),await i.deleteMarker(o,t.messageId);return}let s={id:t.messageId,kind:`compaction`,timestamp:Date.now(),compaction:t.marker};await i.putMarker(o,s)||this.holdPendingMarker(e,s)}holdPendingMarker(e,t){let n=this.pendingMarkers.get(e)??[];this.pendingMarkers.set(e,[...n.filter(e=>e.id!==t.id),t].slice(-4))}dropPendingMarker(e,t){let n=this.pendingMarkers.get(e);if(!n)return;let r=n.filter(e=>e.id!==t);r.length===0?this.pendingMarkers.delete(e):this.pendingMarkers.set(e,r)}async flushPendingMarkers(e){let t=this.pendingMarkers.get(e);if(!t||t.length===0)return;let n=this.orchestrator?.getConversationStore?.(),r=this.orchestrator?.getScoops().find(t=>t.jid===e);if(!n||!r)return;let{conversationIdentityFor:i,conversationKeyFor:a}=await import(`./key-B2Bki3fU.js`).then(e=>e.r),o=a(r);for(let a of t){let t=!1;try{t=await n.putMarker(o,a,a.kind===`error`?{createWith:i(r)}:void 0)}catch(t){qb.warn(`Conversation marker retry threw`,{scoopJid:e,folder:r.folder,markerId:a.id,kind:a.kind,errorName:t instanceof Error?t.name:`unknown`})}t?this.dropPendingMarker(e,a.id):qb.warn(`Conversation marker retry deferred`,{scoopJid:e,folder:r.folder,markerId:a.id,kind:a.kind})}}async recordErrorCard(e,t){let n=Zb(),r=Date.now();this.getBuffer(e).push({id:n,role:`assistant`,content:t,timestamp:r,error:!0});let i={id:n,kind:`error`,timestamp:r,text:t};this.holdPendingMarker(e,i);let a=this.orchestrator?.getConversationStore?.(),o=this.orchestrator?.getScoops().find(t=>t.jid===e);if(!a||!o){qb.warn(`Error marker is waiting for a canonical target`,{scoopJid:e,markerId:i.id,hasStore:!!a,hasScoop:!!o});return}let{conversationIdentityFor:s}=await import(`./key-B2Bki3fU.js`).then(e=>e.r),c=s(o),l=!1;try{l=await a.putMarker(c.key,i,{createWith:c})}catch(t){qb.warn(`Error marker write threw; queued for retry`,{scoopJid:e,folder:o.folder,markerId:i.id,errorName:t instanceof Error?t.name:`unknown`})}l?this.dropPendingMarker(e,i.id):qb.warn(`Error marker write deferred`,{scoopJid:e,folder:o.folder,markerId:i.id})}getBuffer(e){let t=this.messageBuffers.get(e);return t||(t=[],this.messageBuffers.set(e,t)),t}getOrCreateAssistantMsg(e){let t=this.getBuffer(e),n=this.currentMessageId.get(e);if(n){let e=t.find(e=>e.id===n);if(e)return e}n=`scoop-${e}-${Zb()}`,this.currentMessageId.set(e,n);let r=(this.orchestrator?.getScoops()??[]).find(t=>t.jid===e),i=r?Kn(r):`unknown`,a={id:n,role:`assistant`,content:``,timestamp:Date.now(),toolCalls:[],isStreaming:!0,source:i};return t.push(a),a}getLatestAssistantMetadata(e){let t=this.orchestrator?.getScoopContext?.(e)?.getAgentMessages()??[];for(let e=t.length-1;e>=0;e--){let n=t[e];if(n.role!==`assistant`)continue;let r={model:n.model},{usage:i}=n;return i&&(r.usage={input:i.input,output:i.output,cacheRead:i.cacheRead,cacheWrite:i.cacheWrite,cost:{input:i.cost.input,output:i.cost.output,cacheRead:i.cost.cacheRead,cacheWrite:i.cost.cacheWrite,total:i.cost.total}}),r}return null}setupMessageListener(){return this.transport.onMessage(e=>{e.source===`panel`&&this.handlePanelMessage(e.payload).catch(t=>{console.error(`[kernel-bridge] handlePanelMessage error:`,t);let n=e.payload.scoopJid;n&&this.emit({type:`error`,scoopJid:n,error:t instanceof Error?t.message:String(t)})})})}async handlePanelMessage(e){if(this.orchestrator)switch(e.type){case`user-message`:await this.handleUserMessage(e);break;case`cone-create`:await this.handleConeCreate(e.name,e.description,e.prompt,e.model);break;case`scoop-feed`:await this.orchestrator.delegateToScoop(e.scoopJid,e.prompt,`sliccy`);break;case`scoop-drop`:await this.handleScoopDrop(e.scoopJid);break;case`abort`:this.orchestrator.stopScoop(e.scoopJid),this.orchestrator.clearQueuedMessages(e.scoopJid).catch(e=>{console.warn(`[kernel-bridge] Failed to clear queued messages on abort:`,e)});break;case`delete-queued-message`:this.handleDeleteQueuedMessage(e.scoopJid,e.messageId);break;case`request-state`:this.emit(this.buildStateSnapshot());break;case`request-scoop-messages`:await this.handleRequestScoopMessages(e.scoopJid);break;case`request-scoop-transcript`:await this.handleRequestScoopTranscript(e.requestId,e.scoopJid);break;case`request-scoop-chat-messages`:await this.handleRequestScoopChatMessages(e.requestId,e.scoopJid);break;case`request-session-stats`:this.handleRequestSessionStats(e.requestId);break;case`request-sudo-approval`:this.handleRequestSudoApproval(e.requestId,e.request);break;case`clear-chat`:await this.handleClearChat(e.requestId,e.scoopJid,e.discardLiveSnapshot===!0);break;case`agent-spawn-request`:await this.handleAgentSpawn(e);break;case`agent-spawn-abort`:this.agentSpawnAborts.get(e.requestId)?.abort();break;case`clear-filesystem`:await this.orchestrator.resetFilesystem().catch(e=>console.error(`[kernel-bridge] clear-filesystem failed:`,e));break;case`set-model`:case`refresh-model`:this.orchestrator.refreshModels();break;case`set-scoop-model`:await this.handleSetScoopModel(e);break;case`set-thinking-level`:await this.handleSetThinkingLevel(e);break;case`sprinkle-lick`:await this.handleSprinkleLickMsg(e);break;case`lick-webhook-event`:this.handleWebhookEventMsg(e);break;case`set-follower-forwarding`:this.handleSetFollowerForwarding(e.enabled);break;case`inject-forwarded-lick`:this.handleInjectForwardedLick(e.event);break;case`lick-cherry-host-event`:this.orchestrator.handleCherryHostEvent(e.cherryRuntimeId,e.name,e.detail);break;case`lick-preview`:this.orchestrator.handlePreviewLick(e.event);break;case`reload-skills`:this.orchestrator.reloadAllSkills().catch(e=>{console.warn(`[kernel-bridge] Skill reload failed:`,e)});break;case`panel-cdp-command`:await this.handlePanelCdpCommand(e);break;case`tool-ui-action`:await this.handleToolUIAction(e);break;case`local-storage-set`:this.applyLocalStorageOp(e.type,t=>t.setItem(e.key,e.value)),Na(e.key);break;case`local-storage-remove`:this.applyLocalStorageOp(e.type,t=>t.removeItem(e.key)),Na(e.key);break;case`local-storage-clear`:this.applyLocalStorageOp(e.type,e=>e.clear()),Na()}}handleWebhookEventMsg(e){let t=this.orchestrator?.handleWebhookEvent(e.webhookId,e.headers,e.body);e.requestId&&this.emit({type:`lick-webhook-delivery`,requestId:e.requestId,disposition:t??`unknown-webhook`})}async handleAgentSpawn(e){let t=Jb()[xv];if(!t||typeof t.spawn!=`function`){this.emit({type:`agent-spawn-result`,requestId:e.requestId,ok:!1,error:`AgentBridge unavailable`});return}let n=new AbortController;this.agentSpawnAborts.set(e.requestId,n);try{let r=await t.spawn({...e.options,signal:n.signal});this.emit({type:`agent-spawn-result`,requestId:e.requestId,ok:!0,result:r})}catch(t){this.emit({type:`agent-spawn-result`,requestId:e.requestId,ok:!1,error:t instanceof Error?t.message:String(t)})}finally{this.agentSpawnAborts.delete(e.requestId)}}async handleSetScoopModel(e){if(!this.orchestrator)return;let t=!1;try{t=await this.orchestrator.setScoopModel(e.scoopJid,e.model)}catch(e){console.error(`[kernel-bridge] set-scoop-model failed:`,e)}e.requestId&&this.emit({type:`set-scoop-model-ack`,requestId:e.requestId,scoopJid:e.scoopJid,model:e.model,applied:t})}async handleSetThinkingLevel(e){if(!this.orchestrator)return;let t=!1;try{t=await this.orchestrator.setScoopThinkingLevel(e.scoopJid,e.level,e.effortOverride)!==null}catch(e){console.error(`[kernel-bridge] set-thinking-level failed:`,e)}e.requestId&&this.emit({type:`set-thinking-level-ack`,requestId:e.requestId,scoopJid:e.scoopJid,level:e.level,effortOverride:e.effortOverride,applied:t})}handleDeleteQueuedMessage(e,t){if(!this.orchestrator)return;this.orchestrator.deleteQueuedMessage(e,t).catch(e=>{console.warn(`[kernel-bridge] Failed to delete queued message:`,e)});let n=this.messageBuffers.get(e);if(!n)return;let r=n.filter(e=>e.id!==t);r.length!==n.length&&this.messageBuffers.set(e,r)}async handleUserMessage(e){if(this.getBuffer(e.scoopJid).push({id:e.messageId,role:`user`,content:e.text,attachments:e.attachments,timestamp:Date.now()}),this.followerSync){try{e.steer?this.followerSync.sendMessage(e.text,e.messageId,e.attachments,{steer:!0}):this.followerSync.sendMessage(e.text,e.messageId,e.attachments),this.emitUserMessageAck(e,!0)}catch(t){this.emitUserMessageAck(e,!1,t)}return}let t={id:e.messageId,chatJid:e.scoopJid,senderId:`user`,senderName:`User`,content:e.text,attachments:e.attachments,timestamp:new Date().toISOString(),fromAssistant:!1,channel:`web`,...e.guestGate?{guestGate:e.guestGate}:{},...e.steer?{steer:!0}:{}};try{if(!this.orchestrator)throw Error(`kernel not ready`);if(!e.requestId){await this.orchestrator.handleMessage(t),await this.orchestrator.createScoopTab(e.scoopJid);return}let n={outcome:`pending`},r=this.orchestrator.handleMessage(t);if(r.then(()=>{n.outcome=`ok`},e=>{n.outcome=`fail`,n.err=e}),await Promise.resolve(),n.outcome===`fail`){this.emitUserMessageAck(e,!1,n.err);return}this.emitUserMessageAck(e,!0),r.then(()=>this.orchestrator?.createScoopTab(e.scoopJid)).catch(t=>{console.error(`[kernel-bridge] user-message failed after handoff:`,t),this.emit({type:`error`,scoopJid:e.scoopJid,error:t instanceof Error?t.message:String(t)})})}catch(t){if(this.emitUserMessageAck(e,!1,t),!e.requestId)throw t}}emitUserMessageAck(e,t,n){e.requestId&&this.emit({type:`user-message-ack`,requestId:e.requestId,messageId:e.messageId,scoopJid:e.scoopJid,ok:t,...t?{}:{error:n instanceof Error?n.message:n==null?void 0:String(n)}})}async handleScoopDrop(e){if(!this.orchestrator)return;let t=this.orchestrator.getScoops(),n=t.find(t=>t.jid===e);if(n&&Nn(n)){if(O(t).length<=1){console.warn(`[kernel-bridge] Refusing to drop the last cone:`,e),this.emitScoopList();return}let r=this.descendantsOf(t,e);await this.orchestrator.getWorkUnits().close(e);let i=new Set(this.orchestrator.getScoops().map(e=>e.jid));for(let e of[...r,n])i.has(e.jid)||this.forgetDroppedScoop(e)}else await this.orchestrator.unregisterScoop(e),this.forgetDroppedScoop(n??{jid:e});this.emitScoopList()}descendantsOf(e,t){let n=[];for(let r of e)r.parentJid===t&&n.push(...this.descendantsOf(e,r.jid),r);return n}forgetDroppedScoop(e){if(this.messageBuffers.delete(e.jid),this.currentMessageId.delete(e.jid),this.agentEventStream.clear(e.jid),this.scoopPresentation.clearStatus(e.jid),e.folder&&this.sessionStore){let t=qn({folder:e.folder});this.sessionStore.delete(t).catch(e=>{console.warn(`[kernel-bridge] Failed to delete session on scoop drop:`,t,e)})}}async handleClearChat(e,t,n=!1){let r=this.orchestrator?.getScoops()??[],i=(t?r.find(e=>e.jid===t):void 0)??O(r)[0],a=i?.jid;a&&(n?await this.orchestrator?.clearScoopMessages(a,{discardLiveSnapshot:!0}):await this.orchestrator?.clearScoopMessages(a)),this.sessionStore&&await this.sessionStore.delete(qn({folder:i?.folder??`cone`})),a&&(this.messageBuffers.delete(a),this.currentMessageId.delete(a),this.agentEventStream.clear(a)),this.emit({type:`clear-chat-ack`,requestId:e})}async handleSprinkleLickMsg(e){if(this.followerActive){this.followerSync?this.followerSync.sendSprinkleLick(e.sprinkleName,e.body,e.targetScoop):console.warn(`[kernel-bridge] sprinkle-lick dropped: follower sync mid-reconnect`,{sprinkleName:e.sprinkleName});return}await this.routeSprinkleLick(e.sprinkleName,e.body,e.targetScoop,e.origin)}handleSetFollowerForwarding(e){let t=Jb().__slicc_lickManager;if(!t){console.warn(`[kernel-bridge] set-follower-forwarding ignored: worker LickManager unavailable`);return}e?t.setForwarder(e=>this.emit({type:`forward-lick`,event:e})):t.setForwarder(null)}handleInjectForwardedLick(e){let t=Jb().__slicc_lickManager;if(!t){console.warn(`[kernel-bridge] inject-forwarded-lick dropped: worker LickManager unavailable`,{type:e.type});return}t.handleForwardedEvent(e)}async handlePanelCdpCommand(e){let{id:t,method:n,params:r,sessionId:i}=e;if(!this.browserAPI){console.warn(`[kernel-bridge] Panel CDP command received but BrowserAPI is null`),this.emit({type:`panel-cdp-response`,id:t,error:`BrowserAPI not available`});return}try{let e=await this.browserAPI.getTransport().send(n,r,i);this.emit({type:`panel-cdp-response`,id:t,result:e})}catch(e){this.emit({type:`panel-cdp-response`,id:t,error:e instanceof Error?e.message:String(e)})}}async handleToolUIAction(e){let{requestId:t,action:n,data:r}=e;if(n===`__mounted`){Sn.markMounted(t);return}try{await Sn.handleAction(t,{action:n,data:r})}catch(e){let r=e instanceof Error?e.message:String(e);console.error(`[kernel-bridge] Tool UI action failed`,{requestId:t,action:n,error:r}),Sn.cancel(t,`Action failed: ${r}`)}}applyLocalStorageOp(e,t){try{let e=globalThis.localStorage;e&&t(e)}catch(t){console.warn(`[kernel-bridge] ${e} failed:`,t)}}emitScoopList(){let e=this.scoopPresentation.projectScoops(this.orchestrator?.getScoops()??[]);this.emit({type:`scoop-list`,scoops:e})}emit(e){this.transport.send(e),e.type===`agent-event`&&this.agentEventStream.publish(e)}};function Zb(){return Date.now().toString(36)+Math.random().toString(36).slice(2,8)}function Qb(e){let t=[];for(let n of e){let e=(n.content??``).trim();e.length!==0&&t.push(`${n.role}: ${e}`)}return t.join(`
898
- `)}function $b(e){return e.map(e=>({id:e.id,role:e.role,content:e.content,attachments:e.attachments,timestamp:e.timestamp,source:e.source,channel:e.channel,lickId:e.lickId,lickState:e.lickState,toolCalls:e.toolCalls?.map(e=>({id:e.id,name:e.name,input:e.input,result:e.result,isError:e.isError})),model:e.model,usage:e.usage,isStreaming:!1,compaction:e.compaction,error:e.error}))}function ex(e){return e===`confirmed`||e===`dismissed`}function tx(e){return e.channel===`sudo-request`||!!e.lickId||!!e.lickState||e.id.startsWith(`sudo-request-`)}function nx(e){return e.lickId?e.lickId:tx(e)?/^(?:Lick ID|Request ID): (\S+)/m.exec(e.content)?.[1]||(e.id.startsWith(`sudo-request-`)?e.id.slice(13):void 0):void 0}function rx(e,t,n){let r=e.get(t);(!r||ex(n.lickState)&&!ex(r.lickState))&&e.set(t,n)}function ix(e,t){if(!t||t.length===0)return e;let n=new Map,r=new Map,i=new Map;for(let e of t){if(!tx(e))continue;let t=nx(e);t&&rx(n,t,e),rx(r,e.id,e),rx(i,e.content,e)}return e.map(e=>{if(!tx(e))return e;let t=nx(e),a=(t?n.get(t):void 0)??r.get(e.id)??i.get(e.content);if(!a||!a.lickId&&!a.lickState)return e;let o=a.lickId??t??nx(a),s=ex(a.lickState)?a.lickState:e.lickState??a.lickState;return o===e.lickId&&s===e.lickState&&a.id===e.id?e:{...e,id:a.id,lickId:o,lickState:s}})}const ax=_(`navigation-watcher`);function ox(e){if(!e)return null;try{let t=new URL(e);return t.protocol===`http:`||t.protocol===`https:`?t:null}catch{return null}}function sx(e){return e.replace(/\/+$/,``)||`/`}function cx(e){return t=>{let n=ox(e()??void 0);if(!n)return!1;let r=ox(t.url);return r?n.origin===r.origin&&sx(n.pathname)===sx(r.pathname):!1}}function lx(e,t){return se(e,t)}var ux=class{transport;onEvent;sessions=new Map;started=!1;unsubscribeState=null;rearming=!1;rearmQueued=!1;onDiscovery;probeFetch;isDiscoveryEnabled;probeTimeoutMs;isOwnTab;probedOrigins=new Set;pendingAttachTargetIds=new Set;ownSessionIds=new Set;onAttachedToTarget=e=>{this.handleAttachedToTarget(e)};onDetachedFromTarget=e=>{let t=e.sessionId;if(!t)return;let n=this.sessions.get(t);this.sessions.delete(t),this.ownSessionIds.delete(t),n&&this.pendingAttachTargetIds.delete(n.targetId)};onTargetInfoChanged=e=>{let t=e.targetInfo;if(t?.targetId){for(let e of this.sessions.values())e.targetId===t.targetId&&(typeof t.title==`string`&&(e.title=t.title),typeof t.url==`string`&&(e.url=t.url));this.reconcileTargetNetwork(t)}};onTargetCreated=e=>{this.handleTargetCreated(e)};onFrameRequestedNavigation=e=>{let t=e;this.maybeArmNetwork(t.sessionId,t.frameId,t.url)};onFrameStartedNavigating=e=>{let t=e;this.maybeArmNetwork(t.sessionId,t.frameId,t.url)};onFrameNavigated=e=>{let t=e,n=t.sessionId;if(!n)return;let r=this.sessions.get(n);if(!r)return;let i=t.frame;i?.id&&(i.parentId||(r.rootFrameId=i.id,typeof i.url==`string`&&(r.url=i.url)))};onResponseReceived=e=>{let t=e,n=t.sessionId;if(!n)return;let r=this.sessions.get(n);if(!r||t.type!==`Document`)return;let i=t.frameId;if(!i||i!==r.rootFrameId)return;let a=t.response;if(!a)return;let o=typeof a.url==`string`&&a.url.length>0?a.url:r.url;if(!o)return;let{match:s,links:c}=lx(a.headers,o);if(s){let e={url:o,verb:s.verb,target:s.target,links:c,targetId:r.targetId};s.instruction!=null&&(e.instruction=s.instruction),s.branch!=null&&(e.branch=s.branch),s.path!=null&&(e.path=s.path),r.title!=null&&(e.title=r.title),this.onEvent(e)}this.maybeRunDiscovery(o,c,r.targetId)};eventBindings=[[`Target.attachedToTarget`,this.onAttachedToTarget],[`Target.detachedFromTarget`,this.onDetachedFromTarget],[`Target.targetInfoChanged`,this.onTargetInfoChanged],[`Target.targetCreated`,this.onTargetCreated],[`Page.frameNavigated`,this.onFrameNavigated],[`Page.frameRequestedNavigation`,this.onFrameRequestedNavigation],[`Page.frameStartedNavigating`,this.onFrameStartedNavigating],[`Network.responseReceived`,this.onResponseReceived]];constructor(e,t,n={}){this.transport=e,this.onEvent=t,this.onDiscovery=n.onDiscovery,this.probeFetch=n.probeFetch,this.isDiscoveryEnabled=n.isDiscoveryEnabled??(()=>!0),this.probeTimeoutMs=n.probeTimeoutMs,this.isOwnTab=n.isOwnTab??(()=>!1)}maybeRunDiscovery(e,t,n){if(!this.onDiscovery||!this.isDiscoveryEnabled())return;let r;try{r=new URL(e).origin}catch{return}let i=Fi(t);i&&this.onDiscovery({origin:r,kind:i.kind,url:i.url,targetId:n}),this.probeFetch&&!this.probedOrigins.has(r)&&(this.probedOrigins.add(r),this.runWellKnownProbe(r,n))}async runWellKnownProbe(e,t){if(!(!this.probeFetch||!this.onDiscovery))try{let n=await Ri(e,this.probeFetch,{timeoutMs:this.probeTimeoutMs});for(let r of n)this.onDiscovery({origin:e,kind:r.kind,url:r.url,targetId:t})}catch(t){ax.debug(`Well-known discovery probe failed`,{origin:e,error:t instanceof Error?t.message:String(t)})}}async start(){if(!this.started){if(this.registerListeners(),!await this.enableDiscovery()){this.unregisterListeners();return}this.started=!0,this.subscribeTransportState(),await this.enumeratePreexistingTargets()}}registerListeners(){for(let[e,t]of this.eventBindings)this.transport.off(e,t),this.transport.on(e,t)}unregisterListeners(){for(let[e,t]of this.eventBindings)this.transport.off(e,t)}async enableDiscovery(){try{return await this.transport.send(`Target.setDiscoverTargets`,{discover:!0}),!0}catch(e){return ax.error(`Failed to enable target discovery`,{error:e instanceof Error?e.message:String(e)}),!1}}async enumeratePreexistingTargets(){try{let e=(await this.transport.send(`Target.getTargets`)).targetInfos??[];for(let t of e){if(t.type!==`page`)continue;let e=t.attached===!0,n=t.targetId;e||typeof n!=`string`||await this.requestAttach(n,`Failed to attach to preexisting target`)}}catch(e){ax.debug(`Failed to enumerate preexisting targets`,{error:e instanceof Error?e.message:String(e)})}}subscribeTransportState(){this.unsubscribeState||=this.transport.onStateChange?.(e=>{if(e===`disconnected`){this.clearConnectionScopedState();return}e===`connected`&&(this.rearming?this.rearmQueued=!0:this.rearmAfterReconnect())})??null}clearConnectionScopedState(){this.sessions.clear(),this.pendingAttachTargetIds.clear(),this.ownSessionIds.clear()}async rearmAfterReconnect(){if(!(!this.started||this.rearming)){this.rearming=!0;try{if(this.clearConnectionScopedState(),this.registerListeners(),!await this.enableDiscovery())return;await this.enumeratePreexistingTargets()}finally{this.rearming=!1,this.rearmQueued&&(this.rearmQueued=!1,this.rearmAfterReconnect())}}}async stop(){if(this.started){this.started=!1,this.unsubscribeState?.(),this.unsubscribeState=null,this.unregisterListeners(),this.clearConnectionScopedState();try{await this.transport.send(`Target.setDiscoverTargets`,{discover:!1})}catch(e){ax.debug(`Failed to disable target discovery on stop`,{error:e instanceof Error?e.message:String(e)})}}}async handleTargetCreated(e){let t=e.targetInfo;t?.type===`page`&&typeof t.targetId==`string`&&(t.attached||await this.requestAttach(t.targetId,`Failed to attach to discovered target`))}maybeArmNetwork(e,t,n){if(!e||!t)return;let r=this.sessions.get(e);!r||r.networkEnabled||!this.ownSessionIds.has(e)||r.rootFrameId===t&&(this.isOwnTabSafe({targetId:r.targetId,url:n})||this.setSessionNetwork(e,r,!0))}reconcileTargetNetwork(e){let t=this.isOwnTabSafe(e);for(let[n,r]of this.sessions)r.targetId===e.targetId&&this.ownSessionIds.has(n)&&r.networkEnabled!==!t&&this.setSessionNetwork(n,r,!t)}async setSessionNetwork(e,t,n){t.networkEnabled=n;try{await this.transport.send(n?`Network.enable`:`Network.disable`,{},e)}catch(r){t.networkEnabled=!n,ax.debug(`Failed to ${n?`enable`:`disable`} Network on session`,{sessionId:e,targetId:t.targetId,error:r instanceof Error?r.message:String(r)})}}isOwnTabSafe(e){try{return this.isOwnTab(e)}catch(t){return ax.debug(`isOwnTab predicate threw; treating target as foreign`,{targetId:e.targetId,error:t instanceof Error?t.message:String(t)}),!1}}async requestAttach(e,t){this.pendingAttachTargetIds.add(e);try{let t=(await this.transport.send(`Target.attachToTarget`,{targetId:e,flatten:!0}))?.sessionId;typeof t==`string`&&t.length>0&&(this.ownSessionIds.add(t),this.pendingAttachTargetIds.delete(e))}catch(n){this.pendingAttachTargetIds.delete(e),ax.debug(t,{targetId:e,error:n instanceof Error?n.message:String(n)})}}claimOwnSession(e,t){return this.ownSessionIds.has(e)?!0:this.pendingAttachTargetIds.has(t)?(this.pendingAttachTargetIds.delete(t),this.ownSessionIds.add(e),!0):!1}async handleAttachedToTarget(e){let t=e.sessionId,n=e.targetInfo;if(!t||!n||n.type!==`page`||typeof n.targetId!=`string`||(this.sessions.set(t,{targetId:n.targetId,rootFrameId:null,networkEnabled:!1,title:n.title,url:n.url}),!this.claimOwnSession(t,n.targetId)))return;let r=this.isOwnTabSafe(n);r&&ax.debug(`Attaching to the SLICC app tab with Network off`,{targetId:n.targetId,url:n.url});try{if(await this.transport.send(`Page.enable`,{},t),!r){let e=this.sessions.get(t);e&&await this.setSessionNetwork(t,e,!0)}let e=(await this.transport.send(`Page.getFrameTree`,{},t)).frameTree?.frame;if(e?.id&&typeof e.id==`string`){let n=this.sessions.get(t);n&&(n.rootFrameId=e.id)}}catch(e){ax.debug(`Failed to enable Page/Network on attached target`,{sessionId:t,error:e instanceof Error?e.message:String(e)})}}};function dx(){try{return typeof localStorage>`u`||typeof localStorage?.getItem!=`function`||localStorage.getItem(`slicc_discovery_enabled`)!==`false`}catch{return!0}}var fx=`# /etc/llmstxtignore — llms.txt discovery suppression
890
+ `)}`:r.firstLine,t=hv(e);t?n.push({sender:t.sender,body:t.body}):n.push({sender:null,body:e}),r=null};for(let e of t){if(e.startsWith(`[`)&&/^\[[^\]\n]+\] /.test(e)&&e.includes(`: `)&&hv(e)){i(),r={firstLine:e,rest:[]};continue}r?r.rest.push(e):r={firstLine:e,rest:[]}}return i(),n.length===0?[{sender:null,body:e}]:n}function _v(e){let t=e.indexOf(`:`);if(t<=0)return null;let n=e.slice(0,t);return J_(n)?n:null}function vv(e){let t=/^\[@[^\]\s]+ (completed|idle)\]/.exec(e);return t?t[1]===`idle`?`scoop-idle`:`scoop-notify`:/^\[@[^\]\s]+ sudo-request\]/.test(e)?`sudo-request`:/^\[scoop_wait [^\]]+\]/.test(e)?`scoop-wait`:e.startsWith(`[Session Reload]`)?`session-reload`:null}function yv(e){return/^(?:Lick ID|Request ID): (\S+)/m.exec(e)?.[1]}function bv(e){let t=rv(e.messages,{source:e.name}),n=t.filter(e=>e.role===`assistant`).length,r=[`# Agent session: ${e.name}`,``,`- jid: ${e.jid}`,`- exit code: ${e.exitCode}`,`- turns: ${n}`,`- messages: ${e.messages.length}`,`- timestamp: ${e.timestamp}`,``,`## Prompt`,``,e.prompt.length>0?e.prompt:`_(empty prompt)_`,``,`---`,``];if(t.length===0)r.push(`_(no messages captured)_`,``);else for(let e of t)xv(r,e);return Se(r.join(`
891
+ `),Ce())}function xv(e,t){e.push(`## ${t.role}`,``);let n=t.content.trim();n.length>0&&e.push(n,``);for(let n of t.toolCalls??[])Sv(e,n)}function Sv(e,t){e.push(`### tool: ${t.name}`,``,`Input:`,``,"```json",Cv(t.input),"```",``),t.result!==void 0&&e.push(t.isError?`Result (error):`:`Result:`,``,"```",t.result,"```",``)}function Cv(e){try{return JSON.stringify(e,null,2)??String(e)}catch{return String(e)}}const wv=_(`agent-bridge`),Tv=`__slicc_agent`;function Ev(e){for(let t=0;t<8;t++){let t=e.generateName(),n=`agent_${Qv(t)}`;if(!e.orchestrator.getScoops().some(e=>e.jid===n))return t}return e.generateUid()}function Dv(e,t){if(t===void 0)return null;let n=e.getScoops().find(e=>e.jid===t);if(!n)return null;let r=Bn(n);if(!r||r.length===0)return null;let i=Gn(n);return i?{modelId:r,providerId:i}:{modelId:r}}function Ov(e,t){let n=e.getWorkUnits(),r=(t===null?null:n.rootOf(t))??n.resolveDefaultRoot();return lr(r?.descriptor.workspace??cr)}function kv(e,t){if(t===void 0)return null;let n=e.getScoops().find(e=>e.jid===t);if(!n)return null;let r=Wn(n).level;return r&&pr(r)?r:null}function Av(e,t){let n=e.modelId,r,i;if(n!==void 0){let a=e.modelProviderId!==void 0&&n!==``?`${e.modelProviderId}:${n}`:n,o=a===``?{ok:!1,error:`unknown model: ${n}`}:t(a);if(!o.ok)return{error:{finalText:`agent: ${o.error}`,exitCode:1}};r=o.selection.modelId,i=o.selection.providerId}let a=e.thinkingLevel;if(a!==void 0&&!pr(a))return{error:{finalText:`agent: invalid thinking level: ${String(a)} (one of: ${mr.join(`, `)})`,exitCode:1}};let o=jn(e.workspaceMode);if(!o.ok)return{error:{finalText:`agent: ${o.error}`,exitCode:1}};let s=e.backgroundAfterSeconds;if(s!==void 0&&(typeof s!=`number`||!Number.isFinite(s)||s<0))return{error:{finalText:`agent: invalid backgroundAfterSeconds: ${String(s)} (seconds >= 0)`,exitCode:1}};let c=jv(e);if(c)return c;let l=e.name;if(l!==void 0&&!zv(l))return{error:{finalText:`agent: invalid name: ${l} (lowercase tokens joined by single dashes)`,exitCode:1}};for(let[t,n]of[[`maxTurns`,e.maxTurns],[`maxWallClockMs`,e.maxWallClockMs]])if(n!==void 0&&(!Number.isInteger(n)||n<=0))return{error:{finalText:`agent: ${t} must be a positive integer: ${String(n)}`,exitCode:1}};return{resolvedModelId:r,resolvedProviderId:i}}function jv(e){let t=e.mergeOnSuccess,n=[[`successReceiptPath`,e.successReceiptPath],[`outcomeReceiptPath`,e.outcomeReceiptPath],[`mergeOnSuccess.targetPath`,t?.targetPath],[`mergeOnSuccess.basePath`,t?.basePath],[`mergeOnSuccess.draftPath`,t?.draftPath]],r=t===void 0?void 0:``;for(let[e,t]of n){let n=t??(e.startsWith(`mergeOnSuccess`)?r:void 0);if(n!==void 0&&!n.startsWith(`/`))return{error:{finalText:`agent: ${e} must be absolute: ${String(t)}`,exitCode:1}}}return null}function Mv(e){return/^agent run terminated: .*\bbound\b.*\bexceeded\b/.test(e)}async function Nv(e,t){let n=async t=>{try{let n=await e.readFile(t,{encoding:`utf-8`});return typeof n==`string`?n:new TextDecoder().decode(n)}catch(e){if(oy(e,`ENOENT`))return``;throw e}},r=async()=>{for(let n of[t.basePath,t.draftPath])try{await e.rm(n)}catch{}},i=async t=>{try{let n=await e.readFile(t,{encoding:`utf-8`});return typeof n==`string`?n:new TextDecoder().decode(n)}catch(e){if(oy(e,`ENOENT`))return null;throw e}};try{let a=await i(t.draftPath);if(a===null)return await r(),{applied:!1,conflicts:0};let o=await n(t.targetPath);if(a===o)return await r(),{applied:!1,conflicts:0};let s=await i(t.basePath);if(s===null)return{applied:!1,conflicts:0,error:`base snapshot missing; target left as-is`};if(a===s)return await r(),{applied:!1,conflicts:0};if(o===s)return await e.writeFile(t.targetPath,a),await r(),{applied:!0,conflicts:0};let c=On(o,s,a,{favor:`theirs`});return await e.writeFile(t.targetPath,c.content),await r(),{applied:!0,conflicts:c.conflicts}}catch(e){let n=ay(e);return wv.warn(`mergeOnSuccess failed; target left as-is, staging kept`,{target:t.targetPath,error:n}),{applied:!1,conflicts:0,error:n}}}async function Pv(e,t,n,r){try{let i=t.slice(0,t.lastIndexOf(`/`));return i&&await e.mkdir(i,{recursive:!0}),await e.writeFile(t,JSON.stringify({status:n.exitCode===0?`ok`:`failed`,exitCode:n.exitCode,finishedAt:new Date().toISOString(),...n.exitCode===0&&!r?.promotedOnTrip?{}:{reason:n.finalText.slice(0,500)},...r?{merge:r}:{}},null,2)),!0}catch(e){return wv.warn(`outcome receipt write failed`,{path:t,error:ay(e)}),!1}}async function Fv(e,t){try{let n=t.slice(0,t.lastIndexOf(`/`));n&&await e.mkdir(n,{recursive:!0}),await e.writeFile(t,new Date().toISOString())}catch(e){wv.warn(`success receipt write failed`,{path:t,error:ay(e)})}}async function Iv(e,t,n,r){try{await e.orchestrator.notifyScoopOutcome(t,{exitCode:r.exitCode,...n?{receiptPath:n}:{},...r.exitCode!==0||Mv(r.finalText)?{reason:r.finalText.slice(0,500)}:{}})}catch(e){wv.warn(`pass outcome notify failed`,{jid:t,error:ay(e)})}}async function Lv(e,t,n,r){t.notifyOnComplete!==!0||!t.outcomeReceiptPath||await Iv(e,n,r.receiptWritten?t.outcomeReceiptPath:void 0,r.outcome)}const Rv=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;function zv(e){return Rv.test(e)}const Bv=`agent: name already in use`;async function Vv(e,t,n,r,i){if(t.persistSession===!1)return;let a=t.persistSession===!0?`/sessions`:`/tmp`,o=new Date().toISOString().replace(/[:.]/g,`-`),s=`${a}/agent-${r}-${o}.md`;try{let c=e.orchestrator.getScoopContext(n),l=typeof c?.getAgentMessages==`function`?c.getAgentMessages():[],u=bv({name:r,jid:n,prompt:t.prompt,exitCode:i.exitCode,messages:l,timestamp:o});await e.sharedFs.mkdir(a,{recursive:!0}),await e.sharedFs.writeFile(s,u)}catch(e){wv.warn(`agent session archive write failed`,{path:s,error:ay(e)})}}function Hv(e,t,n,r,i,a){let o=ey(e.cwd),s=ty(e.workspaceMode),c={visiblePaths:ry(e,a,s),writablePaths:iy([...ny(e.writablePaths,o,s),`${i}/`,`/tmp/`]),workspaceMode:s,allowedCommands:e.allowedCommands};return e.maxTurns!==void 0&&(c.maxTurns=e.maxTurns),e.maxWallClockMs!==void 0&&(c.maxWallClockMs=e.maxWallClockMs),e.backgroundAfterSeconds!==void 0&&(c.backgroundAfterSeconds=e.backgroundAfterSeconds),t&&(c.modelId=t,n!==void 0&&(c.modelProviderId=n)),r!==void 0&&(c.thinkingLevel=r),e.structuredOutputSchema!==void 0&&(c.structuredOutputSchema=e.structuredOutputSchema),c}function Uv(e,t){let n={sendMessages:[],responseBuffer:``,scoopError:null,unsubscribe:null};return n.unsubscribe=e.observeScoop(t,{onSendMessage:e=>{n.sendMessages.push(e)},onResponse:(e,t)=>{t?n.responseBuffer+=e:n.responseBuffer=e},onError:e=>{n.scoopError===null&&(n.scoopError=e)}}),n}async function Wv(e,t,n,r,i){if(await e.sendPrompt(t,n,`agent`,`agent`),i.scoopError!==null)return{finalText:i.scoopError,exitCode:1};if(r){let n=e.getScoopContext(t),r=n?.getStructuredOutput?.();for(let a=0;a<2&&!r?.captured;a++){if(await e.sendPrompt(t,`You did not call StructuredOutput. Call it now with your result, matching the schema.`,`agent`,`agent`),i.scoopError!==null)return{finalText:i.scoopError,exitCode:1};r=n?.getStructuredOutput?.()}return r?.captured?{finalText:JSON.stringify(r.value),exitCode:0}:{finalText:`agent: scoop did not produce StructuredOutput`,exitCode:1}}return{finalText:i.sendMessages.length>0?i.sendMessages[i.sendMessages.length-1]:i.responseBuffer,exitCode:0}}async function Gv(e,t,n,r){try{await e.orchestrator.unregisterScoop(t)}catch(e){wv.warn(`unregisterScoop failed`,{jid:t,error:ay(e)})}try{await e.sharedFs.rm(r,{recursive:!0})}catch(e){oy(e,`ENOENT`)||wv.warn(`scratch folder cleanup failed`,{folder:n,error:ay(e)})}if(e.sessionStore)try{await e.sessionStore.delete(t)}catch(e){wv.warn(`sessionStore.delete failed`,{jid:t,error:ay(e)})}}async function Kv(e,t,n,r,i){let a=await qv(e,t,n,r,i),o;a.exitCode===0&&t.mergeOnSuccess?(o=await Nv(e.sharedFs,t.mergeOnSuccess),o.error!==void 0&&(a={finalText:`agent: mergeOnSuccess failed: ${o.error}`,exitCode:1})):t.mergeOnSuccess&&Mv(a.finalText)&&(o=await Nv(e.sharedFs,t.mergeOnSuccess),o.applied?(o.promotedOnTrip=!0,wv.info(`run tripped its bound; staged rewrite promoted`,{target:t.mergeOnSuccess.targetPath,conflicts:o.conflicts}),a={finalText:`${a.finalText} — staged rewrite promoted`,exitCode:0}):o.error===void 0&&(o=void 0)),a.exitCode===0&&t.successReceiptPath&&await Fv(e.sharedFs,t.successReceiptPath);let s=!1;return t.outcomeReceiptPath&&(s=await Pv(e.sharedFs,t.outcomeReceiptPath,a,o)),{outcome:a,receiptWritten:s}}async function qv(e,t,n,r,i){try{await e.orchestrator.registerScoop(n)}catch(e){return{finalText:i.scoopError??ay(e),exitCode:1}}try{let n=await Wv(e.orchestrator,r,t.prompt,t.structuredOutputSchema,i);return t.signal?.aborted?{finalText:`agent: aborted`,exitCode:1}:n||{finalText:i.scoopError??``,exitCode:1}}catch(e){return{finalText:i.scoopError??ay(e),exitCode:1}}}function Jv(e,t,n=null,r={}){let i={orchestrator:e,sharedFs:t,sessionStore:n,generateName:r.generateName??Zv,generateUid:r.generateUid??Xv,resolveModel:r.resolveModel??$v};async function a(e){let t=Av(e,i.resolveModel);if(`error`in t)return t.error;let n=Dv(i.orchestrator,e.parentJid),r=t.resolvedModelId??n?.modelId??``,a=t.resolvedModelId===void 0?n?.providerId:t.resolvedProviderId,o=e.thinkingLevel??kv(i.orchestrator,e.parentJid)??void 0,s=e.name===void 0?Ev(i):e.name,c=`agent-${s}`,l=`agent_${Qv(s)}`,u=new Set(i.orchestrator.getScoops().map(e=>e.jid));if(e.name!==void 0&&u.has(l))return{finalText:`${Bv}: ${s}`,exitCode:1};let d=(e.exclusiveWith??[]).find(e=>u.has(`agent_${Qv(e)}`));if(d!==void 0)return{finalText:`${Bv}: ${d}`,exitCode:1};let f=`/scoops/${c}`,p=e.parentJid??O(i.orchestrator.getScoops())[0]?.jid??null,m=Hv(e,r,a,o,f,Ov(i.orchestrator,p)),h={jid:l,name:c,folder:c,requiresTrigger:!1,assistantLabel:c,addedAt:new Date().toISOString(),config:m,configSchemaVersion:3,notifyOnComplete:e.notifyOnComplete===!0,parentJid:p,...e.outcomeReceiptPath?{outcomeReceiptPath:e.outcomeReceiptPath}:{}},ee=Uv(i.orchestrator,l),g=()=>{try{i.orchestrator.stopScoop(l)}catch(e){wv.warn(`stopScoop on abort failed`,{jid:l,error:ay(e)})}};if(e.signal?.addEventListener(`abort`,g,{once:!0}),e.signal?.aborted)return e.signal.removeEventListener(`abort`,g),ee.unsubscribe?.(),{finalText:`agent: aborted before start`,exitCode:1};let te={finalText:``,exitCode:1};try{let t=await Kv(i,e,h,l,ee);return te=t.outcome,await Lv(i,e,l,t),te}finally{e.signal?.removeEventListener(`abort`,g),ee.unsubscribe?.(),await Vv(i,e,l,s,te),await Gv(i,l,c,f)}}return{spawn:a}}function Yv(e,t,n=null,r={}){let i=Jv(e,t,n,r);return globalThis[Tv]=i,wv.info(`agent bridge published on globalThis.__slicc_agent`),i}function Xv(){let e=globalThis;return typeof e.crypto?.randomUUID==`function`?e.crypto.randomUUID().replace(/-/g,``).slice(0,12):`${Date.now().toString(36)}${Math.random().toString(36).slice(2,8)}`}function Zv(){return`${G_[Math.floor(Math.random()*G_.length)]}-${K_[Math.floor(Math.random()*K_.length)]}`}function Qv(e){return e.replace(/-/g,`_`)}function $v(e){try{return de(e)}catch(t){return wv.warn(`defaultResolveModel: provider/account lookup threw; treating model as unknown`,{modelId:e,error:t instanceof Error?t.message:String(t)}),{ok:!1,error:`unknown model: ${e}`}}}function ey(e){let t=En(e);return t.endsWith(`/`)?t:`${t}/`}function ty(e){let t=jn(e);return t.ok?t.mode:Mn}function ny(e,t,n=Mn){let r=n===`private`?[t]:[t,`/shared/`];return e===void 0||e.some(e=>typeof e!=`string`||!e.startsWith(`/`)||e.includes(`\0`))?r:e.map(ey)}function ry(e,t,n=Mn){if(e.visiblePaths!==void 0)return e.visiblePaths.map(ey);if(n===`private`)return[];let r=[...t];return e.invokingCwd&&e.invokingCwd.length>0&&r.push(ey(e.invokingCwd)),iy(r)}function iy(e){let t=new Set,n=[];for(let r of e)t.has(r)||(t.add(r),n.push(r));return n}function ay(e){return e instanceof Error?e.message:String(e)}function oy(e,t){if(typeof e!=`object`||!e)return!1;let n=e.code;return typeof n==`string`&&n===t}const sy=`sessions`;function cy(){return new Promise((e,t)=>{let n=indexedDB.open(`browser-coding-agent`,1);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(sy)||e.createObjectStore(sy,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}var ly=class{db=null;async init(){await this.getDb()}async getDb(){if(!this.db){let e=await cy();e.onversionchange=()=>{e.close(),this.db=null},e.onclose=()=>{this.db=null},this.db=e}return this.db}async save(e){let t=await this.getDb();return new Promise((n,r)=>{let i=t.transaction(sy,`readwrite`);i.objectStore(sy).put(e),i.oncomplete=()=>n(),i.onerror=()=>r(i.error)})}async load(e){let t=await this.getDb();return new Promise((n,r)=>{let i=t.transaction(sy,`readonly`).objectStore(sy).get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async list(){let e=await this.getDb();return new Promise((t,n)=>{let r=e.transaction(sy,`readonly`).objectStore(sy).getAll();r.onsuccess=()=>{t(r.result.sort((e,t)=>t.updatedAt-e.updatedAt).map(e=>e.id))},r.onerror=()=>n(r.error)})}async delete(e){let t=await this.getDb();return new Promise((n,r)=>{let i=t.transaction(sy,`readwrite`);i.objectStore(sy).delete(e),i.oncomplete=()=>n(),i.onerror=()=>r(i.error)})}async saveMessages(e,t){let n=await this.load(e),r=n?{...n,messages:t,updatedAt:Date.now()}:{id:e,messages:t,createdAt:Date.now(),updatedAt:Date.now()};await this.save(r)}};const uy={summarizing:`summarizing`,fallback:`fallback`,cancelled:`discarded`,idle:`summarized`};var dy=class{mintId;open=new Map;settled=new Map;constructor(e){this.mintId=e}apply(e,t,n,r){if(t===`extracting-memory`)return null;let i=this.open.get(e)??this.lateRetraction(e,t,n)??r;if(t!==`summarizing`&&!i)return null;t!==`summarizing`&&(this.open.delete(e),this.settled.delete(e));let a=i??this.mintId(e);if(t===`summarizing`&&this.open.set(e,a),(t===`idle`||t===`fallback`)&&n.roundId&&this.settled.set(e,{messageId:a,roundId:n.roundId}),t===`cancelled`)return{kind:`retract`,messageId:a};let o={trigger:n.trigger,state:uy[t],...n.transcriptPath?{transcriptPath:n.transcriptPath}:{}};return t===`summarizing`?{kind:`open`,messageId:a,marker:o}:{kind:`settle`,messageId:a,marker:o}}forget(e){this.open.delete(e),this.settled.delete(e)}lateRetraction(e,t,n){if(t!==`cancelled`||!n.roundId)return;let r=this.settled.get(e);return r?.roundId===n.roundId?r.messageId:void 0}},fy=e({formatMountRecoveryPrompt:()=>yy,mdInlineCode:()=>vy,recoverMounts:()=>gy,shellQuote:()=>_y});function py(e){return e instanceof Error?e.message:String(e)}async function my(e,t,n,r){let i=await Cr(t.idbHandleKey),a=typeof i?.name==`string`?i.name:``,o={kind:`local`,path:e,dirName:a};if(!i||!(`queryPermission`in i))return{entry:o,ok:!1};let s;try{s=await i.queryPermission({mode:`readwrite`})}catch(t){return r?.warn?.(`queryPermission threw on persisted handle`,{path:e,error:py(t)}),{entry:o,ok:!1}}if(s!==`granted`)return{entry:o,ok:!1};try{let s=hr.fromHandle(i,{mountId:t.mountId});return await n.mount(e,s,{limits:gr}),r?.info?.(`Restored mount from previous session`,{path:e,name:a}),{entry:o,ok:!0}}catch(t){return r?.warn?.(`Failed to re-mount persisted handle`,{path:e,error:py(t)}),{entry:o,ok:!1}}}async function hy(e,t,n,r){let{kind:i,source:a,profile:o,mountId:s}=t,c=i===`s3`?`S3`:i===`aem`?`AEM`:`DA`;try{let t={source:a,profile:o,cache:new wr({mountId:s,ttlMs:3e4}),mountId:s},l=i===`s3`?new vr({...t,signedFetch:yr(o)}):i===`aem`?new xr({...t,signedFetch:Sr()}):new _r({...t,signedFetch:Sr()});return await n.mount(e,l),r?.info?.(`Restored ${c} mount from previous session`,{path:e,source:a}),{entry:{kind:i,path:e,source:a,profile:o,reason:``},ok:!0}}catch(t){let n=py(t);return r?.warn?.(`Failed to restore ${c} mount`,{path:e,error:n}),{entry:{kind:i,path:e,source:a,profile:o,reason:n},ok:!1}}}async function gy(e,t,n){let r=[],i=[];for(let{targetPath:a,descriptor:o}of e){if(o.kind===`hostfs`)continue;let e=o.kind===`local`?await my(a,o,t,n):await hy(a,o,t,n);(e.ok?r:i).push(e.entry)}return{restored:r,needsRecovery:i}}function _y(e){return`'${e.replace(/'/g,`'\\''`)}'`}function vy(e){let t=e.replace(/\r\n|[\r\n]/g,` `),n=t.match(/`+/g),r=n?Math.max(...n.map(e=>e.length))+1:1,i="`".repeat(r);return`${i}${t.startsWith("`")||t.endsWith("`")?` ${t} `:t}${i}`}function yy(e){if(!Array.isArray(e)||e.length===0)return null;let t=e.length===1?`mount point`:`mount points`,n=e.length===1?`it`:`them`,r=e.filter(e=>e.kind===`local`),i=e.filter(e=>e.kind===`s3`||e.kind===`da`||e.kind===`aem`),a=[`[Session Reload] Mount recovery required for ${e.length} ${t}.`,``];if(r.length>0){let e=r.map(({path:e,dirName:t})=>{let n=t?` (previously mounted from ${vy(t)})`:``;return`- ${vy(e)}${n}`}),i=r.map(({path:e})=>` mount ${_y(e)}`);a.push(`The page was reloaded and the following local ${t} lost filesystem permission. The browser cannot restore access without a fresh user gesture, so ${n} cannot be used until the user re-authorizes:`,``,...e,``,`Please tell the user what happened and ask whether they want to re-mount. If yes, run the corresponding command(s) so the folder picker opens and they can re-select the same directory:`,``,...i,``)}if(i.length>0){let e=i.map(({path:e,source:t,profile:n,reason:r})=>{let i=n==="default"?``:` --profile ${_y(n)}`,a=`mount --source ${_y(t)}${i} ${_y(e)}`;return`- ${vy(e)} (${vy(t)}, profile ${vy(n)}) — ${r}\n Retry: ${vy(a)}`});a.push(`The following remote ${t} could not be auto-restored:`,``,...e,``)}return a.push("If the user no longer needs a mount, run `mount unmount <path>` (with the path shell-quoted the same way) to clear the stale entry instead."),a.join(`
892
+ `)}const by=new Set([`webhook`,`cron`,`sprinkle`,`fswatch`,`session-reload`,`navigate`,`upgrade`,`cherry`,`workflow`,`bash`,`jshd`,`sudo-request`,`preview`,`discovery`]);function xy(e){return e!=null&&by.has(e)}const Sy={webhook:`Webhook Event`,sprinkle:`Sprinkle Event`,fswatch:`File Watch Event`,"session-reload":`Session Reload`,navigate:`Navigate Event`,upgrade:`Upgrade Event`,cherry:`Cherry Event`,workflow:`Workflow Event`,bash:`Background Command`,jshd:`jshd Unit`,cron:`Cron Event`,"sudo-request":`Scoop Access Request`,preview:`Preview`,discovery:`Discovery Event`};function Cy(e){switch(e.type){case`webhook`:return e.webhookName;case`sprinkle`:return e.sprinkleName;case`fswatch`:return e.fswatchName;case`session-reload`:return wy(e);case`navigate`:return e.navigateUrl;case`upgrade`:return`${e.upgradeFromVersion??`unknown`}→${e.upgradeToVersion??`unknown`}`;case`cherry`:return e.cherryName;case`workflow`:return e.workflowName;case`bash`:return e.bashJobId;case`jshd`:return e.jshdName;case`sudo-request`:return e.sudoScoopName;case`discovery`:return e.discoveryUrl??e.discoveryOrigin;default:return e.cronName}}function wy(e){let t=e.body?.reason;return typeof t==`string`&&t?t:`mount-recovery`}function Ty(e){let t=e.body,n=Array.isArray(t?.tools)?t.tools:[],r=n.map(e=>{let t=e.args?` ${e.args}`:``;return`- \`${e.toolName??`unknown`}\`${t}`});return`[Session Reload: tool-call-interrupted]\nThe page reloaded while your last turn was running. ${n.length===1?`A tool call was`:`${n.length} tool calls were`} still in flight, so ${n.length===1?`its result was`:`their results were`} lost:\n${r.join(`
893
+ `)}\n\nThey were NOT re-run automatically, because tool calls can have side effects — each may or may not have completed. Check the current state (files, tabs, processes) before deciding whether to run any of them again, then continue the task.`}function Ey(e,t){let n=e.body,r=e.lickId;if(n?.reason===`tool-call-interrupted`){let n=r?`\n\nLick ID: ${r}\nCall \`lick_dismiss\` with this lick id once you have dealt with it.`:``;return{label:t,content:`${Ty(e)}${n}`}}if(n?.reason===`mount-recovery`){let e=yy(n.mounts??[]);return e===null?null:{label:t,content:`${e}${r?`\n\nLick ID: ${r}\nThis card is actionable: call \`lick_confirm\` with this lick id to re-run the listed \`mount …\` command(s) so the user can re-authorize, or \`lick_dismiss\` to leave them unmounted. The card flips to ✓ on confirm / muted ✗ on dismiss.`:``}`}}let i=Fy(e,t);if(!r)return i;let a=`\n\nLick ID: ${r}\nThis card is informational — there is NO confirm action. Call \`lick_dismiss\` with this lick id to acknowledge and clear it. The card flips to muted ✗ on dismiss.`;return{label:i.label,content:`${i.content}${a}`}}function Dy(e,t){let n=e.upgradeFromVersion??`unknown`,r=e.upgradeToVersion??`unknown`,i=e.body?.releasedAt??null,a=i?`\nReleased: ${i}`:``,o=e.lickId;return{label:t,content:`[${t}: ${n}→${r}]\n\nSLICC was upgraded from \`${n}\` to \`${r}\`.${a}${o?`\n\nLick ID: ${o}\nUse the **upgrade** skill (\`/workspace/skills/upgrade/SKILL.md\`). The card is a binary action: call \`lick_confirm\` with this lick id to **Update workspace files** (it runs the three-way merge of bundled vfs-root content into the user's VFS), or \`lick_dismiss\` to clear it. The card flips to ✓ on confirm / muted ✗ on dismiss. Reviewing the changelog is a separate step you can run first — it is NOT a card action.`:`
894
+
895
+ Use the **upgrade** skill (\`/workspace/skills/upgrade/SKILL.md\`) to offer the user a three-way merge of bundled vfs-root content into their workspace (bundled snapshot vs user's VFS, reconciled with the GitHub tag-to-tag diff).`}`}}function Oy(e,t){let n=e.cherryOrigin??`unknown origin`,r=e.cherryRuntimeId??`unknown`;return{label:t,content:`[${t}: ${e.cherryName??`unnamed`}] from ${n} (runtime ${r})\n\`\`\`json\n${JSON.stringify(e.body,null,2)}\n\`\`\``}}function ky(e,t){let n=e.previewOrigin??`unknown origin`;return{label:t,content:`Preview tab ${(e.previewLifecycle??`unknown`)===`connected`?`connected`:`disconnected`} from ${n}`}}function Ay(e,t){let n=e.workflowName??`workflow`,r=e.resultPath??`(no result file)`,i=e.preview??``;return{label:t,content:`[${t}: ${n}] ${e.body?.status??`complete`} — ${i}\nFull result: ${r} (read it only if you need the whole thing).`}}function jy(e,t){let n=e.jshdName??`unknown`,r=e.jshdRestarts??0,i=e.resultPath;return{label:t,content:`[${t}: ${n}] marked errored after ${r} restarts.\nThe restart policy stopped trying so the unit does not crash-loop.\n${i?`Logs: ${i} (page with \`jshd logs ${n}\`).`:`No log file was written.`}${e.preview?.length?`\n\n\`\`\`\n${e.preview}\n\`\`\``:``}\n\nInspect with \`jshd status ${n}\`; start it again with \`jshd start -n ${n}\` after fixing the script.`}}function My(e,t){let n=e.bashJobId??`unknown job`,r=e.bashJobPid===void 0?``:` (pid ${e.bashJobPid})`,i=e.bashCommand??`(unknown command)`,a=e.bashExitCode,o=a===0?`succeeded`:a===130||a===137||a===143?`was terminated (exit code ${a}) — killed by a signal, not by its own failure`:`failed (exit code ${a??`unknown`})`,s=e.resultPath;return{label:t,content:`[${t}: ${n}${r}] \`${i}\` ${o}.\n${s?`Full output: ${s} (page it with \`sed -n\`/\`tail\`/\`grep\` if the preview below is cut).`:`Its output could NOT be written to a file — the preview below is all that survived.`}${e.preview?.length?`\n\n\`\`\`\n${e.preview}\n\`\`\``:``}\n\nThis is the delayed result of a command that was detached earlier in this session — do not re-run it. Act on it if it still matters, otherwise acknowledge and move on.`}}function Ny(e,t){let n=e.sudoScoopName??`a scoop`,r=e.lickId??`(unknown)`,i=e.sudoKind??`unknown`,a=e.sudoDetail??``,o=[`[${t}: ${n}]`,`Lick ID: ${r}`,`Kind: ${i}`,`Detail: ${a}`];return e.sudoReason&&o.push(`Reason given: ${e.sudoReason}`),e.sudoSuggestedPattern&&o.push(`Suggested pattern: ${e.sudoSuggestedPattern}`),o.push(``,`Use the lick_confirm tool with lick_id="${r}" to approve (or always-approve with a pattern), or lick_dismiss with lick_id="${r}" and a reason to deny.`),{label:t,content:o.join(`
896
+ `)}}function Py(e,t){let n=e.discoveryOrigin??`an origin`,r=e.discoveryUrl??`(unknown URL)`,i=e.discoveryKind===`llms-txt`?`an llms.txt digest`:`an ai-catalog manifest`,a=e.discoveryKind??`unknown`;return{label:t,content:`${e.originLabel?`_Forwarded from ${e.originLabel}._\n\n`:``}[${t}: ${r}]\n${n} advertises ${i} (kind: ${a}) at ${r}.${e.discoveryKind===`llms-txt`&&e.lickId?`\n\nLick ID: ${e.lickId}\nThis card is dismiss-only: call \`lick_dismiss\` to add the advertising host to \`/etc/llmstxtignore\` and silence future discoveries without a prompt. There is NO confirm action.`:`
897
+ This is informational — there is no card action.`}\nYou MAY fetch it (e.g. \`curl ${r}\`) when relevant.`}}function Fy(e,t){let n=Cy(e);return{label:t,content:`${e.originLabel?`_Forwarded from ${e.originLabel}._\n\n`:``}[${t}: ${n}]\n\`\`\`json\n${JSON.stringify(e.body,null,2)}\n\`\`\``}}function Iy(e,t){let n=e.headers,r=n?.[`x-slicc-preview-conn`];if(!r)return Fy(e,t);let i=n[`x-slicc-preview-token`]??``;return{label:`Preview Event`,content:`[Preview event: ${e.body?.name??`event`}] from tab${i?` (preview:${i}:${r})`:` (conn ${r})`}\n\`\`\`json\n${JSON.stringify(e.body,null,2)}\n\`\`\``}}function Ly(e,t){let n=Fy(e,t),r=e.lickId;if(!r)return n;let i=e.body?.verb===`upskill`?`\n\nLick ID: ${r}\nUpskill install. To install, call \`lick_confirm\` with this lick id (it runs \`upskill … --all\` with any branch/path scope from the body, so it installs EVERY skill under that scope — a broad path can be many); to skip, call \`lick_dismiss\`. The card flips to ✓ on confirm / muted ✗ on dismiss.`:`\n\nLick ID: ${r}\nExternal handoff — stays human-gated. Show the approval dip and wait for the user; do NOT use \`lick_confirm\` / \`lick_dismiss\` here. Carry the lick id in the dip action so the card resolves: slicc.lick({action:'accept'|'dismiss', data:{lickId:'${r}'}}).`;return{label:n.label,content:`${n.content}${i}`}}function Ry(e){let t=Sy[e.type];return e.type===`session-reload`?Ey(e,t):e.type===`upgrade`?Dy(e,t):e.type===`cherry`?Oy(e,t):e.type===`preview`?ky(e,t):e.type===`workflow`?Ay(e,t):e.type===`bash`?My(e,t):e.type===`jshd`?jy(e,t):e.type===`sudo-request`?Ny(e,t):e.type===`navigate`?Ly(e,t):e.type===`webhook`?Iy(e,t):e.type===`discovery`?Py(e,t):Fy(e,t)}function zy(e,t=Date.now){let n=e.parentId===null,r=e.folder??e.name,i=n?e.config:By(e,r),a={jid:e.id??(n?`cone_${t()}`:`scoop_${r}_${t()}`),name:e.name,folder:r,requiresTrigger:!n,assistantLabel:n?`sliccy`:r,addedAt:new Date(t()).toISOString(),parentJid:e.parentId,...i?{config:i,configSchemaVersion:3}:{},...e.notifyOnComplete===!1?{notifyOnComplete:!1}:{},...!n&&e.onParentClose===`detach`?{onParentClose:`detach`}:{}};return n||(a.trigger=`@${r}`),a}function By(e,t){let n=kn(e.workspace?.mode??e.config?.workspaceMode),r=e.workspace?.from??`/workspace`,i=rr(n,t,{root:r},e.workspace?.from),a=e.config;return{...a,workspaceMode:n,visiblePaths:a?.visiblePaths===void 0?i.visiblePaths:a.visiblePaths,writablePaths:a?.writablePaths===void 0?i.writablePaths:a.writablePaths}}function Vy(e,t){if(e.parentId===null||e.workspace?.from!==void 0)return e;let n=t.getScoop(e.parentId);return n?{...e,workspace:{mode:e.workspace?.mode??e.config?.workspaceMode??`shared-readonly`,from:fr(n).root}}:e}var Hy=class{host;constructor(e){this.host=e}async create(e){e.parentId===null&&e.workspace?.mode!==void 0&&kn(e.workspace.mode);let t=zy(Vy(e,this.host));if(qy(t.jid,e=>this.host.getScoop(e)),e.parentId!==null){let n=this.host.getScoop(e.parentId);if(!n)throw Error(`Parent work unit not found: ${e.parentId}`);Rn(t,n)}return await this.host.registerScoop(t),this.get(t.jid).descriptor}async createMany(e){if(e.length===0)return[];Jy(e,e=>this.host.getScoop(e),()=>this.host.getScoops());let t=Ky(e);for(let e of t)e.id&&qy(e.id,e=>this.host.getScoop(e));let n=Xy(t),r=[],i=new Map;try{for(let e of n){let t=await this.create(e);r.push(t.id),i.set(e,t)}}catch(e){for(let e=r.length-1;e>=0;e--)await this.close(r[e]).catch(()=>void 0);throw e}return t.map(e=>i.get(e))}async join(e,t){return(await this.host.waitForScoops(e,t?.timeoutMs)).map(e=>({id:e.jid,summary:e.summary,timedOut:e.timedOut}))}list(){return this.host.getScoops().map(e=>this.get(e.jid).descriptor)}get(e){return this.host.getScoop(e)?this.host.ensureLiveUnit(e):null}getParent(e){let t=this.host.getScoop(e)?.parentJid;return t?this.get(t):null}getChildren(e){return nr(this.host.getScoops(),e).map(e=>this.get(e.jid)).filter(e=>e!==null)}roots(){return O(this.host.getScoops()).map(e=>this.get(e.jid)).filter(e=>e!==null)}resolveDefaultRoot(){return this.roots()[0]??null}rootOf(e){let t=new Set,n=this.host.getScoop(e);for(;n&&n.parentJid!==null;){if(t.has(n.jid))return null;t.add(n.jid),n=this.host.getScoop(n.parentJid)}return n?this.get(n.jid):null}abort(e,t){let n=this.get(e);return n?n.abort(t):Promise.resolve()}async promote(e){let t=this.host.getScoop(e);if(!t)throw Error(`Work unit not found: ${e}`);if(t.parentJid===null)return this.get(e).descriptor;let n=kr(t),r=Wy(t,t.parentJid);t.parentJid=null,$n(t);try{await this.host.persistScoop(t)}catch(e){throw Gy(t,r),e}return await this.host.rekeyConversation?.(n,{key:kr(t),workUnitId:t.jid,workspaceId:Or(t),folder:t.folder,legacyKeys:{agentSessionId:t.jid,chatSessionId:qn(t)}}),await this.host.reinitLiveUnit(e),this.get(e).descriptor}detach(e){return this.promote(e)}async close(e,t){let n=this.get(e);if(!n)return;let r=this.getChildren(e);for(let e of r)Uy(e,t)===`detach`?await this.promote(e.descriptor.id):await this.close(e.descriptor.id,t);await n.close()}};function Uy(e,t){return t?.descendants??e.descriptor.onParentClose}function Wy(e,t){return{parentJid:t,trigger:e.trigger,requiresTrigger:e.requiresTrigger,approvesGuestRequests:e.approvesGuestRequests,onParentClose:e.onParentClose}}function Gy(e,t){e.parentJid=t.parentJid,e.trigger=t.trigger,e.requiresTrigger=t.requiresTrigger,e.approvesGuestRequests=t.approvesGuestRequests,e.onParentClose=t.onParentClose}function Ky(e){let t=Date.now();return e.map(e=>{if(e.id)return e;let n=e.folder??e.name,r=e.parentId===null?`cone_${t++}`:`scoop_${n}_${t++}`;return{...e,id:r}})}function qy(e,t){if(t(e))throw Error(`Work unit already exists: ${e}`)}function Jy(e,t,n){let r=new Set;for(let n of e)if(n.id){if(r.has(n.id))throw Error(`Duplicate work unit id in createMany: ${n.id}`);qy(n.id,t),r.add(n.id)}Yy(e,n);let i=[],a=new Set;for(let n of e)n.parentId!==null&&(t(n.parentId)||r.has(n.parentId)||a.has(n.parentId)||(a.add(n.parentId),i.push(n.parentId)));if(i.length>0)throw Error(`Parent work unit not found: ${i.join(`, `)}`)}function Yy(e,t){let n=new Set(t().map(e=>e.folder)),r=new Set;for(let t of e){let e=t.folder??t.name;if(r.has(e)||n.has(e))throw Error(`Duplicate work unit folder in createMany: ${e}`);r.add(e)}}function Xy(e){let t=e.length;if(t<=1)return e.slice();let n=new Map;for(let r=0;r<t;r++){let t=e[r].id;t&&n.set(t,r)}let r=Array(t).fill(0),i=Array.from({length:t},()=>[]);for(let a=0;a<t;a++){let t=e[a].parentId;if(t===null)continue;let o=n.get(t);o!==void 0&&(i[o].push(a),r[a]+=1)}let a=[];for(let e=0;e<t;e++)r[e]===0&&a.push(e);let o=[];for(let t=0;t<a.length;t++){let n=a[t];o.push(e[n]);for(let e of i[n])--r[e],r[e]===0&&a.push(e)}if(o.length!==t)throw Error(`createMany cycle: parentId edges in this batch form a cycle`);return o}const Zy=_(`kernel-agent-event-stream`);var Qy=class{listeners=new Set;messageIds=new Map;subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}clear(e){this.messageIds.delete(e)}publish(e){let t=this.translate(e);for(let n of t)for(let t of this.listeners)try{t(e.scoopJid,n)}catch(e){Zy.error(`onAgentEvent listener threw`,{error:e instanceof Error?e.message:String(e)})}}translate(e){let{scoopJid:t,eventType:n}=e,r=[],i=()=>{let e=this.messageIds.get(t);return e||(e=`scoop-${t}-${$y()}`,this.messageIds.set(t,e),r.push({type:`message_start`,messageId:e})),e};switch(n){case`text_delta`:{let t=i();r.push({type:`content_delta`,messageId:t,text:e.text??``});break}case`tool_start`:{let t=i();r.push({type:`tool_use_start`,messageId:t,toolName:e.toolName??``,toolInput:e.toolInput,toolCallId:e.toolCallId});break}case`tool_end`:{let n=this.messageIds.get(t);if(!n)return r;r.push({type:`tool_result`,messageId:n,toolName:e.toolName??``,result:e.toolResult??``,isError:e.isError,toolCallId:e.toolCallId});break}case`tool_ui`:{let t=e.displayScoopJid?`tool-ui-${e.requestId??``}`:i();r.push({type:`tool_ui`,messageId:t,toolName:e.toolName??``,requestId:e.requestId??``,html:e.html??``});break}case`tool_ui_done`:{let n=e.displayScoopJid?`tool-ui-${e.requestId??``}`:this.messageIds.get(t);if(!n)return r;r.push({type:`tool_ui_done`,messageId:n,requestId:e.requestId??``});break}case`tool_progress`:{let n=this.messageIds.get(t);if(!n||!e.progress)return r;r.push({type:`tool_progress`,messageId:n,toolName:e.toolName??``,progress:e.progress,toolCallId:e.toolCallId});break}case`response_done`:{let n=this.messageIds.get(t);if(!n)return r;r.push({type:`content_done`,messageId:n,model:e.model,usage:e.usage}),this.messageIds.delete(t);break}case`turn_end`:this.messageIds.delete(t)}return r}};function $y(){return Date.now().toString(36)+Math.random().toString(36).slice(2,8)}var eb=class{statuses=new Map;activeScoopJid=null;setStatus(e,t){this.statuses.set(e,t)}clearStatus(e){this.statuses.delete(e)}setActiveScoopJid(e){this.activeScoopJid=e}getActiveScoopJid(){return this.activeScoopJid}projectScoop(e){let t=tb(e);return{jid:e.jid,name:e.name,folder:e.folder,parentId:e.parentJid,assistantLabel:e.assistantLabel,status:this.statuses.get(e.jid)??`ready`,...t?{config:t}:{}}}projectScoops(e){return e.map(e=>this.projectScoop(e))}buildStateSnapshot(e,t){let n=this.projectScoops(e),r=O(e)[0];return{type:`state-snapshot`,scoops:n,activeScoopJid:this.activeScoopJid??r?.jid??null,trayRuntimeStatus:t}}};function tb(e){let t=Bn(e),n=Gn(e),{level:r,effortOverride:i}=Wn(e);if(t!==void 0||n!==void 0||r!==void 0||i!==void 0)return{...t===void 0?{}:{modelId:t},...n===void 0?{}:{modelProviderId:n},...r===void 0?{}:{thinkingLevel:r},...i===void 0?{}:{effortOverride:i}}}const W={SCOOPS:`scoops`,MESSAGES:`messages`,SESSIONS:`sessions`,TASKS:`tasks`,STATE:`state`,WEBHOOKS:`webhooks`,CRONTASKS:`crontasks`};let nb=null;function rb(e){if(!e.objectStoreNames.contains(W.MESSAGES)){let t=e.createObjectStore(W.MESSAGES,{keyPath:`id`});t.createIndex(`chatJid`,`chatJid`),t.createIndex(`timestamp`,`timestamp`),t.createIndex(`chatJid_timestamp`,[`chatJid`,`timestamp`])}e.objectStoreNames.contains(W.SESSIONS)||e.createObjectStore(W.SESSIONS,{keyPath:`groupFolder`}),e.objectStoreNames.contains(W.TASKS)||e.createObjectStore(W.TASKS,{keyPath:`id`}).createIndex(`groupFolder`,`groupFolder`),e.objectStoreNames.contains(W.STATE)||e.createObjectStore(W.STATE,{keyPath:`key`})}function ib(e,t){let n=e.isMain??!1;return{jid:e.jid,name:e.name,folder:e.folder,trigger:n?void 0:e.trigger||`@${e.folder}`,requiresTrigger:!n&&(e.requiresTrigger??!0),parentJid:n?null:t??null,assistantLabel:n?`sliccy`:e.config?.assistantName||e.folder,addedAt:e.addedAt,config:e.config?{systemPromptAppend:e.config.systemPromptAppend,timeout:e.config.timeout,assistantName:e.config.assistantName}:void 0}}function ab(e,t){if(t.objectStoreNames.contains(`groups`)){let n=e.target.transaction.objectStore(`groups`).getAll();n.onsuccess=()=>{let e=n.result;t.deleteObjectStore(`groups`);let r=t.createObjectStore(W.SCOOPS,{keyPath:`jid`});r.createIndex(`type`,`type`);let i=e.find(e=>e.isMain)?.jid;for(let t of e)r.put(ib(t,i))};return}t.objectStoreNames.contains(W.SCOOPS)||t.createObjectStore(W.SCOOPS,{keyPath:`jid`}).createIndex(`type`,`type`)}function ob(e){e.objectStoreNames.contains(W.WEBHOOKS)||e.createObjectStore(W.WEBHOOKS,{keyPath:`id`}),e.objectStoreNames.contains(W.CRONTASKS)||e.createObjectStore(W.CRONTASKS,{keyPath:`id`})}function sb(e){let t=e.target.result,n=e.oldVersion;n<1&&rb(t),n<2&&ab(e,t),n<3&&ob(t)}function cb(){if(!nb)return null;let e=Object.values(W).every(e=>nb.objectStoreNames.contains(e));return nb.version===3&&e?nb:(nb.close(),nb=null,null)}function lb(e){e.onversionchange=()=>{e.close(),nb===e&&(nb=null)},e.onclose=()=>{nb===e&&(nb=null)}}async function ub(){return cb()||new Promise((e,t)=>{let n=indexedDB.open(`slicc-groups`,3);n.onupgradeneeded=sb,n.onsuccess=()=>{let t=n.result;lb(t),nb=t,e(t)},n.onerror=()=>t(n.error)})}async function G(e,t=`readonly`){return(await ub()).transaction(e,t).objectStore(e)}async function db(e){let t=await G(W.SCOOPS,`readwrite`);return new Promise((n,r)=>{let i=t.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function fb(){let e=await G(W.SCOOPS);return new Promise((t,n)=>{let r=e.getAll();r.onsuccess=()=>{let e={};for(let t of r.result)e[t.jid]=t;t(e)},r.onerror=()=>n(r.error)})}async function pb(e){let t=await G(W.SCOOPS,`readwrite`);return new Promise((n,r)=>{let i=t.delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function mb(){let e=await G(W.MESSAGES,`readwrite`);return new Promise((t,n)=>{let r=e.clear();r.onsuccess=()=>t(),r.onerror=()=>n(r.error)})}async function hb(e){let t=(await G(W.MESSAGES,`readwrite`)).index(`chatJid_timestamp`),n=IDBKeyRange.bound([e,``],[e,`￿`],!1,!1);return new Promise((e,r)=>{let i=t.openCursor(n);i.onsuccess=()=>{let t=i.result;if(!t){e();return}t.delete(),t.continue()},i.onerror=()=>r(i.error)})}async function gb(e){let t=await G(W.MESSAGES,`readwrite`);return new Promise((n,r)=>{let i=t.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function _b(e){let t=await G(W.MESSAGES,`readwrite`);return new Promise((n,r)=>{let i=t.delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function vb(e){let t=(await G(W.MESSAGES)).index(`chatJid_timestamp`),n=IDBKeyRange.bound([e,``],[e,`￿`],!1,!1);return new Promise((e,r)=>{let i=t.getAll(n);i.onsuccess=()=>e(i.result),i.onerror=()=>r(i.error)})}const yb=`wm1:`;function bb(e){if(!e)return{ts:``,ids:new Set};if(e.startsWith(yb))try{let t=JSON.parse(e.slice(4));return{ts:t.ts,ids:new Set(t.ids)}}catch{}return{ts:e,ids:null}}function xb(e){let t=e.ids?Array.from(e.ids):[];return`${yb}${JSON.stringify({ts:e.ts,ids:t})}`}function Sb(e,t){return e.timestamp>t.ts?!0:e.timestamp<t.ts||t.ids===null?!1:!t.ids.has(e.id)}function Cb(e,t){if(t.length===0)return e;let n=e.ts;for(let e of t)e.timestamp>n&&(n=e.timestamp);let r=new Set;if(e.ts===n&&e.ids)for(let t of e.ids)r.add(t);for(let e of t)e.timestamp===n&&r.add(e.id);return{ts:n,ids:r}}async function wb(e,t,n){let r=(await G(W.MESSAGES)).index(`chatJid_timestamp`),i=bb(t),a=IDBKeyRange.bound([e,i.ts],[e,`￿`],!1,!1);return new Promise((e,t)=>{let o=r.getAll(a);o.onsuccess=()=>{let t=o.result.filter(e=>Sb(e,i));n&&(t=t.filter(e=>e.senderName!==n)),e(t)},o.onerror=()=>t(o.error)})}async function Tb(e){let t=await G(W.TASKS,`readwrite`);return new Promise((n,r)=>{let i=t.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Eb(e){let t=await G(W.TASKS);return new Promise((n,r)=>{let i=t.get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async function Db(){let e=await G(W.TASKS);return new Promise((t,n)=>{let r=e.getAll();r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error)})}async function Ob(e){let t=await G(W.TASKS,`readwrite`);return new Promise((n,r)=>{let i=t.delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function kb(e){let t=await G(W.STATE);return new Promise((n,r)=>{let i=t.get(e);i.onsuccess=()=>n(i.result?.value??null),i.onerror=()=>r(i.error)})}async function Ab(e,t){let n=await G(W.STATE,`readwrite`);return new Promise((r,i)=>{let a=n.put({key:e,value:t});a.onsuccess=()=>r(),a.onerror=()=>i(a.error)})}async function jb(){await ub()}async function Mb(e){let t=await G(W.WEBHOOKS,`readwrite`);return new Promise((n,r)=>{let i=t.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Nb(e){let t=await G(W.WEBHOOKS);return new Promise((n,r)=>{let i=t.get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async function Pb(){try{let e=await G(W.WEBHOOKS);return new Promise((t,n)=>{let r=e.getAll();r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error)})}catch{return[]}}async function Fb(e){let t=await G(W.WEBHOOKS,`readwrite`);return new Promise((n,r)=>{let i=t.delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Ib(e){let t=await G(W.CRONTASKS,`readwrite`);return new Promise((n,r)=>{let i=t.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Lb(e){let t=await G(W.CRONTASKS);return new Promise((n,r)=>{let i=t.get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async function Rb(){try{let e=await G(W.CRONTASKS);return new Promise((t,n)=>{let r=e.getAll();r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error)})}catch{return[]}}async function zb(e){let t=await G(W.CRONTASKS,`readwrite`);return new Promise((n,r)=>{let i=t.delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}_(`tray-leader`);function Bb(){return Vb(jr(),Te())}function Vb(e,t){return{leader:{state:e.state,session:e.session?{workerBaseUrl:e.session.workerBaseUrl,trayId:e.session.trayId,createdAt:e.session.createdAt,controllerId:e.session.controllerId,controllerUrl:e.session.controllerUrl,joinUrl:e.session.joinUrl,webhookUrl:e.session.webhookUrl,...e.session.leaderKey===void 0?{}:{leaderKey:e.session.leaderKey},...e.session.leaderWebSocketUrl===void 0?{}:{leaderWebSocketUrl:e.session.leaderWebSocketUrl},runtime:e.session.runtime}:null,error:e.error??null,reconnectAttempts:e.reconnectAttempts??0},follower:{state:t.state,joinUrl:t.joinUrl,trayId:t.trayId,error:t.error,lastError:t.lastError,reconnectAttempts:t.reconnectAttempts,attachAttempts:t.attachAttempts,lastAttachCode:t.lastAttachCode,connectingSince:t.connectingSince,lastPingTime:t.lastPingTime}}}const Hb=`__slicc_binary__`;function Ub(e){if(!e||typeof e!=`object`)return!1;let t=e;return t[Hb]===`b64`&&typeof t.data==`string`}function Wb(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Uint8Array)}function Gb(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Uint8Array)&&!Ub(e)}function Kb(e){if(e instanceof Uint8Array)return{[Hb]:`b64`,data:ie(e)};if(Array.isArray(e))return e.map(Kb);if(Wb(e)){let t={};for(let[n,r]of Object.entries(e))t[n]=Kb(r);return t}return e}function qb(e){if(Ub(e))return ae(e.data);if(Array.isArray(e))return e.map(qb);if(Gb(e)){let t={};for(let[n,r]of Object.entries(e))t[n]=qb(r);return t}return e}const Jb=_(`panel-transport`);function Yb(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function Xb(){return{onMessage:e=>{let t=(t,n,r)=>(Yb(t)&&e(qb(t)),!1);return chrome.runtime.onMessage.addListener(t),()=>chrome.runtime.onMessage.removeListener(t)},send:(e,t)=>{let n=Kb(e);chrome.runtime.sendMessage({source:`offscreen`,payload:n}).catch(e=>{let t=e instanceof Error?e.message:String(e);/receiving end does not exist/i.test(t)||Jb.error(`Offscreen → panel transport send failed`,{error:t})})}}}const Zb=_(`kernel-bridge`);function Qb(){return globalThis}function $b(e){if(typeof e!=`object`||!e)return null;let t=e;if(t.action!==`accept`&&t.action!==`dismiss`)return null;let n=t.data,r=n&&typeof n.lickId==`string`?n.lickId:null;return r?{lickId:r,accepted:t.action===`accept`}:null}var ex=class{orchestrator=null;agentSpawnAborts=new Map;browserAPI=null;messageBuffers=new Map;conesBeingCreated=new Map;currentMessageId=new Map;compactionRows=new dy(e=>`compaction-${e}-${tx()}`);pendingMarkers=new Map;scoopPresentation=new eb;transcriptsPublished=!1;agentEventStream=new Qy;sessionStore=null;followerSync=null;followerActive=!1;_transport;transportUnsubscribe=null;constructor(e){this._transport=e??null}get transport(){return this._transport||=Xb(),this._transport}async bind(e,t){this.orchestrator=e,this.browserAPI=t??null,this.transportUnsubscribe?.(),this.transportUnsubscribe=this.setupMessageListener();let n=new ly;await n.init(),this.sessionStore=n}static createCallbacks(e){return{onResponse:(t,n,r)=>{let i=e.getOrCreateAssistantMsg(t);r?i.content+=n:(i.content=n,i.isStreaming=!1),e.emit({type:`agent-event`,scoopJid:t,eventType:`text_delta`,text:n})},onResponseDone:t=>{let n=e.getLatestAssistantMetadata(t),r=e.currentMessageId.get(t);if(r){let i=e.getBuffer(t).find(e=>e.id===r);i&&(i.isStreaming=!1,n&&Object.assign(i,n)),e.currentMessageId.delete(t)}e.flushPendingMarkers(t),e.emit({type:`agent-event`,scoopJid:t,eventType:`response_done`,...n??{}})},onSendMessage:(t,n)=>{let r=e.getBuffer(t),i=`msg-${tx()}`;r.push({id:i,role:`assistant`,content:n,timestamp:Date.now()}),e.emit({type:`agent-event`,scoopJid:t,eventType:`text_delta`,text:n}),e.emit({type:`agent-event`,scoopJid:t,eventType:`response_done`})},onStatusChange:(t,n)=>{e.scoopPresentation.setStatus(t,n),n===`ready`&&e.currentMessageId.delete(t),(n===`ready`||n===`error`)&&e.flushPendingMarkers(t),e.emit({type:`scoop-status`,scoopJid:t,status:n}),e.emitScoopList()},onCompactionStateChange:(t,n,r)=>{let i=e.compactionRows.apply(t,n,r);e.emit({type:`compaction-state`,scoopJid:t,state:n,trigger:r.trigger,...r.transcriptPath?{transcriptPath:r.transcriptPath}:{},...r.failure?{failure:r.failure}:{},...r.roundId?{roundId:r.roundId}:{},...i?{rowId:i.messageId}:{}}),e.recordCompactionRow(t,i)},onError:(t,n,r)=>{e.recordErrorCard(t,n),e.emit({type:`error`,scoopJid:t,error:n,...r?.endTurn===!1?{endTurn:!1}:{}})},onLickBackpressure:(t,n)=>{e.emit({type:`lick-backpressure`,scoopJid:t,...n})},onToolStart:(t,n,r,i)=>{Y_.has(n)||e.bufferToolStart(t,n,r,i)},onToolEnd:(t,n,r,i,a)=>{Y_.has(n)||e.bufferToolEnd(t,n,r,i,a)},onToolUI:(t,n,r,i,a)=>{e.emit({type:`agent-event`,scoopJid:t,eventType:`tool_ui`,toolName:n,requestId:r,html:i,...a?{displayScoopJid:a}:{}})},onToolUIDone:(t,n,r)=>{e.emit({type:`agent-event`,scoopJid:t,eventType:`tool_ui_done`,requestId:n,...r?{displayScoopJid:r}:{}})},onToolProgress:(t,n,r,i)=>{e.emit({type:`agent-event`,scoopJid:t,eventType:`tool_progress`,toolName:n,progress:r,toolCallId:i})},onIncomingMessage:(t,n)=>e.bufferIncomingMessage(t,n),onMessageUpdate:(t,n)=>e.applyMessageUpdate(t,n),onScoopUnregistered:t=>e.evictScoopState(t)}}bufferToolStart(e,t,n,r){let i=Q_(n),a=this.getOrCreateAssistantMsg(e);a.toolCalls||=[],a.toolCalls.push({id:r??tx(),name:t,input:i}),this.emit({type:`agent-event`,scoopJid:e,eventType:`tool_start`,toolName:t,toolInput:i,toolCallId:r})}bufferToolEnd(e,t,n,r,i){let a=this.currentMessageId.get(e);if(a){let o=this.getBuffer(e).find(e=>e.id===a);if(o?.toolCalls){let e=i?o.toolCalls.find(e=>e.id===i):[...o.toolCalls].reverse().find(e=>e.name===t&&e.result===void 0);e&&(e.result=$_(n),e.isError=r)}}this.emit({type:`agent-event`,scoopJid:e,eventType:`tool_end`,toolName:t,toolResult:ev(n),isError:r,toolCallId:i})}bufferIncomingMessage(e,t){let n={id:t.id,role:`user`,content:t.channel===`delegation`?`**[Instructions from sliccy]**\n\n${t.content}`:t.content,attachments:t.attachments,timestamp:new Date(t.timestamp).getTime(),source:t.channel===`delegation`?`delegation`:void 0,channel:t.channel,lickId:t.lickId,lickState:t.lickState};this.getBuffer(e).push(n),this.notifyPanelIncomingMessage(e,t)}evictScoopState(e){this.messageBuffers.delete(e.jid),this.currentMessageId.delete(e.jid),this.agentEventStream.clear(e.jid),this.scoopPresentation.clearStatus(e.jid),e.parentJid!==null&&this.sessionStore&&this.sessionStore.delete(qn(e)).catch(t=>{console.warn(`[kernel-bridge] Failed to delete session for unregistered scoop:`,e.folder,t)}),this.emitScoopList()}notifyPanelIncomingMessage(e,t){this.emit({type:`incoming-message`,scoopJid:e,message:{id:t.id,content:t.content,attachments:t.attachments,channel:t.channel,senderName:t.senderName,fromAssistant:t.fromAssistant,timestamp:t.timestamp,lickId:t.lickId,lickState:t.lickState}})}applyMessageUpdate(e,t){let n=this.messageBuffers.get(e)?.find(e=>t.lickId&&e.lickId===t.lickId||e.id===t.messageId);n&&(n.lickState=t.lickState),this.emit({type:`message-updated`,scoopJid:e,messageId:t.messageId,lickId:t.lickId,lickState:t.lickState})}toScoopSnapshot(e){return this.scoopPresentation.projectScoop(e)}buildStateSnapshot(){return this.scoopPresentation.buildStateSnapshot(this.orchestrator?.getScoops()??[],Bb())}emitTrayRuntimeStatus(){let e={type:`tray-runtime-status`,...Bb()};this.emit(e)}setFollowerSync(e){this.followerSync=e}setFollowerActive(e){this.followerActive=e}setActiveScoopJid(e){this.scoopPresentation.setActiveScoopJid(e)}getActiveScoopJid(){return this.scoopPresentation.getActiveScoopJid()}onAgentEvent(e){return this.agentEventStream.subscribe(e)}getMessagesForJid(e){return this.getBuffer(e)}async routeSprinkleLick(e,t,n,r){if(!this.orchestrator)return;let i=$b(t);i&&this.orchestrator.resolveNavigateHandoffByHuman(i.lickId,i.accepted);let a=this.orchestrator.getScoops(),o=te(e),s=[];n&&s.push({source:`explicit target`,value:n}),o&&o!==n&&s.push({source:`configured route`,value:o});let c=[],l;for(let e of s){if(l=eo(a,e.value),l)break;c.push(e)}if(l||=this.originRootOf(a,r?.unitJid)??O(a)[0],c.length>0&&Zb.warn(`Sprinkle lick target could not be resolved; using fallback`,{sprinkleName:e,unresolvedTargets:c,fallbackJid:l?.jid}),!l)return;let u=`sprinkle-${e}-${Date.now()}`,d=Ry({type:`sprinkle`,sprinkleName:e,timestamp:new Date().toISOString(),body:t,originLabel:r?.label})?.content??`[Sprinkle Event: ${e}]\n\`\`\`json\n${JSON.stringify(t,null,2)}\n\`\`\``,f=c.map(({source:e,value:t})=>`${e} ${JSON.stringify(t)}`).join(` and `),p=d+(f?`\n\n> Delivery note: ${f} could not be resolved; delivered to fallback ${JSON.stringify(l.folder)}.`:``),m={id:u,chatJid:l.jid,senderId:`sprinkle`,senderName:`sprinkle:${e}`,content:p,timestamp:new Date().toISOString(),fromAssistant:!1,channel:`sprinkle`};this.getBuffer(l.jid).push({id:u,role:`user`,content:p,timestamp:Date.now(),source:`lick`,channel:`sprinkle`}),await this.orchestrator.handleMessage(m)}originRootOf(e,t){if(t)return Ln(e,e.find(e=>e.jid===t))}applyFollowerSnapshot(e){if(!this.orchestrator)return;let t=O(this.orchestrator.getScoops())[0];if(!t)return;let n=rx(e).map((t,n)=>({...t,isStreaming:e[n]?.isStreaming}));this.messageBuffers.set(t.jid,n),this.currentMessageId.delete(t.jid),this.agentEventStream.clear(t.jid),this.emit({type:`scoop-messages-replaced`,scoopJid:t.jid,messages:n})}getConeJid(){return this.orchestrator?O(this.orchestrator.getScoops())[0]?.jid??null:null}emitFollowerAgentEvent(e){let t=this.getConeJid();if(t)switch(e.type){case`content_delta`:this.emit({type:`agent-event`,scoopJid:t,eventType:`text_delta`,text:e.text});break;case`content_done`:this.emit({type:`agent-event`,scoopJid:t,eventType:`response_done`,model:e.model,usage:e.usage});break;case`tool_use_start`:this.emit({type:`agent-event`,scoopJid:t,eventType:`tool_start`,toolName:e.toolName,toolInput:e.toolInput});break;case`tool_result`:this.emit({type:`agent-event`,scoopJid:t,eventType:`tool_end`,toolName:e.toolName,toolResult:e.result,isError:e.isError});break;case`turn_end`:this.emit({type:`agent-event`,scoopJid:t,eventType:`turn_end`});break;case`error`:this.emit({type:`error`,scoopJid:t,error:e.error})}}emitFollowerIncomingMessage(e,t){let n=this.getConeJid();n&&this.emit({type:`incoming-message`,scoopJid:n,message:{id:e,content:t,channel:`web`,senderName:`User`,fromAssistant:!1,timestamp:new Date().toISOString()}})}emitFollowerStatus(e){let t=this.getConeJid();if(!t)return;let n=e===`processing`?`processing`:`ready`;this.scoopPresentation.setStatus(t,n),this.emit({type:`scoop-status`,scoopJid:t,status:n})}async buildBufferFromCanonicalRecord(e){let t=this.orchestrator?.getConversationStore?.();if(!t)return null;let{conversationKeyFor:n}=await import(`./key-B2Bki3fU.js`).then(e=>e.r),r=await t.load(n(e));if(!r)return null;let{toChatMessages:i}=await Promise.resolve().then(()=>RC),a=await i(r,{source:Kn(e)});return a.length===0?null:this.overlayPersistedLickDecisionsOn(e,rx(a))}async overlayPersistedLickDecisionsOn(e,t){if(!t.some(e=>e.channel===`sudo-request`||e.lickId||e.lickState))return t;let n=[];try{let t=await this.orchestrator?.getMessagesForScoop?.(e.jid);if(t)for(let e of t)n.push({id:e.id,content:e.content,channel:e.channel,lickId:e.lickId,lickState:e.lickState})}catch{}return cx(t,n)}async hydrateBuffersFromRecords(){if(this.orchestrator)for(let e of this.orchestrator.getScoops()){let t=this.messageBuffers.get(e.jid);if(t&&t.length>0)continue;let n=await this.buildBufferFromCanonicalRecord(e);n&&(this.messageBuffers.set(e.jid,n),this.currentMessageId.delete(e.jid),this.agentEventStream.clear(e.jid))}}publishHydratedTranscripts(){if(this.transcriptsPublished||!this.orchestrator)return;let e=this.orchestrator.getScoops();if(e.length!==0){for(let t of e){let e=this.messageBuffers.get(t.jid);!e||e.length===0||this.emitTranscript(t.jid,e)}this.emitScoopList(),this.transcriptsPublished=!0}}emitTranscript(e,t){this.emit({type:`scoop-messages-replaced`,scoopJid:e,messages:t,queuedIds:this.queuedIdsFor(e)})}queuedIdsFor(e){if(!(this.followerSync||!this.orchestrator))return this.orchestrator.getQueuedMessageIds(e)}async handleRequestScoopMessages(e){if(await this.conesBeingCreated.get(e),!this.orchestrator)return;let t=this.orchestrator.getScoops().find(t=>t.jid===e);if(!t)return;let n=this.messageBuffers.get(e);if(n&&n.length>0){this.emitTranscript(e,n);return}let r=await this.buildBufferFromCanonicalRecord(t);if(r){this.messageBuffers.set(e,r),this.currentMessageId.delete(e),this.agentEventStream.clear(e),this.emitTranscript(e,r);return}this.emitTranscript(e,[])}async handleConeCreate(e,t,n,r){if(!this.orchestrator)return;let i=this.orchestrator.getScoops(),a=Xn(e,i),o=a===Qn,s=O(i)[0],c=r??(s?Zn(s):void 0),l=t?.trim(),u={...zy({parentId:null,name:e,folder:a}),assistantLabel:o?`sliccy`:e,...l?{config:{systemPromptAppend:`This cone is for: ${l}`}}:{},...c?{model:c}:{}},d=()=>{};this.conesBeingCreated.set(u.jid,new Promise(e=>{d=e}));let f=()=>{this.conesBeingCreated.delete(u.jid),d()};try{await this.orchestrator.registerScoop(u),this.emit({type:`scoop-created`,scoop:this.toScoopSnapshot(u)});let e=n?.trim();if(!e)return;let t=this.handleUserMessage({type:`user-message`,scoopJid:u.jid,text:e,messageId:`msg-${Date.now()}-${Math.random().toString(36).slice(2,8)}`});f(),await t}finally{f()}}async handleRequestSudoApproval(e,t){let n={decision:`deny`},r=t.approver;if(r&&r.kind!==`user`){let i=this.orchestrator;if(!i)console.warn(`[kernel-bridge] directed approval before orchestrator init — denying`);else try{n=await i.enqueueDirectedApproval(r,t)}catch(e){console.warn(`[kernel-bridge] directed approval threw — denying`,e)}this.emit({type:`sudo-approval`,requestId:e,decision:n});return}let i=this.orchestrator?.getSudoManager()??null;if(!i)console.warn(`[kernel-bridge] request-sudo-approval before SudoManager init — denying`);else try{n=await i.approve(t)}catch(e){console.warn(`[kernel-bridge] sudo approval threw — denying`,e)}this.emit({type:`sudo-approval`,requestId:e,decision:n})}async handleRequestSessionStats(e){let t=0,n=0,r=[],i=[],a=[];try{let e=this.orchestrator?.getSessionCosts()??[];t=(this.orchestrator?.getSessionCosts({includeDropped:!0})??[]).reduce((e,t)=>e+t.usage.cost.total,0),n=this.orchestrator?.getBurnRate()??0,r=this.orchestrator?.getContextFills()??[],i=(this.orchestrator?.getModelCosts()??[]).map(e=>({model:e.model,cost:e.cost,turns:e.turns,tokens:e.input+e.output+e.cacheRead+e.cacheWrite})),a=e.map(e=>({name:e.name,model:e.model,cost:e.usage.cost.total,type:e.type,source:e.source}))}catch{}let o=await this.resolveBudgetWindow();this.emit({type:`session-stats`,requestId:e,totalCost:t,burnRate:n,fills:r,models:i,scoops:a,...o?{budget:o}:{}})}budgetProbePending=!0;async resolveBudgetWindow(){return this.budgetProbePending?(this.budgetProbePending=!1,await Promise.race([U_().catch(()=>null),new Promise(e=>setTimeout(()=>e(null),2500))])??void 0):(U_().catch(()=>null),H_()??void 0)}async handleRequestScoopTranscript(e,t){let n=()=>{this.emit({type:`scoop-transcript`,requestId:e,scoopJid:t,transcript:``})};if(!this.orchestrator){n();return}let r=this.orchestrator.getScoops().find(e=>e.jid===t);if(!r){n();return}let i=this.messageBuffers.get(t);if(i&&i.length>0){this.emit({type:`scoop-transcript`,requestId:e,scoopJid:t,transcript:nx(i)});return}let a=this.orchestrator.getScoopContext(t);if(a){let{agentMessagesToChatMessages:n}=await Promise.resolve().then(()=>nv),i=a.getAgentMessages();if(i.length>0){let a=n(i,{source:Kn(r)});this.emit({type:`scoop-transcript`,requestId:e,scoopJid:t,transcript:nx(a)});return}}n()}async handleRequestScoopChatMessages(e,t){let n=()=>{this.emit({type:`scoop-chat-messages`,requestId:e,scoopJid:t,messages:[]})};if(!this.orchestrator){n();return}let r=this.orchestrator.getScoops().find(e=>e.jid===t);if(!r){n();return}let i=this.messageBuffers.get(t);if(i&&i.length>0){this.emit({type:`scoop-chat-messages`,requestId:e,scoopJid:t,messages:i});return}let a=await this.buildBufferFromCanonicalRecord(r);if(a){this.emit({type:`scoop-chat-messages`,requestId:e,scoopJid:t,messages:a});return}n()}async recordCompactionRow(e,t){if(!t||t.kind===`open`)return;let n=this.orchestrator?.getScoops().find(t=>t.jid===e);if(!n)return;let r=this.getBuffer(e);if(t.kind===`retract`){let e=r.findIndex(e=>e.id===t.messageId);e>=0&&r.splice(e,1)}else{let e=r.find(e=>e.id===t.messageId);e?e.compaction=t.marker:r.push({id:t.messageId,role:`assistant`,content:``,timestamp:Date.now(),compaction:t.marker})}let i=this.orchestrator?.getConversationStore?.();if(!i)return;let{conversationKeyFor:a}=await import(`./key-B2Bki3fU.js`).then(e=>e.r),o=a(n);if(t.kind===`retract`){this.dropPendingMarker(e,t.messageId),await i.deleteMarker(o,t.messageId);return}let s={id:t.messageId,kind:`compaction`,timestamp:Date.now(),compaction:t.marker};await i.putMarker(o,s)||this.holdPendingMarker(e,s)}holdPendingMarker(e,t){let n=this.pendingMarkers.get(e)??[];this.pendingMarkers.set(e,[...n.filter(e=>e.id!==t.id),t].slice(-4))}dropPendingMarker(e,t){let n=this.pendingMarkers.get(e);if(!n)return;let r=n.filter(e=>e.id!==t);r.length===0?this.pendingMarkers.delete(e):this.pendingMarkers.set(e,r)}async flushPendingMarkers(e){let t=this.pendingMarkers.get(e);if(!t||t.length===0)return;let n=this.orchestrator?.getConversationStore?.(),r=this.orchestrator?.getScoops().find(t=>t.jid===e);if(!n||!r)return;let{conversationIdentityFor:i,conversationKeyFor:a}=await import(`./key-B2Bki3fU.js`).then(e=>e.r),o=a(r);for(let a of t){let t=!1;try{t=await n.putMarker(o,a,a.kind===`error`?{createWith:i(r)}:void 0)}catch(t){Zb.warn(`Conversation marker retry threw`,{scoopJid:e,folder:r.folder,markerId:a.id,kind:a.kind,errorName:t instanceof Error?t.name:`unknown`})}t?this.dropPendingMarker(e,a.id):Zb.warn(`Conversation marker retry deferred`,{scoopJid:e,folder:r.folder,markerId:a.id,kind:a.kind})}}async recordErrorCard(e,t){let n=tx(),r=Date.now();this.getBuffer(e).push({id:n,role:`assistant`,content:t,timestamp:r,error:!0});let i={id:n,kind:`error`,timestamp:r,text:t};this.holdPendingMarker(e,i);let a=this.orchestrator?.getConversationStore?.(),o=this.orchestrator?.getScoops().find(t=>t.jid===e);if(!a||!o){Zb.warn(`Error marker is waiting for a canonical target`,{scoopJid:e,markerId:i.id,hasStore:!!a,hasScoop:!!o});return}let{conversationIdentityFor:s}=await import(`./key-B2Bki3fU.js`).then(e=>e.r),c=s(o),l=!1;try{l=await a.putMarker(c.key,i,{createWith:c})}catch(t){Zb.warn(`Error marker write threw; queued for retry`,{scoopJid:e,folder:o.folder,markerId:i.id,errorName:t instanceof Error?t.name:`unknown`})}l?this.dropPendingMarker(e,i.id):Zb.warn(`Error marker write deferred`,{scoopJid:e,folder:o.folder,markerId:i.id})}getBuffer(e){let t=this.messageBuffers.get(e);return t||(t=[],this.messageBuffers.set(e,t)),t}getOrCreateAssistantMsg(e){let t=this.getBuffer(e),n=this.currentMessageId.get(e);if(n){let e=t.find(e=>e.id===n);if(e)return e}n=`scoop-${e}-${tx()}`,this.currentMessageId.set(e,n);let r=(this.orchestrator?.getScoops()??[]).find(t=>t.jid===e),i=r?Kn(r):`unknown`,a={id:n,role:`assistant`,content:``,timestamp:Date.now(),toolCalls:[],isStreaming:!0,source:i};return t.push(a),a}getLatestAssistantMetadata(e){let t=this.orchestrator?.getScoopContext?.(e)?.getAgentMessages()??[];for(let e=t.length-1;e>=0;e--){let n=t[e];if(n.role!==`assistant`)continue;let r={model:n.model},{usage:i}=n;return i&&(r.usage={input:i.input,output:i.output,cacheRead:i.cacheRead,cacheWrite:i.cacheWrite,cost:{input:i.cost.input,output:i.cost.output,cacheRead:i.cost.cacheRead,cacheWrite:i.cost.cacheWrite,total:i.cost.total}}),r}return null}setupMessageListener(){return this.transport.onMessage(e=>{e.source===`panel`&&this.handlePanelMessage(e.payload).catch(t=>{console.error(`[kernel-bridge] handlePanelMessage error:`,t);let n=e.payload.scoopJid;n&&this.emit({type:`error`,scoopJid:n,error:t instanceof Error?t.message:String(t)})})})}async handlePanelMessage(e){if(this.orchestrator)switch(e.type){case`user-message`:await this.handleUserMessage(e);break;case`cone-create`:await this.handleConeCreate(e.name,e.description,e.prompt,e.model);break;case`scoop-feed`:await this.orchestrator.delegateToScoop(e.scoopJid,e.prompt,`sliccy`);break;case`scoop-drop`:await this.handleScoopDrop(e.scoopJid);break;case`abort`:this.orchestrator.stopScoop(e.scoopJid),this.orchestrator.clearQueuedMessages(e.scoopJid).catch(e=>{console.warn(`[kernel-bridge] Failed to clear queued messages on abort:`,e)});break;case`delete-queued-message`:this.handleDeleteQueuedMessage(e.scoopJid,e.messageId);break;case`request-state`:this.emit(this.buildStateSnapshot());break;case`request-scoop-messages`:await this.handleRequestScoopMessages(e.scoopJid);break;case`request-scoop-transcript`:await this.handleRequestScoopTranscript(e.requestId,e.scoopJid);break;case`request-scoop-chat-messages`:await this.handleRequestScoopChatMessages(e.requestId,e.scoopJid);break;case`request-session-stats`:this.handleRequestSessionStats(e.requestId);break;case`request-sudo-approval`:this.handleRequestSudoApproval(e.requestId,e.request);break;case`clear-chat`:await this.handleClearChat(e.requestId,e.scoopJid,e.discardLiveSnapshot===!0);break;case`agent-spawn-request`:await this.handleAgentSpawn(e);break;case`agent-spawn-abort`:this.agentSpawnAborts.get(e.requestId)?.abort();break;case`clear-filesystem`:await this.orchestrator.resetFilesystem().catch(e=>console.error(`[kernel-bridge] clear-filesystem failed:`,e));break;case`set-model`:case`refresh-model`:this.orchestrator.refreshModels();break;case`set-scoop-model`:await this.handleSetScoopModel(e);break;case`set-thinking-level`:await this.handleSetThinkingLevel(e);break;case`sprinkle-lick`:await this.handleSprinkleLickMsg(e);break;case`lick-webhook-event`:this.handleWebhookEventMsg(e);break;case`set-follower-forwarding`:this.handleSetFollowerForwarding(e.enabled);break;case`inject-forwarded-lick`:this.handleInjectForwardedLick(e.event);break;case`lick-cherry-host-event`:this.orchestrator.handleCherryHostEvent(e.cherryRuntimeId,e.name,e.detail);break;case`lick-preview`:this.orchestrator.handlePreviewLick(e.event);break;case`reload-skills`:this.orchestrator.reloadAllSkills().catch(e=>{console.warn(`[kernel-bridge] Skill reload failed:`,e)});break;case`panel-cdp-command`:await this.handlePanelCdpCommand(e);break;case`tool-ui-action`:await this.handleToolUIAction(e);break;case`local-storage-set`:this.applyLocalStorageOp(e.type,t=>t.setItem(e.key,e.value)),La(e.key);break;case`local-storage-remove`:this.applyLocalStorageOp(e.type,t=>t.removeItem(e.key)),La(e.key);break;case`local-storage-clear`:this.applyLocalStorageOp(e.type,e=>e.clear()),La()}}handleWebhookEventMsg(e){let t=this.orchestrator?.handleWebhookEvent(e.webhookId,e.headers,e.body);e.requestId&&this.emit({type:`lick-webhook-delivery`,requestId:e.requestId,disposition:t??`unknown-webhook`})}async handleAgentSpawn(e){let t=Qb()[Tv];if(!t||typeof t.spawn!=`function`){this.emit({type:`agent-spawn-result`,requestId:e.requestId,ok:!1,error:`AgentBridge unavailable`});return}let n=new AbortController;this.agentSpawnAborts.set(e.requestId,n);try{let r=await t.spawn({...e.options,signal:n.signal});this.emit({type:`agent-spawn-result`,requestId:e.requestId,ok:!0,result:r})}catch(t){this.emit({type:`agent-spawn-result`,requestId:e.requestId,ok:!1,error:t instanceof Error?t.message:String(t)})}finally{this.agentSpawnAborts.delete(e.requestId)}}async handleSetScoopModel(e){if(!this.orchestrator)return;let t=!1;try{t=await this.orchestrator.setScoopModel(e.scoopJid,e.model)}catch(e){console.error(`[kernel-bridge] set-scoop-model failed:`,e)}e.requestId&&this.emit({type:`set-scoop-model-ack`,requestId:e.requestId,scoopJid:e.scoopJid,model:e.model,applied:t})}async handleSetThinkingLevel(e){if(!this.orchestrator)return;let t=!1,n=null;try{t=await this.orchestrator.setScoopThinkingLevel(e.scoopJid,e.level,e.effortOverride)!==null,n=this.orchestrator.streamThinking?.(e.scoopJid)??null}catch(e){console.error(`[kernel-bridge] set-thinking-level failed:`,e)}e.requestId&&this.emit({type:`set-thinking-level-ack`,requestId:e.requestId,scoopJid:e.scoopJid,level:e.level,effortOverride:e.effortOverride,...n?{resolvedLevel:n.level,...n.effortOverride?{resolvedEffortOverride:n.effortOverride}:{}}:{},applied:t})}handleDeleteQueuedMessage(e,t){if(!this.orchestrator)return;this.orchestrator.deleteQueuedMessage(e,t).catch(e=>{console.warn(`[kernel-bridge] Failed to delete queued message:`,e)});let n=this.messageBuffers.get(e);if(!n)return;let r=n.filter(e=>e.id!==t);r.length!==n.length&&this.messageBuffers.set(e,r)}async handleUserMessage(e){if(this.getBuffer(e.scoopJid).push({id:e.messageId,role:`user`,content:e.text,attachments:e.attachments,timestamp:Date.now()}),this.followerSync){try{e.steer?this.followerSync.sendMessage(e.text,e.messageId,e.attachments,{steer:!0}):this.followerSync.sendMessage(e.text,e.messageId,e.attachments),this.emitUserMessageAck(e,!0)}catch(t){this.emitUserMessageAck(e,!1,t)}return}let t={id:e.messageId,chatJid:e.scoopJid,senderId:`user`,senderName:`User`,content:e.text,attachments:e.attachments,timestamp:new Date().toISOString(),fromAssistant:!1,channel:`web`,...e.guestGate?{guestGate:e.guestGate}:{},...e.steer?{steer:!0}:{}};try{if(!this.orchestrator)throw Error(`kernel not ready`);if(!e.requestId){await this.orchestrator.handleMessage(t),await this.orchestrator.createScoopTab(e.scoopJid);return}let n={outcome:`pending`},r=this.orchestrator.handleMessage(t);if(r.then(()=>{n.outcome=`ok`},e=>{n.outcome=`fail`,n.err=e}),await Promise.resolve(),n.outcome===`fail`){this.emitUserMessageAck(e,!1,n.err);return}this.emitUserMessageAck(e,!0),r.then(()=>this.orchestrator?.createScoopTab(e.scoopJid)).catch(t=>{console.error(`[kernel-bridge] user-message failed after handoff:`,t),this.emit({type:`error`,scoopJid:e.scoopJid,error:t instanceof Error?t.message:String(t)})})}catch(t){if(this.emitUserMessageAck(e,!1,t),!e.requestId)throw t}}emitUserMessageAck(e,t,n){e.requestId&&this.emit({type:`user-message-ack`,requestId:e.requestId,messageId:e.messageId,scoopJid:e.scoopJid,ok:t,...t?{}:{error:n instanceof Error?n.message:n==null?void 0:String(n)}})}async handleScoopDrop(e){if(!this.orchestrator)return;let t=this.orchestrator.getScoops(),n=t.find(t=>t.jid===e);if(n&&Nn(n)){if(O(t).length<=1){console.warn(`[kernel-bridge] Refusing to drop the last cone:`,e),this.emitScoopList();return}let r=this.descendantsOf(t,e);await this.orchestrator.getWorkUnits().close(e);let i=new Set(this.orchestrator.getScoops().map(e=>e.jid));for(let e of[...r,n])i.has(e.jid)||this.forgetDroppedScoop(e)}else await this.orchestrator.unregisterScoop(e),this.forgetDroppedScoop(n??{jid:e});this.emitScoopList()}descendantsOf(e,t){let n=[];for(let r of e)r.parentJid===t&&n.push(...this.descendantsOf(e,r.jid),r);return n}forgetDroppedScoop(e){if(this.messageBuffers.delete(e.jid),this.currentMessageId.delete(e.jid),this.agentEventStream.clear(e.jid),this.scoopPresentation.clearStatus(e.jid),e.folder&&this.sessionStore){let t=qn({folder:e.folder});this.sessionStore.delete(t).catch(e=>{console.warn(`[kernel-bridge] Failed to delete session on scoop drop:`,t,e)})}}async handleClearChat(e,t,n=!1){let r=this.orchestrator?.getScoops()??[],i=(t?r.find(e=>e.jid===t):void 0)??O(r)[0],a=i?.jid;a&&(n?await this.orchestrator?.clearScoopMessages(a,{discardLiveSnapshot:!0}):await this.orchestrator?.clearScoopMessages(a)),this.sessionStore&&await this.sessionStore.delete(qn({folder:i?.folder??`cone`})),a&&(this.messageBuffers.delete(a),this.currentMessageId.delete(a),this.agentEventStream.clear(a)),this.emit({type:`clear-chat-ack`,requestId:e})}async handleSprinkleLickMsg(e){if(this.followerActive){this.followerSync?this.followerSync.sendSprinkleLick(e.sprinkleName,e.body,e.targetScoop):console.warn(`[kernel-bridge] sprinkle-lick dropped: follower sync mid-reconnect`,{sprinkleName:e.sprinkleName});return}await this.routeSprinkleLick(e.sprinkleName,e.body,e.targetScoop,e.origin)}handleSetFollowerForwarding(e){let t=Qb().__slicc_lickManager;if(!t){console.warn(`[kernel-bridge] set-follower-forwarding ignored: worker LickManager unavailable`);return}e?t.setForwarder(e=>this.emit({type:`forward-lick`,event:e})):t.setForwarder(null)}handleInjectForwardedLick(e){let t=Qb().__slicc_lickManager;if(!t){console.warn(`[kernel-bridge] inject-forwarded-lick dropped: worker LickManager unavailable`,{type:e.type});return}t.handleForwardedEvent(e)}async handlePanelCdpCommand(e){let{id:t,method:n,params:r,sessionId:i}=e;if(!this.browserAPI){console.warn(`[kernel-bridge] Panel CDP command received but BrowserAPI is null`),this.emit({type:`panel-cdp-response`,id:t,error:`BrowserAPI not available`});return}try{let e=await this.browserAPI.getTransport().send(n,r,i);this.emit({type:`panel-cdp-response`,id:t,result:e})}catch(e){this.emit({type:`panel-cdp-response`,id:t,error:e instanceof Error?e.message:String(e)})}}async handleToolUIAction(e){let{requestId:t,action:n,data:r}=e;if(n===`__mounted`){Sn.markMounted(t);return}try{await Sn.handleAction(t,{action:n,data:r})}catch(e){let r=e instanceof Error?e.message:String(e);console.error(`[kernel-bridge] Tool UI action failed`,{requestId:t,action:n,error:r}),Sn.cancel(t,`Action failed: ${r}`)}}applyLocalStorageOp(e,t){try{let e=globalThis.localStorage;e&&t(e)}catch(t){console.warn(`[kernel-bridge] ${e} failed:`,t)}}emitScoopList(){let e=this.scoopPresentation.projectScoops(this.orchestrator?.getScoops()??[]);this.emit({type:`scoop-list`,scoops:e})}emit(e){this.transport.send(e),e.type===`agent-event`&&this.agentEventStream.publish(e)}};function tx(){return Date.now().toString(36)+Math.random().toString(36).slice(2,8)}function nx(e){let t=[];for(let n of e){let e=(n.content??``).trim();e.length!==0&&t.push(`${n.role}: ${e}`)}return t.join(`
898
+ `)}function rx(e){return e.map(e=>({id:e.id,role:e.role,content:e.content,attachments:e.attachments,timestamp:e.timestamp,source:e.source,channel:e.channel,lickId:e.lickId,lickState:e.lickState,toolCalls:e.toolCalls?.map(e=>({id:e.id,name:e.name,input:e.input,result:e.result,isError:e.isError})),model:e.model,usage:e.usage,isStreaming:!1,compaction:e.compaction,error:e.error}))}function ix(e){return e===`confirmed`||e===`dismissed`}function ax(e){return e.channel===`sudo-request`||!!e.lickId||!!e.lickState||e.id.startsWith(`sudo-request-`)}function ox(e){return e.lickId?e.lickId:ax(e)?/^(?:Lick ID|Request ID): (\S+)/m.exec(e.content)?.[1]||(e.id.startsWith(`sudo-request-`)?e.id.slice(13):void 0):void 0}function sx(e,t,n){let r=e.get(t);(!r||ix(n.lickState)&&!ix(r.lickState))&&e.set(t,n)}function cx(e,t){if(!t||t.length===0)return e;let n=new Map,r=new Map,i=new Map;for(let e of t){if(!ax(e))continue;let t=ox(e);t&&sx(n,t,e),sx(r,e.id,e),sx(i,e.content,e)}return e.map(e=>{if(!ax(e))return e;let t=ox(e),a=(t?n.get(t):void 0)??r.get(e.id)??i.get(e.content);if(!a||!a.lickId&&!a.lickState)return e;let o=a.lickId??t??ox(a),s=ix(a.lickState)?a.lickState:e.lickState??a.lickState;return o===e.lickId&&s===e.lickState&&a.id===e.id?e:{...e,id:a.id,lickId:o,lickState:s}})}const lx=_(`navigation-watcher`);function ux(e){if(!e)return null;try{let t=new URL(e);return t.protocol===`http:`||t.protocol===`https:`?t:null}catch{return null}}function dx(e){return e.replace(/\/+$/,``)||`/`}function fx(e){return t=>{let n=ux(e()??void 0);if(!n)return!1;let r=ux(t.url);return r?n.origin===r.origin&&dx(n.pathname)===dx(r.pathname):!1}}function px(e,t){return se(e,t)}var mx=class{transport;onEvent;sessions=new Map;started=!1;unsubscribeState=null;rearming=!1;rearmQueued=!1;onDiscovery;probeFetch;isDiscoveryEnabled;probeTimeoutMs;isOwnTab;probedOrigins=new Set;pendingAttachTargetIds=new Set;ownSessionIds=new Set;onAttachedToTarget=e=>{this.handleAttachedToTarget(e)};onDetachedFromTarget=e=>{let t=e.sessionId;if(!t)return;let n=this.sessions.get(t);this.sessions.delete(t),this.ownSessionIds.delete(t),n&&this.pendingAttachTargetIds.delete(n.targetId)};onTargetInfoChanged=e=>{let t=e.targetInfo;if(t?.targetId){for(let e of this.sessions.values())e.targetId===t.targetId&&(typeof t.title==`string`&&(e.title=t.title),typeof t.url==`string`&&(e.url=t.url));this.reconcileTargetNetwork(t)}};onTargetCreated=e=>{this.handleTargetCreated(e)};onFrameRequestedNavigation=e=>{let t=e;this.maybeArmNetwork(t.sessionId,t.frameId,t.url)};onFrameStartedNavigating=e=>{let t=e;this.maybeArmNetwork(t.sessionId,t.frameId,t.url)};onFrameNavigated=e=>{let t=e,n=t.sessionId;if(!n)return;let r=this.sessions.get(n);if(!r)return;let i=t.frame;i?.id&&(i.parentId||(r.rootFrameId=i.id,typeof i.url==`string`&&(r.url=i.url)))};onResponseReceived=e=>{let t=e,n=t.sessionId;if(!n)return;let r=this.sessions.get(n);if(!r||t.type!==`Document`)return;let i=t.frameId;if(!i||i!==r.rootFrameId)return;let a=t.response;if(!a)return;let o=typeof a.url==`string`&&a.url.length>0?a.url:r.url;if(!o)return;let{match:s,links:c}=px(a.headers,o);if(s){let e={url:o,verb:s.verb,target:s.target,links:c,targetId:r.targetId};s.instruction!=null&&(e.instruction=s.instruction),s.branch!=null&&(e.branch=s.branch),s.path!=null&&(e.path=s.path),r.title!=null&&(e.title=r.title),this.onEvent(e)}this.maybeRunDiscovery(o,c,r.targetId)};eventBindings=[[`Target.attachedToTarget`,this.onAttachedToTarget],[`Target.detachedFromTarget`,this.onDetachedFromTarget],[`Target.targetInfoChanged`,this.onTargetInfoChanged],[`Target.targetCreated`,this.onTargetCreated],[`Page.frameNavigated`,this.onFrameNavigated],[`Page.frameRequestedNavigation`,this.onFrameRequestedNavigation],[`Page.frameStartedNavigating`,this.onFrameStartedNavigating],[`Network.responseReceived`,this.onResponseReceived]];constructor(e,t,n={}){this.transport=e,this.onEvent=t,this.onDiscovery=n.onDiscovery,this.probeFetch=n.probeFetch,this.isDiscoveryEnabled=n.isDiscoveryEnabled??(()=>!0),this.probeTimeoutMs=n.probeTimeoutMs,this.isOwnTab=n.isOwnTab??(()=>!1)}maybeRunDiscovery(e,t,n){if(!this.onDiscovery||!this.isDiscoveryEnabled())return;let r;try{r=new URL(e).origin}catch{return}let i=Fi(t);i&&this.onDiscovery({origin:r,kind:i.kind,url:i.url,targetId:n}),this.probeFetch&&!this.probedOrigins.has(r)&&(this.probedOrigins.add(r),this.runWellKnownProbe(r,n))}async runWellKnownProbe(e,t){if(!(!this.probeFetch||!this.onDiscovery))try{let n=await Ri(e,this.probeFetch,{timeoutMs:this.probeTimeoutMs});for(let r of n)this.onDiscovery({origin:e,kind:r.kind,url:r.url,targetId:t})}catch(t){lx.debug(`Well-known discovery probe failed`,{origin:e,error:t instanceof Error?t.message:String(t)})}}async start(){if(!this.started){if(this.registerListeners(),!await this.enableDiscovery()){this.unregisterListeners();return}this.started=!0,this.subscribeTransportState(),await this.enumeratePreexistingTargets()}}registerListeners(){for(let[e,t]of this.eventBindings)this.transport.off(e,t),this.transport.on(e,t)}unregisterListeners(){for(let[e,t]of this.eventBindings)this.transport.off(e,t)}async enableDiscovery(){try{return await this.transport.send(`Target.setDiscoverTargets`,{discover:!0}),!0}catch(e){return lx.error(`Failed to enable target discovery`,{error:e instanceof Error?e.message:String(e)}),!1}}async enumeratePreexistingTargets(){try{let e=(await this.transport.send(`Target.getTargets`)).targetInfos??[];for(let t of e){if(t.type!==`page`)continue;let e=t.attached===!0,n=t.targetId;e||typeof n!=`string`||await this.requestAttach(n,`Failed to attach to preexisting target`)}}catch(e){lx.debug(`Failed to enumerate preexisting targets`,{error:e instanceof Error?e.message:String(e)})}}subscribeTransportState(){this.unsubscribeState||=this.transport.onStateChange?.(e=>{if(e===`disconnected`){this.clearConnectionScopedState();return}e===`connected`&&(this.rearming?this.rearmQueued=!0:this.rearmAfterReconnect())})??null}clearConnectionScopedState(){this.sessions.clear(),this.pendingAttachTargetIds.clear(),this.ownSessionIds.clear()}async rearmAfterReconnect(){if(!(!this.started||this.rearming)){this.rearming=!0;try{if(this.clearConnectionScopedState(),this.registerListeners(),!await this.enableDiscovery())return;await this.enumeratePreexistingTargets()}finally{this.rearming=!1,this.rearmQueued&&(this.rearmQueued=!1,this.rearmAfterReconnect())}}}async stop(){if(this.started){this.started=!1,this.unsubscribeState?.(),this.unsubscribeState=null,this.unregisterListeners(),this.clearConnectionScopedState();try{await this.transport.send(`Target.setDiscoverTargets`,{discover:!1})}catch(e){lx.debug(`Failed to disable target discovery on stop`,{error:e instanceof Error?e.message:String(e)})}}}async handleTargetCreated(e){let t=e.targetInfo;t?.type===`page`&&typeof t.targetId==`string`&&(t.attached||await this.requestAttach(t.targetId,`Failed to attach to discovered target`))}maybeArmNetwork(e,t,n){if(!e||!t)return;let r=this.sessions.get(e);!r||r.networkEnabled||!this.ownSessionIds.has(e)||r.rootFrameId===t&&(this.isOwnTabSafe({targetId:r.targetId,url:n})||this.setSessionNetwork(e,r,!0))}reconcileTargetNetwork(e){let t=this.isOwnTabSafe(e);for(let[n,r]of this.sessions)r.targetId===e.targetId&&this.ownSessionIds.has(n)&&r.networkEnabled!==!t&&this.setSessionNetwork(n,r,!t)}async setSessionNetwork(e,t,n){t.networkEnabled=n;try{await this.transport.send(n?`Network.enable`:`Network.disable`,{},e)}catch(r){t.networkEnabled=!n,lx.debug(`Failed to ${n?`enable`:`disable`} Network on session`,{sessionId:e,targetId:t.targetId,error:r instanceof Error?r.message:String(r)})}}isOwnTabSafe(e){try{return this.isOwnTab(e)}catch(t){return lx.debug(`isOwnTab predicate threw; treating target as foreign`,{targetId:e.targetId,error:t instanceof Error?t.message:String(t)}),!1}}async requestAttach(e,t){this.pendingAttachTargetIds.add(e);try{let t=(await this.transport.send(`Target.attachToTarget`,{targetId:e,flatten:!0}))?.sessionId;typeof t==`string`&&t.length>0&&(this.ownSessionIds.add(t),this.pendingAttachTargetIds.delete(e))}catch(n){this.pendingAttachTargetIds.delete(e),lx.debug(t,{targetId:e,error:n instanceof Error?n.message:String(n)})}}claimOwnSession(e,t){return this.ownSessionIds.has(e)?!0:this.pendingAttachTargetIds.has(t)?(this.pendingAttachTargetIds.delete(t),this.ownSessionIds.add(e),!0):!1}async handleAttachedToTarget(e){let t=e.sessionId,n=e.targetInfo;if(!t||!n||n.type!==`page`||typeof n.targetId!=`string`||(this.sessions.set(t,{targetId:n.targetId,rootFrameId:null,networkEnabled:!1,title:n.title,url:n.url}),!this.claimOwnSession(t,n.targetId)))return;let r=this.isOwnTabSafe(n);r&&lx.debug(`Attaching to the SLICC app tab with Network off`,{targetId:n.targetId,url:n.url});try{if(await this.transport.send(`Page.enable`,{},t),!r){let e=this.sessions.get(t);e&&await this.setSessionNetwork(t,e,!0)}let e=(await this.transport.send(`Page.getFrameTree`,{},t)).frameTree?.frame;if(e?.id&&typeof e.id==`string`){let n=this.sessions.get(t);n&&(n.rootFrameId=e.id)}}catch(e){lx.debug(`Failed to enable Page/Network on attached target`,{sessionId:t,error:e instanceof Error?e.message:String(e)})}}};function hx(){try{return typeof localStorage>`u`||typeof localStorage?.getItem!=`function`||localStorage.getItem(`slicc_discovery_enabled`)!==`false`}catch{return!0}}var gx=`# /etc/llmstxtignore — llms.txt discovery suppression
899
899
  #
900
900
  # One advertising hostname or glob per line. Matching is case-insensitive.
901
901
  # \`#\` starts a comment; blank lines are ignored.
@@ -906,10 +906,10 @@ This is informational — there is no card action.`}\nYou MAY fetch it (e.g. \`c
906
906
 
907
907
  github.com
908
908
  app.slack.com
909
- `;const px=_(`llms-txt-ignore`),mx=`/etc/llmstxtignore`;function hx(e){return typeof e==`string`?e.split(/\r?\n/).map(e=>e.slice(0,e.indexOf(`#`)===-1?void 0:e.indexOf(`#`)).trim()).filter(Boolean).map(e=>e.toLowerCase()):[]}function gx(e){return`.+^$()[]|\\{}`.includes(e)?`\\${e}`:e}function _x(e){let t=``;for(let n of e)t+=n===`*`?`.*`:n===`?`?`.`:gx(n);return RegExp(`^${t}$`,`i`)}function vx(e,t){return t.some(t=>_x(t).test(e))}function yx(e){if(e.parentJid===null)return!0;let t=e.config?.allowedCommands;return t===void 0||t.includes(`*`)?!0:t.some(e=>[`curl`,`wget`,`discover`,`playwright-cli`,`playwright`,`puppeteer`].includes(e))}function bx(e,t){for(let n of[e,t])if(n)try{return new URL(n).hostname.toLowerCase()}catch{}return null}async function xx(e,t){let n=t.trim().toLowerCase();if(!n||n.includes(`
910
- `)||n.includes(`\r`)||n.includes(`#`))throw Error(`Invalid llms.txt ignore hostname.`);let r=``;try{r=await e.readFile(mx,{encoding:`utf-8`})}catch(e){if(!(e instanceof k)||e.code!==`ENOENT`)throw e}if(vx(n,hx(r)))return!1;let i=r.length>0&&!r.endsWith(`
909
+ `;const _x=_(`llms-txt-ignore`),vx=`/etc/llmstxtignore`;function yx(e){return typeof e==`string`?e.split(/\r?\n/).map(e=>e.slice(0,e.indexOf(`#`)===-1?void 0:e.indexOf(`#`)).trim()).filter(Boolean).map(e=>e.toLowerCase()):[]}function bx(e){return`.+^$()[]|\\{}`.includes(e)?`\\${e}`:e}function xx(e){let t=``;for(let n of e)t+=n===`*`?`.*`:n===`?`?`.`:bx(n);return RegExp(`^${t}$`,`i`)}function Sx(e,t){return t.some(t=>xx(t).test(e))}function Cx(e){if(e.parentJid===null)return!0;let t=e.config?.allowedCommands;return t===void 0||t.includes(`*`)?!0:t.some(e=>[`curl`,`wget`,`discover`,`playwright-cli`,`playwright`,`puppeteer`].includes(e))}function wx(e,t){for(let n of[e,t])if(n)try{return new URL(n).hostname.toLowerCase()}catch{}return null}async function Tx(e,t){let n=t.trim().toLowerCase();if(!n||n.includes(`
910
+ `)||n.includes(`\r`)||n.includes(`#`))throw Error(`Invalid llms.txt ignore hostname.`);let r=``;try{r=await e.readFile(vx,{encoding:`utf-8`})}catch(e){if(!(e instanceof k)||e.code!==`ENOENT`)throw e}if(Sx(n,yx(r)))return!1;let i=r.length>0&&!r.endsWith(`
911
911
  `)?`
912
- `:``;return await e.writeFile(mx,`${r}${i}${n}\n`),!0}var Sx=class{fs;watcher;entries=[];unwatch=null;constructor(e,t=null){this.fs=e,this.watcher=t}async init(){await this.ensureDefault(),await this.reload(),this.unwatch=this.watcher?.watch(`/etc`,e=>e===`/etc/llmstxtignore`,()=>void this.reload())??null}dispose(){this.unwatch?.(),this.unwatch=null}ignores(e){if(e.type!==`discovery`||e.discoveryKind!==`llms-txt`)return!1;let t=bx(e.discoveryOrigin,e.discoveryUrl);return t!==null&&vx(t,this.entries)}async ensureDefault(){try{await this.fs.mkdir(`/etc`,{recursive:!0}),await this.fs.exists(`/etc/llmstxtignore`)||await this.fs.writeFile(mx,fx)}catch(e){px.warn(`Failed to seed default llms.txt ignore policy`,{error:e instanceof Error?e.message:String(e)})}}async reload(){try{let e=await this.fs.readFile(mx,{encoding:`utf-8`}),t=typeof e==`string`?e:new TextDecoder().decode(e);this.entries=hx(t)}catch(e){this.entries=[],px.warn(`Failed to read llms.txt ignore policy`,{error:e instanceof Error?e.message:String(e)})}}};const Cx=`gelatiere`,wx=`gelatiere`,Tx=`gelatiere-nightly`,Ex=`system:gelatiere`;function Dx(e){return e.parentJid===`system:gelatiere`&&e.folder===`gelatiere`}var Ox=`# /etc/sudoers — SLICC agent approval policy
912
+ `:``;return await e.writeFile(vx,`${r}${i}${n}\n`),!0}var Ex=class{fs;watcher;entries=[];unwatch=null;constructor(e,t=null){this.fs=e,this.watcher=t}async init(){await this.ensureDefault(),await this.reload(),this.unwatch=this.watcher?.watch(`/etc`,e=>e===`/etc/llmstxtignore`,()=>void this.reload())??null}dispose(){this.unwatch?.(),this.unwatch=null}ignores(e){if(e.type!==`discovery`||e.discoveryKind!==`llms-txt`)return!1;let t=wx(e.discoveryOrigin,e.discoveryUrl);return t!==null&&Sx(t,this.entries)}async ensureDefault(){try{await this.fs.mkdir(`/etc`,{recursive:!0}),await this.fs.exists(`/etc/llmstxtignore`)||await this.fs.writeFile(vx,gx)}catch(e){_x.warn(`Failed to seed default llms.txt ignore policy`,{error:e instanceof Error?e.message:String(e)})}}async reload(){try{let e=await this.fs.readFile(vx,{encoding:`utf-8`}),t=typeof e==`string`?e:new TextDecoder().decode(e);this.entries=yx(t)}catch(e){this.entries=[],_x.warn(`Failed to read llms.txt ignore policy`,{error:e instanceof Error?e.message:String(e)})}}};const Dx=`gelatiere`,Ox=`gelatiere`,kx=`gelatiere-nightly`,Ax=`system:gelatiere`;function jx(e){return e.parentJid===`system:gelatiere`&&e.folder===`gelatiere`}var Mx=`# /etc/sudoers — SLICC agent approval policy
913
913
  #
914
914
  # This file controls which agent actions require a native human approval
915
915
  # prompt (an OS dialog in CLI/Electron, a window.confirm/prompt in the Chrome
@@ -983,12 +983,12 @@ Write /etc/models
983
983
  #
984
984
  # Let connected followers export the live transcript without a prompt:
985
985
  # NOPASSWD Export active
986
- `;const kx=_(`sudo:manager`);function Ax(e){return e===`/etc/sudoers`||e===`/etc/sudoers.d`||e.startsWith(`/etc/sudoers.d/`)}function jx(e){if(!e.startsWith(`/etc/sudoers.d/`))return null;let t=e.slice(Jr.length+1);return t.includes(`/`)?null:zr(t)}function Mx(e){return e.length>1&&e.endsWith(`/`)?e.slice(0,-1):e}const Nx=[`# Approved "Always" grants for one scoop. Loaded only for that scoop.`,`# Sandbox grants come from ScoopConfig, in memory — not here.`,`# Writes always require approval (self-protected).`,``].join(`
987
- `);function Px(e){let t=[],n=e?.allowedCommands;if(n===void 0||n.includes(`*`))t.push(`NOPASSWD Cmnd *`);else for(let e of n){let n=Wr(e);n&&(t.push(`NOPASSWD Cmnd ${n}`),t.push(`NOPASSWD Cmnd ${n} *`))}for(let n of e?.writablePaths??[]){let e=Wr(n);e&&(t.push(`NOPASSWD Write ${Mx(e)}`),t.push(`NOPASSWD Write ${Mx(e)}/**`))}for(let n of e?.visiblePaths??[]){let e=Wr(n);e&&(t.push(`NOPASSWD Read ${Mx(e)}`),t.push(`NOPASSWD Read ${Mx(e)}/**`))}return`${t.join(`
988
- `)}\n`}var Fx=class{fs;watcher;broker;onPolicyReload;policy=Vr();unwatch=null;reloadChain=Promise.resolve();scoopPolicies=new Map;scoopConfigPolicies=new Map;scoopReloadChains=new Map;constructor(e){this.fs=e.fs,this.watcher=e.watcher??null,this.broker=e.broker??p(e.capabilityBroker??null),this.onPolicyReload=e.onPolicyReload??(()=>{})}async init(){await this.ensureDefaults(),await this.reload(),this.startWatching()}getBroker(){return this.broker}async approve(e){if(e.kind===`export`&&Ur(this.policy,e.detail)===`nopasswd-allow`)return kx.info(`Export pre-granted by sudoers`,{subject:e.detail}),{decision:`allow`};let t=await this.broker.requestApproval(e);if(t.decision===`always`){if(e.kind===`guest-message`||e.kind===`guest-tool`)return kx.info(`Downgrading "Always" on a guest message to a one-shot allow`),{decision:`allow`,attestation:t.attestation};let n=t.pattern?.trim()||e.suggestedPattern?.trim()||e.detail;try{await this.persistGrant(Zr(e.kind),n)}catch(n){return kx.warn(`Failed to persist "Always" grant; honouring as one-shot allow`,{kind:e.kind,error:n instanceof Error?n.message:String(n)}),{decision:`allow`,attestation:t.attestation}}}return t}getPolicy(){return this.policy}getPolicyForScoop(e){let t=this.scoopPolicies.get(e),n=this.scoopConfigPolicies.get(e),r=[Br(),this.policy];return n&&r.push(n),t&&r.push(t),qr(...r)}registerScoopConfig(e,t){this.scoopConfigPolicies.set(e,Gr(Px(t??void 0))),this.onPolicyReload(e)}async initScoopPolicy(e,t){this.registerScoopConfig(e,t);let n=$r(e);if(await this.fs.exists(n).catch(()=>!1)){let{migrateLegacyScoopSudoers:t}=await import(`./migrate-scoop-sudoers-PBnz9AA3.js`);await t(e,{fs:this.fs})}await this.reloadScoopPolicy(e)}async appendScoopRule(e,t,n){let r=Wr(n);if(!r)return null;let i=t===`command`?`Cmnd`:t===`read`?`Read`:`Write`,a=ei(e);if(!a)return kx.warn(`Unspellable scoop folder; not persisting`,{folder:e}),null;let o=await this.readTextOrEmpty(a),s=`NOPASSWD ${i} ${r}`;if(o.split(`
989
- `).some(e=>e.trim()===s))return kx.info(`Per-scoop grant already present; skipping duplicate append`,{folder:e,kind:t,pattern:r}),r;try{await this.fs.mkdir(Jr,{recursive:!0})}catch{}let c=o?o.endsWith(`
990
- `)?o:`${o}\n`:Nx;return await this.fs.writeFile(a,`${c}${s}\n`),await this.reloadScoopPolicy(e),kx.info(`Appended per-scoop grant`,{folder:e,path:a,kind:t,pattern:r}),r}async readTextOrEmpty(e){try{if(!await this.fs.exists(e))return``;let t=await this.fs.readFile(e,{encoding:`utf-8`});return typeof t==`string`?t:new TextDecoder().decode(t)}catch(e){if(e instanceof k&&e.code===`ENOENT`)return``;throw e}}getShellConfig(e={}){return{getPolicy:()=>this.policy,broker:this.broker,persistCommandGrant:e=>this.persistCommandGrant(e),transparentGating:e.transparentGating??!0}}reload(){return this.reloadChain=this.reloadChain.then(()=>this.doReload()),this.reloadChain}forgetScoopPolicies(e){this.scoopConfigPolicies.delete(e),this.scoopPolicies.delete(e),this.scoopReloadChains.delete(e),this.onPolicyReload(e)}reloadScoopPolicyByFolder(e){return this.reloadScoopPolicy(e)}dispose(){this.unwatch?.(),this.unwatch=null}reloadScoopPolicy(e){let t=(this.scoopReloadChains.get(e)??Promise.resolve()).then(()=>this.doReloadScoopPolicy(e));return this.scoopReloadChains.set(e,t),t}async doReloadScoopPolicy(e){let t=ei(e);if(!t){this.scoopPolicies.delete(e),this.onPolicyReload(e);return}try{if(!await this.fs.exists(t)){this.scoopPolicies.delete(e),this.onPolicyReload(e);return}}catch{this.scoopPolicies.delete(e),this.onPolicyReload(e);return}this.scoopPolicies.set(e,await this.readPolicyFile(t)),this.onPolicyReload(e)}async doReload(){let e=[await this.readPolicyFile(Xr)];try{let t=(await this.fs.readDir(Jr)).filter(e=>e.type===`file`).filter(e=>zr(e.name)===null).map(e=>e.name).sort();for(let n of t)e.push(await this.readPolicyFile(`${Jr}/${n}`))}catch{}this.policy=qr(...e),this.onPolicyReload()}async readPolicyFile(e){try{if(!await this.fs.exists(e))return Vr();let t=await this.fs.readFile(e,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t);return Gr(n)}catch(t){return kx.warn(`Failed to read sudoers file; ignoring`,{path:e,error:t instanceof Error?t.message:String(t)}),Vr()}}async ensureDefaults(){try{await this.fs.mkdir(Jr,{recursive:!0})}catch{}await this.seedWhenAbsent(Xr,()=>Ox),await this.seedWhenAbsent(Qr,async()=>(await import(`./approver-agent-CivzfuZ7.js`)).DEFAULT_APPROVALS_MD)}async seedWhenAbsent(e,t){try{if(await this.fs.exists(e))return;await this.fs.writeFile(e,await t()),kx.info(`Seeded bundled policy default`,{path:e})}catch(t){kx.warn(`Failed to seed bundled policy default`,{path:e,error:t instanceof Error?t.message:String(t)})}}persistCommandGrant(e){return this.persistGrant(`Cmnd`,e)}async persistGrant(e,t){let n=Wr(t);if(!n)return;let r=``;try{if(await this.fs.exists(ri)){let e=await this.fs.readFile(ri,{encoding:`utf-8`});r=typeof e==`string`?e:new TextDecoder().decode(e)}}catch(e){if(!(e instanceof k&&e.code===`ENOENT`))throw e}try{await this.fs.mkdir(Jr,{recursive:!0})}catch{}let i=r&&!r.endsWith(`
991
- `)?`${r}\n`:r,a=e===`Cmnd`?` `:` `;await this.fs.writeFile(ri,`${i}NOPASSWD ${e}${a}${n}\n`),await this.reload()}startWatching(){this.watcher&&(this.unwatch||=this.watcher.watch(`/etc`,Ax,e=>{let t=new Set,n=!1,r=!1;for(let i of e){if(i.path===`/etc/sudoers.d`){r=!0;continue}let e=jx(i.path);e?t.add(e):n=!0}if(r){this.reload();for(let e of[...this.scoopPolicies.keys()])this.reloadScoopPolicy(e);return}n&&this.reload();for(let e of t)this.reloadScoopPolicy(e)}))}};function Ix(e){return e.replace(/~/g,`~0`).replace(/\//g,`~1`)}function Lx(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Rx(e,t,n){if(typeof e==`string`){n.push({pointer:t,value:e});return}if(Array.isArray(e)){for(let r=0;r<e.length;r++)Rx(e[r],`${t}/${r}`,n);return}if(Lx(e))for(let[r,i]of Object.entries(e))Rx(i,`${t}/${Ix(r)}`,n)}function zx(e,t,n){if(typeof e==`string`)return n.get(t)??e;if(Array.isArray(e)){let r=!1,i=[];for(let a=0;a<e.length;a++){let o=zx(e[a],`${t}/${a}`,n);o!==e[a]&&(r=!0),i.push(o)}return r?i:e}if(Lx(e)){let r=!1,i={};for(let[a,o]of Object.entries(e)){let e=zx(o,`${t}/${Ix(a)}`,n);e!==o&&(r=!0),i[a]=e}return r?i:e}return e}function Bx(e,t,n){if(Lx(e))return zx(e,t,n);if(typeof e==`string`)return n.get(t)??e;if(Array.isArray(e)){let r=!1,i=[];for(let a=0;a<e.length;a++){let o=Bx(e[a],`${t}/${a}`,n);o!==e[a]&&(r=!0),i.push(o)}return r?i:e}return e}function Vx(e){let t=new Map;for(let n of e.matchAll(/⟦REDACTED:([^:⟧]+):([^⟧]+)⟧/g)){let e=n[0],r=t.get(e);r?r.count++:t.set(e,{category:n[1],id:n[2],count:1})}return t}async function Hx(e,t,n){let r=[],i=0;for(;i<e.length;){if(n?.aborted)throw new a(`redaction-unavailable`);let o=0,s=i;for(;s<e.length;){let t=e[s].length;if(s>i&&o+t>1048576)break;o+=t,s++}let c=e.slice(i,s),l;try{l=await t.redact(c,n)}catch{throw new a(`redaction-unavailable`)}if(l.length!==c.length)throw new a(`redaction-unavailable`);r.push(...l),i=s}return r}function Ux(e,t,n,r){let i=[],a=Vx(e);for(let{category:e,id:t}of a.values())i.push({id:t,category:e,detector:`pre-obfuscated`,target:n});let o=Vx(t);for(let[e,{category:t,id:r,count:s}]of o)s>(a.get(e)?.count??0)&&i.push({id:r,category:t,detector:`known-secret`,target:n});let{text:s,matches:c,nextId:l}=xe(t,`r`,r);for(let{id:e,category:t}of c)i.push({id:e,category:t,detector:`credential-pattern`,target:n});return{finalText:s,redactions:i,nextId:l}}function Wx(e,t,n){for(let{redactions:r}of e)for(let e of r)t.push(e),n[e.category]=(n[e.category]??0)+1}async function Gx(e,t,n,r){if(r?.aborted)throw new a(`redaction-unavailable`);let{privacy:i,...o}=e,s=[];Rx(o,``,s);let c=s.filter(e=>!ne(e.pointer)),l=[...t.entries()],u=await Hx([...c.map(e=>e.value),...l.map(([,e])=>e)],n,r),d=[],f={},p=1,m=new Map,h=[];for(let e=0;e<c.length;e++){let t=c[e],n=Ux(t.value,u[e],{kind:`json`,pointer:t.pointer},p);p=n.nextId,n.finalText!==t.value&&m.set(t.pointer,n.finalText),h.push(n)}Wx(h,d,f);let ee=new Map,g=c.length,te=[];for(let e=0;e<l.length;e++){let[t,n]=l[e],r=Ux(n,u[g+e],{kind:`attachment`,attachmentId:t},p);p=r.nextId,ee.set(t,r.finalText),te.push(r)}Wx(te,d,f);let re=Bx(e,``,m);return{document:{...re,privacy:{...re.privacy,redactionCounts:f,redactions:d}},textAttachments:ee}}function Kx(e,t){let n=e.startsWith(`text/`)||e===`application/json`,r=/\.(?:txt|md|json|csv|xml|ya?ml|js|mjs|cjs|ts|tsx|css|html)$/i.test(t);return n||r?`text-redacted`:`binary-unchanged`}async function qx(e){let t=e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength),n=await crypto.subtle.digest(`SHA-256`,t);return Array.from(new Uint8Array(n)).map(e=>e.toString(16).padStart(2,`0`)).join(``)}const Jx={"image/png":`.png`,"image/jpeg":`.jpg`,"image/gif":`.gif`,"image/webp":`.webp`,"image/svg+xml":`.svg`,"image/bmp":`.bmp`,"application/pdf":`.pdf`,"application/zip":`.zip`,"application/gzip":`.gz`,"application/json":`.json`,"text/plain":`.txt`,"text/markdown":`.md`,"text/csv":`.csv`,"text/html":`.html`,"text/xml":`.xml`,"application/xml":`.xml`};function Yx(e,t){return Jx[e]??(t===`text-redacted`?`.txt`:`.bin`)}function Xx(e,t,n){return`attachments/att-${String(e+1).padStart(4,`0`)}${Yx(t,n)}`}function Zx(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}function Qx(e){let t=[];for(let n of e.conversations){let e=0;for(let r of n.messages){let i=r.role;if(i!==`user`&&i!==`assistant`&&i!==`tool-result`)continue;let a=0;for(let o of r.content)o.type===`attachment-ref`&&(t.push({attachmentId:o.attachmentId,conversationId:n.id,messageId:r.id,role:i,userOrdinal:e,imgIndex:a}),a++);i===`user`&&e++}}return t}async function $x(e,t,n,r,i){let a=Kx(e.mimeType,e.name),o={attachmentId:t,originalName:e.name,mimeType:e.mimeType,handling:a,present:!0,sourceConversationId:n,sourceMessageId:r};if(a===`text-redacted`){let t;if(e.text!==void 0)t=e.text;else if(e.data!==void 0)t=new TextDecoder().decode(Zx(e.data));else if(e.path!==void 0&&i!==void 0)try{t=new TextDecoder().decode(await i(e.path))}catch{return{...o,present:!1,missingReason:`attachment-file-missing`}}return t===void 0?{...o,present:!1,missingReason:`attachment-file-missing`}:{...o,rawText:t}}let s;if(e.data!==void 0)s=Zx(e.data);else if(e.path!==void 0&&i!==void 0)try{s=await i(e.path)}catch{return{...o,present:!1,missingReason:`attachment-file-missing`}}return s===void 0?{...o,present:!1,missingReason:`attachment-file-missing`}:{...o,rawBytes:s}}function eS(e,t,n,r){let i=[],a=new Set,o=new Set;for(let s of e){if(s.role!==`user`){let e=n.get(s.attachmentId);e===void 0?i.push(Promise.resolve({attachmentId:s.attachmentId,originalName:`unknown`,mimeType:`application/octet-stream`,handling:`binary-unchanged`,present:!1,missingReason:`attachment-file-missing`,sourceConversationId:s.conversationId,sourceMessageId:s.messageId})):i.push(Promise.resolve({attachmentId:s.attachmentId,originalName:`image-${s.imgIndex}`,mimeType:e.mimeType,handling:`binary-unchanged`,rawBytes:Zx(e.data),present:!0,sourceConversationId:s.conversationId,sourceMessageId:s.messageId}));continue}let e=(t.get(s.conversationId)??[]).filter(e=>e.role===`user`)[s.userOrdinal];if(e===void 0){a.add(s.conversationId),i.push(Promise.resolve({attachmentId:s.attachmentId,originalName:`unknown`,mimeType:`application/octet-stream`,handling:`binary-unchanged`,present:!1,missingReason:`attachment-association-unavailable`,sourceConversationId:s.conversationId,sourceMessageId:s.messageId}));continue}let c=(e.attachments??[]).map((e,t)=>({a:e,i:t})).filter(({a:e})=>e.kind===`image`||e.kind===`file`&&e.data!==void 0)[s.imgIndex];if(c===void 0){i.push(Promise.resolve({attachmentId:s.attachmentId,originalName:`unknown`,mimeType:`application/octet-stream`,handling:`binary-unchanged`,present:!1,missingReason:`attachment-file-missing`,sourceConversationId:s.conversationId,sourceMessageId:s.messageId}));continue}o.add(`${s.conversationId}:${e.id}:${c.i}`),i.push($x(c.a,s.attachmentId,s.conversationId,s.messageId,r))}return{pendingPromises:i,mismatchedConvIds:a,processedUiPositions:o}}function tS(e,t,n){return(e.attachments??[]).map((e,t)=>({a:e,i:t})).filter(({a:r,i})=>(r.kind===`text`||r.kind===`file`&&(r.data!==void 0||r.path!==void 0))&&!n.has(`${t}:${e.id}:${i}`))}function nS(e,t,n,r,i,a,o){let s=tS(t,n,i),c=[];for(let t=0;t<s.length;t++){let{a:i}=s[t],l=`${e.id}-file-${t}`;r.has(l)||(a.push($x(i,l,n,e.id,o)),c.push({type:`attachment-ref`,attachmentId:l}))}return c}function rS(e,t,n,r,i){let a=new Map,o=[];for(let s of e.conversations){let e=(t.get(s.id)??[]).filter(e=>e.role===`user`),c=0;for(let t of s.messages){if(t.role!==`user`)continue;let l=e[c];if(c++,l===void 0)continue;let u=nS(t,l,s.id,n,r,o,i);u.length>0&&(a.has(s.id)||a.set(s.id,new Map),a.get(s.id).set(t.id,[...t.content,...u]))}}return{updates:a,additionalPendingPromises:o}}function iS(e,t){let n=new Map,r=0,i=new Map;for(let t of e)t.handling===`text-redacted`&&t.rawText!==void 0&&n.set(t.attachmentId,t.rawText),t.present&&i.set(t.attachmentId,Xx(r++,t.mimeType,t.handling));for(let n of e)!n.present&&n.missingReason!==void 0&&t.add(n.missingReason);return{rawAttachments:e.map(e=>e.present?{id:e.attachmentId,path:i.get(e.attachmentId),originalName:e.originalName,mimeType:e.mimeType,byteLength:0,sha256:``,sourceConversationId:e.sourceConversationId,sourceMessageId:e.sourceMessageId,handling:e.handling,present:!0}:{id:e.attachmentId,path:``,originalName:e.originalName,mimeType:e.mimeType,byteLength:0,sha256:``,sourceConversationId:e.sourceConversationId,sourceMessageId:e.sourceMessageId,handling:e.handling,present:!1,missingReason:e.missingReason??`attachment-file-missing`}),textMap:n}}async function aS(e,t,n,r,i){let{rawAttachments:o,textMap:s}=iS(e,n),c,l;try{let e=await Gx({...t,attachments:o},s,r,i);c=e.document,l=e.textAttachments}catch(e){throw e instanceof a?e:new a(`attachment-unreadable`)}let u=new Map;for(let t of e){if(u.has(t.attachmentId))throw new a(`schema-invalid`);u.set(t.attachmentId,t)}let d=new Map,f=await Promise.all(c.attachments.map(async e=>{if(!e.present||!e.path)return e;let t=u.get(e.id);if(t===void 0)throw new a(`schema-invalid`);let n=t.handling===`text-redacted`?new TextEncoder().encode(l.get(t.attachmentId)??t.rawText??``):t.rawBytes,r=await qx(n);return d.set(e.path,n),{...e,byteLength:n.length,sha256:r}}));return{redactedDocument:{...c,attachments:f},bundleFiles:d}}async function oS(e){let{document:t,chatMessagesByConversation:n,knownSecrets:r,signal:i}=e,a=e.canonicalImages??new Map,o=e.vfsReader,s=new Set,{pendingPromises:c,mismatchedConvIds:l,processedUiPositions:u}=eS(Qx(t),n,a,o);l.size>0&&s.add(`attachment-association-unavailable`);for(let e of t.conversations)e.messages.filter(e=>e.role===`user`).length>(n.get(e.id)??[]).filter(e=>e.role===`user`).length&&s.add(`attachment-association-unavailable`);let d=await Promise.all(c),{updates:f,additionalPendingPromises:p}=rS(t,n,new Set(d.map(e=>e.attachmentId)),u,o),m=await Promise.all(p),h=[...d,...m],ee=t;f.size>0&&(ee={...t,conversations:t.conversations.map(e=>{let t=f.get(e.id);return t?{...e,messages:e.messages.map(e=>{let n=t.get(e.id);return n?{...e,content:n}:e})}:e})});let{redactedDocument:g,bundleFiles:te}=await aS(h,ee,s,r,i),ne=[...g.session.completeness.missing.filter(e=>!s.has(e)),...s];return{document:{...g,session:{...g.session,completeness:{status:ne.length>0?`partial`:g.session.completeness.status,missing:ne}}},bundleFiles:te}}function sS(e){return qn(e)}function cS(e,t){return e.map(e=>{let n=t.isProcessing(e.jid)?`1`:`0`,r=t.getAgentMessages(e.jid);if(r===null)return`${e.jid}:${n}:null`;let i=r.length,a=r[i-1],o=a?.role??``,s=a&&`timestamp`in a?a.timestamp:-1,c=a&&`toolCallId`in a?a.toolCallId:``;return`${e.jid}:${n}:${i}:${o}:${s}:${c}`}).join(`,`)}function lS(e,t,n,r){let i=new Map;for(let e of t)i.set(e.id,e);let a=new Map;for(let e of n)a.set(e.id,e);let o=[],s=new Map;for(let t of e){let e=r.getAgentMessages(t.jid)??i.get(t.jid)?.messages??[],n={id:t.jid,kind:Nn(t)?`cone`:`scoop`,name:t.name,...t.folder&&!Nn(t)?{folder:t.folder}:{},...t.parentJid?{parentConversationId:t.parentJid}:{},...t.originToolCallId?{originToolCallId:t.originToolCallId}:{},messages:e};o.push(n);let c=sS(t),l=a.get(c);l&&s.set(t.jid,l.messages)}return{sources:o,chatMessagesByConversation:s}}async function uS(e,t,n={}){let r=e=>n.rootJid===void 0?e:Fn(e,n.rootJid);for(;;){let n=r(e.listScoops());for(;n.some(t=>e.isProcessing(t.jid));)if(t?.aborted||(await e.wait(50,t),t?.aborted))throw new a(`transfer-aborted`);let i=cS(n,e),[o,s]=await Promise.all([e.loadPersistedSessions(),e.loadUiChatSessions()]);if(t?.aborted)throw new a(`transfer-aborted`);let c=r(e.listScoops());if(i===cS(c,e))return lS(c,o,s,e)}}var dS=e({SESSIONS_DIR:()=>fS,SESSIONS_INDEX_PATH:()=>pS,parseFrozenArchive:()=>hS,readSessionsIndex:()=>mS});const fS=`/sessions`,pS=`/sessions/index.json`;async function mS(e){try{let t=await e.readFile(pS,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),r=JSON.parse(n);return Array.isArray(r)?r:[]}catch{return[]}}function hS(e){let t=e,n=`Untitled`,r={},i=t.match(/^---\n([\s\S]*?)\n---\n+/);if(i){t=t.slice(i[0].length),Object.assign(r,gS(i[1]));let e=i[1].match(/^title:\s*(.+?)\s*$/m);e&&(n=_S(e[1]))}let a=t.match(/<!-- slicc:session-data\n([\s\S]*?)\n-->\n*/);if(a){try{let e=a[1].replace(/-- >/g,`-->`),t=JSON.parse(e);if(Array.isArray(t))return{title:n,messages:t,...r}}catch{}t=t.replace(/<!-- slicc:session-data\n[\s\S]*?\n-->\n*/,``)}return r.sidecar?{title:n,messages:[],...r}:(t=t.replace(/^#\s+[^\n]*\n+/,``),{title:n,messages:yS(t),...r})}function gS(e){let t={},n=vS(e,`cost`),r=vS(e,`models`);n&&(t.cost=n),r&&(t.models=r);let i=e.match(/^cone:\s*(.+?)\s*$/m)?.[1];i&&(t.cone=i);let a=e.match(/^coneLabel:\s*(.+?)\s*$/m)?.[1];a&&(t.coneLabel=_S(a)),/^memorySkipped:\s*true\s*$/m.test(e)&&(t.memorySkipped=!0),/^live:\s*true\s*$/m.test(e)&&(t.live=!0);let o=Number(e.match(/^liveThrough:\s*(\d+)\s*$/m)?.[1]);Number.isFinite(o)&&o>0&&(t.liveThrough=o);let s=Number(e.match(/^compactions:\s*(\d+)\s*$/m)?.[1]);Number.isFinite(s)&&s>0&&(t.compactions=s);let c=Number(e.match(/^curatedThrough:\s*(\d+)\s*$/m)?.[1]);Number.isFinite(c)&&c>0&&(t.curatedThrough=c);let l=e.match(/^id:\s*(\S+)\s*$/m)?.[1];l&&(t.id=l);let u=e.match(/^sidecar:\s*(\S+)\s*$/m)?.[1];return u&&(t.sidecar=u),t}function _S(e){let t=e.trim();if(!t.startsWith(`"`))return t;try{let e=JSON.parse(t);if(typeof e==`string`)return e}catch{}return t.replace(/^"|"$/g,``)}function vS(e,t){let n=RegExp(`^${t}:\\s*(.+?)\\s*$`,`m`).exec(e)?.[1];if(n)try{return JSON.parse(n)}catch{return}}function yS(e){let t=[],n=/^## (User|Assistant)\s*\n/gm,r=[],i;for(;(i=n.exec(e))!==null;)r.push({role:i[1]===`User`?`user`:`assistant`,start:i.index,bodyStart:i.index+i[0].length});for(let n=0;n<r.length;n++){let i=n+1<r.length?r[n+1].start:e.length,a=e.slice(r[n].bodyStart,i).trim();t.push({id:`frozen-${n}`,role:r[n].role,content:a,timestamp:0})}return t}function bS(e,t){return`${e}-msg-${t.toString().padStart(6,`0`)}`}function xS(e,t){return{type:`attachment-ref`,attachmentId:`${e}-img-${t}`}}function SS(e,t){if(typeof e==`string`)return e?[{type:`text`,text:e}]:[];let n=[],r=0;for(let i of e)i.type===`text`?i.text&&n.push({type:`text`,text:i.text}):i.type===`image`&&n.push(xS(t,r++));return n}function CS(e,t){let n=[],r=new Map,i=0,a=0;for(let o of e)if(o.type===`thinking`)i+=1;else if(o.type===`text`)o.text&&n.push({type:`text`,text:o.text});else if(o.type===`toolCall`)n.push({type:`tool-call`,id:o.id??``,name:o.name??``,input:o.arguments??{}});else if(o.type===`image`){let e=xS(t,a++);n.push(e),o.data&&o.mimeType&&r.set(e.attachmentId,{data:o.data,mimeType:o.mimeType})}return{blocks:n,excluded:i,images:r}}function wS(e,t){let n=[],r=new Map,i=0;for(let a of e)if(a.type===`text`)a.text&&n.push({type:`text`,text:a.text});else if(a.type===`image`){let e=xS(t,i++);n.push(e),a.data&&a.mimeType&&r.set(e.attachmentId,{data:a.data,mimeType:a.mimeType})}return{blocks:n,images:r}}function TS(e,t,n){let r=bS(t,n),i=SS(e.content,r);return{message:{id:r,sequence:n,role:`user`,timestamp:new Date(e.timestamp).toISOString(),content:i},excludedReasoningBlocks:0,images:new Map}}function ES(e,t,n){let r=bS(t,n),{blocks:i,excluded:a,images:o}=CS(e.content,r);return{message:{id:r,sequence:n,role:`assistant`,timestamp:new Date(e.timestamp).toISOString(),content:i,model:{provider:e.provider,id:e.model,api:e.api},usage:e.usage,stopReason:e.stopReason,...e.errorMessage?{error:e.errorMessage}:{}},excludedReasoningBlocks:a,images:o}}function DS(e,t,n){let r=bS(t,n),{blocks:i,images:a}=wS(e.content,r);return{message:{id:r,sequence:n,role:`tool-result`,timestamp:new Date(e.timestamp).toISOString(),content:i,toolCallId:e.toolCallId,isError:e.isError},excludedReasoningBlocks:0,images:a}}function OS(e,t,n){return e.role===`user`?TS(e,t,n):e.role===`assistant`?ES(e,t,n):e.role===`toolResult`?DS(e,t,n):{message:null,excludedReasoningBlocks:0,images:new Map}}function kS(e){let t=[];for(let n of e){if(!n.parentConversationId)continue;let e={sourceConversationId:n.parentConversationId,targetConversationId:n.id};n.originToolCallId&&(e.toolCallId=n.originToolCallId),t.push(e)}return t}function AS(e){let t=0,n=new Map;return{conversations:e.map(e=>{let r=e.messages.flatMap((r,i)=>{let a=OS(r,e.id,i+1);t+=a.excludedReasoningBlocks;for(let[e,t]of a.images)n.set(e,t);return a.message?[a.message]:[]});return{id:e.id,kind:e.kind,name:e.name,...e.folder?{folder:e.folder}:{},...e.parentConversationId?{parentConversationId:e.parentConversationId}:{},...e.createdAt?{createdAt:e.createdAt}:{},...e.updatedAt?{updatedAt:e.updatedAt}:{},messages:r}}),delegations:kS(e),excludedReasoningBlocks:t,canonicalImages:n}}const jS=(()=>{let e=new Uint32Array(256);for(let t=0;t<256;t++){let n=t;for(let e=0;e<8;e++)n=n&1?3988292384^n>>>1:n>>>1;e[t]=n}return e})();function MS(e){let t=-1>>>0;for(let n=0;n<e.length;n++)t=t>>>8^jS[(t^e[n])&255];return~t>>>0}const NS=new TextEncoder;function K(e,t,n){e[t]=n&255,e[t+1]=n>>>8&255}function PS(e,t,n){e[t]=n&255,e[t+1]=n>>>8&255,e[t+2]=n>>>16&255,e[t+3]=n>>>24&255}function FS(e,t,n){let r=new Uint8Array(30+e.length);return r[0]=80,r[1]=75,r[2]=3,r[3]=4,K(r,4,20),K(r,6,2048),K(r,8,0),K(r,10,0),K(r,12,0),PS(r,14,n),PS(r,18,t),PS(r,22,t),K(r,26,e.length),K(r,28,0),r.set(e,30),r}function IS(e,t,n,r){let i=new Uint8Array(46+e.length);return i[0]=80,i[1]=75,i[2]=1,i[3]=2,K(i,4,20),K(i,6,20),K(i,8,2048),K(i,10,0),K(i,12,0),K(i,14,0),PS(i,16,n),PS(i,20,t),PS(i,24,t),K(i,28,e.length),K(i,30,0),K(i,32,0),K(i,34,0),K(i,36,0),PS(i,38,0),PS(i,42,r),i.set(e,46),i}function LS(e,t,n){let r=new Uint8Array(22);return r[0]=80,r[1]=75,r[2]=5,r[3]=6,K(r,4,0),K(r,6,0),K(r,8,e),K(r,10,e),PS(r,12,t),PS(r,16,n),K(r,20,0),r}function RS(e){if(!e||e.startsWith(`/`)||e.includes(`\0`)||e.includes(`\\`))return!1;for(let t of e.split(`/`))if(t===``||t===`.`||t===`..`)return!1;return!0}function zS(e){let t=e.export.generatedAt.slice(0,10),n=e.export.id.slice(0,8);return`slicc-${t}-${be(e.session.title,{maxLen:40,fallback:`transcript`})}-${n}.zip`}async function*BS(e,t,n,r,i){if(n?.aborted)throw i(new a(`transfer-aborted`)),new a(`transfer-aborted`);let o=()=>i(new a(`transfer-aborted`));n?.addEventListener(`abort`,o,{once:!0});let s=ai.create(),c=0,l=0,u=[],d=!1;function*f(e){s.update(e),c+=e.byteLength,l+=e.byteLength,yield e}try{let i=new TextEncoder().encode(JSON.stringify(e,null,2)),o=NS.encode(`transcript.json`),p=MS(i),m=FS(o,i.length,p);if(u.push({nameBytes:o,size:i.length,crc:p,localOffset:l}),n?.aborted||(yield*f(m),n?.aborted))throw new a(`transfer-aborted`);yield*f(i);for(let[e,r]of t){if(n?.aborted)throw new a(`transfer-aborted`);let t=NS.encode(e),i=MS(r),o=FS(t,r.length,i);if(u.push({nameBytes:t,size:r.length,crc:i,localOffset:l}),yield*f(o),n?.aborted)throw new a(`transfer-aborted`);yield*f(r)}let h=l;for(let e of u){if(n?.aborted)throw new a(`transfer-aborted`);yield*f(IS(e.nameBytes,e.size,e.crc,e.localOffset))}if(n?.aborted)throw new a(`transfer-aborted`);yield*f(LS(u.length,l-h,h)),d=!0,r({byteLength:c,sha256:s.hex()})}catch(e){throw d=!0,i(e),e}finally{n?.removeEventListener(`abort`,o),d||(d=!0,i(new a(`transfer-aborted`)))}}function VS(e,t,n){for(let e of t.keys())if(!RS(e))throw new a(`schema-invalid`);if(t.size+1>65535)throw new a(`schema-invalid`);for(let e of t.values())if(e.byteLength>4294967295)throw new a(`schema-invalid`);let r,i,o=new Promise((e,t)=>{r=e,i=t});return{filename:zS(e),chunks:BS(e,t,n,r,i),completion:o}}function HS(e,t,n,r,i,a={}){return{schemaVersion:1,export:{id:crypto.randomUUID(),generatedAt:new Date().toISOString(),producer:{application:`slicc`,version:i},format:re},session:{id:e,title:t,state:n,completeness:{status:`complete`,missing:[]},...a},privacy:{reasoningExcluded:!0,excludedReasoningBlocks:r.excludedReasoningBlocks,binaryAttachments:`included-unchanged`,redactionCounts:{},redactions:[]},conversations:r.conversations,delegations:r.delegations,attachments:[]}}function US(e,t){let n=[],r=1;for(let i of e){if(i.role!==`user`&&i.role!==`assistant`)continue;let e=`${t}-msg-${String(r).padStart(6,`0`)}`;n.push({id:e,sequence:r++,role:i.role,timestamp:new Date(i.timestamp||0).toISOString(),content:i.content?[{type:`text`,text:i.content}]:[]})}return n}function WS(e){let t=n(e);if(!t.ok)throw new a(`schema-invalid`,t.error)}function GS(e,t,n){let r=new Map;for(let i of e)if(!(!i.present||!i.path)){if(i.handling===`text-redacted`){let e=t.get(i.id);e!==void 0&&r.set(i.path,new TextEncoder().encode(e))}else{let e=n.get(i.path);e&&r.set(i.path,e)}}return r}async function KS(e,t){return Promise.all(e.map(async e=>{if(!e.present||!e.path||e.handling!==`text-redacted`)return e;let n=t.get(e.path);if(!n)return e;let r=n.buffer.slice(n.byteOffset,n.byteOffset+n.byteLength),i=await crypto.subtle.digest(`SHA-256`,r),a=Array.from(new Uint8Array(i)).map(e=>e.toString(16).padStart(2,`0`)).join(``);return{...e,byteLength:n.length,sha256:a}}))}function qS(e){let t=e.match(/^---\n([\s\S]*?)\n---\n/);if(!t)return{};let n=t[1],r={},i=n.match(/^createdAt:\s*(\d+)\s*$/m),a=n.match(/^updatedAt:\s*(\d+)\s*$/m);return i&&(r.createdAt=new Date(Number(i[1])).toISOString()),a&&(r.updatedAt=new Date(Number(a[1])).toISOString()),r}var JS=class{deps;constructor(e){this.deps=e}async export(e,t={}){let{signal:n,onProgress:r}=t,i;return i=e.kind===`active`?await this.buildActiveSnapshot(n,r):await this.buildFrozenSnapshot(e.sessionId,n,r),WS(i.document),r?.({phase:`packaging`}),VS(i.document,i.bundleFiles,n)}async captureFrozen(e,t){let n=await uS(this.deps.collection,t,{...e.rootJid?{rootJid:e.rootJid}:{}});if(e.rootJid&&n.sources.length===0)return;let r=AS(n.sources),{document:i,bundleFiles:a}=await oS({document:HS(e.sessionId,e.title,`frozen`,r,this.deps.version,{frozenAt:e.frozenAt,createdAt:new Date(e.createdAt).toISOString(),updatedAt:new Date(e.updatedAt).toISOString()}),chatMessagesByConversation:n.chatMessagesByConversation,knownSecrets:this.deps.knownSecrets,canonicalImages:r.canonicalImages,vfsReader:e=>this.readBinaryFromVfs(e),signal:t});WS(i),await this.deps.snapshotStore.write(e.sessionId,{document:i,attachments:a})}async buildActiveSnapshot(e,t){t?.({phase:`waiting-for-conversations`}),t?.({phase:`collecting`});let n=await uS(this.deps.collection,e),r=AS(n.sources),{id:i,title:a}=this.deps.getActiveSessionInfo(),o=HS(i,a,`active`,r,this.deps.version);return t?.({phase:`redacting`}),oS({document:o,chatMessagesByConversation:n.chatMessagesByConversation,knownSecrets:this.deps.knownSecrets,canonicalImages:r.canonicalImages,vfsReader:e=>this.readBinaryFromVfs(e),signal:e})}async buildFrozenSnapshot(e,t,n){let r=await this.deps.snapshotStore.read(e);return r?(n?.({phase:`redacting`}),this.reredactStoredSnapshot(r,t)):this.buildLegacyPartial(e,t,n)}async reredactStoredSnapshot(e,t){let n=new Map;for(let t of e.document.attachments){if(t.handling!==`text-redacted`||!t.present||!t.path)continue;let r=e.attachments.get(t.path);r&&n.set(t.id,new TextDecoder().decode(r))}let r,i;try{let a=await Gx(e.document,n,this.deps.knownSecrets,t);r=a.document,i=a.textAttachments}catch{throw new a(`redaction-unavailable`)}let o=GS(r.attachments,i,e.attachments),s=await KS(r.attachments,o);return{document:{...r,attachments:s},bundleFiles:o}}async buildLegacyPartial(e,t,n){let r=(await mS(this.deps.vfs)).find(t=>t.sessionId===e||!t.sessionId&&t.filename===e);if(!r)throw new a(`session-not-found`);let i;try{let e=await this.deps.vfs.readFile(`/sessions/${r.filename}`,{encoding:`utf-8`});i=typeof e==`string`?e:new TextDecoder().decode(e)}catch{throw new a(`session-not-found`)}let{loadFrozenArchive:o}=await import(`./session-jsonl-B9EILxP9.js`),{title:s,messages:c}=await o(this.deps.vfs,i,r.filename),l=`legacy-cone`,u=US(c,l),d=qS(i),f={schemaVersion:1,export:{id:crypto.randomUUID(),generatedAt:new Date().toISOString(),producer:{application:`slicc`,version:this.deps.version},format:re},session:{id:e,title:s,state:`frozen`,...r.frozenAt?{frozenAt:r.frozenAt}:{},...d,completeness:{status:`partial`,missing:[`complete-snapshot-unavailable`,`canonical-agent-history-unavailable`]}},privacy:{reasoningExcluded:!0,excludedReasoningBlocks:0,binaryAttachments:`included-unchanged`,redactionCounts:{},redactions:[]},conversations:[{id:l,kind:`cone`,name:s,messages:u}],delegations:[],attachments:[]},p=new Map([[l,c]]);return n?.({phase:`redacting`}),oS({document:f,chatMessagesByConversation:p,knownSecrets:this.deps.knownSecrets,vfsReader:e=>this.readBinaryFromVfs(e),signal:t})}async readBinaryFromVfs(e){let t=await this.deps.vfs.readFile(e,{encoding:`binary`});if(!(t instanceof Uint8Array))throw new a(`attachment-unreadable`);return t}};const YS=`/sessions/data`,XS=`document.json`;async function ZS(e){let t=e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength),n=await crypto.subtle.digest(`SHA-256`,t);return Array.from(new Uint8Array(n)).map(e=>e.toString(16).padStart(2,`0`)).join(``)}function QS(e){if(e.length===0||/[/\\\x00]/.test(e)||e===`..`||e===`.`||e.includes(`..`)||!/^[a-zA-Z0-9._-]+$/.test(e))throw new a(`session-not-found`)}function $S(e){return`${YS}/${e}`}function eC(e){return`${YS}/.tmp-${e}`}async function tC(e,t){try{await e.mkdir(t,{recursive:!0})}catch{}}async function nC(e,t){let n;try{n=await e.readDir(t)}catch{return}for(let r of n){let n=`${t}/${r.name}`;r.type===`directory`&&await nC(e,n);try{await e.rm(n)}catch{}}try{await e.rm(t)}catch{}}async function rC(e,t,n){await tC(e,n);let r=await e.readDir(t);for(let i of r){let r=`${t}/${i.name}`,a=`${n}/${i.name}`;if(i.type===`directory`)await rC(e,r,a);else{let t=await e.readFile(r,{encoding:`binary`});await e.writeFile(a,t)}}}async function iC(e,t,n){QS(t);let r=eC(t),i=$S(t),o=new Map(n.document.attachments.filter(e=>e.present&&e.path).map(e=>[e.path,e]));for(let[e]of n.attachments)if(!o.has(e))throw new a(`schema-invalid`);await nC(e,i),await tC(e,r);try{let t=[...n.document.attachments];for(let[e,r]of n.attachments){let n=await ZS(r),i=o.get(e);if(i!==void 0){let e=t.indexOf(i);e!==-1&&(t[e]={...i,sha256:n,byteLength:r.length})}}let a={...n.document,attachments:t},s=JSON.stringify(a,null,2);if(await e.writeFile(`${r}/${XS}`,s),n.attachments.size>0)for(let[t,i]of n.attachments){let n=`${r}/${t}`,a=t.lastIndexOf(`/`);a!==-1&&await tC(e,`${r}/${t.slice(0,a)}`),await e.writeFile(n,i)}await e.flush(),await rC(e,r,i),await e.flush()}catch(t){throw await nC(e,r),t}await nC(e,r)}async function aC(e,t){QS(t);let r=$S(t),i=`${r}/${XS}`,o;try{let t=await e.readFile(i,{encoding:`utf-8`});o=typeof t==`string`?t:new TextDecoder().decode(t)}catch{throw new a(`session-not-found`)}let s;try{s=JSON.parse(o)}catch{throw new a(`schema-invalid`)}if(!n(s).ok)throw new a(`schema-invalid`);let c=new Map;for(let t of s.attachments){if(!t.present||!t.path)continue;let n=`${r}/${t.path}`,i;try{let t=await e.readFile(n,{encoding:`binary`});i=t instanceof Uint8Array?t:new TextEncoder().encode(t)}catch{throw new a(`transfer-corrupt`)}if(await ZS(i)!==t.sha256)throw new a(`transfer-corrupt`);c.set(t.path,i)}return{document:s,attachments:c}}function oC(e){return`error`in e}function sC(){throw new a(`redaction-unavailable`)}function cC(e,t){return(typeof e!=`object`||!e||!Array.isArray(e.texts)||e.texts.length!==t)&&sC(),e.texts}function lC(){return{async redact(e){let t;try{t=await fetch(Re(`/api/secrets/redact-export`),{method:`POST`,headers:ze({"content-type":`application/json`}),body:JSON.stringify({texts:e})})}catch{sC()}t.ok||sC();let n;try{n=await t.json()}catch{sC()}return cC(n,e.length)}}}function uC(){return{async redact(e){let t;try{t=await new Promise(t=>{chrome.runtime.sendMessage({type:`secrets.redact-export`,texts:e},e=>{chrome.runtime.lastError,t(e??null)})})}catch{sC()}return typeof t==`object`&&t&&oC(t)&&sC(),cC(t,e.length)}}}function dC(){return{async redact(e){let t;try{t=await yn(`secrets.redact-export`,{texts:e})}catch{sC()}return t??sC(),typeof t==`object`&&t&&oC(t)&&sC(),cC(t,e.length)}}}function fC(){return{async redact(e){sC()}}}function pC(){let e=fn();return e===`connect`?fC():e===`extension-direct`?uC():e===`extension-delegate`?dC():lC()}const mC=new Set([`scoop-notify`,`scoop-idle`,`scoop-wait`]);function hC(e){return`e${e}`}function gC(e){let t=[];for(let n of e){let e=yC(n),r=xC(n);if(e===`assistant`){let e=t.length,i=hC(e);t.push({id:i,seq:e,kind:`assistant`,timestamp:r,text:wC(n),message:n,model:CC(n)});for(let e of TC(n)){let n=t.length;t.push({id:hC(n),seq:n,kind:`tool-call`,timestamp:r,toolCallId:e.id,name:e.name,assistantEntryId:i})}continue}if(e===`toolResult`){let e=n,i=t.length;t.push({id:hC(i),seq:i,kind:`tool-result`,timestamp:r,text:wC(n),message:n,toolCallId:e.toolCallId??``,isError:e.isError});continue}let i=wC(n),a=e===`user`?vC(i):null,o=t.length,s=hC(o);a===null?t.push({id:s,seq:o,kind:`user`,timestamp:r,text:i,message:n}):mC.has(a)?t.push({id:s,seq:o,kind:`child-result`,timestamp:r,text:i,message:n,channel:a}):t.push({id:s,seq:o,kind:`external-event`,timestamp:r,text:i,message:n,channel:a})}return t}function _C(e){let t=[];for(let n of e){let e=t.length,r=hC(e),i=SC(n),a=typeof n.content==`string`?n.content:``;if(n.role===`assistant`){t.push({id:r,seq:e,kind:`assistant`,timestamp:i,text:a,chat:n,model:n.model});for(let e of n.toolCalls??[]){let n=t.length;t.push({id:hC(n),seq:n,kind:`tool-call`,timestamp:i,toolCallId:e.id,name:e.name,assistantEntryId:r})}continue}let o=n.source===`lick`&&n.channel&&W_(n.channel)?n.channel:vC(a);o===null?t.push({id:r,seq:e,kind:`user`,timestamp:i,text:a,chat:n}):mC.has(o)?t.push({id:r,seq:e,kind:`child-result`,timestamp:i,text:a,chat:n,channel:o}):t.push({id:r,seq:e,kind:`external-event`,timestamp:i,text:a,chat:n,channel:o})}return t}function vC(e){for(let t of fv(e)){let e=(t.sender?pv(t.sender):null)??mv(t.body);if(e)return e}return null}function yC(e){return e.role??``}function bC(e){if(typeof e==`number`)return e;if(typeof e==`string`){let t=Date.parse(e);return Number.isNaN(t)?0:t}return e instanceof Date?e.getTime():0}function xC(e){return bC(e.timestamp)}function SC(e){return bC(e.timestamp)}function CC(e){let t=e.model;return typeof t==`string`?t:void 0}function wC(e){let t=e.content;if(typeof t==`string`)return t;if(!Array.isArray(t))return``;let n=[];for(let e of t)e?.type===`text`&&n.push(e.text);return n.join(``)}function TC(e){let t=e.content;if(!Array.isArray(t))return[];let n=[];for(let e of t){if(e?.type!==`toolCall`)continue;let t=e;n.push({id:t.id??``,name:t.name??``})}return n}function EC(e){let t=e.markers?.some(e=>e.kind===`error`)??!1,n=(e.projectionPrefix?.length??0)>0;return t||n?2:1}function DC(e){return e!==null&&e.version<=2}const OC=_(`work-unit-conversation`);var kC=class extends Error{};const AC=`conversations`;async function jC(e){let t=e.now??(()=>Date.now()),n=await NC(e.store,t()),r={migrated:0,alreadyDone:0,empty:0,skipped:0};if(n.done)return r.alreadyDone=e.units.length,r;let i=new Set(n.completedKeys),a=!1;for(let o of e.units){let s={...o,parentJid:o.parentJid??null},c=kr(s);if(i.has(c)){r.alreadyDone++;continue}try{let n=await MC(e,s,c,t());n===`migrated`?r.migrated++:n===`already`?r.alreadyDone++:r.empty++}catch(i){let o=i instanceof Error?i.message:String(i);if(r.skipped++,n.skipped=[...n.skipped.filter(e=>e.key!==c),{key:c,reason:o}],OC.warn(`Skipping a unit whose conversation could not be migrated`,{key:c,folder:s.folder,error:o}),i instanceof kC){a=!0,n.updatedAt=t(),await e.store.putMigrationState(n),e.onProgress?.(`conversation-migrated:${s.jid}`);continue}}i.add(c),n.completedKeys=[...i],n.updatedAt=t(),await e.store.putMigrationState(n),e.onProgress?.(`conversation-migrated:${s.jid}`)}return n.done=!a,n.updatedAt=t(),await e.store.putMigrationState(n),OC.info(`Canonical conversation migration complete`,{...r}),r}async function MC(e,t,n,r){let i=await e.store.read(n);if(i.status===`ok`)return`already`;if(i.status===`incompatible`)return OC.info(`Leaving a newer-schema conversation record untouched`,{key:n,version:i.version}),`already`;if(i.status===`error`)throw new kC(`canonical record unreadable: ${i.reason}`);let a=Ar(t),o=await e.loadAgentSession(t.jid);if(o&&!Array.isArray(o.messages))throw Error(`agent-sessions record has no message list`);if(o&&o.messages.length>0){let t={...a,version:2,origin:`agent-history`,entries:gC(o.messages),createdAt:o.createdAt??r,updatedAt:r,migratedFrom:`agent-sessions`};return await e.store.save(t),`migrated`}let s=await e.loadChatSession(a.legacyKeys.chatSessionId);if(s&&!Array.isArray(s.messages))throw Error(`browser-coding-agent record has no message list`);if(s&&s.messages.length>0){let t={...a,version:2,origin:`ui-projection`,entries:_C(s.messages),createdAt:s.createdAt??r,updatedAt:r,migratedFrom:`browser-coding-agent`};return await e.store.save(t),`migrated`}return`empty`}async function NC(e,t){let n=await e.getMigrationState(AC);return n&&n.version===1?{...n,completedKeys:Array.isArray(n.completedKeys)?n.completedKeys:[],skipped:Array.isArray(n.skipped)?n.skipped:[]}:{id:AC,version:1,completedKeys:[],skipped:[],done:!1,startedAt:t,updatedAt:t}}var PC=e({applyAttachmentOverlays:()=>RC,interleaveMarkers:()=>zC,toAgentMessages:()=>IC,toChatMessages:()=>LC});const FC=new Set([`summarized`,`fallback`]);function IC(e){if(!DC(e)||e===null||e.origin!==`agent-history`)return[];let t=[];for(let n of e.entries)n.kind!==`tool-call`&&n.message&&t.push(n.message);return t}async function LC(e,t={}){if(!DC(e)||e===null)return[];if(e.origin===`ui-projection`){let t=[];for(let n of e.entries)n.kind!==`tool-call`&&n.chat&&t.push(n.chat);return zC(t,e.markers)}let n=e.projectionPrefix??[],r=IC(e);if(r.length===0)return zC([...n],e.markers);let{agentMessagesToChatMessages:i}=await Promise.resolve().then(()=>Q_),a=RC(i(r,t),e.attachments);return zC([...n,...a],e.markers)}function RC(e,t){if(!t?.length)return e;let n=[...t].sort((e,t)=>e.timestamp-t.timestamp),r=new Set;return e.map(e=>{if(e.role!==`user`||e.attachments?.length)return e;let t=e.content.trim(),i=n.findIndex((e,n)=>!r.has(n)&&e.body.trim()===t);return i<0?e:(r.add(i),{...e,attachments:n[i].attachments})})}function zC(e,t){let n=(t??[]).filter(e=>e.kind!==`compaction`||FC.has(e.compaction.state));if(n.length===0)return e;let r=[...n].sort((e,t)=>e.timestamp-t.timestamp),i=[],a=0;for(let t of e){let e=BC(t);for(;a<r.length&&r[a].timestamp<=e;)i.push(VC(r[a++]));i.push(t)}for(;a<r.length;)i.push(VC(r[a++]));return i}function BC(e){let t=e.timestamp;if(typeof t==`number`&&Number.isFinite(t))return t;if(typeof t==`string`){let e=Date.parse(t);if(!Number.isNaN(e))return e}return-1/0}function VC(e){return e.kind===`error`?{id:e.id,role:`assistant`,content:e.text,timestamp:e.timestamp,error:!0}:{id:e.id,role:`assistant`,content:``,timestamp:e.timestamp,compaction:e.compaction}}async function HC(e){return{id:e.legacyKeys.chatSessionId,messages:await LC(e),createdAt:e.createdAt,updatedAt:e.updatedAt}}function UC(e){return{id:e.workUnitId,messages:IC(e),config:{},createdAt:e.createdAt,updatedAt:e.updatedAt}}var WC=class{store;constructor(e){this.store=e}async loadAgentSessions(){return(await this.latestPerUnit()).map(UC)}async loadChatSessions(){return Promise.all((await this.latestPerUnit()).map(HC))}async latestPerUnit(){let e=new Map;for(let t of await this.store.loadAll()){let n=e.get(t.workUnitId);(!n||t.updatedAt>n.updatedAt)&&e.set(t.workUnitId,t)}return[...e.values()]}async loadRootChatSession(e){let t=await this.store.loadLatestInWorkspace(fr({parentJid:null,folder:e}).root);return t?HC(t):null}async load(e){return e.startsWith(`session-`)?this.loadRootChatSession(e.slice(8)):null}};const GC=_(`work-unit-conversation`),KC=`conversations`,qC=`migrations`;var JC=class{dbPromise=null;dbName;writeChains=new Map;constructor(e={}){this.dbName=e.dbName??`slicc-work-units`}async load(e){let t=await this.read(e);return t.status===`ok`?t.record:null}async read(e){try{let t=await tw((await this.getDb()).transaction(KC,`readonly`).objectStore(KC).get(e));return t?DC(t)?Array.isArray(t.entries)?{status:`ok`,record:t}:(GC.warn(`Conversation record has no entry list`,{key:e}),{status:`malformed`,reason:`entries is not a list`}):(GC.warn(`Ignoring conversation record from a newer schema`,{key:e,version:t.version}),{status:`incompatible`,version:t.version}):{status:`absent`}}catch(t){return GC.warn(`Conversation record read failed`,{key:e,error:rw(t)}),{status:`error`,reason:rw(t)}}}async save(e){let t=e.version>2?e.version:EC(e),n={...e,version:t},r=(await this.getDb()).transaction(KC,`readwrite`);return r.objectStore(KC).put(n),await nw(r),n}delete(e){return this.serialize(e,async()=>{try{let t=(await this.getDb()).transaction(KC,`readwrite`);t.objectStore(KC).delete(e),await nw(t)}catch(t){GC.warn(`Conversation record delete failed`,{key:e,error:rw(t)})}})}async rekey(e,t){if(e!==t.key)try{let n=await this.read(e);if(n.status!==`ok`)return;let r=await this.read(t.key);if(r.status===`incompatible`||r.status===`error`){GC.warn(`Conversation rekey refused: target is not writable`,{fromKey:e,toKey:t.key,status:r.status});return}let i=Date.now();await this.save({...n.record,key:t.key,workUnitId:t.workUnitId,workspaceId:t.workspaceId,folder:t.folder,legacyKeys:t.legacyKeys,updatedAt:i}),await this.delete(e)}catch(n){GC.warn(`Conversation rekey failed`,{fromKey:e,toKey:t.key,error:rw(n)})}}async loadAll(){try{return(await tw((await this.getDb()).transaction(KC,`readonly`).objectStore(KC).getAll())).filter(e=>DC(e)&&Array.isArray(e.entries))}catch(e){return GC.warn(`Conversation record listing failed`,{error:rw(e)}),[]}}async loadLatestInWorkspace(e){try{let t=`${e}::`,n=await tw((await this.getDb()).transaction(KC,`readonly`).objectStore(KC).getAll(IDBKeyRange.bound(t,`${t}\uffff`))),r=null;for(let e of n)!DC(e)||!Array.isArray(e.entries)||(!r||e.updatedAt>r.updatedAt)&&(r=e);return r}catch(t){return GC.warn(`Conversation workspace lookup failed`,{workspaceId:e,error:rw(t)}),null}}async listKeys(){try{return(await tw((await this.getDb()).transaction(KC,`readonly`).objectStore(KC).getAllKeys())).map(String)}catch(e){return GC.warn(`Conversation key listing failed`,{error:rw(e)}),[]}}async syncAgentMessages(e,t,n={}){let r=n.now??Date.now(),i=gC(t);return this.serialize(e.key,()=>this.ingestEntries(e,i,n,r))}async ingestEntries(e,t,n,r){try{let i=await this.read(e.key);if(i.status===`incompatible`||i.status===`error`)return null;let a=i.status===`ok`?i.record:null,o=YC(a,t,e,`agent-history`,{createdAt:n.createdAt??r,now:r});return o?await this.save(o):a}catch(t){return GC.warn(`Conversation record write failed`,{key:e.key,error:rw(t)}),null}}async putMarker(e,t,n={}){return this.withRecord(e,n.createWith,e=>{let n=(e.markers??[]).filter(e=>e.id!==t.id);return n.push(t),n.sort((e,t)=>e.timestamp-t.timestamp),{...e,markers:n.slice(-64)}})}async putAttachments(e,t){if(t.length===0)return!1;let n=new Set(t.map(e=>e.id));return this.withRecord(e.key,e,e=>({...e,attachments:[...(e.attachments??[]).filter(e=>!n.has(e.id)),...t].sort((e,t)=>e.timestamp-t.timestamp).slice(-256)}))}async deleteMarker(e,t){return this.withRecord(e,void 0,e=>{let n=(e.markers??[]).filter(e=>e.id!==t);return n.length===(e.markers?.length??0)?null:{...e,markers:n}})}withRecord(e,t,n){return this.serialize(e,()=>this.mutateRecord(e,t,n))}async mutateRecord(e,t,n){try{let r=await this.read(e),i=r.status===`ok`?r.record:r.status===`absent`&&t?XC(t,Date.now()):null;if(!i)return!1;let a=n(i);return a?(await this.save({...a,updatedAt:Date.now()}),!0):!1}catch(t){return GC.warn(`Conversation marker write failed`,{key:e,error:rw(t)}),!1}}serialize(e,t){let n=(this.writeChains.get(e)??Promise.resolve()).then(t,t),r=n.then(()=>void 0,()=>void 0);return this.writeChains.set(e,r),r.then(()=>{this.writeChains.get(e)===r&&this.writeChains.delete(e)}),n}async getMigrationState(e){try{return await tw((await this.getDb()).transaction(qC,`readonly`).objectStore(qC).get(e))??null}catch(t){return GC.warn(`Migration state read failed`,{id:e,error:rw(t)}),null}}async putMigrationState(e){try{let t=(await this.getDb()).transaction(qC,`readwrite`);t.objectStore(qC).put(e),await nw(t)}catch(t){GC.warn(`Migration state write failed`,{id:e.id,error:rw(t)})}}async clearAll(){let e=(await this.getDb()).transaction([KC,qC],`readwrite`);e.objectStore(KC).clear(),e.objectStore(qC).clear(),await nw(e)}getDb(){return this.dbPromise||(this.dbPromise=ew(this.dbName).then(e=>(e.onversionchange=()=>{e.close(),this.dbPromise=null},e.onclose=()=>{this.dbPromise=null},e)),this.dbPromise.catch(()=>{this.dbPromise=null})),this.dbPromise}};function YC(e,t,n,r,i){if(!e)return t.length===0?null:{key:n.key,version:2,workUnitId:n.workUnitId,workspaceId:n.workspaceId,folder:n.folder,origin:r,entries:t,createdAt:i.createdAt,updatedAt:i.now,legacyKeys:n.legacyKeys};if(e.origin===`ui-projection`&&r===`agent-history`)return t.length===0?null:{...e,version:2,origin:r,entries:t,projectionPrefix:[...e.projectionPrefix??[],...ZC(e)],updatedAt:i.now,legacyKeys:n.legacyKeys};let a=e.entries;if(t.length===a.length&&QC(a,t))return null;let o=t.length>a.length&&QC(a,t);return{...e,version:2,origin:r,entries:t,updatedAt:i.now,rewrites:o?e.rewrites:(e.rewrites??0)+1,legacyKeys:n.legacyKeys}}function XC(e,t){return{key:e.key,version:2,workUnitId:e.workUnitId,workspaceId:e.workspaceId,folder:e.folder,origin:`agent-history`,entries:[],createdAt:t,updatedAt:t,legacyKeys:e.legacyKeys}}function ZC(e){let t=[];for(let n of e.entries)n.kind!==`tool-call`&&n.chat&&t.push(n.chat);return t}function QC(e,t){if(e.length>t.length)return!1;for(let n=0;n<e.length;n++)if(!$C(e[n],t[n]))return!1;return!0}function $C(e,t){return e.kind!==t.kind||e.seq!==t.seq?!1:e.kind===`tool-call`&&t.kind===`tool-call`?e.toolCallId===t.toolCallId&&e.name===t.name:(`text`in e?e.text:``)===(`text`in t?t.text:``)}function ew(e){return new Promise((t,n)=>{let r=indexedDB.open(e,1);r.onupgradeneeded=()=>{let e=r.result;e.objectStoreNames.contains(KC)||e.createObjectStore(KC,{keyPath:`key`}),e.objectStoreNames.contains(qC)||e.createObjectStore(qC,{keyPath:`id`})},r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error)})}function tw(e){return new Promise((t,n)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>n(e.error)})}function nw(e){return new Promise((t,n)=>{e.oncomplete=()=>t(),e.onerror=()=>n(e.error),e.onabort=()=>n(e.error)})}function rw(e){return e instanceof Error?e.message:String(e)}var iw=e({CONE_MEMORY_PATH:()=>sw,MEMORY_BASE_CHARS:()=>MEMORY_BASE_CHARS,MEMORY_OVERSHOOT_RATIO:()=>ow,MEMORY_PER_LOG_CHARS:()=>MEMORY_PER_LOG_CHARS,SESSIONS_INDEX_PATH:()=>cw,applyConeMemoryBudget:()=>pw,readSessionCount:()=>dw,restructureConeMemory:()=>fw,splitConeMemory:()=>uw});const aw=_(`cone-memory-budget`),ow=1.25,sw=cr.memoryPath,cw=`/sessions/index.json`,lw=/^## Auto-extracted/m;function uw(e){let t=lw.exec(e);if(!t)return{header:e,autoExtracted:``};let n=t.index;return{header:e.slice(0,n),autoExtracted:e.slice(n)}}async function dw(e){try{let t=await e.readFile(cw,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),r=JSON.parse(n);return Array.isArray(r)?r.length:0}catch{return 0}}async function fw(e){let{header:t,autoExtracted:n}=uw(e.currentContent);if(!n.trim())return e.currentContent;let r=`You are a memory consolidation assistant. You are given a markdown file's "auto-extracted" section — a list of memory bullets accumulated across sessions of an AI coding assistant. Your job is to rewrite that section as a tighter, deduplicated set of durable memories that fits well within ${e.budget} characters.
986
+ `;const Nx=_(`sudo:manager`);function Px(e){return e===`/etc/sudoers`||e===`/etc/sudoers.d`||e.startsWith(`/etc/sudoers.d/`)}function Fx(e){if(!e.startsWith(`/etc/sudoers.d/`))return null;let t=e.slice(Jr.length+1);return t.includes(`/`)?null:zr(t)}function Ix(e){return e.length>1&&e.endsWith(`/`)?e.slice(0,-1):e}const Lx=[`# Approved "Always" grants for one scoop. Loaded only for that scoop.`,`# Sandbox grants come from ScoopConfig, in memory — not here.`,`# Writes always require approval (self-protected).`,``].join(`
987
+ `);function Rx(e){let t=[],n=e?.allowedCommands;if(n===void 0||n.includes(`*`))t.push(`NOPASSWD Cmnd *`);else for(let e of n){let n=Wr(e);n&&(t.push(`NOPASSWD Cmnd ${n}`),t.push(`NOPASSWD Cmnd ${n} *`))}for(let n of e?.writablePaths??[]){let e=Wr(n);e&&(t.push(`NOPASSWD Write ${Ix(e)}`),t.push(`NOPASSWD Write ${Ix(e)}/**`))}for(let n of e?.visiblePaths??[]){let e=Wr(n);e&&(t.push(`NOPASSWD Read ${Ix(e)}`),t.push(`NOPASSWD Read ${Ix(e)}/**`))}return`${t.join(`
988
+ `)}\n`}var zx=class{fs;watcher;broker;onPolicyReload;policy=Vr();unwatch=null;reloadChain=Promise.resolve();scoopPolicies=new Map;scoopConfigPolicies=new Map;scoopReloadChains=new Map;constructor(e){this.fs=e.fs,this.watcher=e.watcher??null,this.broker=e.broker??p(e.capabilityBroker??null),this.onPolicyReload=e.onPolicyReload??(()=>{})}async init(){await this.ensureDefaults(),await this.reload(),this.startWatching()}getBroker(){return this.broker}async approve(e){if(e.kind===`export`&&Ur(this.policy,e.detail)===`nopasswd-allow`)return Nx.info(`Export pre-granted by sudoers`,{subject:e.detail}),{decision:`allow`};let t=await this.broker.requestApproval(e);if(t.decision===`always`){if(e.kind===`guest-message`||e.kind===`guest-tool`)return Nx.info(`Downgrading "Always" on a guest message to a one-shot allow`),{decision:`allow`,attestation:t.attestation};let n=t.pattern?.trim()||e.suggestedPattern?.trim()||e.detail;try{await this.persistGrant(Zr(e.kind),n)}catch(n){return Nx.warn(`Failed to persist "Always" grant; honouring as one-shot allow`,{kind:e.kind,error:n instanceof Error?n.message:String(n)}),{decision:`allow`,attestation:t.attestation}}}return t}getPolicy(){return this.policy}getPolicyForScoop(e){let t=this.scoopPolicies.get(e),n=this.scoopConfigPolicies.get(e),r=[Br(),this.policy];return n&&r.push(n),t&&r.push(t),qr(...r)}registerScoopConfig(e,t){this.scoopConfigPolicies.set(e,Gr(Rx(t??void 0))),this.onPolicyReload(e)}async initScoopPolicy(e,t){this.registerScoopConfig(e,t);let n=$r(e);if(await this.fs.exists(n).catch(()=>!1)){let{migrateLegacyScoopSudoers:t}=await import(`./migrate-scoop-sudoers-PBnz9AA3.js`);await t(e,{fs:this.fs})}await this.reloadScoopPolicy(e)}async appendScoopRule(e,t,n){let r=Wr(n);if(!r)return null;let i=t===`command`?`Cmnd`:t===`read`?`Read`:`Write`,a=ei(e);if(!a)return Nx.warn(`Unspellable scoop folder; not persisting`,{folder:e}),null;let o=await this.readTextOrEmpty(a),s=`NOPASSWD ${i} ${r}`;if(o.split(`
989
+ `).some(e=>e.trim()===s))return Nx.info(`Per-scoop grant already present; skipping duplicate append`,{folder:e,kind:t,pattern:r}),r;try{await this.fs.mkdir(Jr,{recursive:!0})}catch{}let c=o?o.endsWith(`
990
+ `)?o:`${o}\n`:Lx;return await this.fs.writeFile(a,`${c}${s}\n`),await this.reloadScoopPolicy(e),Nx.info(`Appended per-scoop grant`,{folder:e,path:a,kind:t,pattern:r}),r}async readTextOrEmpty(e){try{if(!await this.fs.exists(e))return``;let t=await this.fs.readFile(e,{encoding:`utf-8`});return typeof t==`string`?t:new TextDecoder().decode(t)}catch(e){if(e instanceof k&&e.code===`ENOENT`)return``;throw e}}getShellConfig(e={}){return{getPolicy:()=>this.policy,broker:this.broker,persistCommandGrant:e=>this.persistCommandGrant(e),transparentGating:e.transparentGating??!0}}reload(){return this.reloadChain=this.reloadChain.then(()=>this.doReload()),this.reloadChain}forgetScoopPolicies(e){this.scoopConfigPolicies.delete(e),this.scoopPolicies.delete(e),this.scoopReloadChains.delete(e),this.onPolicyReload(e)}reloadScoopPolicyByFolder(e){return this.reloadScoopPolicy(e)}dispose(){this.unwatch?.(),this.unwatch=null}reloadScoopPolicy(e){let t=(this.scoopReloadChains.get(e)??Promise.resolve()).then(()=>this.doReloadScoopPolicy(e));return this.scoopReloadChains.set(e,t),t}async doReloadScoopPolicy(e){let t=ei(e);if(!t){this.scoopPolicies.delete(e),this.onPolicyReload(e);return}try{if(!await this.fs.exists(t)){this.scoopPolicies.delete(e),this.onPolicyReload(e);return}}catch{this.scoopPolicies.delete(e),this.onPolicyReload(e);return}this.scoopPolicies.set(e,await this.readPolicyFile(t)),this.onPolicyReload(e)}async doReload(){let e=[await this.readPolicyFile(Xr)];try{let t=(await this.fs.readDir(Jr)).filter(e=>e.type===`file`).filter(e=>zr(e.name)===null).map(e=>e.name).sort();for(let n of t)e.push(await this.readPolicyFile(`${Jr}/${n}`))}catch{}this.policy=qr(...e),this.onPolicyReload()}async readPolicyFile(e){try{if(!await this.fs.exists(e))return Vr();let t=await this.fs.readFile(e,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t);return Gr(n)}catch(t){return Nx.warn(`Failed to read sudoers file; ignoring`,{path:e,error:t instanceof Error?t.message:String(t)}),Vr()}}async ensureDefaults(){try{await this.fs.mkdir(Jr,{recursive:!0})}catch{}await this.seedWhenAbsent(Xr,()=>Mx),await this.seedWhenAbsent(Qr,async()=>(await import(`./approver-agent-CivzfuZ7.js`)).DEFAULT_APPROVALS_MD)}async seedWhenAbsent(e,t){try{if(await this.fs.exists(e))return;await this.fs.writeFile(e,await t()),Nx.info(`Seeded bundled policy default`,{path:e})}catch(t){Nx.warn(`Failed to seed bundled policy default`,{path:e,error:t instanceof Error?t.message:String(t)})}}persistCommandGrant(e){return this.persistGrant(`Cmnd`,e)}async persistGrant(e,t){let n=Wr(t);if(!n)return;let r=``;try{if(await this.fs.exists(ri)){let e=await this.fs.readFile(ri,{encoding:`utf-8`});r=typeof e==`string`?e:new TextDecoder().decode(e)}}catch(e){if(!(e instanceof k&&e.code===`ENOENT`))throw e}try{await this.fs.mkdir(Jr,{recursive:!0})}catch{}let i=r&&!r.endsWith(`
991
+ `)?`${r}\n`:r,a=e===`Cmnd`?` `:` `;await this.fs.writeFile(ri,`${i}NOPASSWD ${e}${a}${n}\n`),await this.reload()}startWatching(){this.watcher&&(this.unwatch||=this.watcher.watch(`/etc`,Px,e=>{let t=new Set,n=!1,r=!1;for(let i of e){if(i.path===`/etc/sudoers.d`){r=!0;continue}let e=Fx(i.path);e?t.add(e):n=!0}if(r){this.reload();for(let e of[...this.scoopPolicies.keys()])this.reloadScoopPolicy(e);return}n&&this.reload();for(let e of t)this.reloadScoopPolicy(e)}))}};function Bx(e){return e.replace(/~/g,`~0`).replace(/\//g,`~1`)}function Vx(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Hx(e,t,n){if(typeof e==`string`){n.push({pointer:t,value:e});return}if(Array.isArray(e)){for(let r=0;r<e.length;r++)Hx(e[r],`${t}/${r}`,n);return}if(Vx(e))for(let[r,i]of Object.entries(e))Hx(i,`${t}/${Bx(r)}`,n)}function Ux(e,t,n){if(typeof e==`string`)return n.get(t)??e;if(Array.isArray(e)){let r=!1,i=[];for(let a=0;a<e.length;a++){let o=Ux(e[a],`${t}/${a}`,n);o!==e[a]&&(r=!0),i.push(o)}return r?i:e}if(Vx(e)){let r=!1,i={};for(let[a,o]of Object.entries(e)){let e=Ux(o,`${t}/${Bx(a)}`,n);e!==o&&(r=!0),i[a]=e}return r?i:e}return e}function Wx(e,t,n){if(Vx(e))return Ux(e,t,n);if(typeof e==`string`)return n.get(t)??e;if(Array.isArray(e)){let r=!1,i=[];for(let a=0;a<e.length;a++){let o=Wx(e[a],`${t}/${a}`,n);o!==e[a]&&(r=!0),i.push(o)}return r?i:e}return e}function Gx(e){let t=new Map;for(let n of e.matchAll(/⟦REDACTED:([^:⟧]+):([^⟧]+)⟧/g)){let e=n[0],r=t.get(e);r?r.count++:t.set(e,{category:n[1],id:n[2],count:1})}return t}async function Kx(e,t,n){let r=[],i=0;for(;i<e.length;){if(n?.aborted)throw new a(`redaction-unavailable`);let o=0,s=i;for(;s<e.length;){let t=e[s].length;if(s>i&&o+t>1048576)break;o+=t,s++}let c=e.slice(i,s),l;try{l=await t.redact(c,n)}catch{throw new a(`redaction-unavailable`)}if(l.length!==c.length)throw new a(`redaction-unavailable`);r.push(...l),i=s}return r}function qx(e,t,n,r){let i=[],a=Gx(e);for(let{category:e,id:t}of a.values())i.push({id:t,category:e,detector:`pre-obfuscated`,target:n});let o=Gx(t);for(let[e,{category:t,id:r,count:s}]of o)s>(a.get(e)?.count??0)&&i.push({id:r,category:t,detector:`known-secret`,target:n});let{text:s,matches:c,nextId:l}=xe(t,`r`,r);for(let{id:e,category:t}of c)i.push({id:e,category:t,detector:`credential-pattern`,target:n});return{finalText:s,redactions:i,nextId:l}}function Jx(e,t,n){for(let{redactions:r}of e)for(let e of r)t.push(e),n[e.category]=(n[e.category]??0)+1}async function Yx(e,t,n,r){if(r?.aborted)throw new a(`redaction-unavailable`);let{privacy:i,...o}=e,s=[];Hx(o,``,s);let c=s.filter(e=>!ne(e.pointer)),l=[...t.entries()],u=await Kx([...c.map(e=>e.value),...l.map(([,e])=>e)],n,r),d=[],f={},p=1,m=new Map,h=[];for(let e=0;e<c.length;e++){let t=c[e],n=qx(t.value,u[e],{kind:`json`,pointer:t.pointer},p);p=n.nextId,n.finalText!==t.value&&m.set(t.pointer,n.finalText),h.push(n)}Jx(h,d,f);let ee=new Map,g=c.length,te=[];for(let e=0;e<l.length;e++){let[t,n]=l[e],r=qx(n,u[g+e],{kind:`attachment`,attachmentId:t},p);p=r.nextId,ee.set(t,r.finalText),te.push(r)}Jx(te,d,f);let re=Wx(e,``,m);return{document:{...re,privacy:{...re.privacy,redactionCounts:f,redactions:d}},textAttachments:ee}}function Xx(e,t){let n=e.startsWith(`text/`)||e===`application/json`,r=/\.(?:txt|md|json|csv|xml|ya?ml|js|mjs|cjs|ts|tsx|css|html)$/i.test(t);return n||r?`text-redacted`:`binary-unchanged`}async function Zx(e){let t=e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength),n=await crypto.subtle.digest(`SHA-256`,t);return Array.from(new Uint8Array(n)).map(e=>e.toString(16).padStart(2,`0`)).join(``)}const Qx={"image/png":`.png`,"image/jpeg":`.jpg`,"image/gif":`.gif`,"image/webp":`.webp`,"image/svg+xml":`.svg`,"image/bmp":`.bmp`,"application/pdf":`.pdf`,"application/zip":`.zip`,"application/gzip":`.gz`,"application/json":`.json`,"text/plain":`.txt`,"text/markdown":`.md`,"text/csv":`.csv`,"text/html":`.html`,"text/xml":`.xml`,"application/xml":`.xml`};function $x(e,t){return Qx[e]??(t===`text-redacted`?`.txt`:`.bin`)}function eS(e,t,n){return`attachments/att-${String(e+1).padStart(4,`0`)}${$x(t,n)}`}function tS(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}function nS(e){let t=[];for(let n of e.conversations){let e=0;for(let r of n.messages){let i=r.role;if(i!==`user`&&i!==`assistant`&&i!==`tool-result`)continue;let a=0;for(let o of r.content)o.type===`attachment-ref`&&(t.push({attachmentId:o.attachmentId,conversationId:n.id,messageId:r.id,role:i,userOrdinal:e,imgIndex:a}),a++);i===`user`&&e++}}return t}async function rS(e,t,n,r,i){let a=Xx(e.mimeType,e.name),o={attachmentId:t,originalName:e.name,mimeType:e.mimeType,handling:a,present:!0,sourceConversationId:n,sourceMessageId:r};if(a===`text-redacted`){let t;if(e.text!==void 0)t=e.text;else if(e.data!==void 0)t=new TextDecoder().decode(tS(e.data));else if(e.path!==void 0&&i!==void 0)try{t=new TextDecoder().decode(await i(e.path))}catch{return{...o,present:!1,missingReason:`attachment-file-missing`}}return t===void 0?{...o,present:!1,missingReason:`attachment-file-missing`}:{...o,rawText:t}}let s;if(e.data!==void 0)s=tS(e.data);else if(e.path!==void 0&&i!==void 0)try{s=await i(e.path)}catch{return{...o,present:!1,missingReason:`attachment-file-missing`}}return s===void 0?{...o,present:!1,missingReason:`attachment-file-missing`}:{...o,rawBytes:s}}function iS(e,t,n,r){let i=[],a=new Set,o=new Set;for(let s of e){if(s.role!==`user`){let e=n.get(s.attachmentId);e===void 0?i.push(Promise.resolve({attachmentId:s.attachmentId,originalName:`unknown`,mimeType:`application/octet-stream`,handling:`binary-unchanged`,present:!1,missingReason:`attachment-file-missing`,sourceConversationId:s.conversationId,sourceMessageId:s.messageId})):i.push(Promise.resolve({attachmentId:s.attachmentId,originalName:`image-${s.imgIndex}`,mimeType:e.mimeType,handling:`binary-unchanged`,rawBytes:tS(e.data),present:!0,sourceConversationId:s.conversationId,sourceMessageId:s.messageId}));continue}let e=(t.get(s.conversationId)??[]).filter(e=>e.role===`user`)[s.userOrdinal];if(e===void 0){a.add(s.conversationId),i.push(Promise.resolve({attachmentId:s.attachmentId,originalName:`unknown`,mimeType:`application/octet-stream`,handling:`binary-unchanged`,present:!1,missingReason:`attachment-association-unavailable`,sourceConversationId:s.conversationId,sourceMessageId:s.messageId}));continue}let c=(e.attachments??[]).map((e,t)=>({a:e,i:t})).filter(({a:e})=>e.kind===`image`||e.kind===`file`&&e.data!==void 0)[s.imgIndex];if(c===void 0){i.push(Promise.resolve({attachmentId:s.attachmentId,originalName:`unknown`,mimeType:`application/octet-stream`,handling:`binary-unchanged`,present:!1,missingReason:`attachment-file-missing`,sourceConversationId:s.conversationId,sourceMessageId:s.messageId}));continue}o.add(`${s.conversationId}:${e.id}:${c.i}`),i.push(rS(c.a,s.attachmentId,s.conversationId,s.messageId,r))}return{pendingPromises:i,mismatchedConvIds:a,processedUiPositions:o}}function aS(e,t,n){return(e.attachments??[]).map((e,t)=>({a:e,i:t})).filter(({a:r,i})=>(r.kind===`text`||r.kind===`file`&&(r.data!==void 0||r.path!==void 0))&&!n.has(`${t}:${e.id}:${i}`))}function oS(e,t,n,r,i,a,o){let s=aS(t,n,i),c=[];for(let t=0;t<s.length;t++){let{a:i}=s[t],l=`${e.id}-file-${t}`;r.has(l)||(a.push(rS(i,l,n,e.id,o)),c.push({type:`attachment-ref`,attachmentId:l}))}return c}function sS(e,t,n,r,i){let a=new Map,o=[];for(let s of e.conversations){let e=(t.get(s.id)??[]).filter(e=>e.role===`user`),c=0;for(let t of s.messages){if(t.role!==`user`)continue;let l=e[c];if(c++,l===void 0)continue;let u=oS(t,l,s.id,n,r,o,i);u.length>0&&(a.has(s.id)||a.set(s.id,new Map),a.get(s.id).set(t.id,[...t.content,...u]))}}return{updates:a,additionalPendingPromises:o}}function cS(e,t){let n=new Map,r=0,i=new Map;for(let t of e)t.handling===`text-redacted`&&t.rawText!==void 0&&n.set(t.attachmentId,t.rawText),t.present&&i.set(t.attachmentId,eS(r++,t.mimeType,t.handling));for(let n of e)!n.present&&n.missingReason!==void 0&&t.add(n.missingReason);return{rawAttachments:e.map(e=>e.present?{id:e.attachmentId,path:i.get(e.attachmentId),originalName:e.originalName,mimeType:e.mimeType,byteLength:0,sha256:``,sourceConversationId:e.sourceConversationId,sourceMessageId:e.sourceMessageId,handling:e.handling,present:!0}:{id:e.attachmentId,path:``,originalName:e.originalName,mimeType:e.mimeType,byteLength:0,sha256:``,sourceConversationId:e.sourceConversationId,sourceMessageId:e.sourceMessageId,handling:e.handling,present:!1,missingReason:e.missingReason??`attachment-file-missing`}),textMap:n}}async function lS(e,t,n,r,i){let{rawAttachments:o,textMap:s}=cS(e,n),c,l;try{let e=await Yx({...t,attachments:o},s,r,i);c=e.document,l=e.textAttachments}catch(e){throw e instanceof a?e:new a(`attachment-unreadable`)}let u=new Map;for(let t of e){if(u.has(t.attachmentId))throw new a(`schema-invalid`);u.set(t.attachmentId,t)}let d=new Map,f=await Promise.all(c.attachments.map(async e=>{if(!e.present||!e.path)return e;let t=u.get(e.id);if(t===void 0)throw new a(`schema-invalid`);let n=t.handling===`text-redacted`?new TextEncoder().encode(l.get(t.attachmentId)??t.rawText??``):t.rawBytes,r=await Zx(n);return d.set(e.path,n),{...e,byteLength:n.length,sha256:r}}));return{redactedDocument:{...c,attachments:f},bundleFiles:d}}async function uS(e){let{document:t,chatMessagesByConversation:n,knownSecrets:r,signal:i}=e,a=e.canonicalImages??new Map,o=e.vfsReader,s=new Set,{pendingPromises:c,mismatchedConvIds:l,processedUiPositions:u}=iS(nS(t),n,a,o);l.size>0&&s.add(`attachment-association-unavailable`);for(let e of t.conversations)e.messages.filter(e=>e.role===`user`).length>(n.get(e.id)??[]).filter(e=>e.role===`user`).length&&s.add(`attachment-association-unavailable`);let d=await Promise.all(c),{updates:f,additionalPendingPromises:p}=sS(t,n,new Set(d.map(e=>e.attachmentId)),u,o),m=await Promise.all(p),h=[...d,...m],ee=t;f.size>0&&(ee={...t,conversations:t.conversations.map(e=>{let t=f.get(e.id);return t?{...e,messages:e.messages.map(e=>{let n=t.get(e.id);return n?{...e,content:n}:e})}:e})});let{redactedDocument:g,bundleFiles:te}=await lS(h,ee,s,r,i),ne=[...g.session.completeness.missing.filter(e=>!s.has(e)),...s];return{document:{...g,session:{...g.session,completeness:{status:ne.length>0?`partial`:g.session.completeness.status,missing:ne}}},bundleFiles:te}}function dS(e){return qn(e)}function fS(e,t){return e.map(e=>{let n=t.isProcessing(e.jid)?`1`:`0`,r=t.getAgentMessages(e.jid);if(r===null)return`${e.jid}:${n}:null`;let i=r.length,a=r[i-1],o=a?.role??``,s=a&&`timestamp`in a?a.timestamp:-1,c=a&&`toolCallId`in a?a.toolCallId:``;return`${e.jid}:${n}:${i}:${o}:${s}:${c}`}).join(`,`)}function pS(e,t,n,r){let i=new Map;for(let e of t)i.set(e.id,e);let a=new Map;for(let e of n)a.set(e.id,e);let o=[],s=new Map;for(let t of e){let e=r.getAgentMessages(t.jid)??i.get(t.jid)?.messages??[],n={id:t.jid,kind:Nn(t)?`cone`:`scoop`,name:t.name,...t.folder&&!Nn(t)?{folder:t.folder}:{},...t.parentJid?{parentConversationId:t.parentJid}:{},...t.originToolCallId?{originToolCallId:t.originToolCallId}:{},messages:e};o.push(n);let c=dS(t),l=a.get(c);l&&s.set(t.jid,l.messages)}return{sources:o,chatMessagesByConversation:s}}async function mS(e,t,n={}){let r=e=>n.rootJid===void 0?e:Fn(e,n.rootJid);for(;;){let n=r(e.listScoops());for(;n.some(t=>e.isProcessing(t.jid));)if(t?.aborted||(await e.wait(50,t),t?.aborted))throw new a(`transfer-aborted`);let i=fS(n,e),[o,s]=await Promise.all([e.loadPersistedSessions(),e.loadUiChatSessions()]);if(t?.aborted)throw new a(`transfer-aborted`);let c=r(e.listScoops());if(i===fS(c,e))return pS(c,o,s,e)}}var hS=e({SESSIONS_DIR:()=>gS,SESSIONS_INDEX_PATH:()=>_S,parseFrozenArchive:()=>yS,readSessionsIndex:()=>vS});const gS=`/sessions`,_S=`/sessions/index.json`;async function vS(e){try{let t=await e.readFile(_S,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),r=JSON.parse(n);return Array.isArray(r)?r:[]}catch{return[]}}function yS(e){let t=e,n=`Untitled`,r={},i=t.match(/^---\n([\s\S]*?)\n---\n+/);if(i){t=t.slice(i[0].length),Object.assign(r,bS(i[1]));let e=i[1].match(/^title:\s*(.+?)\s*$/m);e&&(n=xS(e[1]))}let a=t.match(/<!-- slicc:session-data\n([\s\S]*?)\n-->\n*/);if(a){try{let e=a[1].replace(/-- >/g,`-->`),t=JSON.parse(e);if(Array.isArray(t))return{title:n,messages:t,...r}}catch{}t=t.replace(/<!-- slicc:session-data\n[\s\S]*?\n-->\n*/,``)}return r.sidecar?{title:n,messages:[],...r}:(t=t.replace(/^#\s+[^\n]*\n+/,``),{title:n,messages:CS(t),...r})}function bS(e){let t={},n=SS(e,`cost`),r=SS(e,`models`);n&&(t.cost=n),r&&(t.models=r);let i=e.match(/^cone:\s*(.+?)\s*$/m)?.[1];i&&(t.cone=i);let a=e.match(/^coneLabel:\s*(.+?)\s*$/m)?.[1];a&&(t.coneLabel=xS(a)),/^memorySkipped:\s*true\s*$/m.test(e)&&(t.memorySkipped=!0),/^live:\s*true\s*$/m.test(e)&&(t.live=!0);let o=Number(e.match(/^liveThrough:\s*(\d+)\s*$/m)?.[1]);Number.isFinite(o)&&o>0&&(t.liveThrough=o);let s=Number(e.match(/^compactions:\s*(\d+)\s*$/m)?.[1]);Number.isFinite(s)&&s>0&&(t.compactions=s);let c=Number(e.match(/^curatedThrough:\s*(\d+)\s*$/m)?.[1]);Number.isFinite(c)&&c>0&&(t.curatedThrough=c);let l=e.match(/^id:\s*(\S+)\s*$/m)?.[1];l&&(t.id=l);let u=e.match(/^sidecar:\s*(\S+)\s*$/m)?.[1];return u&&(t.sidecar=u),t}function xS(e){let t=e.trim();if(!t.startsWith(`"`))return t;try{let e=JSON.parse(t);if(typeof e==`string`)return e}catch{}return t.replace(/^"|"$/g,``)}function SS(e,t){let n=RegExp(`^${t}:\\s*(.+?)\\s*$`,`m`).exec(e)?.[1];if(n)try{return JSON.parse(n)}catch{return}}function CS(e){let t=[],n=/^## (User|Assistant)\s*\n/gm,r=[],i;for(;(i=n.exec(e))!==null;)r.push({role:i[1]===`User`?`user`:`assistant`,start:i.index,bodyStart:i.index+i[0].length});for(let n=0;n<r.length;n++){let i=n+1<r.length?r[n+1].start:e.length,a=e.slice(r[n].bodyStart,i).trim();t.push({id:`frozen-${n}`,role:r[n].role,content:a,timestamp:0})}return t}function wS(e,t){return`${e}-msg-${t.toString().padStart(6,`0`)}`}function TS(e,t){return{type:`attachment-ref`,attachmentId:`${e}-img-${t}`}}function ES(e,t){if(typeof e==`string`)return e?[{type:`text`,text:e}]:[];let n=[],r=0;for(let i of e)i.type===`text`?i.text&&n.push({type:`text`,text:i.text}):i.type===`image`&&n.push(TS(t,r++));return n}function DS(e,t){let n=[],r=new Map,i=0,a=0;for(let o of e)if(o.type===`thinking`)i+=1;else if(o.type===`text`)o.text&&n.push({type:`text`,text:o.text});else if(o.type===`toolCall`)n.push({type:`tool-call`,id:o.id??``,name:o.name??``,input:o.arguments??{}});else if(o.type===`image`){let e=TS(t,a++);n.push(e),o.data&&o.mimeType&&r.set(e.attachmentId,{data:o.data,mimeType:o.mimeType})}return{blocks:n,excluded:i,images:r}}function OS(e,t){let n=[],r=new Map,i=0;for(let a of e)if(a.type===`text`)a.text&&n.push({type:`text`,text:a.text});else if(a.type===`image`){let e=TS(t,i++);n.push(e),a.data&&a.mimeType&&r.set(e.attachmentId,{data:a.data,mimeType:a.mimeType})}return{blocks:n,images:r}}function kS(e,t,n){let r=wS(t,n),i=ES(e.content,r);return{message:{id:r,sequence:n,role:`user`,timestamp:new Date(e.timestamp).toISOString(),content:i},excludedReasoningBlocks:0,images:new Map}}function AS(e,t,n){let r=wS(t,n),{blocks:i,excluded:a,images:o}=DS(e.content,r);return{message:{id:r,sequence:n,role:`assistant`,timestamp:new Date(e.timestamp).toISOString(),content:i,model:{provider:e.provider,id:e.model,api:e.api},usage:e.usage,stopReason:e.stopReason,...e.errorMessage?{error:e.errorMessage}:{}},excludedReasoningBlocks:a,images:o}}function jS(e,t,n){let r=wS(t,n),{blocks:i,images:a}=OS(e.content,r);return{message:{id:r,sequence:n,role:`tool-result`,timestamp:new Date(e.timestamp).toISOString(),content:i,toolCallId:e.toolCallId,isError:e.isError},excludedReasoningBlocks:0,images:a}}function MS(e,t,n){return e.role===`user`?kS(e,t,n):e.role===`assistant`?AS(e,t,n):e.role===`toolResult`?jS(e,t,n):{message:null,excludedReasoningBlocks:0,images:new Map}}function NS(e){let t=[];for(let n of e){if(!n.parentConversationId)continue;let e={sourceConversationId:n.parentConversationId,targetConversationId:n.id};n.originToolCallId&&(e.toolCallId=n.originToolCallId),t.push(e)}return t}function PS(e){let t=0,n=new Map;return{conversations:e.map(e=>{let r=e.messages.flatMap((r,i)=>{let a=MS(r,e.id,i+1);t+=a.excludedReasoningBlocks;for(let[e,t]of a.images)n.set(e,t);return a.message?[a.message]:[]});return{id:e.id,kind:e.kind,name:e.name,...e.folder?{folder:e.folder}:{},...e.parentConversationId?{parentConversationId:e.parentConversationId}:{},...e.createdAt?{createdAt:e.createdAt}:{},...e.updatedAt?{updatedAt:e.updatedAt}:{},messages:r}}),delegations:NS(e),excludedReasoningBlocks:t,canonicalImages:n}}const FS=(()=>{let e=new Uint32Array(256);for(let t=0;t<256;t++){let n=t;for(let e=0;e<8;e++)n=n&1?3988292384^n>>>1:n>>>1;e[t]=n}return e})();function IS(e){let t=-1>>>0;for(let n=0;n<e.length;n++)t=t>>>8^FS[(t^e[n])&255];return~t>>>0}const LS=new TextEncoder;function K(e,t,n){e[t]=n&255,e[t+1]=n>>>8&255}function RS(e,t,n){e[t]=n&255,e[t+1]=n>>>8&255,e[t+2]=n>>>16&255,e[t+3]=n>>>24&255}function zS(e,t,n){let r=new Uint8Array(30+e.length);return r[0]=80,r[1]=75,r[2]=3,r[3]=4,K(r,4,20),K(r,6,2048),K(r,8,0),K(r,10,0),K(r,12,0),RS(r,14,n),RS(r,18,t),RS(r,22,t),K(r,26,e.length),K(r,28,0),r.set(e,30),r}function BS(e,t,n,r){let i=new Uint8Array(46+e.length);return i[0]=80,i[1]=75,i[2]=1,i[3]=2,K(i,4,20),K(i,6,20),K(i,8,2048),K(i,10,0),K(i,12,0),K(i,14,0),RS(i,16,n),RS(i,20,t),RS(i,24,t),K(i,28,e.length),K(i,30,0),K(i,32,0),K(i,34,0),K(i,36,0),RS(i,38,0),RS(i,42,r),i.set(e,46),i}function VS(e,t,n){let r=new Uint8Array(22);return r[0]=80,r[1]=75,r[2]=5,r[3]=6,K(r,4,0),K(r,6,0),K(r,8,e),K(r,10,e),RS(r,12,t),RS(r,16,n),K(r,20,0),r}function HS(e){if(!e||e.startsWith(`/`)||e.includes(`\0`)||e.includes(`\\`))return!1;for(let t of e.split(`/`))if(t===``||t===`.`||t===`..`)return!1;return!0}function US(e){let t=e.export.generatedAt.slice(0,10),n=e.export.id.slice(0,8);return`slicc-${t}-${be(e.session.title,{maxLen:40,fallback:`transcript`})}-${n}.zip`}async function*WS(e,t,n,r,i){if(n?.aborted)throw i(new a(`transfer-aborted`)),new a(`transfer-aborted`);let o=()=>i(new a(`transfer-aborted`));n?.addEventListener(`abort`,o,{once:!0});let s=ai.create(),c=0,l=0,u=[],d=!1;function*f(e){s.update(e),c+=e.byteLength,l+=e.byteLength,yield e}try{let i=new TextEncoder().encode(JSON.stringify(e,null,2)),o=LS.encode(`transcript.json`),p=IS(i),m=zS(o,i.length,p);if(u.push({nameBytes:o,size:i.length,crc:p,localOffset:l}),n?.aborted||(yield*f(m),n?.aborted))throw new a(`transfer-aborted`);yield*f(i);for(let[e,r]of t){if(n?.aborted)throw new a(`transfer-aborted`);let t=LS.encode(e),i=IS(r),o=zS(t,r.length,i);if(u.push({nameBytes:t,size:r.length,crc:i,localOffset:l}),yield*f(o),n?.aborted)throw new a(`transfer-aborted`);yield*f(r)}let h=l;for(let e of u){if(n?.aborted)throw new a(`transfer-aborted`);yield*f(BS(e.nameBytes,e.size,e.crc,e.localOffset))}if(n?.aborted)throw new a(`transfer-aborted`);yield*f(VS(u.length,l-h,h)),d=!0,r({byteLength:c,sha256:s.hex()})}catch(e){throw d=!0,i(e),e}finally{n?.removeEventListener(`abort`,o),d||(d=!0,i(new a(`transfer-aborted`)))}}function GS(e,t,n){for(let e of t.keys())if(!HS(e))throw new a(`schema-invalid`);if(t.size+1>65535)throw new a(`schema-invalid`);for(let e of t.values())if(e.byteLength>4294967295)throw new a(`schema-invalid`);let r,i,o=new Promise((e,t)=>{r=e,i=t});return{filename:US(e),chunks:WS(e,t,n,r,i),completion:o}}function KS(e,t,n,r,i,a={}){return{schemaVersion:1,export:{id:crypto.randomUUID(),generatedAt:new Date().toISOString(),producer:{application:`slicc`,version:i},format:re},session:{id:e,title:t,state:n,completeness:{status:`complete`,missing:[]},...a},privacy:{reasoningExcluded:!0,excludedReasoningBlocks:r.excludedReasoningBlocks,binaryAttachments:`included-unchanged`,redactionCounts:{},redactions:[]},conversations:r.conversations,delegations:r.delegations,attachments:[]}}function qS(e,t){let n=[],r=1;for(let i of e){if(i.role!==`user`&&i.role!==`assistant`)continue;let e=`${t}-msg-${String(r).padStart(6,`0`)}`;n.push({id:e,sequence:r++,role:i.role,timestamp:new Date(i.timestamp||0).toISOString(),content:i.content?[{type:`text`,text:i.content}]:[]})}return n}function JS(e){let t=n(e);if(!t.ok)throw new a(`schema-invalid`,t.error)}function YS(e,t,n){let r=new Map;for(let i of e)if(!(!i.present||!i.path)){if(i.handling===`text-redacted`){let e=t.get(i.id);e!==void 0&&r.set(i.path,new TextEncoder().encode(e))}else{let e=n.get(i.path);e&&r.set(i.path,e)}}return r}async function XS(e,t){return Promise.all(e.map(async e=>{if(!e.present||!e.path||e.handling!==`text-redacted`)return e;let n=t.get(e.path);if(!n)return e;let r=n.buffer.slice(n.byteOffset,n.byteOffset+n.byteLength),i=await crypto.subtle.digest(`SHA-256`,r),a=Array.from(new Uint8Array(i)).map(e=>e.toString(16).padStart(2,`0`)).join(``);return{...e,byteLength:n.length,sha256:a}}))}function ZS(e){let t=e.match(/^---\n([\s\S]*?)\n---\n/);if(!t)return{};let n=t[1],r={},i=n.match(/^createdAt:\s*(\d+)\s*$/m),a=n.match(/^updatedAt:\s*(\d+)\s*$/m);return i&&(r.createdAt=new Date(Number(i[1])).toISOString()),a&&(r.updatedAt=new Date(Number(a[1])).toISOString()),r}var QS=class{deps;constructor(e){this.deps=e}async export(e,t={}){let{signal:n,onProgress:r}=t,i;return i=e.kind===`active`?await this.buildActiveSnapshot(n,r):await this.buildFrozenSnapshot(e.sessionId,n,r),JS(i.document),r?.({phase:`packaging`}),GS(i.document,i.bundleFiles,n)}async captureFrozen(e,t){let n=await mS(this.deps.collection,t,{...e.rootJid?{rootJid:e.rootJid}:{}});if(e.rootJid&&n.sources.length===0)return;let r=PS(n.sources),{document:i,bundleFiles:a}=await uS({document:KS(e.sessionId,e.title,`frozen`,r,this.deps.version,{frozenAt:e.frozenAt,createdAt:new Date(e.createdAt).toISOString(),updatedAt:new Date(e.updatedAt).toISOString()}),chatMessagesByConversation:n.chatMessagesByConversation,knownSecrets:this.deps.knownSecrets,canonicalImages:r.canonicalImages,vfsReader:e=>this.readBinaryFromVfs(e),signal:t});JS(i),await this.deps.snapshotStore.write(e.sessionId,{document:i,attachments:a})}async buildActiveSnapshot(e,t){t?.({phase:`waiting-for-conversations`}),t?.({phase:`collecting`});let n=await mS(this.deps.collection,e),r=PS(n.sources),{id:i,title:a}=this.deps.getActiveSessionInfo(),o=KS(i,a,`active`,r,this.deps.version);return t?.({phase:`redacting`}),uS({document:o,chatMessagesByConversation:n.chatMessagesByConversation,knownSecrets:this.deps.knownSecrets,canonicalImages:r.canonicalImages,vfsReader:e=>this.readBinaryFromVfs(e),signal:e})}async buildFrozenSnapshot(e,t,n){let r=await this.deps.snapshotStore.read(e);return r?(n?.({phase:`redacting`}),this.reredactStoredSnapshot(r,t)):this.buildLegacyPartial(e,t,n)}async reredactStoredSnapshot(e,t){let n=new Map;for(let t of e.document.attachments){if(t.handling!==`text-redacted`||!t.present||!t.path)continue;let r=e.attachments.get(t.path);r&&n.set(t.id,new TextDecoder().decode(r))}let r,i;try{let a=await Yx(e.document,n,this.deps.knownSecrets,t);r=a.document,i=a.textAttachments}catch{throw new a(`redaction-unavailable`)}let o=YS(r.attachments,i,e.attachments),s=await XS(r.attachments,o);return{document:{...r,attachments:s},bundleFiles:o}}async buildLegacyPartial(e,t,n){let r=(await vS(this.deps.vfs)).find(t=>t.sessionId===e||!t.sessionId&&t.filename===e);if(!r)throw new a(`session-not-found`);let i;try{let e=await this.deps.vfs.readFile(`/sessions/${r.filename}`,{encoding:`utf-8`});i=typeof e==`string`?e:new TextDecoder().decode(e)}catch{throw new a(`session-not-found`)}let{loadFrozenArchive:o}=await import(`./session-jsonl-C5QAPMRG.js`),{title:s,messages:c}=await o(this.deps.vfs,i,r.filename),l=`legacy-cone`,u=qS(c,l),d=ZS(i),f={schemaVersion:1,export:{id:crypto.randomUUID(),generatedAt:new Date().toISOString(),producer:{application:`slicc`,version:this.deps.version},format:re},session:{id:e,title:s,state:`frozen`,...r.frozenAt?{frozenAt:r.frozenAt}:{},...d,completeness:{status:`partial`,missing:[`complete-snapshot-unavailable`,`canonical-agent-history-unavailable`]}},privacy:{reasoningExcluded:!0,excludedReasoningBlocks:0,binaryAttachments:`included-unchanged`,redactionCounts:{},redactions:[]},conversations:[{id:l,kind:`cone`,name:s,messages:u}],delegations:[],attachments:[]},p=new Map([[l,c]]);return n?.({phase:`redacting`}),uS({document:f,chatMessagesByConversation:p,knownSecrets:this.deps.knownSecrets,vfsReader:e=>this.readBinaryFromVfs(e),signal:t})}async readBinaryFromVfs(e){let t=await this.deps.vfs.readFile(e,{encoding:`binary`});if(!(t instanceof Uint8Array))throw new a(`attachment-unreadable`);return t}};const $S=`/sessions/data`,eC=`document.json`;async function tC(e){let t=e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength),n=await crypto.subtle.digest(`SHA-256`,t);return Array.from(new Uint8Array(n)).map(e=>e.toString(16).padStart(2,`0`)).join(``)}function nC(e){if(e.length===0||/[/\\\x00]/.test(e)||e===`..`||e===`.`||e.includes(`..`)||!/^[a-zA-Z0-9._-]+$/.test(e))throw new a(`session-not-found`)}function rC(e){return`${$S}/${e}`}function iC(e){return`${$S}/.tmp-${e}`}async function aC(e,t){try{await e.mkdir(t,{recursive:!0})}catch{}}async function oC(e,t){let n;try{n=await e.readDir(t)}catch{return}for(let r of n){let n=`${t}/${r.name}`;r.type===`directory`&&await oC(e,n);try{await e.rm(n)}catch{}}try{await e.rm(t)}catch{}}async function sC(e,t,n){await aC(e,n);let r=await e.readDir(t);for(let i of r){let r=`${t}/${i.name}`,a=`${n}/${i.name}`;if(i.type===`directory`)await sC(e,r,a);else{let t=await e.readFile(r,{encoding:`binary`});await e.writeFile(a,t)}}}async function cC(e,t,n){nC(t);let r=iC(t),i=rC(t),o=new Map(n.document.attachments.filter(e=>e.present&&e.path).map(e=>[e.path,e]));for(let[e]of n.attachments)if(!o.has(e))throw new a(`schema-invalid`);await oC(e,i),await aC(e,r);try{let t=[...n.document.attachments];for(let[e,r]of n.attachments){let n=await tC(r),i=o.get(e);if(i!==void 0){let e=t.indexOf(i);e!==-1&&(t[e]={...i,sha256:n,byteLength:r.length})}}let a={...n.document,attachments:t},s=JSON.stringify(a,null,2);if(await e.writeFile(`${r}/${eC}`,s),n.attachments.size>0)for(let[t,i]of n.attachments){let n=`${r}/${t}`,a=t.lastIndexOf(`/`);a!==-1&&await aC(e,`${r}/${t.slice(0,a)}`),await e.writeFile(n,i)}await e.flush(),await sC(e,r,i),await e.flush()}catch(t){throw await oC(e,r),t}await oC(e,r)}async function lC(e,t){nC(t);let r=rC(t),i=`${r}/${eC}`,o;try{let t=await e.readFile(i,{encoding:`utf-8`});o=typeof t==`string`?t:new TextDecoder().decode(t)}catch{throw new a(`session-not-found`)}let s;try{s=JSON.parse(o)}catch{throw new a(`schema-invalid`)}if(!n(s).ok)throw new a(`schema-invalid`);let c=new Map;for(let t of s.attachments){if(!t.present||!t.path)continue;let n=`${r}/${t.path}`,i;try{let t=await e.readFile(n,{encoding:`binary`});i=t instanceof Uint8Array?t:new TextEncoder().encode(t)}catch{throw new a(`transfer-corrupt`)}if(await tC(i)!==t.sha256)throw new a(`transfer-corrupt`);c.set(t.path,i)}return{document:s,attachments:c}}function uC(e){return`error`in e}function dC(){throw new a(`redaction-unavailable`)}function fC(e,t){return(typeof e!=`object`||!e||!Array.isArray(e.texts)||e.texts.length!==t)&&dC(),e.texts}function pC(){return{async redact(e){let t;try{t=await fetch(Re(`/api/secrets/redact-export`),{method:`POST`,headers:ze({"content-type":`application/json`}),body:JSON.stringify({texts:e})})}catch{dC()}t.ok||dC();let n;try{n=await t.json()}catch{dC()}return fC(n,e.length)}}}function mC(){return{async redact(e){let t;try{t=await new Promise(t=>{chrome.runtime.sendMessage({type:`secrets.redact-export`,texts:e},e=>{chrome.runtime.lastError,t(e??null)})})}catch{dC()}return typeof t==`object`&&t&&uC(t)&&dC(),fC(t,e.length)}}}function hC(){return{async redact(e){let t;try{t=await yn(`secrets.redact-export`,{texts:e})}catch{dC()}return t??dC(),typeof t==`object`&&t&&uC(t)&&dC(),fC(t,e.length)}}}function gC(){return{async redact(e){dC()}}}function _C(){let e=fn();return e===`connect`?gC():e===`extension-direct`?mC():e===`extension-delegate`?hC():pC()}const vC=new Set([`scoop-notify`,`scoop-idle`,`scoop-wait`]);function yC(e){return`e${e}`}function bC(e){let t=[];for(let n of e){let e=CC(n),r=TC(n);if(e===`assistant`){let e=t.length,i=yC(e);t.push({id:i,seq:e,kind:`assistant`,timestamp:r,text:OC(n),message:n,model:DC(n)});for(let e of kC(n)){let n=t.length;t.push({id:yC(n),seq:n,kind:`tool-call`,timestamp:r,toolCallId:e.id,name:e.name,assistantEntryId:i})}continue}if(e===`toolResult`){let e=n,i=t.length;t.push({id:yC(i),seq:i,kind:`tool-result`,timestamp:r,text:OC(n),message:n,toolCallId:e.toolCallId??``,isError:e.isError});continue}let i=OC(n),a=e===`user`?SC(i):null,o=t.length,s=yC(o);a===null?t.push({id:s,seq:o,kind:`user`,timestamp:r,text:i,message:n}):vC.has(a)?t.push({id:s,seq:o,kind:`child-result`,timestamp:r,text:i,message:n,channel:a}):t.push({id:s,seq:o,kind:`external-event`,timestamp:r,text:i,message:n,channel:a})}return t}function xC(e){let t=[];for(let n of e){let e=t.length,r=yC(e),i=EC(n),a=typeof n.content==`string`?n.content:``;if(n.role===`assistant`){t.push({id:r,seq:e,kind:`assistant`,timestamp:i,text:a,chat:n,model:n.model});for(let e of n.toolCalls??[]){let n=t.length;t.push({id:yC(n),seq:n,kind:`tool-call`,timestamp:i,toolCallId:e.id,name:e.name,assistantEntryId:r})}continue}let o=n.source===`lick`&&n.channel&&J_(n.channel)?n.channel:SC(a);o===null?t.push({id:r,seq:e,kind:`user`,timestamp:i,text:a,chat:n}):vC.has(o)?t.push({id:r,seq:e,kind:`child-result`,timestamp:i,text:a,chat:n,channel:o}):t.push({id:r,seq:e,kind:`external-event`,timestamp:i,text:a,chat:n,channel:o})}return t}function SC(e){for(let t of gv(e)){let e=(t.sender?_v(t.sender):null)??vv(t.body);if(e)return e}return null}function CC(e){return e.role??``}function wC(e){if(typeof e==`number`)return e;if(typeof e==`string`){let t=Date.parse(e);return Number.isNaN(t)?0:t}return e instanceof Date?e.getTime():0}function TC(e){return wC(e.timestamp)}function EC(e){return wC(e.timestamp)}function DC(e){let t=e.model;return typeof t==`string`?t:void 0}function OC(e){let t=e.content;if(typeof t==`string`)return t;if(!Array.isArray(t))return``;let n=[];for(let e of t)e?.type===`text`&&n.push(e.text);return n.join(``)}function kC(e){let t=e.content;if(!Array.isArray(t))return[];let n=[];for(let e of t){if(e?.type!==`toolCall`)continue;let t=e;n.push({id:t.id??``,name:t.name??``})}return n}function AC(e){let t=e.markers?.some(e=>e.kind===`error`)??!1,n=(e.projectionPrefix?.length??0)>0;return t||n?2:1}function jC(e){return e!==null&&e.version<=2}const MC=_(`work-unit-conversation`);var NC=class extends Error{};const PC=`conversations`;async function FC(e){let t=e.now??(()=>Date.now()),n=await LC(e.store,t()),r={migrated:0,alreadyDone:0,empty:0,skipped:0};if(n.done)return r.alreadyDone=e.units.length,r;let i=new Set(n.completedKeys),a=!1;for(let o of e.units){let s={...o,parentJid:o.parentJid??null},c=kr(s);if(i.has(c)){r.alreadyDone++;continue}try{let n=await IC(e,s,c,t());n===`migrated`?r.migrated++:n===`already`?r.alreadyDone++:r.empty++}catch(i){let o=i instanceof Error?i.message:String(i);if(r.skipped++,n.skipped=[...n.skipped.filter(e=>e.key!==c),{key:c,reason:o}],MC.warn(`Skipping a unit whose conversation could not be migrated`,{key:c,folder:s.folder,error:o}),i instanceof NC){a=!0,n.updatedAt=t(),await e.store.putMigrationState(n),e.onProgress?.(`conversation-migrated:${s.jid}`);continue}}i.add(c),n.completedKeys=[...i],n.updatedAt=t(),await e.store.putMigrationState(n),e.onProgress?.(`conversation-migrated:${s.jid}`)}return n.done=!a,n.updatedAt=t(),await e.store.putMigrationState(n),MC.info(`Canonical conversation migration complete`,{...r}),r}async function IC(e,t,n,r){let i=await e.store.read(n);if(i.status===`ok`)return`already`;if(i.status===`incompatible`)return MC.info(`Leaving a newer-schema conversation record untouched`,{key:n,version:i.version}),`already`;if(i.status===`error`)throw new NC(`canonical record unreadable: ${i.reason}`);let a=Ar(t),o=await e.loadAgentSession(t.jid);if(o&&!Array.isArray(o.messages))throw Error(`agent-sessions record has no message list`);if(o&&o.messages.length>0){let t={...a,version:2,origin:`agent-history`,entries:bC(o.messages),createdAt:o.createdAt??r,updatedAt:r,migratedFrom:`agent-sessions`};return await e.store.save(t),`migrated`}let s=await e.loadChatSession(a.legacyKeys.chatSessionId);if(s&&!Array.isArray(s.messages))throw Error(`browser-coding-agent record has no message list`);if(s&&s.messages.length>0){let t={...a,version:2,origin:`ui-projection`,entries:xC(s.messages),createdAt:s.createdAt??r,updatedAt:r,migratedFrom:`browser-coding-agent`};return await e.store.save(t),`migrated`}return`empty`}async function LC(e,t){let n=await e.getMigrationState(PC);return n&&n.version===1?{...n,completedKeys:Array.isArray(n.completedKeys)?n.completedKeys:[],skipped:Array.isArray(n.skipped)?n.skipped:[]}:{id:PC,version:1,completedKeys:[],skipped:[],done:!1,startedAt:t,updatedAt:t}}var RC=e({applyAttachmentOverlays:()=>HC,interleaveMarkers:()=>UC,toAgentMessages:()=>BC,toChatMessages:()=>VC});const zC=new Set([`summarized`,`fallback`]);function BC(e){if(!jC(e)||e===null||e.origin!==`agent-history`)return[];let t=[];for(let n of e.entries)n.kind!==`tool-call`&&n.message&&t.push(n.message);return t}async function VC(e,t={}){if(!jC(e)||e===null)return[];if(e.origin===`ui-projection`){let t=[];for(let n of e.entries)n.kind!==`tool-call`&&n.chat&&t.push(n.chat);return UC(t,e.markers)}let n=e.projectionPrefix??[],r=BC(e);if(r.length===0)return UC([...n],e.markers);let{agentMessagesToChatMessages:i}=await Promise.resolve().then(()=>nv),a=HC(i(r,t),e.attachments);return UC([...n,...a],e.markers)}function HC(e,t){if(!t?.length)return e;let n=[...t].sort((e,t)=>e.timestamp-t.timestamp),r=new Set;return e.map(e=>{if(e.role!==`user`||e.attachments?.length)return e;let t=e.content.trim(),i=n.findIndex((e,n)=>!r.has(n)&&e.body.trim()===t);return i<0?e:(r.add(i),{...e,attachments:n[i].attachments})})}function UC(e,t){let n=(t??[]).filter(e=>e.kind!==`compaction`||zC.has(e.compaction.state));if(n.length===0)return e;let r=[...n].sort((e,t)=>e.timestamp-t.timestamp),i=[],a=0;for(let t of e){let e=WC(t);for(;a<r.length&&r[a].timestamp<=e;)i.push(GC(r[a++]));i.push(t)}for(;a<r.length;)i.push(GC(r[a++]));return i}function WC(e){let t=e.timestamp;if(typeof t==`number`&&Number.isFinite(t))return t;if(typeof t==`string`){let e=Date.parse(t);if(!Number.isNaN(e))return e}return-1/0}function GC(e){return e.kind===`error`?{id:e.id,role:`assistant`,content:e.text,timestamp:e.timestamp,error:!0}:{id:e.id,role:`assistant`,content:``,timestamp:e.timestamp,compaction:e.compaction}}async function KC(e){return{id:e.legacyKeys.chatSessionId,messages:await VC(e),createdAt:e.createdAt,updatedAt:e.updatedAt}}function qC(e){return{id:e.workUnitId,messages:BC(e),config:{},createdAt:e.createdAt,updatedAt:e.updatedAt}}var JC=class{store;constructor(e){this.store=e}async loadAgentSessions(){return(await this.latestPerUnit()).map(qC)}async loadChatSessions(){return Promise.all((await this.latestPerUnit()).map(KC))}async latestPerUnit(){let e=new Map;for(let t of await this.store.loadAll()){let n=e.get(t.workUnitId);(!n||t.updatedAt>n.updatedAt)&&e.set(t.workUnitId,t)}return[...e.values()]}async loadRootChatSession(e){let t=await this.store.loadLatestInWorkspace(fr({parentJid:null,folder:e}).root);return t?KC(t):null}async load(e){return e.startsWith(`session-`)?this.loadRootChatSession(e.slice(8)):null}};const YC=_(`work-unit-conversation`),XC=`conversations`,ZC=`migrations`;var QC=class{dbPromise=null;dbName;writeChains=new Map;constructor(e={}){this.dbName=e.dbName??`slicc-work-units`}async load(e){let t=await this.read(e);return t.status===`ok`?t.record:null}async read(e){try{let t=await aw((await this.getDb()).transaction(XC,`readonly`).objectStore(XC).get(e));return t?jC(t)?Array.isArray(t.entries)?{status:`ok`,record:t}:(YC.warn(`Conversation record has no entry list`,{key:e}),{status:`malformed`,reason:`entries is not a list`}):(YC.warn(`Ignoring conversation record from a newer schema`,{key:e,version:t.version}),{status:`incompatible`,version:t.version}):{status:`absent`}}catch(t){return YC.warn(`Conversation record read failed`,{key:e,error:sw(t)}),{status:`error`,reason:sw(t)}}}async save(e){let t=e.version>2?e.version:AC(e),n={...e,version:t},r=(await this.getDb()).transaction(XC,`readwrite`);return r.objectStore(XC).put(n),await ow(r),n}delete(e){return this.serialize(e,async()=>{try{let t=(await this.getDb()).transaction(XC,`readwrite`);t.objectStore(XC).delete(e),await ow(t)}catch(t){YC.warn(`Conversation record delete failed`,{key:e,error:sw(t)})}})}async rekey(e,t){if(e!==t.key)try{let n=await this.read(e);if(n.status!==`ok`)return;let r=await this.read(t.key);if(r.status===`incompatible`||r.status===`error`){YC.warn(`Conversation rekey refused: target is not writable`,{fromKey:e,toKey:t.key,status:r.status});return}let i=Date.now();await this.save({...n.record,key:t.key,workUnitId:t.workUnitId,workspaceId:t.workspaceId,folder:t.folder,legacyKeys:t.legacyKeys,updatedAt:i}),await this.delete(e)}catch(n){YC.warn(`Conversation rekey failed`,{fromKey:e,toKey:t.key,error:sw(n)})}}async loadAll(){try{return(await aw((await this.getDb()).transaction(XC,`readonly`).objectStore(XC).getAll())).filter(e=>jC(e)&&Array.isArray(e.entries))}catch(e){return YC.warn(`Conversation record listing failed`,{error:sw(e)}),[]}}async loadLatestInWorkspace(e){try{let t=`${e}::`,n=await aw((await this.getDb()).transaction(XC,`readonly`).objectStore(XC).getAll(IDBKeyRange.bound(t,`${t}\uffff`))),r=null;for(let e of n)!jC(e)||!Array.isArray(e.entries)||(!r||e.updatedAt>r.updatedAt)&&(r=e);return r}catch(t){return YC.warn(`Conversation workspace lookup failed`,{workspaceId:e,error:sw(t)}),null}}async listKeys(){try{return(await aw((await this.getDb()).transaction(XC,`readonly`).objectStore(XC).getAllKeys())).map(String)}catch(e){return YC.warn(`Conversation key listing failed`,{error:sw(e)}),[]}}async syncAgentMessages(e,t,n={}){let r=n.now??Date.now(),i=bC(t);return this.serialize(e.key,()=>this.ingestEntries(e,i,n,r))}async ingestEntries(e,t,n,r){try{let i=await this.read(e.key);if(i.status===`incompatible`||i.status===`error`)return null;let a=i.status===`ok`?i.record:null,o=$C(a,t,e,`agent-history`,{createdAt:n.createdAt??r,now:r});return o?await this.save(o):a}catch(t){return YC.warn(`Conversation record write failed`,{key:e.key,error:sw(t)}),null}}async putMarker(e,t,n={}){return this.withRecord(e,n.createWith,e=>{let n=(e.markers??[]).filter(e=>e.id!==t.id);return n.push(t),n.sort((e,t)=>e.timestamp-t.timestamp),{...e,markers:n.slice(-64)}})}async putAttachments(e,t){if(t.length===0)return!1;let n=new Set(t.map(e=>e.id));return this.withRecord(e.key,e,e=>({...e,attachments:[...(e.attachments??[]).filter(e=>!n.has(e.id)),...t].sort((e,t)=>e.timestamp-t.timestamp).slice(-256)}))}async deleteMarker(e,t){return this.withRecord(e,void 0,e=>{let n=(e.markers??[]).filter(e=>e.id!==t);return n.length===(e.markers?.length??0)?null:{...e,markers:n}})}withRecord(e,t,n){return this.serialize(e,()=>this.mutateRecord(e,t,n))}async mutateRecord(e,t,n){try{let r=await this.read(e),i=r.status===`ok`?r.record:r.status===`absent`&&t?ew(t,Date.now()):null;if(!i)return!1;let a=n(i);return a?(await this.save({...a,updatedAt:Date.now()}),!0):!1}catch(t){return YC.warn(`Conversation marker write failed`,{key:e,error:sw(t)}),!1}}serialize(e,t){let n=(this.writeChains.get(e)??Promise.resolve()).then(t,t),r=n.then(()=>void 0,()=>void 0);return this.writeChains.set(e,r),r.then(()=>{this.writeChains.get(e)===r&&this.writeChains.delete(e)}),n}async getMigrationState(e){try{return await aw((await this.getDb()).transaction(ZC,`readonly`).objectStore(ZC).get(e))??null}catch(t){return YC.warn(`Migration state read failed`,{id:e,error:sw(t)}),null}}async putMigrationState(e){try{let t=(await this.getDb()).transaction(ZC,`readwrite`);t.objectStore(ZC).put(e),await ow(t)}catch(t){YC.warn(`Migration state write failed`,{id:e.id,error:sw(t)})}}async clearAll(){let e=(await this.getDb()).transaction([XC,ZC],`readwrite`);e.objectStore(XC).clear(),e.objectStore(ZC).clear(),await ow(e)}getDb(){return this.dbPromise||(this.dbPromise=iw(this.dbName).then(e=>(e.onversionchange=()=>{e.close(),this.dbPromise=null},e.onclose=()=>{this.dbPromise=null},e)),this.dbPromise.catch(()=>{this.dbPromise=null})),this.dbPromise}};function $C(e,t,n,r,i){if(!e)return t.length===0?null:{key:n.key,version:2,workUnitId:n.workUnitId,workspaceId:n.workspaceId,folder:n.folder,origin:r,entries:t,createdAt:i.createdAt,updatedAt:i.now,legacyKeys:n.legacyKeys};if(e.origin===`ui-projection`&&r===`agent-history`)return t.length===0?null:{...e,version:2,origin:r,entries:t,projectionPrefix:[...e.projectionPrefix??[],...tw(e)],updatedAt:i.now,legacyKeys:n.legacyKeys};let a=e.entries;if(t.length===a.length&&nw(a,t))return null;let o=t.length>a.length&&nw(a,t);return{...e,version:2,origin:r,entries:t,updatedAt:i.now,rewrites:o?e.rewrites:(e.rewrites??0)+1,legacyKeys:n.legacyKeys}}function ew(e,t){return{key:e.key,version:2,workUnitId:e.workUnitId,workspaceId:e.workspaceId,folder:e.folder,origin:`agent-history`,entries:[],createdAt:t,updatedAt:t,legacyKeys:e.legacyKeys}}function tw(e){let t=[];for(let n of e.entries)n.kind!==`tool-call`&&n.chat&&t.push(n.chat);return t}function nw(e,t){if(e.length>t.length)return!1;for(let n=0;n<e.length;n++)if(!rw(e[n],t[n]))return!1;return!0}function rw(e,t){return e.kind!==t.kind||e.seq!==t.seq?!1:e.kind===`tool-call`&&t.kind===`tool-call`?e.toolCallId===t.toolCallId&&e.name===t.name:(`text`in e?e.text:``)===(`text`in t?t.text:``)}function iw(e){return new Promise((t,n)=>{let r=indexedDB.open(e,1);r.onupgradeneeded=()=>{let e=r.result;e.objectStoreNames.contains(XC)||e.createObjectStore(XC,{keyPath:`key`}),e.objectStoreNames.contains(ZC)||e.createObjectStore(ZC,{keyPath:`id`})},r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error)})}function aw(e){return new Promise((t,n)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>n(e.error)})}function ow(e){return new Promise((t,n)=>{e.oncomplete=()=>t(),e.onerror=()=>n(e.error),e.onabort=()=>n(e.error)})}function sw(e){return e instanceof Error?e.message:String(e)}var cw=e({CONE_MEMORY_PATH:()=>dw,MEMORY_BASE_CHARS:()=>MEMORY_BASE_CHARS,MEMORY_OVERSHOOT_RATIO:()=>uw,MEMORY_PER_LOG_CHARS:()=>MEMORY_PER_LOG_CHARS,SESSIONS_INDEX_PATH:()=>fw,applyConeMemoryBudget:()=>_w,readSessionCount:()=>hw,restructureConeMemory:()=>gw,splitConeMemory:()=>mw});const lw=_(`cone-memory-budget`),uw=1.25,dw=cr.memoryPath,fw=`/sessions/index.json`,pw=/^## Auto-extracted/m;function mw(e){let t=pw.exec(e);if(!t)return{header:e,autoExtracted:``};let n=t.index;return{header:e.slice(0,n),autoExtracted:e.slice(n)}}async function hw(e){try{let t=await e.readFile(fw,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),r=JSON.parse(n);return Array.isArray(r)?r.length:0}catch{return 0}}async function gw(e){let{header:t,autoExtracted:n}=mw(e.currentContent);if(!n.trim())return e.currentContent;let r=`You are a memory consolidation assistant. You are given a markdown file's "auto-extracted" section — a list of memory bullets accumulated across sessions of an AI coding assistant. Your job is to rewrite that section as a tighter, deduplicated set of durable memories that fits well within ${e.budget} characters.
992
992
 
993
993
  <auto-extracted>
994
994
  ${n}
@@ -1002,10 +1002,10 @@ Rules:
1002
1002
  - Do NOT add preamble, commentary, or any heading other than the single consolidated one.`}],timestamp:Date.now()},a=await dn(e.model,{systemPrompt:r,messages:[i]},{apiKey:e.apiKey,maxTokens:4096,headers:e.headers,signal:e.signal});if(a.stopReason===`error`)throw Error(`Restructure call failed: ${a.errorMessage||`Unknown error`}`);let o=a.content.filter(e=>e.type===`text`).map(e=>e.text).join(`
1003
1003
  `).trim();if(!o)throw Error(`Restructure call returned empty content`);return`${t}${t.length===0||t.endsWith(`
1004
1004
  `)?``:`
1005
- `}${o}\n`}async function pw(e){if(!e.model||!e.apiKey)return{restructured:!1,reason:`no-llm`};let t=e.memoryPath??sw,n=``;try{let r=await e.vfs.readFile(t,{encoding:`utf-8`});n=typeof r==`string`?r:new TextDecoder().decode(r)}catch{return{restructured:!1,reason:`missing-file`}}let r=await dw(e.vfs),i=oi(r),a=i*ow;if(n.length<=a)return{restructured:!1,reason:`under-threshold`};aw.info(`Cone memory over threshold — restructuring`,{size:n.length,budget:i,threshold:a,sessionCount:r});try{let r=await fw({currentContent:n,budget:i,model:e.model,apiKey:e.apiKey,headers:e.headers,signal:e.signal});return await e.vfs.writeFile(t,r),aw.info(`Cone memory restructured`,{before:n.length,after:r.length}),{restructured:!0}}catch(e){return aw.warn(`Cone memory restructure failed — leaving appended content in place`,{error:e instanceof Error?e.message:String(e)}),{restructured:!1,reason:`error`}}}const mw=`.skill`,hw=`/workspace/skills`,gw=`SKILL.md`,_w=_(`skills-discovery`),vw=[`native`,`agents`,`claude`,`marketplace`,`plugin`],yw=new Map([[`.agents`,`agents`],[`.claude`,`claude`]]),bw=new Set([`.git`,`.slicc`,`node_modules`]),xw=2e4,Sw=[`mkdir`,`mount`,`rename`,`rm`,`unmount`,`writeFile`],Cw=new WeakMap,ww=new WeakSet,Tw=new WeakMap,Ew=new WeakMap,Dw=new Set([`.agents`,`.claude`,`.claude-plugin`]),Ow=new Set([`mount`,`rename`,`rm`,`unmount`]);async function kw(e,t=hw){let n=await Rw(e,t),r=await Fw(e),i=await Aw(e);return[...vw.flatMap(e=>(e===`native`?n:e===`plugin`?i:r.filter(t=>t.source===e)).sort((e,t)=>e.path.localeCompare(t.path)))]}async function Aw(e){let t;try{let n=await e.readTextFile(`/workspace/.plugins/plugins.json`),r=JSON.parse(n);if(!r||typeof r!=`object`||!r.plugins)return[];t=Object.values(r.plugins).map(e=>e?.root).filter(e=>typeof e==`string`)}catch{return[]}let n=[];for(let r of t){let t=`${r}/skills`,i=await Gw(e,t);for(let r of i){if(r.type!==`directory`)continue;let i=`${t}/${r.name}`,a=`${i}/${gw}`;await Ww(e,a)&&n.push({source:`plugin`,sourceRoot:t,path:i,skillFilePath:a})}}return n}function jw(e){return e.map(e=>({...e}))}function Mw(e){Cw.delete(e),Ew.delete(e),Tw.set(e,(Tw.get(e)??0)+1)}function Nw(e){let t=e.split(`/`);for(let e of t)if(Dw.has(e))return!0;return t[t.length-1]===`SKILL.md`||t.includes(`skills`)}function Pw(e,t){if(Ow.has(e))return!0;let n=t[0];return typeof n==`string`&&Nw(n)}async function Fw(e){if(Iw(e))return jw(await Hw(e));Uw(e);let t=e,n=Cw.get(t);if(n)return jw(n);let r=Tw.get(t)??0,i=Ew.get(t);if(i&&i.generation===r)return jw(await i.promise);let a=Hw(e).then(e=>((Tw.get(t)??0)===r&&Cw.set(t,e),e)),o;return o=a.finally(()=>{Ew.get(t)?.promise===o&&Ew.delete(t)}),Ew.set(t,{generation:r,promise:o}),jw(await o)}function Iw(e){try{return e[ti]===!0}catch{return!1}}function Lw(e,t){let n=new Map,r=new Map;for(let i of e){let e=t(i);if(!n.has(e)){n.set(e,i);continue}let a=r.get(e)??{name:e,winner:n.get(e),shadowed:[]};a.shadowed.push(i),r.set(e,a)}return{winners:Array.from(n.values()),collisions:Array.from(r.values())}}async function Rw(e,t){let n=await Gw(e,t),r=[];for(let i of n){if(i.type!==`directory`)continue;let n=`${t}/${i.name}`,a=`${n}/${gw}`;await Ww(e,a)&&r.push({source:`native`,sourceRoot:t,path:n,skillFilePath:a})}return r}async function zw(e,t){let n;try{n=await e.readTextFile(t)}catch{return[]}let r;try{r=JSON.parse(n)}catch{return[]}if(typeof r!=`object`||!r)return[];let i=r.plugins;if(!Array.isArray(i))return[];let a=t.replace(/\/[^/]+$/,``).replace(/\/.claude-plugin$/,``),o=[];for(let e of i){if(typeof e!=`object`||!e)continue;let t=e.source;if(typeof t!=`string`||t.startsWith(`/`)||t.split(`/`).includes(`..`))continue;let n=t.replace(/^\.\//,``).replace(/\/$/,``).replace(/^\.$/,``);o.push(n?`${a}/${n}`:a)}return o}async function Bw(e,t,n){let r=await zw(e,`${t}/marketplace.json`),i=[];for(let t of r){let r=`${t}/skills`,a=await Gw(e,r);for(let t of a){if(t.type!==`directory`)continue;let a=`${r}/${t.name}`,o=`${a}/${gw}`;!await Ww(e,o)||n.has(a)||(n.add(a),i.push({source:`marketplace`,sourceRoot:r,path:a,skillFilePath:o}))}}return i}async function Vw(e,t,n,r){let i=`${t}/skills`,a=await Gw(e,i),o=[];for(let t of a){if(t.type!==`directory`)continue;let a=`${i}/${t.name}`,s=`${a}/${gw}`;!await Ww(e,s)||r.has(a)||(r.add(a),o.push({source:n,sourceRoot:i,path:a,skillFilePath:s}))}return o}async function Hw(e){let t=[],n=new Set,r=new Set([`/`]),i=[{path:`/`,depth:0}];for(let a=0;a<i.length;a+=1){if(a>=xw){_w.warn(`skills discovery: directory budget exhausted; walk truncated`,{budget:xw});break}let{path:o,depth:s}=i[a],c=await Gw(e,o);for(let a of c){if(a.type!==`directory`||a.name===`.`||a.name===`..`)continue;let c=o===`/`?`/${a.name}`:`${o}/${a.name}`,l=yw.get(a.name);if(l){let r=await Vw(e,c,l,n);t.push(...r)}if(a.name===`.claude-plugin`){let r=await Bw(e,c,n);t.push(...r);continue}!bw.has(a.name)&&s<24&&!r.has(c)&&(r.add(c),i.push({path:c,depth:s+1}))}}return t}function Uw(e){if(Iw(e))return;let t=e;if(ww.has(t))return;ww.add(t);let n=e;for(let r of Sw){let i=n[r];if(typeof i==`function`)try{n[r]=async(...n)=>{let a=await i.apply(e,n);return Pw(r,n)&&Mw(t),a}}catch{}}}async function Ww(e,t){try{return await e.stat(t),!0}catch{return!1}}async function Gw(e,t){try{return[...await e.readDir(t)].sort((e,t)=>e.name.localeCompare(t.name))}catch{return[]}}async function Kw(e,t=`/workspace/skills`){let n=await kw(e,t),r=[];for(let t of n){let n=t.path.split(`/`).pop()??t.path,i=``;if(t.skillFilePath)try{i=Yw(await e.readTextFile(t.skillFilePath))??``}catch{}r.push({name:n,source:t.source,sourceRoot:t.sourceRoot,path:t.path,skillFilePath:t.skillFilePath,description:i})}let{winners:i,collisions:a}=Lw(r,e=>e.name),o=new Map(a.map(e=>[e.winner.path,e.shadowed.map(e=>e.path)]));return i.map(e=>({...e,shadowedPaths:o.get(e.path)}))}async function qw(e,t,n=`/workspace/skills`){return(await Kw(e,n)).find(e=>e.name===t)||null}async function Jw(e,t,n=`/workspace/skills`){let r=await qw(e,t,n);if(!r?.skillFilePath)return null;try{return await e.readTextFile(r.skillFilePath)}catch{return null}}function Yw(e){let t=e.replace(/^\uFEFF/,``).replace(/\r\n?/g,`
1005
+ `}${o}\n`}async function _w(e){if(!e.model||!e.apiKey)return{restructured:!1,reason:`no-llm`};let t=e.memoryPath??dw,n=``;try{let r=await e.vfs.readFile(t,{encoding:`utf-8`});n=typeof r==`string`?r:new TextDecoder().decode(r)}catch{return{restructured:!1,reason:`missing-file`}}let r=await hw(e.vfs),i=oi(r),a=i*uw;if(n.length<=a)return{restructured:!1,reason:`under-threshold`};lw.info(`Cone memory over threshold — restructuring`,{size:n.length,budget:i,threshold:a,sessionCount:r});try{let r=await gw({currentContent:n,budget:i,model:e.model,apiKey:e.apiKey,headers:e.headers,signal:e.signal});return await e.vfs.writeFile(t,r),lw.info(`Cone memory restructured`,{before:n.length,after:r.length}),{restructured:!0}}catch(e){return lw.warn(`Cone memory restructure failed — leaving appended content in place`,{error:e instanceof Error?e.message:String(e)}),{restructured:!1,reason:`error`}}}const vw=`.skill`,yw=`/workspace/skills`,bw=`SKILL.md`,xw=_(`skills-discovery`),Sw=[`native`,`agents`,`claude`,`marketplace`,`plugin`],Cw=new Map([[`.agents`,`agents`],[`.claude`,`claude`]]),ww=new Set([`.git`,`.slicc`,`node_modules`]),Tw=2e4,Ew=[`mkdir`,`mount`,`rename`,`rm`,`unmount`,`writeFile`],Dw=new WeakMap,Ow=new WeakSet,kw=new WeakMap,Aw=new WeakMap,jw=new Set([`.agents`,`.claude`,`.claude-plugin`]),Mw=new Set([`mount`,`rename`,`rm`,`unmount`]);async function Nw(e,t=yw){let n=await Hw(e,t),r=await zw(e),i=await Pw(e);return[...Sw.flatMap(e=>(e===`native`?n:e===`plugin`?i:r.filter(t=>t.source===e)).sort((e,t)=>e.path.localeCompare(t.path)))]}async function Pw(e){let t;try{let n=await e.readTextFile(`/workspace/.plugins/plugins.json`),r=JSON.parse(n);if(!r||typeof r!=`object`||!r.plugins)return[];t=Object.values(r.plugins).map(e=>e?.root).filter(e=>typeof e==`string`)}catch{return[]}let n=[];for(let r of t){let t=`${r}/skills`,i=await Yw(e,t);for(let r of i){if(r.type!==`directory`)continue;let i=`${t}/${r.name}`,a=`${i}/${bw}`;await Jw(e,a)&&n.push({source:`plugin`,sourceRoot:t,path:i,skillFilePath:a})}}return n}function Fw(e){return e.map(e=>({...e}))}function Iw(e){Dw.delete(e),Aw.delete(e),kw.set(e,(kw.get(e)??0)+1)}function Lw(e){let t=e.split(`/`);for(let e of t)if(jw.has(e))return!0;return t[t.length-1]===`SKILL.md`||t.includes(`skills`)}function Rw(e,t){if(Mw.has(e))return!0;let n=t[0];return typeof n==`string`&&Lw(n)}async function zw(e){if(Bw(e))return Fw(await Kw(e));qw(e);let t=e,n=Dw.get(t);if(n)return Fw(n);let r=kw.get(t)??0,i=Aw.get(t);if(i&&i.generation===r)return Fw(await i.promise);let a=Kw(e).then(e=>((kw.get(t)??0)===r&&Dw.set(t,e),e)),o;return o=a.finally(()=>{Aw.get(t)?.promise===o&&Aw.delete(t)}),Aw.set(t,{generation:r,promise:o}),Fw(await o)}function Bw(e){try{return e[ti]===!0}catch{return!1}}function Vw(e,t){let n=new Map,r=new Map;for(let i of e){let e=t(i);if(!n.has(e)){n.set(e,i);continue}let a=r.get(e)??{name:e,winner:n.get(e),shadowed:[]};a.shadowed.push(i),r.set(e,a)}return{winners:Array.from(n.values()),collisions:Array.from(r.values())}}async function Hw(e,t){let n=await Yw(e,t),r=[];for(let i of n){if(i.type!==`directory`)continue;let n=`${t}/${i.name}`,a=`${n}/${bw}`;await Jw(e,a)&&r.push({source:`native`,sourceRoot:t,path:n,skillFilePath:a})}return r}async function Uw(e,t){let n;try{n=await e.readTextFile(t)}catch{return[]}let r;try{r=JSON.parse(n)}catch{return[]}if(typeof r!=`object`||!r)return[];let i=r.plugins;if(!Array.isArray(i))return[];let a=t.replace(/\/[^/]+$/,``).replace(/\/.claude-plugin$/,``),o=[];for(let e of i){if(typeof e!=`object`||!e)continue;let t=e.source;if(typeof t!=`string`||t.startsWith(`/`)||t.split(`/`).includes(`..`))continue;let n=t.replace(/^\.\//,``).replace(/\/$/,``).replace(/^\.$/,``);o.push(n?`${a}/${n}`:a)}return o}async function Ww(e,t,n){let r=await Uw(e,`${t}/marketplace.json`),i=[];for(let t of r){let r=`${t}/skills`,a=await Yw(e,r);for(let t of a){if(t.type!==`directory`)continue;let a=`${r}/${t.name}`,o=`${a}/${bw}`;!await Jw(e,o)||n.has(a)||(n.add(a),i.push({source:`marketplace`,sourceRoot:r,path:a,skillFilePath:o}))}}return i}async function Gw(e,t,n,r){let i=`${t}/skills`,a=await Yw(e,i),o=[];for(let t of a){if(t.type!==`directory`)continue;let a=`${i}/${t.name}`,s=`${a}/${bw}`;!await Jw(e,s)||r.has(a)||(r.add(a),o.push({source:n,sourceRoot:i,path:a,skillFilePath:s}))}return o}async function Kw(e){let t=[],n=new Set,r=new Set([`/`]),i=[{path:`/`,depth:0}];for(let a=0;a<i.length;a+=1){if(a>=Tw){xw.warn(`skills discovery: directory budget exhausted; walk truncated`,{budget:Tw});break}let{path:o,depth:s}=i[a],c=await Yw(e,o);for(let a of c){if(a.type!==`directory`||a.name===`.`||a.name===`..`)continue;let c=o===`/`?`/${a.name}`:`${o}/${a.name}`,l=Cw.get(a.name);if(l){let r=await Gw(e,c,l,n);t.push(...r)}if(a.name===`.claude-plugin`){let r=await Ww(e,c,n);t.push(...r);continue}!ww.has(a.name)&&s<24&&!r.has(c)&&(r.add(c),i.push({path:c,depth:s+1}))}}return t}function qw(e){if(Bw(e))return;let t=e;if(Ow.has(t))return;Ow.add(t);let n=e;for(let r of Ew){let i=n[r];if(typeof i==`function`)try{n[r]=async(...n)=>{let a=await i.apply(e,n);return Rw(r,n)&&Iw(t),a}}catch{}}}async function Jw(e,t){try{return await e.stat(t),!0}catch{return!1}}async function Yw(e,t){try{return[...await e.readDir(t)].sort((e,t)=>e.name.localeCompare(t.name))}catch{return[]}}async function Xw(e,t=`/workspace/skills`){let n=await Nw(e,t),r=[];for(let t of n){let n=t.path.split(`/`).pop()??t.path,i=``;if(t.skillFilePath)try{i=$w(await e.readTextFile(t.skillFilePath))??``}catch{}r.push({name:n,source:t.source,sourceRoot:t.sourceRoot,path:t.path,skillFilePath:t.skillFilePath,description:i})}let{winners:i,collisions:a}=Vw(r,e=>e.name),o=new Map(a.map(e=>[e.winner.path,e.shadowed.map(e=>e.path)]));return i.map(e=>({...e,shadowedPaths:o.get(e.path)}))}async function Zw(e,t,n=`/workspace/skills`){return(await Xw(e,n)).find(e=>e.name===t)||null}async function Qw(e,t,n=`/workspace/skills`){let r=await Zw(e,t,n);if(!r?.skillFilePath)return null;try{return await e.readTextFile(r.skillFilePath)}catch{return null}}function $w(e){let t=e.replace(/^\uFEFF/,``).replace(/\r\n?/g,`
1006
1006
  `).trimStart().match(/^---\s*\n([\s\S]*?)\n---/);if(!t)return null;for(let e of t[1].split(`
1007
- `)){let t=e.match(/^description:\s*(.*)$/);if(t)return t[1].trim()}return null}const Xw=/^[A-Za-z0-9][A-Za-z0-9._-]*$/;function Zw(e){if(e===`__MACOSX`||e.startsWith(`__MACOSX/`))return!0;let t=e.includes(`/`)?e.slice(e.lastIndexOf(`/`)+1):e;return!!(t===`.DS_Store`||t===`Thumbs.db`||t===`desktop.ini`||t.startsWith(`._`))}var Qw=class extends Error{};function $w(e){let t=e.replace(/\\/g,`/`);if(!t||t.endsWith(`/`))return null;if(t.startsWith(`/`)||/^[A-Za-z]:\//.test(t))throw Error(`Blocked suspicious path "${e}".`);let n=t.split(`/`);if(n.some(e=>e===``||e===`.`||e===`..`))throw Error(`Blocked suspicious path "${e}".`);return n.join(`/`)}function eT(e){if(!Xw.test(e))throw Error(`Invalid skill: skill name "${e}" must be a simple directory name.`)}function tT(e){let t=[];for(let[n,r]of Object.entries(e)){let e=$w(n);e&&(Zw(e)||t.push({originalPath:n,path:e,bytes:r}))}return t}function nT(e){let t=e.filter(e=>e.path===`SKILL.md`||e.path.endsWith(`/SKILL.md`));if(t.length===0)throw Error(`Skill archive is missing ${gw}.`);if(t.length>1)throw Error(`Skill archive contains multiple ${gw} files.`);return t[0]}function rT(e){let t=0,n=0;return di(e,{filter(e){if(t++,t>1e3)throw new Qw(`Skill archives may contain at most 1000 entries.`);if(n+=e.originalSize,n>52428800)throw new Qw(`Skill archives must expand to 50 MB or smaller after extraction.`);return!0}})}function iT(e){let t=`${Date.now()}-${Math.random().toString(16).slice(2,8)}`;return Dn(hw,`.${e}.tmp-${t}`)}function aT(e,t){return t===`SKILL.md`?e.replace(/\.skill$/i,``):t.slice(0,-9).split(`/`).pop()??``}function oT(e){if(!e.name.toLowerCase().endsWith(`.skill`))throw Error(`Only ${mw} archives can be installed with drag and drop.`);if(e.size>52428800)throw Error(`Skill archives must be 50 MB or smaller.`)}async function sT(e){try{return rT(new Uint8Array(await e.arrayBuffer()))}catch(e){if(e instanceof Qw)throw e;let t=e instanceof Error?e.message:String(e);throw Error(`Invalid .skill archive: ${t}`)}}function cT(e){return e.path===`SKILL.md`?``:e.path.slice(0,-9)}function lT(e,t){return t&&(e===t||!e.startsWith(`${t}/`))?null:(t?e.slice(t.length+1):e)||null}async function uT(e,t,n,r){let i=Dn(t,n),{dir:a}=Tn(i);a!==`/`&&await e.mkdir(a,{recursive:!0}),await e.writeFile(i,r)}async function dT(e,t,n,r){let i=0;for(let a of t){let t=lT(a.path,n);t&&(await uT(e,r,t,a.bytes),i++)}return i}async function fT(e,t){await e.exists(t)&&await e.rm(t,{recursive:!0})}async function pT(e,t){let n=Dn(hw,t);if(await e.exists(n))throw Error(`Skill "${t}" already exists at ${n}.`);return n}async function mT(e,t){oT(t);let n=tT(await sT(t)),r=nT(n),i=aT(t.name,r.path);eT(i);let a=await pT(e,i),o=iT(i),s=cT(r);await e.mkdir(o,{recursive:!0});try{let t=await dT(e,n,s,o);return await e.rename(o,a),{skillName:i,destinationPath:a,fileCount:t}}catch(t){throw await fT(e,o),t}}var hT=e({MAX_SKILL_ARCHIVE_SIZE_BYTES:()=>52428800,SKILLS_DIR:()=>`skills`,SKILL_ARCHIVE_EXTENSION:()=>mw,SKILL_FILE:()=>gw,WORKSPACE_SKILLS_PATH:()=>hw,discoverSkillCandidates:()=>kw,discoverSkills:()=>Kw,getSkillInfo:()=>qw,installSkillFromDrop:()=>mT,readSkillInstructions:()=>Jw,resolveSkillNameCollisions:()=>Lw});const gT=_(`skills`),_T=Object.assign({"/packages/vfs-root/AGENTS.md":()=>import(`./CLAUDE-Dc_zsP8N.js`).then(e=>e.default),"/packages/vfs-root/CLAUDE.md":()=>import(`./CLAUDE-Dc_zsP8N.js`).then(e=>e.default),"/packages/vfs-root/etc/APPROVALS.md":()=>import(`./APPROVALS-CoZKeFYV.js`).then(e=>e.default),"/packages/vfs-root/etc/MEMORY.md":()=>import(`./MEMORY-B9cGngY_.js`).then(e=>e.n).then(e=>e.default),"/packages/vfs-root/etc/slicc/keys.json":()=>import(`./keys-BMebW-sj.js`).then(e=>e.default),"/packages/vfs-root/shared/CLAUDE.md":()=>import(`./CLAUDE-Bzu6oiWk.js`).then(e=>e.default),"/packages/vfs-root/shared/GELATIERE.md":()=>import(`./GELATIERE-CLK_MA5a.js`).then(e=>e.n).then(e=>e.default),"/packages/vfs-root/shared/sprinkles/suggestions/suggestions.shtml":()=>import(`./suggestions-B34zKgsF.js`).then(e=>e.default),"/packages/vfs-root/shared/sprinkles/welcome/connect-llm.shtml":()=>import(`./connect-llm-FevTa-aV.js`).then(e=>e.default),"/packages/vfs-root/shared/sprinkles/welcome/welcome.shtml":()=>import(`./welcome-BzW33ZtP.js`).then(e=>e.default),"/packages/vfs-root/shared/wiki/WIKI.md":()=>import(`./WIKI-DoBxwf2u.js`).then(e=>e.default),"/packages/vfs-root/shared/wiki/index.md":()=>import(`./wiki-BXN4hgmw.js`).then(e=>e.default),"/packages/vfs-root/shared/wiki/log.md":()=>import(`./log-DEDI5t_h.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/automation/SKILL.md":()=>import(`./SKILL-cOU0zXaK.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/biome/SKILL.md":()=>import(`./SKILL-BNnF2azP.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/cherry/SKILL.md":()=>import(`./SKILL-BTVvFyRd.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/computer/SKILL.md":()=>import(`./SKILL-BbKu0tAh.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/delegation/SKILL.md":()=>import(`./SKILL-B4YYagrM.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/dips/SKILL.md":()=>import(`./SKILL-BmzmDv0e.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/dips/patterns.md":()=>import(`./patterns-ChiGbijt.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/dns/SKILL.md":()=>import(`./SKILL-BKyxMoME.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/ffmpeg/SKILL.md":()=>import(`./SKILL-C6co9TnL.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/gelatiere/SKILL.md":()=>import(`./SKILL-DXpn0mQK.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/handoff/SKILL.md":()=>import(`./SKILL-BGww2dFz.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/image-processing/SKILL.md":()=>import(`./SKILL-DpjPj8Lx.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/jshd/SKILL.md":()=>import(`./SKILL-DZoCcID_.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/jshd/examples/fake-computer.jsh":()=>import(`./fake-computer-Jawax3MO.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/meminfo/SKILL.md":()=>import(`./SKILL-DXIigmDy.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/memory/SKILL.md":()=>import(`./SKILL-CVh4bFFa.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/mount/SKILL.md":()=>import(`./SKILL-nuxIaHgr.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/package-execution/SKILL.md":()=>import(`./SKILL-BGRdm7JZ.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/playwright-cli/SKILL.md":()=>import(`./SKILL-CG7Xvjv7.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/skill-authoring/SKILL.md":()=>import(`./SKILL-CX_QtSBf.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/skill-authoring/jsh-runtime-extensions.md":()=>import(`./jsh-runtime-extensions-DiQ9SvKe.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/slicc/SKILL.md":()=>import(`./SKILL-CRLGKQWi.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/sprinkles/SKILL.md":()=>import(`./SKILL-nEVBLbup.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/sprinkles/icon-example.md":()=>import(`./icon-example-LUkiEXyS.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/sprinkles/style-guide.md":()=>import(`./style-guide-BvFX24DM.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/ssh/SKILL.md":()=>import(`./SKILL-B8Oawe6a.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/theme/SKILL.md":()=>import(`./SKILL-CTFXwGP5.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/transcript-export/SKILL.md":()=>import(`./SKILL-DJtLE66_.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/upgrade/SKILL.md":()=>import(`./SKILL-3ejR48eL.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/v86/SKILL.md":()=>import(`./SKILL-BIdAO7Ya.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/welcome/SKILL.md":()=>import(`./SKILL-C3909YTo.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/wiki/SKILL.md":()=>import(`./SKILL-UcxSfshP.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/wiki/wiki.jsh":()=>import(`./wiki-DA0qKUVC.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/workflows/SKILL.md":()=>import(`./SKILL-Bt-RhG0L.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/x-search/SKILL.md":()=>import(`./SKILL-CED8RXQP.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/x-search/x_search.jsh":()=>import(`./x_search-C-5p00-C.js`).then(e=>e.default)}),vT=Object.assign({"/packages/vfs-root/shared/sounds/chime.mp3":()=>import(`./chime-CPc6qSh5.js`).then(e=>e.default)});function yT(e){let t=e.split(`,`)[1],n=atob(t),r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e);return r}const bT={};function xT(){let e={};for(let[t,n]of Object.entries(_T))e[t]=n;for(let[t,n]of Object.entries(vT))e[t]=async()=>yT(await n());for(let[t,n]of Object.entries(bT)){let r=t.replace(`/packages/dev-tools/vfs-dev-skills/`,`/packages/vfs-root/workspace/skills/`);e[r]=()=>Promise.resolve(n)}return e}function ST(e){let t=new Map;for(let n of e){if(t.has(n.metadata.name)){gT.debug(`Skipped shadowed runtime skill`,{name:n.metadata.name,path:n.path,winnerPath:t.get(n.metadata.name)?.path});continue}t.set(n.metadata.name,n)}return Array.from(t.values())}function CT(e){let t=e.match(/^---\s*\n([\s\S]*?)\n---\s*\n([\s\S]*)$/);if(!t)return{metadata:{},body:e};let[,n,r]=t,i={};for(let e of n.split(`
1008
- `)){let t=e.match(/^(\w[\w-]*):\s*(.*)$/);if(!t)continue;let[,n,r]=t,a=r.trim();switch(n){case`name`:i.name=a;break;case`description`:i.description=a;break;case`allowed-tools`:i.allowedTools=a.split(`,`).map(e=>e.trim());break;case`layout`:i.layout=a;break;case`theme`:i.theme=a}}return{metadata:i,body:r}}const wT=new WeakMap;function TT(e,t,n,r){let i=e.get(t);i||(i=new Map,e.set(t,i));let a=i.get(n);if(a)return a;let o;return o=r().finally(()=>{i.get(n)===o&&i.delete(n)}),i.set(n,o),o}async function ET(e,t){let n=await DT(e,t),r=await OT(e,t),i=n.filter(e=>e.source===`native`),a=n.filter(e=>e.source!==`native`),o=ST([...i,...r,...a]);return gT.info(`Skills loaded`,{count:o.length,dir:t}),o}async function DT(e,t){let n=await Kw(e,t),r=[];for(let t of n)if(t.skillFilePath)try{let{metadata:n,body:i}=CT(await e.readTextFile(t.skillFilePath)),a=n.name||t.name;r.push({metadata:{name:a,description:n.description||t.description||``,allowedTools:n.allowedTools},content:i,path:t.skillFilePath,source:t.source}),gT.debug(`Loaded discovered skill`,{name:a,path:t.skillFilePath,source:t.source})}catch{gT.debug(`Failed to load discovered skill`,{name:t.name,path:t.skillFilePath})}return r}async function OT(e,t){let n=[];try{let r=await e.readDir(t);for(let i of r)if(i.type===`file`&&i.name.endsWith(`.md`)){let r=`${t}/${i.name}`;try{let t=await e.readFile(r,{encoding:`utf-8`}),{metadata:a,body:o}=CT(typeof t==`string`?t:new TextDecoder().decode(t)),s=a.name||i.name.replace(`.md`,``);n.push({metadata:{name:s,description:a.description||``,allowedTools:a.allowedTools},content:o,path:r}),gT.debug(`Loaded standalone skill`,{name:s,path:r})}catch{}}}catch{gT.debug(`Standalone skills directory not found`,{dir:t})}return n}function kT(e){return e.length===0?``:`
1007
+ `)){let t=e.match(/^description:\s*(.*)$/);if(t)return t[1].trim()}return null}const eT=/^[A-Za-z0-9][A-Za-z0-9._-]*$/;function tT(e){if(e===`__MACOSX`||e.startsWith(`__MACOSX/`))return!0;let t=e.includes(`/`)?e.slice(e.lastIndexOf(`/`)+1):e;return!!(t===`.DS_Store`||t===`Thumbs.db`||t===`desktop.ini`||t.startsWith(`._`))}var nT=class extends Error{};function rT(e){let t=e.replace(/\\/g,`/`);if(!t||t.endsWith(`/`))return null;if(t.startsWith(`/`)||/^[A-Za-z]:\//.test(t))throw Error(`Blocked suspicious path "${e}".`);let n=t.split(`/`);if(n.some(e=>e===``||e===`.`||e===`..`))throw Error(`Blocked suspicious path "${e}".`);return n.join(`/`)}function iT(e){if(!eT.test(e))throw Error(`Invalid skill: skill name "${e}" must be a simple directory name.`)}function aT(e){let t=[];for(let[n,r]of Object.entries(e)){let e=rT(n);e&&(tT(e)||t.push({originalPath:n,path:e,bytes:r}))}return t}function oT(e){let t=e.filter(e=>e.path===`SKILL.md`||e.path.endsWith(`/SKILL.md`));if(t.length===0)throw Error(`Skill archive is missing ${bw}.`);if(t.length>1)throw Error(`Skill archive contains multiple ${bw} files.`);return t[0]}function sT(e){let t=0,n=0;return di(e,{filter(e){if(t++,t>1e3)throw new nT(`Skill archives may contain at most 1000 entries.`);if(n+=e.originalSize,n>52428800)throw new nT(`Skill archives must expand to 50 MB or smaller after extraction.`);return!0}})}function cT(e){let t=`${Date.now()}-${Math.random().toString(16).slice(2,8)}`;return Dn(yw,`.${e}.tmp-${t}`)}function lT(e,t){return t===`SKILL.md`?e.replace(/\.skill$/i,``):t.slice(0,-9).split(`/`).pop()??``}function uT(e){if(!e.name.toLowerCase().endsWith(`.skill`))throw Error(`Only ${vw} archives can be installed with drag and drop.`);if(e.size>52428800)throw Error(`Skill archives must be 50 MB or smaller.`)}async function dT(e){try{return sT(new Uint8Array(await e.arrayBuffer()))}catch(e){if(e instanceof nT)throw e;let t=e instanceof Error?e.message:String(e);throw Error(`Invalid .skill archive: ${t}`)}}function fT(e){return e.path===`SKILL.md`?``:e.path.slice(0,-9)}function pT(e,t){return t&&(e===t||!e.startsWith(`${t}/`))?null:(t?e.slice(t.length+1):e)||null}async function mT(e,t,n,r){let i=Dn(t,n),{dir:a}=Tn(i);a!==`/`&&await e.mkdir(a,{recursive:!0}),await e.writeFile(i,r)}async function hT(e,t,n,r){let i=0;for(let a of t){let t=pT(a.path,n);t&&(await mT(e,r,t,a.bytes),i++)}return i}async function gT(e,t){await e.exists(t)&&await e.rm(t,{recursive:!0})}async function _T(e,t){let n=Dn(yw,t);if(await e.exists(n))throw Error(`Skill "${t}" already exists at ${n}.`);return n}async function vT(e,t){uT(t);let n=aT(await dT(t)),r=oT(n),i=lT(t.name,r.path);iT(i);let a=await _T(e,i),o=cT(i),s=fT(r);await e.mkdir(o,{recursive:!0});try{let t=await hT(e,n,s,o);return await e.rename(o,a),{skillName:i,destinationPath:a,fileCount:t}}catch(t){throw await gT(e,o),t}}var yT=e({MAX_SKILL_ARCHIVE_SIZE_BYTES:()=>52428800,SKILLS_DIR:()=>`skills`,SKILL_ARCHIVE_EXTENSION:()=>vw,SKILL_FILE:()=>bw,WORKSPACE_SKILLS_PATH:()=>yw,discoverSkillCandidates:()=>Nw,discoverSkills:()=>Xw,getSkillInfo:()=>Zw,installSkillFromDrop:()=>vT,readSkillInstructions:()=>Qw,resolveSkillNameCollisions:()=>Vw});const bT=_(`skills`),xT=Object.assign({"/packages/vfs-root/AGENTS.md":()=>import(`./CLAUDE-Dc_zsP8N.js`).then(e=>e.default),"/packages/vfs-root/CLAUDE.md":()=>import(`./CLAUDE-Dc_zsP8N.js`).then(e=>e.default),"/packages/vfs-root/etc/APPROVALS.md":()=>import(`./APPROVALS-CoZKeFYV.js`).then(e=>e.default),"/packages/vfs-root/etc/MEMORY.md":()=>import(`./MEMORY-B9cGngY_.js`).then(e=>e.n).then(e=>e.default),"/packages/vfs-root/etc/slicc/keys.json":()=>import(`./keys-BMebW-sj.js`).then(e=>e.default),"/packages/vfs-root/shared/CLAUDE.md":()=>import(`./CLAUDE-Bzu6oiWk.js`).then(e=>e.default),"/packages/vfs-root/shared/GELATIERE.md":()=>import(`./GELATIERE-CLK_MA5a.js`).then(e=>e.n).then(e=>e.default),"/packages/vfs-root/shared/sprinkles/suggestions/suggestions.shtml":()=>import(`./suggestions-B34zKgsF.js`).then(e=>e.default),"/packages/vfs-root/shared/sprinkles/welcome/connect-llm.shtml":()=>import(`./connect-llm-FevTa-aV.js`).then(e=>e.default),"/packages/vfs-root/shared/sprinkles/welcome/welcome.shtml":()=>import(`./welcome-BzW33ZtP.js`).then(e=>e.default),"/packages/vfs-root/shared/wiki/WIKI.md":()=>import(`./WIKI-DoBxwf2u.js`).then(e=>e.default),"/packages/vfs-root/shared/wiki/index.md":()=>import(`./wiki-BXN4hgmw.js`).then(e=>e.default),"/packages/vfs-root/shared/wiki/log.md":()=>import(`./log-DEDI5t_h.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/automation/SKILL.md":()=>import(`./SKILL-cOU0zXaK.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/biome/SKILL.md":()=>import(`./SKILL-BNnF2azP.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/cherry/SKILL.md":()=>import(`./SKILL-BTVvFyRd.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/computer/SKILL.md":()=>import(`./SKILL-BbKu0tAh.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/delegation/SKILL.md":()=>import(`./SKILL-B4YYagrM.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/dips/SKILL.md":()=>import(`./SKILL-BmzmDv0e.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/dips/patterns.md":()=>import(`./patterns-ChiGbijt.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/dns/SKILL.md":()=>import(`./SKILL-BKyxMoME.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/ffmpeg/SKILL.md":()=>import(`./SKILL-C6co9TnL.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/gelatiere/SKILL.md":()=>import(`./SKILL-DXpn0mQK.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/handoff/SKILL.md":()=>import(`./SKILL-BGww2dFz.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/image-processing/SKILL.md":()=>import(`./SKILL-DpjPj8Lx.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/jshd/SKILL.md":()=>import(`./SKILL-DZoCcID_.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/jshd/examples/fake-computer.jsh":()=>import(`./fake-computer-Jawax3MO.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/meminfo/SKILL.md":()=>import(`./SKILL-DXIigmDy.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/memory/SKILL.md":()=>import(`./SKILL-CVh4bFFa.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/mount/SKILL.md":()=>import(`./SKILL-nuxIaHgr.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/package-execution/SKILL.md":()=>import(`./SKILL-BGRdm7JZ.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/playwright-cli/SKILL.md":()=>import(`./SKILL-CG7Xvjv7.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/skill-authoring/SKILL.md":()=>import(`./SKILL-CX_QtSBf.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/skill-authoring/jsh-runtime-extensions.md":()=>import(`./jsh-runtime-extensions-DiQ9SvKe.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/slicc/SKILL.md":()=>import(`./SKILL-CRLGKQWi.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/sprinkles/SKILL.md":()=>import(`./SKILL-nEVBLbup.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/sprinkles/icon-example.md":()=>import(`./icon-example-LUkiEXyS.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/sprinkles/style-guide.md":()=>import(`./style-guide-BvFX24DM.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/ssh/SKILL.md":()=>import(`./SKILL-B8Oawe6a.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/theme/SKILL.md":()=>import(`./SKILL-CTFXwGP5.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/transcript-export/SKILL.md":()=>import(`./SKILL-DJtLE66_.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/upgrade/SKILL.md":()=>import(`./SKILL-3ejR48eL.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/v86/SKILL.md":()=>import(`./SKILL-9iH3AJo5.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/welcome/SKILL.md":()=>import(`./SKILL-C3909YTo.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/wiki/SKILL.md":()=>import(`./SKILL-UcxSfshP.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/wiki/wiki.jsh":()=>import(`./wiki-DA0qKUVC.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/workflows/SKILL.md":()=>import(`./SKILL-Bt-RhG0L.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/x-search/SKILL.md":()=>import(`./SKILL-CED8RXQP.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/x-search/x_search.jsh":()=>import(`./x_search-C-5p00-C.js`).then(e=>e.default)}),ST=Object.assign({"/packages/vfs-root/shared/sounds/chime.mp3":()=>import(`./chime-CPc6qSh5.js`).then(e=>e.default)});function CT(e){let t=e.split(`,`)[1],n=atob(t),r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e);return r}const wT={};function TT(){let e={};for(let[t,n]of Object.entries(xT))e[t]=n;for(let[t,n]of Object.entries(ST))e[t]=async()=>CT(await n());for(let[t,n]of Object.entries(wT)){let r=t.replace(`/packages/dev-tools/vfs-dev-skills/`,`/packages/vfs-root/workspace/skills/`);e[r]=()=>Promise.resolve(n)}return e}function ET(e){let t=new Map;for(let n of e){if(t.has(n.metadata.name)){bT.debug(`Skipped shadowed runtime skill`,{name:n.metadata.name,path:n.path,winnerPath:t.get(n.metadata.name)?.path});continue}t.set(n.metadata.name,n)}return Array.from(t.values())}function DT(e){let t=e.match(/^---\s*\n([\s\S]*?)\n---\s*\n([\s\S]*)$/);if(!t)return{metadata:{},body:e};let[,n,r]=t,i={};for(let e of n.split(`
1008
+ `)){let t=e.match(/^(\w[\w-]*):\s*(.*)$/);if(!t)continue;let[,n,r]=t,a=r.trim();switch(n){case`name`:i.name=a;break;case`description`:i.description=a;break;case`allowed-tools`:i.allowedTools=a.split(`,`).map(e=>e.trim());break;case`layout`:i.layout=a;break;case`theme`:i.theme=a}}return{metadata:i,body:r}}const OT=new WeakMap;function kT(e,t,n,r){let i=e.get(t);i||(i=new Map,e.set(t,i));let a=i.get(n);if(a)return a;let o;return o=r().finally(()=>{i.get(n)===o&&i.delete(n)}),i.set(n,o),o}async function AT(e,t){let n=await jT(e,t),r=await MT(e,t),i=n.filter(e=>e.source===`native`),a=n.filter(e=>e.source!==`native`),o=ET([...i,...r,...a]);return bT.info(`Skills loaded`,{count:o.length,dir:t}),o}async function jT(e,t){let n=await Xw(e,t),r=[];for(let t of n)if(t.skillFilePath)try{let{metadata:n,body:i}=DT(await e.readTextFile(t.skillFilePath)),a=n.name||t.name;r.push({metadata:{name:a,description:n.description||t.description||``,allowedTools:n.allowedTools},content:i,path:t.skillFilePath,source:t.source}),bT.debug(`Loaded discovered skill`,{name:a,path:t.skillFilePath,source:t.source})}catch{bT.debug(`Failed to load discovered skill`,{name:t.name,path:t.skillFilePath})}return r}async function MT(e,t){let n=[];try{let r=await e.readDir(t);for(let i of r)if(i.type===`file`&&i.name.endsWith(`.md`)){let r=`${t}/${i.name}`;try{let t=await e.readFile(r,{encoding:`utf-8`}),{metadata:a,body:o}=DT(typeof t==`string`?t:new TextDecoder().decode(t)),s=a.name||i.name.replace(`.md`,``);n.push({metadata:{name:s,description:a.description||``,allowedTools:a.allowedTools},content:o,path:r}),bT.debug(`Loaded standalone skill`,{name:s,path:r})}catch{}}}catch{bT.debug(`Standalone skills directory not found`,{dir:t})}return n}function NT(e){return e.length===0?``:`
1009
1009
  ---
1010
1010
  AVAILABLE SKILLS
1011
1011
 
@@ -1014,9 +1014,9 @@ The following skills are available. To use a skill, first read its full instruct
1014
1014
 
1015
1015
  ${e.map(e=>{let t=e.metadata.allowedTools?` Allowed tools: ${e.metadata.allowedTools.join(`, `)}\n`:``;return`- **${e.metadata.name}**: ${e.metadata.description}\n${t} Path: ${e.path}`}).join(`
1016
1016
  `)}
1017
- ---`}function AT(e,t=`/workspace/skills`){let n=je(),r=`${t}\0${n?`skip-skills`:`seed-skills`}`;return TT(wT,e,r,()=>jT(e,t,n))}async function jT(e,t,n){let r=xT();for(let[i,a]of Object.entries(r)){let r=i.slice(18),o=r.startsWith(`/workspace/skills`),s=r.startsWith(`/workspace/scripts`);if(!o&&!s||o&&n)continue;let c=r;o&&t!==`/workspace/skills`&&(c=r.replace(`/workspace/skills`,t)),s&&t!==`/workspace/skills`&&(c=t.replace(`/workspace/skills`,``)+r);try{await e.stat(c)}catch{let t=c.substring(0,c.lastIndexOf(`/`));try{await e.mkdir(t,{recursive:!0})}catch{}await e.writeFile(c,await a()),gT.info(`Created default file`,{path:c})}}}const MT=new Set([`/shared/sprinkles/welcome/welcome.shtml`,`/shared/sprinkles/welcome/connect-llm.shtml`,`/shared/sprinkles/suggestions/suggestions.shtml`]);async function NT(e){let t=xT();for(let[n,r]of Object.entries(t)){let t=n.slice(18);if(!t.startsWith(`/shared/`))continue;let i=MT.has(t);if(!i)try{await e.stat(t);continue}catch{}let a=t.substring(0,t.lastIndexOf(`/`));try{await e.mkdir(a,{recursive:!0})}catch{}await e.writeFile(t,await r()),gT.info(i?`Refreshed bundled shared file`:`Created default shared file`,{path:t})}}const PT=_(`cone-memory-store`);function FT(e){let t=e.lastIndexOf(`/`);return t<=0?`/`:e.slice(0,t)}var IT=class{globalMemoryCache=``;memoryWriteChain=Promise.resolve();deps;constructor(e){this.deps=e}async ensureGlobalMemory(){let e=this.deps.getSharedFs();if(e){await NT(e);try{let t=await e.readFile(`/shared/CLAUDE.md`,{encoding:`utf-8`});this.globalMemoryCache=typeof t==`string`?t:new TextDecoder().decode(t)}catch{PT.warn(`Global memory file not found after creating defaults`)}}}async getGlobalMemory(){if(this.globalMemoryCache)return this.globalMemoryCache;let e=this.deps.getSharedFs();if(e)try{let t=await e.readFile(`/shared/CLAUDE.md`,{encoding:`utf-8`});this.globalMemoryCache=typeof t==`string`?t:new TextDecoder().decode(t)}catch{}return this.globalMemoryCache}async setGlobalMemory(e){let t=this.deps.getSharedFs();t&&(await t.writeFile(`/shared/CLAUDE.md`,e),this.globalMemoryCache=e,PT.info(`Global memory updated`))}async appendConeMemory(e,t){if(!this.deps.getSharedFs())return;let n=e.trim();if(!n)return;let r=t.memoryPath??sw,i=this.memoryWriteChain.then(async()=>{let e=this.deps.getSharedFs();if(!e)return;let i=``;try{let t=await e.readFile(r,{encoding:`utf-8`});i=typeof t==`string`?t:new TextDecoder().decode(t)}catch(t){if(!(t instanceof k)||t.code!==`ENOENT`)throw t;await e.mkdir(FT(r),{recursive:!0})}let a=`## Auto-extracted (${new Date().toISOString().slice(0,10)}, ${t.source})`,o=`${i.length===0||i.endsWith(`
1017
+ ---`}function PT(e,t=`/workspace/skills`){let n=je(),r=`${t}\0${n?`skip-skills`:`seed-skills`}`;return kT(OT,e,r,()=>FT(e,t,n))}async function FT(e,t,n){let r=TT();for(let[i,a]of Object.entries(r)){let r=i.slice(18),o=r.startsWith(`/workspace/skills`),s=r.startsWith(`/workspace/scripts`);if(!o&&!s||o&&n)continue;let c=r;o&&t!==`/workspace/skills`&&(c=r.replace(`/workspace/skills`,t)),s&&t!==`/workspace/skills`&&(c=t.replace(`/workspace/skills`,``)+r);try{await e.stat(c)}catch{let t=c.substring(0,c.lastIndexOf(`/`));try{await e.mkdir(t,{recursive:!0})}catch{}await e.writeFile(c,await a()),bT.info(`Created default file`,{path:c})}}}const IT=new Set([`/shared/sprinkles/welcome/welcome.shtml`,`/shared/sprinkles/welcome/connect-llm.shtml`,`/shared/sprinkles/suggestions/suggestions.shtml`]);async function LT(e){let t=TT();for(let[n,r]of Object.entries(t)){let t=n.slice(18);if(!t.startsWith(`/shared/`))continue;let i=IT.has(t);if(!i)try{await e.stat(t);continue}catch{}let a=t.substring(0,t.lastIndexOf(`/`));try{await e.mkdir(a,{recursive:!0})}catch{}await e.writeFile(t,await r()),bT.info(i?`Refreshed bundled shared file`:`Created default shared file`,{path:t})}}const RT=_(`cone-memory-store`);function zT(e){let t=e.lastIndexOf(`/`);return t<=0?`/`:e.slice(0,t)}var BT=class{globalMemoryCache=``;memoryWriteChain=Promise.resolve();deps;constructor(e){this.deps=e}async ensureGlobalMemory(){let e=this.deps.getSharedFs();if(e){await LT(e);try{let t=await e.readFile(`/shared/CLAUDE.md`,{encoding:`utf-8`});this.globalMemoryCache=typeof t==`string`?t:new TextDecoder().decode(t)}catch{RT.warn(`Global memory file not found after creating defaults`)}}}async getGlobalMemory(){if(this.globalMemoryCache)return this.globalMemoryCache;let e=this.deps.getSharedFs();if(e)try{let t=await e.readFile(`/shared/CLAUDE.md`,{encoding:`utf-8`});this.globalMemoryCache=typeof t==`string`?t:new TextDecoder().decode(t)}catch{}return this.globalMemoryCache}async setGlobalMemory(e){let t=this.deps.getSharedFs();t&&(await t.writeFile(`/shared/CLAUDE.md`,e),this.globalMemoryCache=e,RT.info(`Global memory updated`))}async appendConeMemory(e,t){if(!this.deps.getSharedFs())return;let n=e.trim();if(!n)return;let r=t.memoryPath??dw,i=this.memoryWriteChain.then(async()=>{let e=this.deps.getSharedFs();if(!e)return;let i=``;try{let t=await e.readFile(r,{encoding:`utf-8`});i=typeof t==`string`?t:new TextDecoder().decode(t)}catch(t){if(!(t instanceof k)||t.code!==`ENOENT`)throw t;await e.mkdir(zT(r),{recursive:!0})}let a=`## Auto-extracted (${new Date().toISOString().slice(0,10)}, ${t.source})`,o=`${i.length===0||i.endsWith(`
1018
1018
  `)?``:`
1019
- `}\n${a}\n\n${n}\n`;await e.writeFile(r,i+o),PT.info(`Cone memory appended`,{source:t.source,length:n.length,path:r});try{await pw({vfs:e,memoryPath:r,model:t.model,apiKey:t.apiKey,headers:t.headers,signal:t.signal})}catch(e){PT.warn(`applyConeMemoryBudget threw — ignored`,{error:e instanceof Error?e.message:String(e)})}});this.memoryWriteChain=i.catch(e=>{PT.warn(`Cone memory append failed`,{error:e instanceof Error?e.message:String(e)})}),await i}async migrateLegacyConeMemory(){let e=this.deps.getSharedFs();if(!e)return;let t=`/workspace/.cone-memory-migrated`;try{await e.stat(t);return}catch{}let n=``;try{let t=await e.readFile(`/shared/CLAUDE.md`,{encoding:`utf-8`});n=typeof t==`string`?t:new TextDecoder().decode(t)}catch{}if(!/^## Auto-extracted[^\n]*$/m.test(n)){await this.writeMigrationSentinel(t);return}let r=n.split(`
1019
+ `}\n${a}\n\n${n}\n`;await e.writeFile(r,i+o),RT.info(`Cone memory appended`,{source:t.source,length:n.length,path:r});try{await _w({vfs:e,memoryPath:r,model:t.model,apiKey:t.apiKey,headers:t.headers,signal:t.signal})}catch(e){RT.warn(`applyConeMemoryBudget threw — ignored`,{error:e instanceof Error?e.message:String(e)})}});this.memoryWriteChain=i.catch(e=>{RT.warn(`Cone memory append failed`,{error:e instanceof Error?e.message:String(e)})}),await i}async migrateLegacyConeMemory(){let e=this.deps.getSharedFs();if(!e)return;let t=`/workspace/.cone-memory-migrated`;try{await e.stat(t);return}catch{}let n=``;try{let t=await e.readFile(`/shared/CLAUDE.md`,{encoding:`utf-8`});n=typeof t==`string`?t:new TextDecoder().decode(t)}catch{}if(!/^## Auto-extracted[^\n]*$/m.test(n)){await this.writeMigrationSentinel(t);return}let r=n.split(`
1020
1020
  `),i=[],a=[],o=0;for(;o<r.length;)if(/^## Auto-extracted/.test(r[o])){let e=o;for(o++;o<r.length&&!/^#{1,2}\s/.test(r[o]);)o++;i.push(r.slice(e,o).join(`
1021
1021
  `).trimEnd())}else a.push(r[o]),o++;if(i.length===0){await this.writeMigrationSentinel(t);return}let s=``;try{let t=await e.readFile(`/workspace/CLAUDE.md`,{encoding:`utf-8`});s=typeof t==`string`?t:new TextDecoder().decode(t)}catch(t){if(!(t instanceof k)||t.code!==`ENOENT`)throw t;await e.mkdir(`/workspace`,{recursive:!0})}let c=s.length===0||s.endsWith(`
1022
1022
  `)?``:`
@@ -1026,9 +1026,9 @@ ${e.map(e=>{let t=e.metadata.allowedTools?` Allowed tools: ${e.metadata.allowed
1026
1026
  `)+`
1027
1027
  `;await e.writeFile(`/workspace/CLAUDE.md`,l);let u=a.length;for(;u>0&&a[u-1]===``;)u--;let d=u===0?``:a.slice(0,u).join(`
1028
1028
  `)+`
1029
- `;await e.writeFile(`/shared/CLAUDE.md`,d),this.globalMemoryCache=d,await this.writeMigrationSentinel(t),PT.info(`Migrated legacy cone memory from /shared/CLAUDE.md to /workspace/CLAUDE.md`,{blockCount:i.length})}async writeMigrationSentinel(e){let t=this.deps.getSharedFs();if(t){try{await t.mkdir(`/workspace`,{recursive:!0})}catch{}await t.writeFile(e,`Migration completed at ${new Date().toISOString()}\n`)}}};function LT(e){return Date.UTC(e.y,e.m-1,e.d,e.h,e.i,e.s)}function RT(e,t){return e.y===t.y&&e.m===t.m&&e.d===t.d&&e.h===t.h&&e.i===t.i&&e.s===t.s}function zT(e,t){let n=new Date(Date.parse(e));if(isNaN(n))throw Error(`Invalid ISO8601 passed to timezone parser.`);let r=e.substring(9);return r.includes(`Z`)||r.includes(`+`)||r.includes(`-`)?UT(n.getUTCFullYear(),n.getUTCMonth()+1,n.getUTCDate(),n.getUTCHours(),n.getUTCMinutes(),n.getUTCSeconds(),`Etc/UTC`):UT(n.getFullYear(),n.getMonth()+1,n.getDate(),n.getHours(),n.getMinutes(),n.getSeconds(),t)}function BT(e,t,n){return VT(zT(e,t),n)}function VT(e,t){let n=new Date(LT(e)),r=HT(n,e.tz),i=LT(e)-LT(r),a=new Date(n.getTime()+i),o=HT(a,e.tz);if(RT(o,e)){let t=new Date(a.getTime()-36e5);return RT(HT(t,e.tz),e)?t:a}let s=new Date(a.getTime()+LT(e)-LT(o));if(RT(HT(s,e.tz),e))return s;if(t)throw Error(`Invalid date passed to fromTZ()`);return a.getTime()>s.getTime()?a:s}function HT(e,t){let n,r;try{n=new Intl.DateTimeFormat(`en-US`,{timeZone:t,year:`numeric`,month:`numeric`,day:`numeric`,hour:`numeric`,minute:`numeric`,second:`numeric`,hour12:!1}),r=n.formatToParts(e)}catch(e){let n=e instanceof Error?e.message:String(e);throw RangeError(`toTZ: Invalid timezone '${t}' or date. Please provide a valid IANA timezone (e.g., 'America/New_York', 'Europe/Stockholm'). Original error: ${n}`)}let i={year:0,month:0,day:0,hour:0,minute:0,second:0};for(let e of r)(e.type===`year`||e.type===`month`||e.type===`day`||e.type===`hour`||e.type===`minute`||e.type===`second`)&&(i[e.type]=parseInt(e.value,10));if(isNaN(i.year)||isNaN(i.month)||isNaN(i.day)||isNaN(i.hour)||isNaN(i.minute)||isNaN(i.second))throw Error(`toTZ: Failed to parse all date components from timezone '${t}'. This may indicate an invalid date or timezone configuration. Parsed components: ${JSON.stringify(i)}`);return i.hour===24&&(i.hour=0),{y:i.year,m:i.month,d:i.day,h:i.hour,i:i.minute,s:i.second,tz:t}}function UT(e,t,n,r,i,a,o){return{y:e,m:t,d:n,h:r,i,s:a,tz:o}}var WT=[1,2,4,8,16],GT=class{pattern;timezone;mode;alternativeWeekdays;sloppyRanges;second;minute;hour;day;month;dayOfWeek;year;lastDayOfMonth;lastWeekday;nearestWeekdays;starDOM;starDOW;starYear;useAndLogic;constructor(e,t,n){this.pattern=e,this.timezone=t,this.mode=n?.mode??`auto`,this.alternativeWeekdays=n?.alternativeWeekdays??!1,this.sloppyRanges=n?.sloppyRanges??!1,this.second=Array(60).fill(0),this.minute=Array(60).fill(0),this.hour=Array(24).fill(0),this.day=Array(31).fill(0),this.month=Array(12).fill(0),this.dayOfWeek=Array(7).fill(0),this.year=Array(1e4).fill(0),this.lastDayOfMonth=!1,this.lastWeekday=!1,this.nearestWeekdays=Array(31).fill(0),this.starDOM=!1,this.starDOW=!1,this.starYear=!1,this.useAndLogic=!1,this.parse()}parse(){if(!(typeof this.pattern==`string`||this.pattern instanceof String))throw TypeError(`CronPattern: Pattern has to be of type string.`);this.pattern.indexOf(`@`)>=0&&(this.pattern=this.handleNicknames(this.pattern).trim());let e=this.pattern.match(/\S+/g)||[``],t=e.length;if(e.length<5||e.length>7)throw TypeError(`CronPattern: invalid configuration format ('`+this.pattern+`'), exactly five, six, or seven space separated parts are required.`);if(this.mode!==`auto`){let e;switch(this.mode){case`5-part`:e=5;break;case`6-part`:e=6;break;case`7-part`:e=7;break;case`5-or-6-parts`:e=[5,6];break;case`6-or-7-parts`:e=[6,7];break;default:e=0}if(!(Array.isArray(e)?e.includes(t):t===e)){let n=Array.isArray(e)?e.join(` or `):e.toString();throw TypeError(`CronPattern: mode '${this.mode}' requires exactly ${n} parts, but pattern '${this.pattern}' has ${t} parts.`)}}if(e.length===5&&e.unshift(`0`),e.length===6&&e.push(`*`),e[3].toUpperCase()===`LW`?(this.lastWeekday=!0,e[3]=``):e[3].toUpperCase().indexOf(`L`)>=0&&(e[3]=e[3].replace(/L/gi,``),this.lastDayOfMonth=!0),e[3]==`*`&&(this.starDOM=!0),e[6]==`*`&&(this.starYear=!0),e[4].length>=3&&(e[4]=this.replaceAlphaMonths(e[4])),e[5].length>=3&&(e[5]=this.alternativeWeekdays?this.replaceAlphaDaysQuartz(e[5]):this.replaceAlphaDays(e[5])),e[5].startsWith(`+`)&&(this.useAndLogic=!0,e[5]=e[5].substring(1),e[5]===``))throw TypeError(`CronPattern: Day-of-week field cannot be empty after '+' modifier.`);switch(e[5]==`*`&&(this.starDOW=!0),this.pattern.indexOf(`?`)>=0&&(e[0]=e[0].replace(/\?/g,`*`),e[1]=e[1].replace(/\?/g,`*`),e[2]=e[2].replace(/\?/g,`*`),e[3]=e[3].replace(/\?/g,`*`),e[4]=e[4].replace(/\?/g,`*`),e[5]=e[5].replace(/\?/g,`*`),e[6]&&=e[6].replace(/\?/g,`*`)),this.mode){case`5-part`:e[0]=`0`,e[6]=`*`;break;case`6-part`:e[6]=`*`;break;case`5-or-6-parts`:e[6]=`*`}this.throwAtIllegalCharacters(e),this.partToArray(`second`,e[0],0,1),this.partToArray(`minute`,e[1],0,1),this.partToArray(`hour`,e[2],0,1),this.partToArray(`day`,e[3],-1,1),this.partToArray(`month`,e[4],-1,1);let n=this.alternativeWeekdays?-1:0;this.partToArray(`dayOfWeek`,e[5],n,63),this.partToArray(`year`,e[6],0,1),!this.alternativeWeekdays&&this.dayOfWeek[7]&&(this.dayOfWeek[0]=this.dayOfWeek[7])}partToArray(e,t,n,r){let i=this[e],a=e===`day`&&this.lastDayOfMonth,o=e===`day`&&this.lastWeekday;if(t===``&&!a&&!o)throw TypeError(`CronPattern: configuration entry `+e+` (`+t+`) is empty, check for trailing spaces.`);if(t===`*`)return i.fill(r);let s=t.split(`,`);if(s.length>1)for(let t=0;t<s.length;t++)this.partToArray(e,s[t],n,r);else t.indexOf(`-`)!==-1&&t.indexOf(`/`)!==-1?this.handleRangeWithStepping(t,e,n,r):t.indexOf(`-`)===-1?t.indexOf(`/`)===-1?t!==``&&this.handleNumber(t,e,n,r):this.handleStepping(t,e,n,r):this.handleRange(t,e,n,r)}throwAtIllegalCharacters(e){for(let t=0;t<e.length;t++)if((t===3?/[^/*0-9,\-WwLl]+/:t===5?/[^/*0-9,\-#Ll]+/:/[^/*0-9,\-]+/).test(e[t]))throw TypeError(`CronPattern: configuration entry `+t+` (`+e[t]+`) contains illegal characters.`)}handleNumber(e,t,n,r){let i=this.extractNth(e,t),a=e.toUpperCase().includes(`W`);if(t!==`day`&&a)throw TypeError(`CronPattern: Nearest weekday modifier (W) only allowed in day-of-month.`);a&&(t=`nearestWeekdays`);let o=parseInt(i[0],10)+n;if(isNaN(o))throw TypeError(`CronPattern: `+t+` is not a number: '`+e+`'`);this.setPart(t,o,i[1]||r)}setPart(e,t,n){if(!Object.prototype.hasOwnProperty.call(this,e))throw TypeError(`CronPattern: Invalid part specified: `+e);if(e===`dayOfWeek`){if(t===7&&(t=0),t<0||t>6)throw RangeError(`CronPattern: Invalid value for dayOfWeek: `+t);this.setNthWeekdayOfMonth(t,n);return}if(e===`second`||e===`minute`){if(t<0||t>=60)throw RangeError(`CronPattern: Invalid value for `+e+`: `+t)}else if(e===`hour`){if(t<0||t>=24)throw RangeError(`CronPattern: Invalid value for `+e+`: `+t)}else if(e===`day`||e===`nearestWeekdays`){if(t<0||t>=31)throw RangeError(`CronPattern: Invalid value for `+e+`: `+t)}else if(e===`month`){if(t<0||t>=12)throw RangeError(`CronPattern: Invalid value for `+e+`: `+t)}else if(e===`year`&&(t<1||t>=1e4))throw RangeError(`CronPattern: Invalid value for `+e+`: `+t+` (supported range: 1-9999)`);this[e][t]=n}validateNotNaN(e,t){if(isNaN(e))throw TypeError(t)}validateRange(e,t,n,r,i){if(e>t)throw TypeError(`CronPattern: From value is larger than to value: '`+i+`'`);if(n!==void 0){if(n===0)throw TypeError(`CronPattern: Syntax error, illegal stepping: 0`);if(n>this[r].length)throw TypeError(`CronPattern: Syntax error, steps cannot be greater than maximum value of part (`+this[r].length+`)`)}}handleRangeWithStepping(e,t,n,r){if(e.toUpperCase().includes(`W`))throw TypeError(`CronPattern: Syntax error, W is not allowed in ranges with stepping.`);let i=this.extractNth(e,t),a=i[0].match(/^(\d+)-(\d+)\/(\d+)$/);if(a===null)throw TypeError(`CronPattern: Syntax error, illegal range with stepping: '`+e+`'`);let[,o,s,c]=a,l=parseInt(o,10)+n,u=parseInt(s,10)+n,d=parseInt(c,10);this.validateNotNaN(l,`CronPattern: Syntax error, illegal lower range (NaN)`),this.validateNotNaN(u,`CronPattern: Syntax error, illegal upper range (NaN)`),this.validateNotNaN(d,`CronPattern: Syntax error, illegal stepping: (NaN)`),this.validateRange(l,u,d,t,e);for(let e=l;e<=u;e+=d)this.setPart(t,e,i[1]||r)}extractNth(e,t){let n=e,r;if(n.includes(`#`)){if(t!==`dayOfWeek`)throw Error(`CronPattern: nth (#) only allowed in day-of-week field`);r=n.split(`#`)[1],n=n.split(`#`)[0]}else if(n.toUpperCase().endsWith(`L`)){if(t!==`dayOfWeek`)throw Error(`CronPattern: L modifier only allowed in day-of-week field (use L alone for day-of-month)`);r=`L`,n=n.slice(0,-1)}return[n,r]}handleRange(e,t,n,r){if(e.toUpperCase().includes(`W`))throw TypeError(`CronPattern: Syntax error, W is not allowed in a range.`);let i=this.extractNth(e,t),a=i[0].split(`-`);if(a.length!==2)throw TypeError(`CronPattern: Syntax error, illegal range: '`+e+`'`);let o=parseInt(a[0],10)+n,s=parseInt(a[1],10)+n;this.validateNotNaN(o,`CronPattern: Syntax error, illegal lower range (NaN)`),this.validateNotNaN(s,`CronPattern: Syntax error, illegal upper range (NaN)`),this.validateRange(o,s,void 0,t,e);for(let e=o;e<=s;e++)this.setPart(t,e,i[1]||r)}handleStepping(e,t,n,r){if(e.toUpperCase().includes(`W`))throw TypeError(`CronPattern: Syntax error, W is not allowed in parts with stepping.`);let i=this.extractNth(e,t),a=i[0].split(`/`);if(a.length!==2)throw TypeError(`CronPattern: Syntax error, illegal stepping: '`+e+`'`);if(this.sloppyRanges)a[0]===``&&(a[0]=`*`);else{if(a[0]===``)throw TypeError(`CronPattern: Syntax error, stepping with missing prefix ('`+e+`') is not allowed. Use wildcard (*/step) or range (min-max/step) instead.`);if(a[0]!==`*`)throw TypeError(`CronPattern: Syntax error, stepping with numeric prefix ('`+e+`') is not allowed. Use wildcard (*/step) or range (min-max/step) instead.`)}let o=0;a[0]!==`*`&&(o=parseInt(a[0],10)+n);let s=parseInt(a[1],10);this.validateNotNaN(s,`CronPattern: Syntax error, illegal stepping: (NaN)`),this.validateRange(0,this[t].length-1,s,t,e);for(let e=o;e<this[t].length;e+=s)this.setPart(t,e,i[1]||r)}replaceAlphaDays(e){return e.replace(/-sun/gi,`-7`).replace(/sun/gi,`0`).replace(/mon/gi,`1`).replace(/tue/gi,`2`).replace(/wed/gi,`3`).replace(/thu/gi,`4`).replace(/fri/gi,`5`).replace(/sat/gi,`6`)}replaceAlphaDaysQuartz(e){return e.replace(/sun/gi,`1`).replace(/mon/gi,`2`).replace(/tue/gi,`3`).replace(/wed/gi,`4`).replace(/thu/gi,`5`).replace(/fri/gi,`6`).replace(/sat/gi,`7`)}replaceAlphaMonths(e){return e.replace(/jan/gi,`1`).replace(/feb/gi,`2`).replace(/mar/gi,`3`).replace(/apr/gi,`4`).replace(/may/gi,`5`).replace(/jun/gi,`6`).replace(/jul/gi,`7`).replace(/aug/gi,`8`).replace(/sep/gi,`9`).replace(/oct/gi,`10`).replace(/nov/gi,`11`).replace(/dec/gi,`12`)}handleNicknames(e){let t=e.trim().toLowerCase();if(t===`@yearly`||t===`@annually`)return`0 0 1 1 *`;if(t===`@monthly`)return`0 0 1 * *`;if(t===`@weekly`)return`0 0 * * 0`;if(t===`@daily`||t===`@midnight`)return`0 0 * * *`;if(t===`@hourly`)return`0 * * * *`;if(t===`@reboot`)throw TypeError(`CronPattern: @reboot is not supported in this environment. This is an event-based trigger that requires system startup detection.`);return e}setNthWeekdayOfMonth(e,t){if(typeof t!=`number`&&t.toUpperCase()===`L`)this.dayOfWeek[e]=this.dayOfWeek[e]|32;else if(t===63)this.dayOfWeek[e]=63;else if(t<6&&t>0)this.dayOfWeek[e]=this.dayOfWeek[e]|WT[t-1];else throw TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${t}, Type: ${typeof t}`)}},KT=[31,28,31,30,31,30,31,31,30,31,30,31],q=[[`month`,`year`,0],[`day`,`month`,-1],[`hour`,`day`,0],[`minute`,`hour`,0],[`second`,`minute`,0]],J=class e{tz;ms;second;minute;hour;day;month;year;constructor(t,n){if(this.tz=n,t&&t instanceof Date){if(!isNaN(t))this.fromDate(t);else throw TypeError(`CronDate: Invalid date passed to CronDate constructor`)}else if(t==null)this.fromDate(new Date);else if(t&&typeof t==`string`)this.fromString(t);else if(t instanceof e)this.fromCronDate(t);else throw TypeError(`CronDate: Invalid type (`+typeof t+`) passed to CronDate constructor`)}getLastDayOfMonth(e,t){return t===1?new Date(Date.UTC(e,t+1,0)).getUTCDate():KT[t]}getLastWeekday(e,t){let n=this.getLastDayOfMonth(e,t),r=new Date(Date.UTC(e,t,n)).getUTCDay();return r===0?n-2:r===6?n-1:n}getNearestWeekday(e,t,n){let r=this.getLastDayOfMonth(e,t);if(n>r)return-1;let i=new Date(Date.UTC(e,t,n)).getUTCDay();return i===0?n===r?n-2:n+1:i===6?n===1?n+2:n-1:n}isNthWeekdayOfMonth(e,t,n,r){let i=new Date(Date.UTC(e,t,n)).getUTCDay(),a=0;for(let r=1;r<=n;r++)new Date(Date.UTC(e,t,r)).getUTCDay()===i&&a++;if(r&63&&WT[a-1]&r)return!0;if(r&32){let r=this.getLastDayOfMonth(e,t);for(let a=n+1;a<=r;a++)if(new Date(Date.UTC(e,t,a)).getUTCDay()===i)return!1;return!0}return!1}fromDate(e){if(this.tz!==void 0){if(typeof this.tz==`number`)this.ms=e.getUTCMilliseconds(),this.second=e.getUTCSeconds(),this.minute=e.getUTCMinutes()+this.tz,this.hour=e.getUTCHours(),this.day=e.getUTCDate(),this.month=e.getUTCMonth(),this.year=e.getUTCFullYear(),this.apply();else try{let t=HT(e,this.tz);this.ms=e.getMilliseconds(),this.second=t.s,this.minute=t.i,this.hour=t.h,this.day=t.d,this.month=t.m-1,this.year=t.y}catch(e){let t=e instanceof Error?e.message:String(e);throw TypeError(`CronDate: Failed to convert date to timezone '${this.tz}'. This may happen with invalid timezone names or dates. Original error: ${t}`)}}else this.ms=e.getMilliseconds(),this.second=e.getSeconds(),this.minute=e.getMinutes(),this.hour=e.getHours(),this.day=e.getDate(),this.month=e.getMonth(),this.year=e.getFullYear()}fromCronDate(e){this.tz=e.tz,this.year=e.year,this.month=e.month,this.day=e.day,this.hour=e.hour,this.minute=e.minute,this.second=e.second,this.ms=e.ms}apply(){if(this.month>11||this.month<0||this.day>KT[this.month]||this.day<1||this.hour>59||this.minute>59||this.second>59||this.hour<0||this.minute<0||this.second<0){let e=new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms));return this.ms=e.getUTCMilliseconds(),this.second=e.getUTCSeconds(),this.minute=e.getUTCMinutes(),this.hour=e.getUTCHours(),this.day=e.getUTCDate(),this.month=e.getUTCMonth(),this.year=e.getUTCFullYear(),!0}return!1}fromString(e){if(typeof this.tz==`number`){let t=BT(e);this.ms=t.getUTCMilliseconds(),this.second=t.getUTCSeconds(),this.minute=t.getUTCMinutes(),this.hour=t.getUTCHours(),this.day=t.getUTCDate(),this.month=t.getUTCMonth(),this.year=t.getUTCFullYear(),this.apply()}else return this.fromDate(BT(e,this.tz))}findNext(e,t,n,r){return this._findMatch(e,t,n,r,1)}_findMatch(e,t,n,r,i){let a=this[t],o;n.lastDayOfMonth&&(o=this.getLastDayOfMonth(this.year,this.month));let s=!n.starDOW&&t==`day`?new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay():void 0,c=this[t]+r,l=i===1?e=>e<n[t].length:e=>e>=0;for(let u=c;l(u);u+=i){let i=n[t][u];if(t===`day`&&!i){for(let e=0;e<n.nearestWeekdays.length;e++)if(n.nearestWeekdays[e]){let t=this.getNearestWeekday(this.year,this.month,e-r);if(t===-1)continue;if(t===u-r){i=1;break}}}if(t===`day`&&n.lastWeekday){let e=this.getLastWeekday(this.year,this.month);u-r===e&&(i=1)}if(t===`day`&&n.lastDayOfMonth&&u-r==o&&(i=1),t===`day`&&!n.starDOW){let t=n.dayOfWeek[(s+(u-r-1))%7];if(t&&t&63)t=+!!this.isNthWeekdayOfMonth(this.year,this.month,u-r,t);else if(t)throw Error(`CronDate: Invalid value for dayOfWeek encountered. ${t}`);n.useAndLogic?i&&=t:!e.domAndDow&&!n.starDOM?i||=t:i&&=t}if(i)return this[t]=u-r,a===this[t]?1:2}return 3}recurse(e,t,n){if(n===0&&!e.starYear){if(this.year>=0&&this.year<e.year.length&&e.year[this.year]===0){let t=-1;for(let n=this.year+1;n<e.year.length&&n<1e4;n++)if(e.year[n]===1){t=n;break}if(t===-1)return null;this.year=t,this.month=0,this.day=1,this.hour=0,this.minute=0,this.second=0,this.ms=0}if(this.year>=1e4)return null}let r=this.findNext(t,q[n][0],e,q[n][2]);if(r>1){let i=n+1;for(;i<q.length;)this[q[i][0]]=-q[i][2],i++;if(r===3){if(this[q[n][1]]++,this[q[n][0]]=-q[n][2],this.apply(),n===0&&!e.starYear){for(;this.year>=0&&this.year<e.year.length&&e.year[this.year]===0&&this.year<1e4;)this.year++;if(this.year>=1e4||this.year>=e.year.length)return null}return this.recurse(e,t,0)}if(this.apply())return this.recurse(e,t,n-1)}return n+=1,n>=q.length?this:(e.starYear?this.year>=3e3:this.year>=1e4)?null:this.recurse(e,t,n)}increment(e,t,n){return this.second+=t.interval!==void 0&&t.interval>1&&n?t.interval:1,this.ms=0,this.apply(),this.recurse(e,t,0)}decrement(e,t){return this.second-=t.interval!==void 0&&t.interval>1?t.interval:1,this.ms=0,this.apply(),this.recurseBackward(e,t,0,0)}recurseBackward(e,t,n,r=0){if(r>1e4)return null;if(n===0&&!e.starYear){if(this.year>=0&&this.year<e.year.length&&e.year[this.year]===0){let t=-1;for(let n=this.year-1;n>=0;n--)if(e.year[n]===1){t=n;break}if(t===-1)return null;this.year=t,this.month=11,this.day=31,this.hour=23,this.minute=59,this.second=59,this.ms=0}if(this.year<0)return null}let i=this.findPrevious(t,q[n][0],e,q[n][2]);if(i>1){let a=n+1;for(;a<q.length;){let t=q[a][0],n=q[a][2],r=this.getMaxPatternValue(t,e,n);this[t]=r,a++}if(i===3){if(this[q[n][1]]--,n===0){let e=this.getLastDayOfMonth(this.year,this.month);this.day>e&&(this.day=e)}if(n===1){if(this.day<=0)this.day=1;else{let e=this.year,t=this.month;for(;t<0;)t+=12,e--;for(;t>11;)t-=12,e++;let n=t===1?new Date(Date.UTC(e,t+1,0)).getUTCDate():KT[t];this.day>n&&(this.day=n)}}this.apply();let i=q[n][0],a=q[n][2],o=this.getMaxPatternValue(i,e,a);if(i===`day`){let e=this.getLastDayOfMonth(this.year,this.month);this[i]=Math.min(o,e)}else this[i]=o;if(this.apply(),n===0){let t=q[1][2],n=this.getMaxPatternValue(`day`,e,t),r=this.getLastDayOfMonth(this.year,this.month),i=Math.min(n,r);i!==this.day&&(this.day=i,this.hour=this.getMaxPatternValue(`hour`,e,q[2][2]),this.minute=this.getMaxPatternValue(`minute`,e,q[3][2]),this.second=this.getMaxPatternValue(`second`,e,q[4][2]))}if(n===0&&!e.starYear){for(;this.year>=0&&this.year<e.year.length&&e.year[this.year]===0;)this.year--;if(this.year<0)return null}return this.recurseBackward(e,t,0,r+1)}if(this.apply())return this.recurseBackward(e,t,n-1,r+1)}return n+=1,n>=q.length?this:this.year<0?null:this.recurseBackward(e,t,n,r+1)}getMaxPatternValue(e,t,n){if(e===`day`&&t.lastDayOfMonth||e===`day`&&!t.starDOW)return this.getLastDayOfMonth(this.year,this.month);for(let r=t[e].length-1;r>=0;r--)if(t[e][r])return r-n;return t[e].length-1-n}findPrevious(e,t,n,r){return this._findMatch(e,t,n,r,-1)}getDate(e){return e||this.tz===void 0?new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms):typeof this.tz==`number`?new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute-this.tz,this.second,this.ms)):VT(UT(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}match(e,t){if(!e.starYear&&(this.year<0||this.year>=e.year.length||e.year[this.year]===0))return!1;for(let n=0;n<q.length;n++){let r=q[n][0],i=q[n][2],a=this[r];if(a+i<0||a+i>=e[r].length)return!1;let o=e[r][a+i];if(r===`day`){if(!o){for(let t=0;t<e.nearestWeekdays.length;t++)if(e.nearestWeekdays[t]){let e=this.getNearestWeekday(this.year,this.month,t-i);if(e!==-1&&e===a){o=1;break}}}if(e.lastWeekday&&a===this.getLastWeekday(this.year,this.month)&&(o=1),e.lastDayOfMonth&&a===this.getLastDayOfMonth(this.year,this.month)&&(o=1),!e.starDOW){let n=new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay(),r=e.dayOfWeek[(n+(a-1))%7];r&&r&63&&(r=+!!this.isNthWeekdayOfMonth(this.year,this.month,a,r)),e.useAndLogic?o&&=r:!t.domAndDow&&!e.starDOM?o||=r:o&&=r}}if(!o)return!1}return!0}};function qT(e){if(e===void 0&&(e={}),delete e.name,e.legacyMode!==void 0&&e.domAndDow===void 0?e.domAndDow=!e.legacyMode:e.domAndDow===void 0&&(e.domAndDow=!1),e.legacyMode=!e.domAndDow,e.paused=e.paused!==void 0&&e.paused,e.maxRuns=e.maxRuns===void 0?1/0:e.maxRuns,e.catch=e.catch!==void 0&&e.catch,e.interval=e.interval===void 0?0:parseInt(e.interval.toString(),10),e.utcOffset=e.utcOffset===void 0?void 0:parseInt(e.utcOffset.toString(),10),e.dayOffset=e.dayOffset===void 0?0:parseInt(e.dayOffset.toString(),10),e.unref=e.unref!==void 0&&e.unref,e.mode=e.mode===void 0?`auto`:e.mode,e.alternativeWeekdays=e.alternativeWeekdays!==void 0&&e.alternativeWeekdays,e.sloppyRanges=e.sloppyRanges!==void 0&&e.sloppyRanges,![`auto`,`5-part`,`6-part`,`7-part`,`5-or-6-parts`,`6-or-7-parts`].includes(e.mode))throw Error(`CronOptions: mode must be one of 'auto', '5-part', '6-part', '7-part', '5-or-6-parts', or '6-or-7-parts'.`);if(e.startAt&&(e.startAt=new J(e.startAt,e.timezone)),e.stopAt&&(e.stopAt=new J(e.stopAt,e.timezone)),e.interval!==null){if(isNaN(e.interval))throw Error(`CronOptions: Supplied value for interval is not a number`);if(e.interval<0)throw Error(`CronOptions: Supplied value for interval can not be negative`)}if(e.utcOffset!==void 0){if(isNaN(e.utcOffset))throw Error(`CronOptions: Invalid value passed for utcOffset, should be number representing minutes offset from UTC.`);if(e.utcOffset<-870||e.utcOffset>870)throw Error(`CronOptions: utcOffset out of bounds.`);if(e.utcOffset!==void 0&&e.timezone)throw Error(`CronOptions: Combining 'utcOffset' with 'timezone' is not allowed.`)}if(e.unref!==!0&&e.unref!==!1)throw Error(`CronOptions: Unref should be either true, false or undefined(false).`);if(e.dayOffset!==void 0&&e.dayOffset!==0&&isNaN(e.dayOffset))throw Error(`CronOptions: Invalid value passed for dayOffset, should be a number representing days to offset.`);return e}function JT(e){return Object.prototype.toString.call(e)===`[object Function]`||typeof e==`function`||e instanceof Function}function YT(e){return JT(e)}function XT(e){typeof Deno<`u`&&typeof Deno.unrefTimer<`u`?Deno.unrefTimer(e):e&&typeof e.unref<`u`&&e.unref()}var ZT=3e4,QT=[],$T=class{name;options;_states;fn;getTz(){return this.options.timezone||this.options.utcOffset}applyDayOffset(e){if(this.options.dayOffset!==void 0&&this.options.dayOffset!==0){let t=this.options.dayOffset*24*60*60*1e3;return new Date(e.getTime()+t)}return e}constructor(e,t,n){let r,i;if(JT(t))i=t;else if(typeof t==`object`)r=t;else if(t!==void 0)throw Error(`Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).`);if(JT(n))i=n;else if(typeof n==`object`)r=n;else if(n!==void 0)throw Error(`Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).`);if(this.name=r?.name,this.options=qT(r),this._states={kill:!1,blocking:!1,previousRun:void 0,currentRun:void 0,once:void 0,currentTimeout:void 0,maxRuns:r?r.maxRuns:void 0,paused:r?r.paused:!1,pattern:new GT(`* * * * *`,void 0,{mode:`auto`})},e&&(e instanceof Date||typeof e==`string`&&e.indexOf(`:`)>0)?this._states.once=new J(e,this.getTz()):this._states.pattern=new GT(e,this.options.timezone,{mode:this.options.mode,alternativeWeekdays:this.options.alternativeWeekdays,sloppyRanges:this.options.sloppyRanges}),this.name){if(QT.find(e=>e.name===this.name))throw Error(`Cron: Tried to initialize new named job '`+this.name+`', but name already taken.`);QT.push(this)}return i!==void 0&&YT(i)&&(this.fn=i,this.schedule()),this}nextRun(e){let t=this._next(e);return t?this.applyDayOffset(t.getDate(!1)):null}nextRuns(e,t){this._states.maxRuns!==void 0&&e>this._states.maxRuns&&(e=this._states.maxRuns);let n=t||this._states.currentRun||void 0;return this._enumerateRuns(e,n,`next`)}previousRuns(e,t){return this._enumerateRuns(e,t||void 0,`previous`)}_enumerateRuns(e,t,n){let r=[],i=t?new J(t,this.getTz()):null,a=n===`next`?this._next:this._previous;for(;e--;){let e=a.call(this,i);if(!e)break;let t=e.getDate(!1);r.push(this.applyDayOffset(t)),i=e}return r}match(e){if(this._states.once){let t=new J(e,this.getTz());t.ms=0;let n=new J(this._states.once,this.getTz());return n.ms=0,t.getTime()===n.getTime()}let t=new J(e,this.getTz());return t.ms=0,t.match(this._states.pattern,this.options)}getPattern(){if(!this._states.once)return this._states.pattern?this._states.pattern.pattern:void 0}getOnce(){return this._states.once?this._states.once.getDate():null}isRunning(){let e=this.nextRun(this._states.currentRun),t=!this._states.paused,n=this.fn!==void 0,r=!this._states.kill;return t&&n&&r&&e!==null}isStopped(){return this._states.kill}isBusy(){return this._states.blocking}currentRun(){return this._states.currentRun?this._states.currentRun.getDate():null}previousRun(){return this._states.previousRun?this._states.previousRun.getDate():null}msToNext(e){let t=this._next(e);return t?e instanceof J||e instanceof Date?t.getTime()-e.getTime():t.getTime()-new J(e).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let e=QT.indexOf(this);e>=0&&QT.splice(e,1)}pause(){return this._states.paused=!0,!this._states.kill}resume(){return this._states.paused=!1,!this._states.kill}schedule(e){if(e&&this.fn)throw Error(`Cron: It is not allowed to schedule two functions using the same Croner instance.`);e&&(this.fn=e);let t=this.msToNext(),n=this.nextRun(this._states.currentRun);return t==null||isNaN(t)||n===null?this:(t>ZT&&(t=ZT),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(n),t),this._states.currentTimeout&&this.options.unref&&XT(this._states.currentTimeout),this)}async _trigger(e){this._states.blocking=!0,this._states.currentRun=new J(void 0,this.getTz());try{if(this.options.catch)try{this.fn!==void 0&&await this.fn(this,this.options.context)}catch(e){if(JT(this.options.catch))try{this.options.catch(e,this)}catch{}}else this.fn!==void 0&&await this.fn(this,this.options.context)}finally{this._states.previousRun=new J(e,this.getTz()),this._states.blocking=!1}}async trigger(){await this._trigger()}runsLeft(){return this._states.maxRuns}_checkTrigger(e){let t=new Date,n=!this._states.paused&&t.getTime()>=e.getTime(),r=this._states.blocking&&this.options.protect;n&&!r?(this._states.maxRuns!==void 0&&this._states.maxRuns--,this._trigger()):n&&r&&JT(this.options.protect)&&setTimeout(()=>this.options.protect(this),0),this.schedule()}_next(e){let t=!!(e||this._states.currentRun),n=!1;!e&&this.options.startAt&&this.options.interval&&([e,t]=this._calculatePreviousRun(e,t),n=!e),e=new J(e,this.getTz()),this.options.startAt&&e&&e.getTime()<this.options.startAt.getTime()&&(e=this.options.startAt);let r=this._states.once||new J(e,this.getTz());return!n&&r!==this._states.once&&(r=r.increment(this._states.pattern,this.options,t)),this._states.once&&this._states.once.getTime()<=e.getTime()||r===null||this._states.maxRuns!==void 0&&this._states.maxRuns<=0||this._states.kill||this.options.stopAt&&r.getTime()>=this.options.stopAt.getTime()?null:r}_previous(e){let t=new J(e,this.getTz());this.options.stopAt&&t.getTime()>this.options.stopAt.getTime()&&(t=this.options.stopAt);let n=new J(t,this.getTz());return this._states.once?this._states.once.getTime()<t.getTime()?this._states.once:null:(n=n.decrement(this._states.pattern,this.options),n===null||this.options.startAt&&n.getTime()<this.options.startAt.getTime()?null:n)}_calculatePreviousRun(e,t){let n=new J(void 0,this.getTz()),r=e;if(this.options.startAt.getTime()<=n.getTime()){r=this.options.startAt;let e=r.getTime()+this.options.interval*1e3;for(;e<=n.getTime();)r=new J(r,this.getTz()).increment(this._states.pattern,this.options,!0),e=r.getTime()+this.options.interval*1e3;t=!0}return r===null&&(r=void 0),[r,t]}};function eE(e,t){try{return new $T(e.trim(),{domAndDow:!0}).nextRun(t)??null}catch{return null}}var tE=e({FORWARDABLE_TO_LEADER:()=>nE,LickManager:()=>aE,buildActiveLicksError:()=>cE,getLickManager:()=>uE,lickScoopMatches:()=>oE,lickTargetCandidates:()=>sE});const Y=_(`lick-manager`),nE=new Set([`navigate`,`discovery`]);function rE(e){if(typeof e!=`object`||!e)return null;let t=e;return typeof t.verb!=`string`||typeof t.target!=`string`?null:oe({verb:t.verb,target:t.target,branch:typeof t.branch==`string`?t.branch:void 0,path:typeof t.path==`string`?t.path:void 0,instruction:typeof t.instruction==`string`?t.instruction:void 0})}function iE(e){return!e.discoveryKind&&!e.discoveryUrl&&!e.discoveryOrigin?null:Ii({origin:e.discoveryOrigin,kind:e.discoveryKind,url:e.discoveryUrl})}var aE=class{webhooks=new Map;crontasks=new Map;cronInterval=null;eventHandler=null;forwarder=null;seenNavigateFingerprints=new Set;seenDiscoveryFingerprints=new Set;unitRoster=null;discoveryIgnore=null;async init(){await Db();let e=await Ab();for(let t of e)this.webhooks.set(t.id,t);Y.info(`Loaded webhooks`,{count:this.webhooks.size});let t=await Pb();for(let e of t)this.crontasks.set(e.id,e);Y.info(`Loaded crontasks`,{count:this.crontasks.size}),await this.reconcileOrphans(),this.cronInterval=setInterval(()=>this.runCronScheduler(),6e4),Y.info(`Cron scheduler started`)}setUnitRosterProvider(e){this.unitRoster=e}resolveLickTarget(e){let t=this.unitRoster?.();return t?t.some(t=>oE(e,t.name,t.folder))?{status:`resolved`}:{status:`unresolved`,candidates:sE(t)}:{status:`unverifiable`}}setDiscoveryIgnore(e){this.discoveryIgnore=e}isOrphanedLick(e){return e?this.resolveLickTarget(e).status===`unresolved`:!1}async reconcileOrphans(){if(this.unitRoster){for(let e of Array.from(this.webhooks.values()))if(this.isOrphanedLick(e.scoop)){Y.warn(`Removing orphaned webhook at init; target scoop no longer exists`,{id:e.id,name:e.name,scoop:e.scoop}),this.webhooks.delete(e.id);try{await jb(e.id)}catch(t){Y.warn(`Failed to delete orphaned webhook from DB`,{id:e.id,error:t instanceof Error?t.message:String(t)})}}for(let e of Array.from(this.crontasks.values()))if(this.isOrphanedLick(e.scoop)){Y.warn(`Removing orphaned cron task at init; target scoop no longer exists`,{id:e.id,name:e.name,scoop:e.scoop}),this.crontasks.delete(e.id);try{await Fb(e.id)}catch(t){Y.warn(`Failed to delete orphaned cron task from DB`,{id:e.id,error:t instanceof Error?t.message:String(t)})}}}}dispose(){this.cronInterval&&=(clearInterval(this.cronInterval),null)}setEventHandler(e){this.eventHandler=e}setForwarder(e){this.forwarder=e}dispatch(e){if(!(e.type===`discovery`&&this.shouldSuppressDiscovery(e))){if(this.forwarder&&nE.has(e.type)){this.forwarder(e);return}this.eventHandler?.(e)}}handleForwardedEvent(e){e.type===`discovery`&&this.shouldSuppressDiscovery(e)||this.isDuplicateFingerprint(e)||this.eventHandler?.(e)}emitEvent(e){e.type===`discovery`&&this.shouldSuppressDiscovery(e)||this.isDuplicateFingerprint(e)||(Y.info(`External lick event`,{type:e.type,target:e.targetScoop}),this.dispatch(e))}isDuplicateFingerprint(e){let t=null,n,r;if(e.type===`navigate`)t=rE(e.body),n=this.seenNavigateFingerprints,r=`navigate`;else if(e.type===`discovery`)t=iE(e),n=this.seenDiscoveryFingerprints,r=`discovery`;else return!1;return t===null?!1:n.has(t)?(Y.debug(`Suppressing duplicate ${r} lick`,{fingerprint:t}),!0):(n.add(t),!1)}shouldSuppressDiscovery(e){return e.discoverySource===`live-navigation`?this.discoveryIgnore?.(e)?(Y.debug(`Suppressing ignored llms.txt discovery`,{origin:e.discoveryOrigin}),!0):!1:(Y.debug(`Suppressing discovery without live-navigation provenance`),!0)}async createWebhook(e,t,n){let r=this.generateId(),i={id:r,name:e,createdAt:new Date().toISOString(),filter:n,scoop:t};return n&&this.compileFilter(n,!0),this.webhooks.set(r,i),await Ob(i),Y.info(`Webhook created`,{id:r,name:e,scoop:t}),i}async deleteWebhook(e){return this.webhooks.has(e)?(this.webhooks.delete(e),await jb(e),Y.info(`Webhook deleted`,{id:e}),!0):await kb(e)!==null&&(await jb(e),Y.info(`Webhook deleted`,{id:e}),!0)}listWebhooks(){return Array.from(this.webhooks.values())}getWebhook(e){return this.webhooks.get(e)}handleWebhookEvent(e,t,n){let r=this.webhooks.get(e);if(!r)return Y.warn(`Webhook not found`,{webhookId:e}),`unknown-webhook`;if(this.isOrphanedLick(r.scoop))return Y.warn(`Webhook target scoop not found — dropping delivery`,{webhookId:e,name:r.name,scoop:r.scoop}),`unresolved-target`;let i={type:`webhook`,webhookId:e,webhookName:r.name,targetScoop:r.scoop,timestamp:new Date().toISOString(),headers:t,body:n};if(r.filter)try{let t=this.compileFilter(r.filter,!0)(i);if(t===!1)return Y.debug(`Webhook event dropped by filter`,{webhookId:e,name:r.name}),`filtered`;typeof t==`object`&&t&&(i=t)}catch(t){Y.error(`Webhook filter error`,{webhookId:e,error:t instanceof Error?t.message:String(t)})}return Y.info(`Webhook event received`,{webhookId:e,name:r.name,targetScoop:r.scoop}),this.dispatch(i),`delivered`}async createCronTask(e,t,n,r){let i=eE(t,new Date);if(!i)throw Error(`Invalid cron expression`);r&&this.compileFilter(r,!1);let a=this.generateId(),o={id:a,name:e,cron:t,scoop:n,filter:r,nextRun:i.toISOString(),lastRun:null,status:`active`,createdAt:new Date().toISOString()};return this.crontasks.set(a,o),await Mb(o),Y.info(`Cron task created`,{id:a,name:e,cron:t,scoop:n}),o}async deleteCronTask(e){return this.crontasks.has(e)?(this.crontasks.delete(e),await Fb(e),Y.info(`Cron task deleted`,{id:e}),!0):await Nb(e)!==null&&(await Fb(e),Y.info(`Cron task deleted`,{id:e}),!0)}listCronTasks(){return Array.from(this.crontasks.values())}getCronTask(e){return this.crontasks.get(e)}getLicksForScoop(e,t){return{webhooks:Array.from(this.webhooks.values()).filter(n=>oE(n.scoop,e,t)),cronTasks:Array.from(this.crontasks.values()).filter(n=>oE(n.scoop,e,t))}}async getLicksForScoopFromDb(e,t){let[n,r]=await Promise.all([Ab(),Pb()]);return{webhooks:n.filter(n=>oE(n.scoop,e,t)),cronTasks:r.filter(n=>oE(n.scoop,e,t))}}async deleteIfOrphanedCron(e){if(!this.isOrphanedLick(e.scoop))return!1;Y.warn(`Deleting orphaned cron task; target scoop no longer exists`,{id:e.id,name:e.name,scoop:e.scoop}),this.crontasks.delete(e.id);try{await Fb(e.id)}catch(t){Y.warn(`Failed to delete orphaned cron task from DB`,{id:e.id,error:t instanceof Error?t.message:String(t)})}return!0}async runCronScheduler(){let e=new Date;for(let t of this.crontasks.values())await this.deleteIfOrphanedCron(t)||t.status===`active`&&t.nextRun&&(new Date(t.nextRun)>e||await this.runDueCronTask(t,e))}async runDueCronTask(e,t){let n={time:t.toISOString()};if(e.filter)try{let r=this.compileFilter(e.filter,!1)(null);if(r===!1){Y.debug(`Cron task skipped by filter`,{id:e.id,name:e.name}),e.nextRun=eE(e.cron,t)?.toISOString()??null,e.lastRun=t.toISOString(),await Mb(e);return}typeof r==`object`&&r&&(n=r)}catch(t){Y.error(`Cron filter error`,{id:e.id,error:t instanceof Error?t.message:String(t)})}let r={type:`cron`,cronId:e.id,cronName:e.name,targetScoop:e.scoop,timestamp:t.toISOString(),body:n};Y.info(`Cron task running`,{id:e.id,name:e.name}),this.dispatch(r),e.nextRun=eE(e.cron,t)?.toISOString()??null,e.lastRun=t.toISOString(),await Mb(e)}generateId(){let e=``;for(let t=0;t<12;t++)e+=`abcdefghijklmnopqrstuvwxyz0123456789`[Math.floor(Math.random()*36)];return e}compileFilter(e,t){try{return t?Function(`event`,`return (${e})(event);`):Function(`return (${e})();`)}catch(e){throw Error(`Invalid filter function: ${e instanceof Error?e.message:String(e)}`)}}};function oE(e,t,n){return e?e===t||e===n||`${e}-scoop`===n:!1}function sE(e){let t=new Set;for(let n of e)t.add(n.folder),n.name&&n.name!==n.folder&&t.add(n.name);return Array.from(t)}function cE(e,t,n){if(t.length===0&&n.length===0)return null;let r=[];t.length>0&&r.push(`${t.length} active webhook${t.length>1?`s`:``}`),n.length>0&&r.push(`${n.length} active cron task${n.length>1?`s`:``}`);let i=[...t.map(e=>` webhook delete ${e.id}`),...n.map(e=>` crontask delete ${e.id}`)].join(`
1030
- `);return Error(`Cannot remove scoop '${e}': it has ${r.join(` and `)}. Unregister them first:\n${i}`)}let lE=null;function uE(){return lE||=new aE,lE}function dE(e){if(e.kind===`local`)return`mount ${py(e.path)}`;let t=e.profile==="default"?``:` --profile ${py(e.profile)}`;return`mount --source ${py(e.source)}${t} ${py(e.path)}`}function fE(){return`lick-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var pE=class{deps;entries=new Map;constructor(e){this.deps=e}hasHandoff(e){return this.entries.get(e)?.kind===`navigate-handoff`}registerNavigate(e){let t=fE(),n=e.body??{},r=typeof n.verb==`string`?n.verb:void 0,i=typeof n.target==`string`?n.target:void 0;return r===`upskill`&&i?this.entries.set(t,{kind:`navigate-upskill`,target:i,branch:typeof n.branch==`string`?n.branch:void 0,path:typeof n.path==`string`?n.path:void 0}):r===`handoff`&&this.entries.set(t,{kind:`navigate-handoff`}),t}registerSessionReload(e){let t=fE(),n=e.body??{},r=Array.isArray(n.mounts)?n.mounts:[];return n.reason===`mount-recovery`?r.length>0&&this.entries.set(t,{kind:`session-reload-mount`,mounts:r}):this.entries.set(t,{kind:`session-reload-plain`}),t}registerUpgrade(e){let t=fE(),n=e.upgradeFromVersion??`unknown`,r=e.upgradeToVersion??`unknown`;return this.entries.set(t,{kind:`upgrade`,from:n,to:r}),t}registerDiscovery(e){if(e.discoveryKind!==`llms-txt`)return null;let t=bx(e.discoveryOrigin,e.discoveryUrl);if(!t)return null;let n=fE();return this.entries.set(n,{kind:`discovery-llms-txt`,hostname:t}),n}async resolve(e,t){let n=this.entries.get(e);if(!n)return null;switch(n.kind){case`navigate-upskill`:return this.resolveUpskill(e,n,t);case`session-reload-mount`:return this.resolveMountRecovery(e,n,t);case`session-reload-plain`:return this.resolveSessionReloadPlain(e,t);case`upgrade`:return this.resolveUpgrade(e,n,t);case`discovery-llms-txt`:return this.resolveDiscovery(e,n,t);case`navigate-handoff`:return null}}async resolveHandoffByHuman(e,t){return this.hasHandoff(e)?(this.entries.delete(e),await this.deps.persistLickDecision(e,t?`allow`:`deny`),!0):!1}async resolveUpskill(e,t,n){this.entries.delete(e);let r;return n.decision!==`deny`&&(r=await this.runUpskillInstall(t)),await this.deps.persistLickDecision(e,n.decision),{settled:!0,persisted:!1,message:r}}async runUpskillInstall(e){let t=this.deps.getConeShell();if(!t)return`upskill could not run: no cone shell available.`;let n=e=>`'${e.replace(/'/g,`'\\''`)}'`,r=[`upskill`];e.branch&&r.push(`--branch`,n(e.branch)),e.path&&r.push(`--path`,n(e.path)),r.push(n(e.target)),r.push(`--all`);try{let e=await t.executeCommand(r.join(` `)),n=`${e.stdout}${e.stderr}`.trim();return n.length>0?n:`upskill exited ${e.exitCode}.`}catch(e){return`upskill failed: ${e instanceof Error?e.message:String(e)}`}}async resolveMountRecovery(e,t,n){this.entries.delete(e);let r;return n.decision!==`deny`&&(r=await this.runMountRecovery(t.mounts)),await this.deps.persistLickDecision(e,n.decision),{settled:!0,persisted:!1,message:r}}async runMountRecovery(e){let t=this.deps.getConeShell();if(!t)return`mount recovery could not run: no cone shell available.`;let n=[];for(let r of e){let e=dE(r);try{let r=await t.executeCommand(e),i=`${r.stdout}${r.stderr}`.trim();n.push(i.length>0?i:`${e} exited ${r.exitCode}.`)}catch(t){n.push(`${e} failed: ${t instanceof Error?t.message:String(t)}`)}}return n.join(`
1031
- `)}async resolveSessionReloadPlain(e,t){return t.decision===`deny`?(this.entries.delete(e),await this.deps.persistLickDecision(e,`deny`),{settled:!0,persisted:!1,message:`Session-reload notice acknowledged.`}):{settled:!0,persisted:!1,message:`Nothing to confirm — the reload already completed. Use lick_dismiss to acknowledge and clear this notice.`}}async resolveUpgrade(e,t,n){this.entries.delete(e);let r;return r=n.decision===`deny`?`Upgrade dismissed — workspace files were left unchanged.`:await this.runUpgrade(t),await this.deps.persistLickDecision(e,n.decision),{settled:!0,persisted:!1,message:r}}async resolveDiscovery(e,t,n){if(n.decision!==`deny`)return{settled:!0,persisted:!1,message:`Nothing to confirm — use lick_dismiss to ignore this llms.txt host.`};let r=this.deps.getConeFs();if(!r)throw Error(`llms.txt dismissal could not persist: cone filesystem unavailable.`);let i=await xx(r,t.hostname);return this.entries.delete(e),await this.deps.persistLickDecision(e,`deny`),{settled:!0,persisted:i,message:i?`Dismissed — ${t.hostname} was added to /etc/llmstxtignore.`:`Dismissed — ${t.hostname} is already ignored.`}}async runUpgrade(e){let t=this.deps.getConeShell();if(!t)return`upgrade could not run: no cone shell available.`;let n=`upgrade apply --from=${py(e.from)} --to=${py(e.to)}`;try{let e=await t.executeCommand(n),r=`${e.stdout}${e.stderr}`.trim();return r.length>0?r:`upgrade exited ${e.exitCode}.`}catch(e){return`upgrade failed: ${e instanceof Error?e.message:String(e)}`}}},mE=`# /etc/models — which models a scoop may be spawned with
1029
+ `;await e.writeFile(`/shared/CLAUDE.md`,d),this.globalMemoryCache=d,await this.writeMigrationSentinel(t),RT.info(`Migrated legacy cone memory from /shared/CLAUDE.md to /workspace/CLAUDE.md`,{blockCount:i.length})}async writeMigrationSentinel(e){let t=this.deps.getSharedFs();if(t){try{await t.mkdir(`/workspace`,{recursive:!0})}catch{}await t.writeFile(e,`Migration completed at ${new Date().toISOString()}\n`)}}};function VT(e){return Date.UTC(e.y,e.m-1,e.d,e.h,e.i,e.s)}function HT(e,t){return e.y===t.y&&e.m===t.m&&e.d===t.d&&e.h===t.h&&e.i===t.i&&e.s===t.s}function UT(e,t){let n=new Date(Date.parse(e));if(isNaN(n))throw Error(`Invalid ISO8601 passed to timezone parser.`);let r=e.substring(9);return r.includes(`Z`)||r.includes(`+`)||r.includes(`-`)?qT(n.getUTCFullYear(),n.getUTCMonth()+1,n.getUTCDate(),n.getUTCHours(),n.getUTCMinutes(),n.getUTCSeconds(),`Etc/UTC`):qT(n.getFullYear(),n.getMonth()+1,n.getDate(),n.getHours(),n.getMinutes(),n.getSeconds(),t)}function WT(e,t,n){return GT(UT(e,t),n)}function GT(e,t){let n=new Date(VT(e)),r=KT(n,e.tz),i=VT(e)-VT(r),a=new Date(n.getTime()+i),o=KT(a,e.tz);if(HT(o,e)){let t=new Date(a.getTime()-36e5);return HT(KT(t,e.tz),e)?t:a}let s=new Date(a.getTime()+VT(e)-VT(o));if(HT(KT(s,e.tz),e))return s;if(t)throw Error(`Invalid date passed to fromTZ()`);return a.getTime()>s.getTime()?a:s}function KT(e,t){let n,r;try{n=new Intl.DateTimeFormat(`en-US`,{timeZone:t,year:`numeric`,month:`numeric`,day:`numeric`,hour:`numeric`,minute:`numeric`,second:`numeric`,hour12:!1}),r=n.formatToParts(e)}catch(e){let n=e instanceof Error?e.message:String(e);throw RangeError(`toTZ: Invalid timezone '${t}' or date. Please provide a valid IANA timezone (e.g., 'America/New_York', 'Europe/Stockholm'). Original error: ${n}`)}let i={year:0,month:0,day:0,hour:0,minute:0,second:0};for(let e of r)(e.type===`year`||e.type===`month`||e.type===`day`||e.type===`hour`||e.type===`minute`||e.type===`second`)&&(i[e.type]=parseInt(e.value,10));if(isNaN(i.year)||isNaN(i.month)||isNaN(i.day)||isNaN(i.hour)||isNaN(i.minute)||isNaN(i.second))throw Error(`toTZ: Failed to parse all date components from timezone '${t}'. This may indicate an invalid date or timezone configuration. Parsed components: ${JSON.stringify(i)}`);return i.hour===24&&(i.hour=0),{y:i.year,m:i.month,d:i.day,h:i.hour,i:i.minute,s:i.second,tz:t}}function qT(e,t,n,r,i,a,o){return{y:e,m:t,d:n,h:r,i,s:a,tz:o}}var JT=[1,2,4,8,16],YT=class{pattern;timezone;mode;alternativeWeekdays;sloppyRanges;second;minute;hour;day;month;dayOfWeek;year;lastDayOfMonth;lastWeekday;nearestWeekdays;starDOM;starDOW;starYear;useAndLogic;constructor(e,t,n){this.pattern=e,this.timezone=t,this.mode=n?.mode??`auto`,this.alternativeWeekdays=n?.alternativeWeekdays??!1,this.sloppyRanges=n?.sloppyRanges??!1,this.second=Array(60).fill(0),this.minute=Array(60).fill(0),this.hour=Array(24).fill(0),this.day=Array(31).fill(0),this.month=Array(12).fill(0),this.dayOfWeek=Array(7).fill(0),this.year=Array(1e4).fill(0),this.lastDayOfMonth=!1,this.lastWeekday=!1,this.nearestWeekdays=Array(31).fill(0),this.starDOM=!1,this.starDOW=!1,this.starYear=!1,this.useAndLogic=!1,this.parse()}parse(){if(!(typeof this.pattern==`string`||this.pattern instanceof String))throw TypeError(`CronPattern: Pattern has to be of type string.`);this.pattern.indexOf(`@`)>=0&&(this.pattern=this.handleNicknames(this.pattern).trim());let e=this.pattern.match(/\S+/g)||[``],t=e.length;if(e.length<5||e.length>7)throw TypeError(`CronPattern: invalid configuration format ('`+this.pattern+`'), exactly five, six, or seven space separated parts are required.`);if(this.mode!==`auto`){let e;switch(this.mode){case`5-part`:e=5;break;case`6-part`:e=6;break;case`7-part`:e=7;break;case`5-or-6-parts`:e=[5,6];break;case`6-or-7-parts`:e=[6,7];break;default:e=0}if(!(Array.isArray(e)?e.includes(t):t===e)){let n=Array.isArray(e)?e.join(` or `):e.toString();throw TypeError(`CronPattern: mode '${this.mode}' requires exactly ${n} parts, but pattern '${this.pattern}' has ${t} parts.`)}}if(e.length===5&&e.unshift(`0`),e.length===6&&e.push(`*`),e[3].toUpperCase()===`LW`?(this.lastWeekday=!0,e[3]=``):e[3].toUpperCase().indexOf(`L`)>=0&&(e[3]=e[3].replace(/L/gi,``),this.lastDayOfMonth=!0),e[3]==`*`&&(this.starDOM=!0),e[6]==`*`&&(this.starYear=!0),e[4].length>=3&&(e[4]=this.replaceAlphaMonths(e[4])),e[5].length>=3&&(e[5]=this.alternativeWeekdays?this.replaceAlphaDaysQuartz(e[5]):this.replaceAlphaDays(e[5])),e[5].startsWith(`+`)&&(this.useAndLogic=!0,e[5]=e[5].substring(1),e[5]===``))throw TypeError(`CronPattern: Day-of-week field cannot be empty after '+' modifier.`);switch(e[5]==`*`&&(this.starDOW=!0),this.pattern.indexOf(`?`)>=0&&(e[0]=e[0].replace(/\?/g,`*`),e[1]=e[1].replace(/\?/g,`*`),e[2]=e[2].replace(/\?/g,`*`),e[3]=e[3].replace(/\?/g,`*`),e[4]=e[4].replace(/\?/g,`*`),e[5]=e[5].replace(/\?/g,`*`),e[6]&&=e[6].replace(/\?/g,`*`)),this.mode){case`5-part`:e[0]=`0`,e[6]=`*`;break;case`6-part`:e[6]=`*`;break;case`5-or-6-parts`:e[6]=`*`}this.throwAtIllegalCharacters(e),this.partToArray(`second`,e[0],0,1),this.partToArray(`minute`,e[1],0,1),this.partToArray(`hour`,e[2],0,1),this.partToArray(`day`,e[3],-1,1),this.partToArray(`month`,e[4],-1,1);let n=this.alternativeWeekdays?-1:0;this.partToArray(`dayOfWeek`,e[5],n,63),this.partToArray(`year`,e[6],0,1),!this.alternativeWeekdays&&this.dayOfWeek[7]&&(this.dayOfWeek[0]=this.dayOfWeek[7])}partToArray(e,t,n,r){let i=this[e],a=e===`day`&&this.lastDayOfMonth,o=e===`day`&&this.lastWeekday;if(t===``&&!a&&!o)throw TypeError(`CronPattern: configuration entry `+e+` (`+t+`) is empty, check for trailing spaces.`);if(t===`*`)return i.fill(r);let s=t.split(`,`);if(s.length>1)for(let t=0;t<s.length;t++)this.partToArray(e,s[t],n,r);else t.indexOf(`-`)!==-1&&t.indexOf(`/`)!==-1?this.handleRangeWithStepping(t,e,n,r):t.indexOf(`-`)===-1?t.indexOf(`/`)===-1?t!==``&&this.handleNumber(t,e,n,r):this.handleStepping(t,e,n,r):this.handleRange(t,e,n,r)}throwAtIllegalCharacters(e){for(let t=0;t<e.length;t++)if((t===3?/[^/*0-9,\-WwLl]+/:t===5?/[^/*0-9,\-#Ll]+/:/[^/*0-9,\-]+/).test(e[t]))throw TypeError(`CronPattern: configuration entry `+t+` (`+e[t]+`) contains illegal characters.`)}handleNumber(e,t,n,r){let i=this.extractNth(e,t),a=e.toUpperCase().includes(`W`);if(t!==`day`&&a)throw TypeError(`CronPattern: Nearest weekday modifier (W) only allowed in day-of-month.`);a&&(t=`nearestWeekdays`);let o=parseInt(i[0],10)+n;if(isNaN(o))throw TypeError(`CronPattern: `+t+` is not a number: '`+e+`'`);this.setPart(t,o,i[1]||r)}setPart(e,t,n){if(!Object.prototype.hasOwnProperty.call(this,e))throw TypeError(`CronPattern: Invalid part specified: `+e);if(e===`dayOfWeek`){if(t===7&&(t=0),t<0||t>6)throw RangeError(`CronPattern: Invalid value for dayOfWeek: `+t);this.setNthWeekdayOfMonth(t,n);return}if(e===`second`||e===`minute`){if(t<0||t>=60)throw RangeError(`CronPattern: Invalid value for `+e+`: `+t)}else if(e===`hour`){if(t<0||t>=24)throw RangeError(`CronPattern: Invalid value for `+e+`: `+t)}else if(e===`day`||e===`nearestWeekdays`){if(t<0||t>=31)throw RangeError(`CronPattern: Invalid value for `+e+`: `+t)}else if(e===`month`){if(t<0||t>=12)throw RangeError(`CronPattern: Invalid value for `+e+`: `+t)}else if(e===`year`&&(t<1||t>=1e4))throw RangeError(`CronPattern: Invalid value for `+e+`: `+t+` (supported range: 1-9999)`);this[e][t]=n}validateNotNaN(e,t){if(isNaN(e))throw TypeError(t)}validateRange(e,t,n,r,i){if(e>t)throw TypeError(`CronPattern: From value is larger than to value: '`+i+`'`);if(n!==void 0){if(n===0)throw TypeError(`CronPattern: Syntax error, illegal stepping: 0`);if(n>this[r].length)throw TypeError(`CronPattern: Syntax error, steps cannot be greater than maximum value of part (`+this[r].length+`)`)}}handleRangeWithStepping(e,t,n,r){if(e.toUpperCase().includes(`W`))throw TypeError(`CronPattern: Syntax error, W is not allowed in ranges with stepping.`);let i=this.extractNth(e,t),a=i[0].match(/^(\d+)-(\d+)\/(\d+)$/);if(a===null)throw TypeError(`CronPattern: Syntax error, illegal range with stepping: '`+e+`'`);let[,o,s,c]=a,l=parseInt(o,10)+n,u=parseInt(s,10)+n,d=parseInt(c,10);this.validateNotNaN(l,`CronPattern: Syntax error, illegal lower range (NaN)`),this.validateNotNaN(u,`CronPattern: Syntax error, illegal upper range (NaN)`),this.validateNotNaN(d,`CronPattern: Syntax error, illegal stepping: (NaN)`),this.validateRange(l,u,d,t,e);for(let e=l;e<=u;e+=d)this.setPart(t,e,i[1]||r)}extractNth(e,t){let n=e,r;if(n.includes(`#`)){if(t!==`dayOfWeek`)throw Error(`CronPattern: nth (#) only allowed in day-of-week field`);r=n.split(`#`)[1],n=n.split(`#`)[0]}else if(n.toUpperCase().endsWith(`L`)){if(t!==`dayOfWeek`)throw Error(`CronPattern: L modifier only allowed in day-of-week field (use L alone for day-of-month)`);r=`L`,n=n.slice(0,-1)}return[n,r]}handleRange(e,t,n,r){if(e.toUpperCase().includes(`W`))throw TypeError(`CronPattern: Syntax error, W is not allowed in a range.`);let i=this.extractNth(e,t),a=i[0].split(`-`);if(a.length!==2)throw TypeError(`CronPattern: Syntax error, illegal range: '`+e+`'`);let o=parseInt(a[0],10)+n,s=parseInt(a[1],10)+n;this.validateNotNaN(o,`CronPattern: Syntax error, illegal lower range (NaN)`),this.validateNotNaN(s,`CronPattern: Syntax error, illegal upper range (NaN)`),this.validateRange(o,s,void 0,t,e);for(let e=o;e<=s;e++)this.setPart(t,e,i[1]||r)}handleStepping(e,t,n,r){if(e.toUpperCase().includes(`W`))throw TypeError(`CronPattern: Syntax error, W is not allowed in parts with stepping.`);let i=this.extractNth(e,t),a=i[0].split(`/`);if(a.length!==2)throw TypeError(`CronPattern: Syntax error, illegal stepping: '`+e+`'`);if(this.sloppyRanges)a[0]===``&&(a[0]=`*`);else{if(a[0]===``)throw TypeError(`CronPattern: Syntax error, stepping with missing prefix ('`+e+`') is not allowed. Use wildcard (*/step) or range (min-max/step) instead.`);if(a[0]!==`*`)throw TypeError(`CronPattern: Syntax error, stepping with numeric prefix ('`+e+`') is not allowed. Use wildcard (*/step) or range (min-max/step) instead.`)}let o=0;a[0]!==`*`&&(o=parseInt(a[0],10)+n);let s=parseInt(a[1],10);this.validateNotNaN(s,`CronPattern: Syntax error, illegal stepping: (NaN)`),this.validateRange(0,this[t].length-1,s,t,e);for(let e=o;e<this[t].length;e+=s)this.setPart(t,e,i[1]||r)}replaceAlphaDays(e){return e.replace(/-sun/gi,`-7`).replace(/sun/gi,`0`).replace(/mon/gi,`1`).replace(/tue/gi,`2`).replace(/wed/gi,`3`).replace(/thu/gi,`4`).replace(/fri/gi,`5`).replace(/sat/gi,`6`)}replaceAlphaDaysQuartz(e){return e.replace(/sun/gi,`1`).replace(/mon/gi,`2`).replace(/tue/gi,`3`).replace(/wed/gi,`4`).replace(/thu/gi,`5`).replace(/fri/gi,`6`).replace(/sat/gi,`7`)}replaceAlphaMonths(e){return e.replace(/jan/gi,`1`).replace(/feb/gi,`2`).replace(/mar/gi,`3`).replace(/apr/gi,`4`).replace(/may/gi,`5`).replace(/jun/gi,`6`).replace(/jul/gi,`7`).replace(/aug/gi,`8`).replace(/sep/gi,`9`).replace(/oct/gi,`10`).replace(/nov/gi,`11`).replace(/dec/gi,`12`)}handleNicknames(e){let t=e.trim().toLowerCase();if(t===`@yearly`||t===`@annually`)return`0 0 1 1 *`;if(t===`@monthly`)return`0 0 1 * *`;if(t===`@weekly`)return`0 0 * * 0`;if(t===`@daily`||t===`@midnight`)return`0 0 * * *`;if(t===`@hourly`)return`0 * * * *`;if(t===`@reboot`)throw TypeError(`CronPattern: @reboot is not supported in this environment. This is an event-based trigger that requires system startup detection.`);return e}setNthWeekdayOfMonth(e,t){if(typeof t!=`number`&&t.toUpperCase()===`L`)this.dayOfWeek[e]=this.dayOfWeek[e]|32;else if(t===63)this.dayOfWeek[e]=63;else if(t<6&&t>0)this.dayOfWeek[e]=this.dayOfWeek[e]|JT[t-1];else throw TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${t}, Type: ${typeof t}`)}},XT=[31,28,31,30,31,30,31,31,30,31,30,31],q=[[`month`,`year`,0],[`day`,`month`,-1],[`hour`,`day`,0],[`minute`,`hour`,0],[`second`,`minute`,0]],J=class e{tz;ms;second;minute;hour;day;month;year;constructor(t,n){if(this.tz=n,t&&t instanceof Date){if(!isNaN(t))this.fromDate(t);else throw TypeError(`CronDate: Invalid date passed to CronDate constructor`)}else if(t==null)this.fromDate(new Date);else if(t&&typeof t==`string`)this.fromString(t);else if(t instanceof e)this.fromCronDate(t);else throw TypeError(`CronDate: Invalid type (`+typeof t+`) passed to CronDate constructor`)}getLastDayOfMonth(e,t){return t===1?new Date(Date.UTC(e,t+1,0)).getUTCDate():XT[t]}getLastWeekday(e,t){let n=this.getLastDayOfMonth(e,t),r=new Date(Date.UTC(e,t,n)).getUTCDay();return r===0?n-2:r===6?n-1:n}getNearestWeekday(e,t,n){let r=this.getLastDayOfMonth(e,t);if(n>r)return-1;let i=new Date(Date.UTC(e,t,n)).getUTCDay();return i===0?n===r?n-2:n+1:i===6?n===1?n+2:n-1:n}isNthWeekdayOfMonth(e,t,n,r){let i=new Date(Date.UTC(e,t,n)).getUTCDay(),a=0;for(let r=1;r<=n;r++)new Date(Date.UTC(e,t,r)).getUTCDay()===i&&a++;if(r&63&&JT[a-1]&r)return!0;if(r&32){let r=this.getLastDayOfMonth(e,t);for(let a=n+1;a<=r;a++)if(new Date(Date.UTC(e,t,a)).getUTCDay()===i)return!1;return!0}return!1}fromDate(e){if(this.tz!==void 0){if(typeof this.tz==`number`)this.ms=e.getUTCMilliseconds(),this.second=e.getUTCSeconds(),this.minute=e.getUTCMinutes()+this.tz,this.hour=e.getUTCHours(),this.day=e.getUTCDate(),this.month=e.getUTCMonth(),this.year=e.getUTCFullYear(),this.apply();else try{let t=KT(e,this.tz);this.ms=e.getMilliseconds(),this.second=t.s,this.minute=t.i,this.hour=t.h,this.day=t.d,this.month=t.m-1,this.year=t.y}catch(e){let t=e instanceof Error?e.message:String(e);throw TypeError(`CronDate: Failed to convert date to timezone '${this.tz}'. This may happen with invalid timezone names or dates. Original error: ${t}`)}}else this.ms=e.getMilliseconds(),this.second=e.getSeconds(),this.minute=e.getMinutes(),this.hour=e.getHours(),this.day=e.getDate(),this.month=e.getMonth(),this.year=e.getFullYear()}fromCronDate(e){this.tz=e.tz,this.year=e.year,this.month=e.month,this.day=e.day,this.hour=e.hour,this.minute=e.minute,this.second=e.second,this.ms=e.ms}apply(){if(this.month>11||this.month<0||this.day>XT[this.month]||this.day<1||this.hour>59||this.minute>59||this.second>59||this.hour<0||this.minute<0||this.second<0){let e=new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms));return this.ms=e.getUTCMilliseconds(),this.second=e.getUTCSeconds(),this.minute=e.getUTCMinutes(),this.hour=e.getUTCHours(),this.day=e.getUTCDate(),this.month=e.getUTCMonth(),this.year=e.getUTCFullYear(),!0}return!1}fromString(e){if(typeof this.tz==`number`){let t=WT(e);this.ms=t.getUTCMilliseconds(),this.second=t.getUTCSeconds(),this.minute=t.getUTCMinutes(),this.hour=t.getUTCHours(),this.day=t.getUTCDate(),this.month=t.getUTCMonth(),this.year=t.getUTCFullYear(),this.apply()}else return this.fromDate(WT(e,this.tz))}findNext(e,t,n,r){return this._findMatch(e,t,n,r,1)}_findMatch(e,t,n,r,i){let a=this[t],o;n.lastDayOfMonth&&(o=this.getLastDayOfMonth(this.year,this.month));let s=!n.starDOW&&t==`day`?new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay():void 0,c=this[t]+r,l=i===1?e=>e<n[t].length:e=>e>=0;for(let u=c;l(u);u+=i){let i=n[t][u];if(t===`day`&&!i){for(let e=0;e<n.nearestWeekdays.length;e++)if(n.nearestWeekdays[e]){let t=this.getNearestWeekday(this.year,this.month,e-r);if(t===-1)continue;if(t===u-r){i=1;break}}}if(t===`day`&&n.lastWeekday){let e=this.getLastWeekday(this.year,this.month);u-r===e&&(i=1)}if(t===`day`&&n.lastDayOfMonth&&u-r==o&&(i=1),t===`day`&&!n.starDOW){let t=n.dayOfWeek[(s+(u-r-1))%7];if(t&&t&63)t=+!!this.isNthWeekdayOfMonth(this.year,this.month,u-r,t);else if(t)throw Error(`CronDate: Invalid value for dayOfWeek encountered. ${t}`);n.useAndLogic?i&&=t:!e.domAndDow&&!n.starDOM?i||=t:i&&=t}if(i)return this[t]=u-r,a===this[t]?1:2}return 3}recurse(e,t,n){if(n===0&&!e.starYear){if(this.year>=0&&this.year<e.year.length&&e.year[this.year]===0){let t=-1;for(let n=this.year+1;n<e.year.length&&n<1e4;n++)if(e.year[n]===1){t=n;break}if(t===-1)return null;this.year=t,this.month=0,this.day=1,this.hour=0,this.minute=0,this.second=0,this.ms=0}if(this.year>=1e4)return null}let r=this.findNext(t,q[n][0],e,q[n][2]);if(r>1){let i=n+1;for(;i<q.length;)this[q[i][0]]=-q[i][2],i++;if(r===3){if(this[q[n][1]]++,this[q[n][0]]=-q[n][2],this.apply(),n===0&&!e.starYear){for(;this.year>=0&&this.year<e.year.length&&e.year[this.year]===0&&this.year<1e4;)this.year++;if(this.year>=1e4||this.year>=e.year.length)return null}return this.recurse(e,t,0)}if(this.apply())return this.recurse(e,t,n-1)}return n+=1,n>=q.length?this:(e.starYear?this.year>=3e3:this.year>=1e4)?null:this.recurse(e,t,n)}increment(e,t,n){return this.second+=t.interval!==void 0&&t.interval>1&&n?t.interval:1,this.ms=0,this.apply(),this.recurse(e,t,0)}decrement(e,t){return this.second-=t.interval!==void 0&&t.interval>1?t.interval:1,this.ms=0,this.apply(),this.recurseBackward(e,t,0,0)}recurseBackward(e,t,n,r=0){if(r>1e4)return null;if(n===0&&!e.starYear){if(this.year>=0&&this.year<e.year.length&&e.year[this.year]===0){let t=-1;for(let n=this.year-1;n>=0;n--)if(e.year[n]===1){t=n;break}if(t===-1)return null;this.year=t,this.month=11,this.day=31,this.hour=23,this.minute=59,this.second=59,this.ms=0}if(this.year<0)return null}let i=this.findPrevious(t,q[n][0],e,q[n][2]);if(i>1){let a=n+1;for(;a<q.length;){let t=q[a][0],n=q[a][2],r=this.getMaxPatternValue(t,e,n);this[t]=r,a++}if(i===3){if(this[q[n][1]]--,n===0){let e=this.getLastDayOfMonth(this.year,this.month);this.day>e&&(this.day=e)}if(n===1){if(this.day<=0)this.day=1;else{let e=this.year,t=this.month;for(;t<0;)t+=12,e--;for(;t>11;)t-=12,e++;let n=t===1?new Date(Date.UTC(e,t+1,0)).getUTCDate():XT[t];this.day>n&&(this.day=n)}}this.apply();let i=q[n][0],a=q[n][2],o=this.getMaxPatternValue(i,e,a);if(i===`day`){let e=this.getLastDayOfMonth(this.year,this.month);this[i]=Math.min(o,e)}else this[i]=o;if(this.apply(),n===0){let t=q[1][2],n=this.getMaxPatternValue(`day`,e,t),r=this.getLastDayOfMonth(this.year,this.month),i=Math.min(n,r);i!==this.day&&(this.day=i,this.hour=this.getMaxPatternValue(`hour`,e,q[2][2]),this.minute=this.getMaxPatternValue(`minute`,e,q[3][2]),this.second=this.getMaxPatternValue(`second`,e,q[4][2]))}if(n===0&&!e.starYear){for(;this.year>=0&&this.year<e.year.length&&e.year[this.year]===0;)this.year--;if(this.year<0)return null}return this.recurseBackward(e,t,0,r+1)}if(this.apply())return this.recurseBackward(e,t,n-1,r+1)}return n+=1,n>=q.length?this:this.year<0?null:this.recurseBackward(e,t,n,r+1)}getMaxPatternValue(e,t,n){if(e===`day`&&t.lastDayOfMonth||e===`day`&&!t.starDOW)return this.getLastDayOfMonth(this.year,this.month);for(let r=t[e].length-1;r>=0;r--)if(t[e][r])return r-n;return t[e].length-1-n}findPrevious(e,t,n,r){return this._findMatch(e,t,n,r,-1)}getDate(e){return e||this.tz===void 0?new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms):typeof this.tz==`number`?new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute-this.tz,this.second,this.ms)):GT(qT(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}match(e,t){if(!e.starYear&&(this.year<0||this.year>=e.year.length||e.year[this.year]===0))return!1;for(let n=0;n<q.length;n++){let r=q[n][0],i=q[n][2],a=this[r];if(a+i<0||a+i>=e[r].length)return!1;let o=e[r][a+i];if(r===`day`){if(!o){for(let t=0;t<e.nearestWeekdays.length;t++)if(e.nearestWeekdays[t]){let e=this.getNearestWeekday(this.year,this.month,t-i);if(e!==-1&&e===a){o=1;break}}}if(e.lastWeekday&&a===this.getLastWeekday(this.year,this.month)&&(o=1),e.lastDayOfMonth&&a===this.getLastDayOfMonth(this.year,this.month)&&(o=1),!e.starDOW){let n=new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay(),r=e.dayOfWeek[(n+(a-1))%7];r&&r&63&&(r=+!!this.isNthWeekdayOfMonth(this.year,this.month,a,r)),e.useAndLogic?o&&=r:!t.domAndDow&&!e.starDOM?o||=r:o&&=r}}if(!o)return!1}return!0}};function ZT(e){if(e===void 0&&(e={}),delete e.name,e.legacyMode!==void 0&&e.domAndDow===void 0?e.domAndDow=!e.legacyMode:e.domAndDow===void 0&&(e.domAndDow=!1),e.legacyMode=!e.domAndDow,e.paused=e.paused!==void 0&&e.paused,e.maxRuns=e.maxRuns===void 0?1/0:e.maxRuns,e.catch=e.catch!==void 0&&e.catch,e.interval=e.interval===void 0?0:parseInt(e.interval.toString(),10),e.utcOffset=e.utcOffset===void 0?void 0:parseInt(e.utcOffset.toString(),10),e.dayOffset=e.dayOffset===void 0?0:parseInt(e.dayOffset.toString(),10),e.unref=e.unref!==void 0&&e.unref,e.mode=e.mode===void 0?`auto`:e.mode,e.alternativeWeekdays=e.alternativeWeekdays!==void 0&&e.alternativeWeekdays,e.sloppyRanges=e.sloppyRanges!==void 0&&e.sloppyRanges,![`auto`,`5-part`,`6-part`,`7-part`,`5-or-6-parts`,`6-or-7-parts`].includes(e.mode))throw Error(`CronOptions: mode must be one of 'auto', '5-part', '6-part', '7-part', '5-or-6-parts', or '6-or-7-parts'.`);if(e.startAt&&(e.startAt=new J(e.startAt,e.timezone)),e.stopAt&&(e.stopAt=new J(e.stopAt,e.timezone)),e.interval!==null){if(isNaN(e.interval))throw Error(`CronOptions: Supplied value for interval is not a number`);if(e.interval<0)throw Error(`CronOptions: Supplied value for interval can not be negative`)}if(e.utcOffset!==void 0){if(isNaN(e.utcOffset))throw Error(`CronOptions: Invalid value passed for utcOffset, should be number representing minutes offset from UTC.`);if(e.utcOffset<-870||e.utcOffset>870)throw Error(`CronOptions: utcOffset out of bounds.`);if(e.utcOffset!==void 0&&e.timezone)throw Error(`CronOptions: Combining 'utcOffset' with 'timezone' is not allowed.`)}if(e.unref!==!0&&e.unref!==!1)throw Error(`CronOptions: Unref should be either true, false or undefined(false).`);if(e.dayOffset!==void 0&&e.dayOffset!==0&&isNaN(e.dayOffset))throw Error(`CronOptions: Invalid value passed for dayOffset, should be a number representing days to offset.`);return e}function QT(e){return Object.prototype.toString.call(e)===`[object Function]`||typeof e==`function`||e instanceof Function}function $T(e){return QT(e)}function eE(e){typeof Deno<`u`&&typeof Deno.unrefTimer<`u`?Deno.unrefTimer(e):e&&typeof e.unref<`u`&&e.unref()}var tE=3e4,nE=[],rE=class{name;options;_states;fn;getTz(){return this.options.timezone||this.options.utcOffset}applyDayOffset(e){if(this.options.dayOffset!==void 0&&this.options.dayOffset!==0){let t=this.options.dayOffset*24*60*60*1e3;return new Date(e.getTime()+t)}return e}constructor(e,t,n){let r,i;if(QT(t))i=t;else if(typeof t==`object`)r=t;else if(t!==void 0)throw Error(`Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).`);if(QT(n))i=n;else if(typeof n==`object`)r=n;else if(n!==void 0)throw Error(`Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).`);if(this.name=r?.name,this.options=ZT(r),this._states={kill:!1,blocking:!1,previousRun:void 0,currentRun:void 0,once:void 0,currentTimeout:void 0,maxRuns:r?r.maxRuns:void 0,paused:r?r.paused:!1,pattern:new YT(`* * * * *`,void 0,{mode:`auto`})},e&&(e instanceof Date||typeof e==`string`&&e.indexOf(`:`)>0)?this._states.once=new J(e,this.getTz()):this._states.pattern=new YT(e,this.options.timezone,{mode:this.options.mode,alternativeWeekdays:this.options.alternativeWeekdays,sloppyRanges:this.options.sloppyRanges}),this.name){if(nE.find(e=>e.name===this.name))throw Error(`Cron: Tried to initialize new named job '`+this.name+`', but name already taken.`);nE.push(this)}return i!==void 0&&$T(i)&&(this.fn=i,this.schedule()),this}nextRun(e){let t=this._next(e);return t?this.applyDayOffset(t.getDate(!1)):null}nextRuns(e,t){this._states.maxRuns!==void 0&&e>this._states.maxRuns&&(e=this._states.maxRuns);let n=t||this._states.currentRun||void 0;return this._enumerateRuns(e,n,`next`)}previousRuns(e,t){return this._enumerateRuns(e,t||void 0,`previous`)}_enumerateRuns(e,t,n){let r=[],i=t?new J(t,this.getTz()):null,a=n===`next`?this._next:this._previous;for(;e--;){let e=a.call(this,i);if(!e)break;let t=e.getDate(!1);r.push(this.applyDayOffset(t)),i=e}return r}match(e){if(this._states.once){let t=new J(e,this.getTz());t.ms=0;let n=new J(this._states.once,this.getTz());return n.ms=0,t.getTime()===n.getTime()}let t=new J(e,this.getTz());return t.ms=0,t.match(this._states.pattern,this.options)}getPattern(){if(!this._states.once)return this._states.pattern?this._states.pattern.pattern:void 0}getOnce(){return this._states.once?this._states.once.getDate():null}isRunning(){let e=this.nextRun(this._states.currentRun),t=!this._states.paused,n=this.fn!==void 0,r=!this._states.kill;return t&&n&&r&&e!==null}isStopped(){return this._states.kill}isBusy(){return this._states.blocking}currentRun(){return this._states.currentRun?this._states.currentRun.getDate():null}previousRun(){return this._states.previousRun?this._states.previousRun.getDate():null}msToNext(e){let t=this._next(e);return t?e instanceof J||e instanceof Date?t.getTime()-e.getTime():t.getTime()-new J(e).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let e=nE.indexOf(this);e>=0&&nE.splice(e,1)}pause(){return this._states.paused=!0,!this._states.kill}resume(){return this._states.paused=!1,!this._states.kill}schedule(e){if(e&&this.fn)throw Error(`Cron: It is not allowed to schedule two functions using the same Croner instance.`);e&&(this.fn=e);let t=this.msToNext(),n=this.nextRun(this._states.currentRun);return t==null||isNaN(t)||n===null?this:(t>tE&&(t=tE),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(n),t),this._states.currentTimeout&&this.options.unref&&eE(this._states.currentTimeout),this)}async _trigger(e){this._states.blocking=!0,this._states.currentRun=new J(void 0,this.getTz());try{if(this.options.catch)try{this.fn!==void 0&&await this.fn(this,this.options.context)}catch(e){if(QT(this.options.catch))try{this.options.catch(e,this)}catch{}}else this.fn!==void 0&&await this.fn(this,this.options.context)}finally{this._states.previousRun=new J(e,this.getTz()),this._states.blocking=!1}}async trigger(){await this._trigger()}runsLeft(){return this._states.maxRuns}_checkTrigger(e){let t=new Date,n=!this._states.paused&&t.getTime()>=e.getTime(),r=this._states.blocking&&this.options.protect;n&&!r?(this._states.maxRuns!==void 0&&this._states.maxRuns--,this._trigger()):n&&r&&QT(this.options.protect)&&setTimeout(()=>this.options.protect(this),0),this.schedule()}_next(e){let t=!!(e||this._states.currentRun),n=!1;!e&&this.options.startAt&&this.options.interval&&([e,t]=this._calculatePreviousRun(e,t),n=!e),e=new J(e,this.getTz()),this.options.startAt&&e&&e.getTime()<this.options.startAt.getTime()&&(e=this.options.startAt);let r=this._states.once||new J(e,this.getTz());return!n&&r!==this._states.once&&(r=r.increment(this._states.pattern,this.options,t)),this._states.once&&this._states.once.getTime()<=e.getTime()||r===null||this._states.maxRuns!==void 0&&this._states.maxRuns<=0||this._states.kill||this.options.stopAt&&r.getTime()>=this.options.stopAt.getTime()?null:r}_previous(e){let t=new J(e,this.getTz());this.options.stopAt&&t.getTime()>this.options.stopAt.getTime()&&(t=this.options.stopAt);let n=new J(t,this.getTz());return this._states.once?this._states.once.getTime()<t.getTime()?this._states.once:null:(n=n.decrement(this._states.pattern,this.options),n===null||this.options.startAt&&n.getTime()<this.options.startAt.getTime()?null:n)}_calculatePreviousRun(e,t){let n=new J(void 0,this.getTz()),r=e;if(this.options.startAt.getTime()<=n.getTime()){r=this.options.startAt;let e=r.getTime()+this.options.interval*1e3;for(;e<=n.getTime();)r=new J(r,this.getTz()).increment(this._states.pattern,this.options,!0),e=r.getTime()+this.options.interval*1e3;t=!0}return r===null&&(r=void 0),[r,t]}};function iE(e,t){try{return new rE(e.trim(),{domAndDow:!0}).nextRun(t)??null}catch{return null}}var aE=e({FORWARDABLE_TO_LEADER:()=>oE,LickManager:()=>lE,buildActiveLicksError:()=>fE,getLickManager:()=>mE,lickScoopMatches:()=>uE,lickTargetCandidates:()=>dE});const Y=_(`lick-manager`),oE=new Set([`navigate`,`discovery`]);function sE(e){if(typeof e!=`object`||!e)return null;let t=e;return typeof t.verb!=`string`||typeof t.target!=`string`?null:oe({verb:t.verb,target:t.target,branch:typeof t.branch==`string`?t.branch:void 0,path:typeof t.path==`string`?t.path:void 0,instruction:typeof t.instruction==`string`?t.instruction:void 0})}function cE(e){return!e.discoveryKind&&!e.discoveryUrl&&!e.discoveryOrigin?null:Ii({origin:e.discoveryOrigin,kind:e.discoveryKind,url:e.discoveryUrl})}var lE=class{webhooks=new Map;crontasks=new Map;cronInterval=null;eventHandler=null;forwarder=null;seenNavigateFingerprints=new Set;seenDiscoveryFingerprints=new Set;unitRoster=null;discoveryIgnore=null;async init(){await jb();let e=await Pb();for(let t of e)this.webhooks.set(t.id,t);Y.info(`Loaded webhooks`,{count:this.webhooks.size});let t=await Rb();for(let e of t)this.crontasks.set(e.id,e);Y.info(`Loaded crontasks`,{count:this.crontasks.size}),await this.reconcileOrphans(),this.cronInterval=setInterval(()=>this.runCronScheduler(),6e4),Y.info(`Cron scheduler started`)}setUnitRosterProvider(e){this.unitRoster=e}resolveLickTarget(e){let t=this.unitRoster?.();return t?t.some(t=>uE(e,t.name,t.folder))?{status:`resolved`}:{status:`unresolved`,candidates:dE(t)}:{status:`unverifiable`}}setDiscoveryIgnore(e){this.discoveryIgnore=e}isOrphanedLick(e){return e?this.resolveLickTarget(e).status===`unresolved`:!1}async reconcileOrphans(){if(this.unitRoster){for(let e of Array.from(this.webhooks.values()))if(this.isOrphanedLick(e.scoop)){Y.warn(`Removing orphaned webhook at init; target scoop no longer exists`,{id:e.id,name:e.name,scoop:e.scoop}),this.webhooks.delete(e.id);try{await Fb(e.id)}catch(t){Y.warn(`Failed to delete orphaned webhook from DB`,{id:e.id,error:t instanceof Error?t.message:String(t)})}}for(let e of Array.from(this.crontasks.values()))if(this.isOrphanedLick(e.scoop)){Y.warn(`Removing orphaned cron task at init; target scoop no longer exists`,{id:e.id,name:e.name,scoop:e.scoop}),this.crontasks.delete(e.id);try{await zb(e.id)}catch(t){Y.warn(`Failed to delete orphaned cron task from DB`,{id:e.id,error:t instanceof Error?t.message:String(t)})}}}}dispose(){this.cronInterval&&=(clearInterval(this.cronInterval),null)}setEventHandler(e){this.eventHandler=e}setForwarder(e){this.forwarder=e}dispatch(e){if(!(e.type===`discovery`&&this.shouldSuppressDiscovery(e))){if(this.forwarder&&oE.has(e.type)){this.forwarder(e);return}this.eventHandler?.(e)}}handleForwardedEvent(e){e.type===`discovery`&&this.shouldSuppressDiscovery(e)||this.isDuplicateFingerprint(e)||this.eventHandler?.(e)}emitEvent(e){e.type===`discovery`&&this.shouldSuppressDiscovery(e)||this.isDuplicateFingerprint(e)||(Y.info(`External lick event`,{type:e.type,target:e.targetScoop}),this.dispatch(e))}isDuplicateFingerprint(e){let t=null,n,r;if(e.type===`navigate`)t=sE(e.body),n=this.seenNavigateFingerprints,r=`navigate`;else if(e.type===`discovery`)t=cE(e),n=this.seenDiscoveryFingerprints,r=`discovery`;else return!1;return t===null?!1:n.has(t)?(Y.debug(`Suppressing duplicate ${r} lick`,{fingerprint:t}),!0):(n.add(t),!1)}shouldSuppressDiscovery(e){return e.discoverySource===`live-navigation`?this.discoveryIgnore?.(e)?(Y.debug(`Suppressing ignored llms.txt discovery`,{origin:e.discoveryOrigin}),!0):!1:(Y.debug(`Suppressing discovery without live-navigation provenance`),!0)}async createWebhook(e,t,n){let r=this.generateId(),i={id:r,name:e,createdAt:new Date().toISOString(),filter:n,scoop:t};return n&&this.compileFilter(n,!0),this.webhooks.set(r,i),await Mb(i),Y.info(`Webhook created`,{id:r,name:e,scoop:t}),i}async deleteWebhook(e){return this.webhooks.has(e)?(this.webhooks.delete(e),await Fb(e),Y.info(`Webhook deleted`,{id:e}),!0):await Nb(e)!==null&&(await Fb(e),Y.info(`Webhook deleted`,{id:e}),!0)}listWebhooks(){return Array.from(this.webhooks.values())}getWebhook(e){return this.webhooks.get(e)}handleWebhookEvent(e,t,n){let r=this.webhooks.get(e);if(!r)return Y.warn(`Webhook not found`,{webhookId:e}),`unknown-webhook`;if(this.isOrphanedLick(r.scoop))return Y.warn(`Webhook target scoop not found — dropping delivery`,{webhookId:e,name:r.name,scoop:r.scoop}),`unresolved-target`;let i={type:`webhook`,webhookId:e,webhookName:r.name,targetScoop:r.scoop,timestamp:new Date().toISOString(),headers:t,body:n};if(r.filter)try{let t=this.compileFilter(r.filter,!0)(i);if(t===!1)return Y.debug(`Webhook event dropped by filter`,{webhookId:e,name:r.name}),`filtered`;typeof t==`object`&&t&&(i=t)}catch(t){Y.error(`Webhook filter error`,{webhookId:e,error:t instanceof Error?t.message:String(t)})}return Y.info(`Webhook event received`,{webhookId:e,name:r.name,targetScoop:r.scoop}),this.dispatch(i),`delivered`}async createCronTask(e,t,n,r){let i=iE(t,new Date);if(!i)throw Error(`Invalid cron expression`);r&&this.compileFilter(r,!1);let a=this.generateId(),o={id:a,name:e,cron:t,scoop:n,filter:r,nextRun:i.toISOString(),lastRun:null,status:`active`,createdAt:new Date().toISOString()};return this.crontasks.set(a,o),await Ib(o),Y.info(`Cron task created`,{id:a,name:e,cron:t,scoop:n}),o}async deleteCronTask(e){return this.crontasks.has(e)?(this.crontasks.delete(e),await zb(e),Y.info(`Cron task deleted`,{id:e}),!0):await Lb(e)!==null&&(await zb(e),Y.info(`Cron task deleted`,{id:e}),!0)}listCronTasks(){return Array.from(this.crontasks.values())}getCronTask(e){return this.crontasks.get(e)}getLicksForScoop(e,t){return{webhooks:Array.from(this.webhooks.values()).filter(n=>uE(n.scoop,e,t)),cronTasks:Array.from(this.crontasks.values()).filter(n=>uE(n.scoop,e,t))}}async getLicksForScoopFromDb(e,t){let[n,r]=await Promise.all([Pb(),Rb()]);return{webhooks:n.filter(n=>uE(n.scoop,e,t)),cronTasks:r.filter(n=>uE(n.scoop,e,t))}}async deleteIfOrphanedCron(e){if(!this.isOrphanedLick(e.scoop))return!1;Y.warn(`Deleting orphaned cron task; target scoop no longer exists`,{id:e.id,name:e.name,scoop:e.scoop}),this.crontasks.delete(e.id);try{await zb(e.id)}catch(t){Y.warn(`Failed to delete orphaned cron task from DB`,{id:e.id,error:t instanceof Error?t.message:String(t)})}return!0}async runCronScheduler(){let e=new Date;for(let t of this.crontasks.values())await this.deleteIfOrphanedCron(t)||t.status===`active`&&t.nextRun&&(new Date(t.nextRun)>e||await this.runDueCronTask(t,e))}async runDueCronTask(e,t){let n={time:t.toISOString()};if(e.filter)try{let r=this.compileFilter(e.filter,!1)(null);if(r===!1){Y.debug(`Cron task skipped by filter`,{id:e.id,name:e.name}),e.nextRun=iE(e.cron,t)?.toISOString()??null,e.lastRun=t.toISOString(),await Ib(e);return}typeof r==`object`&&r&&(n=r)}catch(t){Y.error(`Cron filter error`,{id:e.id,error:t instanceof Error?t.message:String(t)})}let r={type:`cron`,cronId:e.id,cronName:e.name,targetScoop:e.scoop,timestamp:t.toISOString(),body:n};Y.info(`Cron task running`,{id:e.id,name:e.name}),this.dispatch(r),e.nextRun=iE(e.cron,t)?.toISOString()??null,e.lastRun=t.toISOString(),await Ib(e)}generateId(){let e=``;for(let t=0;t<12;t++)e+=`abcdefghijklmnopqrstuvwxyz0123456789`[Math.floor(Math.random()*36)];return e}compileFilter(e,t){try{return t?Function(`event`,`return (${e})(event);`):Function(`return (${e})();`)}catch(e){throw Error(`Invalid filter function: ${e instanceof Error?e.message:String(e)}`)}}};function uE(e,t,n){return e?e===t||e===n||`${e}-scoop`===n:!1}function dE(e){let t=new Set;for(let n of e)t.add(n.folder),n.name&&n.name!==n.folder&&t.add(n.name);return Array.from(t)}function fE(e,t,n){if(t.length===0&&n.length===0)return null;let r=[];t.length>0&&r.push(`${t.length} active webhook${t.length>1?`s`:``}`),n.length>0&&r.push(`${n.length} active cron task${n.length>1?`s`:``}`);let i=[...t.map(e=>` webhook delete ${e.id}`),...n.map(e=>` crontask delete ${e.id}`)].join(`
1030
+ `);return Error(`Cannot remove scoop '${e}': it has ${r.join(` and `)}. Unregister them first:\n${i}`)}let pE=null;function mE(){return pE||=new lE,pE}function hE(e){if(e.kind===`local`)return`mount ${_y(e.path)}`;let t=e.profile==="default"?``:` --profile ${_y(e.profile)}`;return`mount --source ${_y(e.source)}${t} ${_y(e.path)}`}function gE(){return`lick-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var _E=class{deps;entries=new Map;constructor(e){this.deps=e}hasHandoff(e){return this.entries.get(e)?.kind===`navigate-handoff`}registerNavigate(e){let t=gE(),n=e.body??{},r=typeof n.verb==`string`?n.verb:void 0,i=typeof n.target==`string`?n.target:void 0;return r===`upskill`&&i?this.entries.set(t,{kind:`navigate-upskill`,target:i,branch:typeof n.branch==`string`?n.branch:void 0,path:typeof n.path==`string`?n.path:void 0}):r===`handoff`&&this.entries.set(t,{kind:`navigate-handoff`}),t}registerSessionReload(e){let t=gE(),n=e.body??{},r=Array.isArray(n.mounts)?n.mounts:[];return n.reason===`mount-recovery`?r.length>0&&this.entries.set(t,{kind:`session-reload-mount`,mounts:r}):this.entries.set(t,{kind:`session-reload-plain`}),t}registerUpgrade(e){let t=gE(),n=e.upgradeFromVersion??`unknown`,r=e.upgradeToVersion??`unknown`;return this.entries.set(t,{kind:`upgrade`,from:n,to:r}),t}registerDiscovery(e){if(e.discoveryKind!==`llms-txt`)return null;let t=wx(e.discoveryOrigin,e.discoveryUrl);if(!t)return null;let n=gE();return this.entries.set(n,{kind:`discovery-llms-txt`,hostname:t}),n}async resolve(e,t){let n=this.entries.get(e);if(!n)return null;switch(n.kind){case`navigate-upskill`:return this.resolveUpskill(e,n,t);case`session-reload-mount`:return this.resolveMountRecovery(e,n,t);case`session-reload-plain`:return this.resolveSessionReloadPlain(e,t);case`upgrade`:return this.resolveUpgrade(e,n,t);case`discovery-llms-txt`:return this.resolveDiscovery(e,n,t);case`navigate-handoff`:return null}}async resolveHandoffByHuman(e,t){return this.hasHandoff(e)?(this.entries.delete(e),await this.deps.persistLickDecision(e,t?`allow`:`deny`),!0):!1}async resolveUpskill(e,t,n){this.entries.delete(e);let r;return n.decision!==`deny`&&(r=await this.runUpskillInstall(t)),await this.deps.persistLickDecision(e,n.decision),{settled:!0,persisted:!1,message:r}}async runUpskillInstall(e){let t=this.deps.getConeShell();if(!t)return`upskill could not run: no cone shell available.`;let n=e=>`'${e.replace(/'/g,`'\\''`)}'`,r=[`upskill`];e.branch&&r.push(`--branch`,n(e.branch)),e.path&&r.push(`--path`,n(e.path)),r.push(n(e.target)),r.push(`--all`);try{let e=await t.executeCommand(r.join(` `)),n=`${e.stdout}${e.stderr}`.trim();return n.length>0?n:`upskill exited ${e.exitCode}.`}catch(e){return`upskill failed: ${e instanceof Error?e.message:String(e)}`}}async resolveMountRecovery(e,t,n){this.entries.delete(e);let r;return n.decision!==`deny`&&(r=await this.runMountRecovery(t.mounts)),await this.deps.persistLickDecision(e,n.decision),{settled:!0,persisted:!1,message:r}}async runMountRecovery(e){let t=this.deps.getConeShell();if(!t)return`mount recovery could not run: no cone shell available.`;let n=[];for(let r of e){let e=hE(r);try{let r=await t.executeCommand(e),i=`${r.stdout}${r.stderr}`.trim();n.push(i.length>0?i:`${e} exited ${r.exitCode}.`)}catch(t){n.push(`${e} failed: ${t instanceof Error?t.message:String(t)}`)}}return n.join(`
1031
+ `)}async resolveSessionReloadPlain(e,t){return t.decision===`deny`?(this.entries.delete(e),await this.deps.persistLickDecision(e,`deny`),{settled:!0,persisted:!1,message:`Session-reload notice acknowledged.`}):{settled:!0,persisted:!1,message:`Nothing to confirm — the reload already completed. Use lick_dismiss to acknowledge and clear this notice.`}}async resolveUpgrade(e,t,n){this.entries.delete(e);let r;return r=n.decision===`deny`?`Upgrade dismissed — workspace files were left unchanged.`:await this.runUpgrade(t),await this.deps.persistLickDecision(e,n.decision),{settled:!0,persisted:!1,message:r}}async resolveDiscovery(e,t,n){if(n.decision!==`deny`)return{settled:!0,persisted:!1,message:`Nothing to confirm — use lick_dismiss to ignore this llms.txt host.`};let r=this.deps.getConeFs();if(!r)throw Error(`llms.txt dismissal could not persist: cone filesystem unavailable.`);let i=await Tx(r,t.hostname);return this.entries.delete(e),await this.deps.persistLickDecision(e,`deny`),{settled:!0,persisted:i,message:i?`Dismissed — ${t.hostname} was added to /etc/llmstxtignore.`:`Dismissed — ${t.hostname} is already ignored.`}}async runUpgrade(e){let t=this.deps.getConeShell();if(!t)return`upgrade could not run: no cone shell available.`;let n=`upgrade apply --from=${_y(e.from)} --to=${_y(e.to)}`;try{let e=await t.executeCommand(n),r=`${e.stdout}${e.stderr}`.trim();return r.length>0?r:`upgrade exited ${e.exitCode}.`}catch(e){return`upgrade failed: ${e instanceof Error?e.message:String(e)}`}}},vE=`# /etc/models — which models a scoop may be spawned with
1032
1032
  #
1033
1033
  # \`agent --model\` and \`scoop_scoop\` accept a \`provider:model\` id, so a scoop can
1034
1034
  # run on a provider OTHER than the selected one. That moves spend onto another
@@ -1061,17 +1061,17 @@ ${e.map(e=>{let t=e.metadata.allowedTools?` Allowed tools: ${e.metadata.allowed
1061
1061
  # openrouter:*
1062
1062
  # -openrouter:openai/o3-pro
1063
1063
  # -adobe:claude-opus-5
1064
- `;const hE=_(`model-policy-file`);var gE=class{fs;watcher;unwatch=null;constructor(e,t=null){this.fs=e,this.watcher=t}async init(){await this.ensureDefault(),await this.reload(),this.unwatch=this.watcher?.watch(`/etc`,e=>e===`/etc/models`,()=>void this.reload())??null}dispose(){this.unwatch?.(),this.unwatch=null}async ensureDefault(){try{await this.fs.mkdir(`/etc`,{recursive:!0}),await this.fs.exists(`/etc/models`)||(await this.fs.writeFile(ge,mE),hE.info(`Seeded default /etc/models policy`))}catch(e){hE.warn(`Failed to seed default model policy`,{error:e instanceof Error?e.message:String(e)})}}async reload(){try{let e=await this.fs.readFile(ge,{encoding:`utf-8`}),t=typeof e==`string`?e:new TextDecoder().decode(e);_e(le(t))}catch(e){_e(ve()),hE.warn(`Failed to read model policy; falling back to own-catalogue-only`,{error:e instanceof Error?e.message:String(e)})}}};function _E(){try{let e=ue();if(!e||!ce(e))return;let t=me().id;return t?{provider:e,id:t}:void 0}catch{return}}async function vE(e,t,n={}){if(!t)return e(()=>{});let r=n.intervalMs??5e3,i=n.maxBeats??24,a=n.stagePrefix??`shared-fs-mount`;t(`${a}:start`);let o=0,s=0,c=0,l=0,u=()=>{c+=1},d=setInterval(()=>{if(c>l)l=c,s=0;else if(s+=1,s>i){clearInterval(d);return}o+=1,t(`${a}:${o}`)},r);try{return await e(u)}finally{clearInterval(d)}}const yE=_(`scheduler`);var bE=class{callbacks;pollInterval=null;running=!1;constructor(e){this.callbacks=e}start(){this.running||(this.running=!0,this.pollInterval=setInterval(()=>this.pollTasks(),6e4),this.pollTasks(),yE.info(`Scheduler started`))}stop(){this.pollInterval&&=(clearInterval(this.pollInterval),null),this.running=!1,yE.info(`Scheduler stopped`)}async createTask(e,t,n,r){let i={id:`task-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,groupFolder:e,prompt:t,scheduleType:n,scheduleValue:r,status:`active`,nextRun:this.calculateNextRun(n,r),lastRun:null,createdAt:new Date().toISOString()};return await xb(i),yE.info(`Task created`,{id:i.id,groupFolder:e,scheduleType:n}),i}async updateTask(e,t){let n=await Sb(e);if(!n)return null;let r={...n,...t};return(t.scheduleType||t.scheduleValue)&&(r.nextRun=this.calculateNextRun(r.scheduleType,r.scheduleValue)),await xb(r),yE.info(`Task updated`,{id:e,updates:Object.keys(t)}),r}async pauseTask(e){return await this.updateTask(e,{status:`paused`})!==null}async resumeTask(e){return await Sb(e)?(await this.updateTask(e,{status:`active`}),!0):!1}async deleteTask(e){return await Sb(e)?(await wb(e),yE.info(`Task deleted`,{id:e}),!0):!1}async getTasksByScoop(e){return(await Cb()).filter(t=>t.groupFolder===e)}async getAllTasks(){return Cb()}pollTasks(){this.checkTasks().catch(e=>{yE.error(`Task poll failed`,{error:e instanceof Error?e.message:String(e)})})}async checkTasks(){let e=await Cb(),t=new Date;for(let n of e)n.status===`active`&&n.nextRun&&(new Date(n.nextRun)>t||await this.runTask(n))}async runTask(e){let t=this.callbacks.getScoop(e.groupFolder);if(!t){yE.warn(`Task scoop not found`,{taskId:e.id,groupFolder:e.groupFolder});return}yE.info(`Running task`,{id:e.id,groupFolder:e.groupFolder});try{let n=new Date().toISOString(),r=this.calculateNextRun(e.scheduleType,e.scheduleValue),i=e.scheduleType===`once`?`completed`:e.status;await xb({...e,lastRun:n,nextRun:r,status:i}),await this.callbacks.onTaskRun(e,t),yE.info(`Task completed`,{id:e.id})}catch(t){yE.error(`Task execution failed`,{id:e.id,error:t instanceof Error?t.message:String(t)})}}calculateNextRun(e,t){let n=new Date;switch(e){case`cron`:return eE(t,n)?.toISOString()??null;case`interval`:{let e=parseInt(t,10);return isNaN(e)||e<=0?null:new Date(n.getTime()+e).toISOString()}case`once`:return new Date(t)>n?t:null;default:return null}}};const X=_(`scoop-approval-router`);var xE=class{deps;registry;constructor(e){this.deps=e,this.registry=new d({onAutoSettle:(e,t,n)=>this.handleAutoSettle(e,t,n)})}handleAutoSettle(e,t,n){X.info(`Sudo request auto-settled fail-closed; retiring lick card`,{id:e,reason:t}),this.persistLickDecision(e,`deny`,n).catch(n=>{X.warn(`Failed to persist auto-settled lick decision`,{id:e,reason:t,error:n instanceof Error?n.message:String(n)})})}getConeSudoBroker(e){return l(e,this)}listPendingSudoRequests(e){let t=this.registry.list();return e===void 0?t:t.filter(t=>t.approverJid===e)}maySettle(e,t){return t===void 0||this.registry.get(e)?.approverJid===t}failScoop(e){return this.registry.failScoop(e)}failAll(){return this.registry.failAll()}settleGrantedRequests(e){let t=this.deps.getSudoManager();if(!t)return 0;let n=this.deps.getScoops(),r=0;for(let i of this.registry.list()){let a=n.get(i.scoopJid);if(!a||e!==void 0&&a.folder!==e||!SE(t.getPolicyForScoop(a.folder),i.request))continue;let{kind:o,detail:s}=i.request;this.registry.resolve(i.id,{decision:`allow`})&&(r++,X.info(`Sudo request auto-settled: policy now grants it`,{id:i.id,folder:a.folder,kind:o,detail:s.slice(0,80)}),this.persistLickDecision(i.id,`allow`,i.scoopJid).catch(e=>{X.warn(`Failed to persist auto-granted lick decision`,{id:i.id,error:e instanceof Error?e.message:String(e)})}))}return r}admitIfAlreadyGranted(e,t){let n=this.deps.getScoops().get(e),r=this.deps.getSudoManager();return!n||!r||!SE(r.getPolicyForScoop(n.folder),t)?null:(X.info(`Sudo request already granted by policy — skipping cone`,{scoopJid:e,folder:n.folder,kind:t.kind,detailPreview:t.detail.slice(0,80)}),{decision:`allow`})}async enqueueSudoRequest(e,t,n={}){let r=this.deps.getScoops(),i=n.approver??this.deps.findApprover(e);if(!i)return X.warn(`Sudo request received but no approver is registered — failing closed`,{scoopJid:e,kind:t.kind}),{decision:`deny`};if(!r.has(e))return X.warn(`Sudo request from unknown scoop — failing closed`,{scoopJid:e,kind:t.kind}),{decision:`deny`};if(t.kind===`write`&&Kr(t.detail))return X.warn(`Refusing sudo request for an unhonoured sudoers path`,{scoopJid:e,detail:t.detail}),{decision:`deny`};let a=this.admitIfAlreadyGranted(e,t);if(a)return a;let{id:o,pending:s}=this.registry.register(e,t,i.jid);X.info(`Sudo request enqueued for cone`,{id:o,scoopJid:e,kind:t.kind,detailPreview:t.detail.slice(0,80)});let c=r.get(e);this.deps.getLickManager()?.emitEvent({type:`sudo-request`,lickId:o,sudoKind:t.kind,sudoDetail:t.detail,sudoScoopName:t.requester??c?.assistantLabel??c?.name??e,sudoSuggestedPattern:t.suggestedPattern,sudoReason:t.reason,targetScoop:i.name,timestamp:new Date().toISOString(),body:{requestId:o,kind:t.kind,detail:t.detail,suggestedPattern:t.suggestedPattern,reason:t.reason,scoopJid:e}});try{await this.deliverSudoRequestToCone(i,e,o,t)}catch(t){let n=t instanceof Error?t.message:String(t);X.error(`Failed to deliver sudo request to cone — failing closed`,{id:o,scoopJid:e,error:n}),this.registry.resolve(o,{decision:`deny`})}return s}resolveSudoRequest(e,t,n){if(!this.maySettle(e,n))return X.warn(`Refusing a settle from a unit the request was not routed to`,{id:e,approverJid:n}),!1;let r=this.registry.resolve(e,t);return r?X.info(`Sudo request resolved by cone`,{id:e,decision:t.decision}):X.warn(`Sudo request resolve: unknown / already-settled id`,{id:e,decision:t.decision}),r}async resolveSudoRequestAndPersist(e,t,n){let r=this.registry.get(e);if(!r)return{settled:!1,persisted:!1};if(!this.maySettle(e,n))return X.warn(`Refusing a settle+persist from a unit the request was not routed to`,{id:e,approverJid:n}),{settled:!1,persisted:!1};let i=r.scoopJid,a=r.approverJid,o=this.resolveSudoRequest(e,t,n);if(!o)return{settled:!1,persisted:!1};let s=this.deps.getScoops().get(r.scoopJid),c=r.request.kind,l=s?.folder,u=this.deps.getSudoManager(),d=!1,f,p;if(t.decision===`always`&&u&&s&&s.parentJid!==null){if(c===`command`||c===`read`||c===`write`){let n=t.pattern?.trim()||r.request.suggestedPattern?.trim()||r.request.detail.trim();try{let e=await u.appendScoopRule(s.folder,c,n);e?(d=!0,f=e):p=`pattern collapsed to empty after sanitization`}catch(t){p=t instanceof Error?t.message:String(t),X.warn(`Failed to persist always grant`,{id:e,folder:s.folder,kind:c,error:p})}}else p=`cannot persist always grant for kind "${c}" (no matching sudoers directive)`}return await this.persistLickDecision(e,t.decision,i,a),{settled:o,persisted:d,persistedPattern:f,persistError:p,scoopFolder:l,kind:c}}async persistLickDecision(e,t,n,r){let i=t===`deny`?`dismissed`:`confirmed`,a=r??this.registry.get(e)?.approverJid,o=a?this.deps.getScoops().get(a):this.deps.findApprover(n??this.registry.get(e)?.scoopJid);if(o)try{let t=(await this.deps.getMessagesForScoop(o.jid)).find(t=>t.lickId===e||t.id===`sudo-request-${e}`);if(!t){X.warn(`Lick decision: no stored message found to flip`,{lickId:e});return}t.lickState=i,await this.deps.saveMessage(t),this.deps.onMessageUpdate(o.jid,{messageId:t.id,lickId:e,lickState:i})}catch(t){X.warn(`Failed to persist lick decision`,{lickId:e,error:t instanceof Error?t.message:String(t)})}}async deliverSudoRequestToCone(e,t,n,r){let i=this.deps.getScoops().get(t),a=r.requester??i?.assistantLabel??t,o=i?.folder??t,s=CE(a,n,r),c={id:`sudo-request-${n}`,chatJid:e.jid,senderId:o,senderName:a,content:s,timestamp:new Date().toISOString(),fromAssistant:!1,channel:`sudo-request`,lickId:n,lickState:`pending`};await this.deps.handleMessage(c)}};function SE(e,t){let{kind:n,detail:r}=t;return n===`command`?Hr(e,r)===`nopasswd-allow`:n===`read`||n===`write`?Yr(e,n,r)===`nopasswd-allow`:!1}function CE(e,t,n){let r=[`[@${e} sudo-request]`,`Lick ID: ${t}`,`Kind: ${n.kind}`,`Detail: ${n.detail}`];return n.reason&&r.push(`Reason given: ${n.reason}`),n.suggestedPattern&&r.push(`Suggested pattern: ${n.suggestedPattern}`),r.push(``,`Use the lick_confirm tool with lick_id="${t}" to approve (or always-approve with a pattern), or lick_dismiss with lick_id="${t}" and a reason to deny. A denial without a reason tells the scoop nothing it can act on.`),r.join(`
1065
- `)}async function wE(e,t,n){if(e.length===0||t<=0)return;let r=0,i=Math.min(t,e.length),a=async()=>{for(;r<e.length;){let t=r;r+=1;let i=e[t];if(i===void 0)return;await n(i)}};await Promise.all(Array.from({length:i},()=>a()))}let TE=null;function EE(e){TE=e}function DE(e,t,n){TE?.(e,t,n)}const OE=_(`scoop-completion-service`),kE=`/shared/scoop-notifications`,AE=1e3,jE=2e4;function ME(e){let t=e.replace(/\r\n?/g,`
1064
+ `;const yE=_(`model-policy-file`);var bE=class{fs;watcher;unwatch=null;constructor(e,t=null){this.fs=e,this.watcher=t}async init(){await this.ensureDefault(),await this.reload(),this.unwatch=this.watcher?.watch(`/etc`,e=>e===`/etc/models`,()=>void this.reload())??null}dispose(){this.unwatch?.(),this.unwatch=null}async ensureDefault(){try{await this.fs.mkdir(`/etc`,{recursive:!0}),await this.fs.exists(`/etc/models`)||(await this.fs.writeFile(ge,vE),yE.info(`Seeded default /etc/models policy`))}catch(e){yE.warn(`Failed to seed default model policy`,{error:e instanceof Error?e.message:String(e)})}}async reload(){try{let e=await this.fs.readFile(ge,{encoding:`utf-8`}),t=typeof e==`string`?e:new TextDecoder().decode(e);_e(le(t))}catch(e){_e(ve()),yE.warn(`Failed to read model policy; falling back to own-catalogue-only`,{error:e instanceof Error?e.message:String(e)})}}};function xE(){try{let e=ue();if(!e||!ce(e))return;let t=me().id;return t?{provider:e,id:t}:void 0}catch{return}}async function SE(e,t,n={}){if(!t)return e(()=>{});let r=n.intervalMs??5e3,i=n.maxBeats??24,a=n.stagePrefix??`shared-fs-mount`;t(`${a}:start`);let o=0,s=0,c=0,l=0,u=()=>{c+=1},d=setInterval(()=>{if(c>l)l=c,s=0;else if(s+=1,s>i){clearInterval(d);return}o+=1,t(`${a}:${o}`)},r);try{return await e(u)}finally{clearInterval(d)}}const CE=_(`scheduler`);var wE=class{callbacks;pollInterval=null;running=!1;constructor(e){this.callbacks=e}start(){this.running||(this.running=!0,this.pollInterval=setInterval(()=>this.pollTasks(),6e4),this.pollTasks(),CE.info(`Scheduler started`))}stop(){this.pollInterval&&=(clearInterval(this.pollInterval),null),this.running=!1,CE.info(`Scheduler stopped`)}async createTask(e,t,n,r){let i={id:`task-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,groupFolder:e,prompt:t,scheduleType:n,scheduleValue:r,status:`active`,nextRun:this.calculateNextRun(n,r),lastRun:null,createdAt:new Date().toISOString()};return await Tb(i),CE.info(`Task created`,{id:i.id,groupFolder:e,scheduleType:n}),i}async updateTask(e,t){let n=await Eb(e);if(!n)return null;let r={...n,...t};return(t.scheduleType||t.scheduleValue)&&(r.nextRun=this.calculateNextRun(r.scheduleType,r.scheduleValue)),await Tb(r),CE.info(`Task updated`,{id:e,updates:Object.keys(t)}),r}async pauseTask(e){return await this.updateTask(e,{status:`paused`})!==null}async resumeTask(e){return await Eb(e)?(await this.updateTask(e,{status:`active`}),!0):!1}async deleteTask(e){return await Eb(e)?(await Ob(e),CE.info(`Task deleted`,{id:e}),!0):!1}async getTasksByScoop(e){return(await Db()).filter(t=>t.groupFolder===e)}async getAllTasks(){return Db()}pollTasks(){this.checkTasks().catch(e=>{CE.error(`Task poll failed`,{error:e instanceof Error?e.message:String(e)})})}async checkTasks(){let e=await Db(),t=new Date;for(let n of e)n.status===`active`&&n.nextRun&&(new Date(n.nextRun)>t||await this.runTask(n))}async runTask(e){let t=this.callbacks.getScoop(e.groupFolder);if(!t){CE.warn(`Task scoop not found`,{taskId:e.id,groupFolder:e.groupFolder});return}CE.info(`Running task`,{id:e.id,groupFolder:e.groupFolder});try{let n=new Date().toISOString(),r=this.calculateNextRun(e.scheduleType,e.scheduleValue),i=e.scheduleType===`once`?`completed`:e.status;await Tb({...e,lastRun:n,nextRun:r,status:i}),await this.callbacks.onTaskRun(e,t),CE.info(`Task completed`,{id:e.id})}catch(t){CE.error(`Task execution failed`,{id:e.id,error:t instanceof Error?t.message:String(t)})}}calculateNextRun(e,t){let n=new Date;switch(e){case`cron`:return iE(t,n)?.toISOString()??null;case`interval`:{let e=parseInt(t,10);return isNaN(e)||e<=0?null:new Date(n.getTime()+e).toISOString()}case`once`:return new Date(t)>n?t:null;default:return null}}};const X=_(`scoop-approval-router`);var TE=class{deps;registry;constructor(e){this.deps=e,this.registry=new d({onAutoSettle:(e,t,n)=>this.handleAutoSettle(e,t,n)})}handleAutoSettle(e,t,n){X.info(`Sudo request auto-settled fail-closed; retiring lick card`,{id:e,reason:t}),this.persistLickDecision(e,`deny`,n).catch(n=>{X.warn(`Failed to persist auto-settled lick decision`,{id:e,reason:t,error:n instanceof Error?n.message:String(n)})})}getConeSudoBroker(e){return l(e,this)}listPendingSudoRequests(e){let t=this.registry.list();return e===void 0?t:t.filter(t=>t.approverJid===e)}maySettle(e,t){return t===void 0||this.registry.get(e)?.approverJid===t}failScoop(e){return this.registry.failScoop(e)}failAll(){return this.registry.failAll()}settleGrantedRequests(e){let t=this.deps.getSudoManager();if(!t)return 0;let n=this.deps.getScoops(),r=0;for(let i of this.registry.list()){let a=n.get(i.scoopJid);if(!a||e!==void 0&&a.folder!==e||!EE(t.getPolicyForScoop(a.folder),i.request))continue;let{kind:o,detail:s}=i.request;this.registry.resolve(i.id,{decision:`allow`})&&(r++,X.info(`Sudo request auto-settled: policy now grants it`,{id:i.id,folder:a.folder,kind:o,detail:s.slice(0,80)}),this.persistLickDecision(i.id,`allow`,i.scoopJid).catch(e=>{X.warn(`Failed to persist auto-granted lick decision`,{id:i.id,error:e instanceof Error?e.message:String(e)})}))}return r}admitIfAlreadyGranted(e,t){let n=this.deps.getScoops().get(e),r=this.deps.getSudoManager();return!n||!r||!EE(r.getPolicyForScoop(n.folder),t)?null:(X.info(`Sudo request already granted by policy — skipping cone`,{scoopJid:e,folder:n.folder,kind:t.kind,detailPreview:t.detail.slice(0,80)}),{decision:`allow`})}async enqueueSudoRequest(e,t,n={}){let r=this.deps.getScoops(),i=n.approver??this.deps.findApprover(e);if(!i)return X.warn(`Sudo request received but no approver is registered — failing closed`,{scoopJid:e,kind:t.kind}),{decision:`deny`};if(!r.has(e))return X.warn(`Sudo request from unknown scoop — failing closed`,{scoopJid:e,kind:t.kind}),{decision:`deny`};if(t.kind===`write`&&Kr(t.detail))return X.warn(`Refusing sudo request for an unhonoured sudoers path`,{scoopJid:e,detail:t.detail}),{decision:`deny`};let a=this.admitIfAlreadyGranted(e,t);if(a)return a;let{id:o,pending:s}=this.registry.register(e,t,i.jid);X.info(`Sudo request enqueued for cone`,{id:o,scoopJid:e,kind:t.kind,detailPreview:t.detail.slice(0,80)});let c=r.get(e);this.deps.getLickManager()?.emitEvent({type:`sudo-request`,lickId:o,sudoKind:t.kind,sudoDetail:t.detail,sudoScoopName:t.requester??c?.assistantLabel??c?.name??e,sudoSuggestedPattern:t.suggestedPattern,sudoReason:t.reason,targetScoop:i.name,timestamp:new Date().toISOString(),body:{requestId:o,kind:t.kind,detail:t.detail,suggestedPattern:t.suggestedPattern,reason:t.reason,scoopJid:e}});try{await this.deliverSudoRequestToCone(i,e,o,t)}catch(t){let n=t instanceof Error?t.message:String(t);X.error(`Failed to deliver sudo request to cone — failing closed`,{id:o,scoopJid:e,error:n}),this.registry.resolve(o,{decision:`deny`})}return s}resolveSudoRequest(e,t,n){if(!this.maySettle(e,n))return X.warn(`Refusing a settle from a unit the request was not routed to`,{id:e,approverJid:n}),!1;let r=this.registry.resolve(e,t);return r?X.info(`Sudo request resolved by cone`,{id:e,decision:t.decision}):X.warn(`Sudo request resolve: unknown / already-settled id`,{id:e,decision:t.decision}),r}async resolveSudoRequestAndPersist(e,t,n){let r=this.registry.get(e);if(!r)return{settled:!1,persisted:!1};if(!this.maySettle(e,n))return X.warn(`Refusing a settle+persist from a unit the request was not routed to`,{id:e,approverJid:n}),{settled:!1,persisted:!1};let i=r.scoopJid,a=r.approverJid,o=this.resolveSudoRequest(e,t,n);if(!o)return{settled:!1,persisted:!1};let s=this.deps.getScoops().get(r.scoopJid),c=r.request.kind,l=s?.folder,u=this.deps.getSudoManager(),d=!1,f,p;if(t.decision===`always`&&u&&s&&s.parentJid!==null){if(c===`command`||c===`read`||c===`write`){let n=t.pattern?.trim()||r.request.suggestedPattern?.trim()||r.request.detail.trim();try{let e=await u.appendScoopRule(s.folder,c,n);e?(d=!0,f=e):p=`pattern collapsed to empty after sanitization`}catch(t){p=t instanceof Error?t.message:String(t),X.warn(`Failed to persist always grant`,{id:e,folder:s.folder,kind:c,error:p})}}else p=`cannot persist always grant for kind "${c}" (no matching sudoers directive)`}return await this.persistLickDecision(e,t.decision,i,a),{settled:o,persisted:d,persistedPattern:f,persistError:p,scoopFolder:l,kind:c}}async persistLickDecision(e,t,n,r){let i=t===`deny`?`dismissed`:`confirmed`,a=r??this.registry.get(e)?.approverJid,o=a?this.deps.getScoops().get(a):this.deps.findApprover(n??this.registry.get(e)?.scoopJid);if(o)try{let t=(await this.deps.getMessagesForScoop(o.jid)).find(t=>t.lickId===e||t.id===`sudo-request-${e}`);if(!t){X.warn(`Lick decision: no stored message found to flip`,{lickId:e});return}t.lickState=i,await this.deps.saveMessage(t),this.deps.onMessageUpdate(o.jid,{messageId:t.id,lickId:e,lickState:i})}catch(t){X.warn(`Failed to persist lick decision`,{lickId:e,error:t instanceof Error?t.message:String(t)})}}async deliverSudoRequestToCone(e,t,n,r){let i=this.deps.getScoops().get(t),a=r.requester??i?.assistantLabel??t,o=i?.folder??t,s=DE(a,n,r),c={id:`sudo-request-${n}`,chatJid:e.jid,senderId:o,senderName:a,content:s,timestamp:new Date().toISOString(),fromAssistant:!1,channel:`sudo-request`,lickId:n,lickState:`pending`};await this.deps.handleMessage(c)}};function EE(e,t){let{kind:n,detail:r}=t;return n===`command`?Hr(e,r)===`nopasswd-allow`:n===`read`||n===`write`?Yr(e,n,r)===`nopasswd-allow`:!1}function DE(e,t,n){let r=[`[@${e} sudo-request]`,`Lick ID: ${t}`,`Kind: ${n.kind}`,`Detail: ${n.detail}`];return n.reason&&r.push(`Reason given: ${n.reason}`),n.suggestedPattern&&r.push(`Suggested pattern: ${n.suggestedPattern}`),r.push(``,`Use the lick_confirm tool with lick_id="${t}" to approve (or always-approve with a pattern), or lick_dismiss with lick_id="${t}" and a reason to deny. A denial without a reason tells the scoop nothing it can act on.`),r.join(`
1065
+ `)}async function OE(e,t,n){if(e.length===0||t<=0)return;let r=0,i=Math.min(t,e.length),a=async()=>{for(;r<e.length;){let t=r;r+=1;let i=e[t];if(i===void 0)return;await n(i)}};await Promise.all(Array.from({length:i},()=>a()))}let kE=null;function AE(e){kE=e}function jE(e,t,n){kE?.(e,t,n)}const ME=_(`scoop-completion-service`),NE=`/shared/scoop-notifications`,PE=1e3,FE=2e4;function IE(e){let t=e.replace(/\r\n?/g,`
1066
1066
  `);if(t.length===0)return 0;let n=1;for(let e=0;e<t.length;e++)t[e]===`
1067
1067
  `&&n++;return t.endsWith(`
1068
- `)?n-1:n}function NE(e){return e.length>jE?e.slice(0,jE)+`
1069
- ... (truncated)`:e}var PE=class{scoopResponseBuffer=new Map;mutedScoops=new Set;pendingCompletions=new Map;deferredCompletions=new Map;failureReasons=new Map;completionWaiters=new Map;deps;constructor(e){this.deps=e}recordFailure(e,t){let n=t.trim();n&&(this.failureReasons.has(e)||this.failureReasons.set(e,n))}appendResponseChunk(e,t){let n=this.scoopResponseBuffer.get(e)??``;this.scoopResponseBuffer.set(e,n+t)}setResponseFull(e,t){this.scoopResponseBuffer.set(e,t)}clearResponse(e){this.scoopResponseBuffer.delete(e),this.failureReasons.delete(e)}muteScoops(e){for(let t of e)this.mutedScoops.add(t);OE.info(`Scoops muted`,{count:e.length})}isScoopMuted(e){return this.mutedScoops.has(e)}forgetScoop(e,t){this.scoopResponseBuffer.delete(e),this.mutedScoops.delete(e),this.pendingCompletions.delete(e),this.deferredCompletions.delete(e),this.failureReasons.delete(e);let n=this.completionWaiters.get(e);if(n&&n.length>0){this.completionWaiters.delete(e);for(let r of n)try{r(null)}catch(n){OE.warn(`completion waiter threw on cleanup`,{jid:e,reason:t,error:n instanceof Error?n.message:String(n)})}}}shutdown(){for(let e of this.completionWaiters.values())for(let t of e)try{t(null)}catch(e){OE.warn(`completion waiter threw during shutdown`,{error:e instanceof Error?e.message:String(e)})}this.completionWaiters.clear(),this.mutedScoops.clear(),this.pendingCompletions.clear(),this.deferredCompletions.clear(),this.failureReasons.clear(),this.scoopResponseBuffer.clear()}async notifyCompletion(e){let t=this.deps.getScoop(e);if(!t||t.parentJid===null)return;DE(`complete`,t.folder);let n=this.scoopResponseBuffer.get(e)??``;if(this.scoopResponseBuffer.delete(e),t.notifyOnComplete===!1){this.failureReasons.delete(e);return}if(t.outcomeReceiptPath){this.deferForOutcomeReceipt(t,e,n);return}if(this.claimWaiters(e,n)){this.failureReasons.delete(e);return}if(this.mutedScoops.has(e)){this.stashMuted(e,t.folder,n,new Date().toISOString(),`completion`);return}let r=this.failureReasons.get(e);this.failureReasons.delete(e),!(!n&&!r)&&await this.deliverCompletionToParent(t,n,{exitCode:+!!r,...r?{reason:r}:{}})}async notifyWithOutcome(e,t){let n=this.deps.getScoop(e);this.failureReasons.delete(e);let r=this.deferredCompletions.get(e);if(this.deferredCompletions.delete(e),!n||n.parentJid===null||n.notifyOnComplete===!1)return;let i=r?.responseText??this.scoopResponseBuffer.get(e)??t.reason??``;this.scoopResponseBuffer.delete(e);let a=RE(i,t),o=r?.disposition??`notify`,s=r?.timestamp??new Date().toISOString();this.applyDeferredDisposition(e,n,o,a,s,t)||!i&&t.exitCode===0||await this.deliverCompletionToParent(n,i,{exitCode:t.exitCode,...t.reason?{reason:t.reason}:{},...t.receiptPath?{receiptPath:t.receiptPath}:{}})}deferForOutcomeReceipt(e,t,n){let r=this.currentDeferredDisposition(t);this.deferredCompletions.set(t,{responseText:n,timestamp:new Date().toISOString(),disposition:r}),OE.info(`Scoop completion deferred pending outcome receipt`,{scoop:e.folder,receiptPath:e.outcomeReceiptPath,disposition:r,responseLength:n.length})}currentDeferredDisposition(e){let t=this.completionWaiters.get(e);return t&&t.length>0?`wait`:this.mutedScoops.has(e)?`mute`:`notify`}claimWaiters(e,t){let n=this.completionWaiters.get(e);if(!n||n.length===0)return!1;this.completionWaiters.delete(e);let r=NE(t);for(let t of n)try{t(r||null)}catch(t){OE.warn(`completion waiter threw`,{jid:e,error:t instanceof Error?t.message:String(t)})}return!0}stashMuted(e,t,n,r,i,a){this.pendingCompletions.set(e,{responseText:n,timestamp:r}),OE.info(i===`outcome`?`Scoop outcome stashed (muted)`:`Scoop completion stashed (muted)`,{scoop:t,responseLength:n.length,...a===void 0?{}:{exitCode:a}})}applyDeferredDisposition(e,t,n,r,i,a){return n===`wait`&&this.claimWaiters(e,r)?!0:n===`mute`&&this.mutedScoops.has(e)?(this.stashMuted(e,t.folder,r,i,`outcome`,a.exitCode),!0):!1}async deliverCompletionToParent(e,t,n={exitCode:0}){let r=this.deps.findParent(e.jid);if(!r)return;let i=n.exitCode!==0,a=ME(t),o=t.slice(0,AE),s,c=null,l=null,u=t||n.reason||`(exit code: ${n.exitCode})`;try{l=await this.writeScoopCompletionArtifact(e,u),OE.info(`Routing scoop completion to cone`,{scoop:e.folder,responseLength:t.length,lineCount:a,notificationPath:l,failed:i,exitCode:n.exitCode})}catch(t){c=t instanceof Error?t.message:String(t),OE.warn(`Failed to persist scoop completion artifact, falling back to inline preview`,{scoop:e.folder,error:c})}let d=i?`failed`:`completed`;s=c===null?FE(e.assistantLabel,d,l??`unavailable`,a,o||u.slice(0,AE),n):IE(e.assistantLabel,d,a,o||u.slice(0,AE),c,n);let f={id:`scoop-done-${e.jid}-${Date.now()}`,chatJid:r.jid,senderId:e.folder,senderName:e.assistantLabel,content:s,timestamp:new Date().toISOString(),fromAssistant:!1,channel:`scoop-notify`};try{this.deps.notifyIncomingMessage(r.jid,f)}catch(t){OE.warn(`onIncomingMessage for scoop-notify threw`,{scoop:e.folder,error:t instanceof Error?t.message:String(t)})}try{await this.deps.handleMessage(f)}catch(t){let n=t instanceof Error?t.message:String(t);OE.error(`Failed to route scoop completion to cone`,{scoop:e.folder,error:n}),this.deps.reportError(r.jid,`Scoop ${e.folder} ${d} but notification failed: ${n}`)}}async writeScoopCompletionArtifact(e,t){let n=this.deps.getSharedFs();if(!n)throw Error(`Shared filesystem not initialized`);await n.mkdir(kE,{recursive:!0}),await this.pruneScoopCompletionArtifacts(199);let r=new Date().toISOString().replace(/[:.]/g,`-`),i=Math.random().toString(36).slice(2,8),a=`${kE}/${r}-${e.folder}-${i}.md`;return await n.writeFile(a,t),await this.pruneScoopCompletionArtifacts(),a}async pruneScoopCompletionArtifacts(e=200){let t=this.deps.getSharedFs();if(!t)return;let n;try{n=await t.readDir(kE)}catch{return}let r=n.filter(e=>e.type===`file`).map(e=>e.name).sort(),i=r.length-e;if(!(i<=0))for(let e of r.slice(0,i)){let n=`${kE}/${e}`;try{await t.rm(n)}catch(e){OE.warn(`Failed to prune scoop completion artifact`,{path:n,error:e instanceof Error?e.message:String(e)})}}}async unmuteScoops(e){let t=[],n=[];for(let r of e){this.mutedScoops.delete(r);let e=this.pendingCompletions.get(r);if(!e)continue;this.pendingCompletions.delete(r);let i=this.deps.getScoop(r);if(!i||i.parentJid===null)continue;let a={jid:r,summary:NE(e.responseText),timestamp:e.timestamp,notificationPath:null};t.push(a),n.push(this.writeScoopCompletionArtifact(i,e.responseText).then(e=>{a.notificationPath=e}).catch(e=>{OE.warn(`unmute artifact persist failed`,{jid:r,error:e instanceof Error?e.message:String(e)})}))}return await Promise.all(n),OE.info(`Scoops unmuted`,{count:e.length,consumed:t.length}),t}async waitForScoops(e,t){if(e.length===0)return[];let n=Array.from(new Set(e)),r=new Map,i=[];for(let e of n)this.mutedScoops.has(e)||(this.mutedScoops.add(e),i.push(e));this.claimPendingSummaries(n,r);let a=n.filter(e=>!r.has(e)),o=a.filter(e=>this.deps.hasScoop(e)),s=a.filter(e=>!this.deps.hasScoop(e));for(let e of s)r.set(e,{summary:null,timedOut:!0});let c=[],l=o.map(e=>new Promise(t=>{let n=n=>{r.has(e)||(r.set(e,{summary:n,timedOut:n===null}),t())};c.push({jid:e,waiter:n});let i=this.completionWaiters.get(e);i||(i=[],this.completionWaiters.set(e,i)),i.push(n)}));try{await this.awaitScoopWaiters(l,t)}finally{this.removeCompletionWaiters(c);for(let e of i)this.mutedScoops.delete(e)}for(let e of o)r.has(e)||r.set(e,{summary:null,timedOut:!0});return e.map(e=>{let t=r.get(e)??{summary:null,timedOut:!0};return{jid:e,summary:t.summary,timedOut:t.timedOut}})}claimPendingSummaries(e,t){for(let n of e){let e=this.pendingCompletions.get(n);e&&(this.pendingCompletions.delete(n),t.set(n,{summary:NE(e.responseText),timedOut:!1}))}}async awaitScoopWaiters(e,t){if(e.length===0)return;if(t==null||t<0){await Promise.all(e);return}let n=null;try{await Promise.race([Promise.all(e),new Promise(e=>{n=setTimeout(()=>e(),t)})])}finally{n&&clearTimeout(n)}}removeCompletionWaiters(e){for(let{jid:t,waiter:n}of e){let e=this.completionWaiters.get(t);if(!e)continue;let r=e.indexOf(n);r!==-1&&e.splice(r,1),e.length===0&&this.completionWaiters.delete(t)}}scheduleScoopWait(e,t,n){let r=Array.from(new Set(e)),i=r.filter(e=>this.deps.hasScoop(e)),a=r.filter(e=>!this.deps.hasScoop(e));return this.waitForScoops(i,t).then(e=>this.deliverWaitResultsToCone(e,n)).catch(e=>{OE.error(`scheduleScoopWait failed`,{error:e instanceof Error?e.message:String(e)})}),{scheduled:i,unknown:a}}async deliverWaitResultsToCone(e,t){if(e.length===0)return;let n=t===void 0?void 0:this.deps.getScoop(t);if(n){await this.deliverWaitResultsTo(n,e);return}let r=new Map;for(let t of e){let e=this.deps.findParent(t.jid);if(!e)continue;let n=r.get(e.jid)??{parent:e,results:[]};n.results.push(t),r.set(e.jid,n)}for(let{parent:e,results:t}of r.values())await this.deliverWaitResultsTo(e,t)}async deliverWaitResultsTo(e,t){let n=[`[scoop_wait completed]`],r=0,i=0;for(let e of t){let t=this.deps.getScoop(e.jid)?.folder??e.jid;e.timedOut?(r+=1,n.push(`--- ${t} (timed out) ---`)):(i+=1,n.push(`--- ${t} ---`),n.push(e.summary??`(no output)`))}let a=`${i} completed, ${r} timed out`;n.splice(1,0,a);let o={id:`scoop-wait-${Date.now()}-${Math.random().toString(36).slice(2,10)}`,chatJid:e.jid,senderId:`scoop-wait`,senderName:`scoop-wait`,content:n.join(`
1070
- `),timestamp:new Date().toISOString(),fromAssistant:!1,channel:`scoop-wait`};try{this.deps.notifyIncomingMessage(e.jid,o)}catch(e){OE.warn(`onIncomingMessage for scoop-wait threw`,{error:e instanceof Error?e.message:String(e)})}try{await this.deps.handleMessage(o)}catch(t){let n=t instanceof Error?t.message:String(t);OE.error(`Failed to route scoop-wait result to cone`,{error:n}),this.deps.reportError(e.jid,`scoop_wait completed but notification failed: ${n}`)}}};function FE(e,t,n,r,i,a){return[`[@${e} ${t}]`,...LE(a),`VFS path: ${n}`,`Total lines: ${r}`,`Preview (up to ${AE} chars):`,i].join(`
1071
- `)}function IE(e,t,n,r,i,a){return[`[@${e} ${t}]`,...LE(a),`VFS path: unavailable`,`Artifact persistence error: ${i}`,`Total lines: ${n}`,`Preview (up to ${AE} chars):`,r].join(`
1072
- `)}function LE(e){let t=[],n=e.exitCode!==0;return!n&&!e.reason&&!e.receiptPath?t:(t.push(`status: ${n?`failed`:`ok`}`),t.push(`exitCode: ${e.exitCode}`),e.reason&&t.push(`reason: ${e.reason.slice(0,500)}`),e.receiptPath&&t.push(`status.json: ${e.receiptPath}`),t)}function RE(e,t){if(t.exitCode===0)return e;let n=t.reason?`failed (exit ${t.exitCode}): ${t.reason}`:`failed (exit ${t.exitCode})`;return e?`${n}\n${e}`:n}const zE=9e5,BE=36e5;function VE(e,t,n){let r=wn(t),i=e.get(r);if(!i){e.set(r,{ids:[t],cost:n});return}i.ids.includes(t)||i.ids.push(t),i.cost+=n}function HE(e,t){let n=[...e.values()].sort((e,t)=>t.cost-e.cost||(e.ids[0]??``).localeCompare(t.ids[0]??``)).map(e=>Cn(e.ids,t)),r=e.get(wn(t));return{current:r?Cn(r.ids,t):t,models:n}}function UE(e,t){let n=Bn(e);return!n||!Gn(e)&&wn(t)!==wn(n)?t:n}function WE(e,t,n=`live`,r=[]){let i=t.getAgentMessages().filter(e=>e.role===`assistant`),a=[...i,...r];if(a.length===0)return null;let o={input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},s=new Map;for(let e of a)o.input+=e.usage.input,o.output+=e.usage.output,o.cacheRead+=e.usage.cacheRead,o.cacheWrite+=e.usage.cacheWrite,o.totalTokens+=e.usage.totalTokens,o.cost.input+=e.usage.cost.input,o.cost.output+=e.usage.cost.output,o.cost.cacheRead+=e.usage.cost.cacheRead,o.cost.cacheWrite+=e.usage.cost.cacheWrite,o.cost.total+=e.usage.cost.total,VE(s,e.model,e.usage.cost.total);let c=HE(s,UE(e,(i.length>0?i:a).reduce((e,t)=>t.timestamp>=e.timestamp?t:e).model)),l=a.map(e=>e.timestamp).sort((e,t)=>e-t),u=l[0],d=l[l.length-1],f=d-u,p=Math.max(1,Math.ceil(f/zE))*zE;return{name:e.assistantLabel,type:Nn(e)?`cone`:`scoop`,model:c.current,models:c.models,source:n,usage:o,turns:a.length,firstActivity:u,lastActivity:d,activeTimeMs:p}}function GE(e,t){return e.notifyOnComplete===!1&&e.parentJid!==null&&t.has(e.parentJid)}var KE=class{dropped=[];droppedMessages=[];foldedByParent=new Map;deps;constructor(e){this.deps=e}foldedMessagesFor(e){return this.foldedByParent.get(e)??[]}async settleFolded(e){let t=this.foldedByParent.get(e);if(this.foldedByParent.delete(e),!t||t.length===0)return;let n=this.deps.getScoops().get(e);if(!n||await this.deps.mergeFoldedIntoFrozen?.(e,t))return;let r=WE(n,{getAgentMessages:()=>[]},`dropped`,t);r&&(this.droppedMessages.push([...t]),this.dropped.push(r))}snapshot(e){let t=this.deps.getScoops(),n=t.get(e),r=this.deps.getContexts().get(e);if(!n||!r)return;let i=r.getAgentMessages().filter(e=>e.role===`assistant`),a=[...this.foldedMessagesFor(e)];if(GE(n,t)){if(i.length===0&&a.length===0)return;let t=n.parentJid,r=this.foldedByParent.get(t)??[];this.foldedByParent.set(t,[...r,...i,...a]),this.foldedByParent.delete(e);return}let o=WE(n,r,`dropped`,a);o&&this.dropped.push(o);let s=[...i,...a];s.length>0&&this.droppedMessages.push(s),this.foldedByParent.delete(e)}getSessionCosts(e={}){let t=[],n=this.deps.getContexts();for(let e of this.deps.getScoops().values()){let r=n.get(e.jid);if(!r)continue;let i=WE(e,r,`live`,this.foldedMessagesFor(e.jid));i&&t.push(i)}return e.includeDropped&&t.push(...this.dropped),t}getBurnRate(e=Date.now()){let t=this.droppedMessages.flat();for(let e of this.foldedByParent.values())t.push(...e);for(let e of this.deps.getContexts().values())for(let n of e.getAgentMessages())n.role===`assistant`&&t.push(n);if(t.length===0)return 0;let n=t[0].timestamp;for(let e of t)n=Math.min(n,e.timestamp);let r=Math.max(e-n,6e4),i=Math.min(9e5,r),a=Math.min(36e5,r),o=e-i,s=e-a,c=0,l=0,u=0;for(let e of t){let t=e.usage.cost.total;u+=t,e.timestamp>=o&&(c+=t),e.timestamp>=s&&(l+=t)}let d=c*BE/i,f=l*BE/a,p=u*BE/r,m=d*.5+f*.3+p*.2;return Math.max(m,p)}getContextFills(){return[...this.deps.getContexts().entries()].map(([e,t])=>({jid:e,fill:t.getContextFill()}))}getModelCosts(e={}){let t=new Map,n=new Map,r=this.deps.getContexts();for(let[e,i]of r){let r=i.getAgentMessages().filter(e=>e.role===`assistant`);this.aggregateMessages(r,t,n),this.aggregateMessages(this.foldedMessagesFor(e),t,n)}if(e.includeDropped)for(let e of this.droppedMessages)this.aggregateMessages(e,t,n);for(let[e,r]of n){let n=t.get(e);n&&(n.model=Cn(r.ids))}return Array.from(t.values()).sort((e,t)=>t.cost-e.cost)}aggregateMessages(e,t,n){for(let r of e){let e=wn(r.model);VE(n,r.model,r.usage.cost.total);let i=t.get(e);i?(i.input+=r.usage.input,i.output+=r.usage.output,i.cacheRead+=r.usage.cacheRead,i.cacheWrite+=r.usage.cacheWrite,i.cost+=r.usage.cost.total,i.turns+=1):t.set(e,{model:r.model,input:r.usage.input,output:r.usage.output,cacheRead:r.usage.cacheRead,cacheWrite:r.usage.cacheWrite,cost:r.usage.cost.total,turns:1})}}reset(){this.dropped=[],this.droppedMessages=[],this.foldedByParent.clear()}};const qE=_(`scoop-idle-timers`);var JE=class{deps;timers=new Map;constructor(e){this.deps=e}start(e){if(this.clear(e),this.deps.getTabs().get(e)?.status===`processing`)return;let t=setTimeout(()=>{this.timers.delete(e),this.fire(e)},12e4);this.timers.set(e,t)}clear(e){let t=this.timers.get(e);t&&(clearTimeout(t),this.timers.delete(e))}clearAll(){for(let e of this.timers.keys())this.clear(e)}fire(e){let t=this.deps.getScoops().get(e);if(!t||t.parentJid===null||this.deps.getTabs().get(e)?.status!==`ready`)return;let n=this.deps.findParent(e);if(!n)return;let r={id:`scoop-idle-${e}-${Date.now()}`,chatJid:n.jid,senderId:t.folder,senderName:t.assistantLabel,content:`[@${t.assistantLabel} idle]: Scoop "${t.name}" has been ready for 2 minutes without receiving any work. This is expected if the scoop is waiting for webhooks or cron tasks. If you intended to delegate work, use feed_scoop to send a prompt.`,timestamp:new Date().toISOString(),fromAssistant:!1,channel:`scoop-idle`};qE.info(`Scoop idle timeout`,{jid:e,scoop:t.folder});try{this.deps.notifyIncomingMessage(n.jid,r)}catch(t){qE.warn(`onIncomingMessage for scoop-idle threw`,{jid:e,error:t instanceof Error?t.message:String(t)})}this.deps.handleMessage(r).catch(t=>{let n=t instanceof Error?t.message:String(t);qE.error(`Failed to send idle notification`,{jid:e,error:n})})}};const YE=_(`work-unit`),XE={initializing:new Set([`ready`,`error`]),ready:new Set([`processing`,`error`,`initializing`]),processing:new Set([`ready`,`error`]),error:new Set([`initializing`,`ready`,`processing`])};var ZE=class{id;deps;tab=null;context=null;observers=new Set;closed=!1;constructor(e,t){this.id=e,this.deps=t}get descriptor(){let e=this.deps.getScoop(this.id);if(!e)throw Error(`Work unit not found: ${this.id}`);let t=sr(e,this.tab??void 0);return this.closed?{...t,status:`closed`}:t}get status(){return this.closed?`closed`:ar(this.tab?.status)}get isClosed(){return this.closed}transition(e,t={}){if(this.closed)return YE.debug(`ignoring transition on closed unit`,{jid:this.id,next:e}),!1;let n=this.tab?.status;if(n!==void 0&&n!==e&&!XE[n].has(e))return YE.warn(`illegal work-unit transition ignored`,{jid:this.id,from:n,to:e}),!1;let r=new Date().toISOString();return this.tab={jid:this.id,contextId:this.tab?.contextId??`scoop-${this.id}`,...this.tab,...t,status:e,lastActivity:t.lastActivity??r},e!==`error`&&delete this.tab.error,!0}touch(){this.tab&&={...this.tab,lastActivity:new Date().toISOString()}}attachContext(e,t){if(this.closed)throw Error(`Cannot attach a context to closed unit ${this.id}`);this.context=e,this.tab={jid:this.id,contextId:t,status:`initializing`,lastActivity:new Date().toISOString()}}detachContext(){this.deps.clearIdleTimer(this.id),this.context?.stop(),this.context=null}disposeContext(){this.deps.clearIdleTimer(this.id),this.context?.dispose(),this.context=null,this.tab=null}observe(e){return this.closed?()=>{}:(this.observers.add(e),()=>{this.observers.delete(e)})}get observerCount(){return this.observers.size}dispatch(e,...t){for(let n of this.observers){let r=n[e];if(r)try{r(...t)}catch(t){YE.warn(`scoop observer threw`,{jid:this.id,event:e,error:t instanceof Error?t.message:String(t)})}}}send(e){if(this.closed)return Promise.reject(Error(`Work unit is closed: ${this.id}`));let t=this.deps.getScoop(this.id);return this.deps.sendPrompt(this.id,e.text,e.senderId??`user`,e.senderName??t?.assistantLabel??this.id,e.steer===void 0?void 0:{steer:e.steer})}subscribe(e){return this.observe({onStatusChange:t=>e({type:`status`,status:ar(t)}),onResponse:(t,n)=>e({type:`response`,text:t,isPartial:n}),onSendMessage:t=>e({type:`send-message`,text:t}),onError:t=>e({type:`error`,error:t})})}async abort(e){this.context?.stop()}close(){return this.closed?Promise.resolve():this.deps.unregister(this.id)}async teardown(){if(this.closed)return;this.closed=!0,this.deps.clearIdleTimer(this.id);let e=this.context;this.context=null;try{e?.stop(),e?.dispose()}catch(e){YE.warn(`context dispose threw during close`,{jid:this.id,error:e instanceof Error?e.message:String(e)})}this.observers.clear(),this.deps.forgetCompletion(this.id,`close`),YE.info(`Work unit closed`,{jid:this.id})}async snapshot(){return{descriptor:this.descriptor,messages:this.context?this.context.getAgentMessages():[],contextFill:this.context?this.context.getContextFill():0}}};let QE=null;function $E(e){QE=e}function eD(e,t){QE?.(e,t)}function tD(e){return typeof e==`string`&&e.startsWith(`No API key configured`)}function nD(e){if(typeof e!=`string`||!e)return!1;let t=e.toLowerCase();return t.includes(`the provided model identifier is invalid`)||t.includes(`model not allowed`)}function rD(e){return typeof e!=`string`||!e?!1:e.toLowerCase().includes(`please log in again`)}const iD=[`run out of available resources`,`ran out of available resources`,`run out of credits`,`ran out of credits`],aD=[`active grok subscription`,`need a grok subscription`,`needs a grok subscription`];function oD(e){if(typeof e!=`string`||!e)return!1;let t=e.toLowerCase();return t.includes(`quota_exceeded`)?!0:iD.some(e=>t.includes(e))&&aD.some(e=>t.includes(e))}function sD(e){return tD(e)||nD(e)||rD(e)||oD(e)}function cD(e){return/image exceeds.*maximum/i.test(e)||/Could not process image/i.test(e)||/invalid.*image/i.test(e)||/image.*too (large|big)/i.test(e)}function lD(e){return oD(e)?!0:/\b(401|403|404|405|410|422)\b/.test(e)||/unauthorized|forbidden|authentication.*failed|invalid.*api.?key/i.test(e)||/session expired|log in again|re-?authenticate/i.test(e)||/model.*not.*found|invalid.*model|unknown.*model|does.*not.*exist/i.test(e)||/decommissioned|no longer supported|deprecated.*model|model.*deprecated|model.*retired/i.test(e)||/insufficient.*quota|billing|payment.*required|account.*suspended/i.test(e)||/invalid.*request|malformed|bad.*request/i.test(e)}function uD(e){return oD(e)?!1:/\b429\b|rate.*limit|too.*many.*requests|quota.*exceeded/i.test(e)||/\b(500|502|503|504)\b|internal.*server|bad.*gateway|service.*unavailable|gateway.*timeout/i.test(e)||/network.*error|failed to fetch|connection.*refused|timeout|econnreset|socket.*hang.*up/i.test(e)||/overloaded|temporarily.*unavailable|try.*again/i.test(e)}function dD(e,t){return t?.aborted?Promise.resolve(!0):new Promise(n=>{let r=()=>{clearTimeout(i),n(!0)},i=setTimeout(()=>{t?.removeEventListener(`abort`,r),n(!1)},e);t?.addEventListener(`abort`,r,{once:!0})})}function fD(e,t,n){let r=e[e.length-1];if(r){let i=r.role===`assistant`?r.errorMessage:void 0;if(i){if(pD(i,e,t,n))return}else t.imageRecovery.markSettled(),t.overflow.markSettled(),r.role===`assistant`&&t.overflow.markAssistantSucceeded()}t.persist(e)}function pD(e,t,n,r){let i=n.imageRecovery.isActive||n.overflow.isActive;return!i&&cD(e)?(n.imageRecovery.recover(t),!0):n.overflow.shouldRecover(t[t.length-1])?(n.overflow.recover(t,r),!0):!i&&n.isProcessing()&&!n.didStreamDeltas()?(n.latchStreamError(e),!0):(n.imageRecovery.markSettled(),n.overflow.markSettled(),eD(`llm`,e),n.onError(e),!1)}function mD(e,t,n){switch(e.type){case`message_update`:{let n=e.assistantMessageEvent;n.type===`text_delta`&&t.textDelta(n.delta);break}case`tool_execution_start`:return t.toolStart(e.toolName,e.args,e.toolCallId);case`tool_execution_update`:hD(e,t);break;case`tool_execution_end`:gD(e,t),t.checkpoint();break;case`message_end`:e.message.role===`assistant`&&t.assistantMessageEnd(e.message),t.checkpoint(e.message);break;case`turn_start`:t.turnStart();break;case`turn_end`:if(t.turnCompleted(),e.message.role===`assistant`&&Yo(e.message))break;t.responseDone();break;case`agent_end`:t.agentEnd(e.messages,n)}}function hD(e,t){let n=e.partialResult;for(let r of n?.content??[])r.type===`tool_ui`&&r.requestId&&r.html?t.toolUI(e.toolName,r.requestId,r.html):r.type===`tool_ui_done`&&r.requestId?t.toolUIDone(r.requestId):r.type===`progress`&&r.progress&&t.toolProgress(e.toolName,r.progress,e.toolCallId)}function gD(e,t){let n=e.result,r=[];for(let e of n?.content??[])e.type===`text`&&e.text&&r.push(e.text),e.type===`image`&&e.data&&e.mimeType&&r.push(`<img:data:${e.mimeType};base64,${e.data}>`);let i=r.join(`
1068
+ `)?n-1:n}function LE(e){return e.length>FE?e.slice(0,FE)+`
1069
+ ... (truncated)`:e}var RE=class{scoopResponseBuffer=new Map;mutedScoops=new Set;pendingCompletions=new Map;deferredCompletions=new Map;failureReasons=new Map;completionWaiters=new Map;deps;constructor(e){this.deps=e}recordFailure(e,t){let n=t.trim();n&&(this.failureReasons.has(e)||this.failureReasons.set(e,n))}appendResponseChunk(e,t){let n=this.scoopResponseBuffer.get(e)??``;this.scoopResponseBuffer.set(e,n+t)}setResponseFull(e,t){this.scoopResponseBuffer.set(e,t)}clearResponse(e){this.scoopResponseBuffer.delete(e),this.failureReasons.delete(e)}muteScoops(e){for(let t of e)this.mutedScoops.add(t);ME.info(`Scoops muted`,{count:e.length})}isScoopMuted(e){return this.mutedScoops.has(e)}forgetScoop(e,t){this.scoopResponseBuffer.delete(e),this.mutedScoops.delete(e),this.pendingCompletions.delete(e),this.deferredCompletions.delete(e),this.failureReasons.delete(e);let n=this.completionWaiters.get(e);if(n&&n.length>0){this.completionWaiters.delete(e);for(let r of n)try{r(null)}catch(n){ME.warn(`completion waiter threw on cleanup`,{jid:e,reason:t,error:n instanceof Error?n.message:String(n)})}}}shutdown(){for(let e of this.completionWaiters.values())for(let t of e)try{t(null)}catch(e){ME.warn(`completion waiter threw during shutdown`,{error:e instanceof Error?e.message:String(e)})}this.completionWaiters.clear(),this.mutedScoops.clear(),this.pendingCompletions.clear(),this.deferredCompletions.clear(),this.failureReasons.clear(),this.scoopResponseBuffer.clear()}async notifyCompletion(e){let t=this.deps.getScoop(e);if(!t||t.parentJid===null)return;jE(`complete`,t.folder);let n=this.scoopResponseBuffer.get(e)??``;if(this.scoopResponseBuffer.delete(e),t.notifyOnComplete===!1){this.failureReasons.delete(e);return}if(t.outcomeReceiptPath){this.deferForOutcomeReceipt(t,e,n);return}if(this.claimWaiters(e,n)){this.failureReasons.delete(e);return}if(this.mutedScoops.has(e)){this.stashMuted(e,t.folder,n,new Date().toISOString(),`completion`);return}let r=this.failureReasons.get(e);this.failureReasons.delete(e),!(!n&&!r)&&await this.deliverCompletionToParent(t,n,{exitCode:+!!r,...r?{reason:r}:{}})}async notifyWithOutcome(e,t){let n=this.deps.getScoop(e);this.failureReasons.delete(e);let r=this.deferredCompletions.get(e);if(this.deferredCompletions.delete(e),!n||n.parentJid===null||n.notifyOnComplete===!1)return;let i=r?.responseText??this.scoopResponseBuffer.get(e)??t.reason??``;this.scoopResponseBuffer.delete(e);let a=HE(i,t),o=r?.disposition??`notify`,s=r?.timestamp??new Date().toISOString();this.applyDeferredDisposition(e,n,o,a,s,t)||!i&&t.exitCode===0||await this.deliverCompletionToParent(n,i,{exitCode:t.exitCode,...t.reason?{reason:t.reason}:{},...t.receiptPath?{receiptPath:t.receiptPath}:{}})}deferForOutcomeReceipt(e,t,n){let r=this.currentDeferredDisposition(t);this.deferredCompletions.set(t,{responseText:n,timestamp:new Date().toISOString(),disposition:r}),ME.info(`Scoop completion deferred pending outcome receipt`,{scoop:e.folder,receiptPath:e.outcomeReceiptPath,disposition:r,responseLength:n.length})}currentDeferredDisposition(e){let t=this.completionWaiters.get(e);return t&&t.length>0?`wait`:this.mutedScoops.has(e)?`mute`:`notify`}claimWaiters(e,t){let n=this.completionWaiters.get(e);if(!n||n.length===0)return!1;this.completionWaiters.delete(e);let r=LE(t);for(let t of n)try{t(r||null)}catch(t){ME.warn(`completion waiter threw`,{jid:e,error:t instanceof Error?t.message:String(t)})}return!0}stashMuted(e,t,n,r,i,a){this.pendingCompletions.set(e,{responseText:n,timestamp:r}),ME.info(i===`outcome`?`Scoop outcome stashed (muted)`:`Scoop completion stashed (muted)`,{scoop:t,responseLength:n.length,...a===void 0?{}:{exitCode:a}})}applyDeferredDisposition(e,t,n,r,i,a){return n===`wait`&&this.claimWaiters(e,r)?!0:n===`mute`&&this.mutedScoops.has(e)?(this.stashMuted(e,t.folder,r,i,`outcome`,a.exitCode),!0):!1}async deliverCompletionToParent(e,t,n={exitCode:0}){let r=this.deps.findParent(e.jid);if(!r)return;let i=n.exitCode!==0,a=IE(t),o=t.slice(0,PE),s,c=null,l=null,u=t||n.reason||`(exit code: ${n.exitCode})`;try{l=await this.writeScoopCompletionArtifact(e,u),ME.info(`Routing scoop completion to cone`,{scoop:e.folder,responseLength:t.length,lineCount:a,notificationPath:l,failed:i,exitCode:n.exitCode})}catch(t){c=t instanceof Error?t.message:String(t),ME.warn(`Failed to persist scoop completion artifact, falling back to inline preview`,{scoop:e.folder,error:c})}let d=i?`failed`:`completed`;s=c===null?zE(e.assistantLabel,d,l??`unavailable`,a,o||u.slice(0,PE),n):BE(e.assistantLabel,d,a,o||u.slice(0,PE),c,n);let f={id:`scoop-done-${e.jid}-${Date.now()}`,chatJid:r.jid,senderId:e.folder,senderName:e.assistantLabel,content:s,timestamp:new Date().toISOString(),fromAssistant:!1,channel:`scoop-notify`};try{this.deps.notifyIncomingMessage(r.jid,f)}catch(t){ME.warn(`onIncomingMessage for scoop-notify threw`,{scoop:e.folder,error:t instanceof Error?t.message:String(t)})}try{await this.deps.handleMessage(f)}catch(t){let n=t instanceof Error?t.message:String(t);ME.error(`Failed to route scoop completion to cone`,{scoop:e.folder,error:n}),this.deps.reportError(r.jid,`Scoop ${e.folder} ${d} but notification failed: ${n}`)}}async writeScoopCompletionArtifact(e,t){let n=this.deps.getSharedFs();if(!n)throw Error(`Shared filesystem not initialized`);await n.mkdir(NE,{recursive:!0}),await this.pruneScoopCompletionArtifacts(199);let r=new Date().toISOString().replace(/[:.]/g,`-`),i=Math.random().toString(36).slice(2,8),a=`${NE}/${r}-${e.folder}-${i}.md`;return await n.writeFile(a,t),await this.pruneScoopCompletionArtifacts(),a}async pruneScoopCompletionArtifacts(e=200){let t=this.deps.getSharedFs();if(!t)return;let n;try{n=await t.readDir(NE)}catch{return}let r=n.filter(e=>e.type===`file`).map(e=>e.name).sort(),i=r.length-e;if(!(i<=0))for(let e of r.slice(0,i)){let n=`${NE}/${e}`;try{await t.rm(n)}catch(e){ME.warn(`Failed to prune scoop completion artifact`,{path:n,error:e instanceof Error?e.message:String(e)})}}}async unmuteScoops(e){let t=[],n=[];for(let r of e){this.mutedScoops.delete(r);let e=this.pendingCompletions.get(r);if(!e)continue;this.pendingCompletions.delete(r);let i=this.deps.getScoop(r);if(!i||i.parentJid===null)continue;let a={jid:r,summary:LE(e.responseText),timestamp:e.timestamp,notificationPath:null};t.push(a),n.push(this.writeScoopCompletionArtifact(i,e.responseText).then(e=>{a.notificationPath=e}).catch(e=>{ME.warn(`unmute artifact persist failed`,{jid:r,error:e instanceof Error?e.message:String(e)})}))}return await Promise.all(n),ME.info(`Scoops unmuted`,{count:e.length,consumed:t.length}),t}async waitForScoops(e,t){if(e.length===0)return[];let n=Array.from(new Set(e)),r=new Map,i=[];for(let e of n)this.mutedScoops.has(e)||(this.mutedScoops.add(e),i.push(e));this.claimPendingSummaries(n,r);let a=n.filter(e=>!r.has(e)),o=a.filter(e=>this.deps.hasScoop(e)),s=a.filter(e=>!this.deps.hasScoop(e));for(let e of s)r.set(e,{summary:null,timedOut:!0});let c=[],l=o.map(e=>new Promise(t=>{let n=n=>{r.has(e)||(r.set(e,{summary:n,timedOut:n===null}),t())};c.push({jid:e,waiter:n});let i=this.completionWaiters.get(e);i||(i=[],this.completionWaiters.set(e,i)),i.push(n)}));try{await this.awaitScoopWaiters(l,t)}finally{this.removeCompletionWaiters(c);for(let e of i)this.mutedScoops.delete(e)}for(let e of o)r.has(e)||r.set(e,{summary:null,timedOut:!0});return e.map(e=>{let t=r.get(e)??{summary:null,timedOut:!0};return{jid:e,summary:t.summary,timedOut:t.timedOut}})}claimPendingSummaries(e,t){for(let n of e){let e=this.pendingCompletions.get(n);e&&(this.pendingCompletions.delete(n),t.set(n,{summary:LE(e.responseText),timedOut:!1}))}}async awaitScoopWaiters(e,t){if(e.length===0)return;if(t==null||t<0){await Promise.all(e);return}let n=null;try{await Promise.race([Promise.all(e),new Promise(e=>{n=setTimeout(()=>e(),t)})])}finally{n&&clearTimeout(n)}}removeCompletionWaiters(e){for(let{jid:t,waiter:n}of e){let e=this.completionWaiters.get(t);if(!e)continue;let r=e.indexOf(n);r!==-1&&e.splice(r,1),e.length===0&&this.completionWaiters.delete(t)}}scheduleScoopWait(e,t,n){let r=Array.from(new Set(e)),i=r.filter(e=>this.deps.hasScoop(e)),a=r.filter(e=>!this.deps.hasScoop(e));return this.waitForScoops(i,t).then(e=>this.deliverWaitResultsToCone(e,n)).catch(e=>{ME.error(`scheduleScoopWait failed`,{error:e instanceof Error?e.message:String(e)})}),{scheduled:i,unknown:a}}async deliverWaitResultsToCone(e,t){if(e.length===0)return;let n=t===void 0?void 0:this.deps.getScoop(t);if(n){await this.deliverWaitResultsTo(n,e);return}let r=new Map;for(let t of e){let e=this.deps.findParent(t.jid);if(!e)continue;let n=r.get(e.jid)??{parent:e,results:[]};n.results.push(t),r.set(e.jid,n)}for(let{parent:e,results:t}of r.values())await this.deliverWaitResultsTo(e,t)}async deliverWaitResultsTo(e,t){let n=[`[scoop_wait completed]`],r=0,i=0;for(let e of t){let t=this.deps.getScoop(e.jid)?.folder??e.jid;e.timedOut?(r+=1,n.push(`--- ${t} (timed out) ---`)):(i+=1,n.push(`--- ${t} ---`),n.push(e.summary??`(no output)`))}let a=`${i} completed, ${r} timed out`;n.splice(1,0,a);let o={id:`scoop-wait-${Date.now()}-${Math.random().toString(36).slice(2,10)}`,chatJid:e.jid,senderId:`scoop-wait`,senderName:`scoop-wait`,content:n.join(`
1070
+ `),timestamp:new Date().toISOString(),fromAssistant:!1,channel:`scoop-wait`};try{this.deps.notifyIncomingMessage(e.jid,o)}catch(e){ME.warn(`onIncomingMessage for scoop-wait threw`,{error:e instanceof Error?e.message:String(e)})}try{await this.deps.handleMessage(o)}catch(t){let n=t instanceof Error?t.message:String(t);ME.error(`Failed to route scoop-wait result to cone`,{error:n}),this.deps.reportError(e.jid,`scoop_wait completed but notification failed: ${n}`)}}};function zE(e,t,n,r,i,a){return[`[@${e} ${t}]`,...VE(a),`VFS path: ${n}`,`Total lines: ${r}`,`Preview (up to ${PE} chars):`,i].join(`
1071
+ `)}function BE(e,t,n,r,i,a){return[`[@${e} ${t}]`,...VE(a),`VFS path: unavailable`,`Artifact persistence error: ${i}`,`Total lines: ${n}`,`Preview (up to ${PE} chars):`,r].join(`
1072
+ `)}function VE(e){let t=[],n=e.exitCode!==0;return!n&&!e.reason&&!e.receiptPath?t:(t.push(`status: ${n?`failed`:`ok`}`),t.push(`exitCode: ${e.exitCode}`),e.reason&&t.push(`reason: ${e.reason.slice(0,500)}`),e.receiptPath&&t.push(`status.json: ${e.receiptPath}`),t)}function HE(e,t){if(t.exitCode===0)return e;let n=t.reason?`failed (exit ${t.exitCode}): ${t.reason}`:`failed (exit ${t.exitCode})`;return e?`${n}\n${e}`:n}const UE=9e5,WE=36e5;function GE(e,t,n){let r=wn(t),i=e.get(r);if(!i){e.set(r,{ids:[t],cost:n});return}i.ids.includes(t)||i.ids.push(t),i.cost+=n}function KE(e,t){let n=[...e.values()].sort((e,t)=>t.cost-e.cost||(e.ids[0]??``).localeCompare(t.ids[0]??``)).map(e=>Cn(e.ids,t)),r=e.get(wn(t));return{current:r?Cn(r.ids,t):t,models:n}}function qE(e,t){let n=Bn(e);return!n||!Gn(e)&&wn(t)!==wn(n)?t:n}function JE(e,t,n=`live`,r=[]){let i=t.getAgentMessages().filter(e=>e.role===`assistant`),a=[...i,...r];if(a.length===0)return null;let o={input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},s=new Map;for(let e of a)o.input+=e.usage.input,o.output+=e.usage.output,o.cacheRead+=e.usage.cacheRead,o.cacheWrite+=e.usage.cacheWrite,o.totalTokens+=e.usage.totalTokens,o.cost.input+=e.usage.cost.input,o.cost.output+=e.usage.cost.output,o.cost.cacheRead+=e.usage.cost.cacheRead,o.cost.cacheWrite+=e.usage.cost.cacheWrite,o.cost.total+=e.usage.cost.total,GE(s,e.model,e.usage.cost.total);let c=KE(s,qE(e,(i.length>0?i:a).reduce((e,t)=>t.timestamp>=e.timestamp?t:e).model)),l=a.map(e=>e.timestamp).sort((e,t)=>e-t),u=l[0],d=l[l.length-1],f=d-u,p=Math.max(1,Math.ceil(f/UE))*UE;return{name:e.assistantLabel,type:Nn(e)?`cone`:`scoop`,model:c.current,models:c.models,source:n,usage:o,turns:a.length,firstActivity:u,lastActivity:d,activeTimeMs:p}}function YE(e,t){return e.notifyOnComplete===!1&&e.parentJid!==null&&t.has(e.parentJid)}var XE=class{dropped=[];droppedMessages=[];foldedByParent=new Map;deps;constructor(e){this.deps=e}foldedMessagesFor(e){return this.foldedByParent.get(e)??[]}async settleFolded(e){let t=this.foldedByParent.get(e);if(this.foldedByParent.delete(e),!t||t.length===0)return;let n=this.deps.getScoops().get(e);if(!n||await this.deps.mergeFoldedIntoFrozen?.(e,t))return;let r=JE(n,{getAgentMessages:()=>[]},`dropped`,t);r&&(this.droppedMessages.push([...t]),this.dropped.push(r))}snapshot(e){let t=this.deps.getScoops(),n=t.get(e),r=this.deps.getContexts().get(e);if(!n||!r)return;let i=r.getAgentMessages().filter(e=>e.role===`assistant`),a=[...this.foldedMessagesFor(e)];if(YE(n,t)){if(i.length===0&&a.length===0)return;let t=n.parentJid,r=this.foldedByParent.get(t)??[];this.foldedByParent.set(t,[...r,...i,...a]),this.foldedByParent.delete(e);return}let o=JE(n,r,`dropped`,a);o&&this.dropped.push(o);let s=[...i,...a];s.length>0&&this.droppedMessages.push(s),this.foldedByParent.delete(e)}getSessionCosts(e={}){let t=[],n=this.deps.getContexts();for(let e of this.deps.getScoops().values()){let r=n.get(e.jid);if(!r)continue;let i=JE(e,r,`live`,this.foldedMessagesFor(e.jid));i&&t.push(i)}return e.includeDropped&&t.push(...this.dropped),t}getBurnRate(e=Date.now()){let t=this.droppedMessages.flat();for(let e of this.foldedByParent.values())t.push(...e);for(let e of this.deps.getContexts().values())for(let n of e.getAgentMessages())n.role===`assistant`&&t.push(n);if(t.length===0)return 0;let n=t[0].timestamp;for(let e of t)n=Math.min(n,e.timestamp);let r=Math.max(e-n,6e4),i=Math.min(9e5,r),a=Math.min(36e5,r),o=e-i,s=e-a,c=0,l=0,u=0;for(let e of t){let t=e.usage.cost.total;u+=t,e.timestamp>=o&&(c+=t),e.timestamp>=s&&(l+=t)}let d=c*WE/i,f=l*WE/a,p=u*WE/r,m=d*.5+f*.3+p*.2;return Math.max(m,p)}getContextFills(){return[...this.deps.getContexts().entries()].map(([e,t])=>({jid:e,fill:t.getContextFill()}))}getModelCosts(e={}){let t=new Map,n=new Map,r=this.deps.getContexts();for(let[e,i]of r){let r=i.getAgentMessages().filter(e=>e.role===`assistant`);this.aggregateMessages(r,t,n),this.aggregateMessages(this.foldedMessagesFor(e),t,n)}if(e.includeDropped)for(let e of this.droppedMessages)this.aggregateMessages(e,t,n);for(let[e,r]of n){let n=t.get(e);n&&(n.model=Cn(r.ids))}return Array.from(t.values()).sort((e,t)=>t.cost-e.cost)}aggregateMessages(e,t,n){for(let r of e){let e=wn(r.model);GE(n,r.model,r.usage.cost.total);let i=t.get(e);i?(i.input+=r.usage.input,i.output+=r.usage.output,i.cacheRead+=r.usage.cacheRead,i.cacheWrite+=r.usage.cacheWrite,i.cost+=r.usage.cost.total,i.turns+=1):t.set(e,{model:r.model,input:r.usage.input,output:r.usage.output,cacheRead:r.usage.cacheRead,cacheWrite:r.usage.cacheWrite,cost:r.usage.cost.total,turns:1})}}reset(){this.dropped=[],this.droppedMessages=[],this.foldedByParent.clear()}};const ZE=_(`scoop-idle-timers`);var QE=class{deps;timers=new Map;constructor(e){this.deps=e}start(e){if(this.clear(e),this.deps.getTabs().get(e)?.status===`processing`)return;let t=setTimeout(()=>{this.timers.delete(e),this.fire(e)},12e4);this.timers.set(e,t)}clear(e){let t=this.timers.get(e);t&&(clearTimeout(t),this.timers.delete(e))}clearAll(){for(let e of this.timers.keys())this.clear(e)}fire(e){let t=this.deps.getScoops().get(e);if(!t||t.parentJid===null||this.deps.getTabs().get(e)?.status!==`ready`)return;let n=this.deps.findParent(e);if(!n)return;let r={id:`scoop-idle-${e}-${Date.now()}`,chatJid:n.jid,senderId:t.folder,senderName:t.assistantLabel,content:`[@${t.assistantLabel} idle]: Scoop "${t.name}" has been ready for 2 minutes without receiving any work. This is expected if the scoop is waiting for webhooks or cron tasks. If you intended to delegate work, use feed_scoop to send a prompt.`,timestamp:new Date().toISOString(),fromAssistant:!1,channel:`scoop-idle`};ZE.info(`Scoop idle timeout`,{jid:e,scoop:t.folder});try{this.deps.notifyIncomingMessage(n.jid,r)}catch(t){ZE.warn(`onIncomingMessage for scoop-idle threw`,{jid:e,error:t instanceof Error?t.message:String(t)})}this.deps.handleMessage(r).catch(t=>{let n=t instanceof Error?t.message:String(t);ZE.error(`Failed to send idle notification`,{jid:e,error:n})})}};const $E=_(`work-unit`),eD={initializing:new Set([`ready`,`error`]),ready:new Set([`processing`,`error`,`initializing`]),processing:new Set([`ready`,`error`]),error:new Set([`initializing`,`ready`,`processing`])};var tD=class{id;deps;tab=null;context=null;observers=new Set;closed=!1;constructor(e,t){this.id=e,this.deps=t}get descriptor(){let e=this.deps.getScoop(this.id);if(!e)throw Error(`Work unit not found: ${this.id}`);let t=sr(e,this.tab??void 0);return this.closed?{...t,status:`closed`}:t}get status(){return this.closed?`closed`:ar(this.tab?.status)}get isClosed(){return this.closed}transition(e,t={}){if(this.closed)return $E.debug(`ignoring transition on closed unit`,{jid:this.id,next:e}),!1;let n=this.tab?.status;if(n!==void 0&&n!==e&&!eD[n].has(e))return $E.warn(`illegal work-unit transition ignored`,{jid:this.id,from:n,to:e}),!1;let r=new Date().toISOString();return this.tab={jid:this.id,contextId:this.tab?.contextId??`scoop-${this.id}`,...this.tab,...t,status:e,lastActivity:t.lastActivity??r},e!==`error`&&delete this.tab.error,!0}touch(){this.tab&&={...this.tab,lastActivity:new Date().toISOString()}}attachContext(e,t){if(this.closed)throw Error(`Cannot attach a context to closed unit ${this.id}`);this.context=e,this.tab={jid:this.id,contextId:t,status:`initializing`,lastActivity:new Date().toISOString()}}detachContext(){this.deps.clearIdleTimer(this.id),this.context?.stop(),this.context=null}disposeContext(){this.deps.clearIdleTimer(this.id),this.context?.dispose(),this.context=null,this.tab=null}observe(e){return this.closed?()=>{}:(this.observers.add(e),()=>{this.observers.delete(e)})}get observerCount(){return this.observers.size}dispatch(e,...t){for(let n of this.observers){let r=n[e];if(r)try{r(...t)}catch(t){$E.warn(`scoop observer threw`,{jid:this.id,event:e,error:t instanceof Error?t.message:String(t)})}}}send(e){if(this.closed)return Promise.reject(Error(`Work unit is closed: ${this.id}`));let t=this.deps.getScoop(this.id);return this.deps.sendPrompt(this.id,e.text,e.senderId??`user`,e.senderName??t?.assistantLabel??this.id,e.steer===void 0?void 0:{steer:e.steer})}subscribe(e){return this.observe({onStatusChange:t=>e({type:`status`,status:ar(t)}),onResponse:(t,n)=>e({type:`response`,text:t,isPartial:n}),onSendMessage:t=>e({type:`send-message`,text:t}),onError:t=>e({type:`error`,error:t})})}async abort(e){this.context?.stop()}close(){return this.closed?Promise.resolve():this.deps.unregister(this.id)}async teardown(){if(this.closed)return;this.closed=!0,this.deps.clearIdleTimer(this.id);let e=this.context;this.context=null;try{e?.stop(),e?.dispose()}catch(e){$E.warn(`context dispose threw during close`,{jid:this.id,error:e instanceof Error?e.message:String(e)})}this.observers.clear(),this.deps.forgetCompletion(this.id,`close`),$E.info(`Work unit closed`,{jid:this.id})}async snapshot(){return{descriptor:this.descriptor,messages:this.context?this.context.getAgentMessages():[],contextFill:this.context?this.context.getContextFill():0}}};let nD=null;function rD(e){nD=e}function iD(e,t){nD?.(e,t)}function aD(e){return typeof e==`string`&&e.startsWith(`No API key configured`)}function oD(e){if(typeof e!=`string`||!e)return!1;let t=e.toLowerCase();return t.includes(`the provided model identifier is invalid`)||t.includes(`model not allowed`)}function sD(e){return typeof e!=`string`||!e?!1:e.toLowerCase().includes(`please log in again`)}const cD=[`run out of available resources`,`ran out of available resources`,`run out of credits`,`ran out of credits`],lD=[`active grok subscription`,`need a grok subscription`,`needs a grok subscription`];function uD(e){if(typeof e!=`string`||!e)return!1;let t=e.toLowerCase();return t.includes(`quota_exceeded`)?!0:cD.some(e=>t.includes(e))&&lD.some(e=>t.includes(e))}function dD(e){return aD(e)||oD(e)||sD(e)||uD(e)}function fD(e){return/image exceeds.*maximum/i.test(e)||/Could not process image/i.test(e)||/invalid.*image/i.test(e)||/image.*too (large|big)/i.test(e)}function pD(e){return uD(e)?!0:/\b(401|403|404|405|410|422)\b/.test(e)||/unauthorized|forbidden|authentication.*failed|invalid.*api.?key/i.test(e)||/session expired|log in again|re-?authenticate/i.test(e)||/model.*not.*found|invalid.*model|unknown.*model|does.*not.*exist/i.test(e)||/decommissioned|no longer supported|deprecated.*model|model.*deprecated|model.*retired/i.test(e)||/insufficient.*quota|billing|payment.*required|account.*suspended/i.test(e)||/invalid.*request|malformed|bad.*request/i.test(e)}function mD(e){return uD(e)?!1:/\b429\b|rate.*limit|too.*many.*requests|quota.*exceeded/i.test(e)||/\b(500|502|503|504)\b|internal.*server|bad.*gateway|service.*unavailable|gateway.*timeout/i.test(e)||/network.*error|failed to fetch|connection.*refused|timeout|econnreset|socket.*hang.*up/i.test(e)||/overloaded|temporarily.*unavailable|try.*again/i.test(e)}function hD(e,t){return t?.aborted?Promise.resolve(!0):new Promise(n=>{let r=()=>{clearTimeout(i),n(!0)},i=setTimeout(()=>{t?.removeEventListener(`abort`,r),n(!1)},e);t?.addEventListener(`abort`,r,{once:!0})})}function gD(e,t,n){let r=e[e.length-1];if(r){let i=r.role===`assistant`?r.errorMessage:void 0;if(i){if(_D(i,e,t,n))return}else t.imageRecovery.markSettled(),t.overflow.markSettled(),r.role===`assistant`&&t.overflow.markAssistantSucceeded()}t.persist(e)}function _D(e,t,n,r){let i=n.imageRecovery.isActive||n.overflow.isActive;return!i&&fD(e)?(n.imageRecovery.recover(t),!0):n.overflow.shouldRecover(t[t.length-1])?(n.overflow.recover(t,r),!0):!i&&n.isProcessing()&&!n.didStreamDeltas()?(n.latchStreamError(e),!0):(n.imageRecovery.markSettled(),n.overflow.markSettled(),iD(`llm`,e),n.onError(e),!1)}function vD(e,t,n){switch(e.type){case`message_update`:{let n=e.assistantMessageEvent;n.type===`text_delta`&&t.textDelta(n.delta);break}case`tool_execution_start`:return t.toolStart(e.toolName,e.args,e.toolCallId);case`tool_execution_update`:yD(e,t);break;case`tool_execution_end`:bD(e,t),t.checkpoint();break;case`message_end`:e.message.role===`assistant`&&t.assistantMessageEnd(e.message),t.checkpoint(e.message);break;case`turn_start`:t.turnStart();break;case`turn_end`:if(t.turnCompleted(),e.message.role===`assistant`&&$o(e.message))break;t.responseDone();break;case`agent_end`:t.agentEnd(e.messages,n)}}function yD(e,t){let n=e.partialResult;for(let r of n?.content??[])r.type===`tool_ui`&&r.requestId&&r.html?t.toolUI(e.toolName,r.requestId,r.html):r.type===`tool_ui_done`&&r.requestId?t.toolUIDone(r.requestId):r.type===`progress`&&r.progress&&t.toolProgress(e.toolName,r.progress,e.toolCallId)}function bD(e,t){let n=e.result,r=[];for(let e of n?.content??[])e.type===`text`&&e.text&&r.push(e.text),e.type===`image`&&e.data&&e.mimeType&&r.push(`<img:data:${e.mimeType};base64,${e.data}>`);let i=r.join(`
1073
1073
  `);if(e.isError){let t=r.filter(e=>!e.startsWith(`<img:`)).join(`
1074
- `);eD(`tool`,`${e.toolName}: ${t}`)}t.toolResult(e.toolName,i,e.isError,e.toolCallId)}const _D=_(`scoop-context`);var vD=class{deps;livePids=new Set;constructor(e){this.deps=e}spawn(e){let t=this.deps.processManager;if(!t)return null;let n=e=>{this.livePids.delete(e)},r=t.spawn({kind:`shell`,argv:[`bash`,`-c`,e],cwd:this.deps.cwd,owner:this.deps.owner,ppid:this.deps.getTurnPid()});return this.livePids.add(r.pid),{pid:r.pid,signal:r.abort.signal,kill:()=>{n(r.pid),t.signal(r.pid,`SIGKILL`)},exit:e=>{n(r.pid),t.exit(r.pid,e)}}}reapAll(){let e=this.deps.processManager;if(!e||this.livePids.size===0)return;let t=[...this.livePids];this.livePids.clear(),_D.info(`Reaping background bash jobs on dispose`,{folder:this.deps.folder,pids:t});for(let n of t)e.signal(n,`SIGKILL`)}};const yD=_(`scoop-context`);var bD=class{deps;active=!1;constructor(e){this.deps=e}get isActive(){return this.active}markSettled(){this.active=!1}recover(e){let t=this.deps.getAgent();if(t){yD.warn(`Image processing error detected, attempting recovery`,{folder:this.deps.folder,messageCount:e.length}),this.active=!0,this.deps.onResponse(`Image rejected by API — removing problematic images and continuing...`,!1);try{let n=e.slice(0,-1),r=xD(n);t.state.messages=n;let i=`[System: An image was rejected by the API and has been removed from the conversation (${r} message(s) affected). The conversation continues without the image.]`;t.prompt(i).catch(e=>{yD.error(`Image recovery re-prompt failed`,{folder:this.deps.folder,error:e instanceof Error?e.message:String(e)}),this.fail(e)})}catch(e){yD.error(`Image recovery failed`,{folder:this.deps.folder,error:e instanceof Error?e.message:String(e)}),this.fail(e)}}}fail(e){this.active=!1,this.deps.onError(`Image error recovery failed: ${e instanceof Error?e.message:String(e)}`)}};function xD(e){let t=0,n=Math.max(0,e.length-10);for(let r=e.length-1;r>=n;r--){let n=e[r];if(!Array.isArray(n.content)||!n.content.some(e=>e.type===`image`))continue;let i=n.content.filter(e=>e.type!==`image`);i.length===0?e[r]={...n,content:[{type:`text`,text:`[Image removed: rejected by API]`}]}:e[r]={...n,content:i},t++}return t}async function SD(e,t){try{let n=await e.readFile(t,{encoding:`utf-8`});return typeof n==`string`?n:new TextDecoder().decode(n)}catch{return``}}async function CD(e,t,n){let r=await SD(e,t.workspace.memoryPath),i=await n();if(i&&t.policy.canWriteSharedMemory)try{await(`getUnderlyingFS`in e?e.getUnderlyingFS():e).writeFile(`/shared/CLAUDE.md`,i)}catch{}return{scoopMemory:r,globalMemory:i}}const wD=_(`scoop-context`);function TD(e){let t=Gn(e);return!t&&Dx(e)?null:t?ce(t):pe()}function ED(e){let t=Bn(e);if(t)return fe(t,Gn(e));if(Dx(e))throw Error(`The gelatiere has no leading-cone model`);return me()}function DD(e,t){let n=Bn(e),r=Gn(e),i=ED(e),a=t.display.role===`primary`?`Cone`:`Scoop "${e.name}"`;if(console.log(`[model] ${a} using model: ${i.id} (provider: ${i.provider})`),r&&(i.id!==n||!he(i,r)))throw Error(`Configured model ${r}:${n} resolved to ${i.provider}:${i.id}; refusing to run on a different model`);return!r&&n&&i.id!==n&&wD.warn(`Configured scoop model did not resolve; using resolved model instead`,{folder:e.folder,configuredModelId:n,resolvedModelId:i.id}),i}function OD(e,t){for(let n=e.length-1;n>=0;n--){let r=e[n];if(r.role!==`assistant`||!r.usage)continue;let i=r.usage.input+r.usage.cacheRead+r.usage.output,a=2e5;try{let e=ED(t);typeof e.contextWindow==`number`&&e.contextWindow>0&&(a=e.contextWindow)}catch{}return Math.min(1,i/a)}return 0}function kD(e){if(Dx(e)&&!Bn(e))return`The gelatiere cannot run until the leading cone has a model.`;let t=Gn(e)??``;try{t||=ue()}catch{}return t?`No API key configured for provider "${t}". Open Settings to add one.`:`No API key configured. Open Settings to add one.`}function AD(e,t,n,r,i){let a=e.config?.assistantName||e.assistantLabel,o=t.display.role===`primary`,{policy:s,workspace:c}=t,l=`# ${a}
1074
+ `);iD(`tool`,`${e.toolName}: ${t}`)}t.toolResult(e.toolName,i,e.isError,e.toolCallId)}const xD=_(`scoop-context`);var SD=class{deps;livePids=new Set;constructor(e){this.deps=e}spawn(e){let t=this.deps.processManager;if(!t)return null;let n=e=>{this.livePids.delete(e)},r=t.spawn({kind:`shell`,argv:[`bash`,`-c`,e],cwd:this.deps.cwd,owner:this.deps.owner,ppid:this.deps.getTurnPid()});return this.livePids.add(r.pid),{pid:r.pid,signal:r.abort.signal,kill:()=>{n(r.pid),t.signal(r.pid,`SIGKILL`)},exit:e=>{n(r.pid),t.exit(r.pid,e)}}}reapAll(){let e=this.deps.processManager;if(!e||this.livePids.size===0)return;let t=[...this.livePids];this.livePids.clear(),xD.info(`Reaping background bash jobs on dispose`,{folder:this.deps.folder,pids:t});for(let n of t)e.signal(n,`SIGKILL`)}};const CD=_(`scoop-context`);var wD=class{deps;active=!1;constructor(e){this.deps=e}get isActive(){return this.active}markSettled(){this.active=!1}recover(e){let t=this.deps.getAgent();if(t){CD.warn(`Image processing error detected, attempting recovery`,{folder:this.deps.folder,messageCount:e.length}),this.active=!0,this.deps.onResponse(`Image rejected by API — removing problematic images and continuing...`,!1);try{let n=e.slice(0,-1),r=TD(n);t.state.messages=n;let i=`[System: An image was rejected by the API and has been removed from the conversation (${r} message(s) affected). The conversation continues without the image.]`;t.prompt(i).catch(e=>{CD.error(`Image recovery re-prompt failed`,{folder:this.deps.folder,error:e instanceof Error?e.message:String(e)}),this.fail(e)})}catch(e){CD.error(`Image recovery failed`,{folder:this.deps.folder,error:e instanceof Error?e.message:String(e)}),this.fail(e)}}}fail(e){this.active=!1,this.deps.onError(`Image error recovery failed: ${e instanceof Error?e.message:String(e)}`)}};function TD(e){let t=0,n=Math.max(0,e.length-10);for(let r=e.length-1;r>=n;r--){let n=e[r];if(!Array.isArray(n.content)||!n.content.some(e=>e.type===`image`))continue;let i=n.content.filter(e=>e.type!==`image`);i.length===0?e[r]={...n,content:[{type:`text`,text:`[Image removed: rejected by API]`}]}:e[r]={...n,content:i},t++}return t}async function ED(e,t){try{let n=await e.readFile(t,{encoding:`utf-8`});return typeof n==`string`?n:new TextDecoder().decode(n)}catch{return``}}async function DD(e,t,n){let r=await ED(e,t.workspace.memoryPath),i=await n();if(i&&t.policy.canWriteSharedMemory)try{await(`getUnderlyingFS`in e?e.getUnderlyingFS():e).writeFile(`/shared/CLAUDE.md`,i)}catch{}return{scoopMemory:r,globalMemory:i}}const OD=_(`scoop-context`);function kD(e){let t=Gn(e);return!t&&jx(e)?null:t?ce(t):pe()}function AD(e){let t=Bn(e);if(t)return fe(t,Gn(e));if(jx(e))throw Error(`The gelatiere has no leading-cone model`);return me()}function jD(e,t){let n=Bn(e),r=Gn(e),i=AD(e),a=t.display.role===`primary`?`Cone`:`Scoop "${e.name}"`;if(console.log(`[model] ${a} using model: ${i.id} (provider: ${i.provider})`),r&&(i.id!==n||!he(i,r)))throw Error(`Configured model ${r}:${n} resolved to ${i.provider}:${i.id}; refusing to run on a different model`);return!r&&n&&i.id!==n&&OD.warn(`Configured scoop model did not resolve; using resolved model instead`,{folder:e.folder,configuredModelId:n,resolvedModelId:i.id}),i}function MD(e,t){for(let n=e.length-1;n>=0;n--){let r=e[n];if(r.role!==`assistant`||!r.usage)continue;let i=r.usage.input+r.usage.cacheRead+r.usage.output,a=2e5;try{let e=AD(t);typeof e.contextWindow==`number`&&e.contextWindow>0&&(a=e.contextWindow)}catch{}return Math.min(1,i/a)}return 0}function ND(e){if(jx(e)&&!Bn(e))return`The gelatiere cannot run until the leading cone has a model.`;let t=Gn(e)??``;try{t||=ue()}catch{}return t?`No API key configured for provider "${t}". Open Settings to add one.`:`No API key configured. Open Settings to add one.`}function PD(e,t,n,r,i){let a=e.config?.assistantName||e.assistantLabel,o=t.display.role===`primary`,{policy:s,workspace:c}=t,l=`# ${a}
1075
1075
 
1076
1076
  You are ${a}, ${o?`the main assistant (cone)`:`a scoop assistant`} in SLICC (Self-Licking Ice Cream Cone).
1077
1077
 
@@ -1146,7 +1146,7 @@ ${n}
1146
1146
  ---
1147
1147
  ${o?`CONE`:`SCOOP`} MEMORY (${e.name}):
1148
1148
  ${r}
1149
- ---`);let u=kT(i);return u&&(l+=u),l}const jD=_(`scoop-context`);function MD(e,t){return!t.reasoning||e===void 0?`off`:e===`xhigh`&&!ln(t).includes(`xhigh`)?`high`:e}function ND(){try{let e=localStorage.getItem(`slicc_locked_effort_level`);if(!e)return null;if(mr.includes(e))return e;jD.warn(`Unrecognized locked effort level in localStorage, ignoring:`,e)}catch{}return null}const PD=_(`scoop-context`);function FD(e,t){let n=ED(t);e.state.model=n;let r=Wn(t),i=ND()??r.level;return e.state.thinkingLevel=MD(i,n),PD.info(`Model updated on running agent`,{folder:t.folder,model:n.id,thinkingLevel:e.state.thinkingLevel}),n.reasoning?r.effortOverride:void 0}function ID(e,t){if(ND())return e.state.thinkingLevel;let n=MD(t,e.state.model);return e.state.thinkingLevel=n,n}async function LD(e,t){let n=await ET(t.skillsFs??t.fs,ur),r=await SD(t.fs,t.unit.workspace.memoryPath),i=await t.getGlobalMemory();e.state.systemPrompt=AD(t.scoop,t.unit,i,r,n),PD.info(`Skills reloaded`,{folder:t.scoop.folder,skillCount:n.length})}const RD=_(`scoop-context`);var zD=class{deps;attempted=!1;active=!1;escalated=!1;pending=null;constructor(e){this.deps=e}resetForRun(){this.attempted=!1,this.active=!1,this.pending=null,this.escalated=!1}get pendingRecovery(){return this.pending}clearPendingRecovery(e){this.pending===e&&(this.pending=null)}get isActive(){return this.active}get hasAttempted(){return this.attempted}markSettled(){this.active=!1}markAssistantSucceeded(){this.attempted=!1}shouldRecover(e){return!this.deps.isImageRecoveryActive()&&Yo(e)}recover(e,t){let n=this.deps.getTurnSignal(),r=t&&n?AbortSignal.any([t,n]):t??n,i=this.deps.getAgent();if(!i||this.deps.isDisposed()||r?.aborted)return;if(this.attempted){this.escalate(r);return}this.attempted=!0,this.active=!0,RD.warn(`Context overflow detected, attempting recovery`,{folder:this.deps.folder,messageCount:e.length});let a=this.deps.getCompactFn(),o=i.state.messages,s=o[o.length-1],c=s?.role===`assistant`&&Yo(s)?o.slice(0,-1):o;if(i.state.messages=c,!a||!i.state.model||!this.deps.getCompactionApiKey()){this.escalate(r,Error(`Compaction is unavailable`));return}this.pending=this.compactAndResume(i,a,c,r)}async compactAndResume(e,t,n,r){try{let i=await t(n,r,{force:!0});if(this.deps.isDisposed()||r?.aborted||this.deps.getAgent()!==e)return;if(!_n(n,i)){this.escalate(r,Error(`Forced compaction did not reduce the context`));return}e.state.messages=i,this.deps.onResponse(`Context window exceeded — compacting history and continuing...`,!1),await new Promise(t=>{setTimeout(()=>{if(this.deps.isDisposed()||r?.aborted||this.deps.getAgent()!==e){t();return}e.continue().then(t).catch(e=>{!this.deps.isDisposed()&&!r?.aborted&&this.escalate(r,e),t()})},100)})}catch(e){!this.deps.isDisposed()&&!r?.aborted&&this.escalate(r,e)}finally{this.active=!1}}escalate(e,t){if(this.active=!1,this.deps.isDisposed()||e?.aborted||this.escalated)return;this.escalated=!0;let n=t instanceof Error?t.message:t?String(t):void 0;RD.error(`Context overflow recovery exhausted`,{folder:this.deps.folder,error:n}),this.deps.setStatus(`error`),this.deps.onExhausted(`Scoop "${this.deps.scoopName}" context window was exceeded and could not be reduced. Re-delegate with a narrower task.`)}},BD=class{deps;turnCount=0;exceededNote=null;wallClockTimer=null;constructor(e){this.deps=e}arm(){this.turnCount=0,this.exceededNote=null;let e=this.deps.getConfig()?.maxWallClockMs;typeof e==`number`&&Number.isFinite(e)&&e>0&&(this.wallClockTimer=setTimeout(()=>{this.wallClockTimer=null,this.trip(`wall-clock bound (${e} ms) exceeded`)},e))}recordCompletedTurn(){this.turnCount+=1}enforceOnTurnStart(){let e=this.deps.getConfig()?.maxTurns;typeof e==`number`&&e>0&&this.turnCount>=e&&this.trip(`turn bound (${e}) exceeded`)}disarm(){this.wallClockTimer!==null&&(clearTimeout(this.wallClockTimer),this.wallClockTimer=null)}takeExceededNote(){let e=this.exceededNote;return this.exceededNote=null,e}trip(e){this.exceededNote!==null||this.deps.isDisposed()||(this.exceededNote=e,this.deps.onTripped())}};function VD(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}function HD(e,t){return!VD(e,t)}function UD(e){let t=e.captureStructuredOutput,n;return n=new w_({initialState:{model:e.model,tools:e.tools,systemPrompt:e.systemPrompt,messages:e.messages,thinkingLevel:e.thinkingLevel},getApiKey:e.getApiKey,transformContext:async(t,r)=>{let i=await e.transformContext(t,r);return r?.aborted||!HD(t,i)?t:VD(n.state.messages,t)?(t.splice(0,t.length,...i),n.state.messages=[...i],e.onContextCompacted?.(),t):i},streamFn:e.streamFn,afterToolCall:async e=>{t&&e.toolCall.name===`StructuredOutput`&&t(e.args)}}),n}const WD=_(`scoop-context`);async function GD(e,t,n,r){if(!e)return;let i=n.policy.filesystem.kind===`full-workspace`?[n.workspace.root,`/shared`,`/scoops`,`/home`,`/home/user`,or,r,`/mnt`]:[`/scoops/${t.folder}`,`/scoops/${t.folder}/workspace`,`/scoops/${t.folder}/home`,`/scoops/${t.folder}/tmp`,`/shared`,or,r];for(let t of i)try{await e.mkdir(t,{recursive:!0})}catch{}let a=n.workspace.memoryPath;try{await e.readFile(a)}catch{let r=`# ${t.assistantLabel} Memory
1149
+ ---`);let u=NT(i);return u&&(l+=u),l}const FD=_(`scoop-context`);function ID(e,t){return!t.reasoning||e===void 0?`off`:e===`xhigh`&&!ln(t).includes(`xhigh`)?`high`:e}function LD(){try{let e=localStorage.getItem(`slicc_locked_effort_level`);if(!e)return null;if(mr.includes(e))return e;FD.warn(`Unrecognized locked effort level in localStorage, ignoring:`,e)}catch{}return null}const RD=_(`scoop-context`);function zD(e,t){let n=AD(t);e.state.model=n;let r=Wn(t),i=LD()??r.level;return e.state.thinkingLevel=ID(i,n),RD.info(`Model updated on running agent`,{folder:t.folder,model:n.id,thinkingLevel:e.state.thinkingLevel}),n.reasoning?r.effortOverride:void 0}function BD(e,t){if(LD())return e.state.thinkingLevel;let n=ID(t,e.state.model);return e.state.thinkingLevel=n,n}async function VD(e,t){let n=await AT(t.skillsFs??t.fs,ur),r=await ED(t.fs,t.unit.workspace.memoryPath),i=await t.getGlobalMemory();e.state.systemPrompt=PD(t.scoop,t.unit,i,r,n),RD.info(`Skills reloaded`,{folder:t.scoop.folder,skillCount:n.length})}const HD=_(`scoop-context`);var UD=class{deps;attempted=!1;active=!1;escalated=!1;pending=null;constructor(e){this.deps=e}resetForRun(){this.attempted=!1,this.active=!1,this.pending=null,this.escalated=!1}get pendingRecovery(){return this.pending}clearPendingRecovery(e){this.pending===e&&(this.pending=null)}get isActive(){return this.active}get hasAttempted(){return this.attempted}markSettled(){this.active=!1}markAssistantSucceeded(){this.attempted=!1}shouldRecover(e){return!this.deps.isImageRecoveryActive()&&$o(e)}recover(e,t){let n=this.deps.getTurnSignal(),r=t&&n?AbortSignal.any([t,n]):t??n,i=this.deps.getAgent();if(!i||this.deps.isDisposed()||r?.aborted)return;if(this.attempted){this.escalate(r);return}this.attempted=!0,this.active=!0,HD.warn(`Context overflow detected, attempting recovery`,{folder:this.deps.folder,messageCount:e.length});let a=this.deps.getCompactFn(),o=i.state.messages,s=o[o.length-1],c=s?.role===`assistant`&&$o(s)?o.slice(0,-1):o;if(i.state.messages=c,!a||!i.state.model||!this.deps.getCompactionApiKey()){this.escalate(r,Error(`Compaction is unavailable`));return}this.pending=this.compactAndResume(i,a,c,r)}async compactAndResume(e,t,n,r){try{let i=await t(n,r,{force:!0});if(this.deps.isDisposed()||r?.aborted||this.deps.getAgent()!==e)return;if(!_n(n,i)){this.escalate(r,Error(`Forced compaction did not reduce the context`));return}e.state.messages=i,this.deps.onResponse(`Context window exceeded — compacting history and continuing...`,!1),await new Promise(t=>{setTimeout(()=>{if(this.deps.isDisposed()||r?.aborted||this.deps.getAgent()!==e){t();return}e.continue().then(t).catch(e=>{!this.deps.isDisposed()&&!r?.aborted&&this.escalate(r,e),t()})},100)})}catch(e){!this.deps.isDisposed()&&!r?.aborted&&this.escalate(r,e)}finally{this.active=!1}}escalate(e,t){if(this.active=!1,this.deps.isDisposed()||e?.aborted||this.escalated)return;this.escalated=!0;let n=t instanceof Error?t.message:t?String(t):void 0;HD.error(`Context overflow recovery exhausted`,{folder:this.deps.folder,error:n}),this.deps.setStatus(`error`),this.deps.onExhausted(`Scoop "${this.deps.scoopName}" context window was exceeded and could not be reduced. Re-delegate with a narrower task.`)}},WD=class{deps;turnCount=0;exceededNote=null;wallClockTimer=null;constructor(e){this.deps=e}arm(){this.turnCount=0,this.exceededNote=null;let e=this.deps.getConfig()?.maxWallClockMs;typeof e==`number`&&Number.isFinite(e)&&e>0&&(this.wallClockTimer=setTimeout(()=>{this.wallClockTimer=null,this.trip(`wall-clock bound (${e} ms) exceeded`)},e))}recordCompletedTurn(){this.turnCount+=1}enforceOnTurnStart(){let e=this.deps.getConfig()?.maxTurns;typeof e==`number`&&e>0&&this.turnCount>=e&&this.trip(`turn bound (${e}) exceeded`)}disarm(){this.wallClockTimer!==null&&(clearTimeout(this.wallClockTimer),this.wallClockTimer=null)}takeExceededNote(){let e=this.exceededNote;return this.exceededNote=null,e}trip(e){this.exceededNote!==null||this.deps.isDisposed()||(this.exceededNote=e,this.deps.onTripped())}};function GD(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}function KD(e,t){return!GD(e,t)}function qD(e){let t=e.captureStructuredOutput,n;return n=new O_({initialState:{model:e.model,tools:e.tools,systemPrompt:e.systemPrompt,messages:e.messages,thinkingLevel:e.thinkingLevel},getApiKey:e.getApiKey,transformContext:async(t,r)=>{let i=await e.transformContext(t,r);return r?.aborted||!KD(t,i)?t:GD(n.state.messages,t)?(t.splice(0,t.length,...i),n.state.messages=[...i],e.onContextCompacted?.(),t):i},streamFn:e.streamFn,afterToolCall:async e=>{t&&e.toolCall.name===`StructuredOutput`&&t(e.args)}}),n}const JD=_(`scoop-context`);async function YD(e,t,n,r){if(!e)return;let i=n.policy.filesystem.kind===`full-workspace`?[n.workspace.root,`/shared`,`/scoops`,`/home`,`/home/user`,or,r,`/mnt`]:[`/scoops/${t.folder}`,`/scoops/${t.folder}/workspace`,`/scoops/${t.folder}/home`,`/scoops/${t.folder}/tmp`,`/shared`,or,r];for(let t of i)try{await e.mkdir(t,{recursive:!0})}catch{}let a=n.workspace.memoryPath;try{await e.readFile(a)}catch{let r=`# ${t.assistantLabel} Memory
1150
1150
 
1151
1151
  ${n.display.role===`primary`?`Role: Cone (main orchestrator)`:`Scoop: ${t.name}`}
1152
1152
  Folder: ${t.folder}
@@ -1157,34 +1157,34 @@ Created: ${new Date().toISOString()}
1157
1157
 
1158
1158
  ## Context
1159
1159
  (Add important context here)
1160
- `;try{await e.writeFile(a,r)}catch(r){let i=r?.code;if(i===`EACCES`)WD.debug(`Skipping default memory write (sandbox is read-only)`,{folder:t.folder,path:a});else if(await KD(e,n.workspace.root))throw r;else throw Error(`workspace filesystem unavailable: ${n.workspace.root} is missing and could not be created (${i??`unknown error`}) — reload the session`,{cause:r})}}}async function KD(e,t){try{return await e.exists(t)}catch{return!1}}async function qD(e,t){let n=await ii(t.scoop,t.coneJid),r=(e,r,i)=>{let a=t.getEffortOverride(),o=a?{...i,effort:a}:i;return e.provider===`adobe`?un(e,r,{...o,headers:{...i?.headers,"X-Session-Id":n}}):un(e,r,o)},i=e.provider===`adobe`?{"X-Session-Id":n}:void 0,a=()=>t.getModelApiKey()??void 0,o=t.appendConeMemory,s=t.unit.policy.canWriteSharedMemory&&o?n=>o(n,{source:`compaction`,model:e,apiKey:t.getModelApiKey()??void 0,headers:i}):void 0;return{streamWithSessionId:r,compactFn:vn({model:e,contextWindow:typeof e.contextWindow==`number`&&e.contextWindow>0?e.contextWindow:void 0,getApiKey:a,headers:i,onMemoryUpdates:s,shouldExtractMemories:()=>!ke(`agentic-memory`),onCompactionStateChange:(e,n)=>{t.onCompactionStateChange?.(e,n)},onBeforeCompaction:t.onBeforeCompaction}),getCompactionApiKey:a}}function JD(e){return e.length>1&&e.endsWith(`/`)?e.slice(0,-1):e}var YD=class{visiblePaths;kinds=new Map;unreported=new Set;constructor(e){this.visiblePaths=e}record(e,t){let n=JD(e);this.kinds.has(n)||(this.kinds.set(n,t),this.unreported.add(n))}outsidePaths(){return[...this.kinds].filter(([,e])=>e===`outside`).map(([e])=>e)}takeNote(){if(this.unreported.size===0)return;let e=[],t=[];for(let n of this.unreported)(this.kinds.get(n)===`filtered`?t:e).push(n);return this.unreported.clear(),XD(this.visiblePaths,e,t)}};function XD(e,t,n){let r=e.length>0?e.join(`, `):`(none)`,i=[];return t.length>0&&i.push(`[not visible from this pass] ${t.join(`, `)} — outside visiblePaths (${r}). "No such file or directory" there means UNKNOWN, not absent: never record such a path as missing, and never refute a stored claim about it.`),n.length>0&&i.push(`[filtered listing] ${n.join(`, `)} lists only entries leading to visiblePaths (${r}); anything else there is hidden, not absent.`),i.join(`
1161
- `)}const ZD=/\bnot:|\bENOENT\b|no such file|\bnot found\b|\bdoes(?:n't| not) exist|\bno longer exists?\b|\bnever existed\b|\bnon-?existent\b|\bmissing\b|\babsent\b|\bremoved\b|\bdeleted\b|\bgone\b|\bnot (?:present|there|installed|seeded|shipped|in this copy)\b/i;function QD(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function $D(e,t,n){if(n.length===0)return null;let r=n.map(JD).filter(e=>e.length>1);if(r.length===0)return null;let i=new Set(e.split(`
1160
+ `;try{await e.writeFile(a,r)}catch(r){let i=r?.code;if(i===`EACCES`)JD.debug(`Skipping default memory write (sandbox is read-only)`,{folder:t.folder,path:a});else if(await XD(e,n.workspace.root))throw r;else throw Error(`workspace filesystem unavailable: ${n.workspace.root} is missing and could not be created (${i??`unknown error`}) — reload the session`,{cause:r})}}}async function XD(e,t){try{return await e.exists(t)}catch{return!1}}async function ZD(e,t){let n=await ii(t.scoop,t.coneJid),r=(e,r,i)=>{let a=t.getEffortOverride(),o=a?{...i,effort:a}:i;return e.provider===`adobe`?un(e,r,{...o,headers:{...i?.headers,"X-Session-Id":n}}):un(e,r,o)},i=e.provider===`adobe`?{"X-Session-Id":n}:void 0,a=()=>t.getModelApiKey()??void 0,o=t.appendConeMemory,s=t.unit.policy.canWriteSharedMemory&&o?n=>o(n,{source:`compaction`,model:e,apiKey:t.getModelApiKey()??void 0,headers:i}):void 0;return{streamWithSessionId:r,compactFn:vn({model:e,contextWindow:typeof e.contextWindow==`number`&&e.contextWindow>0?e.contextWindow:void 0,getApiKey:a,headers:i,onMemoryUpdates:s,shouldExtractMemories:()=>!ke(`agentic-memory`),onCompactionStateChange:(e,n)=>{t.onCompactionStateChange?.(e,n)},onBeforeCompaction:t.onBeforeCompaction}),getCompactionApiKey:a}}function QD(e){return e.length>1&&e.endsWith(`/`)?e.slice(0,-1):e}var $D=class{visiblePaths;kinds=new Map;unreported=new Set;constructor(e){this.visiblePaths=e}record(e,t){let n=QD(e);this.kinds.has(n)||(this.kinds.set(n,t),this.unreported.add(n))}outsidePaths(){return[...this.kinds].filter(([,e])=>e===`outside`).map(([e])=>e)}takeNote(){if(this.unreported.size===0)return;let e=[],t=[];for(let n of this.unreported)(this.kinds.get(n)===`filtered`?t:e).push(n);return this.unreported.clear(),eO(this.visiblePaths,e,t)}};function eO(e,t,n){let r=e.length>0?e.join(`, `):`(none)`,i=[];return t.length>0&&i.push(`[not visible from this pass] ${t.join(`, `)} — outside visiblePaths (${r}). "No such file or directory" there means UNKNOWN, not absent: never record such a path as missing, and never refute a stored claim about it.`),n.length>0&&i.push(`[filtered listing] ${n.join(`, `)} lists only entries leading to visiblePaths (${r}); anything else there is hidden, not absent.`),i.join(`
1161
+ `)}const tO=/\bnot:|\bENOENT\b|no such file|\bnot found\b|\bdoes(?:n't| not) exist|\bno longer exists?\b|\bnever existed\b|\bnon-?existent\b|\bmissing\b|\babsent\b|\bremoved\b|\bdeleted\b|\bgone\b|\bnot (?:present|there|installed|seeded|shipped|in this copy)\b/i;function nO(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function rO(e,t,n){if(n.length===0)return null;let r=n.map(QD).filter(e=>e.length>1);if(r.length===0)return null;let i=new Set(e.split(`
1162
1162
  `).map(e=>e.trim()));for(let e of t.split(`
1163
- `)){let t=e.trim();if(!(t.length===0||i.has(t)))for(let e of r){if(!t.includes(e))continue;let n=RegExp(`\\bnot\\s+[\`"'(]*${QD(e)}`,`i`);if(ZD.test(t)||n.test(t))return{line:t,path:e}}}return null}_(`secret-env`);function eO(e){let t={},n;for(let r of e)!r?.name||!r?.maskedValue||(r.name===`oauth.github.token`&&(n=r.maskedValue),g(r.name)&&(t[r.name]=r.maskedValue));return n&&(t.GITHUB_TOKEN===void 0&&(t.GITHUB_TOKEN=n),t.GH_TOKEN===void 0&&(t.GH_TOKEN=n)),t}const tO=[`readFile`,`readFileRange`,`readTextFile`,`stat`,`lstat`,`realpath`,`readlink`],nO=[`/usr/`,`/bin/`];function rO(e){let t=En(e);return nO.some(e=>t===e.slice(0,-1)||t.startsWith(e))}function iO(e,t,n){let r=e,i=e=>typeof r[e]==`function`,a=e=>rO(e)?`inside`:t.readAccess(e),o=e=>{let t=En(e);return n.record(t,`outside`),new k(`EACCES`,`outside this unit's visiblePaths — the path is unknown from here, not absent`,t)},s={};for(let e of tO)i(e)&&(s[e]=async(t,...n)=>{if(a(t)===`outside`)throw o(t);return r[e]?.(t,...n)});return i(`exists`)&&(s.exists=async e=>a(e)===`outside`?(n.record(En(e),`outside`),!1):r.exists?.(e)),i(`getNativeFile`)&&(s.getNativeFile=async e=>a(e)===`outside`?(n.record(En(e),`outside`),null):r.getNativeFile?.(e)),i(`readDir`)&&(s.readDir=async(e,...t)=>{let i=a(e);return i===`outside`?(n.record(En(e),`outside`),[]):(i===`parent`&&n.record(En(e),`filtered`),await r.readDir?.(e,...t))}),i(`readDirSync`)&&(s.readDirSync=e=>(a(e)===`parent`&&n.record(En(e),`filtered`),r.readDirSync?.(e))),i(`copyFile`)&&(s.copyFile=async(e,t)=>{if(a(e)===`outside`)throw o(e);return r.copyFile?.(e,t)}),i(`walk`)&&(s.walk=async function*(e,...t){let i=a(e);if(i===`outside`){n.record(En(e),`outside`);return}i===`parent`&&n.record(En(e),`filtered`),yield*r.walk?.(e,...t)}),new Proxy(e,{get(e,t,n){if(t===ti)return!0;if(typeof t==`string`&&t in s)return s[t];let r=Reflect.get(e,t,n);return typeof r==`function`?r.bind(e):r}})}const aO={writeFile:0,appendFile:0,rename:1,copyFile:1,symlink:1};function oO(e){return new k(`EACCES`,ci,En(e))}async function sO(e,t){let n=En(t);try{return En(await e.realpath(n))}catch{}let r=n.lastIndexOf(`/`);if(r<=0)return n;try{let t=En(await e.realpath(n.slice(0,r)));return`${t===`/`?``:t}/${n.slice(r+1)}`}catch{return n}}function cO(e){let t={};for(let n of Object.keys(aO)){let r=e[n];if(typeof r!=`function`)continue;let i=aO[n];t[n]=async(...t)=>{let n=t[i];if(typeof n==`string`){if(li(n))throw oO(n);let t=await sO(e,n);if(li(t))throw oO(n)}return r.apply(e,t)}}return new Proxy(e,{get(e,n,r){if(n===ti)return!0;if(typeof n==`string`&&n in t)return t[n];let i=Reflect.get(e,n,r);return typeof i==`function`?i.bind(e):i}})}function lO(e){let{isCone:t,folder:n,secretEnv:r,tmpDir:i,lickTarget:a}=e,o=a?{[Oi]:a}:{};return t?{...r,TMPDIR:i,...o}:{...r,HOME:`/scoops/${n}/home`,TMPDIR:i,USER:n,PATH:[`/usr/bin`,`/scoops/${n}/workspace/skills`,`/scoops/${n}/workspace/bin`,...fi].join(`:`),...o}}function uO(e,t,n){return e.display.role===`child`?t.folder:t.jid===n?void 0:t.folder}function dO({sudoManager:e,unit:t,folder:n,onSudoRequest:r}){if(!e)return null;let i=e,{policy:a}=t,o=a.approvalAuthority===`user`,s=r,c=o||!s?i.getBroker():{requestApproval:e=>s(e)},l=o?()=>i.getPolicy():()=>i.getPolicyForScoop(n),u=a.sudoDefaultDisposition,d=i.getShellConfig(),f=a.persistCommandGrants?d.persistCommandGrant:async()=>{},p={broker:c,getPolicy:l,defaultDisposition:u,shellConfig:{...d,broker:c,getPolicy:l,defaultDisposition:u,persistCommandGrant:f}};return a.persistCommandGrants||(p.onGrant=async()=>{}),p}const fO=_(`scoop-context`);function pO(e,t){let n=e.policy.filesystem;return n.kind!==`restricted`||!(t instanceof Dr)||!ui(n.writablePaths)?null:new YD(n.visiblePaths)}async function mO(e){try{let t=await e.secrets.listMaskedEnv();return t.ok?Array.isArray(t.value.entries)?eO(t.value.entries):(fO.warn(`Masked secrets response was not an array`,{entriesType:typeof t.value.entries}),{}):(fO.warn(`Failed to fetch masked secrets`,{capability:t.capability,operation:t.operation,message:t.message,status:`status`in t?t.status:void 0}),{})}catch(e){return fO.warn(`Failed to fetch masked secrets`,{error:e instanceof Error?e.message:String(e)}),{}}}async function hO(e){let{scoop:t,unit:n,fs:i,skillsFs:a}=e,o=n.workspace.root,s=e.getBrowserAPI();n.policy.filesystem.kind===`full-workspace`&&await AT(i,ur);let c=a??i,l=e.capabilityBroker??r(),u=await mO(l),d=await l.network.localNodeServer(),f=()=>d.ok,p=dO({sudoManager:e.sudoManager,unit:n,folder:t.folder,onSudoRequest:e.onSudoRequest}),m=p?ni(i,{broker:p.broker,getPolicy:p.getPolicy,defaultDisposition:p.defaultDisposition,...p.onGrant?{onGrant:p.onGrant}:{}}):i,h=pO(n,i),g=h?iO(m,i,h):m,te=cO(g),ne=lO({isCone:n.policy.filesystem.kind===`full-workspace`,folder:t.folder,secretEnv:u,tmpDir:e.tmpDir,...e.lickTarget?{lickTarget:e.lickTarget}:{}}),re=new ee({fs:te,cwd:o,env:Object.keys(ne).length>0?ne:void 0,browserAPI:s,webhook:{hasLocalNodeServer:f,getLeaderStatus:Nr},crontask:{hasLocalNodeServer:f},jshDiscoveryFs:a?c:void 0,allowedCommands:t.config?.allowedCommands,getParentJid:()=>t.jid,isScoop:()=>n.display.role===`child`,sudo:p?.shellConfig,scrubProgressLabel:pn(),processManager:e.processManager??void 0,processOwner:e.processOwner,getCurrentShellPid:e.getTurnPid});return fO.info(`AlmostBashShell initialized`,{folder:t.folder}),{shell:re,gatedFs:te,memoryFs:g,blindReads:h,skills:await ET(c,ur)}}const gO={anthropic:`Anthropic`,openai:`OpenAI`,google:`Google`,adobe:`Adobe`,github:`GitHub`,bedrock:`AWS Bedrock`,azure:`Azure`,"azure-openai":`Azure OpenAI`,"azure-ai-foundry":`Azure AI Foundry`,groq:`Groq`,xai:`xAI`,openrouter:`OpenRouter`,local:`your local model`};function _O(e){if(e)return gO[e]??e}const vO=51200;function yO(e){if(e.length===0)return[];let t=e.split(`
1163
+ `)){let t=e.trim();if(!(t.length===0||i.has(t)))for(let e of r){if(!t.includes(e))continue;let n=RegExp(`\\bnot\\s+[\`"'(]*${nO(e)}`,`i`);if(tO.test(t)||n.test(t))return{line:t,path:e}}}return null}_(`secret-env`);function iO(e){let t={},n;for(let r of e)!r?.name||!r?.maskedValue||(r.name===`oauth.github.token`&&(n=r.maskedValue),g(r.name)&&(t[r.name]=r.maskedValue));return n&&(t.GITHUB_TOKEN===void 0&&(t.GITHUB_TOKEN=n),t.GH_TOKEN===void 0&&(t.GH_TOKEN=n)),t}const aO=[`readFile`,`readFileRange`,`readTextFile`,`stat`,`lstat`,`realpath`,`readlink`],oO=[`/usr/`,`/bin/`];function sO(e){let t=En(e);return oO.some(e=>t===e.slice(0,-1)||t.startsWith(e))}function cO(e,t,n){let r=e,i=e=>typeof r[e]==`function`,a=e=>sO(e)?`inside`:t.readAccess(e),o=e=>{let t=En(e);return n.record(t,`outside`),new k(`EACCES`,`outside this unit's visiblePaths — the path is unknown from here, not absent`,t)},s={};for(let e of aO)i(e)&&(s[e]=async(t,...n)=>{if(a(t)===`outside`)throw o(t);return r[e]?.(t,...n)});return i(`exists`)&&(s.exists=async e=>a(e)===`outside`?(n.record(En(e),`outside`),!1):r.exists?.(e)),i(`getNativeFile`)&&(s.getNativeFile=async e=>a(e)===`outside`?(n.record(En(e),`outside`),null):r.getNativeFile?.(e)),i(`readDir`)&&(s.readDir=async(e,...t)=>{let i=a(e);return i===`outside`?(n.record(En(e),`outside`),[]):(i===`parent`&&n.record(En(e),`filtered`),await r.readDir?.(e,...t))}),i(`readDirSync`)&&(s.readDirSync=e=>(a(e)===`parent`&&n.record(En(e),`filtered`),r.readDirSync?.(e))),i(`copyFile`)&&(s.copyFile=async(e,t)=>{if(a(e)===`outside`)throw o(e);return r.copyFile?.(e,t)}),i(`walk`)&&(s.walk=async function*(e,...t){let i=a(e);if(i===`outside`){n.record(En(e),`outside`);return}i===`parent`&&n.record(En(e),`filtered`),yield*r.walk?.(e,...t)}),new Proxy(e,{get(e,t,n){if(t===ti)return!0;if(typeof t==`string`&&t in s)return s[t];let r=Reflect.get(e,t,n);return typeof r==`function`?r.bind(e):r}})}const lO={writeFile:0,appendFile:0,rename:1,copyFile:1,symlink:1};function uO(e){return new k(`EACCES`,ci,En(e))}async function dO(e,t){let n=En(t);try{return En(await e.realpath(n))}catch{}let r=n.lastIndexOf(`/`);if(r<=0)return n;try{let t=En(await e.realpath(n.slice(0,r)));return`${t===`/`?``:t}/${n.slice(r+1)}`}catch{return n}}function fO(e){let t={};for(let n of Object.keys(lO)){let r=e[n];if(typeof r!=`function`)continue;let i=lO[n];t[n]=async(...t)=>{let n=t[i];if(typeof n==`string`){if(li(n))throw uO(n);let t=await dO(e,n);if(li(t))throw uO(n)}return r.apply(e,t)}}return new Proxy(e,{get(e,n,r){if(n===ti)return!0;if(typeof n==`string`&&n in t)return t[n];let i=Reflect.get(e,n,r);return typeof i==`function`?i.bind(e):i}})}function pO(e){let{isCone:t,folder:n,secretEnv:r,tmpDir:i,lickTarget:a}=e,o=a?{[Oi]:a}:{};return t?{...r,TMPDIR:i,...o}:{...r,HOME:`/scoops/${n}/home`,TMPDIR:i,USER:n,PATH:[`/usr/bin`,`/scoops/${n}/workspace/skills`,`/scoops/${n}/workspace/bin`,...fi].join(`:`),...o}}function mO(e,t,n){return e.display.role===`child`?t.folder:t.jid===n?void 0:t.folder}function hO({sudoManager:e,unit:t,folder:n,onSudoRequest:r}){if(!e)return null;let i=e,{policy:a}=t,o=a.approvalAuthority===`user`,s=r,c=o||!s?i.getBroker():{requestApproval:e=>s(e)},l=o?()=>i.getPolicy():()=>i.getPolicyForScoop(n),u=a.sudoDefaultDisposition,d=i.getShellConfig(),f=a.persistCommandGrants?d.persistCommandGrant:async()=>{},p={broker:c,getPolicy:l,defaultDisposition:u,shellConfig:{...d,broker:c,getPolicy:l,defaultDisposition:u,persistCommandGrant:f}};return a.persistCommandGrants||(p.onGrant=async()=>{}),p}const gO=_(`scoop-context`);function _O(e,t){let n=e.policy.filesystem;return n.kind!==`restricted`||!(t instanceof Dr)||!ui(n.writablePaths)?null:new $D(n.visiblePaths)}async function vO(e){try{let t=await e.secrets.listMaskedEnv();return t.ok?Array.isArray(t.value.entries)?iO(t.value.entries):(gO.warn(`Masked secrets response was not an array`,{entriesType:typeof t.value.entries}),{}):(gO.warn(`Failed to fetch masked secrets`,{capability:t.capability,operation:t.operation,message:t.message,status:`status`in t?t.status:void 0}),{})}catch(e){return gO.warn(`Failed to fetch masked secrets`,{error:e instanceof Error?e.message:String(e)}),{}}}async function yO(e){let{scoop:t,unit:n,fs:i,skillsFs:a}=e,o=n.workspace.root,s=e.getBrowserAPI();n.policy.filesystem.kind===`full-workspace`&&await PT(i,ur);let c=a??i,l=e.capabilityBroker??r(),u=await vO(l),d=await l.network.localNodeServer(),f=()=>d.ok,p=hO({sudoManager:e.sudoManager,unit:n,folder:t.folder,onSudoRequest:e.onSudoRequest}),m=p?ni(i,{broker:p.broker,getPolicy:p.getPolicy,defaultDisposition:p.defaultDisposition,...p.onGrant?{onGrant:p.onGrant}:{}}):i,h=_O(n,i),g=h?cO(m,i,h):m,te=fO(g),ne=pO({isCone:n.policy.filesystem.kind===`full-workspace`,folder:t.folder,secretEnv:u,tmpDir:e.tmpDir,...e.lickTarget?{lickTarget:e.lickTarget}:{}}),re=new ee({fs:te,cwd:o,env:Object.keys(ne).length>0?ne:void 0,browserAPI:s,webhook:{hasLocalNodeServer:f,getLeaderStatus:Nr},crontask:{hasLocalNodeServer:f},jshDiscoveryFs:a?c:void 0,allowedCommands:t.config?.allowedCommands,getParentJid:()=>t.jid,isScoop:()=>n.display.role===`child`,sudo:p?.shellConfig,scrubProgressLabel:pn(),processManager:e.processManager??void 0,processOwner:e.processOwner,getCurrentShellPid:e.getTurnPid});return gO.info(`AlmostBashShell initialized`,{folder:t.folder}),{shell:re,gatedFs:te,memoryFs:g,blindReads:h,skills:await AT(c,ur)}}const bO={anthropic:`Anthropic`,openai:`OpenAI`,google:`Google`,adobe:`Adobe`,github:`GitHub`,bedrock:`AWS Bedrock`,azure:`Azure`,"azure-openai":`Azure OpenAI`,"azure-ai-foundry":`Azure AI Foundry`,groq:`Groq`,xai:`xAI`,openrouter:`OpenRouter`,local:`your local model`};function xO(e){if(e)return bO[e]??e}const SO=51200;function CO(e){if(e.length===0)return[];let t=e.split(`
1164
1164
  `);return e.endsWith(`
1165
- `)&&t.pop(),t}function bO(e){return e<1024?`${e}B`:e<1048576?`${(e/1024).toFixed(1)}KB`:`${(e/1048576).toFixed(1)}MB`}function xO(e,t={}){let n=t.maxLines??2e3,r=t.maxBytes??51200,i=Buffer.byteLength(e,`utf-8`),a=yO(e),o=a.length;if(o<=n&&i<=r)return{content:e,truncated:!1,truncatedBy:null,totalLines:o,totalBytes:i,outputLines:o,outputBytes:i,lastLinePartial:!1,firstLineExceedsLimit:!1,maxLines:n,maxBytes:r};if(Buffer.byteLength(a[0],`utf-8`)>r)return{content:``,truncated:!0,truncatedBy:`bytes`,totalLines:o,totalBytes:i,outputLines:0,outputBytes:0,lastLinePartial:!1,firstLineExceedsLimit:!0,maxLines:n,maxBytes:r};let s=[],c=0,l=`lines`;for(let e=0;e<a.length&&e<n;e++){let t=a[e],n=Buffer.byteLength(t,`utf-8`)+ +(e>0);if(c+n>r){l=`bytes`;break}s.push(t),c+=n}s.length>=n&&c<=r&&(l=`lines`);let u=s.join(`
1166
- `),d=Buffer.byteLength(u,`utf-8`);return{content:u,truncated:!0,truncatedBy:l,totalLines:o,totalBytes:i,outputLines:s.length,outputBytes:d,lastLinePartial:!1,firstLineExceedsLimit:!1,maxLines:n,maxBytes:r}}function SO(e,t={}){let n=t.maxLines??2e3,r=t.maxBytes??51200,i=Buffer.byteLength(e,`utf-8`),a=yO(e),o=a.length;if(o<=n&&i<=r)return{content:e,truncated:!1,truncatedBy:null,totalLines:o,totalBytes:i,outputLines:o,outputBytes:i,lastLinePartial:!1,firstLineExceedsLimit:!1,maxLines:n,maxBytes:r};let s=[],c=0,l=`lines`,u=!1;for(let e=a.length-1;e>=0&&s.length<n;e--){let t=a[e],n=Buffer.byteLength(t,`utf-8`)+ +(s.length>0);if(c+n>r){if(l=`bytes`,s.length===0){let e=CO(t,r);s.unshift(e),c=Buffer.byteLength(e,`utf-8`),u=!0}break}s.unshift(t),c+=n}s.length>=n&&c<=r&&(l=`lines`);let d=s.join(`
1167
- `),f=Buffer.byteLength(d,`utf-8`);return{content:d,truncated:!0,truncatedBy:l,totalLines:o,totalBytes:i,outputLines:s.length,outputBytes:f,lastLinePartial:u,firstLineExceedsLimit:!1,maxLines:n,maxBytes:r}}function CO(e,t){let n=Buffer.from(e,`utf-8`);if(n.length<=t)return e;let r=n.length-t;for(;r<n.length&&(n[r]&192)==128;)r++;return n.slice(r).toString(`utf-8`)}const wO=_(`tool:bash`),TO=40960,EO=1048576,DO=`\0slicc-img:`;function OO(e){let t=xn(e).filter(e=>e.kind===`image`);if(t.length===0)return{text:e,markers:new Map};let n=new Set,r=EO;for(let e=t.length-1;e>=0;e--){let i=t[e].marker.length;if(i>r&&n.size>0)break;r-=i,n.add(e)}let i=new Map,a=``,o=0;return t.forEach((t,r)=>{if(a+=e.slice(o,t.index),n.has(r)){let e=`${DO}${r}`;i.set(e,t.marker),a+=e}else a+=`[image dropped: a newer image in this command used up the ${EO/1024}KB image budget. View it on its own to see it.]`;o=t.index+t.marker.length}),a+=e.slice(o),{text:a,markers:i}}function kO(e){let t=xn(e).filter(e=>e.kind===`image`);if(t.length===0)return e;let n=``,r=0;for(let i of t)n+=`${e.slice(r,i.index)}[image]`,r=i.index+i.marker.length;return n+e.slice(r)}function AO(e){return e.replaceAll(RegExp(`${DO}\\d+`,`g`),`[image]`)}function jO(e,t){if(t.size===0)return e;let n=e;for(let[e,r]of t)n.includes(e)&&(n=n.replace(e,()=>r));return n}async function MO(e,t,n,r){let{text:i,markers:a}=OO(e),o=SO(i,{maxBytes:TO});if(!o.truncated)return jO(i,a);let s=`showing the last ${bO(o.outputBytes)} of ${bO(o.totalBytes)} (${o.totalLines} lines)`,c=`${n}/bash-output-${r()}.txt`;try{return await t.writeFile(c,AO(i)),jO(`${o.content}\n\n[Output truncated: ${s}. Full output written to ${c} — read specific ranges with \`sed -n 'START,ENDp' ${c}\`, \`tail -n +N ${c}\`, or \`grep\`.]`,a)}catch(e){return wO.warn(`Failed to persist full bash output`,{error:e instanceof Error?e.message:String(e)}),jO(`${o.content}\n\n[Output truncated: ${s}. Re-run piping through \`head\`/\`tail\`/\`grep\`/\`sed -n\` to narrow the output.]`,a)}}const NO=new Set([`grep`,`egrep`,`fgrep`,`rg`]);function PO(e){let t=``;for(let n of e.parts)switch(n.type){case`Literal`:case`SingleQuoted`:case`Escaped`:t+=n.value;break;case`DoubleQuoted`:for(let e of n.parts){if(e.type!==`Literal`&&e.type!==`Escaped`)return null;t+=e.value}break;default:return null}return t}function FO(e){let t=e.statements[e.statements.length-1],n=t?.pipelines[t.pipelines.length-1];if(!n||n.negated)return null;let r=n.commands[n.commands.length-1];if(r?.type!==`SimpleCommand`||!r.name)return null;let i=PO(r.name);if(i!==`command`)return i;let a=r.args[0];return a?PO(a):null}function IO(e,t,n,r){if(n!==1||r.trim())return!1;let i;try{i=FO(e.getBash().transform(t).ast)}catch{return!1}return i!==null&&NO.has(i)}function LO(e,t){let n=e.options.annotateResult?.();return n?`${t.endsWith(`
1168
- `)||t.length===0?t:`${t}\n`}${n}\n`:t}function RO(e){if(!(typeof e!=`number`||!Number.isFinite(e)||e<0))return e}function zO(e){return`Execute a bash command. Full shell with pipes, redirects, chaining, control flow. Includes: grep, rg, sed, awk, jq, find, curl, git, node, python3, sqlite3, open (--view for vision), playwright-cli (browser automation). Run \`commands\` for full list. Output is capped at ${TO/1024}KB (the tail is kept); when truncated the full output is written to a temp file named in the result so you can page it. Inline images (\`open --view\`) do not count against that cap — up to ${EO/1024}KB of images per command reaches you as pictures, not base64. A command still running after background_after seconds (default ${e}) is detached: you get a job id at once and a Background Command lick delivers its exit code and output later, so a stuck command never wedges the turn. A pipeline reports the last stage's exit (bash default); when any stage is non-zero the result includes \`pipeline: 1 0\` with each stage's code.`}function BO(e){return{type:`object`,properties:{command:{type:`string`,description:`The bash command to execute.`},timeout:{type:`number`,description:`Hard ceiling in seconds: the command is killed and this call returns an error — no job, no lick. Omit for no ceiling (the default), which detaches a slow command instead of killing it.`},background_after:{type:`number`,description:`Seconds to wait before detaching the command. Defaults to ${e}. Use 0 to detach immediately (dev servers, watchers), or a large value when you must have the output in this turn. A smaller timeout wins: the command is killed, not detached.`}},required:[`command`]}}function VO(e){return{content:`Command timed out after ${e}s and was killed; no output was captured. Re-run it with a larger timeout, a larger background_after so it detaches instead of dying, or narrow the command so it finishes sooner.`,isError:!0}}function HO(e,t,n){let r=new AbortController,i=e.options.jobHost?.spawn(t)??null,a=()=>r.abort();n?.aborted?r.abort():n?.addEventListener(`abort`,a,{once:!0}),i&&(i.signal.aborted?r.abort():i.signal.addEventListener(`abort`,()=>r.abort(),{once:!0}));let o=[],s,c,l=Promise.resolve(),u=()=>{if(s===void 0||c===void 0)return;let t=s,n=c,r=o.join(``);l=l.then(async()=>{let i=await JO(e,n,r);await e.fs.writeFile(t,i)}).catch(e=>wO.warn(`Failed to tee background bash output`,{jobId:n,outputPath:t,error:e instanceof Error?e.message:String(e)}))};return{job:i,controller:r,settled:e.shell.executeCommand(t,r.signal,i?.pid,void 0,{capturePipeStatus:!0,onOutput:e=>{o.push(e),u()}}).then(e=>({ok:!0,result:e}),e=>({ok:!1,error:e instanceof Error?e.message:String(e)})),releaseTurnSignal:()=>n?.removeEventListener(`abort`,a),getTeedOutput:()=>o.join(``),startPersisting:(t,n)=>{s=t,c=n,l=l.then(()=>e.swept).then(()=>void 0),u()},flushPersist:()=>l,killedByTimeout:!1}}function UO(e,t){t===`timeout`&&(e.killedByTimeout=!0),e.job?.kill(),e.controller.abort(),e.job?.exit(null)}function WO(e,t){e.job?.exit(e.job.signal.aborted?null:t)}function GO(e,t,n,r,i){let a=i===void 0?``:` Its ${i}s timeout still applies.`;return{content:`Still running after ${n}s — detached as background job ${e}. This turn is NOT blocked on it: continue with other work, and do not re-run the command. A "Background Command" lick will arrive with the exit code and a preview once it finishes, and its full output is being written to ${r} as it runs.${t===void 0?``:` Pid ${t}: \`ps\` lists it, \`kill ${t}\` stops it.`}${a}`}}function KO(e,t,n,r={}){let i=0,a=0,o=import(`./bash-job-journal-DEe5YuRn.js`),s=o.then(({createBashJobJournal:e})=>e(t,n,void 0,(e,t)=>wO.warn(e,{tempDir:n,error:t instanceof Error?t.message:String(t)}))),c={shell:e,fs:t,tempDir:n,options:r,defaultBackgroundAfter:RO(r.defaultBackgroundAfterSeconds)??600,nextOutputSeq:()=>i+=1,nextJobId:()=>`bg-${a+=1}`,journal:s,swept:Promise.resolve()};return c.swept=Promise.all([o,s]).then(([{KERNEL_RESTART_EXIT_CODE:e},t])=>t.sweep((t,n)=>qO(c,t,n,e))).catch(e=>wO.warn(`Could not sweep orphaned bash jobs`,{tempDir:n,error:e})),{name:`bash`,description:zO(c.defaultBackgroundAfter),inputSchema:BO(c.defaultBackgroundAfter),execute:(e,t)=>ek(c,e,t)}}function qO(e,t,n,r){let i={type:`bash`,bashJobId:t.jobId,bashCommand:t.command,bashExitCode:r,...t.pid===void 0?{}:{bashJobPid:t.pid},resultPath:t.outputPath,preview:n,...e.options.targetScoop?{targetScoop:e.options.targetScoop}:{},timestamp:new Date().toISOString(),body:{jobId:t.jobId,pid:t.pid??null,command:t.command,exitCode:r,resultPath:t.outputPath,killedByKernelRestart:!0}};wO.warn(`Background bash job was killed by a kernel restart`,{jobId:t.jobId,command:t.command,startedAt:t.startedAt});let a=n=>{if(e.options.fireLick?.(i)===!1){if(n<=1){wO.warn(`No lick sink for a kernel-restart job report; output file still has it`,{jobId:t.jobId,outputPath:t.outputPath});return}setTimeout(()=>a(n-1),2e3)}};a(30)}async function JO(e,t,n){let r=e.options.scrubOutput;if(!r||!n)return n;try{return await r(n)}catch(e){return wO.warn(`Background bash output scrub failed; withholding output`,{jobId:t,error:e instanceof Error?e.message:String(e)}),`[output withheld: secret scrub unavailable]`}}function YO(e){return e.ok?e.result.exitCode===124&&/execution aborted/i.test(e.result.stderr):/execution aborted/i.test(e.error)}function XO(e,t){return e===void 0?`--- killed (exit ${t}) ---\n`:`--- killed after ${e}s (exit ${t}) ---\n`}async function ZO(e,t,n,r,i,a,s,c){await s.flushPersist();let l=s.killedByTimeout||YO(a),u,d;if(l){let e=s.getTeedOutput();d=124,u=`${e.endsWith(`
1169
- `)||e.length===0?e:`${e}\n`}${XO(c,d)}`}else if(a.ok)u=o([a.result.stdout,a.result.stderr].filter(Boolean).join(``)||`(exit code: ${a.result.exitCode})`,a.result.pipeStatus),d=a.result.exitCode;else{let e=s.getTeedOutput();d=1,u=e?`${e.endsWith(`
1170
- `)?e:`${e}\n`}Shell error: ${a.error}`:`Shell error: ${a.error}`}let f=await JO(e,t,LO(e,u)),p;try{await e.fs.writeFile(i,f),p=i}catch(e){wO.warn(`Failed to persist background bash output`,{jobId:t,outputPath:i,error:e instanceof Error?e.message:String(e)})}if(!e.options.fireLick){wO.warn(`Background bash job finished with no lick sink`,{jobId:t,exitCode:d});return}let m=SO(kO(f),{maxBytes:2048});e.options.fireLick({type:`bash`,bashJobId:t,bashCommand:r,bashExitCode:d,...n===void 0?{}:{bashJobPid:n},resultPath:p,preview:m.content,...e.options.targetScoop?{targetScoop:e.options.targetScoop}:{},timestamp:new Date().toISOString(),body:{jobId:t,pid:n??null,command:r,exitCode:d,resultPath:p??null}})}function QO(e,t,n,r,i,a){let o=e.nextJobId(),s=t.job?.pid,c=`${e.tempDir}/bash-${o}.txt`;t.startPersisting(c,o);let l=Promise.all([e.journal,e.swept]).then(([e])=>e.record({jobId:o,pid:s,command:n,outputPath:c,startedAt:new Date().toISOString()})),u=()=>l.then(()=>e.journal).then(e=>e.clear(o)).catch(e=>wO.warn(`Could not journal a detached bash job`,{jobId:o,error:e})),d=i===void 0?void 0:i-a,f=d===void 0?void 0:setTimeout(()=>UO(t,`timeout`),d*1e3);return t.settled.then(r=>(f!==void 0&&clearTimeout(f),WO(t,t.killedByTimeout?124:r.ok?r.result.exitCode:1),ZO(e,o,s,n,c,r,t,i))).catch(e=>wO.error(`Background bash delivery failed`,{jobId:o,error:e})).then(u),wO.info(`Bash command detached to background`,{command:n,jobId:o,pid:s,killAfter:d}),GO(o,s,r,c,i)}async function $O(e,t,n){wO.debug(`Result`,{exitCode:n.exitCode,stdoutLength:n.stdout.length,stderrLength:n.stderr.length});let r=``;return n.stdout&&(r+=n.stdout),n.stderr&&(r+=n.stderr),r||=`(exit code: ${n.exitCode})`,r=LO(e,o(r,n.pipeStatus)),{content:await MO(r,e.fs,e.tempDir,e.nextOutputSeq),isError:n.exitCode!==0&&!IO(e.shell,t,n.exitCode,n.stderr)}}async function ek(e,t,n){let r=t.command,i=RO(t.timeout),a=RO(t.background_after)??e.defaultBackgroundAfter;wO.debug(`Execute`,{command:r,timeoutSeconds:i,backgroundAfter:a});let o=HO(e,r,n),s=i!==void 0&&i<=a,c=s?i:a,l,u=new Promise(e=>{l=setTimeout(()=>e(`elapsed`),c*1e3)});try{let t=await Promise.race([o.settled,u]);return t===`elapsed`&&s?(UO(o,`timeout`),wO.warn(`Bash command timed out`,{command:r,timeoutSeconds:c,pid:o.job?.pid}),VO(c)):t===`elapsed`?QO(e,o,r,c,i,a):(WO(o,t.ok?t.result.exitCode:1),t.ok?await $O(e,r,t.result):(wO.error(`Error`,{command:r,error:t.error}),{content:`Shell error: ${t.error}`,isError:!0}))}finally{l!==void 0&&clearTimeout(l),o.releaseTurnSignal()}}const tk={type:`object`,required:[`path`,`edits`],properties:{path:{type:`string`},edits:{type:`array`,items:{type:`object`,required:[`oldText`,`newText`],properties:{oldText:{type:`string`},newText:{type:`string`}}}}}};function nk(e){if(!e||typeof e!=`object`||Array.isArray(e))return!1;let t=e;return typeof t.oldText==`string`&&typeof t.newText==`string`}function rk(e){if(!e||typeof e!=`object`)return e;let t=e;if(typeof t.edits==`string`)try{let e=JSON.parse(t.edits);Array.isArray(e)?t.edits=e:nk(e)&&(t.edits=[e])}catch{}else nk(t.edits)&&(t.edits=[t.edits]);if(typeof t.oldText!=`string`||typeof t.newText!=`string`)return t;let n=Array.isArray(t.edits)?[...t.edits]:[];n.push({oldText:t.oldText,newText:t.newText});let{oldText:r,newText:i,...a}=t;return{...a,edits:n}}function ik(e,t=`/workspace`){return{name:`edit`,description:`Edit one file using exact replacements. Each oldText must be unique in the original file; edits must not overlap. Combine changes to the same block in one edit.`,inputSchema:tk,prepareArguments:rk,async execute(n,r){let{executePiEdit:i}=await import(`./pi-edit-execution-C8DevsMX.js`);return i(e,t,n,r)}}}async function ak(e,t,n){if(Fr(En(t)))return null;try{let r=await e.readTextFile(t);if(n.length<=262144)return r===n?null:`Write did not land: ${t} content mismatch (expected ${n.length} chars, got ${r.length})`;if(r.length!==n.length)return`Write did not land: ${t} content mismatch (expected ${n.length} chars, got ${r.length})`;let i=4096;return r.slice(0,i)!==n.slice(0,i)||r.slice(-4096)!==n.slice(-4096)?`Write did not land: ${t} content mismatch (head/tail sample)`:null}catch(e){return`Write did not land: ${t} is not readable (${e instanceof Error?e.message:String(e)})`}}const ok=_(`tool:fs`);function sk(e,t=`/workspace`){return[ck(e),lk(e),ik(e,t)]}function ck(e){return{name:`read_file`,description:`Read a file's contents. Output is capped at 2000 lines or ${vO/1024}KB (whichever is hit first); use offset/limit for large files and the \`offset=N\` in the footer to page through the rest.`,inputSchema:{type:`object`,properties:{path:{type:`string`,description:`Absolute path to the file to read.`},offset:{type:`number`,description:`Line number to start reading from (1-based). Optional.`},limit:{type:`number`,description:`Maximum number of lines to read. Optional.`}},required:[`path`]},async execute(t){let n=t.path,r=t.offset??1,i=t.limit;ok.debug(`Read`,{path:n,offset:r,limit:i});try{let t=(await e.readTextFile(n)).split(`
1171
- `),a=t.length,o=Math.max(0,r-1),s=o+1;if(o>=t.length)return{content:`Offset ${r} is beyond end of file (${a} lines total)`,isError:!0};let c=i===void 0?t.slice(o):t.slice(o,Math.min(o+i,t.length)),l=i===void 0?void 0:c.length,u=xO(c.join(`
1172
- `));if(u.firstLineExceedsLimit)return{content:`[Line ${s} is ${bO(new TextEncoder().encode(t[o]??``).length)}, exceeds ${bO(vO)} limit. Use bash: sed -n '${s}p' ${n} | head -c ${vO}]`};let d=u.content,f=``;if(u.truncated){let e=s+u.outputLines-1,t=e+1;f=u.truncatedBy===`lines`?`\n\n[Showing lines ${s}-${e} of ${a}. Use offset=${t} to continue.]`:`\n\n[Showing lines ${s}-${e} of ${a} (${bO(vO)} limit). Use offset=${t} to continue.]`}else l!==void 0&&o+l<t.length&&(f=`\n\n[${t.length-(o+l)} more lines in file. Use offset=${o+l+1} to continue.]`);return{content:d+f}}catch(e){let t=e instanceof Error?e.message:String(e);return ok.error(`Read failed`,{path:n,error:t}),{content:t,isError:!0}}}}}function lk(e){return{name:`write_file`,description:`Write content to a file. Creates the file if it does not exist, or overwrites it if it does. Parent directories are created automatically.`,inputSchema:{type:`object`,properties:{path:{type:`string`,description:`Absolute path to the file to write.`},content:{type:`string`,description:`The content to write to the file.`}},required:[`path`,`content`]},async execute(t){let n=t.path,r=t.content;ok.debug(`Write`,{path:n,contentLength:r.length});try{await e.writeFile(n,r);let t=await ak(e,n,r);return t?(ok.error(`Write durability check failed`,{path:n,error:t}),{content:t,isError:!0}):{content:`File written: ${n}`}}catch(e){let t=e instanceof Error?e.message:String(e);return ok.error(`Write failed`,{path:n,error:t}),{content:t,isError:!0}}}}}const uk={type:`object`,properties:{path:{type:`string`,description:`Absolute path of the memory file (a CLAUDE.md memory or a curation draft).`},content:{type:`string`,description:"Complete new file content (whole-file rewrite). Exclusive with `edits`."},edits:{type:`array`,description:"Exact replacements applied in order; each oldText must occur exactly once. Exclusive with `content`.",items:{type:`object`,required:[`oldText`,`newText`],properties:{oldText:{type:`string`},newText:{type:`string`}}}}},required:[`path`]};function dk(e,t){return{name:si,description:"Write a memory file — the only tool that may. Enforces the memory budget (over budget, a write must shrink the file) and reports the size that landed plus the remaining room or overage, so no `wc -c` turn is needed. Pass `content` for a rewrite or `edits` for exact replacements.",inputSchema:uk,async execute(n){let{executeMemoryWrite:r}=await import(`./memory-write-execute-ntAccCje.js`);return r(e,t,n)}}}function fk(){return null}const pk=_(`tool:request-secret`);async function mk(e,t){let n=fk();if(n)return n(e);let r=t.callPanelRpc??await hk();return r?r(e):{stored:!1,reason:`unavailable`}}async function hk(){let{getPanelRpcClient:e}=await import(`./panel-rpc-DW7W4w6_.js`).then(e=>e.a),t=e();return t?e=>t.call(`secret-request`,e,{timeoutMs:3e5}):null}function gk(e){try{return e.getProvider?.()||void 0}catch(e){pk.warn(`could not resolve this unit’s provider for the secret prompt`,{error:e instanceof Error?e.message:String(e)});return}}function _k(e){if(!Array.isArray(e))return;let t=e.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(e=>e.length>0);return t.length>0?t:void 0}function vk(e,t){let n=[`The user stored the secret "${e.name}".`,`Scope: ${e.domains.join(`, `)} — it is only unmasked for requests to these hosts.`,e.persisted?`Lifetime: saved (survives this session).`:`Lifetime: this session only (held in memory).`];return e.maskedValue?(n.push(`Masked value: ${e.maskedValue}`,`Use the masked value wherever the credential goes (headers, request bodies). SLICC substitutes the real value at the network boundary. You will never see the real value.`),t&&n.push(`It is also available as $${e.name} in bash.`)):n.push(`The store did not report a masked value; run \`secret get ${e.name}\` to read it.`),n.join(`
1173
- `)}function yk(e){switch(e.reason){case`cancelled`:return`The user dismissed the secret prompt — nothing was stored. Do not retry; ask what to do instead.`;case`unavailable`:return"This float cannot prompt for a secret (no secret-entry surface). Ask the user to add it from the leader UI or with `secret set`.";default:return`The secret could not be stored${e.detail?`: ${e.detail}`:``}.`}}function bk(e={}){return{name:`request_secret`,description:`Ask the user for a credential (API key, token, password) through a secure prompt. You never receive the real value: the result carries only the secret name, a masked stand-in to use in requests, and the domains it may be sent to. Use this instead of asking for a credential in chat, which would put it in the transcript.`,inputSchema:{type:`object`,properties:{name:{type:`string`,description:`Suggested secret name, e.g. GITHUB_TOKEN. Use an uppercase POSIX identifier so it is also available as $NAME in bash. The user can change it.`},reason:{type:`string`,description:`One plain sentence saying what the credential is for. Shown verbatim to the user.`},domains:{type:`array`,items:{type:`string`},description:`Suggested hosts the value may be sent to, e.g. ["api.github.com", "*.github.com"]. Be as narrow as the task allows; the user reviews and can edit this.`},persist:{type:`boolean`,description:`Suggest keeping the secret beyond this session. Defaults to false (session-only).`}},required:[`name`,`reason`]},async execute(t){let n=typeof t.name==`string`?t.name.trim():``,r=typeof t.reason==`string`?t.reason.trim():``;if(!n||!r)return{content:"request_secret needs both `name` and `reason`.",isError:!0};let i={name:n,reason:r,domains:_k(t.domains),persist:t.persist===!0,requester:e.requester,provider:gk(e)},a;try{a=await mk(i,e)}catch(e){let t=e instanceof Error?e.message:String(e);return pk.error(`secret request failed`,{name:n,error:t}),{content:`The secret prompt failed: ${t}`,isError:!0}}if(!a.stored)return{content:yk(a),isError:!0};let o=xk(a.name,a.maskedValue,e);return pk.info(`secret stored via request_secret`,{name:a.name,persisted:a.persisted}),{content:vk(a,o)}}}}function xk(e,t,n){if(!n.setEnv||!t||!g(e))return!1;try{return n.setEnv(e,t),!0}catch(t){return pk.warn(`could not inject the masked value into the shell env`,{name:e,error:t instanceof Error?t.message:String(t)}),!1}}const Sk=_(`scoop-management-tools`),Ck=`cross_cone`;function wk(e){return Fn(e.getScoops(),e.scoop.jid)}function Tk(e){let t=new Set;for(let n of wk(e))n.jid!==e.scoop.jid&&n.parentJid!==null&&t.add(n.jid);return t}function Ek(e){let t=zn(e.getScoops());return t!==void 0&&t.jid===e.scoop.jid}function Dk(e){let t=e.getScoops(),n=Tk(e),r=Ek(e),i=[];for(let e of t){if(e.parentJid===null)continue;if(n.has(e.jid)){i.push({scoop:e,relation:`own`});continue}if(!r)continue;let a=tr(t,e);a.kind!==`cycle`&&i.push({scoop:e,relation:a.kind===`root`?`foreign`:`inherited`})}return i}function Ok(e){return t=>t.folder===e||t.name===e}function kk(e,t){let n=Dk(t);return n.find(t=>t.scoop.folder===e)??n.find(t=>t.relation===`own`&&t.scoop.name===e)??n.find(t=>t.scoop.name===e)}function Ak(e,t){let n=[],r=[];for(let i of e){let e=kk(i,t);e?n.push(e):r.push(i)}return{resolved:n,unknown:r}}function jk(e,t){return Ln(e.getScoops(),t.scoop)?.folder??`unknown`}function Mk(e,t){return t.relation===`inherited`?`inherited (its owning cone is gone)`:`owned by cone "${jk(e,t)}"`}function Nk(e,t,n,r){let i=e.filter(e=>e.relation!==`own`);return i.length===0||t===!0?null:{content:`Refusing to ${n}: ${i.map(e=>`"${e.scoop.folder}" is ${Mk(r,e)}`).join(`; `)}. Pass ${Ck}: true to act on it anyway.`,isError:!0}}function Pk(e){return{type:`boolean`,description:`Set true to ${e} a scoop you do not own — inherited (its cone is gone) or another cone's. Default false; omitting it on such a scoop is an error, so the choice stays deliberate.`}}const Fk=[`command`,`read`,`write`,`secret`];function Ik(e){return`${be(e,{maxLen:50})}-scoop`}function Lk(e){return e===void 0?{ok:!0}:pr(e)?{ok:!0,level:e}:{ok:!1,content:`Invalid thinking level "${e}". Must be one of: ${mr.join(`, `)}.`,isError:!0}}function Rk(e){return e===void 0?{ok:!0}:typeof e!=`number`||!Number.isFinite(e)||e<0?{ok:!1,content:`Invalid background_after "${String(e)}". Must be a number of seconds >= 0.`}:{ok:!0,seconds:e}}function zk(e,t){if(e===void 0||!t)return{ok:!0,modelId:e};let n=t(e);return n.ok?{ok:!0,modelId:n.selection.modelId,providerId:n.selection.providerId}:{ok:!1,content:`Unknown model "${e}": ${n.error}. Run the "models" shell command to list available model IDs.`,isError:!0}}function Bk(e,t){let n=Dk(t).map(e=>e.scoop.folder).join(`, `)||`(none)`;return{content:`Not found in the scoops you can manage (${t.scoop.folder}): ${e.join(`, `)}. Available: ${n}`,isError:!0}}function Vk(e,t,n=``){let r=t?.(e.jid),i=r?.status??`unknown`,a=r?.lastActivity?new Date(r.lastActivity).toLocaleString(`en-US`,{month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`,hour12:!0}):``,o=a?` — ${i} (since ${a})`:` — ${i}`;return e.parentJid===null?`- ${e.assistantLabel} (${e.folder}) [CONE]${o}`:`- ${e.name} (${e.folder})${n}${o}`}async function Hk(e,t){let{text:n,sender:r}=e;return t.onSendMessage(n,r),Sk.info(`Message sent`,{scoopFolder:t.scoop.folder,textLength:n.length}),{content:`Message sent.`}}function Uk(e){let{kind:t,detail:n,suggested_pattern:r,reason:i}=e;if(!Fk.includes(t))return{ok:!1,result:{content:`Invalid sudo kind "${t}". Must be one of: ${Fk.join(`, `)}.`,isError:!0}};if(typeof n!=`string`||n.trim().length===0)return{ok:!1,result:{content:`detail must be a non-empty string.`,isError:!0}};let a=typeof i==`string`?h(i):``;return{ok:!0,request:{kind:t,detail:n,...r?{suggestedPattern:r}:{},...a?{reason:a}:{}}}}function Wk(e){let t=[`Cone decision: ${e.decision}.`];return e.decision===`always`&&e.pattern&&t.push(`Persisted pattern: ${e.pattern}`),e.note&&t.push(`Approver's reason: ${e.note}`),e.decision===`deny`&&t.push(e.note?`Not approved. Address the reason above before asking again; do not retry as-is and do not route around it.`:`Not approved, and no reason was given. Do not retry as-is; ask the cone what would make it acceptable, or move on.`),t.join(`
1174
- `)}async function Gk(e,t){let n=Uk(e);if(!n.ok)return n.result;try{let e=await t.onSudoRequest(n.request);return Sk.info(`Sudo request resolved`,{scoopFolder:t.scoop.folder,kind:n.request.kind,decision:e.decision}),{content:Wk(e)}}catch(e){return{content:`sudo_request failed: ${e instanceof Error?e.message:String(e)}`,isError:!0}}}async function Kk(e,t){let{scoop_name:n,prompt:r,cross_cone:i}=e;if(Ok(n)(t.scoop))return{content:`Cannot feed yourself.`,isError:!0};let a=kk(n,t);if(!a)return Bk([n],t);let o=Nk([a],i,`feed "${n}"`,t);if(o)return o;try{await t.onFeedScoop(a.scoop.jid,r),Sk.info(`Fed scoop`,{target:a.scoop.folder,relation:a.relation,promptLength:r.length});let e=a.relation===`own`?`You will be notified when it completes.`:`Its completion notice goes to its owner; use scoop_wait (${Ck}: true) for the result.`;return{content:`Task sent to ${a.scoop.folder}. ${e}`}}catch(e){return{content:`Failed to feed scoop: ${e instanceof Error?e.message:String(e)}`,isError:!0}}}function qk(e,t){return t.relation===`own`?``:t.relation===`inherited`?` [INHERITED]`:` [FOREIGN: ${jk(e,t)}]`}async function Jk(e){let t=new Map(Dk(e).map(e=>[e.scoop.jid,e])),n=e.getScoops().filter(n=>n.jid===e.scoop.jid||t.has(n.jid));return n.length===0?{content:`No scoops registered.`}:{content:`Registered scoops:\n${n.map(n=>{let r=t.get(n.jid);return Vk(n,e.getScoopTabState,r?qk(e,r):``)}).join(`
1175
- `)}`}}function Yk({name:e,folder:t,model:n,modelProviderId:r,visiblePaths:i,writablePaths:a,workspaceMode:o,allowedCommands:s,thinkingLevel:c,backgroundAfterSeconds:l,parentJid:u,defaultVisibleRoots:d,canCreateChildren:f}){return{name:e,folder:t,trigger:`@${t}`,requiresTrigger:!0,assistantLabel:t,addedAt:new Date().toISOString(),config:{...n?{modelId:n}:{},...n&&r?{modelProviderId:r}:{},...Xk(o,t,d,i,a),workspaceMode:o,...s?{allowedCommands:s}:{},...c?{thinkingLevel:c}:{},...l===void 0?{}:{backgroundAfterSeconds:l},...f===!0?{canCreateChildren:!0}:{}},configSchemaVersion:3,parentJid:u}}function Xk(e,t,n,r,i){let a=`/scoops/${t}/`;return{visiblePaths:r??(e===`private`?[]:n),writablePaths:i??(e===`private`?[a]:[a,`/shared/`])}}async function Zk(e,t,n,r,i){try{await i(e.jid,t)}catch(e){let t=e instanceof Error?e.message:String(e);return Sk.error(`Auto-feed failed`,{name:n,error:t}),{content:`Scoop "${n}" created as "${r}" but the initial task could not be sent: ${t}. Use feed_scoop to retry.`,isError:!0}}return{content:`Scoop "${n}" created as "${r}" and task sent. It is now working on it.`}}async function Qk(e,t){let{name:n,model:r,prompt:i,visiblePaths:a,writablePaths:o,workspaceMode:s,allowedCommands:c,thinking:l,background_after:u,canCreateChildren:d}=e,f=jn(s);if(!f.ok)return{content:f.error,isError:!0};let p=Lk(l);if(!p.ok)return{content:p.content,isError:p.isError};let m=Rk(u);if(!m.ok)return{content:m.content,isError:!0};let h=zk(r,t.resolveModelSelection);if(!h.ok)return{content:h.content,isError:h.isError};let ee=Ik(n),g=wk(t).find(e=>e.jid!==t.scoop.jid&&e.parentJid!==null&&(e.name===n||e.folder===ee));if(g)return{content:`A scoop named "${g.name}" (${g.folder}) already exists in your scoops. Use feed_scoop to give it another task, or drop_scoop first.`,isError:!0};let te=Un(ee,t.getScoops().map(e=>e.folder));try{let e=Yk({name:n,folder:te,model:h.modelId,modelProviderId:h.providerId,visiblePaths:a,writablePaths:o,workspaceMode:f.mode,allowedCommands:c,thinkingLevel:p.level,backgroundAfterSeconds:m.seconds,parentJid:t.scoop.jid,defaultVisibleRoots:lr(fr(t.scoop)),canCreateChildren:d===!0}),r=await t.onScoopScoop(e);return Sk.info(`Scoop created`,{name:n,folder:te}),i&&t.onFeedScoop?Zk(r,i,n,te,t.onFeedScoop):{content:`Scoop "${n}" created as "${te}". Use feed_scoop to give it a task.`}}catch(e){return{content:`Failed to create scoop: ${e instanceof Error?e.message:String(e)}`,isError:!0}}}async function $k(e,t){let{scoop_name:n,cross_cone:r}=e;if(Ok(n)(t.scoop))return{content:`Cannot drop yourself.`,isError:!0};let i=kk(n,t);if(!i)return Bk([n],t);let a=Nk([i],r,`drop "${n}"`,t);if(a)return a;try{return await t.onDropScoop(i.scoop.jid),Sk.info(`Scoop dropped`,{name:i.scoop.name,folder:i.scoop.folder,relation:i.relation}),{content:`Scoop "${i.scoop.name}" (${i.scoop.folder}) has been dropped.`}}catch(e){return{content:`Failed to drop scoop: ${e instanceof Error?e.message:String(e)}`,isError:!0}}}function eA(){return{content:`scoop_names must be a non-empty array.`,isError:!0}}async function tA(e,t){let{scoop_names:n,cross_cone:r}=e;if(!Array.isArray(n)||n.length===0)return eA();let{resolved:i,unknown:a}=Ak(n,t);return i.length===0?Bk(a,t):Nk(i,r,`mute these scoops`,t)||(t.onMuteScoops(i.map(e=>e.scoop.jid)),Sk.info(`Scoops muted`,{names:i.map(e=>e.scoop.folder)}),{content:`Muted: ${i.map(e=>e.scoop.folder).join(`, `)}${a.length>0?` (unknown: ${a.join(`, `)})`:``}`})}function nA(e,t){if(e.length===0)return[`No stashed completions.`];let n=[``,`Stashed completions:`];for(let r of e){let e=t.get(r.jid)??r.jid;n.push(`--- ${e} ---`),r.notificationPath&&n.push(`VFS path: ${r.notificationPath}`),n.push(r.summary)}return n}async function rA(e,t){let{scoop_names:n,cross_cone:r}=e;if(!Array.isArray(n)||n.length===0)return eA();let{resolved:i,unknown:a}=Ak(n,t);if(i.length===0)return Bk(a,t);let o=Nk(i,r,`unmute these scoops`,t);if(o)return o;let s=i.map(e=>e.scoop.jid),c=new Map(i.map(e=>[e.scoop.jid,e.scoop.folder])),l=await t.onUnmuteScoops(s);Sk.info(`Scoops unmuted`,{names:i.map(e=>e.scoop.folder),stashedCount:l.length});let u=[`Unmuted: ${i.map(e=>e.scoop.folder).join(`, `)}${a.length>0?` (unknown: ${a.join(`, `)})`:``}`];return u.push(...nA(l,c)),{content:u.join(`
1176
- `)}}function iA(e,t){return!Array.isArray(e)||e.length===0?eA():t!==void 0&&(typeof t!=`number`||!Number.isFinite(t)||t<0)?{content:`timeout_ms must be a non-negative finite number (or omitted).`,isError:!0}:null}function aA(e,t,n,r){return`scoop_wait scheduled for: ${e}${r===void 0?` (no timeout)`:` (timeout: ${r}ms)`}.${t.length>0?` Unknown (skipped): ${t.join(`, `)}.`:``}${n?` Dropped before schedule (skipped): ${n}.`:``} Continue with other work — a 'scoop-wait' lick will be delivered when all listed scoops complete or the timeout fires.`}async function oA(e,t){let{scoop_names:n,timeout_ms:r,cross_cone:i}=e,a=iA(n,r);if(a)return a;let{resolved:o,unknown:s}=Ak(n,t);if(o.length===0)return Bk(s,t);let c=Nk(o,i,`wait on these scoops`,t);if(c)return c;let l=o.map(e=>e.scoop.jid),u=t.onScheduleScoopWait(l,r),d=new Map(o.map(e=>[e.scoop.jid,e.scoop.folder])),f=u.scheduled.map(e=>d.get(e)??e).join(`, `),p=u.unknown.map(e=>d.get(e)??e).join(`, `);return Sk.info(`Wait scheduled`,{scheduled:u.scheduled.map(e=>d.get(e)??e),droppedAtSchedule:p?p.split(`, `):[],unknownNames:s,timeout_ms:r}),u.scheduled.length===0?{content:`scoop_wait could not be scheduled — every listed scoop was unregistered before the wait could start (dropped: ${p||u.unknown.join(`, `)}).${s.length>0?` Unknown names: ${s.join(`, `)}.`:``}`,isError:!0}:{content:aA(f,s,p,r)}}function sA(e,t){return t?e.persisted?`Approved (always) — persisted NOPASSWD rule for ${e.kind??`unknown`} pattern "${e.persistedPattern}" in /etc/sudoers.d/scoop-${e.scoopFolder??`<unknown>`}.`:e.persistError?`Approved (always) but could NOT persist a rule (${e.persistError}). The current action is allowed; future occurrences will prompt again.`:`Approved (always) — no persistable rule applied for this request.`:`Approved (once) — the current action proceeds; future ones will prompt again.`}async function cA(e,t){let{lick_id:n,always:r,pattern:i,reason:a}=e;if(typeof n!=`string`||n.length===0)return{content:`lick_id must be a non-empty string.`,isError:!0};let o=typeof a==`string`?h(a):``,s={...r?{decision:`always`,...i?{pattern:i}:{}}:{decision:`allow`},...o?{note:o}:{}};try{let e=await t.onSudoResolve(n,s);return e.settled?(Sk.info(`Lick confirmed`,{id:n,always:!!r,persisted:e.persisted}),e.message?{content:e.message}:{content:sA(e,!!r)}):{content:`Lick "${n}" is unknown, already resolved, or timed out.`,isError:!0}}catch(e){return{content:`lick_confirm failed: ${e instanceof Error?e.message:String(e)}`,isError:!0}}}async function lA(e,t){let{lick_id:n,reason:r}=e;if(typeof n!=`string`||n.length===0)return{content:`lick_id must be a non-empty string.`,isError:!0};let i=typeof r==`string`?h(r):``;try{let e=await t.onSudoResolve(n,{decision:`deny`,...i?{note:i}:{}});return e.settled?(Sk.info(`Lick dismissed`,{id:n,hasReason:!!i}),e.message?{content:e.message}:{content:i?`Denied, and the scoop was told why: "${i}"`:"Denied with NO reason, so the scoop cannot tell refusal from misunderstanding. Pass `reason` next time."}):{content:`Lick "${n}" is unknown, already resolved, or timed out.`,isError:!0}}catch(e){return{content:`lick_dismiss failed: ${e instanceof Error?e.message:String(e)}`,isError:!0}}}async function uA(e){let t=e.onListSudoRequests();return t.length===0?{content:`No pending sudo requests.`}:{content:`Pending sudo requests:\n${t.map(t=>{let n=e.getScoops().find(e=>e.jid===t.scoopJid)?.folder??t.scoopJid,r=t.request.suggestedPattern?` (suggested: ${t.request.suggestedPattern})`:``,i=t.request.reason?`\n reason: ${t.request.reason}`:``;return`- ${t.id} — ${n} — ${t.request.kind}: ${t.request.detail}${r}${i}`}).join(`
1177
- `)}`}}async function dA(e,t){let{content:n}=e;try{return await t.onSetGlobalMemory(n),Sk.info(`Global memory updated`),{content:`Global memory updated successfully.`}}catch(e){return{content:`Failed to update global memory: ${e instanceof Error?e.message:String(e)}`,isError:!0}}}function fA(e){return{name:`send_message`,description:`Send a progress message while still working. Your final output is also sent.`,inputSchema:{type:`object`,properties:{text:{type:`string`,description:`The message text to send`},sender:{type:`string`,description:`Optional sender name/role (e.g., "Researcher"). Defaults to assistant name.`}},required:[`text`]},execute:t=>Hk(t,e)}}function pA(e){return{name:`sudo_request`,description:`Ask the cone for an explicit sudo escalation before running a sensitive action. Use this when you know up-front that a command, read, or write will be gated and you want a clean approval round-trip instead of letting the gate fire mid-action. Resolves with the cone's decision (allow / always / deny). If your sudoers already grants the subject with NOPASSWD, this resolves allow immediately without prompting the cone. 'always' durably widens your sandbox by appending a NOPASSWD rule to the cone-owned /etc/sudoers.d/scoop-<folder> drop-in (you cannot write it yourself). 'deny' (or a timeout / dropped cone) resolves fail-closed. Always pass 'reason': the approver sees only what you ask for, never why.`,inputSchema:{type:`object`,properties:{kind:{type:`string`,enum:[...Fk],description:`The kind of sensitive action being requested. command = a shell command; read/write = a VFS path; secret = a credential read. Only command/read/write can be persisted with "always" (no sudoers Secret directive).`},detail:{type:`string`,description:`The concrete subject of the request (e.g., the command line "git push origin main" or the VFS path "/workspace/.git/config"). The cone sees this verbatim.`},suggested_pattern:{type:`string`,description:`Optional pre-filled glob pattern for an "always" grant (e.g., "git push*" for a command or "/workspace/.git/**" for a path). The cone may override this.`},reason:{type:`string`,description:`Why you need this, in one sentence. Name the goal it unblocks, not the action restated: "the build writes its output there", not "I need to write there". Truncated at 300 characters.`}},required:[`kind`,`detail`]},execute:t=>Gk(t,e)}}function mA(e){return{name:`feed_scoop`,description:`Give a scoop a task. Provide a complete, self-contained prompt — the scoop has no access to your conversation. You'll be notified when it finishes.`,inputSchema:{type:`object`,properties:{scoop_name:{type:`string`,description:`The scoop folder name (e.g., "test-scoop") — any name list_scoops shows you.`},prompt:{type:`string`,description:`Complete, self-contained instructions for the scoop. Include ALL context — the scoop cannot see your conversation.`},[Ck]:Pk(`feed`)},required:[`scoop_name`,`prompt`]},execute:t=>Kk(t,e)}}function hA(e){return{name:`list_scoops`,description:`List the scoops you can manage: your own subtree, plus — leading cone only — ones tagged [INHERITED] (owning cone gone) or [FOREIGN: <cone>] (another cone owns it). These names are the only ones feed_scoop / drop_scoop / scoop_mute / scoop_unmute / scoop_wait resolve; a tagged one also needs cross_cone: true.`,inputSchema:{type:`object`,properties:{}},execute:()=>Jk(e)}}function gA(e){return{name:`scoop_scoop`,description:`Create a new scoop. Optionally specify a model, a prompt, a workspace isolation mode (private | shared-readonly), and per-scoop sandbox shape (visible/writable paths + command allow-list). If prompt is provided, the scoop starts working immediately after creation (no separate feed_scoop needed).`,inputSchema:{type:`object`,properties:{name:{type:`string`,description:`Display name for the scoop (e.g., "hero-block")`},model:{type:`string`,description:`Model ID for this scoop (e.g., "claude-sonnet-4-6"). If omitted, uses the same model as the cone.`},prompt:{type:`string`,description:`Task prompt for the scoop. If provided, the scoop starts working immediately after creation.`},visiblePaths:{type:`array`,items:{type:`string`},description:`VFS paths the scoop can READ (not write). Pure replace — what you set is what you get. Omit to use the default for workspaceMode: shared-readonly (the default) is YOUR OWN workspace plus the shared skills tree — ["/workspace/"] for the primary cone, ["/cones/<folder>/workspace/", "/workspace/skills/"] for any other; private is []. Prefer omitting it over naming "/workspace/" explicitly, which would point the scoop at a different cone's files. Pass [] for no extra read-only paths. Note: the scoop's writablePaths are always readable too, so a true read-nothing sandbox also requires writablePaths: []. Mounts remain readable in shared-readonly; private does not auto-include them. Trailing slash recommended (e.g. "/shared/data/").`},writablePaths:{type:`array`,items:{type:`string`},description:`VFS paths the scoop can READ AND WRITE. Pure replace. Omit to use the default ["/scoops/<folder>/", "/shared/"] which gives the scoop its own sandbox plus shared space. Pass [] to block all writes — note that /tmp stays readable and writable regardless, as shared scratch space every scoop gets (so nothing secret belongs there). Trailing slash recommended.`},workspaceMode:{type:`string`,enum:[`private`,`shared-readonly`,`snapshot`,`shared-live`],description:`Workspace isolation mode. Default "shared-readonly" is today's scoop: parent workspace + skills are visible, own sandbox + /shared/ are writable, mounts stay readable. "private" is an isolated sandbox (own /scoops/<folder>/ only — no parent workspace, no implicit /shared/, mounts are NOT auto-visible). "snapshot" and "shared-live" are not implemented and are rejected. Explicit visiblePaths / writablePaths still replace the mode's path defaults.`},allowedCommands:{type:`array`,items:{type:`string`},description:`Shell command allow-list. Omit for unrestricted access to every built-in, custom, and .jsh command (the default). Pass a list of command names to restrict the scoop's shell — e.g. ["echo","cat","grep"] for a read-only text-processing scoop. Pass ["*"] for explicit unrestricted. Applies to pipelines, substitutions, and network commands too.`},thinking:{type:`string`,enum:[...mr],description:`Reasoning / thinking-level for this scoop (pi-ai effort). One of: off, minimal, low, medium, high, xhigh. Omit to inherit the global default ("off"). Non-reasoning models always clamp to "off"; "xhigh" clamps to "high" on models that do not support the max tier.`},background_after:{type:`number`,description:`Seconds this scoop's bash tool waits for a command before detaching it to the background and continuing (default 600). Lower it for a scoop that must never stall on a slow command — nobody can cancel a scoop's turn, and its detached commands report back via a Background Command lick. Use 0 to detach every command immediately.`},canCreateChildren:{type:`boolean`,description:`Explicit nested-delegation grant. When true, the new scoop may create and manage its own children (grandchildren of you). Omit or false (the default) keeps it a leaf. The grant is refused when you do not hold canCreateChildren yourself.`}},required:[`name`]},execute:t=>Qk(t,e)}}function _A(e){return{name:`drop_scoop`,description:`Remove a scoop and stop its work. The scoop will be unregistered and its context destroyed.`,inputSchema:{type:`object`,properties:{scoop_name:{type:`string`,description:`The scoop folder name (e.g., "test-scoop") — any name list_scoops shows you.`},[Ck]:Pk(`drop`)},required:[`scoop_name`]},execute:t=>$k(t,e)}}function vA(e){return{name:`scoop_mute`,description:`Suspend scoop→cone notifications for the given scoops. While muted, a scoop's completion is stashed and will be delivered to the cone when you call scoop_unmute (or scoop_wait which consumes it). Use this when coordinating parallel work so each scoop's completion does not trigger its own cone turn.`,inputSchema:{type:`object`,properties:{scoop_names:{type:`array`,items:{type:`string`},description:`Folder or display names of scoops to mute (e.g., ["writer-scoop", "reviewer-scoop"]).`},[Ck]:Pk(`mute`)},required:[`scoop_names`]},execute:t=>tA(t,e)}}function yA(e){return{name:`scoop_unmute`,description:`Resume scoop→cone notifications for the given scoops. Any completion that landed while a scoop was muted is returned in this tool result (NOT dispatched as a new cone turn), so you can read all stashed summaries in the current turn. Scoops with no stashed completion are simply unmuted.`,inputSchema:{type:`object`,properties:{scoop_names:{type:`array`,items:{type:`string`},description:`Folder or display names of scoops to unmute (e.g., ["writer-scoop"]).`},[Ck]:Pk(`unmute`)},required:[`scoop_names`]},execute:t=>rA(t,e)}}function bA(e){return{name:`scoop_wait`,description:"Schedule a non-blocking wait for the given scoops. Returns immediately — the cone keeps its turn — and a `scoop-wait` lick is delivered when every listed scoop completes or the optional timeout fires. Use this to coordinate parallel work without freezing the cone: feed several scoops, call scoop_wait, then continue with other work; you'll be woken by the lick with all per-scoop summaries in one shot. Already-completed scoops (including those whose completion arrived while you were processing your previous turn) are folded into the same lick.",inputSchema:{type:`object`,properties:{scoop_names:{type:`array`,items:{type:`string`},description:`Folder or display names of scoops list_scoops shows you (e.g., ["writer-scoop", "reviewer-scoop"]).`},timeout_ms:{type:`number`,description:"Optional timeout in milliseconds. If any listed scoop has not completed by the deadline, it is reported as timed-out in the eventual `scoop-wait` lick. Omit for no timeout."},[Ck]:Pk(`wait on`)},required:[`scoop_names`]},execute:t=>oA(t,e)}}function xA(e){return{name:`lick_confirm`,description:`Confirm (approve) a pending actionable lick by its lick_id — currently a scoop sudo escalation raised via sudo_request. With always=true, the orchestrator additionally appends a NOPASSWD <directive> <pattern> rule to the requesting scoop's /etc/sudoers.d/scoop-<folder> drop-in so the same action won't prompt again. always=false (the default) is allow-once.`,inputSchema:{type:`object`,properties:{lick_id:{type:`string`,description:`The id of the pending actionable lick (as delivered in the [sudo-request] notification, e.g. "lick-…"). Use list_sudo_requests to see outstanding ids.`},always:{type:`boolean`,description:`If true, persist a NOPASSWD rule into the requesting scoop's per-scoop sudoers so the action won't prompt again. Defaults to false (allow-once).`},pattern:{type:`string`,description:`Optional glob pattern to persist when always=true (e.g., "git push*" or "/workspace/.git/**"). Defaults to the request's suggestedPattern, then to the exact detail. Ignored when always=false.`},reason:{type:`string`,description:`Optional note for the requester — a caveat on the approval. Only reaches a scoop that asked via sudo_request; an implicit filesystem gate has no channel to report it on success. Truncated at 300 characters.`}},required:[`lick_id`]},execute:t=>cA(t,e)}}function SA(e){return{name:`lick_dismiss`,description:`Dismiss a pending actionable lick by its lick_id. For scoop sudo escalation this denies the sensitive action — pass a reason, or the scoop just retries. For llms.txt discovery this silently appends the advertising host to /etc/llmstxtignore.`,inputSchema:{type:`object`,properties:{lick_id:{type:`string`,description:`The id of the pending actionable lick (as delivered in a sudo-request or llms.txt discovery notification).`},reason:{type:`string`,description:`Why you are refusing, in one sentence; the scoop sees it verbatim. Always give one for a sudo denial — without it the scoop cannot tell refusal from misunderstanding, and retries or works around it. Truncated at 300 characters.`}},required:[`lick_id`]},execute:t=>lA(t,e)}}function CA(e){return{name:`list_sudo_requests`,description:`List all pending cone-mediated sudo requests (lick id, requesting scoop, kind, detail). Use to find a lick_id for lick_confirm / lick_dismiss.`,inputSchema:{type:`object`,properties:{}},execute:()=>uA(e)}}function wA(e){return{name:`update_global_memory`,description:`Update the global CLAUDE.md memory file that is shared across all scoops. Use this instead of write_file for /shared/CLAUDE.md.`,inputSchema:{type:`object`,properties:{content:{type:`string`,description:`The new content for the global memory file`}},required:[`content`]},execute:t=>dA(t,e)}}function TA(e){let t=[],n=In(e.scoop);return Nn(e.scoop)||(t.push(fA(e)),e.onSudoRequest&&t.push(pA(e))),n.canCreateChildren&&e.onScoopScoop&&t.push(gA(e)),n.canManageChildren&&(e.onFeedScoop&&t.push(mA(e)),t.push(hA(e)),e.onDropScoop&&t.push(_A(e)),e.onMuteScoops&&t.push(vA(e)),e.onUnmuteScoops&&t.push(yA(e)),e.onScheduleScoopWait&&t.push(bA(e)),e.onSudoResolve&&(t.push(xA(e)),t.push(SA(e))),e.onListSudoRequests&&t.push(CA(e)),e.onSetGlobalMemory&&e.getGlobalMemory&&t.push(wA(e))),t}const EA=_(`scoop-context`);function DA(e){return{currentGate(){let t=e.getTurnGuestGates();if(t.length!==0)return{async approve(n,r){let{approveToolCallForGuests:i}=await import(`./guest-tool-gate-BzUxTS0o.js`);return i(t,n,r,e.callbacks.approveGuestToolCall)}}}}}async function OA(e){let{scoop:t,unit:n,callbacks:r}=e,i=TA({scoop:t,onSendMessage:r.onSendMessage,getScoops:r.getScoops,getScoopTabState:r.getScoopTabState,onFeedScoop:r.onFeedScoop,onScoopScoop:r.onScoopScoop,resolveModelSelection:de,onDropScoop:r.onDropScoop,onMuteScoops:r.onMuteScoops,onUnmuteScoops:r.onUnmuteScoops,onScheduleScoopWait:r.onScheduleScoopWait,onSetGlobalMemory:r.setGlobalMemory,getGlobalMemory:r.getGlobalMemory,onSudoRequest:r.onSudoRequest,onSudoResolve:r.onSudoResolve,onListSudoRequests:r.onListSudoRequests}),a=sk(e.gatedFs,n.workspace.root),o=e.blindReads??null,s=dk(e.memoryFs,{readSessionCount:async()=>{let{readSessionCount:t}=await Promise.resolve().then(()=>iw);return t(e.fs)},...o?{blindPaths:()=>o.outsidePaths()}:{}}),c=[...a,s,KO(e.shell,e.fs,n.workspace.scratch,{defaultBackgroundAfterSeconds:t.config?.backgroundAfterSeconds,targetScoop:e.lickTarget,jobHost:{spawn:t=>e.spawnBashJob(t)},scrubOutput:pn(),...o?{annotateResult:()=>o.takeNote()}:{},fireLick:e=>{let n=globalThis.__slicc_lick_handler;return n?(n(e),!0):(EA.warn(`No lick handler for background bash completion`,{folder:t.folder}),!1)}}),...i,bk({requester:t.assistantLabel||t.name,setEnv:(t,n)=>e.shell.setMaskedEnvVar(t,n),getProvider:()=>_O(ED(t).provider)})];if(t.config?.structuredOutputSchema){let{createStructuredOutputTool:n}=await import(`./structured-output-tool-BDaIhclx.js`);c.push(n(t.config.structuredOutputSchema,e.onStructuredOutput))}let l={scrubToolResult:pn()},u=DA(e);return e.processManager?mn(c,{processManager:e.processManager,owner:e.processOwner,getParentPid:e.getTurnPid},l,u):mn(c,void 0,l,u)}const kA=_(`scoop-context`);async function AA(e){let{scoop:t,unit:n,fs:r,callbacks:i}=e,a=e.getTmpDir();kA.info(`Filesystem ready`,{folder:t.folder}),await GD(r,t,n,a);let{shell:o,gatedFs:s,memoryFs:c,blindReads:l,skills:u}=await hO({scoop:t,unit:n,fs:r,tmpDir:a,skillsFs:e.skillsFs,getBrowserAPI:i.getBrowserAPI,sudoManager:e.sudoManager,capabilityBroker:e.capabilityBroker,onSudoRequest:i.onSudoRequest,processManager:e.processManager,processOwner:e.processOwner,getTurnPid:e.getTurnPid,lickTarget:e.getLickTarget()});e.onShellReady(o);let d=await OA({getTurnGuestGates:e.getTurnGuestGates,scoop:t,unit:n,callbacks:i,shell:o,fs:r,gatedFs:s,memoryFs:c,blindReads:l,processManager:e.processManager,processOwner:e.processOwner,getTurnPid:e.getTurnPid,lickTarget:e.getLickTarget(),onStructuredOutput:e.onStructuredOutput,spawnBashJob:e.spawnBashJob}),{scoopMemory:f,globalMemory:p}=await CD(r,n,()=>i.getGlobalMemory());if(!TD(t))return kA.info(`ScoopContext init deferred — no API key yet`,{folder:t.folder}),{kind:`deferred`};let m=DD(t,n),h=AD(t,n,p,f,u),ee=await e.sessions.restore(),{streamWithSessionId:g,compactFn:te,getCompactionApiKey:ne}=await qD(m,{scoop:t,unit:n,coneJid:e.coneJid,getModelApiKey:()=>TD(t),getEffortOverride:e.getEffortOverride,appendConeMemory:i.appendConeMemory,onCompactionStateChange:(e,t)=>i.onCompactionStateChange?.(e,t),onBeforeCompaction:e.onBeforeCompaction});if(e.isDisposed())return{kind:`abandoned`};let re=Wn(t);return{kind:`ready`,agent:UD({model:m,tools:d,systemPrompt:h,messages:ee,thinkingLevel:MD(ND()??re.level,m),getApiKey:()=>TD(t)??void 0,transformContext:te,streamFn:g,onContextCompacted:()=>e.sessions.persistNow(),captureStructuredOutput:t.config?.structuredOutputSchema?e.onStructuredOutput:void 0}),compactFn:te,getCompactionApiKey:ne,effortOverride:re.effortOverride,toolCount:d.length}}const jA=_(`scoop-context`);var MA=class{deps;timer=null;createdAt=0;constructor(e){this.deps=e}get sessionId(){return this.deps.sessionId}async restore(){let e=this.deps.canonical;if(!e)return[];let t=null;try{t=await e.store.load(e.identity.key)}catch(e){return jA.error(`Failed to restore the conversation`,{folder:this.deps.folder,error:e instanceof Error?e.message:String(e)}),this.deps.onRestoreError(`Conversation history could not be restored. Starting fresh.`),[]}let n=IC(t);if(t&&(this.createdAt=t.createdAt),n.length===0)return[];let r=hn(n);return jA.info(`Restored conversation from the canonical work-unit record`,{folder:this.deps.folder,messageCount:r.length,droppedOrphans:n.length-r.length}),r}persistNow(e){this.flush(e)}flush(e){this.timer!==null&&(clearTimeout(this.timer),this.timer=null);let t=this.deps.getMessages()??e??[];if(t.length===0)return Promise.resolve();let n=this.deps.canonical;return n?(this.createdAt||=Date.now(),n.store.syncAgentMessages(n.identity,t,{createdAt:this.createdAt}).then(()=>void 0,e=>{jA.error(`Failed to save the canonical conversation record`,{folder:this.deps.folder,error:e instanceof Error?e.message:String(e)})})):Promise.resolve()}async clear(){this.timer!==null&&(clearTimeout(this.timer),this.timer=null),this.createdAt=0;let e=this.deps.canonical;e&&await e.store.delete(e.identity.key);try{await this.deps.store?.delete(this.deps.sessionId)}catch(e){jA.warn(`Failed to clear the legacy agent session`,{folder:this.deps.folder,error:e instanceof Error?e.message:String(e)})}}schedule(){this.deps.isDisposed()||this.deps.canonical&&this.timer===null&&(this.timer=setTimeout(()=>{this.timer=null,this.deps.isDisposed()||this.persistNow()},1e3))}};function NA(e,t){if(!e)return null;let{text:n}=t,r=n.length>200?`${n.slice(0,197)}…`:n;return e.spawn({kind:`scoop-turn`,argv:[`prompt`,r],cwd:t.cwd,owner:t.owner,adoptAbort:t.abortController})}function PA(e,t,n){!t||!e||(n.lastError&&!n.aborted?e.exit(t.pid,1):e.exit(t.pid,n.aborted?null:0))}function FA(e,t,n,r){t&&e?e.signal(t.pid,n):r?.abort()}const IA=_(`scoop-context`);var LA=class{deps;constructor(e){this.deps=e}async run(e,t){let n=null;for(let r=1;r<=3;r++){if(this.deps.isDisposed()||t.aborted)return null;let i=await this.tryAttempt(e,t);if(!i||this.deps.isDisposed()||t.aborted||(n=i,await this.handleAttemptError(i,r,t)))return null}return n}reportExhausted(e){let t=e.message;IA.error(`Agent error after retries exhausted`,{folder:this.deps.folder,error:t,maxRetries:3}),this.fail(`Scoop "${this.deps.scoopName}" failed after 3 attempts: ${t}`,t)}async tryAttempt(e,t){this.deps.beginAttempt();try{if(await e(),this.deps.isDisposed()||t.aborted)return null;let n=this.deps.overflow.pendingRecovery;if(n!==null&&(await n,this.deps.overflow.clearPendingRecovery(n),this.deps.isDisposed()||t.aborted))return null;let r=this.deps.getStreamError();return r?Error(r):null}catch(e){return e instanceof Error?e:Error(String(e))}}async handleAttemptError(e,t,n){let r=e.message;return this.handleStaleAssetError(r)||this.handleNonRetryableError(r)?!0:!await this.handleRetryableError(r,t,n)&&(IA.error(`Agent error`,{folder:this.deps.folder,error:r,attempt:t,isRetryable:uD(r)}),!!(t<3&&(await dD(RA(t),n)||this.deps.isDisposed())))}handleNonRetryableError(e){return lD(e)?(IA.error(`Non-retryable agent error`,{folder:this.deps.folder,error:e}),this.fail(`Scoop "${this.deps.scoopName}" failed with unrecoverable error: ${e}`,e),!0):!1}handleStaleAssetError(e){return Ba(e)?(IA.error(`Stale-asset import failure; requesting page reload`,{folder:this.deps.folder,error:e}),Ua(this.deps.isInteractive),this.fail(`Scoop "${this.deps.scoopName}" hit a stale build after a deploy; reloading to recover.`,e),!0):!1}async handleRetryableError(e,t,n){if(!uD(e)||t>=3)return!1;let r=RA(t);return IA.warn(`Retryable agent error, will retry`,{folder:this.deps.folder,error:e,attempt:t,maxRetries:3,delayMs:r}),!await dD(r,n)&&!this.deps.isDisposed()}fail(e,t){eD(`llm`,t),this.deps.setStatus(`error`),this.deps.onFatalError?this.deps.onFatalError(e):this.deps.onError(t)}};function RA(e){return 1e3*2**(e-1)}function zA(e,t,n,r){let i=e.state?.isStreaming??!1;if(r.isProcessing||i){IA.info(`Queueing prompt via ${r.steer?`steer`:`followUp`} while processing`,{folder:r.folder,isProcessing:r.isProcessing,agentIsStreaming:i});let a={role:`user`,content:[{type:`text`,text:t},...n],timestamp:Date.now()};return r.steer?e.steer(a):e.followUp(a),!0}return!1}const BA=_(`scoop-context`);var VA=class{scoop;callbacks;fs=null;shell=null;agent=null;status=`initializing`;isProcessing=!1;disposed=!1;didStreamDeltas=!1;promptStreamErrorMessage=null;unsubscribe=null;promptAbortController=null;forceReleaseTimer=null;turnEpoch=0;processManager=null;currentTurnProcess=null;compactFn=null;getCompactionApiKey=null;coneJid;unit;owner;skillsFs=null;sudoManager=null;capabilityBroker=null;structuredOutputValue;activeEffortOverride;structuredOutputCaptured=!1;sessions;runBounds;bashJobs;imageRecovery;overflow;idleCompaction=null;idleCompactionLoading=null;sessionGeneration=0;turnRunner;turnJournal;eventSink={textDelta:e=>{this.didStreamDeltas=!0,this.callbacks.onResponse(e,!0)},toolStart:(e,t,n)=>(this.callbacks.onToolStart?.(e,t,n),this.makeToolCallDurable(e,t,n)),toolUI:(e,t,n)=>this.callbacks.onToolUI?.(e,t,n),toolUIDone:e=>this.callbacks.onToolUIDone?.(e),toolProgress:(e,t,n)=>this.callbacks.onToolProgress?.(e,t,n),toolResult:(e,t,n,r)=>this.callbacks.onToolEnd?.(e,t,n,r),checkpoint:e=>this.checkpoint(e),assistantMessageEnd:e=>this.handleAssistantMessageEnd(e),turnStart:()=>this.runBounds.enforceOnTurnStart(),turnCompleted:()=>this.runBounds.recordCompletedTurn(),responseDone:()=>this.callbacks.onResponseDone(),agentEnd:(e,t)=>this.handleAgentEndEvent(e,t)};constructor(e,t,n,r,i,a,o,s,c,l,u){this.scoop=e,this.unit=sr(e),this.owner={kind:Vn(e),scoopJid:e.jid},this.callbacks=t,this.fs=n,this.skillsFs=i??null,this.coneJid=a,this.processManager=o??null,this.sudoManager=s??null,this.capabilityBroker=l??null,this.turnJournal=u??null,this.sessions=new MA({store:r??null,canonical:c?{store:c,identity:Ar(e)}:null,sessionId:e.jid,folder:e.folder,getMessages:()=>this.agent?.state?.messages,isDisposed:()=>this.disposed,onRestoreError:e=>this.callbacks.onError(e)}),this.runBounds=new BD({getConfig:()=>this.scoop.config,isDisposed:()=>this.disposed,onTripped:()=>{this.setStatus(`error`),this.stop()}}),this.bashJobs=new vD({processManager:this.processManager,cwd:this.unit.workspace.root,owner:this.owner,getTurnPid:()=>this.currentTurnProcess?.pid,folder:e.folder}),this.imageRecovery=new bD({getAgent:()=>this.agent,onResponse:(e,t)=>this.callbacks.onResponse(e,t),onError:e=>this.callbacks.onError(e),folder:e.folder}),this.overflow=new zD({getAgent:()=>this.agent,isDisposed:()=>this.disposed,getTurnSignal:()=>this.promptAbortController?.signal,getCompactFn:()=>this.compactFn,getCompactionApiKey:()=>this.getCompactionApiKey?.(),isImageRecoveryActive:()=>this.imageRecovery.isActive,onResponse:(e,t)=>this.callbacks.onResponse(e,t),onExhausted:e=>this.reportExhaustedOverflow(e),setStatus:e=>this.setStatus(e),scoopName:e.name,folder:e.folder}),this.turnRunner=new LA({isDisposed:()=>this.disposed,overflow:this.overflow,beginAttempt:()=>{this.didStreamDeltas=!1,this.promptStreamErrorMessage=null},getStreamError:()=>this.promptStreamErrorMessage,setStatus:e=>this.setStatus(e),onError:e=>this.callbacks.onError(e),onFatalError:t.onFatalError?e=>this.callbacks.onFatalError?.(e):void 0,isInteractive:this.unit.completion.mode===`interactive`,scoopName:e.name,folder:e.folder})}ownLickTarget(){return uO(this.unit,this.scoop,O(this.callbacks.getScoops())[0]?.jid)}ownTmpDir(){return ir(this.callbacks.getScoops(),this.scoop)}getStructuredOutput(){return{captured:this.structuredOutputCaptured,value:this.structuredOutputValue}}get isBusy(){return this.isProcessing||(this.agent?.state?.isStreaming??!1)}async init(){this.setStatus(`initializing`);try{if(!this.fs)throw Error(`Filesystem not provided`);let e=await AA({scoop:this.scoop,unit:this.unit,fs:this.fs,skillsFs:this.skillsFs,callbacks:this.callbacks,sessions:this.sessions,sudoManager:this.sudoManager,capabilityBroker:this.capabilityBroker,processManager:this.processManager,processOwner:this.owner,coneJid:this.coneJid,getTurnPid:()=>this.currentTurnProcess?.pid,getTurnGuestGates:()=>this.turnGuestGates,getLickTarget:()=>this.ownLickTarget(),getTmpDir:()=>this.ownTmpDir(),getEffortOverride:()=>this.activeEffortOverride,isDisposed:()=>this.disposed,onShellReady:e=>{this.shell=e},onStructuredOutput:e=>{this.structuredOutputValue=e,this.structuredOutputCaptured=!0},spawnBashJob:e=>this.bashJobs.spawn(e),onBeforeCompaction:(e,t)=>this.maybeSnapshotBeforeCompaction(e,t)});if(e.kind===`abandoned`)return;if(e.kind===`deferred`){this.setStatus(`ready`);return}this.compactFn=e.compactFn,this.getCompactionApiKey=e.getCompactionApiKey,this.activeEffortOverride=e.effortOverride,this.agent=e.agent,this.unsubscribe=this.agent.subscribe((e,t)=>this.handleAgentEvent(e,t)),this.setStatus(`ready`),BA.info(`ScoopContext initialized`,{folder:this.scoop.folder,toolCount:e.toolCount})}catch(e){if(this.disposed)return;let t=e instanceof Error?e.message:String(e);BA.error(`ScoopContext init failed`,{folder:this.scoop.folder,error:t}),this.setStatus(`error`),this.callbacks.onError(`Failed to initialize: ${t}`)}}async ensureAgentReady(){return this.agent||(await this.init(),this.agent)?!0:(this.callbacks.onError(kD(this.scoop)),!1)}cleanupPromptState(e,t,n,r,i){if(i!==void 0&&i!==this.turnEpoch){this.currentTurnProcess!==t&&PA(this.processManager,t,{lastError:n,aborted:!0});return}this.runBounds.disarm();let a=this.runBounds.takeExceededNote();a!==null&&this.callbacks.onError(`agent run terminated: ${a}`),(n||r.aborted)&&this.sessions.persistNow(),this.disarmForceRelease(),this.isProcessing=!1,this.turnJournal?.end(this.scoop.jid),!this.disposed&&this.status===`processing`&&this.setStatus(`ready`),this.promptAbortController===e&&(this.promptAbortController=null),PA(this.processManager,t,{lastError:n,aborted:r.aborted}),this.currentTurnProcess===t&&(this.currentTurnProcess=null)}turnGuestGates=[];async prompt(e,t=[],n){if(!await this.ensureAgentReady())return;let r=n?.guestGates??[];if(zA(this.agent,e,t,{steer:n?.steer??!1,isProcessing:this.isProcessing,folder:this.scoop.folder})){for(let e of r)this.addTurnGuestGate(e);return}this.turnGuestGates=[...r];let i=this.agent;await this.runTurn(e,0,()=>i.prompt(e,t))}async resumeTurn(e,t=[]){if(!await this.ensureAgentReady()||this.isBusy)return;this.turnGuestGates=[...t];let n=this.agent;await this.runTurn(`(resumed after reload)`,e,()=>{let e=n.state.messages,t=e[e.length-1];return t?.role===`assistant`&&(t.stopReason===`error`||t.stopReason===`aborted`)&&(n.state.messages=e.slice(0,-1)),n.continue()})}settleInterruptedToolCalls(e){let t=this.agent;if(!t||e.length===0)return;let n=Date.now(),r=e.map(e=>({role:`toolResult`,toolCallId:e.toolCallId,toolName:e.toolName,content:[{type:`text`,text:e.text}],isError:!0,timestamp:n}));t.state.messages=[...t.state.messages,...r],this.sessions.persistNow();for(let t of e)this.callbacks.onToolEnd?.(t.toolName,t.text,!0,t.toolCallId)}reportError(e){this.callbacks.onError(e)}hasAgent(){return this.agent!==null}async runTurn(e,t,n){this.promptAbortController?.abort();let r=new AbortController;this.promptAbortController=r;let i=r.signal,a=++this.turnEpoch;this.isProcessing=!0,this.setStatus(`processing`),this.overflow.resetForRun();let o=NA(this.processManager,{text:e,cwd:this.unit.workspace.root,owner:this.owner,abortController:r});this.currentTurnProcess=o,this.runBounds.arm(),this.turnJournal?.begin(this.scoop.jid,this.scoop.folder,t,this.turnGuestGates);let s=null;try{if(s=await this.turnRunner.run(n,i),s&&!this.disposed&&!i.aborted){this.turnRunner.reportExhausted(s);return}a===this.turnEpoch&&!this.disposed&&!i.aborted&&this.status!==`error`&&this.setStatus(`ready`)}finally{this.cleanupPromptState(r,o,s,i,a)}}addTurnGuestGate(e){let t=JSON.stringify(e);this.turnGuestGates.some(e=>JSON.stringify(e)===t)||(this.turnGuestGates.push(e),this.turnJournal?.setGuestGates(this.scoop.jid,this.turnGuestGates))}stop(){FA(this.processManager,this.currentTurnProcess,`SIGINT`,this.promptAbortController),this.agent?.clearAllQueues?.(),this.agent?.abort?.(),this.idleCompaction?.cancel(),this.armForceRelease()}disarmForceRelease(){this.forceReleaseTimer!==null&&(clearTimeout(this.forceReleaseTimer),this.forceReleaseTimer=null)}armForceRelease(){this.disarmForceRelease();let e=this.turnEpoch,t=this.currentTurnProcess;this.forceReleaseTimer=setTimeout(()=>{this.forceReleaseTimer=null,!(this.disposed||this.turnEpoch!==e||!this.isProcessing)&&(t&&this.processManager&&(this.processManager.signal(t.pid,`SIGKILL`),this.processManager.exit(t.pid,null)),this.bashJobs.reapAll(),this.shell?.cancelActiveCommand(),this.agent?.abort?.(),!(this.turnEpoch!==e||!this.isProcessing)&&(this.isProcessing=!1,this.status===`processing`&&this.setStatus(`ready`)))},2e3)}clearMessages(){this.agent&&(this.agent.state.messages=[])}async clearSession(e={}){this.sessionGeneration++,this.idleCompaction?.cancel(),this.clearMessages(),await this.sessions.clear(),await this.settleLiveSnapshot(e.discardLiveSnapshot===!0)}idleCompactionEnabled(){return Dx(this.scoop)?!0:this.unit.parentId===null&&ke(`compact-on-idle`)}armIdleCompaction(){if(!this.idleCompactionEnabled()){this.idleCompaction?.disarm();return}if(this.idleCompaction){this.idleCompaction.arm();return}this.idleCompactionLoading??=this.loadIdleCompaction(),this.idleCompactionLoading.then(e=>{!this.disposed&&this.status===`ready`&&e.arm()})}async loadIdleCompaction(){let[{IdleCompaction:e},{readIdleCompactionSettings:t}]=await Promise.all([import(`./idle-compaction-CwYw083A.js`),import(`./idle-compaction-settings-1yyApSsQ.js`)]),n=new e({isEnabled:()=>this.idleCompactionEnabled(),getSettings:t,getAgent:()=>this.agent,isDisposed:()=>this.disposed,isBusy:()=>this.isBusy,getCompactFn:()=>this.compactFn,getCompactionApiKey:()=>this.getCompactionApiKey?.(),estimateTokens:gn,onCompacted:()=>this.sessions.persistNow(),onDiscarded:e=>this.callbacks.onCompactionStateChange?.(`cancelled`,{trigger:`idle`,roundId:e}),folder:this.scoop.folder});return this.idleCompaction=n,n}async maybeSnapshotBeforeCompaction(e,t){if(!(this.unit.parentId!==null&&!ke(`memory-v2`)))return this.snapshotBeforeCompaction(e,t)}async snapshotBeforeCompaction(e,t){if(!this.fs||this.disposed)return;let n=this.sessionGeneration,{scoopSessionsDir:r,snapshotLiveSession:i}=await import(`./live-session-snapshot-DkrES4VI.js`),a=this.unit.parentId===null,o=await i({vfs:this.fs,cone:{folder:this.scoop.folder,label:this.scoop.assistantLabel},messages:e,trigger:t,...a?{}:{sessionsDir:r(this.scoop.folder,this.scoop.jid)},stillValid:()=>!this.disposed&&n===this.sessionGeneration});return o&&a&&this.scheduleLiveDeltaCuration(),o?{transcriptPath:o.transcriptPath}:void 0}scheduleLiveDeltaCuration(){let e=this.fs;if(!e)return;let t={folder:this.scoop.folder,...this.scoop.jid?{jid:this.scoop.jid}:{}};import(`./live-session-curation-DBB0BC3B.js`).then(e=>e.r).then(n=>n.scheduleLiveDeltaCuration({vfs:e,cone:t})).catch(e=>{BA.warn(`Live delta curation failed to start`,{folder:this.scoop.folder,error:e instanceof Error?e.message:String(e)})})}async settleLiveSnapshot(e){if(!(this.unit.parentId!==null||!this.fs))try{let{discardLiveSnapshot:t,finalizeLiveSnapshot:n}=await import(`./live-session-snapshot-DkrES4VI.js`);e?await t(this.fs,this.scoop.folder):await n(this.fs,this.scoop.folder)}catch(t){BA.warn(`Live snapshot settle failed (archive stays live)`,{folder:this.scoop.folder,discard:e,error:t instanceof Error?t.message:String(t)})}}getAgentMessages(){return this.agent?.state?.messages?structuredClone(this.agent.state.messages):[]}getContextFill(){return OD(this.agent?.state?.messages??[],this.scoop)}getSessionId(){return this.sessions.sessionId}getFS(){return this.fs}getShell(){return this.shell}updateModel(){this.agent&&(this.activeEffortOverride=FD(this.agent,this.scoop))}async reloadSkills(){this.agent&&await LD(this.agent,{scoop:this.scoop,unit:this.unit,fs:this.fs,skillsFs:this.skillsFs,getGlobalMemory:()=>this.callbacks.getGlobalMemory()})}setThinkingLevel(e,t){return this.agent?ND()?this.agent.state.thinkingLevel:(this.activeEffortOverride=t,ID(this.agent,e)):`off`}getThinkingLevel(){return this.agent?.state.thinkingLevel??`off`}dispose(){this.sessions.persistNow(),this.turnJournal?.end(this.scoop.jid),this.disposed=!0,this.disarmForceRelease(),this.idleCompaction?.cancel(),this.runBounds.disarm(),FA(this.processManager,this.currentTurnProcess,`SIGTERM`,this.promptAbortController),this.bashJobs.reapAll(),this.promptAbortController=null,this.agent?.clearAllQueues?.(),this.agent?.abort?.(),this.unsubscribe?.(),this.unsubscribe=null,this.shell?.dispose(),this.compactFn=null,this.getCompactionApiKey=null,this.agent=null,this.shell=null,this.fs=null}handleAgentEvent(e,t){if(!this.disposed)return mD(e,this.eventSink,t)}async makeToolCallDurable(e,t,n){let r=Promise.all([this.sessions.flush(),n?this.turnJournal?.toolStarted(this.scoop.jid,n,e,t):null]),i,a=new Promise(e=>{i=setTimeout(()=>e(`timeout`),2e3)});try{await Promise.race([r,a])===`timeout`&&BA.warn(`Tool call not yet durable; running it anyway`,{folder:this.scoop.folder,toolName:e})}finally{clearTimeout(i)}}checkpoint(e){let t=e?.role;if(t===`user`)this.sessions.persistNow();else if(t===`toolResult`){let{toolCallId:t}=e;this.sessions.flush().then(()=>this.turnJournal?.toolEnded(this.scoop.jid,t))}else this.sessions.schedule()}setStatus(e){this.disposed||(this.status=e,e===`ready`?this.armIdleCompaction():this.idleCompaction?.cancel(),this.callbacks.onStatusChange(e))}handleAssistantMessageEnd(e){e.errorMessage||this.overflow.markAssistantSucceeded();let t=e.content.filter(e=>e.type===`text`).map(e=>e.text).join(``);t&&!this.didStreamDeltas&&this.callbacks.onResponse(t,!1)}handleAgentEndEvent(e,t){this.disposed||t?.aborted||fD(e,{imageRecovery:this.imageRecovery,overflow:this.overflow,isProcessing:()=>this.isProcessing,didStreamDeltas:()=>this.didStreamDeltas,latchStreamError:e=>{this.promptStreamErrorMessage=e},onError:e=>this.callbacks.onError(e),persist:e=>this.sessions.persistNow(e)},t)}reportExhaustedOverflow(e){this.unit.completion.mode===`interactive`?this.callbacks.onError(e):this.callbacks.onFatalError?this.callbacks.onFatalError(e):this.callbacks.onError(e)}};const Z=_(`scoop-lifecycle-manager`);var HA=class{deps;units=new Map;tabCreates=new Map;gelatiereModelSync=Promise.resolve();constructor(e){this.deps=e}getUnit(e){return this.units.get(e)}ensureUnit(e){let t=this.units.get(e);return(!t||t.isClosed)&&(t=new ZE(e,{getScoop:e=>this.deps.getScoops().get(e),sendPrompt:(e,t,n,r,i)=>this.sendPrompt(e,t,n,r,[],i),clearIdleTimer:e=>this.deps.idleTimers.clear(e),forgetCompletion:(e,t)=>this.deps.completionService.forgetScoop(e,t),unregister:e=>this.unregister(e)}),this.units.set(e,t)),t}getContexts(){let e=new Map;for(let[t,n]of this.units)n.context&&e.set(t,n.context);return e}getContext(e){return this.units.get(e)?.context??void 0}syncReadGrants(e){for(let t of this.deps.getScoops().values()){if(e!==void 0&&t.folder!==e)continue;let n=this.getContext(t.jid)?.getFS();this.applyPolicyReadGrants(t,n)}}getTab(e){return this.units.get(e)?.tab??void 0}observe(e,t){return this.ensureUnit(e).observe(t)}displayJidFor(e){let t=this.deps.approverFor(e)?.jid;return t&&t!==e?t:void 0}dispatch(e,t,...n){this.units.get(e)?.dispatch(t,...n)}parentOf(e){let t=this.deps.getScoops();return(e.parentJid===null?void 0:t.get(e.parentJid))??O(t.values())[0]}rootOf(e){let t=this.deps.getScoops();return Ln(t.values(),e)??O(t.values())[0]}async ensureSudoersLoaded(e){let t=this.deps.getSudoManager();if(t)try{await t.initScoopPolicy(e.folder,e.config)}catch(t){Z.warn(`Failed to initialize per-scoop sudo policy; continuing with existing policy`,{folder:e.folder,error:t instanceof Error?t.message:String(t)})}}applyPolicyReadGrants(e,t){if(!(t instanceof Dr))return;let n=this.deps.getSudoManager()?.getPolicyForScoop(e.folder);n&&t.setReadGrants(n.read.filter(e=>e.nopasswd).map(e=>e.pattern))}createTab(e){let t=this.tabCreates.get(e);if(t)return t;let n;return n=this.openTab(e).finally(()=>{this.tabCreates.get(e)===n&&this.tabCreates.delete(e)}),this.tabCreates.set(e,n),n}async openTab(e){let t=this.deps.getScoops().get(e);if(!t)throw Error(`Scoop not found: ${e}`);let n=this.ensureUnit(e);if(n.context){if(n.tab?.status===`error`)Z.info(`Re-creating context after error`,{jid:e}),n.disposeContext();else{Z.debug(`Context already exists`,{jid:e});return}}let r=this.deps.getSharedFs();if(!r)throw Error(`Shared filesystem not initialized`);let i=`scoop-${t.folder}-${Date.now()}`,a=sr(t).policy.filesystem;if(a.kind===`restricted`){let e=jn(a.mode);if(!e.ok)throw Error(e.error)}let o=a.kind===`full-workspace`?r:new Dr(r,[...a.writablePaths],[...a.visiblePaths],`sudo-delegated`,{includeMounts:An(a.mode)});a.kind===`restricted`&&(await this.ensureSudoersLoaded(t),this.applyPolicyReadGrants(t,o));let s=this.buildContextCallbacks(e,t),c=this.rootOf(t)?.jid,l=new VA(t,s,o,this.deps.getSessionStore()??void 0,r??void 0,c,this.deps.getProcessManager()??void 0,this.deps.getSudoManager(),this.deps.getConversationStore(),this.deps.getCapabilityBroker?.()??void 0,this.deps.getTurnJournal?.()??void 0);if(n.attachContext(l,i),await l.init(),this.units.get(e)!==n||n.context!==l)return;n.tab?.status===`initializing`&&n.transition(`ready`)&&(this.deps.callbacks.onStatusChange(e,`ready`),this.dispatch(e,`onStatusChange`,`ready`),Promise.resolve().then(()=>this.deps.messageRouter.flushOnIdle(e)).catch(t=>{Z.warn(`Initial idle queue probe failed`,{jid:e,error:t instanceof Error?t.message:String(t)})}));let u=this.deps.getScoops().get(e);u&&u.parentJid!==null&&u.notifyOnComplete!==!1&&this.deps.idleTimers.start(e),Z.info(`Scoop context created`,{jid:e,contextId:i})}async reinitAfterPromote(e){let t=this.units.get(e);if(t?.context){t.disposeContext();try{await this.createTab(e)}catch(n){let r=n instanceof Error?n.message:String(n);Z.warn(`Failed to re-init promoted unit; next prompt will retry`,{jid:e,error:r}),t.disposeContext(),this.markTabError(e,r)}}}destroyTab(e){this.deps.idleTimers.clear(e);let t=this.units.get(e);t&&(t.teardown(),this.units.delete(e),Z.info(`Scoop context destroyed`,{jid:e}))}getTabsMap(){let e=new Map;for(let[t,n]of this.units)n.tab&&e.set(t,n.tab);return e}markTabError(e,t){let n=this.ensureUnit(e);n.transition(`error`,{contextId:n.tab?.contextId??`scoop-error-${e}`,error:t})}dispatchEvent(e,t,...n){this.dispatch(e,t,...n)}stopAndClearAllContexts(){for(let e of this.units.values())e.detachContext()}async destroyAllTabs(){for(let e of Array.from(this.units.keys()))this.destroyTab(e)}async waitForTabReady(e,t=1e4){let n=Date.now();for(;Date.now()-n<t;){let t=this.getTab(e);if(!t)return!1;if(t.status===`ready`||t.status===`processing`)return!0;if(t.status===`error`)return!1;await new Promise(e=>setTimeout(e,100))}return Z.warn(`Timed out waiting for tab to become ready`,{jid:e}),!1}async sendPrompt(e,t,n,r,i=[],a){let o=this.deps.getScoops().get(e);if(o&&Dx(o)&&(await this.syncGelatiereModel(),!Zn(o)))throw Error(`The gelatiere cannot run until the leading cone has a model`);let s=this.getContext(e);s||=(await this.createTab(e),this.getContext(e));let c=this.units.get(e);if(c?.tab?.status===`initializing`){if(Z.debug(`Context initializing, waiting to send message`,{jid:e}),!await this.waitForTabReady(e)){Z.error(`Context did not become ready in time, dropping prompt`,{jid:e});return}s=this.getContext(e)}if(!s||!c){Z.error(`Context not found after creation`,{jid:e});return}this.deps.idleTimers.clear(e),this.deps.completionService.clearResponse(e),c.tab&&c.transition(`processing`)&&(this.deps.callbacks.onStatusChange(e,`processing`),this.dispatch(e,`onStatusChange`,`processing`)),Z.debug(`Prompt sent to scoop`,{jid:e,textLength:t.length,imageCount:i.length}),await s.prompt(t,i,a)}async resumeTurn(e,t,n){let r=this.getContext(e),i=this.units.get(e);!r||!i||r.isBusy||(this.deps.idleTimers.clear(e),this.deps.completionService.clearResponse(e),i.tab&&i.transition(`processing`)&&(this.deps.callbacks.onStatusChange(e,`processing`),this.dispatch(e,`onStatusChange`,`processing`)),await r.resumeTurn(t,n))}async register(e){let t=this.deps.getScoops(),n=zn(t.values())?.jid;if($n(e),this.inheritModel(e),e.parentJid!==null){let n=[];for(let r of t.values())r.jid!==e.jid&&n.push(r.folder);let r=Un(e.folder,n);r!==e.folder&&(Z.warn(`Scoop folder already taken — registering under a free variant`,{jid:e.jid,requested:e.folder,folder:r}),e.folder=r,e.trigger=`@${r}`,e.assistantLabel=r)}t.set(e.jid,e);try{await this.deps.db.saveScoop(e)}catch(n){throw t.delete(e.jid),n}this.deps.messageRouter.ensureQueue(e.jid),Z.info(`Scoop registered`,{jid:e.jid,name:e.name});try{await this.createTab(e.jid),e.parentJid!==null&&DE(`spawn`,e.folder)}catch(n){Z.error(`Scoop init failed`,{jid:e.jid,name:e.name,error:n instanceof Error?n.message:String(n)});try{this.destroyTab(e.jid)}catch(t){Z.warn(`Failed to destroy scoop runtime during init rollback`,{jid:e.jid,name:e.name,error:t instanceof Error?t.message:String(t)})}throw t.delete(e.jid),this.deps.messageRouter.forgetScoop(e.jid),await this.deps.db.deleteScoop(e.jid).catch(t=>{Z.warn(`Failed to rollback scoop registration`,{jid:e.jid,name:e.name,error:t instanceof Error?t.message:String(t)})}),n}zn(t.values())?.jid!==n&&await this.syncGelatiereModel().catch(t=>{Z.warn(`Failed to follow the new leading cone after registration`,{jid:e.jid,error:t instanceof Error?t.message:String(t)})})}inheritModel(e){if(Dx(e)){let t=zn(this.deps.getScoops().values());Hn(e,t?Zn(t):void 0);return}if(Bn(e))return;let t=e.parentJid?this.deps.getScoops().get(e.parentJid):void 0,n=(t?Zn(t):void 0)??_E();n&&Hn(e,n)}async unregister(e){let t=this.deps.getScoops(),n=zn(t.values())?.jid===e;for(let n of nr(t.values(),e))await this.unregister(n.jid);let r=t.get(e);if(r&&r.parentJid===null&&O(t.values()).length<=1)throw Error(`Cannot drop the last cone`);let i=this.deps.getLickManager();if(r&&i){let{webhooks:e,cronTasks:t}=await i.getLicksForScoopFromDb(r.name,r.folder),n=this.deps.buildActiveLicksError(r.folder,e,t);if(n)throw n}this.deps.costTracker.snapshot(e);let a=globalThis.__slicc_wsSubscribers;a&&a.dropForScoop(e).catch(t=>{Z.warn(`dropForScoop (ws subscribers) failed`,{jid:e,error:t instanceof Error?t.message:String(t)})}),this.destroyTab(e),await Promise.all([r?this.deps.getConversationStore()?.delete(kr(r)):void 0,this.deps.getSessionStore()?.delete(e).catch(t=>{Z.warn(`Failed to delete agent session`,{jid:e,error:t instanceof Error?t.message:String(t)})})]),await this.deps.db.deleteScoop(e),t.delete(e),this.deps.messageRouter.forgetScoop(e),this.deps.completionService.forgetScoop(e,`unregister`);let o=this.deps.approvalRouter.failScoop(e);if(o>0&&Z.info(`Failed-closed pending sudo requests for unregistered scoop`,{jid:e,count:o}),r&&this.deps.getSudoManager()?.forgetScoopPolicies(r.folder),Z.info(`Scoop unregistered`,{jid:e}),r)try{this.deps.callbacks.onScoopUnregistered?.(r)}catch(t){Z.warn(`onScoopUnregistered callback threw`,{jid:e,error:t instanceof Error?t.message:String(t)})}n&&await this.syncGelatiereModel().catch(t=>{Z.warn(`Failed to follow the replacement leading cone after root removal`,{jid:e,error:t instanceof Error?t.message:String(t)})})}async setModel(e,t){let n=this.deps.getScoops().get(e);if(!n)return!1;if(Dx(n))return await this.syncGelatiereModel(),!1;let r=zn(this.deps.getScoops().values())?.jid===e,i=n.model;Hn(n,t),this.getContext(e)?.updateModel();try{await this.deps.db.saveScoop(n)}catch(t){return Hn(n,i),this.getContext(e)?.updateModel(),Z.warn(`Failed to persist unit model; rolled back`,{jid:e,error:t instanceof Error?t.message:String(t)}),!1}return r&&await this.syncGelatiereModel().catch(t=>{Z.warn(`Failed to synchronize gelatiere after leading model change`,{jid:e,error:t instanceof Error?t.message:String(t)})}),!0}syncGelatiereModel(){let e=this.gelatiereModelSync.then(()=>this.applyGelatiereModel());return this.gelatiereModelSync=e.then(()=>void 0,()=>void 0),e}async applyGelatiereModel(){let e=this.deps.getScoops(),t=[...e.values()].find(Dx);if(!t)return!1;let n=zn(e.values()),r=n?Zn(n):void 0,i=Zn(t),a=r?i?.provider===r.provider&&i.id===r.id:Bn(t)===void 0;if(!a){let e=t.model?{...t.model}:void 0,i=t.config?{...t.config}:void 0;Hn(t,r);try{await this.deps.db.saveScoop(t)}catch(n){throw t.model=e,t.config=i,n}Z.info(`Gelatiere model synchronized with leading cone`,{jid:t.jid,leadingJid:n?.jid,model:r?`${r.provider}:${r.id}`:void 0})}return r&&this.getContext(t.jid)?.updateModel(),!a}refreshModels(){let e=this.getContexts();for(let t of e.values())t.updateModel();Z.info(`Models re-resolved on all active contexts`,{contextCount:e.size})}async reloadAllSkills(){let e=[];for(let[t,n]of this.getContexts()){let r=this.getTab(t);(r?.status===`ready`||r?.status===`processing`)&&e.push(n.reloadSkills().catch(e=>{Z.warn(`Failed to reload skills for scoop`,{jid:t,error:e instanceof Error?e.message:String(e)})}))}await Promise.all(e),Z.info(`Skills reloaded across all contexts`,{count:e.length})}async setThinkingLevel(e,t,n){let r=this.deps.getScoops().get(e);if(!r)return null;let i=this.getContext(e),a=i?i.setThinkingLevel(t,n):null;Yn(r,t===void 0?void 0:{level:t,effortOverride:n});try{await this.deps.db.saveScoop(r)}catch(t){Z.warn(`Failed to persist thinkingLevel`,{jid:e,error:t instanceof Error?t.message:String(t)})}return a}buildContextCallbacks(e,t){let{callbacks:n,completionService:r,cone:i}=this.deps,a=()=>this.deps.getScoops(),{policy:o,completion:s}=sr(t),c=s.mode!==`interactive`;return{onResponse:(t,i)=>{a().has(e)&&(n.onResponse(e,t,i),this.dispatch(e,`onResponse`,t,i),c&&(i?r.appendResponseChunk(e,t):r.setResponseFull(e,t)))},onResponseDone:()=>{a().has(e)&&(this.units.get(e)?.touch(),n.onResponseDone(e))},onError:n=>this.handleScoopTurnError(e,t,n),onFatalError:t=>this.handleFatalError(e,t),onStatusChange:t=>{a().has(e)&&(this.units.get(e)?.transition(t),n.onStatusChange(e,t),this.dispatch(e,`onStatusChange`,t),t===`ready`&&this.deps.messageRouter.flushOnIdle(e),t===`ready`&&c&&r.notifyCompletion(e))},onCompactionStateChange:(t,r)=>{n.onCompactionStateChange?.(e,t,r)},onToolStart:(t,r,i)=>{n.onToolStart?.(e,t,r,i)},onToolEnd:(t,r,i,a)=>{n.onToolEnd?.(e,t,r,i,a)},onToolUI:(t,r,i)=>{n.onToolUI?.(e,t,r,i,this.displayJidFor(e))},onToolUIDone:t=>{n.onToolUIDone?.(e,t,this.displayJidFor(e))},onToolProgress:(t,r,i)=>{n.onToolProgress?.(e,t,r,i)},onSendMessage:(t,r)=>{let i=`${r?`[${r}] `:``}${t}`;n.onSendMessage(e,i),this.dispatch(e,`onSendMessage`,t)},getScoops:()=>i.getScoops(),getScoopTabState:o.canManageChildren?e=>this.getTab(e):void 0,onFeedScoop:o.canManageChildren?(e,n)=>i.delegateToScoop(e,n,t.assistantLabel):void 0,onScoopScoop:o.canCreateChildren?async e=>{let n={...e,jid:`scoop_${e.folder}_${Date.now()}`,parentJid:t.jid};return Rn(n,t),await i.registerScoop(n),n}:void 0,onDropScoop:o.canManageChildren?async e=>{await i.unregisterScoop(e)}:void 0,onMuteScoops:o.canManageChildren?e=>i.muteScoops(e):void 0,onUnmuteScoops:o.canManageChildren?e=>i.unmuteScoops(e):void 0,onScheduleScoopWait:o.canManageChildren?(t,n)=>i.scheduleScoopWait(t,n,e):void 0,getGlobalMemory:()=>i.getGlobalMemory(),setGlobalMemory:o.canWriteSharedMemory?e=>i.setGlobalMemory(e):void 0,appendConeMemory:o.canWriteSharedMemory?(e,n)=>i.appendConeMemory(e,{...n,memoryPath:fr(t).memoryPath}):void 0,onSudoRequest:o.approvalAuthority===`user`?void 0:t=>i.enqueueSudoRequest(e,t),approveGuestToolCall:e=>i.approveDirectedOrUser(e),onSudoResolve:o.canResolveApprovals?(n,r)=>i.resolveActionableLick(n,r,Nn(t)?void 0:e):void 0,onListSudoRequests:o.canResolveApprovals?()=>i.listPendingSudoRequests(Nn(t)?void 0:e):void 0,getBrowserAPI:()=>n.getBrowserAPI()}}handleScoopTurnError(e,t,n){this.deps.getScoops().has(e)&&(this.deps.completionService.recordFailure(e,n),this.units.get(e)?.transition(`error`,{error:n}),DE(`error`,t.folder,n),this.deps.callbacks.onError(e,n),this.deps.callbacks.onStatusChange(e,`error`),this.dispatch(e,`onError`,n),this.dispatch(e,`onStatusChange`,`error`))}handleFatalError(e,t){let n=this.deps.getScoops();if(!n.has(e))return;let r=n.get(e);if(Z.error(`Fatal scoop error`,{jid:e,folder:r.folder,error:t}),DE(`error`,r.folder,t),this.units.get(e)?.transition(`error`,{error:t}),this.deps.callbacks.onError(e,t),this.deps.callbacks.onStatusChange(e,`error`),this.dispatch(e,`onError`,t),this.dispatch(e,`onStatusChange`,`error`),sr(r).completion.mode===`interactive`)return;this.deps.completionService.forgetScoop(e,`fatal-error`);let i=this.parentOf(r);if(i)try{this.deps.callbacks.onError(i.jid,`[@${r.assistantLabel} FAILED]: ${t}`,{endTurn:!1})}catch(e){Z.error(`Failed to record fatal error for scoop owner`,{scoop:r.folder,error:e instanceof Error?e.message:String(e)})}}};const Q=_(`scoop-message-router`);var UA=class{deps;messageQueues=new Map;lastAgentTimestamp=new Map;pollInterval=null;debounceStates=new Map;processing=new Map;busyDeferrals=new Map;constructor(e){this.deps=e}ensureQueue(e){this.messageQueues.has(e)||this.messageQueues.set(e,[])}setLastAgentTimestamp(e,t){this.lastAgentTimestamp.set(e,t)}forgetScoop(e){this.cancelDebounce(e),this.messageQueues.delete(e),this.lastAgentTimestamp.delete(e),this.clearBusyDeferral(e)}async handleMessage(e){if(Q.info(`handleMessage`,{id:e.id,chatJid:e.chatJid,sender:e.senderName,channel:e.channel,contentPreview:e.content.slice(0,80)}),this.deps.isExternalLickChannel(e.channel))try{this.deps.notifyIncomingMessage(e.chatJid,e)}catch(t){Q.warn(`onIncomingMessage for external lick channel threw`,{channel:e.channel,error:t instanceof Error?t.message:String(t)})}await this.deps.db.saveMessage(e),await this.routeToScoop(e)}async delegateToScoop(e,t,n){let r=this.deps.getScoops().get(e);if(!r)throw Error(`Scoop not found: ${e}`);DE(`feed`,r.folder);let i={id:`delegate-${Date.now()}-${Math.random().toString(36).slice(2)}`,chatJid:e,senderId:`cone`,senderName:n,content:t,timestamp:new Date().toISOString(),fromAssistant:!0,channel:`delegation`};await this.deps.db.saveMessage(i),this.deps.notifyIncomingMessage(e,i),Q.info(`Delegating to scoop`,{scoopJid:e,scoopName:r.name,promptLength:t.length}),this.deps.sendPrompt(e,t,`cone`,n).catch(t=>{let n=t instanceof Error?t.message:String(t);Q.error(`Delegation failed`,{scoopJid:e,error:n}),this.deps.onError(e,`Delegation failed: ${n}`)})}async routeToScoop(e){let t=this.deps.getScoops().get(e.chatJid);if(!t){Q.info(`routeToScoop: unregistered target`,{chatJid:e.chatJid});return}if(!this.passesTriggerGate(t,e)){Q.info(`routeToScoop: trigger not found in content`,{chatJid:e.chatJid,trigger:t.trigger,contentPreview:e.content.slice(0,80)});return}let n=this.messageQueues.get(e.chatJid)??[];n.push(e),this.messageQueues.set(e.chatJid,n);let r=this.deps.getTabs().get(e.chatJid);if(Q.debug(`routeToScoop: queued`,{chatJid:e.chatJid,scoopName:t.name,tabStatus:r?.status??`no-tab`,queueLength:n.length}),r?.status===`error`){Q.info(`routeToScoop: tab in error state, retrying init`,{chatJid:e.chatJid});try{await this.deps.createScoopTab(e.chatJid),r=this.deps.getTabs().get(e.chatJid)}catch{Q.warn(`routeToScoop: retry init failed`,{chatJid:e.chatJid})}}if(r?.status===`ready`||r?.status===`processing`){if(this.deps.isExternalLickChannel(e.channel)){await this.scheduleScoopQueue(e.chatJid,e.id);return}await this.flushScoopQueue(e.chatJid)}}passesTriggerGate(e,t){let n=t.channel===`webhook`||t.channel===`cron`||t.channel===`fswatch`||t.channel===`sprinkle`||t.channel===`bash`||t.channel===`scoop-notify`||t.channel===`scoop-idle`||t.channel===`scoop-wait`;return!e||e.parentJid===null||!e.requiresTrigger||!e.trigger||n||t.content.includes(e.trigger)}scheduleScoopQueue(e,t){let n=this.debounceStates.get(e)??{startedAt:Date.now(),waiters:[]};n.timer!==void 0&&clearTimeout(n.timer);let r=new Promise((e,r)=>{n.waiters.push({messageId:t,resolve:e,reject:r})}),i=Math.max(0,3e3-(Date.now()-n.startedAt));return n.timer=setTimeout(()=>{n.timer=void 0,this.flushScoopQueue(e).catch(t=>{let n=t instanceof Error?t.message:String(t);Q.error(`Debounced message queue processing failed`,{jid:e,error:n}),this.deps.onError(e,`Queue processing failed: ${n}`)})},Math.min(1e3,i)),this.debounceStates.set(e,n),r}async flushScoopQueue(e){let t=this.takeDebounce(e);if(t&&this.processing.has(e)&&this.shouldDeferQueuedLicks(e)){for(let e of t.waiters)e.resolve();this.recordBusyDeferral(e,this.messageQueues.get(e)?.length??0);return}try{await this.processScoopQueue(e);for(let e of t?.waiters??[])e.resolve()}catch(e){for(let n of t?.waiters??[])n.reject(e);throw e}}async flushOnIdle(e){if(this.messageQueues.has(e))try{await this.flushScoopQueue(e)}catch(t){let n=t instanceof Error?t.message:String(t);Q.error(`Idle message queue processing failed`,{jid:e,error:n}),this.deps.onError(e,`Queue processing failed: ${n}`)}}shouldDeferQueuedLicks(e){let t=this.messageQueues.get(e);return t!==void 0&&t.length>0&&t.every(e=>this.deps.isExternalLickChannel(e.channel))}recordBusyDeferral(e,t){let n=this.busyDeferrals.get(e)??{startedAt:Date.now(),reported:!1,count:t??0};t!==void 0&&(n.count=t),this.busyDeferrals.set(e,n);let r=Date.now()-n.startedAt;n.reported||r<3e5||(n.reported=!0,Q.warn(`Busy lick queue may be starved`,{jid:e,error:`Lick queue remained deferred while scoop was busy for 300s`}),this.emitLickBackpressure(e,{count:n.count,waitingMs:r}))}clearBusyDeferral(e){let t=this.busyDeferrals.get(e);this.busyDeferrals.delete(e),t?.reported&&this.emitLickBackpressure(e,{count:0,waitingMs:Date.now()-t.startedAt})}emitLickBackpressure(e,t){try{this.deps.onLickBackpressure?.(e,t)}catch(t){Q.warn(`Lick backpressure callback failed`,{jid:e,error:t instanceof Error?t.message:String(t)})}}takeDebounce(e){let t=this.debounceStates.get(e);return t?.timer!==void 0&&clearTimeout(t.timer),this.debounceStates.delete(e),t}cancelDebounce(e){let t=this.takeDebounce(e);for(let e of t?.waiters??[])e.resolve()}cancelDebounces(){for(let e of this.debounceStates.keys())this.cancelDebounce(e)}cancelDebounceWaiter(e,t){let n=this.debounceStates.get(e);if(!n)return;let r=[];for(let e of n.waiters)e.messageId===t?e.resolve():r.push(e);n.waiters=r,r.length===0&&this.cancelDebounce(e)}async processScoopQueue(e){let t=this.processing.get(e);if(t){t.rerun=!0,await t.done.catch(()=>{});return}let n={rerun:!1,done:Promise.resolve()};return this.processing.set(e,n),n.done=this.drainScoopQueue(e,n),n.done}async drainScoopQueue(e,t){let n=!1,r;try{do{t.rerun=!1;try{await this.runScoopQueue(e)}catch(e){n||(n=!0,r=e)}}while(t.rerun)}finally{this.processing.delete(e)}if(n)throw r}async runScoopQueue(e){let t=this.messageQueues.get(e);if(!t){Q.debug(`processScoopQueue: queue not registered`,{jid:e});return}let n=this.deps.getTabs().get(e);if(n?.status!==`ready`&&n?.status!==`processing`){Q.debug(`processScoopQueue: tab not ready`,{jid:e,status:n?.status??`no-tab`});return}let r=this.deps.getScoops().get(e),i=r?.assistantLabel??e,a=this.lastAgentTimestamp.get(e)??``,o=await this.deps.db.getMessagesSince(e,a,i),s=o.filter(e=>this.passesTriggerGate(r,e));if(Q.debug(`processScoopQueue: DB query`,{jid:e,scoopName:r?.name,excludeName:i,since:a,dbMessageCount:o.length,eligibleMessageCount:s.length,queueLength:t.length}),o.length===0){Q.debug(`processScoopQueue: no messages from DB, clearing queue`,{jid:e}),this.messageQueues.set(e,[]),this.clearBusyDeferral(e);return}if(s.length===0){Q.debug(`processScoopQueue: no messages passed trigger gate, clearing queue`,{jid:e}),this.messageQueues.set(e,[]),this.clearBusyDeferral(e);let t=_b(yb(gb(a),o));this.lastAgentTimestamp.set(e,t),await this.deps.db.setState(`lastAgentTs_${e}`,t);return}if(s.every(e=>this.deps.isExternalLickChannel(e.channel))&&this.deps.getContexts().get(e)?.isBusy){Q.debug(`processScoopQueue: deferring lick batch while scoop is busy`,{jid:e,messageCount:s.length}),this.recordBusyDeferral(e,s.length);return}this.clearBusyDeferral(e);let c=[],l=s.map(e=>{let t=new Date(e.timestamp),n=t.toLocaleString(`en-US`,{month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`,hour12:!0}),r=O_(e.content,e.attachments);return e.attachments?.length&&c.push({id:e.id,timestamp:t.getTime(),body:r,attachments:[...e.attachments]}),`[${n}] ${e.senderName}: ${r}`}).join(`
1178
- `);c.length>0&&this.deps.recordSentAttachments?.(e,c);let u=s.flatMap(e=>k_(e.attachments));this.messageQueues.set(e,[]);let d=s[s.length-1],f=_b(yb(gb(a),o));this.lastAgentTimestamp.set(e,f),await this.deps.db.setState(`lastAgentTs_${e}`,f);let p=s.some(e=>e.steer),m=new Set,h=[];for(let e of s){if(!e.guestGate)continue;let t=JSON.stringify(e.guestGate);m.has(t)||(m.add(t),h.push(e.guestGate))}await this.deps.sendPrompt(e,l,d.senderId,d.senderName,u,{steer:p,...h.length>0?{guestGates:h}:{}})}startMessageLoop(){this.pollInterval||=setInterval(()=>{let e=this.deps.getTabs();for(let t of this.deps.getScoops().keys()){let n=e.get(t);this.recordBusyDeferralIfPresent(t);let r=(this.messageQueues.get(t)?.length??0)>0;n?.status===`ready`&&r&&!this.debounceStates.has(t)&&this.processScoopQueue(t).catch(e=>{let n=e instanceof Error?e.message:String(e);Q.error(`Message queue processing failed`,{jid:t,error:n}),this.deps.onError(t,`Queue processing failed: ${n}`)})}},2e3)}recordBusyDeferralIfPresent(e){this.busyDeferrals.has(e)&&this.recordBusyDeferral(e)}stopMessageLoop(){this.cancelDebounces(),this.pollInterval&&=(clearInterval(this.pollInterval),null)}async clearScoopMessages(e,t,n={}){this.cancelDebounce(e),await this.deps.settleFoldedCost?.(e),t&&await t.clearSession(n).catch(t=>{Q.warn(`Failed to clear the durable conversation for scoop`,{jid:e,error:t instanceof Error?t.message:String(t)})}),await this.deps.db.clearMessagesForScoop(e).catch(t=>{Q.warn(`Failed to clear persisted channel history for scoop`,{jid:e,error:t instanceof Error?t.message:String(t)})}),this.lastAgentTimestamp.delete(e),this.messageQueues.set(e,[]),this.clearBusyDeferral(e),Q.info(`Scoop messages cleared`,{jid:e})}async clearAllMessages(){this.cancelDebounces(),await this.deps.db.clearAllMessages();let e=this.deps.getSessionStore();e&&await e.clearAll().catch(e=>{Q.warn(`Failed to clear agent sessions`,{error:e instanceof Error?e.message:String(e)})}),await Promise.all([...this.deps.getContexts().values()].map(e=>e.clearSession().catch(e=>{Q.warn(`Failed to clear a durable conversation`,{error:e instanceof Error?e.message:String(e)})}))),this.lastAgentTimestamp.clear();for(let e of this.busyDeferrals.keys())this.clearBusyDeferral(e);for(let e of this.deps.getScoops().keys())this.messageQueues.set(e,[]);this.deps.resetCostTracker(),Q.info(`All messages cleared`)}getQueuedMessageIds(e){return(this.messageQueues.get(e)??[]).map(e=>e.id)}async clearQueuedMessages(e){this.cancelDebounce(e);let t=this.messageQueues.get(e)??[],n=this.deps.getScoops().get(e)?.assistantLabel??e,r=this.lastAgentTimestamp.get(e)??``,i=await this.deps.db.getMessagesSince(e,r,n),a=new Set([...t,...i].map(e=>e.id));for(let e of a)await this.deps.db.deleteMessage(e);this.messageQueues.set(e,[]),this.clearBusyDeferral(e)}async deleteQueuedMessage(e,t){let n=this.messageQueues.get(e);if(n){let r=n.findIndex(e=>e.id===t);r!==-1&&n.splice(r,1),n.length===0&&this.clearBusyDeferral(e)}this.cancelDebounceWaiter(e,t),await this.deps.db.deleteMessage(t)}};const $=_(`orchestrator`),WA={decision:`deny`};var GA=class{scoops=new Map;workUnits=new Ry(this);container;callbacks;config;scheduler=null;sharedFs=null;memoryStore=new IT({getSharedFs:()=>this.sharedFs});lickManager=null;sessionStore=null;conversationStore=null;onConversationsReady=null;turnJournal=null;interruptedTurns=null;bootRestoreTail=Promise.resolve();fsWatcher=null;sudoManager=null;capabilityBroker=null;llmsTxtIgnorePolicy=null;modelPolicyFile=null;lifecycle;idleTimers=new JE({getScoops:()=>this.scoops,getTabs:()=>this.lifecycle.getTabsMap(),findParent:e=>this.parentOrDefaultRoot(e),handleMessage:e=>this.handleMessage(e),notifyIncomingMessage:(e,t)=>this.callbacks.onIncomingMessage?.(e,t)});costTracker=new KE({getScoops:()=>this.scoops,getContexts:()=>this.lifecycle.getContexts(),mergeFoldedIntoFrozen:(e,t)=>this.mergeFoldedCostIntoFrozen(e,t)});completionService=new PE({getSharedFs:()=>this.sharedFs,getScoop:e=>this.scoops.get(e),findParent:e=>this.parentOrDefaultRoot(e),hasScoop:e=>this.scoops.has(e),notifyIncomingMessage:(e,t)=>this.callbacks.onIncomingMessage?.(e,t),handleMessage:e=>this.handleMessage(e),reportError:(e,t)=>this.callbacks.onError(e,t)});processManager=null;unregisterExportService=null;approvalRouter=new xE({getScoops:()=>this.scoops,findApprover:e=>this.capableApproverOrDefaultRoot(e),getSudoManager:()=>this.sudoManager,getLickManager:()=>this.lickManager,handleMessage:e=>this.handleMessage(e),onMessageUpdate:(e,t)=>this.callbacks.onMessageUpdate?.(e,t),getMessagesForScoop:e=>mb(e),saveMessage:e=>fb(e)});lickRegistry=new pE({getConeShell:()=>{let e=this.defaultRoot();return e?this.lifecycle.getContext(e.jid)?.getShell()??null:null},getConeFs:()=>{let e=this.defaultRoot();return e?this.lifecycle.getContext(e.jid)?.getFS()??null:null},persistLickDecision:(e,t)=>this.approvalRouter.persistLickDecision(e,t)});messageRouter=new UA({getScoops:()=>this.scoops,getTabs:()=>this.lifecycle.getTabsMap(),getContexts:()=>this.lifecycle.getContexts(),createScoopTab:e=>this.createScoopTab(e),sendPrompt:(e,t,n,r,i,a)=>this.sendPrompt(e,t,n,r,i??[],a),notifyIncomingMessage:(e,t)=>this.callbacks.onIncomingMessage?.(e,t),recordSentAttachments:(e,t)=>this.recordSentAttachments(e,t),onError:(e,t,n)=>this.callbacks.onError(e,t,n),onLickBackpressure:(e,t)=>this.callbacks.onLickBackpressure?.(e,t),getSessionStore:()=>this.sessionStore,resetCostTracker:()=>this.costTracker.reset(),settleFoldedCost:e=>this.costTracker.settleFolded(e),db:{saveMessage:e=>fb(e),deleteMessage:e=>pb(e),clearMessagesForScoop:e=>db(e),clearAllMessages:()=>ub(),getMessagesSince:(e,t,n)=>bb(e,t,n),setState:(e,t)=>Eb(e,t)},isExternalLickChannel:_y});constructor(e,t,n={name:`sliccy`,triggerPattern:/^@sliccy\b/i}){this.container=e,this.callbacks=t,this.config=n,this.lifecycle=new HA({getScoops:()=>this.scoops,approverFor:e=>this.ownerRootOrDefault(e),getSharedFs:()=>this.sharedFs,getSessionStore:()=>this.sessionStore,getConversationStore:()=>this.conversationStore,getProcessManager:()=>this.processManager,getSudoManager:()=>this.sudoManager,getCapabilityBroker:()=>this.capabilityBroker,getTurnJournal:()=>this.turnJournal,callbacks:this.callbacks,idleTimers:this.idleTimers,completionService:this.completionService,db:{saveScoop:e=>sb(e),deleteScoop:e=>lb(e)},getLickManager:()=>this.lickManager,buildActiveLicksError:(e,t,n)=>cE(e,t,n),messageRouter:{ensureQueue:e=>this.messageRouter.ensureQueue(e),forgetScoop:e=>this.messageRouter.forgetScoop(e),flushOnIdle:e=>this.messageRouter.flushOnIdle(e)},costTracker:{snapshot:e=>this.costTracker.snapshot(e)},approvalRouter:{failScoop:e=>this.approvalRouter.failScoop(e)},cone:{delegateToScoop:(e,t,n)=>this.delegateToScoop(e,t,n),registerScoop:e=>this.registerScoop(e),unregisterScoop:e=>this.unregisterScoop(e),muteScoops:e=>this.muteScoops(e),unmuteScoops:e=>this.unmuteScoops(e),scheduleScoopWait:(e,t,n)=>this.scheduleScoopWait(e,t,n),getScoops:()=>this.getScoops(),getGlobalMemory:()=>this.getGlobalMemory(),setGlobalMemory:e=>this.setGlobalMemory(e),appendConeMemory:(e,t)=>this.appendConeMemory(e,t),enqueueSudoRequest:(e,t)=>this.enqueueSudoRequest(e,t),resolveActionableLick:(e,t,n)=>this.resolveActionableLick(e,t,n),approveDirectedOrUser:e=>this.approveDirectedOrUser(e),listPendingSudoRequests:e=>this.listPendingSudoRequests(e)}})}setProcessManager(e){this.processManager=e}setCapabilityBroker(e){this.capabilityBroker=e}getCapabilityBroker(){return this.capabilityBroker}getProcessManager(){return this.processManager}async initPolicyLayerAndLoadRecords(e,t,n){return vE(async n=>(await this.ensureRootStructure(),n(),this.sudoManager=new Fx({fs:e,watcher:t,capabilityBroker:this.capabilityBroker,onPolicyReload:e=>{this.lifecycle.syncReadGrants(e),this.approvalRouter.settleGrantedRequests(e)}}),await this.sudoManager.init(),n(),this.llmsTxtIgnorePolicy=new Sx(e,t),await this.llmsTxtIgnorePolicy.init(),n(),this.modelPolicyFile=new gE(e,t),await this.modelPolicyFile.init(),n(),cb()),n,{stagePrefix:`orchestrator-init`})}setOnConversationsReady(e){this.onConversationsReady=e}async openSharedFilesystem(e,t){let n=await vE(e=>Er.create({dbName:`slicc-fs`,onRepairProgress:e}),e);this.sharedFs=n,this.sessionStore=new M_,this.conversationStore=new JC;let{TurnJournal:r}=await import(`./turn-journal-C1eVrq7Y.js`);this.turnJournal=new r,this.interruptedTurns=await this.turnJournal.readAll();let i=new Tr;return this.fsWatcher=i,n.setWatcher(i),globalThis.__slicc_fs_watcher=i,t?.onSharedFsReady&&await t.onSharedFsReady(n),{sharedFs:n,fsWatcher:i}}async init(e,t){await Db();let{sharedFs:n,fsWatcher:r}=await this.openSharedFilesystem(e,t),i=await this.initPolicyLayerAndLoadRecords(n,r,e),a=Object.values(i).find(e=>Jn(e))?.jid;for(let e of Object.values(i)){await this.backfillParent(e,a),$n(e),this.migrateScoopConfig(e,Object.values(i)),this.scoops.set(e.jid,e),this.messageRouter.ensureQueue(e.jid);let t=await Tb(`lastAgentTs_${e.jid}`);t&&this.messageRouter.setLastAgentTimestamp(e.jid,t)}await this.backfillModels(),await this.migrateConversations(e),await this.memoryStore.ensureGlobalMemory(),await this.memoryStore.migrateLegacyConeMemory(),this.scheduler=new bE({onTaskRun:async(e,t)=>{$.info(`Running scheduled task`,{taskId:e.id,scoop:t.name}),await this.sendPrompt(t.jid,`[SCHEDULED TASK]\n\n${e.prompt}`,`scheduler`,`Scheduled Task`)},getScoop:e=>{for(let t of this.scoops.values())if(t.folder===e)return t}}),this.scheduler.start(),$.info(`Orchestrator initialized`,{scoopCount:this.scoops.size}),e?.(`conversations-ready`),await this.onConversationsReady?.(),await this.restoreScoopContexts(e),Ir(e=>this.getSessionCostsForCommand(e)),Lr(async()=>{let{refreshBudgetWindow:e}=await Promise.resolve().then(()=>P_);return e()}),this.unregisterExportService=s(this.buildWorkerExportService()),this.messageRouter.startMessageLoop()}whenBootRestoresSettled(){return this.bootRestoreTail}async restoreScoopContexts(e){let t=[],n=[];for(let e of this.scoops.values())e.parentJid===null?t.push(e):n.push(e);await wE(t,4,t=>this.restoreScoopContext(t,e));let r=wE(n,4,t=>this.restoreScoopContext(t,e)).catch(e=>{$.warn(`Background scoop restore failed`,{error:e instanceof Error?e.message:String(e)})});this.bootRestoreTail=this.bootRestoreTail.then(()=>r)}async restoreScoopContext(e,t){try{await this.createScoopTab(e.jid)}catch(t){let n=t instanceof Error?t.message:String(t);$.warn(`Skipping scoop whose context failed to initialize during boot`,{jid:e.jid,folder:e.folder,root:e.parentJid===null,error:n}),e.parentJid!==null&&this.lifecycle.markTabError(e.jid,n)}finally{t?.(`scoop-restored:${e.jid}`)}}async migrateConversations(e){let t=this.conversationStore;if(!t)return;let n=new ay;try{await jC({store:t,units:[...this.scoops.values()],loadAgentSession:async e=>{let t=await this.sessionStore?.load(e);return t?{messages:t.messages,createdAt:t.createdAt}:null},loadChatSession:async e=>{let t=await n.load(e);return t?{messages:t.messages,createdAt:t.createdAt}:null},onProgress:e})}catch(e){$.warn(`Canonical conversation migration failed; it will retry on the next boot`,{error:e instanceof Error?e.message:String(e)})}}recordSentAttachments(e,t){let n=this.conversationStore,r=this.scoops.get(e);!n||!r||n.putAttachments(Ar(r),t).catch(t=>{$.warn(`Failed to record sent attachments`,{jid:e,error:t instanceof Error?t.message:String(t)})})}async backfillParent(e,t){if(e.parentJid===void 0){e.parentJid=Jn(e)?null:t??null;try{await sb(e)}catch(t){$.warn(`Failed to persist backfilled parentJid; will retry next boot`,{jid:e.jid,error:t instanceof Error?t.message:String(t)})}}}async backfillModels(){let e=[...this.scoops.values()].filter(e=>!Bn(e)&&!Dx(e));if(e.length>0){let t=_E(),n=[...e].sort((e,t)=>Number(e.parentJid!==null)-Number(t.parentJid!==null));for(let e of n){let n=e.parentJid?this.scoops.get(e.parentJid):void 0,r=(n?Zn(n):void 0)??t;if(r){Hn(e,r);try{await sb(e)}catch(t){$.warn(`Failed to persist backfilled model; will retry next boot`,{jid:e.jid,error:t instanceof Error?t.message:String(t)})}}}}try{await this.lifecycle.syncGelatiereModel()}catch(e){$.warn(`Failed to repair gelatiere model on boot; will retry next boot`,{error:e instanceof Error?e.message:String(e)})}}migrateScoopConfig(e,t){if(e.parentJid===null)return;let n=e.configSchemaVersion??0;if(!(n>=3)){if(n<1&&(e.config={...e.config,visiblePaths:e.config?.visiblePaths??[`/workspace/`]}),n<2&&(e.config={...e.config,writablePaths:e.config?.writablePaths??[`/scoops/${e.folder}/`,`/shared/`]}),n<3){let n=`${cr.root}/`,r=lr(dr(t,e)),i=e.config?.visiblePaths,a=i?.length===1&&i[0]===n;r[0]!==n&&a&&(e.config={...e.config,visiblePaths:r})}e.configSchemaVersion=3}}async ensureRootStructure(){if(this.sharedFs)for(let e of[`/workspace`,`/shared`,`/scoops`,`/home`,`/home/user`,`/tmp`,`/mnt`])try{await this.sharedFs.mkdir(e,{recursive:!0})}catch{}}getGlobalMemory(){return this.memoryStore.getGlobalMemory()}setGlobalMemory(e){return this.memoryStore.setGlobalMemory(e)}appendConeMemory(e,t){return this.memoryStore.appendConeMemory(e,t)}getSharedFS(){return this.sharedFs}getSessionStore(){return this.sessionStore}getConversationStore(){return this.conversationStore}getSudoManager(){return this.sudoManager}setLickManager(e){this.lickManager=e,e.setDiscoveryIgnore?.(e=>this.llmsTxtIgnorePolicy?.ignores(e)??!1),e.setUnitRosterProvider?.(()=>this.getScoops().map(e=>({name:e.name,folder:e.folder}))),globalThis.__slicc_lick_handler=e=>{this.lickManager?.emitEvent(e)}}handleWebhookEvent(e,t,n){return this.lickManager?.handleWebhookEvent(e,t,n)}handleCherryHostEvent(e,t,n){this.lickManager?.emitEvent({type:`cherry`,cherryRuntimeId:e,cherryName:t,cherryOrigin:void 0,body:n,timestamp:new Date().toISOString()})}handlePreviewLick(e){this.lickManager?.emitEvent(e)}observeScoop(e,t){return this.lifecycle.observe(e,t)}muteScoops(e){this.completionService.muteScoops(e)}unmuteScoops(e){return this.completionService.unmuteScoops(e)}isScoopMuted(e){return this.completionService.isScoopMuted(e)}notifyScoopOutcome(e,t){return this.completionService.notifyWithOutcome(e,t)}waitForScoops(e,t){return this.completionService.waitForScoops(e,t)}scheduleScoopWait(e,t,n){return this.completionService.scheduleScoopWait(e,t,n)}async enqueueSudoRequest(e,t){return this.approvalRouter.enqueueSudoRequest(e,t)}async approveDirectedOrUser(e){let{runDirectedApproval:t}=await import(`./directed-approval-DhuKdSBd.js`);return t(e,{scoops:this.scoops,ownerRootOf:e=>this.ownerRootOrDefault(e),enqueue:(e,t,n)=>this.approvalRouter.enqueueSudoRequest(e,t,n),getSharedFs:()=>this.sharedFs,workspaceFor:fr,approveAsUser:async e=>{let t=this.sudoManager;return t?t.approve(e):($.warn(`Guest approval before SudoManager init — failing closed`),WA)}})}async enqueueDirectedApproval(e,t){return this.approveDirectedOrUser({...t,approver:e})}resolveSudoRequest(e,t){return this.approvalRouter.resolveSudoRequest(e,t)}async resolveSudoRequestAndPersist(e,t,n){return this.approvalRouter.resolveSudoRequestAndPersist(e,t,n)}registerNavigateLick(e){return this.lickRegistry.registerNavigate(e)}getDefaultConeFs(){let e=this.defaultRoot();return e?this.lifecycle.getContext(e.jid)?.getFS()??null:null}registerSessionReloadLick(e){return this.lickRegistry.registerSessionReload(e)}registerUpgradeLick(e){return this.lickRegistry.registerUpgrade(e)}registerDiscoveryLick(e){return this.lickRegistry.registerDiscovery(e)}async resolveActionableLick(e,t,n){return await this.lickRegistry.resolve(e,t)||this.resolveSudoRequestAndPersist(e,t,n)}async resolveNavigateHandoffByHuman(e,t){return this.lickRegistry.resolveHandoffByHuman(e,t)}getConeSudoBroker(e){return this.approvalRouter.getConeSudoBroker(e)}listPendingSudoRequests(e){return this.approvalRouter.listPendingSudoRequests(e)}registerScoop(e){return this.lifecycle.register(e)}async persistScoop(e){this.scoops.set(e.jid,e),await sb(e),e.parentJid===null&&await this.lifecycle.syncGelatiereModel().catch(t=>{$.warn(`Failed to follow a persisted root leadership change`,{jid:e.jid,error:t instanceof Error?t.message:String(t)})})}reinitLiveUnit(e){return this.lifecycle.reinitAfterPromote(e)}async rekeyConversation(e,t){await this.conversationStore?.rekey(e,t)}unregisterScoop(e){return this.lifecycle.unregister(e)}getScoops(){return Array.from(this.scoops.values())}getScoop(e){return this.scoops.get(e)}getScoopTabState(e){return this.lifecycle.getTab(e)}defaultRoot(){return O(this.scoops.values())[0]}parentOrDefaultRoot(e){let t=e===void 0?void 0:this.scoops.get(e);return(t?.parentJid?this.scoops.get(t.parentJid):void 0)??this.defaultRoot()}capableApproverOrDefaultRoot(e){let t=e===void 0?void 0:this.scoops.get(e);return er(this.scoops.values(),t)??this.defaultRoot()}ownerRootOrDefault(e){let t=e===void 0?void 0:this.scoops.get(e);return Ln(this.scoops.values(),t)??this.defaultRoot()}getWorkUnits(){return this.workUnits}getLiveUnit(e){return this.lifecycle.getUnit(e)}ensureLiveUnit(e){return this.lifecycle.ensureUnit(e)}async resetFilesystem(){await this.bootRestoreTail,this.lifecycle.stopAndClearAllContexts(),this.sharedFs=await Er.create({dbName:`slicc-fs`,wipe:!0}),this.fsWatcher&&this.sharedFs.setWatcher(this.fsWatcher),await this.ensureRootStructure(),await this.memoryStore.ensureGlobalMemory(),await AT(this.sharedFs).catch(e=>{$.warn(`Failed to re-seed default skills`,{error:e instanceof Error?e.message:String(e)})}),this.sudoManager?.dispose(),this.sudoManager=new Fx({fs:this.sharedFs,watcher:this.fsWatcher,capabilityBroker:this.capabilityBroker,onPolicyReload:e=>{this.lifecycle.syncReadGrants(e),this.approvalRouter.settleGrantedRequests(e)}}),await this.sudoManager.init(),this.llmsTxtIgnorePolicy?.dispose(),this.llmsTxtIgnorePolicy=new Sx(this.sharedFs,this.fsWatcher),await this.llmsTxtIgnorePolicy.init(),this.modelPolicyFile?.dispose(),this.modelPolicyFile=new gE(this.sharedFs,this.fsWatcher),await this.modelPolicyFile.init(),this.lickManager?.setDiscoveryIgnore?.(e=>this.llmsTxtIgnorePolicy?.ignores(e)??!1),this.costTracker.reset(),$.info(`Filesystem reset and defaults re-seeded`)}clearScoopMessages(e,t={}){return this.messageRouter.clearScoopMessages(e,this.lifecycle.getContext(e),t)}clearAllMessages(){return this.messageRouter.clearAllMessages()}handleMessage(e){return this.messageRouter.handleMessage(e)}delegateToScoop(e,t,n){return this.messageRouter.delegateToScoop(e,t,n)}createScoopTab(e){return this.lifecycle.createTab(e)}async destroyScoopTab(e){this.lifecycle.destroyTab(e)}isProcessing(e){return this.lifecycle.getTab(e)?.status===`processing`}getScoopContext(e){return this.lifecycle.getContext(e)}getQueuedMessageIds(e){return this.messageRouter.getQueuedMessageIds(e)}clearQueuedMessages(e){return this.messageRouter.clearQueuedMessages(e)}deleteQueuedMessage(e,t){return this.messageRouter.deleteQueuedMessage(e,t)}async getMessagesForScoop(e){return mb(e)}async recoverInterruptedWork(e){await this.bootRestoreTail;let t=this.interruptedTurns;this.interruptedTurns=null;let n=this.turnJournal;if(!t||t.length===0||!n)return[];let{recoverInterruptedWork:r}=await import(`./interrupted-work-recovery-DkaikSRv.js`);return r(t,{journal:n,getScoop:e=>this.scoops.get(e),getUnit:e=>this.lifecycle.getContext(e),resumeTurn:(e,t,n)=>this.lifecycle.resumeTurn(e,t,n),emitLick:e})}sendPrompt(e,t,n,r,i=[],a){return this.lifecycle.sendPrompt(e,t,n,r,i,a)}stopMessageLoop(){this.messageRouter.stopMessageLoop()}setScoopModel(e,t){return this.lifecycle.setModel(e,t)}syncGelatiereModel(){return this.lifecycle.syncGelatiereModel()}refreshModels(){this.lifecycle.refreshModels()}setScoopThinkingLevel(e,t,n){return this.lifecycle.setThinkingLevel(e,t,n)}reloadAllSkills(){return this.lifecycle.reloadAllSkills()}stopScoop(e){for(let t of Pn(this.scoops.values(),e))this.lifecycle.getContext(t)?.stop(),this.clearQueuedMessages(t).catch(e=>{$.warn(`Failed to clear queued messages on stop`,{jid:t,error:e instanceof Error?e.message:String(e)})})}getSessionCosts(e){return this.costTracker.getSessionCosts(e)}async mergeFoldedCostIntoFrozen(e,t){let n=this.scoops.get(e);if(!n||!this.sharedFs)return!1;try{let{mergeFoldedCostIntoLatestFrozen:e}=await import(`./merge-folded-cost-into-frozen-pKLMgpaS.js`);return await e(this.sharedFs,n,t)}catch(t){return $.warn(`Failed to merge folded agent spend into frozen session`,{jid:e,error:t instanceof Error?t.message:String(t)}),!1}}async getSessionCostsForCommand(e){let t=this.getSessionCosts({includeDropped:e===`all`});if(e===`live`||!this.sharedFs)return t;let{readSessionsIndex:n}=await Promise.resolve().then(()=>dS),r=await n(this.sharedFs);return[...t,...r.map(Rr)]}getModelCosts(e){return this.costTracker.getModelCosts(e)}getBurnRate(e){return this.costTracker.getBurnRate(e)}getContextFills(){return this.costTracker.getContextFills()}async shutdown(){this.stopMessageLoop(),this.idleTimers.clearAll(),this.scheduler?.stop(),this.scheduler=null,this.completionService.shutdown();let e=this.approvalRouter.failAll();e>0&&$.info(`Failed-closed pending sudo requests during shutdown`,{count:e}),await this.bootRestoreTail,await this.lifecycle.destroyAllTabs(),this.lickManager?.setDiscoveryIgnore?.(null),this.llmsTxtIgnorePolicy?.dispose(),this.llmsTxtIgnorePolicy=null,this.modelPolicyFile?.dispose(),this.modelPolicyFile=null,this.sudoManager?.dispose(),this.sudoManager=null,this.unregisterExportService?.(),this.unregisterExportService=null,$.info(`Orchestrator shutdown`)}buildWorkerExportService(){let e=this.conversationStore?new WC(this.conversationStore):null,t=this.sharedFs;return new JS({collection:{listScoops:()=>this.getScoops(),isProcessing:e=>this.isProcessing(e),getAgentMessages:e=>this.getScoopContext(e)?.getAgentMessages()??null,loadPersistedSessions:async()=>await e?.loadAgentSessions()??[],loadUiChatSessions:async()=>await e?.loadChatSessions()??[],wait:e=>new Promise(t=>setTimeout(t,e))},knownSecrets:pC(),snapshotStore:{read:e=>aC(t,e),write:(e,n)=>iC(t,e,n)},vfs:t,getActiveSessionInfo:()=>{let e=this.defaultRoot();return{id:e?.jid??`session-${Date.now()}`,title:e?.name??`Active Session`}},version:`6.201.0`})}};const KA=_(`workflow-run-manager`),qA=`/shared/workflow-runs`,JA=1e3;function YA(e,t){if(t===void 0)return{origin:`terminal`};let n=e.getStartingRoot(t);return n?{origin:`cone`,lickTarget:n.lickTarget}:{origin:`scoop`}}function XA(e){let t=new Map,n=new Map,r=e=>{let r=t.get(e);if(r)for(let t of n.get(e)??[])try{t(r)}catch(e){KA.warn(`observeRun handler threw`,e)}},i=(e,n)=>tj(e,n,t,()=>r(n));async function a(a){let c=a.runId??e.makeRunId(),l=a.sentinel,u=YA(e,a.parentJid),d={id:c,name:a.name,source:a.source,origin:u.origin,lickTarget:u.lickTarget,status:`running`,currentPhase:null,agentsStarted:0,agentsDone:0,logs:[],startedAt:new Date().toISOString(),finishedAt:null,resultPath:null,preview:null,error:null,pid:null};t.set(c,d),$A(t,n);let f=i(a.ctx,c),p=ej(e.processManager,d,c,()=>r(c));return e.runRealm(a.code,[`workflow`,a.filename,c],f).then(e=>o(c,l,e)).catch(e=>s(c,e instanceof Error?e.message:String(e))).finally(()=>p()).catch(e=>KA.warn(`workflow run lifecycle error`,e)),{runId:c}}async function o(t,n,r){let{result:i,hadResult:a}=e.splitResult(r.stdout,n);return r.exitCode===137?c(t,`killed`,null,r.stderr||`killed (SIGKILL)`):r.exitCode!==0||!a?c(t,`error`,null,r.stderr||(a?`exit ${r.exitCode}`:`script produced no result`)):c(t,`done`,i,null)}function s(e,t){return c(e,`error`,null,t)}async function c(n,i,a,o){let s=t.get(n);if(!s||s.status!==`running`&&s.status!==`paused`)return;let c=`${qA}/${n}.json`,u=new Date().toISOString();try{await e.sharedFs.mkdir(qA,{recursive:!0}),await e.sharedFs.writeFile(c,JSON.stringify({name:s.name,status:i,result:i===`done`?a:null,error:o,logs:s.logs,startedAt:s.startedAt,finishedAt:u},null,2)),s.resultPath=c}catch(e){let t=e instanceof Error?e.message:String(e);KA.error(`failed to write run result file`,{runId:n,resultPath:c,error:t}),o=`result file write failed: ${t}`,i===`done`&&(i=`error`)}s.status=i,s.error=o,s.finishedAt=u,s.preview=i===`done`?QA(a):o??``,r(n),l(s)}function l(t){t.origin===`cone`&&e.fireLick({type:`workflow`,targetScoop:t.lickTarget,workflowRunId:t.id,workflowName:t.name??void 0,resultPath:t.resultPath??void 0,preview:t.preview??t.error??void 0,timestamp:new Date().toISOString(),body:{runId:t.id,status:t.status,error:t.error}})}return{start:a,getRun:e=>t.get(e)??null,listRuns:()=>Array.from(t.values()),observeRun(e,r){let i=n.get(e);i||(i=new Set,n.set(e,i)),i.add(r);let a=t.get(e);if(a)try{r(a)}catch(e){KA.warn(`observeRun handler threw on initial state`,e)}return()=>i.delete(r)}}}function ZA(e){let t=XA(e);return globalThis[f]=t,KA.info(`workflow run manager published on globalThis.__slicc_workflows`),t}function QA(e){return((typeof e==`string`?e:JSON.stringify(e))??`null`).slice(0,200)}function $A(e,t,n=100){if(e.size<=n)return;let r=[...e.values()].filter(e=>e.status!==`running`&&e.status!==`paused`).sort((e,t)=>(e.finishedAt??e.startedAt).localeCompare(t.finishedAt??t.startedAt)),i=e.size-n;for(let n of r){if(i<=0)break;e.delete(n.id),t.delete(n.id),i--}}function ej(e,t,n,r){let i=e.on(`spawn`,e=>{t.pid===null&&e.argv.includes(n)&&(t.pid=e.pid,r(),i())});return i}function tj(e,t,n,r){let i=e.exec;if(!i)return e;let a=(async(e,a)=>e===`__wf_progress`?nj(n,t,a?.args??[],r):e===`agent`?rj(n,t,()=>i(e,a),r):i(e,a));return a.spawn=e.exec.spawn,{...e,exec:a}}function nj(e,t,n,r){let i=e.get(t);if(i&&i.status===`running`){let[e,t=``]=n;e===`phase`?(i.currentPhase=t,i.logs.push(t)):e===`log`&&i.logs.push(t),i.logs.length>JA&&i.logs.splice(0,i.logs.length-JA),r()}return{stdout:``,stderr:``,exitCode:0}}async function rj(e,t,n,r){let i=e.get(t);i&&i.status===`running`&&(i.agentsStarted++,r());try{return await n()}finally{let n=e.get(t);n&&n.status===`running`&&(n.agentsDone++,r())}}const ij=new Set([`catalog`,`com`,`html`,`http`,`https`,`json`,`known`,`llms`,`net`,`org`,`txt`,`well`,`www`]);function aj(e,t,n){let r=oj(e);if(r.length===0)return;let i,a=0,o=!1;for(let e of t){let t=lj(n(e),r);t>a?(i=e,a=t,o=!1):t>0&&t===a&&(o=!0)}return o?void 0:i}function oj(e){let t=new Map;return sj(t,e.discoveryOrigin),sj(t,e.discoveryUrl),[...t.values()]}function sj(e,t){if(t){cj(e,t.toLowerCase().replace(/\/$/,``),12,`substring`);try{let n=new URL(t),r=n.hostname.toLowerCase().replace(/^www\./,``);cj(e,r,8,`hostname`);for(let t of`${r}${n.pathname}${n.search}`.split(/[^a-z0-9]+/).filter(e=>e.length>=4&&!ij.has(e)))cj(e,t,1,`substring`)}catch{}}}function cj(e,t,n,r){if(t.length===0)return;let i=`${r}:${t}`,a=e.get(i);(!a||n>a.weight)&&e.set(i,{text:t,weight:n,match:r})}function lj(e,t){let n=e.slice(-8),r=0;for(let[e,i]of n.entries()){let a=dj(i);if(a.length===0)continue;let o=8-(n.length-1-e);for(let e of t)uj(a,e)&&(r+=e.weight*o)}return r}function uj(e,t){if(t.match===`substring`)return e.includes(t.text);let n=t.text.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);return RegExp(`(^|[^a-z0-9.-])(?:www\\.)?${n}($|[^a-z0-9.-])`).test(e)}function dj(e){try{return JSON.stringify(e)?.toLowerCase()??``}catch{return``}}function fj(e,t,n=e=>console.warn(`Early conversation hydration failed`,e)){e.setOnConversationsReady(async()=>{try{await t.hydrateBuffersFromRecords(),t.publishHydratedTranscripts()}catch(e){n(e)}})}var pj=class{kind=`proc`;source=void 0;profile=void 0;mountId;pm;closed=!1;constructor(e,t={}){this.pm=e,this.mountId=t.mountId??`proc-${Date.now().toString(36)}`}async readDir(e){this.assertOpen(e);let t=gj(e);if(t.length===0){let e=this.pm.list(),t=e.map(e=>({name:String(e.pid),kind:`directory`}));return e.some(e=>e.pid===1)||t.push({name:`1`,kind:`directory`}),t.sort((e,t)=>Number(e.name)-Number(t.name)),t.push({name:hj,kind:`file`,size:this.renderTable().length,lastModified:Date.now()}),t}if(t.length===1){if(t[0]===hj)throw new k(`ENOTDIR`,`not a directory`,e);let n=_j(t[0]);if(n===null||!this.pidExists(n))throw new k(`ENOENT`,`no such file or directory`,e);return mj.map(e=>({name:e,kind:`file`,size:this.fileSize(n,e),lastModified:this.fileMtime(n)}))}throw new k(`ENOTDIR`,`not a directory`,e)}async readFile(e){this.assertOpen(e);let t=gj(e);if(t.length===1&&t[0]===hj)return new TextEncoder().encode(this.renderTable());if(t.length!==2)throw new k(`EISDIR`,`is a directory`,e);let n=_j(t[0]);if(n===null||!this.pidExists(n))throw new k(`ENOENT`,`no such file or directory`,e);let r=t[1];if(!mj.includes(r))throw new k(`ENOENT`,`no such file or directory`,e);let i=this.renderProcFile(n,r);return new TextEncoder().encode(i)}async writeFile(e){throw new k(`EACCES`,`read-only filesystem`,e)}async stat(e){this.assertOpen(e);let t=gj(e);if(t.length===0)return{kind:`directory`,size:0,mtime:0};if(t.length===1){if(t[0]===hj)return{kind:`file`,size:this.renderTable().length,mtime:Date.now()};let n=_j(t[0]);if(n===null||!this.pidExists(n))throw new k(`ENOENT`,`no such file or directory`,e);return{kind:`directory`,size:0,mtime:this.fileMtime(n)}}if(t.length===2){let n=_j(t[0]);if(n===null||!this.pidExists(n))throw new k(`ENOENT`,`no such file or directory`,e);let r=t[1];if(!mj.includes(r))throw new k(`ENOENT`,`no such file or directory`,e);return{kind:`file`,size:this.fileSize(n,r),mtime:this.fileMtime(n)}}throw new k(`ENOENT`,`no such file or directory`,e)}async mkdir(e){throw new k(`EACCES`,`read-only filesystem`,e)}async remove(e){throw new k(`EACCES`,`read-only filesystem`,e)}async refresh(){return{added:[],removed:[],changed:[],unchanged:0,errors:[]}}describe(){return{displayName:`/proc`,extra:`kernel processes (read-only)`}}async close(){this.closed=!0}assertOpen(e){if(this.closed)throw new k(`EBADF`,`mount closed`,e)}pidExists(e){return e===1||this.pm.get(e)!==null}fileSize(e,t){return this.renderProcFile(e,t).length}fileMtime(e){if(e===1)return 0;let t=this.pm.get(e);return t?t.finishedAt??t.startedAt:0}renderTable(){let e={stats:this.pm.stats(),processes:this.pm.list().map(e=>({pid:e.pid,ppid:e.ppid,kind:e.kind,state:Sj(e.status),status:e.status,argv:e.argv.join(` `),cwd:e.cwd,owner:Cj(e),startedAt:e.startedAt,finishedAt:e.finishedAt,exitCode:e.exitCode}))};return JSON.stringify(e)+`
1179
- `}renderProcFile(e,t){if(e===1)return wj(t);let n=this.pm.get(e);switch(t){case`status`:return vj(n);case`cmdline`:return yj(n);case`cwd`:return bj(n);case`stat`:return xj(n)}}};const mj=[`status`,`cmdline`,`cwd`,`stat`],hj=`table`;function gj(e){return e.replace(/^\/+/,``).replace(/\/+$/,``).split(`/`).filter(Boolean)}function _j(e){let t=Number.parseInt(e,10);return!Number.isFinite(t)||String(t)!==e?null:t}function vj(e){let t=[`Name:\t${e.kind}`,`Pid:\t${e.pid}`,`PPid:\t${e.ppid}`,`State:\t${Sj(e.status)} (${e.status})`,`Owner:\t${Cj(e)}`,`StartedAt:\t${new Date(e.startedAt).toISOString()}`];return e.finishedAt!==null&&t.push(`FinishedAt:\t${new Date(e.finishedAt).toISOString()}`),e.terminatedBy!==null&&t.push(`TerminatedBy:\t${e.terminatedBy}`),e.exitCode!==null&&t.push(`ExitCode:\t${e.exitCode}`),t.push(`Cmdline:\t${e.argv.join(` `)}`),t.join(`
1165
+ `)&&t.pop(),t}function wO(e){return e<1024?`${e}B`:e<1048576?`${(e/1024).toFixed(1)}KB`:`${(e/1048576).toFixed(1)}MB`}function TO(e,t={}){let n=t.maxLines??2e3,r=t.maxBytes??51200,i=Buffer.byteLength(e,`utf-8`),a=CO(e),o=a.length;if(o<=n&&i<=r)return{content:e,truncated:!1,truncatedBy:null,totalLines:o,totalBytes:i,outputLines:o,outputBytes:i,lastLinePartial:!1,firstLineExceedsLimit:!1,maxLines:n,maxBytes:r};if(Buffer.byteLength(a[0],`utf-8`)>r)return{content:``,truncated:!0,truncatedBy:`bytes`,totalLines:o,totalBytes:i,outputLines:0,outputBytes:0,lastLinePartial:!1,firstLineExceedsLimit:!0,maxLines:n,maxBytes:r};let s=[],c=0,l=`lines`;for(let e=0;e<a.length&&e<n;e++){let t=a[e],n=Buffer.byteLength(t,`utf-8`)+ +(e>0);if(c+n>r){l=`bytes`;break}s.push(t),c+=n}s.length>=n&&c<=r&&(l=`lines`);let u=s.join(`
1166
+ `),d=Buffer.byteLength(u,`utf-8`);return{content:u,truncated:!0,truncatedBy:l,totalLines:o,totalBytes:i,outputLines:s.length,outputBytes:d,lastLinePartial:!1,firstLineExceedsLimit:!1,maxLines:n,maxBytes:r}}function EO(e,t={}){let n=t.maxLines??2e3,r=t.maxBytes??51200,i=Buffer.byteLength(e,`utf-8`),a=CO(e),o=a.length;if(o<=n&&i<=r)return{content:e,truncated:!1,truncatedBy:null,totalLines:o,totalBytes:i,outputLines:o,outputBytes:i,lastLinePartial:!1,firstLineExceedsLimit:!1,maxLines:n,maxBytes:r};let s=[],c=0,l=`lines`,u=!1;for(let e=a.length-1;e>=0&&s.length<n;e--){let t=a[e],n=Buffer.byteLength(t,`utf-8`)+ +(s.length>0);if(c+n>r){if(l=`bytes`,s.length===0){let e=DO(t,r);s.unshift(e),c=Buffer.byteLength(e,`utf-8`),u=!0}break}s.unshift(t),c+=n}s.length>=n&&c<=r&&(l=`lines`);let d=s.join(`
1167
+ `),f=Buffer.byteLength(d,`utf-8`);return{content:d,truncated:!0,truncatedBy:l,totalLines:o,totalBytes:i,outputLines:s.length,outputBytes:f,lastLinePartial:u,firstLineExceedsLimit:!1,maxLines:n,maxBytes:r}}function DO(e,t){let n=Buffer.from(e,`utf-8`);if(n.length<=t)return e;let r=n.length-t;for(;r<n.length&&(n[r]&192)==128;)r++;return n.slice(r).toString(`utf-8`)}const OO=_(`tool:bash`),kO=40960,AO=1048576,jO=`\0slicc-img:`;function MO(e){let t=xn(e).filter(e=>e.kind===`image`);if(t.length===0)return{text:e,markers:new Map};let n=new Set,r=AO;for(let e=t.length-1;e>=0;e--){let i=t[e].marker.length;if(i>r&&n.size>0)break;r-=i,n.add(e)}let i=new Map,a=``,o=0;return t.forEach((t,r)=>{if(a+=e.slice(o,t.index),n.has(r)){let e=`${jO}${r}`;i.set(e,t.marker),a+=e}else a+=`[image dropped: a newer image in this command used up the ${AO/1024}KB image budget. View it on its own to see it.]`;o=t.index+t.marker.length}),a+=e.slice(o),{text:a,markers:i}}function NO(e){let t=xn(e).filter(e=>e.kind===`image`);if(t.length===0)return e;let n=``,r=0;for(let i of t)n+=`${e.slice(r,i.index)}[image]`,r=i.index+i.marker.length;return n+e.slice(r)}function PO(e){return e.replaceAll(RegExp(`${jO}\\d+`,`g`),`[image]`)}function FO(e,t){if(t.size===0)return e;let n=e;for(let[e,r]of t)n.includes(e)&&(n=n.replace(e,()=>r));return n}async function IO(e,t,n,r){let{text:i,markers:a}=MO(e),o=EO(i,{maxBytes:kO});if(!o.truncated)return FO(i,a);let s=`showing the last ${wO(o.outputBytes)} of ${wO(o.totalBytes)} (${o.totalLines} lines)`,c=`${n}/bash-output-${r()}.txt`;try{return await t.writeFile(c,PO(i)),FO(`${o.content}\n\n[Output truncated: ${s}. Full output written to ${c} — read specific ranges with \`sed -n 'START,ENDp' ${c}\`, \`tail -n +N ${c}\`, or \`grep\`.]`,a)}catch(e){return OO.warn(`Failed to persist full bash output`,{error:e instanceof Error?e.message:String(e)}),FO(`${o.content}\n\n[Output truncated: ${s}. Re-run piping through \`head\`/\`tail\`/\`grep\`/\`sed -n\` to narrow the output.]`,a)}}const LO=new Set([`grep`,`egrep`,`fgrep`,`rg`]);function RO(e){let t=``;for(let n of e.parts)switch(n.type){case`Literal`:case`SingleQuoted`:case`Escaped`:t+=n.value;break;case`DoubleQuoted`:for(let e of n.parts){if(e.type!==`Literal`&&e.type!==`Escaped`)return null;t+=e.value}break;default:return null}return t}function zO(e){let t=e.statements[e.statements.length-1],n=t?.pipelines[t.pipelines.length-1];if(!n||n.negated)return null;let r=n.commands[n.commands.length-1];if(r?.type!==`SimpleCommand`||!r.name)return null;let i=RO(r.name);if(i!==`command`)return i;let a=r.args[0];return a?RO(a):null}function BO(e,t,n,r){if(n!==1||r.trim())return!1;let i;try{i=zO(e.getBash().transform(t).ast)}catch{return!1}return i!==null&&LO.has(i)}function VO(e,t){let n=e.options.annotateResult?.();return n?`${t.endsWith(`
1168
+ `)||t.length===0?t:`${t}\n`}${n}\n`:t}function HO(e){if(!(typeof e!=`number`||!Number.isFinite(e)||e<0))return e}function UO(e){return`Execute a bash command. Full shell with pipes, redirects, chaining, control flow. Includes: grep, rg, sed, awk, jq, find, curl, git, node, python3, sqlite3, open (--view for vision), playwright-cli (browser automation). Run \`commands\` for full list. Output is capped at ${kO/1024}KB (the tail is kept); when truncated the full output is written to a temp file named in the result so you can page it. Inline images (\`open --view\`) do not count against that cap — up to ${AO/1024}KB of images per command reaches you as pictures, not base64. A command still running after background_after seconds (default ${e}) is detached: you get a job id at once and a Background Command lick delivers its exit code and output later, so a stuck command never wedges the turn. A pipeline reports the last stage's exit (bash default); when any stage is non-zero the result includes \`pipeline: 1 0\` with each stage's code.`}function WO(e){return{type:`object`,properties:{command:{type:`string`,description:`The bash command to execute.`},timeout:{type:`number`,description:`Hard ceiling in seconds: the command is killed and this call returns an error — no job, no lick. Omit for no ceiling (the default), which detaches a slow command instead of killing it.`},background_after:{type:`number`,description:`Seconds to wait before detaching the command. Defaults to ${e}. Use 0 to detach immediately (dev servers, watchers), or a large value when you must have the output in this turn. A smaller timeout wins: the command is killed, not detached.`}},required:[`command`]}}function GO(e){return{content:`Command timed out after ${e}s and was killed; no output was captured. Re-run it with a larger timeout, a larger background_after so it detaches instead of dying, or narrow the command so it finishes sooner.`,isError:!0}}function KO(e,t,n){let r=new AbortController,i=e.options.jobHost?.spawn(t)??null,a=()=>r.abort();n?.aborted?r.abort():n?.addEventListener(`abort`,a,{once:!0}),i&&(i.signal.aborted?r.abort():i.signal.addEventListener(`abort`,()=>r.abort(),{once:!0}));let o=[],s,c,l=Promise.resolve(),u=()=>{if(s===void 0||c===void 0)return;let t=s,n=c,r=o.join(``);l=l.then(async()=>{let i=await QO(e,n,r);await e.fs.writeFile(t,i)}).catch(e=>OO.warn(`Failed to tee background bash output`,{jobId:n,outputPath:t,error:e instanceof Error?e.message:String(e)}))};return{job:i,controller:r,settled:e.shell.executeCommand(t,r.signal,i?.pid,void 0,{capturePipeStatus:!0,onOutput:e=>{o.push(e),u()}}).then(e=>({ok:!0,result:e}),e=>({ok:!1,error:e instanceof Error?e.message:String(e)})),releaseTurnSignal:()=>n?.removeEventListener(`abort`,a),getTeedOutput:()=>o.join(``),startPersisting:(t,n)=>{s=t,c=n,l=l.then(()=>e.swept).then(()=>void 0),u()},flushPersist:()=>l,killedByTimeout:!1}}function qO(e,t){t===`timeout`&&(e.killedByTimeout=!0),e.job?.kill(),e.controller.abort(),e.job?.exit(null)}function JO(e,t){e.job?.exit(e.job.signal.aborted?null:t)}function YO(e,t,n,r,i){let a=i===void 0?``:` Its ${i}s timeout still applies.`;return{content:`Still running after ${n}s — detached as background job ${e}. This turn is NOT blocked on it: continue with other work, and do not re-run the command. A "Background Command" lick will arrive with the exit code and a preview once it finishes, and its full output is being written to ${r} as it runs.${t===void 0?``:` Pid ${t}: \`ps\` lists it, \`kill ${t}\` stops it.`}${a}`}}function XO(e,t,n,r={}){let i=0,a=0,o=import(`./bash-job-journal-DEe5YuRn.js`),s=o.then(({createBashJobJournal:e})=>e(t,n,void 0,(e,t)=>OO.warn(e,{tempDir:n,error:t instanceof Error?t.message:String(t)}))),c={shell:e,fs:t,tempDir:n,options:r,defaultBackgroundAfter:HO(r.defaultBackgroundAfterSeconds)??600,nextOutputSeq:()=>i+=1,nextJobId:()=>`bg-${a+=1}`,journal:s,swept:Promise.resolve()};return c.swept=Promise.all([o,s]).then(([{KERNEL_RESTART_EXIT_CODE:e},t])=>t.sweep((t,n)=>ZO(c,t,n,e))).catch(e=>OO.warn(`Could not sweep orphaned bash jobs`,{tempDir:n,error:e})),{name:`bash`,description:UO(c.defaultBackgroundAfter),inputSchema:WO(c.defaultBackgroundAfter),execute:(e,t)=>ik(c,e,t)}}function ZO(e,t,n,r){let i={type:`bash`,bashJobId:t.jobId,bashCommand:t.command,bashExitCode:r,...t.pid===void 0?{}:{bashJobPid:t.pid},resultPath:t.outputPath,preview:n,...e.options.targetScoop?{targetScoop:e.options.targetScoop}:{},timestamp:new Date().toISOString(),body:{jobId:t.jobId,pid:t.pid??null,command:t.command,exitCode:r,resultPath:t.outputPath,killedByKernelRestart:!0}};OO.warn(`Background bash job was killed by a kernel restart`,{jobId:t.jobId,command:t.command,startedAt:t.startedAt});let a=n=>{if(e.options.fireLick?.(i)===!1){if(n<=1){OO.warn(`No lick sink for a kernel-restart job report; output file still has it`,{jobId:t.jobId,outputPath:t.outputPath});return}setTimeout(()=>a(n-1),2e3)}};a(30)}async function QO(e,t,n){let r=e.options.scrubOutput;if(!r||!n)return n;try{return await r(n)}catch(e){return OO.warn(`Background bash output scrub failed; withholding output`,{jobId:t,error:e instanceof Error?e.message:String(e)}),`[output withheld: secret scrub unavailable]`}}function $O(e){return e.ok?e.result.exitCode===124&&/execution aborted/i.test(e.result.stderr):/execution aborted/i.test(e.error)}function ek(e,t){return e===void 0?`--- killed (exit ${t}) ---\n`:`--- killed after ${e}s (exit ${t}) ---\n`}async function tk(e,t,n,r,i,a,s,c){await s.flushPersist();let l=s.killedByTimeout||$O(a),u,d;if(l){let e=s.getTeedOutput();d=124,u=`${e.endsWith(`
1169
+ `)||e.length===0?e:`${e}\n`}${ek(c,d)}`}else if(a.ok)u=o([a.result.stdout,a.result.stderr].filter(Boolean).join(``)||`(exit code: ${a.result.exitCode})`,a.result.pipeStatus),d=a.result.exitCode;else{let e=s.getTeedOutput();d=1,u=e?`${e.endsWith(`
1170
+ `)?e:`${e}\n`}Shell error: ${a.error}`:`Shell error: ${a.error}`}let f=await QO(e,t,VO(e,u)),p;try{await e.fs.writeFile(i,f),p=i}catch(e){OO.warn(`Failed to persist background bash output`,{jobId:t,outputPath:i,error:e instanceof Error?e.message:String(e)})}if(!e.options.fireLick){OO.warn(`Background bash job finished with no lick sink`,{jobId:t,exitCode:d});return}let m=EO(NO(f),{maxBytes:2048});e.options.fireLick({type:`bash`,bashJobId:t,bashCommand:r,bashExitCode:d,...n===void 0?{}:{bashJobPid:n},resultPath:p,preview:m.content,...e.options.targetScoop?{targetScoop:e.options.targetScoop}:{},timestamp:new Date().toISOString(),body:{jobId:t,pid:n??null,command:r,exitCode:d,resultPath:p??null}})}function nk(e,t,n,r,i,a){let o=e.nextJobId(),s=t.job?.pid,c=`${e.tempDir}/bash-${o}.txt`;t.startPersisting(c,o);let l=Promise.all([e.journal,e.swept]).then(([e])=>e.record({jobId:o,pid:s,command:n,outputPath:c,startedAt:new Date().toISOString()})),u=()=>l.then(()=>e.journal).then(e=>e.clear(o)).catch(e=>OO.warn(`Could not journal a detached bash job`,{jobId:o,error:e})),d=i===void 0?void 0:i-a,f=d===void 0?void 0:setTimeout(()=>qO(t,`timeout`),d*1e3);return t.settled.then(r=>(f!==void 0&&clearTimeout(f),JO(t,t.killedByTimeout?124:r.ok?r.result.exitCode:1),tk(e,o,s,n,c,r,t,i))).catch(e=>OO.error(`Background bash delivery failed`,{jobId:o,error:e})).then(u),OO.info(`Bash command detached to background`,{command:n,jobId:o,pid:s,killAfter:d}),YO(o,s,r,c,i)}async function rk(e,t,n){OO.debug(`Result`,{exitCode:n.exitCode,stdoutLength:n.stdout.length,stderrLength:n.stderr.length});let r=``;return n.stdout&&(r+=n.stdout),n.stderr&&(r+=n.stderr),r||=`(exit code: ${n.exitCode})`,r=VO(e,o(r,n.pipeStatus)),{content:await IO(r,e.fs,e.tempDir,e.nextOutputSeq),isError:n.exitCode!==0&&!BO(e.shell,t,n.exitCode,n.stderr)}}async function ik(e,t,n){let r=t.command,i=HO(t.timeout),a=HO(t.background_after)??e.defaultBackgroundAfter;OO.debug(`Execute`,{command:r,timeoutSeconds:i,backgroundAfter:a});let o=KO(e,r,n),s=i!==void 0&&i<=a,c=s?i:a,l,u=new Promise(e=>{l=setTimeout(()=>e(`elapsed`),c*1e3)});try{let t=await Promise.race([o.settled,u]);return t===`elapsed`&&s?(qO(o,`timeout`),OO.warn(`Bash command timed out`,{command:r,timeoutSeconds:c,pid:o.job?.pid}),GO(c)):t===`elapsed`?nk(e,o,r,c,i,a):(JO(o,t.ok?t.result.exitCode:1),t.ok?await rk(e,r,t.result):(OO.error(`Error`,{command:r,error:t.error}),{content:`Shell error: ${t.error}`,isError:!0}))}finally{l!==void 0&&clearTimeout(l),o.releaseTurnSignal()}}const ak={type:`object`,required:[`path`,`edits`],properties:{path:{type:`string`},edits:{type:`array`,items:{type:`object`,required:[`oldText`,`newText`],properties:{oldText:{type:`string`},newText:{type:`string`}}}}}};function ok(e){if(!e||typeof e!=`object`||Array.isArray(e))return!1;let t=e;return typeof t.oldText==`string`&&typeof t.newText==`string`}function sk(e){if(!e||typeof e!=`object`)return e;let t=e;if(typeof t.edits==`string`)try{let e=JSON.parse(t.edits);Array.isArray(e)?t.edits=e:ok(e)&&(t.edits=[e])}catch{}else ok(t.edits)&&(t.edits=[t.edits]);if(typeof t.oldText!=`string`||typeof t.newText!=`string`)return t;let n=Array.isArray(t.edits)?[...t.edits]:[];n.push({oldText:t.oldText,newText:t.newText});let{oldText:r,newText:i,...a}=t;return{...a,edits:n}}function ck(e,t=`/workspace`){return{name:`edit`,description:`Edit one file using exact replacements. Each oldText must be unique in the original file; edits must not overlap. Combine changes to the same block in one edit.`,inputSchema:ak,prepareArguments:sk,async execute(n,r){let{executePiEdit:i}=await import(`./pi-edit-execution-DhrrHmSn.js`);return i(e,t,n,r)}}}async function lk(e,t,n){if(Fr(En(t)))return null;try{let r=await e.readTextFile(t);if(n.length<=262144)return r===n?null:`Write did not land: ${t} content mismatch (expected ${n.length} chars, got ${r.length})`;if(r.length!==n.length)return`Write did not land: ${t} content mismatch (expected ${n.length} chars, got ${r.length})`;let i=4096;return r.slice(0,i)!==n.slice(0,i)||r.slice(-4096)!==n.slice(-4096)?`Write did not land: ${t} content mismatch (head/tail sample)`:null}catch(e){return`Write did not land: ${t} is not readable (${e instanceof Error?e.message:String(e)})`}}const uk=_(`tool:fs`);function dk(e,t=`/workspace`){return[fk(e),pk(e),ck(e,t)]}function fk(e){return{name:`read_file`,description:`Read a file's contents. Output is capped at 2000 lines or ${SO/1024}KB (whichever is hit first); use offset/limit for large files and the \`offset=N\` in the footer to page through the rest.`,inputSchema:{type:`object`,properties:{path:{type:`string`,description:`Absolute path to the file to read.`},offset:{type:`number`,description:`Line number to start reading from (1-based). Optional.`},limit:{type:`number`,description:`Maximum number of lines to read. Optional.`}},required:[`path`]},async execute(t){let n=t.path,r=t.offset??1,i=t.limit;uk.debug(`Read`,{path:n,offset:r,limit:i});try{let t=(await e.readTextFile(n)).split(`
1171
+ `),a=t.length,o=Math.max(0,r-1),s=o+1;if(o>=t.length)return{content:`Offset ${r} is beyond end of file (${a} lines total)`,isError:!0};let c=i===void 0?t.slice(o):t.slice(o,Math.min(o+i,t.length)),l=i===void 0?void 0:c.length,u=TO(c.join(`
1172
+ `));if(u.firstLineExceedsLimit)return{content:`[Line ${s} is ${wO(new TextEncoder().encode(t[o]??``).length)}, exceeds ${wO(SO)} limit. Use bash: sed -n '${s}p' ${n} | head -c ${SO}]`};let d=u.content,f=``;if(u.truncated){let e=s+u.outputLines-1,t=e+1;f=u.truncatedBy===`lines`?`\n\n[Showing lines ${s}-${e} of ${a}. Use offset=${t} to continue.]`:`\n\n[Showing lines ${s}-${e} of ${a} (${wO(SO)} limit). Use offset=${t} to continue.]`}else l!==void 0&&o+l<t.length&&(f=`\n\n[${t.length-(o+l)} more lines in file. Use offset=${o+l+1} to continue.]`);return{content:d+f}}catch(e){let t=e instanceof Error?e.message:String(e);return uk.error(`Read failed`,{path:n,error:t}),{content:t,isError:!0}}}}}function pk(e){return{name:`write_file`,description:`Write content to a file. Creates the file if it does not exist, or overwrites it if it does. Parent directories are created automatically.`,inputSchema:{type:`object`,properties:{path:{type:`string`,description:`Absolute path to the file to write.`},content:{type:`string`,description:`The content to write to the file.`}},required:[`path`,`content`]},async execute(t){let n=t.path,r=t.content;uk.debug(`Write`,{path:n,contentLength:r.length});try{await e.writeFile(n,r);let t=await lk(e,n,r);return t?(uk.error(`Write durability check failed`,{path:n,error:t}),{content:t,isError:!0}):{content:`File written: ${n}`}}catch(e){let t=e instanceof Error?e.message:String(e);return uk.error(`Write failed`,{path:n,error:t}),{content:t,isError:!0}}}}}const mk={type:`object`,properties:{path:{type:`string`,description:`Absolute path of the memory file (a CLAUDE.md memory or a curation draft).`},content:{type:`string`,description:"Complete new file content (whole-file rewrite). Exclusive with `edits`."},edits:{type:`array`,description:"Exact replacements applied in order; each oldText must occur exactly once. Exclusive with `content`.",items:{type:`object`,required:[`oldText`,`newText`],properties:{oldText:{type:`string`},newText:{type:`string`}}}}},required:[`path`]};function hk(e,t){return{name:si,description:"Write a memory file — the only tool that may. Enforces the memory budget (over budget, a write must shrink the file) and reports the size that landed plus the remaining room or overage, so no `wc -c` turn is needed. Pass `content` for a rewrite or `edits` for exact replacements.",inputSchema:mk,async execute(n){let{executeMemoryWrite:r}=await import(`./memory-write-execute-DaTYSj3P.js`);return r(e,t,n)}}}function gk(){return null}const _k=_(`tool:request-secret`);async function vk(e,t){let n=gk();if(n)return n(e);let r=t.callPanelRpc??await yk();return r?r(e):{stored:!1,reason:`unavailable`}}async function yk(){let{getPanelRpcClient:e}=await import(`./panel-rpc-DW7W4w6_.js`).then(e=>e.a),t=e();return t?e=>t.call(`secret-request`,e,{timeoutMs:3e5}):null}function bk(e){try{return e.getProvider?.()||void 0}catch(e){_k.warn(`could not resolve this unit’s provider for the secret prompt`,{error:e instanceof Error?e.message:String(e)});return}}function xk(e){if(!Array.isArray(e))return;let t=e.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(e=>e.length>0);return t.length>0?t:void 0}function Sk(e,t){let n=[`The user stored the secret "${e.name}".`,`Scope: ${e.domains.join(`, `)} — it is only unmasked for requests to these hosts.`,e.persisted?`Lifetime: saved (survives this session).`:`Lifetime: this session only (held in memory).`];return e.maskedValue?(n.push(`Masked value: ${e.maskedValue}`,`Use the masked value wherever the credential goes (headers, request bodies). SLICC substitutes the real value at the network boundary. You will never see the real value.`),t&&n.push(`It is also available as $${e.name} in bash.`)):n.push(`The store did not report a masked value; run \`secret get ${e.name}\` to read it.`),n.join(`
1173
+ `)}function Ck(e){switch(e.reason){case`cancelled`:return`The user dismissed the secret prompt — nothing was stored. Do not retry; ask what to do instead.`;case`unavailable`:return"This float cannot prompt for a secret (no secret-entry surface). Ask the user to add it from the leader UI or with `secret set`.";default:return`The secret could not be stored${e.detail?`: ${e.detail}`:``}.`}}function wk(e={}){return{name:`request_secret`,description:`Ask the user for a credential (API key, token, password) through a secure prompt. You never receive the real value: the result carries only the secret name, a masked stand-in to use in requests, and the domains it may be sent to. Use this instead of asking for a credential in chat, which would put it in the transcript.`,inputSchema:{type:`object`,properties:{name:{type:`string`,description:`Suggested secret name, e.g. GITHUB_TOKEN. Use an uppercase POSIX identifier so it is also available as $NAME in bash. The user can change it.`},reason:{type:`string`,description:`One plain sentence saying what the credential is for. Shown verbatim to the user.`},domains:{type:`array`,items:{type:`string`},description:`Suggested hosts the value may be sent to, e.g. ["api.github.com", "*.github.com"]. Be as narrow as the task allows; the user reviews and can edit this.`},persist:{type:`boolean`,description:`Suggest keeping the secret beyond this session. Defaults to false (session-only).`}},required:[`name`,`reason`]},async execute(t){let n=typeof t.name==`string`?t.name.trim():``,r=typeof t.reason==`string`?t.reason.trim():``;if(!n||!r)return{content:"request_secret needs both `name` and `reason`.",isError:!0};let i={name:n,reason:r,domains:xk(t.domains),persist:t.persist===!0,requester:e.requester,provider:bk(e)},a;try{a=await vk(i,e)}catch(e){let t=e instanceof Error?e.message:String(e);return _k.error(`secret request failed`,{name:n,error:t}),{content:`The secret prompt failed: ${t}`,isError:!0}}if(!a.stored)return{content:Ck(a),isError:!0};let o=Tk(a.name,a.maskedValue,e);return _k.info(`secret stored via request_secret`,{name:a.name,persisted:a.persisted}),{content:Sk(a,o)}}}}function Tk(e,t,n){if(!n.setEnv||!t||!g(e))return!1;try{return n.setEnv(e,t),!0}catch(t){return _k.warn(`could not inject the masked value into the shell env`,{name:e,error:t instanceof Error?t.message:String(t)}),!1}}const Ek=_(`scoop-management-tools`),Dk=`cross_cone`;function Ok(e){return Fn(e.getScoops(),e.scoop.jid)}function kk(e){let t=new Set;for(let n of Ok(e))n.jid!==e.scoop.jid&&n.parentJid!==null&&t.add(n.jid);return t}function Ak(e){let t=zn(e.getScoops());return t!==void 0&&t.jid===e.scoop.jid}function jk(e){let t=e.getScoops(),n=kk(e),r=Ak(e),i=[];for(let e of t){if(e.parentJid===null)continue;if(n.has(e.jid)){i.push({scoop:e,relation:`own`});continue}if(!r)continue;let a=tr(t,e);a.kind!==`cycle`&&i.push({scoop:e,relation:a.kind===`root`?`foreign`:`inherited`})}return i}function Mk(e){return t=>t.folder===e||t.name===e}function Nk(e,t){let n=jk(t);return n.find(t=>t.scoop.folder===e)??n.find(t=>t.relation===`own`&&t.scoop.name===e)??n.find(t=>t.scoop.name===e)}function Pk(e,t){let n=[],r=[];for(let i of e){let e=Nk(i,t);e?n.push(e):r.push(i)}return{resolved:n,unknown:r}}function Fk(e,t){return Ln(e.getScoops(),t.scoop)?.folder??`unknown`}function Ik(e,t){return t.relation===`inherited`?`inherited (its owning cone is gone)`:`owned by cone "${Fk(e,t)}"`}function Lk(e,t,n,r){let i=e.filter(e=>e.relation!==`own`);return i.length===0||t===!0?null:{content:`Refusing to ${n}: ${i.map(e=>`"${e.scoop.folder}" is ${Ik(r,e)}`).join(`; `)}. Pass ${Dk}: true to act on it anyway.`,isError:!0}}function Rk(e){return{type:`boolean`,description:`Set true to ${e} a scoop you do not own — inherited (its cone is gone) or another cone's. Default false; omitting it on such a scoop is an error, so the choice stays deliberate.`}}const zk=[`command`,`read`,`write`,`secret`];function Bk(e){return`${be(e,{maxLen:50})}-scoop`}function Vk(e){return e===void 0?{ok:!0}:pr(e)?{ok:!0,level:e}:{ok:!1,content:`Invalid thinking level "${e}". Must be one of: ${mr.join(`, `)}.`,isError:!0}}function Hk(e){return e===void 0?{ok:!0}:typeof e!=`number`||!Number.isFinite(e)||e<0?{ok:!1,content:`Invalid background_after "${String(e)}". Must be a number of seconds >= 0.`}:{ok:!0,seconds:e}}function Uk(e,t){if(e===void 0||!t)return{ok:!0,modelId:e};let n=t(e);return n.ok?{ok:!0,modelId:n.selection.modelId,providerId:n.selection.providerId}:{ok:!1,content:`Unknown model "${e}": ${n.error}. Run the "models" shell command to list available model IDs.`,isError:!0}}function Wk(e,t){let n=jk(t).map(e=>e.scoop.folder).join(`, `)||`(none)`;return{content:`Not found in the scoops you can manage (${t.scoop.folder}): ${e.join(`, `)}. Available: ${n}`,isError:!0}}function Gk(e,t,n=``){let r=t?.(e.jid),i=r?.status??`unknown`,a=r?.lastActivity?new Date(r.lastActivity).toLocaleString(`en-US`,{month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`,hour12:!0}):``,o=a?` — ${i} (since ${a})`:` — ${i}`;return e.parentJid===null?`- ${e.assistantLabel} (${e.folder}) [CONE]${o}`:`- ${e.name} (${e.folder})${n}${o}`}async function Kk(e,t){let{text:n,sender:r}=e;return t.onSendMessage(n,r),Ek.info(`Message sent`,{scoopFolder:t.scoop.folder,textLength:n.length}),{content:`Message sent.`}}function qk(e){let{kind:t,detail:n,suggested_pattern:r,reason:i}=e;if(!zk.includes(t))return{ok:!1,result:{content:`Invalid sudo kind "${t}". Must be one of: ${zk.join(`, `)}.`,isError:!0}};if(typeof n!=`string`||n.trim().length===0)return{ok:!1,result:{content:`detail must be a non-empty string.`,isError:!0}};let a=typeof i==`string`?h(i):``;return{ok:!0,request:{kind:t,detail:n,...r?{suggestedPattern:r}:{},...a?{reason:a}:{}}}}function Jk(e){let t=[`Cone decision: ${e.decision}.`];return e.decision===`always`&&e.pattern&&t.push(`Persisted pattern: ${e.pattern}`),e.note&&t.push(`Approver's reason: ${e.note}`),e.decision===`deny`&&t.push(e.note?`Not approved. Address the reason above before asking again; do not retry as-is and do not route around it.`:`Not approved, and no reason was given. Do not retry as-is; ask the cone what would make it acceptable, or move on.`),t.join(`
1174
+ `)}async function Yk(e,t){let n=qk(e);if(!n.ok)return n.result;try{let e=await t.onSudoRequest(n.request);return Ek.info(`Sudo request resolved`,{scoopFolder:t.scoop.folder,kind:n.request.kind,decision:e.decision}),{content:Jk(e)}}catch(e){return{content:`sudo_request failed: ${e instanceof Error?e.message:String(e)}`,isError:!0}}}async function Xk(e,t){let{scoop_name:n,prompt:r,cross_cone:i}=e;if(Mk(n)(t.scoop))return{content:`Cannot feed yourself.`,isError:!0};let a=Nk(n,t);if(!a)return Wk([n],t);let o=Lk([a],i,`feed "${n}"`,t);if(o)return o;try{await t.onFeedScoop(a.scoop.jid,r),Ek.info(`Fed scoop`,{target:a.scoop.folder,relation:a.relation,promptLength:r.length});let e=a.relation===`own`?`You will be notified when it completes.`:`Its completion notice goes to its owner; use scoop_wait (${Dk}: true) for the result.`;return{content:`Task sent to ${a.scoop.folder}. ${e}`}}catch(e){return{content:`Failed to feed scoop: ${e instanceof Error?e.message:String(e)}`,isError:!0}}}function Zk(e,t){return t.relation===`own`?``:t.relation===`inherited`?` [INHERITED]`:` [FOREIGN: ${Fk(e,t)}]`}async function Qk(e){let t=new Map(jk(e).map(e=>[e.scoop.jid,e])),n=e.getScoops().filter(n=>n.jid===e.scoop.jid||t.has(n.jid));return n.length===0?{content:`No scoops registered.`}:{content:`Registered scoops:\n${n.map(n=>{let r=t.get(n.jid);return Gk(n,e.getScoopTabState,r?Zk(e,r):``)}).join(`
1175
+ `)}`}}function $k({name:e,folder:t,model:n,modelProviderId:r,visiblePaths:i,writablePaths:a,workspaceMode:o,allowedCommands:s,thinkingLevel:c,backgroundAfterSeconds:l,parentJid:u,defaultVisibleRoots:d,canCreateChildren:f}){return{name:e,folder:t,trigger:`@${t}`,requiresTrigger:!0,assistantLabel:t,addedAt:new Date().toISOString(),config:{...n?{modelId:n}:{},...n&&r?{modelProviderId:r}:{},...eA(o,t,d,i,a),workspaceMode:o,...s?{allowedCommands:s}:{},...c?{thinkingLevel:c}:{},...l===void 0?{}:{backgroundAfterSeconds:l},...f===!0?{canCreateChildren:!0}:{}},configSchemaVersion:3,parentJid:u}}function eA(e,t,n,r,i){let a=`/scoops/${t}/`;return{visiblePaths:r??(e===`private`?[]:n),writablePaths:i??(e===`private`?[a]:[a,`/shared/`])}}async function tA(e,t,n,r,i){try{await i(e.jid,t)}catch(e){let t=e instanceof Error?e.message:String(e);return Ek.error(`Auto-feed failed`,{name:n,error:t}),{content:`Scoop "${n}" created as "${r}" but the initial task could not be sent: ${t}. Use feed_scoop to retry.`,isError:!0}}return{content:`Scoop "${n}" created as "${r}" and task sent. It is now working on it.`}}async function nA(e,t){let{name:n,model:r,prompt:i,visiblePaths:a,writablePaths:o,workspaceMode:s,allowedCommands:c,thinking:l,background_after:u,canCreateChildren:d}=e,f=jn(s);if(!f.ok)return{content:f.error,isError:!0};let p=Vk(l);if(!p.ok)return{content:p.content,isError:p.isError};let m=Hk(u);if(!m.ok)return{content:m.content,isError:!0};let h=Uk(r,t.resolveModelSelection);if(!h.ok)return{content:h.content,isError:h.isError};let ee=Bk(n),g=Ok(t).find(e=>e.jid!==t.scoop.jid&&e.parentJid!==null&&(e.name===n||e.folder===ee));if(g)return{content:`A scoop named "${g.name}" (${g.folder}) already exists in your scoops. Use feed_scoop to give it another task, or drop_scoop first.`,isError:!0};let te=Un(ee,t.getScoops().map(e=>e.folder));try{let e=$k({name:n,folder:te,model:h.modelId,modelProviderId:h.providerId,visiblePaths:a,writablePaths:o,workspaceMode:f.mode,allowedCommands:c,thinkingLevel:p.level,backgroundAfterSeconds:m.seconds,parentJid:t.scoop.jid,defaultVisibleRoots:lr(fr(t.scoop)),canCreateChildren:d===!0}),r=await t.onScoopScoop(e);return Ek.info(`Scoop created`,{name:n,folder:te}),i&&t.onFeedScoop?tA(r,i,n,te,t.onFeedScoop):{content:`Scoop "${n}" created as "${te}". Use feed_scoop to give it a task.`}}catch(e){return{content:`Failed to create scoop: ${e instanceof Error?e.message:String(e)}`,isError:!0}}}async function rA(e,t){let{scoop_name:n,cross_cone:r}=e;if(Mk(n)(t.scoop))return{content:`Cannot drop yourself.`,isError:!0};let i=Nk(n,t);if(!i)return Wk([n],t);let a=Lk([i],r,`drop "${n}"`,t);if(a)return a;try{return await t.onDropScoop(i.scoop.jid),Ek.info(`Scoop dropped`,{name:i.scoop.name,folder:i.scoop.folder,relation:i.relation}),{content:`Scoop "${i.scoop.name}" (${i.scoop.folder}) has been dropped.`}}catch(e){return{content:`Failed to drop scoop: ${e instanceof Error?e.message:String(e)}`,isError:!0}}}function iA(){return{content:`scoop_names must be a non-empty array.`,isError:!0}}async function aA(e,t){let{scoop_names:n,cross_cone:r}=e;if(!Array.isArray(n)||n.length===0)return iA();let{resolved:i,unknown:a}=Pk(n,t);return i.length===0?Wk(a,t):Lk(i,r,`mute these scoops`,t)||(t.onMuteScoops(i.map(e=>e.scoop.jid)),Ek.info(`Scoops muted`,{names:i.map(e=>e.scoop.folder)}),{content:`Muted: ${i.map(e=>e.scoop.folder).join(`, `)}${a.length>0?` (unknown: ${a.join(`, `)})`:``}`})}function oA(e,t){if(e.length===0)return[`No stashed completions.`];let n=[``,`Stashed completions:`];for(let r of e){let e=t.get(r.jid)??r.jid;n.push(`--- ${e} ---`),r.notificationPath&&n.push(`VFS path: ${r.notificationPath}`),n.push(r.summary)}return n}async function sA(e,t){let{scoop_names:n,cross_cone:r}=e;if(!Array.isArray(n)||n.length===0)return iA();let{resolved:i,unknown:a}=Pk(n,t);if(i.length===0)return Wk(a,t);let o=Lk(i,r,`unmute these scoops`,t);if(o)return o;let s=i.map(e=>e.scoop.jid),c=new Map(i.map(e=>[e.scoop.jid,e.scoop.folder])),l=await t.onUnmuteScoops(s);Ek.info(`Scoops unmuted`,{names:i.map(e=>e.scoop.folder),stashedCount:l.length});let u=[`Unmuted: ${i.map(e=>e.scoop.folder).join(`, `)}${a.length>0?` (unknown: ${a.join(`, `)})`:``}`];return u.push(...oA(l,c)),{content:u.join(`
1176
+ `)}}function cA(e,t){return!Array.isArray(e)||e.length===0?iA():t!==void 0&&(typeof t!=`number`||!Number.isFinite(t)||t<0)?{content:`timeout_ms must be a non-negative finite number (or omitted).`,isError:!0}:null}function lA(e,t,n,r){return`scoop_wait scheduled for: ${e}${r===void 0?` (no timeout)`:` (timeout: ${r}ms)`}.${t.length>0?` Unknown (skipped): ${t.join(`, `)}.`:``}${n?` Dropped before schedule (skipped): ${n}.`:``} Continue with other work — a 'scoop-wait' lick will be delivered when all listed scoops complete or the timeout fires.`}async function uA(e,t){let{scoop_names:n,timeout_ms:r,cross_cone:i}=e,a=cA(n,r);if(a)return a;let{resolved:o,unknown:s}=Pk(n,t);if(o.length===0)return Wk(s,t);let c=Lk(o,i,`wait on these scoops`,t);if(c)return c;let l=o.map(e=>e.scoop.jid),u=t.onScheduleScoopWait(l,r),d=new Map(o.map(e=>[e.scoop.jid,e.scoop.folder])),f=u.scheduled.map(e=>d.get(e)??e).join(`, `),p=u.unknown.map(e=>d.get(e)??e).join(`, `);return Ek.info(`Wait scheduled`,{scheduled:u.scheduled.map(e=>d.get(e)??e),droppedAtSchedule:p?p.split(`, `):[],unknownNames:s,timeout_ms:r}),u.scheduled.length===0?{content:`scoop_wait could not be scheduled — every listed scoop was unregistered before the wait could start (dropped: ${p||u.unknown.join(`, `)}).${s.length>0?` Unknown names: ${s.join(`, `)}.`:``}`,isError:!0}:{content:lA(f,s,p,r)}}function dA(e,t){return t?e.persisted?`Approved (always) — persisted NOPASSWD rule for ${e.kind??`unknown`} pattern "${e.persistedPattern}" in /etc/sudoers.d/scoop-${e.scoopFolder??`<unknown>`}.`:e.persistError?`Approved (always) but could NOT persist a rule (${e.persistError}). The current action is allowed; future occurrences will prompt again.`:`Approved (always) — no persistable rule applied for this request.`:`Approved (once) — the current action proceeds; future ones will prompt again.`}async function fA(e,t){let{lick_id:n,always:r,pattern:i,reason:a}=e;if(typeof n!=`string`||n.length===0)return{content:`lick_id must be a non-empty string.`,isError:!0};let o=typeof a==`string`?h(a):``,s={...r?{decision:`always`,...i?{pattern:i}:{}}:{decision:`allow`},...o?{note:o}:{}};try{let e=await t.onSudoResolve(n,s);return e.settled?(Ek.info(`Lick confirmed`,{id:n,always:!!r,persisted:e.persisted}),e.message?{content:e.message}:{content:dA(e,!!r)}):{content:`Lick "${n}" is unknown, already resolved, or timed out.`,isError:!0}}catch(e){return{content:`lick_confirm failed: ${e instanceof Error?e.message:String(e)}`,isError:!0}}}async function pA(e,t){let{lick_id:n,reason:r}=e;if(typeof n!=`string`||n.length===0)return{content:`lick_id must be a non-empty string.`,isError:!0};let i=typeof r==`string`?h(r):``;try{let e=await t.onSudoResolve(n,{decision:`deny`,...i?{note:i}:{}});return e.settled?(Ek.info(`Lick dismissed`,{id:n,hasReason:!!i}),e.message?{content:e.message}:{content:i?`Denied, and the scoop was told why: "${i}"`:"Denied with NO reason, so the scoop cannot tell refusal from misunderstanding. Pass `reason` next time."}):{content:`Lick "${n}" is unknown, already resolved, or timed out.`,isError:!0}}catch(e){return{content:`lick_dismiss failed: ${e instanceof Error?e.message:String(e)}`,isError:!0}}}async function mA(e){let t=e.onListSudoRequests();return t.length===0?{content:`No pending sudo requests.`}:{content:`Pending sudo requests:\n${t.map(t=>{let n=e.getScoops().find(e=>e.jid===t.scoopJid)?.folder??t.scoopJid,r=t.request.suggestedPattern?` (suggested: ${t.request.suggestedPattern})`:``,i=t.request.reason?`\n reason: ${t.request.reason}`:``;return`- ${t.id} — ${n} — ${t.request.kind}: ${t.request.detail}${r}${i}`}).join(`
1177
+ `)}`}}async function hA(e,t){let{content:n}=e;try{return await t.onSetGlobalMemory(n),Ek.info(`Global memory updated`),{content:`Global memory updated successfully.`}}catch(e){return{content:`Failed to update global memory: ${e instanceof Error?e.message:String(e)}`,isError:!0}}}function gA(e){return{name:`send_message`,description:`Send a progress message while still working. Your final output is also sent.`,inputSchema:{type:`object`,properties:{text:{type:`string`,description:`The message text to send`},sender:{type:`string`,description:`Optional sender name/role (e.g., "Researcher"). Defaults to assistant name.`}},required:[`text`]},execute:t=>Kk(t,e)}}function _A(e){return{name:`sudo_request`,description:`Ask the cone for an explicit sudo escalation before running a sensitive action. Use this when you know up-front that a command, read, or write will be gated and you want a clean approval round-trip instead of letting the gate fire mid-action. Resolves with the cone's decision (allow / always / deny). If your sudoers already grants the subject with NOPASSWD, this resolves allow immediately without prompting the cone. 'always' durably widens your sandbox by appending a NOPASSWD rule to the cone-owned /etc/sudoers.d/scoop-<folder> drop-in (you cannot write it yourself). 'deny' (or a timeout / dropped cone) resolves fail-closed. Always pass 'reason': the approver sees only what you ask for, never why.`,inputSchema:{type:`object`,properties:{kind:{type:`string`,enum:[...zk],description:`The kind of sensitive action being requested. command = a shell command; read/write = a VFS path; secret = a credential read. Only command/read/write can be persisted with "always" (no sudoers Secret directive).`},detail:{type:`string`,description:`The concrete subject of the request (e.g., the command line "git push origin main" or the VFS path "/workspace/.git/config"). The cone sees this verbatim.`},suggested_pattern:{type:`string`,description:`Optional pre-filled glob pattern for an "always" grant (e.g., "git push*" for a command or "/workspace/.git/**" for a path). The cone may override this.`},reason:{type:`string`,description:`Why you need this, in one sentence. Name the goal it unblocks, not the action restated: "the build writes its output there", not "I need to write there". Truncated at 300 characters.`}},required:[`kind`,`detail`]},execute:t=>Yk(t,e)}}function vA(e){return{name:`feed_scoop`,description:`Give a scoop a task. Provide a complete, self-contained prompt — the scoop has no access to your conversation. You'll be notified when it finishes.`,inputSchema:{type:`object`,properties:{scoop_name:{type:`string`,description:`The scoop folder name (e.g., "test-scoop") — any name list_scoops shows you.`},prompt:{type:`string`,description:`Complete, self-contained instructions for the scoop. Include ALL context — the scoop cannot see your conversation.`},[Dk]:Rk(`feed`)},required:[`scoop_name`,`prompt`]},execute:t=>Xk(t,e)}}function yA(e){return{name:`list_scoops`,description:`List the scoops you can manage: your own subtree, plus — leading cone only — ones tagged [INHERITED] (owning cone gone) or [FOREIGN: <cone>] (another cone owns it). These names are the only ones feed_scoop / drop_scoop / scoop_mute / scoop_unmute / scoop_wait resolve; a tagged one also needs cross_cone: true.`,inputSchema:{type:`object`,properties:{}},execute:()=>Qk(e)}}function bA(e){return{name:`scoop_scoop`,description:`Create a new scoop. Optionally specify a model, a prompt, a workspace isolation mode (private | shared-readonly), and per-scoop sandbox shape (visible/writable paths + command allow-list). If prompt is provided, the scoop starts working immediately after creation (no separate feed_scoop needed).`,inputSchema:{type:`object`,properties:{name:{type:`string`,description:`Display name for the scoop (e.g., "hero-block")`},model:{type:`string`,description:`Model ID for this scoop (e.g., "claude-sonnet-4-6"). If omitted, uses the same model as the cone.`},prompt:{type:`string`,description:`Task prompt for the scoop. If provided, the scoop starts working immediately after creation.`},visiblePaths:{type:`array`,items:{type:`string`},description:`VFS paths the scoop can READ (not write). Pure replace — what you set is what you get. Omit to use the default for workspaceMode: shared-readonly (the default) is YOUR OWN workspace plus the shared skills tree — ["/workspace/"] for the primary cone, ["/cones/<folder>/workspace/", "/workspace/skills/"] for any other; private is []. Prefer omitting it over naming "/workspace/" explicitly, which would point the scoop at a different cone's files. Pass [] for no extra read-only paths. Note: the scoop's writablePaths are always readable too, so a true read-nothing sandbox also requires writablePaths: []. Mounts remain readable in shared-readonly; private does not auto-include them. Trailing slash recommended (e.g. "/shared/data/").`},writablePaths:{type:`array`,items:{type:`string`},description:`VFS paths the scoop can READ AND WRITE. Pure replace. Omit to use the default ["/scoops/<folder>/", "/shared/"] which gives the scoop its own sandbox plus shared space. Pass [] to block all writes — note that /tmp stays readable and writable regardless, as shared scratch space every scoop gets (so nothing secret belongs there). Trailing slash recommended.`},workspaceMode:{type:`string`,enum:[`private`,`shared-readonly`,`snapshot`,`shared-live`],description:`Workspace isolation mode. Default "shared-readonly" is today's scoop: parent workspace + skills are visible, own sandbox + /shared/ are writable, mounts stay readable. "private" is an isolated sandbox (own /scoops/<folder>/ only — no parent workspace, no implicit /shared/, mounts are NOT auto-visible). "snapshot" and "shared-live" are not implemented and are rejected. Explicit visiblePaths / writablePaths still replace the mode's path defaults.`},allowedCommands:{type:`array`,items:{type:`string`},description:`Shell command allow-list. Omit for unrestricted access to every built-in, custom, and .jsh command (the default). Pass a list of command names to restrict the scoop's shell — e.g. ["echo","cat","grep"] for a read-only text-processing scoop. Pass ["*"] for explicit unrestricted. Applies to pipelines, substitutions, and network commands too.`},thinking:{type:`string`,enum:[...mr],description:`Reasoning / thinking-level for this scoop (pi-ai effort). One of: off, minimal, low, medium, high, xhigh. Omit to inherit the global default ("off"). Non-reasoning models always clamp to "off"; "xhigh" clamps to "high" on models that do not support the max tier.`},background_after:{type:`number`,description:`Seconds this scoop's bash tool waits for a command before detaching it to the background and continuing (default 600). Lower it for a scoop that must never stall on a slow command — nobody can cancel a scoop's turn, and its detached commands report back via a Background Command lick. Use 0 to detach every command immediately.`},canCreateChildren:{type:`boolean`,description:`Explicit nested-delegation grant. When true, the new scoop may create and manage its own children (grandchildren of you). Omit or false (the default) keeps it a leaf. The grant is refused when you do not hold canCreateChildren yourself.`}},required:[`name`]},execute:t=>nA(t,e)}}function xA(e){return{name:`drop_scoop`,description:`Remove a scoop and stop its work. The scoop will be unregistered and its context destroyed.`,inputSchema:{type:`object`,properties:{scoop_name:{type:`string`,description:`The scoop folder name (e.g., "test-scoop") — any name list_scoops shows you.`},[Dk]:Rk(`drop`)},required:[`scoop_name`]},execute:t=>rA(t,e)}}function SA(e){return{name:`scoop_mute`,description:`Suspend scoop→cone notifications for the given scoops. While muted, a scoop's completion is stashed and will be delivered to the cone when you call scoop_unmute (or scoop_wait which consumes it). Use this when coordinating parallel work so each scoop's completion does not trigger its own cone turn.`,inputSchema:{type:`object`,properties:{scoop_names:{type:`array`,items:{type:`string`},description:`Folder or display names of scoops to mute (e.g., ["writer-scoop", "reviewer-scoop"]).`},[Dk]:Rk(`mute`)},required:[`scoop_names`]},execute:t=>aA(t,e)}}function CA(e){return{name:`scoop_unmute`,description:`Resume scoop→cone notifications for the given scoops. Any completion that landed while a scoop was muted is returned in this tool result (NOT dispatched as a new cone turn), so you can read all stashed summaries in the current turn. Scoops with no stashed completion are simply unmuted.`,inputSchema:{type:`object`,properties:{scoop_names:{type:`array`,items:{type:`string`},description:`Folder or display names of scoops to unmute (e.g., ["writer-scoop"]).`},[Dk]:Rk(`unmute`)},required:[`scoop_names`]},execute:t=>sA(t,e)}}function wA(e){return{name:`scoop_wait`,description:"Schedule a non-blocking wait for the given scoops. Returns immediately — the cone keeps its turn — and a `scoop-wait` lick is delivered when every listed scoop completes or the optional timeout fires. Use this to coordinate parallel work without freezing the cone: feed several scoops, call scoop_wait, then continue with other work; you'll be woken by the lick with all per-scoop summaries in one shot. Already-completed scoops (including those whose completion arrived while you were processing your previous turn) are folded into the same lick.",inputSchema:{type:`object`,properties:{scoop_names:{type:`array`,items:{type:`string`},description:`Folder or display names of scoops list_scoops shows you (e.g., ["writer-scoop", "reviewer-scoop"]).`},timeout_ms:{type:`number`,description:"Optional timeout in milliseconds. If any listed scoop has not completed by the deadline, it is reported as timed-out in the eventual `scoop-wait` lick. Omit for no timeout."},[Dk]:Rk(`wait on`)},required:[`scoop_names`]},execute:t=>uA(t,e)}}function TA(e){return{name:`lick_confirm`,description:`Confirm (approve) a pending actionable lick by its lick_id — currently a scoop sudo escalation raised via sudo_request. With always=true, the orchestrator additionally appends a NOPASSWD <directive> <pattern> rule to the requesting scoop's /etc/sudoers.d/scoop-<folder> drop-in so the same action won't prompt again. always=false (the default) is allow-once.`,inputSchema:{type:`object`,properties:{lick_id:{type:`string`,description:`The id of the pending actionable lick (as delivered in the [sudo-request] notification, e.g. "lick-…"). Use list_sudo_requests to see outstanding ids.`},always:{type:`boolean`,description:`If true, persist a NOPASSWD rule into the requesting scoop's per-scoop sudoers so the action won't prompt again. Defaults to false (allow-once).`},pattern:{type:`string`,description:`Optional glob pattern to persist when always=true (e.g., "git push*" or "/workspace/.git/**"). Defaults to the request's suggestedPattern, then to the exact detail. Ignored when always=false.`},reason:{type:`string`,description:`Optional note for the requester — a caveat on the approval. Only reaches a scoop that asked via sudo_request; an implicit filesystem gate has no channel to report it on success. Truncated at 300 characters.`}},required:[`lick_id`]},execute:t=>fA(t,e)}}function EA(e){return{name:`lick_dismiss`,description:`Dismiss a pending actionable lick by its lick_id. For scoop sudo escalation this denies the sensitive action — pass a reason, or the scoop just retries. For llms.txt discovery this silently appends the advertising host to /etc/llmstxtignore.`,inputSchema:{type:`object`,properties:{lick_id:{type:`string`,description:`The id of the pending actionable lick (as delivered in a sudo-request or llms.txt discovery notification).`},reason:{type:`string`,description:`Why you are refusing, in one sentence; the scoop sees it verbatim. Always give one for a sudo denial — without it the scoop cannot tell refusal from misunderstanding, and retries or works around it. Truncated at 300 characters.`}},required:[`lick_id`]},execute:t=>pA(t,e)}}function DA(e){return{name:`list_sudo_requests`,description:`List all pending cone-mediated sudo requests (lick id, requesting scoop, kind, detail). Use to find a lick_id for lick_confirm / lick_dismiss.`,inputSchema:{type:`object`,properties:{}},execute:()=>mA(e)}}function OA(e){return{name:`update_global_memory`,description:`Update the global CLAUDE.md memory file that is shared across all scoops. Use this instead of write_file for /shared/CLAUDE.md.`,inputSchema:{type:`object`,properties:{content:{type:`string`,description:`The new content for the global memory file`}},required:[`content`]},execute:t=>hA(t,e)}}function kA(e){let t=[],n=In(e.scoop);return Nn(e.scoop)||(t.push(gA(e)),e.onSudoRequest&&t.push(_A(e))),n.canCreateChildren&&e.onScoopScoop&&t.push(bA(e)),n.canManageChildren&&(e.onFeedScoop&&t.push(vA(e)),t.push(yA(e)),e.onDropScoop&&t.push(xA(e)),e.onMuteScoops&&t.push(SA(e)),e.onUnmuteScoops&&t.push(CA(e)),e.onScheduleScoopWait&&t.push(wA(e)),e.onSudoResolve&&(t.push(TA(e)),t.push(EA(e))),e.onListSudoRequests&&t.push(DA(e)),e.onSetGlobalMemory&&e.getGlobalMemory&&t.push(OA(e))),t}const AA=_(`scoop-context`);function jA(e){return{currentGate(){let t=e.getTurnGuestGates();if(t.length!==0)return{async approve(n,r){let{approveToolCallForGuests:i}=await import(`./guest-tool-gate-BzUxTS0o.js`);return i(t,n,r,e.callbacks.approveGuestToolCall)}}}}}async function MA(e){let{scoop:t,unit:n,callbacks:r}=e,i=kA({scoop:t,onSendMessage:r.onSendMessage,getScoops:r.getScoops,getScoopTabState:r.getScoopTabState,onFeedScoop:r.onFeedScoop,onScoopScoop:r.onScoopScoop,resolveModelSelection:de,onDropScoop:r.onDropScoop,onMuteScoops:r.onMuteScoops,onUnmuteScoops:r.onUnmuteScoops,onScheduleScoopWait:r.onScheduleScoopWait,onSetGlobalMemory:r.setGlobalMemory,getGlobalMemory:r.getGlobalMemory,onSudoRequest:r.onSudoRequest,onSudoResolve:r.onSudoResolve,onListSudoRequests:r.onListSudoRequests}),a=dk(e.gatedFs,n.workspace.root),o=e.blindReads??null,s=hk(e.memoryFs,{readSessionCount:async()=>{let{readSessionCount:t}=await Promise.resolve().then(()=>cw);return t(e.fs)},...o?{blindPaths:()=>o.outsidePaths()}:{}}),c=[...a,s,XO(e.shell,e.fs,n.workspace.scratch,{defaultBackgroundAfterSeconds:t.config?.backgroundAfterSeconds,targetScoop:e.lickTarget,jobHost:{spawn:t=>e.spawnBashJob(t)},scrubOutput:pn(),...o?{annotateResult:()=>o.takeNote()}:{},fireLick:e=>{let n=globalThis.__slicc_lick_handler;return n?(n(e),!0):(AA.warn(`No lick handler for background bash completion`,{folder:t.folder}),!1)}}),...i,wk({requester:t.assistantLabel||t.name,setEnv:(t,n)=>e.shell.setMaskedEnvVar(t,n),getProvider:()=>xO(AD(t).provider)})];if(t.config?.structuredOutputSchema){let{createStructuredOutputTool:n}=await import(`./structured-output-tool-BDaIhclx.js`);c.push(n(t.config.structuredOutputSchema,e.onStructuredOutput))}let l={scrubToolResult:pn()},u=jA(e);return e.processManager?mn(c,{processManager:e.processManager,owner:e.processOwner,getParentPid:e.getTurnPid},l,u):mn(c,void 0,l,u)}const NA=_(`scoop-context`);async function PA(e){let{scoop:t,unit:n,fs:r,callbacks:i}=e,a=e.getTmpDir();NA.info(`Filesystem ready`,{folder:t.folder}),await YD(r,t,n,a);let{shell:o,gatedFs:s,memoryFs:c,blindReads:l,skills:u}=await yO({scoop:t,unit:n,fs:r,tmpDir:a,skillsFs:e.skillsFs,getBrowserAPI:i.getBrowserAPI,sudoManager:e.sudoManager,capabilityBroker:e.capabilityBroker,onSudoRequest:i.onSudoRequest,processManager:e.processManager,processOwner:e.processOwner,getTurnPid:e.getTurnPid,lickTarget:e.getLickTarget()});e.onShellReady(o);let d=await MA({getTurnGuestGates:e.getTurnGuestGates,scoop:t,unit:n,callbacks:i,shell:o,fs:r,gatedFs:s,memoryFs:c,blindReads:l,processManager:e.processManager,processOwner:e.processOwner,getTurnPid:e.getTurnPid,lickTarget:e.getLickTarget(),onStructuredOutput:e.onStructuredOutput,spawnBashJob:e.spawnBashJob}),{scoopMemory:f,globalMemory:p}=await DD(r,n,()=>i.getGlobalMemory());if(!kD(t))return NA.info(`ScoopContext init deferred — no API key yet`,{folder:t.folder}),{kind:`deferred`};let m=jD(t,n),h=PD(t,n,p,f,u),ee=await e.sessions.restore(),{streamWithSessionId:g,compactFn:te,getCompactionApiKey:ne}=await ZD(m,{scoop:t,unit:n,coneJid:e.coneJid,getModelApiKey:()=>kD(t),getEffortOverride:e.getEffortOverride,appendConeMemory:i.appendConeMemory,onCompactionStateChange:(e,t)=>i.onCompactionStateChange?.(e,t),onBeforeCompaction:e.onBeforeCompaction});if(e.isDisposed())return{kind:`abandoned`};let re=Wn(t);return{kind:`ready`,agent:qD({model:m,tools:d,systemPrompt:h,messages:ee,thinkingLevel:ID(LD()??re.level,m),getApiKey:()=>kD(t)??void 0,transformContext:te,streamFn:g,onContextCompacted:()=>e.sessions.persistNow(),captureStructuredOutput:t.config?.structuredOutputSchema?e.onStructuredOutput:void 0}),compactFn:te,getCompactionApiKey:ne,effortOverride:re.effortOverride,toolCount:d.length}}const FA=_(`scoop-context`);var IA=class{deps;timer=null;createdAt=0;constructor(e){this.deps=e}get sessionId(){return this.deps.sessionId}async restore(){let e=this.deps.canonical;if(!e)return[];let t=null;try{t=await e.store.load(e.identity.key)}catch(e){return FA.error(`Failed to restore the conversation`,{folder:this.deps.folder,error:e instanceof Error?e.message:String(e)}),this.deps.onRestoreError(`Conversation history could not be restored. Starting fresh.`),[]}let n=BC(t);if(t&&(this.createdAt=t.createdAt),n.length===0)return[];let r=hn(n);return FA.info(`Restored conversation from the canonical work-unit record`,{folder:this.deps.folder,messageCount:r.length,droppedOrphans:n.length-r.length}),r}persistNow(e){this.flush(e)}flush(e){this.timer!==null&&(clearTimeout(this.timer),this.timer=null);let t=this.deps.getMessages()??e??[];if(t.length===0)return Promise.resolve();let n=this.deps.canonical;return n?(this.createdAt||=Date.now(),n.store.syncAgentMessages(n.identity,t,{createdAt:this.createdAt}).then(()=>void 0,e=>{FA.error(`Failed to save the canonical conversation record`,{folder:this.deps.folder,error:e instanceof Error?e.message:String(e)})})):Promise.resolve()}async clear(){this.timer!==null&&(clearTimeout(this.timer),this.timer=null),this.createdAt=0;let e=this.deps.canonical;e&&await e.store.delete(e.identity.key);try{await this.deps.store?.delete(this.deps.sessionId)}catch(e){FA.warn(`Failed to clear the legacy agent session`,{folder:this.deps.folder,error:e instanceof Error?e.message:String(e)})}}schedule(){this.deps.isDisposed()||this.deps.canonical&&this.timer===null&&(this.timer=setTimeout(()=>{this.timer=null,this.deps.isDisposed()||this.persistNow()},1e3))}};function LA(e,t){if(!e)return null;let{text:n}=t,r=n.length>200?`${n.slice(0,197)}…`:n;return e.spawn({kind:`scoop-turn`,argv:[`prompt`,r],cwd:t.cwd,owner:t.owner,adoptAbort:t.abortController})}function RA(e,t,n){!t||!e||(n.lastError&&!n.aborted?e.exit(t.pid,1):e.exit(t.pid,n.aborted?null:0))}function zA(e,t,n,r){t&&e?e.signal(t.pid,n):r?.abort()}const BA=_(`scoop-context`);var VA=class{deps;constructor(e){this.deps=e}async run(e,t){let n=null;for(let r=1;r<=3;r++){if(this.deps.isDisposed()||t.aborted)return null;let i=await this.tryAttempt(e,t);if(!i||this.deps.isDisposed()||t.aborted||(n=i,await this.handleAttemptError(i,r,t)))return null}return n}reportExhausted(e){let t=e.message;BA.error(`Agent error after retries exhausted`,{folder:this.deps.folder,error:t,maxRetries:3}),this.fail(`Scoop "${this.deps.scoopName}" failed after 3 attempts: ${t}`,t)}async tryAttempt(e,t){this.deps.beginAttempt();try{if(await e(),this.deps.isDisposed()||t.aborted)return null;let n=this.deps.overflow.pendingRecovery;if(n!==null&&(await n,this.deps.overflow.clearPendingRecovery(n),this.deps.isDisposed()||t.aborted))return null;let r=this.deps.getStreamError();return r?Error(r):null}catch(e){return e instanceof Error?e:Error(String(e))}}async handleAttemptError(e,t,n){let r=e.message;return this.handleStaleAssetError(r)||this.handleNonRetryableError(r)?!0:!await this.handleRetryableError(r,t,n)&&(BA.error(`Agent error`,{folder:this.deps.folder,error:r,attempt:t,isRetryable:mD(r)}),!!(t<3&&(await hD(HA(t),n)||this.deps.isDisposed())))}handleNonRetryableError(e){return pD(e)?(BA.error(`Non-retryable agent error`,{folder:this.deps.folder,error:e}),this.fail(`Scoop "${this.deps.scoopName}" failed with unrecoverable error: ${e}`,e),!0):!1}handleStaleAssetError(e){return Wa(e)?(BA.error(`Stale-asset import failure; requesting page reload`,{folder:this.deps.folder,error:e}),qa(this.deps.isInteractive),this.fail(`Scoop "${this.deps.scoopName}" hit a stale build after a deploy; reloading to recover.`,e),!0):!1}async handleRetryableError(e,t,n){if(!mD(e)||t>=3)return!1;let r=HA(t);return BA.warn(`Retryable agent error, will retry`,{folder:this.deps.folder,error:e,attempt:t,maxRetries:3,delayMs:r}),!await hD(r,n)&&!this.deps.isDisposed()}fail(e,t){iD(`llm`,t),this.deps.setStatus(`error`),this.deps.onFatalError?this.deps.onFatalError(e):this.deps.onError(t)}};function HA(e){return 1e3*2**(e-1)}function UA(e,t,n,r){let i=e.state?.isStreaming??!1;if(r.isProcessing||i){BA.info(`Queueing prompt via ${r.steer?`steer`:`followUp`} while processing`,{folder:r.folder,isProcessing:r.isProcessing,agentIsStreaming:i});let a={role:`user`,content:[{type:`text`,text:t},...n],timestamp:Date.now()};return r.steer?e.steer(a):e.followUp(a),!0}return!1}const WA=_(`scoop-context`);var GA=class{scoop;callbacks;fs=null;shell=null;agent=null;status=`initializing`;isProcessing=!1;disposed=!1;didStreamDeltas=!1;promptStreamErrorMessage=null;unsubscribe=null;promptAbortController=null;forceReleaseTimer=null;turnEpoch=0;processManager=null;currentTurnProcess=null;compactFn=null;getCompactionApiKey=null;coneJid;unit;owner;skillsFs=null;sudoManager=null;capabilityBroker=null;structuredOutputValue;activeEffortOverride;structuredOutputCaptured=!1;sessions;runBounds;bashJobs;imageRecovery;overflow;idleCompaction=null;idleCompactionLoading=null;sessionGeneration=0;turnRunner;turnJournal;eventSink={textDelta:e=>{this.didStreamDeltas=!0,this.callbacks.onResponse(e,!0)},toolStart:(e,t,n)=>(this.callbacks.onToolStart?.(e,t,n),this.makeToolCallDurable(e,t,n)),toolUI:(e,t,n)=>this.callbacks.onToolUI?.(e,t,n),toolUIDone:e=>this.callbacks.onToolUIDone?.(e),toolProgress:(e,t,n)=>this.callbacks.onToolProgress?.(e,t,n),toolResult:(e,t,n,r)=>this.callbacks.onToolEnd?.(e,t,n,r),checkpoint:e=>this.checkpoint(e),assistantMessageEnd:e=>this.handleAssistantMessageEnd(e),turnStart:()=>this.runBounds.enforceOnTurnStart(),turnCompleted:()=>this.runBounds.recordCompletedTurn(),responseDone:()=>this.callbacks.onResponseDone(),agentEnd:(e,t)=>this.handleAgentEndEvent(e,t)};constructor(e,t,n,r,i,a,o,s,c,l,u){this.scoop=e,this.unit=sr(e),this.owner={kind:Vn(e),scoopJid:e.jid},this.callbacks=t,this.fs=n,this.skillsFs=i??null,this.coneJid=a,this.processManager=o??null,this.sudoManager=s??null,this.capabilityBroker=l??null,this.turnJournal=u??null,this.sessions=new IA({store:r??null,canonical:c?{store:c,identity:Ar(e)}:null,sessionId:e.jid,folder:e.folder,getMessages:()=>this.agent?.state?.messages,isDisposed:()=>this.disposed,onRestoreError:e=>this.callbacks.onError(e)}),this.runBounds=new WD({getConfig:()=>this.scoop.config,isDisposed:()=>this.disposed,onTripped:()=>{this.setStatus(`error`),this.stop()}}),this.bashJobs=new SD({processManager:this.processManager,cwd:this.unit.workspace.root,owner:this.owner,getTurnPid:()=>this.currentTurnProcess?.pid,folder:e.folder}),this.imageRecovery=new wD({getAgent:()=>this.agent,onResponse:(e,t)=>this.callbacks.onResponse(e,t),onError:e=>this.callbacks.onError(e),folder:e.folder}),this.overflow=new UD({getAgent:()=>this.agent,isDisposed:()=>this.disposed,getTurnSignal:()=>this.promptAbortController?.signal,getCompactFn:()=>this.compactFn,getCompactionApiKey:()=>this.getCompactionApiKey?.(),isImageRecoveryActive:()=>this.imageRecovery.isActive,onResponse:(e,t)=>this.callbacks.onResponse(e,t),onExhausted:e=>this.reportExhaustedOverflow(e),setStatus:e=>this.setStatus(e),scoopName:e.name,folder:e.folder}),this.turnRunner=new VA({isDisposed:()=>this.disposed,overflow:this.overflow,beginAttempt:()=>{this.didStreamDeltas=!1,this.promptStreamErrorMessage=null},getStreamError:()=>this.promptStreamErrorMessage,setStatus:e=>this.setStatus(e),onError:e=>this.callbacks.onError(e),onFatalError:t.onFatalError?e=>this.callbacks.onFatalError?.(e):void 0,isInteractive:this.unit.completion.mode===`interactive`,scoopName:e.name,folder:e.folder})}ownLickTarget(){return mO(this.unit,this.scoop,O(this.callbacks.getScoops())[0]?.jid)}ownTmpDir(){return ir(this.callbacks.getScoops(),this.scoop)}getStructuredOutput(){return{captured:this.structuredOutputCaptured,value:this.structuredOutputValue}}get isBusy(){return this.isProcessing||(this.agent?.state?.isStreaming??!1)}async init(){this.setStatus(`initializing`);try{if(!this.fs)throw Error(`Filesystem not provided`);let e=await PA({scoop:this.scoop,unit:this.unit,fs:this.fs,skillsFs:this.skillsFs,callbacks:this.callbacks,sessions:this.sessions,sudoManager:this.sudoManager,capabilityBroker:this.capabilityBroker,processManager:this.processManager,processOwner:this.owner,coneJid:this.coneJid,getTurnPid:()=>this.currentTurnProcess?.pid,getTurnGuestGates:()=>this.turnGuestGates,getLickTarget:()=>this.ownLickTarget(),getTmpDir:()=>this.ownTmpDir(),getEffortOverride:()=>this.activeEffortOverride,isDisposed:()=>this.disposed,onShellReady:e=>{this.shell=e},onStructuredOutput:e=>{this.structuredOutputValue=e,this.structuredOutputCaptured=!0},spawnBashJob:e=>this.bashJobs.spawn(e),onBeforeCompaction:(e,t)=>this.maybeSnapshotBeforeCompaction(e,t)});if(e.kind===`abandoned`)return;if(e.kind===`deferred`){this.setStatus(`ready`);return}this.compactFn=e.compactFn,this.getCompactionApiKey=e.getCompactionApiKey,this.activeEffortOverride=e.effortOverride,this.agent=e.agent,this.unsubscribe=this.agent.subscribe((e,t)=>this.handleAgentEvent(e,t)),this.setStatus(`ready`),WA.info(`ScoopContext initialized`,{folder:this.scoop.folder,toolCount:e.toolCount})}catch(e){if(this.disposed)return;let t=e instanceof Error?e.message:String(e);WA.error(`ScoopContext init failed`,{folder:this.scoop.folder,error:t}),this.setStatus(`error`),this.callbacks.onError(`Failed to initialize: ${t}`)}}async ensureAgentReady(){return this.agent||(await this.init(),this.agent)?!0:(this.callbacks.onError(ND(this.scoop)),!1)}cleanupPromptState(e,t,n,r,i){if(i!==void 0&&i!==this.turnEpoch){this.currentTurnProcess!==t&&RA(this.processManager,t,{lastError:n,aborted:!0});return}this.runBounds.disarm();let a=this.runBounds.takeExceededNote();a!==null&&this.callbacks.onError(`agent run terminated: ${a}`),(n||r.aborted)&&this.sessions.persistNow(),this.disarmForceRelease(),this.isProcessing=!1,this.turnJournal?.end(this.scoop.jid),!this.disposed&&this.status===`processing`&&this.setStatus(`ready`),this.promptAbortController===e&&(this.promptAbortController=null),RA(this.processManager,t,{lastError:n,aborted:r.aborted}),this.currentTurnProcess===t&&(this.currentTurnProcess=null)}turnGuestGates=[];async prompt(e,t=[],n){if(!await this.ensureAgentReady())return;let r=n?.guestGates??[];if(UA(this.agent,e,t,{steer:n?.steer??!1,isProcessing:this.isProcessing,folder:this.scoop.folder})){for(let e of r)this.addTurnGuestGate(e);return}this.turnGuestGates=[...r];let i=this.agent;await this.runTurn(e,0,()=>i.prompt(e,t))}async resumeTurn(e,t=[]){if(!await this.ensureAgentReady()||this.isBusy)return;this.turnGuestGates=[...t];let n=this.agent;await this.runTurn(`(resumed after reload)`,e,()=>{let e=n.state.messages,t=e[e.length-1];return t?.role===`assistant`&&(t.stopReason===`error`||t.stopReason===`aborted`)&&(n.state.messages=e.slice(0,-1)),n.continue()})}settleInterruptedToolCalls(e){let t=this.agent;if(!t||e.length===0)return;let n=Date.now(),r=e.map(e=>({role:`toolResult`,toolCallId:e.toolCallId,toolName:e.toolName,content:[{type:`text`,text:e.text}],isError:!0,timestamp:n}));t.state.messages=[...t.state.messages,...r],this.sessions.persistNow();for(let t of e)this.callbacks.onToolEnd?.(t.toolName,t.text,!0,t.toolCallId)}reportError(e){this.callbacks.onError(e)}hasAgent(){return this.agent!==null}async runTurn(e,t,n){this.promptAbortController?.abort();let r=new AbortController;this.promptAbortController=r;let i=r.signal,a=++this.turnEpoch;this.isProcessing=!0,this.setStatus(`processing`),this.overflow.resetForRun();let o=LA(this.processManager,{text:e,cwd:this.unit.workspace.root,owner:this.owner,abortController:r});this.currentTurnProcess=o,this.runBounds.arm(),this.turnJournal?.begin(this.scoop.jid,this.scoop.folder,t,this.turnGuestGates);let s=null;try{if(s=await this.turnRunner.run(n,i),s&&!this.disposed&&!i.aborted){this.turnRunner.reportExhausted(s);return}a===this.turnEpoch&&!this.disposed&&!i.aborted&&this.status!==`error`&&this.setStatus(`ready`)}finally{this.cleanupPromptState(r,o,s,i,a)}}addTurnGuestGate(e){let t=JSON.stringify(e);this.turnGuestGates.some(e=>JSON.stringify(e)===t)||(this.turnGuestGates.push(e),this.turnJournal?.setGuestGates(this.scoop.jid,this.turnGuestGates))}stop(){zA(this.processManager,this.currentTurnProcess,`SIGINT`,this.promptAbortController),this.agent?.clearAllQueues?.(),this.agent?.abort?.(),this.idleCompaction?.cancel(),this.armForceRelease()}disarmForceRelease(){this.forceReleaseTimer!==null&&(clearTimeout(this.forceReleaseTimer),this.forceReleaseTimer=null)}armForceRelease(){this.disarmForceRelease();let e=this.turnEpoch,t=this.currentTurnProcess;this.forceReleaseTimer=setTimeout(()=>{this.forceReleaseTimer=null,!(this.disposed||this.turnEpoch!==e||!this.isProcessing)&&(t&&this.processManager&&(this.processManager.signal(t.pid,`SIGKILL`),this.processManager.exit(t.pid,null)),this.bashJobs.reapAll(),this.shell?.cancelActiveCommand(),this.agent?.abort?.(),!(this.turnEpoch!==e||!this.isProcessing)&&(this.isProcessing=!1,this.status===`processing`&&this.setStatus(`ready`)))},2e3)}clearMessages(){this.agent&&(this.agent.state.messages=[])}async clearSession(e={}){this.sessionGeneration++,this.idleCompaction?.cancel(),this.clearMessages(),await this.sessions.clear(),await this.settleLiveSnapshot(e.discardLiveSnapshot===!0)}idleCompactionEnabled(){return jx(this.scoop)?!0:this.unit.parentId===null&&ke(`compact-on-idle`)}armIdleCompaction(){if(!this.idleCompactionEnabled()){this.idleCompaction?.disarm();return}if(this.idleCompaction){this.idleCompaction.arm();return}this.idleCompactionLoading??=this.loadIdleCompaction(),this.idleCompactionLoading.then(e=>{!this.disposed&&this.status===`ready`&&e.arm()})}async loadIdleCompaction(){let[{IdleCompaction:e},{readIdleCompactionSettings:t}]=await Promise.all([import(`./idle-compaction-CwYw083A.js`),import(`./idle-compaction-settings-1yyApSsQ.js`)]),n=new e({isEnabled:()=>this.idleCompactionEnabled(),getSettings:t,getAgent:()=>this.agent,isDisposed:()=>this.disposed,isBusy:()=>this.isBusy,getCompactFn:()=>this.compactFn,getCompactionApiKey:()=>this.getCompactionApiKey?.(),estimateTokens:gn,onCompacted:()=>this.sessions.persistNow(),onDiscarded:e=>this.callbacks.onCompactionStateChange?.(`cancelled`,{trigger:`idle`,roundId:e}),folder:this.scoop.folder});return this.idleCompaction=n,n}async maybeSnapshotBeforeCompaction(e,t){if(!(this.unit.parentId!==null&&!ke(`memory-v2`)))return this.snapshotBeforeCompaction(e,t)}async snapshotBeforeCompaction(e,t){if(!this.fs||this.disposed)return;let n=this.sessionGeneration,{scoopSessionsDir:r,snapshotLiveSession:i}=await import(`./live-session-snapshot-Chxvnh3i.js`),a=this.unit.parentId===null,o=await i({vfs:this.fs,cone:{folder:this.scoop.folder,label:this.scoop.assistantLabel},messages:e,trigger:t,...a?{}:{sessionsDir:r(this.scoop.folder,this.scoop.jid)},stillValid:()=>!this.disposed&&n===this.sessionGeneration});return o&&a&&this.scheduleLiveDeltaCuration(),o?{transcriptPath:o.transcriptPath}:void 0}scheduleLiveDeltaCuration(){let e=this.fs;if(!e)return;let t={folder:this.scoop.folder,...this.scoop.jid?{jid:this.scoop.jid}:{}};import(`./live-session-curation-EtIGz3m_.js`).then(e=>e.r).then(n=>n.scheduleLiveDeltaCuration({vfs:e,cone:t})).catch(e=>{WA.warn(`Live delta curation failed to start`,{folder:this.scoop.folder,error:e instanceof Error?e.message:String(e)})})}async settleLiveSnapshot(e){if(!(this.unit.parentId!==null||!this.fs))try{let{discardLiveSnapshot:t,finalizeLiveSnapshot:n}=await import(`./live-session-snapshot-Chxvnh3i.js`);e?await t(this.fs,this.scoop.folder):await n(this.fs,this.scoop.folder)}catch(t){WA.warn(`Live snapshot settle failed (archive stays live)`,{folder:this.scoop.folder,discard:e,error:t instanceof Error?t.message:String(t)})}}getAgentMessages(){return this.agent?.state?.messages?structuredClone(this.agent.state.messages):[]}getContextFill(){return MD(this.agent?.state?.messages??[],this.scoop)}getSessionId(){return this.sessions.sessionId}getFS(){return this.fs}getShell(){return this.shell}updateModel(){this.agent&&(this.activeEffortOverride=zD(this.agent,this.scoop))}async reloadSkills(){this.agent&&await VD(this.agent,{scoop:this.scoop,unit:this.unit,fs:this.fs,skillsFs:this.skillsFs,getGlobalMemory:()=>this.callbacks.getGlobalMemory()})}setThinkingLevel(e,t){if(!this.agent)return WA.info(`Thinking level stored for a deferred agent`,{requested:e}),`off`;if(LD())return this.agent.state.thinkingLevel;this.activeEffortOverride=t;let n=BD(this.agent,e);return WA.info(`Thinking level applied`,{requested:e,resolved:n,model:this.agent.state.model?.id,provider:this.agent.state.model?.provider,reasoning:this.agent.state.model?.reasoning===!0}),n}getThinkingLevel(){return this.agent?.state.thinkingLevel??`off`}streamThinking(){if(!this.agent)return null;let e=this.agent.state.thinkingLevel;return{level:e,...e!==`off`&&this.activeEffortOverride===`max`?{effortOverride:`max`}:{}}}dispose(){this.sessions.persistNow(),this.turnJournal?.end(this.scoop.jid),this.disposed=!0,this.disarmForceRelease(),this.idleCompaction?.cancel(),this.runBounds.disarm(),zA(this.processManager,this.currentTurnProcess,`SIGTERM`,this.promptAbortController),this.bashJobs.reapAll(),this.promptAbortController=null,this.agent?.clearAllQueues?.(),this.agent?.abort?.(),this.unsubscribe?.(),this.unsubscribe=null,this.shell?.dispose(),this.compactFn=null,this.getCompactionApiKey=null,this.agent=null,this.shell=null,this.fs=null}handleAgentEvent(e,t){if(!this.disposed)return vD(e,this.eventSink,t)}async makeToolCallDurable(e,t,n){let r=Promise.all([this.sessions.flush(),n?this.turnJournal?.toolStarted(this.scoop.jid,n,e,t):null]),i,a=new Promise(e=>{i=setTimeout(()=>e(`timeout`),2e3)});try{await Promise.race([r,a])===`timeout`&&WA.warn(`Tool call not yet durable; running it anyway`,{folder:this.scoop.folder,toolName:e})}finally{clearTimeout(i)}}checkpoint(e){let t=e?.role;if(t===`user`)this.sessions.persistNow();else if(t===`toolResult`){let{toolCallId:t}=e;this.sessions.flush().then(()=>this.turnJournal?.toolEnded(this.scoop.jid,t))}else this.sessions.schedule()}setStatus(e){this.disposed||(this.status=e,e===`ready`?this.armIdleCompaction():this.idleCompaction?.cancel(),this.callbacks.onStatusChange(e))}handleAssistantMessageEnd(e){e.errorMessage||this.overflow.markAssistantSucceeded();let t=e.content.filter(e=>e.type===`text`).map(e=>e.text).join(``);t&&!this.didStreamDeltas&&this.callbacks.onResponse(t,!1)}handleAgentEndEvent(e,t){this.disposed||t?.aborted||gD(e,{imageRecovery:this.imageRecovery,overflow:this.overflow,isProcessing:()=>this.isProcessing,didStreamDeltas:()=>this.didStreamDeltas,latchStreamError:e=>{this.promptStreamErrorMessage=e},onError:e=>this.callbacks.onError(e),persist:e=>this.sessions.persistNow(e)},t)}reportExhaustedOverflow(e){this.unit.completion.mode===`interactive`?this.callbacks.onError(e):this.callbacks.onFatalError?this.callbacks.onFatalError(e):this.callbacks.onError(e)}};const Z=_(`scoop-lifecycle-manager`);var KA=class{deps;units=new Map;tabCreates=new Map;gelatiereModelSync=Promise.resolve();constructor(e){this.deps=e}getUnit(e){return this.units.get(e)}ensureUnit(e){let t=this.units.get(e);return(!t||t.isClosed)&&(t=new tD(e,{getScoop:e=>this.deps.getScoops().get(e),sendPrompt:(e,t,n,r,i)=>this.sendPrompt(e,t,n,r,[],i),clearIdleTimer:e=>this.deps.idleTimers.clear(e),forgetCompletion:(e,t)=>this.deps.completionService.forgetScoop(e,t),unregister:e=>this.unregister(e)}),this.units.set(e,t)),t}getContexts(){let e=new Map;for(let[t,n]of this.units)n.context&&e.set(t,n.context);return e}getContext(e){return this.units.get(e)?.context??void 0}syncReadGrants(e){for(let t of this.deps.getScoops().values()){if(e!==void 0&&t.folder!==e)continue;let n=this.getContext(t.jid)?.getFS();this.applyPolicyReadGrants(t,n)}}getTab(e){return this.units.get(e)?.tab??void 0}observe(e,t){return this.ensureUnit(e).observe(t)}displayJidFor(e){let t=this.deps.approverFor(e)?.jid;return t&&t!==e?t:void 0}dispatch(e,t,...n){this.units.get(e)?.dispatch(t,...n)}parentOf(e){let t=this.deps.getScoops();return(e.parentJid===null?void 0:t.get(e.parentJid))??O(t.values())[0]}rootOf(e){let t=this.deps.getScoops();return Ln(t.values(),e)??O(t.values())[0]}async ensureSudoersLoaded(e){let t=this.deps.getSudoManager();if(t)try{await t.initScoopPolicy(e.folder,e.config)}catch(t){Z.warn(`Failed to initialize per-scoop sudo policy; continuing with existing policy`,{folder:e.folder,error:t instanceof Error?t.message:String(t)})}}applyPolicyReadGrants(e,t){if(!(t instanceof Dr))return;let n=this.deps.getSudoManager()?.getPolicyForScoop(e.folder);n&&t.setReadGrants(n.read.filter(e=>e.nopasswd).map(e=>e.pattern))}createTab(e){let t=this.tabCreates.get(e);if(t)return t;let n;return n=this.openTab(e).finally(()=>{this.tabCreates.get(e)===n&&this.tabCreates.delete(e)}),this.tabCreates.set(e,n),n}async openTab(e){let t=this.deps.getScoops().get(e);if(!t)throw Error(`Scoop not found: ${e}`);let n=this.ensureUnit(e);if(n.context){if(n.tab?.status===`error`)Z.info(`Re-creating context after error`,{jid:e}),n.disposeContext();else{Z.debug(`Context already exists`,{jid:e});return}}let r=this.deps.getSharedFs();if(!r)throw Error(`Shared filesystem not initialized`);let i=`scoop-${t.folder}-${Date.now()}`,a=sr(t).policy.filesystem;if(a.kind===`restricted`){let e=jn(a.mode);if(!e.ok)throw Error(e.error)}let o=a.kind===`full-workspace`?r:new Dr(r,[...a.writablePaths],[...a.visiblePaths],`sudo-delegated`,{includeMounts:An(a.mode)});a.kind===`restricted`&&(await this.ensureSudoersLoaded(t),this.applyPolicyReadGrants(t,o));let s=this.buildContextCallbacks(e,t),c=this.rootOf(t)?.jid,l=new GA(t,s,o,this.deps.getSessionStore()??void 0,r??void 0,c,this.deps.getProcessManager()??void 0,this.deps.getSudoManager(),this.deps.getConversationStore(),this.deps.getCapabilityBroker?.()??void 0,this.deps.getTurnJournal?.()??void 0);if(n.attachContext(l,i),await l.init(),this.units.get(e)!==n||n.context!==l)return;n.tab?.status===`initializing`&&n.transition(`ready`)&&(this.deps.callbacks.onStatusChange(e,`ready`),this.dispatch(e,`onStatusChange`,`ready`),Promise.resolve().then(()=>this.deps.messageRouter.flushOnIdle(e)).catch(t=>{Z.warn(`Initial idle queue probe failed`,{jid:e,error:t instanceof Error?t.message:String(t)})}));let u=this.deps.getScoops().get(e);u&&u.parentJid!==null&&u.notifyOnComplete!==!1&&this.deps.idleTimers.start(e),Z.info(`Scoop context created`,{jid:e,contextId:i})}async reinitAfterPromote(e){let t=this.units.get(e);if(t?.context){t.disposeContext();try{await this.createTab(e)}catch(n){let r=n instanceof Error?n.message:String(n);Z.warn(`Failed to re-init promoted unit; next prompt will retry`,{jid:e,error:r}),t.disposeContext(),this.markTabError(e,r)}}}destroyTab(e){this.deps.idleTimers.clear(e);let t=this.units.get(e);t&&(t.teardown(),this.units.delete(e),Z.info(`Scoop context destroyed`,{jid:e}))}getTabsMap(){let e=new Map;for(let[t,n]of this.units)n.tab&&e.set(t,n.tab);return e}markTabError(e,t){let n=this.ensureUnit(e);n.transition(`error`,{contextId:n.tab?.contextId??`scoop-error-${e}`,error:t})}dispatchEvent(e,t,...n){this.dispatch(e,t,...n)}stopAndClearAllContexts(){for(let e of this.units.values())e.detachContext()}async destroyAllTabs(){for(let e of Array.from(this.units.keys()))this.destroyTab(e)}async waitForTabReady(e,t=1e4){let n=Date.now();for(;Date.now()-n<t;){let t=this.getTab(e);if(!t)return!1;if(t.status===`ready`||t.status===`processing`)return!0;if(t.status===`error`)return!1;await new Promise(e=>setTimeout(e,100))}return Z.warn(`Timed out waiting for tab to become ready`,{jid:e}),!1}async sendPrompt(e,t,n,r,i=[],a){let o=this.deps.getScoops().get(e);if(o&&jx(o)&&(await this.syncGelatiereModel(),!Zn(o)))throw Error(`The gelatiere cannot run until the leading cone has a model`);let s=this.getContext(e);s||=(await this.createTab(e),this.getContext(e));let c=this.units.get(e);if(c?.tab?.status===`initializing`){if(Z.debug(`Context initializing, waiting to send message`,{jid:e}),!await this.waitForTabReady(e)){Z.error(`Context did not become ready in time, dropping prompt`,{jid:e});return}s=this.getContext(e)}if(!s||!c){Z.error(`Context not found after creation`,{jid:e});return}this.deps.idleTimers.clear(e),this.deps.completionService.clearResponse(e),c.tab&&c.transition(`processing`)&&(this.deps.callbacks.onStatusChange(e,`processing`),this.dispatch(e,`onStatusChange`,`processing`)),Z.debug(`Prompt sent to scoop`,{jid:e,textLength:t.length,imageCount:i.length}),await s.prompt(t,i,a)}async resumeTurn(e,t,n){let r=this.getContext(e),i=this.units.get(e);!r||!i||r.isBusy||(this.deps.idleTimers.clear(e),this.deps.completionService.clearResponse(e),i.tab&&i.transition(`processing`)&&(this.deps.callbacks.onStatusChange(e,`processing`),this.dispatch(e,`onStatusChange`,`processing`)),await r.resumeTurn(t,n))}async register(e){let t=this.deps.getScoops(),n=zn(t.values())?.jid;if($n(e),this.inheritModel(e),e.parentJid!==null){let n=[];for(let r of t.values())r.jid!==e.jid&&n.push(r.folder);let r=Un(e.folder,n);r!==e.folder&&(Z.warn(`Scoop folder already taken — registering under a free variant`,{jid:e.jid,requested:e.folder,folder:r}),e.folder=r,e.trigger=`@${r}`,e.assistantLabel=r)}t.set(e.jid,e);try{await this.deps.db.saveScoop(e)}catch(n){throw t.delete(e.jid),n}this.deps.messageRouter.ensureQueue(e.jid),Z.info(`Scoop registered`,{jid:e.jid,name:e.name});try{await this.createTab(e.jid),e.parentJid!==null&&jE(`spawn`,e.folder)}catch(n){Z.error(`Scoop init failed`,{jid:e.jid,name:e.name,error:n instanceof Error?n.message:String(n)});try{this.destroyTab(e.jid)}catch(t){Z.warn(`Failed to destroy scoop runtime during init rollback`,{jid:e.jid,name:e.name,error:t instanceof Error?t.message:String(t)})}throw t.delete(e.jid),this.deps.messageRouter.forgetScoop(e.jid),await this.deps.db.deleteScoop(e.jid).catch(t=>{Z.warn(`Failed to rollback scoop registration`,{jid:e.jid,name:e.name,error:t instanceof Error?t.message:String(t)})}),n}zn(t.values())?.jid!==n&&await this.syncGelatiereModel().catch(t=>{Z.warn(`Failed to follow the new leading cone after registration`,{jid:e.jid,error:t instanceof Error?t.message:String(t)})})}inheritModel(e){if(jx(e)){let t=zn(this.deps.getScoops().values());Hn(e,t?Zn(t):void 0);return}if(Bn(e))return;let t=e.parentJid?this.deps.getScoops().get(e.parentJid):void 0,n=(t?Zn(t):void 0)??xE();n&&Hn(e,n)}async unregister(e){let t=this.deps.getScoops(),n=zn(t.values())?.jid===e;for(let n of nr(t.values(),e))await this.unregister(n.jid);let r=t.get(e);if(r&&r.parentJid===null&&O(t.values()).length<=1)throw Error(`Cannot drop the last cone`);let i=this.deps.getLickManager();if(r&&i){let{webhooks:e,cronTasks:t}=await i.getLicksForScoopFromDb(r.name,r.folder),n=this.deps.buildActiveLicksError(r.folder,e,t);if(n)throw n}this.deps.costTracker.snapshot(e);let a=globalThis.__slicc_wsSubscribers;a&&a.dropForScoop(e).catch(t=>{Z.warn(`dropForScoop (ws subscribers) failed`,{jid:e,error:t instanceof Error?t.message:String(t)})}),this.destroyTab(e),await Promise.all([r?this.deps.getConversationStore()?.delete(kr(r)):void 0,this.deps.getSessionStore()?.delete(e).catch(t=>{Z.warn(`Failed to delete agent session`,{jid:e,error:t instanceof Error?t.message:String(t)})})]),await this.deps.db.deleteScoop(e),t.delete(e),this.deps.messageRouter.forgetScoop(e),this.deps.completionService.forgetScoop(e,`unregister`);let o=this.deps.approvalRouter.failScoop(e);if(o>0&&Z.info(`Failed-closed pending sudo requests for unregistered scoop`,{jid:e,count:o}),r&&this.deps.getSudoManager()?.forgetScoopPolicies(r.folder),Z.info(`Scoop unregistered`,{jid:e}),r)try{this.deps.callbacks.onScoopUnregistered?.(r)}catch(t){Z.warn(`onScoopUnregistered callback threw`,{jid:e,error:t instanceof Error?t.message:String(t)})}n&&await this.syncGelatiereModel().catch(t=>{Z.warn(`Failed to follow the replacement leading cone after root removal`,{jid:e,error:t instanceof Error?t.message:String(t)})})}async setModel(e,t){let n=this.deps.getScoops().get(e);if(!n)return!1;if(jx(n))return await this.syncGelatiereModel(),!1;let r=zn(this.deps.getScoops().values())?.jid===e,i=n.model;Hn(n,t),this.getContext(e)?.updateModel();try{await this.deps.db.saveScoop(n)}catch(t){return Hn(n,i),this.getContext(e)?.updateModel(),Z.warn(`Failed to persist unit model; rolled back`,{jid:e,error:t instanceof Error?t.message:String(t)}),!1}return r&&await this.syncGelatiereModel().catch(t=>{Z.warn(`Failed to synchronize gelatiere after leading model change`,{jid:e,error:t instanceof Error?t.message:String(t)})}),!0}syncGelatiereModel(){let e=this.gelatiereModelSync.then(()=>this.applyGelatiereModel());return this.gelatiereModelSync=e.then(()=>void 0,()=>void 0),e}async applyGelatiereModel(){let e=this.deps.getScoops(),t=[...e.values()].find(jx);if(!t)return!1;let n=zn(e.values()),r=n?Zn(n):void 0,i=Zn(t),a=r?i?.provider===r.provider&&i.id===r.id:Bn(t)===void 0;if(!a){let e=t.model?{...t.model}:void 0,i=t.config?{...t.config}:void 0;Hn(t,r);try{await this.deps.db.saveScoop(t)}catch(n){throw t.model=e,t.config=i,n}Z.info(`Gelatiere model synchronized with leading cone`,{jid:t.jid,leadingJid:n?.jid,model:r?`${r.provider}:${r.id}`:void 0})}return r&&this.getContext(t.jid)?.updateModel(),!a}refreshModels(){let e=this.getContexts();for(let t of e.values())t.updateModel();Z.info(`Models re-resolved on all active contexts`,{contextCount:e.size})}async reloadAllSkills(){let e=[];for(let[t,n]of this.getContexts()){let r=this.getTab(t);(r?.status===`ready`||r?.status===`processing`)&&e.push(n.reloadSkills().catch(e=>{Z.warn(`Failed to reload skills for scoop`,{jid:t,error:e instanceof Error?e.message:String(e)})}))}await Promise.all(e),Z.info(`Skills reloaded across all contexts`,{count:e.length})}async setThinkingLevel(e,t,n){let r=this.deps.getScoops().get(e);if(!r)return null;let i=this.getContext(e),a=i?i.setThinkingLevel(t,n):null;Yn(r,t===void 0?void 0:{level:t,effortOverride:n});try{await this.deps.db.saveScoop(r)}catch(t){Z.warn(`Failed to persist thinkingLevel`,{jid:e,error:t instanceof Error?t.message:String(t)})}return a}streamThinking(e){return this.getContext(e)?.streamThinking()??null}buildContextCallbacks(e,t){let{callbacks:n,completionService:r,cone:i}=this.deps,a=()=>this.deps.getScoops(),{policy:o,completion:s}=sr(t),c=s.mode!==`interactive`;return{onResponse:(t,i)=>{a().has(e)&&(n.onResponse(e,t,i),this.dispatch(e,`onResponse`,t,i),c&&(i?r.appendResponseChunk(e,t):r.setResponseFull(e,t)))},onResponseDone:()=>{a().has(e)&&(this.units.get(e)?.touch(),n.onResponseDone(e))},onError:n=>this.handleScoopTurnError(e,t,n),onFatalError:t=>this.handleFatalError(e,t),onStatusChange:t=>{a().has(e)&&(this.units.get(e)?.transition(t),n.onStatusChange(e,t),this.dispatch(e,`onStatusChange`,t),t===`ready`&&this.deps.messageRouter.flushOnIdle(e),t===`ready`&&c&&r.notifyCompletion(e))},onCompactionStateChange:(t,r)=>{n.onCompactionStateChange?.(e,t,r)},onToolStart:(t,r,i)=>{n.onToolStart?.(e,t,r,i)},onToolEnd:(t,r,i,a)=>{n.onToolEnd?.(e,t,r,i,a)},onToolUI:(t,r,i)=>{n.onToolUI?.(e,t,r,i,this.displayJidFor(e))},onToolUIDone:t=>{n.onToolUIDone?.(e,t,this.displayJidFor(e))},onToolProgress:(t,r,i)=>{n.onToolProgress?.(e,t,r,i)},onSendMessage:(t,r)=>{let i=`${r?`[${r}] `:``}${t}`;n.onSendMessage(e,i),this.dispatch(e,`onSendMessage`,t)},getScoops:()=>i.getScoops(),getScoopTabState:o.canManageChildren?e=>this.getTab(e):void 0,onFeedScoop:o.canManageChildren?(e,n)=>i.delegateToScoop(e,n,t.assistantLabel):void 0,onScoopScoop:o.canCreateChildren?async e=>{let n={...e,jid:`scoop_${e.folder}_${Date.now()}`,parentJid:t.jid};return Rn(n,t),await i.registerScoop(n),n}:void 0,onDropScoop:o.canManageChildren?async e=>{await i.unregisterScoop(e)}:void 0,onMuteScoops:o.canManageChildren?e=>i.muteScoops(e):void 0,onUnmuteScoops:o.canManageChildren?e=>i.unmuteScoops(e):void 0,onScheduleScoopWait:o.canManageChildren?(t,n)=>i.scheduleScoopWait(t,n,e):void 0,getGlobalMemory:()=>i.getGlobalMemory(),setGlobalMemory:o.canWriteSharedMemory?e=>i.setGlobalMemory(e):void 0,appendConeMemory:o.canWriteSharedMemory?(e,n)=>i.appendConeMemory(e,{...n,memoryPath:fr(t).memoryPath}):void 0,onSudoRequest:o.approvalAuthority===`user`?void 0:t=>i.enqueueSudoRequest(e,t),approveGuestToolCall:e=>i.approveDirectedOrUser(e),onSudoResolve:o.canResolveApprovals?(n,r)=>i.resolveActionableLick(n,r,Nn(t)?void 0:e):void 0,onListSudoRequests:o.canResolveApprovals?()=>i.listPendingSudoRequests(Nn(t)?void 0:e):void 0,getBrowserAPI:()=>n.getBrowserAPI()}}handleScoopTurnError(e,t,n){this.deps.getScoops().has(e)&&(this.deps.completionService.recordFailure(e,n),this.units.get(e)?.transition(`error`,{error:n}),jE(`error`,t.folder,n),this.deps.callbacks.onError(e,n),this.deps.callbacks.onStatusChange(e,`error`),this.dispatch(e,`onError`,n),this.dispatch(e,`onStatusChange`,`error`))}handleFatalError(e,t){let n=this.deps.getScoops();if(!n.has(e))return;let r=n.get(e);if(Z.error(`Fatal scoop error`,{jid:e,folder:r.folder,error:t}),jE(`error`,r.folder,t),this.units.get(e)?.transition(`error`,{error:t}),this.deps.callbacks.onError(e,t),this.deps.callbacks.onStatusChange(e,`error`),this.dispatch(e,`onError`,t),this.dispatch(e,`onStatusChange`,`error`),sr(r).completion.mode===`interactive`)return;this.deps.completionService.forgetScoop(e,`fatal-error`);let i=this.parentOf(r);if(i)try{this.deps.callbacks.onError(i.jid,`[@${r.assistantLabel} FAILED]: ${t}`,{endTurn:!1})}catch(e){Z.error(`Failed to record fatal error for scoop owner`,{scoop:r.folder,error:e instanceof Error?e.message:String(e)})}}};const Q=_(`scoop-message-router`);var qA=class{deps;messageQueues=new Map;lastAgentTimestamp=new Map;pollInterval=null;debounceStates=new Map;processing=new Map;busyDeferrals=new Map;constructor(e){this.deps=e}ensureQueue(e){this.messageQueues.has(e)||this.messageQueues.set(e,[])}setLastAgentTimestamp(e,t){this.lastAgentTimestamp.set(e,t)}forgetScoop(e){this.cancelDebounce(e),this.messageQueues.delete(e),this.lastAgentTimestamp.delete(e),this.clearBusyDeferral(e)}async handleMessage(e){if(Q.info(`handleMessage`,{id:e.id,chatJid:e.chatJid,sender:e.senderName,channel:e.channel,contentPreview:e.content.slice(0,80)}),this.deps.isExternalLickChannel(e.channel))try{this.deps.notifyIncomingMessage(e.chatJid,e)}catch(t){Q.warn(`onIncomingMessage for external lick channel threw`,{channel:e.channel,error:t instanceof Error?t.message:String(t)})}await this.deps.db.saveMessage(e),await this.routeToScoop(e)}async delegateToScoop(e,t,n){let r=this.deps.getScoops().get(e);if(!r)throw Error(`Scoop not found: ${e}`);jE(`feed`,r.folder);let i={id:`delegate-${Date.now()}-${Math.random().toString(36).slice(2)}`,chatJid:e,senderId:`cone`,senderName:n,content:t,timestamp:new Date().toISOString(),fromAssistant:!0,channel:`delegation`};await this.deps.db.saveMessage(i),this.deps.notifyIncomingMessage(e,i),Q.info(`Delegating to scoop`,{scoopJid:e,scoopName:r.name,promptLength:t.length}),this.deps.sendPrompt(e,t,`cone`,n).catch(t=>{let n=t instanceof Error?t.message:String(t);Q.error(`Delegation failed`,{scoopJid:e,error:n}),this.deps.onError(e,`Delegation failed: ${n}`)})}async routeToScoop(e){let t=this.deps.getScoops().get(e.chatJid);if(!t){Q.info(`routeToScoop: unregistered target`,{chatJid:e.chatJid});return}if(!this.passesTriggerGate(t,e)){Q.info(`routeToScoop: trigger not found in content`,{chatJid:e.chatJid,trigger:t.trigger,contentPreview:e.content.slice(0,80)});return}let n=this.messageQueues.get(e.chatJid)??[];n.push(e),this.messageQueues.set(e.chatJid,n);let r=this.deps.getTabs().get(e.chatJid);if(Q.debug(`routeToScoop: queued`,{chatJid:e.chatJid,scoopName:t.name,tabStatus:r?.status??`no-tab`,queueLength:n.length}),r?.status===`error`){Q.info(`routeToScoop: tab in error state, retrying init`,{chatJid:e.chatJid});try{await this.deps.createScoopTab(e.chatJid),r=this.deps.getTabs().get(e.chatJid)}catch{Q.warn(`routeToScoop: retry init failed`,{chatJid:e.chatJid})}}if(r?.status===`ready`||r?.status===`processing`){if(this.deps.isExternalLickChannel(e.channel)){await this.scheduleScoopQueue(e.chatJid,e.id);return}await this.flushScoopQueue(e.chatJid)}}passesTriggerGate(e,t){let n=t.channel===`webhook`||t.channel===`cron`||t.channel===`fswatch`||t.channel===`sprinkle`||t.channel===`bash`||t.channel===`scoop-notify`||t.channel===`scoop-idle`||t.channel===`scoop-wait`;return!e||e.parentJid===null||!e.requiresTrigger||!e.trigger||n||t.content.includes(e.trigger)}scheduleScoopQueue(e,t){let n=this.debounceStates.get(e)??{startedAt:Date.now(),waiters:[]};n.timer!==void 0&&clearTimeout(n.timer);let r=new Promise((e,r)=>{n.waiters.push({messageId:t,resolve:e,reject:r})}),i=Math.max(0,3e3-(Date.now()-n.startedAt));return n.timer=setTimeout(()=>{n.timer=void 0,this.flushScoopQueue(e).catch(t=>{let n=t instanceof Error?t.message:String(t);Q.error(`Debounced message queue processing failed`,{jid:e,error:n}),this.deps.onError(e,`Queue processing failed: ${n}`)})},Math.min(1e3,i)),this.debounceStates.set(e,n),r}async flushScoopQueue(e){let t=this.takeDebounce(e);if(t&&this.processing.has(e)&&this.shouldDeferQueuedLicks(e)){for(let e of t.waiters)e.resolve();this.recordBusyDeferral(e,this.messageQueues.get(e)?.length??0);return}try{await this.processScoopQueue(e);for(let e of t?.waiters??[])e.resolve()}catch(e){for(let n of t?.waiters??[])n.reject(e);throw e}}async flushOnIdle(e){if(this.messageQueues.has(e))try{await this.flushScoopQueue(e)}catch(t){let n=t instanceof Error?t.message:String(t);Q.error(`Idle message queue processing failed`,{jid:e,error:n}),this.deps.onError(e,`Queue processing failed: ${n}`)}}shouldDeferQueuedLicks(e){let t=this.messageQueues.get(e);return t!==void 0&&t.length>0&&t.every(e=>this.deps.isExternalLickChannel(e.channel))}recordBusyDeferral(e,t){let n=this.busyDeferrals.get(e)??{startedAt:Date.now(),reported:!1,count:t??0};t!==void 0&&(n.count=t),this.busyDeferrals.set(e,n);let r=Date.now()-n.startedAt;n.reported||r<3e5||(n.reported=!0,Q.warn(`Busy lick queue may be starved`,{jid:e,error:`Lick queue remained deferred while scoop was busy for 300s`}),this.emitLickBackpressure(e,{count:n.count,waitingMs:r}))}clearBusyDeferral(e){let t=this.busyDeferrals.get(e);this.busyDeferrals.delete(e),t?.reported&&this.emitLickBackpressure(e,{count:0,waitingMs:Date.now()-t.startedAt})}emitLickBackpressure(e,t){try{this.deps.onLickBackpressure?.(e,t)}catch(t){Q.warn(`Lick backpressure callback failed`,{jid:e,error:t instanceof Error?t.message:String(t)})}}takeDebounce(e){let t=this.debounceStates.get(e);return t?.timer!==void 0&&clearTimeout(t.timer),this.debounceStates.delete(e),t}cancelDebounce(e){let t=this.takeDebounce(e);for(let e of t?.waiters??[])e.resolve()}cancelDebounces(){for(let e of this.debounceStates.keys())this.cancelDebounce(e)}cancelDebounceWaiter(e,t){let n=this.debounceStates.get(e);if(!n)return;let r=[];for(let e of n.waiters)e.messageId===t?e.resolve():r.push(e);n.waiters=r,r.length===0&&this.cancelDebounce(e)}async processScoopQueue(e){let t=this.processing.get(e);if(t){t.rerun=!0,await t.done.catch(()=>{});return}let n={rerun:!1,done:Promise.resolve()};return this.processing.set(e,n),n.done=this.drainScoopQueue(e,n),n.done}async drainScoopQueue(e,t){let n=!1,r;try{do{t.rerun=!1;try{await this.runScoopQueue(e)}catch(e){n||(n=!0,r=e)}}while(t.rerun)}finally{this.processing.delete(e)}if(n)throw r}async runScoopQueue(e){let t=this.messageQueues.get(e);if(!t){Q.debug(`processScoopQueue: queue not registered`,{jid:e});return}let n=this.deps.getTabs().get(e);if(n?.status!==`ready`&&n?.status!==`processing`){Q.debug(`processScoopQueue: tab not ready`,{jid:e,status:n?.status??`no-tab`});return}let r=this.deps.getScoops().get(e),i=r?.assistantLabel??e,a=this.lastAgentTimestamp.get(e)??``,o=await this.deps.db.getMessagesSince(e,a,i),s=o.filter(e=>this.passesTriggerGate(r,e));if(Q.debug(`processScoopQueue: DB query`,{jid:e,scoopName:r?.name,excludeName:i,since:a,dbMessageCount:o.length,eligibleMessageCount:s.length,queueLength:t.length}),o.length===0){Q.debug(`processScoopQueue: no messages from DB, clearing queue`,{jid:e}),this.messageQueues.set(e,[]),this.clearBusyDeferral(e);return}if(s.length===0){Q.debug(`processScoopQueue: no messages passed trigger gate, clearing queue`,{jid:e}),this.messageQueues.set(e,[]),this.clearBusyDeferral(e);let t=xb(Cb(bb(a),o));this.lastAgentTimestamp.set(e,t),await this.deps.db.setState(`lastAgentTs_${e}`,t);return}if(s.every(e=>this.deps.isExternalLickChannel(e.channel))&&this.deps.getContexts().get(e)?.isBusy){Q.debug(`processScoopQueue: deferring lick batch while scoop is busy`,{jid:e,messageCount:s.length}),this.recordBusyDeferral(e,s.length);return}this.clearBusyDeferral(e);let c=[],l=s.map(e=>{let t=new Date(e.timestamp),n=t.toLocaleString(`en-US`,{month:`short`,day:`numeric`,hour:`numeric`,minute:`2-digit`,hour12:!0}),r=M_(e.content,e.attachments);return e.attachments?.length&&c.push({id:e.id,timestamp:t.getTime(),body:r,attachments:[...e.attachments]}),`[${n}] ${e.senderName}: ${r}`}).join(`
1178
+ `);c.length>0&&this.deps.recordSentAttachments?.(e,c);let u=s.flatMap(e=>N_(e.attachments));this.messageQueues.set(e,[]);let d=s[s.length-1],f=xb(Cb(bb(a),o));this.lastAgentTimestamp.set(e,f),await this.deps.db.setState(`lastAgentTs_${e}`,f);let p=s.some(e=>e.steer),m=new Set,h=[];for(let e of s){if(!e.guestGate)continue;let t=JSON.stringify(e.guestGate);m.has(t)||(m.add(t),h.push(e.guestGate))}await this.deps.sendPrompt(e,l,d.senderId,d.senderName,u,{steer:p,...h.length>0?{guestGates:h}:{}})}startMessageLoop(){this.pollInterval||=setInterval(()=>{let e=this.deps.getTabs();for(let t of this.deps.getScoops().keys()){let n=e.get(t);this.recordBusyDeferralIfPresent(t);let r=(this.messageQueues.get(t)?.length??0)>0;n?.status===`ready`&&r&&!this.debounceStates.has(t)&&this.processScoopQueue(t).catch(e=>{let n=e instanceof Error?e.message:String(e);Q.error(`Message queue processing failed`,{jid:t,error:n}),this.deps.onError(t,`Queue processing failed: ${n}`)})}},2e3)}recordBusyDeferralIfPresent(e){this.busyDeferrals.has(e)&&this.recordBusyDeferral(e)}stopMessageLoop(){this.cancelDebounces(),this.pollInterval&&=(clearInterval(this.pollInterval),null)}async clearScoopMessages(e,t,n={}){this.cancelDebounce(e),await this.deps.settleFoldedCost?.(e),t&&await t.clearSession(n).catch(t=>{Q.warn(`Failed to clear the durable conversation for scoop`,{jid:e,error:t instanceof Error?t.message:String(t)})}),await this.deps.db.clearMessagesForScoop(e).catch(t=>{Q.warn(`Failed to clear persisted channel history for scoop`,{jid:e,error:t instanceof Error?t.message:String(t)})}),this.lastAgentTimestamp.delete(e),this.messageQueues.set(e,[]),this.clearBusyDeferral(e),Q.info(`Scoop messages cleared`,{jid:e})}async clearAllMessages(){this.cancelDebounces(),await this.deps.db.clearAllMessages();let e=this.deps.getSessionStore();e&&await e.clearAll().catch(e=>{Q.warn(`Failed to clear agent sessions`,{error:e instanceof Error?e.message:String(e)})}),await Promise.all([...this.deps.getContexts().values()].map(e=>e.clearSession().catch(e=>{Q.warn(`Failed to clear a durable conversation`,{error:e instanceof Error?e.message:String(e)})}))),this.lastAgentTimestamp.clear();for(let e of this.busyDeferrals.keys())this.clearBusyDeferral(e);for(let e of this.deps.getScoops().keys())this.messageQueues.set(e,[]);this.deps.resetCostTracker(),Q.info(`All messages cleared`)}getQueuedMessageIds(e){return(this.messageQueues.get(e)??[]).map(e=>e.id)}async clearQueuedMessages(e){this.cancelDebounce(e);let t=this.messageQueues.get(e)??[],n=this.deps.getScoops().get(e)?.assistantLabel??e,r=this.lastAgentTimestamp.get(e)??``,i=await this.deps.db.getMessagesSince(e,r,n),a=new Set([...t,...i].map(e=>e.id));for(let e of a)await this.deps.db.deleteMessage(e);this.messageQueues.set(e,[]),this.clearBusyDeferral(e)}async deleteQueuedMessage(e,t){let n=this.messageQueues.get(e);if(n){let r=n.findIndex(e=>e.id===t);r!==-1&&n.splice(r,1),n.length===0&&this.clearBusyDeferral(e)}this.cancelDebounceWaiter(e,t),await this.deps.db.deleteMessage(t)}};const $=_(`orchestrator`),JA={decision:`deny`};var YA=class{scoops=new Map;workUnits=new Hy(this);container;callbacks;config;scheduler=null;sharedFs=null;memoryStore=new BT({getSharedFs:()=>this.sharedFs});lickManager=null;sessionStore=null;conversationStore=null;onConversationsReady=null;turnJournal=null;interruptedTurns=null;bootRestoreTail=Promise.resolve();fsWatcher=null;sudoManager=null;capabilityBroker=null;llmsTxtIgnorePolicy=null;modelPolicyFile=null;lifecycle;idleTimers=new QE({getScoops:()=>this.scoops,getTabs:()=>this.lifecycle.getTabsMap(),findParent:e=>this.parentOrDefaultRoot(e),handleMessage:e=>this.handleMessage(e),notifyIncomingMessage:(e,t)=>this.callbacks.onIncomingMessage?.(e,t)});costTracker=new XE({getScoops:()=>this.scoops,getContexts:()=>this.lifecycle.getContexts(),mergeFoldedIntoFrozen:(e,t)=>this.mergeFoldedCostIntoFrozen(e,t)});completionService=new RE({getSharedFs:()=>this.sharedFs,getScoop:e=>this.scoops.get(e),findParent:e=>this.parentOrDefaultRoot(e),hasScoop:e=>this.scoops.has(e),notifyIncomingMessage:(e,t)=>this.callbacks.onIncomingMessage?.(e,t),handleMessage:e=>this.handleMessage(e),reportError:(e,t)=>this.callbacks.onError(e,t)});processManager=null;unregisterExportService=null;approvalRouter=new TE({getScoops:()=>this.scoops,findApprover:e=>this.capableApproverOrDefaultRoot(e),getSudoManager:()=>this.sudoManager,getLickManager:()=>this.lickManager,handleMessage:e=>this.handleMessage(e),onMessageUpdate:(e,t)=>this.callbacks.onMessageUpdate?.(e,t),getMessagesForScoop:e=>vb(e),saveMessage:e=>gb(e)});lickRegistry=new _E({getConeShell:()=>{let e=this.defaultRoot();return e?this.lifecycle.getContext(e.jid)?.getShell()??null:null},getConeFs:()=>{let e=this.defaultRoot();return e?this.lifecycle.getContext(e.jid)?.getFS()??null:null},persistLickDecision:(e,t)=>this.approvalRouter.persistLickDecision(e,t)});messageRouter=new qA({getScoops:()=>this.scoops,getTabs:()=>this.lifecycle.getTabsMap(),getContexts:()=>this.lifecycle.getContexts(),createScoopTab:e=>this.createScoopTab(e),sendPrompt:(e,t,n,r,i,a)=>this.sendPrompt(e,t,n,r,i??[],a),notifyIncomingMessage:(e,t)=>this.callbacks.onIncomingMessage?.(e,t),recordSentAttachments:(e,t)=>this.recordSentAttachments(e,t),onError:(e,t,n)=>this.callbacks.onError(e,t,n),onLickBackpressure:(e,t)=>this.callbacks.onLickBackpressure?.(e,t),getSessionStore:()=>this.sessionStore,resetCostTracker:()=>this.costTracker.reset(),settleFoldedCost:e=>this.costTracker.settleFolded(e),db:{saveMessage:e=>gb(e),deleteMessage:e=>_b(e),clearMessagesForScoop:e=>hb(e),clearAllMessages:()=>mb(),getMessagesSince:(e,t,n)=>wb(e,t,n),setState:(e,t)=>Ab(e,t)},isExternalLickChannel:xy});constructor(e,t,n={name:`sliccy`,triggerPattern:/^@sliccy\b/i}){this.container=e,this.callbacks=t,this.config=n,this.lifecycle=new KA({getScoops:()=>this.scoops,approverFor:e=>this.ownerRootOrDefault(e),getSharedFs:()=>this.sharedFs,getSessionStore:()=>this.sessionStore,getConversationStore:()=>this.conversationStore,getProcessManager:()=>this.processManager,getSudoManager:()=>this.sudoManager,getCapabilityBroker:()=>this.capabilityBroker,getTurnJournal:()=>this.turnJournal,callbacks:this.callbacks,idleTimers:this.idleTimers,completionService:this.completionService,db:{saveScoop:e=>db(e),deleteScoop:e=>pb(e)},getLickManager:()=>this.lickManager,buildActiveLicksError:(e,t,n)=>fE(e,t,n),messageRouter:{ensureQueue:e=>this.messageRouter.ensureQueue(e),forgetScoop:e=>this.messageRouter.forgetScoop(e),flushOnIdle:e=>this.messageRouter.flushOnIdle(e)},costTracker:{snapshot:e=>this.costTracker.snapshot(e)},approvalRouter:{failScoop:e=>this.approvalRouter.failScoop(e)},cone:{delegateToScoop:(e,t,n)=>this.delegateToScoop(e,t,n),registerScoop:e=>this.registerScoop(e),unregisterScoop:e=>this.unregisterScoop(e),muteScoops:e=>this.muteScoops(e),unmuteScoops:e=>this.unmuteScoops(e),scheduleScoopWait:(e,t,n)=>this.scheduleScoopWait(e,t,n),getScoops:()=>this.getScoops(),getGlobalMemory:()=>this.getGlobalMemory(),setGlobalMemory:e=>this.setGlobalMemory(e),appendConeMemory:(e,t)=>this.appendConeMemory(e,t),enqueueSudoRequest:(e,t)=>this.enqueueSudoRequest(e,t),resolveActionableLick:(e,t,n)=>this.resolveActionableLick(e,t,n),approveDirectedOrUser:e=>this.approveDirectedOrUser(e),listPendingSudoRequests:e=>this.listPendingSudoRequests(e)}})}setProcessManager(e){this.processManager=e}setCapabilityBroker(e){this.capabilityBroker=e}getCapabilityBroker(){return this.capabilityBroker}getProcessManager(){return this.processManager}async initPolicyLayerAndLoadRecords(e,t,n){return SE(async n=>(await this.ensureRootStructure(),n(),this.sudoManager=new zx({fs:e,watcher:t,capabilityBroker:this.capabilityBroker,onPolicyReload:e=>{this.lifecycle.syncReadGrants(e),this.approvalRouter.settleGrantedRequests(e)}}),await this.sudoManager.init(),n(),this.llmsTxtIgnorePolicy=new Ex(e,t),await this.llmsTxtIgnorePolicy.init(),n(),this.modelPolicyFile=new bE(e,t),await this.modelPolicyFile.init(),n(),fb()),n,{stagePrefix:`orchestrator-init`})}setOnConversationsReady(e){this.onConversationsReady=e}async openSharedFilesystem(e,t){let n=await SE(e=>Er.create({dbName:`slicc-fs`,onRepairProgress:e}),e);this.sharedFs=n,this.sessionStore=new I_,this.conversationStore=new QC;let{TurnJournal:r}=await import(`./turn-journal-C1eVrq7Y.js`);this.turnJournal=new r,this.interruptedTurns=await this.turnJournal.readAll();let i=new Tr;return this.fsWatcher=i,n.setWatcher(i),globalThis.__slicc_fs_watcher=i,t?.onSharedFsReady&&await t.onSharedFsReady(n),{sharedFs:n,fsWatcher:i}}async init(e,t){await jb();let{sharedFs:n,fsWatcher:r}=await this.openSharedFilesystem(e,t),i=await this.initPolicyLayerAndLoadRecords(n,r,e),a=Object.values(i).find(e=>Jn(e))?.jid;for(let e of Object.values(i)){await this.backfillParent(e,a),$n(e),this.migrateScoopConfig(e,Object.values(i)),this.scoops.set(e.jid,e),this.messageRouter.ensureQueue(e.jid);let t=await kb(`lastAgentTs_${e.jid}`);t&&this.messageRouter.setLastAgentTimestamp(e.jid,t)}await this.backfillModels(),await this.migrateConversations(e),await this.memoryStore.ensureGlobalMemory(),await this.memoryStore.migrateLegacyConeMemory(),this.scheduler=new wE({onTaskRun:async(e,t)=>{$.info(`Running scheduled task`,{taskId:e.id,scoop:t.name}),await this.sendPrompt(t.jid,`[SCHEDULED TASK]\n\n${e.prompt}`,`scheduler`,`Scheduled Task`)},getScoop:e=>{for(let t of this.scoops.values())if(t.folder===e)return t}}),this.scheduler.start(),$.info(`Orchestrator initialized`,{scoopCount:this.scoops.size}),e?.(`conversations-ready`),await this.onConversationsReady?.(),await this.restoreScoopContexts(e),Ir(e=>this.getSessionCostsForCommand(e)),Lr(async()=>{let{refreshBudgetWindow:e}=await Promise.resolve().then(()=>R_);return e()}),this.unregisterExportService=s(this.buildWorkerExportService()),this.messageRouter.startMessageLoop()}whenBootRestoresSettled(){return this.bootRestoreTail}async restoreScoopContexts(e){let t=[],n=[];for(let e of this.scoops.values())e.parentJid===null?t.push(e):n.push(e);await OE(t,4,t=>this.restoreScoopContext(t,e));let r=OE(n,4,t=>this.restoreScoopContext(t,e)).catch(e=>{$.warn(`Background scoop restore failed`,{error:e instanceof Error?e.message:String(e)})});this.bootRestoreTail=this.bootRestoreTail.then(()=>r)}async restoreScoopContext(e,t){try{await this.createScoopTab(e.jid)}catch(t){let n=t instanceof Error?t.message:String(t);$.warn(`Skipping scoop whose context failed to initialize during boot`,{jid:e.jid,folder:e.folder,root:e.parentJid===null,error:n}),e.parentJid!==null&&this.lifecycle.markTabError(e.jid,n)}finally{t?.(`scoop-restored:${e.jid}`)}}async migrateConversations(e){let t=this.conversationStore;if(!t)return;let n=new ly;try{await FC({store:t,units:[...this.scoops.values()],loadAgentSession:async e=>{let t=await this.sessionStore?.load(e);return t?{messages:t.messages,createdAt:t.createdAt}:null},loadChatSession:async e=>{let t=await n.load(e);return t?{messages:t.messages,createdAt:t.createdAt}:null},onProgress:e})}catch(e){$.warn(`Canonical conversation migration failed; it will retry on the next boot`,{error:e instanceof Error?e.message:String(e)})}}recordSentAttachments(e,t){let n=this.conversationStore,r=this.scoops.get(e);!n||!r||n.putAttachments(Ar(r),t).catch(t=>{$.warn(`Failed to record sent attachments`,{jid:e,error:t instanceof Error?t.message:String(t)})})}async backfillParent(e,t){if(e.parentJid===void 0){e.parentJid=Jn(e)?null:t??null;try{await db(e)}catch(t){$.warn(`Failed to persist backfilled parentJid; will retry next boot`,{jid:e.jid,error:t instanceof Error?t.message:String(t)})}}}async backfillModels(){let e=[...this.scoops.values()].filter(e=>!Bn(e)&&!jx(e));if(e.length>0){let t=xE(),n=[...e].sort((e,t)=>Number(e.parentJid!==null)-Number(t.parentJid!==null));for(let e of n){let n=e.parentJid?this.scoops.get(e.parentJid):void 0,r=(n?Zn(n):void 0)??t;if(r){Hn(e,r);try{await db(e)}catch(t){$.warn(`Failed to persist backfilled model; will retry next boot`,{jid:e.jid,error:t instanceof Error?t.message:String(t)})}}}}try{await this.lifecycle.syncGelatiereModel()}catch(e){$.warn(`Failed to repair gelatiere model on boot; will retry next boot`,{error:e instanceof Error?e.message:String(e)})}}migrateScoopConfig(e,t){if(e.parentJid===null)return;let n=e.configSchemaVersion??0;if(!(n>=3)){if(n<1&&(e.config={...e.config,visiblePaths:e.config?.visiblePaths??[`/workspace/`]}),n<2&&(e.config={...e.config,writablePaths:e.config?.writablePaths??[`/scoops/${e.folder}/`,`/shared/`]}),n<3){let n=`${cr.root}/`,r=lr(dr(t,e)),i=e.config?.visiblePaths,a=i?.length===1&&i[0]===n;r[0]!==n&&a&&(e.config={...e.config,visiblePaths:r})}e.configSchemaVersion=3}}async ensureRootStructure(){if(this.sharedFs)for(let e of[`/workspace`,`/shared`,`/scoops`,`/home`,`/home/user`,`/tmp`,`/mnt`])try{await this.sharedFs.mkdir(e,{recursive:!0})}catch{}}getGlobalMemory(){return this.memoryStore.getGlobalMemory()}setGlobalMemory(e){return this.memoryStore.setGlobalMemory(e)}appendConeMemory(e,t){return this.memoryStore.appendConeMemory(e,t)}getSharedFS(){return this.sharedFs}getSessionStore(){return this.sessionStore}getConversationStore(){return this.conversationStore}getSudoManager(){return this.sudoManager}setLickManager(e){this.lickManager=e,e.setDiscoveryIgnore?.(e=>this.llmsTxtIgnorePolicy?.ignores(e)??!1),e.setUnitRosterProvider?.(()=>this.getScoops().map(e=>({name:e.name,folder:e.folder}))),globalThis.__slicc_lick_handler=e=>{this.lickManager?.emitEvent(e)}}handleWebhookEvent(e,t,n){return this.lickManager?.handleWebhookEvent(e,t,n)}handleCherryHostEvent(e,t,n){this.lickManager?.emitEvent({type:`cherry`,cherryRuntimeId:e,cherryName:t,cherryOrigin:void 0,body:n,timestamp:new Date().toISOString()})}handlePreviewLick(e){this.lickManager?.emitEvent(e)}observeScoop(e,t){return this.lifecycle.observe(e,t)}muteScoops(e){this.completionService.muteScoops(e)}unmuteScoops(e){return this.completionService.unmuteScoops(e)}isScoopMuted(e){return this.completionService.isScoopMuted(e)}notifyScoopOutcome(e,t){return this.completionService.notifyWithOutcome(e,t)}waitForScoops(e,t){return this.completionService.waitForScoops(e,t)}scheduleScoopWait(e,t,n){return this.completionService.scheduleScoopWait(e,t,n)}async enqueueSudoRequest(e,t){return this.approvalRouter.enqueueSudoRequest(e,t)}async approveDirectedOrUser(e){let{runDirectedApproval:t}=await import(`./directed-approval-Cr-jwHvt.js`);return t(e,{scoops:this.scoops,ownerRootOf:e=>this.ownerRootOrDefault(e),enqueue:(e,t,n)=>this.approvalRouter.enqueueSudoRequest(e,t,n),getSharedFs:()=>this.sharedFs,workspaceFor:fr,approveAsUser:async e=>{let t=this.sudoManager;return t?t.approve(e):($.warn(`Guest approval before SudoManager init — failing closed`),JA)}})}async enqueueDirectedApproval(e,t){return this.approveDirectedOrUser({...t,approver:e})}resolveSudoRequest(e,t){return this.approvalRouter.resolveSudoRequest(e,t)}async resolveSudoRequestAndPersist(e,t,n){return this.approvalRouter.resolveSudoRequestAndPersist(e,t,n)}registerNavigateLick(e){return this.lickRegistry.registerNavigate(e)}getDefaultConeFs(){let e=this.defaultRoot();return e?this.lifecycle.getContext(e.jid)?.getFS()??null:null}registerSessionReloadLick(e){return this.lickRegistry.registerSessionReload(e)}registerUpgradeLick(e){return this.lickRegistry.registerUpgrade(e)}registerDiscoveryLick(e){return this.lickRegistry.registerDiscovery(e)}async resolveActionableLick(e,t,n){return await this.lickRegistry.resolve(e,t)||this.resolveSudoRequestAndPersist(e,t,n)}async resolveNavigateHandoffByHuman(e,t){return this.lickRegistry.resolveHandoffByHuman(e,t)}getConeSudoBroker(e){return this.approvalRouter.getConeSudoBroker(e)}listPendingSudoRequests(e){return this.approvalRouter.listPendingSudoRequests(e)}registerScoop(e){return this.lifecycle.register(e)}async persistScoop(e){this.scoops.set(e.jid,e),await db(e),e.parentJid===null&&await this.lifecycle.syncGelatiereModel().catch(t=>{$.warn(`Failed to follow a persisted root leadership change`,{jid:e.jid,error:t instanceof Error?t.message:String(t)})})}reinitLiveUnit(e){return this.lifecycle.reinitAfterPromote(e)}async rekeyConversation(e,t){await this.conversationStore?.rekey(e,t)}unregisterScoop(e){return this.lifecycle.unregister(e)}getScoops(){return Array.from(this.scoops.values())}getScoop(e){return this.scoops.get(e)}getScoopTabState(e){return this.lifecycle.getTab(e)}defaultRoot(){return O(this.scoops.values())[0]}parentOrDefaultRoot(e){let t=e===void 0?void 0:this.scoops.get(e);return(t?.parentJid?this.scoops.get(t.parentJid):void 0)??this.defaultRoot()}capableApproverOrDefaultRoot(e){let t=e===void 0?void 0:this.scoops.get(e);return er(this.scoops.values(),t)??this.defaultRoot()}ownerRootOrDefault(e){let t=e===void 0?void 0:this.scoops.get(e);return Ln(this.scoops.values(),t)??this.defaultRoot()}getWorkUnits(){return this.workUnits}getLiveUnit(e){return this.lifecycle.getUnit(e)}ensureLiveUnit(e){return this.lifecycle.ensureUnit(e)}async resetFilesystem(){await this.bootRestoreTail,this.lifecycle.stopAndClearAllContexts(),this.sharedFs=await Er.create({dbName:`slicc-fs`,wipe:!0}),this.fsWatcher&&this.sharedFs.setWatcher(this.fsWatcher),await this.ensureRootStructure(),await this.memoryStore.ensureGlobalMemory(),await PT(this.sharedFs).catch(e=>{$.warn(`Failed to re-seed default skills`,{error:e instanceof Error?e.message:String(e)})}),this.sudoManager?.dispose(),this.sudoManager=new zx({fs:this.sharedFs,watcher:this.fsWatcher,capabilityBroker:this.capabilityBroker,onPolicyReload:e=>{this.lifecycle.syncReadGrants(e),this.approvalRouter.settleGrantedRequests(e)}}),await this.sudoManager.init(),this.llmsTxtIgnorePolicy?.dispose(),this.llmsTxtIgnorePolicy=new Ex(this.sharedFs,this.fsWatcher),await this.llmsTxtIgnorePolicy.init(),this.modelPolicyFile?.dispose(),this.modelPolicyFile=new bE(this.sharedFs,this.fsWatcher),await this.modelPolicyFile.init(),this.lickManager?.setDiscoveryIgnore?.(e=>this.llmsTxtIgnorePolicy?.ignores(e)??!1),this.costTracker.reset(),$.info(`Filesystem reset and defaults re-seeded`)}clearScoopMessages(e,t={}){return this.messageRouter.clearScoopMessages(e,this.lifecycle.getContext(e),t)}clearAllMessages(){return this.messageRouter.clearAllMessages()}handleMessage(e){return this.messageRouter.handleMessage(e)}delegateToScoop(e,t,n){return this.messageRouter.delegateToScoop(e,t,n)}createScoopTab(e){return this.lifecycle.createTab(e)}async destroyScoopTab(e){this.lifecycle.destroyTab(e)}isProcessing(e){return this.lifecycle.getTab(e)?.status===`processing`}getScoopContext(e){return this.lifecycle.getContext(e)}getQueuedMessageIds(e){return this.messageRouter.getQueuedMessageIds(e)}clearQueuedMessages(e){return this.messageRouter.clearQueuedMessages(e)}deleteQueuedMessage(e,t){return this.messageRouter.deleteQueuedMessage(e,t)}async getMessagesForScoop(e){return vb(e)}async recoverInterruptedWork(e){await this.bootRestoreTail;let t=this.interruptedTurns;this.interruptedTurns=null;let n=this.turnJournal;if(!t||t.length===0||!n)return[];let{recoverInterruptedWork:r}=await import(`./interrupted-work-recovery-DkaikSRv.js`);return r(t,{journal:n,getScoop:e=>this.scoops.get(e),getUnit:e=>this.lifecycle.getContext(e),resumeTurn:(e,t,n)=>this.lifecycle.resumeTurn(e,t,n),emitLick:e})}sendPrompt(e,t,n,r,i=[],a){return this.lifecycle.sendPrompt(e,t,n,r,i,a)}stopMessageLoop(){this.messageRouter.stopMessageLoop()}setScoopModel(e,t){return this.lifecycle.setModel(e,t)}syncGelatiereModel(){return this.lifecycle.syncGelatiereModel()}refreshModels(){this.lifecycle.refreshModels()}setScoopThinkingLevel(e,t,n){return this.lifecycle.setThinkingLevel(e,t,n)}streamThinking(e){return this.lifecycle.streamThinking(e)}reloadAllSkills(){return this.lifecycle.reloadAllSkills()}stopScoop(e){for(let t of Pn(this.scoops.values(),e))this.lifecycle.getContext(t)?.stop(),this.clearQueuedMessages(t).catch(e=>{$.warn(`Failed to clear queued messages on stop`,{jid:t,error:e instanceof Error?e.message:String(e)})})}getSessionCosts(e){return this.costTracker.getSessionCosts(e)}async mergeFoldedCostIntoFrozen(e,t){let n=this.scoops.get(e);if(!n||!this.sharedFs)return!1;try{let{mergeFoldedCostIntoLatestFrozen:e}=await import(`./merge-folded-cost-into-frozen-COnnhDR_.js`);return await e(this.sharedFs,n,t)}catch(t){return $.warn(`Failed to merge folded agent spend into frozen session`,{jid:e,error:t instanceof Error?t.message:String(t)}),!1}}async getSessionCostsForCommand(e){let t=this.getSessionCosts({includeDropped:e===`all`});if(e===`live`||!this.sharedFs)return t;let{readSessionsIndex:n}=await Promise.resolve().then(()=>hS),r=await n(this.sharedFs);return[...t,...r.map(Rr)]}getModelCosts(e){return this.costTracker.getModelCosts(e)}getBurnRate(e){return this.costTracker.getBurnRate(e)}getContextFills(){return this.costTracker.getContextFills()}async shutdown(){this.stopMessageLoop(),this.idleTimers.clearAll(),this.scheduler?.stop(),this.scheduler=null,this.completionService.shutdown();let e=this.approvalRouter.failAll();e>0&&$.info(`Failed-closed pending sudo requests during shutdown`,{count:e}),await this.bootRestoreTail,await this.lifecycle.destroyAllTabs(),this.lickManager?.setDiscoveryIgnore?.(null),this.llmsTxtIgnorePolicy?.dispose(),this.llmsTxtIgnorePolicy=null,this.modelPolicyFile?.dispose(),this.modelPolicyFile=null,this.sudoManager?.dispose(),this.sudoManager=null,this.unregisterExportService?.(),this.unregisterExportService=null,$.info(`Orchestrator shutdown`)}buildWorkerExportService(){let e=this.conversationStore?new JC(this.conversationStore):null,t=this.sharedFs;return new QS({collection:{listScoops:()=>this.getScoops(),isProcessing:e=>this.isProcessing(e),getAgentMessages:e=>this.getScoopContext(e)?.getAgentMessages()??null,loadPersistedSessions:async()=>await e?.loadAgentSessions()??[],loadUiChatSessions:async()=>await e?.loadChatSessions()??[],wait:e=>new Promise(t=>setTimeout(t,e))},knownSecrets:_C(),snapshotStore:{read:e=>lC(t,e),write:(e,n)=>cC(t,e,n)},vfs:t,getActiveSessionInfo:()=>{let e=this.defaultRoot();return{id:e?.jid??`session-${Date.now()}`,title:e?.name??`Active Session`}},version:`6.203.0`})}};const XA=_(`workflow-run-manager`),ZA=`/shared/workflow-runs`,QA=1e3;function $A(e,t){if(t===void 0)return{origin:`terminal`};let n=e.getStartingRoot(t);return n?{origin:`cone`,lickTarget:n.lickTarget}:{origin:`scoop`}}function ej(e){let t=new Map,n=new Map,r=e=>{let r=t.get(e);if(r)for(let t of n.get(e)??[])try{t(r)}catch(e){XA.warn(`observeRun handler threw`,e)}},i=(e,n)=>aj(e,n,t,()=>r(n));async function a(a){let c=a.runId??e.makeRunId(),l=a.sentinel,u=$A(e,a.parentJid),d={id:c,name:a.name,source:a.source,origin:u.origin,lickTarget:u.lickTarget,status:`running`,currentPhase:null,agentsStarted:0,agentsDone:0,logs:[],startedAt:new Date().toISOString(),finishedAt:null,resultPath:null,preview:null,error:null,pid:null};t.set(c,d),rj(t,n);let f=i(a.ctx,c),p=ij(e.processManager,d,c,()=>r(c));return e.runRealm(a.code,[`workflow`,a.filename,c],f).then(e=>o(c,l,e)).catch(e=>s(c,e instanceof Error?e.message:String(e))).finally(()=>p()).catch(e=>XA.warn(`workflow run lifecycle error`,e)),{runId:c}}async function o(t,n,r){let{result:i,hadResult:a}=e.splitResult(r.stdout,n);return r.exitCode===137?c(t,`killed`,null,r.stderr||`killed (SIGKILL)`):r.exitCode!==0||!a?c(t,`error`,null,r.stderr||(a?`exit ${r.exitCode}`:`script produced no result`)):c(t,`done`,i,null)}function s(e,t){return c(e,`error`,null,t)}async function c(n,i,a,o){let s=t.get(n);if(!s||s.status!==`running`&&s.status!==`paused`)return;let c=`${ZA}/${n}.json`,u=new Date().toISOString();try{await e.sharedFs.mkdir(ZA,{recursive:!0}),await e.sharedFs.writeFile(c,JSON.stringify({name:s.name,status:i,result:i===`done`?a:null,error:o,logs:s.logs,startedAt:s.startedAt,finishedAt:u},null,2)),s.resultPath=c}catch(e){let t=e instanceof Error?e.message:String(e);XA.error(`failed to write run result file`,{runId:n,resultPath:c,error:t}),o=`result file write failed: ${t}`,i===`done`&&(i=`error`)}s.status=i,s.error=o,s.finishedAt=u,s.preview=i===`done`?nj(a):o??``,r(n),l(s)}function l(t){t.origin===`cone`&&e.fireLick({type:`workflow`,targetScoop:t.lickTarget,workflowRunId:t.id,workflowName:t.name??void 0,resultPath:t.resultPath??void 0,preview:t.preview??t.error??void 0,timestamp:new Date().toISOString(),body:{runId:t.id,status:t.status,error:t.error}})}return{start:a,getRun:e=>t.get(e)??null,listRuns:()=>Array.from(t.values()),observeRun(e,r){let i=n.get(e);i||(i=new Set,n.set(e,i)),i.add(r);let a=t.get(e);if(a)try{r(a)}catch(e){XA.warn(`observeRun handler threw on initial state`,e)}return()=>i.delete(r)}}}function tj(e){let t=ej(e);return globalThis[f]=t,XA.info(`workflow run manager published on globalThis.__slicc_workflows`),t}function nj(e){return((typeof e==`string`?e:JSON.stringify(e))??`null`).slice(0,200)}function rj(e,t,n=100){if(e.size<=n)return;let r=[...e.values()].filter(e=>e.status!==`running`&&e.status!==`paused`).sort((e,t)=>(e.finishedAt??e.startedAt).localeCompare(t.finishedAt??t.startedAt)),i=e.size-n;for(let n of r){if(i<=0)break;e.delete(n.id),t.delete(n.id),i--}}function ij(e,t,n,r){let i=e.on(`spawn`,e=>{t.pid===null&&e.argv.includes(n)&&(t.pid=e.pid,r(),i())});return i}function aj(e,t,n,r){let i=e.exec;if(!i)return e;let a=(async(e,a)=>e===`__wf_progress`?oj(n,t,a?.args??[],r):e===`agent`?sj(n,t,()=>i(e,a),r):i(e,a));return a.spawn=e.exec.spawn,{...e,exec:a}}function oj(e,t,n,r){let i=e.get(t);if(i&&i.status===`running`){let[e,t=``]=n;e===`phase`?(i.currentPhase=t,i.logs.push(t)):e===`log`&&i.logs.push(t),i.logs.length>QA&&i.logs.splice(0,i.logs.length-QA),r()}return{stdout:``,stderr:``,exitCode:0}}async function sj(e,t,n,r){let i=e.get(t);i&&i.status===`running`&&(i.agentsStarted++,r());try{return await n()}finally{let n=e.get(t);n&&n.status===`running`&&(n.agentsDone++,r())}}const cj=new Set([`catalog`,`com`,`html`,`http`,`https`,`json`,`known`,`llms`,`net`,`org`,`txt`,`well`,`www`]);function lj(e,t,n){let r=uj(e);if(r.length===0)return;let i,a=0,o=!1;for(let e of t){let t=pj(n(e),r);t>a?(i=e,a=t,o=!1):t>0&&t===a&&(o=!0)}return o?void 0:i}function uj(e){let t=new Map;return dj(t,e.discoveryOrigin),dj(t,e.discoveryUrl),[...t.values()]}function dj(e,t){if(t){fj(e,t.toLowerCase().replace(/\/$/,``),12,`substring`);try{let n=new URL(t),r=n.hostname.toLowerCase().replace(/^www\./,``);fj(e,r,8,`hostname`);for(let t of`${r}${n.pathname}${n.search}`.split(/[^a-z0-9]+/).filter(e=>e.length>=4&&!cj.has(e)))fj(e,t,1,`substring`)}catch{}}}function fj(e,t,n,r){if(t.length===0)return;let i=`${r}:${t}`,a=e.get(i);(!a||n>a.weight)&&e.set(i,{text:t,weight:n,match:r})}function pj(e,t){let n=e.slice(-8),r=0;for(let[e,i]of n.entries()){let a=hj(i);if(a.length===0)continue;let o=8-(n.length-1-e);for(let e of t)mj(a,e)&&(r+=e.weight*o)}return r}function mj(e,t){if(t.match===`substring`)return e.includes(t.text);let n=t.text.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);return RegExp(`(^|[^a-z0-9.-])(?:www\\.)?${n}($|[^a-z0-9.-])`).test(e)}function hj(e){try{return JSON.stringify(e)?.toLowerCase()??``}catch{return``}}function gj(e,t,n=e=>console.warn(`Early conversation hydration failed`,e)){e.setOnConversationsReady(async()=>{try{await t.hydrateBuffersFromRecords(),t.publishHydratedTranscripts()}catch(e){n(e)}})}var _j=class{kind=`proc`;source=void 0;profile=void 0;mountId;pm;closed=!1;constructor(e,t={}){this.pm=e,this.mountId=t.mountId??`proc-${Date.now().toString(36)}`}async readDir(e){this.assertOpen(e);let t=bj(e);if(t.length===0){let e=this.pm.list(),t=e.map(e=>({name:String(e.pid),kind:`directory`}));return e.some(e=>e.pid===1)||t.push({name:`1`,kind:`directory`}),t.sort((e,t)=>Number(e.name)-Number(t.name)),t.push({name:yj,kind:`file`,size:this.renderTable().length,lastModified:Date.now()}),t}if(t.length===1){if(t[0]===yj)throw new k(`ENOTDIR`,`not a directory`,e);let n=xj(t[0]);if(n===null||!this.pidExists(n))throw new k(`ENOENT`,`no such file or directory`,e);return vj.map(e=>({name:e,kind:`file`,size:this.fileSize(n,e),lastModified:this.fileMtime(n)}))}throw new k(`ENOTDIR`,`not a directory`,e)}async readFile(e){this.assertOpen(e);let t=bj(e);if(t.length===1&&t[0]===yj)return new TextEncoder().encode(this.renderTable());if(t.length!==2)throw new k(`EISDIR`,`is a directory`,e);let n=xj(t[0]);if(n===null||!this.pidExists(n))throw new k(`ENOENT`,`no such file or directory`,e);let r=t[1];if(!vj.includes(r))throw new k(`ENOENT`,`no such file or directory`,e);let i=this.renderProcFile(n,r);return new TextEncoder().encode(i)}async writeFile(e){throw new k(`EACCES`,`read-only filesystem`,e)}async stat(e){this.assertOpen(e);let t=bj(e);if(t.length===0)return{kind:`directory`,size:0,mtime:0};if(t.length===1){if(t[0]===yj)return{kind:`file`,size:this.renderTable().length,mtime:Date.now()};let n=xj(t[0]);if(n===null||!this.pidExists(n))throw new k(`ENOENT`,`no such file or directory`,e);return{kind:`directory`,size:0,mtime:this.fileMtime(n)}}if(t.length===2){let n=xj(t[0]);if(n===null||!this.pidExists(n))throw new k(`ENOENT`,`no such file or directory`,e);let r=t[1];if(!vj.includes(r))throw new k(`ENOENT`,`no such file or directory`,e);return{kind:`file`,size:this.fileSize(n,r),mtime:this.fileMtime(n)}}throw new k(`ENOENT`,`no such file or directory`,e)}async mkdir(e){throw new k(`EACCES`,`read-only filesystem`,e)}async remove(e){throw new k(`EACCES`,`read-only filesystem`,e)}async refresh(){return{added:[],removed:[],changed:[],unchanged:0,errors:[]}}describe(){return{displayName:`/proc`,extra:`kernel processes (read-only)`}}async close(){this.closed=!0}assertOpen(e){if(this.closed)throw new k(`EBADF`,`mount closed`,e)}pidExists(e){return e===1||this.pm.get(e)!==null}fileSize(e,t){return this.renderProcFile(e,t).length}fileMtime(e){if(e===1)return 0;let t=this.pm.get(e);return t?t.finishedAt??t.startedAt:0}renderTable(){let e={stats:this.pm.stats(),processes:this.pm.list().map(e=>({pid:e.pid,ppid:e.ppid,kind:e.kind,state:Ej(e.status),status:e.status,argv:e.argv.join(` `),cwd:e.cwd,owner:Dj(e),startedAt:e.startedAt,finishedAt:e.finishedAt,exitCode:e.exitCode}))};return JSON.stringify(e)+`
1179
+ `}renderProcFile(e,t){if(e===1)return Oj(t);let n=this.pm.get(e);switch(t){case`status`:return Sj(n);case`cmdline`:return Cj(n);case`cwd`:return wj(n);case`stat`:return Tj(n)}}};const vj=[`status`,`cmdline`,`cwd`,`stat`],yj=`table`;function bj(e){return e.replace(/^\/+/,``).replace(/\/+$/,``).split(`/`).filter(Boolean)}function xj(e){let t=Number.parseInt(e,10);return!Number.isFinite(t)||String(t)!==e?null:t}function Sj(e){let t=[`Name:\t${e.kind}`,`Pid:\t${e.pid}`,`PPid:\t${e.ppid}`,`State:\t${Ej(e.status)} (${e.status})`,`Owner:\t${Dj(e)}`,`StartedAt:\t${new Date(e.startedAt).toISOString()}`];return e.finishedAt!==null&&t.push(`FinishedAt:\t${new Date(e.finishedAt).toISOString()}`),e.terminatedBy!==null&&t.push(`TerminatedBy:\t${e.terminatedBy}`),e.exitCode!==null&&t.push(`ExitCode:\t${e.exitCode}`),t.push(`Cmdline:\t${e.argv.join(` `)}`),t.join(`
1180
1180
  `)+`
1181
- `}function yj(e){return e.argv.join(`\0`)+`\0`}function bj(e){return e.cwd+`
1182
- `}function xj(e){return[e.pid,`(${e.kind})`,Sj(e.status),e.ppid,e.exitCode??`-`,e.startedAt,e.finishedAt??`-`].join(` `)+`
1183
- `}function Sj(e){switch(e){case`running`:return`R`;case`pending`:return`S`;case`exited`:return`Z`;case`killed`:return`K`}}function Cj(e){return e.owner.kind===`cone`?`cone`:e.owner.kind===`system`?`system`:e.owner.kind===`jshd`?`jshd`:e.owner.scoopJid?`scoop/${e.owner.scoopJid}`:`scoop`}function wj(e){switch(e){case`status`:return[`Name: kernel-host`,`Pid: 1`,`PPid: 0`,`State: R (running)`,`Owner: system`].join(`
1181
+ `}function Cj(e){return e.argv.join(`\0`)+`\0`}function wj(e){return e.cwd+`
1182
+ `}function Tj(e){return[e.pid,`(${e.kind})`,Ej(e.status),e.ppid,e.exitCode??`-`,e.startedAt,e.finishedAt??`-`].join(` `)+`
1183
+ `}function Ej(e){switch(e){case`running`:return`R`;case`pending`:return`S`;case`exited`:return`Z`;case`killed`:return`K`}}function Dj(e){return e.owner.kind===`cone`?`cone`:e.owner.kind===`system`?`system`:e.owner.kind===`jshd`?`jshd`:e.owner.scoopJid?`scoop/${e.owner.scoopJid}`:`scoop`}function Oj(e){switch(e){case`status`:return[`Name: kernel-host`,`Pid: 1`,`PPid: 0`,`State: R (running)`,`Owner: system`].join(`
1184
1184
  `)+`
1185
1185
  `;case`cmdline`:return`kernel-host\0`;case`cwd`:return`/
1186
1186
  `;case`stat`:return`1 (kernel-host) R 0 - 0 -
1187
- `}}const Tj=Math.max(Si,Ci)+5e3;function Ej(e={}){let t=e.channel===void 0;if(t&&!e.nonce)throw Error(`installSyncFsResponder: a nonce (or a test channel) is required`);let n=e.channel??new BroadcastChannel(bi(e.nonce)),r=e=>n.postMessage(e),i=new Map,a=e=>{let t=e.data;if(t?.type!==`sync-fs-req`||typeof t.id!=`string`)return;let n=t;if(!vi(n.token))return;let a=i.get(n.id);if(a){r({type:xi,id:n.id}),a.result&&r({type:yi,id:n.id,...a.result});return}let o={};i.set(n.id,o),r({type:xi,id:n.id});let s=e=>{o.result=e,o.timer=setTimeout(()=>i.delete(n.id),Tj),r({type:yi,id:n.id,...e})};(Ti(n)?wi(n):Ei(n)).then(s).catch(e=>s({ok:!1,errno:`EIO`,message:e instanceof Error?e.message:String(e)}))};return n.addEventListener(`message`,a),{dispose:()=>{n.removeEventListener(`message`,a);for(let e of i.values())e.timer&&clearTimeout(e.timer);i.clear(),t&&n.close?.()}}}function Dj(){return globalThis}function Oj(e){switch(e.type){case`webhook`:return e.webhookName;case`sprinkle`:return e.sprinkleName;case`fswatch`:return e.fswatchName;case`navigate`:return e.navigateUrl;case`upgrade`:return`${e.upgradeFromVersion??`unknown`}→${e.upgradeToVersion??`unknown`}`;case`session-reload`:return by(e);case`workflow`:return e.workflowName??e.workflowRunId??`workflow`;case`bash`:return e.bashJobId??`bash`;case`jshd`:return e.jshdName??`jshd`;case`preview`:return e.previewOrigin??`preview`;case`discovery`:return e.discoveryUrl??e.discoveryOrigin;default:return e.cronName}}function kj(e){switch(e.type){case`webhook`:return e.webhookId;case`sprinkle`:return e.sprinkleName;case`fswatch`:return e.fswatchId;case`navigate`:return e.navigateUrl;case`upgrade`:return`upgrade-${e.upgradeToVersion??`unknown`}`;case`session-reload`:return`session-reload-${e.timestamp}`;case`workflow`:return`workflow-${e.workflowRunId??`unknown`}`;case`bash`:return`bash-${e.bashJobId??`unknown`}`;case`jshd`:return`jshd-${e.jshdName??`unknown`}`;case`preview`:return e.previewConnId??`preview-${e.timestamp}`;case`discovery`:return e.discoveryUrl??`discovery-${e.timestamp}`;default:return e.cronId}}function Aj(e,t){if(e.type===`sudo-request`){t.log.debug?.(`sudo-request lick: UI-chip-only path; orchestrator owns delivery`,{lickId:e.lickId});return}jj(e,t)}async function jj(e,{orchestrator:t,log:n}){let r=t.getScoops(),i=O(r),a=e.type===`discovery`&&!e.targetScoop?aj(e,i.filter(yx),e=>t.getScoopContext?.(e.jid)?.getAgentMessages()??[]):void 0,o=e.targetScoop?Xa(r,e.targetScoop):a??i[0];if(!o){n.warn(`Lick target scoop not found`,e.targetScoop);return}if(e.type===`discovery`&&!yx(o)){n.debug?.(`dropping discovery lick for non-browsing scoop`,{scoop:o.folder});return}if(e.type===`navigate`){try{let{shouldSkipNavigateUpskill:r}=await import(`./upskill-lick-skip-CQVojEjb.js`);if(await r(e,typeof t.getDefaultConeFs==`function`?()=>t.getDefaultConeFs():()=>null)){n.debug?.(`dropping navigate·upskill lick; advertised skill already installed at that commit`);return}}catch(e){n.warn(`navigate·upskill skip check failed; raising card`,e)}e.lickId=t.registerNavigateLick(e)}else e.type===`session-reload`?e.lickId=t.registerSessionReloadLick(e):e.type===`upgrade`?e.lickId=t.registerUpgradeLick(e):e.type===`discovery`&&(e.lickId=t.registerDiscoveryLick(e)??void 0);let s=Py(e);if(s===null){n.debug?.(`dropping lick event with no renderable content`,{type:e.type});return}let c=Oj(e),l=kj(e),u=e.type,d={id:`${u}-${l}-${Date.now()}`,chatJid:o.jid,senderId:u,senderName:`${u}:${c}`,content:s.content,timestamp:e.timestamp,fromAssistant:!1,channel:u,...e.lickId?{lickId:e.lickId}:{}};t.handleMessage(d).catch(e=>{n.warn(`Lick message routing failed`,{channel:u,eventName:c,error:String(e)})})}async function Mj(e,t,n,r,i){let a=new pi,o=new GA(e,{...r,getBrowserAPI:()=>t});o.setProcessManager(a);let s=fn(),l=i.capabilityBroker??c(s,{...i.pageGestures?{pageGestures:i.pageGestures}:{}});o.setCapabilityBroker(l),br(l),Dj().__slicc_pm=a,mi(gi()),Dj().__slicc_browser=t,await n.bind(o,t);let u=Mr(()=>n.emitTrayRuntimeStatus()),d=we(()=>n.emitTrayRuntimeStatus());fj(o,n);let f=i.logger??console;return await o.init(i.onBootProgress,{onSharedFsReady:async e=>{try{let{applyConfiguredHostMounts:t}=await import(`./auto-mount-table-Dlq8aO5D.js`);await t(e,f)}catch(e){f.warn(`Configured host mounts failed`,e)}i.onBootProgress?.(`host-mounts-applied`)}}),await n.hydrateBuffersFromRecords(),n.publishHydratedTranscripts(),{processManager:a,orchestrator:o,unsubLeader:u,unsubFollower:d,sharedFs:o.getSharedFS(),capabilityBroker:l}}async function Nj(e,t,n){let{registerSessionBudgetProvider:r,registerSessionCostsProvider:i}=await import(`./cost-command-D0tJNxsl.js`).then(e=>e.t);i(t=>e.getSessionCostsForCommand(t));let{refreshBudgetWindow:a}=await Promise.resolve().then(()=>P_);r(()=>a());let{getLickManager:o}=await Promise.resolve().then(()=>tE),s=o();await s.init(),e.setLickManager(s);let c=t.lickEventHandler??Aj,l={orchestrator:e,lickManager:s,log:n};return s.setEventHandler(e=>c(e,l)),s}async function Pj(e){let t=e.getScoops();O(t).length>0||await e.registerScoop({jid:`cone_${Date.now()}`,name:`Cone`,folder:`cone`,parentJid:null,requiresTrigger:!1,assistantLabel:`sliccy`,addedAt:new Date().toISOString()})}function Fj(e){let{orchestrator:t,processManager:n,lickManager:r,sharedFs:a}=e;ZA({sharedFs:a,getStartingRoot:e=>{let n=O(t.getScoops()),r=n.find(t=>t.jid===e);return r?{jid:r.jid,lickTarget:r.jid===n[0]?.jid?void 0:r.folder}:null},fireLick:e=>r.emitEvent(e),processManager:n,runRealm:(e,t,n)=>_i(e,t,n,void 0,{filename:t[1]}),makeRunId:()=>u().slice(10,22),splitResult:(e,t)=>i(e,t)})}async function Ij(e){let{browser:t,lickManager:n,orchestrator:r,sharedFs:i,log:a}=e,{CdpWsPageBridge:o}=await import(`./cdp-ws-page-bridge-DsbAqoSN.js`),{WsSubscriberRegistry:s}=await import(`./ws-subscribers-CKHqIv8e.js`),c=new o({browser:t});return{wsBridge:c,wsRegistry:new s({bridge:c,webhooks:{has:e=>n.getWebhook(e)!==void 0},dispatcher:{webhook:(e,t)=>{n.handleWebhookEvent(e,{},t)},scoop:(e,t)=>{if(!r.getScoops().find(t=>t.jid===e)){a.warn?.(`browser.websocket: scoop sink not found`,{jid:e});return}let n={id:`ws-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,chatJid:e,senderId:`browser.websocket`,senderName:`browser.websocket`,content:typeof t==`string`?t:JSON.stringify(t,null,2),timestamp:new Date().toISOString(),fromAssistant:!1,channel:`browser.websocket`};r.handleMessage(n)},vfs:async(e,t)=>{if(!i)return;let n=(typeof t==`string`?t:JSON.stringify(t))+`
1188
- `,r=``;try{let t=await i.readFile(e);r=typeof t==`string`?t:new TextDecoder().decode(t)}catch{}await i.writeFile(e,r+n)},log:e=>{a.info?.(`browser.websocket frame`,{payload:e})}}})}}async function Lj(e,t,n,r){try{let{startLickWsBridge:i}=await import(`./lick-ws-bridge-BMOgjdw-.js`),{HostFsMountBackend:a}=await import(`./backend-hostfs-Bqk2Qgbz.js`);return i(e,{locationHref:self.location.href,lickWsUrl:n??null,onHostfsInvalidate:e=>{if(!r)return;let n=r.getMountBackend(e.mount);if(!(n instanceof a)){t.debug?.(`hostfs_invalidate for unknown/non-hostfs mount`,{mount:e.mount});return}n.applyHostInvalidation(e.paths).catch(n=>{t.warn(`hostfs_invalidate apply failed`,{mount:e.mount,error:n instanceof Error?n.message:String(n)})})}}).stop}catch(e){return(t.error?.bind(t)??t.warn.bind(t)??((e,t)=>console.error(`[lick-ws-bridge]`,e,t)))(`Failed to start lick-ws bridge — webhook / crontask / handoff lick delivery is non-functional in this session`,{error:e instanceof Error?e.message:String(e)}),null}}function Rj(e,t,n,r){let i=e.getTransport();if(i.isExtensionBridge)return n.debug?.(`Skipping NavigationWatcher: extension-bridge transport rejects sessionless Target.* discovery; the service worker observes handoffs via chrome.webRequest`),null;try{let e=new ux(i,e=>{let n={url:e.url,verb:e.verb,target:e.target};e.instruction!=null&&(n.instruction=e.instruction),e.branch!=null&&(n.branch=e.branch),e.path!=null&&(n.path=e.path),e.title!=null&&(n.title=e.title),t.emitEvent({type:`navigate`,navigateUrl:e.url,targetScoop:void 0,timestamp:new Date().toISOString(),body:n})},{...zj(t),isOwnTab:cx(()=>r??null)});return e.start(),()=>e.stop()}catch(e){return n.warn(`Failed to start NavigationWatcher`,e),null}}function zj(e){let t=ye();return{onDiscovery:t=>{e.emitEvent({type:`discovery`,targetScoop:void 0,timestamp:new Date().toISOString(),discoveryOrigin:t.origin,discoveryKind:t.kind,discoveryUrl:t.url,discoverySource:`live-navigation`,body:{origin:t.origin,kind:t.kind,url:t.url,targetId:t.targetId}})},probeFetch:async(e,n)=>{let r=t(e,{method:n?.method??`GET`}),i=n?.signal,a=i?await Promise.race([r,new Promise((e,t)=>{if(i.aborted){t(Error(`aborted`));return}i.addEventListener(`abort`,()=>t(Error(`aborted`)),{once:!0})})]):await r,o=a.headers;return{ok:a.status>=200&&a.status<300,status:a.status,headers:{get(e){return o?o[e.toLowerCase()]??o[e]??null:null}}}},isDiscoveryEnabled:()=>dx()}}async function Bj(e,t,n){try{let r=await e.recoverInterruptedWork(e=>t.emitEvent(e));r.length>0&&n.info(`Recovered work interrupted by a reload`,{outcomes:r})}catch(e){n.warn(`Reload recovery failed`,e)}}async function Vj(e,t,n,r,i,a){e&&(await Uj(e,n,r),i(`mounts-restored`),await Hj(e,t,n,r,a),i(`jshd-restored`))}async function Hj(e,t,n,r,i){try{let{restoreEnabledJshdUnits:r}=await import(`./restore-BEtGf9q0.js`),a=i.getSudoManager();await r({fs:e,processManager:t,lickManager:n,...a?{sudo:{broker:a.getBroker(),getPolicy:()=>a.getPolicy()}}:{}})}catch(e){r.warn(`jshd restore failed`,e)}}async function Uj(e,t,n){try{let{getAllMountEntries:r}=await import(`./mount-table-store-DrF_Ifaz.js`).then(e=>e.r),{recoverMounts:i}=await Promise.resolve().then(()=>cy),{applyConfiguredHostMounts:a,withoutHostMountedTargets:o}=await import(`./auto-mount-table-Dlq8aO5D.js`),s=await a(e,n),c=o(await r(),s);if(c.length===0)return;let{needsRecovery:l}=await i(c,e,n);if(l.length===0)return;t.emitEvent({type:`session-reload`,targetScoop:void 0,timestamp:new Date().toISOString(),body:{reason:`mount-recovery`,mounts:l}})}catch(e){n.warn(`mount recovery failed`,e)}}function Wj(){Pr(async()=>{let{getLastSeenVersion:e}=await import(`./upgrade-detection-CtG6sgvq.js`);return e()})}function Gj(e,t){(async()=>{try{let{detectUpgrade:t,recordVersionSeen:n}=await import(`./upgrade-detection-CtG6sgvq.js`),r=await t();if(!r.isUpgrade||r.lastSeen===null)return;e.emitEvent({type:`upgrade`,targetScoop:void 0,timestamp:new Date().toISOString(),upgradeFromVersion:r.lastSeen,upgradeToVersion:r.bundled.version,body:{from:r.lastSeen,to:r.bundled.version,releasedAt:r.bundled.releasedAt}}),await n(r.bundled.version)}catch(e){t.warn(`Upgrade detection failed`,e)}})()}async function Kj(e,t,n){try{let{BshWatchdog:n}=await import(`./bsh-watchdog-xbXqblUt.js`),{ScriptCatalog:r}=await import(`./script-catalog-ByM8lrb_.js`).then(e=>e.n),i=new r({jshFs:e,bshFs:e,watcher:e.getWatcher()}),a=new n({browserAPI:t,scriptCatalog:i,fs:e});return a.start(),{bshWatchdogStop:()=>a.stop(),scriptCatalogDispose:()=>i.dispose()}}catch(e){return n.warn(`Failed to start BSH watchdog`,e),{bshWatchdogStop:null,scriptCatalogDispose:null}}}function qj(e){return e===`node-rest`}function Jj(e,t,n,r){import(`./gelatiere-unit-SfjAgxf3.js`).then(async r=>{let i=r.createGelatiereSeam(e,t);if(r.publishGelatiereSeam(i),!n||!ke(`memory-v2`)){await r.haltGelatiere(i);return}let{loadGelatiereConfig:a}=await import(`./gelatiere-store-CpiC3WMb.js`),o=await a(n);await r.bootGelatiere(i,o.nightly,o.allowedCommands)}).catch(e=>r.warn(`gelatiere seam failed to publish`,e))}function Yj(e,t){if(!e)return()=>{};import(`./memory-curation-seam-CknJYtxR.js`).then(t=>t.publishMemorySeam(t.createMemorySeam(e))).catch(e=>t.warn(`memory seam failed to publish`,e));let n=!1,r=null;return ke(`memory-v2`)&&import(`./memory-health-DsnSZmSb.js`).then(i=>{n||(r=i.scheduleMemoryHealthChecks(e,{log:t}))}).catch(e=>t.warn(`memory health check failed to schedule`,e)),()=>{n=!0,r?.()}}function Xj(e,t,n){if(!t){n.warn(`AgentBridge not published — orchestrator.getSharedFS() returned null`);return}Gv(e,t,e.getSessionStore())}async function Zj(e){let{container:t,browser:n,bridge:r,callbacks:i,skipConeBootstrap:a=!1}=e,o=e.logger??console,s=t=>e.onBootProgress?.(t);Wj();let{processManager:c,orchestrator:l,unsubLeader:u,unsubFollower:d,sharedFs:f,capabilityBroker:p}=await Mj(t,n,r,i,e);if(s(`orchestrator-ready`),Xj(l,f,o),f)try{await f.mountInternal(`/proc`,new pj(c))}catch(e){o.warn(`Failed to mount /proc`,e)}let m=await Nj(l,e,o);s(`lick-manager-ready`),f&&Fj({orchestrator:l,processManager:c,lickManager:m,sharedFs:f}),Dj().__slicc_lickManager=m,Jj(l,m,f,o);let h=Yj(f,o),{wsBridge:ee,wsRegistry:g}=await Ij({browser:n,lickManager:m,orchestrator:l,sharedFs:f,log:o});Dj().__slicc_wsSubscribers=g;let te=qj(p.adapter)?await Lj(m,o,e.localLickWsUrl??null,f):null,ne=Rj(n,m,o,e.appPageUrl);await Vj(f,c,m,o,s,l),a||await Pj(l),s(`cone-bootstrapped`),Bj(l,m,o),f&&Gj(m,o);let re=null,_=null;f&&({bshWatchdogStop:re,scriptCatalogDispose:_}=await Kj(f,n,o));let ie=null;f&&e.syncFsChannelNonce&&(ie=Ej({nonce:e.syncFsChannelNonce}).dispose);let ae=!1;return{orchestrator:l,browser:n,bridge:r,lickManager:m,sharedFs:f??null,processManager:c,capabilityBroker:p,async dispose(){ae||(ae=!0,await Qj({unsubLeader:u,unsubFollower:d,bshWatchdogStop:re,memoryHealthStop:h,scriptCatalogDispose:_,lickWsBridgeStop:te,navigationWatcherStop:ne,syncFsResponderDispose:ie,sharedFs:f,wsRegistry:g,wsBridge:ee,processManager:c,lickManager:m,browser:n,log:o}))}}}async function Qj(e){let{sharedFs:t,wsRegistry:n,wsBridge:r,processManager:i,lickManager:a,browser:o,log:s}=e;if(e.unsubLeader?.(),e.unsubFollower?.(),e.bshWatchdogStop?.(),e.memoryHealthStop?.(),e.scriptCatalogDispose?.(),e.lickWsBridgeStop?.(),e.syncFsResponderDispose?.(),e.navigationWatcherStop)try{await e.navigationWatcherStop()}catch(e){s.warn(`NavigationWatcher.stop() failed`,e)}if(t)try{await t.unmountInternal(`/proc`)}catch{}try{n.dispose()}catch(e){s.warn(`WsSubscriberRegistry.dispose() failed`,e)}try{r.dispose()}catch(e){s.warn(`CdpWsPageBridge.dispose() failed`,e)}$j({processManager:i,lickManager:a,browser:o,wsRegistry:n})}function $j(e){let t=Dj();t.__slicc_pm===e.processManager&&(delete t.__slicc_pm,mi(null)),t.__slicc_lickManager===e.lickManager&&delete t.__slicc_lickManager,e.browser&&t.__slicc_browser===e.browser&&delete t.__slicc_browser,e.wsRegistry&&t.__slicc_wsSubscribers===e.wsRegistry&&delete t.__slicc_wsSubscribers,delete t[f]}const eM=`x-bypass-llm-proxy`;function tM(e,t,n){return t?(r,i)=>{if(!nM(r,t,n))return e(r,i);let a=new Headers(i?.headers);return a.has(eM)||a.set(eM,`1`),e(r,{...i,headers:a})}:e}function nM(e,t,n){if(iM(e,t))return!0;let r=n?.()??null;return r?rM(e,r,t):!1}function rM(e,t,n){let r=aM(e),i,a;try{i=new URL(r,n),a=new URL(t)}catch{return!1}return i.origin===a.origin&&i.pathname.startsWith(`/api/`)}function iM(e,t){let n=aM(e);try{return new URL(n,t).origin===t}catch{return!0}}function aM(e){return typeof e==`string`?e:e instanceof URL?e.href:e.url}function oM(e,t={}){let n=t.onError??(e=>console.error(`[kernel-worker] boot failed`,e)),r=t.onDuplicate??(()=>console.warn(`[kernel-worker] received duplicate kernel-worker-init; ignoring`)),i=!1;return{handle(t){if(i){r();return}i=!0,e(t).catch(e=>{i=!1,n(e)})},isInitialized(){return i}}}var sM=class{transport;createShell;log;pm;defaultOwner;sessions=new Map;unsubscribe=null;constructor(e){this.transport=e.transport,this.createShell=e.createShell,this.log=e.logger??console,this.pm=e.processManager??null,this.defaultOwner=e.defaultOwner??{kind:`system`}}start(){return this.unsubscribe||=this.transport.onMessage(e=>{if(!cM(e)||e.source!==`panel`)return;let t=e.payload;uM(t)&&this.handleControl(t).catch(e=>{this.log.warn(`[terminal-session-host] handler error`,e)})}),()=>this.dispose()}dispose(){this.unsubscribe?.(),this.unsubscribe=null;for(let[,e]of this.sessions)e.currentProcess&&this.pm?(this.pm.signal(e.currentProcess.pid,`SIGTERM`),this.pm.exit(e.currentProcess.pid,null)):e.currentExec?.abort(),e.shell.dispose?.();this.sessions.clear()}async handleControl(e){switch(e.type){case`terminal-open`:return this.handleOpen(e);case`terminal-close`:return this.handleClose(e);case`terminal-exec`:return this.handleExec(e);case`terminal-signal`:return this.handleSignal(e);case`terminal-stdin`:case`terminal-resize`:return}}async handleOpen(e){if(this.sessions.has(e.sid)){this.emitStatus(e.sid,`error`,`session already open`);return}try{let t=this.createShell(e.sid,{cwd:e.cwd,env:e.env});this.sessions.set(e.sid,{shell:t,currentExec:null,currentProcess:null}),this.emitStatus(e.sid,`opened`)}catch(t){this.emitStatus(e.sid,`error`,t instanceof Error?t.message:String(t))}}async handleClose(e){let t=this.sessions.get(e.sid);t&&(t.currentProcess&&this.pm?(this.pm.signal(t.currentProcess.pid,`SIGTERM`),this.pm.exit(t.currentProcess.pid,null)):t.currentExec?.abort(),t.shell.dispose?.(),this.sessions.delete(e.sid),this.emitStatus(e.sid,`closed`))}emitExit(e,t){this.emit({type:`terminal-exit`,sid:e.sid,execId:e.execId,exitCode:t})}emitStream(e,t,n){this.emit({type:`terminal-output`,sid:e.sid,execId:e.execId,stream:t,data:n})}async handleExec(e){let t=this.sessions.get(e.sid);if(!t){this.emitExit(e,127),this.log.warn(`[terminal-session-host] exec on unknown session`,e.sid);return}if(t.currentExec){this.emitExit(e,130);return}let n=new AbortController;t.currentExec=n,t.shell.applySessionOverrides?.({cwd:e.cwd,env:e.env});let r=this.pm?this.pm.spawn({kind:`shell`,argv:[e.command],cwd:t.shell.getCwd?.()??void 0,owner:this.defaultOwner,adoptAbort:n}):null;t.currentProcess=r;try{let i=``;if(e.stdin)try{i=Di(ae(e.stdin))}catch{this.emitExit(e,127),this.log.warn(`[terminal-session-host] exec with invalid stdin (expected base64)`,e.sid);return}let a=await t.shell.executeCommand(e.command,n.signal,r?.pid,i);await this.emitExecSuccess(e,a,n,r)}catch(t){this.emitExecError(e,t,n,r)}finally{t.currentExec===n&&(t.currentExec=null,t.currentProcess=null)}}async emitExecSuccess(e,t,n,r){let i=n.signal.aborted?lM(r?.terminatedBy??`SIGINT`):t.exitCode;n.signal.aborted||(r&&await r.gate.wait(),t.stdout&&this.emitStream(e,`stdout`,t.stdout),t.stderr&&this.emitStream(e,`stderr`,t.stderr)),this.emitExit(e,i),r&&this.pm&&this.pm.exit(r.pid,n.signal.aborted?null:t.exitCode)}emitExecError(e,t,n,r){if(n.signal.aborted){this.emitExit(e,lM(r?.terminatedBy??`SIGINT`)),r&&this.pm&&this.pm.exit(r.pid,null);return}let i=t instanceof Error?t.message:String(t);this.emitStream(e,`stderr`,`Error: ${i}\n`),this.emitExit(e,1),r&&this.pm&&this.pm.exit(r.pid,1)}async handleSignal(e){let t=this.sessions.get(e.sid);if(!t){this.log.warn(`[terminal-session-host] signal on unknown session`,e.sid);return}(e.signal===`SIGINT`||e.signal===`SIGTERM`||e.signal===`SIGKILL`)&&(t.currentProcess&&this.pm?this.pm.signal(t.currentProcess.pid,e.signal):t.currentExec?.abort())}emit(e){this.transport.send(e)}emitStatus(e,t,n){let r=n?{type:`terminal-status`,sid:e,state:t,error:n}:{type:`terminal-status`,sid:e,state:t};this.emit(r)}};function cM(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function lM(e){switch(e){case`SIGINT`:return 130;case`SIGTERM`:return 143;case`SIGKILL`:return 137;case`SIGSTOP`:case`SIGCONT`:return 130}}function uM(e){if(typeof e!=`object`||!e)return!1;let t=e.type;return t===`terminal-open`||t===`terminal-close`||t===`terminal-exec`||t===`terminal-signal`||t===`terminal-stdin`||t===`terminal-resize`}var dM=class extends ee{sid;transport;constructor(e,t,n){super(n),this.sid=e,this.transport=t}async renderMediaPreview(e){for(let t of e){let e=``,n=t.bytes,r=8192;for(let t=0;t<n.length;t+=r)e+=String.fromCharCode(...n.subarray(t,t+r));let i={type:`terminal-media-preview`,sid:this.sid,path:t.path,mediaType:t.mimeType,data:btoa(e)};this.transport.send(i)}}};const fM={maxExecutionTimeMs:1/0,maxCommandCount:1/0,maxLoopIterations:1/0,maxParserTokens:1/0,maxParseIterations:1/0};function pM(e){let{transport:t,fs:n,browser:r,processManager:i,sudoManager:a}=e,o=e.logger??console,s=a?.getShellConfig({transparentGating:!1}),c=new sM({transport:t,processManager:i,createShell:(a,o)=>new dM(a,t,{fs:n,cwd:o.cwd,env:o.env,browserAPI:r,webhook:{hasLocalNodeServer:e.webhook?.hasLocalNodeServer??(()=>!1),getLeaderStatus:e.webhook?.getLeaderStatus??Nr},crontask:e.crontask,processManager:i,processOwner:{kind:`system`},sudo:s,executionLimits:fM}),logger:o});return{host:c,stop:c.start()}}function mM(e){if(e!=null){if(typeof e==`string`)return e;if(e instanceof Error)return _M(e);if(typeof e==`object`)return vM(e);if(typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`)return String(e)}}function hM(e){if(typeof e==`object`&&e&&!(e instanceof Error))return bM(e)??xM(e);let t=mM(e);if(t!==void 0)return gM(t)}function gM(e){let t=e.trim();if(!t)return e;let n=yM(t);if(n)return n;let r=t.indexOf(`{`),i=t.lastIndexOf(`}`);if(r>0&&i>r){let e=yM(t.slice(r,i+1));if(e)return e}return e}function _M(e){let t=e.name&&e.name!==`Error`?e.name:``,n=e.message||``;return t&&n?`${t}: ${n}`:n||t||`Error`}function vM(e){let t=bM(e),n=xM(e);return n&&t?`${n}: ${t}`:t??n}function yM(e){if(e.startsWith(`{`))try{return bM(JSON.parse(e))}catch{return}}function bM(e){if(!e||typeof e!=`object`)return;let t=e;if(typeof t.message==`string`&&t.message.length>0)return t.message;if(typeof t.error==`string`&&t.error.length>0)return t.error;if(t.error&&typeof t.error==`object`){let e=t.error;if(typeof e.message==`string`&&e.message.length>0)return e.message}}function xM(e){if(!e||typeof e!=`object`)return;let t=e;if(t.error&&typeof t.error==`object`){let e=t.error;if(typeof e.type==`string`&&e.type.length>0)return e.type}if(typeof t.type==`string`&&t.type.length>0&&t.type!==`error`)return t.type}let SM=null,CM=!1;function wM(){return typeof window>`u`||typeof document>`u`||document?.documentElement===void 0||typeof localStorage?.getItem!=`function`}function TM(e){return wM()?`standalone-worker`:e?`extension`:typeof document<`u`&&document.documentElement?.dataset?.electronOverlay?`electron`:`cli`}async function EM(e={}){if(!CM&&!(typeof localStorage<`u`&&typeof localStorage?.getItem==`function`&&localStorage.getItem(`telemetry-disabled`)===`true`)){m(DM),EE(kM),$E(OM);try{let t=TM(e.isExtensionRealm??!1);t!==`standalone-worker`&&typeof window<`u`?window.RUM_GENERATION=`slicc-${t}`:globalThis.RUM_GENERATION=`slicc-${t}`,t===`standalone-worker`?(SM=(await import(`./rum-worker-CwmNSpjO.js`)).default,MM(self)):t===`extension`?(SM=(await import(`./rum-DW84CvBs.js`)).default,typeof window<`u`&&MM(window)):(typeof window<`u`&&(window.SAMPLE_PAGEVIEWS_AT_RATE=`high`),zM(),PM(),SM=(await import(`./src-Cj-AoUM3.js`)).sampleRUM),CM=!0,SM&&SM(`navigate`,{source:typeof document<`u`?document.referrer:``,target:t})}catch{}}}function DM(e){SM?.(`fill`,{source:e})}function OM(e,t){let n=jM(t);n!==null&&SM?.(`error`,{source:e,target:n})}function kM(e,t,n){if(e===`error`){let e=jM(n);if(e===null)return;SM?.(`error`,{source:`scoop:${t}`,target:e});return}SM?.(e===`spawn`?`enter`:e===`feed`?`convert`:`leave`,{source:t,target:`scoop-${e}`})}function AM(e){return e.includes(`@vite/client`)||e.includes(`@vite/env`)||e.includes(`[vite]`)||/https?:\/\/localhost:\d+\/@vite\//.test(e)||/\/__vite_ping/.test(e)}function jM(e){let t=mM(e);if(t===void 0)return e==null?void 0:null;if(sD(t))return null;let n=hM(e)??gM(t);return sD(n)?null:FM(n)}function MM(e){e.addEventListener(`error`,e=>{let t=e;OM(`js`,t.error??t.message??``)}),e.addEventListener(`unhandledrejection`,e=>{OM(`js`,e.reason)})}function NM(e){return typeof e==`object`&&!!e&&!(e instanceof Error)}function PM(){typeof window>`u`||(window.addEventListener(`error`,e=>{let t=e.error;NM(t)&&(OM(`js`,t),e.stopImmediatePropagation())},!0),window.addEventListener(`unhandledrejection`,e=>{let t=e.reason;NM(t)&&(OM(`js`,t),e.stopImmediatePropagation())},!0))}function FM(e){let t=e??``;if(t.includes(`@vite/`)||t.includes(`[vite]`)||t.includes(`__vite_ping`)){let e=t.split(`
1189
- `).filter(e=>!AM(e)).join(`
1190
- `).trim();return e?e.slice(0,200).replace(/(\/[a-z]+)(?:\/[^\s/]+)+/gi,`$1/.../`):null}return t.slice(0,200).replace(/(\/[a-z]+)(?:\/[^\s/]+)+/gi,`$1/.../`)}const IM=Symbol.for(`slicc.telemetry.sendBeacon.wrapped`);function LM(e){let t=typeof e==`string`?e:hM(e)??mM(e);if(typeof t!=`string`)return{kind:`absent`};let n=gM(t);if(n===`[object Object]`)return{kind:`noise`};let r=FM(n);return r===null?{kind:`noise`}:{kind:`kept`,value:r,mutated:r!==e}}function RM(e){let t=LM(e.source),n=LM(e.target),r=t.kind!==`kept`,i=n.kind!==`kept`;if((t.kind!==`absent`||n.kind!==`absent`)&&r&&i||n.kind===`noise`&&e.source===`undefined error`)return!0;let a=!1;return t.kind===`kept`?t.mutated&&(e.source=t.value,a=!0):t.kind===`noise`&&(e.source=``,a=!0),n.kind===`kept`?n.mutated&&(e.target=n.value,a=!0):n.kind===`noise`&&(e.target=``,a=!0),a?JSON.stringify(e):null}function zM(){if(typeof navigator>`u`||typeof navigator.sendBeacon!=`function`)return;let e=navigator.sendBeacon;if(e[IM])return;let t=e.bind(navigator),n=((e,n)=>{try{let r=typeof n==`string`?n:n instanceof ArrayBuffer?new TextDecoder().decode(n):null;if(r&&r.length>0&&r.charCodeAt(0)===123){let n=JSON.parse(r);if(n?.checkpoint===`error`){let r=RM(n);if(r===!0)return!0;if(r!==null)return t(e,r)}}}catch{}return t(e,n)});n[IM]=!0,navigator.sendBeacon=n}function BM(e){let t=new VM(e);return t.start(),{stop:()=>t.dispose()}}var VM=class{transport;client;writableClient;getWatcher;log;unsubscribe=null;watches=new Map;constructor(e){this.transport=e.transport,this.client=e.client,this.writableClient=e.writableClient??null,this.getWatcher=e.getWatcher??null,this.log=e.logger??console}start(){this.unsubscribe||=this.transport.onMessage(e=>{if(!HM(e)||e.source!==`panel`)return;let t=e.payload;if(UM(t)){this.handleRequest(t).catch(e=>{this.log.warn(`[vfs-rpc-host] handler unexpectedly threw`,e)});return}if(WM(t)){this.handleWriteRequest(t).catch(e=>{this.log.warn(`[vfs-rpc-host] write handler unexpectedly threw`,e)});return}if(GM(t)){this.handleWatchControl(t);return}})}dispose(){this.unsubscribe?.(),this.unsubscribe=null;for(let[,e]of this.watches)for(let t of e)t();this.watches.clear()}handleWatchControl(e){e.type===`vfs-watch`?this.handleWatch(e):this.handleUnwatch(e)}handleWatch(e){this.dropWatch(e.subscriptionId);let t=this.getWatcher?.()??null;if(!t){this.sendWatchAck({type:`vfs-watch-result`,subscriptionId:e.subscriptionId,ok:!1,error:{code:`ENOSYS`,message:`vfs-rpc-host has no watcher wired`}});return}let n=e.basePaths.map(n=>t.watch(n,()=>!0,t=>{if(!this.watches.has(e.subscriptionId))return;let n={type:`vfs-watch-event`,subscriptionId:e.subscriptionId,events:t.map(e=>({type:e.type,path:e.path,...e.entryType?{entryType:e.entryType}:{}}))};this.transport.send(n)}));this.watches.set(e.subscriptionId,n),this.sendWatchAck({type:`vfs-watch-result`,subscriptionId:e.subscriptionId,ok:!0})}handleUnwatch(e){this.dropWatch(e.subscriptionId)}dropWatch(e){let t=this.watches.get(e);if(t){this.watches.delete(e);for(let e of t)e()}}sendWatchAck(e){this.transport.send(e)}async handleRequest(e){switch(e.type){case`vfs-read-dir`:return this.handleReadDir(e);case`vfs-read-file`:return this.handleReadFile(e);case`vfs-stat`:return this.handleStat(e)}}async handleReadDir(e){try{let t=e.includeStats===!0?await this.client.readDir(e.path,{includeStats:!0}):await this.client.readDir(e.path),n={type:`vfs-read-dir-result`,requestId:e.requestId,ok:!0,entries:t};this.transport.send(n)}catch(t){this.emitError(`vfs-read-dir-result`,e.requestId,t,e.path)}}async handleReadFile(e){let t=e.encoding??`utf-8`;try{if(t===`binary`&&Number.isInteger(e.start)){let t=await this.readFileWindow(e.path,e.start,e.end);this.sendBinaryReadResult(e.requestId,e.path,t);return}let n=await this.client.readFile(e.path,{encoding:t});if(t===`binary`)this.sendBinaryReadResult(e.requestId,e.path,n);else{if(typeof n!=`string`){this.emitError(`vfs-read-file-result`,e.requestId,new k(`EIO`,`readFile(utf-8) did not return string`),e.path);return}let t={type:`vfs-read-file-result`,requestId:e.requestId,ok:!0,encoding:`utf-8`,data:n};this.transport.send(t)}}catch(t){this.emitError(`vfs-read-file-result`,e.requestId,t,e.path)}}async readFileWindow(e,t,n){let r=n??(await this.client.stat(e)).size;if(this.client.readFileRange)return this.client.readFileRange(e,t,r);let i=await this.client.readFile(e,{encoding:`binary`});if(!(i instanceof Uint8Array))throw new k(`EIO`,`readFile(binary) did not return Uint8Array`,e);return new Uint8Array(i.subarray(t,Math.min(r,i.byteLength)))}sendBinaryReadResult(e,t,n){if(!(n instanceof Uint8Array)){this.emitError(`vfs-read-file-result`,e,new k(`EIO`,`readFile(binary) did not return Uint8Array`),t);return}let r={type:`vfs-read-file-result`,requestId:e,ok:!0,encoding:`binary`,data:n},i=n.buffer,a=typeof ArrayBuffer<`u`&&i instanceof ArrayBuffer?[i]:void 0;this.transport.send(r,a)}async handleStat(e){try{let t=await this.client.stat(e.path),n={type:`vfs-stat-result`,requestId:e.requestId,ok:!0,stats:t};this.transport.send(n)}catch(t){this.emitError(`vfs-stat-result`,e.requestId,t,e.path)}}async handleWriteRequest(e){if(!this.writableClient){this.emitWriteError(KM(e.type),e.requestId,new k(`EACCES`,`vfs-rpc-host has no writable backend wired`),qM(e));return}switch(e.type){case`vfs-write-file`:return this.handleWriteFile(e,this.writableClient);case`vfs-mkdir`:return this.handleMkdir(e,this.writableClient);case`vfs-rm`:return this.handleRm(e,this.writableClient);case`vfs-flush`:return this.handleFlush(e,this.writableClient);case`vfs-list-mount-points`:return this.handleListMountPoints(e,this.writableClient)}}async handleWriteFile(e,t){try{if(e.encoding===`binary`){if(!(e.data instanceof Uint8Array)){this.emitWriteError(`vfs-write-file-result`,e.requestId,new k(`EIO`,`vfs-write-file(binary) data is not Uint8Array`),e.path);return}}else if(typeof e.data!=`string`){this.emitWriteError(`vfs-write-file-result`,e.requestId,new k(`EIO`,`vfs-write-file(utf-8) data is not string`),e.path);return}let n=e.recursive===void 0?void 0:{recursive:e.recursive};await t.writeFile(e.path,e.data,n);let r={type:`vfs-write-file-result`,requestId:e.requestId,ok:!0};this.transport.send(r)}catch(t){this.emitWriteError(`vfs-write-file-result`,e.requestId,t,e.path)}}async handleMkdir(e,t){try{let n=e.recursive===void 0?void 0:{recursive:e.recursive};await t.mkdir(e.path,n);let r={type:`vfs-mkdir-result`,requestId:e.requestId,ok:!0};this.transport.send(r)}catch(t){this.emitWriteError(`vfs-mkdir-result`,e.requestId,t,e.path)}}async handleRm(e,t){try{let n=e.recursive===void 0?void 0:{recursive:e.recursive};await t.rm(e.path,n);let r={type:`vfs-rm-result`,requestId:e.requestId,ok:!0};this.transport.send(r)}catch(t){this.emitWriteError(`vfs-rm-result`,e.requestId,t,e.path)}}async handleFlush(e,t){try{await t.flush();let n={type:`vfs-flush-result`,requestId:e.requestId,ok:!0};this.transport.send(n)}catch(t){this.emitWriteError(`vfs-flush-result`,e.requestId,t,``)}}async handleListMountPoints(e,t){if(!t.listMountPoints){this.emitWriteError(`vfs-list-mount-points-result`,e.requestId,new k(`EACCES`,`vfs-rpc-host has no mount-aware backend wired`),``);return}try{let n=await t.listMountPoints(),r={type:`vfs-list-mount-points-result`,requestId:e.requestId,ok:!0,mountPoints:n};this.transport.send(r)}catch(t){this.emitWriteError(`vfs-list-mount-points-result`,e.requestId,t,``)}}emitError(e,t,n,r){let i=JM(n,r);switch(e){case`vfs-read-dir-result`:{let e={type:`vfs-read-dir-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-read-file-result`:{let e={type:`vfs-read-file-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-stat-result`:{let e={type:`vfs-stat-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}}}emitWriteError(e,t,n,r){let i=JM(n,r);switch(r===``&&i.path===``&&delete i.path,e){case`vfs-write-file-result`:{let e={type:`vfs-write-file-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-mkdir-result`:{let e={type:`vfs-mkdir-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-rm-result`:{let e={type:`vfs-rm-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-flush-result`:{let e={type:`vfs-flush-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-list-mount-points-result`:{let e={type:`vfs-list-mount-points-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}}}};function HM(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function UM(e){if(typeof e!=`object`||!e)return!1;let t=e.type;return t===`vfs-read-dir`||t===`vfs-read-file`||t===`vfs-stat`}function WM(e){if(typeof e!=`object`||!e)return!1;let t=e.type;return t===`vfs-write-file`||t===`vfs-mkdir`||t===`vfs-rm`||t===`vfs-flush`||t===`vfs-list-mount-points`}function GM(e){if(typeof e!=`object`||!e)return!1;let t=e.type;return t===`vfs-watch`||t===`vfs-unwatch`}function KM(e){switch(e){case`vfs-write-file`:return`vfs-write-file-result`;case`vfs-mkdir`:return`vfs-mkdir-result`;case`vfs-rm`:return`vfs-rm-result`;case`vfs-flush`:return`vfs-flush-result`;case`vfs-list-mount-points`:return`vfs-list-mount-points-result`}}function qM(e){return e.type===`vfs-flush`||e.type===`vfs-list-mount-points`?``:e.path}function JM(e,t){return e instanceof k?{code:e.code,message:e.message,path:e.path??t}:{code:`EIO`,message:e instanceof Error?e.message:String(e),path:t}}function YM(){let e=globalThis.fetch;if(!e)return;let t=self?.location?self.location.origin:void 0;globalThis.fetch=tM(e.bind(globalThis),t,XM)}function XM(){let e=Le();if(!e)return null;try{return new URL(e).origin}catch{return null}}function ZM(e){let t=new Map(Object.entries(e));Object.defineProperty(globalThis,"localStorage",{value:{get length(){return t.size},key(e){return Array.from(t.keys())[e]??null},getItem(e){return t.has(e)?t.get(e):null},setItem(e,n){t.set(e,n)},removeItem(e){t.delete(e)},clear(){t.clear()}},configurable:!0,writable:!0})}let QM=null,$M=null,eN=null,tN=null,nN=null,rN=null;const iN=oM(e=>sN(e));self.addEventListener(`message`,e=>{e.data?.type===`kernel-worker-init`&&iN.handle(e.data)});function aN(e){let t=Ga(e.pageBuildId,`6.201.0-muk7c79x`);return()=>{t&&OM(`mixed-build-graph`,`page ${e.pageBuildId} worker 6.201.0-muk7c79x`)}}function oN(e){YM(),Ie(e.localApiBaseUrl??null),Fe(e.bridgeToken??null),hi(e.syncFsBridgeEnabled??!1),t(e.pageLoadedAt??null),Be(e.extensionDelegateId??null),ZM(e.localStorageSeed??{}),e.flagFloat&&Ma(e.flagFloat)}async function sN(e){Ha(e.instanceId);let t=aN(e),n=t=>{e.kernelPort.postMessage({type:`kernel-worker-boot-progress`,stage:t})};try{oN(e),EM().then(t).catch(()=>{}),await Ne(),n(`providers-registered`);let r=Ja(e.kernelPort),i=new Xb(r),a=Xb.createCallbacks(i),o=new Ya(e.cdpPort);await o.connect(),n(`cdp-connected`);let s=new ba(o);QM=await Zj({container:{},browser:s,bridge:i,callbacks:a,logger:console,localLickWsUrl:e.localLickWsUrl??null,syncFsChannelNonce:e.syncFsChannelNonce??null,appPageUrl:e.appPageUrl??null,onBootProgress:n});let{createSprinkleManagerProxyOverChannel:c}=await import(`./sprinkle-bridge-channel-Bur-XBNy.js`),l=c({instanceId:e.instanceId});globalThis.__slicc_sprinkleManager=l;let u=QM.sharedFs?.getWatcher();if(u){let e=null,t=new Set;for(let n of ki)u.watch(n,e=>e.endsWith(`.shtml`),n=>{for(let e of n){let n=e.path.split(`/`).pop()?.replace(/\.shtml$/,``);n&&t.add(n)}e||=setTimeout(()=>{e=null;for(let e of t)l.reload(e).catch(()=>{});t.clear()},300)})}let{createPanelRpcClient:d}=await import(`./panel-rpc-DW7W4w6_.js`).then(e=>e.a);rN=d({instanceId:e.instanceId}),globalThis.__slicc_panelRpc=rN,s.setTrayTargetProvider(ka(Oe));let f=await lN({host:QM,transport:r,browser:s,instanceId:e.instanceId});f&&($M=f.stopTerminalHost,eN=f.stopVfsRpcHost,tN=f.stopSpeechAssetsResponder,nN=f.stopComputersHost),e.kernelPort.postMessage({type:`kernel-worker-ready`})}catch(t){cN(e.kernelPort,t)}}function cN(e,t){Wa(t);try{let n=t instanceof Error?t.message:String(t),r=t?.code;e.postMessage({type:`kernel-worker-boot-error`,message:n,...typeof r==`string`?{code:r}:{},...t instanceof Error&&t.stack?{stack:t.stack}:{}})}catch{}throw t}async function lN(e){let t=e.host.sharedFs;if(!t)return console.warn(`[kernel-worker] shared FS unavailable; terminal sessions will fail to open`),null;let n=()=>e.host.capabilityBroker.adapter===`node-rest`,r=pM({transport:e.transport,fs:t,browser:e.browser,processManager:e.host.processManager,sudoManager:e.host.orchestrator.getSudoManager(),webhook:{hasLocalNodeServer:n},crontask:{hasLocalNodeServer:n},logger:console}),i=BM({transport:e.transport,client:t,writableClient:t,getWatcher:()=>t.getWatcher(),logger:console}),a=await uN(t,e.instanceId),{startComputersHost:o}=await import(`./host-ClT6wiGS.js`),s=o({transport:e.transport,processManager:e.host.processManager});return{stopTerminalHost:r.stop,stopVfsRpcHost:i.stop,stopSpeechAssetsResponder:a,stopComputersHost:s.stop}}async function uN(e,t){let{installSpeechAssetsResponder:n}=await import(`./speech-assets-bridge-DequteUl.js`),{ensureSpeechAssetsStaged:r}=await import(`./ensure-speech-assets-CaC3KtN4.js`),{createProxiedFetch:i}=await import(`./proxied-fetch-DXaTHROw.js`).then(e=>e.a),a=i();return n({instanceId:t,ensure:t=>r({fs:e,fetch:a},t)})}self.addEventListener(`message`,e=>{e.data?.type===`kernel-worker-shutdown`&&($M?.(),$M=null,eN?.(),eN=null,tN?.(),tN=null,nN?.(),nN=null,rN?.dispose(),rN=null,QM?.dispose())});export{Iv as _,pS as a,E_ as b,Cx as c,wx as d,Dx as f,xv as g,Fy as h,fS as i,Tx as l,Eb as m,$D as n,hS as o,Tb as p,hT as r,mS as s,ak as t,Ex as u,$_ as v,B_ as y};
1187
+ `}}const kj=Math.max(Si,Ci)+5e3;function Aj(e={}){let t=e.channel===void 0;if(t&&!e.nonce)throw Error(`installSyncFsResponder: a nonce (or a test channel) is required`);let n=e.channel??new BroadcastChannel(bi(e.nonce)),r=e=>n.postMessage(e),i=new Map,a=e=>{let t=e.data;if(t?.type!==`sync-fs-req`||typeof t.id!=`string`)return;let n=t;if(!vi(n.token))return;let a=i.get(n.id);if(a){r({type:xi,id:n.id}),a.result&&r({type:yi,id:n.id,...a.result});return}let o={};i.set(n.id,o),r({type:xi,id:n.id});let s=e=>{o.result=e,o.timer=setTimeout(()=>i.delete(n.id),kj),r({type:yi,id:n.id,...e})};(Ti(n)?wi(n):Ei(n)).then(s).catch(e=>s({ok:!1,errno:`EIO`,message:e instanceof Error?e.message:String(e)}))};return n.addEventListener(`message`,a),{dispose:()=>{n.removeEventListener(`message`,a);for(let e of i.values())e.timer&&clearTimeout(e.timer);i.clear(),t&&n.close?.()}}}function jj(){return globalThis}function Mj(e){switch(e.type){case`webhook`:return e.webhookName;case`sprinkle`:return e.sprinkleName;case`fswatch`:return e.fswatchName;case`navigate`:return e.navigateUrl;case`upgrade`:return`${e.upgradeFromVersion??`unknown`}→${e.upgradeToVersion??`unknown`}`;case`session-reload`:return wy(e);case`workflow`:return e.workflowName??e.workflowRunId??`workflow`;case`bash`:return e.bashJobId??`bash`;case`jshd`:return e.jshdName??`jshd`;case`preview`:return e.previewOrigin??`preview`;case`discovery`:return e.discoveryUrl??e.discoveryOrigin;default:return e.cronName}}function Nj(e){switch(e.type){case`webhook`:return e.webhookId;case`sprinkle`:return e.sprinkleName;case`fswatch`:return e.fswatchId;case`navigate`:return e.navigateUrl;case`upgrade`:return`upgrade-${e.upgradeToVersion??`unknown`}`;case`session-reload`:return`session-reload-${e.timestamp}`;case`workflow`:return`workflow-${e.workflowRunId??`unknown`}`;case`bash`:return`bash-${e.bashJobId??`unknown`}`;case`jshd`:return`jshd-${e.jshdName??`unknown`}`;case`preview`:return e.previewConnId??`preview-${e.timestamp}`;case`discovery`:return e.discoveryUrl??`discovery-${e.timestamp}`;default:return e.cronId}}function Pj(e,t){if(e.type===`sudo-request`){t.log.debug?.(`sudo-request lick: UI-chip-only path; orchestrator owns delivery`,{lickId:e.lickId});return}Fj(e,t)}async function Fj(e,{orchestrator:t,log:n}){let r=t.getScoops(),i=O(r),a=e.type===`discovery`&&!e.targetScoop?lj(e,i.filter(Cx),e=>t.getScoopContext?.(e.jid)?.getAgentMessages()??[]):void 0,o=e.targetScoop?eo(r,e.targetScoop):a??i[0];if(!o){n.warn(`Lick target scoop not found`,e.targetScoop);return}if(e.type===`discovery`&&!Cx(o)){n.debug?.(`dropping discovery lick for non-browsing scoop`,{scoop:o.folder});return}if(e.type===`navigate`){try{let{shouldSkipNavigateUpskill:r}=await import(`./upskill-lick-skip-DeQBgND8.js`);if(await r(e,typeof t.getDefaultConeFs==`function`?()=>t.getDefaultConeFs():()=>null)){n.debug?.(`dropping navigate·upskill lick; advertised skill already installed at that commit`);return}}catch(e){n.warn(`navigate·upskill skip check failed; raising card`,e)}e.lickId=t.registerNavigateLick(e)}else e.type===`session-reload`?e.lickId=t.registerSessionReloadLick(e):e.type===`upgrade`?e.lickId=t.registerUpgradeLick(e):e.type===`discovery`&&(e.lickId=t.registerDiscoveryLick(e)??void 0);let s=Ry(e);if(s===null){n.debug?.(`dropping lick event with no renderable content`,{type:e.type});return}let c=Mj(e),l=Nj(e),u=e.type,d={id:`${u}-${l}-${Date.now()}`,chatJid:o.jid,senderId:u,senderName:`${u}:${c}`,content:s.content,timestamp:e.timestamp,fromAssistant:!1,channel:u,...e.lickId?{lickId:e.lickId}:{}};t.handleMessage(d).catch(e=>{n.warn(`Lick message routing failed`,{channel:u,eventName:c,error:String(e)})})}async function Ij(e,t,n,r,i){let a=new pi,o=new YA(e,{...r,getBrowserAPI:()=>t});o.setProcessManager(a);let s=fn(),l=i.capabilityBroker??c(s,{...i.pageGestures?{pageGestures:i.pageGestures}:{}});o.setCapabilityBroker(l),br(l),jj().__slicc_pm=a,mi(gi()),jj().__slicc_browser=t,await n.bind(o,t);let u=Mr(()=>n.emitTrayRuntimeStatus()),d=we(()=>n.emitTrayRuntimeStatus());gj(o,n);let f=i.logger??console;return await o.init(i.onBootProgress,{onSharedFsReady:async e=>{try{let{applyConfiguredHostMounts:t}=await import(`./auto-mount-table-Dlq8aO5D.js`);await t(e,f)}catch(e){f.warn(`Configured host mounts failed`,e)}i.onBootProgress?.(`host-mounts-applied`)}}),await n.hydrateBuffersFromRecords(),n.publishHydratedTranscripts(),{processManager:a,orchestrator:o,unsubLeader:u,unsubFollower:d,sharedFs:o.getSharedFS(),capabilityBroker:l}}async function Lj(e,t,n){let{registerSessionBudgetProvider:r,registerSessionCostsProvider:i}=await import(`./cost-command-D0tJNxsl.js`).then(e=>e.t);i(t=>e.getSessionCostsForCommand(t));let{refreshBudgetWindow:a}=await Promise.resolve().then(()=>R_);r(()=>a());let{getLickManager:o}=await Promise.resolve().then(()=>aE),s=o();await s.init(),e.setLickManager(s);let c=t.lickEventHandler??Pj,l={orchestrator:e,lickManager:s,log:n};return s.setEventHandler(e=>c(e,l)),s}async function Rj(e){let t=e.getScoops();O(t).length>0||await e.registerScoop({jid:`cone_${Date.now()}`,name:`Cone`,folder:`cone`,parentJid:null,requiresTrigger:!1,assistantLabel:`sliccy`,addedAt:new Date().toISOString()})}function zj(e){let{orchestrator:t,processManager:n,lickManager:r,sharedFs:a}=e;tj({sharedFs:a,getStartingRoot:e=>{let n=O(t.getScoops()),r=n.find(t=>t.jid===e);return r?{jid:r.jid,lickTarget:r.jid===n[0]?.jid?void 0:r.folder}:null},fireLick:e=>r.emitEvent(e),processManager:n,runRealm:(e,t,n)=>_i(e,t,n,void 0,{filename:t[1]}),makeRunId:()=>u().slice(10,22),splitResult:(e,t)=>i(e,t)})}async function Bj(e){let{browser:t,lickManager:n,orchestrator:r,sharedFs:i,log:a}=e,{CdpWsPageBridge:o}=await import(`./cdp-ws-page-bridge-DsbAqoSN.js`),{WsSubscriberRegistry:s}=await import(`./ws-subscribers-CKHqIv8e.js`),c=new o({browser:t});return{wsBridge:c,wsRegistry:new s({bridge:c,webhooks:{has:e=>n.getWebhook(e)!==void 0},dispatcher:{webhook:(e,t)=>{n.handleWebhookEvent(e,{},t)},scoop:(e,t)=>{if(!r.getScoops().find(t=>t.jid===e)){a.warn?.(`browser.websocket: scoop sink not found`,{jid:e});return}let n={id:`ws-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,chatJid:e,senderId:`browser.websocket`,senderName:`browser.websocket`,content:typeof t==`string`?t:JSON.stringify(t,null,2),timestamp:new Date().toISOString(),fromAssistant:!1,channel:`browser.websocket`};r.handleMessage(n)},vfs:async(e,t)=>{if(!i)return;let n=(typeof t==`string`?t:JSON.stringify(t))+`
1188
+ `,r=``;try{let t=await i.readFile(e);r=typeof t==`string`?t:new TextDecoder().decode(t)}catch{}await i.writeFile(e,r+n)},log:e=>{a.info?.(`browser.websocket frame`,{payload:e})}}})}}async function Vj(e,t,n,r){try{let{startLickWsBridge:i}=await import(`./lick-ws-bridge-Dr8ndBaj.js`),{HostFsMountBackend:a}=await import(`./backend-hostfs-Bqk2Qgbz.js`);return i(e,{locationHref:self.location.href,lickWsUrl:n??null,onHostfsInvalidate:e=>{if(!r)return;let n=r.getMountBackend(e.mount);if(!(n instanceof a)){t.debug?.(`hostfs_invalidate for unknown/non-hostfs mount`,{mount:e.mount});return}n.applyHostInvalidation(e.paths).catch(n=>{t.warn(`hostfs_invalidate apply failed`,{mount:e.mount,error:n instanceof Error?n.message:String(n)})})}}).stop}catch(e){return(t.error?.bind(t)??t.warn.bind(t)??((e,t)=>console.error(`[lick-ws-bridge]`,e,t)))(`Failed to start lick-ws bridge — webhook / crontask / handoff lick delivery is non-functional in this session`,{error:e instanceof Error?e.message:String(e)}),null}}function Hj(e,t,n,r){let i=e.getTransport();if(i.isExtensionBridge)return n.debug?.(`Skipping NavigationWatcher: extension-bridge transport rejects sessionless Target.* discovery; the service worker observes handoffs via chrome.webRequest`),null;try{let e=new mx(i,e=>{let n={url:e.url,verb:e.verb,target:e.target};e.instruction!=null&&(n.instruction=e.instruction),e.branch!=null&&(n.branch=e.branch),e.path!=null&&(n.path=e.path),e.title!=null&&(n.title=e.title),t.emitEvent({type:`navigate`,navigateUrl:e.url,targetScoop:void 0,timestamp:new Date().toISOString(),body:n})},{...Uj(t),isOwnTab:fx(()=>r??null)});return e.start(),()=>e.stop()}catch(e){return n.warn(`Failed to start NavigationWatcher`,e),null}}function Uj(e){let t=ye();return{onDiscovery:t=>{e.emitEvent({type:`discovery`,targetScoop:void 0,timestamp:new Date().toISOString(),discoveryOrigin:t.origin,discoveryKind:t.kind,discoveryUrl:t.url,discoverySource:`live-navigation`,body:{origin:t.origin,kind:t.kind,url:t.url,targetId:t.targetId}})},probeFetch:async(e,n)=>{let r=t(e,{method:n?.method??`GET`}),i=n?.signal,a=i?await Promise.race([r,new Promise((e,t)=>{if(i.aborted){t(Error(`aborted`));return}i.addEventListener(`abort`,()=>t(Error(`aborted`)),{once:!0})})]):await r,o=a.headers;return{ok:a.status>=200&&a.status<300,status:a.status,headers:{get(e){return o?o[e.toLowerCase()]??o[e]??null:null}}}},isDiscoveryEnabled:()=>hx()}}async function Wj(e,t,n){try{let r=await e.recoverInterruptedWork(e=>t.emitEvent(e));r.length>0&&n.info(`Recovered work interrupted by a reload`,{outcomes:r})}catch(e){n.warn(`Reload recovery failed`,e)}}async function Gj(e,t,n,r,i,a){e&&(await qj(e,n,r),i(`mounts-restored`),await Kj(e,t,n,r,a),i(`jshd-restored`))}async function Kj(e,t,n,r,i){try{let{restoreEnabledJshdUnits:r}=await import(`./restore-D4J7Iipz.js`),a=i.getSudoManager();await r({fs:e,processManager:t,lickManager:n,...a?{sudo:{broker:a.getBroker(),getPolicy:()=>a.getPolicy()}}:{}})}catch(e){r.warn(`jshd restore failed`,e)}}async function qj(e,t,n){try{let{getAllMountEntries:r}=await import(`./mount-table-store-DrF_Ifaz.js`).then(e=>e.r),{recoverMounts:i}=await Promise.resolve().then(()=>fy),{applyConfiguredHostMounts:a,withoutHostMountedTargets:o}=await import(`./auto-mount-table-Dlq8aO5D.js`),s=await a(e,n),c=o(await r(),s);if(c.length===0)return;let{needsRecovery:l}=await i(c,e,n);if(l.length===0)return;t.emitEvent({type:`session-reload`,targetScoop:void 0,timestamp:new Date().toISOString(),body:{reason:`mount-recovery`,mounts:l}})}catch(e){n.warn(`mount recovery failed`,e)}}function Jj(){Pr(async()=>{let{getLastSeenVersion:e}=await import(`./upgrade-detection-kNZzwNpV.js`);return e()})}function Yj(e,t){(async()=>{try{let{detectUpgrade:t,recordVersionSeen:n}=await import(`./upgrade-detection-kNZzwNpV.js`),r=await t();if(!r.isUpgrade||r.lastSeen===null)return;e.emitEvent({type:`upgrade`,targetScoop:void 0,timestamp:new Date().toISOString(),upgradeFromVersion:r.lastSeen,upgradeToVersion:r.bundled.version,body:{from:r.lastSeen,to:r.bundled.version,releasedAt:r.bundled.releasedAt}}),await n(r.bundled.version)}catch(e){t.warn(`Upgrade detection failed`,e)}})()}async function Xj(e,t,n){try{let{BshWatchdog:n}=await import(`./bsh-watchdog-xbXqblUt.js`),{ScriptCatalog:r}=await import(`./script-catalog-ByM8lrb_.js`).then(e=>e.n),i=new r({jshFs:e,bshFs:e,watcher:e.getWatcher()}),a=new n({browserAPI:t,scriptCatalog:i,fs:e});return a.start(),{bshWatchdogStop:()=>a.stop(),scriptCatalogDispose:()=>i.dispose()}}catch(e){return n.warn(`Failed to start BSH watchdog`,e),{bshWatchdogStop:null,scriptCatalogDispose:null}}}function Zj(e){return e===`node-rest`}function Qj(e,t,n,r){import(`./gelatiere-unit-i3KpBjAC.js`).then(async r=>{let i=r.createGelatiereSeam(e,t);if(r.publishGelatiereSeam(i),!n||!ke(`memory-v2`)){await r.haltGelatiere(i);return}let{loadGelatiereConfig:a}=await import(`./gelatiere-store-Dd2SBj-h.js`),o=await a(n);await r.bootGelatiere(i,o.nightly,o.allowedCommands)}).catch(e=>r.warn(`gelatiere seam failed to publish`,e))}function $j(e,t){if(!e)return()=>{};import(`./memory-curation-seam-Babzek1S.js`).then(t=>t.publishMemorySeam(t.createMemorySeam(e))).catch(e=>t.warn(`memory seam failed to publish`,e));let n=!1,r=null;return ke(`memory-v2`)&&import(`./memory-health-detJjF2Z.js`).then(i=>{n||(r=i.scheduleMemoryHealthChecks(e,{log:t}))}).catch(e=>t.warn(`memory health check failed to schedule`,e)),()=>{n=!0,r?.()}}function eM(e,t,n){if(!t){n.warn(`AgentBridge not published — orchestrator.getSharedFS() returned null`);return}Yv(e,t,e.getSessionStore())}async function tM(e){let{container:t,browser:n,bridge:r,callbacks:i,skipConeBootstrap:a=!1}=e,o=e.logger??console,s=t=>e.onBootProgress?.(t);Jj();let{processManager:c,orchestrator:l,unsubLeader:u,unsubFollower:d,sharedFs:f,capabilityBroker:p}=await Ij(t,n,r,i,e);if(s(`orchestrator-ready`),eM(l,f,o),f)try{await f.mountInternal(`/proc`,new _j(c))}catch(e){o.warn(`Failed to mount /proc`,e)}let m=await Lj(l,e,o);s(`lick-manager-ready`),f&&zj({orchestrator:l,processManager:c,lickManager:m,sharedFs:f}),jj().__slicc_lickManager=m,Qj(l,m,f,o);let h=$j(f,o),{wsBridge:ee,wsRegistry:g}=await Bj({browser:n,lickManager:m,orchestrator:l,sharedFs:f,log:o});jj().__slicc_wsSubscribers=g;let te=Zj(p.adapter)?await Vj(m,o,e.localLickWsUrl??null,f):null,ne=Hj(n,m,o,e.appPageUrl);await Gj(f,c,m,o,s,l),a||await Rj(l),s(`cone-bootstrapped`),Wj(l,m,o),f&&Yj(m,o);let re=null,_=null;f&&({bshWatchdogStop:re,scriptCatalogDispose:_}=await Xj(f,n,o));let ie=null;f&&e.syncFsChannelNonce&&(ie=Aj({nonce:e.syncFsChannelNonce}).dispose);let ae=!1;return{orchestrator:l,browser:n,bridge:r,lickManager:m,sharedFs:f??null,processManager:c,capabilityBroker:p,async dispose(){ae||(ae=!0,await nM({unsubLeader:u,unsubFollower:d,bshWatchdogStop:re,memoryHealthStop:h,scriptCatalogDispose:_,lickWsBridgeStop:te,navigationWatcherStop:ne,syncFsResponderDispose:ie,sharedFs:f,wsRegistry:g,wsBridge:ee,processManager:c,lickManager:m,browser:n,log:o}))}}}async function nM(e){let{sharedFs:t,wsRegistry:n,wsBridge:r,processManager:i,lickManager:a,browser:o,log:s}=e;if(e.unsubLeader?.(),e.unsubFollower?.(),e.bshWatchdogStop?.(),e.memoryHealthStop?.(),e.scriptCatalogDispose?.(),e.lickWsBridgeStop?.(),e.syncFsResponderDispose?.(),e.navigationWatcherStop)try{await e.navigationWatcherStop()}catch(e){s.warn(`NavigationWatcher.stop() failed`,e)}if(t)try{await t.unmountInternal(`/proc`)}catch{}try{n.dispose()}catch(e){s.warn(`WsSubscriberRegistry.dispose() failed`,e)}try{r.dispose()}catch(e){s.warn(`CdpWsPageBridge.dispose() failed`,e)}rM({processManager:i,lickManager:a,browser:o,wsRegistry:n})}function rM(e){let t=jj();t.__slicc_pm===e.processManager&&(delete t.__slicc_pm,mi(null)),t.__slicc_lickManager===e.lickManager&&delete t.__slicc_lickManager,e.browser&&t.__slicc_browser===e.browser&&delete t.__slicc_browser,e.wsRegistry&&t.__slicc_wsSubscribers===e.wsRegistry&&delete t.__slicc_wsSubscribers,delete t[f]}const iM=`x-bypass-llm-proxy`;function aM(e,t,n){return t?(r,i)=>{if(!oM(r,t,n))return e(r,i);let a=new Headers(i?.headers);return a.has(iM)||a.set(iM,`1`),e(r,{...i,headers:a})}:e}function oM(e,t,n){if(cM(e,t))return!0;let r=n?.()??null;return r?sM(e,r,t):!1}function sM(e,t,n){let r=lM(e),i,a;try{i=new URL(r,n),a=new URL(t)}catch{return!1}return i.origin===a.origin&&i.pathname.startsWith(`/api/`)}function cM(e,t){let n=lM(e);try{return new URL(n,t).origin===t}catch{return!0}}function lM(e){return typeof e==`string`?e:e instanceof URL?e.href:e.url}function uM(e,t={}){let n=t.onError??(e=>console.error(`[kernel-worker] boot failed`,e)),r=t.onDuplicate??(()=>console.warn(`[kernel-worker] received duplicate kernel-worker-init; ignoring`)),i=!1;return{handle(t){if(i){r();return}i=!0,e(t).catch(e=>{i=!1,n(e)})},isInitialized(){return i}}}var dM=class{transport;createShell;log;pm;defaultOwner;sessions=new Map;unsubscribe=null;constructor(e){this.transport=e.transport,this.createShell=e.createShell,this.log=e.logger??console,this.pm=e.processManager??null,this.defaultOwner=e.defaultOwner??{kind:`system`}}start(){return this.unsubscribe||=this.transport.onMessage(e=>{if(!fM(e)||e.source!==`panel`)return;let t=e.payload;mM(t)&&this.handleControl(t).catch(e=>{this.log.warn(`[terminal-session-host] handler error`,e)})}),()=>this.dispose()}dispose(){this.unsubscribe?.(),this.unsubscribe=null;for(let[,e]of this.sessions)e.currentProcess&&this.pm?(this.pm.signal(e.currentProcess.pid,`SIGTERM`),this.pm.exit(e.currentProcess.pid,null)):e.currentExec?.abort(),e.shell.dispose?.();this.sessions.clear()}async handleControl(e){switch(e.type){case`terminal-open`:return this.handleOpen(e);case`terminal-close`:return this.handleClose(e);case`terminal-exec`:return this.handleExec(e);case`terminal-signal`:return this.handleSignal(e);case`terminal-stdin`:case`terminal-resize`:return}}async handleOpen(e){if(this.sessions.has(e.sid)){this.emitStatus(e.sid,`error`,`session already open`);return}try{let t=this.createShell(e.sid,{cwd:e.cwd,env:e.env});this.sessions.set(e.sid,{shell:t,currentExec:null,currentProcess:null}),this.emitStatus(e.sid,`opened`)}catch(t){this.emitStatus(e.sid,`error`,t instanceof Error?t.message:String(t))}}async handleClose(e){let t=this.sessions.get(e.sid);t&&(t.currentProcess&&this.pm?(this.pm.signal(t.currentProcess.pid,`SIGTERM`),this.pm.exit(t.currentProcess.pid,null)):t.currentExec?.abort(),t.shell.dispose?.(),this.sessions.delete(e.sid),this.emitStatus(e.sid,`closed`))}emitExit(e,t){this.emit({type:`terminal-exit`,sid:e.sid,execId:e.execId,exitCode:t})}emitStream(e,t,n){this.emit({type:`terminal-output`,sid:e.sid,execId:e.execId,stream:t,data:n})}async handleExec(e){let t=this.sessions.get(e.sid);if(!t){this.emitExit(e,127),this.log.warn(`[terminal-session-host] exec on unknown session`,e.sid);return}if(t.currentExec){this.emitExit(e,130);return}let n=new AbortController;t.currentExec=n,t.shell.applySessionOverrides?.({cwd:e.cwd,env:e.env});let r=this.pm?this.pm.spawn({kind:`shell`,argv:[e.command],cwd:t.shell.getCwd?.()??void 0,owner:this.defaultOwner,adoptAbort:n}):null;t.currentProcess=r;try{let i=``;if(e.stdin)try{i=Di(ae(e.stdin))}catch{this.emitExit(e,127),this.log.warn(`[terminal-session-host] exec with invalid stdin (expected base64)`,e.sid);return}let a=await t.shell.executeCommand(e.command,n.signal,r?.pid,i);await this.emitExecSuccess(e,a,n,r)}catch(t){this.emitExecError(e,t,n,r)}finally{t.currentExec===n&&(t.currentExec=null,t.currentProcess=null)}}async emitExecSuccess(e,t,n,r){let i=n.signal.aborted?pM(r?.terminatedBy??`SIGINT`):t.exitCode;n.signal.aborted||(r&&await r.gate.wait(),t.stdout&&this.emitStream(e,`stdout`,t.stdout),t.stderr&&this.emitStream(e,`stderr`,t.stderr)),this.emitExit(e,i),r&&this.pm&&this.pm.exit(r.pid,n.signal.aborted?null:t.exitCode)}emitExecError(e,t,n,r){if(n.signal.aborted){this.emitExit(e,pM(r?.terminatedBy??`SIGINT`)),r&&this.pm&&this.pm.exit(r.pid,null);return}let i=t instanceof Error?t.message:String(t);this.emitStream(e,`stderr`,`Error: ${i}\n`),this.emitExit(e,1),r&&this.pm&&this.pm.exit(r.pid,1)}async handleSignal(e){let t=this.sessions.get(e.sid);if(!t){this.log.warn(`[terminal-session-host] signal on unknown session`,e.sid);return}(e.signal===`SIGINT`||e.signal===`SIGTERM`||e.signal===`SIGKILL`)&&(t.currentProcess&&this.pm?this.pm.signal(t.currentProcess.pid,e.signal):t.currentExec?.abort())}emit(e){this.transport.send(e)}emitStatus(e,t,n){let r=n?{type:`terminal-status`,sid:e,state:t,error:n}:{type:`terminal-status`,sid:e,state:t};this.emit(r)}};function fM(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function pM(e){switch(e){case`SIGINT`:return 130;case`SIGTERM`:return 143;case`SIGKILL`:return 137;case`SIGSTOP`:case`SIGCONT`:return 130}}function mM(e){if(typeof e!=`object`||!e)return!1;let t=e.type;return t===`terminal-open`||t===`terminal-close`||t===`terminal-exec`||t===`terminal-signal`||t===`terminal-stdin`||t===`terminal-resize`}var hM=class extends ee{sid;transport;constructor(e,t,n){super(n),this.sid=e,this.transport=t}async renderMediaPreview(e){for(let t of e){let e=``,n=t.bytes,r=8192;for(let t=0;t<n.length;t+=r)e+=String.fromCharCode(...n.subarray(t,t+r));let i={type:`terminal-media-preview`,sid:this.sid,path:t.path,mediaType:t.mimeType,data:btoa(e)};this.transport.send(i)}}};const gM={maxExecutionTimeMs:1/0,maxCommandCount:1/0,maxLoopIterations:1/0,maxParserTokens:1/0,maxParseIterations:1/0};function _M(e){let{transport:t,fs:n,browser:r,processManager:i,sudoManager:a}=e,o=e.logger??console,s=a?.getShellConfig({transparentGating:!1}),c=new dM({transport:t,processManager:i,createShell:(a,o)=>new hM(a,t,{fs:n,cwd:o.cwd,env:o.env,browserAPI:r,webhook:{hasLocalNodeServer:e.webhook?.hasLocalNodeServer??(()=>!1),getLeaderStatus:e.webhook?.getLeaderStatus??Nr},crontask:e.crontask,processManager:i,processOwner:{kind:`system`},sudo:s,executionLimits:gM}),logger:o});return{host:c,stop:c.start()}}function vM(e){if(e!=null){if(typeof e==`string`)return e;if(e instanceof Error)return xM(e);if(typeof e==`object`)return SM(e);if(typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`)return String(e)}}function yM(e){if(typeof e==`object`&&e&&!(e instanceof Error))return wM(e)??TM(e);let t=vM(e);if(t!==void 0)return bM(t)}function bM(e){let t=e.trim();if(!t)return e;let n=CM(t);if(n)return n;let r=t.indexOf(`{`),i=t.lastIndexOf(`}`);if(r>0&&i>r){let e=CM(t.slice(r,i+1));if(e)return e}return e}function xM(e){let t=e.name&&e.name!==`Error`?e.name:``,n=e.message||``;return t&&n?`${t}: ${n}`:n||t||`Error`}function SM(e){let t=wM(e),n=TM(e);return n&&t?`${n}: ${t}`:t??n}function CM(e){if(e.startsWith(`{`))try{return wM(JSON.parse(e))}catch{return}}function wM(e){if(!e||typeof e!=`object`)return;let t=e;if(typeof t.message==`string`&&t.message.length>0)return t.message;if(typeof t.error==`string`&&t.error.length>0)return t.error;if(t.error&&typeof t.error==`object`){let e=t.error;if(typeof e.message==`string`&&e.message.length>0)return e.message}}function TM(e){if(!e||typeof e!=`object`)return;let t=e;if(t.error&&typeof t.error==`object`){let e=t.error;if(typeof e.type==`string`&&e.type.length>0)return e.type}if(typeof t.type==`string`&&t.type.length>0&&t.type!==`error`)return t.type}let EM=null,DM=!1;function OM(){return typeof window>`u`||typeof document>`u`||document?.documentElement===void 0||typeof localStorage?.getItem!=`function`}function kM(e){return OM()?`standalone-worker`:e?`extension`:typeof document<`u`&&document.documentElement?.dataset?.electronOverlay?`electron`:`cli`}async function AM(e={}){if(!DM&&!(typeof localStorage<`u`&&typeof localStorage?.getItem==`function`&&localStorage.getItem(`telemetry-disabled`)===`true`)){m(jM),AE(NM),rD(MM);try{let t=kM(e.isExtensionRealm??!1);t!==`standalone-worker`&&typeof window<`u`?window.RUM_GENERATION=`slicc-${t}`:globalThis.RUM_GENERATION=`slicc-${t}`,t===`standalone-worker`?(EM=(await import(`./rum-worker-CwmNSpjO.js`)).default,IM(self)):t===`extension`?(EM=(await import(`./rum-DW84CvBs.js`)).default,typeof window<`u`&&IM(window)):(typeof window<`u`&&(window.SAMPLE_PAGEVIEWS_AT_RATE=`high`),UM(),RM(),EM=(await import(`./src-Cj-AoUM3.js`)).sampleRUM),DM=!0,EM&&EM(`navigate`,{source:typeof document<`u`?document.referrer:``,target:t})}catch{}}}function jM(e){EM?.(`fill`,{source:e})}function MM(e,t){let n=FM(t);n!==null&&EM?.(`error`,{source:e,target:n})}function NM(e,t,n){if(e===`error`){let e=FM(n);if(e===null)return;EM?.(`error`,{source:`scoop:${t}`,target:e});return}EM?.(e===`spawn`?`enter`:e===`feed`?`convert`:`leave`,{source:t,target:`scoop-${e}`})}function PM(e){return e.includes(`@vite/client`)||e.includes(`@vite/env`)||e.includes(`[vite]`)||/https?:\/\/localhost:\d+\/@vite\//.test(e)||/\/__vite_ping/.test(e)}function FM(e){let t=vM(e);if(t===void 0)return e==null?void 0:null;if(dD(t))return null;let n=yM(e)??bM(t);return dD(n)?null:zM(n)}function IM(e){e.addEventListener(`error`,e=>{let t=e;MM(`js`,t.error??t.message??``)}),e.addEventListener(`unhandledrejection`,e=>{MM(`js`,e.reason)})}function LM(e){return typeof e==`object`&&!!e&&!(e instanceof Error)}function RM(){typeof window>`u`||(window.addEventListener(`error`,e=>{let t=e.error;LM(t)&&(MM(`js`,t),e.stopImmediatePropagation())},!0),window.addEventListener(`unhandledrejection`,e=>{let t=e.reason;LM(t)&&(MM(`js`,t),e.stopImmediatePropagation())},!0))}function zM(e){let t=e??``;if(t.includes(`@vite/`)||t.includes(`[vite]`)||t.includes(`__vite_ping`)){let e=t.split(`
1189
+ `).filter(e=>!PM(e)).join(`
1190
+ `).trim();return e?e.slice(0,200).replace(/(\/[a-z]+)(?:\/[^\s/]+)+/gi,`$1/.../`):null}return t.slice(0,200).replace(/(\/[a-z]+)(?:\/[^\s/]+)+/gi,`$1/.../`)}const BM=Symbol.for(`slicc.telemetry.sendBeacon.wrapped`);function VM(e){let t=typeof e==`string`?e:yM(e)??vM(e);if(typeof t!=`string`)return{kind:`absent`};let n=bM(t);if(n===`[object Object]`)return{kind:`noise`};let r=zM(n);return r===null?{kind:`noise`}:{kind:`kept`,value:r,mutated:r!==e}}function HM(e){let t=VM(e.source),n=VM(e.target),r=t.kind!==`kept`,i=n.kind!==`kept`;if((t.kind!==`absent`||n.kind!==`absent`)&&r&&i||n.kind===`noise`&&e.source===`undefined error`)return!0;let a=!1;return t.kind===`kept`?t.mutated&&(e.source=t.value,a=!0):t.kind===`noise`&&(e.source=``,a=!0),n.kind===`kept`?n.mutated&&(e.target=n.value,a=!0):n.kind===`noise`&&(e.target=``,a=!0),a?JSON.stringify(e):null}function UM(){if(typeof navigator>`u`||typeof navigator.sendBeacon!=`function`)return;let e=navigator.sendBeacon;if(e[BM])return;let t=e.bind(navigator),n=((e,n)=>{try{let r=typeof n==`string`?n:n instanceof ArrayBuffer?new TextDecoder().decode(n):null;if(r&&r.length>0&&r.charCodeAt(0)===123){let n=JSON.parse(r);if(n?.checkpoint===`error`){let r=HM(n);if(r===!0)return!0;if(r!==null)return t(e,r)}}}catch{}return t(e,n)});n[BM]=!0,navigator.sendBeacon=n}function WM(e){let t=new GM(e);return t.start(),{stop:()=>t.dispose()}}var GM=class{transport;client;writableClient;getWatcher;log;unsubscribe=null;watches=new Map;constructor(e){this.transport=e.transport,this.client=e.client,this.writableClient=e.writableClient??null,this.getWatcher=e.getWatcher??null,this.log=e.logger??console}start(){this.unsubscribe||=this.transport.onMessage(e=>{if(!KM(e)||e.source!==`panel`)return;let t=e.payload;if(qM(t)){this.handleRequest(t).catch(e=>{this.log.warn(`[vfs-rpc-host] handler unexpectedly threw`,e)});return}if(JM(t)){this.handleWriteRequest(t).catch(e=>{this.log.warn(`[vfs-rpc-host] write handler unexpectedly threw`,e)});return}if(YM(t)){this.handleWatchControl(t);return}})}dispose(){this.unsubscribe?.(),this.unsubscribe=null;for(let[,e]of this.watches)for(let t of e)t();this.watches.clear()}handleWatchControl(e){e.type===`vfs-watch`?this.handleWatch(e):this.handleUnwatch(e)}handleWatch(e){this.dropWatch(e.subscriptionId);let t=this.getWatcher?.()??null;if(!t){this.sendWatchAck({type:`vfs-watch-result`,subscriptionId:e.subscriptionId,ok:!1,error:{code:`ENOSYS`,message:`vfs-rpc-host has no watcher wired`}});return}let n=e.basePaths.map(n=>t.watch(n,()=>!0,t=>{if(!this.watches.has(e.subscriptionId))return;let n={type:`vfs-watch-event`,subscriptionId:e.subscriptionId,events:t.map(e=>({type:e.type,path:e.path,...e.entryType?{entryType:e.entryType}:{}}))};this.transport.send(n)}));this.watches.set(e.subscriptionId,n),this.sendWatchAck({type:`vfs-watch-result`,subscriptionId:e.subscriptionId,ok:!0})}handleUnwatch(e){this.dropWatch(e.subscriptionId)}dropWatch(e){let t=this.watches.get(e);if(t){this.watches.delete(e);for(let e of t)e()}}sendWatchAck(e){this.transport.send(e)}async handleRequest(e){switch(e.type){case`vfs-read-dir`:return this.handleReadDir(e);case`vfs-read-file`:return this.handleReadFile(e);case`vfs-stat`:return this.handleStat(e)}}async handleReadDir(e){try{let t=e.includeStats===!0?await this.client.readDir(e.path,{includeStats:!0}):await this.client.readDir(e.path),n={type:`vfs-read-dir-result`,requestId:e.requestId,ok:!0,entries:t};this.transport.send(n)}catch(t){this.emitError(`vfs-read-dir-result`,e.requestId,t,e.path)}}async handleReadFile(e){let t=e.encoding??`utf-8`;try{if(t===`binary`&&Number.isInteger(e.start)){let t=await this.readFileWindow(e.path,e.start,e.end);this.sendBinaryReadResult(e.requestId,e.path,t);return}let n=await this.client.readFile(e.path,{encoding:t});if(t===`binary`)this.sendBinaryReadResult(e.requestId,e.path,n);else{if(typeof n!=`string`){this.emitError(`vfs-read-file-result`,e.requestId,new k(`EIO`,`readFile(utf-8) did not return string`),e.path);return}let t={type:`vfs-read-file-result`,requestId:e.requestId,ok:!0,encoding:`utf-8`,data:n};this.transport.send(t)}}catch(t){this.emitError(`vfs-read-file-result`,e.requestId,t,e.path)}}async readFileWindow(e,t,n){let r=n??(await this.client.stat(e)).size;if(this.client.readFileRange)return this.client.readFileRange(e,t,r);let i=await this.client.readFile(e,{encoding:`binary`});if(!(i instanceof Uint8Array))throw new k(`EIO`,`readFile(binary) did not return Uint8Array`,e);return new Uint8Array(i.subarray(t,Math.min(r,i.byteLength)))}sendBinaryReadResult(e,t,n){if(!(n instanceof Uint8Array)){this.emitError(`vfs-read-file-result`,e,new k(`EIO`,`readFile(binary) did not return Uint8Array`),t);return}let r={type:`vfs-read-file-result`,requestId:e,ok:!0,encoding:`binary`,data:n},i=n.buffer,a=typeof ArrayBuffer<`u`&&i instanceof ArrayBuffer?[i]:void 0;this.transport.send(r,a)}async handleStat(e){try{let t=await this.client.stat(e.path),n={type:`vfs-stat-result`,requestId:e.requestId,ok:!0,stats:t};this.transport.send(n)}catch(t){this.emitError(`vfs-stat-result`,e.requestId,t,e.path)}}async handleWriteRequest(e){if(!this.writableClient){this.emitWriteError(XM(e.type),e.requestId,new k(`EACCES`,`vfs-rpc-host has no writable backend wired`),ZM(e));return}switch(e.type){case`vfs-write-file`:return this.handleWriteFile(e,this.writableClient);case`vfs-mkdir`:return this.handleMkdir(e,this.writableClient);case`vfs-rm`:return this.handleRm(e,this.writableClient);case`vfs-flush`:return this.handleFlush(e,this.writableClient);case`vfs-list-mount-points`:return this.handleListMountPoints(e,this.writableClient)}}async handleWriteFile(e,t){try{if(e.encoding===`binary`){if(!(e.data instanceof Uint8Array)){this.emitWriteError(`vfs-write-file-result`,e.requestId,new k(`EIO`,`vfs-write-file(binary) data is not Uint8Array`),e.path);return}}else if(typeof e.data!=`string`){this.emitWriteError(`vfs-write-file-result`,e.requestId,new k(`EIO`,`vfs-write-file(utf-8) data is not string`),e.path);return}let n=e.recursive===void 0?void 0:{recursive:e.recursive};await t.writeFile(e.path,e.data,n);let r={type:`vfs-write-file-result`,requestId:e.requestId,ok:!0};this.transport.send(r)}catch(t){this.emitWriteError(`vfs-write-file-result`,e.requestId,t,e.path)}}async handleMkdir(e,t){try{let n=e.recursive===void 0?void 0:{recursive:e.recursive};await t.mkdir(e.path,n);let r={type:`vfs-mkdir-result`,requestId:e.requestId,ok:!0};this.transport.send(r)}catch(t){this.emitWriteError(`vfs-mkdir-result`,e.requestId,t,e.path)}}async handleRm(e,t){try{let n=e.recursive===void 0?void 0:{recursive:e.recursive};await t.rm(e.path,n);let r={type:`vfs-rm-result`,requestId:e.requestId,ok:!0};this.transport.send(r)}catch(t){this.emitWriteError(`vfs-rm-result`,e.requestId,t,e.path)}}async handleFlush(e,t){try{await t.flush();let n={type:`vfs-flush-result`,requestId:e.requestId,ok:!0};this.transport.send(n)}catch(t){this.emitWriteError(`vfs-flush-result`,e.requestId,t,``)}}async handleListMountPoints(e,t){if(!t.listMountPoints){this.emitWriteError(`vfs-list-mount-points-result`,e.requestId,new k(`EACCES`,`vfs-rpc-host has no mount-aware backend wired`),``);return}try{let n=await t.listMountPoints(),r={type:`vfs-list-mount-points-result`,requestId:e.requestId,ok:!0,mountPoints:n};this.transport.send(r)}catch(t){this.emitWriteError(`vfs-list-mount-points-result`,e.requestId,t,``)}}emitError(e,t,n,r){let i=QM(n,r);switch(e){case`vfs-read-dir-result`:{let e={type:`vfs-read-dir-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-read-file-result`:{let e={type:`vfs-read-file-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-stat-result`:{let e={type:`vfs-stat-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}}}emitWriteError(e,t,n,r){let i=QM(n,r);switch(r===``&&i.path===``&&delete i.path,e){case`vfs-write-file-result`:{let e={type:`vfs-write-file-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-mkdir-result`:{let e={type:`vfs-mkdir-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-rm-result`:{let e={type:`vfs-rm-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-flush-result`:{let e={type:`vfs-flush-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-list-mount-points-result`:{let e={type:`vfs-list-mount-points-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}}}};function KM(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function qM(e){if(typeof e!=`object`||!e)return!1;let t=e.type;return t===`vfs-read-dir`||t===`vfs-read-file`||t===`vfs-stat`}function JM(e){if(typeof e!=`object`||!e)return!1;let t=e.type;return t===`vfs-write-file`||t===`vfs-mkdir`||t===`vfs-rm`||t===`vfs-flush`||t===`vfs-list-mount-points`}function YM(e){if(typeof e!=`object`||!e)return!1;let t=e.type;return t===`vfs-watch`||t===`vfs-unwatch`}function XM(e){switch(e){case`vfs-write-file`:return`vfs-write-file-result`;case`vfs-mkdir`:return`vfs-mkdir-result`;case`vfs-rm`:return`vfs-rm-result`;case`vfs-flush`:return`vfs-flush-result`;case`vfs-list-mount-points`:return`vfs-list-mount-points-result`}}function ZM(e){return e.type===`vfs-flush`||e.type===`vfs-list-mount-points`?``:e.path}function QM(e,t){return e instanceof k?{code:e.code,message:e.message,path:e.path??t}:{code:`EIO`,message:e instanceof Error?e.message:String(e),path:t}}function $M(){let e=globalThis.fetch;if(!e)return;let t=self?.location?self.location.origin:void 0;globalThis.fetch=aM(e.bind(globalThis),t,eN)}function eN(){let e=Le();if(!e)return null;try{return new URL(e).origin}catch{return null}}function tN(e){let t=new Map(Object.entries(e));Object.defineProperty(globalThis,"localStorage",{value:{get length(){return t.size},key(e){return Array.from(t.keys())[e]??null},getItem(e){return t.has(e)?t.get(e):null},setItem(e,n){t.set(e,n)},removeItem(e){t.delete(e)},clear(){t.clear()}},configurable:!0,writable:!0})}let nN=null,rN=null,iN=null,aN=null,oN=null,sN=null;const cN=uM(e=>dN(e));self.addEventListener(`message`,e=>{e.data?.type===`kernel-worker-init`&&cN.handle(e.data)});function lN(e){let t=Ya(e.pageBuildId,`6.203.0-mukh5pyk`);return()=>{t&&MM(`mixed-build-graph`,`page ${e.pageBuildId} worker 6.203.0-mukh5pyk`)}}function uN(e){$M(),Ie(e.localApiBaseUrl??null),Fe(e.bridgeToken??null),hi(e.syncFsBridgeEnabled??!1),t(e.pageLoadedAt??null),Be(e.extensionDelegateId??null),tN(e.localStorageSeed??{}),e.flagFloat&&Ia(e.flagFloat)}async function dN(e){Ka(e.instanceId);let t=lN(e),n=t=>{e.kernelPort.postMessage({type:`kernel-worker-boot-progress`,stage:t})};try{uN(e),AM().then(t).catch(()=>{}),await Ne(),n(`providers-registered`);let r=Qa(e.kernelPort),i=new ex(r),a=ex.createCallbacks(i),o=new $a(e.cdpPort);await o.connect(),n(`cdp-connected`);let s=new wa(o);nN=await tM({container:{},browser:s,bridge:i,callbacks:a,logger:console,localLickWsUrl:e.localLickWsUrl??null,syncFsChannelNonce:e.syncFsChannelNonce??null,appPageUrl:e.appPageUrl??null,onBootProgress:n});let{createSprinkleManagerProxyOverChannel:c}=await import(`./sprinkle-bridge-channel-Bur-XBNy.js`),l=c({instanceId:e.instanceId});globalThis.__slicc_sprinkleManager=l;let u=nN.sharedFs?.getWatcher();if(u){let e=null,t=new Set;for(let n of ki)u.watch(n,e=>e.endsWith(`.shtml`),n=>{for(let e of n){let n=e.path.split(`/`).pop()?.replace(/\.shtml$/,``);n&&t.add(n)}e||=setTimeout(()=>{e=null;for(let e of t)l.reload(e).catch(()=>{});t.clear()},300)})}let{createPanelRpcClient:d}=await import(`./panel-rpc-DW7W4w6_.js`).then(e=>e.a);sN=d({instanceId:e.instanceId}),globalThis.__slicc_panelRpc=sN,s.setTrayTargetProvider(Na(Oe));let f=await pN({host:nN,transport:r,browser:s,instanceId:e.instanceId});f&&(rN=f.stopTerminalHost,iN=f.stopVfsRpcHost,aN=f.stopSpeechAssetsResponder,oN=f.stopComputersHost),e.kernelPort.postMessage({type:`kernel-worker-ready`})}catch(t){fN(e.kernelPort,t)}}function fN(e,t){Ja(t);try{let n=t instanceof Error?t.message:String(t),r=t?.code;e.postMessage({type:`kernel-worker-boot-error`,message:n,...typeof r==`string`?{code:r}:{},...t instanceof Error&&t.stack?{stack:t.stack}:{}})}catch{}throw t}async function pN(e){let t=e.host.sharedFs;if(!t)return console.warn(`[kernel-worker] shared FS unavailable; terminal sessions will fail to open`),null;let n=()=>e.host.capabilityBroker.adapter===`node-rest`,r=_M({transport:e.transport,fs:t,browser:e.browser,processManager:e.host.processManager,sudoManager:e.host.orchestrator.getSudoManager(),webhook:{hasLocalNodeServer:n},crontask:{hasLocalNodeServer:n},logger:console}),i=WM({transport:e.transport,client:t,writableClient:t,getWatcher:()=>t.getWatcher(),logger:console}),a=await mN(t,e.instanceId),{startComputersHost:o}=await import(`./host-ClT6wiGS.js`),s=o({transport:e.transport,processManager:e.host.processManager});return{stopTerminalHost:r.stop,stopVfsRpcHost:i.stop,stopSpeechAssetsResponder:a,stopComputersHost:s.stop}}async function mN(e,t){let{installSpeechAssetsResponder:n}=await import(`./speech-assets-bridge-DequteUl.js`),{ensureSpeechAssetsStaged:r}=await import(`./ensure-speech-assets-Le3eCseO.js`),{createProxiedFetch:i}=await import(`./proxied-fetch-DXaTHROw.js`).then(e=>e.a),a=i();return n({instanceId:t,ensure:t=>r({fs:e,fetch:a},t)})}self.addEventListener(`message`,e=>{e.data?.type===`kernel-worker-shutdown`&&(rN?.(),rN=null,iN?.(),iN=null,aN?.(),aN=null,oN?.(),oN=null,sN?.dispose(),sN=null,nN?.dispose())});export{Bv as _,_S as a,A_ as b,Dx as c,Ox as d,jx as f,Tv as g,zy as h,gS as i,kx as l,Ab as m,rO as n,yS as o,kb as p,yT as r,vS as s,lk as t,Ax as u,rv as v,W_ as y};