sliccy 6.228.0 → 6.229.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 (154) hide show
  1. package/dist/ui/.vite/manifest.json +186 -186
  2. package/dist/ui/assets/{account-store-CJlqQGOM.js → account-store-BkmYrtWh.js} +1 -1
  3. package/dist/ui/assets/{account-store-BbAiM6Dd.js → account-store-DaI3pV_q.js} +1 -1
  4. package/dist/ui/assets/{adobe-DpgaDzlV.js → adobe-ByGGniSc.js} +1 -1
  5. package/dist/ui/assets/{adobe-CL6e5PM8.js → adobe-CK5jIUgh.js} +1 -1
  6. package/dist/ui/assets/{agent-panels-Dg8IjhZ1.js → agent-panels-4N8lgLlB.js} +1 -1
  7. package/dist/ui/assets/{almost-bash-shell-headless-D8LLI5oI.js → almost-bash-shell-headless-D4lkL1PE.js} +28 -28
  8. package/dist/ui/assets/{apply-layout-CVjn9uQs.js → apply-layout-C3Hxv2wc.js} +1 -1
  9. package/dist/ui/assets/{apps-BM3_AWym.js → apps-CSLecGgW.js} +1 -1
  10. package/dist/ui/assets/{azure-openai-sTlbb1zy.js → azure-openai-41jp9LC_.js} +1 -1
  11. package/dist/ui/assets/{azure-openai-_TeWvmYp.js → azure-openai-D_87yjUR.js} +1 -1
  12. package/dist/ui/assets/{backend-hostfs-Ddq67HX5.js → backend-hostfs-CCcqzP0i.js} +1 -1
  13. package/dist/ui/assets/{cdp-DBy-syww.js → cdp-BkKwqz1e.js} +1 -1
  14. package/dist/ui/assets/{cerebras-DlgSAgw8.js → cerebras-BDO-kvE5.js} +1 -1
  15. package/dist/ui/assets/{cerebras-TgQ_JFto.js → cerebras-U5nzA51c.js} +1 -1
  16. package/dist/ui/assets/{composer-speech-CCCXVnNW.js → composer-speech-srkAxUbm.js} +1 -1
  17. package/dist/ui/assets/{connect-surface-CgRqBWzx.js → connect-surface-DDMjzUVa.js} +1 -1
  18. package/dist/ui/assets/{directed-approval-4QZHpA9L.js → directed-approval-DoAqSdwX.js} +1 -1
  19. package/dist/ui/assets/{emscripten-vfs-hook-C29RG95-.js → emscripten-vfs-hook-Btn8bhm3.js} +1 -1
  20. package/dist/ui/assets/{ensure-speech-assets-B6y_vIib.js → ensure-speech-assets-CGY0yb53.js} +1 -1
  21. package/dist/ui/assets/frontmatter-Dcb90b9Y.js +4 -0
  22. package/dist/ui/assets/{frozen-archive-writer-DjhbW44P.js → frozen-archive-writer-Bx7lDD-y.js} +1 -1
  23. package/dist/ui/assets/{fs-4en91tgX.js → fs-CmMyV0R2.js} +2 -2
  24. package/dist/ui/assets/{fs-CBrboyN4.js → fs-HVEpoBdl.js} +1 -1
  25. package/dist/ui/assets/{gelatiere-unit-Dx7lFku5.js → gelatiere-unit-B45hU9Qp.js} +1 -1
  26. package/dist/ui/assets/{github-C7rWtG5q.js → github-CHlD9DnD.js} +1 -1
  27. package/dist/ui/assets/{github-CVrJuGTv.js → github-D5pRwutP.js} +2 -2
  28. package/dist/ui/assets/{github-auth-Cnl7vRtL.js → github-auth-CbquPMGV.js} +1 -1
  29. package/dist/ui/assets/{github-copilot-CPFDD-KF.js → github-copilot-CKYs3zD6.js} +1 -1
  30. package/dist/ui/assets/{github-copilot-DNZ1X0aj.js → github-copilot-ah3fINw0.js} +1 -1
  31. package/dist/ui/assets/{github-install-DxoAk2NN.js → github-install-BCW6YENq.js} +1 -1
  32. package/dist/ui/assets/{github-zip-lSWrmorq.js → github-zip-DBBIH7pC.js} +1 -1
  33. package/dist/ui/assets/{go-driver-DqgTG9N6.js → go-driver--cdxNvov.js} +1 -1
  34. package/dist/ui/assets/{hear-BD0N7pvN.js → hear-7ll-c37k.js} +1 -1
  35. package/dist/ui/assets/{help-QFipp5Jv.js → help-BufsEGnU.js} +1 -1
  36. package/dist/ui/assets/{installer-BAVz1PeP.js → installer-DSzRazpo.js} +1 -1
  37. package/dist/ui/assets/{ipk-mamba-_aNGbeaC.js → ipk-mamba-DT6fHMa9.js} +1 -1
  38. package/dist/ui/assets/{js-realm-worker-B4jC2xfg.js → js-realm-worker-_lsydYvZ.js} +2 -2
  39. package/dist/ui/assets/{jsh-executor-DBU7369K.js → jsh-executor--J3zbaof.js} +2 -2
  40. package/dist/ui/assets/{kernel-worker-rR9eljy5.js → kernel-worker-D8RoqWtJ.js} +68 -71
  41. package/dist/ui/assets/{lick-ws-bridge-CNuyTf4Z.js → lick-ws-bridge-DAHpKRdr.js} +1 -1
  42. package/dist/ui/assets/{lick-ws-bridge-CQXTJdvB.js → lick-ws-bridge-DnebioSV.js} +1 -1
  43. package/dist/ui/assets/{live-session-curation-DvXRkpYv.js → live-session-curation-BwBWvDgr.js} +1 -1
  44. package/dist/ui/assets/{live-session-snapshot-Ce33tCWW.js → live-session-snapshot-CWLRm7ap.js} +1 -1
  45. package/dist/ui/assets/loader-D4Fuki1u.js +1 -0
  46. package/dist/ui/assets/{local-llm-DOm_APF9.js → local-llm-Bkn90yGM.js} +1 -1
  47. package/dist/ui/assets/{local-llm-DLHOLWGH.js → local-llm-C2ZxUpDd.js} +1 -1
  48. package/dist/ui/assets/{main-COtcUCwj.js → main-CYO-QAwq.js} +3 -3
  49. package/dist/ui/assets/{main-cherry-DTT4gNWd.js → main-cherry-inPsecSV.js} +1 -1
  50. package/dist/ui/assets/{mcp-command-BNg4hbAi.js → mcp-command-g-QpCeTS.js} +12 -12
  51. package/dist/ui/assets/{memory-curation-seam-DiXF2kri.js → memory-curation-seam-D7fqn714.js} +1 -1
  52. package/dist/ui/assets/{memory-health-Cv3X9QVu.js → memory-health-Bqo_UDWF.js} +1 -1
  53. package/dist/ui/assets/{memory-write-execute-BQwfbMoU.js → memory-write-execute-r0RBk_wW.js} +1 -1
  54. package/dist/ui/assets/{merge-folded-cost-into-frozen-COVtB6nC.js → merge-folded-cost-into-frozen-jP6pVzid.js} +1 -1
  55. package/dist/ui/assets/{mount-BS3ealOD.js → mount-BNrwlTED.js} +1 -1
  56. package/dist/ui/assets/{mount-B8XJsq89.js → mount-DxWl9Cgn.js} +3 -3
  57. package/dist/ui/assets/{new-session-DjKlGv7D.js → new-session-PLmNdqPO.js} +2 -2
  58. package/dist/ui/assets/{oauth-bootstrap-7NBCIQ2c.js → oauth-bootstrap-CYR02wc0.js} +2 -2
  59. package/dist/ui/assets/{onboarding-orchestrator-BvIaV5O1.js → onboarding-orchestrator-Ch_OZygn.js} +1 -1
  60. package/dist/ui/assets/{openai-codex-B93ptcic.js → openai-codex-BFffUCUE.js} +1 -1
  61. package/dist/ui/assets/{openai-codex-p8_6ueYt.js → openai-codex-ChaMaxfV.js} +1 -1
  62. package/dist/ui/assets/{openrouter-DhViySZX.js → openrouter-BTbtL_IF.js} +1 -1
  63. package/dist/ui/assets/{openrouter-CxyTZ0Mi.js → openrouter-C-dZ1sGw.js} +1 -1
  64. package/dist/ui/assets/{openrouter-free-BfEaYcLg.js → openrouter-free-7huO0Drj.js} +1 -1
  65. package/dist/ui/assets/{openrouter-free-4FY7SwX2.js → openrouter-free-CK4afGP8.js} +1 -1
  66. package/dist/ui/assets/{openrouter-oauth-B6HYFR00.js → openrouter-oauth-CpPi4YSa.js} +1 -1
  67. package/dist/ui/assets/{openrouter-oauth-DL3sz3K0.js → openrouter-oauth-DkEePt5s.js} +1 -1
  68. package/dist/ui/assets/{opfs-mount-tfJNcKqu.js → opfs-mount-B2b-t0EF.js} +1 -1
  69. package/dist/ui/assets/{panel-rpc-handlers-Bt64P_Tu.js → panel-rpc-handlers-BfUW4als.js} +2 -2
  70. package/dist/ui/assets/{panelize-shell-3qMUAyxA.js → panelize-shell-C1kr0BTJ.js} +1 -1
  71. package/dist/ui/assets/{pi-edit-execution-BWAD_gyT.js → pi-edit-execution-Cb2xBqsc.js} +1 -1
  72. package/dist/ui/assets/{process-worker-COJhrHY2.js → process-worker-C_p81ZZU.js} +1 -1
  73. package/dist/ui/assets/{provider-D3UnzTxc.js → provider-CG1KqExL.js} +2 -2
  74. package/dist/ui/assets/{provider-DNuA-ndg.js → provider-Dq9zABZQ.js} +1 -1
  75. package/dist/ui/assets/{provider-settings-BsGXUztP.js → provider-settings-CkyKYIkj.js} +1 -1
  76. package/dist/ui/assets/provider-store-access-Dn58QaFC.js +1 -0
  77. package/dist/ui/assets/provider-store-access-yQUMGoIb.js +1 -0
  78. package/dist/ui/assets/{providers-BL2cROkA.js → providers-BbxGRCK7.js} +2 -2
  79. package/dist/ui/assets/{providers-MSwCFQzz.js → providers-DOjMgMU6.js} +1 -1
  80. package/dist/ui/assets/{quick-llm-DZI_z5wA.js → quick-llm-BMJBs7-S.js} +1 -1
  81. package/dist/ui/assets/{realm-inprocess-3GJv50Pi.js → realm-inprocess-DMdQOjDm.js} +2 -2
  82. package/dist/ui/assets/{realm-unhandled-rejections-OgJpBGel.js → realm-unhandled-rejections-Be1sIIgh.js} +1 -1
  83. package/dist/ui/assets/{realm-unhandled-rejections-T28LRIPi.js → realm-unhandled-rejections-D6_73CJl.js} +1 -1
  84. package/dist/ui/assets/{recovery-screen-C1TwLsVQ.js → recovery-screen-CPI_iXWK.js} +1 -1
  85. package/dist/ui/assets/{remote-terminal-view-B5_K_GMf.js → remote-terminal-view-DXtNRrbr.js} +2 -2
  86. package/dist/ui/assets/{restore-Ch8AaGei.js → restore-CAHvRjUh.js} +1 -1
  87. package/dist/ui/assets/{run-8y7BhTkZ.js → run-9c55NzaM.js} +1 -1
  88. package/dist/ui/assets/{run-0lImN2RO.js → run-AtPs8A5o.js} +1 -1
  89. package/dist/ui/assets/{run-DUancT6C.js → run-B_EzD3y6.js} +2 -2
  90. package/dist/ui/assets/{run-CLChc62h.js → run-Blcmnnqa.js} +1 -1
  91. package/dist/ui/assets/{run-BnmyGVMQ.js → run-Cz1-std9.js} +2 -2
  92. package/dist/ui/assets/{run-CULRr_2G.js → run-DFVjtIie.js} +1 -1
  93. package/dist/ui/assets/{session-command-memory-Dh-0tqIt.js → session-command-memory--pxt-rWi.js} +2 -2
  94. package/dist/ui/assets/{session-jsonl-CY8afwT8.js → session-jsonl-Bl-_Ke5m.js} +1 -1
  95. package/dist/ui/assets/{session-jsonl-Br0rrgRz.js → session-jsonl-DIe9RcuQ.js} +1 -1
  96. package/dist/ui/assets/{session-search-index-VuaeS3N5.js → session-search-index-DXYard0w.js} +1 -1
  97. package/dist/ui/assets/{setup-feature-flags-remote-DJwv_l7e.js → setup-feature-flags-remote-DpryLi4X.js} +1 -1
  98. package/dist/ui/assets/{setup-model-catalog-DoyyVODf.js → setup-model-catalog-C0SmDaKF.js} +1 -1
  99. package/dist/ui/assets/{signed-fetch-CbBL0Ve2.js → signed-fetch-BP6r0_WD.js} +1 -1
  100. package/dist/ui/assets/{silent-renew-backoff-D6qOCokC.js → silent-renew-backoff-BINyAdDo.js} +1 -1
  101. package/dist/ui/assets/slicc-version-jWg-8NKA.js +1 -0
  102. package/dist/ui/assets/{snapshot-MZ76nERB.js → snapshot-C-tqP5Vd.js} +1 -1
  103. package/dist/ui/assets/{snapshot-features-elqYWg5L.js → snapshot-features-My_1CrXJ.js} +1 -1
  104. package/dist/ui/assets/{soundscape-CCwYSJOw.js → soundscape-Dr7onmG-.js} +1 -1
  105. package/dist/ui/assets/{speak-Bcmf_D6c.js → speak-1Zw3IWIU.js} +1 -1
  106. package/dist/ui/assets/{sprinkle-manager-BhiOK4Nr.js → sprinkle-manager-BpCI8aCf.js} +1 -1
  107. package/dist/ui/assets/{sprinkle-renderer-BUXt1pFe.js → sprinkle-renderer-BFoYTPNh.js} +1 -1
  108. package/dist/ui/assets/{state-DUp9q7mf.js → state-BZmhbSgZ.js} +1 -1
  109. package/dist/ui/assets/{store-CNmOj-Kr.js → store-D_3UY4Hq.js} +1 -1
  110. package/dist/ui/assets/{store-Cqw0SsWr.js → store-ioAs8Ofc.js} +1 -1
  111. package/dist/ui/assets/{sudo-FzdEz4A3.js → sudo-BUiJRaDN.js} +1 -1
  112. package/dist/ui/assets/{supervisor-BhxnYIi2.js → supervisor-CV95FP1l.js} +1 -1
  113. package/dist/ui/assets/{sync-dialog-C-9EE5BW.js → sync-dialog-DbP2JDY5.js} +1 -1
  114. package/dist/ui/assets/{transformers-env-DatNaWCf.js → transformers-env-CeRpgv4u.js} +1 -1
  115. package/dist/ui/assets/{tray-leader-B_yHQHKy.js → tray-leader-B84Al9zk.js} +1 -1
  116. package/dist/ui/assets/{tray-leave-runtime-D9Z2550j.js → tray-leave-runtime-Ck9jPDeB.js} +1 -1
  117. package/dist/ui/assets/{tray-sidecar-CHNPk8jr.js → tray-sidecar-CrCOCbAy.js} +1 -1
  118. package/dist/ui/assets/{upgrade-detection-CWsMP4Ab.js → upgrade-detection-Bi7vIh9b.js} +1 -1
  119. package/dist/ui/assets/{upskill-lick-skip-BmMrqdz8.js → upskill-lick-skip-DdtxmzSe.js} +1 -1
  120. package/dist/ui/assets/{voice-reply-gMdiIlnP.js → voice-reply-Cn39TVu-.js} +1 -1
  121. package/dist/ui/assets/wasi-runtime-BMVXeT_F.js +3 -0
  122. package/dist/ui/assets/{wc-attach-DiA5RJlc.js → wc-attach-IDr8eMKS.js} +2 -2
  123. package/dist/ui/assets/{wc-browser-gxNq2H-G.js → wc-browser-DyMZIHWZ.js} +1 -1
  124. package/dist/ui/assets/{wc-computers-DS8vl-6R.js → wc-computers-lVdM5Q0C.js} +1 -1
  125. package/dist/ui/assets/{wc-detached-CDPnqW3o.js → wc-detached-r0tNzoI0.js} +1 -1
  126. package/dist/ui/assets/{wc-extension-OGf0wDuM.js → wc-extension-C3cTiHOK.js} +2 -2
  127. package/dist/ui/assets/{wc-follower-8cKwlSwX.js → wc-follower-C3Ssv3pH.js} +3 -3
  128. package/dist/ui/assets/{wc-follower-oauth-IXqmbRyb.js → wc-follower-oauth-DjHjHKJ7.js} +1 -1
  129. package/dist/ui/assets/{wc-gelatiere-BidJiX6S.js → wc-gelatiere-Dh5Mn9bA.js} +1 -1
  130. package/dist/ui/assets/{wc-live-B5Wnvjbm.js → wc-live-D0928vE7.js} +5 -5
  131. package/dist/ui/assets/{wc-nav-D0JviJcd.js → wc-nav-B_z2mlYb.js} +2 -2
  132. package/dist/ui/assets/{wc-onboarding-GH_5uoEu.js → wc-onboarding-rgJJv4BS.js} +2 -2
  133. package/dist/ui/assets/{wc-permissions-B4zy8OTa.js → wc-permissions-9m7YrmL2.js} +2 -2
  134. package/dist/ui/assets/{wc-placeholder-BdU06tFZ.js → wc-placeholder-Cp-j-cTq.js} +3 -3
  135. package/dist/ui/assets/{wc-secret-request-DjLWqT58.js → wc-secret-request-CJqEUR2V.js} +1 -1
  136. package/dist/ui/assets/{wc-settings-lk8i1QWU.js → wc-settings-4EfpkMeU.js} +3 -3
  137. package/dist/ui/assets/{wc-shell-d73WESuj.js → wc-shell-DMHh-A41.js} +116 -116
  138. package/dist/ui/assets/{wc-shortcut-config-rlkkX70U.js → wc-shortcut-config-HMWkdwIV.js} +1 -1
  139. package/dist/ui/assets/{wc-sprinkles-Qug7p-Vl.js → wc-sprinkles-9kl4n4Ve.js} +2 -2
  140. package/dist/ui/assets/{wc-transcript-export-CtZF2tJO.js → wc-transcript-export-D2mq6DII.js} +2 -2
  141. package/dist/ui/assets/{wc-tray-BQcr4qqX.js → wc-tray-BuuLiPV3.js} +4 -4
  142. package/dist/ui/assets/welcome-detection-CO83xvwE.js +1 -0
  143. package/dist/ui/assets/{whisper-session-CPX4NbVj.js → whisper-session-D--IlXLT.js} +2 -2
  144. package/dist/ui/assets/{xai-grok-RuM9h26H.js → xai-grok-DDHu18Wf.js} +1 -1
  145. package/dist/ui/assets/{xai-grok-Ba1xmo7U.js → xai-grok-DMet3e54.js} +1 -1
  146. package/dist/ui/index.html +3 -3
  147. package/dist/ui/packages/webapp/index.html +3 -3
  148. package/package.json +1 -1
  149. package/dist/ui/assets/loader-Dw-TPPKt.js +0 -4
  150. package/dist/ui/assets/provider-store-access-BFByQ9FV.js +0 -1
  151. package/dist/ui/assets/provider-store-access-DFdiLrEE.js +0 -1
  152. package/dist/ui/assets/slicc-version-O_wHkpWu.js +0 -1
  153. package/dist/ui/assets/wasi-runtime-CelptKxl.js +0 -3
  154. package/dist/ui/assets/welcome-detection-DZ8pzpDH.js +0 -1
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{_ as t,a as n,b as r,d as i,f as a,g as o,h as s,i as c,l,m as u,o as d,p as f,r as p,t as m,u as h,v as ee,y as g}from"./almost-bash-shell-headless-D8LLI5oI.js";import{t as _}from"./logger-LESFN7Hj.js";import{r as te,t as ne}from"./base64-BPBW1Gzr.js";import{i as re,r as ie}from"./handoff-link-B3It6xQY.js";import{a as ae,b as oe,f as se,g as ce,h as le,i as ue,m as de,p as fe,v as pe,x as me,y as he}from"./account-store-BbAiM6Dd.js";import{n as ge}from"./proxied-fetch-CoZ8jHud.js";import{t as _e}from"./slugify-BYJ6QVAt.js";import{i as ve,n as ye,t as be}from"./archive-redaction-ByV7X5fs.js";import{i as xe,r as Se}from"./host-command-Dn-Z4AbC.js";import{o as Ce}from"./snapshot-MZ76nERB.js";import{n as we,r as Te}from"./panel-rpc-DW7W4w6_.js";import{i as Ee,l as De,o as Oe,r as ke}from"./feature-flags-QlgHaQc1.js";import{a as Ae,t as je}from"./providers-MSwCFQzz.js";import{c as Me,d as Ne,o as Pe,s as Fe,t as Ie,u as Le}from"./api-endpoint-D8lUKmPu.js";import{$ as Re,A as ze,At as v,B as Be,C as Ve,Ct as He,D as Ue,Dt as We,E as Ge,Et as y,F as Ke,Ft as qe,H as Je,I as Ye,It as Xe,J as Ze,K as Qe,L as $e,M as et,Mt as tt,N as nt,Nt as b,O as rt,Ot as x,P as it,Pt as at,Q as ot,R as st,St as ct,T as lt,Tt as S,U as ut,V as dt,W as ft,X as pt,Y as mt,Z as ht,_ as gt,_t,a as vt,at as yt,b as bt,bt as xt,c as St,ct as C,d as Ct,dt as wt,et as Tt,f as Et,ft as Dt,g as Ot,gt as kt,h as At,ht as jt,i as Mt,it as w,j as Nt,jt as Pt,k as Ft,kt as It,l as Lt,lt as T,m as Rt,mt as E,n as zt,nt as Bt,o as Vt,ot as D,p as Ht,pt as Ut,q as Wt,r as Gt,rt as Kt,s as qt,st as Jt,t as Yt,tt as Xt,u as Zt,ut as Qt,v as $t,vt as en,w as tn,wt as nn,x as rn,xt as an,y as on,yt as sn,z as cn}from"./build-Dnkjpm_v.js";import{a as ln,c as un,h as dn,l as fn,p as pn,s as mn,u as hn,v as gn}from"./models-CET5SEuw.js";import{o as _n,t as vn}from"./compat-CGK4SwF8.js";import{r as yn,t as bn}from"./core-IQSnHO6h.js";import{i as xn,n as Sn,r as Cn,t as wn}from"./context-compaction-BwnPiNO2.js";import{n as Tn}from"./float-topology-DIH6ujZe.js";import{t as En}from"./secrets-bridge-client-EgBSROu5.js";import{n as Dn,t as On}from"./image-markers-CwM1dvoI.js";import{i as kn}from"./tool-ui-DRnUkp2g.js";import{c as An,t as jn}from"./claude-model-version-ceOteQ2f.js";import{a as Mn,n as Nn,t as Pn}from"./path-utils-DNJG-zQf.js";import{t as Fn}from"./merge-file-core-VJlzucJY.js";import{i as In,n as Ln,r as Rn,t as zn}from"./workspace-mode-D0kUKBVS.js";import{C as Bn,D as Vn,E as O,O as Hn,S as Un,T as Wn,_ as Gn,a as Kn,c as qn,d as Jn,f as Yn,g as Xn,h as Zn,l as Qn,m as $n,n as er,o as tr,p as nr,r as rr,s as ir,t as ar,u as or,v as sr,w as cr,y as lr}from"./record-COQlaFL1.js";import{a as ur,c as dr,d as fr,i as pr,l as mr,n as hr,o as gr,r as _r,s as vr,u as yr}from"./descriptor-CKLcFFX3.js";import{n as br,t as xr}from"./thinking-level-5x0UAu9N.js";import{t as k}from"./types-D8gIX-W-.js";import{i as Sr,n as Cr}from"./mount-index-CQfmUPuZ.js";import{a as wr,i as Tr,n as Er,r as Dr,s as Or,t as kr}from"./signed-fetch-CbBL0Ve2.js";import{n as Ar}from"./mount-table-store-DrF_Ifaz.js";import{t as jr}from"./remote-cache-UwMD8EkX.js";import"./mount-BS3ealOD.js";import{i as Mr,n as Nr,r as Pr}from"./fs-CBrboyN4.js";import{i as Fr,n as Ir,t as Lr}from"./key-B2Bki3fU.js";import{n as Rr,r as zr,t as Br}from"./tray-leader-status-CpkFr6n7.js";import"./tray-runtime-config-ConrTcOf.js";import{r as Vr}from"./slicc-version-O_wHkpWu.js";import{r as Hr}from"./virtual-device-paths-CS5o4QVz.js";import{a as Ur}from"./gelatiere-constants-BYJlhm8R.js";import{a as Wr,i as Gr,r as Kr}from"./cost-command-C_1fldSP.js";import{_ as qr,a as Jr,c as Yr,d as Xr,f as Zr,g as Qr,h as $r,l as ei,m as ti,n as ni,p as ri,r as ii,s as ai,t as oi,u as si,v as ci}from"./sudoers-BdBYQPUn.js";import{n as li,r as ui,t as di}from"./sudo-fs-mI-V4QkM.js";import{t as fi}from"./llm-session-id-BZyXP_j2.js";import{t as pi}from"./src-CUSndb9K.js";import{a as mi,i as hi,n as gi,o as _i,s as vi}from"./memory-budget-CFfevxz_.js";import{i as yi}from"./browser-DuyhpHbR.js";import{c as bi,i as xi,t as Si}from"./reason-l_1I9RdR.js";import{t as Ci}from"./jsh-discovery-CnvNKojr.js";import{t as wi}from"./process-manager-BkhAohXT.js";import{i as Ti,o as Ei,r as Di,t as Oi}from"./jsh-executor-DBU7369K.js";import{C as ki,_ as Ai,b as ji,f as Mi,h as Ni,l as Pi,n as Fi,r as Ii,x as Li}from"./sync-exec-dispatch-BvwkIQoA.js";import{n as Ri}from"./just-bash-compat-B-SPHuh_.js";import{t as zi}from"./lick-target-env-8JxfVcIV.js";const Bi=[`/workspace`,`/shared`,`/scoops`,`/home`];var Vi=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 Hi(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 Ui=_(`cdp`);function Wi(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 Gi=class{ws=null;nextId=1;_superseded=!1;pending=new Vi;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,Ui.info(`Connected`,{url:t}),this.notifyState(`connected`),e()},this.ws.onerror=e=>{clearTimeout(a),this._state===`connecting`&&(Ui.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(),Ui.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),Ui.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 Hi(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;Ui.debug(`Response`,{id:e.id,hasError:!!e.error}),e.error?(Ui.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;Ui.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,Ui.warn(`CDP slot superseded by another SLICC tab/window on this instance`,{code:e})):e===4002?Ui.warn(`CDP proxy reset its upstream Chrome connection — sessions dropped`,{code:e,pendingCommands:this.pending.size}):Ui.error(`Connection closed unexpectedly`,{pendingCommands:this.pending.size}),this.cleanup(Wi(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 Ki(e){for(let t of e)if(t.rel.includes(`ai-catalog`))return{kind:`ai-catalog`,url:t.href};return null}function qi(e){return[e.origin??``,e.kind??``,e.url??``].join(`\0`)}const Ji=[{kind:`ai-catalog`,path:`/.well-known/ai-catalog.json`},{kind:`llms-txt`,path:`/llms.txt`}];async function Yi(e,t,n={}){let r=n.timeoutMs??3e3,i;try{i=new URL(e).origin}catch{return[]}return(await Promise.all(Ji.map(e=>Xi(i,e,t,r)))).filter(e=>e!==null)}async function Xi(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||!Zi(e.headers.get(`content-type`),t.kind)?null:{kind:t.kind,url:i}}catch{return null}finally{clearTimeout(o)}}function Zi(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 Qi=3e4;var $i=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`}},ea=class extends Error{constructor(){super(`CDP reconnect is backing off`),this.name=`CdpReconnectBackoffError`}};function ta(e,t=Math.random){let n=Math.min(Qi,250*2**Math.min(Math.max(0,e),16)),r=Math.round(n*.2*t());return Math.min(Qi,n+r)}function na(e=typeof window<`u`?window.location:null){return e?.host?`${e.protocol===`https:`?`wss:`:`ws:`}//${e.host}/cdp`:`ws://localhost:5710/cdp`}var ra=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 $i(this.bridgeRejection);this.lastConnectOptions=t?{...t}:{};try{await e.connect({url:t?.url??na(),timeout:t?.timeout,...t?.protocols===void 0?{}:{protocols:t.protocols}})}catch(e){throw await this.noteReconnectFailure(t),this.bridgeRejection?new $i(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??na(),...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 $i(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 $i(this.bridgeRejection);if(Date.now()<this.reconnectNotBefore)throw new ea}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 $i().message,this.notifyBridgeRejected();return}let t=ta(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{}}}},ia=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 aa(e,t){if(e?.aborted)throw new ia(t)}function oa(e,t){return e?{signal:e,error:()=>new ia(t)}:void 0}function sa(e,t,n){return new Promise((r,i)=>{if(t?.aborted){i(new ia(n));return}let a=()=>{clearTimeout(o),i(new ia(n))},o=setTimeout(()=>{t?.removeEventListener(`abort`,a),r()},e);t?.addEventListener(`abort`,a,{once:!0})})}function ca(e,t,n){return t?t.aborted?Promise.reject(new ia(n)):new Promise((r,i)=>{let a=()=>i(new ia(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 la=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 ua=_(`har-recorder`);var da=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)}`;aa(r,`about to enable Network on tab ${e}`),await this.client.send(`Network.enable`,{},t),aa(r,`about to enable Page on tab ${e}`),await this.client.send(`Page.enable`,{},t),aa(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}`),ua.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=>{ua.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=>{ua.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 fa(e,t)}async saveSnapshotWithEntries(e,t,n,r){if(n.length===0)return ua.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 ua.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)),ua.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 ua.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 fa(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){ua.error(`Filter function error on entry, keeping it`,{error:e instanceof Error?e.message:String(e)}),r.push(t)}return r}catch(t){return ua.error(`Failed to compile filter, returning unfiltered`,{error:t instanceof Error?t.message:String(t)}),e}}var pa=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 ma=`(function() {
1
+ import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{_ as t,a as n,b as r,d as i,f as a,g as o,h as s,i as c,l,m as u,o as d,p as f,r as p,t as m,u as h,v as ee,y as g}from"./almost-bash-shell-headless-D4lkL1PE.js";import{t as _}from"./logger-LESFN7Hj.js";import{r as te,t as ne}from"./base64-BPBW1Gzr.js";import{i as re,r as ie}from"./handoff-link-B3It6xQY.js";import{a as ae,b as oe,f as se,g as ce,h as le,i as ue,m as de,p as fe,v as pe,x as me,y as he}from"./account-store-DaI3pV_q.js";import{n as ge}from"./proxied-fetch-CoZ8jHud.js";import{t as _e}from"./slugify-BYJ6QVAt.js";import{i as ve,n as ye,t as be}from"./archive-redaction-ByV7X5fs.js";import{i as xe,r as Se}from"./host-command-Dn-Z4AbC.js";import{o as Ce}from"./snapshot-C-tqP5Vd.js";import{n as we,r as Te}from"./panel-rpc-DW7W4w6_.js";import{i as Ee,l as De,o as Oe,r as ke}from"./feature-flags-QlgHaQc1.js";import{a as Ae,t as je}from"./providers-DOjMgMU6.js";import{c as Me,d as Ne,o as Pe,s as Fe,t as Ie,u as Le}from"./api-endpoint-D8lUKmPu.js";import{$ as Re,A as ze,At as v,B as Be,C as Ve,Ct as He,D as Ue,Dt as We,E as Ge,Et as y,F as Ke,Ft as qe,H as Je,I as Ye,It as Xe,J as Ze,K as Qe,L as $e,M as et,Mt as tt,N as nt,Nt as b,O as rt,Ot as x,P as it,Pt as at,Q as ot,R as st,St as ct,T as lt,Tt as S,U as ut,V as dt,W as ft,X as pt,Y as mt,Z as ht,_ as gt,_t,a as vt,at as yt,b as bt,bt as xt,c as St,ct as C,d as Ct,dt as wt,et as Tt,f as Et,ft as Dt,g as Ot,gt as kt,h as At,ht as jt,i as Mt,it as w,j as Nt,jt as Pt,k as Ft,kt as It,l as Lt,lt as T,m as Rt,mt as E,n as zt,nt as Bt,o as Vt,ot as D,p as Ht,pt as Ut,q as Wt,r as Gt,rt as Kt,s as qt,st as Jt,t as Yt,tt as Xt,u as Zt,ut as Qt,v as $t,vt as en,w as tn,wt as nn,x as rn,xt as an,y as on,yt as sn,z as cn}from"./build-Dnkjpm_v.js";import{a as ln,c as un,h as dn,l as fn,p as pn,s as mn,u as hn,v as gn}from"./models-CET5SEuw.js";import{o as _n,t as vn}from"./compat-CGK4SwF8.js";import{r as yn,t as bn}from"./core-IQSnHO6h.js";import{i as xn,n as Sn,r as Cn,t as wn}from"./context-compaction-BwnPiNO2.js";import{n as Tn}from"./float-topology-DIH6ujZe.js";import{t as En}from"./secrets-bridge-client-EgBSROu5.js";import{n as Dn,t as On}from"./image-markers-CwM1dvoI.js";import{i as kn}from"./tool-ui-DRnUkp2g.js";import{c as An,t as jn}from"./claude-model-version-ceOteQ2f.js";import{a as Mn,n as Nn,t as Pn}from"./path-utils-DNJG-zQf.js";import{t as Fn}from"./merge-file-core-VJlzucJY.js";import{i as In,n as Ln,r as Rn,t as zn}from"./workspace-mode-D0kUKBVS.js";import{C as Bn,D as Vn,E as O,O as Hn,S as Un,T as Wn,_ as Gn,a as Kn,c as qn,d as Jn,f as Yn,g as Xn,h as Zn,l as Qn,m as $n,n as er,o as tr,p as nr,r as rr,s as ir,t as ar,u as or,v as sr,w as cr,y as lr}from"./record-COQlaFL1.js";import{a as ur,c as dr,d as fr,i as pr,l as mr,n as hr,o as gr,r as _r,s as vr,u as yr}from"./descriptor-CKLcFFX3.js";import{n as br,t as xr}from"./thinking-level-5x0UAu9N.js";import{t as k}from"./types-D8gIX-W-.js";import{i as Sr,n as Cr}from"./mount-index-CQfmUPuZ.js";import{a as wr,i as Tr,n as Er,r as Dr,s as Or,t as kr}from"./signed-fetch-BP6r0_WD.js";import{n as Ar}from"./mount-table-store-DrF_Ifaz.js";import{t as jr}from"./remote-cache-UwMD8EkX.js";import"./mount-BNrwlTED.js";import{i as Mr,n as Nr,r as Pr}from"./fs-HVEpoBdl.js";import{i as Fr,n as Ir,t as Lr}from"./key-B2Bki3fU.js";import{n as Rr,r as zr,t as Br}from"./tray-leader-status-CpkFr6n7.js";import"./tray-runtime-config-ConrTcOf.js";import{r as Vr}from"./slicc-version-jWg-8NKA.js";import{r as Hr}from"./virtual-device-paths-CS5o4QVz.js";import{a as Ur}from"./gelatiere-constants-BYJlhm8R.js";import{a as Wr,i as Gr,r as Kr}from"./cost-command-C_1fldSP.js";import{_ as qr,a as Jr,c as Yr,d as Xr,f as Zr,g as Qr,h as $r,l as ei,m as ti,n as ni,p as ri,r as ii,s as ai,t as oi,u as si,v as ci}from"./sudoers-BdBYQPUn.js";import{n as li,r as ui,t as di}from"./sudo-fs-mI-V4QkM.js";import{t as fi}from"./llm-session-id-BZyXP_j2.js";import{t as pi}from"./src-CUSndb9K.js";import{a as mi,i as hi,n as gi,o as _i,s as vi}from"./memory-budget-CFfevxz_.js";import{i as yi,n as bi,r as xi,t as Si}from"./frontmatter-Dcb90b9Y.js";import{i as Ci}from"./browser-DuyhpHbR.js";import{c as wi,i as Ti,t as Ei}from"./reason-l_1I9RdR.js";import{t as Di}from"./jsh-discovery-CnvNKojr.js";import{t as Oi}from"./process-manager-BkhAohXT.js";import{i as ki,o as Ai,r as ji,t as Mi}from"./jsh-executor--J3zbaof.js";import{C as Ni,_ as Pi,b as Fi,f as Ii,h as Li,l as Ri,n as zi,r as Bi,x as Vi}from"./sync-exec-dispatch-BvwkIQoA.js";import{n as Hi}from"./just-bash-compat-B-SPHuh_.js";import{t as Ui}from"./lick-target-env-8JxfVcIV.js";const Wi=[`/workspace`,`/shared`,`/scoops`,`/home`];var Gi=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 Ki(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 qi=_(`cdp`);function Ji(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 Yi=class{ws=null;nextId=1;_superseded=!1;pending=new Gi;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,qi.info(`Connected`,{url:t}),this.notifyState(`connected`),e()},this.ws.onerror=e=>{clearTimeout(a),this._state===`connecting`&&(qi.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(),qi.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),qi.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 Ki(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;qi.debug(`Response`,{id:e.id,hasError:!!e.error}),e.error?(qi.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;qi.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,qi.warn(`CDP slot superseded by another SLICC tab/window on this instance`,{code:e})):e===4002?qi.warn(`CDP proxy reset its upstream Chrome connection — sessions dropped`,{code:e,pendingCommands:this.pending.size}):qi.error(`Connection closed unexpectedly`,{pendingCommands:this.pending.size}),this.cleanup(Ji(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 Xi(e){for(let t of e)if(t.rel.includes(`ai-catalog`))return{kind:`ai-catalog`,url:t.href};return null}function Zi(e){return[e.origin??``,e.kind??``,e.url??``].join(`\0`)}const Qi=[{kind:`ai-catalog`,path:`/.well-known/ai-catalog.json`},{kind:`llms-txt`,path:`/llms.txt`}];async function $i(e,t,n={}){let r=n.timeoutMs??3e3,i;try{i=new URL(e).origin}catch{return[]}return(await Promise.all(Qi.map(e=>ea(i,e,t,r)))).filter(e=>e!==null)}async function ea(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||!ta(e.headers.get(`content-type`),t.kind)?null:{kind:t.kind,url:i}}catch{return null}finally{clearTimeout(o)}}function ta(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 na=3e4;var ra=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`}},ia=class extends Error{constructor(){super(`CDP reconnect is backing off`),this.name=`CdpReconnectBackoffError`}};function aa(e,t=Math.random){let n=Math.min(na,250*2**Math.min(Math.max(0,e),16)),r=Math.round(n*.2*t());return Math.min(na,n+r)}function oa(e=typeof window<`u`?window.location:null){return e?.host?`${e.protocol===`https:`?`wss:`:`ws:`}//${e.host}/cdp`:`ws://localhost:5710/cdp`}var sa=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 ra(this.bridgeRejection);this.lastConnectOptions=t?{...t}:{};try{await e.connect({url:t?.url??oa(),timeout:t?.timeout,...t?.protocols===void 0?{}:{protocols:t.protocols}})}catch(e){throw await this.noteReconnectFailure(t),this.bridgeRejection?new ra(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??oa(),...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 ra(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 ra(this.bridgeRejection);if(Date.now()<this.reconnectNotBefore)throw new ia}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 ra().message,this.notifyBridgeRejected();return}let t=aa(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{}}}},ca=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 la(e,t){if(e?.aborted)throw new ca(t)}function ua(e,t){return e?{signal:e,error:()=>new ca(t)}:void 0}function da(e,t,n){return new Promise((r,i)=>{if(t?.aborted){i(new ca(n));return}let a=()=>{clearTimeout(o),i(new ca(n))},o=setTimeout(()=>{t?.removeEventListener(`abort`,a),r()},e);t?.addEventListener(`abort`,a,{once:!0})})}function fa(e,t,n){return t?t.aborted?Promise.reject(new ca(n)):new Promise((r,i)=>{let a=()=>i(new ca(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 pa=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 ma=_(`har-recorder`);var ha=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)}`;la(r,`about to enable Network on tab ${e}`),await this.client.send(`Network.enable`,{},t),la(r,`about to enable Page on tab ${e}`),await this.client.send(`Page.enable`,{},t),la(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}`),ma.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=>{ma.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=>{ma.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 ga(e,t)}async saveSnapshotWithEntries(e,t,n,r){if(n.length===0)return ma.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 ma.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)),ma.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 ma.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 ga(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){ma.error(`Filter function error on entry, keeping it`,{error:e instanceof Error?e.message:String(e)}),r.push(t)}return r}catch(t){return ma.error(`Failed to compile filter, returning unfiltered`,{error:t instanceof Error?t.message:String(t)}),e}}var _a=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 va=`(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{_ as t,a as n,b as r,d
868
868
  } catch(e) {
869
869
  return { role: 'RootWebArea', name: '', description: 'Error: ' + (e.message || String(e)) };
870
870
  }
871
- })()`,ha=_(`tab-handle`);function ga(e){try{let t=atob(e.slice(0,48));return t.startsWith(`‰PNG\r
871
+ })()`,ya=_(`tab-handle`);function ba(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 _a(e,t,n,r,i){return Hi(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 va=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 aa(this.signal,`about to send ${e}`),this.transport.send(e,t,this.sessionId)}async navigate(e){await this.send(`Page.enable`);let t=_a(this.transport,`Page.loadEventFired`,this.sessionId,3e4,oa(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){ha.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=ga(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){ha.warn(`maxWidth re-capture failed`,e);break}let r=ga(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`),xa(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(!Sa(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=ba(o);if(s===null)return o.result?.value;if(this.host.frameContexts(this.sessionId,r).delete(e),!Sa(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=ba(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(aa(this.signal,a),await this.evaluate(`!!document.querySelector(${JSON.stringify(e)})`))return;await sa(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 ya(e.frameTree,t),t}async getAccessibilityTree(){let e=await this.evaluate(ma,{awaitPromise:!1,returnByValue:!0});if(!e||typeof e!=`object`)return{role:`RootWebArea`,name:``};let t=Ea(e);try{let e=(await this.send(`Accessibility.getFullAXTree`)).nodes;Array.isArray(e)&&Ta(t,Ca(e))}catch{}return t}async getAccessibilityTreeForFrame(e){if(!e)return this.getAccessibilityTree();let t=await this.evaluateInFrame(e,ma,{awaitPromise:!1,returnByValue:!0});return!t||typeof t!=`object`?{role:`RootWebArea`,name:``}:Ea(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 xa(e,t,n,r,i){return Ki(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 la(this.signal,`about to send ${e}`),this.transport.send(e,t,this.sessionId)}async navigate(e){await this.send(`Page.enable`);let t=xa(this.transport,`Page.loadEventFired`,this.sessionId,3e4,ua(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){ya.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=ba(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){ya.warn(`maxWidth re-capture failed`,e);break}let r=ba(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`),Ta(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(!Ea(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=wa(o);if(s===null)return o.result?.value;if(this.host.frameContexts(this.sessionId,r).delete(e),!Ea(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=wa(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(la(this.signal,a),await this.evaluate(`!!document.querySelector(${JSON.stringify(e)})`))return;await da(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(va,{awaitPromise:!1,returnByValue:!0});if(!e||typeof e!=`object`)return{role:`RootWebArea`,name:``};let t=Aa(e);try{let e=(await this.send(`Accessibility.getFullAXTree`)).nodes;Array.isArray(e)&&ka(t,Da(e))}catch{}return t}async getAccessibilityTreeForFrame(e){if(!e)return this.getAccessibilityTree();let t=await this.evaluateInFrame(e,va,{awaitPromise:!1,returnByValue:!0});return!t||typeof t!=`object`?{role:`RootWebArea`,name:``}:Aa(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 ya(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)ya(n,t)}function ba(e){let t=e.exceptionDetails;return t?t.exception?.description??t.text:null}function xa(e,t){let n=ba(e);if(n!==null)throw Error(`${t}: ${n}`);return e.result?.value}function Sa(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 Ca(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=wa(a,o);t.has(s)||t.set(s,e)}return t}function wa(e,t){return`${e.toLowerCase()}|${t.replace(/\s+/g,` `).trim()}`}function Ta(e,t){let n=wa(e.role,e.name),r=t.get(n);if(r!==void 0&&(e.backendNodeId=r),e.children)for(let n of e.children)Ta(n,t)}function Ea(e){let t={role:Ce(e.role,`unknown`),name:Ce(e.name)},n=Ce(e.value);n!==``&&(t.value=n);let r=Ce(e.description);return r!==``&&(t.description=r),Array.isArray(e.children)&&e.children.length>0&&(t.children=e.children.map(e=>Ea(e)).filter(e=>e.role!==`unknown`)),t}function Da(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 Oa=class{tabLocks=new Map;bridgeLock=Promise.resolve();bridgeHold=null;bridgeWaiters=0;tabLockStats=new Map;getStats(e){if(e!==void 0)return Da(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 Da(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){aa(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!=null){let r=Date.now();try{await ca(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()}}},ka=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 Aa=_(`browser-api`),ja=[`Session with given id not found`,`Target closed`,`No session with given id`,`No tab attached for sessionId`];var Ma=class extends Error{};function Na(e){let t=e instanceof Error?e.message:String(e);return ja.some(e=>t.includes(e))}var Pa=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)}},Fa=class{client;localClient;sessionId=null;attachedTargetId=null;trayTargetProvider=null;remoteTargetInfo=null;frames=new la;sessions=new pa(32,(e,t)=>{Aa.debug(`Evicting least-recently-used CDP session`,{targetId:e}),this.detachSession(e,t)});_listenedTransports=new Set;_sessionReplacedSubs=new Map;locks=new Oa;viewports=new ka;connection=new ra;_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),Aa.warn(`Auto-dismissed unexpected JavaScript dialog`,{sessionId:t,type:e.type,message:e.message,url:e.url})}catch(e){Aa.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 Gi,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 Pa)return e;let t=this._accountedTransports.get(e);return t||(t=new Pa(e,e=>this.noteApplied(e)),this._accountedTransports.set(e,t)),t}noteApplied(e){this.sessions.noteApplied(e)}createHarRecorder(e,t){return new da(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 Ma||!Na(r))throw r;return Aa.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);aa(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(!Na(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 Aa.warn(`CDP session reset mid-command — not replaying`,{targetId:e,applied:n,reason:r}),new Ma(`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 va(this,e,r,this.accountedTransportFor(i?.transport??this.client),n)}handleFor(e,t){return new va(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){Aa.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(),Ra(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=Ba((await(await this.transportForWindowOps(e)).send(`Browser.getWindowForTarget`,{targetId:La(e)})).bounds),n=await this.readDevicePixelRatio(e);return{...t,dpr:n}}async setWindowBounds(e,t){await this.ensureConnected(),Ra(t);let n=await this.transportForWindowOps(e),r=La(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=Ba(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=Ba((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}`);aa(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),aa(t,`about to enable Page on tray tab ${e}`),await a.send(`Page.enable`,{},o.sessionId),aa(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(),aa(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),aa(t,`about to enable Page on tab ${e}`),await this.localClient.send(`Page.enable`,{},n.sessionId),aa(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){Aa.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 Ia=new Set([`normal`,`minimized`,`maximized`,`fullscreen`]);function La(e){let t=e.indexOf(`:`);return t>=0?e.substring(t+1):e}function Ra(e){let t=e.state;if(!(!t||t===`normal`)){if(!Ia.has(t))throw Error(`window state must be one of ${[...Ia].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 za(e){return typeof e==`object`&&!!e}function Ba(e){let t=za(e)?e:{},n=t.windowState??t.state,r=typeof n==`string`&&Ia.has(n)?n:`normal`;return{left:Va(t.left,0),top:Va(t.top,0),width:Va(t.width,0),height:Va(t.height,0),state:r}}function Va(e,t){return typeof e==`number`&&Number.isFinite(e)?e:t}const Ha=_(`panel-rpc-cdp`);var Ua=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=>{Ha.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,we)+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){Ha.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=>{Ha.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=>{Ha.error(`remote-cdp unsubscribe failed (page-side forwarder may leak)`,{key:this.key,event:e,error:t instanceof Error?t.message:String(t)})})}};function Wa(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 Ua(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 Ga(e){return`slicc_feature_flags_remote:${e}`}let Ka=null;function qa(e,t){let n=Ya(t);Ka=e,ke(e,Xa(n,e)??{})}function Ja(e,t){if(!Ka||e!==void 0&&e!==Ga(Ka))return!1;let n=Ya(t);return De(Ka,Xa(n,Ka)??{}),!0}function Ya(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 Xa(e,t){try{let n=e?.getItem(Ga(t));return n?Za(JSON.parse(n)):null}catch{return null}}function Za(e){return!Qa(e)||Object.values(e).some(e=>typeof e!=`string`)?null:e}function Qa(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}const $a=_(`stale-asset`),eo=/dynamically imported module|importing a module script failed|expected a javascript module|module script/i;function to(e){return eo.test(e)}let no=null;function ro(e){if(!e){no=null;return}no=e}function io(e=!1){if(!no||typeof BroadcastChannel!=`function`)return;let t=new BroadcastChannel(`slicc-stale-asset-reload`);try{t.postMessage({type:`stale-asset-reload`,instanceId:no,replayTurn:e})}finally{t.close()}}function ao(e){to(e instanceof Error?e.message:String(e))&&io()}function oo(e,t){return!e||e===t?!1:($a.warn(`mixed build graph: page ${e} vs worker ${t} — requesting reload`),io(),!0)}var so=class{_state=`disconnected`;nextCommandId=1;listeners=new Map;pendingCommands=new Vi;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 Hi(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 co(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 lo(e){let t=co(e);return{onMessage:e=>t.onMessage(e),send:(e,n)=>{t.send({source:`offscreen`,payload:e},n)}}}var uo=class extends so{constructor(e){let t=co(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 fo(e,t){return e.find(e=>e.folder===t)??e.find(e=>e.folder===`${t}-scoop`)??e.find(e=>e.name===t)}const po=/^[\p{ID_Start}_$][\p{ID_Continue}_$\u200C\u200D]*$/u;function mo(e){return po.test(e)}function A(e,t){return`(${e} && ${t})`}function j(e,t){return`(${e} || ${t})`}function ho(e){return`!(${e})`}function go(e){return`Array.isArray(${e})`}function _o(e){return`typeof ${e} === "bigint"`}function vo(e){return`typeof ${e} === "boolean"`}function yo(e){return`Number.isInteger(${e})`}function bo(e){return`${e} === null`}function xo(e){return`Number.isFinite(${e})`}function So(e){return A(Co(e),ho(go(e)))}function Co(e){return`typeof ${e} === "object" && ${e} !== null`}function wo(e){return`typeof ${e} === "string"`}function To(e){return`typeof ${e} === "symbol"`}function Eo(e){return`${e} === undefined`}function Do(e){return`typeof ${e} === "function"`}function Oo(e){return`Guard.IsConstructor(${e})`}function ko(e,t){return`${e} === ${t}`}function Ao(e,t){return`${e} > ${t}`}function jo(e,t){return`${e} < ${t}`}function Mo(e,t){return`${e} <= ${t}`}function No(e,t){return`${e} >= ${t}`}function Po(e,t){return`Guard.IsMinLength(${e}, ${t})`}function Fo(e,t){return`Guard.IsMaxLength(${e}, ${t})`}function Io(e,t,n,r){return E(t,`0`)?`${e}.every((${n[0]}, ${n[1]}) => (${r}))`:`${e}.every((${n[0]}, ${n[1]}) => (${n[1]} < ${t}) || (${r}))`}function Lo(e,t,n){return`${e}.some((${t[0]}, ${t[1]}) => ${n})`}function Ro(e,t,n){return`((value) => { let result = false; value.forEach((${t[0]}, ${t[1]}) => { if (${n}) result = true }); return result })(${e})`}function zo(e,t,n){return`${e}.reduce((result, ${t[0]}, ${t[1]}) => (${n}) ? ++result : result, 0)`}function Bo(e){return`Object.entries(${e})`}function Vo(e){return`Object.getOwnPropertyNames(${e})`}function Ho(e,t){return E(t,`"__proto__"`)||E(t,`"constructor"`)?`Object.prototype.hasOwnProperty.call(${e}, ${t})`:`${t} in ${e}`}function Uo(e,t){return`Guard.IsDeepEqual(${e}, ${t})`}function Wo(e){return`[${e.join(`, `)}]`}function Go(e,t){return`((${e.join(`, `)}) => ${t})`}function M(e,t){return`${e}(${t.join(`, `)})`}function Ko(e,t){return`new ${e}(${t.join(`, `)})`}function N(e,t){return`${e}${mo(t)?`.${t}`:`[${P(t)}]`}`}function P(e){if(!tt(e))throw Error(`Unsupported Constant`);return x(e)?JSON.stringify(e):`${e}`}function qo(e,t,n){return`(${e} ? ${t} : ${n})`}function Jo(e){return`{ ${e.join(`; `)}; }`}function Yo(e,t){return`const ${e} = ${t}`}function Xo(e,t){return`if(${e}) { ${t} }`}function Zo(e){return`return ${e}`}function F(e){return E(e.length,0)?`true`:e.reduce((e,t)=>A(e,t))}function Qo(e){return E(e.length,0)?`false`:e.reduce((e,t)=>j(e,t))}function $o(e,t){return`Guard.IsMultipleOf(${e}, ${t})`}var es=Xe;function ts(e,t){return t[e.length]?.(...e)??(()=>{throw Error(`Invalid Arguments`)})()}let ns;function rs(){try{return as(`null`)(),!0}catch{return!1}}function is(){return v(ns)&&(ns=rs()),ns&&Bt().useAcceleration}function as(...e){return new globalThis.Function(...e)}function os(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 ss=os;function cs(){return ss}const ls=[/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],us=/^4(?:00|13)\s*(?:status code)?\s*\(no body\)/i,ds=[/^(Throttling error|Service unavailable):/i,/rate limit/i,/too many requests/i];function fs(e,t){return!!(e.stopReason===`error`&&e.errorMessage&&!ds.some(t=>t.test(e.errorMessage))&&(ls.some(t=>t.test(e.errorMessage))||e.provider===`cerebras`&&us.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 ps(e){return C(e,`~refine`)&&T(e[`~refine`])&&D(e[`~refine`],0,e=>y(e)&&C(e,`check`)&&C(e,`error`)&&jt(e.check)&&jt(e.error))}function I(e){return y(e)&&!T(e)}function ms(e){return wt(e)}function L(e){return I(e)||ms(e)}function hs(e){return C(e,`additionalItems`)&&L(e.additionalItems)}function gs(e){return C(e,`additionalProperties`)&&L(e.additionalProperties)}function _s(e){return C(e,`allOf`)&&T(e.allOf)&&e.allOf.every(e=>L(e))}function vs(e){return C(e,`$anchor`)&&x(e.$anchor)}function ys(e){return C(e,`anyOf`)&&T(e.anyOf)&&e.anyOf.every(e=>L(e))}function bs(e){return C(e,`const`)}function xs(e){return C(e,`contains`)&&L(e.contains)}function Ss(e){return C(e,`default`)}function Cs(e){return C(e,`dependencies`)&&y(e.dependencies)&&Object.values(e.dependencies).every(e=>L(e)||T(e)&&e.every(e=>x(e)))}function ws(e){return C(e,`dependentRequired`)&&y(e.dependentRequired)&&Object.values(e.dependentRequired).every(e=>T(e)&&e.every(e=>x(e)))}function Ts(e){return C(e,`dependentSchemas`)&&y(e.dependentSchemas)&&Object.values(e.dependentSchemas).every(e=>L(e))}function Es(e){return C(e,`$dynamicAnchor`)&&x(e.$dynamicAnchor)}function Ds(e){return C(e,`$dynamicRef`)&&x(e.$dynamicRef)}function Os(e){return C(e,`else`)&&L(e.else)}function ks(e){return C(e,`enum`)&&T(e.enum)}function As(e){return C(e,`exclusiveMaximum`)&&(S(e.exclusiveMaximum)||Qt(e.exclusiveMaximum))}function js(e){return C(e,`exclusiveMinimum`)&&(S(e.exclusiveMinimum)||Qt(e.exclusiveMinimum))}function Ms(e){return C(e,`format`)&&x(e.format)}function Ns(e){return C(e,`$id`)&&x(e.$id)}function Ps(e){return C(e,`if`)&&L(e.if)}function Fs(e){return C(e,`items`)&&(L(e.items)||T(e.items)&&e.items.every(e=>L(e)))}function Is(e){return Fs(e)&&T(e.items)}function Ls(e){return C(e,`maximum`)&&(S(e.maximum)||Qt(e.maximum))}function Rs(e){return C(e,`maxContains`)&&S(e.maxContains)}function zs(e){return C(e,`maxItems`)&&S(e.maxItems)}function Bs(e){return C(e,`maxLength`)&&S(e.maxLength)}function Vs(e){return C(e,`maxProperties`)&&S(e.maxProperties)}function Hs(e){return C(e,`minimum`)&&(S(e.minimum)||Qt(e.minimum))}function Us(e){return C(e,`minContains`)&&S(e.minContains)}function Ws(e){return C(e,`minItems`)&&S(e.minItems)}function Gs(e){return C(e,`minLength`)&&S(e.minLength)}function Ks(e){return C(e,`minProperties`)&&S(e.minProperties)}function qs(e){return C(e,`multipleOf`)&&(S(e.multipleOf)||Qt(e.multipleOf))}function Js(e){return C(e,`not`)&&L(e.not)}function Ys(e){return C(e,`oneOf`)&&T(e.oneOf)&&e.oneOf.every(e=>L(e))}function Xs(e){return C(e,`pattern`)&&(x(e.pattern)||e.pattern instanceof RegExp)}function Zs(e){return C(e,`patternProperties`)&&y(e.patternProperties)&&Object.values(e.patternProperties).every(e=>L(e))}function Qs(e){return C(e,`prefixItems`)&&T(e.prefixItems)&&e.prefixItems.every(e=>L(e))}function $s(e){return C(e,`properties`)&&y(e.properties)&&Object.values(e.properties).every(e=>L(e))}function ec(e){return C(e,`propertyNames`)&&(y(e.propertyNames)||L(e.propertyNames))}function tc(e){return C(e,`$recursiveAnchor`)&&wt(e.$recursiveAnchor)}function nc(e){return tc(e)&&E(e.$recursiveAnchor,!0)}function rc(e){return C(e,`$recursiveRef`)&&x(e.$recursiveRef)}function ic(e){return C(e,`$ref`)&&x(e.$ref)}function ac(e){return C(e,`required`)&&T(e.required)&&e.required.every(e=>x(e))}function oc(e){return C(e,`then`)&&L(e.then)}function sc(e){return C(e,`type`)&&(x(e.type)||T(e.type)&&e.type.every(e=>x(e)))}function cc(e){return C(e,`uniqueItems`)&&wt(e.uniqueItems)}function lc(e){return C(e,`unevaluatedItems`)&&L(e.unevaluatedItems)}function uc(e){return C(e,`unevaluatedProperties`)&&L(e.unevaluatedProperties)}function dc(e){return lc(e)||uc(e)||at(b(e),t=>pc(e[t]))}function fc(e){return at(e,e=>pc(e))}function pc(e){return T(e)?fc(e):y(e)?dc(e):!1}function mc(e,t){return pc(t)||at(b(e),t=>pc(e[t]))}var hc=class{constructor(e){this.hasUnevaluated=e}UseUnevaluated(){return this.hasUnevaluated}Push(){return M(N(`context`,`Push`),[])}Pop(){return M(N(`context`,`Pop`),[])}AddIndex(e){return M(N(`context`,`AddIndex`),[e])}AddKey(e){return M(N(`context`,`AddKey`),[e])}Merge(e){return M(N(`context`,`Merge`),[e])}},gc=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}},_c=class extends gc{constructor(){super(),this.errors=[]}AtCapacity(){return this.errors.length>=Bt().maxErrors}AddError(e){return this.AtCapacity()||this.errors.push(e),!1}GetErrors(){return this.errors}};const vc={identifier:`External`,variables:[]};function yc(e){let t=`External[${vc.variables.length}]`;return vc.variables.push(e),t}function bc(){vc.variables=[]}function xc(){return{...vc}}function Sc(e,t,n,r){return Io(yc(n[`~refine`].map(e=>e)),P(0),[`refinement`,`_`],M(N(`refinement`,`check`),[r]))}function Cc(e,t,n,r){return D(n[`~refine`],0,(e,t)=>e.check(r))}function wc(e,t,n,r,i,a){return Jt(i[`~refine`],0,(e,i)=>e.check(a)||t.AddError({keyword:`~refine`,schemaPath:n,instancePath:r,params:{index:i,message:e.error(a)}}))}let Tc=0;function R(){return`var_${Tc++}`}function Ec(e){return Fs(e)&&T(e.items)}function Dc(e,t,n,r){let[i,a]=[R(),R()],o=zp(e,t,n.additionalItems,i),s=jo(a,P(n.items.length)),c=t.AddIndex(a);return Io(r,P(0),[i,a],j(s,A(o,c)))}function Oc(e,t,n,r){let[i,a]=[R(),R()],o=zp(e,t,n.additionalItems,i),s=jo(a,P(n.items.length));return Io(r,P(0),[i,a],j(s,o))}function kc(e,t,n,r){return Ec(n)?t.UseUnevaluated()?Dc(e,t,n,r):Oc(e,t,n,r):P(!0)}function Ac(e,t,n,r){return!Ec(n)||D(r,0,(r,i)=>xt(i,n.items.length)||Bp(e,t,n.additionalItems,r)&&t.AddIndex(i))}function jc(e,t,n,r,i,a){return!Ec(i)||D(a,0,(a,o)=>{let s=`${n}/additionalItems`,c=`${r}/${o}`;return xt(o,i.items.length)||Vp(e,t,s,c,i.additionalItems,a)&&t.AddIndex(o)})}function Mc(e){return new RegExp(e,`u`)}function Nc(e,t){return!e.UseUnevaluated()&&(E(t,!0)||y(t)&&E(b(t).length,0))}function Pc(e){return`^${e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}$`}function Fc(e){let t=[];return Zs(e)&&t.push(...b(e.patternProperties)),$s(e)&&t.push(...b(e.properties).map(Pc)),E(t.length,0)?`(?!)`:`(${t.join(`|`)})`}function Ic(e,t,n){return ac(t)&&$s(t)&&!Zs(t)&&E(t.additionalProperties,!1)&&E(b(t.properties).length,t.required.length)}function Lc(e,t,n){return ko(N(M(N(`Object`,`getOwnPropertyNames`),[n]),`length`),P(t.required.length))}function Rc(e,t,n,r){let[i,a]=[R(),R()],o=yc(Mc(Fc(n))),s=zp(e,t,n.additionalProperties,`${r}[${i}]`),c=M(N(o,`test`),[i]),l=t.AddKey(i),u=t.UseUnevaluated()?j(c,A(s,l)):j(c,s);return Io(Vo(r),P(0),[i,a],u)}function zc(e,t,n,r){return Nc(t,n.additionalProperties)?P(!0):Ic(t,n,r)?Lc(t,n,r):Rc(e,t,n,r)}function Bc(e,t,n,r){let i=Mc(Fc(n));return D(b(r),0,(a,o)=>i.test(a)||Bp(e,t,n.additionalProperties,r[a])&&t.AddKey(a))}function Vc(e,t,n,r,i,a){let o=Mc(Fc(i)),s=[];return Jt(b(a),0,(c,l)=>{let u=`${n}/additionalProperties`,d=`${r}/${c}`,f=o.test(c)||Vp(e,t,u,d,i.additionalProperties,a[c])&&t.AddKey(c);return f||s.push(c),f})||t.AddError({keyword:`additionalProperties`,schemaPath:n,instancePath:r,params:{additionalProperties:s}})}function Hc(e,t,n,r,i){let a=Yo(`results`,`[]`),o=n.map((e,t)=>Yo(`context_${t}`,Ko(`CheckContext`,[]))),s=n.map((n,i)=>Yo(`condition_${i}`,M(Go([`context`],B(e,t,n,r)),[`context_${i}`]))),c=n.map((e,t)=>Xo(`condition_${t}`,M(N(`results`,`push`),[`context_${t}`]))),l=Zo(A(i,t.Merge(`results`)));return M(Go([],Jo([a,...o,...s,...c,l])),[])}function Uc(e,t,n,r){return Hc(e,t,n.allOf,r,ko(N(`results`,`length`),P(n.allOf.length)))}function Wc(e,t,n,r){return F(n.allOf.map(n=>B(e,t,n,r)))}function Gc(e,t,n,r){return t.UseUnevaluated()?Uc(e,t,n,r):Wc(e,t,n,r)}function Kc(e,t,n,r){let i=n.allOf.reduce((t,n)=>{let i=new gc;return V(e,i,n,r)?[...t,i]:t},[]);return E(i.length,n.allOf.length)&&t.Merge(i)}function qc(e,t,n,r,i,a){let o=[],s=i.allOf.reduce((t,i,s)=>{let c=`${n}/allOf/${s}`,l=new _c,u=Hp(e,l,c,r,i,a);return u||o.push(l),u?[...t,l]:t},[]),c=E(s.length,i.allOf.length)&&t.Merge(s);return c||o.forEach(e=>e.GetErrors().forEach(e=>t.AddError(e))),c}function Jc(e,t,n,r){return Hc(e,t,n.anyOf,r,Ao(N(`results`,`length`),P(0)))}function Yc(e,t,n,r){return Qo(n.anyOf.map(n=>B(e,t,n,r)))}function Xc(e,t,n,r){return t.UseUnevaluated()?Jc(e,t,n,r):Yc(e,t,n,r)}function Zc(e,t,n,r){let i=n.anyOf.reduce((t,n)=>{let i=new gc;return V(e,i,n,r)?[...t,i]:t},[]);return _t(i.length,0)&&t.Merge(i)}function Qc(e,t,n,r,i,a){let o=[],s=i.anyOf.reduce((t,i,s)=>{let c=new _c,l=Hp(e,c,`${n}/anyOf/${s}`,r,i,a);return l||o.push(c),l?[...t,c]:t},[]),c=_t(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 $c(e,t,n,r){return P(!!n)}function el(e,t,n,r){return n}function tl(e,t,n,r,i,a){return el(e,t,i,a)||t.AddError({keyword:`boolean`,schemaPath:n,instancePath:r,params:{}})}function nl(e,t,n,r){return tt(n.const)?ko(r,P(n.const)):Uo(r,yc(n.const))}function rl(e,t,n,r){return tt(n.const)?E(r,n.const):Ut(r,n.const)}function il(e,t,n,r,i,a){return rl(e,t,i,a)||t.AddError({keyword:`const`,schemaPath:n,instancePath:r,params:{allowedValue:i.const}})}function al(e){return!(Us(e)&&E(e.minContains,0))}function ol(e,t,n,r){let[i,a]=[R(),R()];return A(ho(ko(N(r,`length`),P(0))),Ro(r,[i,a],A(B(e,t,n.contains,i),t.AddIndex(a))))}function sl(e,t,n,r){let[i]=[R()];return A(ho(ko(N(r,`length`),P(0))),Lo(r,[i,`_`],B(e,t,n.contains,i)))}function cl(e,t,n,r){return al(n)?t.UseUnevaluated()?ol(e,t,n,r):sl(e,t,n,r):P(!0)}function ll(e,t,n,r){return!al(n)||!E(r.length,0)&&qe(r,(r,i)=>V(e,t,n.contains,r)&&t.AddIndex(i))}function ul(e,t,n,r,i,a){return ll(e,t,i,a)||t.AddError({keyword:`contains`,schemaPath:n,instancePath:r,params:{minContains:1}})}function dl(e,t,n,r){return j(ko(N(Vo(r),`length`),P(0)),F(w(n.dependencies).map(([n,i])=>{let a=ho(Ho(r,P(n))),o=B(e,t,i,r);return j(a,T(i)?(e=>F(e.map(e=>Ho(r,P(e)))))(i):o)})))}function fl(e,t,n,r){let i=E(b(r).length,0),a=D(w(n.dependencies),0,([n,i])=>!C(r,n)||(T(i)?i.every(e=>C(r,e)):V(e,t,i,r)));return i||a}function pl(e,t,n,r,i,a){let o=E(b(a).length,0),s=Jt(w(i.dependencies),0,([i,o])=>{let s=`${n}/dependencies/${i}`;return!C(a,i)||(T(o)?o.every(e=>C(a,e)||t.AddError({keyword:`dependencies`,schemaPath:n,instancePath:r,params:{property:i,dependencies:o}})):Hp(e,t,s,r,o,a))});return o||s}function ml(e,t,n,r){return j(ko(N(Vo(r),`length`),P(0)),F(w(n.dependentRequired).map(([e,t])=>j(ho(Ho(r,P(e))),F(t.map(e=>Ho(r,P(e))))))))}function hl(e,t,n,r){let i=E(b(r).length,0),a=D(w(n.dependentRequired),0,([e,t])=>!C(r,e)||t.every(e=>C(r,e)));return i||a}function gl(e,t,n,r,i,a){let o=E(b(a).length,0),s=Jt(w(i.dependentRequired),0,([e,i])=>!C(a,e)||Jt(i,0,o=>C(a,o)||t.AddError({keyword:`dependentRequired`,schemaPath:n,instancePath:r,params:{property:e,dependencies:i}})));return o||s}function _l(e,t,n,r){return j(ko(N(Vo(r),`length`),P(0)),F(w(n.dependentSchemas).map(([n,i])=>j(ho(Ho(r,P(n))),B(e,t,i,r)))))}function vl(e,t,n,r){let i=E(b(r).length,0),a=D(w(n.dependentSchemas),0,([n,i])=>!C(r,n)||V(e,t,i,r));return i||a}function yl(e,t,n,r,i,a){let o=E(b(a).length,0),s=Jt(w(i.dependentSchemas),0,([i,o])=>{let s=`${n}/dependentSchemas/${i}`;return!C(a,i)||Hp(e,t,s,r,o,a)});return o||s}function bl(e,t,n,r){return Qp(e,t,e.DynamicRef(n)??!1,r)}function xl(e,t,n,r){let i=e.DynamicRef(n)??!1;return L(i)&&V(e,t,i,r)}function Sl(e,t,n,r,i,a){let o=e.DynamicRef(i)??!1;return L(o)&&Hp(e,t,`#`,r,o,a)}function Cl(e,t,n,r){return Qo(n.enum.map(e=>tt(e)?ko(r,P(e)):Uo(r,yc(e))))}function wl(e,t,n,r){return at(n.enum,e=>tt(e)?E(r,e):Ut(r,e))}function Tl(e,t,n,r,i,a){return wl(e,t,i,a)||t.AddError({keyword:`enum`,schemaPath:n,instancePath:r,params:{allowedValues:i.enum}})}function El(e,t,n,r){return jo(r,P(n.exclusiveMaximum))}function Dl(e,t,n,r){return xt(r,n.exclusiveMaximum)}function Ol(e,t,n,r,i,a){return Dl(e,t,i,a)||t.AddError({keyword:`exclusiveMaximum`,schemaPath:n,instancePath:r,params:{comparison:`<`,limit:i.exclusiveMaximum}})}function kl(e,t,n,r){return Ao(r,P(n.exclusiveMinimum))}function Al(e,t,n,r){return _t(r,n.exclusiveMinimum)}function jl(e,t,n,r,i,a){return Al(e,t,i,a)||t.AddError({keyword:`exclusiveMinimum`,schemaPath:n,instancePath:r,params:{comparison:`>`,limit:i.exclusiveMinimum}})}const Ml=[0,31,28,31,30,31,30,31,31,30,31,30,31],Nl=/^(\d\d\d\d)-(\d\d)-(\d\d)$/;function Pl(e){return e%4==0&&(e%100!=0||e%400==0)}function Fl(e){let t=Nl.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:Ml[r])}const Il=/^(\d\d):(\d\d):(\d\d)(?:\.\d+)?(?:([Zz])|([+-])(\d\d):(\d\d))?$/;function Ll(e,t=!0){let n=Il.exec(e);if(!n||t&&!n[4]&&!n[5])return!1;let r=+n[1],i=+n[2],a=+n[3];if(r>23||i>59||a>60)return!1;if(n[5]){let e=+n[6],t=+n[7];if(e>23||t>59)return!1}if(a<60)return!0;let o=n[5]===`-`?-1:1,s=+(n[6]||0),c=+(n[7]||0);return((r*60+i-o*(s*60+c))%1440+1440)%1440==1439}function Rl(e){let t=e.split(/T/i);return t.length===2&&Fl(t[0])&&Ll(t[1])}const zl=/^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 Bl(e){return zl.test(e)}const Vl=/^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[^"\\]|\\[\x20-\x7e])*")@(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*|\[(?:IPv6:[a-f0-9:]+|(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(?:\.(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3})\])$/i;function Hl(e){return Vl.test(e)}const Ul=/^(?!-).*(?<!-)$/,Wl=/^(?!..--)/,Gl=/^[a-zA-Z0-9-]*$/,Kl=/[^\p{ASCII}]/u,ql=/[0-9]/,Jl=/[\u{0660}-\u{0669}]/u,Yl=/[\u{06f0}-\u{06f9}]/u,Xl=/[\u{002e}\u{002c}\u{003a}\u{002f}]/u,Zl=/[\u{002d}\u{002b}]/u,Ql=/\p{Mn}/u,$l=/\p{Mc}/u,eu=/[\p{Mn}\p{Mc}\p{Me}]/u,tu=/\p{L}/u,nu=/\p{Nd}/u,ru=/\p{Script=Greek}/u,iu=/\p{Script=Hebrew}/u,au=/[\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Han}]/u,ou=/[\p{Script=Arabic}\p{Script=Syriac}\p{Script=Thaana}\p{Script=Mandaic}]/u,su=/[\u{094d}\u{09cd}\u{0a4d}\u{0acd}\u{0b4d}\u{0bcd}\u{0c4d}\u{0ccd}\u{0d3b}\u{0d3c}\u{0d4d}\u{0dca}\u{1b44}\u{1baa}\u{1bab}\u{a9c0}\u{11046}\u{1107f}\u{110b9}\u{11133}\u{11134}\u{111c0}\u{11235}\u{1134d}\u{11442}\u{114c2}\u{115bf}\u{1163f}\u{116b6}\u{11c3f}\u{11d44}\u{11d45}]/u,cu=/[\u{0640}\u{07fa}\u{302e}\u{302f}\u{3031}\u{3032}\u{3033}\u{3034}\u{3035}\u{303b}]/u,lu=/[\u{00b7}\u{0375}\u{05f3}\u{05f4}\u{200c}\u{200d}\u{30fb}]/u,uu=/[\u{00df}\u{03c2}\u{06fd}\u{06fe}\u{0f0b}\u{3007}]/u,du=new RegExp([ql,Yl].map(e=>e.source).join(`|`),`u`),fu=new RegExp([tu,Zl,Xl,nu,Ql,$l,lu,uu].map(e=>e.source).join(`|`),`u`);function pu(e){return Ul.test(e)&&Wl.test(e)&&Gl.test(e)}function mu(){throw null}function hu(e){return e.toLowerCase().startsWith(`xn--`)}function gu(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 _u(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);r>=128&&mu(),t.push(r)}let o=a<0?0:a+1;for(;o<e.length;){let a=r,s=1,c=36;for(;;){o>=e.length&&mu();let t=e.charCodeAt(o++),n;t>=97&&t<=122?n=t-97:t>=48&&t<=57?n=t-48+26:mu(),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=gu(r-a,l,a===0),n+=Math.floor(r/l),r%=l,t.splice(r,0,n),r++}return String.fromCodePoint(...t)}function vu(e){return e<26?String.fromCharCode(e+97):String.fromCharCode(e-26+48)}const yu=new RegExp(Kl.source,`gu`);function bu(e){let t=e.replace(yu,``),n=t.length,r=n>0?[t,`-`]:[],i=Array.from(e,e=>e.codePointAt(0)),a=128,o=0,s=72,c=n;for(;c<i.length;){let e=1/0;for(let t of i)t>=a&&t<e&&(e=t);o+=(e-a)*(c+1),a=e;for(let e of i)if(e<a&&o++,e===a){let e=o;for(let t=36;;t+=36){let n=t<=s?1:t>=s+26?26:t-s;if(e<n)break;let i=n+(e-n)%(36-n);r.push(vu(i)),e=Math.floor((e-n)/(36-n))}r.push(vu(e)),s=gu(o,c+1,c===n),o=0,c++}o++,a++}return r.join(``)}const xu=/^(?:R|AL|AN|EN|ES|CS|ET|ON|BN|NSM)$/,Su=/^(?:L|EN|ES|CS|ET|ON|BN|NSM)$/,Cu=/^(?:R|AL|AN)$/;function wu(e){if(hu(e))try{return Eu(_u(e.slice(4).toLowerCase()))}catch{return!1}return Eu(e)}function Tu(e){let t=String.fromCodePoint(e);return du.test(t)?`EN`:Jl.test(t)?`AN`:Ql.test(t)?`NSM`:iu.test(t)?`R`:ou.test(t)?`AL`:tu.test(t)?`L`:`ON`}function Eu(e){for(let t of e)if(Cu.test(Tu(t.codePointAt(0))))return!0;return!1}function Du(e){let t=!1,n=Su,r=!1,i=!1,a=!0;for(let o of e){let e=Tu(o.codePointAt(0));if(a){if(e!==`L`&&e!==`R`&&e!==`AL`)return!1;t=e===`R`||e===`AL`,n=t?xu:Su,a=!1}if(!n.test(e))return!1;e===`EN`?r=!0:e===`AN`&&(i=!0)}return!(t&&r&&i)}function Ou(e){return Kl.test(e)&&bu(e).length+4>63}function ku(e){return e[0]===`-`||e[e.length-1]===`-`||e.slice(2).join(``).startsWith(`--`)}function Au(e){if(Ou(e)||Eu(e)&&!Du(e))return!1;let t=[...e],n=t.map(e=>e.codePointAt(0)),r=n.length;if(ku(t)||eu.test(t[0]))return!1;let i=!1;for(let e=0;e<r;e++){let r=n[e],a=t[e];if(cu.test(a)||!fu.test(a))return!1;au.test(a)&&(i=!0);let o=n[e-1],s=n[e+1];switch(r){case 183:if(o!==108||s!==108)return!1;break;case 885:if(!s||!ru.test(t[e+1]))return!1;break;case 1523:case 1524:if(!o||!iu.test(t[e-1]))return!1;break;case 8204:if(!o||o<128&&!su.test(t[e-1]))return!1;break;case 8205:if(!o||!su.test(t[e-1]))return!1}}return!(e.includes(`・`)&&!i)}function ju(e){if(!hu(e))return!1;try{let t=e.slice(4).toLowerCase();if(t.lastIndexOf(`-`)===0)return!1;let n=_u(t);return Kl.test(n)?Au(n):!1}catch{return!1}}function Mu(e){return e.length>0&&e.length<=63}function Nu(e){return Mu(e)&&(ju(e)||pu(e))}function Pu(e){return e.length===0||e.length>253||e.charCodeAt(e.length-1)===46?!1:e.split(`.`).every(e=>Nu(e))}function Fu(e){return e.length>0&&e.length<=63}function Iu(e){return Fu(e)&&(ju(e)||Au(e))}function Lu(e){return e.replace(/[\uff01-\uff5e]/g,e=>String.fromCharCode(e.charCodeAt(0)-65248)).normalize(`NFC`).replace(/[\u00ad\u034f\u180b-\u180d\u200b\ufe00-\ufe0f\u{e0100}-\u{e01ef}]/gu,``).replace(/[\u002E\u3002\uFF0E\uFF61]/g,`.`)}function Ru(e){if(e.length===0||e.includes(` `))return!1;let t=Lu(e);if(t.length>253)return!1;let n=t.split(`.`),r=n.some(e=>wu(e));return n.every(e=>Iu(e)&&(!r||Du(e)))}function zu(e){return Pu(e)}const Bu=/^(?:[A-Za-z0-9!#$%&'*+\/=?^_`{|}~\u{0080}-\u{10FFFF}-]+(?:\.[A-Za-z0-9!#$%&'*+\/=?^_`{|}~\u{0080}-\u{10FFFF}-]+)*|"(?:[^"\\]|\\.)*")@[\p{L}\p{N}](?:[\p{L}\p{N}-]{0,62})(?<!-)(?:\.[\p{L}\p{N}](?:[\p{L}\p{N}-]{0,62})(?<!-))*$/iu;function Vu(e){return Bu.test(e.normalize(`NFC`))}function Hu(e){return Ru(e)}const Uu=/^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$/;function Wu(e){return Uu.test(e)}const Gu=/^(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:)?[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)$/i;function Ku(e){return Gu.test(e)}const qu=/[\x00-\x20\x7F\\]|%(?![0-9a-fA-F]{2})/,Ju=/^[a-zA-Z][a-zA-Z0-9+\-.]*\/\//;function Yu(e){return!qu.test(e)&&!Ju.test(e)&&URL.canParse(e,`http://example.com`)}const Xu=/\[[vV][0-9a-fA-F]+\.[^\]]+\]/,Zu=/[\x00-\x20<>\^`{|}\\]/,Qu=/%(?![0-9a-fA-F]{2})/;function $u(e){return e.length<2048?e.replace(Xu,`[::1]`):e}function ed(e){return Zu.test(e)||Qu.test(e)?!1:URL.canParse($u(e))}const td=/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i;function nd(e){return td.test(e)}const rd=/^(?:\/(?:[^~/]|~0|~1)*)*$/;function id(e){return rd.test(e)}function ad(e){try{return new RegExp(e,`u`),!0}catch{return!1}}const od=/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/;function sd(e){return od.test(e)}const cd=/^(?:[a-z][a-z0-9+\-.]*:(?:\/\/(?:(?:[-a-z0-9._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:[\da-f]{1,4}:){6}(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|::(?:[\da-f]{1,4}:){5}(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:[\da-f]{1,4})?::(?:[\da-f]{1,4}:){4}(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[\da-f]{1,4}:){0,1}[\da-f]{1,4})?::(?:[\da-f]{1,4}:){3}(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[\da-f]{1,4}:){0,2}[\da-f]{1,4})?::(?:[\da-f]{1,4}:){2}(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[\da-f]{1,4}:){0,3}[\da-f]{1,4})?::[\da-f]{1,4}:(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[\da-f]{1,4}:){0,4}[\da-f]{1,4})?::(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[\da-f]{1,4}:){0,5}[\da-f]{1,4})?::[\da-f]{1,4}|(?:(?:[\da-f]{1,4}:){0,6}[\da-f]{1,4})?::)|v[0-9a-f]+\.[-a-z0-9._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)|(?:[-a-z0-9._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[-a-z0-9._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[-a-z0-9._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[-a-z0-9._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[-a-z0-9._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[-a-z0-9._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:\/\/(?:(?:[-a-z0-9._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:[\da-f]{1,4}:){6}(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|::(?:[\da-f]{1,4}:){5}(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:[\da-f]{1,4})?::(?:[\da-f]{1,4}:){4}(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[\da-f]{1,4}:){0,1}[\da-f]{1,4})?::(?:[\da-f]{1,4}:){3}(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[\da-f]{1,4}:){0,2}[\da-f]{1,4})?::(?:[\da-f]{1,4}:){2}(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[\da-f]{1,4}:){0,3}[\da-f]{1,4})?::[\da-f]{1,4}:(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[\da-f]{1,4}:){0,4}[\da-f]{1,4})?::(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[\da-f]{1,4}:){0,5}[\da-f]{1,4})?::[\da-f]{1,4}|(?:(?:[\da-f]{1,4}:){0,6}[\da-f]{1,4})?::)|v[0-9a-f]+\.[-a-z0-9._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)|(?:[-a-z0-9._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[-a-z0-9._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[-a-z0-9._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[-a-z0-9._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[-a-z0-9._~!$&'()*+,;=@]|%[0-9a-f]{2})+(?:\/(?:[-a-z0-9._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?)(?:\?(?:[-a-z0-9._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[-a-z0-9._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;function ld(e){return cd.test(e)}const ud=/^(?:(?:[^\x00-\x20"<>%\\^`{|}\x7f]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?:\.(?:[a-z0-9_]|%[0-9a-f]{2})+)*(?::[1-9]\d{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?:\.(?:[a-z0-9_]|%[0-9a-f]{2})+)*(?::[1-9]\d{0,3}|\*)?)*\})*$/i;function dd(e){return ud.test(e)}const fd=/^[a-z][a-z0-9+\-.]*:(?:\/\/(?:(?:[-a-z0-9._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:[\da-f]{1,4}:){6}(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|::(?:[\da-f]{1,4}:){5}(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:[\da-f]{1,4})?::(?:[\da-f]{1,4}:){4}(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[\da-f]{1,4}:){0,1}[\da-f]{1,4})?::(?:[\da-f]{1,4}:){3}(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[\da-f]{1,4}:){0,2}[\da-f]{1,4})?::(?:[\da-f]{1,4}:){2}(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[\da-f]{1,4}:){0,3}[\da-f]{1,4})?::[\da-f]{1,4}:(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[\da-f]{1,4}:){0,4}[\da-f]{1,4})?::(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[\da-f]{1,4}:){0,5}[\da-f]{1,4})?::[\da-f]{1,4}|(?:(?:[\da-f]{1,4}:){0,6}[\da-f]{1,4})?::)|v[0-9a-f]+\.[-a-z0-9._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)|(?:[-a-z0-9._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[-a-z0-9._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[-a-z0-9._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[-a-z0-9._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[-a-z0-9._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[-a-z0-9._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[-a-z0-9._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[-a-z0-9._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;function pd(e){return fd.test(e)}function md(e){return URL.canParse(e)}const hd=/^[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i;function gd(e){return hd.test(e)}const z=new Map;function _d(){z.clear()}function vd(){return[...z.entries()]}function yd(e,t){z.set(e,t)}function bd(e){return z.has(e)}function xd(e){return z.get(e)}function Sd(e,t){return z.get(e)?.(t)??!0}function Cd(){_d(),z.set(`date-time`,Rl),z.set(`date`,Fl),z.set(`duration`,Bl),z.set(`email`,Hl),z.set(`hostname`,zu),z.set(`idn-email`,Vu),z.set(`idn-hostname`,Hu),z.set(`ipv4`,Wu),z.set(`ipv6`,Ku),z.set(`iri-reference`,Yu),z.set(`iri`,ed),z.set(`json-pointer-uri-fragment`,nd),z.set(`json-pointer`,id),z.set(`regex`,ad),z.set(`relative-json-pointer`,sd),z.set(`time`,Ll),z.set(`uri-reference`,ld),z.set(`uri-template`,dd),z.set(`uri`,pd),z.set(`url`,md),z.set(`uuid`,gd)}Cd();var wd=e({Clear:()=>_d,Entries:()=>vd,Get:()=>xd,Has:()=>bd,IsDate:()=>Fl,IsDateTime:()=>Rl,IsDuration:()=>Bl,IsEmail:()=>Hl,IsHostname:()=>zu,IsIPv4:()=>Wu,IsIPv6:()=>Ku,IsIdnEmail:()=>Vu,IsIdnHostname:()=>Hu,IsIri:()=>ed,IsIriReference:()=>Yu,IsJsonPointer:()=>id,IsJsonPointerUriFragment:()=>nd,IsRegex:()=>ad,IsRelativeJsonPointer:()=>sd,IsTime:()=>Ll,IsUri:()=>pd,IsUriReference:()=>ld,IsUriTemplate:()=>dd,IsUrl:()=>md,IsUuid:()=>gd,Reset:()=>Cd,Set:()=>yd,Test:()=>Sd});function Td(e,t,n,r){return M(N(`Format`,`Test`),[P(n.format),r])}function Ed(e,t,n,r){return Sd(n.format,r)}function Dd(e,t,n,r,i,a){return Ed(e,t,i,a)||t.AddError({keyword:`format`,schemaPath:n,instancePath:r,params:{format:i.format}})}function Od(e,t,n,r){let i=!oc(n)||n.then,a=!Os(n)||n.else;return qo(B(e,t,n.if,r),B(e,t,i,r),B(e,t,a,r))}function kd(e,t,n,r){let i=!oc(n)||n.then,a=!Os(n)||n.else;return V(e,t,n.if,r)?V(e,t,i,r):V(e,t,a,r)}function Ad(e,t,n,r,i,a){let o=!oc(i)||i.then,s=!Os(i)||i.else,c=new _c,l=Hp(e,c,`${n}/if`,r,i.if,a)?Hp(e,c,`${n}/then`,r,o,a)||t.AddError({keyword:`if`,schemaPath:n,instancePath:r,params:{failingKeyword:`then`}}):Hp(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 jd(e,t,n,r){return F(n.items.map((n,i)=>j(Mo(N(r,`length`),P(i)),A(zp(e,t,n,`${r}[${i}]`),t.AddIndex(P(i))))))}function Md(e,t,n,r){return F(n.items.map((n,i)=>j(Mo(N(r,`length`),P(i)),zp(e,t,n,`${r}[${i}]`))))}function Nd(e,t,n,r){return t.UseUnevaluated()?jd(e,t,n,r):Md(e,t,n,r)}function Pd(e,t,n,r){return D(n.items,0,(n,i)=>sn(r.length,i)||Bp(e,t,n,r[i])&&t.AddIndex(i))}function Fd(e,t,n,r,i,a){return Jt(i.items,0,(i,o)=>{let s=`${n}/items/${o}`,c=`${r}/${o}`;return sn(a.length,o)||Vp(e,t,s,c,i,a[o])&&t.AddIndex(o)})}function Id(e,t,n,r){let i=Qs(n)?n.prefixItems.length:0,a=zp(e,t,n.items,`element`),o=t.AddIndex(`index`);return Io(r,P(i),[`element`,`index`],A(a,o))}function Ld(e,t,n,r){let i=Qs(n)?n.prefixItems.length:0,a=zp(e,t,n.items,`element`);return Io(r,P(i),[`element`,`index`],a)}function Rd(e,t,n,r){return t.UseUnevaluated()?Id(e,t,n,r):Ld(e,t,n,r)}function zd(e,t,n,r){let i=Qs(n)?n.prefixItems.length:0;return D(r,i,(r,i)=>Bp(e,t,n.items,r)&&t.AddIndex(i))}function Bd(e,t,n,r,i,a){let o=Qs(i)?i.prefixItems.length:0;return Jt(a,o,(a,o)=>Vp(e,t,`${n}/items`,`${r}/${o}`,i.items,a)&&t.AddIndex(o))}function Vd(e,t,n,r){return Is(n)?Nd(e,t,n,r):Rd(e,t,n,r)}function Hd(e,t,n,r){return Is(n)?Pd(e,t,n,r):zd(e,t,n,r)}function Ud(e,t,n,r,i,a){return Is(i)?Fd(e,t,n,r,i,a):Bd(e,t,n,r,i,a)}function Wd(e){return xs(e)}function Gd(e,t,n,r){if(!Wd(n))return P(!0);let[i]=[R()];return Mo(zo(r,[i,`_`],B(e,t,n.contains,i)),P(n.maxContains))}function Kd(e,t,n,r){if(!Wd(n))return!0;let i=Kt(r,r=>V(e,t,n.contains,r));return sn(i,n.maxContains)}function qd(e,t,n,r,i,a){let o=Us(i)?i.minContains:1;return Kd(e,t,i,a)||t.AddError({keyword:`contains`,schemaPath:n,instancePath:r,params:{minContains:o,maxContains:i.maxContains}})}function Jd(e,t,n,r){return Mo(r,P(n.maximum))}function Yd(e,t,n,r){return sn(r,n.maximum)}function Xd(e,t,n,r,i,a){return Yd(e,t,i,a)||t.AddError({keyword:`maximum`,schemaPath:n,instancePath:r,params:{comparison:`<=`,limit:i.maximum}})}function Zd(e,t,n,r){return Mo(N(r,`length`),P(n.maxItems))}function Qd(e,t,n,r){return sn(r.length,n.maxItems)}function $d(e,t,n,r,i,a){return Qd(e,t,i,a)||t.AddError({keyword:`maxItems`,schemaPath:n,instancePath:r,params:{limit:i.maxItems}})}function ef(e,t,n,r){return Fo(r,P(n.maxLength))}function tf(e,t,n,r){return an(r,n.maxLength)}function nf(e,t,n,r,i,a){return tf(e,t,i,a)||t.AddError({keyword:`maxLength`,schemaPath:n,instancePath:r,params:{limit:i.maxLength}})}function rf(e,t,n,r){return Mo(N(Vo(r),`length`),P(n.maxProperties))}function af(e,t,n,r){return sn(b(r).length,n.maxProperties)}function of(e,t,n,r,i,a){return af(e,t,i,a)||t.AddError({keyword:`maxProperties`,schemaPath:n,instancePath:r,params:{limit:i.maxProperties}})}function sf(e){return xs(e)}function cf(e,t,n,r){let[i,a]=[R(),R()];return No(zo(r,[i,a],A(B(e,t,n.contains,i),t.AddIndex(a))),P(n.minContains))}function lf(e,t,n,r){let[i]=[R()];return No(zo(r,[i,`_`],B(e,t,n.contains,i)),P(n.minContains))}function uf(e,t,n,r){return sf(n)?t.UseUnevaluated()?cf(e,t,n,r):lf(e,t,n,r):P(!0)}function df(e,t,n,r){if(!sf(n))return!0;let i=Kt(r,(r,i)=>V(e,t,n.contains,r)&&t.AddIndex(i));return kt(i,n.minContains)}function ff(e,t,n,r,i,a){return df(e,t,i,a)||t.AddError({keyword:`contains`,schemaPath:n,instancePath:r,params:{minContains:i.minContains}})}function pf(e,t,n,r){return No(r,P(n.minimum))}function mf(e,t,n,r){return kt(r,n.minimum)}function hf(e,t,n,r,i,a){return mf(e,t,i,a)||t.AddError({keyword:`minimum`,schemaPath:n,instancePath:r,params:{comparison:`>=`,limit:i.minimum}})}function gf(e,t,n,r){return No(N(r,`length`),P(n.minItems))}function _f(e,t,n,r){return kt(r.length,n.minItems)}function vf(e,t,n,r,i,a){return _f(e,t,i,a)||t.AddError({keyword:`minItems`,schemaPath:n,instancePath:r,params:{limit:i.minItems}})}function yf(e,t,n,r){return Po(r,P(n.minLength))}function bf(e,t,n,r){return ct(r,n.minLength)}function xf(e,t,n,r,i,a){return bf(e,t,i,a)||t.AddError({keyword:`minLength`,schemaPath:n,instancePath:r,params:{limit:i.minLength}})}function Sf(e,t,n,r){return No(N(Vo(r),`length`),P(n.minProperties))}function Cf(e,t,n,r){return kt(b(r).length,n.minProperties)}function wf(e,t,n,r,i,a){return Cf(e,t,i,a)||t.AddError({keyword:`minProperties`,schemaPath:n,instancePath:r,params:{limit:i.minProperties}})}function Tf(e,t,n,r){return $o(r,P(n.multipleOf))}function Ef(e,t,n,r){return He(r,n.multipleOf)}function Df(e,t,n,r,i,a){return Ef(e,t,i,a)||t.AddError({keyword:`multipleOf`,schemaPath:n,instancePath:r,params:{multipleOf:i.multipleOf}})}function Of(e,t,n,r){return Hc(e,t,[n.not],r,ho(ko(N(`results`,`length`),P(1))))}function kf(e,t,n,r){return ho(B(e,t,n.not,r))}function Af(e,t,n,r){return t.UseUnevaluated()?Of(e,t,n,r):kf(e,t,n,r)}function jf(e,t,n,r){let i=new gc;return!V(e,i,n.not,r)&&t.Merge([i])}function Mf(e,t,n,r,i,a){return jf(e,t,i,a)||t.AddError({keyword:`not`,schemaPath:n,instancePath:r,params:{}})}function Nf(e,t,n,r){return Hc(e,t,n.oneOf,r,ko(N(`results`,`length`),P(1)))}function Pf(e,t,n,r){let[i]=[R()];return ko(zo(Wo(n.oneOf.map(n=>B(e,t,n,r))),[i,`_`],ko(i,P(!0))),P(1))}function Ff(e,t,n,r){return t.UseUnevaluated()?Nf(e,t,n,r):Pf(e,t,n,r)}function If(e,t,n,r){let i=n.oneOf.reduce((t,n)=>{let i=new gc;return V(e,i,n,r)?[...t,i]:t},[]);return E(i.length,1)&&t.Merge(i)}function Lf(e,t,n,r,i,a){let o=[],s=[],c=i.oneOf.reduce((t,i,c)=>{let l=new _c,u=Hp(e,l,`${n}/oneOf/${c}`,r,i,a);return u&&s.push(c),u||o.push(l),u?[...t,l]:t},[]),l=E(c.length,1)&&t.Merge(c);return!l&&E(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 Rf(e,t,n,r){return M(N(yc(x(n.pattern)?Mc(n.pattern):n.pattern),`test`),[r])}function zf(e,t,n,r){return(x(n.pattern)?Mc(n.pattern):n.pattern).test(r)}function Bf(e,t,n,r,i,a){return zf(e,t,i,a)||t.AddError({keyword:`pattern`,schemaPath:n,instancePath:r,params:{pattern:i.pattern}})}function Vf(e,t,n,r){return F(w(n.patternProperties).map(([n,i])=>{let[a,o]=[R(),R()],s=ho(M(N(yc(Mc(n)),`test`),[a])),c=zp(e,t,i,o),l=t.AddKey(a),u=t.UseUnevaluated()?j(s,A(c,l)):j(s,c);return Io(Bo(r),P(0),[`[${a}, ${o}]`,`_`],u)}))}function Hf(e,t,n,r){return D(w(n.patternProperties),0,([n,i])=>{let a=Mc(n);return D(w(r),0,([n,r])=>!a.test(n)||Bp(e,t,i,r)&&t.AddKey(n))})}function Uf(e,t,n,r,i,a){return Jt(w(i.patternProperties),0,([i,o])=>{let s=`${n}/patternProperties/${i}`,c=Mc(i);return Jt(w(a),0,([n,i])=>{let a=`${r}/${n}`;return!c.test(n)||Vp(e,t,s,a,o,i)&&t.AddKey(n)})})}function Wf(e,t,n,r){return F(n.prefixItems.map((n,i)=>{let a=Mo(N(r,`length`),P(i)),o=zp(e,t,n,`${r}[${i}]`),s=t.AddIndex(P(i));return j(a,t.UseUnevaluated()?A(o,s):o)}))}function Gf(e,t,n,r){return E(r.length,0)||D(n.prefixItems,0,(n,i)=>sn(r.length,i)||Bp(e,t,n,r[i])&&t.AddIndex(i))}function Kf(e,t,n,r,i,a){return E(a.length,0)||Jt(i.prefixItems,0,(i,o)=>{let s=`${n}/prefixItems/${o}`,c=`${r}/${o}`;return sn(a.length,o)||Vp(e,t,s,c,i,a[o])&&t.AddIndex(o)})}function qf(e,t){return e.includes(t)||Bt().exactOptionalPropertyTypes}function Jf(e,t){return Eo(N(e,t))}function Yf(e,t){return v(e[t])}function Xf(e,t,n,r){let i=ac(n)?n.required:[];return F(w(n.properties).map(([n,a])=>{let o=ho(Ho(r,P(n))),s=zp(e,t,a,N(r,n)),c=t.AddKey(P(n)),l=t.UseUnevaluated()?A(s,c):s,u=i.includes(n)?l:j(o,l);return qf(i,n)?u:j(Jf(r,n),u)}))}function Zf(e,t,n,r){let i=ac(n)?n.required:[];return D(w(n.properties),0,([n,a])=>{let o=!C(r,n)||Bp(e,t,a,r[n])&&t.AddKey(n);return qf(i,n)?o:Yf(r,n)||o})}function Qf(e,t,n,r,i,a){let o=ac(i)?i.required:[];return Jt(w(i.properties),0,([i,s])=>{let c=`${n}/properties/${i}`,l=`${r}/${i}`,u=()=>!C(a,i)||Vp(e,t,c,l,s,a[i])&&t.AddKey(i);return qf(o,i)?u():Yf(a,i)||u()})}function $f(e,t,n,r){let[i,a]=[R(),R()];return Io(Vo(r),P(0),[i,a],B(e,t,n.propertyNames,i))}function ep(e,t,n,r){return D(b(r),0,(r,i)=>V(e,t,n.propertyNames,r))}function tp(e,t,n,r,i,a){let o=[];return Jt(b(a),0,(a,s)=>{let c=`${r}/${a}`,l=Hp(e,t,`${n}/propertyNames`,c,i.propertyNames,a);return l||o.push(a),l})||t.AddError({keyword:`propertyNames`,schemaPath:n,instancePath:r,params:{propertyNames:o}})}function np(e,t,n,r){return Qp(e,t,e.RecursiveRef(n)??!1,r)}function rp(e,t,n,r){let i=e.RecursiveRef(n)??!1;return L(i)&&V(e,t,i,r)}function ip(e,t,n,r,i,a){let o=e.RecursiveRef(i)??!1;return L(o)&&Hp(e,t,`#`,r,o,a)}function ap(e,t,n,r){let i=Go([`context`,`value`],Qp(e,t,n,`value`));return M(Go([`context`,`value`],Jo([Yo(`nextContext`,Ko(`CheckContext`,[])),Yo(`result`,M(i,[`nextContext`,`value`])),Xo(`result`,t.Merge(`[nextContext]`)),Zo(`result`)])),[`context`,r])}function op(e,t,n,r){return Qp(e,t,n,r)}function sp(e,t,n,r){let i=e.Ref(n)??!1;return t.UseUnevaluated()?ap(e,t,i,r):op(e,t,i,r)}function cp(e,t,n,r){let i=e.Ref(n)??!1,a=new gc,o=L(i)&&V(e,a,i,r);return o&&t.Merge([a]),o}function lp(e,t,n,r,i,a){let o=e.Ref(i)??!1,s=new _c,c=L(o)&&Hp(e,s,`#`,r,o,a);return c&&t.Merge([s]),c||s.GetErrors().forEach(e=>t.AddError(e)),c}function up(e,t,n,r){return F(n.required.map(e=>Ho(r,P(e))))}function dp(e,t,n,r){return D(n.required,0,e=>C(r,e))}function fp(e,t,n,r,i,a){let o=[];return Jt(i.required,0,e=>{let t=C(a,e);return t||o.push(e),t})||t.AddError({keyword:`required`,schemaPath:n,instancePath:r,params:{requiredProperties:o}})}function pp(e,t,n,r){return E(n,`object`)?So(r):E(n,`array`)?go(r):E(n,`boolean`)?vo(r):E(n,`integer`)?yo(r):E(n,`number`)?xo(r):E(n,`null`)?bo(r):E(n,`string`)?wo(r):E(n,`bigint`)?_o(r):E(n,`constructor`)?Oo(r):E(n,`function`)?Do(r):E(n,`symbol`)?To(r):E(n,`undefined`)||E(n,`void`)?Eo(r):P(!0)}function mp(e,t,n,r,i){return E(n,`object`)?We(i):E(n,`array`)?T(i):E(n,`boolean`)?wt(i):E(n,`integer`)?en(i):E(n,`number`)?S(i):E(n,`null`)?nn(i):E(n,`string`)?x(i):E(n,`bigint`)?Qt(i):E(n,`constructor`)?Dt(i):E(n,`function`)?jt(i):E(n,`symbol`)?It(i):E(n,`undefined`)?v(i):!E(n,`void`)||v(i)}function hp(e,t,n,r){return Qo(n.map(n=>pp(e,t,n,r)))}function gp(e,t,n,r,i){return at(n,n=>mp(e,t,n,r,i))}function _p(e,t,n,r){return T(n.type)?hp(e,t,n.type,r):pp(e,t,n.type,r)}function vp(e,t,n,r){return T(n.type)?gp(e,t,n.type,n,r):mp(e,t,n.type,n,r)}function yp(e,t,n,r,i,a){return(T(i.type)?gp(e,t,i.type,i,a):mp(e,t,i.type,i,a))||t.AddError({keyword:`type`,schemaPath:n,instancePath:r,params:{type:i.type}})}function bp(e,t,n,r){let[i,a]=[R(),R()],o=M(N(`context`,`GetIndices`),[]),s=M(N(`indices`,`has`),[i]),c=B(e,t,n.unevaluatedItems,a),l=M(N(`context`,`AddIndex`),[i]),u=Io(r,P(0),[a,i],A(j(s,c),l));return M(Go([`context`],Jo([Yo(`indices`,o),Zo(u)])),[`context`])}function xp(e,t,n,r){let i=t.GetIndices();return D(r,0,(r,a)=>(i.has(a)||V(e,t,n.unevaluatedItems,r))&&t.AddIndex(a))}function Sp(e,t,n,r,i,a){let o=t.GetIndices(),s=[];return Jt(a,0,(a,c)=>{let l=new _c,u=(o.has(c)||Hp(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 Cp(e,t,n,r){let[i,a]=[R(),R()],o=M(N(`context`,`GetKeys`),[]),s=M(N(`keys`,`has`),[i]),c=M(N(`context`,`AddKey`),[i]),l=B(e,t,n.unevaluatedProperties,a),u=Io(Bo(r),P(0),[`[${i}, ${a}]`,`_`],j(s,A(l,c)));return M(Go([`context`],Jo([Yo(`keys`,o),Zo(u)])),[`context`])}function wp(e,t,n,r){let i=t.GetKeys();return D(w(r),0,([r,a])=>i.has(r)||V(e,t,n.unevaluatedProperties,a)&&t.AddKey(r))}function Tp(e,t,n,r,i,a){let o=t.GetKeys(),s=[];return Jt(w(a),0,([a,c])=>{let l=new _c,u=o.has(a)||Hp(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 Ep(e){return!E(e.uniqueItems,!1)}function Dp(e,t,n,r){return Ep(n)?ko(N(Ko(`Set`,[M(N(r,`map`),[N(`Hashing`,`Hash`)])]),`size`),N(r,`length`)):P(!0)}function Op(e,t,n,r){if(!Ep(n))return!0;let i=new Set(r.map(it)).size,a=r.length;return E(i,a)}function kp(e,t,n,r,i,a){if(!Ep(i))return!0;let o=new Set,s=a.reduce((e,t,n)=>{let r=it(t);return o.has(r)?[...e,n]:(o.add(r),e)},[]);return E(s.length,0)||t.AddError({keyword:`uniqueItems`,schemaPath:n,instancePath:r,params:{duplicateItems:s}})}function Ap(e,t){return sc(e)&&(T(e.type)&&_t(e.type.length,0)&&D(e.type,0,e=>E(e,t))||E(e.type,t))}function jp(e){return Ap(e,`object`)}function Mp(e){return I(e)&&(gs(e)||Cs(e)||ws(e)||Ts(e)||$s(e)||Zs(e)||ec(e)||Ks(e)||Vs(e)||ac(e)||uc(e))}function Np(e){return Ap(e,`array`)}function Pp(e){return I(e)&&(hs(e)||Fs(e)||xs(e)||Rs(e)||zs(e)||Us(e)||Ws(e)||Qs(e)||lc(e)||cc(e))}function Fp(e){return Ap(e,`string`)}function Ip(e){return I(e)&&(Gs(e)||Bs(e)||Ms(e)||Xs(e))}function Lp(e){return Ap(e,`number`)||Ap(e,`bigint`)}function Rp(e){return I(e)&&(Hs(e)||Ls(e)||As(e)||js(e)||qs(e))}function zp(e,t,n,r){return t.UseUnevaluated()?A(A(t.Push(),B(e,t,n,r)),t.Pop()):B(e,t,n,r)}function B(e,t,n,r){e.Push(n);let i=[];if(ms(n))return $c(e,t,n,r);if(sc(n)&&i.push(_p(e,t,n,r)),Mp(n)){let a=[];ac(n)&&a.push(up(e,t,n,r)),gs(n)&&a.push(zc(e,t,n,r)),Cs(n)&&a.push(dl(e,t,n,r)),ws(n)&&a.push(ml(e,t,n,r)),Ts(n)&&a.push(_l(e,t,n,r)),Zs(n)&&a.push(Vf(e,t,n,r)),$s(n)&&a.push(Xf(e,t,n,r)),ec(n)&&a.push($f(e,t,n,r)),Ks(n)&&a.push(Sf(e,t,n,r)),Vs(n)&&a.push(rf(e,t,n,r));let o=F(a),s=j(ho(So(r)),o);i.push(jp(n)?o:s)}if(Pp(n)){let a=[];hs(n)&&a.push(kc(e,t,n,r)),xs(n)&&a.push(cl(e,t,n,r)),Fs(n)&&a.push(Vd(e,t,n,r)),Rs(n)&&a.push(Gd(e,t,n,r)),zs(n)&&a.push(Zd(e,t,n,r)),Us(n)&&a.push(uf(e,t,n,r)),Ws(n)&&a.push(gf(e,t,n,r)),Qs(n)&&a.push(Wf(e,t,n,r)),cc(n)&&a.push(Dp(e,t,n,r));let o=F(a),s=j(ho(go(r)),o);i.push(Np(n)?o:s)}if(Ip(n)){let a=[];Bs(n)&&a.push(ef(e,t,n,r)),Gs(n)&&a.push(yf(e,t,n,r)),Ms(n)&&a.push(Td(e,t,n,r)),Xs(n)&&a.push(Rf(e,t,n,r));let o=F(a),s=j(ho(wo(r)),o);i.push(Fp(n)?o:s)}if(Rp(n)){let a=[];As(n)&&a.push(El(e,t,n,r)),js(n)&&a.push(kl(e,t,n,r)),Ls(n)&&a.push(Jd(e,t,n,r)),Hs(n)&&a.push(pf(e,t,n,r)),qs(n)&&a.push(Tf(e,t,n,r));let o=F(a),s=j(ho(j(xo(r),_o(r))),o);i.push(Lp(n)?o:s)}ic(n)&&i.push(sp(e,t,n,r)),rc(n)&&i.push(np(e,t,n,r)),Ds(n)&&i.push(bl(e,t,n,r)),bs(n)&&i.push(nl(e,t,n,r)),ks(n)&&i.push(Cl(e,t,n,r)),Ps(n)&&i.push(Od(e,t,n,r)),Js(n)&&i.push(Af(e,t,n,r)),_s(n)&&i.push(Gc(e,t,n,r)),ys(n)&&i.push(Xc(e,t,n,r)),Ys(n)&&i.push(Ff(e,t,n,r)),lc(n)&&i.push(j(ho(go(r)),bp(e,t,n,r))),uc(n)&&i.push(j(ho(Co(r)),Cp(e,t,n,r))),ps(n)&&i.push(Sc(e,t,n,r));let a=F(i);return e.Pop(n),a}function Bp(e,t,n,r){return t.Push()&&V(e,t,n,r)&&t.Pop()}function V(e,t,n,r){e.Push(n);let i=ms(n)?el(e,t,n,r):(!sc(n)||vp(e,t,n,r))&&(!(y(r)&&!T(r))||(!ac(n)||dp(e,t,n,r))&&(!gs(n)||Bc(e,t,n,r))&&(!Cs(n)||fl(e,t,n,r))&&(!ws(n)||hl(e,t,n,r))&&(!Ts(n)||vl(e,t,n,r))&&(!Zs(n)||Hf(e,t,n,r))&&(!$s(n)||Zf(e,t,n,r))&&(!ec(n)||ep(e,t,n,r))&&(!Ks(n)||Cf(e,t,n,r))&&(!Vs(n)||af(e,t,n,r)))&&(!T(r)||(!hs(n)||Ac(e,t,n,r))&&(!xs(n)||ll(e,t,n,r))&&(!Fs(n)||Hd(e,t,n,r))&&(!Rs(n)||Kd(e,t,n,r))&&(!zs(n)||Qd(e,t,n,r))&&(!Us(n)||df(e,t,n,r))&&(!Ws(n)||_f(e,t,n,r))&&(!Qs(n)||Gf(e,t,n,r))&&(!cc(n)||Op(e,t,n,r)))&&(!x(r)||(!Bs(n)||tf(e,t,n,r))&&(!Gs(n)||bf(e,t,n,r))&&(!Ms(n)||Ed(e,t,n,r))&&(!Xs(n)||zf(e,t,n,r)))&&(!(S(r)||Qt(r))||(!As(n)||Dl(e,t,n,r))&&(!js(n)||Al(e,t,n,r))&&(!Ls(n)||Yd(e,t,n,r))&&(!Hs(n)||mf(e,t,n,r))&&(!qs(n)||Ef(e,t,n,r)))&&(!ic(n)||cp(e,t,n,r))&&(!rc(n)||rp(e,t,n,r))&&(!Ds(n)||xl(e,t,n,r))&&(!bs(n)||rl(e,t,n,r))&&(!ks(n)||wl(e,t,n,r))&&(!Ps(n)||kd(e,t,n,r))&&(!Js(n)||jf(e,t,n,r))&&(!_s(n)||Kc(e,t,n,r))&&(!ys(n)||Zc(e,t,n,r))&&(!Ys(n)||If(e,t,n,r))&&(!lc(n)||!T(r)||xp(e,t,n,r))&&(!uc(n)||!y(r)||wp(e,t,n,r))&&(!ps(n)||Cc(e,t,n,r));return e.Pop(n),i}function Vp(e,t,n,r,i,a){return t.Push()&&Hp(e,t,n,r,i,a)&&t.Pop()}function Hp(e,t,n,r,i,a){if(t.AtCapacity())return!1;e.Push(i);let o=ms(i)?tl(e,t,n,r,i,a):!!((!sc(i)||yp(e,t,n,r,i,a))&+(!(y(a)&&!T(a))||!!((!ac(i)||fp(e,t,n,r,i,a))&+(!gs(i)||Vc(e,t,n,r,i,a))&(!Cs(i)||pl(e,t,n,r,i,a))&(!ws(i)||gl(e,t,n,r,i,a))&(!Ts(i)||yl(e,t,n,r,i,a))&(!Zs(i)||Uf(e,t,n,r,i,a))&(!$s(i)||Qf(e,t,n,r,i,a))&(!ec(i)||tp(e,t,n,r,i,a))&(!Ks(i)||wf(e,t,n,r,i,a))&(!Vs(i)||of(e,t,n,r,i,a))))&(!T(a)||!!((!hs(i)||jc(e,t,n,r,i,a))&+(!xs(i)||ul(e,t,n,r,i,a))&(!Fs(i)||Ud(e,t,n,r,i,a))&(!Rs(i)||qd(e,t,n,r,i,a))&(!zs(i)||$d(e,t,n,r,i,a))&(!Us(i)||ff(e,t,n,r,i,a))&(!Ws(i)||vf(e,t,n,r,i,a))&(!Qs(i)||Kf(e,t,n,r,i,a))&(!cc(i)||kp(e,t,n,r,i,a))))&(!x(a)||!!((!Bs(i)||nf(e,t,n,r,i,a))&+(!Gs(i)||xf(e,t,n,r,i,a))&(!Ms(i)||Dd(e,t,n,r,i,a))&(!Xs(i)||Bf(e,t,n,r,i,a))))&(!(S(a)||Qt(a))||!!((!As(i)||Ol(e,t,n,r,i,a))&+(!js(i)||jl(e,t,n,r,i,a))&(!Ls(i)||Xd(e,t,n,r,i,a))&(!Hs(i)||hf(e,t,n,r,i,a))&(!qs(i)||Df(e,t,n,r,i,a))))&(!ic(i)||lp(e,t,n,r,i,a))&(!rc(i)||ip(e,t,n,r,i,a))&(!Ds(i)||Sl(e,t,n,r,i,a))&(!bs(i)||il(e,t,n,r,i,a))&(!ks(i)||Tl(e,t,n,r,i,a))&(!Ps(i)||Ad(e,t,n,r,i,a))&(!Js(i)||Mf(e,t,n,r,i,a))&(!_s(i)||qc(e,t,n,r,i,a))&(!ys(i)||Qc(e,t,n,r,i,a))&(!Ys(i)||Lf(e,t,n,r,i,a))&(!lc(i)||!T(a)||Sp(e,t,n,r,i,a))&(!uc(i)||!y(a)||Tp(e,t,n,r,i,a)))&&(!ps(i)||wc(e,t,n,r,i,a));return e.Pop(i),o}const Up=[0],Wp=new Map,Gp=new Map;function Kp(){return`${Up[0]++}`}function qp(e,t){Wp.has(e)||Wp.set(e,new Map);let n=Wp.get(e);if(n.has(t))return n.get(t);let r=Kp();return n.set(t,r),r}function Jp(e,t,n,r){return e.UseUnevaluated()?M(`check_${n}`,[`context`,r]):M(`check_${n}`,[r])}function Yp(e,t,n,r){let i=B(e,t,n,`value`);return t.UseUnevaluated()?Yo(`check_${r}`,Go([`context`,`value`],i)):Yo(`check_${r}`,Go([`value`],i))}function Xp(){Up[0]=0,Wp.clear(),Gp.clear()}function Zp(){return[...Gp.values()]}function Qp(e,t,n,r){let i=qp(n,e.LexicalBaseURL()),a=Jp(t,n,i,r);return Gp.has(i)?a:(Gp.set(i,``),Gp.set(i,Yp(e,t,n,i)),a)}function $p(e,t){return y(t)&&!Pt(e)?t[e]:void 0}function em(e,t){return e.reduce((e,t)=>$p(t,e),t)}function tm(e){if(E(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 nm(e,t){return em(tm(t),e)}const rm=`https://json-schema.org`;function im(e,t){if(y(e)&&Es(e)&&E(e.$dynamicAnchor,t))return e;if(y(e))for(let n of b(e)){let r=im(e[n],t);if(r)return r}}function am(e,t,n){if(E(e,n))return t.href;let r=I(e)&&Ns(e)?new URL(e.$id,t.href):t;if(T(e))for(let t of e){let e=am(t,r,n);if(!v(e))return e}else if(y(e))for(let t of b(e)){let i=am(e[t],r,n);if(!v(i))return i}}function om(e,t,n){if(E(e.$id,n.hash))return e;let r=new URL(n.href,t.href);if(E(t.pathname,r.pathname))return n.hash.startsWith(`#`)?lm(e,n):e}function sm(e,t,n){let r=new URL(`#${e.$anchor}`,t.href),i=new URL(n.href,t.href);return E(r.href,i.href)?e:void 0}function cm(e,t,n){let r=new URL(`#${e.$dynamicAnchor}`,t.href),i=new URL(n.href,t.href);return E(r.href,i.href)?e:void 0}function lm(e,t){if(t.href.endsWith(`#`))return e;if(!t.hash.startsWith(`#`))return;let n=decodeURIComponent(t.hash.slice(1));if(n.startsWith(`/`))return nm(e,n)}function um(e,t,n){if(Ns(e)){let r=om(e,t,n);if(!v(r))return r}if(vs(e)){let r=sm(e,t,n);if(!v(r))return r}if(Es(e)){let r=cm(e,t,n);if(!v(r))return r}return lm(e,n)}function dm(e,t,n){return e.reduce((e,r)=>{let i=mm(r,t,n);return v(i)?e:i},void 0)}function fm(e){return E(e,`const`)||E(e,`enum`)}function pm(e,t,n){return b(e).reduce((r,i)=>{if(fm(i))return r;let a=mm(e[i],t,n);return v(a)?r:a},void 0)}function mm(e,t,n){let r=I(e)&&Ns(e)?new URL(e.$id,t.href):t;if(I(e)){let t=um(e,r,n);if(!v(t))return t}if(T(e))return dm(e,r,n);if(y(e))return pm(e,r,n)}function hm(e,t,n){return am(e,new URL(t||`.`,rm),n)}function gm(e,t,n,r){let i=Tm(e,t,n,r,!1);return I(i)&&Ns(i)?i:void 0}function _m(e){return e.href.split(`#`)[0]}function vm(e,t){return C(e,t)?e[t]:void 0}function ym(e,t,n){return mm(e,t,n)}function bm(e,t,n){let r=_m(n);if(E(r,_m(t))||!C(e,r))return;let i=e[r],a=I(i)&&Ns(i)?new URL(i.$id,r):new URL(r);return E(n.hash,``)?i:mm(i,a,n)}function xm(e,t,n,r,i){if(!r.$ref.startsWith(`#`)||C(e,`$schema`))return;let a=hm(t,n,i);if(!(v(a)||E(a,n)))return{target:i,base:a,root:t}}function Sm(e,t,n){let r=e[t];if(I(r))return{target:n,base:t,root:r}}function Cm(e,t,n,r,i){let a=i?Sm(e.context,r,n):void 0;return v(a)?xm(e.root,e.lexicalSchema,e.referenceBase,t,n):a}function wm(e,t,n,r,i,a){if(Ns(i))return;let o=gm(e,t,n,r);if(!(!o||a.includes(o)))return{target:i,resource:o}}function Tm(e,t,n,r,i=!0){let a=new URL(n||`.`,rm),o=i&&Ns(t)?new URL(t.$id,a):a,s=new URL(r,o.href);return vm(e,r)??ym(t,o,s)??bm(e,o,s)}function Em(e,t,n,r,i,a){let o=new URL(n||`.`,rm),s=Tm(e,i.$dynamicRef.startsWith(`#`)?r:t,n,i.$dynamicRef,!1);if(v(s)){let e=new URL(i.$dynamicRef,o).hash;if(!e.startsWith(`#/`)&&e.startsWith(`#`)){let n=decodeURIComponent(e.slice(1));return a.find(e=>E(e.$dynamicAnchor,n))??im(t,n)}return}return!I(s)||!Es(s)||new URL(i.$dynamicRef,o).hash.startsWith(`#/`)?s:a.find(e=>E(e.$dynamicAnchor,s.$dynamicAnchor))??s}function Dm(e,t){let n=e.inRetrievedFrame?e.lexicalSchema:e.root,r=t.$ref.startsWith(`#`)?e.lexicalSchema:n,i=Tm(e.context,r,e.referenceBase,t.$ref,!1);if(!i||!I(i))return{schema:i};let a=new URL(t.$ref,e.referenceBase).href.split(`#`)[0],o=!E(a,e.resourceBase);return{schema:i,retrievedResource:Cm(e,t,i,a,o),resolvedResource:o?wm(e.context,e.root,e.referenceBase,a,i,e.ids):void 0}}function Om(e,t){let n=nc(e.lexicalSchema)?e.recursiveAnchors[0]:e.lexicalSchema;return Tm(e.context,n,e.lexicalBase,t.$recursiveRef,!1)}function km(e,t){return Em(e.context,e.root,e.lexicalBase,e.lexicalSchema,t,e.dynamicAnchors)}var H=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)},U,Am,jm,Mm,Nm,Pm,Fm,Im,Lm,Rm,zm,Bm,Vm,Hm,Um,Wm=class{constructor(e,t){U.add(this),this.context=e,this.schema=t,this.ids=[],this.resourceIds=[],this.anchors=[],this.recursiveAnchors=[],this.dynamicAnchors=[],this.retrievedResources=new Map,this.retrievedFrames=[],this.resolvedResources=new Map,this.pendingResource=!0}LexicalBaseURL(){return H(this,U,`m`,Mm).call(this,this.ids)}Push(e){if(!I(e))return;Ns(e)&&H(this,U,`m`,Bm).call(this,e),vs(e)&&this.anchors.push(e),nc(e)&&this.recursiveAnchors.push(e),Es(e)&&this.dynamicAnchors.push(e);let t=this.retrievedResources.get(e);t&&this.retrievedFrames.push({schema:t.root,base:t.base,idDepth:this.ids.length,resourceDepth:this.resourceIds.length})}Pop(e){I(e)&&(Ns(e)&&H(this,U,`m`,Vm).call(this,e),vs(e)&&this.anchors.pop(),nc(e)&&this.recursiveAnchors.pop(),Es(e)&&this.dynamicAnchors.pop(),this.retrievedResources.has(e)&&this.retrievedFrames.pop(),H(this,U,`m`,Um).call(this,e))}Ref(e){let t=Dm(H(this,U,`m`,Am).call(this),e);return H(this,U,`m`,jm).call(this,t),t.schema}RecursiveRef(e){let t=Om(H(this,U,`m`,Am).call(this),e);return t&&(this.pendingResource=!0),t}DynamicRef(e){let t=km(H(this,U,`m`,Am).call(this),e);return t&&(this.pendingResource=!0),t}};U=new WeakSet,Am=function(){return{context:this.context,root:this.schema,ids:this.ids,lexicalSchema:H(this,U,`m`,Fm).call(this),lexicalBase:this.LexicalBaseURL(),referenceBase:H(this,U,`m`,Pm).call(this),resourceBase:H(this,U,`m`,Nm).call(this),recursiveAnchors:this.recursiveAnchors,dynamicAnchors:this.dynamicAnchors,inRetrievedFrame:this.retrievedFrames.length>0}},jm=function(e){v(e.schema)||(this.pendingResource=!0),v(e.resolvedResource)||H(this,U,`m`,Hm).call(this,e.resolvedResource.target,e.resolvedResource.resource),v(e.retrievedResource)||this.retrievedResources.set(e.retrievedResource.target,{base:e.retrievedResource.base,root:e.retrievedResource.root})},Mm=function(e){let t=this.retrievedFrames[this.retrievedFrames.length-1],n=t?new URL(t.base):new URL(rm);return(t?e.slice(t.idDepth):e).reduce((e,t)=>new URL(t.$id,e),n).href},Nm=function(){let e=this.retrievedFrames[this.retrievedFrames.length-1];return e?this.resourceIds.slice(e.resourceDepth).reduce((e,t)=>new URL(t.$id,e),new URL(e.base)).href:H(this,U,`m`,Mm).call(this,this.resourceIds)},Pm=function(){if(this.retrievedFrames.length>0)return H(this,U,`m`,Nm).call(this);let e=this.ids[this.ids.length-1];return e&&!/^[A-Za-z][A-Za-z0-9+.-]*:/.test(e.$id)?this.LexicalBaseURL():H(this,U,`m`,Nm).call(this)},Fm=function(){let e=this.retrievedFrames[this.retrievedFrames.length-1];return e?this.ids.length>e.idDepth?this.ids[this.ids.length-1]:e.schema:this.ids.length>0?this.ids[this.ids.length-1]:this.schema},Im=function(e){e.forEach(e=>H(this,U,`m`,Rm).call(this,e,!1))},Lm=function(e){e.forEach(e=>H(this,U,`m`,zm).call(this,e,!1))},Rm=function e(t,n=!0){if(ms(t))return;if(T(t))return H(this,U,`m`,Im).call(this,t);if(!I(t))return;let r=t;if(!(!n&&Ns(r))){!n&&Es(r)&&this.dynamicAnchors.push(r);for(let t of b(r))H(this,U,`m`,e).call(this,r[t],!1)}},zm=function e(t,n=!0){if(ms(t))return;if(T(t))return H(this,U,`m`,Lm).call(this,t);if(!I(t))return;let r=t;if(!(!n&&Ns(r))){!n&&Es(r)&&this.dynamicAnchors.pop();for(let t of b(r))H(this,U,`m`,e).call(this,r[t],!1)}},Bm=function(e){this.ids.push(e);let t=this.pendingResource;this.pendingResource=!1,t&&this.resourceIds.push(e),H(this,U,`m`,Rm).call(this,e,!0)},Vm=function(e){this.ids.pop(),this.resourceIds.length>0&&E(this.resourceIds[this.resourceIds.length-1],e)&&this.resourceIds.pop(),H(this,U,`m`,zm).call(this,e,!0)},Hm=function(e,t){H(this,U,`m`,Bm).call(this,t),this.resolvedResources.set(e,t)},Um=function(e){if(!this.resolvedResources.has(e))return;let t=this.resolvedResources.get(e);H(this,U,`m`,Vm).call(this,t),this.resolvedResources.delete(e)};function Gm(e){return`${e.Functions().join(`;
878
- `)}; return (value) => { ${(e.UseUnevaluated()?[`const context = new CheckContext({}, {})`,`return ${e.Entry()}`]:[`return ${e.Entry()}`]).join(`; `)} }`}function Km(e,t){return as(`CheckContext`,`Guard`,`Format`,`Hashing`,e.External().identifier,t)(gc,Xe,wd,Ke,e.External().variables)}function qm(e){let t=new Wm(e.Context(),e.Schema()),n=new gc;return r=>V(t,n,e.Schema(),r)}function Jm(e,t){return is()?Km(e,t):qm(e)}var Ym=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)}},Xm=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=Gm(this),t=Jm(this,e);return new Ym(is(),e,t)}};function Zm(...e){let[t,n]=ts(e,{2:(e,t)=>[e,t],1:e=>[{},e]});bc(),Xp();let r=new Wm(t,n),i=new hc(mc(t,n)),a=Qp(r,i,n,`value`),o=Zp();return new Xm(t,n,xc(),o,a,i.UseUnevaluated())}function Qm(...e){let[t,n,r]=ts(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]}),i=new Wm(t,n),a=new _c,o=Hp(i,a,`#`,``,n,r),s=a.GetErrors(),c=cs();return[o,s.map(e=>({...e,message:c(e)}))]}function $m(...e){let[t,n,r]=ts(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return V(new Wm(t,n),new gc,n,r)}function eh(...e){let[t,n,r]=ts(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return $m(t,n,r)}function th(...e){let[t,n,r]=ts(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]}),[i,a]=Qm(t,n,r);return a}var nh=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 rh(e,t,n){return T(n)?n.map(n=>mh(e,t.items,n)):n}function ih(e,t,n){return mh({...e,...t.$defs},Ze(t.$ref),n)}function ah(e,t){let n=C(t,`unevaluatedProperties`)?{additionalProperties:t.unevaluatedProperties}:{},r=Gt(e,t),i=zt(r);return Je(i)?Mt(i,n):i}function oh(e,t,n){return mh(e,ah(e,t),n)}function sh(e){return C(e,`additionalProperties`)?e.additionalProperties:void 0}function ch(e,t,n){if(!y(n)||T(n))return n;let r=sh(t);for(let i of b(n)){if(C(t.properties,i)){n[i]=mh(e,t.properties[i],n[i]);continue}if(wt(r)&&E(r,!0)||Tt(r)&&eh(e,r,n[i])){n[i]=mh(e,r,n[i]);continue}delete n[i]}return n}function lh(e,t,n){if(!y(n))return n;let r=sh(t),[i,a]=[new RegExp(Ct(t)),Et(t)];for(let t of b(n)){if(i.test(t)){n[t]=mh(e,a,n[t]);continue}if(wt(r)&&E(r,!0)||Tt(r)&&eh(e,r,n[t])){n[t]=mh(e,r,n[t]);continue}delete n[t]}return n}function uh(e,t,n){return C(e,t.$ref)?mh(e,e[t.$ref],n):n}function dh(e,t,n){if(!T(n))return n;let r=Math.min(n.length,t.items.length);for(let i=0;i<r;i++)n[i]=mh(e,t.items[i],n[i]);return _t(n.length,r)?n.slice(0,r):n}function fh(e){return Xt(e)}function ph(e,t,n){for(let r of t.anyOf){let t=mh(e,r,fh(n));if(eh(e,r,t))return t}return n}function mh(e,t,n){return ot(t)?rh(e,t,n):Be(t)?ih(e,t,n):st(t)?oh(e,t,n):Je(t)?ch(e,t,n):St(t)?lh(e,t,n):Wt(t)?uh(e,t,n):Ht(t)?dh(e,t,n):Ot(t)?ph(e,t,n):n}function hh(e,t){for(let n of es.Keys(e))es.HasPropertyKey(t,n)||(t[n]=e[n]);return t}function gh(e){let t={};for(let n of es.Keys(e))t[n]=yh(e[n]);return t}function _h(e){return vh(Yt(e))}function vh(e){return e.map(e=>yh(e))}function yh(e){return hh(e,ot(e)?Re(yh(e.items),ht(e)):st(e)?$e(vh(e.allOf)):Ot(e)?gt(_h(e.anyOf)):Je(e)?ut(gh(e.properties)):St(e)?Lt(Zt(e),yh(Et(e))):Ht(e)?Rt(vh(e.items)):e)}function bh(e){return yh(e)}function xh(...e){let[t,n,r]=ts(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return mh(t,Bt().unionPrioritySort?bh(n):n,r)}function Sh(e){return y(e)&&C(e,`value`)}function W(e){return{value:e}}function Ch(e){return T(e)?W(e):W([e])}function wh(e){return E(e,!0)?W(BigInt(1)):W(BigInt(0))}const Th=/^-?(0|[1-9]\d*)n$/,Eh=/^-?(0|[1-9]\d*)\.\d+$/,Dh=/^-?(0|[1-9]\d*)$/;function Oh(e){return Th.test(e)}function kh(e){return Eh.test(e)}function Ah(e){return Dh.test(e)}function jh(e){let t=e.toLowerCase();return Oh(e)?W(BigInt(e.slice(0,e.length-1))):kh(e)?W(BigInt(e.split(`.`)[0])):Ah(e)?W(BigInt(e)):E(t,`false`)?W(BigInt(0)):E(t,`true`)?W(BigInt(1)):void 0}function Mh(e){return Qt(e)?W(e):wt(e)?wh(e):S(e)?W(BigInt(Math.trunc(e))):nn(e)?W(BigInt(0)):x(e)?jh(e):v(e)?W(BigInt(0)):void 0}function Nh(e){return E(e,BigInt(0))?W(!1):E(e,BigInt(1))?W(!0):void 0}function Ph(e){return E(e,0)?W(!1):E(e,1)?W(!0):void 0}function Fh(e){return E(e.toLowerCase(),`false`)?W(!1):E(e.toLowerCase(),`true`)?W(!0):E(e,`0`)?W(!1):E(e,`1`)?W(!0):void 0}function Ih(e){return Qt(e)?Nh(e):wt(e)?W(e):S(e)?Ph(e):nn(e)?W(!1):x(e)?Fh(e):v(e)?W(!1):void 0}function Lh(e){return E(e,BigInt(0))?W(null):void 0}function Rh(e){return E(e,!1)?W(null):void 0}function zh(e){return E(e,0)?W(null):void 0}function Bh(e){let t=e.toLowerCase();return E(t,`undefined`)||E(t,`null`)||E(e,``)||E(e,`0`)?W(null):void 0}function Vh(e){return Qt(e)?Lh(e):wt(e)?Rh(e):S(e)?zh(e):nn(e)?W(null):x(e)?Bh(e):v(e)?W(null):void 0}const Hh=BigInt(2**53-1),Uh=BigInt(-(2**53-1));function Wh(e){return e<=Hh&&e>=Uh?W(Number(e)):void 0}function Gh(e){return W(+!!e)}function Kh(e){let t=+e;if(S(t))return W(t);let n=e.toLowerCase();if(E(n,`false`))return W(0);if(E(n,`true`))return W(1);let r=Mh(e);if(Sh(r))return r.value<=Hh&&r.value>=Uh?W(Number(r.value)):void 0}function qh(e){return Qt(e)?Wh(e):wt(e)?Gh(e):S(e)?W(e):nn(e)?W(0):x(e)?Kh(e):v(e)?W(0):void 0}function Jh(e){return Qt(e)||wt(e)||S(e)?W(e.toString()):nn(e)?W(`null`):x(e)?W(e):v(e)?W(``):void 0}function Yh(e){return E(e,BigInt(0))?W(void 0):void 0}function Xh(e){return E(e,!1)?W(void 0):void 0}function Zh(e){return E(e,0)?W(void 0):void 0}function Qh(e){let t=e.toLowerCase();return E(t,`undefined`)||E(t,`null`)||E(e,``)||E(e,`0`)?W(void 0):void 0}function $h(e){return Qt(e)?Yh(e):wt(e)?Xh(e):S(e)?Zh(e):nn(e)?W(void 0):x(e)?Qh(e):v(e)?W(e):void 0}function eg(e,t,n){return Ch(n).value.map(n=>Dg(e,t.items,n))}function tg(e,t,n){let r=Mh(n);return Sh(r)?r.value:n}function ng(e,t,n){let r=Ih(n);return Sh(r)?r.value:n}function rg(e,t,n){return Dg({...e,...t.$defs},Ze(t.$ref),n)}function ig(e,t,n){return Dg(e,zt(t),n)}function ag(e,t,n){let r=qh(n);return Sh(r)?Math.trunc(r.value):n}function og(e,t,n){let r=Gt(e,t);return Dg(e,zt(r),n)}function sg(e,t,n){let r=Mh(n);return Sh(r)&&E(t.const,r.value)?r.value:n}function cg(e,t,n){let r=Ih(n);return Sh(r)&&E(t.const,r.value)?r.value:n}function lg(e,t,n){let r=qh(n);return Sh(r)&&E(t.const,r.value)?r.value:n}function ug(e,t,n){let r=Jh(n);return Sh(r)&&E(t.const,r.value)?r.value:n}function dg(e,t,n){return E(t.const,n)?n:lt(t)?sg(e,t,n):Ge(t)?cg(e,t,n):Ue(t)?lg(e,t,n):rt(t)?ug(e,t,n):Ye()}function fg(e,t,n){let r=Vh(n);return Sh(r)?r.value:n}function pg(e,t,n){let r=qh(n);return Sh(r)?r.value:n}function mg(e,t,n,r){let i=b(r);for(let[a,o]of t)for(let t of i)a.test(t)||(r[t]=Dg(e,n,r[t]));return r}function hg(e,t,n){return ft(e)&&v(n[t])}function gg(e,t,n){let r=yt(t.properties),i=b(n);for(let[t,a]of r)for(let r of i)!t.test(r)||hg(a,r,n)||(n[r]=Dg(e,a,n[r]));return C(t,`additionalProperties`)&&y(t.additionalProperties)?mg(e,r,t.additionalProperties,n):n}function _g(e,t,n){return We(n)?gg(e,t,n):n}function vg(e,t,n){let r=yt(t.patternProperties),i=b(n);for(let[t,a]of r)for(let r of i)t.test(r)&&(n[r]=Dg(e,a,n[r]));return C(t,`additionalProperties`)&&y(t.additionalProperties)?mg(e,r,t.additionalProperties,n):n}function yg(e,t,n){return We(n)?vg(e,t,n):n}function bg(e,t,n){return C(e,t.$ref)?Dg(e,e[t.$ref],n):n}function xg(e,t,n){let r=Jh(n);return Sh(r)?r.value:n}function Sg(e,t,n){return Dg(e,zt(t),n)}function Cg(e,t,n){if(!T(n))return n;for(let r=0;r<Math.min(t.items.length,n.length);r++)n[r]=Dg(e,t.items[r],n[r]);return n}function wg(e,t,n){let r=$h(n);return Sh(r)?r.value:n}function Tg(e,t,n){if(t.anyOf.some(t=>eh(e,t,n)))return n;let r=t.anyOf.map(t=>Dg(e,t,fh(n))).find(n=>eh(e,t,n));return v(r)?n:r}function Eg(e,t,n){return Sh($h(n))?void 0:n}function Dg(e,t,n){return ot(t)?eg(e,t,n):et(t)?tg(e,t,n):Nt(t)?ng(e,t,n):Be(t)?rg(e,t,n):cn(t)?ig(e,t,n):ze(t)?ag(e,t,n):st(t)?og(e,t,n):tn(t)?dg(e,t,n):Ve(t)?fg(e,t,n):rn(t)?pg(e,t,n):Je(t)?_g(e,t,n):St(t)?yg(e,t,n):Wt(t)?bg(e,t,n):$t(t)?xg(e,t,n):vt(t)?Sg(e,t,n):Ht(t)?Cg(e,t,n):qt(t)?wg(e,t,n):Ot(t)?Tg(e,t,n):Vt(t)?Eg(e,t,n):n}function Og(...e){let[t,n,r]=ts(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return Dg(t,n,r)}function kg(e,t,n){if(!T(n))return n;for(let r=0;r<n.length;r++)n[r]=Rg(e,t.items,n[r]);return n}function Ag(e,t,n){return Rg({...e,...t.$defs},Ze(t.$ref),n)}function jg(e,t){return v(t)?jt(e.default)?e.default():fh(e.default):t}function Mg(e,t,n){let r=Gt(e,t);return Rg(e,zt(r),n)}function Ng(e,t,n){if(!y(n))return n;let r=b(t.properties);for(let i of r){let r=Rg(e,t.properties[i],n[i]);v(r)&&(ft(t.properties[i])||!C(t.properties[i],`default`))||(n[i]=r)}if(!gs(t)||wt(t.additionalProperties))return n;for(let i of b(n))r.includes(i)||(n[i]=Rg(e,t.additionalProperties,n[i]));return n}function Pg(e,t,n){if(!y(n))return n;let[r,i]=[new RegExp(Ct(t)),Et(t)];for(let t of b(n))r.test(t)&&Ss(i)&&(n[t]=Rg(e,i,n[t]));if(!gs(t))return n;for(let i of b(n))r.test(i)||(n[i]=Rg(e,t.additionalProperties,n[i]));return n}function Fg(e,t,n){return C(e,t.$ref)?Rg(e,e[t.$ref],n):n}function Ig(e,t,n){if(!T(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]=Rg(e,r[t],n[t]));return n}function Lg(e,t,n){for(let r of t.anyOf){let t=Rg(e,r,fh(n));if(eh(e,r,t))return t}return n}function Rg(e,t,n){let r=Ss(t)?jg(t,n):n;return ot(t)?kg(e,t,r):Be(t)?Ag(e,t,r):st(t)?Mg(e,t,r):Je(t)?Ng(e,t,r):St(t)?Pg(e,t,r):Wt(t)?Fg(e,t,r):Ht(t)?Ig(e,t,r):Ot(t)?Lg(e,t,r):r}function zg(...e){let[t,n,r]=ts(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return Rg(t,n,r)}function Bg(e){return(...t)=>{let[n,r,i]=ts(t,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return e.reduce((e,t)=>t(n,r,e),i)}}function Vg(e,t,n){return t[`~codec`].decode(n)}function Hg(e,t,n){return t[`~codec`].encode(n)}function G(e,t,n,r){return nt(n)?E(e,`Decode`)?Vg(t,n,r):Hg(t,n,r):r}function Ug(e,t,n,r){if(!T(r))return r;for(let i=0;i<r.length;i++)r[i]=f_(e,t,n.items,r[i]);return G(e,t,n,r)}function Wg(e,t,n,r){let i=G(e,t,n,r);if(!T(i))return i;for(let r=0;r<i.length;r++)i[r]=f_(e,t,n.items,i[r]);return i}function Gg(e,t,n,r){return E(e,`Decode`)?Ug(e,t,n,r):Wg(e,t,n,r)}function Kg(e,t,n,r){return r=f_(e,{...t,...n.$defs},Ze(n.$ref),r),G(e,t,n,r)}function qg(e){return e.reduce((e,t)=>({...e,...t}),{})}function Jg(e,t){for(let n of t)if(!Ut(e,n))return n;return e}function Yg(e,t,n,r){if(E(n.allOf.length,0))return G(e,t,n,r);let i=n.allOf.map(n=>f_(e,t,n,xh(n,fh(r))));return G(e,t,n,i.every(e=>y(e))?qg(i):Jg(r,i))}function Xg(e,t,n,r){if(E(n.allOf.length,0))return G(e,t,n,r);let i=G(e,t,n,r),a=n.allOf.map(n=>f_(e,t,n,xh(n,fh(i))));return a.every(e=>y(e))?qg(a):Jg(i,a)}function Zg(e,t,n,r){return E(e,`Decode`)?Yg(e,t,n,r):Xg(e,t,n,r)}function Qg(e,t,n,r){if(!We(r))return r;for(let i of b(n.properties))!C(r,i)||hg(n.properties[i],i,r)||(r[i]=f_(e,t,n.properties[i],r[i]));return G(e,t,n,r)}function $g(e,t,n,r){let i=G(e,t,n,r);if(!We(i))return i;for(let r of b(n.properties))!C(i,r)||hg(n.properties[r],r,i)||(i[r]=f_(e,t,n.properties[r],i[r]));return i}function e_(e,t,n,r){return E(e,`Decode`)?Qg(e,t,n,r):$g(e,t,n,r)}function t_(e,t,n,r){if(!We(r))return r;let i=new RegExp(Ct(n));for(let a of b(r))i.test(a)&&(r[a]=f_(e,t,Et(n),r[a]));return G(e,t,n,r)}function n_(e,t,n,r){let i=G(e,t,n,r);if(!We(i))return i;let a=new RegExp(Ct(n));for(let r of b(i))a.test(r)&&(i[r]=f_(e,t,Et(n),i[r]));return i}function r_(e,t,n,r){return E(e,`Decode`)?t_(e,t,n,r):n_(e,t,n,r)}function i_(e,t,n,r){return C(t,n.$ref)?f_(e,t,t[n.$ref],r):r}function a_(e,t,n,r){return E(e,`Decode`)?G(e,t,n,i_(e,t,n,r)):i_(e,t,n,G(e,t,n,r))}function o_(e,t,n,r){if(!T(r))return r;for(let i=0;i<Math.min(n.items.length,r.length);i++)r[i]=f_(e,t,n.items[i],r[i]);return G(e,t,n,r)}function s_(e,t,n,r){let i=G(e,t,n,r);if(!T(i))return r;for(let r=0;r<Math.min(n.items.length,i.length);r++)i[r]=f_(e,t,n.items[r],i[r]);return i}function c_(e,t,n,r){return E(e,`Decode`)?o_(e,t,n,r):s_(e,t,n,r)}function l_(e,t,n,r){for(let i of n.anyOf)if(eh(t,i,r))return G(e,t,n,f_(e,t,i,r));return r}function u_(e,t,n,r){let i=G(e,t,n,r);for(let r of n.anyOf){let n=f_(e,t,r,fh(i));if(eh(t,r,n))return n}return i}function d_(e,t,n,r){return E(e,`Decode`)?l_(e,t,n,r):u_(e,t,n,r)}function f_(e,t,n,r){return ot(n)?Gg(e,t,n,r):Be(n)?Kg(e,t,n,r):st(n)?Zg(e,t,n,r):Je(n)?e_(e,t,n,r):St(n)?r_(e,t,n,r):Wt(n)?a_(e,t,n,r):Ht(n)?c_(e,t,n,r):Ot(n)?d_(e,t,n,r):G(e,t,n,r)}var p_=class extends nh{constructor(e,t){super(`Decode`,e,t)}};function m_(e,t,n){if(!eh(e,t,n))throw new p_(n,th(e,t,n));return n}function h_(e,t,n){return f_(`Decode`,e,Bt().unionPrioritySort?bh(t):t,n)}const g_=Bg([(e,t,n)=>fh(n),(e,t,n)=>zg(e,t,n),(e,t,n)=>Og(e,t,n),(e,t,n)=>xh(e,t,n),(e,t,n)=>m_(e,t,n),(e,t,n)=>h_(e,t,n)]);function __(...e){let[t,n,r]=ts(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return g_(t,n,r)}var v_=class extends nh{constructor(e,t){super(`Encode`,e,t)}};function y_(e,t,n){if(!eh(e,t,n))throw new v_(n,th(e,t,n));return n}function b_(e,t,n){return f_(`Encode`,e,Bt().unionPrioritySort?bh(t):t,n)}const x_=Bg([(e,t,n)=>fh(n),(e,t,n)=>b_(e,t,n),(e,t,n)=>zg(e,t,n),(e,t,n)=>Og(e,t,n),(e,t,n)=>xh(e,t,n),(e,t,n)=>y_(e,t,n)]);function S_(...e){let[t,n,r]=ts(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return x_(t,n,r)}function C_(e,t){return nt(t)||j_(e,t.items)}function w_(e,t){return nt(t)||O_({...e,...t.$defs},Ze(t.$ref))}function T_(e,t){return nt(t)||t.allOf.some(t=>j_(e,t))}function E_(e,t){return nt(t)||b(t.properties).some(n=>j_(e,t.properties[n]))}function D_(e,t){return nt(t)||j_(e,Et(t))}function O_(e,t){return!M_.has(t.$ref)&&(M_.add(t.$ref),nt(t)||C(e,t.$ref)&&j_(e,e[t.$ref]))}function k_(e,t){return nt(t)||t.items.some(t=>j_(e,t))}function A_(e,t){return nt(t)||t.anyOf.some(t=>j_(e,t))}function j_(e,t){return ot(t)?C_(e,t):Be(t)?w_(e,t):st(t)?T_(e,t):Je(t)?E_(e,t):St(t)?D_(e,t):Wt(t)?O_(e,t):Ht(t)?k_(e,t):Ot(t)?A_(e,t):nt(t)}const M_=new Set;function N_(...e){let[t,n]=ts(e,{2:(e,t)=>[e,t],1:e=>[{},e]});return M_.clear(),j_(t,n)}var P_=class extends Error{constructor(e,t){super(t),this.type=e}};function F_(e,t){return jt(t.default)?t.default(t):y(t.default)?fh(t.default):t.default}function I_(e,t){if(cc(t)&&!Ss(t))throw new P_(t,`Arrays with uniqueItems constraints must specify a default annotation`);let n=Ws(t)?t.minItems:0;return Array.from({length:n},()=>rv(e,t.items))}function L_(e,t){return js(t)?BigInt(t.exclusiveMinimum)+BigInt(1):Hs(t)?BigInt(t.minimum):BigInt(0)}function R_(e,t){return!1}function z_(e,t){let n=rv(e,t.instanceType);return class{constructor(){Object.assign(this,n)}}}function B_(e,t){return rv({...e,...t.$defs},Ze(t.$ref))}function V_(e,t){return rv(e,zt(t))}function H_(e,t){let n=rv(e,t.returnType);return()=>n}function U_(e,t){return js(t)&&S(t.exclusiveMinimum)?t.exclusiveMinimum+1:Hs(t)?t.minimum:0}function W_(e,t){let n=Gt(e,t);return rv(e,zt(n))}function G_(e,t){return t.const}function K_(e,t){throw new P_(t,`Cannot create TNever types`)}function q_(e,t){return null}function J_(e,t){return js(t)&&S(t.exclusiveMinimum)?t.exclusiveMinimum+1:Hs(t)?t.minimum:0}function Y_(e,t){return(v(t.required)?[]:t.required).reduce((n,r)=>({...n,[r]:rv(e,t.properties[r])}),{})}function X_(e,t){if(Ks(t)&&!Ss(t))throw new P_(t,`Record with the minProperties constraint must have a default annotation`);return{}}function Z_(e,t){return C(e,t.$ref)?rv(e,e[t.$ref]):(()=>{throw new P_(t,`Unable to deref Ref`)})()}function Q_(e,t){if((Xs(t)||Ms(t))&&!Ss(t))throw Error(`Strings with format or pattern constraints must specify default`);let n=Gs(t)?t.minLength:0;return``.padEnd(n)}function $_(e,t){return Symbol()}function ev(e,t){let n=At(t.pattern);if($t(n))throw new P_(t,`Unable to create TemplateLiteral due to infinite type expansion`);return rv(e,n)}function tv(e,t){return Array.from({length:t.minItems},(n,r)=>rv(e,t.items[r]))}function nv(e,t){if(E(t.anyOf.length,0))throw Error(`Unable to create Union with no variants`);return rv(e,t.anyOf[0])}function rv(e,t){return Ss(t)?F_(e,t):ot(t)?I_(e,t):et(t)?L_(e,t):Nt(t)?R_(e,t):pt(t)?z_(e,t):Be(t)?B_(e,t):cn(t)?V_(e,t):mt(t)?H_(e,t):ze(t)?U_(e,t):st(t)?W_(e,t):tn(t)?G_(e,t):Qe(t)?K_(e,t):Ve(t)?q_(e,t):rn(t)?J_(e,t):Je(t)?Y_(e,t):St(t)?X_(e,t):Wt(t)?Z_(e,t):$t(t)?Q_(e,t):bt(t)?$_(e,t):vt(t)?ev(e,t):Ht(t)?tv(e,t):qt(t)?void 0:Ot(t)?nv(e,t):(Vt(t),void 0)}function iv(...e){let[t,n]=ts(e,{2:(e,t)=>[e,t],1:e=>[{},e]});return rv(t,n)}var av=class extends nh{constructor(e,t){super(`Parse`,e,t)}};function ov(e,t,n){if(!eh(e,t,n))throw new av(n,th(e,t,n));return n}const sv=Bg([(e,t,n)=>fh(n),(e,t,n)=>zg(e,t,n),(e,t,n)=>Og(e,t,n),(e,t,n)=>xh(e,t,n),(e,t,n)=>ov(e,t,n)]),cv=ut({type:Ft(`insert`),path:on(),value:dt()}),lv=Object({type:Ft(`update`),path:on(),value:dt()}),uv=ut({type:Ft(`delete`),path:on()});gt([cv,lv,uv]);var dv=class{constructor(e,t){this.hasCodec=N_(e,t),this.buildResult=Zm(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(Bt().correctiveParse)return sv(this.Context(),this.Type(),e);throw new av(e,this.Errors(e))}Errors(e){return this.IsAccelerated()&&this.Check(e)?[]:th(this.Context(),this.Type(),e)}Clean(e){return xh(this.Context(),this.Type(),e)}Convert(e){return Og(this.Context(),this.Type(),e)}Create(){return iv(this.Context(),this.Type())}Default(e){return zg(this.Context(),this.Type(),e)}Decode(e){return this.hasCodec?__(this.Context(),this.Type(),e):this.Parse(e)}Encode(e){return this.hasCodec?S_(this.Context(),this.Type(),e):this.Parse(e)}};function fv(...e){let[t,n]=ts(e,{2:(e,t)=>[e,t],1:e=>[{},e]});return new dv(t,n)}const pv=new WeakMap,mv=Symbol.for(`TypeBox.Kind`);function hv(e){return typeof e.type==`string`?[e.type]:Array.isArray(e.type)?e.type.filter(e=>typeof e==`string`):[]}function gv(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 _v(e){try{return wv(e)}catch{return}}function vv(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 yv(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]=Sv(e[t],r));if(t.additionalProperties&&typeof t.additionalProperties==`object`)for(let[n,i]of Object.entries(e))r.has(n)||(e[n]=Sv(i,t.additionalProperties))}function bv(e,t){if(Array.isArray(t.items)){for(let n=0;n<e.length;n++){let r=t.items[n];r&&(e[n]=Sv(e[n],r))}return}if(t.items&&typeof t.items==`object`)for(let n=0;n<e.length;n++)e[n]=Sv(e[n],t.items)}function xv(e,t){for(let n of t)if(_v(n)?.Check(e))return e;for(let n of t){let t=Sv(structuredClone(e),n);if(_v(n)?.Check(t))return t}return e}function Sv(e,t){let n=e;if(Array.isArray(t.allOf))for(let e of t.allOf)n=Sv(n,e);Array.isArray(t.anyOf)&&(n=xv(n,t.anyOf)),Array.isArray(t.oneOf)&&(n=xv(n,t.oneOf));let r=hv(t),i=r.length>1&&r.some(e=>gv(n,e));if(r.length>0&&!i)for(let e of r){let t=vv(n,e);if(t!==n){n=t;break}}return r.includes(`object`)&&typeof n==`object`&&n&&!Array.isArray(n)&&yv(n,t),r.includes(`array`)&&Array.isArray(n)&&bv(n,t),n}function Cv(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&&Cv(e[n],r)}else if(t.items)for(let n of e)Cv(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`&&_v(i)?.Check(null)===!1?delete n[e]:Cv(n[e],i))}function wv(e){let t=e,n=pv.get(t);if(n)return n;let r=fv(e);return pv.set(t,r),r}function Tv(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 Ev(e,t){let n=structuredClone(t.arguments);Cv(n,e.parameters),Og(e.parameters,n);let r=wv(e.parameters);if(!Object.getOwnPropertySymbols(e.parameters).includes(mv)){let t=Sv(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=>` - ${Tv(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 Dv(){throw Error(`No default stream function configured. Pass streamFn explicitly or call setDefaultStreamFn().`)}async function Ov(e,t,n,r,i,a){let o=jv(t,e),s=[...o],c={...t,messages:[...t.messages,...o]};await r({type:`agent_start`}),await r({type:`turn_start`});for(let e of o)await r({type:`message_start`,message:e}),await r({type:`message_end`,message:e});return await Av(c,s,n,i,r,a??Dv()),s}async function kv(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 Av(o,a,t,r,n,i??Dv()),a}async function Av(e,t,n,r,i,a){let o=e,s=n,c,l=!1,u=await s.getSteeringMessages?.()||[];for(;;){let e=!0;for(;e||u.length>0;){let n=[];if(c){let e=await s.prepareNextTurn?.(c);e&&(o=e.context??o,n=e.messages??[],s={...s,model:e.model??s.model,reasoning:e.thinkingLevel===void 0?s.reasoning:e.thinkingLevel===`off`?void 0:e.thinkingLevel}),u.length===0&&(u=await s.getSteeringMessages?.()||[]),await i({type:`turn_start`})}for(let e of jv(o,[...n,...u]))await i({type:`message_start`,message:e}),await i({type:`message_end`,message:e}),o.messages.push(e),t.push(e);u=[];let d=await s.prepareRequest?.({context:o,model:s.model,thinkingLevel:s.reasoning??`off`},r);d&&(o=d.context??o,s={...s,model:d.model??s.model,reasoning:d.thinkingLevel===void 0?s.reasoning:d.thinkingLevel===`off`?void 0:d.thinkingLevel});let f=await Pv(o,s,r,i,a);if(t.push(f),f.stopReason===`error`||f.stopReason===`aborted`){c={message:f,toolResults:[],context:o,newMessages:t},await s.finishTurn?.(c,r),await i({type:`turn_end`,message:f,toolResults:[]}),await i({type:`agent_end`,messages:t});return}let p=f.content.filter(e=>e.type===`toolCall`),m=[];if(e=!1,p.length>0){let n=f.stopReason===`length`?await Fv(p,i):await Iv(o,f,s,r,i);m.push(...n.messages),e=!n.terminate;for(let e of m)o.messages.push(e),t.push(e)}c={message:f,toolResults:m,context:o,newMessages:t};let h=await s.finishTurn?.(c,r);if(await i({type:`turn_end`,message:f,toolResults:m}),h?.action===`end`){await i({type:`agent_end`,messages:t});return}l=h?.action===`continue`,u=await s.getSteeringMessages?.()||[],(e||u.length>0)&&(l=!1)}let n=await s.getFollowUpMessages?.()||[];if(n.length>0){l=!1,u=n;continue}if(l){l=!1;continue}break}await i({type:`agent_end`,messages:t})}function jv(e,t){let n=-1;for(let e=t.length-1;e>=0;e--)if(t[e].role===`system`){n=e;break}let r=t[n],i=r?t.map((e,t)=>t===n?Nv(r,Mv):e):t,a=pn(hn([...e.messages,...i]),(e.tools??[]).map(gn)),o=a.toolsAdded.length===0&&a.toolsRemoved.length===0;if(r)return o&&!r.toolsAdded?.length&&!r.toolsRemoved?.length?t:i.map((e,t)=>t===n?Nv(r,a):e);if(o)return t;let s=Nv({role:`system`,content:``,timestamp:Date.now()},a),c=t.findIndex(e=>e.role!==`system`),l=c===-1?t.length:c;return[...t.slice(0,l),s,...t.slice(l)]}const Mv={toolsAdded:[],toolsRemoved:[]};function Nv(e,{toolsAdded:t,toolsRemoved:n}){let{toolsAdded:r,toolsRemoved:i,...a}=e;return{...a,...t.length>0?{toolsAdded:t}:{},...n.length>0?{toolsRemoved:n}:{}}}async function Pv(e,t,n,r,i){let a=e.messages;t.transformContext&&(a=await t.transformContext(a,n));let o=await t.convertToLlm(a),s=dn({messages:o}),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=async()=>Object.assign(await l.result(),{thinkingLevel:t.reasoning??`off`}),d=null,f=!1;for await(let t of l)switch(t.type){case`start`:d=t.partial,e.messages.push(d),f=!0,await r({type:`message_start`,message:{...d}});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`:d&&(d=t.partial,e.messages[e.messages.length-1]=d,await r({type:`message_update`,assistantMessageEvent:t,message:{...d}}));break;case`done`:case`error`:{let t=await u();return f?e.messages[e.messages.length-1]=t:e.messages.push(t),f||await r({type:`message_start`,message:{...t}}),await r({type:`message_end`,message:t}),t}}let p=await u();return f?e.messages[e.messages.length-1]=p:(e.messages.push(p),await r({type:`message_start`,message:{...p}})),await r({type:`message_end`,message:p}),p}async function Fv(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:Gv(`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 Kv(e,t);let i=qv(e);await Jv(i,t),n.push(i)}return{messages:n,terminate:!1}}async function Iv(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?Lv(e,t,a,n,r,i):Rv(e,t,a,n,r,i)}async function Lv(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 Vv(e,t,c,r,i),l;l=n.kind===`immediate`?{toolCall:c,result:n.result,isError:n.isError}:await Wv(e,t,n,await Uv(n,i,Hv(c,a)),r,i),await Kv(l,a);let u=qv(l);if(await Jv(u,a),o.push(l),s.push(u),i?.aborted)break}return{messages:s,terminate:zv(o)}}async function Rv(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 Vv(e,t,s,r,i);if(n.kind===`immediate`){let e={toolCall:s,result:n.result,isError:n.isError};if(await Kv(e,a),o.push(e),i?.aborted)break;continue}if(o.push(async()=>{if(i?.aborted){let e={toolCall:s,result:Gv(`Operation aborted`),isError:!0};return await Kv(e,a),e}let o=await Uv(n,i,Hv(s,a)),c=await Wv(e,t,n,o,r,i);return await Kv(c,a),c}),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=qv(e);await Jv(t,a),c.push(t)}return{messages:c,terminate:zv(s)}}function zv(e){return e.length>0&&e.every(e=>e.result.terminate===!0)}function Bv(e,t){if(!e.prepareArguments)return t;let n=e.prepareArguments(t.arguments);return n===t.arguments?t:{...t,arguments:n}}async function Vv(e,t,n,r,i,a=e.tools??[]){let o=a.find(e=>e.name===n.name);if(!o)return{kind:`immediate`,result:Gv(`Tool ${n.name} not found`),isError:!0};try{let a=Ev(o,Bv(o,n));if(r.beforeToolCall){let o=await r.beforeToolCall({assistantMessage:t,toolCall:n,args:a,context:e},i);if(i?.aborted)return{kind:`immediate`,result:Gv(`Operation aborted`),isError:!0};if(o?.block){let e=Gv(o.reason||`Tool execution was blocked`);return o.terminate===!0&&(e.terminate=!0),{kind:`immediate`,result:e,isError:!0}}}return i?.aborted?{kind:`immediate`,result:Gv(`Operation aborted`),isError:!0}:{kind:`prepared`,toolCall:n,tool:o,args:a}}catch(e){return{kind:`immediate`,result:Gv(e instanceof Error?e.message:String(e)),isError:!0}}}function Hv(e,t){return n=>t({type:`tool_execution_update`,toolCallId:e.id,toolName:e.name,args:e.arguments,partialResult:n})}async function Uv(e,t,n){let r=[],i=!0;try{let a=await e.tool.execute(e.toolCall.id,e.args,t,e=>{i&&r.push(Promise.resolve(n(e)))});return i=!1,await Promise.all(r),{result:a,isError:a.isError===!0}}catch(e){return i=!1,await Promise.all(r),{result:Gv(e instanceof Error?e.message:String(e)),isError:!0}}finally{i=!1}}async function Wv(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);if(r){let e=r.structuredContent??(r.content?void 0:o.structuredContent);o={...o,content:r.content??o.content,details:r.details??o.details,usage:r.usage??o.usage,terminate:r.terminate??o.terminate},e===void 0?delete o.structuredContent:o.structuredContent=e,s=r.isError??s}}catch(e){o=Gv(e instanceof Error?e.message:String(e)),s=!0}return{toolCall:n.toolCall,result:o,isError:s}}function Gv(e){return{content:[{type:`text`,text:e}],details:{}}}async function Kv(e,t){await t({type:`tool_execution_end`,toolCallId:e.toolCall.id,toolName:e.toolCall.name,result:e.result,isError:e.isError})}function qv(e){return{role:`toolResult`,toolCallId:e.toolCall.id,toolName:e.toolCall.name,content:e.result.content??[],details:e.result.details,usage:e.result.usage,isError:e.isError,timestamp:Date.now()}}async function Jv(e,t){await t({type:`message_start`,message:e}),await t({type:`message_end`,message:e})}function Yv(e){return e.filter(e=>e.role===`system`||e.role===`user`||e.role===`assistant`||e.role===`toolResult`)}const Xv={input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},Zv={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 Qv(e){let t=e?.tools?.slice()??[],n=e?.messages?.slice()??[],r=mn(e?.systemPrompt,t.map(gn));return n[0]?.role!==`system`&&r&&n.unshift(r),{get systemPrompt(){return fn(n)},model:e?.model??Zv,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 $v=class{messages=[];mode;constructor(e){this.mode=e}enqueue(e){this.messages.push(e)}hasItems(){return this.messages.length>0}peek(){if(this.mode===`all`)return this.messages.slice();let e=this.messages[0];return e?[e]:[]}drain(){let e=this.peek();return this.messages=this.messages.slice(e.length),e}clear(){this.messages=[]}},ey=class{_state;listeners=new Set;steeringQueue;followUpQueue;convertToLlm;transformContext;streamFunction;getApiKey;onPayload;onResponse;onProviderStreamEvent;beforeToolCall;afterToolCall;finishTurn;prepareRequest;prepareNextTurn;prepareNextTurnWithContext;activeRun;sessionId;thinkingBudgets;transport;maxRetryDelayMs;toolExecution;constructor(e){let t=e??{};this._state=Qv(t.initialState),this.convertToLlm=t.convertToLlm??Yv,this.transformContext=t.transformContext,this.streamFunction=t.streamFn??Dv(),this.getApiKey=t.getApiKey,this.onPayload=t.onPayload,this.onResponse=t.onResponse,this.onProviderStreamEvent=t.onProviderStreamEvent,this.beforeToolCall=t.beforeToolCall,this.afterToolCall=t.afterToolCall,this.finishTurn=t.finishTurn,this.prepareRequest=t.prepareRequest,this.prepareNextTurn=t.prepareNextTurn,this.prepareNextTurnWithContext=t.prepareNextTurnWithContext,this.steeringQueue=new $v(t.steeringMode??`one-at-a-time`),this.followUpQueue=new $v(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()}peekQueuedMessages(){let e=this.steeringQueue.peek();return e.length>0?e:this.followUpQueue.peek()}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.`);let e=un(this._state.messages);this._state.messages=e?[e]:[],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||this._state.messages.every(e=>e.role===`system`))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 Ov(e,this.createContextSnapshot(),this.createLoopConfig(t),e=>this.processEvents(e),n,this.streamFunction)})}async runContinuation(){await this.runWithLifecycle(async e=>{await kv(this.createContextSnapshot(),this.createLoopConfig(),e=>this.processEvents(e),e,this.streamFunction)})}createContextSnapshot(){return{messages:this._state.messages.slice(),tools:this._state.tools.slice()}}createLoopConfig(e={}){let t=e.skipInitialSteeringPoll===!0;return{model:this._state.model,reasoning:this._state.thinkingLevel===`off`?void 0:this._state.thinkingLevel,sessionId:this.sessionId,onPayload:this.onPayload,onResponse:this.onResponse,onProviderStreamEvent:this.onProviderStreamEvent,transport:this.transport,thinkingBudgets:this.thinkingBudgets,maxRetryDelayMs:this.maxRetryDelayMs,toolExecution:this.toolExecution,beforeToolCall:this.beforeToolCall,afterToolCall:this.afterToolCall,finishTurn:this.finishTurn,prepareRequest:this.prepareRequest,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:Xv,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 ty(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 ny(e){let t=e.mimeType||`application/octet-stream`;return`${e.name} (${t}, ${ty(e.size)})`}function ry(e){let t=ny(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 iy(e,t){if(!t?.length)return e;let n=t.map(ry),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 wa(e){let t=e.exceptionDetails;return t?t.exception?.description??t.text:null}function Ta(e,t){let n=wa(e);if(n!==null)throw Error(`${t}: ${n}`);return e.result?.value}function Ea(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 Da(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=Oa(a,o);t.has(s)||t.set(s,e)}return t}function Oa(e,t){return`${e.toLowerCase()}|${t.replace(/\s+/g,` `).trim()}`}function ka(e,t){let n=Oa(e.role,e.name),r=t.get(n);if(r!==void 0&&(e.backendNodeId=r),e.children)for(let n of e.children)ka(n,t)}function Aa(e){let t={role:Ce(e.role,`unknown`),name:Ce(e.name)},n=Ce(e.value);n!==``&&(t.value=n);let r=Ce(e.description);return r!==``&&(t.description=r),Array.isArray(e.children)&&e.children.length>0&&(t.children=e.children.map(e=>Aa(e)).filter(e=>e.role!==`unknown`)),t}function ja(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 Ma=class{tabLocks=new Map;bridgeLock=Promise.resolve();bridgeHold=null;bridgeWaiters=0;tabLockStats=new Map;getStats(e){if(e!==void 0)return ja(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 ja(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){la(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!=null){let r=Date.now();try{await fa(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()}}},Na=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 Pa=_(`browser-api`),Fa=[`Session with given id not found`,`Target closed`,`No session with given id`,`No tab attached for sessionId`];var Ia=class extends Error{};function La(e){let t=e instanceof Error?e.message:String(e);return Fa.some(e=>t.includes(e))}var Ra=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)}},za=class{client;localClient;sessionId=null;attachedTargetId=null;trayTargetProvider=null;remoteTargetInfo=null;frames=new pa;sessions=new _a(32,(e,t)=>{Pa.debug(`Evicting least-recently-used CDP session`,{targetId:e}),this.detachSession(e,t)});_listenedTransports=new Set;_sessionReplacedSubs=new Map;locks=new Ma;viewports=new Na;connection=new sa;_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),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.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 Yi,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 Ra)return e;let t=this._accountedTransports.get(e);return t||(t=new Ra(e,e=>this.noteApplied(e)),this._accountedTransports.set(e,t)),t}noteApplied(e){this.sessions.noteApplied(e)}createHarRecorder(e,t){return new ha(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 Ia||!La(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.locks.reentrantOwner(e),n);la(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(!La(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 Ia(`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){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){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(),Ha(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=Wa((await(await this.transportForWindowOps(e)).send(`Browser.getWindowForTarget`,{targetId:Va(e)})).bounds),n=await this.readDevicePixelRatio(e);return{...t,dpr:n}}async setWindowBounds(e,t){await this.ensureConnected(),Ha(t);let n=await this.transportForWindowOps(e),r=Va(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=Wa(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=Wa((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}`);la(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),la(t,`about to enable Page on tray tab ${e}`),await a.send(`Page.enable`,{},o.sessionId),la(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(),la(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),la(t,`about to enable Page on tab ${e}`),await this.localClient.send(`Page.enable`,{},n.sessionId),la(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){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 Ba=new Set([`normal`,`minimized`,`maximized`,`fullscreen`]);function Va(e){let t=e.indexOf(`:`);return t>=0?e.substring(t+1):e}function Ha(e){let t=e.state;if(!(!t||t===`normal`)){if(!Ba.has(t))throw Error(`window state must be one of ${[...Ba].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 Ua(e){return typeof e==`object`&&!!e}function Wa(e){let t=Ua(e)?e:{},n=t.windowState??t.state,r=typeof n==`string`&&Ba.has(n)?n:`normal`;return{left:Ga(t.left,0),top:Ga(t.top,0),width:Ga(t.width,0),height:Ga(t.height,0),state:r}}function Ga(e,t){return typeof e==`number`&&Number.isFinite(e)?e:t}const Ka=_(`panel-rpc-cdp`);var qa=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=>{Ka.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,we)+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){Ka.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=>{Ka.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=>{Ka.error(`remote-cdp unsubscribe failed (page-side forwarder may leak)`,{key:this.key,event:e,error:t instanceof Error?t.message:String(t)})})}};function Ja(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 qa(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 Ya(e){return`slicc_feature_flags_remote:${e}`}let Xa=null;function Za(e,t){let n=$a(t);Xa=e,ke(e,eo(n,e)??{})}function Qa(e,t){if(!Xa||e!==void 0&&e!==Ya(Xa))return!1;let n=$a(t);return De(Xa,eo(n,Xa)??{}),!0}function $a(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 eo(e,t){try{let n=e?.getItem(Ya(t));return n?to(JSON.parse(n)):null}catch{return null}}function to(e){return!no(e)||Object.values(e).some(e=>typeof e!=`string`)?null:e}function no(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}const ro=_(`stale-asset`),io=/dynamically imported module|importing a module script failed|expected a javascript module|module script/i;function ao(e){return io.test(e)}let oo=null;function so(e){if(!e){oo=null;return}oo=e}function co(e=!1){if(!oo||typeof BroadcastChannel!=`function`)return;let t=new BroadcastChannel(`slicc-stale-asset-reload`);try{t.postMessage({type:`stale-asset-reload`,instanceId:oo,replayTurn:e})}finally{t.close()}}function lo(e){ao(e instanceof Error?e.message:String(e))&&co()}function uo(e,t){return!e||e===t?!1:(ro.warn(`mixed build graph: page ${e} vs worker ${t} — requesting reload`),co(),!0)}var fo=class{_state=`disconnected`;nextCommandId=1;listeners=new Map;pendingCommands=new Gi;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 Ki(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 po(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 mo(e){let t=po(e);return{onMessage:e=>t.onMessage(e),send:(e,n)=>{t.send({source:`offscreen`,payload:e},n)}}}var ho=class extends fo{constructor(e){let t=po(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 go(e,t){return e.find(e=>e.folder===t)??e.find(e=>e.folder===`${t}-scoop`)??e.find(e=>e.name===t)}const _o=/^[\p{ID_Start}_$][\p{ID_Continue}_$\u200C\u200D]*$/u;function vo(e){return _o.test(e)}function A(e,t){return`(${e} && ${t})`}function j(e,t){return`(${e} || ${t})`}function yo(e){return`!(${e})`}function bo(e){return`Array.isArray(${e})`}function xo(e){return`typeof ${e} === "bigint"`}function So(e){return`typeof ${e} === "boolean"`}function Co(e){return`Number.isInteger(${e})`}function wo(e){return`${e} === null`}function To(e){return`Number.isFinite(${e})`}function Eo(e){return A(Do(e),yo(bo(e)))}function Do(e){return`typeof ${e} === "object" && ${e} !== null`}function Oo(e){return`typeof ${e} === "string"`}function ko(e){return`typeof ${e} === "symbol"`}function Ao(e){return`${e} === undefined`}function jo(e){return`typeof ${e} === "function"`}function Mo(e){return`Guard.IsConstructor(${e})`}function No(e,t){return`${e} === ${t}`}function Po(e,t){return`${e} > ${t}`}function Fo(e,t){return`${e} < ${t}`}function Io(e,t){return`${e} <= ${t}`}function Lo(e,t){return`${e} >= ${t}`}function Ro(e,t){return`Guard.IsMinLength(${e}, ${t})`}function zo(e,t){return`Guard.IsMaxLength(${e}, ${t})`}function Bo(e,t,n,r){return E(t,`0`)?`${e}.every((${n[0]}, ${n[1]}) => (${r}))`:`${e}.every((${n[0]}, ${n[1]}) => (${n[1]} < ${t}) || (${r}))`}function Vo(e,t,n){return`${e}.some((${t[0]}, ${t[1]}) => ${n})`}function Ho(e,t,n){return`((value) => { let result = false; value.forEach((${t[0]}, ${t[1]}) => { if (${n}) result = true }); return result })(${e})`}function Uo(e,t,n){return`${e}.reduce((result, ${t[0]}, ${t[1]}) => (${n}) ? ++result : result, 0)`}function Wo(e){return`Object.entries(${e})`}function Go(e){return`Object.getOwnPropertyNames(${e})`}function Ko(e,t){return E(t,`"__proto__"`)||E(t,`"constructor"`)?`Object.prototype.hasOwnProperty.call(${e}, ${t})`:`${t} in ${e}`}function qo(e,t){return`Guard.IsDeepEqual(${e}, ${t})`}function Jo(e){return`[${e.join(`, `)}]`}function Yo(e,t){return`((${e.join(`, `)}) => ${t})`}function M(e,t){return`${e}(${t.join(`, `)})`}function Xo(e,t){return`new ${e}(${t.join(`, `)})`}function N(e,t){return`${e}${vo(t)?`.${t}`:`[${P(t)}]`}`}function P(e){if(!tt(e))throw Error(`Unsupported Constant`);return x(e)?JSON.stringify(e):`${e}`}function Zo(e,t,n){return`(${e} ? ${t} : ${n})`}function Qo(e){return`{ ${e.join(`; `)}; }`}function $o(e,t){return`const ${e} = ${t}`}function es(e,t){return`if(${e}) { ${t} }`}function ts(e){return`return ${e}`}function F(e){return E(e.length,0)?`true`:e.reduce((e,t)=>A(e,t))}function ns(e){return E(e.length,0)?`false`:e.reduce((e,t)=>j(e,t))}function rs(e,t){return`Guard.IsMultipleOf(${e}, ${t})`}var is=Xe;function as(e,t){return t[e.length]?.(...e)??(()=>{throw Error(`Invalid Arguments`)})()}let os;function ss(){try{return ls(`null`)(),!0}catch{return!1}}function cs(){return v(os)&&(os=ss()),os&&Bt().useAcceleration}function ls(...e){return new globalThis.Function(...e)}function us(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 ds=us;function fs(){return ds}const ps=[/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],ms=/^4(?:00|13)\s*(?:status code)?\s*\(no body\)/i,hs=[/^(Throttling error|Service unavailable):/i,/rate limit/i,/too many requests/i];function gs(e,t){return!!(e.stopReason===`error`&&e.errorMessage&&!hs.some(t=>t.test(e.errorMessage))&&(ps.some(t=>t.test(e.errorMessage))||e.provider===`cerebras`&&ms.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 _s(e){return C(e,`~refine`)&&T(e[`~refine`])&&D(e[`~refine`],0,e=>y(e)&&C(e,`check`)&&C(e,`error`)&&jt(e.check)&&jt(e.error))}function I(e){return y(e)&&!T(e)}function vs(e){return wt(e)}function L(e){return I(e)||vs(e)}function ys(e){return C(e,`additionalItems`)&&L(e.additionalItems)}function bs(e){return C(e,`additionalProperties`)&&L(e.additionalProperties)}function xs(e){return C(e,`allOf`)&&T(e.allOf)&&e.allOf.every(e=>L(e))}function Ss(e){return C(e,`$anchor`)&&x(e.$anchor)}function Cs(e){return C(e,`anyOf`)&&T(e.anyOf)&&e.anyOf.every(e=>L(e))}function ws(e){return C(e,`const`)}function Ts(e){return C(e,`contains`)&&L(e.contains)}function Es(e){return C(e,`default`)}function Ds(e){return C(e,`dependencies`)&&y(e.dependencies)&&Object.values(e.dependencies).every(e=>L(e)||T(e)&&e.every(e=>x(e)))}function Os(e){return C(e,`dependentRequired`)&&y(e.dependentRequired)&&Object.values(e.dependentRequired).every(e=>T(e)&&e.every(e=>x(e)))}function ks(e){return C(e,`dependentSchemas`)&&y(e.dependentSchemas)&&Object.values(e.dependentSchemas).every(e=>L(e))}function As(e){return C(e,`$dynamicAnchor`)&&x(e.$dynamicAnchor)}function js(e){return C(e,`$dynamicRef`)&&x(e.$dynamicRef)}function Ms(e){return C(e,`else`)&&L(e.else)}function Ns(e){return C(e,`enum`)&&T(e.enum)}function Ps(e){return C(e,`exclusiveMaximum`)&&(S(e.exclusiveMaximum)||Qt(e.exclusiveMaximum))}function Fs(e){return C(e,`exclusiveMinimum`)&&(S(e.exclusiveMinimum)||Qt(e.exclusiveMinimum))}function Is(e){return C(e,`format`)&&x(e.format)}function Ls(e){return C(e,`$id`)&&x(e.$id)}function Rs(e){return C(e,`if`)&&L(e.if)}function zs(e){return C(e,`items`)&&(L(e.items)||T(e.items)&&e.items.every(e=>L(e)))}function Bs(e){return zs(e)&&T(e.items)}function Vs(e){return C(e,`maximum`)&&(S(e.maximum)||Qt(e.maximum))}function Hs(e){return C(e,`maxContains`)&&S(e.maxContains)}function Us(e){return C(e,`maxItems`)&&S(e.maxItems)}function Ws(e){return C(e,`maxLength`)&&S(e.maxLength)}function Gs(e){return C(e,`maxProperties`)&&S(e.maxProperties)}function Ks(e){return C(e,`minimum`)&&(S(e.minimum)||Qt(e.minimum))}function qs(e){return C(e,`minContains`)&&S(e.minContains)}function Js(e){return C(e,`minItems`)&&S(e.minItems)}function Ys(e){return C(e,`minLength`)&&S(e.minLength)}function Xs(e){return C(e,`minProperties`)&&S(e.minProperties)}function Zs(e){return C(e,`multipleOf`)&&(S(e.multipleOf)||Qt(e.multipleOf))}function Qs(e){return C(e,`not`)&&L(e.not)}function $s(e){return C(e,`oneOf`)&&T(e.oneOf)&&e.oneOf.every(e=>L(e))}function ec(e){return C(e,`pattern`)&&(x(e.pattern)||e.pattern instanceof RegExp)}function tc(e){return C(e,`patternProperties`)&&y(e.patternProperties)&&Object.values(e.patternProperties).every(e=>L(e))}function nc(e){return C(e,`prefixItems`)&&T(e.prefixItems)&&e.prefixItems.every(e=>L(e))}function rc(e){return C(e,`properties`)&&y(e.properties)&&Object.values(e.properties).every(e=>L(e))}function ic(e){return C(e,`propertyNames`)&&(y(e.propertyNames)||L(e.propertyNames))}function ac(e){return C(e,`$recursiveAnchor`)&&wt(e.$recursiveAnchor)}function oc(e){return ac(e)&&E(e.$recursiveAnchor,!0)}function sc(e){return C(e,`$recursiveRef`)&&x(e.$recursiveRef)}function cc(e){return C(e,`$ref`)&&x(e.$ref)}function lc(e){return C(e,`required`)&&T(e.required)&&e.required.every(e=>x(e))}function uc(e){return C(e,`then`)&&L(e.then)}function dc(e){return C(e,`type`)&&(x(e.type)||T(e.type)&&e.type.every(e=>x(e)))}function fc(e){return C(e,`uniqueItems`)&&wt(e.uniqueItems)}function pc(e){return C(e,`unevaluatedItems`)&&L(e.unevaluatedItems)}function mc(e){return C(e,`unevaluatedProperties`)&&L(e.unevaluatedProperties)}function hc(e){return pc(e)||mc(e)||at(b(e),t=>_c(e[t]))}function gc(e){return at(e,e=>_c(e))}function _c(e){return T(e)?gc(e):y(e)?hc(e):!1}function vc(e,t){return _c(t)||at(b(e),t=>_c(e[t]))}var yc=class{constructor(e){this.hasUnevaluated=e}UseUnevaluated(){return this.hasUnevaluated}Push(){return M(N(`context`,`Push`),[])}Pop(){return M(N(`context`,`Pop`),[])}AddIndex(e){return M(N(`context`,`AddIndex`),[e])}AddKey(e){return M(N(`context`,`AddKey`),[e])}Merge(e){return M(N(`context`,`Merge`),[e])}},bc=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}},xc=class extends bc{constructor(){super(),this.errors=[]}AtCapacity(){return this.errors.length>=Bt().maxErrors}AddError(e){return this.AtCapacity()||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 wc(){Sc.variables=[]}function Tc(){return{...Sc}}function Ec(e,t,n,r){return Bo(Cc(n[`~refine`].map(e=>e)),P(0),[`refinement`,`_`],M(N(`refinement`,`check`),[r]))}function Dc(e,t,n,r){return D(n[`~refine`],0,(e,t)=>e.check(r))}function Oc(e,t,n,r,i,a){return Jt(i[`~refine`],0,(e,i)=>e.check(a)||t.AddError({keyword:`~refine`,schemaPath:n,instancePath:r,params:{index:i,message:e.error(a)}}))}let kc=0;function R(){return`var_${kc++}`}function Ac(e){return zs(e)&&T(e.items)}function jc(e,t,n,r){let[i,a]=[R(),R()],o=Up(e,t,n.additionalItems,i),s=Fo(a,P(n.items.length)),c=t.AddIndex(a);return Bo(r,P(0),[i,a],j(s,A(o,c)))}function Mc(e,t,n,r){let[i,a]=[R(),R()],o=Up(e,t,n.additionalItems,i),s=Fo(a,P(n.items.length));return Bo(r,P(0),[i,a],j(s,o))}function Nc(e,t,n,r){return Ac(n)?t.UseUnevaluated()?jc(e,t,n,r):Mc(e,t,n,r):P(!0)}function Pc(e,t,n,r){return!Ac(n)||D(r,0,(r,i)=>xt(i,n.items.length)||Wp(e,t,n.additionalItems,r)&&t.AddIndex(i))}function Fc(e,t,n,r,i,a){return!Ac(i)||D(a,0,(a,o)=>{let s=`${n}/additionalItems`,c=`${r}/${o}`;return xt(o,i.items.length)||Gp(e,t,s,c,i.additionalItems,a)&&t.AddIndex(o)})}function Ic(e){return new RegExp(e,`u`)}function Lc(e,t){return!e.UseUnevaluated()&&(E(t,!0)||y(t)&&E(b(t).length,0))}function Rc(e){return`^${e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}$`}function zc(e){let t=[];return tc(e)&&t.push(...b(e.patternProperties)),rc(e)&&t.push(...b(e.properties).map(Rc)),E(t.length,0)?`(?!)`:`(${t.join(`|`)})`}function Bc(e,t,n){return lc(t)&&rc(t)&&!tc(t)&&E(t.additionalProperties,!1)&&E(b(t.properties).length,t.required.length)}function Vc(e,t,n){return No(N(M(N(`Object`,`getOwnPropertyNames`),[n]),`length`),P(t.required.length))}function Hc(e,t,n,r){let[i,a]=[R(),R()],o=Cc(Ic(zc(n))),s=Up(e,t,n.additionalProperties,`${r}[${i}]`),c=M(N(o,`test`),[i]),l=t.AddKey(i),u=t.UseUnevaluated()?j(c,A(s,l)):j(c,s);return Bo(Go(r),P(0),[i,a],u)}function Uc(e,t,n,r){return Lc(t,n.additionalProperties)?P(!0):Bc(t,n,r)?Vc(t,n,r):Hc(e,t,n,r)}function Wc(e,t,n,r){let i=Ic(zc(n));return D(b(r),0,(a,o)=>i.test(a)||Wp(e,t,n.additionalProperties,r[a])&&t.AddKey(a))}function Gc(e,t,n,r,i,a){let o=Ic(zc(i)),s=[];return Jt(b(a),0,(c,l)=>{let u=`${n}/additionalProperties`,d=`${r}/${c}`,f=o.test(c)||Gp(e,t,u,d,i.additionalProperties,a[c])&&t.AddKey(c);return f||s.push(c),f})||t.AddError({keyword:`additionalProperties`,schemaPath:n,instancePath:r,params:{additionalProperties:s}})}function Kc(e,t,n,r,i){let a=$o(`results`,`[]`),o=n.map((e,t)=>$o(`context_${t}`,Xo(`CheckContext`,[]))),s=n.map((n,i)=>$o(`condition_${i}`,M(Yo([`context`],B(e,t,n,r)),[`context_${i}`]))),c=n.map((e,t)=>es(`condition_${t}`,M(N(`results`,`push`),[`context_${t}`]))),l=ts(A(i,t.Merge(`results`)));return M(Yo([],Qo([a,...o,...s,...c,l])),[])}function qc(e,t,n,r){return Kc(e,t,n.allOf,r,No(N(`results`,`length`),P(n.allOf.length)))}function Jc(e,t,n,r){return F(n.allOf.map(n=>B(e,t,n,r)))}function Yc(e,t,n,r){return t.UseUnevaluated()?qc(e,t,n,r):Jc(e,t,n,r)}function Xc(e,t,n,r){let i=n.allOf.reduce((t,n)=>{let i=new bc;return V(e,i,n,r)?[...t,i]:t},[]);return E(i.length,n.allOf.length)&&t.Merge(i)}function Zc(e,t,n,r,i,a){let o=[],s=i.allOf.reduce((t,i,s)=>{let c=`${n}/allOf/${s}`,l=new xc,u=Kp(e,l,c,r,i,a);return u||o.push(l),u?[...t,l]:t},[]),c=E(s.length,i.allOf.length)&&t.Merge(s);return c||o.forEach(e=>e.GetErrors().forEach(e=>t.AddError(e))),c}function Qc(e,t,n,r){return Kc(e,t,n.anyOf,r,Po(N(`results`,`length`),P(0)))}function $c(e,t,n,r){return ns(n.anyOf.map(n=>B(e,t,n,r)))}function el(e,t,n,r){return t.UseUnevaluated()?Qc(e,t,n,r):$c(e,t,n,r)}function tl(e,t,n,r){let i=n.anyOf.reduce((t,n)=>{let i=new bc;return V(e,i,n,r)?[...t,i]:t},[]);return _t(i.length,0)&&t.Merge(i)}function nl(e,t,n,r,i,a){let o=[],s=i.anyOf.reduce((t,i,s)=>{let c=new xc,l=Kp(e,c,`${n}/anyOf/${s}`,r,i,a);return l||o.push(c),l?[...t,c]:t},[]),c=_t(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 rl(e,t,n,r){return P(!!n)}function il(e,t,n,r){return n}function al(e,t,n,r,i,a){return il(e,t,i,a)||t.AddError({keyword:`boolean`,schemaPath:n,instancePath:r,params:{}})}function ol(e,t,n,r){return tt(n.const)?No(r,P(n.const)):qo(r,Cc(n.const))}function sl(e,t,n,r){return tt(n.const)?E(r,n.const):Ut(r,n.const)}function cl(e,t,n,r,i,a){return sl(e,t,i,a)||t.AddError({keyword:`const`,schemaPath:n,instancePath:r,params:{allowedValue:i.const}})}function ll(e){return!(qs(e)&&E(e.minContains,0))}function ul(e,t,n,r){let[i,a]=[R(),R()];return A(yo(No(N(r,`length`),P(0))),Ho(r,[i,a],A(B(e,t,n.contains,i),t.AddIndex(a))))}function dl(e,t,n,r){let[i]=[R()];return A(yo(No(N(r,`length`),P(0))),Vo(r,[i,`_`],B(e,t,n.contains,i)))}function fl(e,t,n,r){return ll(n)?t.UseUnevaluated()?ul(e,t,n,r):dl(e,t,n,r):P(!0)}function pl(e,t,n,r){return!ll(n)||!E(r.length,0)&&qe(r,(r,i)=>V(e,t,n.contains,r)&&t.AddIndex(i))}function ml(e,t,n,r,i,a){return pl(e,t,i,a)||t.AddError({keyword:`contains`,schemaPath:n,instancePath:r,params:{minContains:1}})}function hl(e,t,n,r){return j(No(N(Go(r),`length`),P(0)),F(w(n.dependencies).map(([n,i])=>{let a=yo(Ko(r,P(n))),o=B(e,t,i,r);return j(a,T(i)?(e=>F(e.map(e=>Ko(r,P(e)))))(i):o)})))}function gl(e,t,n,r){let i=E(b(r).length,0),a=D(w(n.dependencies),0,([n,i])=>!C(r,n)||(T(i)?i.every(e=>C(r,e)):V(e,t,i,r)));return i||a}function _l(e,t,n,r,i,a){let o=E(b(a).length,0),s=Jt(w(i.dependencies),0,([i,o])=>{let s=`${n}/dependencies/${i}`;return!C(a,i)||(T(o)?o.every(e=>C(a,e)||t.AddError({keyword:`dependencies`,schemaPath:n,instancePath:r,params:{property:i,dependencies:o}})):Kp(e,t,s,r,o,a))});return o||s}function vl(e,t,n,r){return j(No(N(Go(r),`length`),P(0)),F(w(n.dependentRequired).map(([e,t])=>j(yo(Ko(r,P(e))),F(t.map(e=>Ko(r,P(e))))))))}function yl(e,t,n,r){let i=E(b(r).length,0),a=D(w(n.dependentRequired),0,([e,t])=>!C(r,e)||t.every(e=>C(r,e)));return i||a}function bl(e,t,n,r,i,a){let o=E(b(a).length,0),s=Jt(w(i.dependentRequired),0,([e,i])=>!C(a,e)||Jt(i,0,o=>C(a,o)||t.AddError({keyword:`dependentRequired`,schemaPath:n,instancePath:r,params:{property:e,dependencies:i}})));return o||s}function xl(e,t,n,r){return j(No(N(Go(r),`length`),P(0)),F(w(n.dependentSchemas).map(([n,i])=>j(yo(Ko(r,P(n))),B(e,t,i,r)))))}function Sl(e,t,n,r){let i=E(b(r).length,0),a=D(w(n.dependentSchemas),0,([n,i])=>!C(r,n)||V(e,t,i,r));return i||a}function Cl(e,t,n,r,i,a){let o=E(b(a).length,0),s=Jt(w(i.dependentSchemas),0,([i,o])=>{let s=`${n}/dependentSchemas/${i}`;return!C(a,i)||Kp(e,t,s,r,o,a)});return o||s}function wl(e,t,n,r){return nm(e,t,e.DynamicRef(n)??!1,r)}function Tl(e,t,n,r){let i=e.DynamicRef(n)??!1;return L(i)&&V(e,t,i,r)}function El(e,t,n,r,i,a){let o=e.DynamicRef(i)??!1;return L(o)&&Kp(e,t,`#`,r,o,a)}function Dl(e,t,n,r){return ns(n.enum.map(e=>tt(e)?No(r,P(e)):qo(r,Cc(e))))}function Ol(e,t,n,r){return at(n.enum,e=>tt(e)?E(r,e):Ut(r,e))}function kl(e,t,n,r,i,a){return Ol(e,t,i,a)||t.AddError({keyword:`enum`,schemaPath:n,instancePath:r,params:{allowedValues:i.enum}})}function Al(e,t,n,r){return Fo(r,P(n.exclusiveMaximum))}function jl(e,t,n,r){return xt(r,n.exclusiveMaximum)}function Ml(e,t,n,r,i,a){return jl(e,t,i,a)||t.AddError({keyword:`exclusiveMaximum`,schemaPath:n,instancePath:r,params:{comparison:`<`,limit:i.exclusiveMaximum}})}function Nl(e,t,n,r){return Po(r,P(n.exclusiveMinimum))}function Pl(e,t,n,r){return _t(r,n.exclusiveMinimum)}function Fl(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 Il=[0,31,28,31,30,31,30,31,31,30,31,30,31],Ll=/^(\d\d\d\d)-(\d\d)-(\d\d)$/;function Rl(e){return e%4==0&&(e%100!=0||e%400==0)}function zl(e){let t=Ll.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&&Rl(n)?29:Il[r])}const Bl=/^(\d\d):(\d\d):(\d\d)(?:\.\d+)?(?:([Zz])|([+-])(\d\d):(\d\d))?$/;function Vl(e,t=!0){let n=Bl.exec(e);if(!n||t&&!n[4]&&!n[5])return!1;let r=+n[1],i=+n[2],a=+n[3];if(r>23||i>59||a>60)return!1;if(n[5]){let e=+n[6],t=+n[7];if(e>23||t>59)return!1}if(a<60)return!0;let o=n[5]===`-`?-1:1,s=+(n[6]||0),c=+(n[7]||0);return((r*60+i-o*(s*60+c))%1440+1440)%1440==1439}function Hl(e){let t=e.split(/T/i);return t.length===2&&zl(t[0])&&Vl(t[1])}const Ul=/^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 Wl(e){return Ul.test(e)}const Gl=/^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[^"\\]|\\[\x20-\x7e])*")@(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*|\[(?:IPv6:[a-f0-9:]+|(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(?:\.(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3})\])$/i;function Kl(e){return Gl.test(e)}const ql=/^(?!-).*(?<!-)$/,Jl=/^(?!..--)/,Yl=/^[a-zA-Z0-9-]*$/,Xl=/[^\p{ASCII}]/u,Zl=/[0-9]/,Ql=/[\u{0660}-\u{0669}]/u,$l=/[\u{06f0}-\u{06f9}]/u,eu=/[\u{002e}\u{002c}\u{003a}\u{002f}]/u,tu=/[\u{002d}\u{002b}]/u,nu=/\p{Mn}/u,ru=/\p{Mc}/u,iu=/[\p{Mn}\p{Mc}\p{Me}]/u,au=/\p{L}/u,ou=/\p{Nd}/u,su=/\p{Script=Greek}/u,cu=/\p{Script=Hebrew}/u,lu=/[\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Han}]/u,uu=/[\p{Script=Arabic}\p{Script=Syriac}\p{Script=Thaana}\p{Script=Mandaic}]/u,du=/[\u{094d}\u{09cd}\u{0a4d}\u{0acd}\u{0b4d}\u{0bcd}\u{0c4d}\u{0ccd}\u{0d3b}\u{0d3c}\u{0d4d}\u{0dca}\u{1b44}\u{1baa}\u{1bab}\u{a9c0}\u{11046}\u{1107f}\u{110b9}\u{11133}\u{11134}\u{111c0}\u{11235}\u{1134d}\u{11442}\u{114c2}\u{115bf}\u{1163f}\u{116b6}\u{11c3f}\u{11d44}\u{11d45}]/u,fu=/[\u{0640}\u{07fa}\u{302e}\u{302f}\u{3031}\u{3032}\u{3033}\u{3034}\u{3035}\u{303b}]/u,pu=/[\u{00b7}\u{0375}\u{05f3}\u{05f4}\u{200c}\u{200d}\u{30fb}]/u,mu=/[\u{00df}\u{03c2}\u{06fd}\u{06fe}\u{0f0b}\u{3007}]/u,hu=new RegExp([Zl,$l].map(e=>e.source).join(`|`),`u`),gu=new RegExp([au,tu,eu,ou,nu,ru,pu,mu].map(e=>e.source).join(`|`),`u`);function _u(e){return ql.test(e)&&Jl.test(e)&&Yl.test(e)}function vu(){throw null}function yu(e){return e.toLowerCase().startsWith(`xn--`)}function bu(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 xu(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);r>=128&&vu(),t.push(r)}let o=a<0?0:a+1;for(;o<e.length;){let a=r,s=1,c=36;for(;;){o>=e.length&&vu();let t=e.charCodeAt(o++),n;t>=97&&t<=122?n=t-97:t>=48&&t<=57?n=t-48+26:vu(),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=bu(r-a,l,a===0),n+=Math.floor(r/l),r%=l,t.splice(r,0,n),r++}return String.fromCodePoint(...t)}function Su(e){return e<26?String.fromCharCode(e+97):String.fromCharCode(e-26+48)}const Cu=new RegExp(Xl.source,`gu`);function wu(e){let t=e.replace(Cu,``),n=t.length,r=n>0?[t,`-`]:[],i=Array.from(e,e=>e.codePointAt(0)),a=128,o=0,s=72,c=n;for(;c<i.length;){let e=1/0;for(let t of i)t>=a&&t<e&&(e=t);o+=(e-a)*(c+1),a=e;for(let e of i)if(e<a&&o++,e===a){let e=o;for(let t=36;;t+=36){let n=t<=s?1:t>=s+26?26:t-s;if(e<n)break;let i=n+(e-n)%(36-n);r.push(Su(i)),e=Math.floor((e-n)/(36-n))}r.push(Su(e)),s=bu(o,c+1,c===n),o=0,c++}o++,a++}return r.join(``)}const Tu=/^(?:R|AL|AN|EN|ES|CS|ET|ON|BN|NSM)$/,Eu=/^(?:L|EN|ES|CS|ET|ON|BN|NSM)$/,Du=/^(?:R|AL|AN)$/;function Ou(e){if(yu(e))try{return Au(xu(e.slice(4).toLowerCase()))}catch{return!1}return Au(e)}function ku(e){let t=String.fromCodePoint(e);return hu.test(t)?`EN`:Ql.test(t)?`AN`:nu.test(t)?`NSM`:cu.test(t)?`R`:uu.test(t)?`AL`:au.test(t)?`L`:`ON`}function Au(e){for(let t of e)if(Du.test(ku(t.codePointAt(0))))return!0;return!1}function ju(e){let t=!1,n=Eu,r=!1,i=!1,a=!0;for(let o of e){let e=ku(o.codePointAt(0));if(a){if(e!==`L`&&e!==`R`&&e!==`AL`)return!1;t=e===`R`||e===`AL`,n=t?Tu:Eu,a=!1}if(!n.test(e))return!1;e===`EN`?r=!0:e===`AN`&&(i=!0)}return!(t&&r&&i)}function Mu(e){return Xl.test(e)&&wu(e).length+4>63}function Nu(e){return e[0]===`-`||e[e.length-1]===`-`||e.slice(2).join(``).startsWith(`--`)}function Pu(e){if(Mu(e)||Au(e)&&!ju(e))return!1;let t=[...e],n=t.map(e=>e.codePointAt(0)),r=n.length;if(Nu(t)||iu.test(t[0]))return!1;let i=!1;for(let e=0;e<r;e++){let r=n[e],a=t[e];if(fu.test(a)||!gu.test(a))return!1;lu.test(a)&&(i=!0);let o=n[e-1],s=n[e+1];switch(r){case 183:if(o!==108||s!==108)return!1;break;case 885:if(!s||!su.test(t[e+1]))return!1;break;case 1523:case 1524:if(!o||!cu.test(t[e-1]))return!1;break;case 8204:if(!o||o<128&&!du.test(t[e-1]))return!1;break;case 8205:if(!o||!du.test(t[e-1]))return!1}}return!(e.includes(`・`)&&!i)}function Fu(e){if(!yu(e))return!1;try{let t=e.slice(4).toLowerCase();if(t.lastIndexOf(`-`)===0)return!1;let n=xu(t);return Xl.test(n)?Pu(n):!1}catch{return!1}}function Iu(e){return e.length>0&&e.length<=63}function Lu(e){return Iu(e)&&(Fu(e)||_u(e))}function Ru(e){return e.length===0||e.length>253||e.charCodeAt(e.length-1)===46?!1:e.split(`.`).every(e=>Lu(e))}function zu(e){return e.length>0&&e.length<=63}function Bu(e){return zu(e)&&(Fu(e)||Pu(e))}function Vu(e){return e.replace(/[\uff01-\uff5e]/g,e=>String.fromCharCode(e.charCodeAt(0)-65248)).normalize(`NFC`).replace(/[\u00ad\u034f\u180b-\u180d\u200b\ufe00-\ufe0f\u{e0100}-\u{e01ef}]/gu,``).replace(/[\u002E\u3002\uFF0E\uFF61]/g,`.`)}function Hu(e){if(e.length===0||e.includes(` `))return!1;let t=Vu(e);if(t.length>253)return!1;let n=t.split(`.`),r=n.some(e=>Ou(e));return n.every(e=>Bu(e)&&(!r||ju(e)))}function Uu(e){return Ru(e)}const Wu=/^(?:[A-Za-z0-9!#$%&'*+\/=?^_`{|}~\u{0080}-\u{10FFFF}-]+(?:\.[A-Za-z0-9!#$%&'*+\/=?^_`{|}~\u{0080}-\u{10FFFF}-]+)*|"(?:[^"\\]|\\.)*")@[\p{L}\p{N}](?:[\p{L}\p{N}-]{0,62})(?<!-)(?:\.[\p{L}\p{N}](?:[\p{L}\p{N}-]{0,62})(?<!-))*$/iu;function Gu(e){return Wu.test(e.normalize(`NFC`))}function Ku(e){return Hu(e)}const qu=/^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$/;function Ju(e){return qu.test(e)}const Yu=/^(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:)?[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)$/i;function Xu(e){return Yu.test(e)}const Zu=/[\x00-\x20\x7F\\]|%(?![0-9a-fA-F]{2})/,Qu=/^[a-zA-Z][a-zA-Z0-9+\-.]*\/\//;function $u(e){return!Zu.test(e)&&!Qu.test(e)&&URL.canParse(e,`http://example.com`)}const ed=/\[[vV][0-9a-fA-F]+\.[^\]]+\]/,td=/[\x00-\x20<>\^`{|}\\]/,nd=/%(?![0-9a-fA-F]{2})/;function rd(e){return e.length<2048?e.replace(ed,`[::1]`):e}function id(e){return td.test(e)||nd.test(e)?!1:URL.canParse(rd(e))}const ad=/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i;function od(e){return ad.test(e)}const sd=/^(?:\/(?:[^~/]|~0|~1)*)*$/;function cd(e){return sd.test(e)}function ld(e){try{return new RegExp(e,`u`),!0}catch{return!1}}const ud=/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/;function dd(e){return ud.test(e)}const fd=/^(?:[a-z][a-z0-9+\-.]*:(?:\/\/(?:(?:[-a-z0-9._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:[\da-f]{1,4}:){6}(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|::(?:[\da-f]{1,4}:){5}(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:[\da-f]{1,4})?::(?:[\da-f]{1,4}:){4}(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[\da-f]{1,4}:){0,1}[\da-f]{1,4})?::(?:[\da-f]{1,4}:){3}(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[\da-f]{1,4}:){0,2}[\da-f]{1,4})?::(?:[\da-f]{1,4}:){2}(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[\da-f]{1,4}:){0,3}[\da-f]{1,4})?::[\da-f]{1,4}:(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[\da-f]{1,4}:){0,4}[\da-f]{1,4})?::(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[\da-f]{1,4}:){0,5}[\da-f]{1,4})?::[\da-f]{1,4}|(?:(?:[\da-f]{1,4}:){0,6}[\da-f]{1,4})?::)|v[0-9a-f]+\.[-a-z0-9._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)|(?:[-a-z0-9._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[-a-z0-9._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[-a-z0-9._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[-a-z0-9._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[-a-z0-9._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[-a-z0-9._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:\/\/(?:(?:[-a-z0-9._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:[\da-f]{1,4}:){6}(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|::(?:[\da-f]{1,4}:){5}(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:[\da-f]{1,4})?::(?:[\da-f]{1,4}:){4}(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[\da-f]{1,4}:){0,1}[\da-f]{1,4})?::(?:[\da-f]{1,4}:){3}(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[\da-f]{1,4}:){0,2}[\da-f]{1,4})?::(?:[\da-f]{1,4}:){2}(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[\da-f]{1,4}:){0,3}[\da-f]{1,4})?::[\da-f]{1,4}:(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[\da-f]{1,4}:){0,4}[\da-f]{1,4})?::(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[\da-f]{1,4}:){0,5}[\da-f]{1,4})?::[\da-f]{1,4}|(?:(?:[\da-f]{1,4}:){0,6}[\da-f]{1,4})?::)|v[0-9a-f]+\.[-a-z0-9._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)|(?:[-a-z0-9._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[-a-z0-9._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[-a-z0-9._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[-a-z0-9._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[-a-z0-9._~!$&'()*+,;=@]|%[0-9a-f]{2})+(?:\/(?:[-a-z0-9._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?)(?:\?(?:[-a-z0-9._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[-a-z0-9._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;function pd(e){return fd.test(e)}const md=/^(?:(?:[^\x00-\x20"<>%\\^`{|}\x7f]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?:\.(?:[a-z0-9_]|%[0-9a-f]{2})+)*(?::[1-9]\d{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?:\.(?:[a-z0-9_]|%[0-9a-f]{2})+)*(?::[1-9]\d{0,3}|\*)?)*\})*$/i;function hd(e){return md.test(e)}const gd=/^[a-z][a-z0-9+\-.]*:(?:\/\/(?:(?:[-a-z0-9._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:[\da-f]{1,4}:){6}(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|::(?:[\da-f]{1,4}:){5}(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:[\da-f]{1,4})?::(?:[\da-f]{1,4}:){4}(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[\da-f]{1,4}:){0,1}[\da-f]{1,4})?::(?:[\da-f]{1,4}:){3}(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[\da-f]{1,4}:){0,2}[\da-f]{1,4})?::(?:[\da-f]{1,4}:){2}(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[\da-f]{1,4}:){0,3}[\da-f]{1,4})?::[\da-f]{1,4}:(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[\da-f]{1,4}:){0,4}[\da-f]{1,4})?::(?:[\da-f]{1,4}:[\da-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[\da-f]{1,4}:){0,5}[\da-f]{1,4})?::[\da-f]{1,4}|(?:(?:[\da-f]{1,4}:){0,6}[\da-f]{1,4})?::)|v[0-9a-f]+\.[-a-z0-9._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)|(?:[-a-z0-9._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[-a-z0-9._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[-a-z0-9._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[-a-z0-9._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[-a-z0-9._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[-a-z0-9._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[-a-z0-9._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[-a-z0-9._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;function _d(e){return gd.test(e)}function vd(e){return URL.canParse(e)}const yd=/^[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i;function bd(e){return yd.test(e)}const z=new Map;function xd(){z.clear()}function Sd(){return[...z.entries()]}function Cd(e,t){z.set(e,t)}function wd(e){return z.has(e)}function Td(e){return z.get(e)}function Ed(e,t){return z.get(e)?.(t)??!0}function Dd(){xd(),z.set(`date-time`,Hl),z.set(`date`,zl),z.set(`duration`,Wl),z.set(`email`,Kl),z.set(`hostname`,Uu),z.set(`idn-email`,Gu),z.set(`idn-hostname`,Ku),z.set(`ipv4`,Ju),z.set(`ipv6`,Xu),z.set(`iri-reference`,$u),z.set(`iri`,id),z.set(`json-pointer-uri-fragment`,od),z.set(`json-pointer`,cd),z.set(`regex`,ld),z.set(`relative-json-pointer`,dd),z.set(`time`,Vl),z.set(`uri-reference`,pd),z.set(`uri-template`,hd),z.set(`uri`,_d),z.set(`url`,vd),z.set(`uuid`,bd)}Dd();var Od=e({Clear:()=>xd,Entries:()=>Sd,Get:()=>Td,Has:()=>wd,IsDate:()=>zl,IsDateTime:()=>Hl,IsDuration:()=>Wl,IsEmail:()=>Kl,IsHostname:()=>Uu,IsIPv4:()=>Ju,IsIPv6:()=>Xu,IsIdnEmail:()=>Gu,IsIdnHostname:()=>Ku,IsIri:()=>id,IsIriReference:()=>$u,IsJsonPointer:()=>cd,IsJsonPointerUriFragment:()=>od,IsRegex:()=>ld,IsRelativeJsonPointer:()=>dd,IsTime:()=>Vl,IsUri:()=>_d,IsUriReference:()=>pd,IsUriTemplate:()=>hd,IsUrl:()=>vd,IsUuid:()=>bd,Reset:()=>Dd,Set:()=>Cd,Test:()=>Ed});function kd(e,t,n,r){return M(N(`Format`,`Test`),[P(n.format),r])}function Ad(e,t,n,r){return Ed(n.format,r)}function jd(e,t,n,r,i,a){return Ad(e,t,i,a)||t.AddError({keyword:`format`,schemaPath:n,instancePath:r,params:{format:i.format}})}function Md(e,t,n,r){let i=!uc(n)||n.then,a=!Ms(n)||n.else;return Zo(B(e,t,n.if,r),B(e,t,i,r),B(e,t,a,r))}function Nd(e,t,n,r){let i=!uc(n)||n.then,a=!Ms(n)||n.else;return V(e,t,n.if,r)?V(e,t,i,r):V(e,t,a,r)}function Pd(e,t,n,r,i,a){let o=!uc(i)||i.then,s=!Ms(i)||i.else,c=new xc,l=Kp(e,c,`${n}/if`,r,i.if,a)?Kp(e,c,`${n}/then`,r,o,a)||t.AddError({keyword:`if`,schemaPath:n,instancePath:r,params:{failingKeyword:`then`}}):Kp(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 Fd(e,t,n,r){return F(n.items.map((n,i)=>j(Io(N(r,`length`),P(i)),A(Up(e,t,n,`${r}[${i}]`),t.AddIndex(P(i))))))}function Id(e,t,n,r){return F(n.items.map((n,i)=>j(Io(N(r,`length`),P(i)),Up(e,t,n,`${r}[${i}]`))))}function Ld(e,t,n,r){return t.UseUnevaluated()?Fd(e,t,n,r):Id(e,t,n,r)}function Rd(e,t,n,r){return D(n.items,0,(n,i)=>sn(r.length,i)||Wp(e,t,n,r[i])&&t.AddIndex(i))}function zd(e,t,n,r,i,a){return Jt(i.items,0,(i,o)=>{let s=`${n}/items/${o}`,c=`${r}/${o}`;return sn(a.length,o)||Gp(e,t,s,c,i,a[o])&&t.AddIndex(o)})}function Bd(e,t,n,r){let i=nc(n)?n.prefixItems.length:0,a=Up(e,t,n.items,`element`),o=t.AddIndex(`index`);return Bo(r,P(i),[`element`,`index`],A(a,o))}function Vd(e,t,n,r){let i=nc(n)?n.prefixItems.length:0,a=Up(e,t,n.items,`element`);return Bo(r,P(i),[`element`,`index`],a)}function Hd(e,t,n,r){return t.UseUnevaluated()?Bd(e,t,n,r):Vd(e,t,n,r)}function Ud(e,t,n,r){let i=nc(n)?n.prefixItems.length:0;return D(r,i,(r,i)=>Wp(e,t,n.items,r)&&t.AddIndex(i))}function Wd(e,t,n,r,i,a){let o=nc(i)?i.prefixItems.length:0;return Jt(a,o,(a,o)=>Gp(e,t,`${n}/items`,`${r}/${o}`,i.items,a)&&t.AddIndex(o))}function Gd(e,t,n,r){return Bs(n)?Ld(e,t,n,r):Hd(e,t,n,r)}function Kd(e,t,n,r){return Bs(n)?Rd(e,t,n,r):Ud(e,t,n,r)}function qd(e,t,n,r,i,a){return Bs(i)?zd(e,t,n,r,i,a):Wd(e,t,n,r,i,a)}function Jd(e){return Ts(e)}function Yd(e,t,n,r){if(!Jd(n))return P(!0);let[i]=[R()];return Io(Uo(r,[i,`_`],B(e,t,n.contains,i)),P(n.maxContains))}function Xd(e,t,n,r){if(!Jd(n))return!0;let i=Kt(r,r=>V(e,t,n.contains,r));return sn(i,n.maxContains)}function Zd(e,t,n,r,i,a){let o=qs(i)?i.minContains:1;return Xd(e,t,i,a)||t.AddError({keyword:`contains`,schemaPath:n,instancePath:r,params:{minContains:o,maxContains:i.maxContains}})}function Qd(e,t,n,r){return Io(r,P(n.maximum))}function $d(e,t,n,r){return sn(r,n.maximum)}function ef(e,t,n,r,i,a){return $d(e,t,i,a)||t.AddError({keyword:`maximum`,schemaPath:n,instancePath:r,params:{comparison:`<=`,limit:i.maximum}})}function tf(e,t,n,r){return Io(N(r,`length`),P(n.maxItems))}function nf(e,t,n,r){return sn(r.length,n.maxItems)}function rf(e,t,n,r,i,a){return nf(e,t,i,a)||t.AddError({keyword:`maxItems`,schemaPath:n,instancePath:r,params:{limit:i.maxItems}})}function af(e,t,n,r){return zo(r,P(n.maxLength))}function of(e,t,n,r){return an(r,n.maxLength)}function sf(e,t,n,r,i,a){return of(e,t,i,a)||t.AddError({keyword:`maxLength`,schemaPath:n,instancePath:r,params:{limit:i.maxLength}})}function cf(e,t,n,r){return Io(N(Go(r),`length`),P(n.maxProperties))}function lf(e,t,n,r){return sn(b(r).length,n.maxProperties)}function uf(e,t,n,r,i,a){return lf(e,t,i,a)||t.AddError({keyword:`maxProperties`,schemaPath:n,instancePath:r,params:{limit:i.maxProperties}})}function df(e){return Ts(e)}function ff(e,t,n,r){let[i,a]=[R(),R()];return Lo(Uo(r,[i,a],A(B(e,t,n.contains,i),t.AddIndex(a))),P(n.minContains))}function pf(e,t,n,r){let[i]=[R()];return Lo(Uo(r,[i,`_`],B(e,t,n.contains,i)),P(n.minContains))}function mf(e,t,n,r){return df(n)?t.UseUnevaluated()?ff(e,t,n,r):pf(e,t,n,r):P(!0)}function hf(e,t,n,r){if(!df(n))return!0;let i=Kt(r,(r,i)=>V(e,t,n.contains,r)&&t.AddIndex(i));return kt(i,n.minContains)}function gf(e,t,n,r,i,a){return hf(e,t,i,a)||t.AddError({keyword:`contains`,schemaPath:n,instancePath:r,params:{minContains:i.minContains}})}function _f(e,t,n,r){return Lo(r,P(n.minimum))}function vf(e,t,n,r){return kt(r,n.minimum)}function yf(e,t,n,r,i,a){return vf(e,t,i,a)||t.AddError({keyword:`minimum`,schemaPath:n,instancePath:r,params:{comparison:`>=`,limit:i.minimum}})}function bf(e,t,n,r){return Lo(N(r,`length`),P(n.minItems))}function xf(e,t,n,r){return kt(r.length,n.minItems)}function Sf(e,t,n,r,i,a){return xf(e,t,i,a)||t.AddError({keyword:`minItems`,schemaPath:n,instancePath:r,params:{limit:i.minItems}})}function Cf(e,t,n,r){return Ro(r,P(n.minLength))}function wf(e,t,n,r){return ct(r,n.minLength)}function Tf(e,t,n,r,i,a){return wf(e,t,i,a)||t.AddError({keyword:`minLength`,schemaPath:n,instancePath:r,params:{limit:i.minLength}})}function Ef(e,t,n,r){return Lo(N(Go(r),`length`),P(n.minProperties))}function Df(e,t,n,r){return kt(b(r).length,n.minProperties)}function Of(e,t,n,r,i,a){return Df(e,t,i,a)||t.AddError({keyword:`minProperties`,schemaPath:n,instancePath:r,params:{limit:i.minProperties}})}function kf(e,t,n,r){return rs(r,P(n.multipleOf))}function Af(e,t,n,r){return He(r,n.multipleOf)}function jf(e,t,n,r,i,a){return Af(e,t,i,a)||t.AddError({keyword:`multipleOf`,schemaPath:n,instancePath:r,params:{multipleOf:i.multipleOf}})}function Mf(e,t,n,r){return Kc(e,t,[n.not],r,yo(No(N(`results`,`length`),P(1))))}function Nf(e,t,n,r){return yo(B(e,t,n.not,r))}function Pf(e,t,n,r){return t.UseUnevaluated()?Mf(e,t,n,r):Nf(e,t,n,r)}function Ff(e,t,n,r){let i=new bc;return!V(e,i,n.not,r)&&t.Merge([i])}function If(e,t,n,r,i,a){return Ff(e,t,i,a)||t.AddError({keyword:`not`,schemaPath:n,instancePath:r,params:{}})}function Lf(e,t,n,r){return Kc(e,t,n.oneOf,r,No(N(`results`,`length`),P(1)))}function Rf(e,t,n,r){let[i]=[R()];return No(Uo(Jo(n.oneOf.map(n=>B(e,t,n,r))),[i,`_`],No(i,P(!0))),P(1))}function zf(e,t,n,r){return t.UseUnevaluated()?Lf(e,t,n,r):Rf(e,t,n,r)}function Bf(e,t,n,r){let i=n.oneOf.reduce((t,n)=>{let i=new bc;return V(e,i,n,r)?[...t,i]:t},[]);return E(i.length,1)&&t.Merge(i)}function Vf(e,t,n,r,i,a){let o=[],s=[],c=i.oneOf.reduce((t,i,c)=>{let l=new xc,u=Kp(e,l,`${n}/oneOf/${c}`,r,i,a);return u&&s.push(c),u||o.push(l),u?[...t,l]:t},[]),l=E(c.length,1)&&t.Merge(c);return!l&&E(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 Hf(e,t,n,r){return M(N(Cc(x(n.pattern)?Ic(n.pattern):n.pattern),`test`),[r])}function Uf(e,t,n,r){return(x(n.pattern)?Ic(n.pattern):n.pattern).test(r)}function Wf(e,t,n,r,i,a){return Uf(e,t,i,a)||t.AddError({keyword:`pattern`,schemaPath:n,instancePath:r,params:{pattern:i.pattern}})}function Gf(e,t,n,r){return F(w(n.patternProperties).map(([n,i])=>{let[a,o]=[R(),R()],s=yo(M(N(Cc(Ic(n)),`test`),[a])),c=Up(e,t,i,o),l=t.AddKey(a),u=t.UseUnevaluated()?j(s,A(c,l)):j(s,c);return Bo(Wo(r),P(0),[`[${a}, ${o}]`,`_`],u)}))}function Kf(e,t,n,r){return D(w(n.patternProperties),0,([n,i])=>{let a=Ic(n);return D(w(r),0,([n,r])=>!a.test(n)||Wp(e,t,i,r)&&t.AddKey(n))})}function qf(e,t,n,r,i,a){return Jt(w(i.patternProperties),0,([i,o])=>{let s=`${n}/patternProperties/${i}`,c=Ic(i);return Jt(w(a),0,([n,i])=>{let a=`${r}/${n}`;return!c.test(n)||Gp(e,t,s,a,o,i)&&t.AddKey(n)})})}function Jf(e,t,n,r){return F(n.prefixItems.map((n,i)=>{let a=Io(N(r,`length`),P(i)),o=Up(e,t,n,`${r}[${i}]`),s=t.AddIndex(P(i));return j(a,t.UseUnevaluated()?A(o,s):o)}))}function Yf(e,t,n,r){return E(r.length,0)||D(n.prefixItems,0,(n,i)=>sn(r.length,i)||Wp(e,t,n,r[i])&&t.AddIndex(i))}function Xf(e,t,n,r,i,a){return E(a.length,0)||Jt(i.prefixItems,0,(i,o)=>{let s=`${n}/prefixItems/${o}`,c=`${r}/${o}`;return sn(a.length,o)||Gp(e,t,s,c,i,a[o])&&t.AddIndex(o)})}function Zf(e,t){return e.includes(t)||Bt().exactOptionalPropertyTypes}function Qf(e,t){return Ao(N(e,t))}function $f(e,t){return v(e[t])}function ep(e,t,n,r){let i=lc(n)?n.required:[];return F(w(n.properties).map(([n,a])=>{let o=yo(Ko(r,P(n))),s=Up(e,t,a,N(r,n)),c=t.AddKey(P(n)),l=t.UseUnevaluated()?A(s,c):s,u=i.includes(n)?l:j(o,l);return Zf(i,n)?u:j(Qf(r,n),u)}))}function tp(e,t,n,r){let i=lc(n)?n.required:[];return D(w(n.properties),0,([n,a])=>{let o=!C(r,n)||Wp(e,t,a,r[n])&&t.AddKey(n);return Zf(i,n)?o:$f(r,n)||o})}function np(e,t,n,r,i,a){let o=lc(i)?i.required:[];return Jt(w(i.properties),0,([i,s])=>{let c=`${n}/properties/${i}`,l=`${r}/${i}`,u=()=>!C(a,i)||Gp(e,t,c,l,s,a[i])&&t.AddKey(i);return Zf(o,i)?u():$f(a,i)||u()})}function rp(e,t,n,r){let[i,a]=[R(),R()];return Bo(Go(r),P(0),[i,a],B(e,t,n.propertyNames,i))}function ip(e,t,n,r){return D(b(r),0,(r,i)=>V(e,t,n.propertyNames,r))}function ap(e,t,n,r,i,a){let o=[];return Jt(b(a),0,(a,s)=>{let c=`${r}/${a}`,l=Kp(e,t,`${n}/propertyNames`,c,i.propertyNames,a);return l||o.push(a),l})||t.AddError({keyword:`propertyNames`,schemaPath:n,instancePath:r,params:{propertyNames:o}})}function op(e,t,n,r){return nm(e,t,e.RecursiveRef(n)??!1,r)}function sp(e,t,n,r){let i=e.RecursiveRef(n)??!1;return L(i)&&V(e,t,i,r)}function cp(e,t,n,r,i,a){let o=e.RecursiveRef(i)??!1;return L(o)&&Kp(e,t,`#`,r,o,a)}function lp(e,t,n,r){let i=Yo([`context`,`value`],nm(e,t,n,`value`));return M(Yo([`context`,`value`],Qo([$o(`nextContext`,Xo(`CheckContext`,[])),$o(`result`,M(i,[`nextContext`,`value`])),es(`result`,t.Merge(`[nextContext]`)),ts(`result`)])),[`context`,r])}function up(e,t,n,r){return nm(e,t,n,r)}function dp(e,t,n,r){let i=e.Ref(n)??!1;return t.UseUnevaluated()?lp(e,t,i,r):up(e,t,i,r)}function fp(e,t,n,r){let i=e.Ref(n)??!1,a=new bc,o=L(i)&&V(e,a,i,r);return o&&t.Merge([a]),o}function pp(e,t,n,r,i,a){let o=e.Ref(i)??!1,s=new xc,c=L(o)&&Kp(e,s,`#`,r,o,a);return c&&t.Merge([s]),c||s.GetErrors().forEach(e=>t.AddError(e)),c}function mp(e,t,n,r){return F(n.required.map(e=>Ko(r,P(e))))}function hp(e,t,n,r){return D(n.required,0,e=>C(r,e))}function gp(e,t,n,r,i,a){let o=[];return Jt(i.required,0,e=>{let t=C(a,e);return t||o.push(e),t})||t.AddError({keyword:`required`,schemaPath:n,instancePath:r,params:{requiredProperties:o}})}function _p(e,t,n,r){return E(n,`object`)?Eo(r):E(n,`array`)?bo(r):E(n,`boolean`)?So(r):E(n,`integer`)?Co(r):E(n,`number`)?To(r):E(n,`null`)?wo(r):E(n,`string`)?Oo(r):E(n,`bigint`)?xo(r):E(n,`constructor`)?Mo(r):E(n,`function`)?jo(r):E(n,`symbol`)?ko(r):E(n,`undefined`)||E(n,`void`)?Ao(r):P(!0)}function vp(e,t,n,r,i){return E(n,`object`)?We(i):E(n,`array`)?T(i):E(n,`boolean`)?wt(i):E(n,`integer`)?en(i):E(n,`number`)?S(i):E(n,`null`)?nn(i):E(n,`string`)?x(i):E(n,`bigint`)?Qt(i):E(n,`constructor`)?Dt(i):E(n,`function`)?jt(i):E(n,`symbol`)?It(i):E(n,`undefined`)?v(i):!E(n,`void`)||v(i)}function yp(e,t,n,r){return ns(n.map(n=>_p(e,t,n,r)))}function bp(e,t,n,r,i){return at(n,n=>vp(e,t,n,r,i))}function xp(e,t,n,r){return T(n.type)?yp(e,t,n.type,r):_p(e,t,n.type,r)}function Sp(e,t,n,r){return T(n.type)?bp(e,t,n.type,n,r):vp(e,t,n.type,n,r)}function Cp(e,t,n,r,i,a){return(T(i.type)?bp(e,t,i.type,i,a):vp(e,t,i.type,i,a))||t.AddError({keyword:`type`,schemaPath:n,instancePath:r,params:{type:i.type}})}function wp(e,t,n,r){let[i,a]=[R(),R()],o=M(N(`context`,`GetIndices`),[]),s=M(N(`indices`,`has`),[i]),c=B(e,t,n.unevaluatedItems,a),l=M(N(`context`,`AddIndex`),[i]),u=Bo(r,P(0),[a,i],A(j(s,c),l));return M(Yo([`context`],Qo([$o(`indices`,o),ts(u)])),[`context`])}function Tp(e,t,n,r){let i=t.GetIndices();return D(r,0,(r,a)=>(i.has(a)||V(e,t,n.unevaluatedItems,r))&&t.AddIndex(a))}function Ep(e,t,n,r,i,a){let o=t.GetIndices(),s=[];return Jt(a,0,(a,c)=>{let l=new xc,u=(o.has(c)||Kp(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 Dp(e,t,n,r){let[i,a]=[R(),R()],o=M(N(`context`,`GetKeys`),[]),s=M(N(`keys`,`has`),[i]),c=M(N(`context`,`AddKey`),[i]),l=B(e,t,n.unevaluatedProperties,a),u=Bo(Wo(r),P(0),[`[${i}, ${a}]`,`_`],j(s,A(l,c)));return M(Yo([`context`],Qo([$o(`keys`,o),ts(u)])),[`context`])}function Op(e,t,n,r){let i=t.GetKeys();return D(w(r),0,([r,a])=>i.has(r)||V(e,t,n.unevaluatedProperties,a)&&t.AddKey(r))}function kp(e,t,n,r,i,a){let o=t.GetKeys(),s=[];return Jt(w(a),0,([a,c])=>{let l=new xc,u=o.has(a)||Kp(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 Ap(e){return!E(e.uniqueItems,!1)}function jp(e,t,n,r){return Ap(n)?No(N(Xo(`Set`,[M(N(r,`map`),[N(`Hashing`,`Hash`)])]),`size`),N(r,`length`)):P(!0)}function Mp(e,t,n,r){if(!Ap(n))return!0;let i=new Set(r.map(it)).size,a=r.length;return E(i,a)}function Np(e,t,n,r,i,a){if(!Ap(i))return!0;let o=new Set,s=a.reduce((e,t,n)=>{let r=it(t);return o.has(r)?[...e,n]:(o.add(r),e)},[]);return E(s.length,0)||t.AddError({keyword:`uniqueItems`,schemaPath:n,instancePath:r,params:{duplicateItems:s}})}function Pp(e,t){return dc(e)&&(T(e.type)&&_t(e.type.length,0)&&D(e.type,0,e=>E(e,t))||E(e.type,t))}function Fp(e){return Pp(e,`object`)}function Ip(e){return I(e)&&(bs(e)||Ds(e)||Os(e)||ks(e)||rc(e)||tc(e)||ic(e)||Xs(e)||Gs(e)||lc(e)||mc(e))}function Lp(e){return Pp(e,`array`)}function Rp(e){return I(e)&&(ys(e)||zs(e)||Ts(e)||Hs(e)||Us(e)||qs(e)||Js(e)||nc(e)||pc(e)||fc(e))}function zp(e){return Pp(e,`string`)}function Bp(e){return I(e)&&(Ys(e)||Ws(e)||Is(e)||ec(e))}function Vp(e){return Pp(e,`number`)||Pp(e,`bigint`)}function Hp(e){return I(e)&&(Ks(e)||Vs(e)||Ps(e)||Fs(e)||Zs(e))}function Up(e,t,n,r){return t.UseUnevaluated()?A(A(t.Push(),B(e,t,n,r)),t.Pop()):B(e,t,n,r)}function B(e,t,n,r){e.Push(n);let i=[];if(vs(n))return rl(e,t,n,r);if(dc(n)&&i.push(xp(e,t,n,r)),Ip(n)){let a=[];lc(n)&&a.push(mp(e,t,n,r)),bs(n)&&a.push(Uc(e,t,n,r)),Ds(n)&&a.push(hl(e,t,n,r)),Os(n)&&a.push(vl(e,t,n,r)),ks(n)&&a.push(xl(e,t,n,r)),tc(n)&&a.push(Gf(e,t,n,r)),rc(n)&&a.push(ep(e,t,n,r)),ic(n)&&a.push(rp(e,t,n,r)),Xs(n)&&a.push(Ef(e,t,n,r)),Gs(n)&&a.push(cf(e,t,n,r));let o=F(a),s=j(yo(Eo(r)),o);i.push(Fp(n)?o:s)}if(Rp(n)){let a=[];ys(n)&&a.push(Nc(e,t,n,r)),Ts(n)&&a.push(fl(e,t,n,r)),zs(n)&&a.push(Gd(e,t,n,r)),Hs(n)&&a.push(Yd(e,t,n,r)),Us(n)&&a.push(tf(e,t,n,r)),qs(n)&&a.push(mf(e,t,n,r)),Js(n)&&a.push(bf(e,t,n,r)),nc(n)&&a.push(Jf(e,t,n,r)),fc(n)&&a.push(jp(e,t,n,r));let o=F(a),s=j(yo(bo(r)),o);i.push(Lp(n)?o:s)}if(Bp(n)){let a=[];Ws(n)&&a.push(af(e,t,n,r)),Ys(n)&&a.push(Cf(e,t,n,r)),Is(n)&&a.push(kd(e,t,n,r)),ec(n)&&a.push(Hf(e,t,n,r));let o=F(a),s=j(yo(Oo(r)),o);i.push(zp(n)?o:s)}if(Hp(n)){let a=[];Ps(n)&&a.push(Al(e,t,n,r)),Fs(n)&&a.push(Nl(e,t,n,r)),Vs(n)&&a.push(Qd(e,t,n,r)),Ks(n)&&a.push(_f(e,t,n,r)),Zs(n)&&a.push(kf(e,t,n,r));let o=F(a),s=j(yo(j(To(r),xo(r))),o);i.push(Vp(n)?o:s)}cc(n)&&i.push(dp(e,t,n,r)),sc(n)&&i.push(op(e,t,n,r)),js(n)&&i.push(wl(e,t,n,r)),ws(n)&&i.push(ol(e,t,n,r)),Ns(n)&&i.push(Dl(e,t,n,r)),Rs(n)&&i.push(Md(e,t,n,r)),Qs(n)&&i.push(Pf(e,t,n,r)),xs(n)&&i.push(Yc(e,t,n,r)),Cs(n)&&i.push(el(e,t,n,r)),$s(n)&&i.push(zf(e,t,n,r)),pc(n)&&i.push(j(yo(bo(r)),wp(e,t,n,r))),mc(n)&&i.push(j(yo(Do(r)),Dp(e,t,n,r))),_s(n)&&i.push(Ec(e,t,n,r));let a=F(i);return e.Pop(n),a}function Wp(e,t,n,r){return t.Push()&&V(e,t,n,r)&&t.Pop()}function V(e,t,n,r){e.Push(n);let i=vs(n)?il(e,t,n,r):(!dc(n)||Sp(e,t,n,r))&&(!(y(r)&&!T(r))||(!lc(n)||hp(e,t,n,r))&&(!bs(n)||Wc(e,t,n,r))&&(!Ds(n)||gl(e,t,n,r))&&(!Os(n)||yl(e,t,n,r))&&(!ks(n)||Sl(e,t,n,r))&&(!tc(n)||Kf(e,t,n,r))&&(!rc(n)||tp(e,t,n,r))&&(!ic(n)||ip(e,t,n,r))&&(!Xs(n)||Df(e,t,n,r))&&(!Gs(n)||lf(e,t,n,r)))&&(!T(r)||(!ys(n)||Pc(e,t,n,r))&&(!Ts(n)||pl(e,t,n,r))&&(!zs(n)||Kd(e,t,n,r))&&(!Hs(n)||Xd(e,t,n,r))&&(!Us(n)||nf(e,t,n,r))&&(!qs(n)||hf(e,t,n,r))&&(!Js(n)||xf(e,t,n,r))&&(!nc(n)||Yf(e,t,n,r))&&(!fc(n)||Mp(e,t,n,r)))&&(!x(r)||(!Ws(n)||of(e,t,n,r))&&(!Ys(n)||wf(e,t,n,r))&&(!Is(n)||Ad(e,t,n,r))&&(!ec(n)||Uf(e,t,n,r)))&&(!(S(r)||Qt(r))||(!Ps(n)||jl(e,t,n,r))&&(!Fs(n)||Pl(e,t,n,r))&&(!Vs(n)||$d(e,t,n,r))&&(!Ks(n)||vf(e,t,n,r))&&(!Zs(n)||Af(e,t,n,r)))&&(!cc(n)||fp(e,t,n,r))&&(!sc(n)||sp(e,t,n,r))&&(!js(n)||Tl(e,t,n,r))&&(!ws(n)||sl(e,t,n,r))&&(!Ns(n)||Ol(e,t,n,r))&&(!Rs(n)||Nd(e,t,n,r))&&(!Qs(n)||Ff(e,t,n,r))&&(!xs(n)||Xc(e,t,n,r))&&(!Cs(n)||tl(e,t,n,r))&&(!$s(n)||Bf(e,t,n,r))&&(!pc(n)||!T(r)||Tp(e,t,n,r))&&(!mc(n)||!y(r)||Op(e,t,n,r))&&(!_s(n)||Dc(e,t,n,r));return e.Pop(n),i}function Gp(e,t,n,r,i,a){return t.Push()&&Kp(e,t,n,r,i,a)&&t.Pop()}function Kp(e,t,n,r,i,a){if(t.AtCapacity())return!1;e.Push(i);let o=vs(i)?al(e,t,n,r,i,a):!!((!dc(i)||Cp(e,t,n,r,i,a))&+(!(y(a)&&!T(a))||!!((!lc(i)||gp(e,t,n,r,i,a))&+(!bs(i)||Gc(e,t,n,r,i,a))&(!Ds(i)||_l(e,t,n,r,i,a))&(!Os(i)||bl(e,t,n,r,i,a))&(!ks(i)||Cl(e,t,n,r,i,a))&(!tc(i)||qf(e,t,n,r,i,a))&(!rc(i)||np(e,t,n,r,i,a))&(!ic(i)||ap(e,t,n,r,i,a))&(!Xs(i)||Of(e,t,n,r,i,a))&(!Gs(i)||uf(e,t,n,r,i,a))))&(!T(a)||!!((!ys(i)||Fc(e,t,n,r,i,a))&+(!Ts(i)||ml(e,t,n,r,i,a))&(!zs(i)||qd(e,t,n,r,i,a))&(!Hs(i)||Zd(e,t,n,r,i,a))&(!Us(i)||rf(e,t,n,r,i,a))&(!qs(i)||gf(e,t,n,r,i,a))&(!Js(i)||Sf(e,t,n,r,i,a))&(!nc(i)||Xf(e,t,n,r,i,a))&(!fc(i)||Np(e,t,n,r,i,a))))&(!x(a)||!!((!Ws(i)||sf(e,t,n,r,i,a))&+(!Ys(i)||Tf(e,t,n,r,i,a))&(!Is(i)||jd(e,t,n,r,i,a))&(!ec(i)||Wf(e,t,n,r,i,a))))&(!(S(a)||Qt(a))||!!((!Ps(i)||Ml(e,t,n,r,i,a))&+(!Fs(i)||Fl(e,t,n,r,i,a))&(!Vs(i)||ef(e,t,n,r,i,a))&(!Ks(i)||yf(e,t,n,r,i,a))&(!Zs(i)||jf(e,t,n,r,i,a))))&(!cc(i)||pp(e,t,n,r,i,a))&(!sc(i)||cp(e,t,n,r,i,a))&(!js(i)||El(e,t,n,r,i,a))&(!ws(i)||cl(e,t,n,r,i,a))&(!Ns(i)||kl(e,t,n,r,i,a))&(!Rs(i)||Pd(e,t,n,r,i,a))&(!Qs(i)||If(e,t,n,r,i,a))&(!xs(i)||Zc(e,t,n,r,i,a))&(!Cs(i)||nl(e,t,n,r,i,a))&(!$s(i)||Vf(e,t,n,r,i,a))&(!pc(i)||!T(a)||Ep(e,t,n,r,i,a))&(!mc(i)||!y(a)||kp(e,t,n,r,i,a)))&&(!_s(i)||Oc(e,t,n,r,i,a));return e.Pop(i),o}const qp=[0],Jp=new Map,Yp=new Map;function Xp(){return`${qp[0]++}`}function Zp(e,t){Jp.has(e)||Jp.set(e,new Map);let n=Jp.get(e);if(n.has(t))return n.get(t);let r=Xp();return n.set(t,r),r}function Qp(e,t,n,r){return e.UseUnevaluated()?M(`check_${n}`,[`context`,r]):M(`check_${n}`,[r])}function $p(e,t,n,r){let i=B(e,t,n,`value`);return t.UseUnevaluated()?$o(`check_${r}`,Yo([`context`,`value`],i)):$o(`check_${r}`,Yo([`value`],i))}function em(){qp[0]=0,Jp.clear(),Yp.clear()}function tm(){return[...Yp.values()]}function nm(e,t,n,r){let i=Zp(n,e.LexicalBaseURL()),a=Qp(t,n,i,r);return Yp.has(i)?a:(Yp.set(i,``),Yp.set(i,$p(e,t,n,i)),a)}function rm(e,t){return y(t)&&!Pt(e)?t[e]:void 0}function im(e,t){return e.reduce((e,t)=>rm(t,e),t)}function am(e){if(E(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 om(e,t){return im(am(t),e)}const sm=`https://json-schema.org`;function cm(e,t){if(y(e)&&As(e)&&E(e.$dynamicAnchor,t))return e;if(y(e))for(let n of b(e)){let r=cm(e[n],t);if(r)return r}}function lm(e,t,n){if(E(e,n))return t.href;let r=I(e)&&Ls(e)?new URL(e.$id,t.href):t;if(T(e))for(let t of e){let e=lm(t,r,n);if(!v(e))return e}else if(y(e))for(let t of b(e)){let i=lm(e[t],r,n);if(!v(i))return i}}function um(e,t,n){if(E(e.$id,n.hash))return e;let r=new URL(n.href,t.href);if(E(t.pathname,r.pathname))return n.hash.startsWith(`#`)?pm(e,n):e}function dm(e,t,n){let r=new URL(`#${e.$anchor}`,t.href),i=new URL(n.href,t.href);return E(r.href,i.href)?e:void 0}function fm(e,t,n){let r=new URL(`#${e.$dynamicAnchor}`,t.href),i=new URL(n.href,t.href);return E(r.href,i.href)?e:void 0}function pm(e,t){if(t.href.endsWith(`#`))return e;if(!t.hash.startsWith(`#`))return;let n=decodeURIComponent(t.hash.slice(1));if(n.startsWith(`/`))return om(e,n)}function mm(e,t,n){if(Ls(e)){let r=um(e,t,n);if(!v(r))return r}if(Ss(e)){let r=dm(e,t,n);if(!v(r))return r}if(As(e)){let r=fm(e,t,n);if(!v(r))return r}return pm(e,n)}function hm(e,t,n){return e.reduce((e,r)=>{let i=vm(r,t,n);return v(i)?e:i},void 0)}function gm(e){return E(e,`const`)||E(e,`enum`)}function _m(e,t,n){return b(e).reduce((r,i)=>{if(gm(i))return r;let a=vm(e[i],t,n);return v(a)?r:a},void 0)}function vm(e,t,n){let r=I(e)&&Ls(e)?new URL(e.$id,t.href):t;if(I(e)){let t=mm(e,r,n);if(!v(t))return t}if(T(e))return hm(e,r,n);if(y(e))return _m(e,r,n)}function ym(e,t,n){return lm(e,new URL(t||`.`,sm),n)}function bm(e,t,n,r){let i=km(e,t,n,r,!1);return I(i)&&Ls(i)?i:void 0}function xm(e){return e.href.split(`#`)[0]}function Sm(e,t){return C(e,t)?e[t]:void 0}function Cm(e,t,n){return vm(e,t,n)}function wm(e,t,n){let r=xm(n);if(E(r,xm(t))||!C(e,r))return;let i=e[r],a=I(i)&&Ls(i)?new URL(i.$id,r):new URL(r);return E(n.hash,``)?i:vm(i,a,n)}function Tm(e,t,n,r,i){if(!r.$ref.startsWith(`#`)||C(e,`$schema`))return;let a=ym(t,n,i);if(!(v(a)||E(a,n)))return{target:i,base:a,root:t}}function Em(e,t,n){let r=e[t];if(I(r))return{target:n,base:t,root:r}}function Dm(e,t,n,r,i){let a=i?Em(e.context,r,n):void 0;return v(a)?Tm(e.root,e.lexicalSchema,e.referenceBase,t,n):a}function Om(e,t,n,r,i,a){if(Ls(i))return;let o=bm(e,t,n,r);if(!(!o||a.includes(o)))return{target:i,resource:o}}function km(e,t,n,r,i=!0){let a=new URL(n||`.`,sm),o=i&&Ls(t)?new URL(t.$id,a):a,s=new URL(r,o.href);return Sm(e,r)??Cm(t,o,s)??wm(e,o,s)}function Am(e,t,n,r,i,a){let o=new URL(n||`.`,sm),s=km(e,i.$dynamicRef.startsWith(`#`)?r:t,n,i.$dynamicRef,!1);if(v(s)){let e=new URL(i.$dynamicRef,o).hash;if(!e.startsWith(`#/`)&&e.startsWith(`#`)){let n=decodeURIComponent(e.slice(1));return a.find(e=>E(e.$dynamicAnchor,n))??cm(t,n)}return}return!I(s)||!As(s)||new URL(i.$dynamicRef,o).hash.startsWith(`#/`)?s:a.find(e=>E(e.$dynamicAnchor,s.$dynamicAnchor))??s}function jm(e,t){let n=e.inRetrievedFrame?e.lexicalSchema:e.root,r=t.$ref.startsWith(`#`)?e.lexicalSchema:n,i=km(e.context,r,e.referenceBase,t.$ref,!1);if(!i||!I(i))return{schema:i};let a=new URL(t.$ref,e.referenceBase).href.split(`#`)[0],o=!E(a,e.resourceBase);return{schema:i,retrievedResource:Dm(e,t,i,a,o),resolvedResource:o?Om(e.context,e.root,e.referenceBase,a,i,e.ids):void 0}}function Mm(e,t){let n=oc(e.lexicalSchema)?e.recursiveAnchors[0]:e.lexicalSchema;return km(e.context,n,e.lexicalBase,t.$recursiveRef,!1)}function Nm(e,t){return Am(e.context,e.root,e.lexicalBase,e.lexicalSchema,t,e.dynamicAnchors)}var H=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)},U,Pm,Fm,Im,Lm,Rm,zm,Bm,Vm,Hm,Um,Wm,Gm,Km,qm,Jm=class{constructor(e,t){U.add(this),this.context=e,this.schema=t,this.ids=[],this.resourceIds=[],this.anchors=[],this.recursiveAnchors=[],this.dynamicAnchors=[],this.retrievedResources=new Map,this.retrievedFrames=[],this.resolvedResources=new Map,this.pendingResource=!0}LexicalBaseURL(){return H(this,U,`m`,Im).call(this,this.ids)}Push(e){if(!I(e))return;Ls(e)&&H(this,U,`m`,Wm).call(this,e),Ss(e)&&this.anchors.push(e),oc(e)&&this.recursiveAnchors.push(e),As(e)&&this.dynamicAnchors.push(e);let t=this.retrievedResources.get(e);t&&this.retrievedFrames.push({schema:t.root,base:t.base,idDepth:this.ids.length,resourceDepth:this.resourceIds.length})}Pop(e){I(e)&&(Ls(e)&&H(this,U,`m`,Gm).call(this,e),Ss(e)&&this.anchors.pop(),oc(e)&&this.recursiveAnchors.pop(),As(e)&&this.dynamicAnchors.pop(),this.retrievedResources.has(e)&&this.retrievedFrames.pop(),H(this,U,`m`,qm).call(this,e))}Ref(e){let t=jm(H(this,U,`m`,Pm).call(this),e);return H(this,U,`m`,Fm).call(this,t),t.schema}RecursiveRef(e){let t=Mm(H(this,U,`m`,Pm).call(this),e);return t&&(this.pendingResource=!0),t}DynamicRef(e){let t=Nm(H(this,U,`m`,Pm).call(this),e);return t&&(this.pendingResource=!0),t}};U=new WeakSet,Pm=function(){return{context:this.context,root:this.schema,ids:this.ids,lexicalSchema:H(this,U,`m`,zm).call(this),lexicalBase:this.LexicalBaseURL(),referenceBase:H(this,U,`m`,Rm).call(this),resourceBase:H(this,U,`m`,Lm).call(this),recursiveAnchors:this.recursiveAnchors,dynamicAnchors:this.dynamicAnchors,inRetrievedFrame:this.retrievedFrames.length>0}},Fm=function(e){v(e.schema)||(this.pendingResource=!0),v(e.resolvedResource)||H(this,U,`m`,Km).call(this,e.resolvedResource.target,e.resolvedResource.resource),v(e.retrievedResource)||this.retrievedResources.set(e.retrievedResource.target,{base:e.retrievedResource.base,root:e.retrievedResource.root})},Im=function(e){let t=this.retrievedFrames[this.retrievedFrames.length-1],n=t?new URL(t.base):new URL(sm);return(t?e.slice(t.idDepth):e).reduce((e,t)=>new URL(t.$id,e),n).href},Lm=function(){let e=this.retrievedFrames[this.retrievedFrames.length-1];return e?this.resourceIds.slice(e.resourceDepth).reduce((e,t)=>new URL(t.$id,e),new URL(e.base)).href:H(this,U,`m`,Im).call(this,this.resourceIds)},Rm=function(){if(this.retrievedFrames.length>0)return H(this,U,`m`,Lm).call(this);let e=this.ids[this.ids.length-1];return e&&!/^[A-Za-z][A-Za-z0-9+.-]*:/.test(e.$id)?this.LexicalBaseURL():H(this,U,`m`,Lm).call(this)},zm=function(){let e=this.retrievedFrames[this.retrievedFrames.length-1];return e?this.ids.length>e.idDepth?this.ids[this.ids.length-1]:e.schema:this.ids.length>0?this.ids[this.ids.length-1]:this.schema},Bm=function(e){e.forEach(e=>H(this,U,`m`,Hm).call(this,e,!1))},Vm=function(e){e.forEach(e=>H(this,U,`m`,Um).call(this,e,!1))},Hm=function e(t,n=!0){if(vs(t))return;if(T(t))return H(this,U,`m`,Bm).call(this,t);if(!I(t))return;let r=t;if(!(!n&&Ls(r))){!n&&As(r)&&this.dynamicAnchors.push(r);for(let t of b(r))H(this,U,`m`,e).call(this,r[t],!1)}},Um=function e(t,n=!0){if(vs(t))return;if(T(t))return H(this,U,`m`,Vm).call(this,t);if(!I(t))return;let r=t;if(!(!n&&Ls(r))){!n&&As(r)&&this.dynamicAnchors.pop();for(let t of b(r))H(this,U,`m`,e).call(this,r[t],!1)}},Wm=function(e){this.ids.push(e);let t=this.pendingResource;this.pendingResource=!1,t&&this.resourceIds.push(e),H(this,U,`m`,Hm).call(this,e,!0)},Gm=function(e){this.ids.pop(),this.resourceIds.length>0&&E(this.resourceIds[this.resourceIds.length-1],e)&&this.resourceIds.pop(),H(this,U,`m`,Um).call(this,e,!0)},Km=function(e,t){H(this,U,`m`,Wm).call(this,t),this.resolvedResources.set(e,t)},qm=function(e){if(!this.resolvedResources.has(e))return;let t=this.resolvedResources.get(e);H(this,U,`m`,Gm).call(this,t),this.resolvedResources.delete(e)};function Ym(e){return`${e.Functions().join(`;
878
+ `)}; return (value) => { ${(e.UseUnevaluated()?[`const context = new CheckContext({}, {})`,`return ${e.Entry()}`]:[`return ${e.Entry()}`]).join(`; `)} }`}function Xm(e,t){return ls(`CheckContext`,`Guard`,`Format`,`Hashing`,e.External().identifier,t)(bc,Xe,Od,Ke,e.External().variables)}function Zm(e){let t=new Jm(e.Context(),e.Schema()),n=new bc;return r=>V(t,n,e.Schema(),r)}function Qm(e,t){return cs()?Xm(e,t):Zm(e)}var $m=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)}},eh=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=Ym(this),t=Qm(this,e);return new $m(cs(),e,t)}};function th(...e){let[t,n]=as(e,{2:(e,t)=>[e,t],1:e=>[{},e]});wc(),em();let r=new Jm(t,n),i=new yc(vc(t,n)),a=nm(r,i,n,`value`),o=tm();return new eh(t,n,Tc(),o,a,i.UseUnevaluated())}function nh(...e){let[t,n,r]=as(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]}),i=new Jm(t,n),a=new xc,o=Kp(i,a,`#`,``,n,r),s=a.GetErrors(),c=fs();return[o,s.map(e=>({...e,message:c(e)}))]}function rh(...e){let[t,n,r]=as(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return V(new Jm(t,n),new bc,n,r)}function ih(...e){let[t,n,r]=as(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return rh(t,n,r)}function ah(...e){let[t,n,r]=as(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]}),[i,a]=nh(t,n,r);return a}var oh=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 sh(e,t,n){return T(n)?n.map(n=>vh(e,t.items,n)):n}function ch(e,t,n){return vh({...e,...t.$defs},Ze(t.$ref),n)}function lh(e,t){let n=C(t,`unevaluatedProperties`)?{additionalProperties:t.unevaluatedProperties}:{},r=Gt(e,t),i=zt(r);return Je(i)?Mt(i,n):i}function uh(e,t,n){return vh(e,lh(e,t),n)}function dh(e){return C(e,`additionalProperties`)?e.additionalProperties:void 0}function fh(e,t,n){if(!y(n)||T(n))return n;let r=dh(t);for(let i of b(n)){if(C(t.properties,i)){n[i]=vh(e,t.properties[i],n[i]);continue}if(wt(r)&&E(r,!0)||Tt(r)&&ih(e,r,n[i])){n[i]=vh(e,r,n[i]);continue}delete n[i]}return n}function ph(e,t,n){if(!y(n))return n;let r=dh(t),[i,a]=[new RegExp(Ct(t)),Et(t)];for(let t of b(n)){if(i.test(t)){n[t]=vh(e,a,n[t]);continue}if(wt(r)&&E(r,!0)||Tt(r)&&ih(e,r,n[t])){n[t]=vh(e,r,n[t]);continue}delete n[t]}return n}function mh(e,t,n){return C(e,t.$ref)?vh(e,e[t.$ref],n):n}function hh(e,t,n){if(!T(n))return n;let r=Math.min(n.length,t.items.length);for(let i=0;i<r;i++)n[i]=vh(e,t.items[i],n[i]);return _t(n.length,r)?n.slice(0,r):n}function gh(e){return Xt(e)}function _h(e,t,n){for(let r of t.anyOf){let t=vh(e,r,gh(n));if(ih(e,r,t))return t}return n}function vh(e,t,n){return ot(t)?sh(e,t,n):Be(t)?ch(e,t,n):st(t)?uh(e,t,n):Je(t)?fh(e,t,n):St(t)?ph(e,t,n):Wt(t)?mh(e,t,n):Ht(t)?hh(e,t,n):Ot(t)?_h(e,t,n):n}function yh(e,t){for(let n of is.Keys(e))is.HasPropertyKey(t,n)||(t[n]=e[n]);return t}function bh(e){let t={};for(let n of is.Keys(e))t[n]=Ch(e[n]);return t}function xh(e){return Sh(Yt(e))}function Sh(e){return e.map(e=>Ch(e))}function Ch(e){return yh(e,ot(e)?Re(Ch(e.items),ht(e)):st(e)?$e(Sh(e.allOf)):Ot(e)?gt(xh(e.anyOf)):Je(e)?ut(bh(e.properties)):St(e)?Lt(Zt(e),Ch(Et(e))):Ht(e)?Rt(Sh(e.items)):e)}function wh(e){return Ch(e)}function Th(...e){let[t,n,r]=as(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return vh(t,Bt().unionPrioritySort?wh(n):n,r)}function Eh(e){return y(e)&&C(e,`value`)}function W(e){return{value:e}}function Dh(e){return T(e)?W(e):W([e])}function Oh(e){return E(e,!0)?W(BigInt(1)):W(BigInt(0))}const kh=/^-?(0|[1-9]\d*)n$/,Ah=/^-?(0|[1-9]\d*)\.\d+$/,jh=/^-?(0|[1-9]\d*)$/;function Mh(e){return kh.test(e)}function Nh(e){return Ah.test(e)}function Ph(e){return jh.test(e)}function Fh(e){let t=e.toLowerCase();return Mh(e)?W(BigInt(e.slice(0,e.length-1))):Nh(e)?W(BigInt(e.split(`.`)[0])):Ph(e)?W(BigInt(e)):E(t,`false`)?W(BigInt(0)):E(t,`true`)?W(BigInt(1)):void 0}function Ih(e){return Qt(e)?W(e):wt(e)?Oh(e):S(e)?W(BigInt(Math.trunc(e))):nn(e)?W(BigInt(0)):x(e)?Fh(e):v(e)?W(BigInt(0)):void 0}function Lh(e){return E(e,BigInt(0))?W(!1):E(e,BigInt(1))?W(!0):void 0}function Rh(e){return E(e,0)?W(!1):E(e,1)?W(!0):void 0}function zh(e){return E(e.toLowerCase(),`false`)?W(!1):E(e.toLowerCase(),`true`)?W(!0):E(e,`0`)?W(!1):E(e,`1`)?W(!0):void 0}function Bh(e){return Qt(e)?Lh(e):wt(e)?W(e):S(e)?Rh(e):nn(e)?W(!1):x(e)?zh(e):v(e)?W(!1):void 0}function Vh(e){return E(e,BigInt(0))?W(null):void 0}function Hh(e){return E(e,!1)?W(null):void 0}function Uh(e){return E(e,0)?W(null):void 0}function Wh(e){let t=e.toLowerCase();return E(t,`undefined`)||E(t,`null`)||E(e,``)||E(e,`0`)?W(null):void 0}function Gh(e){return Qt(e)?Vh(e):wt(e)?Hh(e):S(e)?Uh(e):nn(e)?W(null):x(e)?Wh(e):v(e)?W(null):void 0}const Kh=BigInt(2**53-1),qh=BigInt(-(2**53-1));function Jh(e){return e<=Kh&&e>=qh?W(Number(e)):void 0}function Yh(e){return W(+!!e)}function Xh(e){let t=+e;if(S(t))return W(t);let n=e.toLowerCase();if(E(n,`false`))return W(0);if(E(n,`true`))return W(1);let r=Ih(e);if(Eh(r))return r.value<=Kh&&r.value>=qh?W(Number(r.value)):void 0}function Zh(e){return Qt(e)?Jh(e):wt(e)?Yh(e):S(e)?W(e):nn(e)?W(0):x(e)?Xh(e):v(e)?W(0):void 0}function Qh(e){return Qt(e)||wt(e)||S(e)?W(e.toString()):nn(e)?W(`null`):x(e)?W(e):v(e)?W(``):void 0}function $h(e){return E(e,BigInt(0))?W(void 0):void 0}function eg(e){return E(e,!1)?W(void 0):void 0}function tg(e){return E(e,0)?W(void 0):void 0}function ng(e){let t=e.toLowerCase();return E(t,`undefined`)||E(t,`null`)||E(e,``)||E(e,`0`)?W(void 0):void 0}function rg(e){return Qt(e)?$h(e):wt(e)?eg(e):S(e)?tg(e):nn(e)?W(void 0):x(e)?ng(e):v(e)?W(e):void 0}function ig(e,t,n){return Dh(n).value.map(n=>jg(e,t.items,n))}function ag(e,t,n){let r=Ih(n);return Eh(r)?r.value:n}function og(e,t,n){let r=Bh(n);return Eh(r)?r.value:n}function sg(e,t,n){return jg({...e,...t.$defs},Ze(t.$ref),n)}function cg(e,t,n){return jg(e,zt(t),n)}function lg(e,t,n){let r=Zh(n);return Eh(r)?Math.trunc(r.value):n}function ug(e,t,n){let r=Gt(e,t);return jg(e,zt(r),n)}function dg(e,t,n){let r=Ih(n);return Eh(r)&&E(t.const,r.value)?r.value:n}function fg(e,t,n){let r=Bh(n);return Eh(r)&&E(t.const,r.value)?r.value:n}function pg(e,t,n){let r=Zh(n);return Eh(r)&&E(t.const,r.value)?r.value:n}function mg(e,t,n){let r=Qh(n);return Eh(r)&&E(t.const,r.value)?r.value:n}function hg(e,t,n){return E(t.const,n)?n:lt(t)?dg(e,t,n):Ge(t)?fg(e,t,n):Ue(t)?pg(e,t,n):rt(t)?mg(e,t,n):Ye()}function gg(e,t,n){let r=Gh(n);return Eh(r)?r.value:n}function _g(e,t,n){let r=Zh(n);return Eh(r)?r.value:n}function vg(e,t,n,r){let i=b(r);for(let[a,o]of t)for(let t of i)a.test(t)||(r[t]=jg(e,n,r[t]));return r}function yg(e,t,n){return ft(e)&&v(n[t])}function bg(e,t,n){let r=yt(t.properties),i=b(n);for(let[t,a]of r)for(let r of i)!t.test(r)||yg(a,r,n)||(n[r]=jg(e,a,n[r]));return C(t,`additionalProperties`)&&y(t.additionalProperties)?vg(e,r,t.additionalProperties,n):n}function xg(e,t,n){return We(n)?bg(e,t,n):n}function Sg(e,t,n){let r=yt(t.patternProperties),i=b(n);for(let[t,a]of r)for(let r of i)t.test(r)&&(n[r]=jg(e,a,n[r]));return C(t,`additionalProperties`)&&y(t.additionalProperties)?vg(e,r,t.additionalProperties,n):n}function Cg(e,t,n){return We(n)?Sg(e,t,n):n}function wg(e,t,n){return C(e,t.$ref)?jg(e,e[t.$ref],n):n}function Tg(e,t,n){let r=Qh(n);return Eh(r)?r.value:n}function Eg(e,t,n){return jg(e,zt(t),n)}function Dg(e,t,n){if(!T(n))return n;for(let r=0;r<Math.min(t.items.length,n.length);r++)n[r]=jg(e,t.items[r],n[r]);return n}function Og(e,t,n){let r=rg(n);return Eh(r)?r.value:n}function kg(e,t,n){if(t.anyOf.some(t=>ih(e,t,n)))return n;let r=t.anyOf.map(t=>jg(e,t,gh(n))).find(n=>ih(e,t,n));return v(r)?n:r}function Ag(e,t,n){return Eh(rg(n))?void 0:n}function jg(e,t,n){return ot(t)?ig(e,t,n):et(t)?ag(e,t,n):Nt(t)?og(e,t,n):Be(t)?sg(e,t,n):cn(t)?cg(e,t,n):ze(t)?lg(e,t,n):st(t)?ug(e,t,n):tn(t)?hg(e,t,n):Ve(t)?gg(e,t,n):rn(t)?_g(e,t,n):Je(t)?xg(e,t,n):St(t)?Cg(e,t,n):Wt(t)?wg(e,t,n):$t(t)?Tg(e,t,n):vt(t)?Eg(e,t,n):Ht(t)?Dg(e,t,n):qt(t)?Og(e,t,n):Ot(t)?kg(e,t,n):Vt(t)?Ag(e,t,n):n}function Mg(...e){let[t,n,r]=as(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return jg(t,n,r)}function Ng(e,t,n){if(!T(n))return n;for(let r=0;r<n.length;r++)n[r]=Hg(e,t.items,n[r]);return n}function Pg(e,t,n){return Hg({...e,...t.$defs},Ze(t.$ref),n)}function Fg(e,t){return v(t)?jt(e.default)?e.default():gh(e.default):t}function Ig(e,t,n){let r=Gt(e,t);return Hg(e,zt(r),n)}function Lg(e,t,n){if(!y(n))return n;let r=b(t.properties);for(let i of r){let r=Hg(e,t.properties[i],n[i]);v(r)&&(ft(t.properties[i])||!C(t.properties[i],`default`))||(n[i]=r)}if(!bs(t)||wt(t.additionalProperties))return n;for(let i of b(n))r.includes(i)||(n[i]=Hg(e,t.additionalProperties,n[i]));return n}function Rg(e,t,n){if(!y(n))return n;let[r,i]=[new RegExp(Ct(t)),Et(t)];for(let t of b(n))r.test(t)&&Es(i)&&(n[t]=Hg(e,i,n[t]));if(!bs(t))return n;for(let i of b(n))r.test(i)||(n[i]=Hg(e,t.additionalProperties,n[i]));return n}function zg(e,t,n){return C(e,t.$ref)?Hg(e,e[t.$ref],n):n}function Bg(e,t,n){if(!T(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]=Hg(e,r[t],n[t]));return n}function Vg(e,t,n){for(let r of t.anyOf){let t=Hg(e,r,gh(n));if(ih(e,r,t))return t}return n}function Hg(e,t,n){let r=Es(t)?Fg(t,n):n;return ot(t)?Ng(e,t,r):Be(t)?Pg(e,t,r):st(t)?Ig(e,t,r):Je(t)?Lg(e,t,r):St(t)?Rg(e,t,r):Wt(t)?zg(e,t,r):Ht(t)?Bg(e,t,r):Ot(t)?Vg(e,t,r):r}function Ug(...e){let[t,n,r]=as(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return Hg(t,n,r)}function Wg(e){return(...t)=>{let[n,r,i]=as(t,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return e.reduce((e,t)=>t(n,r,e),i)}}function Gg(e,t,n){return t[`~codec`].decode(n)}function Kg(e,t,n){return t[`~codec`].encode(n)}function G(e,t,n,r){return nt(n)?E(e,`Decode`)?Gg(t,n,r):Kg(t,n,r):r}function qg(e,t,n,r){if(!T(r))return r;for(let i=0;i<r.length;i++)r[i]=g_(e,t,n.items,r[i]);return G(e,t,n,r)}function Jg(e,t,n,r){let i=G(e,t,n,r);if(!T(i))return i;for(let r=0;r<i.length;r++)i[r]=g_(e,t,n.items,i[r]);return i}function Yg(e,t,n,r){return E(e,`Decode`)?qg(e,t,n,r):Jg(e,t,n,r)}function Xg(e,t,n,r){return r=g_(e,{...t,...n.$defs},Ze(n.$ref),r),G(e,t,n,r)}function Zg(e){return e.reduce((e,t)=>({...e,...t}),{})}function Qg(e,t){for(let n of t)if(!Ut(e,n))return n;return e}function $g(e,t,n,r){if(E(n.allOf.length,0))return G(e,t,n,r);let i=n.allOf.map(n=>g_(e,t,n,Th(n,gh(r))));return G(e,t,n,i.every(e=>y(e))?Zg(i):Qg(r,i))}function e_(e,t,n,r){if(E(n.allOf.length,0))return G(e,t,n,r);let i=G(e,t,n,r),a=n.allOf.map(n=>g_(e,t,n,Th(n,gh(i))));return a.every(e=>y(e))?Zg(a):Qg(i,a)}function t_(e,t,n,r){return E(e,`Decode`)?$g(e,t,n,r):e_(e,t,n,r)}function n_(e,t,n,r){if(!We(r))return r;for(let i of b(n.properties))!C(r,i)||yg(n.properties[i],i,r)||(r[i]=g_(e,t,n.properties[i],r[i]));return G(e,t,n,r)}function r_(e,t,n,r){let i=G(e,t,n,r);if(!We(i))return i;for(let r of b(n.properties))!C(i,r)||yg(n.properties[r],r,i)||(i[r]=g_(e,t,n.properties[r],i[r]));return i}function i_(e,t,n,r){return E(e,`Decode`)?n_(e,t,n,r):r_(e,t,n,r)}function a_(e,t,n,r){if(!We(r))return r;let i=new RegExp(Ct(n));for(let a of b(r))i.test(a)&&(r[a]=g_(e,t,Et(n),r[a]));return G(e,t,n,r)}function o_(e,t,n,r){let i=G(e,t,n,r);if(!We(i))return i;let a=new RegExp(Ct(n));for(let r of b(i))a.test(r)&&(i[r]=g_(e,t,Et(n),i[r]));return i}function s_(e,t,n,r){return E(e,`Decode`)?a_(e,t,n,r):o_(e,t,n,r)}function c_(e,t,n,r){return C(t,n.$ref)?g_(e,t,t[n.$ref],r):r}function l_(e,t,n,r){return E(e,`Decode`)?G(e,t,n,c_(e,t,n,r)):c_(e,t,n,G(e,t,n,r))}function u_(e,t,n,r){if(!T(r))return r;for(let i=0;i<Math.min(n.items.length,r.length);i++)r[i]=g_(e,t,n.items[i],r[i]);return G(e,t,n,r)}function d_(e,t,n,r){let i=G(e,t,n,r);if(!T(i))return r;for(let r=0;r<Math.min(n.items.length,i.length);r++)i[r]=g_(e,t,n.items[r],i[r]);return i}function f_(e,t,n,r){return E(e,`Decode`)?u_(e,t,n,r):d_(e,t,n,r)}function p_(e,t,n,r){for(let i of n.anyOf)if(ih(t,i,r))return G(e,t,n,g_(e,t,i,r));return r}function m_(e,t,n,r){let i=G(e,t,n,r);for(let r of n.anyOf){let n=g_(e,t,r,gh(i));if(ih(t,r,n))return n}return i}function h_(e,t,n,r){return E(e,`Decode`)?p_(e,t,n,r):m_(e,t,n,r)}function g_(e,t,n,r){return ot(n)?Yg(e,t,n,r):Be(n)?Xg(e,t,n,r):st(n)?t_(e,t,n,r):Je(n)?i_(e,t,n,r):St(n)?s_(e,t,n,r):Wt(n)?l_(e,t,n,r):Ht(n)?f_(e,t,n,r):Ot(n)?h_(e,t,n,r):G(e,t,n,r)}var __=class extends oh{constructor(e,t){super(`Decode`,e,t)}};function v_(e,t,n){if(!ih(e,t,n))throw new __(n,ah(e,t,n));return n}function y_(e,t,n){return g_(`Decode`,e,Bt().unionPrioritySort?wh(t):t,n)}const b_=Wg([(e,t,n)=>gh(n),(e,t,n)=>Ug(e,t,n),(e,t,n)=>Mg(e,t,n),(e,t,n)=>Th(e,t,n),(e,t,n)=>v_(e,t,n),(e,t,n)=>y_(e,t,n)]);function x_(...e){let[t,n,r]=as(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return b_(t,n,r)}var S_=class extends oh{constructor(e,t){super(`Encode`,e,t)}};function C_(e,t,n){if(!ih(e,t,n))throw new S_(n,ah(e,t,n));return n}function w_(e,t,n){return g_(`Encode`,e,Bt().unionPrioritySort?wh(t):t,n)}const T_=Wg([(e,t,n)=>gh(n),(e,t,n)=>w_(e,t,n),(e,t,n)=>Ug(e,t,n),(e,t,n)=>Mg(e,t,n),(e,t,n)=>Th(e,t,n),(e,t,n)=>C_(e,t,n)]);function E_(...e){let[t,n,r]=as(e,{3:(e,t,n)=>[e,t,n],2:(e,t)=>[{},e,t]});return T_(t,n,r)}function D_(e,t){return nt(t)||F_(e,t.items)}function O_(e,t){return nt(t)||M_({...e,...t.$defs},Ze(t.$ref))}function k_(e,t){return nt(t)||t.allOf.some(t=>F_(e,t))}function A_(e,t){return nt(t)||b(t.properties).some(n=>F_(e,t.properties[n]))}function j_(e,t){return nt(t)||F_(e,Et(t))}function M_(e,t){return!I_.has(t.$ref)&&(I_.add(t.$ref),nt(t)||C(e,t.$ref)&&F_(e,e[t.$ref]))}function N_(e,t){return nt(t)||t.items.some(t=>F_(e,t))}function P_(e,t){return nt(t)||t.anyOf.some(t=>F_(e,t))}function F_(e,t){return ot(t)?D_(e,t):Be(t)?O_(e,t):st(t)?k_(e,t):Je(t)?A_(e,t):St(t)?j_(e,t):Wt(t)?M_(e,t):Ht(t)?N_(e,t):Ot(t)?P_(e,t):nt(t)}const I_=new Set;function L_(...e){let[t,n]=as(e,{2:(e,t)=>[e,t],1:e=>[{},e]});return I_.clear(),F_(t,n)}var R_=class extends Error{constructor(e,t){super(t),this.type=e}};function z_(e,t){return jt(t.default)?t.default(t):y(t.default)?gh(t.default):t.default}function B_(e,t){if(fc(t)&&!Es(t))throw new R_(t,`Arrays with uniqueItems constraints must specify a default annotation`);let n=Js(t)?t.minItems:0;return Array.from({length:n},()=>sv(e,t.items))}function V_(e,t){return Fs(t)?BigInt(t.exclusiveMinimum)+BigInt(1):Ks(t)?BigInt(t.minimum):BigInt(0)}function H_(e,t){return!1}function U_(e,t){let n=sv(e,t.instanceType);return class{constructor(){Object.assign(this,n)}}}function W_(e,t){return sv({...e,...t.$defs},Ze(t.$ref))}function G_(e,t){return sv(e,zt(t))}function K_(e,t){let n=sv(e,t.returnType);return()=>n}function q_(e,t){return Fs(t)&&S(t.exclusiveMinimum)?t.exclusiveMinimum+1:Ks(t)?t.minimum:0}function J_(e,t){let n=Gt(e,t);return sv(e,zt(n))}function Y_(e,t){return t.const}function X_(e,t){throw new R_(t,`Cannot create TNever types`)}function Z_(e,t){return null}function Q_(e,t){return Fs(t)&&S(t.exclusiveMinimum)?t.exclusiveMinimum+1:Ks(t)?t.minimum:0}function $_(e,t){return(v(t.required)?[]:t.required).reduce((n,r)=>({...n,[r]:sv(e,t.properties[r])}),{})}function ev(e,t){if(Xs(t)&&!Es(t))throw new R_(t,`Record with the minProperties constraint must have a default annotation`);return{}}function tv(e,t){return C(e,t.$ref)?sv(e,e[t.$ref]):(()=>{throw new R_(t,`Unable to deref Ref`)})()}function nv(e,t){if((ec(t)||Is(t))&&!Es(t))throw Error(`Strings with format or pattern constraints must specify default`);let n=Ys(t)?t.minLength:0;return``.padEnd(n)}function rv(e,t){return Symbol()}function iv(e,t){let n=At(t.pattern);if($t(n))throw new R_(t,`Unable to create TemplateLiteral due to infinite type expansion`);return sv(e,n)}function av(e,t){return Array.from({length:t.minItems},(n,r)=>sv(e,t.items[r]))}function ov(e,t){if(E(t.anyOf.length,0))throw Error(`Unable to create Union with no variants`);return sv(e,t.anyOf[0])}function sv(e,t){return Es(t)?z_(e,t):ot(t)?B_(e,t):et(t)?V_(e,t):Nt(t)?H_(e,t):pt(t)?U_(e,t):Be(t)?W_(e,t):cn(t)?G_(e,t):mt(t)?K_(e,t):ze(t)?q_(e,t):st(t)?J_(e,t):tn(t)?Y_(e,t):Qe(t)?X_(e,t):Ve(t)?Z_(e,t):rn(t)?Q_(e,t):Je(t)?$_(e,t):St(t)?ev(e,t):Wt(t)?tv(e,t):$t(t)?nv(e,t):bt(t)?rv(e,t):vt(t)?iv(e,t):Ht(t)?av(e,t):qt(t)?void 0:Ot(t)?ov(e,t):(Vt(t),void 0)}function cv(...e){let[t,n]=as(e,{2:(e,t)=>[e,t],1:e=>[{},e]});return sv(t,n)}var lv=class extends oh{constructor(e,t){super(`Parse`,e,t)}};function uv(e,t,n){if(!ih(e,t,n))throw new lv(n,ah(e,t,n));return n}const dv=Wg([(e,t,n)=>gh(n),(e,t,n)=>Ug(e,t,n),(e,t,n)=>Mg(e,t,n),(e,t,n)=>Th(e,t,n),(e,t,n)=>uv(e,t,n)]),fv=ut({type:Ft(`insert`),path:on(),value:dt()}),pv=Object({type:Ft(`update`),path:on(),value:dt()}),mv=ut({type:Ft(`delete`),path:on()});gt([fv,pv,mv]);var hv=class{constructor(e,t){this.hasCodec=L_(e,t),this.buildResult=th(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(Bt().correctiveParse)return dv(this.Context(),this.Type(),e);throw new lv(e,this.Errors(e))}Errors(e){return this.IsAccelerated()&&this.Check(e)?[]:ah(this.Context(),this.Type(),e)}Clean(e){return Th(this.Context(),this.Type(),e)}Convert(e){return Mg(this.Context(),this.Type(),e)}Create(){return cv(this.Context(),this.Type())}Default(e){return Ug(this.Context(),this.Type(),e)}Decode(e){return this.hasCodec?x_(this.Context(),this.Type(),e):this.Parse(e)}Encode(e){return this.hasCodec?E_(this.Context(),this.Type(),e):this.Parse(e)}};function gv(...e){let[t,n]=as(e,{2:(e,t)=>[e,t],1:e=>[{},e]});return new hv(t,n)}const _v=new WeakMap,vv=Symbol.for(`TypeBox.Kind`);function yv(e){return typeof e.type==`string`?[e.type]:Array.isArray(e.type)?e.type.filter(e=>typeof e==`string`):[]}function bv(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 xv(e){try{return Ov(e)}catch{return}}function Sv(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 Cv(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]=Ev(e[t],r));if(t.additionalProperties&&typeof t.additionalProperties==`object`)for(let[n,i]of Object.entries(e))r.has(n)||(e[n]=Ev(i,t.additionalProperties))}function wv(e,t){if(Array.isArray(t.items)){for(let n=0;n<e.length;n++){let r=t.items[n];r&&(e[n]=Ev(e[n],r))}return}if(t.items&&typeof t.items==`object`)for(let n=0;n<e.length;n++)e[n]=Ev(e[n],t.items)}function Tv(e,t){for(let n of t)if(xv(n)?.Check(e))return e;for(let n of t){let t=Ev(structuredClone(e),n);if(xv(n)?.Check(t))return t}return e}function Ev(e,t){let n=e;if(Array.isArray(t.allOf))for(let e of t.allOf)n=Ev(n,e);Array.isArray(t.anyOf)&&(n=Tv(n,t.anyOf)),Array.isArray(t.oneOf)&&(n=Tv(n,t.oneOf));let r=yv(t),i=r.length>1&&r.some(e=>bv(n,e));if(r.length>0&&!i)for(let e of r){let t=Sv(n,e);if(t!==n){n=t;break}}return r.includes(`object`)&&typeof n==`object`&&n&&!Array.isArray(n)&&Cv(n,t),r.includes(`array`)&&Array.isArray(n)&&wv(n,t),n}function Dv(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&&Dv(e[n],r)}else if(t.items)for(let n of e)Dv(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`&&xv(i)?.Check(null)===!1?delete n[e]:Dv(n[e],i))}function Ov(e){let t=e,n=_v.get(t);if(n)return n;let r=gv(e);return _v.set(t,r),r}function kv(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 Av(e,t){let n=structuredClone(t.arguments);Dv(n,e.parameters),Mg(e.parameters,n);let r=Ov(e.parameters);if(!Object.getOwnPropertySymbols(e.parameters).includes(vv)){let t=Ev(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=>` - ${kv(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 jv(){throw Error(`No default stream function configured. Pass streamFn explicitly or call setDefaultStreamFn().`)}async function Mv(e,t,n,r,i,a){let o=Fv(t,e),s=[...o],c={...t,messages:[...t.messages,...o]};await r({type:`agent_start`}),await r({type:`turn_start`});for(let e of o)await r({type:`message_start`,message:e}),await r({type:`message_end`,message:e});return await Pv(c,s,n,i,r,a??jv()),s}async function Nv(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 Pv(o,a,t,r,n,i??jv()),a}async function Pv(e,t,n,r,i,a){let o=e,s=n,c,l=!1,u=await s.getSteeringMessages?.()||[];for(;;){let e=!0;for(;e||u.length>0;){let n=[];if(c){let e=await s.prepareNextTurn?.(c);e&&(o=e.context??o,n=e.messages??[],s={...s,model:e.model??s.model,reasoning:e.thinkingLevel===void 0?s.reasoning:e.thinkingLevel===`off`?void 0:e.thinkingLevel}),u.length===0&&(u=await s.getSteeringMessages?.()||[]),await i({type:`turn_start`})}for(let e of Fv(o,[...n,...u]))await i({type:`message_start`,message:e}),await i({type:`message_end`,message:e}),o.messages.push(e),t.push(e);u=[];let d=await s.prepareRequest?.({context:o,model:s.model,thinkingLevel:s.reasoning??`off`},r);d&&(o=d.context??o,s={...s,model:d.model??s.model,reasoning:d.thinkingLevel===void 0?s.reasoning:d.thinkingLevel===`off`?void 0:d.thinkingLevel});let f=await Rv(o,s,r,i,a);if(t.push(f),f.stopReason===`error`||f.stopReason===`aborted`){c={message:f,toolResults:[],context:o,newMessages:t},await s.finishTurn?.(c,r),await i({type:`turn_end`,message:f,toolResults:[]}),await i({type:`agent_end`,messages:t});return}let p=f.content.filter(e=>e.type===`toolCall`),m=[];if(e=!1,p.length>0){let n=f.stopReason===`length`?await zv(p,i):await Bv(o,f,s,r,i);m.push(...n.messages),e=!n.terminate;for(let e of m)o.messages.push(e),t.push(e)}c={message:f,toolResults:m,context:o,newMessages:t};let h=await s.finishTurn?.(c,r);if(await i({type:`turn_end`,message:f,toolResults:m}),h?.action===`end`){await i({type:`agent_end`,messages:t});return}l=h?.action===`continue`,u=await s.getSteeringMessages?.()||[],(e||u.length>0)&&(l=!1)}let n=await s.getFollowUpMessages?.()||[];if(n.length>0){l=!1,u=n;continue}if(l){l=!1;continue}break}await i({type:`agent_end`,messages:t})}function Fv(e,t){let n=-1;for(let e=t.length-1;e>=0;e--)if(t[e].role===`system`){n=e;break}let r=t[n],i=r?t.map((e,t)=>t===n?Lv(r,Iv):e):t,a=pn(hn([...e.messages,...i]),(e.tools??[]).map(gn)),o=a.toolsAdded.length===0&&a.toolsRemoved.length===0;if(r)return o&&!r.toolsAdded?.length&&!r.toolsRemoved?.length?t:i.map((e,t)=>t===n?Lv(r,a):e);if(o)return t;let s=Lv({role:`system`,content:``,timestamp:Date.now()},a),c=t.findIndex(e=>e.role!==`system`),l=c===-1?t.length:c;return[...t.slice(0,l),s,...t.slice(l)]}const Iv={toolsAdded:[],toolsRemoved:[]};function Lv(e,{toolsAdded:t,toolsRemoved:n}){let{toolsAdded:r,toolsRemoved:i,...a}=e;return{...a,...t.length>0?{toolsAdded:t}:{},...n.length>0?{toolsRemoved:n}:{}}}async function Rv(e,t,n,r,i){let a=e.messages;t.transformContext&&(a=await t.transformContext(a,n));let o=await t.convertToLlm(a),s=dn({messages:o}),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=async()=>Object.assign(await l.result(),{thinkingLevel:t.reasoning??`off`}),d=null,f=!1;for await(let t of l)switch(t.type){case`start`:d=t.partial,e.messages.push(d),f=!0,await r({type:`message_start`,message:{...d}});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`:d&&(d=t.partial,e.messages[e.messages.length-1]=d,await r({type:`message_update`,assistantMessageEvent:t,message:{...d}}));break;case`done`:case`error`:{let t=await u();return f?e.messages[e.messages.length-1]=t:e.messages.push(t),f||await r({type:`message_start`,message:{...t}}),await r({type:`message_end`,message:t}),t}}let p=await u();return f?e.messages[e.messages.length-1]=p:(e.messages.push(p),await r({type:`message_start`,message:{...p}})),await r({type:`message_end`,message:p}),p}async function zv(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:Yv(`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 Xv(e,t);let i=Zv(e);await Qv(i,t),n.push(i)}return{messages:n,terminate:!1}}async function Bv(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?Vv(e,t,a,n,r,i):Hv(e,t,a,n,r,i)}async function Vv(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 Gv(e,t,c,r,i),l;l=n.kind===`immediate`?{toolCall:c,result:n.result,isError:n.isError}:await Jv(e,t,n,await qv(n,i,Kv(c,a)),r,i),await Xv(l,a);let u=Zv(l);if(await Qv(u,a),o.push(l),s.push(u),i?.aborted)break}return{messages:s,terminate:Uv(o)}}async function Hv(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 Gv(e,t,s,r,i);if(n.kind===`immediate`){let e={toolCall:s,result:n.result,isError:n.isError};if(await Xv(e,a),o.push(e),i?.aborted)break;continue}if(o.push(async()=>{if(i?.aborted){let e={toolCall:s,result:Yv(`Operation aborted`),isError:!0};return await Xv(e,a),e}let o=await qv(n,i,Kv(s,a)),c=await Jv(e,t,n,o,r,i);return await Xv(c,a),c}),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=Zv(e);await Qv(t,a),c.push(t)}return{messages:c,terminate:Uv(s)}}function Uv(e){return e.length>0&&e.every(e=>e.result.terminate===!0)}function Wv(e,t){if(!e.prepareArguments)return t;let n=e.prepareArguments(t.arguments);return n===t.arguments?t:{...t,arguments:n}}async function Gv(e,t,n,r,i,a=e.tools??[]){let o=a.find(e=>e.name===n.name);if(!o)return{kind:`immediate`,result:Yv(`Tool ${n.name} not found`),isError:!0};try{let a=Av(o,Wv(o,n));if(r.beforeToolCall){let o=await r.beforeToolCall({assistantMessage:t,toolCall:n,args:a,context:e},i);if(i?.aborted)return{kind:`immediate`,result:Yv(`Operation aborted`),isError:!0};if(o?.block){let e=Yv(o.reason||`Tool execution was blocked`);return o.terminate===!0&&(e.terminate=!0),{kind:`immediate`,result:e,isError:!0}}}return i?.aborted?{kind:`immediate`,result:Yv(`Operation aborted`),isError:!0}:{kind:`prepared`,toolCall:n,tool:o,args:a}}catch(e){return{kind:`immediate`,result:Yv(e instanceof Error?e.message:String(e)),isError:!0}}}function Kv(e,t){return n=>t({type:`tool_execution_update`,toolCallId:e.id,toolName:e.name,args:e.arguments,partialResult:n})}async function qv(e,t,n){let r=[],i=!0;try{let a=await e.tool.execute(e.toolCall.id,e.args,t,e=>{i&&r.push(Promise.resolve(n(e)))});return i=!1,await Promise.all(r),{result:a,isError:a.isError===!0}}catch(e){return i=!1,await Promise.all(r),{result:Yv(e instanceof Error?e.message:String(e)),isError:!0}}finally{i=!1}}async function Jv(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);if(r){let e=r.structuredContent??(r.content?void 0:o.structuredContent);o={...o,content:r.content??o.content,details:r.details??o.details,usage:r.usage??o.usage,terminate:r.terminate??o.terminate},e===void 0?delete o.structuredContent:o.structuredContent=e,s=r.isError??s}}catch(e){o=Yv(e instanceof Error?e.message:String(e)),s=!0}return{toolCall:n.toolCall,result:o,isError:s}}function Yv(e){return{content:[{type:`text`,text:e}],details:{}}}async function Xv(e,t){await t({type:`tool_execution_end`,toolCallId:e.toolCall.id,toolName:e.toolCall.name,result:e.result,isError:e.isError})}function Zv(e){return{role:`toolResult`,toolCallId:e.toolCall.id,toolName:e.toolCall.name,content:e.result.content??[],details:e.result.details,usage:e.result.usage,isError:e.isError,timestamp:Date.now()}}async function Qv(e,t){await t({type:`message_start`,message:e}),await t({type:`message_end`,message:e})}function $v(e){return e.filter(e=>e.role===`system`||e.role===`user`||e.role===`assistant`||e.role===`toolResult`)}const ey={input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},ty={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 ny(e){let t=e?.tools?.slice()??[],n=e?.messages?.slice()??[],r=mn(e?.systemPrompt,t.map(gn));return n[0]?.role!==`system`&&r&&n.unshift(r),{get systemPrompt(){return fn(n)},model:e?.model??ty,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 ry=class{messages=[];mode;constructor(e){this.mode=e}enqueue(e){this.messages.push(e)}hasItems(){return this.messages.length>0}peek(){if(this.mode===`all`)return this.messages.slice();let e=this.messages[0];return e?[e]:[]}drain(){let e=this.peek();return this.messages=this.messages.slice(e.length),e}clear(){this.messages=[]}},iy=class{_state;listeners=new Set;steeringQueue;followUpQueue;convertToLlm;transformContext;streamFunction;getApiKey;onPayload;onResponse;onProviderStreamEvent;beforeToolCall;afterToolCall;finishTurn;prepareRequest;prepareNextTurn;prepareNextTurnWithContext;activeRun;sessionId;thinkingBudgets;transport;maxRetryDelayMs;toolExecution;constructor(e){let t=e??{};this._state=ny(t.initialState),this.convertToLlm=t.convertToLlm??$v,this.transformContext=t.transformContext,this.streamFunction=t.streamFn??jv(),this.getApiKey=t.getApiKey,this.onPayload=t.onPayload,this.onResponse=t.onResponse,this.onProviderStreamEvent=t.onProviderStreamEvent,this.beforeToolCall=t.beforeToolCall,this.afterToolCall=t.afterToolCall,this.finishTurn=t.finishTurn,this.prepareRequest=t.prepareRequest,this.prepareNextTurn=t.prepareNextTurn,this.prepareNextTurnWithContext=t.prepareNextTurnWithContext,this.steeringQueue=new ry(t.steeringMode??`one-at-a-time`),this.followUpQueue=new ry(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()}peekQueuedMessages(){let e=this.steeringQueue.peek();return e.length>0?e:this.followUpQueue.peek()}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.`);let e=un(this._state.messages);this._state.messages=e?[e]:[],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||this._state.messages.every(e=>e.role===`system`))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 Mv(e,this.createContextSnapshot(),this.createLoopConfig(t),e=>this.processEvents(e),n,this.streamFunction)})}async runContinuation(){await this.runWithLifecycle(async e=>{await Nv(this.createContextSnapshot(),this.createLoopConfig(),e=>this.processEvents(e),e,this.streamFunction)})}createContextSnapshot(){return{messages:this._state.messages.slice(),tools:this._state.tools.slice()}}createLoopConfig(e={}){let t=e.skipInitialSteeringPoll===!0;return{model:this._state.model,reasoning:this._state.thinkingLevel===`off`?void 0:this._state.thinkingLevel,sessionId:this.sessionId,onPayload:this.onPayload,onResponse:this.onResponse,onProviderStreamEvent:this.onProviderStreamEvent,transport:this.transport,thinkingBudgets:this.thinkingBudgets,maxRetryDelayMs:this.maxRetryDelayMs,toolExecution:this.toolExecution,beforeToolCall:this.beforeToolCall,afterToolCall:this.afterToolCall,finishTurn:this.finishTurn,prepareRequest:this.prepareRequest,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:ey,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 ay(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 oy(e){let t=e.mimeType||`application/octet-stream`;return`${e.name} (${t}, ${ay(e.size)})`}function sy(e){let t=oy(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 cy(e,t){if(!t?.length)return e;let n=t.map(sy),r=e.trim();return r?`${r}\n\n${n.join(`
881
881
 
882
882
  `)}`:n.join(`
883
883
 
884
- `)}function ay(e){return e?.length?e.filter(e=>e.kind===`image`&&e.data).map(e=>({type:`image`,data:e.data,mimeType:e.mimeType})):[]}const oy=`sessions`;function sy(){return new Promise((e,t)=>{let n=indexedDB.open(`agent-sessions`,1);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(oy)||e.createObjectStore(oy,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}var cy=class{dbPromise=null;getDB(){return this.dbPromise||=sy().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(oy,`readwrite`).objectStore(oy).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(oy,`readonly`).objectStore(oy).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(oy,`readwrite`).objectStore(oy).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(oy,`readonly`).objectStore(oy).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(oy,`readonly`).objectStore(oy).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(oy,`readwrite`).objectStore(oy).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()}}},ly=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}},uy=e({clearBudgetWindowCache:()=>gy,getBudgetWindowSnapshot:()=>my,refreshBudgetWindow:()=>hy});async function dy(){let e=se();if(!e)return null;let t=je(e);if(!t?.getBudgetUsage)return null;let n=await t.getBudgetUsage();return n?{...n,providerId:e}:null}function fy(){try{return se()}catch{return``}}const py=new ly(dy,fy);function my(){return py.snapshot()}function hy(e){return py.refresh(e)}function gy(){py.clear()}const _y=`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(`.`),vy=`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(`.`);_y.length*vy.length;const yy=new Set([`webhook`,`cron`,`sprinkle`,`fswatch`,`session-reload`,`navigate`,`discovery`,`upgrade`,`workflow`,`bash`,`jshd`,`preview`,`scoop-notify`,`scoop-idle`,`scoop-wait`,`sudo-request`]);function by(e){return e!=null&&yy.has(e)}const xy=new Set([`send_message`,`list_scoops`,`list_tasks`,`sudo_request`,`list_sudo_requests`,`lick_confirm`,`lick_dismiss`]),Sy=65536;function Cy(e,t=Sy){return e.length<=t?e:`${e.slice(0,t)}\n… [tool output truncated for the chat transcript: showing ${Dy(t)} of ${Dy(e.length)} — the agent received the full output]`}function wy(e,t=Sy,n=4){if(typeof e==`string`)return Cy(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=wy(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=wy(a,t,n-1);o!==a&&(r??={...e},r[i]=o)}return r??e}function Ty(e,t=Sy){if(!e)return e;if(!Dn().test(e))return Cy(e,t);let n=Cy(e.replace(Dn(),``).trim(),t);return n.length>0?`${n}\n[screenshot omitted from transcript]`:`[screenshot]`}function Ey(e,t=Sy){if(e.length<=t)return e;if(!Dn().test(e))return Cy(e,t);let n=[],r=0;for(let i of e.matchAll(Dn()))n.push(Cy(e.slice(r,i.index),t)),n.push(i[0]),r=(i.index??0)+i[0].length;return n.push(Cy(e.slice(r),t)),n.join(``)}function Dy(e){return e>=1048576?`${(e/1048576).toFixed(1)} MB`:`${Math.round(e/1024)} KB`}var Oy=e({agentMessagesToChatMessages:()=>ky,lickChannelFromBody:()=>Wy,lickChannelFromSenderName:()=>Uy,lickIdFromBody:()=>Gy,splitEnvelopes:()=>Hy,unwrapMessageEnvelope:()=>Vy});function ky(e,t={}){let{source:n=`cone`,idSeed:r=By,hiddenToolNames:i=xy,uncapped:a=!1}=t,o=[],s=null,c=new Set;for(let t of e)Ny(t)?(o.push(...Ay(t,r)),s=null):Py(t)?(s=jy(t,n,r,i,c,a),o.push(s)):Fy(t)&&My(t,s,c,a);return o}function Ay(e,t){let n=Iy(e.content);if(n.length===0)return[];let r=[];for(let i of Hy(n)){if(i.body.length===0&&i.sender==null)continue;let n=(i.sender?Uy(i.sender):null)??Wy(i.body),a=n?Gy(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 jy(e,t,n,r,i,a=!1){let o=[];for(let t of zy(e,a))r.has(t.name)?i.add(t.id):o.push(t);let s={id:n(),role:`assistant`,content:Iy(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 My(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=Iy(e.content);i.result=r?a:Cy(a),i.isError=e.isError}function Ny(e){return e.role===`user`}function Py(e){return e.role===`assistant`}function Fy(e){return e.role===`toolResult`}function Iy(e){if(typeof e==`string`)return e;if(!Array.isArray(e))return``;let t=[];for(let n of e)Ly(n)&&t.push(n.text);return t.join(``)}function Ly(e){return e.type===`text`}function Ry(e){return e.type===`toolCall`}function zy(e,t=!1){if(!Array.isArray(e.content))return[];let n=[];for(let r of e.content)Ry(r)&&n.push({id:r.id,name:r.name,input:t?r.arguments:wy(r.arguments)});return n}function By(){return Date.now().toString(36)+Math.random().toString(36).slice(2,8)}function Vy(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 yy){let t=`${e}:`;if(!n.startsWith(t))continue;let r=n.indexOf(`
884
+ `)}function ly(e){return e?.length?e.filter(e=>e.kind===`image`&&e.data).map(e=>({type:`image`,data:e.data,mimeType:e.mimeType})):[]}const uy=`sessions`;function dy(){return new Promise((e,t)=>{let n=indexedDB.open(`agent-sessions`,1);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(uy)||e.createObjectStore(uy,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}var fy=class{dbPromise=null;getDB(){return this.dbPromise||=dy().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(uy,`readwrite`).objectStore(uy).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(uy,`readonly`).objectStore(uy).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(uy,`readwrite`).objectStore(uy).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(uy,`readonly`).objectStore(uy).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(uy,`readonly`).objectStore(uy).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(uy,`readwrite`).objectStore(uy).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()}}},py=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}},my=e({clearBudgetWindowCache:()=>by,getBudgetWindowSnapshot:()=>vy,refreshBudgetWindow:()=>yy});async function hy(){let e=se();if(!e)return null;let t=je(e);if(!t?.getBudgetUsage)return null;let n=await t.getBudgetUsage();return n?{...n,providerId:e}:null}function gy(){try{return se()}catch{return``}}const _y=new py(hy,gy);function vy(){return _y.snapshot()}function yy(e){return _y.refresh(e)}function by(){_y.clear()}const xy=`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(`.`),Sy=`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(`.`);xy.length*Sy.length;const Cy=new Set([`webhook`,`cron`,`sprinkle`,`fswatch`,`session-reload`,`navigate`,`discovery`,`upgrade`,`workflow`,`bash`,`jshd`,`preview`,`scoop-notify`,`scoop-idle`,`scoop-wait`,`sudo-request`]);function wy(e){return e!=null&&Cy.has(e)}const Ty=new Set([`send_message`,`list_scoops`,`list_tasks`,`sudo_request`,`list_sudo_requests`,`lick_confirm`,`lick_dismiss`]),Ey=65536;function Dy(e,t=Ey){return e.length<=t?e:`${e.slice(0,t)}\n… [tool output truncated for the chat transcript: showing ${jy(t)} of ${jy(e.length)} — the agent received the full output]`}function Oy(e,t=Ey,n=4){if(typeof e==`string`)return Dy(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=Oy(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=Oy(a,t,n-1);o!==a&&(r??={...e},r[i]=o)}return r??e}function ky(e,t=Ey){if(!e)return e;if(!Dn().test(e))return Dy(e,t);let n=Dy(e.replace(Dn(),``).trim(),t);return n.length>0?`${n}\n[screenshot omitted from transcript]`:`[screenshot]`}function Ay(e,t=Ey){if(e.length<=t)return e;if(!Dn().test(e))return Dy(e,t);let n=[],r=0;for(let i of e.matchAll(Dn()))n.push(Dy(e.slice(r,i.index),t)),n.push(i[0]),r=(i.index??0)+i[0].length;return n.push(Dy(e.slice(r),t)),n.join(``)}function jy(e){return e>=1048576?`${(e/1048576).toFixed(1)} MB`:`${Math.round(e/1024)} KB`}var My=e({agentMessagesToChatMessages:()=>Ny,lickChannelFromBody:()=>Jy,lickChannelFromSenderName:()=>qy,lickIdFromBody:()=>Yy,splitEnvelopes:()=>Ky,unwrapMessageEnvelope:()=>Gy});function Ny(e,t={}){let{source:n=`cone`,idSeed:r=Wy,hiddenToolNames:i=Ty,uncapped:a=!1}=t,o=[],s=null,c=new Set;for(let t of e)Ly(t)?(o.push(...Py(t,r)),s=null):Ry(t)?(s=Fy(t,n,r,i,c,a),o.push(s)):zy(t)&&Iy(t,s,c,a);return o}function Py(e,t){let n=By(e.content);if(n.length===0)return[];let r=[];for(let i of Ky(n)){if(i.body.length===0&&i.sender==null)continue;let n=(i.sender?qy(i.sender):null)??Jy(i.body),a=n?Yy(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 Fy(e,t,n,r,i,a=!1){let o=[];for(let t of Uy(e,a))r.has(t.name)?i.add(t.id):o.push(t);let s={id:n(),role:`assistant`,content:By(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 Iy(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=By(e.content);i.result=r?a:Dy(a),i.isError=e.isError}function Ly(e){return e.role===`user`}function Ry(e){return e.role===`assistant`}function zy(e){return e.role===`toolResult`}function By(e){if(typeof e==`string`)return e;if(!Array.isArray(e))return``;let t=[];for(let n of e)Vy(n)&&t.push(n.text);return t.join(``)}function Vy(e){return e.type===`text`}function Hy(e){return e.type===`toolCall`}function Uy(e,t=!1){if(!Array.isArray(e.content))return[];let n=[];for(let r of e.content)Hy(r)&&n.push({id:r.id,name:r.name,input:t?r.arguments:Oy(r.arguments)});return n}function Wy(){return Date.now().toString(36)+Math.random().toString(36).slice(2,8)}function Gy(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 Cy){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 Hy(e){if(e.length===0)return[];let t=e.split(`
888
+ `)?null:{sender:o,body:n.slice(a+2)}}function Ky(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=Vy(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(`: `)&&Vy(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 Uy(e){let t=e.indexOf(`:`);if(t<=0)return null;let n=e.slice(0,t);return by(n)?n:null}function Wy(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 Gy(e){return/^(?:Lick ID|Request ID): (\S+)/m.exec(e)?.[1]}function Ky(e){let t=ky(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)qy(r,e);return ye(r.join(`
891
- `),be())}function qy(e,t){e.push(`## ${t.role}`,``);let n=t.content.trim();n.length>0&&e.push(n,``);for(let n of t.toolCalls??[])Jy(e,n)}function Jy(e,t){e.push(`### tool: ${t.name}`,``,`Input:`,``,"```json",Yy(t.input),"```",``),t.result!==void 0&&e.push(t.isError?`Result (error):`:`Result:`,``,"```",t.result,"```",``)}function Yy(e){try{return JSON.stringify(e,null,2)??String(e)}catch{return String(e)}}const Xy=_(`agent-bridge`),Zy=`__slicc_agent`;function Qy(e){for(let t=0;t<8;t++){let t=e.generateName(),n=`agent_${wb(t)}`;if(!e.orchestrator.getScoops().some(e=>e.jid===n))return t}return e.generateUid()}function $y(e,t){if(t===void 0)return null;let n=e.getScoops().find(e=>e.jid===t);if(!n)return null;let r=qn(n);if(!r||r.length===0)return null;let i=Qn(n);return i?{modelId:r,providerId:i}:{modelId:r}}function eb(e,t){let n=e.getWorkUnits(),r=(t===null?null:n.rootOf(t))??n.resolveDefaultRoot();return gr(r?.descriptor.workspace??hr)}function tb(e,t){if(t===void 0)return null;let n=e.getScoops().find(e=>e.jid===t);if(!n)return null;let r=Zn(n).level;return r&&br(r)?r:null}function nb(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&&!br(a))return{error:{finalText:`agent: invalid thinking level: ${String(a)} (one of: ${xr.join(`, `)})`,exitCode:1}};let o=Rn(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=rb(e);if(c)return c;let l=e.name;if(l!==void 0&&!db(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 rb(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 ib(e){return/^agent run terminated: .*\bbound\b.*\bexceeded\b/.test(e)}async function ab(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(Mb(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(Mb(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=Fn(o,s,a,{favor:`theirs`});return await e.writeFile(t.targetPath,c.content),await r(),{applied:!0,conflicts:c.conflicts}}catch(e){let n=jb(e);return Xy.warn(`mergeOnSuccess failed; target left as-is, staging kept`,{target:t.targetPath,error:n}),{applied:!1,conflicts:0,error:n}}}async function ob(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 Xy.warn(`outcome receipt write failed`,{path:t,error:jb(e)}),!1}}async function sb(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){Xy.warn(`success receipt write failed`,{path:t,error:jb(e)})}}async function cb(e,t,n,r){try{await e.orchestrator.notifyScoopOutcome(t,{exitCode:r.exitCode,...n?{receiptPath:n}:{},...r.exitCode!==0||ib(r.finalText)?{reason:r.finalText.slice(0,500)}:{}})}catch(e){Xy.warn(`pass outcome notify failed`,{jid:t,error:jb(e)})}}async function lb(e,t,n,r){t.notifyOnComplete!==!0||!t.outcomeReceiptPath||await cb(e,n,r.receiptWritten?t.outcomeReceiptPath:void 0,r.outcome)}const ub=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;function db(e){return ub.test(e)}const fb=`agent: name already in use`;async function pb(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=Ky({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){Xy.warn(`agent session archive write failed`,{path:s,error:jb(e)})}}function mb(e,t,n,r,i,a){let o=Eb(e.cwd),s=Db(e.workspaceMode),c={visiblePaths:kb(e,a,s),writablePaths:Ab([...Ob(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 hb(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 gb(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 _b(e,t,n,r){try{await e.orchestrator.unregisterScoop(t)}catch(e){Xy.warn(`unregisterScoop failed`,{jid:t,error:jb(e)})}try{await e.sharedFs.rm(r,{recursive:!0})}catch(e){Mb(e,`ENOENT`)||Xy.warn(`scratch folder cleanup failed`,{folder:n,error:jb(e)})}if(e.sessionStore)try{await e.sessionStore.delete(t)}catch(e){Xy.warn(`sessionStore.delete failed`,{jid:t,error:jb(e)})}}async function vb(e,t,n,r,i){let a=await yb(e,t,n,r,i),o;a.exitCode===0&&t.mergeOnSuccess?(o=await ab(e.sharedFs,t.mergeOnSuccess),o.error!==void 0&&(a={finalText:`agent: mergeOnSuccess failed: ${o.error}`,exitCode:1})):t.mergeOnSuccess&&ib(a.finalText)&&(o=await ab(e.sharedFs,t.mergeOnSuccess),o.applied?(o.promotedOnTrip=!0,Xy.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 sb(e.sharedFs,t.successReceiptPath);let s=!1;return t.outcomeReceiptPath&&(s=await ob(e.sharedFs,t.outcomeReceiptPath,a,o)),{outcome:a,receiptWritten:s}}async function yb(e,t,n,r,i){try{await e.orchestrator.registerScoop(n)}catch(e){return{finalText:i.scoopError??jb(e),exitCode:1}}try{let n=await gb(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??jb(e),exitCode:1}}}function bb(e,t,n=null,r={}){let i={orchestrator:e,sharedFs:t,sessionStore:n,generateName:r.generateName??Cb,generateUid:r.generateUid??Sb,resolveModel:r.resolveModel??Tb};async function a(e){let t=nb(e,i.resolveModel);if(`error`in t)return t.error;let n=$y(i.orchestrator,e.parentJid),r=t.resolvedModelId??n?.modelId??``,a=t.resolvedModelId===void 0?n?.providerId:t.resolvedProviderId,o=e.thinkingLevel??tb(i.orchestrator,e.parentJid)??void 0,s=e.name===void 0?Qy(i):e.name,c=`agent-${s}`,l=`agent_${wb(s)}`,u=new Set(i.orchestrator.getScoops().map(e=>e.jid));if(e.name!==void 0&&u.has(l))return{finalText:`${fb}: ${s}`,exitCode:1};let d=(e.exclusiveWith??[]).find(e=>u.has(`agent_${wb(e)}`));if(d!==void 0)return{finalText:`${fb}: ${d}`,exitCode:1};let f=`/scoops/${c}`,p=e.parentJid??O(i.orchestrator.getScoops())[0]?.jid??null,m=mb(e,r,a,o,f,eb(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=hb(i.orchestrator,l),g=()=>{try{i.orchestrator.stopScoop(l)}catch(e){Xy.warn(`stopScoop on abort failed`,{jid:l,error:jb(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 _={finalText:``,exitCode:1};try{let t=await vb(i,e,h,l,ee);return _=t.outcome,await lb(i,e,l,t),_}finally{e.signal?.removeEventListener(`abort`,g),ee.unsubscribe?.(),await pb(i,e,l,s,_),await _b(i,l,c,f)}}return{spawn:a}}function xb(e,t,n=null,r={}){let i=bb(e,t,n,r);return globalThis[Zy]=i,Xy.info(`agent bridge published on globalThis.__slicc_agent`),i}function Sb(){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 Cb(){return`${_y[Math.floor(Math.random()*_y.length)]}-${vy[Math.floor(Math.random()*vy.length)]}`}function wb(e){return e.replace(/-/g,`_`)}function Tb(e){try{return ce(e)}catch(t){return Xy.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 Eb(e){let t=Nn(e);return t.endsWith(`/`)?t:`${t}/`}function Db(e){let t=Rn(e);return t.ok?t.mode:zn}function Ob(e,t,n=zn){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(Eb)}function kb(e,t,n=zn){if(e.visiblePaths!==void 0)return e.visiblePaths.map(Eb);if(n===`private`)return[];let r=[...t];return e.invokingCwd&&e.invokingCwd.length>0&&r.push(Eb(e.invokingCwd)),Ab(r)}function Ab(e){let t=new Set,n=[];for(let r of e)t.has(r)||(t.add(r),n.push(r));return n}function jb(e){return e instanceof Error?e.message:String(e)}function Mb(e,t){if(typeof e!=`object`||!e)return!1;let n=e.code;return typeof n==`string`&&n===t}const Nb=`sessions`;function Pb(){return new Promise((e,t)=>{let n=indexedDB.open(`browser-coding-agent`,1);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(Nb)||e.createObjectStore(Nb,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}var Fb=class{db=null;async init(){await this.getDb()}async getDb(){if(!this.db){let e=await Pb();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(Nb,`readwrite`);i.objectStore(Nb).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(Nb,`readonly`).objectStore(Nb).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(Nb,`readonly`).objectStore(Nb).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(Nb,`readwrite`);i.objectStore(Nb).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 Ib={summarizing:`summarizing`,fallback:`fallback`,cancelled:`discarded`,idle:`summarized`};var Lb=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:Ib[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}},Rb=e({formatMountRecoveryPrompt:()=>Gb,mdInlineCode:()=>Wb,recoverMounts:()=>Hb,shellQuote:()=>Ub});function zb(e){return e instanceof Error?e.message:String(e)}async function Bb(e,t,n,r){let i=await Ar(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:zb(t)}),{entry:o,ok:!1}}if(s!==`granted`)return{entry:o,ok:!1};try{let s=Sr.fromHandle(i,{mountId:t.mountId});return await n.mount(e,s,{limits:Cr}),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:zb(t)}),{entry:o,ok:!1}}}async function Vb(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 jr({mountId:s,ttlMs:3e4}),mountId:s},l=i===`s3`?new Tr({...t,signedFetch:Er(o)}):i===`aem`?new Or({...t,signedFetch:kr()}):new wr({...t,signedFetch:kr()});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=zb(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 Hb(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 Bb(a,o,t,n):await Vb(a,o,t,n);(e.ok?r:i).push(e.entry)}return{restored:r,needsRecovery:i}}function Ub(e){return`'${e.replace(/'/g,`'\\''`)}'`}function Wb(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 Gb(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 ${Wb(t)})`:``;return`- ${Wb(e)}${n}`}),i=r.map(({path:e})=>` mount ${Ub(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 ${Ub(n)}`,a=`mount --source ${Ub(t)}${i} ${Ub(e)}`;return`- ${Wb(e)} (${Wb(t)}, profile ${Wb(n)}) — ${r}\n Retry: ${Wb(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 Kb=new Set([`webhook`,`cron`,`sprinkle`,`fswatch`,`session-reload`,`navigate`,`upgrade`,`cherry`,`workflow`,`bash`,`jshd`,`sudo-request`,`preview`,`discovery`]);function qb(e){return e!=null&&Kb.has(e)}const Jb={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 Yb(e){switch(e.type){case`webhook`:return e.webhookName;case`sprinkle`:return e.sprinkleName;case`fswatch`:return e.fswatchName;case`session-reload`:return Xb(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 Xb(e){let t=e.body?.reason;return typeof t==`string`&&t?t:`mount-recovery`}function Zb(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 Qb(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:`${Zb(e)}${n}`}}if(n?.reason===`mount-recovery`){let e=Gb(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=sx(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 $b(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 ex(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 tx(e,t){let n=e.previewOrigin??`unknown origin`;return{label:t,content:`Preview tab ${(e.previewLifecycle??`unknown`)===`connected`?`connected`:`disconnected`} from ${n}`}}function nx(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 rx(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 ix(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 ax(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 ox(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 sx(e,t){let n=Yb(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 cx(e,t){let n=e.headers,r=n?.[`x-slicc-preview-conn`];if(!r)return sx(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 lx(e,t){let n=sx(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 ux(e){let t=Jb[e.type];return e.type===`session-reload`?Qb(e,t):e.type===`upgrade`?$b(e,t):e.type===`cherry`?ex(e,t):e.type===`preview`?tx(e,t):e.type===`workflow`?nx(e,t):e.type===`bash`?ix(e,t):e.type===`jshd`?rx(e,t):e.type===`sudo-request`?ax(e,t):e.type===`navigate`?lx(e,t):e.type===`webhook`?cx(e,t):e.type===`discovery`?ox(e,t):sx(e,t)}function dx(e,t=Date.now){let n=e.parentId===null,r=e.folder??e.name,i=n?e.config:fx(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 fx(e,t){let n=In(e.workspace?.mode??e.config?.workspaceMode),r=e.workspace?.from??`/workspace`,i=ur(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 px(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:yr(n).root}}:e}var mx=class{host;constructor(e){this.host=e}async create(e){e.parentId===null&&e.workspace?.mode!==void 0&&In(e.workspace.mode);let t=dx(px(e,this.host));if(yx(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}`);Gn(t,n)}return await this.host.registerScoop(t),this.get(t.jid).descriptor}async createMany(e){if(e.length===0)return[];bx(e,e=>this.host.getScoop(e),()=>this.host.getScoops());let t=vx(e);for(let e of t)e.id&&yx(e.id,e=>this.host.getScoop(e));let n=Sx(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 lr(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=Ir(t),r=gx(t,t.parentJid);t.parentJid=null,or(t);try{await this.host.persistScoop(t)}catch(e){throw _x(t,r),e}return await this.host.rekeyConversation?.(n,{key:Ir(t),workUnitId:t.jid,workspaceId:Fr(t),folder:t.folder,legacyKeys:{agentSessionId:t.jid,chatSessionId:er(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)hx(e,t)===`detach`?await this.promote(e.descriptor.id):await this.close(e.descriptor.id,t);await n.close()}};function hx(e,t){return t?.descendants??e.descriptor.onParentClose}function gx(e,t){return{parentJid:t,trigger:e.trigger,requiresTrigger:e.requiresTrigger,approvesGuestRequests:e.approvesGuestRequests,onParentClose:e.onParentClose}}function _x(e,t){e.parentJid=t.parentJid,e.trigger=t.trigger,e.requiresTrigger=t.requiresTrigger,e.approvesGuestRequests=t.approvesGuestRequests,e.onParentClose=t.onParentClose}function vx(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 yx(e,t){if(t(e))throw Error(`Work unit already exists: ${e}`)}function bx(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}`);yx(n.id,t),r.add(n.id)}xx(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 xx(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 Sx(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 Cx=_(`kernel-agent-event-stream`);var wx=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){Cx.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}-${Tx()}`,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 Tx(){return Date.now().toString(36)+Math.random().toString(36).slice(2,8)}var Ex=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=Dx(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 Dx(e){let t=qn(e),n=Qn(e),{level:r,effortOverride:i}=Zn(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 K={SCOOPS:`scoops`,MESSAGES:`messages`,SESSIONS:`sessions`,TASKS:`tasks`,STATE:`state`,WEBHOOKS:`webhooks`,CRONTASKS:`crontasks`};let Ox=null;function kx(e){if(!e.objectStoreNames.contains(K.MESSAGES)){let t=e.createObjectStore(K.MESSAGES,{keyPath:`id`});t.createIndex(`chatJid`,`chatJid`),t.createIndex(`timestamp`,`timestamp`),t.createIndex(`chatJid_timestamp`,[`chatJid`,`timestamp`])}e.objectStoreNames.contains(K.SESSIONS)||e.createObjectStore(K.SESSIONS,{keyPath:`groupFolder`}),e.objectStoreNames.contains(K.TASKS)||e.createObjectStore(K.TASKS,{keyPath:`id`}).createIndex(`groupFolder`,`groupFolder`),e.objectStoreNames.contains(K.STATE)||e.createObjectStore(K.STATE,{keyPath:`key`})}function Ax(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 jx(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(K.SCOOPS,{keyPath:`jid`});r.createIndex(`type`,`type`);let i=e.find(e=>e.isMain)?.jid;for(let t of e)r.put(Ax(t,i))};return}t.objectStoreNames.contains(K.SCOOPS)||t.createObjectStore(K.SCOOPS,{keyPath:`jid`}).createIndex(`type`,`type`)}function Mx(e){e.objectStoreNames.contains(K.WEBHOOKS)||e.createObjectStore(K.WEBHOOKS,{keyPath:`id`}),e.objectStoreNames.contains(K.CRONTASKS)||e.createObjectStore(K.CRONTASKS,{keyPath:`id`})}function Nx(e){let t=e.target.result,n=e.oldVersion;n<1&&kx(t),n<2&&jx(e,t),n<3&&Mx(t)}function Px(){if(!Ox)return null;let e=Object.values(K).every(e=>Ox.objectStoreNames.contains(e));return Ox.version===3&&e?Ox:(Ox.close(),Ox=null,null)}function Fx(e){e.onversionchange=()=>{e.close(),Ox===e&&(Ox=null)},e.onclose=()=>{Ox===e&&(Ox=null)}}async function Ix(){return Px()||new Promise((e,t)=>{let n=indexedDB.open(`slicc-groups`,3);n.onupgradeneeded=Nx,n.onsuccess=()=>{let t=n.result;Fx(t),Ox=t,e(t)},n.onerror=()=>t(n.error)})}async function q(e,t=`readonly`){return(await Ix()).transaction(e,t).objectStore(e)}async function Lx(e){let t=await q(K.SCOOPS,`readwrite`);return new Promise((n,r)=>{let i=t.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Rx(){let e=await q(K.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 zx(e){let t=await q(K.SCOOPS,`readwrite`);return new Promise((n,r)=>{let i=t.delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Bx(){let e=await q(K.MESSAGES,`readwrite`);return new Promise((t,n)=>{let r=e.clear();r.onsuccess=()=>t(),r.onerror=()=>n(r.error)})}async function Vx(e){let t=(await q(K.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 Hx(e){let t=await q(K.MESSAGES,`readwrite`);return new Promise((n,r)=>{let i=t.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Ux(e){let t=await q(K.MESSAGES,`readwrite`);return new Promise((n,r)=>{let i=t.delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Wx(e){let t=(await q(K.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 Gx=`wm1:`;function Kx(e){if(!e)return{ts:``,ids:new Set};if(e.startsWith(Gx))try{let t=JSON.parse(e.slice(4));return{ts:t.ts,ids:new Set(t.ids)}}catch{}return{ts:e,ids:null}}function qx(e){let t=e.ids?Array.from(e.ids):[];return`${Gx}${JSON.stringify({ts:e.ts,ids:t})}`}function Jx(e,t){return e.timestamp>t.ts?!0:e.timestamp<t.ts||t.ids===null?!1:!t.ids.has(e.id)}function Yx(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 Xx(e,t,n){let r=(await q(K.MESSAGES)).index(`chatJid_timestamp`),i=Kx(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=>Jx(e,i));n&&(t=t.filter(e=>e.senderName!==n)),e(t)},o.onerror=()=>t(o.error)})}async function Zx(e){let t=await q(K.TASKS,`readwrite`);return new Promise((n,r)=>{let i=t.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Qx(e){let t=await q(K.TASKS);return new Promise((n,r)=>{let i=t.get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async function $x(){let e=await q(K.TASKS);return new Promise((t,n)=>{let r=e.getAll();r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error)})}async function eS(e){let t=await q(K.TASKS,`readwrite`);return new Promise((n,r)=>{let i=t.delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function tS(e){let t=await q(K.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 nS(e,t){let n=await q(K.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 rS(){await Ix()}async function iS(e){let t=await q(K.WEBHOOKS,`readwrite`);return new Promise((n,r)=>{let i=t.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function aS(e){let t=await q(K.WEBHOOKS);return new Promise((n,r)=>{let i=t.get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async function oS(){try{let e=await q(K.WEBHOOKS);return new Promise((t,n)=>{let r=e.getAll();r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error)})}catch{return[]}}async function sS(e){let t=await q(K.WEBHOOKS,`readwrite`);return new Promise((n,r)=>{let i=t.delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function cS(e){let t=await q(K.CRONTASKS,`readwrite`);return new Promise((n,r)=>{let i=t.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function lS(e){let t=await q(K.CRONTASKS);return new Promise((n,r)=>{let i=t.get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async function uS(){try{let e=await q(K.CRONTASKS);return new Promise((t,n)=>{let r=e.getAll();r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error)})}catch{return[]}}async function dS(e){let t=await q(K.CRONTASKS,`readwrite`);return new Promise((n,r)=>{let i=t.delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}_(`tray-leader`);function fS(){return pS(Rr(),Se())}function pS(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 mS=`__slicc_binary__`;function hS(e){if(!e||typeof e!=`object`)return!1;let t=e;return t[mS]===`b64`&&typeof t.data==`string`}function gS(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Uint8Array)}function _S(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Uint8Array)&&!hS(e)}function vS(e){if(e instanceof Uint8Array)return{[mS]:`b64`,data:te(e)};if(Array.isArray(e))return e.map(vS);if(gS(e)){let t={};for(let[n,r]of Object.entries(e))t[n]=vS(r);return t}return e}function yS(e){if(hS(e))return ne(e.data);if(Array.isArray(e))return e.map(yS);if(_S(e)){let t={};for(let[n,r]of Object.entries(e))t[n]=yS(r);return t}return e}const bS=_(`panel-transport`);function xS(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function SS(){return{onMessage:e=>{let t=(t,n,r)=>(xS(t)&&e(yS(t)),!1);return chrome.runtime.onMessage.addListener(t),()=>chrome.runtime.onMessage.removeListener(t)},send:(e,t)=>{let n=vS(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)||bS.error(`Offscreen → panel transport send failed`,{error:t})})}}}const CS=_(`kernel-bridge`);function wS(){return globalThis}function TS(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 ES=class{orchestrator=null;agentSpawnAborts=new Map;browserAPI=null;messageBuffers=new Map;conesBeingCreated=new Map;currentMessageId=new Map;compactionRows=new Lb(e=>`compaction-${e}-${DS()}`);pendingMarkers=new Map;scoopPresentation=new Ex;transcriptsPublished=!1;agentEventStream=new wx;sessionStore=null;followerSync=null;followerActive=!1;_transport;transportUnsubscribe=null;constructor(e){this._transport=e??null}get transport(){return this._transport||=SS(),this._transport}async bind(e,t){this.orchestrator=e,this.browserAPI=t??null,this.transportUnsubscribe?.(),this.transportUnsubscribe=this.setupMessageListener();let n=new Fb;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-${DS()}`;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)=>{xy.has(n)||e.bufferToolStart(t,n,r,i)},onToolEnd:(t,n,r,i,a)=>{xy.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=wy(n),a=this.getOrCreateAssistantMsg(e);a.toolCalls||=[],a.toolCalls.push({id:r??DS(),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=Ty(n),e.isError=r)}}this.emit({type:`agent-event`,scoopJid:e,eventType:`tool_end`,toolName:t,toolResult:Ey(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(er(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()??[],fS())}emitTrayRuntimeStatus(){let e={type:`tray-runtime-status`,...fS()};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=TS(t);i&&this.orchestrator.resolveNavigateHandoffByHuman(i.lickId,i.accepted);let a=this.orchestrator.getScoops(),o=s(e),c=[];n&&c.push({source:`explicit target`,value:n}),o&&o!==n&&c.push({source:`configured route`,value:o});let l=[],u;for(let e of c){if(u=fo(a,e.value),u)break;l.push(e)}if(u||=this.originRootOf(a,r?.unitJid)??O(a)[0],l.length>0&&CS.warn(`Sprinkle lick target could not be resolved; using fallback`,{sprinkleName:e,unresolvedTargets:l,fallbackJid:u?.jid}),!u)return;let d=`sprinkle-${e}-${Date.now()}`,f=ux({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\`\`\``,p=l.map(({source:e,value:t})=>`${e} ${JSON.stringify(t)}`).join(` and `),m=f+(p?`\n\n> Delivery note: ${p} could not be resolved; delivered to fallback ${JSON.stringify(u.folder)}.`:``),h={id:d,chatJid:u.jid,senderId:`sprinkle`,senderName:`sprinkle:${e}`,content:m,timestamp:new Date().toISOString(),fromAssistant:!1,channel:`sprinkle`};this.getBuffer(u.jid).push({id:d,role:`user`,content:m,timestamp:Date.now(),source:`lick`,channel:`sprinkle`}),await this.orchestrator.handleMessage(h)}originRootOf(e,t){if(t)return Wn(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=kS(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(()=>cT),a=await i(r,{source:$n(e)});return a.length===0?null:this.overlayPersistedLickDecisionsOn(e,kS(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 PS(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=rr(e,i),o=a===ar,s=O(i)[0],c=r??(s?ir(s):void 0),l=t?.trim(),u={...dx({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`,reason:`unavailable`},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([hy().catch(()=>null),new Promise(e=>setTimeout(()=>e(null),2500))])??void 0):(hy().catch(()=>null),my()??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:OS(i)});return}let a=this.orchestrator.getScoopContext(t);if(a){let{agentMessagesToChatMessages:n}=await Promise.resolve().then(()=>Oy),i=a.getAgentMessages();if(i.length>0){let a=n(i,{source:$n(r)});this.emit({type:`scoop-transcript`,requestId:e,scoopJid:t,transcript:OS(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){CS.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):CS.warn(`Conversation marker retry deferred`,{scoopJid:e,folder:r.folder,markerId:a.id,kind:a.kind})}}async recordErrorCard(e,t){let n=DS(),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){CS.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){CS.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):CS.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}-${DS()}`,this.currentMessageId.set(e,n);let r=(this.orchestrator?.getScoops()??[]).find(t=>t.jid===e),i=r?$n(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)),Ja(e.key);break;case`local-storage-remove`:this.applyLocalStorageOp(e.type,t=>t.removeItem(e.key)),Ja(e.key);break;case`local-storage-clear`:this.applyLocalStorageOp(e.type,e=>e.clear()),Ja()}}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=wS()[Zy];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&&Bn(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=er({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(er({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=wS().__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=wS().__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`){kn.markMounted(t);return}try{await kn.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}),kn.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 DS(){return Date.now().toString(36)+Math.random().toString(36).slice(2,8)}function OS(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 kS(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 AS(e){return e===`confirmed`||e===`dismissed`}function jS(e){return e.channel===`sudo-request`||!!e.lickId||!!e.lickState||e.id.startsWith(`sudo-request-`)}function MS(e){return e.lickId?e.lickId:jS(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 NS(e,t,n){let r=e.get(t);(!r||AS(n.lickState)&&!AS(r.lickState))&&e.set(t,n)}function PS(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(!jS(e))continue;let t=MS(e);t&&NS(n,t,e),NS(r,e.id,e),NS(i,e.content,e)}return e.map(e=>{if(!jS(e))return e;let t=MS(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??MS(a),s=AS(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 FS=_(`navigation-watcher`);function IS(e){if(!e)return null;try{let t=new URL(e);return t.protocol===`http:`||t.protocol===`https:`?t:null}catch{return null}}function LS(e){return e.replace(/\/+$/,``)||`/`}function RS(e){return t=>{let n=IS(e()??void 0);if(!n)return!1;let r=IS(t.url);return r?n.origin===r.origin&&LS(n.pathname)===LS(r.pathname):!1}}function zS(e,t){return ie(e,t)}var BS=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}=zS(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=Ki(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 Yi(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){FS.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 FS.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){FS.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){FS.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,FS.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 FS.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),FS.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&&FS.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){FS.debug(`Failed to enable Page/Network on attached target`,{sessionId:t,error:e instanceof Error?e.message:String(e)})}}};function VS(){try{return typeof localStorage>`u`||typeof localStorage?.getItem!=`function`||localStorage.getItem(`slicc_discovery_enabled`)!==`false`}catch{return!0}}var HS=`# /etc/llmstxtignore — llms.txt discovery suppression
890
+ `)}`:r.firstLine,t=Gy(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(`: `)&&Gy(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 qy(e){let t=e.indexOf(`:`);if(t<=0)return null;let n=e.slice(0,t);return wy(n)?n:null}function Jy(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 Yy(e){return/^(?:Lick ID|Request ID): (\S+)/m.exec(e)?.[1]}function Xy(e){let t=Ny(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)Zy(r,e);return ye(r.join(`
891
+ `),be())}function Zy(e,t){e.push(`## ${t.role}`,``);let n=t.content.trim();n.length>0&&e.push(n,``);for(let n of t.toolCalls??[])Qy(e,n)}function Qy(e,t){e.push(`### tool: ${t.name}`,``,`Input:`,``,"```json",$y(t.input),"```",``),t.result!==void 0&&e.push(t.isError?`Result (error):`:`Result:`,``,"```",t.result,"```",``)}function $y(e){try{return JSON.stringify(e,null,2)??String(e)}catch{return String(e)}}const eb=_(`agent-bridge`),tb=`__slicc_agent`;function nb(e){for(let t=0;t<8;t++){let t=e.generateName(),n=`agent_${Ob(t)}`;if(!e.orchestrator.getScoops().some(e=>e.jid===n))return t}return e.generateUid()}function rb(e,t){if(t===void 0)return null;let n=e.getScoops().find(e=>e.jid===t);if(!n)return null;let r=qn(n);if(!r||r.length===0)return null;let i=Qn(n);return i?{modelId:r,providerId:i}:{modelId:r}}function ib(e,t){let n=e.getWorkUnits(),r=(t===null?null:n.rootOf(t))??n.resolveDefaultRoot();return gr(r?.descriptor.workspace??hr)}function ab(e,t){if(t===void 0)return null;let n=e.getScoops().find(e=>e.jid===t);if(!n)return null;let r=Zn(n).level;return r&&br(r)?r:null}function ob(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&&!br(a))return{error:{finalText:`agent: invalid thinking level: ${String(a)} (one of: ${xr.join(`, `)})`,exitCode:1}};let o=Rn(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=sb(e);if(c)return c;let l=e.name;if(l!==void 0&&!hb(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 sb(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 cb(e){return/^agent run terminated: .*\bbound\b.*\bexceeded\b/.test(e)}async function lb(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(Ib(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(Ib(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=Fn(o,s,a,{favor:`theirs`});return await e.writeFile(t.targetPath,c.content),await r(),{applied:!0,conflicts:c.conflicts}}catch(e){let n=Fb(e);return eb.warn(`mergeOnSuccess failed; target left as-is, staging kept`,{target:t.targetPath,error:n}),{applied:!1,conflicts:0,error:n}}}async function ub(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 eb.warn(`outcome receipt write failed`,{path:t,error:Fb(e)}),!1}}async function db(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){eb.warn(`success receipt write failed`,{path:t,error:Fb(e)})}}async function fb(e,t,n,r){try{await e.orchestrator.notifyScoopOutcome(t,{exitCode:r.exitCode,...n?{receiptPath:n}:{},...r.exitCode!==0||cb(r.finalText)?{reason:r.finalText.slice(0,500)}:{}})}catch(e){eb.warn(`pass outcome notify failed`,{jid:t,error:Fb(e)})}}async function pb(e,t,n,r){t.notifyOnComplete!==!0||!t.outcomeReceiptPath||await fb(e,n,r.receiptWritten?t.outcomeReceiptPath:void 0,r.outcome)}const mb=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;function hb(e){return mb.test(e)}const gb=`agent: name already in use`;async function _b(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=Xy({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){eb.warn(`agent session archive write failed`,{path:s,error:Fb(e)})}}function vb(e,t,n,r,i,a){let o=Ab(e.cwd),s=jb(e.workspaceMode),c={visiblePaths:Nb(e,a,s),writablePaths:Pb([...Mb(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 yb(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 bb(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 xb(e,t,n,r){try{await e.orchestrator.unregisterScoop(t)}catch(e){eb.warn(`unregisterScoop failed`,{jid:t,error:Fb(e)})}try{await e.sharedFs.rm(r,{recursive:!0})}catch(e){Ib(e,`ENOENT`)||eb.warn(`scratch folder cleanup failed`,{folder:n,error:Fb(e)})}if(e.sessionStore)try{await e.sessionStore.delete(t)}catch(e){eb.warn(`sessionStore.delete failed`,{jid:t,error:Fb(e)})}}async function Sb(e,t,n,r,i){let a=await Cb(e,t,n,r,i),o;a.exitCode===0&&t.mergeOnSuccess?(o=await lb(e.sharedFs,t.mergeOnSuccess),o.error!==void 0&&(a={finalText:`agent: mergeOnSuccess failed: ${o.error}`,exitCode:1})):t.mergeOnSuccess&&cb(a.finalText)&&(o=await lb(e.sharedFs,t.mergeOnSuccess),o.applied?(o.promotedOnTrip=!0,eb.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 db(e.sharedFs,t.successReceiptPath);let s=!1;return t.outcomeReceiptPath&&(s=await ub(e.sharedFs,t.outcomeReceiptPath,a,o)),{outcome:a,receiptWritten:s}}async function Cb(e,t,n,r,i){try{await e.orchestrator.registerScoop(n)}catch(e){return{finalText:i.scoopError??Fb(e),exitCode:1}}try{let n=await bb(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??Fb(e),exitCode:1}}}function wb(e,t,n=null,r={}){let i={orchestrator:e,sharedFs:t,sessionStore:n,generateName:r.generateName??Db,generateUid:r.generateUid??Eb,resolveModel:r.resolveModel??kb};async function a(e){let t=ob(e,i.resolveModel);if(`error`in t)return t.error;let n=rb(i.orchestrator,e.parentJid),r=t.resolvedModelId??n?.modelId??``,a=t.resolvedModelId===void 0?n?.providerId:t.resolvedProviderId,o=e.thinkingLevel??ab(i.orchestrator,e.parentJid)??void 0,s=e.name===void 0?nb(i):e.name,c=`agent-${s}`,l=`agent_${Ob(s)}`,u=new Set(i.orchestrator.getScoops().map(e=>e.jid));if(e.name!==void 0&&u.has(l))return{finalText:`${gb}: ${s}`,exitCode:1};let d=(e.exclusiveWith??[]).find(e=>u.has(`agent_${Ob(e)}`));if(d!==void 0)return{finalText:`${gb}: ${d}`,exitCode:1};let f=`/scoops/${c}`,p=e.parentJid??O(i.orchestrator.getScoops())[0]?.jid??null,m=vb(e,r,a,o,f,ib(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=yb(i.orchestrator,l),g=()=>{try{i.orchestrator.stopScoop(l)}catch(e){eb.warn(`stopScoop on abort failed`,{jid:l,error:Fb(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 _={finalText:``,exitCode:1};try{let t=await Sb(i,e,h,l,ee);return _=t.outcome,await pb(i,e,l,t),_}finally{e.signal?.removeEventListener(`abort`,g),ee.unsubscribe?.(),await _b(i,e,l,s,_),await xb(i,l,c,f)}}return{spawn:a}}function Tb(e,t,n=null,r={}){let i=wb(e,t,n,r);return globalThis[tb]=i,eb.info(`agent bridge published on globalThis.__slicc_agent`),i}function Eb(){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 Db(){return`${xy[Math.floor(Math.random()*xy.length)]}-${Sy[Math.floor(Math.random()*Sy.length)]}`}function Ob(e){return e.replace(/-/g,`_`)}function kb(e){try{return ce(e)}catch(t){return eb.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 Ab(e){let t=Nn(e);return t.endsWith(`/`)?t:`${t}/`}function jb(e){let t=Rn(e);return t.ok?t.mode:zn}function Mb(e,t,n=zn){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(Ab)}function Nb(e,t,n=zn){if(e.visiblePaths!==void 0)return e.visiblePaths.map(Ab);if(n===`private`)return[];let r=[...t];return e.invokingCwd&&e.invokingCwd.length>0&&r.push(Ab(e.invokingCwd)),Pb(r)}function Pb(e){let t=new Set,n=[];for(let r of e)t.has(r)||(t.add(r),n.push(r));return n}function Fb(e){return e instanceof Error?e.message:String(e)}function Ib(e,t){if(typeof e!=`object`||!e)return!1;let n=e.code;return typeof n==`string`&&n===t}const Lb=`sessions`;function Rb(){return new Promise((e,t)=>{let n=indexedDB.open(`browser-coding-agent`,1);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(Lb)||e.createObjectStore(Lb,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}var zb=class{db=null;async init(){await this.getDb()}async getDb(){if(!this.db){let e=await Rb();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(Lb,`readwrite`);i.objectStore(Lb).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(Lb,`readonly`).objectStore(Lb).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(Lb,`readonly`).objectStore(Lb).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(Lb,`readwrite`);i.objectStore(Lb).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 Bb={summarizing:`summarizing`,fallback:`fallback`,cancelled:`discarded`,idle:`summarized`};var Vb=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:Bb[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}},Hb=e({formatMountRecoveryPrompt:()=>Yb,mdInlineCode:()=>Jb,recoverMounts:()=>Kb,shellQuote:()=>qb});function Ub(e){return e instanceof Error?e.message:String(e)}async function Wb(e,t,n,r){let i=await Ar(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:Ub(t)}),{entry:o,ok:!1}}if(s!==`granted`)return{entry:o,ok:!1};try{let s=Sr.fromHandle(i,{mountId:t.mountId});return await n.mount(e,s,{limits:Cr}),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:Ub(t)}),{entry:o,ok:!1}}}async function Gb(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 jr({mountId:s,ttlMs:3e4}),mountId:s},l=i===`s3`?new Tr({...t,signedFetch:Er(o)}):i===`aem`?new Or({...t,signedFetch:kr()}):new wr({...t,signedFetch:kr()});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=Ub(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 Kb(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 Wb(a,o,t,n):await Gb(a,o,t,n);(e.ok?r:i).push(e.entry)}return{restored:r,needsRecovery:i}}function qb(e){return`'${e.replace(/'/g,`'\\''`)}'`}function Jb(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 Yb(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 ${Jb(t)})`:``;return`- ${Jb(e)}${n}`}),i=r.map(({path:e})=>` mount ${qb(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 ${qb(n)}`,a=`mount --source ${qb(t)}${i} ${qb(e)}`;return`- ${Jb(e)} (${Jb(t)}, profile ${Jb(n)}) — ${r}\n Retry: ${Jb(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 Xb=new Set([`webhook`,`cron`,`sprinkle`,`fswatch`,`session-reload`,`navigate`,`upgrade`,`cherry`,`workflow`,`bash`,`jshd`,`sudo-request`,`preview`,`discovery`]);function Zb(e){return e!=null&&Xb.has(e)}const Qb={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 $b(e){switch(e.type){case`webhook`:return e.webhookName;case`sprinkle`:return e.sprinkleName;case`fswatch`:return e.fswatchName;case`session-reload`:return ex(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 ex(e){let t=e.body?.reason;return typeof t==`string`&&t?t:`mount-recovery`}function tx(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 nx(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:`${tx(e)}${n}`}}if(n?.reason===`mount-recovery`){let e=Yb(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=dx(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 rx(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 ix(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 ax(e,t){let n=e.previewOrigin??`unknown origin`;return{label:t,content:`Preview tab ${(e.previewLifecycle??`unknown`)===`connected`?`connected`:`disconnected`} from ${n}`}}function ox(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 sx(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 cx(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 lx(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 ux(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 dx(e,t){let n=$b(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 fx(e,t){let n=e.headers,r=n?.[`x-slicc-preview-conn`];if(!r)return dx(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 px(e,t){let n=dx(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 mx(e){let t=Qb[e.type];return e.type===`session-reload`?nx(e,t):e.type===`upgrade`?rx(e,t):e.type===`cherry`?ix(e,t):e.type===`preview`?ax(e,t):e.type===`workflow`?ox(e,t):e.type===`bash`?cx(e,t):e.type===`jshd`?sx(e,t):e.type===`sudo-request`?lx(e,t):e.type===`navigate`?px(e,t):e.type===`webhook`?fx(e,t):e.type===`discovery`?ux(e,t):dx(e,t)}function hx(e,t=Date.now){let n=e.parentId===null,r=e.folder??e.name,i=n?e.config:gx(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 gx(e,t){let n=In(e.workspace?.mode??e.config?.workspaceMode),r=e.workspace?.from??`/workspace`,i=ur(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 _x(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:yr(n).root}}:e}var vx=class{host;constructor(e){this.host=e}async create(e){e.parentId===null&&e.workspace?.mode!==void 0&&In(e.workspace.mode);let t=hx(_x(e,this.host));if(Cx(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}`);Gn(t,n)}return await this.host.registerScoop(t),this.get(t.jid).descriptor}async createMany(e){if(e.length===0)return[];wx(e,e=>this.host.getScoop(e),()=>this.host.getScoops());let t=Sx(e);for(let e of t)e.id&&Cx(e.id,e=>this.host.getScoop(e));let n=Ex(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 lr(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=Ir(t),r=bx(t,t.parentJid);t.parentJid=null,or(t);try{await this.host.persistScoop(t)}catch(e){throw xx(t,r),e}return await this.host.rekeyConversation?.(n,{key:Ir(t),workUnitId:t.jid,workspaceId:Fr(t),folder:t.folder,legacyKeys:{agentSessionId:t.jid,chatSessionId:er(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)yx(e,t)===`detach`?await this.promote(e.descriptor.id):await this.close(e.descriptor.id,t);await n.close()}};function yx(e,t){return t?.descendants??e.descriptor.onParentClose}function bx(e,t){return{parentJid:t,trigger:e.trigger,requiresTrigger:e.requiresTrigger,approvesGuestRequests:e.approvesGuestRequests,onParentClose:e.onParentClose}}function xx(e,t){e.parentJid=t.parentJid,e.trigger=t.trigger,e.requiresTrigger=t.requiresTrigger,e.approvesGuestRequests=t.approvesGuestRequests,e.onParentClose=t.onParentClose}function Sx(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 Cx(e,t){if(t(e))throw Error(`Work unit already exists: ${e}`)}function wx(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}`);Cx(n.id,t),r.add(n.id)}Tx(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 Tx(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 Ex(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 Dx=_(`kernel-agent-event-stream`);var Ox=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){Dx.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}-${kx()}`,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 kx(){return Date.now().toString(36)+Math.random().toString(36).slice(2,8)}var Ax=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=jx(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 jx(e){let t=qn(e),n=Qn(e),{level:r,effortOverride:i}=Zn(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 K={SCOOPS:`scoops`,MESSAGES:`messages`,SESSIONS:`sessions`,TASKS:`tasks`,STATE:`state`,WEBHOOKS:`webhooks`,CRONTASKS:`crontasks`};let Mx=null;function Nx(e){if(!e.objectStoreNames.contains(K.MESSAGES)){let t=e.createObjectStore(K.MESSAGES,{keyPath:`id`});t.createIndex(`chatJid`,`chatJid`),t.createIndex(`timestamp`,`timestamp`),t.createIndex(`chatJid_timestamp`,[`chatJid`,`timestamp`])}e.objectStoreNames.contains(K.SESSIONS)||e.createObjectStore(K.SESSIONS,{keyPath:`groupFolder`}),e.objectStoreNames.contains(K.TASKS)||e.createObjectStore(K.TASKS,{keyPath:`id`}).createIndex(`groupFolder`,`groupFolder`),e.objectStoreNames.contains(K.STATE)||e.createObjectStore(K.STATE,{keyPath:`key`})}function Px(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 Fx(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(K.SCOOPS,{keyPath:`jid`});r.createIndex(`type`,`type`);let i=e.find(e=>e.isMain)?.jid;for(let t of e)r.put(Px(t,i))};return}t.objectStoreNames.contains(K.SCOOPS)||t.createObjectStore(K.SCOOPS,{keyPath:`jid`}).createIndex(`type`,`type`)}function Ix(e){e.objectStoreNames.contains(K.WEBHOOKS)||e.createObjectStore(K.WEBHOOKS,{keyPath:`id`}),e.objectStoreNames.contains(K.CRONTASKS)||e.createObjectStore(K.CRONTASKS,{keyPath:`id`})}function Lx(e){let t=e.target.result,n=e.oldVersion;n<1&&Nx(t),n<2&&Fx(e,t),n<3&&Ix(t)}function Rx(){if(!Mx)return null;let e=Object.values(K).every(e=>Mx.objectStoreNames.contains(e));return Mx.version===3&&e?Mx:(Mx.close(),Mx=null,null)}function zx(e){e.onversionchange=()=>{e.close(),Mx===e&&(Mx=null)},e.onclose=()=>{Mx===e&&(Mx=null)}}async function Bx(){return Rx()||new Promise((e,t)=>{let n=indexedDB.open(`slicc-groups`,3);n.onupgradeneeded=Lx,n.onsuccess=()=>{let t=n.result;zx(t),Mx=t,e(t)},n.onerror=()=>t(n.error)})}async function q(e,t=`readonly`){return(await Bx()).transaction(e,t).objectStore(e)}async function Vx(e){let t=await q(K.SCOOPS,`readwrite`);return new Promise((n,r)=>{let i=t.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Hx(){let e=await q(K.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 Ux(e){let t=await q(K.SCOOPS,`readwrite`);return new Promise((n,r)=>{let i=t.delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Wx(){let e=await q(K.MESSAGES,`readwrite`);return new Promise((t,n)=>{let r=e.clear();r.onsuccess=()=>t(),r.onerror=()=>n(r.error)})}async function Gx(e){let t=(await q(K.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 Kx(e){let t=await q(K.MESSAGES,`readwrite`);return new Promise((n,r)=>{let i=t.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function qx(e){let t=await q(K.MESSAGES,`readwrite`);return new Promise((n,r)=>{let i=t.delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Jx(e){let t=(await q(K.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 Yx=`wm1:`;function Xx(e){if(!e)return{ts:``,ids:new Set};if(e.startsWith(Yx))try{let t=JSON.parse(e.slice(4));return{ts:t.ts,ids:new Set(t.ids)}}catch{}return{ts:e,ids:null}}function Zx(e){let t=e.ids?Array.from(e.ids):[];return`${Yx}${JSON.stringify({ts:e.ts,ids:t})}`}function Qx(e,t){return e.timestamp>t.ts?!0:e.timestamp<t.ts||t.ids===null?!1:!t.ids.has(e.id)}function $x(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 eS(e,t,n){let r=(await q(K.MESSAGES)).index(`chatJid_timestamp`),i=Xx(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=>Qx(e,i));n&&(t=t.filter(e=>e.senderName!==n)),e(t)},o.onerror=()=>t(o.error)})}async function tS(e){let t=await q(K.TASKS,`readwrite`);return new Promise((n,r)=>{let i=t.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function nS(e){let t=await q(K.TASKS);return new Promise((n,r)=>{let i=t.get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async function rS(){let e=await q(K.TASKS);return new Promise((t,n)=>{let r=e.getAll();r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error)})}async function iS(e){let t=await q(K.TASKS,`readwrite`);return new Promise((n,r)=>{let i=t.delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function aS(e){let t=await q(K.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 oS(e,t){let n=await q(K.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 sS(){await Bx()}async function cS(e){let t=await q(K.WEBHOOKS,`readwrite`);return new Promise((n,r)=>{let i=t.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function lS(e){let t=await q(K.WEBHOOKS);return new Promise((n,r)=>{let i=t.get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async function uS(){try{let e=await q(K.WEBHOOKS);return new Promise((t,n)=>{let r=e.getAll();r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error)})}catch{return[]}}async function dS(e){let t=await q(K.WEBHOOKS,`readwrite`);return new Promise((n,r)=>{let i=t.delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function fS(e){let t=await q(K.CRONTASKS,`readwrite`);return new Promise((n,r)=>{let i=t.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function pS(e){let t=await q(K.CRONTASKS);return new Promise((n,r)=>{let i=t.get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async function mS(){try{let e=await q(K.CRONTASKS);return new Promise((t,n)=>{let r=e.getAll();r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error)})}catch{return[]}}async function hS(e){let t=await q(K.CRONTASKS,`readwrite`);return new Promise((n,r)=>{let i=t.delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}_(`tray-leader`);function gS(){return _S(Rr(),Se())}function _S(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 vS=`__slicc_binary__`;function yS(e){if(!e||typeof e!=`object`)return!1;let t=e;return t[vS]===`b64`&&typeof t.data==`string`}function bS(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Uint8Array)}function xS(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Uint8Array)&&!yS(e)}function SS(e){if(e instanceof Uint8Array)return{[vS]:`b64`,data:te(e)};if(Array.isArray(e))return e.map(SS);if(bS(e)){let t={};for(let[n,r]of Object.entries(e))t[n]=SS(r);return t}return e}function CS(e){if(yS(e))return ne(e.data);if(Array.isArray(e))return e.map(CS);if(xS(e)){let t={};for(let[n,r]of Object.entries(e))t[n]=CS(r);return t}return e}const wS=_(`panel-transport`);function TS(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function ES(){return{onMessage:e=>{let t=(t,n,r)=>(TS(t)&&e(CS(t)),!1);return chrome.runtime.onMessage.addListener(t),()=>chrome.runtime.onMessage.removeListener(t)},send:(e,t)=>{let n=SS(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)||wS.error(`Offscreen → panel transport send failed`,{error:t})})}}}const DS=_(`kernel-bridge`);function OS(){return globalThis}function kS(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 AS=class{orchestrator=null;agentSpawnAborts=new Map;browserAPI=null;messageBuffers=new Map;conesBeingCreated=new Map;currentMessageId=new Map;compactionRows=new Vb(e=>`compaction-${e}-${jS()}`);pendingMarkers=new Map;scoopPresentation=new Ax;transcriptsPublished=!1;agentEventStream=new Ox;sessionStore=null;followerSync=null;followerActive=!1;_transport;transportUnsubscribe=null;constructor(e){this._transport=e??null}get transport(){return this._transport||=ES(),this._transport}async bind(e,t){this.orchestrator=e,this.browserAPI=t??null,this.transportUnsubscribe?.(),this.transportUnsubscribe=this.setupMessageListener();let n=new zb;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-${jS()}`;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)=>{Ty.has(n)||e.bufferToolStart(t,n,r,i)},onToolEnd:(t,n,r,i,a)=>{Ty.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=Oy(n),a=this.getOrCreateAssistantMsg(e);a.toolCalls||=[],a.toolCalls.push({id:r??jS(),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=ky(n),e.isError=r)}}this.emit({type:`agent-event`,scoopJid:e,eventType:`tool_end`,toolName:t,toolResult:Ay(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(er(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()??[],gS())}emitTrayRuntimeStatus(){let e={type:`tray-runtime-status`,...gS()};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=kS(t);i&&this.orchestrator.resolveNavigateHandoffByHuman(i.lickId,i.accepted);let a=this.orchestrator.getScoops(),o=s(e),c=[];n&&c.push({source:`explicit target`,value:n}),o&&o!==n&&c.push({source:`configured route`,value:o});let l=[],u;for(let e of c){if(u=go(a,e.value),u)break;l.push(e)}if(u||=this.originRootOf(a,r?.unitJid)??O(a)[0],l.length>0&&DS.warn(`Sprinkle lick target could not be resolved; using fallback`,{sprinkleName:e,unresolvedTargets:l,fallbackJid:u?.jid}),!u)return;let d=`sprinkle-${e}-${Date.now()}`,f=mx({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\`\`\``,p=l.map(({source:e,value:t})=>`${e} ${JSON.stringify(t)}`).join(` and `),m=f+(p?`\n\n> Delivery note: ${p} could not be resolved; delivered to fallback ${JSON.stringify(u.folder)}.`:``),h={id:d,chatJid:u.jid,senderId:`sprinkle`,senderName:`sprinkle:${e}`,content:m,timestamp:new Date().toISOString(),fromAssistant:!1,channel:`sprinkle`};this.getBuffer(u.jid).push({id:d,role:`user`,content:m,timestamp:Date.now(),source:`lick`,channel:`sprinkle`}),await this.orchestrator.handleMessage(h)}originRootOf(e,t){if(t)return Wn(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=NS(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(()=>fT),a=await i(r,{source:$n(e)});return a.length===0?null:this.overlayPersistedLickDecisionsOn(e,NS(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 RS(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=rr(e,i),o=a===ar,s=O(i)[0],c=r??(s?ir(s):void 0),l=t?.trim(),u={...hx({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`,reason:`unavailable`},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([yy().catch(()=>null),new Promise(e=>setTimeout(()=>e(null),2500))])??void 0):(yy().catch(()=>null),vy()??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:MS(i)});return}let a=this.orchestrator.getScoopContext(t);if(a){let{agentMessagesToChatMessages:n}=await Promise.resolve().then(()=>My),i=a.getAgentMessages();if(i.length>0){let a=n(i,{source:$n(r)});this.emit({type:`scoop-transcript`,requestId:e,scoopJid:t,transcript:MS(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){DS.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):DS.warn(`Conversation marker retry deferred`,{scoopJid:e,folder:r.folder,markerId:a.id,kind:a.kind})}}async recordErrorCard(e,t){let n=jS(),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){DS.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){DS.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):DS.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}-${jS()}`,this.currentMessageId.set(e,n);let r=(this.orchestrator?.getScoops()??[]).find(t=>t.jid===e),i=r?$n(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)),Qa(e.key);break;case`local-storage-remove`:this.applyLocalStorageOp(e.type,t=>t.removeItem(e.key)),Qa(e.key);break;case`local-storage-clear`:this.applyLocalStorageOp(e.type,e=>e.clear()),Qa()}}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=OS()[tb];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&&Bn(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=er({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(er({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=OS().__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=OS().__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`){kn.markMounted(t);return}try{await kn.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}),kn.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 jS(){return Date.now().toString(36)+Math.random().toString(36).slice(2,8)}function MS(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 NS(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 PS(e){return e===`confirmed`||e===`dismissed`}function FS(e){return e.channel===`sudo-request`||!!e.lickId||!!e.lickState||e.id.startsWith(`sudo-request-`)}function IS(e){return e.lickId?e.lickId:FS(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 LS(e,t,n){let r=e.get(t);(!r||PS(n.lickState)&&!PS(r.lickState))&&e.set(t,n)}function RS(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(!FS(e))continue;let t=IS(e);t&&LS(n,t,e),LS(r,e.id,e),LS(i,e.content,e)}return e.map(e=>{if(!FS(e))return e;let t=IS(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??IS(a),s=PS(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 zS=_(`navigation-watcher`);function BS(e){if(!e)return null;try{let t=new URL(e);return t.protocol===`http:`||t.protocol===`https:`?t:null}catch{return null}}function VS(e){return e.replace(/\/+$/,``)||`/`}function HS(e){return t=>{let n=BS(e()??void 0);if(!n)return!1;let r=BS(t.url);return r?n.origin===r.origin&&VS(n.pathname)===VS(r.pathname):!1}}function US(e,t){return ie(e,t)}var WS=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}=US(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=Xi(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 $i(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){zS.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 zS.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){zS.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){zS.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,zS.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 zS.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),zS.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&&zS.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){zS.debug(`Failed to enable Page/Network on attached target`,{sessionId:t,error:e instanceof Error?e.message:String(e)})}}};function GS(){try{return typeof localStorage>`u`||typeof localStorage?.getItem!=`function`||localStorage.getItem(`slicc_discovery_enabled`)!==`false`}catch{return!0}}var KS=`# /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 US=_(`llms-txt-ignore`),WS=`/etc/llmstxtignore`;function GS(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 KS(e){return`.+^$()[]|\\{}`.includes(e)?`\\${e}`:e}function qS(e){let t=``;for(let n of e)t+=n===`*`?`.*`:n===`?`?`.`:KS(n);return RegExp(`^${t}$`,`i`)}function JS(e,t){return t.some(t=>qS(t).test(e))}function YS(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 XS(e,t){for(let n of[e,t])if(n)try{return new URL(n).hostname.toLowerCase()}catch{}return null}async function ZS(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(WS,{encoding:`utf-8`})}catch(e){if(!(e instanceof k)||e.code!==`ENOENT`)throw e}if(JS(n,GS(r)))return!1;let i=r.length>0&&!r.endsWith(`
909
+ `;const qS=_(`llms-txt-ignore`),JS=`/etc/llmstxtignore`;function YS(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 XS(e){return`.+^$()[]|\\{}`.includes(e)?`\\${e}`:e}function ZS(e){let t=``;for(let n of e)t+=n===`*`?`.*`:n===`?`?`.`:XS(n);return RegExp(`^${t}$`,`i`)}function QS(e,t){return t.some(t=>ZS(t).test(e))}function $S(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 eC(e,t){for(let n of[e,t])if(n)try{return new URL(n).hostname.toLowerCase()}catch{}return null}async function tC(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(JS,{encoding:`utf-8`})}catch(e){if(!(e instanceof k)||e.code!==`ENOENT`)throw e}if(QS(n,YS(r)))return!1;let i=r.length>0&&!r.endsWith(`
911
911
  `)?`
912
- `:``;return await e.writeFile(WS,`${r}${i}${n}\n`),!0}var QS=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=XS(e.discoveryOrigin,e.discoveryUrl);return t!==null&&JS(t,this.entries)}async ensureDefault(){try{await this.fs.mkdir(`/etc`,{recursive:!0}),await this.fs.exists(`/etc/llmstxtignore`)||await this.fs.writeFile(WS,HS)}catch(e){US.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(WS,{encoding:`utf-8`}),t=typeof e==`string`?e:new TextDecoder().decode(e);this.entries=GS(t)}catch(e){this.entries=[],US.warn(`Failed to read llms.txt ignore policy`,{error:e instanceof Error?e.message:String(e)})}}},$S=`# /etc/sudoers — SLICC agent approval policy
912
+ `:``;return await e.writeFile(JS,`${r}${i}${n}\n`),!0}var nC=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=eC(e.discoveryOrigin,e.discoveryUrl);return t!==null&&QS(t,this.entries)}async ensureDefault(){try{await this.fs.mkdir(`/etc`,{recursive:!0}),await this.fs.exists(`/etc/llmstxtignore`)||await this.fs.writeFile(JS,KS)}catch(e){qS.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(JS,{encoding:`utf-8`}),t=typeof e==`string`?e:new TextDecoder().decode(e);this.entries=YS(t)}catch(e){this.entries=[],qS.warn(`Failed to read llms.txt ignore policy`,{error:e instanceof Error?e.message:String(e)})}}},rC=`# /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 eC=_(`sudo:manager`);function tC(e){return e===`/etc/sudoers`||e===`/etc/sudoers.d`||e.startsWith(`/etc/sudoers.d/`)}function nC(e){if(!e.startsWith(`/etc/sudoers.d/`))return null;let t=e.slice(ni.length+1);return t.includes(`/`)?null:qr(t)}function rC(e){return e.length>1&&e.endsWith(`/`)?e.slice(0,-1):e}const iC=[`# 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 aC(e){let t=[],n=e?.allowedCommands;if(n===void 0||n.includes(`*`))t.push(`NOPASSWD Cmnd *`);else for(let e of n){let n=Qr(e);n&&(t.push(`NOPASSWD Cmnd ${n}`),t.push(`NOPASSWD Cmnd ${n} *`))}for(let n of e?.writablePaths??[]){let e=Qr(n);e&&(t.push(`NOPASSWD Write ${rC(e)}`),t.push(`NOPASSWD Write ${rC(e)}/**`))}for(let n of e?.visiblePaths??[]){let e=Qr(n);e&&(t.push(`NOPASSWD Read ${rC(e)}`),t.push(`NOPASSWD Read ${rC(e)}/**`))}return`${t.join(`
988
- `)}\n`}var oC=class{fs;watcher;broker;onPolicyReload;policy=Yr();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??h(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`&&Zr(this.policy,e.detail)===`nopasswd-allow`)return eC.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 eC.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(ai(e.kind),n)}catch(n){return eC.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=[Jr(),this.policy];return n&&r.push(n),t&&r.push(t),ti(...r)}registerScoopConfig(e,t){this.scoopConfigPolicies.set(e,$r(aC(t??void 0))),this.onPolicyReload(e)}async initScoopPolicy(e,t){this.registerScoopConfig(e,t);let n=si(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=Qr(n);if(!r)return null;let i=t===`command`?`Cmnd`:t===`read`?`Read`:`Write`,a=ci(e);if(!a)return eC.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 eC.info(`Per-scoop grant already present; skipping duplicate append`,{folder:e,kind:t,pattern:r}),r;try{await this.fs.mkdir(ni,{recursive:!0})}catch{}let c=o?o.endsWith(`
990
- `)?o:`${o}\n`:iC;return await this.fs.writeFile(a,`${c}${s}\n`),await this.reloadScoopPolicy(e),eC.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=ci(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(ii)];try{let t=(await this.fs.readDir(ni)).filter(e=>e.type===`file`).filter(e=>qr(e.name)===null).map(e=>e.name).sort();for(let n of t)e.push(await this.readPolicyFile(`${ni}/${n}`))}catch{}this.policy=ti(...e),this.onPolicyReload()}async readPolicyFile(e){try{if(!await this.fs.exists(e))return Yr();let t=await this.fs.readFile(e,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t);return $r(n)}catch(t){return eC.warn(`Failed to read sudoers file; ignoring`,{path:e,error:t instanceof Error?t.message:String(t)}),Yr()}}async ensureDefaults(){try{await this.fs.mkdir(ni,{recursive:!0})}catch{}await this.seedWhenAbsent(ii,()=>$S),await this.seedWhenAbsent(oi,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()),eC.info(`Seeded bundled policy default`,{path:e})}catch(t){eC.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=Qr(t);if(!n)return;let r=``;try{if(await this.fs.exists(di)){let e=await this.fs.readFile(di,{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(ni,{recursive:!0})}catch{}let i=r&&!r.endsWith(`
991
- `)?`${r}\n`:r,a=e===`Cmnd`?` `:` `;await this.fs.writeFile(di,`${i}NOPASSWD ${e}${a}${n}\n`),await this.reload()}startWatching(){this.watcher&&(this.unwatch||=this.watcher.watch(`/etc`,tC,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=nC(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 sC(e){return e.replace(/~/g,`~0`).replace(/\//g,`~1`)}function cC(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function lC(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++)lC(e[r],`${t}/${r}`,n);return}if(cC(e))for(let[r,i]of Object.entries(e))lC(i,`${t}/${sC(r)}`,n)}function uC(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=uC(e[a],`${t}/${a}`,n);o!==e[a]&&(r=!0),i.push(o)}return r?i:e}if(cC(e)){let r=!1,i={};for(let[a,o]of Object.entries(e)){let e=uC(o,`${t}/${sC(a)}`,n);e!==o&&(r=!0),i[a]=e}return r?i:e}return e}function dC(e,t,n){if(cC(e))return uC(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=dC(e[a],`${t}/${a}`,n);o!==e[a]&&(r=!0),i.push(o)}return r?i:e}return e}function fC(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 pC(e,n,r){let i=[],a=0;for(;a<e.length;){if(r?.aborted)throw new t(`redaction-unavailable`);let o=0,s=a;for(;s<e.length;){let t=e[s].length;if(s>a&&o+t>1048576)break;o+=t,s++}let c=e.slice(a,s),l;try{l=await n.redact(c,r)}catch{throw new t(`redaction-unavailable`)}if(l.length!==c.length)throw new t(`redaction-unavailable`);i.push(...l),a=s}return i}function mC(e,t,n,r){let i=[],a=fC(e);for(let{category:e,id:t}of a.values())i.push({id:t,category:e,detector:`pre-obfuscated`,target:n});let o=fC(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}=ve(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 hC(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 gC(e,n,r,i){if(i?.aborted)throw new t(`redaction-unavailable`);let{privacy:a,...o}=e,s=[];lC(o,``,s);let c=s.filter(e=>!ee(e.pointer)),l=[...n.entries()],u=await pC([...c.map(e=>e.value),...l.map(([,e])=>e)],r,i),d=[],f={},p=1,m=new Map,h=[];for(let e=0;e<c.length;e++){let t=c[e],n=mC(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)}hC(h,d,f);let g=new Map,_=c.length,te=[];for(let e=0;e<l.length;e++){let[t,n]=l[e],r=mC(n,u[_+e],{kind:`attachment`,attachmentId:t},p);p=r.nextId,g.set(t,r.finalText),te.push(r)}hC(te,d,f);let ne=dC(e,``,m);return{document:{...ne,privacy:{...ne.privacy,redactionCounts:f,redactions:d}},textAttachments:g}}function _C(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 vC(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 yC={"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 bC(e,t){return yC[e]??(t===`text-redacted`?`.txt`:`.bin`)}function xC(e,t,n){return`attachments/att-${String(e+1).padStart(4,`0`)}${bC(t,n)}`}function SC(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 CC(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 wC(e,t,n,r,i){let a=_C(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(SC(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=SC(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 TC(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:SC(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(wC(c.a,s.attachmentId,s.conversationId,s.messageId,r))}return{pendingPromises:i,mismatchedConvIds:a,processedUiPositions:o}}function EC(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 DC(e,t,n,r,i,a,o){let s=EC(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(wC(i,l,n,e.id,o)),c.push({type:`attachment-ref`,attachmentId:l}))}return c}function OC(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=DC(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 kC(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,xC(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 AC(e,n,r,i,a){let{rawAttachments:o,textMap:s}=kC(e,r),c,l;try{let e=await gC({...n,attachments:o},s,i,a);c=e.document,l=e.textAttachments}catch(e){throw e instanceof t?e:new t(`attachment-unreadable`)}let u=new Map;for(let n of e){if(u.has(n.attachmentId))throw new t(`schema-invalid`);u.set(n.attachmentId,n)}let d=new Map,f=await Promise.all(c.attachments.map(async e=>{if(!e.present||!e.path)return e;let n=u.get(e.id);if(n===void 0)throw new t(`schema-invalid`);let r=n.handling===`text-redacted`?new TextEncoder().encode(l.get(n.attachmentId)??n.rawText??``):n.rawBytes,i=await vC(r);return d.set(e.path,r),{...e,byteLength:r.length,sha256:i}}));return{redactedDocument:{...c,attachments:f},bundleFiles:d}}async function jC(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}=TC(CC(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}=OC(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:_}=await AC(h,ee,s,r,i),te=[...g.session.completeness.missing.filter(e=>!s.has(e)),...s];return{document:{...g,session:{...g.session,completeness:{status:te.length>0?`partial`:g.session.completeness.status,missing:te}}},bundleFiles:_}}function MC(e){return er(e)}function NC(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 PC(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:Bn(t)?`cone`:`scoop`,name:t.name,...t.folder&&!Bn(t)?{folder:t.folder}:{},...t.parentJid?{parentConversationId:t.parentJid}:{},...t.originToolCallId?{originToolCallId:t.originToolCallId}:{},messages:e};o.push(n);let c=MC(t),l=a.get(c);l&&s.set(t.jid,l.messages)}return{sources:o,chatMessagesByConversation:s}}async function FC(e,n,r={}){let i=e=>r.rootJid===void 0?e:Hn(e,r.rootJid);for(;;){let r=i(e.listScoops());for(;r.some(t=>e.isProcessing(t.jid));)if(n?.aborted||(await e.wait(50,n),n?.aborted))throw new t(`transfer-aborted`);let a=NC(r,e),[o,s]=await Promise.all([e.loadPersistedSessions(),e.loadUiChatSessions()]);if(n?.aborted)throw new t(`transfer-aborted`);let c=i(e.listScoops());if(a===NC(c,e))return PC(c,o,s,e)}}var IC=e({SESSIONS_DIR:()=>LC,SESSIONS_INDEX_PATH:()=>RC,parseFrozenArchive:()=>BC,readSessionsIndex:()=>zC});const LC=`/sessions`,RC=`/sessions/index.json`;async function zC(e){try{let t=await e.readFile(RC,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),r=JSON.parse(n);return Array.isArray(r)?r:[]}catch{return[]}}function BC(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,VC(i[1]));let e=i[1].match(/^title:\s*(.+?)\s*$/m);e&&(n=HC(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:WC(t),...r})}function VC(e){let t={},n=UC(e,`cost`),r=UC(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=HC(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 HC(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 UC(e,t){let n=RegExp(`^${t}:\\s*(.+?)\\s*$`,`m`).exec(e)?.[1];if(n)try{return JSON.parse(n)}catch{return}}function WC(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 GC(e,t){return`${e}-msg-${t.toString().padStart(6,`0`)}`}function KC(e,t){return{type:`attachment-ref`,attachmentId:`${e}-img-${t}`}}function qC(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(KC(t,r++));return n}function JC(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=KC(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 YC(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=KC(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 XC(e,t,n){let r=GC(t,n),i=qC(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 ZC(e,t,n){let r=GC(t,n),{blocks:i,excluded:a,images:o}=JC(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 QC(e,t,n){let r=GC(t,n),{blocks:i,images:a}=YC(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 $C(e,t,n){return e.role===`user`?XC(e,t,n):e.role===`assistant`?ZC(e,t,n):e.role===`toolResult`?QC(e,t,n):{message:null,excludedReasoningBlocks:0,images:new Map}}function ew(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 tw(e){let t=0,n=new Map;return{conversations:e.map(e=>{let r=e.messages.flatMap((r,i)=>{let a=$C(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:ew(e),excludedReasoningBlocks:t,canonicalImages:n}}const nw=(()=>{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 rw(e){let t=-1>>>0;for(let n=0;n<e.length;n++)t=t>>>8^nw[(t^e[n])&255];return~t>>>0}const iw=new TextEncoder;function J(e,t,n){e[t]=n&255,e[t+1]=n>>>8&255}function aw(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 ow(e,t,n){let r=new Uint8Array(30+e.length);return r[0]=80,r[1]=75,r[2]=3,r[3]=4,J(r,4,20),J(r,6,2048),J(r,8,0),J(r,10,0),J(r,12,0),aw(r,14,n),aw(r,18,t),aw(r,22,t),J(r,26,e.length),J(r,28,0),r.set(e,30),r}function sw(e,t,n,r){let i=new Uint8Array(46+e.length);return i[0]=80,i[1]=75,i[2]=1,i[3]=2,J(i,4,20),J(i,6,20),J(i,8,2048),J(i,10,0),J(i,12,0),J(i,14,0),aw(i,16,n),aw(i,20,t),aw(i,24,t),J(i,28,e.length),J(i,30,0),J(i,32,0),J(i,34,0),J(i,36,0),aw(i,38,0),aw(i,42,r),i.set(e,46),i}function cw(e,t,n){let r=new Uint8Array(22);return r[0]=80,r[1]=75,r[2]=5,r[3]=6,J(r,4,0),J(r,6,0),J(r,8,e),J(r,10,e),aw(r,12,t),aw(r,16,n),J(r,20,0),r}function lw(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 uw(e){let t=e.export.generatedAt.slice(0,10),n=e.export.id.slice(0,8);return`slicc-${t}-${_e(e.session.title,{maxLen:40,fallback:`transcript`})}-${n}.zip`}async function*dw(e,n,r,i,a){if(r?.aborted)throw a(new t(`transfer-aborted`)),new t(`transfer-aborted`);let o=()=>a(new t(`transfer-aborted`));r?.addEventListener(`abort`,o,{once:!0});let s=pi.create(),c=0,l=0,u=[],d=!1;function*f(e){s.update(e),c+=e.byteLength,l+=e.byteLength,yield e}try{let a=new TextEncoder().encode(JSON.stringify(e,null,2)),o=iw.encode(`transcript.json`),p=rw(a),m=ow(o,a.length,p);if(u.push({nameBytes:o,size:a.length,crc:p,localOffset:l}),r?.aborted||(yield*f(m),r?.aborted))throw new t(`transfer-aborted`);yield*f(a);for(let[e,i]of n){if(r?.aborted)throw new t(`transfer-aborted`);let n=iw.encode(e),a=rw(i),o=ow(n,i.length,a);if(u.push({nameBytes:n,size:i.length,crc:a,localOffset:l}),yield*f(o),r?.aborted)throw new t(`transfer-aborted`);yield*f(i)}let h=l;for(let e of u){if(r?.aborted)throw new t(`transfer-aborted`);yield*f(sw(e.nameBytes,e.size,e.crc,e.localOffset))}if(r?.aborted)throw new t(`transfer-aborted`);yield*f(cw(u.length,l-h,h)),d=!0,i({byteLength:c,sha256:s.hex()})}catch(e){throw d=!0,a(e),e}finally{r?.removeEventListener(`abort`,o),d||(d=!0,a(new t(`transfer-aborted`)))}}function fw(e,n,r){for(let e of n.keys())if(!lw(e))throw new t(`schema-invalid`);if(n.size+1>65535)throw new t(`schema-invalid`);for(let e of n.values())if(e.byteLength>4294967295)throw new t(`schema-invalid`);let i,a,o=new Promise((e,t)=>{i=e,a=t});return{filename:uw(e),chunks:dw(e,n,r,i,a),completion:o}}function pw(e,t,n,r,i,a={}){return{schemaVersion:1,export:{id:crypto.randomUUID(),generatedAt:new Date().toISOString(),producer:{application:`slicc`,version:i},format:o},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 mw(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 hw(e){let n=g(e);if(!n.ok)throw new t(`schema-invalid`,n.error)}function gw(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 _w(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 vw(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 yw=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),hw(i.document),r?.({phase:`packaging`}),fw(i.document,i.bundleFiles,n)}async captureFrozen(e,n){let r=await FC(this.deps.collection,n,{...e.rootJid?{rootJid:e.rootJid}:{}});if(e.rootJid&&r.sources.length===0)return;let i=tw(r.sources),{document:a,bundleFiles:o}=await jC({document:pw(e.sessionId,e.title,`frozen`,i,this.deps.version,{frozenAt:e.frozenAt,createdAt:new Date(e.createdAt).toISOString(),updatedAt:new Date(e.updatedAt).toISOString()}),chatMessagesByConversation:r.chatMessagesByConversation,knownSecrets:this.deps.knownSecrets,canonicalImages:i.canonicalImages,vfsReader:e=>this.readBinaryFromVfs(e),signal:n});if(hw(a),n?.aborted)throw new t(`transfer-aborted`);await this.deps.snapshotStore.write(e.sessionId,{document:a,attachments:o},n)}async buildActiveSnapshot(e,t){t?.({phase:`waiting-for-conversations`}),t?.({phase:`collecting`});let n=await FC(this.deps.collection,e),r=tw(n.sources),{id:i,title:a}=this.deps.getActiveSessionInfo(),o=pw(i,a,`active`,r,this.deps.version);return t?.({phase:`redacting`}),jC({document:o,chatMessagesByConversation:n.chatMessagesByConversation,knownSecrets:this.deps.knownSecrets,canonicalImages:r.canonicalImages,vfsReader:e=>this.readBinaryFromVfs(e),signal:e})}async buildFrozenSnapshot(e,n,r){let i;try{i=await this.deps.snapshotStore.read(e)}catch(e){if(!(e instanceof t)||e.code!==`session-not-found`)throw e;i=null}return i?(r?.({phase:`redacting`}),this.reredactStoredSnapshot(i,n)):this.buildLegacyPartial(e,n,r)}async reredactStoredSnapshot(e,n){let r=new Map;for(let t of e.document.attachments){if(t.handling!==`text-redacted`||!t.present||!t.path)continue;let n=e.attachments.get(t.path);n&&r.set(t.id,new TextDecoder().decode(n))}let i,a;try{let t=await gC(e.document,r,this.deps.knownSecrets,n);i=t.document,a=t.textAttachments}catch{throw new t(`redaction-unavailable`)}let o=gw(i.attachments,a,e.attachments),s=await _w(i.attachments,o);return{document:{...i,attachments:s},bundleFiles:o}}async buildLegacyPartial(e,n,r){let i=(await zC(this.deps.vfs)).find(t=>t.sessionId===e||!t.sessionId&&t.filename===e);if(!i)throw new t(`session-not-found`);let a;try{let e=await this.deps.vfs.readFile(`/sessions/${i.filename}`,{encoding:`utf-8`});a=typeof e==`string`?e:new TextDecoder().decode(e)}catch{throw new t(`session-not-found`)}let{loadFrozenArchive:s}=await import(`./session-jsonl-Br0rrgRz.js`),{title:c,messages:l}=await s(this.deps.vfs,a,i.filename),u=`legacy-cone`,d=mw(l,u),f=vw(a),p={schemaVersion:1,export:{id:crypto.randomUUID(),generatedAt:new Date().toISOString(),producer:{application:`slicc`,version:this.deps.version},format:o},session:{id:e,title:c,state:`frozen`,...i.frozenAt?{frozenAt:i.frozenAt}:{},...f,completeness:{status:`partial`,missing:[`complete-snapshot-unavailable`,`canonical-agent-history-unavailable`]}},privacy:{reasoningExcluded:!0,excludedReasoningBlocks:0,binaryAttachments:`included-unchanged`,redactionCounts:{},redactions:[]},conversations:[{id:u,kind:`cone`,name:c,messages:d}],delegations:[],attachments:[]},m=new Map([[u,l]]);return r?.({phase:`redacting`}),jC({document:p,chatMessagesByConversation:m,knownSecrets:this.deps.knownSecrets,vfsReader:e=>this.readBinaryFromVfs(e),signal:n})}async readBinaryFromVfs(e){let n=await this.deps.vfs.readFile(e,{encoding:`binary`});if(!(n instanceof Uint8Array))throw new t(`attachment-unreadable`);return n}};const bw=`/sessions/data`,xw=`document.json`,Sw=`.publishing`;function Cw(e){if(e?.aborted)throw new t(`transfer-aborted`)}async function ww(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 Tw(e){if(e.length===0||/[/\\\x00]/.test(e)||e===`..`||e===`.`||e.includes(`..`)||!/^[a-zA-Z0-9._-]+$/.test(e))throw new t(`session-not-found`)}function Ew(e){return`${bw}/${e}`}function Dw(e){return`${bw}/.tmp-${e}`}async function Ow(e,t){try{await e.mkdir(t,{recursive:!0})}catch{}}async function kw(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 kw(e,n);try{await e.rm(n)}catch{}}try{await e.rm(t)}catch{}}async function Aw(e,t){let n=await e.readDir(t);for(let r of n){if(r.name===Sw)continue;let n=`${t}/${r.name}`;r.type===`directory`?await kw(e,n):await e.rm(n)}}async function jw(e,t,n,r){Cw(r),await Ow(e,n);let i=await e.readDir(t);for(let a of i){Cw(r);let i=`${t}/${a.name}`,o=`${n}/${a.name}`;if(a.type===`directory`)await jw(e,i,o,r);else{let t=await e.readFile(i,{encoding:`binary`});await e.writeFile(o,t)}}}async function Mw(e,n,r,i){Tw(n);let a=Dw(n),o=Ew(n),s=new Map(r.document.attachments.filter(e=>e.present&&e.path).map(e=>[e.path,e]));for(let[e]of r.attachments)if(!s.has(e))throw new t(`schema-invalid`);Cw(i),await Ow(e,a);let c=!1;try{let t=[...r.document.attachments];for(let[e,n]of r.attachments){Cw(i);let r=await ww(n),a=s.get(e);if(a!==void 0){let e=t.indexOf(a);e!==-1&&(t[e]={...a,sha256:r,byteLength:n.length})}}let n={...r.document,attachments:t},l=JSON.stringify(n,null,2);if(await e.writeFile(`${a}/${xw}`,l),r.attachments.size>0)for(let[t,n]of r.attachments){let r=`${a}/${t}`,i=t.lastIndexOf(`/`);i!==-1&&await Ow(e,`${a}/${t.slice(0,i)}`),await e.writeFile(r,n)}await e.flush(),Cw(i),await Ow(e,o),c=!0,await e.writeFile(`${o}/${Sw}`,`in-progress`),await Aw(e,o),Cw(i),await jw(e,a,o,i),await e.flush(),Cw(i),await e.rm(`${o}/${Sw}`)}catch(t){if(c)try{await Aw(e,o)}catch{}throw await kw(e,a),t}await kw(e,a)}async function Nw(e,n){Tw(n);let r=Ew(n),i=`${r}/${xw}`;try{throw await e.stat(`${r}/${Sw}`),new t(`session-not-found`)}catch(e){if(e instanceof t||e.code!==`ENOENT`)throw e}let a;try{let t=await e.readFile(i,{encoding:`utf-8`});a=typeof t==`string`?t:new TextDecoder().decode(t)}catch{throw new t(`session-not-found`)}let o;try{o=JSON.parse(a)}catch{throw new t(`schema-invalid`)}if(!g(o).ok)throw new t(`schema-invalid`);let s=new Map;for(let n of o.attachments){if(!n.present||!n.path)continue;let i=`${r}/${n.path}`,a;try{let t=await e.readFile(i,{encoding:`binary`});a=t instanceof Uint8Array?t:new TextEncoder().encode(t)}catch{throw new t(`transfer-corrupt`)}if(await ww(a)!==n.sha256)throw new t(`transfer-corrupt`);s.set(n.path,a)}return{document:o,attachments:s}}function Pw(e){return`error`in e}function Fw(){throw new t(`redaction-unavailable`)}function Iw(e,t){return(typeof e!=`object`||!e||!Array.isArray(e.texts)||e.texts.length!==t)&&Fw(),e.texts}function Lw(){return{async redact(e){let t;try{t=await fetch(Fe(`/api/secrets/redact-export`),{method:`POST`,headers:Ie({"content-type":`application/json`}),body:JSON.stringify({texts:e})})}catch{Fw()}t.ok||Fw();let n;try{n=await t.json()}catch{Fw()}return Iw(n,e.length)}}}function Rw(){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{Fw()}return typeof t==`object`&&t&&Pw(t)&&Fw(),Iw(t,e.length)}}}function zw(){return{async redact(e){let t;try{t=await En(`secrets.redact-export`,{texts:e})}catch{Fw()}return t??Fw(),typeof t==`object`&&t&&Pw(t)&&Fw(),Iw(t,e.length)}}}function Bw(){return{async redact(e){Fw()}}}function Vw(){let e=Tn();return e===`connect`?Bw():e===`extension-direct`?Rw():e===`extension-delegate`?zw():Lw()}const Hw=new Set([`scoop-notify`,`scoop-idle`,`scoop-wait`]);function Uw(e){return`e${e}`}function Ww(e){let t=[];for(let n of e){let e=qw(n),r=Yw(n);if(e===`assistant`){let e=t.length,i=Uw(e);t.push({id:i,seq:e,kind:`assistant`,timestamp:r,text:Qw(n),message:n,model:Zw(n)});for(let e of $w(n)){let n=t.length;t.push({id:Uw(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:Uw(i),seq:i,kind:`tool-result`,timestamp:r,text:Qw(n),message:n,toolCallId:e.toolCallId??``,isError:e.isError});continue}let i=Qw(n),a=e===`user`?Kw(i):null,o=t.length,s=Uw(o);a===null?t.push({id:s,seq:o,kind:`user`,timestamp:r,text:i,message:n}):Hw.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 Gw(e){let t=[];for(let n of e){let e=t.length,r=Uw(e),i=Xw(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:Uw(n),seq:n,kind:`tool-call`,timestamp:i,toolCallId:e.id,name:e.name,assistantEntryId:r})}continue}let o=n.source===`lick`&&n.channel&&by(n.channel)?n.channel:Kw(a);o===null?t.push({id:r,seq:e,kind:`user`,timestamp:i,text:a,chat:n}):Hw.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 Kw(e){for(let t of Hy(e)){let e=(t.sender?Uy(t.sender):null)??Wy(t.body);if(e)return e}return null}function qw(e){return e.role??``}function Jw(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 Yw(e){return Jw(e.timestamp)}function Xw(e){return Jw(e.timestamp)}function Zw(e){let t=e.model;return typeof t==`string`?t:void 0}function Qw(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 $w(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 eT(e){let t=e.markers?.some(e=>e.kind===`error`)??!1,n=(e.projectionPrefix?.length??0)>0;return t||n?2:1}function tT(e){return e!==null&&e.version<=2}const nT=_(`work-unit-conversation`);var rT=class extends Error{};const iT=`conversations`;async function aT(e){let t=e.now??(()=>Date.now()),n=await sT(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=Ir(s);if(i.has(c)){r.alreadyDone++;continue}try{let n=await oT(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}],nT.warn(`Skipping a unit whose conversation could not be migrated`,{key:c,folder:s.folder,error:o}),i instanceof rT){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),nT.info(`Canonical conversation migration complete`,{...r}),r}async function oT(e,t,n,r){let i=await e.store.read(n);if(i.status===`ok`)return`already`;if(i.status===`incompatible`)return nT.info(`Leaving a newer-schema conversation record untouched`,{key:n,version:i.version}),`already`;if(i.status===`error`)throw new rT(`canonical record unreadable: ${i.reason}`);let a=Lr(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:Ww(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:Gw(s.messages),createdAt:s.createdAt??r,updatedAt:r,migratedFrom:`browser-coding-agent`};return await e.store.save(t),`migrated`}return`empty`}async function sT(e,t){let n=await e.getMigrationState(iT);return n&&n.version===1?{...n,completedKeys:Array.isArray(n.completedKeys)?n.completedKeys:[],skipped:Array.isArray(n.skipped)?n.skipped:[]}:{id:iT,version:1,completedKeys:[],skipped:[],done:!1,startedAt:t,updatedAt:t}}var cT=e({applyAttachmentOverlays:()=>fT,interleaveMarkers:()=>pT,toAgentMessages:()=>uT,toChatMessages:()=>dT});const lT=new Set([`summarized`,`fallback`]);function uT(e){if(!tT(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 dT(e,t={}){if(!tT(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 pT(t,e.markers)}let n=e.projectionPrefix??[],r=uT(e);if(r.length===0)return pT([...n],e.markers);let{agentMessagesToChatMessages:i}=await Promise.resolve().then(()=>Oy),a=fT(i(r,t),e.attachments);return pT([...n,...a],e.markers)}function fT(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 pT(e,t){let n=(t??[]).filter(e=>e.kind!==`compaction`||lT.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=mT(t);for(;a<r.length&&r[a].timestamp<=e;)i.push(hT(r[a++]));i.push(t)}for(;a<r.length;)i.push(hT(r[a++]));return i}function mT(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 hT(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 gT(e){return{id:e.legacyKeys.chatSessionId,messages:await dT(e),createdAt:e.createdAt,updatedAt:e.updatedAt}}function _T(e){return{id:e.workUnitId,messages:uT(e),config:{},createdAt:e.createdAt,updatedAt:e.updatedAt}}var vT=class{store;constructor(e){this.store=e}async loadAgentSessions(){return(await this.latestPerUnit()).map(_T)}async loadChatSessions(){return Promise.all((await this.latestPerUnit()).map(gT))}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(yr({parentJid:null,folder:e}).root);return t?gT(t):null}async load(e){return e.startsWith(`session-`)?this.loadRootChatSession(e.slice(8)):null}};const yT=_(`work-unit-conversation`),bT=`conversations`,xT=`migrations`;var ST=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 kT((await this.getDb()).transaction(bT,`readonly`).objectStore(bT).get(e));return t?tT(t)?Array.isArray(t.entries)?{status:`ok`,record:t}:(yT.warn(`Conversation record has no entry list`,{key:e}),{status:`malformed`,reason:`entries is not a list`}):(yT.warn(`Ignoring conversation record from a newer schema`,{key:e,version:t.version}),{status:`incompatible`,version:t.version}):{status:`absent`}}catch(t){return yT.warn(`Conversation record read failed`,{key:e,error:jT(t)}),{status:`error`,reason:jT(t)}}}async save(e){let t=e.version>2?e.version:eT(e),n={...e,version:t},r=(await this.getDb()).transaction(bT,`readwrite`);return r.objectStore(bT).put(n),await AT(r),n}delete(e){return this.serialize(e,async()=>{try{let t=(await this.getDb()).transaction(bT,`readwrite`);t.objectStore(bT).delete(e),await AT(t)}catch(t){yT.warn(`Conversation record delete failed`,{key:e,error:jT(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`){yT.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){yT.warn(`Conversation rekey failed`,{fromKey:e,toKey:t.key,error:jT(n)})}}async loadAll(){try{return(await kT((await this.getDb()).transaction(bT,`readonly`).objectStore(bT).getAll())).filter(e=>tT(e)&&Array.isArray(e.entries))}catch(e){return yT.warn(`Conversation record listing failed`,{error:jT(e)}),[]}}async loadLatestInWorkspace(e){try{let t=`${e}::`,n=await kT((await this.getDb()).transaction(bT,`readonly`).objectStore(bT).getAll(IDBKeyRange.bound(t,`${t}\uffff`))),r=null;for(let e of n)!tT(e)||!Array.isArray(e.entries)||(!r||e.updatedAt>r.updatedAt)&&(r=e);return r}catch(t){return yT.warn(`Conversation workspace lookup failed`,{workspaceId:e,error:jT(t)}),null}}async listKeys(){try{return(await kT((await this.getDb()).transaction(bT,`readonly`).objectStore(bT).getAllKeys())).map(String)}catch(e){return yT.warn(`Conversation key listing failed`,{error:jT(e)}),[]}}async syncAgentMessages(e,t,n={}){let r=n.now??Date.now(),i=Ww(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=CT(a,t,e,`agent-history`,{createdAt:n.createdAt??r,now:r});return o?await this.save(o):a}catch(t){return yT.warn(`Conversation record write failed`,{key:e.key,error:jT(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?wT(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 yT.warn(`Conversation marker write failed`,{key:e,error:jT(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 kT((await this.getDb()).transaction(xT,`readonly`).objectStore(xT).get(e))??null}catch(t){return yT.warn(`Migration state read failed`,{id:e,error:jT(t)}),null}}async putMigrationState(e){try{let t=(await this.getDb()).transaction(xT,`readwrite`);t.objectStore(xT).put(e),await AT(t)}catch(t){yT.warn(`Migration state write failed`,{id:e.id,error:jT(t)})}}async clearAll(){let e=(await this.getDb()).transaction([bT,xT],`readwrite`);e.objectStore(bT).clear(),e.objectStore(xT).clear(),await AT(e)}getDb(){return this.dbPromise||(this.dbPromise=OT(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 CT(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??[],...TT(e)],updatedAt:i.now,legacyKeys:n.legacyKeys};let a=e.entries;if(t.length===a.length&&ET(a,t))return null;let o=t.length>a.length&&ET(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 wT(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 TT(e){let t=[];for(let n of e.entries)n.kind!==`tool-call`&&n.chat&&t.push(n.chat);return t}function ET(e,t){if(e.length>t.length)return!1;for(let n=0;n<e.length;n++)if(!DT(e[n],t[n]))return!1;return!0}function DT(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 OT(e){return new Promise((t,n)=>{let r=indexedDB.open(e,1);r.onupgradeneeded=()=>{let e=r.result;e.objectStoreNames.contains(bT)||e.createObjectStore(bT,{keyPath:`key`}),e.objectStoreNames.contains(xT)||e.createObjectStore(xT,{keyPath:`id`})},r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error)})}function kT(e){return new Promise((t,n)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>n(e.error)})}function AT(e){return new Promise((t,n)=>{e.oncomplete=()=>t(),e.onerror=()=>n(e.error),e.onabort=()=>n(e.error)})}function jT(e){return e instanceof Error?e.message:String(e)}var MT=e({CONE_MEMORY_PATH:()=>FT,MEMORY_BASE_CHARS:()=>MEMORY_BASE_CHARS,MEMORY_OVERSHOOT_RATIO:()=>PT,MEMORY_PER_LOG_CHARS:()=>MEMORY_PER_LOG_CHARS,SESSIONS_INDEX_PATH:()=>IT,applyConeMemoryBudget:()=>VT,readSessionCount:()=>zT,restructureConeMemory:()=>BT,splitConeMemory:()=>RT});const NT=_(`cone-memory-budget`),PT=1.25,FT=hr.memoryPath,IT=`/sessions/index.json`,LT=/^## Auto-extracted/m;function RT(e){let t=LT.exec(e);if(!t)return{header:e,autoExtracted:``};let n=t.index;return{header:e.slice(0,n),autoExtracted:e.slice(n)}}async function zT(e){try{let t=await e.readFile(IT,{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 BT(e){let{header:t,autoExtracted:n}=RT(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 iC=_(`sudo:manager`);function aC(e){return e===`/etc/sudoers`||e===`/etc/sudoers.d`||e.startsWith(`/etc/sudoers.d/`)}function oC(e){if(!e.startsWith(`/etc/sudoers.d/`))return null;let t=e.slice(ni.length+1);return t.includes(`/`)?null:qr(t)}function sC(e){return e.length>1&&e.endsWith(`/`)?e.slice(0,-1):e}const cC=[`# 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 lC(e){let t=[],n=e?.allowedCommands;if(n===void 0||n.includes(`*`))t.push(`NOPASSWD Cmnd *`);else for(let e of n){let n=Qr(e);n&&(t.push(`NOPASSWD Cmnd ${n}`),t.push(`NOPASSWD Cmnd ${n} *`))}for(let n of e?.writablePaths??[]){let e=Qr(n);e&&(t.push(`NOPASSWD Write ${sC(e)}`),t.push(`NOPASSWD Write ${sC(e)}/**`))}for(let n of e?.visiblePaths??[]){let e=Qr(n);e&&(t.push(`NOPASSWD Read ${sC(e)}`),t.push(`NOPASSWD Read ${sC(e)}/**`))}return`${t.join(`
988
+ `)}\n`}var uC=class{fs;watcher;broker;onPolicyReload;policy=Yr();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??h(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`&&Zr(this.policy,e.detail)===`nopasswd-allow`)return iC.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 iC.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(ai(e.kind),n)}catch(n){return iC.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=[Jr(),this.policy];return n&&r.push(n),t&&r.push(t),ti(...r)}registerScoopConfig(e,t){this.scoopConfigPolicies.set(e,$r(lC(t??void 0))),this.onPolicyReload(e)}async initScoopPolicy(e,t){this.registerScoopConfig(e,t);let n=si(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=Qr(n);if(!r)return null;let i=t===`command`?`Cmnd`:t===`read`?`Read`:`Write`,a=ci(e);if(!a)return iC.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 iC.info(`Per-scoop grant already present; skipping duplicate append`,{folder:e,kind:t,pattern:r}),r;try{await this.fs.mkdir(ni,{recursive:!0})}catch{}let c=o?o.endsWith(`
990
+ `)?o:`${o}\n`:cC;return await this.fs.writeFile(a,`${c}${s}\n`),await this.reloadScoopPolicy(e),iC.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=ci(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(ii)];try{let t=(await this.fs.readDir(ni)).filter(e=>e.type===`file`).filter(e=>qr(e.name)===null).map(e=>e.name).sort();for(let n of t)e.push(await this.readPolicyFile(`${ni}/${n}`))}catch{}this.policy=ti(...e),this.onPolicyReload()}async readPolicyFile(e){try{if(!await this.fs.exists(e))return Yr();let t=await this.fs.readFile(e,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t);return $r(n)}catch(t){return iC.warn(`Failed to read sudoers file; ignoring`,{path:e,error:t instanceof Error?t.message:String(t)}),Yr()}}async ensureDefaults(){try{await this.fs.mkdir(ni,{recursive:!0})}catch{}await this.seedWhenAbsent(ii,()=>rC),await this.seedWhenAbsent(oi,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()),iC.info(`Seeded bundled policy default`,{path:e})}catch(t){iC.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=Qr(t);if(!n)return;let r=``;try{if(await this.fs.exists(di)){let e=await this.fs.readFile(di,{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(ni,{recursive:!0})}catch{}let i=r&&!r.endsWith(`
991
+ `)?`${r}\n`:r,a=e===`Cmnd`?` `:` `;await this.fs.writeFile(di,`${i}NOPASSWD ${e}${a}${n}\n`),await this.reload()}startWatching(){this.watcher&&(this.unwatch||=this.watcher.watch(`/etc`,aC,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=oC(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 dC(e){return e.replace(/~/g,`~0`).replace(/\//g,`~1`)}function fC(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function pC(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++)pC(e[r],`${t}/${r}`,n);return}if(fC(e))for(let[r,i]of Object.entries(e))pC(i,`${t}/${dC(r)}`,n)}function mC(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=mC(e[a],`${t}/${a}`,n);o!==e[a]&&(r=!0),i.push(o)}return r?i:e}if(fC(e)){let r=!1,i={};for(let[a,o]of Object.entries(e)){let e=mC(o,`${t}/${dC(a)}`,n);e!==o&&(r=!0),i[a]=e}return r?i:e}return e}function hC(e,t,n){if(fC(e))return mC(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=hC(e[a],`${t}/${a}`,n);o!==e[a]&&(r=!0),i.push(o)}return r?i:e}return e}function gC(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 _C(e,n,r){let i=[],a=0;for(;a<e.length;){if(r?.aborted)throw new t(`redaction-unavailable`);let o=0,s=a;for(;s<e.length;){let t=e[s].length;if(s>a&&o+t>1048576)break;o+=t,s++}let c=e.slice(a,s),l;try{l=await n.redact(c,r)}catch{throw new t(`redaction-unavailable`)}if(l.length!==c.length)throw new t(`redaction-unavailable`);i.push(...l),a=s}return i}function vC(e,t,n,r){let i=[],a=gC(e);for(let{category:e,id:t}of a.values())i.push({id:t,category:e,detector:`pre-obfuscated`,target:n});let o=gC(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}=ve(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 yC(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 bC(e,n,r,i){if(i?.aborted)throw new t(`redaction-unavailable`);let{privacy:a,...o}=e,s=[];pC(o,``,s);let c=s.filter(e=>!ee(e.pointer)),l=[...n.entries()],u=await _C([...c.map(e=>e.value),...l.map(([,e])=>e)],r,i),d=[],f={},p=1,m=new Map,h=[];for(let e=0;e<c.length;e++){let t=c[e],n=vC(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)}yC(h,d,f);let g=new Map,_=c.length,te=[];for(let e=0;e<l.length;e++){let[t,n]=l[e],r=vC(n,u[_+e],{kind:`attachment`,attachmentId:t},p);p=r.nextId,g.set(t,r.finalText),te.push(r)}yC(te,d,f);let ne=hC(e,``,m);return{document:{...ne,privacy:{...ne.privacy,redactionCounts:f,redactions:d}},textAttachments:g}}function xC(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 SC(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 CC={"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 wC(e,t){return CC[e]??(t===`text-redacted`?`.txt`:`.bin`)}function TC(e,t,n){return`attachments/att-${String(e+1).padStart(4,`0`)}${wC(t,n)}`}function EC(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 DC(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 OC(e,t,n,r,i){let a=xC(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(EC(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=EC(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 kC(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:EC(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(OC(c.a,s.attachmentId,s.conversationId,s.messageId,r))}return{pendingPromises:i,mismatchedConvIds:a,processedUiPositions:o}}function AC(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 jC(e,t,n,r,i,a,o){let s=AC(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(OC(i,l,n,e.id,o)),c.push({type:`attachment-ref`,attachmentId:l}))}return c}function MC(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=jC(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 NC(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,TC(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 PC(e,n,r,i,a){let{rawAttachments:o,textMap:s}=NC(e,r),c,l;try{let e=await bC({...n,attachments:o},s,i,a);c=e.document,l=e.textAttachments}catch(e){throw e instanceof t?e:new t(`attachment-unreadable`)}let u=new Map;for(let n of e){if(u.has(n.attachmentId))throw new t(`schema-invalid`);u.set(n.attachmentId,n)}let d=new Map,f=await Promise.all(c.attachments.map(async e=>{if(!e.present||!e.path)return e;let n=u.get(e.id);if(n===void 0)throw new t(`schema-invalid`);let r=n.handling===`text-redacted`?new TextEncoder().encode(l.get(n.attachmentId)??n.rawText??``):n.rawBytes,i=await SC(r);return d.set(e.path,r),{...e,byteLength:r.length,sha256:i}}));return{redactedDocument:{...c,attachments:f},bundleFiles:d}}async function FC(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}=kC(DC(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}=MC(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:_}=await PC(h,ee,s,r,i),te=[...g.session.completeness.missing.filter(e=>!s.has(e)),...s];return{document:{...g,session:{...g.session,completeness:{status:te.length>0?`partial`:g.session.completeness.status,missing:te}}},bundleFiles:_}}function IC(e){return er(e)}function LC(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 RC(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:Bn(t)?`cone`:`scoop`,name:t.name,...t.folder&&!Bn(t)?{folder:t.folder}:{},...t.parentJid?{parentConversationId:t.parentJid}:{},...t.originToolCallId?{originToolCallId:t.originToolCallId}:{},messages:e};o.push(n);let c=IC(t),l=a.get(c);l&&s.set(t.jid,l.messages)}return{sources:o,chatMessagesByConversation:s}}async function zC(e,n,r={}){let i=e=>r.rootJid===void 0?e:Hn(e,r.rootJid);for(;;){let r=i(e.listScoops());for(;r.some(t=>e.isProcessing(t.jid));)if(n?.aborted||(await e.wait(50,n),n?.aborted))throw new t(`transfer-aborted`);let a=LC(r,e),[o,s]=await Promise.all([e.loadPersistedSessions(),e.loadUiChatSessions()]);if(n?.aborted)throw new t(`transfer-aborted`);let c=i(e.listScoops());if(a===LC(c,e))return RC(c,o,s,e)}}var BC=e({SESSIONS_DIR:()=>VC,SESSIONS_INDEX_PATH:()=>HC,parseFrozenArchive:()=>WC,readSessionsIndex:()=>UC});const VC=`/sessions`,HC=`/sessions/index.json`;async function UC(e){try{let t=await e.readFile(HC,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),r=JSON.parse(n);return Array.isArray(r)?r:[]}catch{return[]}}function WC(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,GC(i[1]));let e=i[1].match(/^title:\s*(.+?)\s*$/m);e&&(n=KC(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:JC(t),...r})}function GC(e){let t={},n=qC(e,`cost`),r=qC(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=KC(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 KC(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 qC(e,t){let n=RegExp(`^${t}:\\s*(.+?)\\s*$`,`m`).exec(e)?.[1];if(n)try{return JSON.parse(n)}catch{return}}function JC(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 YC(e,t){return`${e}-msg-${t.toString().padStart(6,`0`)}`}function XC(e,t){return{type:`attachment-ref`,attachmentId:`${e}-img-${t}`}}function ZC(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(XC(t,r++));return n}function QC(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=XC(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 $C(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=XC(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 ew(e,t,n){let r=YC(t,n),i=ZC(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 tw(e,t,n){let r=YC(t,n),{blocks:i,excluded:a,images:o}=QC(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 nw(e,t,n){let r=YC(t,n),{blocks:i,images:a}=$C(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 rw(e,t,n){return e.role===`user`?ew(e,t,n):e.role===`assistant`?tw(e,t,n):e.role===`toolResult`?nw(e,t,n):{message:null,excludedReasoningBlocks:0,images:new Map}}function iw(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 aw(e){let t=0,n=new Map;return{conversations:e.map(e=>{let r=e.messages.flatMap((r,i)=>{let a=rw(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:iw(e),excludedReasoningBlocks:t,canonicalImages:n}}const ow=(()=>{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 sw(e){let t=-1>>>0;for(let n=0;n<e.length;n++)t=t>>>8^ow[(t^e[n])&255];return~t>>>0}const cw=new TextEncoder;function J(e,t,n){e[t]=n&255,e[t+1]=n>>>8&255}function lw(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 uw(e,t,n){let r=new Uint8Array(30+e.length);return r[0]=80,r[1]=75,r[2]=3,r[3]=4,J(r,4,20),J(r,6,2048),J(r,8,0),J(r,10,0),J(r,12,0),lw(r,14,n),lw(r,18,t),lw(r,22,t),J(r,26,e.length),J(r,28,0),r.set(e,30),r}function dw(e,t,n,r){let i=new Uint8Array(46+e.length);return i[0]=80,i[1]=75,i[2]=1,i[3]=2,J(i,4,20),J(i,6,20),J(i,8,2048),J(i,10,0),J(i,12,0),J(i,14,0),lw(i,16,n),lw(i,20,t),lw(i,24,t),J(i,28,e.length),J(i,30,0),J(i,32,0),J(i,34,0),J(i,36,0),lw(i,38,0),lw(i,42,r),i.set(e,46),i}function fw(e,t,n){let r=new Uint8Array(22);return r[0]=80,r[1]=75,r[2]=5,r[3]=6,J(r,4,0),J(r,6,0),J(r,8,e),J(r,10,e),lw(r,12,t),lw(r,16,n),J(r,20,0),r}function pw(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 mw(e){let t=e.export.generatedAt.slice(0,10),n=e.export.id.slice(0,8);return`slicc-${t}-${_e(e.session.title,{maxLen:40,fallback:`transcript`})}-${n}.zip`}async function*hw(e,n,r,i,a){if(r?.aborted)throw a(new t(`transfer-aborted`)),new t(`transfer-aborted`);let o=()=>a(new t(`transfer-aborted`));r?.addEventListener(`abort`,o,{once:!0});let s=pi.create(),c=0,l=0,u=[],d=!1;function*f(e){s.update(e),c+=e.byteLength,l+=e.byteLength,yield e}try{let a=new TextEncoder().encode(JSON.stringify(e,null,2)),o=cw.encode(`transcript.json`),p=sw(a),m=uw(o,a.length,p);if(u.push({nameBytes:o,size:a.length,crc:p,localOffset:l}),r?.aborted||(yield*f(m),r?.aborted))throw new t(`transfer-aborted`);yield*f(a);for(let[e,i]of n){if(r?.aborted)throw new t(`transfer-aborted`);let n=cw.encode(e),a=sw(i),o=uw(n,i.length,a);if(u.push({nameBytes:n,size:i.length,crc:a,localOffset:l}),yield*f(o),r?.aborted)throw new t(`transfer-aborted`);yield*f(i)}let h=l;for(let e of u){if(r?.aborted)throw new t(`transfer-aborted`);yield*f(dw(e.nameBytes,e.size,e.crc,e.localOffset))}if(r?.aborted)throw new t(`transfer-aborted`);yield*f(fw(u.length,l-h,h)),d=!0,i({byteLength:c,sha256:s.hex()})}catch(e){throw d=!0,a(e),e}finally{r?.removeEventListener(`abort`,o),d||(d=!0,a(new t(`transfer-aborted`)))}}function gw(e,n,r){for(let e of n.keys())if(!pw(e))throw new t(`schema-invalid`);if(n.size+1>65535)throw new t(`schema-invalid`);for(let e of n.values())if(e.byteLength>4294967295)throw new t(`schema-invalid`);let i,a,o=new Promise((e,t)=>{i=e,a=t});return{filename:mw(e),chunks:hw(e,n,r,i,a),completion:o}}function _w(e,t,n,r,i,a={}){return{schemaVersion:1,export:{id:crypto.randomUUID(),generatedAt:new Date().toISOString(),producer:{application:`slicc`,version:i},format:o},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 vw(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 yw(e){let n=g(e);if(!n.ok)throw new t(`schema-invalid`,n.error)}function bw(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 xw(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 Sw(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 Cw=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),yw(i.document),r?.({phase:`packaging`}),gw(i.document,i.bundleFiles,n)}async captureFrozen(e,n){let r=await zC(this.deps.collection,n,{...e.rootJid?{rootJid:e.rootJid}:{}});if(e.rootJid&&r.sources.length===0)return;let i=aw(r.sources),{document:a,bundleFiles:o}=await FC({document:_w(e.sessionId,e.title,`frozen`,i,this.deps.version,{frozenAt:e.frozenAt,createdAt:new Date(e.createdAt).toISOString(),updatedAt:new Date(e.updatedAt).toISOString()}),chatMessagesByConversation:r.chatMessagesByConversation,knownSecrets:this.deps.knownSecrets,canonicalImages:i.canonicalImages,vfsReader:e=>this.readBinaryFromVfs(e),signal:n});if(yw(a),n?.aborted)throw new t(`transfer-aborted`);await this.deps.snapshotStore.write(e.sessionId,{document:a,attachments:o},n)}async buildActiveSnapshot(e,t){t?.({phase:`waiting-for-conversations`}),t?.({phase:`collecting`});let n=await zC(this.deps.collection,e),r=aw(n.sources),{id:i,title:a}=this.deps.getActiveSessionInfo(),o=_w(i,a,`active`,r,this.deps.version);return t?.({phase:`redacting`}),FC({document:o,chatMessagesByConversation:n.chatMessagesByConversation,knownSecrets:this.deps.knownSecrets,canonicalImages:r.canonicalImages,vfsReader:e=>this.readBinaryFromVfs(e),signal:e})}async buildFrozenSnapshot(e,n,r){let i;try{i=await this.deps.snapshotStore.read(e)}catch(e){if(!(e instanceof t)||e.code!==`session-not-found`)throw e;i=null}return i?(r?.({phase:`redacting`}),this.reredactStoredSnapshot(i,n)):this.buildLegacyPartial(e,n,r)}async reredactStoredSnapshot(e,n){let r=new Map;for(let t of e.document.attachments){if(t.handling!==`text-redacted`||!t.present||!t.path)continue;let n=e.attachments.get(t.path);n&&r.set(t.id,new TextDecoder().decode(n))}let i,a;try{let t=await bC(e.document,r,this.deps.knownSecrets,n);i=t.document,a=t.textAttachments}catch{throw new t(`redaction-unavailable`)}let o=bw(i.attachments,a,e.attachments),s=await xw(i.attachments,o);return{document:{...i,attachments:s},bundleFiles:o}}async buildLegacyPartial(e,n,r){let i=(await UC(this.deps.vfs)).find(t=>t.sessionId===e||!t.sessionId&&t.filename===e);if(!i)throw new t(`session-not-found`);let a;try{let e=await this.deps.vfs.readFile(`/sessions/${i.filename}`,{encoding:`utf-8`});a=typeof e==`string`?e:new TextDecoder().decode(e)}catch{throw new t(`session-not-found`)}let{loadFrozenArchive:s}=await import(`./session-jsonl-DIe9RcuQ.js`),{title:c,messages:l}=await s(this.deps.vfs,a,i.filename),u=`legacy-cone`,d=vw(l,u),f=Sw(a),p={schemaVersion:1,export:{id:crypto.randomUUID(),generatedAt:new Date().toISOString(),producer:{application:`slicc`,version:this.deps.version},format:o},session:{id:e,title:c,state:`frozen`,...i.frozenAt?{frozenAt:i.frozenAt}:{},...f,completeness:{status:`partial`,missing:[`complete-snapshot-unavailable`,`canonical-agent-history-unavailable`]}},privacy:{reasoningExcluded:!0,excludedReasoningBlocks:0,binaryAttachments:`included-unchanged`,redactionCounts:{},redactions:[]},conversations:[{id:u,kind:`cone`,name:c,messages:d}],delegations:[],attachments:[]},m=new Map([[u,l]]);return r?.({phase:`redacting`}),FC({document:p,chatMessagesByConversation:m,knownSecrets:this.deps.knownSecrets,vfsReader:e=>this.readBinaryFromVfs(e),signal:n})}async readBinaryFromVfs(e){let n=await this.deps.vfs.readFile(e,{encoding:`binary`});if(!(n instanceof Uint8Array))throw new t(`attachment-unreadable`);return n}};const ww=`/sessions/data`,Tw=`document.json`,Ew=`.publishing`;function Dw(e){if(e?.aborted)throw new t(`transfer-aborted`)}async function Ow(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 kw(e){if(e.length===0||/[/\\\x00]/.test(e)||e===`..`||e===`.`||e.includes(`..`)||!/^[a-zA-Z0-9._-]+$/.test(e))throw new t(`session-not-found`)}function Aw(e){return`${ww}/${e}`}function jw(e){return`${ww}/.tmp-${e}`}async function Mw(e,t){try{await e.mkdir(t,{recursive:!0})}catch{}}async function Nw(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 Nw(e,n);try{await e.rm(n)}catch{}}try{await e.rm(t)}catch{}}async function Pw(e,t){let n=await e.readDir(t);for(let r of n){if(r.name===Ew)continue;let n=`${t}/${r.name}`;r.type===`directory`?await Nw(e,n):await e.rm(n)}}async function Fw(e,t,n,r){Dw(r),await Mw(e,n);let i=await e.readDir(t);for(let a of i){Dw(r);let i=`${t}/${a.name}`,o=`${n}/${a.name}`;if(a.type===`directory`)await Fw(e,i,o,r);else{let t=await e.readFile(i,{encoding:`binary`});await e.writeFile(o,t)}}}async function Iw(e,n,r,i){kw(n);let a=jw(n),o=Aw(n),s=new Map(r.document.attachments.filter(e=>e.present&&e.path).map(e=>[e.path,e]));for(let[e]of r.attachments)if(!s.has(e))throw new t(`schema-invalid`);Dw(i),await Mw(e,a);let c=!1;try{let t=[...r.document.attachments];for(let[e,n]of r.attachments){Dw(i);let r=await Ow(n),a=s.get(e);if(a!==void 0){let e=t.indexOf(a);e!==-1&&(t[e]={...a,sha256:r,byteLength:n.length})}}let n={...r.document,attachments:t},l=JSON.stringify(n,null,2);if(await e.writeFile(`${a}/${Tw}`,l),r.attachments.size>0)for(let[t,n]of r.attachments){let r=`${a}/${t}`,i=t.lastIndexOf(`/`);i!==-1&&await Mw(e,`${a}/${t.slice(0,i)}`),await e.writeFile(r,n)}await e.flush(),Dw(i),await Mw(e,o),c=!0,await e.writeFile(`${o}/${Ew}`,`in-progress`),await Pw(e,o),Dw(i),await Fw(e,a,o,i),await e.flush(),Dw(i),await e.rm(`${o}/${Ew}`)}catch(t){if(c)try{await Pw(e,o)}catch{}throw await Nw(e,a),t}await Nw(e,a)}async function Lw(e,n){kw(n);let r=Aw(n),i=`${r}/${Tw}`;try{throw await e.stat(`${r}/${Ew}`),new t(`session-not-found`)}catch(e){if(e instanceof t||e.code!==`ENOENT`)throw e}let a;try{let t=await e.readFile(i,{encoding:`utf-8`});a=typeof t==`string`?t:new TextDecoder().decode(t)}catch{throw new t(`session-not-found`)}let o;try{o=JSON.parse(a)}catch{throw new t(`schema-invalid`)}if(!g(o).ok)throw new t(`schema-invalid`);let s=new Map;for(let n of o.attachments){if(!n.present||!n.path)continue;let i=`${r}/${n.path}`,a;try{let t=await e.readFile(i,{encoding:`binary`});a=t instanceof Uint8Array?t:new TextEncoder().encode(t)}catch{throw new t(`transfer-corrupt`)}if(await Ow(a)!==n.sha256)throw new t(`transfer-corrupt`);s.set(n.path,a)}return{document:o,attachments:s}}function Rw(e){return`error`in e}function zw(){throw new t(`redaction-unavailable`)}function Bw(e,t){return(typeof e!=`object`||!e||!Array.isArray(e.texts)||e.texts.length!==t)&&zw(),e.texts}function Vw(){return{async redact(e){let t;try{t=await fetch(Fe(`/api/secrets/redact-export`),{method:`POST`,headers:Ie({"content-type":`application/json`}),body:JSON.stringify({texts:e})})}catch{zw()}t.ok||zw();let n;try{n=await t.json()}catch{zw()}return Bw(n,e.length)}}}function Hw(){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{zw()}return typeof t==`object`&&t&&Rw(t)&&zw(),Bw(t,e.length)}}}function Uw(){return{async redact(e){let t;try{t=await En(`secrets.redact-export`,{texts:e})}catch{zw()}return t??zw(),typeof t==`object`&&t&&Rw(t)&&zw(),Bw(t,e.length)}}}function Ww(){return{async redact(e){zw()}}}function Gw(){let e=Tn();return e===`connect`?Ww():e===`extension-direct`?Hw():e===`extension-delegate`?Uw():Vw()}const Kw=new Set([`scoop-notify`,`scoop-idle`,`scoop-wait`]);function qw(e){return`e${e}`}function Jw(e){let t=[];for(let n of e){let e=Zw(n),r=$w(n);if(e===`assistant`){let e=t.length,i=qw(e);t.push({id:i,seq:e,kind:`assistant`,timestamp:r,text:nT(n),message:n,model:tT(n)});for(let e of rT(n)){let n=t.length;t.push({id:qw(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:qw(i),seq:i,kind:`tool-result`,timestamp:r,text:nT(n),message:n,toolCallId:e.toolCallId??``,isError:e.isError});continue}let i=nT(n),a=e===`user`?Xw(i):null,o=t.length,s=qw(o);a===null?t.push({id:s,seq:o,kind:`user`,timestamp:r,text:i,message:n}):Kw.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 Yw(e){let t=[];for(let n of e){let e=t.length,r=qw(e),i=eT(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:qw(n),seq:n,kind:`tool-call`,timestamp:i,toolCallId:e.id,name:e.name,assistantEntryId:r})}continue}let o=n.source===`lick`&&n.channel&&wy(n.channel)?n.channel:Xw(a);o===null?t.push({id:r,seq:e,kind:`user`,timestamp:i,text:a,chat:n}):Kw.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 Xw(e){for(let t of Ky(e)){let e=(t.sender?qy(t.sender):null)??Jy(t.body);if(e)return e}return null}function Zw(e){return e.role??``}function Qw(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 $w(e){return Qw(e.timestamp)}function eT(e){return Qw(e.timestamp)}function tT(e){let t=e.model;return typeof t==`string`?t:void 0}function nT(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 rT(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 iT(e){let t=e.markers?.some(e=>e.kind===`error`)??!1,n=(e.projectionPrefix?.length??0)>0;return t||n?2:1}function aT(e){return e!==null&&e.version<=2}const oT=_(`work-unit-conversation`);var sT=class extends Error{};const cT=`conversations`;async function lT(e){let t=e.now??(()=>Date.now()),n=await dT(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=Ir(s);if(i.has(c)){r.alreadyDone++;continue}try{let n=await uT(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}],oT.warn(`Skipping a unit whose conversation could not be migrated`,{key:c,folder:s.folder,error:o}),i instanceof sT){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),oT.info(`Canonical conversation migration complete`,{...r}),r}async function uT(e,t,n,r){let i=await e.store.read(n);if(i.status===`ok`)return`already`;if(i.status===`incompatible`)return oT.info(`Leaving a newer-schema conversation record untouched`,{key:n,version:i.version}),`already`;if(i.status===`error`)throw new sT(`canonical record unreadable: ${i.reason}`);let a=Lr(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:Jw(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:Yw(s.messages),createdAt:s.createdAt??r,updatedAt:r,migratedFrom:`browser-coding-agent`};return await e.store.save(t),`migrated`}return`empty`}async function dT(e,t){let n=await e.getMigrationState(cT);return n&&n.version===1?{...n,completedKeys:Array.isArray(n.completedKeys)?n.completedKeys:[],skipped:Array.isArray(n.skipped)?n.skipped:[]}:{id:cT,version:1,completedKeys:[],skipped:[],done:!1,startedAt:t,updatedAt:t}}var fT=e({applyAttachmentOverlays:()=>gT,interleaveMarkers:()=>_T,toAgentMessages:()=>mT,toChatMessages:()=>hT});const pT=new Set([`summarized`,`fallback`]);function mT(e){if(!aT(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 hT(e,t={}){if(!aT(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 _T(t,e.markers)}let n=e.projectionPrefix??[],r=mT(e);if(r.length===0)return _T([...n],e.markers);let{agentMessagesToChatMessages:i}=await Promise.resolve().then(()=>My),a=gT(i(r,t),e.attachments);return _T([...n,...a],e.markers)}function gT(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 _T(e,t){let n=(t??[]).filter(e=>e.kind!==`compaction`||pT.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=vT(t);for(;a<r.length&&r[a].timestamp<=e;)i.push(yT(r[a++]));i.push(t)}for(;a<r.length;)i.push(yT(r[a++]));return i}function vT(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 yT(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 bT(e){return{id:e.legacyKeys.chatSessionId,messages:await hT(e),createdAt:e.createdAt,updatedAt:e.updatedAt}}function xT(e){return{id:e.workUnitId,messages:mT(e),config:{},createdAt:e.createdAt,updatedAt:e.updatedAt}}var ST=class{store;constructor(e){this.store=e}async loadAgentSessions(){return(await this.latestPerUnit()).map(xT)}async loadChatSessions(){return Promise.all((await this.latestPerUnit()).map(bT))}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(yr({parentJid:null,folder:e}).root);return t?bT(t):null}async load(e){return e.startsWith(`session-`)?this.loadRootChatSession(e.slice(8)):null}};const CT=_(`work-unit-conversation`),wT=`conversations`,TT=`migrations`;var ET=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 NT((await this.getDb()).transaction(wT,`readonly`).objectStore(wT).get(e));return t?aT(t)?Array.isArray(t.entries)?{status:`ok`,record:t}:(CT.warn(`Conversation record has no entry list`,{key:e}),{status:`malformed`,reason:`entries is not a list`}):(CT.warn(`Ignoring conversation record from a newer schema`,{key:e,version:t.version}),{status:`incompatible`,version:t.version}):{status:`absent`}}catch(t){return CT.warn(`Conversation record read failed`,{key:e,error:FT(t)}),{status:`error`,reason:FT(t)}}}async save(e){let t=e.version>2?e.version:iT(e),n={...e,version:t},r=(await this.getDb()).transaction(wT,`readwrite`);return r.objectStore(wT).put(n),await PT(r),n}delete(e){return this.serialize(e,async()=>{try{let t=(await this.getDb()).transaction(wT,`readwrite`);t.objectStore(wT).delete(e),await PT(t)}catch(t){CT.warn(`Conversation record delete failed`,{key:e,error:FT(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`){CT.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){CT.warn(`Conversation rekey failed`,{fromKey:e,toKey:t.key,error:FT(n)})}}async loadAll(){try{return(await NT((await this.getDb()).transaction(wT,`readonly`).objectStore(wT).getAll())).filter(e=>aT(e)&&Array.isArray(e.entries))}catch(e){return CT.warn(`Conversation record listing failed`,{error:FT(e)}),[]}}async loadLatestInWorkspace(e){try{let t=`${e}::`,n=await NT((await this.getDb()).transaction(wT,`readonly`).objectStore(wT).getAll(IDBKeyRange.bound(t,`${t}\uffff`))),r=null;for(let e of n)!aT(e)||!Array.isArray(e.entries)||(!r||e.updatedAt>r.updatedAt)&&(r=e);return r}catch(t){return CT.warn(`Conversation workspace lookup failed`,{workspaceId:e,error:FT(t)}),null}}async listKeys(){try{return(await NT((await this.getDb()).transaction(wT,`readonly`).objectStore(wT).getAllKeys())).map(String)}catch(e){return CT.warn(`Conversation key listing failed`,{error:FT(e)}),[]}}async syncAgentMessages(e,t,n={}){let r=n.now??Date.now(),i=Jw(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=DT(a,t,e,`agent-history`,{createdAt:n.createdAt??r,now:r});return o?await this.save(o):a}catch(t){return CT.warn(`Conversation record write failed`,{key:e.key,error:FT(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?OT(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 CT.warn(`Conversation marker write failed`,{key:e,error:FT(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 NT((await this.getDb()).transaction(TT,`readonly`).objectStore(TT).get(e))??null}catch(t){return CT.warn(`Migration state read failed`,{id:e,error:FT(t)}),null}}async putMigrationState(e){try{let t=(await this.getDb()).transaction(TT,`readwrite`);t.objectStore(TT).put(e),await PT(t)}catch(t){CT.warn(`Migration state write failed`,{id:e.id,error:FT(t)})}}async clearAll(){let e=(await this.getDb()).transaction([wT,TT],`readwrite`);e.objectStore(wT).clear(),e.objectStore(TT).clear(),await PT(e)}getDb(){return this.dbPromise||(this.dbPromise=MT(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 DT(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??[],...kT(e)],updatedAt:i.now,legacyKeys:n.legacyKeys};let a=e.entries;if(t.length===a.length&&AT(a,t))return null;let o=t.length>a.length&&AT(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 OT(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 kT(e){let t=[];for(let n of e.entries)n.kind!==`tool-call`&&n.chat&&t.push(n.chat);return t}function AT(e,t){if(e.length>t.length)return!1;for(let n=0;n<e.length;n++)if(!jT(e[n],t[n]))return!1;return!0}function jT(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 MT(e){return new Promise((t,n)=>{let r=indexedDB.open(e,1);r.onupgradeneeded=()=>{let e=r.result;e.objectStoreNames.contains(wT)||e.createObjectStore(wT,{keyPath:`key`}),e.objectStoreNames.contains(TT)||e.createObjectStore(TT,{keyPath:`id`})},r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error)})}function NT(e){return new Promise((t,n)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>n(e.error)})}function PT(e){return new Promise((t,n)=>{e.oncomplete=()=>t(),e.onerror=()=>n(e.error),e.onabort=()=>n(e.error)})}function FT(e){return e instanceof Error?e.message:String(e)}var IT=e({CONE_MEMORY_PATH:()=>zT,MEMORY_BASE_CHARS:()=>MEMORY_BASE_CHARS,MEMORY_OVERSHOOT_RATIO:()=>RT,MEMORY_PER_LOG_CHARS:()=>MEMORY_PER_LOG_CHARS,SESSIONS_INDEX_PATH:()=>BT,applyConeMemoryBudget:()=>GT,readSessionCount:()=>UT,restructureConeMemory:()=>WT,splitConeMemory:()=>HT});const LT=_(`cone-memory-budget`),RT=1.25,zT=hr.memoryPath,BT=`/sessions/index.json`,VT=/^## Auto-extracted/m;function HT(e){let t=VT.exec(e);if(!t)return{header:e,autoExtracted:``};let n=t.index;return{header:e.slice(0,n),autoExtracted:e.slice(n)}}async function UT(e){try{let t=await e.readFile(BT,{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 WT(e){let{header:t,autoExtracted:n}=HT(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,7 @@ Rules:
1002
1002
  - Do NOT add preamble, commentary, or any heading other than the single consolidated one.`}],timestamp:Date.now()},a=await vn(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 VT(e){if(!e.model||!e.apiKey)return{restructured:!1,reason:`no-llm`};let t=e.memoryPath??FT,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 zT(e.vfs),i=mi(r),a=i*PT;if(n.length<=a)return{restructured:!1,reason:`under-threshold`};NT.info(`Cone memory over threshold — restructuring`,{size:n.length,budget:i,threshold:a,sessionCount:r});try{let r=await BT({currentContent:n,budget:i,model:e.model,apiKey:e.apiKey,headers:e.headers,signal:e.signal});return await e.vfs.writeFile(t,r),NT.info(`Cone memory restructured`,{before:n.length,after:r.length}),{restructured:!0}}catch(e){return NT.warn(`Cone memory restructure failed — leaving appended content in place`,{error:e instanceof Error?e.message:String(e)}),{restructured:!1,reason:`error`}}}const HT=`.skill`,UT=`/workspace/skills`,WT=`SKILL.md`,GT=_(`skills-discovery`),KT=[`native`,`agents`,`claude`,`marketplace`,`plugin`],qT=new Map([[`.agents`,`agents`],[`.claude`,`claude`]]),JT=new Set([`.git`,`.slicc`,`node_modules`]),YT=2e4,XT=[`mkdir`,`mount`,`rename`,`rm`,`unmount`,`writeFile`],ZT=new WeakMap,QT=new WeakSet,$T=new WeakMap,eE=new WeakMap,tE=new Set([`.agents`,`.claude`,`.claude-plugin`]),nE=new Set([`mount`,`rename`,`rm`,`unmount`]);async function rE(e,t=UT){let n=await fE(e,t),r=await lE(e),i=await iE(e);return[...KT.flatMap(e=>(e===`native`?n:e===`plugin`?i:r.filter(t=>t.source===e)).sort((e,t)=>e.path.localeCompare(t.path)))]}async function iE(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 yE(e,t);for(let r of i){if(r.type!==`directory`)continue;let i=`${t}/${r.name}`,a=`${i}/${WT}`;await vE(e,a)&&n.push({source:`plugin`,sourceRoot:t,path:i,skillFilePath:a})}}return n}function aE(e){return e.map(e=>({...e}))}function oE(e){ZT.delete(e),eE.delete(e),$T.set(e,($T.get(e)??0)+1)}function sE(e){let t=e.split(`/`);for(let e of t)if(tE.has(e))return!0;return t[t.length-1]===`SKILL.md`||t.includes(`skills`)}function cE(e,t){if(nE.has(e))return!0;let n=t[0];return typeof n==`string`&&sE(n)}async function lE(e){if(uE(e))return aE(await gE(e));_E(e);let t=e,n=ZT.get(t);if(n)return aE(n);let r=$T.get(t)??0,i=eE.get(t);if(i&&i.generation===r)return aE(await i.promise);let a=gE(e).then(e=>(($T.get(t)??0)===r&&ZT.set(t,e),e)),o;return o=a.finally(()=>{eE.get(t)?.promise===o&&eE.delete(t)}),eE.set(t,{generation:r,promise:o}),aE(await o)}function uE(e){try{return e[li]===!0}catch{return!1}}function dE(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 fE(e,t){let n=await yE(e,t),r=[];for(let i of n){if(i.type!==`directory`)continue;let n=`${t}/${i.name}`,a=`${n}/${WT}`;await vE(e,a)&&r.push({source:`native`,sourceRoot:t,path:n,skillFilePath:a})}return r}async function pE(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 mE(e,t,n){let r=await pE(e,`${t}/marketplace.json`),i=[];for(let t of r){let r=`${t}/skills`,a=await yE(e,r);for(let t of a){if(t.type!==`directory`)continue;let a=`${r}/${t.name}`,o=`${a}/${WT}`;!await vE(e,o)||n.has(a)||(n.add(a),i.push({source:`marketplace`,sourceRoot:r,path:a,skillFilePath:o}))}}return i}async function hE(e,t,n,r){let i=`${t}/skills`,a=await yE(e,i),o=[];for(let t of a){if(t.type!==`directory`)continue;let a=`${i}/${t.name}`,s=`${a}/${WT}`;!await vE(e,s)||r.has(a)||(r.add(a),o.push({source:n,sourceRoot:i,path:a,skillFilePath:s}))}return o}async function gE(e){let t=[],n=new Set,r=new Set([`/`]),i=[{path:`/`,depth:0}];for(let a=0;a<i.length;a+=1){if(a>=YT){GT.warn(`skills discovery: directory budget exhausted; walk truncated`,{budget:YT});break}let{path:o,depth:s}=i[a],c=await yE(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=qT.get(a.name);if(l){let r=await hE(e,c,l,n);t.push(...r)}if(a.name===`.claude-plugin`){let r=await mE(e,c,n);t.push(...r);continue}!JT.has(a.name)&&s<24&&!r.has(c)&&(r.add(c),i.push({path:c,depth:s+1}))}}return t}function _E(e){if(uE(e))return;let t=e;if(QT.has(t))return;QT.add(t);let n=e;for(let r of XT){let i=n[r];if(typeof i==`function`)try{n[r]=async(...n)=>{let a=await i.apply(e,n);return cE(r,n)&&oE(t),a}}catch{}}}async function vE(e,t){try{return await e.stat(t),!0}catch{return!1}}async function yE(e,t){try{return[...await e.readDir(t)].sort((e,t)=>e.name.localeCompare(t.name))}catch{return[]}}async function bE(e,t=`/workspace/skills`){let n=await rE(e,t),r=[];for(let t of n){let n=t.path.split(`/`).pop()??t.path,i=``;if(t.skillFilePath)try{i=CE(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}=dE(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 xE(e,t,n=`/workspace/skills`){return(await bE(e,n)).find(e=>e.name===t)||null}async function SE(e,t,n=`/workspace/skills`){let r=await xE(e,t,n);if(!r?.skillFilePath)return null;try{return await e.readTextFile(r.skillFilePath)}catch{return null}}function CE(e){let t=e.replace(/^\uFEFF/,``).replace(/\r\n?/g,`
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 wE=/^[A-Za-z0-9][A-Za-z0-9._-]*$/;function TE(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 EE=class extends Error{};function DE(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 OE(e){if(!wE.test(e))throw Error(`Invalid skill: skill name "${e}" must be a simple directory name.`)}function kE(e){let t=[];for(let[n,r]of Object.entries(e)){let e=DE(n);e&&(TE(e)||t.push({originalPath:n,path:e,bytes:r}))}return t}function AE(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 ${WT}.`);if(t.length>1)throw Error(`Skill archive contains multiple ${WT} files.`);return t[0]}function jE(e){let t=0,n=0;return yi(e,{filter(e){if(t++,t>1e3)throw new EE(`Skill archives may contain at most 1000 entries.`);if(n+=e.originalSize,n>52428800)throw new EE(`Skill archives must expand to 50 MB or smaller after extraction.`);return!0}})}function ME(e){let t=`${Date.now()}-${Math.random().toString(16).slice(2,8)}`;return Pn(UT,`.${e}.tmp-${t}`)}function NE(e,t){return t===`SKILL.md`?e.replace(/\.skill$/i,``):t.slice(0,-9).split(`/`).pop()??``}function PE(e){if(!e.name.toLowerCase().endsWith(`.skill`))throw Error(`Only ${HT} archives can be installed with drag and drop.`);if(e.size>52428800)throw Error(`Skill archives must be 50 MB or smaller.`)}async function FE(e){try{return jE(new Uint8Array(await e.arrayBuffer()))}catch(e){if(e instanceof EE)throw e;let t=e instanceof Error?e.message:String(e);throw Error(`Invalid .skill archive: ${t}`)}}function IE(e){return e.path===`SKILL.md`?``:e.path.slice(0,-9)}function LE(e,t){return t&&(e===t||!e.startsWith(`${t}/`))?null:(t?e.slice(t.length+1):e)||null}async function RE(e,t,n,r){let i=Pn(t,n),{dir:a}=Mn(i);a!==`/`&&await e.mkdir(a,{recursive:!0}),await e.writeFile(i,r)}async function zE(e,t,n,r){let i=0;for(let a of t){let t=LE(a.path,n);t&&(await RE(e,r,t,a.bytes),i++)}return i}async function BE(e,t){await e.exists(t)&&await e.rm(t,{recursive:!0})}async function VE(e,t){let n=Pn(UT,t);if(await e.exists(n))throw Error(`Skill "${t}" already exists at ${n}.`);return n}async function HE(e,t){PE(t);let n=kE(await FE(t)),r=AE(n),i=NE(t.name,r.path);OE(i);let a=await VE(e,i),o=ME(i),s=IE(r);await e.mkdir(o,{recursive:!0});try{let t=await zE(e,n,s,o);return await e.rename(o,a),{skillName:i,destinationPath:a,fileCount:t}}catch(t){throw await BE(e,o),t}}var UE=e({MAX_SKILL_ARCHIVE_SIZE_BYTES:()=>52428800,SKILLS_DIR:()=>`skills`,SKILL_ARCHIVE_EXTENSION:()=>HT,SKILL_FILE:()=>WT,WORKSPACE_SKILLS_PATH:()=>UT,discoverSkillCandidates:()=>rE,discoverSkills:()=>bE,getSkillInfo:()=>xE,installSkillFromDrop:()=>HE,readSkillInstructions:()=>SE,resolveSkillNameCollisions:()=>dE});const WE=_(`skills`),GE=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-dd0KSoC6.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-BKKGj_a4.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/package-execution/SKILL.md":()=>import(`./SKILL-JUdJZkmv.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/playwright-cli/SKILL.md":()=>import(`./SKILL-DLrI4y2g.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/skill-authoring/SKILL.md":()=>import(`./SKILL-DfQfFV0B.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-yQwWZJ0k.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)}),KE=Object.assign({"/packages/vfs-root/shared/sounds/chime.mp3":()=>import(`./chime-CPc6qSh5.js`).then(e=>e.default)});function qE(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 JE={};function YE(){let e={};for(let[t,n]of Object.entries(GE))e[t]=n;for(let[t,n]of Object.entries(KE))e[t]=async()=>qE(await n());for(let[t,n]of Object.entries(JE)){let r=t.replace(`/packages/dev-tools/vfs-dev-skills/`,`/packages/vfs-root/workspace/skills/`);e[r]=()=>Promise.resolve(n)}return e}function XE(e){let t=new Map;for(let n of e){if(t.has(n.metadata.name)){WE.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 ZE(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 QE=new WeakMap;function $E(e,t,n,r){let i=e.get(t);i||(i=new Map,e.set(t,i));let a=i.get(n);if(a!=null)return a;let o;return o=r().finally(()=>{i.get(n)===o&&i.delete(n)}),i.set(n,o),o}async function eD(e,t){let n=await tD(e,t),r=await nD(e,t),i=n.filter(e=>e.source===`native`),a=n.filter(e=>e.source!==`native`),o=XE([...i,...r,...a]);return WE.info(`Skills loaded`,{count:o.length,dir:t}),o}async function tD(e,t){let n=await bE(e,t),r=[];for(let t of n)if(t.skillFilePath)try{let{metadata:n,body:i}=ZE(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}),WE.debug(`Loaded discovered skill`,{name:a,path:t.skillFilePath,source:t.source})}catch{WE.debug(`Failed to load discovered skill`,{name:t.name,path:t.skillFilePath})}return r}async function nD(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}=ZE(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}),WE.debug(`Loaded standalone skill`,{name:s,path:r})}catch{}}}catch{WE.debug(`Standalone skills directory not found`,{dir:t})}return n}function rD(e){return e.length===0?``:`
1005
+ `}${o}\n`}async function GT(e){if(!e.model||!e.apiKey)return{restructured:!1,reason:`no-llm`};let t=e.memoryPath??zT,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 UT(e.vfs),i=mi(r),a=i*RT;if(n.length<=a)return{restructured:!1,reason:`under-threshold`};LT.info(`Cone memory over threshold — restructuring`,{size:n.length,budget:i,threshold:a,sessionCount:r});try{let r=await WT({currentContent:n,budget:i,model:e.model,apiKey:e.apiKey,headers:e.headers,signal:e.signal});return await e.vfs.writeFile(t,r),LT.info(`Cone memory restructured`,{before:n.length,after:r.length}),{restructured:!0}}catch(e){return LT.warn(`Cone memory restructure failed — leaving appended content in place`,{error:e instanceof Error?e.message:String(e)}),{restructured:!1,reason:`error`}}}const KT=`.skill`,qT=`/workspace/skills`,JT=`SKILL.md`,YT=_(`skills-discovery`),XT=[`native`,`agents`,`claude`,`marketplace`,`plugin`],ZT=new Map([[`.agents`,`agents`],[`.claude`,`claude`]]),QT=new Set([`.git`,`.slicc`,`node_modules`]),$T=2e4,eE=[`mkdir`,`mount`,`rename`,`rm`,`unmount`,`writeFile`],tE=new WeakMap,nE=new WeakSet,rE=new WeakMap,iE=new WeakMap,aE=new Set([`.agents`,`.claude`,`.claude-plugin`]),oE=new Set([`mount`,`rename`,`rm`,`unmount`]);async function sE(e,t=qT){let n=await gE(e,t),r=await pE(e),i=await cE(e);return[...XT.flatMap(e=>(e===`native`?n:e===`plugin`?i:r.filter(t=>t.source===e)).sort((e,t)=>e.path.localeCompare(t.path)))]}async function cE(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 CE(e,t);for(let r of i){if(r.type!==`directory`)continue;let i=`${t}/${r.name}`,a=`${i}/${JT}`;await SE(e,a)&&n.push({source:`plugin`,sourceRoot:t,path:i,skillFilePath:a})}}return n}function lE(e){return e.map(e=>({...e}))}function uE(e){tE.delete(e),iE.delete(e),rE.set(e,(rE.get(e)??0)+1)}function dE(e){let t=e.split(`/`);for(let e of t)if(aE.has(e))return!0;return t[t.length-1]===`SKILL.md`||t.includes(`skills`)}function fE(e,t){if(oE.has(e))return!0;let n=t[0];return typeof n==`string`&&dE(n)}async function pE(e){if(mE(e))return lE(await bE(e));xE(e);let t=e,n=tE.get(t);if(n)return lE(n);let r=rE.get(t)??0,i=iE.get(t);if(i&&i.generation===r)return lE(await i.promise);let a=bE(e).then(e=>((rE.get(t)??0)===r&&tE.set(t,e),e)),o;return o=a.finally(()=>{iE.get(t)?.promise===o&&iE.delete(t)}),iE.set(t,{generation:r,promise:o}),lE(await o)}function mE(e){try{return e[li]===!0}catch{return!1}}function hE(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 gE(e,t){let n=await CE(e,t),r=[];for(let i of n){if(i.type!==`directory`)continue;let n=`${t}/${i.name}`,a=`${n}/${JT}`;await SE(e,a)&&r.push({source:`native`,sourceRoot:t,path:n,skillFilePath:a})}return r}async function _E(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 vE(e,t,n){let r=await _E(e,`${t}/marketplace.json`),i=[];for(let t of r){let r=`${t}/skills`,a=await CE(e,r);for(let t of a){if(t.type!==`directory`)continue;let a=`${r}/${t.name}`,o=`${a}/${JT}`;!await SE(e,o)||n.has(a)||(n.add(a),i.push({source:`marketplace`,sourceRoot:r,path:a,skillFilePath:o}))}}return i}async function yE(e,t,n,r){let i=`${t}/skills`,a=await CE(e,i),o=[];for(let t of a){if(t.type!==`directory`)continue;let a=`${i}/${t.name}`,s=`${a}/${JT}`;!await SE(e,s)||r.has(a)||(r.add(a),o.push({source:n,sourceRoot:i,path:a,skillFilePath:s}))}return o}async function bE(e){let t=[],n=new Set,r=new Set([`/`]),i=[{path:`/`,depth:0}];for(let a=0;a<i.length;a+=1){if(a>=$T){YT.warn(`skills discovery: directory budget exhausted; walk truncated`,{budget:$T});break}let{path:o,depth:s}=i[a],c=await CE(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=ZT.get(a.name);if(l){let r=await yE(e,c,l,n);t.push(...r)}if(a.name===`.claude-plugin`){let r=await vE(e,c,n);t.push(...r);continue}!QT.has(a.name)&&s<24&&!r.has(c)&&(r.add(c),i.push({path:c,depth:s+1}))}}return t}function xE(e){if(mE(e))return;let t=e;if(nE.has(t))return;nE.add(t);let n=e;for(let r of eE){let i=n[r];if(typeof i==`function`)try{n[r]=async(...n)=>{let a=await i.apply(e,n);return fE(r,n)&&uE(t),a}}catch{}}}async function SE(e,t){try{return await e.stat(t),!0}catch{return!1}}async function CE(e,t){try{return[...await e.readDir(t)].sort((e,t)=>e.name.localeCompare(t.name))}catch{return[]}}async function wE(e,t=`/workspace/skills`){let n=await sE(e,t),r=[];for(let t of n){let n=t.path.split(`/`).pop()??t.path,i=``;if(t.skillFilePath)try{let n=await e.readTextFile(t.skillFilePath);i=Si(n)??``}catch{}r.push({name:n,source:t.source,sourceRoot:t.sourceRoot,path:t.path,skillFilePath:t.skillFilePath,description:i})}let{winners:i,collisions:a}=hE(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 TE(e,t,n=`/workspace/skills`){return(await wE(e,n)).find(e=>e.name===t)||null}async function EE(e,t,n=`/workspace/skills`){let r=await TE(e,t,n);if(!r?.skillFilePath)return null;try{return await e.readTextFile(r.skillFilePath)}catch{return null}}const DE=/^[A-Za-z0-9][A-Za-z0-9._-]*$/;function OE(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 kE=class extends Error{};function AE(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 jE(e){if(!DE.test(e))throw Error(`Invalid skill: skill name "${e}" must be a simple directory name.`)}function ME(e){let t=[];for(let[n,r]of Object.entries(e)){let e=AE(n);e&&(OE(e)||t.push({originalPath:n,path:e,bytes:r}))}return t}function NE(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 ${JT}.`);if(t.length>1)throw Error(`Skill archive contains multiple ${JT} files.`);return t[0]}function PE(e){let t=0,n=0;return Ci(e,{filter(e){if(t++,t>1e3)throw new kE(`Skill archives may contain at most 1000 entries.`);if(n+=e.originalSize,n>52428800)throw new kE(`Skill archives must expand to 50 MB or smaller after extraction.`);return!0}})}function FE(e){let t=`${Date.now()}-${Math.random().toString(16).slice(2,8)}`;return Pn(qT,`.${e}.tmp-${t}`)}function IE(e,t){return t===`SKILL.md`?e.replace(/\.skill$/i,``):t.slice(0,-9).split(`/`).pop()??``}function LE(e){if(!e.name.toLowerCase().endsWith(`.skill`))throw Error(`Only ${KT} archives can be installed with drag and drop.`);if(e.size>52428800)throw Error(`Skill archives must be 50 MB or smaller.`)}async function RE(e){try{return PE(new Uint8Array(await e.arrayBuffer()))}catch(e){if(e instanceof kE)throw e;let t=e instanceof Error?e.message:String(e);throw Error(`Invalid .skill archive: ${t}`)}}function zE(e){return e.path===`SKILL.md`?``:e.path.slice(0,-9)}function BE(e,t){return t&&(e===t||!e.startsWith(`${t}/`))?null:(t?e.slice(t.length+1):e)||null}async function VE(e,t,n,r){let i=Pn(t,n),{dir:a}=Mn(i);a!==`/`&&await e.mkdir(a,{recursive:!0}),await e.writeFile(i,r)}async function HE(e,t,n,r){let i=0;for(let a of t){let t=BE(a.path,n);t&&(await VE(e,r,t,a.bytes),i++)}return i}async function UE(e,t){await e.exists(t)&&await e.rm(t,{recursive:!0})}async function WE(e,t){let n=Pn(qT,t);if(await e.exists(n))throw Error(`Skill "${t}" already exists at ${n}.`);return n}async function GE(e,t){LE(t);let n=ME(await RE(t)),r=NE(n),i=IE(t.name,r.path);jE(i);let a=await WE(e,i),o=FE(i),s=zE(r);await e.mkdir(o,{recursive:!0});try{let t=await HE(e,n,s,o);return await e.rename(o,a),{skillName:i,destinationPath:a,fileCount:t}}catch(t){throw await UE(e,o),t}}var KE=e({MAX_SKILL_ARCHIVE_SIZE_BYTES:()=>52428800,SKILLS_DIR:()=>`skills`,SKILL_ARCHIVE_EXTENSION:()=>KT,SKILL_FILE:()=>JT,WORKSPACE_SKILLS_PATH:()=>qT,discoverSkillCandidates:()=>sE,discoverSkills:()=>wE,extractSkillDescription:()=>Si,getSkillInfo:()=>TE,installSkillFromDrop:()=>GE,parseSkillFrontmatter:()=>bi,parseSkillFrontmatterFields:()=>xi,readSkillInstructions:()=>EE,resolveSkillNameCollisions:()=>hE,splitSkillDocument:()=>yi});const qE=_(`skills`),JE=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-dd0KSoC6.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-BKKGj_a4.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/package-execution/SKILL.md":()=>import(`./SKILL-JUdJZkmv.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/playwright-cli/SKILL.md":()=>import(`./SKILL-DLrI4y2g.js`).then(e=>e.default),"/packages/vfs-root/workspace/skills/skill-authoring/SKILL.md":()=>import(`./SKILL-DfQfFV0B.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-yQwWZJ0k.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)}),YE=Object.assign({"/packages/vfs-root/shared/sounds/chime.mp3":()=>import(`./chime-CPc6qSh5.js`).then(e=>e.default)});function XE(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 ZE={};function QE(){let e={};for(let[t,n]of Object.entries(JE))e[t]=n;for(let[t,n]of Object.entries(YE))e[t]=async()=>XE(await n());for(let[t,n]of Object.entries(ZE)){let r=t.replace(`/packages/dev-tools/vfs-dev-skills/`,`/packages/vfs-root/workspace/skills/`);e[r]=()=>Promise.resolve(n)}return e}function $E(e){let t=new Map;for(let n of e){if(t.has(n.metadata.name)){qE.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 eD(e){return bi(e)}const tD=new WeakMap;function nD(e,t,n,r){let i=e.get(t);i||(i=new Map,e.set(t,i));let a=i.get(n);if(a!=null)return a;let o;return o=r().finally(()=>{i.get(n)===o&&i.delete(n)}),i.set(n,o),o}async function rD(e,t){let n=await iD(e,t),r=await aD(e,t),i=n.filter(e=>e.source===`native`),a=n.filter(e=>e.source!==`native`),o=$E([...i,...r,...a]);return qE.info(`Skills loaded`,{count:o.length,dir:t}),o}async function iD(e,t){let n=await wE(e,t),r=[];for(let t of n)if(t.skillFilePath)try{let{metadata:n,body:i}=eD(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}),qE.debug(`Loaded discovered skill`,{name:a,path:t.skillFilePath,source:t.source})}catch{qE.debug(`Failed to load discovered skill`,{name:t.name,path:t.skillFilePath})}return r}async function aD(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}=eD(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}),qE.debug(`Loaded standalone skill`,{name:s,path:r})}catch{}}}catch{qE.debug(`Standalone skills directory not found`,{dir:t})}return n}function oD(e){return e.length===0?``:`
1009
1006
  ---
1010
1007
  AVAILABLE SKILLS
1011
1008
 
@@ -1014,9 +1011,9 @@ The following skills are available. To use a skill, first read its full instruct
1014
1011
 
1015
1012
  ${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
1013
  `)}
1017
- ---`}function iD(e,t=`/workspace/skills`){let n=Oe(),r=`${t}\0${n?`skip-skills`:`seed-skills`}`;return $E(QE,e,r,()=>aD(e,t,n))}async function aD(e,t,n){let r=YE();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()),WE.info(`Created default file`,{path:c})}}}const oD=new Set([`/shared/sprinkles/welcome/welcome.shtml`,`/shared/sprinkles/welcome/connect-llm.shtml`,`/shared/sprinkles/suggestions/suggestions.shtml`]);async function sD(e){let t=YE();for(let[n,r]of Object.entries(t)){let t=n.slice(18);if(!t.startsWith(`/shared/`))continue;let i=oD.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()),WE.info(i?`Refreshed bundled shared file`:`Created default shared file`,{path:t})}}const cD=_(`cone-memory-store`);function lD(e){let t=e.lastIndexOf(`/`);return t<=0?`/`:e.slice(0,t)}var uD=class{globalMemoryCache=``;memoryWriteChain=Promise.resolve();deps;constructor(e){this.deps=e}async ensureGlobalMemory(){let e=this.deps.getSharedFs();if(e){await sD(e);try{let t=await e.readFile(`/shared/CLAUDE.md`,{encoding:`utf-8`});this.globalMemoryCache=typeof t==`string`?t:new TextDecoder().decode(t)}catch{cD.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,cD.info(`Global memory updated`))}async appendConeMemory(e,t){if(!this.deps.getSharedFs())return;let n=e.trim();if(!n)return;let r=t.memoryPath??FT,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(lD(r),{recursive:!0})}let a=`## Auto-extracted (${new Date().toISOString().slice(0,10)}, ${t.source})`,o=`${i.length===0||i.endsWith(`
1014
+ ---`}function sD(e,t=`/workspace/skills`){let n=Oe(),r=`${t}\0${n?`skip-skills`:`seed-skills`}`;return nD(tD,e,r,()=>cD(e,t,n))}async function cD(e,t,n){let r=QE();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()),qE.info(`Created default file`,{path:c})}}}const lD=new Set([`/shared/sprinkles/welcome/welcome.shtml`,`/shared/sprinkles/welcome/connect-llm.shtml`,`/shared/sprinkles/suggestions/suggestions.shtml`]);async function uD(e){let t=QE();for(let[n,r]of Object.entries(t)){let t=n.slice(18);if(!t.startsWith(`/shared/`))continue;let i=lD.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()),qE.info(i?`Refreshed bundled shared file`:`Created default shared file`,{path:t})}}const dD=_(`cone-memory-store`);function fD(e){let t=e.lastIndexOf(`/`);return t<=0?`/`:e.slice(0,t)}var pD=class{globalMemoryCache=``;memoryWriteChain=Promise.resolve();deps;constructor(e){this.deps=e}async ensureGlobalMemory(){let e=this.deps.getSharedFs();if(e){await uD(e);try{let t=await e.readFile(`/shared/CLAUDE.md`,{encoding:`utf-8`});this.globalMemoryCache=typeof t==`string`?t:new TextDecoder().decode(t)}catch{dD.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,dD.info(`Global memory updated`))}async appendConeMemory(e,t){if(!this.deps.getSharedFs())return;let n=e.trim();if(!n)return;let r=t.memoryPath??zT,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(fD(r),{recursive:!0})}let a=`## Auto-extracted (${new Date().toISOString().slice(0,10)}, ${t.source})`,o=`${i.length===0||i.endsWith(`
1018
1015
  `)?``:`
1019
- `}\n${a}\n\n${n}\n`;await e.writeFile(r,i+o),cD.info(`Cone memory appended`,{source:t.source,length:n.length,path:r});try{await VT({vfs:e,memoryPath:r,model:t.model,apiKey:t.apiKey,headers:t.headers,signal:t.signal})}catch(e){cD.warn(`applyConeMemoryBudget threw — ignored`,{error:e instanceof Error?e.message:String(e)})}});this.memoryWriteChain=i.catch(e=>{cD.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(`
1016
+ `}\n${a}\n\n${n}\n`;await e.writeFile(r,i+o),dD.info(`Cone memory appended`,{source:t.source,length:n.length,path:r});try{await GT({vfs:e,memoryPath:r,model:t.model,apiKey:t.apiKey,headers:t.headers,signal:t.signal})}catch(e){dD.warn(`applyConeMemoryBudget threw — ignored`,{error:e instanceof Error?e.message:String(e)})}});this.memoryWriteChain=i.catch(e=>{dD.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
1017
  `),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
1018
  `).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
1019
  `)?``:`
@@ -1026,9 +1023,9 @@ ${e.map(e=>{let t=e.metadata.allowedTools?` Allowed tools: ${e.metadata.allowed
1026
1023
  `)+`
1027
1024
  `;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
1025
  `)+`
1029
- `;await e.writeFile(`/shared/CLAUDE.md`,d),this.globalMemoryCache=d,await this.writeMigrationSentinel(t),cD.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 dD(e){return Date.UTC(e.y,e.m-1,e.d,e.h,e.i,e.s)}function fD(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 pD(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(`-`)?_D(n.getUTCFullYear(),n.getUTCMonth()+1,n.getUTCDate(),n.getUTCHours(),n.getUTCMinutes(),n.getUTCSeconds(),`Etc/UTC`):_D(n.getFullYear(),n.getMonth()+1,n.getDate(),n.getHours(),n.getMinutes(),n.getSeconds(),t)}function mD(e,t,n){return hD(pD(e,t),n)}function hD(e,t){let n=new Date(dD(e)),r=gD(n,e.tz),i=dD(e)-dD(r),a=new Date(n.getTime()+i),o=gD(a,e.tz);if(fD(o,e)){let t=new Date(a.getTime()-36e5);return fD(gD(t,e.tz),e)?t:a}let s=new Date(a.getTime()+dD(e)-dD(o));if(fD(gD(s,e.tz),e))return s;if(t)throw Error(`Invalid date passed to fromTZ()`);return a.getTime()>s.getTime()?a:s}function gD(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 _D(e,t,n,r,i,a,o){return{y:e,m:t,d:n,h:r,i,s:a,tz:o}}var vD=[1,2,4,8,16],yD=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]|vD[t-1];else throw TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${t}, Type: ${typeof t}`)}},bD=[31,28,31,30,31,30,31,31,30,31,30,31],Y=[[`month`,`year`,0],[`day`,`month`,-1],[`hour`,`day`,0],[`minute`,`hour`,0],[`second`,`minute`,0]],xD=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():bD[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&&vD[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=gD(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>bD[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=mD(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(mD(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,Y[n][0],e,Y[n][2]);if(r>1){let i=n+1;for(;i<Y.length;)this[Y[i][0]]=-Y[i][2],i++;if(r===3){if(this[Y[n][1]]++,this[Y[n][0]]=-Y[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>=Y.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,Y[n][0],e,Y[n][2]);if(i>1){let a=n+1;for(;a<Y.length;){let t=Y[a][0],n=Y[a][2],r=this.getMaxPatternValue(t,e,n);this[t]=r,a++}if(i===3){if(this[Y[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():bD[t];this.day>n&&(this.day=n)}}this.apply();let i=Y[n][0],a=Y[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=Y[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,Y[2][2]),this.minute=this.getMaxPatternValue(`minute`,e,Y[3][2]),this.second=this.getMaxPatternValue(`second`,e,Y[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>=Y.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)):hD(_D(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<Y.length;n++){let r=Y[n][0],i=Y[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 SD(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 xD(e.startAt,e.timezone)),e.stopAt&&(e.stopAt=new xD(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 CD(e){return Object.prototype.toString.call(e)===`[object Function]`||typeof e==`function`||e instanceof Function}function wD(e){return CD(e)}function TD(e){typeof Deno<`u`&&typeof Deno.unrefTimer<`u`?Deno.unrefTimer(e):e&&typeof e.unref<`u`&&e.unref()}var ED=3e4,DD=[],OD=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(CD(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(CD(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=SD(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 yD(`* * * * *`,void 0,{mode:`auto`})},e&&(e instanceof Date||typeof e==`string`&&e.indexOf(`:`)>0)?this._states.once=new xD(e,this.getTz()):this._states.pattern=new yD(e,this.options.timezone,{mode:this.options.mode,alternativeWeekdays:this.options.alternativeWeekdays,sloppyRanges:this.options.sloppyRanges}),this.name){if(DD.find(e=>e.name===this.name))throw Error(`Cron: Tried to initialize new named job '`+this.name+`', but name already taken.`);DD.push(this)}return i!==void 0&&wD(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 xD(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 xD(e,this.getTz());t.ms=0;let n=new xD(this._states.once,this.getTz());return n.ms=0,t.getTime()===n.getTime()}let t=new xD(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 xD||e instanceof Date?t.getTime()-e.getTime():t.getTime()-new xD(e).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let e=DD.indexOf(this);e>=0&&DD.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>ED&&(t=ED),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(n),t),this._states.currentTimeout&&this.options.unref&&TD(this._states.currentTimeout),this)}async _trigger(e){this._states.blocking=!0,this._states.currentRun=new xD(void 0,this.getTz());try{if(this.options.catch)try{this.fn!==void 0&&await this.fn(this,this.options.context)}catch(e){if(CD(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 xD(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&&CD(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 xD(e,this.getTz()),this.options.startAt&&e&&e.getTime()<this.options.startAt.getTime()&&(e=this.options.startAt);let r=this._states.once||new xD(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 xD(e,this.getTz());this.options.stopAt&&t.getTime()>this.options.stopAt.getTime()&&(t=this.options.stopAt);let n=new xD(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 xD(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 xD(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 kD(e,t){try{return new OD(e.trim(),{domAndDow:!0}).nextRun(t)??null}catch{return null}}var AD=e({FORWARDABLE_TO_LEADER:()=>jD,LickManager:()=>PD,buildActiveLicksError:()=>LD,getLickManager:()=>zD,lickScoopMatches:()=>FD,lickTargetCandidates:()=>ID});const X=_(`lick-manager`),jD=new Set([`navigate`,`discovery`]);function MD(e){if(typeof e!=`object`||!e)return null;let t=e;return typeof t.verb!=`string`||typeof t.target!=`string`?null:re({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 ND(e){return!e.discoveryKind&&!e.discoveryUrl&&!e.discoveryOrigin?null:qi({origin:e.discoveryOrigin,kind:e.discoveryKind,url:e.discoveryUrl})}var PD=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 rS();let e=await oS();for(let t of e)this.webhooks.set(t.id,t);X.info(`Loaded webhooks`,{count:this.webhooks.size});let t=await uS();for(let e of t)this.crontasks.set(e.id,e);X.info(`Loaded crontasks`,{count:this.crontasks.size}),await this.reconcileOrphans(),this.cronInterval=setInterval(()=>this.runCronScheduler(),6e4),X.info(`Cron scheduler started`)}setUnitRosterProvider(e){this.unitRoster=e}resolveLickTarget(e){let t=this.unitRoster?.();return t?t.some(t=>FD(e,t.name,t.folder))?{status:`resolved`}:{status:`unresolved`,candidates:ID(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)){X.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 sS(e.id)}catch(t){X.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)){X.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 dS(e.id)}catch(t){X.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&&jD.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)||(X.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=MD(e.body),n=this.seenNavigateFingerprints,r=`navigate`;else if(e.type===`discovery`)t=ND(e),n=this.seenDiscoveryFingerprints,r=`discovery`;else return!1;return t===null?!1:n.has(t)?(X.debug(`Suppressing duplicate ${r} lick`,{fingerprint:t}),!0):(n.add(t),!1)}shouldSuppressDiscovery(e){return e.discoverySource===`live-navigation`?this.discoveryIgnore?.(e)?(X.debug(`Suppressing ignored llms.txt discovery`,{origin:e.discoveryOrigin}),!0):!1:(X.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 iS(i),X.info(`Webhook created`,{id:r,name:e,scoop:t}),i}async deleteWebhook(e){return this.webhooks.has(e)?(this.webhooks.delete(e),await sS(e),X.info(`Webhook deleted`,{id:e}),!0):await aS(e)!==null&&(await sS(e),X.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 X.warn(`Webhook not found`,{webhookId:e}),`unknown-webhook`;if(this.isOrphanedLick(r.scoop))return X.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 X.debug(`Webhook event dropped by filter`,{webhookId:e,name:r.name}),`filtered`;typeof t==`object`&&t&&(i=t)}catch(t){X.error(`Webhook filter error`,{webhookId:e,error:t instanceof Error?t.message:String(t)})}return X.info(`Webhook event received`,{webhookId:e,name:r.name,targetScoop:r.scoop}),this.dispatch(i),`delivered`}async createCronTask(e,t,n,r){let i=kD(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 cS(o),X.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 dS(e),X.info(`Cron task deleted`,{id:e}),!0):await lS(e)!==null&&(await dS(e),X.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=>FD(n.scoop,e,t)),cronTasks:Array.from(this.crontasks.values()).filter(n=>FD(n.scoop,e,t))}}async getLicksForScoopFromDb(e,t){let[n,r]=await Promise.all([oS(),uS()]);return{webhooks:n.filter(n=>FD(n.scoop,e,t)),cronTasks:r.filter(n=>FD(n.scoop,e,t))}}async deleteIfOrphanedCron(e){if(!this.isOrphanedLick(e.scoop))return!1;X.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 dS(e.id)}catch(t){X.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){X.debug(`Cron task skipped by filter`,{id:e.id,name:e.name}),e.nextRun=kD(e.cron,t)?.toISOString()??null,e.lastRun=t.toISOString(),await cS(e);return}typeof r==`object`&&r&&(n=r)}catch(t){X.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};X.info(`Cron task running`,{id:e.id,name:e.name}),this.dispatch(r),e.nextRun=kD(e.cron,t)?.toISOString()??null,e.lastRun=t.toISOString(),await cS(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 FD(e,t,n){return e?e===t||e===n||`${e}-scoop`===n:!1}function ID(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 LD(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 RD=null;function zD(){return RD||=new PD,RD}function BD(e){if(e.kind===`local`)return`mount ${Ub(e.path)}`;let t=e.profile==="default"?``:` --profile ${Ub(e.profile)}`;return`mount --source ${Ub(e.source)}${t} ${Ub(e.path)}`}function VD(){return`lick-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var HD=class{deps;entries=new Map;constructor(e){this.deps=e}hasHandoff(e){return this.entries.get(e)?.kind===`navigate-handoff`}registerNavigate(e){let t=VD(),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=VD(),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=VD(),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=XS(e.discoveryOrigin,e.discoveryUrl);if(!t)return null;let n=VD();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=BD(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 ZS(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=${Ub(e.from)} --to=${Ub(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)}`}}},UD=`# /etc/models — which models a scoop may be spawned with
1026
+ `;await e.writeFile(`/shared/CLAUDE.md`,d),this.globalMemoryCache=d,await this.writeMigrationSentinel(t),dD.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 mD(e){return Date.UTC(e.y,e.m-1,e.d,e.h,e.i,e.s)}function hD(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 gD(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(`-`)?bD(n.getUTCFullYear(),n.getUTCMonth()+1,n.getUTCDate(),n.getUTCHours(),n.getUTCMinutes(),n.getUTCSeconds(),`Etc/UTC`):bD(n.getFullYear(),n.getMonth()+1,n.getDate(),n.getHours(),n.getMinutes(),n.getSeconds(),t)}function _D(e,t,n){return vD(gD(e,t),n)}function vD(e,t){let n=new Date(mD(e)),r=yD(n,e.tz),i=mD(e)-mD(r),a=new Date(n.getTime()+i),o=yD(a,e.tz);if(hD(o,e)){let t=new Date(a.getTime()-36e5);return hD(yD(t,e.tz),e)?t:a}let s=new Date(a.getTime()+mD(e)-mD(o));if(hD(yD(s,e.tz),e))return s;if(t)throw Error(`Invalid date passed to fromTZ()`);return a.getTime()>s.getTime()?a:s}function yD(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 bD(e,t,n,r,i,a,o){return{y:e,m:t,d:n,h:r,i,s:a,tz:o}}var xD=[1,2,4,8,16],SD=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]|xD[t-1];else throw TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${t}, Type: ${typeof t}`)}},CD=[31,28,31,30,31,30,31,31,30,31,30,31],Y=[[`month`,`year`,0],[`day`,`month`,-1],[`hour`,`day`,0],[`minute`,`hour`,0],[`second`,`minute`,0]],wD=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():CD[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&&xD[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=yD(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>CD[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=_D(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(_D(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,Y[n][0],e,Y[n][2]);if(r>1){let i=n+1;for(;i<Y.length;)this[Y[i][0]]=-Y[i][2],i++;if(r===3){if(this[Y[n][1]]++,this[Y[n][0]]=-Y[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>=Y.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,Y[n][0],e,Y[n][2]);if(i>1){let a=n+1;for(;a<Y.length;){let t=Y[a][0],n=Y[a][2],r=this.getMaxPatternValue(t,e,n);this[t]=r,a++}if(i===3){if(this[Y[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():CD[t];this.day>n&&(this.day=n)}}this.apply();let i=Y[n][0],a=Y[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=Y[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,Y[2][2]),this.minute=this.getMaxPatternValue(`minute`,e,Y[3][2]),this.second=this.getMaxPatternValue(`second`,e,Y[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>=Y.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)):vD(bD(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<Y.length;n++){let r=Y[n][0],i=Y[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 TD(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 wD(e.startAt,e.timezone)),e.stopAt&&(e.stopAt=new wD(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 ED(e){return Object.prototype.toString.call(e)===`[object Function]`||typeof e==`function`||e instanceof Function}function DD(e){return ED(e)}function OD(e){typeof Deno<`u`&&typeof Deno.unrefTimer<`u`?Deno.unrefTimer(e):e&&typeof e.unref<`u`&&e.unref()}var kD=3e4,AD=[],jD=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(ED(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(ED(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=TD(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 SD(`* * * * *`,void 0,{mode:`auto`})},e&&(e instanceof Date||typeof e==`string`&&e.indexOf(`:`)>0)?this._states.once=new wD(e,this.getTz()):this._states.pattern=new SD(e,this.options.timezone,{mode:this.options.mode,alternativeWeekdays:this.options.alternativeWeekdays,sloppyRanges:this.options.sloppyRanges}),this.name){if(AD.find(e=>e.name===this.name))throw Error(`Cron: Tried to initialize new named job '`+this.name+`', but name already taken.`);AD.push(this)}return i!==void 0&&DD(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 wD(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 wD(e,this.getTz());t.ms=0;let n=new wD(this._states.once,this.getTz());return n.ms=0,t.getTime()===n.getTime()}let t=new wD(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 wD||e instanceof Date?t.getTime()-e.getTime():t.getTime()-new wD(e).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let e=AD.indexOf(this);e>=0&&AD.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>kD&&(t=kD),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(n),t),this._states.currentTimeout&&this.options.unref&&OD(this._states.currentTimeout),this)}async _trigger(e){this._states.blocking=!0,this._states.currentRun=new wD(void 0,this.getTz());try{if(this.options.catch)try{this.fn!==void 0&&await this.fn(this,this.options.context)}catch(e){if(ED(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 wD(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&&ED(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 wD(e,this.getTz()),this.options.startAt&&e&&e.getTime()<this.options.startAt.getTime()&&(e=this.options.startAt);let r=this._states.once||new wD(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 wD(e,this.getTz());this.options.stopAt&&t.getTime()>this.options.stopAt.getTime()&&(t=this.options.stopAt);let n=new wD(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 wD(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 wD(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 MD(e,t){try{return new jD(e.trim(),{domAndDow:!0}).nextRun(t)??null}catch{return null}}var ND=e({FORWARDABLE_TO_LEADER:()=>PD,LickManager:()=>LD,buildActiveLicksError:()=>BD,getLickManager:()=>HD,lickScoopMatches:()=>RD,lickTargetCandidates:()=>zD});const X=_(`lick-manager`),PD=new Set([`navigate`,`discovery`]);function FD(e){if(typeof e!=`object`||!e)return null;let t=e;return typeof t.verb!=`string`||typeof t.target!=`string`?null:re({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 ID(e){return!e.discoveryKind&&!e.discoveryUrl&&!e.discoveryOrigin?null:Zi({origin:e.discoveryOrigin,kind:e.discoveryKind,url:e.discoveryUrl})}var LD=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 sS();let e=await uS();for(let t of e)this.webhooks.set(t.id,t);X.info(`Loaded webhooks`,{count:this.webhooks.size});let t=await mS();for(let e of t)this.crontasks.set(e.id,e);X.info(`Loaded crontasks`,{count:this.crontasks.size}),await this.reconcileOrphans(),this.cronInterval=setInterval(()=>this.runCronScheduler(),6e4),X.info(`Cron scheduler started`)}setUnitRosterProvider(e){this.unitRoster=e}resolveLickTarget(e){let t=this.unitRoster?.();return t?t.some(t=>RD(e,t.name,t.folder))?{status:`resolved`}:{status:`unresolved`,candidates:zD(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)){X.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 dS(e.id)}catch(t){X.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)){X.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 hS(e.id)}catch(t){X.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&&PD.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)||(X.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=FD(e.body),n=this.seenNavigateFingerprints,r=`navigate`;else if(e.type===`discovery`)t=ID(e),n=this.seenDiscoveryFingerprints,r=`discovery`;else return!1;return t===null?!1:n.has(t)?(X.debug(`Suppressing duplicate ${r} lick`,{fingerprint:t}),!0):(n.add(t),!1)}shouldSuppressDiscovery(e){return e.discoverySource===`live-navigation`?this.discoveryIgnore?.(e)?(X.debug(`Suppressing ignored llms.txt discovery`,{origin:e.discoveryOrigin}),!0):!1:(X.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 cS(i),X.info(`Webhook created`,{id:r,name:e,scoop:t}),i}async deleteWebhook(e){return this.webhooks.has(e)?(this.webhooks.delete(e),await dS(e),X.info(`Webhook deleted`,{id:e}),!0):await lS(e)!==null&&(await dS(e),X.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 X.warn(`Webhook not found`,{webhookId:e}),`unknown-webhook`;if(this.isOrphanedLick(r.scoop))return X.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 X.debug(`Webhook event dropped by filter`,{webhookId:e,name:r.name}),`filtered`;typeof t==`object`&&t&&(i=t)}catch(t){X.error(`Webhook filter error`,{webhookId:e,error:t instanceof Error?t.message:String(t)})}return X.info(`Webhook event received`,{webhookId:e,name:r.name,targetScoop:r.scoop}),this.dispatch(i),`delivered`}async createCronTask(e,t,n,r){let i=MD(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 fS(o),X.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 hS(e),X.info(`Cron task deleted`,{id:e}),!0):await pS(e)!==null&&(await hS(e),X.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=>RD(n.scoop,e,t)),cronTasks:Array.from(this.crontasks.values()).filter(n=>RD(n.scoop,e,t))}}async getLicksForScoopFromDb(e,t){let[n,r]=await Promise.all([uS(),mS()]);return{webhooks:n.filter(n=>RD(n.scoop,e,t)),cronTasks:r.filter(n=>RD(n.scoop,e,t))}}async deleteIfOrphanedCron(e){if(!this.isOrphanedLick(e.scoop))return!1;X.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 hS(e.id)}catch(t){X.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){X.debug(`Cron task skipped by filter`,{id:e.id,name:e.name}),e.nextRun=MD(e.cron,t)?.toISOString()??null,e.lastRun=t.toISOString(),await fS(e);return}typeof r==`object`&&r&&(n=r)}catch(t){X.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};X.info(`Cron task running`,{id:e.id,name:e.name}),this.dispatch(r),e.nextRun=MD(e.cron,t)?.toISOString()??null,e.lastRun=t.toISOString(),await fS(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 RD(e,t,n){return e?e===t||e===n||`${e}-scoop`===n:!1}function zD(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 BD(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(`
1027
+ `);return Error(`Cannot remove scoop '${e}': it has ${r.join(` and `)}. Unregister them first:\n${i}`)}let VD=null;function HD(){return VD||=new LD,VD}function UD(e){if(e.kind===`local`)return`mount ${qb(e.path)}`;let t=e.profile==="default"?``:` --profile ${qb(e.profile)}`;return`mount --source ${qb(e.source)}${t} ${qb(e.path)}`}function WD(){return`lick-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var GD=class{deps;entries=new Map;constructor(e){this.deps=e}hasHandoff(e){return this.entries.get(e)?.kind===`navigate-handoff`}registerNavigate(e){let t=WD(),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=WD(),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=WD(),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=eC(e.discoveryOrigin,e.discoveryUrl);if(!t)return null;let n=WD();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=UD(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(`
1028
+ `)}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 tC(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=${qb(e.from)} --to=${qb(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)}`}}},KD=`# /etc/models — which models a scoop may be spawned with
1032
1029
  #
1033
1030
  # \`agent --model\` and \`scoop_scoop\` accept a \`provider:model\` id, so a scoop can
1034
1031
  # run on a provider OTHER than the selected one. That moves spend onto another
@@ -1061,17 +1058,17 @@ ${e.map(e=>{let t=e.metadata.allowedTools?` Allowed tools: ${e.metadata.allowed
1061
1058
  # openrouter:*
1062
1059
  # -openrouter:openai/o3-pro
1063
1060
  # -adobe:claude-opus-5
1064
- `;const WD=_(`model-policy-file`);var GD=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(pe,UD),WD.info(`Seeded default /etc/models policy`))}catch(e){WD.warn(`Failed to seed default model policy`,{error:e instanceof Error?e.message:String(e)})}}async reload(){try{let e=await this.fs.readFile(pe,{encoding:`utf-8`}),t=typeof e==`string`?e:new TextDecoder().decode(e);me(oe(t))}catch(e){me(he()),WD.warn(`Failed to read model policy; falling back to own-catalogue-only`,{error:e instanceof Error?e.message:String(e)})}}};function KD(){try{let e=se();if(!e||!ae(e))return;let t=de().id;return t?{provider:e,id:t}:void 0}catch{return}}async function qD(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 JD=_(`scheduler`);var YD=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(),JD.info(`Scheduler started`))}stop(){this.pollInterval&&=(clearInterval(this.pollInterval),null),this.running=!1,JD.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 Zx(i),JD.info(`Task created`,{id:i.id,groupFolder:e,scheduleType:n}),i}async updateTask(e,t){let n=await Qx(e);if(!n)return null;let r={...n,...t};return(t.scheduleType||t.scheduleValue)&&(r.nextRun=this.calculateNextRun(r.scheduleType,r.scheduleValue)),await Zx(r),JD.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 Qx(e)?(await this.updateTask(e,{status:`active`}),!0):!1}async deleteTask(e){return await Qx(e)?(await eS(e),JD.info(`Task deleted`,{id:e}),!0):!1}async getTasksByScoop(e){return(await $x()).filter(t=>t.groupFolder===e)}async getAllTasks(){return $x()}pollTasks(){this.checkTasks().catch(e=>{JD.error(`Task poll failed`,{error:e instanceof Error?e.message:String(e)})})}async checkTasks(){let e=await $x(),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){JD.warn(`Task scoop not found`,{taskId:e.id,groupFolder:e.groupFolder});return}JD.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 Zx({...e,lastRun:n,nextRun:r,status:i}),await this.callbacks.onTaskRun(e,t),JD.info(`Task completed`,{id:e.id})}catch(t){JD.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 kD(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 XD=_(`scoop-approval-router`);var ZD=class{deps;registry;constructor(e){this.deps=e,this.registry=new i({onAutoSettle:(e,t,n)=>this.handleAutoSettle(e,t,n)})}handleAutoSettle(e,t,n){XD.info(`Sudo request auto-settled fail-closed; retiring lick card`,{id:e,reason:t}),this.persistLickDecision(e,`deny`,n).catch(n=>{XD.warn(`Failed to persist auto-settled lick decision`,{id:e,reason:t,error:n instanceof Error?n.message:String(n)})})}getConeSudoBroker(e){return a(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||!QD(t.getPolicyForScoop(a.folder),i.request))continue;let{kind:o,detail:s}=i.request;this.registry.resolve(i.id,{decision:`allow`})&&(r++,XD.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=>{XD.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||!QD(r.getPolicyForScoop(n.folder),t)?null:(XD.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 XD.warn(`Sudo request received but no approver is registered — failing closed`,{scoopJid:e,kind:t.kind}),{decision:`deny`,reason:`unavailable`};if(!r.has(e))return XD.warn(`Sudo request from unknown scoop — failing closed`,{scoopJid:e,kind:t.kind}),{decision:`deny`,reason:`unavailable`};if(t.kind===`write`&&ei(t.detail))return XD.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);XD.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);XD.error(`Failed to deliver sudo request to cone — failing closed`,{id:o,scoopJid:e,error:n}),this.registry.resolve(o,{decision:`deny`,reason:`unavailable`})}return s}resolveSudoRequest(e,t,n){if(!this.maySettle(e,n))return XD.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?XD.info(`Sudo request resolved by cone`,{id:e,decision:t.decision}):XD.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 XD.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),XD.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){XD.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){XD.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=$D(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 QD(e,t){let{kind:n,detail:r}=t;return n===`command`?Xr(e,r)===`nopasswd-allow`:n===`read`||n===`write`?ri(e,n,r)===`nopasswd-allow`:!1}function $D(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 eO(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 tO=null;function nO(e){tO=e}function rO(e,t,n){tO?.(e,t,n)}const iO=_(`scoop-completion-service`),aO=`/shared/scoop-notifications`,oO=1e3,sO=2e4;function cO(e){let t=e.replace(/\r\n?/g,`
1061
+ `;const qD=_(`model-policy-file`);var JD=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(pe,KD),qD.info(`Seeded default /etc/models policy`))}catch(e){qD.warn(`Failed to seed default model policy`,{error:e instanceof Error?e.message:String(e)})}}async reload(){try{let e=await this.fs.readFile(pe,{encoding:`utf-8`}),t=typeof e==`string`?e:new TextDecoder().decode(e);me(oe(t))}catch(e){me(he()),qD.warn(`Failed to read model policy; falling back to own-catalogue-only`,{error:e instanceof Error?e.message:String(e)})}}};function YD(){try{let e=se();if(!e||!ae(e))return;let t=de().id;return t?{provider:e,id:t}:void 0}catch{return}}async function XD(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 ZD=_(`scheduler`);var QD=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(),ZD.info(`Scheduler started`))}stop(){this.pollInterval&&=(clearInterval(this.pollInterval),null),this.running=!1,ZD.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 tS(i),ZD.info(`Task created`,{id:i.id,groupFolder:e,scheduleType:n}),i}async updateTask(e,t){let n=await nS(e);if(!n)return null;let r={...n,...t};return(t.scheduleType||t.scheduleValue)&&(r.nextRun=this.calculateNextRun(r.scheduleType,r.scheduleValue)),await tS(r),ZD.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 nS(e)?(await this.updateTask(e,{status:`active`}),!0):!1}async deleteTask(e){return await nS(e)?(await iS(e),ZD.info(`Task deleted`,{id:e}),!0):!1}async getTasksByScoop(e){return(await rS()).filter(t=>t.groupFolder===e)}async getAllTasks(){return rS()}pollTasks(){this.checkTasks().catch(e=>{ZD.error(`Task poll failed`,{error:e instanceof Error?e.message:String(e)})})}async checkTasks(){let e=await rS(),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){ZD.warn(`Task scoop not found`,{taskId:e.id,groupFolder:e.groupFolder});return}ZD.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 tS({...e,lastRun:n,nextRun:r,status:i}),await this.callbacks.onTaskRun(e,t),ZD.info(`Task completed`,{id:e.id})}catch(t){ZD.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 MD(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 $D=_(`scoop-approval-router`);var eO=class{deps;registry;constructor(e){this.deps=e,this.registry=new i({onAutoSettle:(e,t,n)=>this.handleAutoSettle(e,t,n)})}handleAutoSettle(e,t,n){$D.info(`Sudo request auto-settled fail-closed; retiring lick card`,{id:e,reason:t}),this.persistLickDecision(e,`deny`,n).catch(n=>{$D.warn(`Failed to persist auto-settled lick decision`,{id:e,reason:t,error:n instanceof Error?n.message:String(n)})})}getConeSudoBroker(e){return a(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||!tO(t.getPolicyForScoop(a.folder),i.request))continue;let{kind:o,detail:s}=i.request;this.registry.resolve(i.id,{decision:`allow`})&&(r++,$D.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=>{$D.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||!tO(r.getPolicyForScoop(n.folder),t)?null:($D.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 $D.warn(`Sudo request received but no approver is registered — failing closed`,{scoopJid:e,kind:t.kind}),{decision:`deny`,reason:`unavailable`};if(!r.has(e))return $D.warn(`Sudo request from unknown scoop — failing closed`,{scoopJid:e,kind:t.kind}),{decision:`deny`,reason:`unavailable`};if(t.kind===`write`&&ei(t.detail))return $D.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);$D.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);$D.error(`Failed to deliver sudo request to cone — failing closed`,{id:o,scoopJid:e,error:n}),this.registry.resolve(o,{decision:`deny`,reason:`unavailable`})}return s}resolveSudoRequest(e,t,n){if(!this.maySettle(e,n))return $D.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?$D.info(`Sudo request resolved by cone`,{id:e,decision:t.decision}):$D.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 $D.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),$D.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){$D.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){$D.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=nO(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 tO(e,t){let{kind:n,detail:r}=t;return n===`command`?Xr(e,r)===`nopasswd-allow`:n===`read`||n===`write`?ri(e,n,r)===`nopasswd-allow`:!1}function nO(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(`
1062
+ `)}async function rO(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 iO=null;function aO(e){iO=e}function oO(e,t,n){iO?.(e,t,n)}const sO=_(`scoop-completion-service`),cO=`/shared/scoop-notifications`,lO=1e3,uO=2e4;function dO(e){let t=e.replace(/\r\n?/g,`
1066
1063
  `);if(t.length===0)return 0;let n=1;for(let e=0;e<t.length;e++)t[e]===`
1067
1064
  `&&n++;return t.endsWith(`
1068
- `)?n-1:n}function lO(e){return e.length>sO?e.slice(0,sO)+`
1069
- ... (truncated)`:e}var uO=class{scoopResponseBuffer=new Map;mutedScoops=new Set;pendingCompletions=new Map;deferredCompletions=new Map;failureReasons=new Map;completionWaiters=new Map;scheduledWaits=new Map;suppressedCompletions=new Set;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);iO.info(`Scoops muted`,{count:e.length})}isScoopMuted(e){return this.mutedScoops.has(e)}forgetScoop(e,t){this.suppressedCompletions.delete(e),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){iO.warn(`completion waiter threw on cleanup`,{jid:e,reason:t,error:n instanceof Error?n.message:String(n)})}}}shutdown(){for(let e of this.scheduledWaits.keys())this.cancelScheduledWaits(e);for(let e of this.completionWaiters.values())for(let t of e)try{t(null)}catch(e){iO.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(),this.suppressedCompletions.clear()}async notifyCompletion(e){let t=this.deps.getScoop(e);if(!t||t.parentJid===null)return;rO(`complete`,t.folder);let n=this.scoopResponseBuffer.get(e)??``;if(this.scoopResponseBuffer.delete(e),this.suppressedCompletions.has(e))return;if(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||this.suppressedCompletions.has(e)||n.notifyOnComplete===!1)return;let i=r?.responseText??this.scoopResponseBuffer.get(e)??t.reason??``;this.scoopResponseBuffer.delete(e);let a=mO(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}),iO.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=lO(t);for(let t of n)try{t(r||null)}catch(t){iO.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}),iO.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=cO(t),o=t.slice(0,oO),s,c=null,l=null,u=t||n.reason||`(exit code: ${n.exitCode})`;try{l=await this.writeScoopCompletionArtifact(e,u),iO.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),iO.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?dO(e.assistantLabel,d,l??`unavailable`,a,o||u.slice(0,oO),n):fO(e.assistantLabel,d,a,o||u.slice(0,oO),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){iO.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);iO.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(aO,{recursive:!0}),await this.pruneScoopCompletionArtifacts(199);let r=new Date().toISOString().replace(/[:.]/g,`-`),i=Math.random().toString(36).slice(2,8),a=`${aO}/${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(aO)}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=`${aO}/${e}`;try{await t.rm(n)}catch(e){iO.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:lO(e.responseText),timestamp:e.timestamp,notificationPath:null};t.push(a),n.push(this.writeScoopCompletionArtifact(i,e.responseText).then(e=>{a.notificationPath=e}).catch(e=>{iO.warn(`unmute artifact persist failed`,{jid:r,error:e instanceof Error?e.message:String(e)})}))}return await Promise.all(n),iO.info(`Scoops unmuted`,{count:e.length,consumed:t.length}),t}async waitForScoops(e,t,n){if(e.length===0)return[];let r=Array.from(new Set(e)),i=new Map,a=[];for(let e of r)this.mutedScoops.has(e)||(this.mutedScoops.add(e),a.push(e));this.claimPendingSummaries(r,i);let o=r.filter(e=>!i.has(e)),s=o.filter(e=>this.deps.hasScoop(e)),c=o.filter(e=>!this.deps.hasScoop(e));for(let e of c)i.set(e,{summary:null,timedOut:!0});let l=[],u=s.map(e=>new Promise(t=>{let n=n=>{i.has(e)||(i.set(e,{summary:n,timedOut:n===null}),t())};l.push({jid:e,waiter:n});let r=this.completionWaiters.get(e);r||(r=[],this.completionWaiters.set(e,r)),r.push(n)}));try{await this.awaitScoopWaiters(u,t,n)}finally{this.removeCompletionWaiters(l);for(let e of a)this.mutedScoops.delete(e)}for(let e of s)i.has(e)||i.set(e,{summary:null,timedOut:!0});return e.map(e=>{let t=i.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:lO(e.responseText),timedOut:!1}))}}async awaitScoopWaiters(e,t,n){if(e.length===0)return;if(!n&&(t==null||t<0)){await Promise.all(e);return}let r=null,i=null;try{let a=[Promise.all(e).then(()=>{})];t!=null&&t>=0&&a.push(new Promise(e=>{r=setTimeout(e,t)})),n&&a.push(new Promise(e=>{i=()=>e(),n.aborted?i():n.addEventListener(`abort`,i,{once:!0})})),await Promise.race(a)}finally{r&&clearTimeout(r),n&&i&&n.removeEventListener(`abort`,i)}}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)),o=n??``,s=new AbortController,c=this.scheduledWaits.get(o)??new Set;return c.add(s),this.scheduledWaits.set(o,c),this.waitForScoops(i,t,s.signal).then(e=>{if(!s.signal.aborted)return this.deliverWaitResultsToCone(e,n)}).catch(e=>{iO.error(`scheduleScoopWait failed`,{error:e instanceof Error?e.message:String(e)})}).finally(()=>{c.delete(s),c.size===0&&this.scheduledWaits.delete(o)}),{scheduled:i,unknown:a}}cancelScheduledWaits(e){let t=this.scheduledWaits.get(e);if(t){this.scheduledWaits.delete(e);for(let e of t)e.abort()}}suppressCompletionUntilNextPrompt(e){this.suppressedCompletions.add(e),this.pendingCompletions.delete(e),this.deferredCompletions.delete(e)}allowCompletion(e){this.suppressedCompletions.delete(e)}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){iO.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);iO.error(`Failed to route scoop-wait result to cone`,{error:n}),this.deps.reportError(e.jid,`scoop_wait completed but notification failed: ${n}`)}}};function dO(e,t,n,r,i,a){return[`[@${e} ${t}]`,...pO(a),`VFS path: ${n}`,`Total lines: ${r}`,`Preview (up to ${oO} chars):`,i].join(`
1071
- `)}function fO(e,t,n,r,i,a){return[`[@${e} ${t}]`,...pO(a),`VFS path: unavailable`,`Artifact persistence error: ${i}`,`Total lines: ${n}`,`Preview (up to ${oO} chars):`,r].join(`
1072
- `)}function pO(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 mO(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 hO=9e5,gO=36e5;function _O(e,t,n){let r=jn(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 vO(e,t){let n=[...e.values()].sort((e,t)=>t.cost-e.cost||(e.ids[0]??``).localeCompare(t.ids[0]??``)).map(e=>An(e.ids,t)),r=e.get(jn(t));return{current:r?An(r.ids,t):t,models:n}}function yO(e,t){let n=qn(e);return!n||!Qn(e)&&jn(t)!==jn(n)?t:n}function bO(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,_O(s,e.model,e.usage.cost.total);let c=vO(s,yO(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/hO))*hO;return{name:e.assistantLabel,type:Bn(e)?`cone`:`scoop`,model:c.current,models:c.models,source:n,usage:o,turns:a.length,firstActivity:u,lastActivity:d,activeTimeMs:p}}function xO(e,t){return e.notifyOnComplete===!1&&e.parentJid!==null&&t.has(e.parentJid)}var SO=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=bO(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(xO(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=bO(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=bO(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*gO/i,f=l*gO/a,p=u*gO/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=An(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=jn(r.model);_O(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 CO=_(`scoop-idle-timers`);var wO=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`};CO.info(`Scoop idle timeout`,{jid:e,scoop:t.folder});try{this.deps.notifyIncomingMessage(n.jid,r)}catch(t){CO.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);CO.error(`Failed to send idle notification`,{jid:e,error:n})})}};const TO=_(`work-unit`),EO={initializing:new Set([`ready`,`error`]),ready:new Set([`processing`,`error`,`initializing`]),processing:new Set([`ready`,`error`]),error:new Set([`initializing`,`ready`,`processing`])};var DO=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=mr(e,this.tab??void 0);return this.closed?{...t,status:`closed`}:t}get status(){return this.closed?`closed`:fr(this.tab?.status)}get isClosed(){return this.closed}transition(e,t={}){if(this.closed)return TO.debug(`ignoring transition on closed unit`,{jid:this.id,next:e}),!1;let n=this.tab?.status;if(n!==void 0&&n!==e&&!EO[n].has(e))return TO.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){TO.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:fr(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){TO.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`),TO.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 OO=null;function kO(e){OO=e}function AO(e,t){OO?.(e,t)}function jO(e){return typeof e==`string`&&e.startsWith(`No API key configured`)}function MO(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 NO(e){return typeof e!=`string`||!e?!1:e.toLowerCase().includes(`please log in again`)}const PO=[`run out of available resources`,`ran out of available resources`,`run out of credits`,`ran out of credits`],FO=[`active grok subscription`,`need a grok subscription`,`needs a grok subscription`];function IO(e){if(typeof e!=`string`||!e)return!1;let t=e.toLowerCase();return t.includes(`quota_exceeded`)?!0:PO.some(e=>t.includes(e))&&FO.some(e=>t.includes(e))}function LO(e){return jO(e)||MO(e)||NO(e)||IO(e)}function RO(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 zO(e){return IO(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 BO(e){return IO(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 VO(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 HO(e,t,n){let r=e[e.length-1];if(r){let i=r.role===`assistant`?r.errorMessage:void 0;if(i){if(UO(i,e,t,n))return}else t.imageRecovery.markSettled(),t.overflow.markSettled(),r.role===`assistant`&&t.overflow.markAssistantSucceeded()}t.persist(e)}function UO(e,t,n,r){let i=n.imageRecovery.isActive||n.overflow.isActive;return!i&&RO(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(),AO(`llm`,e),n.onError(e),!1)}function WO(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`:GO(e,t);break;case`tool_execution_end`:KO(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`&&fs(e.message))break;t.responseDone();break;case`agent_end`:t.agentEnd(e.messages,n)}}function GO(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 KO(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(`
1065
+ `)?n-1:n}function fO(e){return e.length>uO?e.slice(0,uO)+`
1066
+ ... (truncated)`:e}var pO=class{scoopResponseBuffer=new Map;mutedScoops=new Set;pendingCompletions=new Map;deferredCompletions=new Map;failureReasons=new Map;completionWaiters=new Map;scheduledWaits=new Map;suppressedCompletions=new Set;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);sO.info(`Scoops muted`,{count:e.length})}isScoopMuted(e){return this.mutedScoops.has(e)}forgetScoop(e,t){this.suppressedCompletions.delete(e),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){sO.warn(`completion waiter threw on cleanup`,{jid:e,reason:t,error:n instanceof Error?n.message:String(n)})}}}shutdown(){for(let e of this.scheduledWaits.keys())this.cancelScheduledWaits(e);for(let e of this.completionWaiters.values())for(let t of e)try{t(null)}catch(e){sO.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(),this.suppressedCompletions.clear()}async notifyCompletion(e){let t=this.deps.getScoop(e);if(!t||t.parentJid===null)return;oO(`complete`,t.folder);let n=this.scoopResponseBuffer.get(e)??``;if(this.scoopResponseBuffer.delete(e),this.suppressedCompletions.has(e))return;if(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||this.suppressedCompletions.has(e)||n.notifyOnComplete===!1)return;let i=r?.responseText??this.scoopResponseBuffer.get(e)??t.reason??``;this.scoopResponseBuffer.delete(e);let a=_O(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}),sO.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=fO(t);for(let t of n)try{t(r||null)}catch(t){sO.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}),sO.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=dO(t),o=t.slice(0,lO),s,c=null,l=null,u=t||n.reason||`(exit code: ${n.exitCode})`;try{l=await this.writeScoopCompletionArtifact(e,u),sO.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),sO.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?mO(e.assistantLabel,d,l??`unavailable`,a,o||u.slice(0,lO),n):hO(e.assistantLabel,d,a,o||u.slice(0,lO),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){sO.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);sO.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(cO,{recursive:!0}),await this.pruneScoopCompletionArtifacts(199);let r=new Date().toISOString().replace(/[:.]/g,`-`),i=Math.random().toString(36).slice(2,8),a=`${cO}/${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(cO)}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=`${cO}/${e}`;try{await t.rm(n)}catch(e){sO.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:fO(e.responseText),timestamp:e.timestamp,notificationPath:null};t.push(a),n.push(this.writeScoopCompletionArtifact(i,e.responseText).then(e=>{a.notificationPath=e}).catch(e=>{sO.warn(`unmute artifact persist failed`,{jid:r,error:e instanceof Error?e.message:String(e)})}))}return await Promise.all(n),sO.info(`Scoops unmuted`,{count:e.length,consumed:t.length}),t}async waitForScoops(e,t,n){if(e.length===0)return[];let r=Array.from(new Set(e)),i=new Map,a=[];for(let e of r)this.mutedScoops.has(e)||(this.mutedScoops.add(e),a.push(e));this.claimPendingSummaries(r,i);let o=r.filter(e=>!i.has(e)),s=o.filter(e=>this.deps.hasScoop(e)),c=o.filter(e=>!this.deps.hasScoop(e));for(let e of c)i.set(e,{summary:null,timedOut:!0});let l=[],u=s.map(e=>new Promise(t=>{let n=n=>{i.has(e)||(i.set(e,{summary:n,timedOut:n===null}),t())};l.push({jid:e,waiter:n});let r=this.completionWaiters.get(e);r||(r=[],this.completionWaiters.set(e,r)),r.push(n)}));try{await this.awaitScoopWaiters(u,t,n)}finally{this.removeCompletionWaiters(l);for(let e of a)this.mutedScoops.delete(e)}for(let e of s)i.has(e)||i.set(e,{summary:null,timedOut:!0});return e.map(e=>{let t=i.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:fO(e.responseText),timedOut:!1}))}}async awaitScoopWaiters(e,t,n){if(e.length===0)return;if(!n&&(t==null||t<0)){await Promise.all(e);return}let r=null,i=null;try{let a=[Promise.all(e).then(()=>{})];t!=null&&t>=0&&a.push(new Promise(e=>{r=setTimeout(e,t)})),n&&a.push(new Promise(e=>{i=()=>e(),n.aborted?i():n.addEventListener(`abort`,i,{once:!0})})),await Promise.race(a)}finally{r&&clearTimeout(r),n&&i&&n.removeEventListener(`abort`,i)}}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)),o=n??``,s=new AbortController,c=this.scheduledWaits.get(o)??new Set;return c.add(s),this.scheduledWaits.set(o,c),this.waitForScoops(i,t,s.signal).then(e=>{if(!s.signal.aborted)return this.deliverWaitResultsToCone(e,n)}).catch(e=>{sO.error(`scheduleScoopWait failed`,{error:e instanceof Error?e.message:String(e)})}).finally(()=>{c.delete(s),c.size===0&&this.scheduledWaits.delete(o)}),{scheduled:i,unknown:a}}cancelScheduledWaits(e){let t=this.scheduledWaits.get(e);if(t){this.scheduledWaits.delete(e);for(let e of t)e.abort()}}suppressCompletionUntilNextPrompt(e){this.suppressedCompletions.add(e),this.pendingCompletions.delete(e),this.deferredCompletions.delete(e)}allowCompletion(e){this.suppressedCompletions.delete(e)}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(`
1067
+ `),timestamp:new Date().toISOString(),fromAssistant:!1,channel:`scoop-wait`};try{this.deps.notifyIncomingMessage(e.jid,o)}catch(e){sO.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);sO.error(`Failed to route scoop-wait result to cone`,{error:n}),this.deps.reportError(e.jid,`scoop_wait completed but notification failed: ${n}`)}}};function mO(e,t,n,r,i,a){return[`[@${e} ${t}]`,...gO(a),`VFS path: ${n}`,`Total lines: ${r}`,`Preview (up to ${lO} chars):`,i].join(`
1068
+ `)}function hO(e,t,n,r,i,a){return[`[@${e} ${t}]`,...gO(a),`VFS path: unavailable`,`Artifact persistence error: ${i}`,`Total lines: ${n}`,`Preview (up to ${lO} chars):`,r].join(`
1069
+ `)}function gO(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 _O(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 vO=9e5,yO=36e5;function bO(e,t,n){let r=jn(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 xO(e,t){let n=[...e.values()].sort((e,t)=>t.cost-e.cost||(e.ids[0]??``).localeCompare(t.ids[0]??``)).map(e=>An(e.ids,t)),r=e.get(jn(t));return{current:r?An(r.ids,t):t,models:n}}function SO(e,t){let n=qn(e);return!n||!Qn(e)&&jn(t)!==jn(n)?t:n}function CO(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,bO(s,e.model,e.usage.cost.total);let c=xO(s,SO(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/vO))*vO;return{name:e.assistantLabel,type:Bn(e)?`cone`:`scoop`,model:c.current,models:c.models,source:n,usage:o,turns:a.length,firstActivity:u,lastActivity:d,activeTimeMs:p}}function wO(e,t){return e.notifyOnComplete===!1&&e.parentJid!==null&&t.has(e.parentJid)}var TO=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=CO(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(wO(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=CO(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=CO(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*yO/i,f=l*yO/a,p=u*yO/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=An(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=jn(r.model);bO(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 EO=_(`scoop-idle-timers`);var DO=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`};EO.info(`Scoop idle timeout`,{jid:e,scoop:t.folder});try{this.deps.notifyIncomingMessage(n.jid,r)}catch(t){EO.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);EO.error(`Failed to send idle notification`,{jid:e,error:n})})}};const OO=_(`work-unit`),kO={initializing:new Set([`ready`,`error`]),ready:new Set([`processing`,`error`,`initializing`]),processing:new Set([`ready`,`error`]),error:new Set([`initializing`,`ready`,`processing`])};var AO=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=mr(e,this.tab??void 0);return this.closed?{...t,status:`closed`}:t}get status(){return this.closed?`closed`:fr(this.tab?.status)}get isClosed(){return this.closed}transition(e,t={}){if(this.closed)return OO.debug(`ignoring transition on closed unit`,{jid:this.id,next:e}),!1;let n=this.tab?.status;if(n!==void 0&&n!==e&&!kO[n].has(e))return OO.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){OO.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:fr(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){OO.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`),OO.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 jO=null;function MO(e){jO=e}function NO(e,t){jO?.(e,t)}function PO(e){return typeof e==`string`&&e.startsWith(`No API key configured`)}function FO(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 IO(e){return typeof e!=`string`||!e?!1:e.toLowerCase().includes(`please log in again`)}const LO=[`run out of available resources`,`ran out of available resources`,`run out of credits`,`ran out of credits`],RO=[`active grok subscription`,`need a grok subscription`,`needs a grok subscription`];function zO(e){if(typeof e!=`string`||!e)return!1;let t=e.toLowerCase();return t.includes(`quota_exceeded`)?!0:LO.some(e=>t.includes(e))&&RO.some(e=>t.includes(e))}function BO(e){return PO(e)||FO(e)||IO(e)||zO(e)}function VO(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 HO(e){return zO(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 UO(e){return zO(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 WO(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 GO(e,t,n){let r=e[e.length-1];if(r){let i=r.role===`assistant`?r.errorMessage:void 0;if(i){if(KO(i,e,t,n))return}else t.imageRecovery.markSettled(),t.overflow.markSettled(),r.role===`assistant`&&t.overflow.markAssistantSucceeded()}t.persist(e)}function KO(e,t,n,r){let i=n.imageRecovery.isActive||n.overflow.isActive;return!i&&VO(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(),NO(`llm`,e),n.onError(e),!1)}function qO(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`:JO(e,t);break;case`tool_execution_end`:YO(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`&&gs(e.message))break;t.responseDone();break;case`agent_end`:t.agentEnd(e.messages,n)}}function JO(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 YO(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
1070
  `);if(e.isError){let t=r.filter(e=>!e.startsWith(`<img:`)).join(`
1074
- `);AO(`tool`,`${e.toolName}: ${t}`)}t.toolResult(e.toolName,i,e.isError,e.toolCallId)}const qO=_(`scoop-context`);var JO=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(),qO.info(`Reaping background bash jobs on dispose`,{folder:this.deps.folder,pids:t});for(let n of t)e.signal(n,`SIGKILL`)}};const YO=_(`scoop-context`);var XO=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){YO.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=ZO(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=>{YO.error(`Image recovery re-prompt failed`,{folder:this.deps.folder,error:e instanceof Error?e.message:String(e)}),this.fail(e)})}catch(e){YO.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 ZO(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 QO(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 $O(e,t,n){let r=await QO(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 ek=_(`scoop-context`);function tk(e){let t=Qn(e);return!t&&Ur(e)?null:t?ae(t):ue()}function nk(e){let t=qn(e);if(t)return le(t,Qn(e));if(Ur(e))throw Error(`The gelatiere has no leading-cone model`);return de()}function rk(e,t){let n=qn(e),r=Qn(e),i=nk(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||!fe(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&&ek.warn(`Configured scoop model did not resolve; using resolved model instead`,{folder:e.folder,configuredModelId:n,resolvedModelId:i.id}),i}function ik(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=nk(t);typeof e.contextWindow==`number`&&e.contextWindow>0&&(a=e.contextWindow)}catch{}return Math.min(1,i/a)}return 0}function ak(e){if(Ur(e)&&!qn(e))return`The gelatiere cannot run until the leading cone has a model.`;let t=Qn(e)??``;try{t||=se()}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 ok(e,t,n,r,i){let a=e.config?.assistantName||e.assistantLabel,o=t.display.role===`primary`,{policy:s,workspace:c}=t,l=`# ${a}
1071
+ `);NO(`tool`,`${e.toolName}: ${t}`)}t.toolResult(e.toolName,i,e.isError,e.toolCallId)}const XO=_(`scoop-context`);var ZO=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(),XO.info(`Reaping background bash jobs on dispose`,{folder:this.deps.folder,pids:t});for(let n of t)e.signal(n,`SIGKILL`)}};const QO=_(`scoop-context`);var $O=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){QO.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=ek(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=>{QO.error(`Image recovery re-prompt failed`,{folder:this.deps.folder,error:e instanceof Error?e.message:String(e)}),this.fail(e)})}catch(e){QO.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 ek(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 tk(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 nk(e,t,n){let r=await tk(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 rk=_(`scoop-context`);function ik(e){let t=Qn(e);return!t&&Ur(e)?null:t?ae(t):ue()}function ak(e){let t=qn(e);if(t)return le(t,Qn(e));if(Ur(e))throw Error(`The gelatiere has no leading-cone model`);return de()}function ok(e,t){let n=qn(e),r=Qn(e),i=ak(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||!fe(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&&rk.warn(`Configured scoop model did not resolve; using resolved model instead`,{folder:e.folder,configuredModelId:n,resolvedModelId:i.id}),i}function sk(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=ak(t);typeof e.contextWindow==`number`&&e.contextWindow>0&&(a=e.contextWindow)}catch{}return Math.min(1,i/a)}return 0}function ck(e){if(Ur(e)&&!qn(e))return`The gelatiere cannot run until the leading cone has a model.`;let t=Qn(e)??``;try{t||=se()}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 lk(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
1072
 
1076
1073
  You are ${a}, ${o?`the main assistant (cone)`:`a scoop assistant`} in SLICC (Self-Licking Ice Cream Cone).
1077
1074
 
@@ -1146,7 +1143,7 @@ ${n}
1146
1143
  ---
1147
1144
  ${o?`CONE`:`SCOOP`} MEMORY (${e.name}):
1148
1145
  ${r}
1149
- ---`);let u=rD(i);return u&&(l+=u),l}const sk=_(`scoop-context`);function ck(e,t){return!t.reasoning||e===void 0?`off`:e===`xhigh`&&!ln(t).includes(`xhigh`)?`high`:e}function lk(){try{let e=localStorage.getItem(`slicc_locked_effort_level`);if(!e)return null;if(xr.includes(e))return e;sk.warn(`Unrecognized locked effort level in localStorage, ignoring:`,e)}catch{}return null}const uk=_(`scoop-context`);function dk(e,t){let n=nk(t);e.state.model=n;let r=Zn(t),i=lk()??r.level;return e.state.thinkingLevel=ck(i,n),uk.info(`Model updated on running agent`,{folder:t.folder,model:n.id,thinkingLevel:e.state.thinkingLevel}),n.reasoning?r.effortOverride:void 0}function fk(e,t){if(lk())return e.state.thinkingLevel;let n=ck(t,e.state.model);return e.state.thinkingLevel=n,n}async function pk(e,t){let n=await eD(t.skillsFs??t.fs,_r),r=await QO(t.fs,t.unit.workspace.memoryPath),i=await t.getGlobalMemory(),a=ok(t.scoop,t.unit,i,r,n),o=hn(e.state.messages);e.state.messages=[{role:`system`,content:a,...o.length>0?{toolsAdded:o}:{},timestamp:Date.now()},...e.state.messages.filter(e=>e.role!==`system`)],uk.info(`Skills reloaded`,{folder:t.scoop.folder,skillCount:n.length})}const mk=_(`scoop-context`);var hk=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()&&fs(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,mk.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`&&fs(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(!Cn(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;mk.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.`)}},gk=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 _k(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}function vk(e,t){return!_k(e,t)}function yk(e){let t=e.captureStructuredOutput,n;return n=new ey({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||!vk(t,i)?t:_k(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 bk=_(`scoop-context`);async function xk(e,t,n,r){if(!e)return;let i=n.policy.filesystem.kind===`full-workspace`?[n.workspace.root,`/shared`,`/scoops`,`/home`,`/home/user`,pr,r,`/mnt`]:[`/scoops/${t.folder}`,`/scoops/${t.folder}/workspace`,`/scoops/${t.folder}/home`,`/scoops/${t.folder}/tmp`,`/shared`,pr,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
1146
+ ---`);let u=oD(i);return u&&(l+=u),l}const uk=_(`scoop-context`);function dk(e,t){return!t.reasoning||e===void 0?`off`:e===`xhigh`&&!ln(t).includes(`xhigh`)?`high`:e}function fk(){try{let e=localStorage.getItem(`slicc_locked_effort_level`);if(!e)return null;if(xr.includes(e))return e;uk.warn(`Unrecognized locked effort level in localStorage, ignoring:`,e)}catch{}return null}const pk=_(`scoop-context`);function mk(e,t){let n=ak(t);e.state.model=n;let r=Zn(t),i=fk()??r.level;return e.state.thinkingLevel=dk(i,n),pk.info(`Model updated on running agent`,{folder:t.folder,model:n.id,thinkingLevel:e.state.thinkingLevel}),n.reasoning?r.effortOverride:void 0}function hk(e,t){if(fk())return e.state.thinkingLevel;let n=dk(t,e.state.model);return e.state.thinkingLevel=n,n}async function gk(e,t){let n=await rD(t.skillsFs??t.fs,_r),r=await tk(t.fs,t.unit.workspace.memoryPath),i=await t.getGlobalMemory(),a=lk(t.scoop,t.unit,i,r,n),o=hn(e.state.messages);e.state.messages=[{role:`system`,content:a,...o.length>0?{toolsAdded:o}:{},timestamp:Date.now()},...e.state.messages.filter(e=>e.role!==`system`)],pk.info(`Skills reloaded`,{folder:t.scoop.folder,skillCount:n.length})}const _k=_(`scoop-context`);var vk=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()&&gs(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,_k.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`&&gs(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(!Cn(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;_k.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.`)}},yk=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 bk(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}function xk(e,t){return!bk(e,t)}function Sk(e){let t=e.captureStructuredOutput,n;return n=new iy({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||!xk(t,i)?t:bk(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 Ck=_(`scoop-context`);async function wk(e,t,n,r){if(!e)return;let i=n.policy.filesystem.kind===`full-workspace`?[n.workspace.root,`/shared`,`/scoops`,`/home`,`/home/user`,pr,r,`/mnt`]:[`/scoops/${t.folder}`,`/scoops/${t.folder}/workspace`,`/scoops/${t.folder}/home`,`/scoops/${t.folder}/tmp`,`/shared`,pr,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
1147
 
1151
1148
  ${n.display.role===`primary`?`Role: Cone (main orchestrator)`:`Scoop: ${t.name}`}
1152
1149
  Folder: ${t.folder}
@@ -1157,34 +1154,34 @@ Created: ${new Date().toISOString()}
1157
1154
 
1158
1155
  ## Context
1159
1156
  (Add important context here)
1160
- `;try{await e.writeFile(a,r)}catch(r){let i=r?.code;if(i===`EACCES`)bk.debug(`Skipping default memory write (sandbox is read-only)`,{folder:t.folder,path:a});else if(await Sk(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 Sk(e,t){try{return await e.exists(t)}catch{return!1}}async function Ck(e,t){let n=await fi(t.scoop,t.coneJid),r=(e,r,i)=>{let a=t.getEffortOverride(),o=a?{...i,effort:a}:i;return e.provider===`adobe`?_n(e,r,{...o,headers:{...i?.headers,"X-Session-Id":n}}):_n(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:wn({model:e,contextWindow:typeof e.contextWindow==`number`&&e.contextWindow>0?e.contextWindow:void 0,getApiKey:a,headers:i,onMemoryUpdates:s,shouldExtractMemories:()=>!Ee(`agentic-memory`),onCompactionStateChange:(e,n)=>{t.onCompactionStateChange?.(e,n)},onBeforeCompaction:t.onBeforeCompaction}),getCompactionApiKey:a}}function wk(e){return e.length>1&&e.endsWith(`/`)?e.slice(0,-1):e}var Tk=class{visiblePaths;kinds=new Map;unreported=new Set;constructor(e){this.visiblePaths=e}record(e,t){let n=wk(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(),Ek(this.visiblePaths,e,t)}};function Ek(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 Dk=/\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 Ok(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function kk(e,t,n){if(n.length===0)return null;let r=n.map(wk).filter(e=>e.length>1);if(r.length===0)return null;let i=new Set(e.split(`
1157
+ `;try{await e.writeFile(a,r)}catch(r){let i=r?.code;if(i===`EACCES`)Ck.debug(`Skipping default memory write (sandbox is read-only)`,{folder:t.folder,path:a});else if(await Tk(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 Tk(e,t){try{return await e.exists(t)}catch{return!1}}async function Ek(e,t){let n=await fi(t.scoop,t.coneJid),r=(e,r,i)=>{let a=t.getEffortOverride(),o=a?{...i,effort:a}:i;return e.provider===`adobe`?_n(e,r,{...o,headers:{...i?.headers,"X-Session-Id":n}}):_n(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:wn({model:e,contextWindow:typeof e.contextWindow==`number`&&e.contextWindow>0?e.contextWindow:void 0,getApiKey:a,headers:i,onMemoryUpdates:s,shouldExtractMemories:()=>!Ee(`agentic-memory`),onCompactionStateChange:(e,n)=>{t.onCompactionStateChange?.(e,n)},onBeforeCompaction:t.onBeforeCompaction}),getCompactionApiKey:a}}function Dk(e){return e.length>1&&e.endsWith(`/`)?e.slice(0,-1):e}var Ok=class{visiblePaths;kinds=new Map;unreported=new Set;constructor(e){this.visiblePaths=e}record(e,t){let n=Dk(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(),kk(this.visiblePaths,e,t)}};function kk(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(`
1158
+ `)}const Ak=/\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 jk(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function Mk(e,t,n){if(n.length===0)return null;let r=n.map(Dk).filter(e=>e.length>1);if(r.length===0)return null;let i=new Set(e.split(`
1162
1159
  `).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+[\`"'(]*${Ok(e)}`,`i`);if(Dk.test(t)||n.test(t))return{line:t,path:e}}}return null}_(`secret-env`);function Ak(e){let t={},n;for(let r of e)!r?.name||!r?.maskedValue||(r.name===`oauth.github.token`&&(n=r.maskedValue),bi(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 jk=[`readFile`,`readFileRange`,`readTextFile`,`stat`,`lstat`,`realpath`,`readlink`],Mk=[`/usr/`,`/bin/`];function Nk(e){let t=Nn(e);return Mk.some(e=>t===e.slice(0,-1)||t.startsWith(e))}function Pk(e,t,n){let r=e,i=e=>typeof r[e]==`function`,a=e=>Nk(e)?`inside`:t.readAccess(e),o=e=>{let t=Nn(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 jk)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(Nn(e),`outside`),!1):r.exists?.(e)),i(`getNativeFile`)&&(s.getNativeFile=async e=>a(e)===`outside`?(n.record(Nn(e),`outside`),null):r.getNativeFile?.(e)),i(`readDir`)&&(s.readDir=async(e,...t)=>{let i=a(e);return i===`outside`?(n.record(Nn(e),`outside`),[]):(i===`parent`&&n.record(Nn(e),`filtered`),await r.readDir?.(e,...t))}),i(`readDirSync`)&&(s.readDirSync=e=>(a(e)===`parent`&&n.record(Nn(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(Nn(e),`outside`);return}i===`parent`&&n.record(Nn(e),`filtered`),yield*r.walk?.(e,...t)}),new Proxy(e,{get(e,t,n){if(t===li)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 Fk={writeFile:0,appendFile:0,rename:1,copyFile:1,symlink:1};function Ik(e){return new k(`EACCES`,gi,Nn(e))}async function Lk(e,t){let n=Nn(t);try{return Nn(await e.realpath(n))}catch{}let r=n.lastIndexOf(`/`);if(r<=0)return n;try{let t=Nn(await e.realpath(n.slice(0,r)));return`${t===`/`?``:t}/${n.slice(r+1)}`}catch{return n}}function Rk(e){let t={};for(let n of Object.keys(Fk)){let r=e[n];if(typeof r!=`function`)continue;let i=Fk[n];t[n]=async(...t)=>{let n=t[i];if(typeof n==`string`){if(_i(n))throw Ik(n);let t=await Lk(e,n);if(_i(t))throw Ik(n)}return r.apply(e,t)}}return new Proxy(e,{get(e,n,r){if(n===li)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 zk(e){let{isCone:t,folder:n,secretEnv:r,tmpDir:i,lickTarget:a}=e,o=a?{[zi]: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`,...Ci].join(`:`),...o}}function Bk(e,t,n){return e.display.role===`child`?t.folder:t.jid===n?void 0:t.folder}function Vk({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 Hk=_(`scoop-context`);function Uk(e,t){let n=e.policy.filesystem;return n.kind!==`restricted`||!(t instanceof Pr)||!vi(n.writablePaths)?null:new Tk(n.visiblePaths)}async function Wk(e){try{let t=await e.secrets.listMaskedEnv();return t.ok?Array.isArray(t.value.entries)?Ak(t.value.entries):(Hk.warn(`Masked secrets response was not an array`,{entriesType:typeof t.value.entries}),{}):(Hk.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 Hk.warn(`Failed to fetch masked secrets`,{error:e instanceof Error?e.message:String(e)}),{}}}async function Gk(e){let{scoop:t,unit:n,fs:r,skillsFs:i}=e,a=n.workspace.root,o=e.getBrowserAPI();n.policy.filesystem.kind===`full-workspace`&&await iD(r,_r);let s=i??r,c=e.capabilityBroker??u(),l=await Wk(c),d=await c.network.localNodeServer(),f=()=>d.ok,p=Vk({sudoManager:e.sudoManager,unit:n,folder:t.folder,onSudoRequest:e.onSudoRequest}),h=p?ui(r,{broker:p.broker,getPolicy:p.getPolicy,defaultDisposition:p.defaultDisposition,...p.onGrant?{onGrant:p.onGrant}:{}}):r,ee=Uk(n,r),g=ee?Pk(h,r,ee):h,_=Rk(g),te=zk({isCone:n.policy.filesystem.kind===`full-workspace`,folder:t.folder,secretEnv:l,tmpDir:e.tmpDir,...e.lickTarget?{lickTarget:e.lickTarget}:{}}),ne=new m({fs:_,cwd:a,env:Object.keys(te).length>0?te:void 0,browserAPI:o,webhook:{hasLocalNodeServer:f,getLeaderStatus:Br},crontask:{hasLocalNodeServer:f},jshDiscoveryFs:i?s:void 0,allowedCommands:t.config?.allowedCommands,getParentJid:()=>t.jid,isScoop:()=>n.display.role===`child`,sudo:p?.shellConfig,scrubProgressLabel:yn(),gnuBash:!0,processManager:e.processManager??void 0,processOwner:e.processOwner,getCurrentShellPid:e.getTurnPid,mcpConnectionManager:e.mcpConnectionManager});return Hk.info(`AlmostBashShell initialized`,{folder:t.folder}),{shell:ne,gatedFs:_,memoryFs:g,blindReads:ee,skills:await eD(s,_r)}}const Kk={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 qk(e){if(e)return Kk[e]??e}const Jk=51200;function Yk(e){if(e.length===0)return[];let t=e.split(`
1160
+ `)){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+[\`"'(]*${jk(e)}`,`i`);if(Ak.test(t)||n.test(t))return{line:t,path:e}}}return null}_(`secret-env`);function Nk(e){let t={},n;for(let r of e)!r?.name||!r?.maskedValue||(r.name===`oauth.github.token`&&(n=r.maskedValue),wi(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 Pk=[`readFile`,`readFileRange`,`readTextFile`,`stat`,`lstat`,`realpath`,`readlink`],Fk=[`/usr/`,`/bin/`];function Ik(e){let t=Nn(e);return Fk.some(e=>t===e.slice(0,-1)||t.startsWith(e))}function Lk(e,t,n){let r=e,i=e=>typeof r[e]==`function`,a=e=>Ik(e)?`inside`:t.readAccess(e),o=e=>{let t=Nn(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 Pk)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(Nn(e),`outside`),!1):r.exists?.(e)),i(`getNativeFile`)&&(s.getNativeFile=async e=>a(e)===`outside`?(n.record(Nn(e),`outside`),null):r.getNativeFile?.(e)),i(`readDir`)&&(s.readDir=async(e,...t)=>{let i=a(e);return i===`outside`?(n.record(Nn(e),`outside`),[]):(i===`parent`&&n.record(Nn(e),`filtered`),await r.readDir?.(e,...t))}),i(`readDirSync`)&&(s.readDirSync=e=>(a(e)===`parent`&&n.record(Nn(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(Nn(e),`outside`);return}i===`parent`&&n.record(Nn(e),`filtered`),yield*r.walk?.(e,...t)}),new Proxy(e,{get(e,t,n){if(t===li)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 Rk={writeFile:0,appendFile:0,rename:1,copyFile:1,symlink:1};function zk(e){return new k(`EACCES`,gi,Nn(e))}async function Bk(e,t){let n=Nn(t);try{return Nn(await e.realpath(n))}catch{}let r=n.lastIndexOf(`/`);if(r<=0)return n;try{let t=Nn(await e.realpath(n.slice(0,r)));return`${t===`/`?``:t}/${n.slice(r+1)}`}catch{return n}}function Vk(e){let t={};for(let n of Object.keys(Rk)){let r=e[n];if(typeof r!=`function`)continue;let i=Rk[n];t[n]=async(...t)=>{let n=t[i];if(typeof n==`string`){if(_i(n))throw zk(n);let t=await Bk(e,n);if(_i(t))throw zk(n)}return r.apply(e,t)}}return new Proxy(e,{get(e,n,r){if(n===li)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 Hk(e){let{isCone:t,folder:n,secretEnv:r,tmpDir:i,lickTarget:a}=e,o=a?{[Ui]: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`,...Di].join(`:`),...o}}function Uk(e,t,n){return e.display.role===`child`?t.folder:t.jid===n?void 0:t.folder}function Wk({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 Gk=_(`scoop-context`);function Kk(e,t){let n=e.policy.filesystem;return n.kind!==`restricted`||!(t instanceof Pr)||!vi(n.writablePaths)?null:new Ok(n.visiblePaths)}async function qk(e){try{let t=await e.secrets.listMaskedEnv();return t.ok?Array.isArray(t.value.entries)?Nk(t.value.entries):(Gk.warn(`Masked secrets response was not an array`,{entriesType:typeof t.value.entries}),{}):(Gk.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 Gk.warn(`Failed to fetch masked secrets`,{error:e instanceof Error?e.message:String(e)}),{}}}async function Jk(e){let{scoop:t,unit:n,fs:r,skillsFs:i}=e,a=n.workspace.root,o=e.getBrowserAPI();n.policy.filesystem.kind===`full-workspace`&&await sD(r,_r);let s=i??r,c=e.capabilityBroker??u(),l=await qk(c),d=await c.network.localNodeServer(),f=()=>d.ok,p=Wk({sudoManager:e.sudoManager,unit:n,folder:t.folder,onSudoRequest:e.onSudoRequest}),h=p?ui(r,{broker:p.broker,getPolicy:p.getPolicy,defaultDisposition:p.defaultDisposition,...p.onGrant?{onGrant:p.onGrant}:{}}):r,ee=Kk(n,r),g=ee?Lk(h,r,ee):h,_=Vk(g),te=Hk({isCone:n.policy.filesystem.kind===`full-workspace`,folder:t.folder,secretEnv:l,tmpDir:e.tmpDir,...e.lickTarget?{lickTarget:e.lickTarget}:{}}),ne=new m({fs:_,cwd:a,env:Object.keys(te).length>0?te:void 0,browserAPI:o,webhook:{hasLocalNodeServer:f,getLeaderStatus:Br},crontask:{hasLocalNodeServer:f},jshDiscoveryFs:i?s:void 0,allowedCommands:t.config?.allowedCommands,getParentJid:()=>t.jid,isScoop:()=>n.display.role===`child`,sudo:p?.shellConfig,scrubProgressLabel:yn(),gnuBash:!0,processManager:e.processManager??void 0,processOwner:e.processOwner,getCurrentShellPid:e.getTurnPid,mcpConnectionManager:e.mcpConnectionManager});return Gk.info(`AlmostBashShell initialized`,{folder:t.folder}),{shell:ne,gatedFs:_,memoryFs:g,blindReads:ee,skills:await rD(s,_r)}}const Yk={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 Xk(e){if(e)return Yk[e]??e}const Zk=51200;function Qk(e){if(e.length===0)return[];let t=e.split(`
1164
1161
  `);return e.endsWith(`
1165
- `)&&t.pop(),t}function Xk(e){return e<1024?`${e}B`:e<1048576?`${(e/1024).toFixed(1)}KB`:`${(e/1048576).toFixed(1)}MB`}function Zk(e,t={}){let n=t.maxLines??2e3,r=t.maxBytes??51200,i=Buffer.byteLength(e,`utf-8`),a=Yk(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 Qk(e,t={}){let n=t.maxLines??2e3,r=t.maxBytes??51200,i=Buffer.byteLength(e,`utf-8`),a=Yk(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=$k(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 $k(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 eA=_(`tool:bash`),tA=40960,nA=1048576,rA=`\0slicc-img:`;function iA(e){let t=On(e).filter(e=>e.kind===`image`);if(t.length===0)return{text:e,markers:new Map};let n=new Set,r=nA;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=`${rA}${r}`;i.set(e,t.marker),a+=e}else a+=`[image dropped: a newer image in this command used up the ${nA/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 aA(e){let t=On(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 oA(e){return e.replaceAll(RegExp(`${rA}\\d+`,`g`),`[image]`)}function sA(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 cA(e,t,n,r){let{text:i,markers:a}=iA(e),o=Qk(i,{maxBytes:tA});if(!o.truncated)return sA(i,a);let s=`showing the last ${Xk(o.outputBytes)} of ${Xk(o.totalBytes)} (${o.totalLines} lines)`,c=`${n}/bash-output-${r()}.txt`;try{return await t.writeFile(c,oA(i)),sA(`${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 eA.warn(`Failed to persist full bash output`,{error:e instanceof Error?e.message:String(e)}),sA(`${o.content}\n\n[Output truncated: ${s}. Re-run piping through \`head\`/\`tail\`/\`grep\`/\`sed -n\` to narrow the output.]`,a)}}const lA=new Set([`grep`,`egrep`,`fgrep`,`rg`]);function uA(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 dA(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=uA(r.name);if(i!==`command`)return i;let a=r.args[0];return a?uA(a):null}function fA(e,t,n,r){if(n!==1||r.trim())return!1;let i;try{i=dA(e.getBash().transform(t).ast)}catch{return!1}return i!==null&&lA.has(i)}function pA(e,t){let n=e.options.annotateResult?.();return n?`${t.endsWith(`
1168
- `)||t.length===0?t:`${t}\n`}${n}\n`:t}function mA(e){if(!(typeof e!=`number`||!Number.isFinite(e)||e<0))return e}function hA(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 ${tA/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 ${nA/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 gA(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 _A(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 vA(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 wA(e,n,r);await e.fs.writeFile(t,i)}).catch(e=>eA.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 yA(e,t){t===`timeout`&&(e.killedByTimeout=!0),e.job?.kill(),e.controller.abort(),e.job?.exit(null)}function bA(e,t){e.job?.exit(e.job.signal.aborted?null:t)}function xA(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 SA(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)=>eA.warn(e,{tempDir:n,error:t instanceof Error?t.message:String(t)}))),c={shell:e,fs:t,tempDir:n,options:r,defaultBackgroundAfter:mA(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)=>CA(c,t,n,e))).catch(e=>eA.warn(`Could not sweep orphaned bash jobs`,{tempDir:n,error:e})),{name:`bash`,description:hA(c.defaultBackgroundAfter),inputSchema:gA(c.defaultBackgroundAfter),execute:(e,t)=>AA(c,e,t)}}function CA(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}};eA.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){eA.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 wA(e,t,n){let r=e.options.scrubOutput;if(!r||!n)return n;try{return await r(n)}catch(e){return eA.warn(`Background bash output scrub failed; withholding output`,{jobId:t,error:e instanceof Error?e.message:String(e)}),`[output withheld: secret scrub unavailable]`}}function TA(e){return e.ok?e.result.exitCode===124&&/execution aborted/i.test(e.result.stderr):/execution aborted/i.test(e.error)}function EA(e,t){return e===void 0?`--- killed (exit ${t}) ---\n`:`--- killed after ${e}s (exit ${t}) ---\n`}async function DA(e,t,n,r,i,a,o,s){await o.flushPersist();let c=o.killedByTimeout||TA(a),l,u;if(c){let e=o.getTeedOutput();u=124,l=`${e.endsWith(`
1169
- `)||e.length===0?e:`${e}\n`}${EA(s,u)}`}else if(a.ok)l=xi([a.result.stdout,a.result.stderr].filter(Boolean).join(``)||`(exit code: ${a.result.exitCode})`,a.result.pipeStatus),u=a.result.exitCode;else{let e=o.getTeedOutput();u=1,l=e?`${e.endsWith(`
1170
- `)?e:`${e}\n`}Shell error: ${a.error}`:`Shell error: ${a.error}`}let d=await wA(e,t,pA(e,l)),f;try{await e.fs.writeFile(i,d),f=i}catch(e){eA.warn(`Failed to persist background bash output`,{jobId:t,outputPath:i,error:e instanceof Error?e.message:String(e)})}if(!e.options.fireLick){eA.warn(`Background bash job finished with no lick sink`,{jobId:t,exitCode:u});return}let p=Qk(aA(d),{maxBytes:2048});e.options.fireLick({type:`bash`,bashJobId:t,bashCommand:r,bashExitCode:u,...n===void 0?{}:{bashJobPid:n},resultPath:f,preview:p.content,...e.options.targetScoop?{targetScoop:e.options.targetScoop}:{},timestamp:new Date().toISOString(),body:{jobId:t,pid:n??null,command:r,exitCode:u,resultPath:f??null}})}function OA(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=>eA.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(()=>yA(t,`timeout`),d*1e3);return t.settled.then(r=>(f!==void 0&&clearTimeout(f),bA(t,t.killedByTimeout?124:r.ok?r.result.exitCode:1),DA(e,o,s,n,c,r,t,i))).catch(e=>eA.error(`Background bash delivery failed`,{jobId:o,error:e})).then(u),eA.info(`Bash command detached to background`,{command:n,jobId:o,pid:s,killAfter:d}),xA(o,s,r,c,i)}async function kA(e,t,n){eA.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=pA(e,xi(r,n.pipeStatus)),{content:await cA(r,e.fs,e.tempDir,e.nextOutputSeq),isError:n.exitCode!==0&&!fA(e.shell,t,n.exitCode,n.stderr)}}async function AA(e,t,n){let r=t.command,i=mA(t.timeout),a=mA(t.background_after)??e.defaultBackgroundAfter;eA.debug(`Execute`,{command:r,timeoutSeconds:i,backgroundAfter:a});let o=vA(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?(yA(o,`timeout`),eA.warn(`Bash command timed out`,{command:r,timeoutSeconds:c,pid:o.job?.pid}),_A(c)):t===`elapsed`?OA(e,o,r,c,i,a):(bA(o,t.ok?t.result.exitCode:1),t.ok?await kA(e,r,t.result):(eA.error(`Error`,{command:r,error:t.error}),{content:`Shell error: ${t.error}`,isError:!0}))}finally{l!==void 0&&clearTimeout(l),o.releaseTurnSignal()}}const jA={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 MA(e){if(!e||typeof e!=`object`||Array.isArray(e))return!1;let t=e;return typeof t.oldText==`string`&&typeof t.newText==`string`}function NA(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:MA(e)&&(t.edits=[e])}catch{}else MA(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 PA(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:jA,prepareArguments:NA,async execute(n,r){let{executePiEdit:i}=await import(`./pi-edit-execution-BWAD_gyT.js`);return i(e,t,n,r)}}}async function FA(e,t,n){if(Hr(Nn(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 IA=_(`tool:fs`);function LA(e,t=`/workspace`){return[RA(e),zA(e),PA(e,t)]}function RA(e){return{name:`read_file`,description:`Read a file's contents. Output is capped at 2000 lines or ${Jk/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;IA.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=Zk(c.join(`
1172
- `));if(u.firstLineExceedsLimit)return{content:`[Line ${s} is ${Xk(new TextEncoder().encode(t[o]??``).length)}, exceeds ${Xk(Jk)} limit. Use bash: sed -n '${s}p' ${n} | head -c ${Jk}]`};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} (${Xk(Jk)} 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 IA.error(`Read failed`,{path:n,error:t}),{content:t,isError:!0}}}}}function zA(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;IA.debug(`Write`,{path:n,contentLength:r.length});try{await e.writeFile(n,r);let t=await FA(e,n,r);return t?(IA.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 IA.error(`Write failed`,{path:n,error:t}),{content:t,isError:!0}}}}}const BA={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 VA(e,t){return{name:hi,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:BA,async execute(n){let{executeMemoryWrite:r}=await import(`./memory-write-execute-BQwfbMoU.js`);return r(e,t,n)}}}function HA(){return null}const UA=_(`tool:request-secret`);async function WA(e,t){let n=HA();if(n)return n(e);let r=t.callPanelRpc??await GA();return r?r(e):{stored:!1,reason:`unavailable`}}async function GA(){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 KA(e){try{return e.getProvider?.()||void 0}catch(e){UA.warn(`could not resolve this unit’s provider for the secret prompt`,{error:e instanceof Error?e.message:String(e)});return}}function qA(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 JA(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 YA(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 XA(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:qA(t.domains),persist:t.persist===!0,requester:e.requester,provider:KA(e)},a;try{a=await WA(i,e)}catch(e){let t=e instanceof Error?e.message:String(e);return UA.error(`secret request failed`,{name:n,error:t}),{content:`The secret prompt failed: ${t}`,isError:!0}}if(!a.stored)return{content:YA(a),isError:!0};let o=ZA(a.name,a.maskedValue,e);return UA.info(`secret stored via request_secret`,{name:a.name,persisted:a.persisted}),{content:JA(a,o)}}}}function ZA(e,t,n){if(!n.setEnv||!t||!bi(e))return!1;try{return n.setEnv(e,t),!0}catch(t){return UA.warn(`could not inject the masked value into the shell env`,{name:e,error:t instanceof Error?t.message:String(t)}),!1}}const QA=_(`scoop-management-tools`),$A=`cross_cone`;function ej(e){return Hn(e.getScoops(),e.scoop.jid)}function tj(e){let t=new Set;for(let n of ej(e))n.jid!==e.scoop.jid&&n.parentJid!==null&&t.add(n.jid);return t}function nj(e){let t=Kn(e.getScoops());return t!==void 0&&t.jid===e.scoop.jid}function rj(e){let t=e.getScoops(),n=tj(e),r=nj(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=cr(t,e);a.kind!==`cycle`&&i.push({scoop:e,relation:a.kind===`root`?`foreign`:`inherited`})}return i}function ij(e){return t=>t.folder===e||t.name===e}function aj(e,t){let n=rj(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 oj(e,t){let n=[],r=[];for(let i of e){let e=aj(i,t);e?n.push(e):r.push(i)}return{resolved:n,unknown:r}}function sj(e,t){return Wn(e.getScoops(),t.scoop)?.folder??`unknown`}function cj(e,t){return t.relation===`inherited`?`inherited (its owning cone is gone)`:`owned by cone "${sj(e,t)}"`}function lj(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 ${cj(r,e)}`).join(`; `)}. Pass ${$A}: true to act on it anyway.`,isError:!0}}function uj(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 dj=[`command`,`read`,`write`,`secret`];function fj(e){return`${_e(e,{maxLen:50})}-scoop`}function pj(e){return e===void 0?{ok:!0}:br(e)?{ok:!0,level:e}:{ok:!1,content:`Invalid thinking level "${e}". Must be one of: ${xr.join(`, `)}.`,isError:!0}}function mj(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 hj(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 gj(e,t){let n=rj(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 _j(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 vj(e,t){let{text:n,sender:r}=e;return t.onSendMessage(n,r),QA.info(`Message sent`,{scoopFolder:t.scoop.folder,textLength:n.length}),{content:`Message sent.`}}function yj(e){let{kind:t,detail:n,suggested_pattern:r,reason:i}=e;if(!dj.includes(t))return{ok:!1,result:{content:`Invalid sudo kind "${t}". Must be one of: ${dj.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`?Si(i):``;return{ok:!0,request:{kind:t,detail:n,...r?{suggestedPattern:r}:{},...a?{reason:a}:{}}}}function bj(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 xj(e,t){let n=yj(e);if(!n.ok)return n.result;try{let e=await t.onSudoRequest(n.request);return QA.info(`Sudo request resolved`,{scoopFolder:t.scoop.folder,kind:n.request.kind,decision:e.decision}),{content:bj(e)}}catch(e){return{content:`sudo_request failed: ${e instanceof Error?e.message:String(e)}`,isError:!0}}}async function Sj(e,t){let{scoop_name:n,prompt:r,cross_cone:i}=e;if(ij(n)(t.scoop))return{content:`Cannot feed yourself.`,isError:!0};let a=aj(n,t);if(!a)return gj([n],t);let o=lj([a],i,`feed "${n}"`,t);if(o)return o;try{await t.onFeedScoop(a.scoop.jid,r),QA.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 (${$A}: 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 Cj(e,t){return t.relation===`own`?``:t.relation===`inherited`?` [INHERITED]`:` [FOREIGN: ${sj(e,t)}]`}async function wj(e){let t=new Map(rj(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 _j(n,e.getScoopTabState,r?Cj(e,r):``)}).join(`
1175
- `)}`}}function Tj({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}:{},...Ej(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 Ej(e,t,n,r,i){let a=`/scoops/${t}/`;return{visiblePaths:r??(e===`private`?[]:n),writablePaths:i??(e===`private`?[a]:[a,`/shared/`])}}async function Dj(e,t,n,r,i){try{await i(e.jid,t)}catch(e){let t=e instanceof Error?e.message:String(e);return QA.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 Oj(e,t){let n=t.getTurnSignal?.();if(n?.aborted)return{content:`The parent turn was stopped.`,isError:!0};let{name:r,model:i,prompt:a,visiblePaths:o,writablePaths:s,workspaceMode:c,allowedCommands:l,thinking:u,background_after:d,canCreateChildren:f}=e,p=Rn(c);if(!p.ok)return{content:p.error,isError:!0};let m=pj(u);if(!m.ok)return{content:m.content,isError:m.isError};let h=mj(d);if(!h.ok)return{content:h.content,isError:!0};let ee=hj(i,t.resolveModelSelection);if(!ee.ok)return{content:ee.content,isError:ee.isError};let g=fj(r),_=ej(t).find(e=>e.jid!==t.scoop.jid&&e.parentJid!==null&&(e.name===r||e.folder===g));if(_)return{content:`A scoop named "${_.name}" (${_.folder}) already exists in your scoops. Use feed_scoop to give it another task, or drop_scoop first.`,isError:!0};let te=Xn(g,t.getScoops().map(e=>e.folder));try{let e=Tj({name:r,folder:te,model:ee.modelId,modelProviderId:ee.providerId,visiblePaths:o,writablePaths:s,workspaceMode:p.mode,allowedCommands:l,thinkingLevel:m.level,backgroundAfterSeconds:h.seconds,parentJid:t.scoop.jid,defaultVisibleRoots:gr(yr(t.scoop)),canCreateChildren:f===!0}),i=await t.onScoopScoop(e);if(n?.aborted)return await t.onDropScoop?.(i.jid),{content:`The parent turn was stopped before the scoop could start.`,isError:!0};if(QA.info(`Scoop created`,{name:r,folder:te}),a&&t.onFeedScoop){let e=await Dj(i,a,r,te,t.onFeedScoop);return n?.aborted?(await t.onDropScoop?.(i.jid),{content:`The parent turn was stopped while starting the scoop.`,isError:!0}):e}return{content:`Scoop "${r}" 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 kj(e,t){let{scoop_name:n,cross_cone:r}=e;if(ij(n)(t.scoop))return{content:`Cannot drop yourself.`,isError:!0};let i=aj(n,t);if(!i)return gj([n],t);let a=lj([i],r,`drop "${n}"`,t);if(a)return a;try{return await t.onDropScoop(i.scoop.jid),QA.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 Aj(){return{content:`scoop_names must be a non-empty array.`,isError:!0}}async function jj(e,t){let{scoop_names:n,cross_cone:r}=e;if(!Array.isArray(n)||n.length===0)return Aj();let{resolved:i,unknown:a}=oj(n,t);return i.length===0?gj(a,t):lj(i,r,`mute these scoops`,t)||(t.onMuteScoops(i.map(e=>e.scoop.jid)),QA.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 Mj(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 Nj(e,t){let{scoop_names:n,cross_cone:r}=e;if(!Array.isArray(n)||n.length===0)return Aj();let{resolved:i,unknown:a}=oj(n,t);if(i.length===0)return gj(a,t);let o=lj(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);QA.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(...Mj(l,c)),{content:u.join(`
1176
- `)}}function Pj(e,t){return!Array.isArray(e)||e.length===0?Aj():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 Fj(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 Ij(e,t){let{scoop_names:n,timeout_ms:r,cross_cone:i}=e,a=Pj(n,r);if(a)return a;let{resolved:o,unknown:s}=oj(n,t);if(o.length===0)return gj(s,t);let c=lj(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 QA.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:Fj(f,s,p,r)}}function Lj(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 Rj(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`?Si(a):``,s={...r?{decision:`always`,...i?{pattern:i}:{}}:{decision:`allow`},...o?{note:o}:{}};try{let e=await t.onSudoResolve(n,s);return e.settled?(QA.info(`Lick confirmed`,{id:n,always:!!r,persisted:e.persisted}),e.message?{content:e.message}:{content:Lj(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 zj(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`?Si(r):``;try{let e=await t.onSudoResolve(n,{decision:`deny`,...i?{note:i}:{}});return e.settled?(QA.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 Bj(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 Vj(e,t){let{content:n}=e;try{return await t.onSetGlobalMemory(n),QA.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 Hj(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=>vj(t,e)}}function Uj(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:[...dj],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=>xj(t,e)}}function Wj(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.`},[$A]:uj(`feed`)},required:[`scoop_name`,`prompt`]},execute:t=>Sj(t,e)}}function Gj(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:()=>wj(e)}}function Kj(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:[...xr],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=>Oj(t,e)}}function qj(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.`},[$A]:uj(`drop`)},required:[`scoop_name`]},execute:t=>kj(t,e)}}function Jj(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"]).`},[$A]:uj(`mute`)},required:[`scoop_names`]},execute:t=>jj(t,e)}}function Yj(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"]).`},[$A]:uj(`unmute`)},required:[`scoop_names`]},execute:t=>Nj(t,e)}}function Xj(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."},[$A]:uj(`wait on`)},required:[`scoop_names`]},execute:t=>Ij(t,e)}}function Zj(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=>Rj(t,e)}}function Qj(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=>zj(t,e)}}function $j(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:()=>Bj(e)}}function eM(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=>Vj(t,e)}}function tM(e){let t=[],n=Un(e.scoop);return Bn(e.scoop)||(t.push(Hj(e)),e.onSudoRequest&&t.push(Uj(e))),n.canCreateChildren&&e.onScoopScoop&&t.push(Kj(e)),n.canManageChildren&&(e.onFeedScoop&&t.push(Wj(e)),t.push(Gj(e)),e.onDropScoop&&t.push(qj(e)),e.onMuteScoops&&t.push(Jj(e)),e.onUnmuteScoops&&t.push(Yj(e)),e.onScheduleScoopWait&&t.push(Xj(e)),e.onSudoResolve&&(t.push(Zj(e)),t.push(Qj(e))),e.onListSudoRequests&&t.push($j(e)),e.onSetGlobalMemory&&e.getGlobalMemory&&t.push(eM(e))),t}var nM=e({buildScoopTools:()=>aM,getOrCreateConnectionManager:()=>pM});const rM=_(`scoop-context`);function iM(e){return{currentGate(){let t=e.getTurnGuestGates();if(t.length!==0)return{async approve(n,r){let{approveToolCallForGuests:i}=await import(`./guest-tool-gate-oF9u91qg.js`);return i(t,n,r,e.callbacks.approveGuestToolCall)}}}}}async function aM(e){let{scoop:t,unit:n,callbacks:r}=e,i=tM({scoop:t,getTurnSignal:e.getTurnSignal,onSendMessage:r.onSendMessage,getScoops:r.getScoops,getScoopTabState:r.getScoopTabState,onFeedScoop:r.onFeedScoop,onScoopScoop:r.onScoopScoop,resolveModelSelection:ce,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=LA(e.gatedFs,n.workspace.root),o=e.blindReads??null,s=VA(e.memoryFs,{readSessionCount:async()=>{let{readSessionCount:t}=await Promise.resolve().then(()=>MT);return t(e.fs)},...o?{blindPaths:()=>o.outsidePaths()}:{}}),c=[...a,s,SA(e.shell,e.fs,n.workspace.scratch,{defaultBackgroundAfterSeconds:t.config?.backgroundAfterSeconds,targetScoop:e.lickTarget,jobHost:{spawn:t=>e.spawnBashJob(t)},scrubOutput:yn(),...o?{annotateResult:()=>o.takeNote()}:{},fireLick:e=>{let n=globalThis.__slicc_lick_handler;return n?(n(e),!0):(rM.warn(`No lick handler for background bash completion`,{folder:t.folder}),!1)}}),...i,XA({requester:t.assistantLabel||t.name,setEnv:(t,n)=>e.shell.setMaskedEnvVar(t,n),getProvider:()=>qk(nk(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:yn()},u=iM(e),d=e.processManager?bn(c,{processManager:e.processManager,owner:e.processOwner,getParentPid:e.getTurnPid},l,u):bn(c,void 0,l,u),f=uM(await oM(e.fs,t),u,l);return[...d,...f]}async function oM(e,t){try{if(t.parentJid!==null)return[];let{listServers:n}=await import(`./store-CNmOj-Kr.js`).then(e=>e.r),r=await n(e),i=Object.entries(r);if(i.length===0)return[];let a=i.filter(([,e])=>{let t=e.exposure??`codemode`;return t===`direct`||t===`codemode`||t===`codemode-deferred`||dM(e)});if(a.length===0)return[];let{toAgentTools:o}=await import(`./agent-tools-CbAMai1C.js`),s=await pM(),c=[];for(let[t,n]of a)try{let{connection:r,transport:i}=await s.connect(t,n);i!==n.transport&&(n.transport=i,import(`./store-CNmOj-Kr.js`).then(e=>e.r).then(({setServer:r})=>r(t,n,e)).catch(()=>{}));let a=n.tools??await r.listTools()??[],l=o({serverName:t,tools:a,connection:r,exposure:n.exposure,toolExposure:n.toolExposure,writeOverflow:async(t,n)=>{try{await e.mkdir(`/tmp/mcp`,{recursive:!0}),await e.writeFile(`/tmp/mcp/${t}.txt`,n)}catch{}}});c.push(...l);let u=await sM(t,a,r,n);u&&c.push(u)}catch(e){rM.warn(`failed to load MCP tools for agent`,{server:t,error:e instanceof Error?e.message:String(e)})}return c}catch(e){return rM.debug(`MCP agent tools unavailable`,{error:e instanceof Error?e.message:String(e)}),[]}}async function sM(e,t,n,r){try{let{createCodemodeAgentTool:i}=await import(`./codemode-tool-BQX4yxNo.js`);return i({serverName:e,tools:t,connection:n,exposure:r.exposure,toolExposure:r.toolExposure})}catch(t){return rM.debug(`codemode tool unavailable for server`,{server:e,error:t instanceof Error?t.message:String(t)}),null}}async function cM(e,t,n,r){let i=n.currentGate();if(!i)return null;if(r?.aborted)return{content:[{type:`text`,text:`${e}: not approved (guest-caused turn).`}],details:void 0};let a;try{a=await i.approve(e,t)}catch{a=!1}return!a||r?.aborted?{content:[{type:`text`,text:`${e}: not approved (guest-caused turn).`}],details:void 0}:null}async function lM(e,t){if(t)for(let n=0;n<e.content.length;n++){let r=e.content[n];if(r.type===`text`&&`text`in r&&typeof r.text==`string`)try{let i=await t(r.text);i!==r.text&&(e.content[n]={type:`text`,text:i})}catch{}}}function uM(e,t,n){return e.map(e=>({...e,async execute(r,i,a,o){let s=await cM(e.name,i,t,a);if(s)return s;let c=await e.execute(r,i,a,o);return await lM(c,n.scrubToolResult),c}}))}function dM(e){return e.toolExposure?Object.values(e.toolExposure).some(e=>e===`direct`||e===`codemode`||e===`codemode-deferred`):!1}let fM=null;async function pM(){if(fM)return fM;let{McpConnectionManager:e}=await import(`./connection-manager-DiSK2DFK.js`);return fM=new e({getAuthHeader:async e=>{try{let{getOAuthAccountInfo:t}=await import(`./account-store-BbAiM6Dd.js`).then(e=>e.t),n=t(`mcp:${e}`);return n?`Bearer ${n.token}`:null}catch{return null}}}),fM}const mM=_(`scoop-context`);async function hM(e){let{scoop:t,unit:n,fs:r,callbacks:i}=e,a=e.getTmpDir();mM.info(`Filesystem ready`,{folder:t.folder}),await xk(r,t,n,a);let{shell:o,gatedFs:s,memoryFs:c,blindReads:l,skills:u}=await Gk({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(),mcpConnectionManager:e.mcpConnectionManager});e.onShellReady(o);let d=await aM({getTurnGuestGates:e.getTurnGuestGates,getTurnSignal:e.getTurnSignal,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 $O(r,n,()=>i.getGlobalMemory());if(!tk(t))return mM.info(`ScoopContext init deferred — no API key yet`,{folder:t.folder}),{kind:`deferred`};let m=rk(t,n),h=ok(t,n,p,f,u),ee=await e.sessions.restore(),{streamWithSessionId:g,compactFn:_,getCompactionApiKey:te}=await Ck(m,{scoop:t,unit:n,coneJid:e.coneJid,getModelApiKey:()=>tk(t),getEffortOverride:e.getEffortOverride,appendConeMemory:i.appendConeMemory,onCompactionStateChange:(e,t)=>i.onCompactionStateChange?.(e,t),onBeforeCompaction:e.onBeforeCompaction});if(e.isDisposed())return{kind:`abandoned`};let ne=Zn(t);return{kind:`ready`,agent:yk({model:m,tools:d,systemPrompt:h,messages:ee,thinkingLevel:ck(lk()??ne.level,m),getApiKey:()=>tk(t)??void 0,transformContext:_,streamFn:g,onContextCompacted:()=>e.sessions.persistNow(),captureStructuredOutput:t.config?.structuredOutputSchema?e.onStructuredOutput:void 0}),compactFn:_,getCompactionApiKey:te,effortOverride:ne.effortOverride,toolCount:d.length}}const gM=_(`scoop-context`);var _M=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 gM.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=uT(t);if(t&&(this.createdAt=t.createdAt),n.length===0)return[];let r=xn(n);return gM.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=>{gM.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){gM.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 vM(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 yM(e,t,n){!t||!e||(n.lastError&&!n.aborted?e.exit(t.pid,1):e.exit(t.pid,n.aborted?null:0))}function bM(e,t,n,r){t&&e?e.signal(t.pid,n):r?.abort()}const xM=_(`scoop-context`);var SM=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;xM.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)&&(xM.error(`Agent error`,{folder:this.deps.folder,error:r,attempt:t,isRetryable:BO(r)}),!!(t<3&&(await VO(CM(t),n)||this.deps.isDisposed())))}handleNonRetryableError(e){return zO(e)?(xM.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 to(e)?(xM.error(`Stale-asset import failure; requesting page reload`,{folder:this.deps.folder,error:e}),io(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(!BO(e)||t>=3)return!1;let r=CM(t);return xM.warn(`Retryable agent error, will retry`,{folder:this.deps.folder,error:e,attempt:t,maxRetries:3,delayMs:r}),!await VO(r,n)&&!this.deps.isDisposed()}fail(e,t){AO(`llm`,t),this.deps.setStatus(`error`),this.deps.onFatalError?this.deps.onFatalError(e):this.deps.onError(t)}};function CM(e){return 1e3*2**(e-1)}function wM(e,t,n,r){let i=e.state?.isStreaming??!1;if(r.isProcessing||i){xM.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 TM=_(`scoop-context`);var EM=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;mcpConnectionManager;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=mr(e),this.owner={kind:Jn(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 _M({store:r??null,canonical:c?{store:c,identity:Lr(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 gk({getConfig:()=>this.scoop.config,isDisposed:()=>this.disposed,onTripped:()=>{this.setStatus(`error`),this.stop()}}),this.bashJobs=new JO({processManager:this.processManager,cwd:this.unit.workspace.root,owner:this.owner,getTurnPid:()=>this.currentTurnProcess?.pid,folder:e.folder}),this.imageRecovery=new XO({getAgent:()=>this.agent,onResponse:(e,t)=>this.callbacks.onResponse(e,t),onError:e=>this.callbacks.onError(e),folder:e.folder}),this.overflow=new hk({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 SM({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 Bk(this.unit,this.scoop,O(this.callbacks.getScoops())[0]?.jid)}ownTmpDir(){return dr(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`);if(!this.mcpConnectionManager){let{getOrCreateConnectionManager:e}=await Promise.resolve().then(()=>nM);this.mcpConnectionManager=await e()}let e=await hM({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,getTurnSignal:()=>this.promptAbortController?.signal,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},mcpConnectionManager:this.mcpConnectionManager,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`),TM.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);TM.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(ak(this.scoop)),!1)}cleanupPromptState(e,t,n,r,i){if(i!==void 0&&i!==this.turnEpoch){this.currentTurnProcess!==t&&yM(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),yM(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(wM(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=vM(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(){bM(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(){if(this.agent){let e=un(this.agent.state.messages);this.agent.state.messages=e?[e]:[]}}async clearSession(e={}){this.sessionGeneration++,this.idleCompaction?.cancel(),this.clearMessages(),await this.sessions.clear(),await this.settleLiveSnapshot(e.discardLiveSnapshot===!0)}idleCompactionEnabled(){return Ur(this.scoop)?!0:this.unit.parentId===null&&Ee(`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-DJzPVZ_I.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:Sn,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&&!Ee(`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-Ce33tCWW.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-DvXRkpYv.js`).then(e=>e.r).then(n=>n.scheduleLiveDeltaCuration({vfs:e,cone:t})).catch(e=>{TM.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-Ce33tCWW.js`);e?await t(this.fs,this.scoop.folder):await n(this.fs,this.scoop.folder)}catch(t){TM.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 ik(this.agent?.state?.messages??[],this.scoop)}getSessionId(){return this.sessions.sessionId}getFS(){return this.fs}getShell(){return this.shell}updateModel(){this.agent&&(this.activeEffortOverride=dk(this.agent,this.scoop))}async reloadSkills(){this.agent&&await pk(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 TM.info(`Thinking level stored for a deferred agent`,{requested:e}),`off`;if(lk())return this.agent.state.thinkingLevel;this.activeEffortOverride=t;let n=fk(this.agent,e);return TM.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(),bM(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 WO(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`&&TM.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||HO(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 DM=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 DO(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 Wn(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 Pr))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!=null)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=mr(t).policy.filesystem;if(a.kind===`restricted`){let e=Rn(a.mode);if(!e.ok)throw Error(e.error)}let o=a.kind===`full-workspace`?r:new Pr(r,[...a.writablePaths],[...a.visiblePaths],`sudo-delegated`,{includeMounts:Ln(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 EM(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&&Ur(o)&&(await this.syncGelatiereModel(),!ir(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=Kn(t.values())?.jid;if(or(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=Xn(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&&rO(`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}Kn(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(Ur(e)){let t=Kn(this.deps.getScoops().values());Yn(e,t?ir(t):void 0);return}if(qn(e))return;let t=e.parentJid?this.deps.getScoops().get(e.parentJid):void 0,n=(t?ir(t):void 0)??KD();n&&Yn(e,n)}async unregister(e){let t=this.deps.getScoops(),n=Kn(t.values())?.jid===e;for(let n of lr(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(Ir(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(Ur(n))return await this.syncGelatiereModel(),!1;let r=Kn(this.deps.getScoops().values())?.jid===e,i=n.model;Yn(n,t),this.getContext(e)?.updateModel();try{await this.deps.db.saveScoop(n)}catch(t){return Yn(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(Ur);if(!t)return!1;let n=Kn(e.values()),r=n?ir(n):void 0,i=ir(t),a=r?i?.provider===r.provider&&i.id===r.id:qn(t)===void 0;if(!a){let e=t.model?{...t.model}:void 0,i=t.config?{...t.config}:void 0;Yn(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;nr(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}=mr(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 Gn(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:yr(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,Bn(t)?void 0:e):void 0,onListSudoRequests:o.canResolveApprovals?()=>i.listPendingSudoRequests(Bn(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}),rO(`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}),rO(`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`),mr(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 OM=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}`);rO(`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=qx(Yx(Kx(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=iy(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=>ay(e.attachments));this.messageQueues.set(e,[]);let d=s[s.length-1],f=qx(Yx(Kx(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`),kM={decision:`deny`};var AM=class{scoops=new Map;workUnits=new mx(this);container;callbacks;config;scheduler=null;sharedFs=null;memoryStore=new uD({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 wO({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 SO({getScoops:()=>this.scoops,getContexts:()=>this.lifecycle.getContexts(),mergeFoldedIntoFrozen:(e,t)=>this.mergeFoldedCostIntoFrozen(e,t)});completionService=new uO({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 ZD({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=>Wx(e),saveMessage:e=>Hx(e)});lickRegistry=new HD({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 OM({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=>Hx(e),deleteMessage:e=>Ux(e),clearMessagesForScoop:e=>Vx(e),clearAllMessages:()=>Bx(),getMessagesSince:(e,t,n)=>Xx(e,t,n),setState:(e,t)=>nS(e,t)},isExternalLickChannel:qb});constructor(e,t,n={name:`sliccy`,triggerPattern:/^@sliccy\b/i}){this.container=e,this.callbacks=t,this.config=n,this.lifecycle=new DM({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=>Lx(e),deleteScoop:e=>zx(e)},getLickManager:()=>this.lickManager,buildActiveLicksError:(e,t,n)=>LD(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 qD(async n=>(await this.ensureRootStructure(),n(),this.sudoManager=new oC({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 QS(e,t),await this.llmsTxtIgnorePolicy.init(),n(),this.modelPolicyFile=new GD(e,t),await this.modelPolicyFile.init(),n(),Rx()),n,{stagePrefix:`orchestrator-init`})}setOnConversationsReady(e){this.onConversationsReady=e}async openSharedFilesystem(e,t){let n=await qD(e=>Nr.create({dbName:`slicc-fs`,onRepairProgress:e}),e);this.sharedFs=n,this.sessionStore=new cy,this.conversationStore=new ST;let{TurnJournal:r}=await import(`./turn-journal-DJcMfuEK.js`);this.turnJournal=new r,this.interruptedTurns=await this.turnJournal.readAll();let i=new Mr;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 rS();let{sharedFs:n,fsWatcher:r}=await this.openSharedFilesystem(e,t),i=await this.initPolicyLayerAndLoadRecords(n,r,e),a=Object.values(i).find(e=>tr(e))?.jid;for(let e of Object.values(i)){await this.backfillParent(e,a),or(e),this.migrateScoopConfig(e,Object.values(i)),this.scoops.set(e.jid,e),this.messageRouter.ensureQueue(e.jid);let t=await tS(`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 YD({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),Wr(e=>this.getSessionCostsForCommand(e)),Gr(async()=>{let{refreshBudgetWindow:e}=await Promise.resolve().then(()=>uy);return e()}),this.unregisterExportService=l(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 eO(t,4,t=>this.restoreScoopContext(t,e));let r=eO(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 Fb;try{await aT({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(Lr(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=tr(e)?null:t??null;try{await Lx(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=>!qn(e)&&!Ur(e));if(e.length>0){let t=KD(),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?ir(n):void 0)??t;if(r){Yn(e,r);try{await Lx(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=`${hr.root}/`,r=gr(vr(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-4QZHpA9L.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:yr,approveAsUser:async e=>{let t=this.sudoManager;return t?t.approve(e):($.warn(`Guest approval before SudoManager init — failing closed`),kM)}})}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 Lx(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 sr(this.scoops.values(),t)??this.defaultRoot()}ownerRootOrDefault(e){let t=e===void 0?void 0:this.scoops.get(e);return Wn(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 Nr.create({dbName:`slicc-fs`,wipe:!0}),this.fsWatcher&&this.sharedFs.setWatcher(this.fsWatcher),await this.ensureRootStructure(),await this.memoryStore.ensureGlobalMemory(),await iD(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 oC({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 QS(this.sharedFs,this.fsWatcher),await this.llmsTxtIgnorePolicy.init(),this.modelPolicyFile?.dispose(),this.modelPolicyFile=new GD(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 Wx(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-BvaORnO5.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.completionService.allowCompletion(e),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 Vn(this.scoops.values(),e))this.completionService.cancelScheduledWaits(t),this.completionService.suppressCompletionUntilNextPrompt(t),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-COVtB6nC.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(()=>IC),r=await n(this.sharedFs);return[...t,...r.map(Kr)]}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 vT(this.conversationStore):null,t=this.sharedFs;return new yw({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:Vw(),snapshotStore:{read:e=>Nw(t,e),write:(e,n,r)=>Mw(t,e,n,r)},vfs:t,getActiveSessionInfo:()=>{let e=this.defaultRoot();return{id:e?.jid??`session-${Date.now()}`,title:e?.name??`Active Session`}},version:`6.228.0`})}};const jM=_(`workflow-run-manager`),MM=`/shared/workflow-runs`,NM=1e3;function PM(e,t){if(t===void 0)return{origin:`terminal`};let n=e.getStartingRoot(t);return n?{origin:`cone`,lickTarget:n.lickTarget}:{origin:`scoop`}}function FM(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){jM.warn(`observeRun handler threw`,e)}},i=(e,n)=>BM(e,n,t,()=>r(n));async function a(a){let c=a.runId??e.makeRunId(),l=a.sentinel,u=PM(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),RM(t,n);let f=i(a.ctx,c),p=zM(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=>jM.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=`${MM}/${n}.json`,u=new Date().toISOString();try{await e.sharedFs.mkdir(MM,{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);jM.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`?LM(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){jM.warn(`observeRun handler threw on initial state`,e)}return()=>i.delete(r)}}}function IM(e){let t=FM(e);return globalThis[d]=t,jM.info(`workflow run manager published on globalThis.__slicc_workflows`),t}function LM(e){return((typeof e==`string`?e:JSON.stringify(e))??`null`).slice(0,200)}function RM(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 zM(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 BM(e,t,n,r){let i=e.exec;if(!i)return e;let a=(async(e,a)=>e===`__wf_progress`?VM(n,t,a?.args??[],r):e===`agent`?HM(n,t,()=>i(e,a),r):i(e,a));return a.spawn=e.exec.spawn,{...e,exec:a}}function VM(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>NM&&i.logs.splice(0,i.logs.length-NM),r()}return{stdout:``,stderr:``,exitCode:0}}async function HM(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 UM=new Set([`catalog`,`com`,`html`,`http`,`https`,`json`,`known`,`llms`,`net`,`org`,`txt`,`well`,`www`]);function WM(e,t,n){let r=GM(e);if(r.length===0)return;let i,a=0,o=!1;for(let e of t){let t=JM(n(e),r);t>a?(i=e,a=t,o=!1):t>0&&t===a&&(o=!0)}return o?void 0:i}function GM(e){let t=new Map;return KM(t,e.discoveryOrigin),KM(t,e.discoveryUrl),[...t.values()]}function KM(e,t){if(t){qM(e,t.toLowerCase().replace(/\/$/,``),12,`substring`);try{let n=new URL(t),r=n.hostname.toLowerCase().replace(/^www\./,``);qM(e,r,8,`hostname`);for(let t of`${r}${n.pathname}${n.search}`.split(/[^a-z0-9]+/).filter(e=>e.length>=4&&!UM.has(e)))qM(e,t,1,`substring`)}catch{}}}function qM(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 JM(e,t){let n=e.slice(-8),r=0;for(let[e,i]of n.entries()){let a=XM(i);if(a.length===0)continue;let o=8-(n.length-1-e);for(let e of t)YM(a,e)&&(r+=e.weight*o)}return r}function YM(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 XM(e){try{return JSON.stringify(e)?.toLowerCase()??``}catch{return``}}function ZM(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 QM=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=tN(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:eN,kind:`file`,size:this.renderTable().length,lastModified:Date.now()}),t}if(t.length===1){if(t[0]===eN)throw new k(`ENOTDIR`,`not a directory`,e);let n=nN(t[0]);if(n===null||!this.pidExists(n))throw new k(`ENOENT`,`no such file or directory`,e);return $M.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=tN(e);if(t.length===1&&t[0]===eN)return new TextEncoder().encode(this.renderTable());if(t.length!==2)throw new k(`EISDIR`,`is a directory`,e);let n=nN(t[0]);if(n===null||!this.pidExists(n))throw new k(`ENOENT`,`no such file or directory`,e);let r=t[1];if(!$M.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=tN(e);if(t.length===0)return{kind:`directory`,size:0,mtime:0};if(t.length===1){if(t[0]===eN)return{kind:`file`,size:this.renderTable().length,mtime:Date.now()};let n=nN(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=nN(t[0]);if(n===null||!this.pidExists(n))throw new k(`ENOENT`,`no such file or directory`,e);let r=t[1];if(!$M.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:sN(e.status),status:e.status,argv:e.argv.join(` `),cwd:e.cwd,owner:cN(e),startedAt:e.startedAt,finishedAt:e.finishedAt,exitCode:e.exitCode}))};return JSON.stringify(e)+`
1179
- `}renderProcFile(e,t){if(e===1)return lN(t);let n=this.pm.get(e);switch(t){case`status`:return rN(n);case`cmdline`:return iN(n);case`cwd`:return aN(n);case`stat`:return oN(n)}}};const $M=[`status`,`cmdline`,`cwd`,`stat`],eN=`table`;function tN(e){return e.replace(/^\/+/,``).replace(/\/+$/,``).split(`/`).filter(Boolean)}function nN(e){let t=Number.parseInt(e,10);return!Number.isFinite(t)||String(t)!==e?null:t}function rN(e){let t=[`Name:\t${e.kind}`,`Pid:\t${e.pid}`,`PPid:\t${e.ppid}`,`State:\t${sN(e.status)} (${e.status})`,`Owner:\t${cN(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(`
1162
+ `)&&t.pop(),t}function $k(e){return e<1024?`${e}B`:e<1048576?`${(e/1024).toFixed(1)}KB`:`${(e/1048576).toFixed(1)}MB`}function eA(e,t={}){let n=t.maxLines??2e3,r=t.maxBytes??51200,i=Buffer.byteLength(e,`utf-8`),a=Qk(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(`
1163
+ `),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 tA(e,t={}){let n=t.maxLines??2e3,r=t.maxBytes??51200,i=Buffer.byteLength(e,`utf-8`),a=Qk(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=nA(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(`
1164
+ `),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 nA(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 rA=_(`tool:bash`),iA=40960,aA=1048576,oA=`\0slicc-img:`;function sA(e){let t=On(e).filter(e=>e.kind===`image`);if(t.length===0)return{text:e,markers:new Map};let n=new Set,r=aA;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=`${oA}${r}`;i.set(e,t.marker),a+=e}else a+=`[image dropped: a newer image in this command used up the ${aA/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 cA(e){let t=On(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 lA(e){return e.replaceAll(RegExp(`${oA}\\d+`,`g`),`[image]`)}function uA(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 dA(e,t,n,r){let{text:i,markers:a}=sA(e),o=tA(i,{maxBytes:iA});if(!o.truncated)return uA(i,a);let s=`showing the last ${$k(o.outputBytes)} of ${$k(o.totalBytes)} (${o.totalLines} lines)`,c=`${n}/bash-output-${r()}.txt`;try{return await t.writeFile(c,lA(i)),uA(`${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 rA.warn(`Failed to persist full bash output`,{error:e instanceof Error?e.message:String(e)}),uA(`${o.content}\n\n[Output truncated: ${s}. Re-run piping through \`head\`/\`tail\`/\`grep\`/\`sed -n\` to narrow the output.]`,a)}}const fA=new Set([`grep`,`egrep`,`fgrep`,`rg`]);function pA(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 mA(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=pA(r.name);if(i!==`command`)return i;let a=r.args[0];return a?pA(a):null}function hA(e,t,n,r){if(n!==1||r.trim())return!1;let i;try{i=mA(e.getBash().transform(t).ast)}catch{return!1}return i!==null&&fA.has(i)}function gA(e,t){let n=e.options.annotateResult?.();return n?`${t.endsWith(`
1165
+ `)||t.length===0?t:`${t}\n`}${n}\n`:t}function _A(e){if(!(typeof e!=`number`||!Number.isFinite(e)||e<0))return e}function vA(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 ${iA/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 ${aA/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 yA(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 bA(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 xA(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 DA(e,n,r);await e.fs.writeFile(t,i)}).catch(e=>rA.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 SA(e,t){t===`timeout`&&(e.killedByTimeout=!0),e.job?.kill(),e.controller.abort(),e.job?.exit(null)}function CA(e,t){e.job?.exit(e.job.signal.aborted?null:t)}function wA(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 TA(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)=>rA.warn(e,{tempDir:n,error:t instanceof Error?t.message:String(t)}))),c={shell:e,fs:t,tempDir:n,options:r,defaultBackgroundAfter:_A(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)=>EA(c,t,n,e))).catch(e=>rA.warn(`Could not sweep orphaned bash jobs`,{tempDir:n,error:e})),{name:`bash`,description:vA(c.defaultBackgroundAfter),inputSchema:yA(c.defaultBackgroundAfter),execute:(e,t)=>NA(c,e,t)}}function EA(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}};rA.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){rA.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 DA(e,t,n){let r=e.options.scrubOutput;if(!r||!n)return n;try{return await r(n)}catch(e){return rA.warn(`Background bash output scrub failed; withholding output`,{jobId:t,error:e instanceof Error?e.message:String(e)}),`[output withheld: secret scrub unavailable]`}}function OA(e){return e.ok?e.result.exitCode===124&&/execution aborted/i.test(e.result.stderr):/execution aborted/i.test(e.error)}function kA(e,t){return e===void 0?`--- killed (exit ${t}) ---\n`:`--- killed after ${e}s (exit ${t}) ---\n`}async function AA(e,t,n,r,i,a,o,s){await o.flushPersist();let c=o.killedByTimeout||OA(a),l,u;if(c){let e=o.getTeedOutput();u=124,l=`${e.endsWith(`
1166
+ `)||e.length===0?e:`${e}\n`}${kA(s,u)}`}else if(a.ok)l=Ti([a.result.stdout,a.result.stderr].filter(Boolean).join(``)||`(exit code: ${a.result.exitCode})`,a.result.pipeStatus),u=a.result.exitCode;else{let e=o.getTeedOutput();u=1,l=e?`${e.endsWith(`
1167
+ `)?e:`${e}\n`}Shell error: ${a.error}`:`Shell error: ${a.error}`}let d=await DA(e,t,gA(e,l)),f;try{await e.fs.writeFile(i,d),f=i}catch(e){rA.warn(`Failed to persist background bash output`,{jobId:t,outputPath:i,error:e instanceof Error?e.message:String(e)})}if(!e.options.fireLick){rA.warn(`Background bash job finished with no lick sink`,{jobId:t,exitCode:u});return}let p=tA(cA(d),{maxBytes:2048});e.options.fireLick({type:`bash`,bashJobId:t,bashCommand:r,bashExitCode:u,...n===void 0?{}:{bashJobPid:n},resultPath:f,preview:p.content,...e.options.targetScoop?{targetScoop:e.options.targetScoop}:{},timestamp:new Date().toISOString(),body:{jobId:t,pid:n??null,command:r,exitCode:u,resultPath:f??null}})}function jA(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=>rA.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(()=>SA(t,`timeout`),d*1e3);return t.settled.then(r=>(f!==void 0&&clearTimeout(f),CA(t,t.killedByTimeout?124:r.ok?r.result.exitCode:1),AA(e,o,s,n,c,r,t,i))).catch(e=>rA.error(`Background bash delivery failed`,{jobId:o,error:e})).then(u),rA.info(`Bash command detached to background`,{command:n,jobId:o,pid:s,killAfter:d}),wA(o,s,r,c,i)}async function MA(e,t,n){rA.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=gA(e,Ti(r,n.pipeStatus)),{content:await dA(r,e.fs,e.tempDir,e.nextOutputSeq),isError:n.exitCode!==0&&!hA(e.shell,t,n.exitCode,n.stderr)}}async function NA(e,t,n){let r=t.command,i=_A(t.timeout),a=_A(t.background_after)??e.defaultBackgroundAfter;rA.debug(`Execute`,{command:r,timeoutSeconds:i,backgroundAfter:a});let o=xA(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?(SA(o,`timeout`),rA.warn(`Bash command timed out`,{command:r,timeoutSeconds:c,pid:o.job?.pid}),bA(c)):t===`elapsed`?jA(e,o,r,c,i,a):(CA(o,t.ok?t.result.exitCode:1),t.ok?await MA(e,r,t.result):(rA.error(`Error`,{command:r,error:t.error}),{content:`Shell error: ${t.error}`,isError:!0}))}finally{l!==void 0&&clearTimeout(l),o.releaseTurnSignal()}}const PA={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 FA(e){if(!e||typeof e!=`object`||Array.isArray(e))return!1;let t=e;return typeof t.oldText==`string`&&typeof t.newText==`string`}function IA(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:FA(e)&&(t.edits=[e])}catch{}else FA(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 LA(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:PA,prepareArguments:IA,async execute(n,r){let{executePiEdit:i}=await import(`./pi-edit-execution-Cb2xBqsc.js`);return i(e,t,n,r)}}}async function RA(e,t,n){if(Hr(Nn(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 zA=_(`tool:fs`);function BA(e,t=`/workspace`){return[VA(e),HA(e),LA(e,t)]}function VA(e){return{name:`read_file`,description:`Read a file's contents. Output is capped at 2000 lines or ${Zk/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;zA.debug(`Read`,{path:n,offset:r,limit:i});try{let t=(await e.readTextFile(n)).split(`
1168
+ `),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=eA(c.join(`
1169
+ `));if(u.firstLineExceedsLimit)return{content:`[Line ${s} is ${$k(new TextEncoder().encode(t[o]??``).length)}, exceeds ${$k(Zk)} limit. Use bash: sed -n '${s}p' ${n} | head -c ${Zk}]`};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} (${$k(Zk)} 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 zA.error(`Read failed`,{path:n,error:t}),{content:t,isError:!0}}}}}function HA(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;zA.debug(`Write`,{path:n,contentLength:r.length});try{await e.writeFile(n,r);let t=await RA(e,n,r);return t?(zA.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 zA.error(`Write failed`,{path:n,error:t}),{content:t,isError:!0}}}}}const UA={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 WA(e,t){return{name:hi,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:UA,async execute(n){let{executeMemoryWrite:r}=await import(`./memory-write-execute-r0RBk_wW.js`);return r(e,t,n)}}}function GA(){return null}const KA=_(`tool:request-secret`);async function qA(e,t){let n=GA();if(n)return n(e);let r=t.callPanelRpc??await JA();return r?r(e):{stored:!1,reason:`unavailable`}}async function JA(){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 YA(e){try{return e.getProvider?.()||void 0}catch(e){KA.warn(`could not resolve this unit’s provider for the secret prompt`,{error:e instanceof Error?e.message:String(e)});return}}function XA(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 ZA(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(`
1170
+ `)}function QA(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 $A(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:XA(t.domains),persist:t.persist===!0,requester:e.requester,provider:YA(e)},a;try{a=await qA(i,e)}catch(e){let t=e instanceof Error?e.message:String(e);return KA.error(`secret request failed`,{name:n,error:t}),{content:`The secret prompt failed: ${t}`,isError:!0}}if(!a.stored)return{content:QA(a),isError:!0};let o=ej(a.name,a.maskedValue,e);return KA.info(`secret stored via request_secret`,{name:a.name,persisted:a.persisted}),{content:ZA(a,o)}}}}function ej(e,t,n){if(!n.setEnv||!t||!wi(e))return!1;try{return n.setEnv(e,t),!0}catch(t){return KA.warn(`could not inject the masked value into the shell env`,{name:e,error:t instanceof Error?t.message:String(t)}),!1}}const tj=_(`scoop-management-tools`),nj=`cross_cone`;function rj(e){return Hn(e.getScoops(),e.scoop.jid)}function ij(e){let t=new Set;for(let n of rj(e))n.jid!==e.scoop.jid&&n.parentJid!==null&&t.add(n.jid);return t}function aj(e){let t=Kn(e.getScoops());return t!==void 0&&t.jid===e.scoop.jid}function oj(e){let t=e.getScoops(),n=ij(e),r=aj(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=cr(t,e);a.kind!==`cycle`&&i.push({scoop:e,relation:a.kind===`root`?`foreign`:`inherited`})}return i}function sj(e){return t=>t.folder===e||t.name===e}function cj(e,t){let n=oj(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 lj(e,t){let n=[],r=[];for(let i of e){let e=cj(i,t);e?n.push(e):r.push(i)}return{resolved:n,unknown:r}}function uj(e,t){return Wn(e.getScoops(),t.scoop)?.folder??`unknown`}function dj(e,t){return t.relation===`inherited`?`inherited (its owning cone is gone)`:`owned by cone "${uj(e,t)}"`}function fj(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 ${dj(r,e)}`).join(`; `)}. Pass ${nj}: true to act on it anyway.`,isError:!0}}function pj(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 mj=[`command`,`read`,`write`,`secret`];function hj(e){return`${_e(e,{maxLen:50})}-scoop`}function gj(e){return e===void 0?{ok:!0}:br(e)?{ok:!0,level:e}:{ok:!1,content:`Invalid thinking level "${e}". Must be one of: ${xr.join(`, `)}.`,isError:!0}}function _j(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 vj(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 yj(e,t){let n=oj(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 bj(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 xj(e,t){let{text:n,sender:r}=e;return t.onSendMessage(n,r),tj.info(`Message sent`,{scoopFolder:t.scoop.folder,textLength:n.length}),{content:`Message sent.`}}function Sj(e){let{kind:t,detail:n,suggested_pattern:r,reason:i}=e;if(!mj.includes(t))return{ok:!1,result:{content:`Invalid sudo kind "${t}". Must be one of: ${mj.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`?Ei(i):``;return{ok:!0,request:{kind:t,detail:n,...r?{suggestedPattern:r}:{},...a?{reason:a}:{}}}}function Cj(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(`
1171
+ `)}async function wj(e,t){let n=Sj(e);if(!n.ok)return n.result;try{let e=await t.onSudoRequest(n.request);return tj.info(`Sudo request resolved`,{scoopFolder:t.scoop.folder,kind:n.request.kind,decision:e.decision}),{content:Cj(e)}}catch(e){return{content:`sudo_request failed: ${e instanceof Error?e.message:String(e)}`,isError:!0}}}async function Tj(e,t){let{scoop_name:n,prompt:r,cross_cone:i}=e;if(sj(n)(t.scoop))return{content:`Cannot feed yourself.`,isError:!0};let a=cj(n,t);if(!a)return yj([n],t);let o=fj([a],i,`feed "${n}"`,t);if(o)return o;try{await t.onFeedScoop(a.scoop.jid,r),tj.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 (${nj}: 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 Ej(e,t){return t.relation===`own`?``:t.relation===`inherited`?` [INHERITED]`:` [FOREIGN: ${uj(e,t)}]`}async function Dj(e){let t=new Map(oj(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 bj(n,e.getScoopTabState,r?Ej(e,r):``)}).join(`
1172
+ `)}`}}function Oj({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}:{},...kj(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 kj(e,t,n,r,i){let a=`/scoops/${t}/`;return{visiblePaths:r??(e===`private`?[]:n),writablePaths:i??(e===`private`?[a]:[a,`/shared/`])}}async function Aj(e,t,n,r,i){try{await i(e.jid,t)}catch(e){let t=e instanceof Error?e.message:String(e);return tj.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 jj(e,t){let n=t.getTurnSignal?.();if(n?.aborted)return{content:`The parent turn was stopped.`,isError:!0};let{name:r,model:i,prompt:a,visiblePaths:o,writablePaths:s,workspaceMode:c,allowedCommands:l,thinking:u,background_after:d,canCreateChildren:f}=e,p=Rn(c);if(!p.ok)return{content:p.error,isError:!0};let m=gj(u);if(!m.ok)return{content:m.content,isError:m.isError};let h=_j(d);if(!h.ok)return{content:h.content,isError:!0};let ee=vj(i,t.resolveModelSelection);if(!ee.ok)return{content:ee.content,isError:ee.isError};let g=hj(r),_=rj(t).find(e=>e.jid!==t.scoop.jid&&e.parentJid!==null&&(e.name===r||e.folder===g));if(_)return{content:`A scoop named "${_.name}" (${_.folder}) already exists in your scoops. Use feed_scoop to give it another task, or drop_scoop first.`,isError:!0};let te=Xn(g,t.getScoops().map(e=>e.folder));try{let e=Oj({name:r,folder:te,model:ee.modelId,modelProviderId:ee.providerId,visiblePaths:o,writablePaths:s,workspaceMode:p.mode,allowedCommands:l,thinkingLevel:m.level,backgroundAfterSeconds:h.seconds,parentJid:t.scoop.jid,defaultVisibleRoots:gr(yr(t.scoop)),canCreateChildren:f===!0}),i=await t.onScoopScoop(e);if(n?.aborted)return await t.onDropScoop?.(i.jid),{content:`The parent turn was stopped before the scoop could start.`,isError:!0};if(tj.info(`Scoop created`,{name:r,folder:te}),a&&t.onFeedScoop){let e=await Aj(i,a,r,te,t.onFeedScoop);return n?.aborted?(await t.onDropScoop?.(i.jid),{content:`The parent turn was stopped while starting the scoop.`,isError:!0}):e}return{content:`Scoop "${r}" 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 Mj(e,t){let{scoop_name:n,cross_cone:r}=e;if(sj(n)(t.scoop))return{content:`Cannot drop yourself.`,isError:!0};let i=cj(n,t);if(!i)return yj([n],t);let a=fj([i],r,`drop "${n}"`,t);if(a)return a;try{return await t.onDropScoop(i.scoop.jid),tj.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 Nj(){return{content:`scoop_names must be a non-empty array.`,isError:!0}}async function Pj(e,t){let{scoop_names:n,cross_cone:r}=e;if(!Array.isArray(n)||n.length===0)return Nj();let{resolved:i,unknown:a}=lj(n,t);return i.length===0?yj(a,t):fj(i,r,`mute these scoops`,t)||(t.onMuteScoops(i.map(e=>e.scoop.jid)),tj.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 Fj(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 Ij(e,t){let{scoop_names:n,cross_cone:r}=e;if(!Array.isArray(n)||n.length===0)return Nj();let{resolved:i,unknown:a}=lj(n,t);if(i.length===0)return yj(a,t);let o=fj(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);tj.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(...Fj(l,c)),{content:u.join(`
1173
+ `)}}function Lj(e,t){return!Array.isArray(e)||e.length===0?Nj():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 Rj(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 zj(e,t){let{scoop_names:n,timeout_ms:r,cross_cone:i}=e,a=Lj(n,r);if(a)return a;let{resolved:o,unknown:s}=lj(n,t);if(o.length===0)return yj(s,t);let c=fj(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 tj.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:Rj(f,s,p,r)}}function Bj(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 Vj(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`?Ei(a):``,s={...r?{decision:`always`,...i?{pattern:i}:{}}:{decision:`allow`},...o?{note:o}:{}};try{let e=await t.onSudoResolve(n,s);return e.settled?(tj.info(`Lick confirmed`,{id:n,always:!!r,persisted:e.persisted}),e.message?{content:e.message}:{content:Bj(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 Hj(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`?Ei(r):``;try{let e=await t.onSudoResolve(n,{decision:`deny`,...i?{note:i}:{}});return e.settled?(tj.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 Uj(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(`
1174
+ `)}`}}async function Wj(e,t){let{content:n}=e;try{return await t.onSetGlobalMemory(n),tj.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 Gj(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=>xj(t,e)}}function Kj(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:[...mj],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=>wj(t,e)}}function qj(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.`},[nj]:pj(`feed`)},required:[`scoop_name`,`prompt`]},execute:t=>Tj(t,e)}}function Jj(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:()=>Dj(e)}}function Yj(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:[...xr],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=>jj(t,e)}}function Xj(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.`},[nj]:pj(`drop`)},required:[`scoop_name`]},execute:t=>Mj(t,e)}}function Zj(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"]).`},[nj]:pj(`mute`)},required:[`scoop_names`]},execute:t=>Pj(t,e)}}function Qj(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"]).`},[nj]:pj(`unmute`)},required:[`scoop_names`]},execute:t=>Ij(t,e)}}function $j(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."},[nj]:pj(`wait on`)},required:[`scoop_names`]},execute:t=>zj(t,e)}}function eM(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=>Vj(t,e)}}function tM(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=>Hj(t,e)}}function nM(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:()=>Uj(e)}}function rM(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=>Wj(t,e)}}function iM(e){let t=[],n=Un(e.scoop);return Bn(e.scoop)||(t.push(Gj(e)),e.onSudoRequest&&t.push(Kj(e))),n.canCreateChildren&&e.onScoopScoop&&t.push(Yj(e)),n.canManageChildren&&(e.onFeedScoop&&t.push(qj(e)),t.push(Jj(e)),e.onDropScoop&&t.push(Xj(e)),e.onMuteScoops&&t.push(Zj(e)),e.onUnmuteScoops&&t.push(Qj(e)),e.onScheduleScoopWait&&t.push($j(e)),e.onSudoResolve&&(t.push(eM(e)),t.push(tM(e))),e.onListSudoRequests&&t.push(nM(e)),e.onSetGlobalMemory&&e.getGlobalMemory&&t.push(rM(e))),t}var aM=e({buildScoopTools:()=>cM,getOrCreateConnectionManager:()=>gM});const oM=_(`scoop-context`);function sM(e){return{currentGate(){let t=e.getTurnGuestGates();if(t.length!==0)return{async approve(n,r){let{approveToolCallForGuests:i}=await import(`./guest-tool-gate-oF9u91qg.js`);return i(t,n,r,e.callbacks.approveGuestToolCall)}}}}}async function cM(e){let{scoop:t,unit:n,callbacks:r}=e,i=iM({scoop:t,getTurnSignal:e.getTurnSignal,onSendMessage:r.onSendMessage,getScoops:r.getScoops,getScoopTabState:r.getScoopTabState,onFeedScoop:r.onFeedScoop,onScoopScoop:r.onScoopScoop,resolveModelSelection:ce,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=BA(e.gatedFs,n.workspace.root),o=e.blindReads??null,s=WA(e.memoryFs,{readSessionCount:async()=>{let{readSessionCount:t}=await Promise.resolve().then(()=>IT);return t(e.fs)},...o?{blindPaths:()=>o.outsidePaths()}:{}}),c=[...a,s,TA(e.shell,e.fs,n.workspace.scratch,{defaultBackgroundAfterSeconds:t.config?.backgroundAfterSeconds,targetScoop:e.lickTarget,jobHost:{spawn:t=>e.spawnBashJob(t)},scrubOutput:yn(),...o?{annotateResult:()=>o.takeNote()}:{},fireLick:e=>{let n=globalThis.__slicc_lick_handler;return n?(n(e),!0):(oM.warn(`No lick handler for background bash completion`,{folder:t.folder}),!1)}}),...i,$A({requester:t.assistantLabel||t.name,setEnv:(t,n)=>e.shell.setMaskedEnvVar(t,n),getProvider:()=>Xk(ak(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:yn()},u=sM(e),d=e.processManager?bn(c,{processManager:e.processManager,owner:e.processOwner,getParentPid:e.getTurnPid},l,u):bn(c,void 0,l,u),f=pM(await lM(e.fs,t),u,l);return[...d,...f]}async function lM(e,t){try{if(t.parentJid!==null)return[];let{listServers:n}=await import(`./store-D_3UY4Hq.js`).then(e=>e.r),r=await n(e),i=Object.entries(r);if(i.length===0)return[];let a=i.filter(([,e])=>{let t=e.exposure??`codemode`;return t===`direct`||t===`codemode`||t===`codemode-deferred`||mM(e)});if(a.length===0)return[];let{toAgentTools:o}=await import(`./agent-tools-CbAMai1C.js`),s=await gM(),c=[];for(let[t,n]of a)try{let{connection:r,transport:i}=await s.connect(t,n);i!==n.transport&&(n.transport=i,import(`./store-D_3UY4Hq.js`).then(e=>e.r).then(({setServer:r})=>r(t,n,e)).catch(()=>{}));let a=n.tools??await r.listTools()??[],l=o({serverName:t,tools:a,connection:r,exposure:n.exposure,toolExposure:n.toolExposure,writeOverflow:async(t,n)=>{try{await e.mkdir(`/tmp/mcp`,{recursive:!0}),await e.writeFile(`/tmp/mcp/${t}.txt`,n)}catch{}}});c.push(...l);let u=await uM(t,a,r,n);u&&c.push(u)}catch(e){oM.warn(`failed to load MCP tools for agent`,{server:t,error:e instanceof Error?e.message:String(e)})}return c}catch(e){return oM.debug(`MCP agent tools unavailable`,{error:e instanceof Error?e.message:String(e)}),[]}}async function uM(e,t,n,r){try{let{createCodemodeAgentTool:i}=await import(`./codemode-tool-BQX4yxNo.js`);return i({serverName:e,tools:t,connection:n,exposure:r.exposure,toolExposure:r.toolExposure})}catch(t){return oM.debug(`codemode tool unavailable for server`,{server:e,error:t instanceof Error?t.message:String(t)}),null}}async function dM(e,t,n,r){let i=n.currentGate();if(!i)return null;if(r?.aborted)return{content:[{type:`text`,text:`${e}: not approved (guest-caused turn).`}],details:void 0};let a;try{a=await i.approve(e,t)}catch{a=!1}return!a||r?.aborted?{content:[{type:`text`,text:`${e}: not approved (guest-caused turn).`}],details:void 0}:null}async function fM(e,t){if(t)for(let n=0;n<e.content.length;n++){let r=e.content[n];if(r.type===`text`&&`text`in r&&typeof r.text==`string`)try{let i=await t(r.text);i!==r.text&&(e.content[n]={type:`text`,text:i})}catch{}}}function pM(e,t,n){return e.map(e=>({...e,async execute(r,i,a,o){let s=await dM(e.name,i,t,a);if(s)return s;let c=await e.execute(r,i,a,o);return await fM(c,n.scrubToolResult),c}}))}function mM(e){return e.toolExposure?Object.values(e.toolExposure).some(e=>e===`direct`||e===`codemode`||e===`codemode-deferred`):!1}let hM=null;async function gM(){if(hM)return hM;let{McpConnectionManager:e}=await import(`./connection-manager-DiSK2DFK.js`);return hM=new e({getAuthHeader:async e=>{try{let{getOAuthAccountInfo:t}=await import(`./account-store-DaI3pV_q.js`).then(e=>e.t),n=t(`mcp:${e}`);return n?`Bearer ${n.token}`:null}catch{return null}}}),hM}const _M=_(`scoop-context`);async function vM(e){let{scoop:t,unit:n,fs:r,callbacks:i}=e,a=e.getTmpDir();_M.info(`Filesystem ready`,{folder:t.folder}),await wk(r,t,n,a);let{shell:o,gatedFs:s,memoryFs:c,blindReads:l,skills:u}=await Jk({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(),mcpConnectionManager:e.mcpConnectionManager});e.onShellReady(o);let d=await cM({getTurnGuestGates:e.getTurnGuestGates,getTurnSignal:e.getTurnSignal,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 nk(r,n,()=>i.getGlobalMemory());if(!ik(t))return _M.info(`ScoopContext init deferred — no API key yet`,{folder:t.folder}),{kind:`deferred`};let m=ok(t,n),h=lk(t,n,p,f,u),ee=await e.sessions.restore(),{streamWithSessionId:g,compactFn:_,getCompactionApiKey:te}=await Ek(m,{scoop:t,unit:n,coneJid:e.coneJid,getModelApiKey:()=>ik(t),getEffortOverride:e.getEffortOverride,appendConeMemory:i.appendConeMemory,onCompactionStateChange:(e,t)=>i.onCompactionStateChange?.(e,t),onBeforeCompaction:e.onBeforeCompaction});if(e.isDisposed())return{kind:`abandoned`};let ne=Zn(t);return{kind:`ready`,agent:Sk({model:m,tools:d,systemPrompt:h,messages:ee,thinkingLevel:dk(fk()??ne.level,m),getApiKey:()=>ik(t)??void 0,transformContext:_,streamFn:g,onContextCompacted:()=>e.sessions.persistNow(),captureStructuredOutput:t.config?.structuredOutputSchema?e.onStructuredOutput:void 0}),compactFn:_,getCompactionApiKey:te,effortOverride:ne.effortOverride,toolCount:d.length}}const yM=_(`scoop-context`);var bM=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 yM.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=mT(t);if(t&&(this.createdAt=t.createdAt),n.length===0)return[];let r=xn(n);return yM.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=>{yM.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){yM.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 xM(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 SM(e,t,n){!t||!e||(n.lastError&&!n.aborted?e.exit(t.pid,1):e.exit(t.pid,n.aborted?null:0))}function CM(e,t,n,r){t&&e?e.signal(t.pid,n):r?.abort()}const wM=_(`scoop-context`);var TM=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;wM.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)&&(wM.error(`Agent error`,{folder:this.deps.folder,error:r,attempt:t,isRetryable:UO(r)}),!!(t<3&&(await WO(EM(t),n)||this.deps.isDisposed())))}handleNonRetryableError(e){return HO(e)?(wM.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 ao(e)?(wM.error(`Stale-asset import failure; requesting page reload`,{folder:this.deps.folder,error:e}),co(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(!UO(e)||t>=3)return!1;let r=EM(t);return wM.warn(`Retryable agent error, will retry`,{folder:this.deps.folder,error:e,attempt:t,maxRetries:3,delayMs:r}),!await WO(r,n)&&!this.deps.isDisposed()}fail(e,t){NO(`llm`,t),this.deps.setStatus(`error`),this.deps.onFatalError?this.deps.onFatalError(e):this.deps.onError(t)}};function EM(e){return 1e3*2**(e-1)}function DM(e,t,n,r){let i=e.state?.isStreaming??!1;if(r.isProcessing||i){wM.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 OM=_(`scoop-context`);var kM=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;mcpConnectionManager;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=mr(e),this.owner={kind:Jn(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 bM({store:r??null,canonical:c?{store:c,identity:Lr(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 yk({getConfig:()=>this.scoop.config,isDisposed:()=>this.disposed,onTripped:()=>{this.setStatus(`error`),this.stop()}}),this.bashJobs=new ZO({processManager:this.processManager,cwd:this.unit.workspace.root,owner:this.owner,getTurnPid:()=>this.currentTurnProcess?.pid,folder:e.folder}),this.imageRecovery=new $O({getAgent:()=>this.agent,onResponse:(e,t)=>this.callbacks.onResponse(e,t),onError:e=>this.callbacks.onError(e),folder:e.folder}),this.overflow=new vk({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 TM({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 Uk(this.unit,this.scoop,O(this.callbacks.getScoops())[0]?.jid)}ownTmpDir(){return dr(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`);if(!this.mcpConnectionManager){let{getOrCreateConnectionManager:e}=await Promise.resolve().then(()=>aM);this.mcpConnectionManager=await e()}let e=await vM({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,getTurnSignal:()=>this.promptAbortController?.signal,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},mcpConnectionManager:this.mcpConnectionManager,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`),OM.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);OM.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(ck(this.scoop)),!1)}cleanupPromptState(e,t,n,r,i){if(i!==void 0&&i!==this.turnEpoch){this.currentTurnProcess!==t&&SM(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),SM(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(DM(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=xM(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(){CM(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(){if(this.agent){let e=un(this.agent.state.messages);this.agent.state.messages=e?[e]:[]}}async clearSession(e={}){this.sessionGeneration++,this.idleCompaction?.cancel(),this.clearMessages(),await this.sessions.clear(),await this.settleLiveSnapshot(e.discardLiveSnapshot===!0)}idleCompactionEnabled(){return Ur(this.scoop)?!0:this.unit.parentId===null&&Ee(`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-DJzPVZ_I.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:Sn,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&&!Ee(`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-CWLRm7ap.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-BwBWvDgr.js`).then(e=>e.r).then(n=>n.scheduleLiveDeltaCuration({vfs:e,cone:t})).catch(e=>{OM.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-CWLRm7ap.js`);e?await t(this.fs,this.scoop.folder):await n(this.fs,this.scoop.folder)}catch(t){OM.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 sk(this.agent?.state?.messages??[],this.scoop)}getSessionId(){return this.sessions.sessionId}getFS(){return this.fs}getShell(){return this.shell}updateModel(){this.agent&&(this.activeEffortOverride=mk(this.agent,this.scoop))}async reloadSkills(){this.agent&&await gk(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 OM.info(`Thinking level stored for a deferred agent`,{requested:e}),`off`;if(fk())return this.agent.state.thinkingLevel;this.activeEffortOverride=t;let n=hk(this.agent,e);return OM.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(),CM(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 qO(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`&&OM.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||GO(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 AM=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 AO(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 Wn(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 Pr))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!=null)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=mr(t).policy.filesystem;if(a.kind===`restricted`){let e=Rn(a.mode);if(!e.ok)throw Error(e.error)}let o=a.kind===`full-workspace`?r:new Pr(r,[...a.writablePaths],[...a.visiblePaths],`sudo-delegated`,{includeMounts:Ln(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 kM(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&&Ur(o)&&(await this.syncGelatiereModel(),!ir(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=Kn(t.values())?.jid;if(or(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=Xn(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&&oO(`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}Kn(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(Ur(e)){let t=Kn(this.deps.getScoops().values());Yn(e,t?ir(t):void 0);return}if(qn(e))return;let t=e.parentJid?this.deps.getScoops().get(e.parentJid):void 0,n=(t?ir(t):void 0)??YD();n&&Yn(e,n)}async unregister(e){let t=this.deps.getScoops(),n=Kn(t.values())?.jid===e;for(let n of lr(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(Ir(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(Ur(n))return await this.syncGelatiereModel(),!1;let r=Kn(this.deps.getScoops().values())?.jid===e,i=n.model;Yn(n,t),this.getContext(e)?.updateModel();try{await this.deps.db.saveScoop(n)}catch(t){return Yn(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(Ur);if(!t)return!1;let n=Kn(e.values()),r=n?ir(n):void 0,i=ir(t),a=r?i?.provider===r.provider&&i.id===r.id:qn(t)===void 0;if(!a){let e=t.model?{...t.model}:void 0,i=t.config?{...t.config}:void 0;Yn(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;nr(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}=mr(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 Gn(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:yr(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,Bn(t)?void 0:e):void 0,onListSudoRequests:o.canResolveApprovals?()=>i.listPendingSudoRequests(Bn(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}),oO(`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}),oO(`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`),mr(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 jM=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}`);oO(`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=Zx($x(Xx(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=cy(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(`
1175
+ `);c.length>0&&this.deps.recordSentAttachments?.(e,c);let u=s.flatMap(e=>ly(e.attachments));this.messageQueues.set(e,[]);let d=s[s.length-1],f=Zx($x(Xx(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`),MM={decision:`deny`};var NM=class{scoops=new Map;workUnits=new vx(this);container;callbacks;config;scheduler=null;sharedFs=null;memoryStore=new pD({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 DO({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 TO({getScoops:()=>this.scoops,getContexts:()=>this.lifecycle.getContexts(),mergeFoldedIntoFrozen:(e,t)=>this.mergeFoldedCostIntoFrozen(e,t)});completionService=new pO({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 eO({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=>Jx(e),saveMessage:e=>Kx(e)});lickRegistry=new GD({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 jM({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=>Kx(e),deleteMessage:e=>qx(e),clearMessagesForScoop:e=>Gx(e),clearAllMessages:()=>Wx(),getMessagesSince:(e,t,n)=>eS(e,t,n),setState:(e,t)=>oS(e,t)},isExternalLickChannel:Zb});constructor(e,t,n={name:`sliccy`,triggerPattern:/^@sliccy\b/i}){this.container=e,this.callbacks=t,this.config=n,this.lifecycle=new AM({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=>Vx(e),deleteScoop:e=>Ux(e)},getLickManager:()=>this.lickManager,buildActiveLicksError:(e,t,n)=>BD(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 XD(async n=>(await this.ensureRootStructure(),n(),this.sudoManager=new uC({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 nC(e,t),await this.llmsTxtIgnorePolicy.init(),n(),this.modelPolicyFile=new JD(e,t),await this.modelPolicyFile.init(),n(),Hx()),n,{stagePrefix:`orchestrator-init`})}setOnConversationsReady(e){this.onConversationsReady=e}async openSharedFilesystem(e,t){let n=await XD(e=>Nr.create({dbName:`slicc-fs`,onRepairProgress:e}),e);this.sharedFs=n,this.sessionStore=new fy,this.conversationStore=new ET;let{TurnJournal:r}=await import(`./turn-journal-DJcMfuEK.js`);this.turnJournal=new r,this.interruptedTurns=await this.turnJournal.readAll();let i=new Mr;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 sS();let{sharedFs:n,fsWatcher:r}=await this.openSharedFilesystem(e,t),i=await this.initPolicyLayerAndLoadRecords(n,r,e),a=Object.values(i).find(e=>tr(e))?.jid;for(let e of Object.values(i)){await this.backfillParent(e,a),or(e),this.migrateScoopConfig(e,Object.values(i)),this.scoops.set(e.jid,e),this.messageRouter.ensureQueue(e.jid);let t=await aS(`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 QD({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),Wr(e=>this.getSessionCostsForCommand(e)),Gr(async()=>{let{refreshBudgetWindow:e}=await Promise.resolve().then(()=>my);return e()}),this.unregisterExportService=l(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 rO(t,4,t=>this.restoreScoopContext(t,e));let r=rO(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 zb;try{await lT({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(Lr(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=tr(e)?null:t??null;try{await Vx(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=>!qn(e)&&!Ur(e));if(e.length>0){let t=YD(),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?ir(n):void 0)??t;if(r){Yn(e,r);try{await Vx(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=`${hr.root}/`,r=gr(vr(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-DoAqSdwX.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:yr,approveAsUser:async e=>{let t=this.sudoManager;return t?t.approve(e):($.warn(`Guest approval before SudoManager init — failing closed`),MM)}})}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 Vx(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 sr(this.scoops.values(),t)??this.defaultRoot()}ownerRootOrDefault(e){let t=e===void 0?void 0:this.scoops.get(e);return Wn(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 Nr.create({dbName:`slicc-fs`,wipe:!0}),this.fsWatcher&&this.sharedFs.setWatcher(this.fsWatcher),await this.ensureRootStructure(),await this.memoryStore.ensureGlobalMemory(),await sD(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 uC({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 nC(this.sharedFs,this.fsWatcher),await this.llmsTxtIgnorePolicy.init(),this.modelPolicyFile?.dispose(),this.modelPolicyFile=new JD(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 Jx(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-BvaORnO5.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.completionService.allowCompletion(e),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 Vn(this.scoops.values(),e))this.completionService.cancelScheduledWaits(t),this.completionService.suppressCompletionUntilNextPrompt(t),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-jP6pVzid.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(()=>BC),r=await n(this.sharedFs);return[...t,...r.map(Kr)]}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 ST(this.conversationStore):null,t=this.sharedFs;return new Cw({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:Gw(),snapshotStore:{read:e=>Lw(t,e),write:(e,n,r)=>Iw(t,e,n,r)},vfs:t,getActiveSessionInfo:()=>{let e=this.defaultRoot();return{id:e?.jid??`session-${Date.now()}`,title:e?.name??`Active Session`}},version:`6.229.0`})}};const PM=_(`workflow-run-manager`),FM=`/shared/workflow-runs`,IM=1e3;function LM(e,t){if(t===void 0)return{origin:`terminal`};let n=e.getStartingRoot(t);return n?{origin:`cone`,lickTarget:n.lickTarget}:{origin:`scoop`}}function RM(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){PM.warn(`observeRun handler threw`,e)}},i=(e,n)=>UM(e,n,t,()=>r(n));async function a(a){let c=a.runId??e.makeRunId(),l=a.sentinel,u=LM(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),VM(t,n);let f=i(a.ctx,c),p=HM(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=>PM.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=`${FM}/${n}.json`,u=new Date().toISOString();try{await e.sharedFs.mkdir(FM,{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);PM.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`?BM(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){PM.warn(`observeRun handler threw on initial state`,e)}return()=>i.delete(r)}}}function zM(e){let t=RM(e);return globalThis[d]=t,PM.info(`workflow run manager published on globalThis.__slicc_workflows`),t}function BM(e){return((typeof e==`string`?e:JSON.stringify(e))??`null`).slice(0,200)}function VM(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 HM(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 UM(e,t,n,r){let i=e.exec;if(!i)return e;let a=(async(e,a)=>e===`__wf_progress`?WM(n,t,a?.args??[],r):e===`agent`?GM(n,t,()=>i(e,a),r):i(e,a));return a.spawn=e.exec.spawn,{...e,exec:a}}function WM(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>IM&&i.logs.splice(0,i.logs.length-IM),r()}return{stdout:``,stderr:``,exitCode:0}}async function GM(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 KM=new Set([`catalog`,`com`,`html`,`http`,`https`,`json`,`known`,`llms`,`net`,`org`,`txt`,`well`,`www`]);function qM(e,t,n){let r=JM(e);if(r.length===0)return;let i,a=0,o=!1;for(let e of t){let t=ZM(n(e),r);t>a?(i=e,a=t,o=!1):t>0&&t===a&&(o=!0)}return o?void 0:i}function JM(e){let t=new Map;return YM(t,e.discoveryOrigin),YM(t,e.discoveryUrl),[...t.values()]}function YM(e,t){if(t){XM(e,t.toLowerCase().replace(/\/$/,``),12,`substring`);try{let n=new URL(t),r=n.hostname.toLowerCase().replace(/^www\./,``);XM(e,r,8,`hostname`);for(let t of`${r}${n.pathname}${n.search}`.split(/[^a-z0-9]+/).filter(e=>e.length>=4&&!KM.has(e)))XM(e,t,1,`substring`)}catch{}}}function XM(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 ZM(e,t){let n=e.slice(-8),r=0;for(let[e,i]of n.entries()){let a=$M(i);if(a.length===0)continue;let o=8-(n.length-1-e);for(let e of t)QM(a,e)&&(r+=e.weight*o)}return r}function QM(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 $M(e){try{return JSON.stringify(e)?.toLowerCase()??``}catch{return``}}function eN(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 tN=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=iN(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:rN,kind:`file`,size:this.renderTable().length,lastModified:Date.now()}),t}if(t.length===1){if(t[0]===rN)throw new k(`ENOTDIR`,`not a directory`,e);let n=aN(t[0]);if(n===null||!this.pidExists(n))throw new k(`ENOENT`,`no such file or directory`,e);return nN.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=iN(e);if(t.length===1&&t[0]===rN)return new TextEncoder().encode(this.renderTable());if(t.length!==2)throw new k(`EISDIR`,`is a directory`,e);let n=aN(t[0]);if(n===null||!this.pidExists(n))throw new k(`ENOENT`,`no such file or directory`,e);let r=t[1];if(!nN.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=iN(e);if(t.length===0)return{kind:`directory`,size:0,mtime:0};if(t.length===1){if(t[0]===rN)return{kind:`file`,size:this.renderTable().length,mtime:Date.now()};let n=aN(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=aN(t[0]);if(n===null||!this.pidExists(n))throw new k(`ENOENT`,`no such file or directory`,e);let r=t[1];if(!nN.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:uN(e.status),status:e.status,argv:e.argv.join(` `),cwd:e.cwd,owner:dN(e),startedAt:e.startedAt,finishedAt:e.finishedAt,exitCode:e.exitCode}))};return JSON.stringify(e)+`
1176
+ `}renderProcFile(e,t){if(e===1)return fN(t);let n=this.pm.get(e);switch(t){case`status`:return oN(n);case`cmdline`:return sN(n);case`cwd`:return cN(n);case`stat`:return lN(n)}}};const nN=[`status`,`cmdline`,`cwd`,`stat`],rN=`table`;function iN(e){return e.replace(/^\/+/,``).replace(/\/+$/,``).split(`/`).filter(Boolean)}function aN(e){let t=Number.parseInt(e,10);return!Number.isFinite(t)||String(t)!==e?null:t}function oN(e){let t=[`Name:\t${e.kind}`,`Pid:\t${e.pid}`,`PPid:\t${e.ppid}`,`State:\t${uN(e.status)} (${e.status})`,`Owner:\t${dN(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
1177
  `)+`
1181
- `}function iN(e){return e.argv.join(`\0`)+`\0`}function aN(e){return e.cwd+`
1182
- `}function oN(e){return[e.pid,`(${e.kind})`,sN(e.status),e.ppid,e.exitCode??`-`,e.startedAt,e.finishedAt??`-`].join(` `)+`
1183
- `}function sN(e){switch(e){case`running`:return`R`;case`pending`:return`S`;case`exited`:return`Z`;case`killed`:return`K`}}function cN(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 lN(e){switch(e){case`status`:return[`Name: kernel-host`,`Pid: 1`,`PPid: 0`,`State: R (running)`,`Owner: system`].join(`
1178
+ `}function sN(e){return e.argv.join(`\0`)+`\0`}function cN(e){return e.cwd+`
1179
+ `}function lN(e){return[e.pid,`(${e.kind})`,uN(e.status),e.ppid,e.exitCode??`-`,e.startedAt,e.finishedAt??`-`].join(` `)+`
1180
+ `}function uN(e){switch(e){case`running`:return`R`;case`pending`:return`S`;case`exited`:return`Z`;case`killed`:return`K`}}function dN(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 fN(e){switch(e){case`status`:return[`Name: kernel-host`,`Pid: 1`,`PPid: 0`,`State: R (running)`,`Owner: system`].join(`
1184
1181
  `)+`
1185
1182
  `;case`cmdline`:return`kernel-host\0`;case`cwd`:return`/
1186
1183
  `;case`stat`:return`1 (kernel-host) R 0 - 0 -
1187
- `}}const uN=Math.max(Ni,Pi)+5e3;function dN(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(ji(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(!ki(n.token))return;let a=i.get(n.id);if(a){r({type:Mi,id:n.id}),a.result&&r({type:Ai,id:n.id,...a.result});return}let o={};i.set(n.id,o),r({type:Mi,id:n.id});let s=e=>{o.result=e,o.timer=setTimeout(()=>i.delete(n.id),uN),r({type:Ai,id:n.id,...e})};(Ii(n)?Fi(n):Li(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 fN(){return globalThis}function pN(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 Xb(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 mN(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 hN(e,t){if(e.type===`sudo-request`){t.log.debug?.(`sudo-request lick: UI-chip-only path; orchestrator owns delivery`,{lickId:e.lickId});return}gN(e,t)}async function gN(e,{orchestrator:t,log:n}){let r=t.getScoops(),i=O(r),a=e.type===`discovery`&&!e.targetScoop?WM(e,i.filter(YS),e=>t.getScoopContext?.(e.jid)?.getAgentMessages()??[]):void 0,o=e.targetScoop?fo(r,e.targetScoop):a??i[0];if(!o){n.warn(`Lick target scoop not found`,e.targetScoop);return}if(e.type===`discovery`&&!YS(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-BmMrqdz8.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=ux(e);if(s===null){n.debug?.(`dropping lick event with no renderable content`,{type:e.type});return}let c=pN(e),l=mN(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 _N(e,t,n,r,i){let a=new wi,o=new AM(e,{...r,getBrowserAPI:()=>t});o.setProcessManager(a);let s=Tn(),c=i.capabilityBroker??f(s,{...i.pageGestures?{pageGestures:i.pageGestures}:{}});o.setCapabilityBroker(c),Dr(c),fN().__slicc_pm=a,Ti(Di()),fN().__slicc_browser=t,await n.bind(o,t);let l=zr(()=>n.emitTrayRuntimeStatus()),u=xe(()=>n.emitTrayRuntimeStatus());ZM(o,n);let d=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,d)}catch(e){d.warn(`Configured host mounts failed`,e)}i.onBootProgress?.(`host-mounts-applied`)}}),await n.hydrateBuffersFromRecords(),n.publishHydratedTranscripts(),{processManager:a,orchestrator:o,unsubLeader:l,unsubFollower:u,sharedFs:o.getSharedFS(),capabilityBroker:c}}async function vN(e,t,n){let{registerSessionBudgetProvider:r,registerSessionCostsProvider:i}=await import(`./cost-command-C_1fldSP.js`).then(e=>e.t);i(t=>e.getSessionCostsForCommand(t));let{refreshBudgetWindow:a}=await Promise.resolve().then(()=>uy);r(()=>a());let{getLickManager:o}=await Promise.resolve().then(()=>AD),s=o();await s.init(),e.setLickManager(s);let c=t.lickEventHandler??hN,l={orchestrator:e,lickManager:s,log:n};return s.setEventHandler(e=>c(e,l)),s}async function yN(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 bN(e){let{orchestrator:t,processManager:r,lickManager:i,sharedFs:a}=e;IM({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=>i.emitEvent(e),processManager:r,runRealm:(e,t,n)=>Oi(e,t,n,void 0,{filename:t[1]}),makeRunId:()=>c().slice(10,22),splitResult:(e,t)=>n(e,t)})}async function xN(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 SN(e,t,n,r){try{let{startLickWsBridge:i}=await import(`./lick-ws-bridge-CNuyTf4Z.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 CN(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 BS(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})},{...wN(t),isOwnTab:RS(()=>r??null)});return e.start(),()=>e.stop()}catch(e){return n.warn(`Failed to start NavigationWatcher`,e),null}}function wN(e){let t=ge();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:()=>VS()}}async function TN(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 EN(e,t,n,r,i,a){e&&(await ON(e,n,r),i(`mounts-restored`),await DN(e,t,n,r,a),i(`jshd-restored`))}async function DN(e,t,n,r,i){try{let{restoreEnabledJshdUnits:r}=await import(`./restore-Ch8AaGei.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 ON(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(()=>Rb),{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 kN(){Vr(async()=>{let{getLastSeenVersion:e}=await import(`./upgrade-detection-CWsMP4Ab.js`);return e()})}function AN(e,t){(async()=>{try{let{detectUpgrade:t,recordVersionSeen:n}=await import(`./upgrade-detection-CWsMP4Ab.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 jN(e,t,n){try{let{BshWatchdog:n}=await import(`./bsh-watchdog-CQDvJ-W5.js`),{ScriptCatalog:r}=await import(`./script-catalog-B5BTq3Ma.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 MN(e){return e===`node-rest`}function NN(e,t,n,r){import(`./gelatiere-unit-Dx7lFku5.js`).then(async r=>{let i=r.createGelatiereSeam(e,t);if(r.publishGelatiereSeam(i),!n||!Ee(`memory-v2`)){await r.haltGelatiere(i);return}let{loadGelatiereConfig:a}=await import(`./gelatiere-store-DGJAZYRR.js`),o=await a(n);await r.bootGelatiere(i,o.nightly,o.allowedCommands)}).catch(e=>r.warn(`gelatiere seam failed to publish`,e))}function PN(e,t){if(!e)return()=>{};import(`./memory-curation-seam-DiXF2kri.js`).then(t=>t.publishMemorySeam(t.createMemorySeam(e))).catch(e=>t.warn(`memory seam failed to publish`,e));let n=!1,r=null;return Ee(`memory-v2`)&&import(`./memory-health-Cv3X9QVu.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 FN(e,t,n){if(!t){n.warn(`AgentBridge not published — orchestrator.getSharedFS() returned null`);return}xb(e,t,e.getSessionStore())}async function IN(e){let{container:t,browser:n,bridge:r,callbacks:i,skipConeBootstrap:a=!1}=e,o=e.logger??console,s=t=>e.onBootProgress?.(t);kN();let{processManager:c,orchestrator:l,unsubLeader:u,unsubFollower:d,sharedFs:f,capabilityBroker:p}=await _N(t,n,r,i,e);if(s(`orchestrator-ready`),FN(l,f,o),f)try{await f.mountInternal(`/proc`,new QM(c))}catch(e){o.warn(`Failed to mount /proc`,e)}let m=await vN(l,e,o);s(`lick-manager-ready`),f&&bN({orchestrator:l,processManager:c,lickManager:m,sharedFs:f}),fN().__slicc_lickManager=m,NN(l,m,f,o);let h=PN(f,o),{wsBridge:ee,wsRegistry:g}=await xN({browser:n,lickManager:m,orchestrator:l,sharedFs:f,log:o});fN().__slicc_wsSubscribers=g;let _=MN(p.adapter)?await SN(m,o,e.localLickWsUrl??null,f):null,te=CN(n,m,o,e.appPageUrl);await EN(f,c,m,o,s,l),a||await yN(l),s(`cone-bootstrapped`),TN(l,m,o),f&&AN(m,o);let ne=null,re=null;f&&({bshWatchdogStop:ne,scriptCatalogDispose:re}=await jN(f,n,o));let ie=null;f&&e.syncFsChannelNonce&&(ie=dN({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 LN({unsubLeader:u,unsubFollower:d,bshWatchdogStop:ne,memoryHealthStop:h,scriptCatalogDispose:re,lickWsBridgeStop:_,navigationWatcherStop:te,syncFsResponderDispose:ie,sharedFs:f,wsRegistry:g,wsBridge:ee,processManager:c,lickManager:m,browser:n,log:o}))}}}async function LN(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)}RN({processManager:i,lickManager:a,browser:o,wsRegistry:n})}function RN(e){let t=fN();t.__slicc_pm===e.processManager&&(delete t.__slicc_pm,Ti(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[d]}const zN=`x-bypass-llm-proxy`;function BN(e,t,n){return t?(r,i)=>{if(!VN(r,t,n))return e(r,i);let a=new Headers(i?.headers);return a.has(zN)||a.set(zN,`1`),e(r,{...i,headers:a})}:e}function VN(e,t,n){if(UN(e,t))return!0;let r=n?.()??null;return r?HN(e,r,t):!1}function HN(e,t,n){let r=WN(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 UN(e,t){let n=WN(e);try{return new URL(n,t).origin===t}catch{return!0}}function WN(e){return typeof e==`string`?e:e instanceof URL?e.href:e.url}function GN(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}}}const KN=new TextEncoder;var qN=class{screen;cols=80;rows=24;held=null;constructor(e){this.screen=e}lease(){if(this.held)return null;let e={input:[],resize:[]};this.held=e,this.screen.mode(`pty`);let t=new TextDecoder,n=this,r=!1;return{get cols(){return n.cols},get rows(){return n.rows},write:e=>{r||this.screen.output(t.decode(e,{stream:!0}))},onInput:t=>void e.input.push(t),onResize:t=>void e.resize.push(t),release:()=>{if(r)return;r=!0;let n=t.decode();n&&this.screen.output(n),this.held===e&&(this.held=null),this.screen.mode(`line`)}}}input(e){let t=KN.encode(e);for(let e of this.held?.input??[])e(t)}resize(e,t){if(!(e<=0||t<=0)){this.cols=e,this.rows=t;for(let n of this.held?.resize??[])n(e,t)}}},JN=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(!YN(e)||e.source!==`panel`)return;let t=e.payload;ZN(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`:this.sessions.get(e.sid)?.terminal.input(e.data);return;case`terminal-resize`:this.sessions.get(e.sid)?.terminal.resize(e.cols,e.rows);return}}async handleOpen(e){if(this.sessions.has(e.sid)){this.emitStatus(e.sid,`error`,`session already open`);return}try{let t={currentExec:null,currentProcess:null};t.currentExecMsg=null;let n=new qN({output:e=>{let n=t.currentExecMsg;n&&this.emitStream(n,`stdout`,e)},mode:t=>this.emit({type:`terminal-mode`,sid:e.sid,mode:t})});e.cols&&e.rows&&n.resize(e.cols,e.rows),t.terminal=n,t.shell=this.createShell(e.sid,{cwd:e.cwd,env:e.env,terminal:n}),this.sessions.set(e.sid,t),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.currentExecMsg=e,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=Ri(ne(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,t.currentExecMsg=null)}}async emitExecSuccess(e,t,n,r){let i=n.signal.aborted?XN(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,XN(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 YN(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function XN(e){switch(e){case`SIGINT`:return 130;case`SIGTERM`:return 143;case`SIGKILL`:return 137;case`SIGSTOP`:case`SIGCONT`:return 130}}function ZN(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 QN=class extends m{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 $N={maxExecutionTimeMs:1/0,maxCommandCount:1/0,maxLoopIterations:1/0,maxParserTokens:1/0,maxParseIterations:1/0};function eP(e){let{transport:t,fs:n,browser:r,processManager:i,sudoManager:a}=e,o=e.logger??console,s=a?.getShellConfig({transparentGating:!1}),c=new JN({transport:t,processManager:i,createShell:(a,o)=>new QN(a,t,{fs:n,cwd:o.cwd,env:o.env,browserAPI:r,webhook:{hasLocalNodeServer:e.webhook?.hasLocalNodeServer??(()=>!1),getLeaderStatus:e.webhook?.getLeaderStatus??Br},crontask:e.crontask,processManager:i,processOwner:{kind:`system`},terminal:o.terminal,sudo:s,executionLimits:$N}),logger:o});return{host:c,stop:c.start()}}function tP(e){if(e!=null){if(typeof e==`string`)return e;if(e instanceof Error)return iP(e);if(typeof e==`object`)return aP(e);if(typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`)return String(e)}}function nP(e){if(typeof e==`object`&&e&&!(e instanceof Error))return sP(e)??cP(e);let t=tP(e);if(t!==void 0)return rP(t)}function rP(e){let t=e.trim();if(!t)return e;let n=oP(t);if(n)return n;let r=t.indexOf(`{`),i=t.lastIndexOf(`}`);if(r>0&&i>r){let e=oP(t.slice(r,i+1));if(e)return e}return e}function iP(e){let t=e.name&&e.name!==`Error`?e.name:``,n=e.message||``;return t&&n?`${t}: ${n}`:n||t||`Error`}function aP(e){let t=sP(e),n=cP(e);return n&&t?`${n}: ${t}`:t??n}function oP(e){if(e.startsWith(`{`))try{return sP(JSON.parse(e))}catch{return}}function sP(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 cP(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 lP=null,uP=!1;function dP(){return typeof window>`u`||typeof document>`u`||document?.documentElement===void 0||typeof localStorage?.getItem!=`function`}function fP(e){return dP()?`standalone-worker`:e?`extension`:typeof document<`u`&&document.documentElement?.dataset?.electronOverlay?`electron`:`cli`}async function pP(e={}){if(!uP&&!(typeof localStorage<`u`&&typeof localStorage?.getItem==`function`&&localStorage.getItem(`telemetry-disabled`)===`true`)){p(mP),nO(gP),kO(hP);try{let t=fP(e.isExtensionRealm??!1);t!==`standalone-worker`&&typeof window<`u`?window.RUM_GENERATION=`slicc-${t}`:globalThis.RUM_GENERATION=`slicc-${t}`,t===`standalone-worker`?(lP=(await import(`./rum-worker-CwmNSpjO.js`)).default,yP(self)):t===`extension`?(AP({filterViteNoise:!1}),lP=(await import(`./rum-DW84CvBs.js`)).default,typeof window<`u`&&yP(window)):(typeof window<`u`&&(window.SAMPLE_PAGEVIEWS_AT_RATE=`high`),AP({filterViteNoise:!0}),xP(),lP=(await import(`./src-Cj-AoUM3.js`)).sampleRUM),uP=!0,lP&&lP(`navigate`,{source:typeof document<`u`?document.referrer:``,target:t})}catch{}}}function mP(e){lP?.(`fill`,{source:e})}function hP(e,t){let n=vP(t);n!==null&&lP?.(`error`,{source:e,target:n})}function gP(e,t,n){if(e===`error`){let e=vP(n);if(e===null)return;lP?.(`error`,{source:`scoop:${t}`,target:e});return}lP?.(e===`spawn`?`enter`:e===`feed`?`convert`:`leave`,{source:t,target:`scoop-${e}`})}function _P(e){return e.includes(`@vite/client`)||e.includes(`@vite/env`)||e.includes(`[vite]`)||/https?:\/\/localhost:\d+\/@vite\//.test(e)||/\/__vite_ping/.test(e)}function vP(e){let t=tP(e);if(t===void 0)return e==null?void 0:null;if(LO(t))return null;let n=nP(e)??rP(t);return LO(n)?null:SP(n)}function yP(e){e.addEventListener(`error`,e=>{let t=e;hP(`js`,t.error??t.message??``)}),e.addEventListener(`unhandledrejection`,e=>{hP(`js`,e.reason)})}function bP(e){return typeof e==`object`&&!!e&&!(e instanceof Error)}function xP(){typeof window>`u`||(window.addEventListener(`error`,e=>{let t=e.error;bP(t)&&(hP(`js`,t),e.stopImmediatePropagation())},!0),window.addEventListener(`unhandledrejection`,e=>{let t=e.reason;bP(t)&&(hP(`js`,t),e.stopImmediatePropagation())},!0))}function SP(e){let t=e??``;if(t.includes(`@vite/`)||t.includes(`[vite]`)||t.includes(`__vite_ping`)){let e=t.split(`
1189
- `).filter(e=>!_P(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 CP=Symbol.for(`slicc.telemetry.sendBeacon.wrapped`),wP=[[/(\/|%2F)(join|controller)(\/|%2F)[^/?#&"\s\\]+/gi,`$1$2$3redacted`],[/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\.[0-9a-f]{16,}/gi,`redacted`],[/\b[0-9a-f]{32}--[0-9a-f]{16,}\b/gi,`redacted`]];function TP(e){let t=e;for(let[e,n]of wP)t=t.replace(e,n);return t}function EP(e){let t=typeof e==`string`?e:nP(e)??tP(e);if(typeof t!=`string`)return{kind:`absent`};let n=rP(t);if(n===`[object Object]`)return{kind:`noise`};let r=SP(n);return r===null?{kind:`noise`}:{kind:`kept`,value:r,mutated:r!==e}}function DP(e){let t=EP(e.source),n=EP(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 OP(e){try{if(typeof e==`string`)return e;if(e instanceof ArrayBuffer)return new TextDecoder().decode(e)}catch{}return null}function kP(e){if(e.charCodeAt(0)!==123)return null;try{let t=JSON.parse(e);return t?.checkpoint===`error`?DP(t):null}catch{return null}}function AP(e){if(typeof navigator>`u`||typeof navigator.sendBeacon!=`function`)return;let t=navigator.sendBeacon;if(t[CP])return;let n=t.bind(navigator),r=((t,r)=>{let i=OP(r);if(i===null)return n(t,r);let a=TP(i);if(e.filterViteNoise){let e=kP(a);if(e===!0)return!0;if(e!==null)return n(t,e)}return n(t,a===i?r:a)});r[CP]=!0,navigator.sendBeacon=r}function jP(e){let t=new MP(e);return t.start(),{stop:()=>t.dispose()}}var MP=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(!NP(e)||e.source!==`panel`)return;let t=e.payload;if(PP(t)){this.handleRequest(t).catch(e=>{this.log.warn(`[vfs-rpc-host] handler unexpectedly threw`,e)});return}if(FP(t)){this.handleWriteRequest(t).catch(e=>{this.log.warn(`[vfs-rpc-host] write handler unexpectedly threw`,e)});return}if(IP(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(LP(e.type),e.requestId,new k(`EACCES`,`vfs-rpc-host has no writable backend wired`),RP(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=zP(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=zP(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 NP(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function PP(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 FP(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 IP(e){if(typeof e!=`object`||!e)return!1;let t=e.type;return t===`vfs-watch`||t===`vfs-unwatch`}function LP(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 RP(e){return e.type===`vfs-flush`||e.type===`vfs-list-mount-points`?``:e.path}function zP(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 BP(){let e=globalThis.fetch;if(!e)return;let t=self?.location?self.location.origin:void 0;globalThis.fetch=BN(e.bind(globalThis),t,VP)}function VP(){let e=Pe();if(!e)return null;try{return new URL(e).origin}catch{return null}}function HP(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 UP=null,WP=null,GP=null,KP=null,qP=null,JP=null;const YP=GN(e=>QP(e));self.addEventListener(`message`,e=>{e.data?.type===`kernel-worker-init`&&YP.handle(e.data)});function XP(e){let t=oo(e.pageBuildId,`6.228.0-muo5vxp5`);return()=>{t&&hP(`mixed-build-graph`,`page ${e.pageBuildId} worker 6.228.0-muo5vxp5`)}}function ZP(e){BP(),Ne(e.localApiBaseUrl??null),Me(e.bridgeToken??null),Ei(e.syncFsBridgeEnabled??!1),r(e.pageLoadedAt??null),Le(e.extensionDelegateId??null),HP(e.localStorageSeed??{}),e.flagFloat&&qa(e.flagFloat)}async function QP(e){ro(e.instanceId);let t=XP(e),n=t=>{e.kernelPort.postMessage({type:`kernel-worker-boot-progress`,stage:t})};try{ZP(e),pP().then(t).catch(()=>{}),await Ae(),n(`providers-registered`);let r=lo(e.kernelPort),i=new ES(r),a=ES.createCallbacks(i),o=new uo(e.cdpPort);await o.connect(),n(`cdp-connected`);let s=new Fa(o);UP=await IN({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=UP.sharedFs?.getWatcher();if(u){let e=null,t=new Set;for(let n of Bi)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);JP=d({instanceId:e.instanceId}),globalThis.__slicc_panelRpc=JP,s.setTrayTargetProvider(Wa(Te));let f=await eF({host:UP,transport:r,browser:s,instanceId:e.instanceId});f&&(WP=f.stopTerminalHost,GP=f.stopVfsRpcHost,KP=f.stopSpeechAssetsResponder,qP=f.stopComputersHost),e.kernelPort.postMessage({type:`kernel-worker-ready`})}catch(t){$P(e.kernelPort,t)}}function $P(e,t){ao(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 eF(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=eP({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=jP({transport:e.transport,client:t,writableClient:t,getWatcher:()=>t.getWatcher(),logger:console}),a=await tF(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 tF(e,t){let{installSpeechAssetsResponder:n}=await import(`./speech-assets-bridge-DequteUl.js`),{ensureSpeechAssetsStaged:r}=await import(`./ensure-speech-assets-B6y_vIib.js`),{createProxiedFetch:i}=await import(`./proxied-fetch-CoZ8jHud.js`).then(e=>e.o),a=i();return n({instanceId:t,ensure:t=>r({fs:e,fetch:a},t)})}self.addEventListener(`message`,e=>{e.data?.type===`kernel-worker-shutdown`&&(WP?.(),WP=null,GP?.(),GP=null,KP?.(),KP=null,qP?.(),qP=null,JP?.dispose(),JP=null,UP?.dispose())});export{RC as a,tS as c,Zy as d,fb as f,ny as h,LC as i,nS as l,gy as m,kk as n,BC as o,ky as p,UE as r,zC as s,FA as t,dx as u};
1184
+ `}}const pN=Math.max(Li,Ri)+5e3;function mN(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(Fi(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(!Ni(n.token))return;let a=i.get(n.id);if(a){r({type:Ii,id:n.id}),a.result&&r({type:Pi,id:n.id,...a.result});return}let o={};i.set(n.id,o),r({type:Ii,id:n.id});let s=e=>{o.result=e,o.timer=setTimeout(()=>i.delete(n.id),pN),r({type:Pi,id:n.id,...e})};(Bi(n)?zi(n):Vi(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 hN(){return globalThis}function gN(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 ex(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 _N(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 vN(e,t){if(e.type===`sudo-request`){t.log.debug?.(`sudo-request lick: UI-chip-only path; orchestrator owns delivery`,{lickId:e.lickId});return}yN(e,t)}async function yN(e,{orchestrator:t,log:n}){let r=t.getScoops(),i=O(r),a=e.type===`discovery`&&!e.targetScoop?qM(e,i.filter($S),e=>t.getScoopContext?.(e.jid)?.getAgentMessages()??[]):void 0,o=e.targetScoop?go(r,e.targetScoop):a??i[0];if(!o){n.warn(`Lick target scoop not found`,e.targetScoop);return}if(e.type===`discovery`&&!$S(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-DdtxmzSe.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=mx(e);if(s===null){n.debug?.(`dropping lick event with no renderable content`,{type:e.type});return}let c=gN(e),l=_N(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 bN(e,t,n,r,i){let a=new Oi,o=new NM(e,{...r,getBrowserAPI:()=>t});o.setProcessManager(a);let s=Tn(),c=i.capabilityBroker??f(s,{...i.pageGestures?{pageGestures:i.pageGestures}:{}});o.setCapabilityBroker(c),Dr(c),hN().__slicc_pm=a,ki(ji()),hN().__slicc_browser=t,await n.bind(o,t);let l=zr(()=>n.emitTrayRuntimeStatus()),u=xe(()=>n.emitTrayRuntimeStatus());eN(o,n);let d=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,d)}catch(e){d.warn(`Configured host mounts failed`,e)}i.onBootProgress?.(`host-mounts-applied`)}}),await n.hydrateBuffersFromRecords(),n.publishHydratedTranscripts(),{processManager:a,orchestrator:o,unsubLeader:l,unsubFollower:u,sharedFs:o.getSharedFS(),capabilityBroker:c}}async function xN(e,t,n){let{registerSessionBudgetProvider:r,registerSessionCostsProvider:i}=await import(`./cost-command-C_1fldSP.js`).then(e=>e.t);i(t=>e.getSessionCostsForCommand(t));let{refreshBudgetWindow:a}=await Promise.resolve().then(()=>my);r(()=>a());let{getLickManager:o}=await Promise.resolve().then(()=>ND),s=o();await s.init(),e.setLickManager(s);let c=t.lickEventHandler??vN,l={orchestrator:e,lickManager:s,log:n};return s.setEventHandler(e=>c(e,l)),s}async function SN(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 CN(e){let{orchestrator:t,processManager:r,lickManager:i,sharedFs:a}=e;zM({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=>i.emitEvent(e),processManager:r,runRealm:(e,t,n)=>Mi(e,t,n,void 0,{filename:t[1]}),makeRunId:()=>c().slice(10,22),splitResult:(e,t)=>n(e,t)})}async function wN(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))+`
1185
+ `,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 TN(e,t,n,r){try{let{startLickWsBridge:i}=await import(`./lick-ws-bridge-DAHpKRdr.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 EN(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 WS(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})},{...DN(t),isOwnTab:HS(()=>r??null)});return e.start(),()=>e.stop()}catch(e){return n.warn(`Failed to start NavigationWatcher`,e),null}}function DN(e){let t=ge();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:()=>GS()}}async function ON(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 kN(e,t,n,r,i,a){e&&(await jN(e,n,r),i(`mounts-restored`),await AN(e,t,n,r,a),i(`jshd-restored`))}async function AN(e,t,n,r,i){try{let{restoreEnabledJshdUnits:r}=await import(`./restore-CAHvRjUh.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 jN(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(()=>Hb),{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 MN(){Vr(async()=>{let{getLastSeenVersion:e}=await import(`./upgrade-detection-Bi7vIh9b.js`);return e()})}function NN(e,t){(async()=>{try{let{detectUpgrade:t,recordVersionSeen:n}=await import(`./upgrade-detection-Bi7vIh9b.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 PN(e,t,n){try{let{BshWatchdog:n}=await import(`./bsh-watchdog-CQDvJ-W5.js`),{ScriptCatalog:r}=await import(`./script-catalog-B5BTq3Ma.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 FN(e){return e===`node-rest`}function IN(e,t,n,r){import(`./gelatiere-unit-B45hU9Qp.js`).then(async r=>{let i=r.createGelatiereSeam(e,t);if(r.publishGelatiereSeam(i),!n||!Ee(`memory-v2`)){await r.haltGelatiere(i);return}let{loadGelatiereConfig:a}=await import(`./gelatiere-store-DGJAZYRR.js`),o=await a(n);await r.bootGelatiere(i,o.nightly,o.allowedCommands)}).catch(e=>r.warn(`gelatiere seam failed to publish`,e))}function LN(e,t){if(!e)return()=>{};import(`./memory-curation-seam-D7fqn714.js`).then(t=>t.publishMemorySeam(t.createMemorySeam(e))).catch(e=>t.warn(`memory seam failed to publish`,e));let n=!1,r=null;return Ee(`memory-v2`)&&import(`./memory-health-Bqo_UDWF.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 RN(e,t,n){if(!t){n.warn(`AgentBridge not published — orchestrator.getSharedFS() returned null`);return}Tb(e,t,e.getSessionStore())}async function zN(e){let{container:t,browser:n,bridge:r,callbacks:i,skipConeBootstrap:a=!1}=e,o=e.logger??console,s=t=>e.onBootProgress?.(t);MN();let{processManager:c,orchestrator:l,unsubLeader:u,unsubFollower:d,sharedFs:f,capabilityBroker:p}=await bN(t,n,r,i,e);if(s(`orchestrator-ready`),RN(l,f,o),f)try{await f.mountInternal(`/proc`,new tN(c))}catch(e){o.warn(`Failed to mount /proc`,e)}let m=await xN(l,e,o);s(`lick-manager-ready`),f&&CN({orchestrator:l,processManager:c,lickManager:m,sharedFs:f}),hN().__slicc_lickManager=m,IN(l,m,f,o);let h=LN(f,o),{wsBridge:ee,wsRegistry:g}=await wN({browser:n,lickManager:m,orchestrator:l,sharedFs:f,log:o});hN().__slicc_wsSubscribers=g;let _=FN(p.adapter)?await TN(m,o,e.localLickWsUrl??null,f):null,te=EN(n,m,o,e.appPageUrl);await kN(f,c,m,o,s,l),a||await SN(l),s(`cone-bootstrapped`),ON(l,m,o),f&&NN(m,o);let ne=null,re=null;f&&({bshWatchdogStop:ne,scriptCatalogDispose:re}=await PN(f,n,o));let ie=null;f&&e.syncFsChannelNonce&&(ie=mN({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 BN({unsubLeader:u,unsubFollower:d,bshWatchdogStop:ne,memoryHealthStop:h,scriptCatalogDispose:re,lickWsBridgeStop:_,navigationWatcherStop:te,syncFsResponderDispose:ie,sharedFs:f,wsRegistry:g,wsBridge:ee,processManager:c,lickManager:m,browser:n,log:o}))}}}async function BN(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)}VN({processManager:i,lickManager:a,browser:o,wsRegistry:n})}function VN(e){let t=hN();t.__slicc_pm===e.processManager&&(delete t.__slicc_pm,ki(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[d]}const HN=`x-bypass-llm-proxy`;function UN(e,t,n){return t?(r,i)=>{if(!WN(r,t,n))return e(r,i);let a=new Headers(i?.headers);return a.has(HN)||a.set(HN,`1`),e(r,{...i,headers:a})}:e}function WN(e,t,n){if(KN(e,t))return!0;let r=n?.()??null;return r?GN(e,r,t):!1}function GN(e,t,n){let r=qN(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 KN(e,t){let n=qN(e);try{return new URL(n,t).origin===t}catch{return!0}}function qN(e){return typeof e==`string`?e:e instanceof URL?e.href:e.url}function JN(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}}}const YN=new TextEncoder;var XN=class{screen;cols=80;rows=24;held=null;constructor(e){this.screen=e}lease(){if(this.held)return null;let e={input:[],resize:[]};this.held=e,this.screen.mode(`pty`);let t=new TextDecoder,n=this,r=!1;return{get cols(){return n.cols},get rows(){return n.rows},write:e=>{r||this.screen.output(t.decode(e,{stream:!0}))},onInput:t=>void e.input.push(t),onResize:t=>void e.resize.push(t),release:()=>{if(r)return;r=!0;let n=t.decode();n&&this.screen.output(n),this.held===e&&(this.held=null),this.screen.mode(`line`)}}}input(e){let t=YN.encode(e);for(let e of this.held?.input??[])e(t)}resize(e,t){if(!(e<=0||t<=0)){this.cols=e,this.rows=t;for(let n of this.held?.resize??[])n(e,t)}}},ZN=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(!QN(e)||e.source!==`panel`)return;let t=e.payload;eP(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`:this.sessions.get(e.sid)?.terminal.input(e.data);return;case`terminal-resize`:this.sessions.get(e.sid)?.terminal.resize(e.cols,e.rows);return}}async handleOpen(e){if(this.sessions.has(e.sid)){this.emitStatus(e.sid,`error`,`session already open`);return}try{let t={currentExec:null,currentProcess:null};t.currentExecMsg=null;let n=new XN({output:e=>{let n=t.currentExecMsg;n&&this.emitStream(n,`stdout`,e)},mode:t=>this.emit({type:`terminal-mode`,sid:e.sid,mode:t})});e.cols&&e.rows&&n.resize(e.cols,e.rows),t.terminal=n,t.shell=this.createShell(e.sid,{cwd:e.cwd,env:e.env,terminal:n}),this.sessions.set(e.sid,t),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.currentExecMsg=e,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=Hi(ne(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,t.currentExecMsg=null)}}async emitExecSuccess(e,t,n,r){let i=n.signal.aborted?$N(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,$N(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 QN(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function $N(e){switch(e){case`SIGINT`:return 130;case`SIGTERM`:return 143;case`SIGKILL`:return 137;case`SIGSTOP`:case`SIGCONT`:return 130}}function eP(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 tP=class extends m{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 nP={maxExecutionTimeMs:1/0,maxCommandCount:1/0,maxLoopIterations:1/0,maxParserTokens:1/0,maxParseIterations:1/0};function rP(e){let{transport:t,fs:n,browser:r,processManager:i,sudoManager:a}=e,o=e.logger??console,s=a?.getShellConfig({transparentGating:!1}),c=new ZN({transport:t,processManager:i,createShell:(a,o)=>new tP(a,t,{fs:n,cwd:o.cwd,env:o.env,browserAPI:r,webhook:{hasLocalNodeServer:e.webhook?.hasLocalNodeServer??(()=>!1),getLeaderStatus:e.webhook?.getLeaderStatus??Br},crontask:e.crontask,processManager:i,processOwner:{kind:`system`},terminal:o.terminal,sudo:s,executionLimits:nP}),logger:o});return{host:c,stop:c.start()}}function iP(e){if(e!=null){if(typeof e==`string`)return e;if(e instanceof Error)return sP(e);if(typeof e==`object`)return cP(e);if(typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`)return String(e)}}function aP(e){if(typeof e==`object`&&e&&!(e instanceof Error))return uP(e)??dP(e);let t=iP(e);if(t!==void 0)return oP(t)}function oP(e){let t=e.trim();if(!t)return e;let n=lP(t);if(n)return n;let r=t.indexOf(`{`),i=t.lastIndexOf(`}`);if(r>0&&i>r){let e=lP(t.slice(r,i+1));if(e)return e}return e}function sP(e){let t=e.name&&e.name!==`Error`?e.name:``,n=e.message||``;return t&&n?`${t}: ${n}`:n||t||`Error`}function cP(e){let t=uP(e),n=dP(e);return n&&t?`${n}: ${t}`:t??n}function lP(e){if(e.startsWith(`{`))try{return uP(JSON.parse(e))}catch{return}}function uP(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 dP(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 fP=null,pP=!1;function mP(){return typeof window>`u`||typeof document>`u`||document?.documentElement===void 0||typeof localStorage?.getItem!=`function`}function hP(e){return mP()?`standalone-worker`:e?`extension`:typeof document<`u`&&document.documentElement?.dataset?.electronOverlay?`electron`:`cli`}async function gP(e={}){if(!pP&&!(typeof localStorage<`u`&&typeof localStorage?.getItem==`function`&&localStorage.getItem(`telemetry-disabled`)===`true`)){p(_P),aO(yP),MO(vP);try{let t=hP(e.isExtensionRealm??!1);t!==`standalone-worker`&&typeof window<`u`?window.RUM_GENERATION=`slicc-${t}`:globalThis.RUM_GENERATION=`slicc-${t}`,t===`standalone-worker`?(fP=(await import(`./rum-worker-CwmNSpjO.js`)).default,SP(self)):t===`extension`?(NP({filterViteNoise:!1}),fP=(await import(`./rum-DW84CvBs.js`)).default,typeof window<`u`&&SP(window)):(typeof window<`u`&&(window.SAMPLE_PAGEVIEWS_AT_RATE=`high`),NP({filterViteNoise:!0}),wP(),fP=(await import(`./src-Cj-AoUM3.js`)).sampleRUM),pP=!0,fP&&fP(`navigate`,{source:typeof document<`u`?document.referrer:``,target:t})}catch{}}}function _P(e){fP?.(`fill`,{source:e})}function vP(e,t){let n=xP(t);n!==null&&fP?.(`error`,{source:e,target:n})}function yP(e,t,n){if(e===`error`){let e=xP(n);if(e===null)return;fP?.(`error`,{source:`scoop:${t}`,target:e});return}fP?.(e===`spawn`?`enter`:e===`feed`?`convert`:`leave`,{source:t,target:`scoop-${e}`})}function bP(e){return e.includes(`@vite/client`)||e.includes(`@vite/env`)||e.includes(`[vite]`)||/https?:\/\/localhost:\d+\/@vite\//.test(e)||/\/__vite_ping/.test(e)}function xP(e){let t=iP(e);if(t===void 0)return e==null?void 0:null;if(BO(t))return null;let n=aP(e)??oP(t);return BO(n)?null:TP(n)}function SP(e){e.addEventListener(`error`,e=>{let t=e;vP(`js`,t.error??t.message??``)}),e.addEventListener(`unhandledrejection`,e=>{vP(`js`,e.reason)})}function CP(e){return typeof e==`object`&&!!e&&!(e instanceof Error)}function wP(){typeof window>`u`||(window.addEventListener(`error`,e=>{let t=e.error;CP(t)&&(vP(`js`,t),e.stopImmediatePropagation())},!0),window.addEventListener(`unhandledrejection`,e=>{let t=e.reason;CP(t)&&(vP(`js`,t),e.stopImmediatePropagation())},!0))}function TP(e){let t=e??``;if(t.includes(`@vite/`)||t.includes(`[vite]`)||t.includes(`__vite_ping`)){let e=t.split(`
1186
+ `).filter(e=>!bP(e)).join(`
1187
+ `).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 EP=Symbol.for(`slicc.telemetry.sendBeacon.wrapped`),DP=[[/(\/|%2F)(join|controller)(\/|%2F)[^/?#&"\s\\]+/gi,`$1$2$3redacted`],[/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\.[0-9a-f]{16,}/gi,`redacted`],[/\b[0-9a-f]{32}--[0-9a-f]{16,}\b/gi,`redacted`]];function OP(e){let t=e;for(let[e,n]of DP)t=t.replace(e,n);return t}function kP(e){let t=typeof e==`string`?e:aP(e)??iP(e);if(typeof t!=`string`)return{kind:`absent`};let n=oP(t);if(n===`[object Object]`)return{kind:`noise`};let r=TP(n);return r===null?{kind:`noise`}:{kind:`kept`,value:r,mutated:r!==e}}function AP(e){let t=kP(e.source),n=kP(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 jP(e){try{if(typeof e==`string`)return e;if(e instanceof ArrayBuffer)return new TextDecoder().decode(e)}catch{}return null}function MP(e){if(e.charCodeAt(0)!==123)return null;try{let t=JSON.parse(e);return t?.checkpoint===`error`?AP(t):null}catch{return null}}function NP(e){if(typeof navigator>`u`||typeof navigator.sendBeacon!=`function`)return;let t=navigator.sendBeacon;if(t[EP])return;let n=t.bind(navigator),r=((t,r)=>{let i=jP(r);if(i===null)return n(t,r);let a=OP(i);if(e.filterViteNoise){let e=MP(a);if(e===!0)return!0;if(e!==null)return n(t,e)}return n(t,a===i?r:a)});r[EP]=!0,navigator.sendBeacon=r}function PP(e){let t=new FP(e);return t.start(),{stop:()=>t.dispose()}}var FP=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(!IP(e)||e.source!==`panel`)return;let t=e.payload;if(LP(t)){this.handleRequest(t).catch(e=>{this.log.warn(`[vfs-rpc-host] handler unexpectedly threw`,e)});return}if(RP(t)){this.handleWriteRequest(t).catch(e=>{this.log.warn(`[vfs-rpc-host] write handler unexpectedly threw`,e)});return}if(zP(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(BP(e.type),e.requestId,new k(`EACCES`,`vfs-rpc-host has no writable backend wired`),VP(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=HP(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=HP(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 IP(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function LP(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 RP(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 zP(e){if(typeof e!=`object`||!e)return!1;let t=e.type;return t===`vfs-watch`||t===`vfs-unwatch`}function BP(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 VP(e){return e.type===`vfs-flush`||e.type===`vfs-list-mount-points`?``:e.path}function HP(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 UP(){let e=globalThis.fetch;if(!e)return;let t=self?.location?self.location.origin:void 0;globalThis.fetch=UN(e.bind(globalThis),t,WP)}function WP(){let e=Pe();if(!e)return null;try{return new URL(e).origin}catch{return null}}function GP(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 KP=null,qP=null,JP=null,YP=null,XP=null,ZP=null;const QP=JN(e=>tF(e));self.addEventListener(`message`,e=>{e.data?.type===`kernel-worker-init`&&QP.handle(e.data)});function $P(e){let t=uo(e.pageBuildId,`6.229.0-muocngbg`);return()=>{t&&vP(`mixed-build-graph`,`page ${e.pageBuildId} worker 6.229.0-muocngbg`)}}function eF(e){UP(),Ne(e.localApiBaseUrl??null),Me(e.bridgeToken??null),Ai(e.syncFsBridgeEnabled??!1),r(e.pageLoadedAt??null),Le(e.extensionDelegateId??null),GP(e.localStorageSeed??{}),e.flagFloat&&Za(e.flagFloat)}async function tF(e){so(e.instanceId);let t=$P(e),n=t=>{e.kernelPort.postMessage({type:`kernel-worker-boot-progress`,stage:t})};try{eF(e),gP().then(t).catch(()=>{}),await Ae(),n(`providers-registered`);let r=mo(e.kernelPort),i=new AS(r),a=AS.createCallbacks(i),o=new ho(e.cdpPort);await o.connect(),n(`cdp-connected`);let s=new za(o);KP=await zN({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=KP.sharedFs?.getWatcher();if(u){let e=null,t=new Set;for(let n of Wi)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);ZP=d({instanceId:e.instanceId}),globalThis.__slicc_panelRpc=ZP,s.setTrayTargetProvider(Ja(Te));let f=await rF({host:KP,transport:r,browser:s,instanceId:e.instanceId});f&&(qP=f.stopTerminalHost,JP=f.stopVfsRpcHost,YP=f.stopSpeechAssetsResponder,XP=f.stopComputersHost),e.kernelPort.postMessage({type:`kernel-worker-ready`})}catch(t){nF(e.kernelPort,t)}}function nF(e,t){lo(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 rF(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=rP({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=PP({transport:e.transport,client:t,writableClient:t,getWatcher:()=>t.getWatcher(),logger:console}),a=await iF(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 iF(e,t){let{installSpeechAssetsResponder:n}=await import(`./speech-assets-bridge-DequteUl.js`),{ensureSpeechAssetsStaged:r}=await import(`./ensure-speech-assets-CGY0yb53.js`),{createProxiedFetch:i}=await import(`./proxied-fetch-CoZ8jHud.js`).then(e=>e.o),a=i();return n({instanceId:t,ensure:t=>r({fs:e,fetch:a},t)})}self.addEventListener(`message`,e=>{e.data?.type===`kernel-worker-shutdown`&&(qP?.(),qP=null,JP?.(),JP=null,YP?.(),YP=null,XP?.(),XP=null,ZP?.dispose(),ZP=null,KP?.dispose())});export{HC as a,aS as c,tb as d,gb as f,oy as h,VC as i,oS as l,by as m,Mk as n,WC as o,Ny as p,KE as r,UC as s,RA as t,hx as u};