sliccy 6.227.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.
- package/dist/ui/.vite/manifest.json +186 -186
- package/dist/ui/assets/{account-store-BFb2UO2K.js → account-store-BkmYrtWh.js} +1 -1
- package/dist/ui/assets/account-store-DaI3pV_q.js +1 -0
- package/dist/ui/assets/adobe-ByGGniSc.js +1 -0
- package/dist/ui/assets/{adobe-CN7urDKo.js → adobe-CK5jIUgh.js} +1 -1
- package/dist/ui/assets/{agent-panels-C6MuWyzH.js → agent-panels-4N8lgLlB.js} +1 -1
- package/dist/ui/assets/{agent-tools-BL9-Zw2C.js → agent-tools-CbAMai1C.js} +1 -1
- package/dist/ui/assets/{almost-bash-shell-headless-DQhRonH_.js → almost-bash-shell-headless-D4lkL1PE.js} +511 -633
- package/dist/ui/assets/{apply-layout-DWiLhm8Y.js → apply-layout-C3Hxv2wc.js} +1 -1
- package/dist/ui/assets/{apps-F56LSkNx.js → apps-CSLecGgW.js} +1 -1
- package/dist/ui/assets/{azure-openai-85x5L6_B.js → azure-openai-41jp9LC_.js} +1 -1
- package/dist/ui/assets/{azure-openai-CY4c1Ugr.js → azure-openai-D_87yjUR.js} +1 -1
- package/dist/ui/assets/{backend-hostfs-uVp10KM9.js → backend-hostfs-CCcqzP0i.js} +1 -1
- package/dist/ui/assets/{cdp-BJooT_YW.js → cdp-BkKwqz1e.js} +1 -1
- package/dist/ui/assets/{cerebras-CZd9VG3E.js → cerebras-BDO-kvE5.js} +1 -1
- package/dist/ui/assets/{cerebras-B7CuTW7B.js → cerebras-U5nzA51c.js} +1 -1
- package/dist/ui/assets/client-DWx5wn8j.js +4 -0
- package/dist/ui/assets/{codemode-tool-wGfb8DBp.js → codemode-tool-BQX4yxNo.js} +1 -1
- package/dist/ui/assets/{composer-speech-CIFv7pMq.js → composer-speech-srkAxUbm.js} +1 -1
- package/dist/ui/assets/{connect-surface-B2N6LdiO.js → connect-surface-DDMjzUVa.js} +1 -1
- package/dist/ui/assets/connection-manager-DiSK2DFK.js +1 -0
- package/dist/ui/assets/core-IQSnHO6h.js +36 -0
- package/dist/ui/assets/{directed-approval-ALHdAvDT.js → directed-approval-DoAqSdwX.js} +1 -1
- package/dist/ui/assets/{emscripten-vfs-hook-BWjaiiFG.js → emscripten-vfs-hook-Btn8bhm3.js} +1 -1
- package/dist/ui/assets/{ensure-speech-assets-yt0EoyNf.js → ensure-speech-assets-CGY0yb53.js} +1 -1
- package/dist/ui/assets/float-topology-DIH6ujZe.js +1 -0
- package/dist/ui/assets/frontmatter-Dcb90b9Y.js +4 -0
- package/dist/ui/assets/{frozen-archive-writer-BBnxV-Sw.js → frozen-archive-writer-Bx7lDD-y.js} +1 -1
- package/dist/ui/assets/{fs-DdDYEgE4.js → fs-CmMyV0R2.js} +2 -2
- package/dist/ui/assets/{fs-Bhw5j0eY.js → fs-HVEpoBdl.js} +1 -1
- package/dist/ui/assets/gelatiere-constants-BYJlhm8R.js +1 -0
- package/dist/ui/assets/gelatiere-store-DGJAZYRR.js +1 -0
- package/dist/ui/assets/gelatiere-unit-B45hU9Qp.js +1 -0
- package/dist/ui/assets/{github-DzMMdXju.js → github-CHlD9DnD.js} +1 -1
- package/dist/ui/assets/{github-C06K6hM6.js → github-D5pRwutP.js} +2 -2
- package/dist/ui/assets/{github-auth-DcTBaLFg.js → github-auth-CbquPMGV.js} +1 -1
- package/dist/ui/assets/{github-copilot-BCxu-JOH.js → github-copilot-CKYs3zD6.js} +1 -1
- package/dist/ui/assets/{github-copilot-DMzWgULe.js → github-copilot-ah3fINw0.js} +1 -1
- package/dist/ui/assets/{github-install-BiHV37oT.js → github-install-BCW6YENq.js} +1 -1
- package/dist/ui/assets/{github-zip-CHlzswro.js → github-zip-DBBIH7pC.js} +1 -1
- package/dist/ui/assets/{go-driver-DqgTG9N6.js → go-driver--cdxNvov.js} +1 -1
- package/dist/ui/assets/{guest-tool-gate-Df5NH2fw.js → guest-tool-gate-oF9u91qg.js} +1 -1
- package/dist/ui/assets/{hear-RPJIER3w.js → hear-7ll-c37k.js} +1 -1
- package/dist/ui/assets/{help-BA8Xystm.js → help-BufsEGnU.js} +1 -1
- package/dist/ui/assets/installer-DSzRazpo.js +2 -0
- package/dist/ui/assets/{interrupted-work-recovery-DUcRwxv3.js → interrupted-work-recovery-BvaORnO5.js} +1 -1
- package/dist/ui/assets/ipk-mamba-DT6fHMa9.js +46 -0
- package/dist/ui/assets/{js-realm-worker-BZ9Q6ni5.js → js-realm-worker-_lsydYvZ.js} +2 -2
- package/dist/ui/assets/{jsh-executor-Iaq-AOjA.js → jsh-executor--J3zbaof.js} +2 -2
- package/dist/ui/assets/{kernel-worker-CTxRZxWy.js → kernel-worker-D8RoqWtJ.js} +54 -57
- package/dist/ui/assets/{lick-ws-bridge-C_yTWgQK.js → lick-ws-bridge-DAHpKRdr.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-DEXhaOXo.js → lick-ws-bridge-DnebioSV.js} +1 -1
- package/dist/ui/assets/{live-session-curation-CBWOt4Na.js → live-session-curation-BwBWvDgr.js} +1 -1
- package/dist/ui/assets/{live-session-snapshot-2ANcFmFa.js → live-session-snapshot-CWLRm7ap.js} +1 -1
- package/dist/ui/assets/loader-D4Fuki1u.js +1 -0
- package/dist/ui/assets/{local-llm-BY58x8Yq.js → local-llm-Bkn90yGM.js} +1 -1
- package/dist/ui/assets/{local-llm-Brt8sjwN.js → local-llm-C2ZxUpDd.js} +1 -1
- package/dist/ui/assets/{main-DFwN1I9-.js → main-CYO-QAwq.js} +3 -3
- package/dist/ui/assets/{main-cherry-CKnVoCvo.js → main-cherry-inPsecSV.js} +1 -1
- package/dist/ui/assets/mcp-command-g-QpCeTS.js +170 -0
- package/dist/ui/assets/{memory-curation-seam-CRQovNy0.js → memory-curation-seam-D7fqn714.js} +1 -1
- package/dist/ui/assets/{memory-health-CWV9igFz.js → memory-health-Bqo_UDWF.js} +1 -1
- package/dist/ui/assets/{memory-write-execute-F74nkaOx.js → memory-write-execute-r0RBk_wW.js} +1 -1
- package/dist/ui/assets/{merge-folded-cost-into-frozen-CNbJWFVZ.js → merge-folded-cost-into-frozen-jP6pVzid.js} +1 -1
- package/dist/ui/assets/{mount-CVw88Sae.js → mount-BNrwlTED.js} +1 -1
- package/dist/ui/assets/{mount-Cd5d-dGq.js → mount-DxWl9Cgn.js} +3 -3
- package/dist/ui/assets/{new-session-BCLo3JwP.js → new-session-PLmNdqPO.js} +2 -2
- package/dist/ui/assets/{oauth-bootstrap-m4oJyeeN.js → oauth-bootstrap-CYR02wc0.js} +2 -2
- package/dist/ui/assets/{onboarding-orchestrator-CYaAfyzh.js → onboarding-orchestrator-Ch_OZygn.js} +1 -1
- package/dist/ui/assets/{openai-codex-D-KswPCn.js → openai-codex-BFffUCUE.js} +1 -1
- package/dist/ui/assets/{openai-codex-CCVnXN_Y.js → openai-codex-ChaMaxfV.js} +1 -1
- package/dist/ui/assets/{openrouter-BMACqhZg.js → openrouter-BTbtL_IF.js} +1 -1
- package/dist/ui/assets/{openrouter-DDIS0gu8.js → openrouter-C-dZ1sGw.js} +1 -1
- package/dist/ui/assets/{openrouter-free-CxENTZRZ.js → openrouter-free-7huO0Drj.js} +1 -1
- package/dist/ui/assets/{openrouter-free-CQM2VJ2h.js → openrouter-free-CK4afGP8.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-DeZmK_PC.js → openrouter-oauth-CpPi4YSa.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-BTRrF814.js → openrouter-oauth-DkEePt5s.js} +1 -1
- package/dist/ui/assets/{opfs-mount-CH8xFjB1.js → opfs-mount-B2b-t0EF.js} +1 -1
- package/dist/ui/assets/{panel-rpc-handlers-DEV3O6Nf.js → panel-rpc-handlers-BfUW4als.js} +2 -2
- package/dist/ui/assets/{panelize-shell-wTRIeRfk.js → panelize-shell-C1kr0BTJ.js} +1 -1
- package/dist/ui/assets/{pi-edit-execution-CsYSVIy6.js → pi-edit-execution-Cb2xBqsc.js} +1 -1
- package/dist/ui/assets/{process-worker-COJhrHY2.js → process-worker-C_p81ZZU.js} +1 -1
- package/dist/ui/assets/{provider-DQlGI3wV.js → provider-CG1KqExL.js} +2 -2
- package/dist/ui/assets/provider-Dq9zABZQ.js +1 -0
- package/dist/ui/assets/{provider-settings-CI1NmuB7.js → provider-settings-CkyKYIkj.js} +1 -1
- package/dist/ui/assets/provider-store-access-Dn58QaFC.js +1 -0
- package/dist/ui/assets/provider-store-access-yQUMGoIb.js +1 -0
- package/dist/ui/assets/{providers-DWJgLVLG.js → providers-BbxGRCK7.js} +2 -2
- package/dist/ui/assets/{providers-DvzQAoZe.js → providers-DOjMgMU6.js} +1 -1
- package/dist/ui/assets/{quick-llm-CIeq8HDn.js → quick-llm-BMJBs7-S.js} +1 -1
- package/dist/ui/assets/{realm-inprocess-Ct0UTeSZ.js → realm-inprocess-DMdQOjDm.js} +2 -2
- package/dist/ui/assets/{realm-unhandled-rejections-But1_r5U.js → realm-unhandled-rejections-Be1sIIgh.js} +1 -1
- package/dist/ui/assets/{realm-unhandled-rejections-XCowEiz5.js → realm-unhandled-rejections-D6_73CJl.js} +1 -1
- package/dist/ui/assets/reason-l_1I9RdR.js +5 -0
- package/dist/ui/assets/{recovery-screen-2KkMuDJk.js → recovery-screen-CPI_iXWK.js} +1 -1
- package/dist/ui/assets/{remote-terminal-view-BsBi-Jq-.js → remote-terminal-view-DXtNRrbr.js} +2 -2
- package/dist/ui/assets/{restore-BxWnVMjS.js → restore-CAHvRjUh.js} +1 -1
- package/dist/ui/assets/{run-8y7BhTkZ.js → run-9c55NzaM.js} +1 -1
- package/dist/ui/assets/{run-dJaEQuBZ.js → run-AtPs8A5o.js} +1 -1
- package/dist/ui/assets/{run-V-yf2BVO.js → run-B_EzD3y6.js} +2 -2
- package/dist/ui/assets/{run-DI8sQ-UX.js → run-Blcmnnqa.js} +1 -1
- package/dist/ui/assets/{run-5o2ADtPK.js → run-Cz1-std9.js} +2 -2
- package/dist/ui/assets/{run-B1b6--PA.js → run-DFVjtIie.js} +1 -1
- package/dist/ui/assets/{run-Dp8o0HDu.js → run-ZVh0R1Qb.js} +1 -1
- package/dist/ui/assets/{session-command-memory-Da1Ay0IK.js → session-command-memory--pxt-rWi.js} +2 -2
- package/dist/ui/assets/{session-jsonl-CisoFWdV.js → session-jsonl-Bl-_Ke5m.js} +1 -1
- package/dist/ui/assets/{session-jsonl-BT08KJtu.js → session-jsonl-DIe9RcuQ.js} +1 -1
- package/dist/ui/assets/{session-search-index-C9dq-YnZ.js → session-search-index-DXYard0w.js} +1 -1
- package/dist/ui/assets/{setup-feature-flags-remote-C-QrDDap.js → setup-feature-flags-remote-DpryLi4X.js} +1 -1
- package/dist/ui/assets/{setup-model-catalog-DQFqjnfG.js → setup-model-catalog-C0SmDaKF.js} +1 -1
- package/dist/ui/assets/{signed-fetch-B_zCsTF6.js → signed-fetch-BP6r0_WD.js} +1 -1
- package/dist/ui/assets/{silent-renew-backoff-DZMNobI2.js → silent-renew-backoff-BINyAdDo.js} +1 -1
- package/dist/ui/assets/slicc-version-jWg-8NKA.js +1 -0
- package/dist/ui/assets/{snapshot-Qi7uJgTK.js → snapshot-C-tqP5Vd.js} +1 -1
- package/dist/ui/assets/{snapshot-features-ko4zNFx_.js → snapshot-features-My_1CrXJ.js} +1 -1
- package/dist/ui/assets/{soundscape-CSNoiZFC.js → soundscape-Dr7onmG-.js} +1 -1
- package/dist/ui/assets/{speak-aAmw1Lv4.js → speak-1Zw3IWIU.js} +1 -1
- package/dist/ui/assets/{sprinkle-manager-BcUAmBKL.js → sprinkle-manager-BpCI8aCf.js} +1 -1
- package/dist/ui/assets/{sprinkle-renderer-a99oRJ5K.js → sprinkle-renderer-BFoYTPNh.js} +1 -1
- package/dist/ui/assets/{state-B8wLxLGq.js → state-BZmhbSgZ.js} +1 -1
- package/dist/ui/assets/{store-D8XRrwq1.js → store-D_3UY4Hq.js} +1 -1
- package/dist/ui/assets/{store-CBtTB-Y7.js → store-ioAs8Ofc.js} +1 -1
- package/dist/ui/assets/{sudo-CvMjZIh6.js → sudo-BUiJRaDN.js} +1 -1
- package/dist/ui/assets/{supervisor-CNcjK1gk.js → supervisor-CV95FP1l.js} +1 -1
- package/dist/ui/assets/{sync-dialog-D0C6RJ1r.js → sync-dialog-DbP2JDY5.js} +1 -1
- package/dist/ui/assets/{transformers-env-BWgCzqFy.js → transformers-env-CeRpgv4u.js} +1 -1
- package/dist/ui/assets/{tray-leader-anPCnjI3.js → tray-leader-B84Al9zk.js} +1 -1
- package/dist/ui/assets/{tray-leave-runtime-DTq8BTG1.js → tray-leave-runtime-Ck9jPDeB.js} +1 -1
- package/dist/ui/assets/{tray-sidecar-Dk-gNNOa.js → tray-sidecar-CrCOCbAy.js} +1 -1
- package/dist/ui/assets/{turn-journal-B-yFOK6T.js → turn-journal-DJcMfuEK.js} +1 -1
- package/dist/ui/assets/{upgrade-detection-BofecB7v.js → upgrade-detection-Bi7vIh9b.js} +1 -1
- package/dist/ui/assets/{upskill-lick-skip-3qGDA07K.js → upskill-lick-skip-DdtxmzSe.js} +1 -1
- package/dist/ui/assets/{voice-reply-C1P_wamT.js → voice-reply-Cn39TVu-.js} +1 -1
- package/dist/ui/assets/wasi-runtime-BMVXeT_F.js +3 -0
- package/dist/ui/assets/{wc-attach-dgMJ26XT.js → wc-attach-IDr8eMKS.js} +2 -2
- package/dist/ui/assets/{wc-browser-B-COerUp.js → wc-browser-DyMZIHWZ.js} +1 -1
- package/dist/ui/assets/{wc-computers-_JxYl2wr.js → wc-computers-lVdM5Q0C.js} +1 -1
- package/dist/ui/assets/{wc-detached-D2pbuUgz.js → wc-detached-r0tNzoI0.js} +1 -1
- package/dist/ui/assets/{wc-extension-CllXRrrB.js → wc-extension-C3cTiHOK.js} +2 -2
- package/dist/ui/assets/{wc-follower-BJoxJGJc.js → wc-follower-C3Ssv3pH.js} +3 -3
- package/dist/ui/assets/{wc-follower-oauth-CRVfRh9S.js → wc-follower-oauth-DjHjHKJ7.js} +1 -1
- package/dist/ui/assets/{wc-gelatiere-oTqfeOtw.js → wc-gelatiere-Dh5Mn9bA.js} +1 -1
- package/dist/ui/assets/{wc-live-lanuGtCH.js → wc-live-D0928vE7.js} +5 -5
- package/dist/ui/assets/{wc-nav-CxTE5nNk.js → wc-nav-B_z2mlYb.js} +2 -2
- package/dist/ui/assets/{wc-onboarding-CTHTCQRn.js → wc-onboarding-rgJJv4BS.js} +2 -2
- package/dist/ui/assets/{wc-permissions-DsdMkMR_.js → wc-permissions-9m7YrmL2.js} +2 -2
- package/dist/ui/assets/{wc-placeholder-BW3O9G-1.js → wc-placeholder-Cp-j-cTq.js} +3 -3
- package/dist/ui/assets/{wc-secret-request-CYprt2E3.js → wc-secret-request-CJqEUR2V.js} +1 -1
- package/dist/ui/assets/{wc-settings-BpOWAvNP.js → wc-settings-4EfpkMeU.js} +3 -3
- package/dist/ui/assets/{wc-shell-ublv7ZL8.js → wc-shell-DMHh-A41.js} +116 -116
- package/dist/ui/assets/{wc-shortcut-config-I0L9ZRfk.js → wc-shortcut-config-HMWkdwIV.js} +1 -1
- package/dist/ui/assets/{wc-sprinkles-BZFWrQuP.js → wc-sprinkles-9kl4n4Ve.js} +2 -2
- package/dist/ui/assets/{wc-transcript-export-Camv8Krm.js → wc-transcript-export-D2mq6DII.js} +2 -2
- package/dist/ui/assets/{wc-tray-D50mlMs8.js → wc-tray-BuuLiPV3.js} +4 -4
- package/dist/ui/assets/welcome-detection-CO83xvwE.js +1 -0
- package/dist/ui/assets/{whisper-session-Myw3zk-W.js → whisper-session-D--IlXLT.js} +2 -2
- package/dist/ui/assets/{xai-grok-BVM_XcYa.js → xai-grok-DDHu18Wf.js} +1 -1
- package/dist/ui/assets/{xai-grok-D4iOI1_b.js → xai-grok-DMet3e54.js} +1 -1
- package/dist/ui/index.html +3 -3
- package/dist/ui/packages/webapp/index.html +3 -3
- package/package.json +2 -2
- package/dist/ui/assets/account-store-p9YkaR-j.js +0 -1
- package/dist/ui/assets/adobe-BnfgTqEQ.js +0 -1
- package/dist/ui/assets/client-C4_ggaf5.js +0 -4
- package/dist/ui/assets/connection-manager-SNYTz_SX.js +0 -1
- package/dist/ui/assets/core-E6pC-3NP.js +0 -36
- package/dist/ui/assets/gelatiere-store-DNMjj5xM.js +0 -1
- package/dist/ui/assets/gelatiere-unit-BEnRKsg5.js +0 -1
- package/dist/ui/assets/installer-3ARo1i86.js +0 -2
- package/dist/ui/assets/ipk-mamba-BEORgiAj.js +0 -46
- package/dist/ui/assets/loader-Dw-TPPKt.js +0 -4
- package/dist/ui/assets/provider-DiPmyduk.js +0 -1
- package/dist/ui/assets/provider-store-access-CC-Qd6Js.js +0 -1
- package/dist/ui/assets/provider-store-access-R5OLCz2u.js +0 -1
- package/dist/ui/assets/redirect-uri-31pXIMS9.js +0 -1
- package/dist/ui/assets/slicc-version-DwNEsrEc.js +0 -1
- package/dist/ui/assets/wasi-runtime-CelptKxl.js +0 -3
- package/dist/ui/assets/welcome-detection-BtHni7N4.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{C as t,S as n,_ as r,a as i,b as a,c as o,f as s,g as c,h as l,i as u,m as d,o as f,p,r as m,s as h,t as ee,u as g,v as te,x as ne,y as re}from"./almost-bash-shell-headless-DQhRonH_.js";import{t as _}from"./logger-LESFN7Hj.js";import{r as ie,t as ae}from"./base64-BPBW1Gzr.js";import{i as oe,r as se}from"./handoff-link-B3It6xQY.js";import{a as ce,b as le,f as ue,g as de,h as fe,i as pe,m as me,p as he,v as ge,x as _e,y as ve}from"./account-store-p9YkaR-j.js";import{n as ye}from"./proxied-fetch-CoZ8jHud.js";import{t as be}from"./slugify-BYJ6QVAt.js";import{i as xe,n as Se,t as Ce}from"./archive-redaction-ByV7X5fs.js";import{i as we,r as Te}from"./host-command-Dn-Z4AbC.js";import{o as Ee}from"./snapshot-Qi7uJgTK.js";import{n as De,r as Oe}from"./panel-rpc-DW7W4w6_.js";import{i as ke,l as Ae,o as je,r as Me}from"./feature-flags-QlgHaQc1.js";import{a as Ne,t as Pe}from"./providers-DvzQAoZe.js";import{c as Fe,d as Ie,o as Le,s as Re,t as ze,u as Be}from"./api-endpoint-D8lUKmPu.js";import{$ as Ve,A as He,At as v,B as Ue,C as We,Ct as Ge,D as Ke,Dt as qe,E as Je,Et as y,F as Ye,Ft as Xe,H as Ze,I as Qe,It as $e,J as et,K as tt,L as nt,M as rt,Mt as it,N as at,Nt as b,O as ot,Ot as x,P as st,Pt as ct,Q as lt,R as ut,St as dt,T as ft,Tt as S,U as pt,V as mt,W as ht,X as gt,Y as _t,Z as vt,_ as yt,_t as bt,a as xt,at as St,b as Ct,bt as wt,c as Tt,ct as C,d as Et,dt as Dt,et as Ot,f as kt,ft as At,g as jt,gt as Mt,h as Nt,ht as Pt,i as Ft,it as w,j as It,jt as Lt,k as Rt,kt as zt,l as Bt,lt as T,m as Vt,mt as E,n as Ht,nt as Ut,o as Wt,ot as D,p as Gt,pt as Kt,q as qt,r as Jt,rt as Yt,s as Xt,st as Zt,t as Qt,tt as $t,u as en,ut as tn,v as nn,vt as rn,w as an,wt as on,x as sn,xt as cn,y as ln,yt as un,z as dn}from"./build-Dnkjpm_v.js";import{a as fn,c as pn,h as mn,l as hn,p as gn,s as _n,u as vn,v as yn}from"./models-CET5SEuw.js";import{o as bn,t as xn}from"./compat-CGK4SwF8.js";import{a as Sn,r as Cn,t as wn}from"./core-E6pC-3NP.js";import{i as Tn,n as En,r as Dn,t as On}from"./context-compaction-BwnPiNO2.js";import{t as kn}from"./secrets-bridge-client-EgBSROu5.js";import{n as An,t as jn}from"./image-markers-CwM1dvoI.js";import{i as Mn}from"./tool-ui-DRnUkp2g.js";import{c as Nn,t as Pn}from"./claude-model-version-ceOteQ2f.js";import{a as Fn,n as In,t as Ln}from"./path-utils-DNJG-zQf.js";import{t as Rn}from"./merge-file-core-VJlzucJY.js";import{i as zn,n as Bn,r as Vn,t as Hn}from"./workspace-mode-D0kUKBVS.js";import{C as Un,D as Wn,E as O,O as Gn,S as Kn,T as qn,_ as Jn,a as Yn,c as Xn,d as Zn,f as Qn,g as $n,h as er,l as tr,m as nr,n as rr,o as ir,p as ar,r as or,s as sr,t as cr,u as lr,v as ur,w as dr,y as fr}from"./record-COQlaFL1.js";import{a as pr,c as mr,d as hr,i as gr,l as _r,n as vr,o as yr,r as br,s as xr,u as Sr}from"./descriptor-CKLcFFX3.js";import{n as Cr,t as wr}from"./thinking-level-5x0UAu9N.js";import{t as k}from"./types-D8gIX-W-.js";import{i as Tr,n as Er}from"./mount-index-CQfmUPuZ.js";import{a as Dr,i as Or,n as kr,r as Ar,s as jr,t as Mr}from"./signed-fetch-B_zCsTF6.js";import{n as Nr}from"./mount-table-store-DrF_Ifaz.js";import{t as Pr}from"./remote-cache-UwMD8EkX.js";import"./mount-CVw88Sae.js";import{i as Fr,n as Ir,r as Lr}from"./fs-Bhw5j0eY.js";import{i as Rr,n as zr,t as Br}from"./key-B2Bki3fU.js";import{n as Vr,r as Hr,t as Ur}from"./tray-leader-status-CpkFr6n7.js";import"./tray-runtime-config-ConrTcOf.js";import{r as Wr}from"./slicc-version-DwNEsrEc.js";import{r as Gr}from"./virtual-device-paths-CS5o4QVz.js";import{a as Kr,i as qr,r as Jr}from"./cost-command-C_1fldSP.js";import{_ as Yr,a as Xr,c as Zr,d as Qr,f as $r,g as ei,h as ti,l as ni,m as ri,n as ii,p as ai,r as oi,s as si,t as ci,u as li,v as ui}from"./sudoers-BdBYQPUn.js";import{n as di,r as fi,t as pi}from"./sudo-fs-mI-V4QkM.js";import{t as mi}from"./llm-session-id-BZyXP_j2.js";import{t as hi}from"./src-CUSndb9K.js";import{a as gi,i as _i,n as vi,o as yi,s as bi}from"./memory-budget-CFfevxz_.js";import{i as xi}from"./browser-DuyhpHbR.js";import{t as Si}from"./jsh-discovery-CnvNKojr.js";import{t as Ci}from"./process-manager-BkhAohXT.js";import{i as wi,o as Ti,r as Ei,t as Di}from"./jsh-executor-Iaq-AOjA.js";import{C as Oi,_ as ki,b as Ai,f as ji,h as Mi,l as Ni,n as Pi,r as Fi,x as Ii}from"./sync-exec-dispatch-BvwkIQoA.js";import{n as Li}from"./just-bash-compat-B-SPHuh_.js";import{t as Ri}from"./lick-target-env-8JxfVcIV.js";const zi=[`/workspace`,`/shared`,`/scoops`,`/home`];var Bi=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 Vi(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 Hi=_(`cdp`);function Ui(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 Wi=class{ws=null;nextId=1;_superseded=!1;pending=new Bi;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,Hi.info(`Connected`,{url:t}),this.notifyState(`connected`),e()},this.ws.onerror=e=>{clearTimeout(a),this._state===`connecting`&&(Hi.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(),Hi.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),Hi.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 Vi(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;Hi.debug(`Response`,{id:e.id,hasError:!!e.error}),e.error?(Hi.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;Hi.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,Hi.warn(`CDP slot superseded by another SLICC tab/window on this instance`,{code:e})):e===4002?Hi.warn(`CDP proxy reset its upstream Chrome connection — sessions dropped`,{code:e,pendingCommands:this.pending.size}):Hi.error(`Connection closed unexpectedly`,{pendingCommands:this.pending.size}),this.cleanup(Ui(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 Gi(e){for(let t of e)if(t.rel.includes(`ai-catalog`))return{kind:`ai-catalog`,url:t.href};return null}function Ki(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 Ji(e,t,n={}){let r=n.timeoutMs??3e3,i;try{i=new URL(e).origin}catch{return[]}return(await Promise.all(qi.map(e=>Yi(i,e,t,r)))).filter(e=>e!==null)}async function Yi(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||!Xi(e.headers.get(`content-type`),t.kind)?null:{kind:t.kind,url:i}}catch{return null}finally{clearTimeout(o)}}function Xi(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 Zi=3e4;var Qi=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`}},$i=class extends Error{constructor(){super(`CDP reconnect is backing off`),this.name=`CdpReconnectBackoffError`}};function ea(e,t=Math.random){let n=Math.min(Zi,250*2**Math.min(Math.max(0,e),16)),r=Math.round(n*.2*t());return Math.min(Zi,n+r)}function ta(e=typeof window<`u`?window.location:null){return e?.host?`${e.protocol===`https:`?`wss:`:`ws:`}//${e.host}/cdp`:`ws://localhost:5710/cdp`}var na=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 Qi(this.bridgeRejection);this.lastConnectOptions=t?{...t}:{};try{await e.connect({url:t?.url??ta(),timeout:t?.timeout,...t?.protocols===void 0?{}:{protocols:t.protocols}})}catch(e){throw await this.noteReconnectFailure(t),this.bridgeRejection?new Qi(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??ta(),...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 Qi(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 Qi(this.bridgeRejection);if(Date.now()<this.reconnectNotBefore)throw new $i}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 Qi().message,this.notifyBridgeRejected();return}let t=ea(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{}}}},ra=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 ia(e,t){if(e?.aborted)throw new ra(t)}function aa(e,t){return e?{signal:e,error:()=>new ra(t)}:void 0}function oa(e,t,n){return new Promise((r,i)=>{if(t?.aborted){i(new ra(n));return}let a=()=>{clearTimeout(o),i(new ra(n))},o=setTimeout(()=>{t?.removeEventListener(`abort`,a),r()},e);t?.addEventListener(`abort`,a,{once:!0})})}function sa(e,t,n){return t?t.aborted?Promise.reject(new ra(n)):new Promise((r,i)=>{let a=()=>i(new ra(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 ca=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 la=_(`har-recorder`);var ua=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)}`;ia(r,`about to enable Network on tab ${e}`),await this.client.send(`Network.enable`,{},t),ia(r,`about to enable Page on tab ${e}`),await this.client.send(`Page.enable`,{},t),ia(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}`),la.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=>{la.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=>{la.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 da(e,t)}async saveSnapshotWithEntries(e,t,n,r){if(n.length===0)return la.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 la.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)),la.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 la.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 da(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){la.error(`Filter function error on entry, keeping it`,{error:e instanceof Error?e.message:String(e)}),r.push(t)}return r}catch(t){return la.error(`Failed to compile filter, returning unfiltered`,{error:t instanceof Error?t.message:String(t)}),e}}var fa=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 pa=`(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{C as t,S as n,_ as r,a
|
|
|
868
868
|
} catch(e) {
|
|
869
869
|
return { role: 'RootWebArea', name: '', description: 'Error: ' + (e.message || String(e)) };
|
|
870
870
|
}
|
|
871
|
-
})()`,
|
|
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
|
|
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 va(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)va(n,t)}function ya(e){let t=e.exceptionDetails;return t?t.exception?.description??t.text:null}function ba(e,t){let n=ya(e);if(n!==null)throw Error(`${t}: ${n}`);return e.result?.value}function xa(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 Sa(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=Ca(a,o);t.has(s)||t.set(s,e)}return t}function Ca(e,t){return`${e.toLowerCase()}|${t.replace(/\s+/g,` `).trim()}`}function wa(e,t){let n=Ca(e.role,e.name),r=t.get(n);if(r!==void 0&&(e.backendNodeId=r),e.children)for(let n of e.children)wa(n,t)}function Ta(e){let t={role:Ee(e.role,`unknown`),name:Ee(e.name)},n=Ee(e.value);n!==``&&(t.value=n);let r=Ee(e.description);return r!==``&&(t.description=r),Array.isArray(e.children)&&e.children.length>0&&(t.children=e.children.map(e=>Ta(e)).filter(e=>e.role!==`unknown`)),t}function Ea(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 Da=class{tabLocks=new Map;bridgeLock=Promise.resolve();bridgeHold=null;bridgeWaiters=0;tabLockStats=new Map;getStats(e){if(e!==void 0)return Ea(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 Ea(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){ia(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 sa(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()}}},Oa=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 ka=_(`browser-api`),Aa=[`Session with given id not found`,`Target closed`,`No session with given id`,`No tab attached for sessionId`];var ja=class extends Error{};function Ma(e){let t=e instanceof Error?e.message:String(e);return Aa.some(e=>t.includes(e))}var Na=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)}},Pa=class{client;localClient;sessionId=null;attachedTargetId=null;trayTargetProvider=null;remoteTargetInfo=null;frames=new ca;sessions=new fa(32,(e,t)=>{ka.debug(`Evicting least-recently-used CDP session`,{targetId:e}),this.detachSession(e,t)});_listenedTransports=new Set;_sessionReplacedSubs=new Map;locks=new Da;viewports=new Oa;connection=new na;_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),ka.warn(`Auto-dismissed unexpected JavaScript dialog`,{sessionId:t,type:e.type,message:e.message,url:e.url})}catch(e){ka.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 Wi,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 Na)return e;let t=this._accountedTransports.get(e);return t||(t=new Na(e,e=>this.noteApplied(e)),this._accountedTransports.set(e,t)),t}noteApplied(e){this.sessions.noteApplied(e)}createHarRecorder(e,t){return new ua(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 ja||!Ma(r))throw r;return ka.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);ia(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(!Ma(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 ka.warn(`CDP session reset mid-command — not replaying`,{targetId:e,applied:n,reason:r}),new ja(`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 _a(this,e,r,this.accountedTransportFor(i?.transport??this.client),n)}handleFor(e,t){return new _a(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){ka.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(),La(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=za((await(await this.transportForWindowOps(e)).send(`Browser.getWindowForTarget`,{targetId:Ia(e)})).bounds),n=await this.readDevicePixelRatio(e);return{...t,dpr:n}}async setWindowBounds(e,t){await this.ensureConnected(),La(t);let n=await this.transportForWindowOps(e),r=Ia(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=za(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=za((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}`);ia(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),ia(t,`about to enable Page on tray tab ${e}`),await a.send(`Page.enable`,{},o.sessionId),ia(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(),ia(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),ia(t,`about to enable Page on tab ${e}`),await this.localClient.send(`Page.enable`,{},n.sessionId),ia(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){ka.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 Fa=new Set([`normal`,`minimized`,`maximized`,`fullscreen`]);function Ia(e){let t=e.indexOf(`:`);return t>=0?e.substring(t+1):e}function La(e){let t=e.state;if(!(!t||t===`normal`)){if(!Fa.has(t))throw Error(`window state must be one of ${[...Fa].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 Ra(e){return typeof e==`object`&&!!e}function za(e){let t=Ra(e)?e:{},n=t.windowState??t.state,r=typeof n==`string`&&Fa.has(n)?n:`normal`;return{left:Ba(t.left,0),top:Ba(t.top,0),width:Ba(t.width,0),height:Ba(t.height,0),state:r}}function Ba(e,t){return typeof e==`number`&&Number.isFinite(e)?e:t}const Va=_(`panel-rpc-cdp`);var Ha=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=>{Va.error(`remote-cdp detach failed (page-side session may leak)`,{key:this.key,error:e instanceof Error?e.message:String(e)})})),this.eventListeners.clear()}async send(e,t,n,r){if(this._state===`disconnected`)throw Error(`Transport disconnected`);let i=this.getPanelRpc();if(!i)throw Error(`cdp: no page bridge to the leader tray (panel-RPC client)`);let a=r??this.timeoutMs,o=Math.max(a,De)+5e3;return i.call(`remote-cdp-send`,{runtimeId:this.runtimeId,localTargetId:this.localTargetId,method:e,params:t,sessionId:n,timeout:a},{timeoutMs:o})}on(e,t){let n=this.eventListeners.get(e),r=!n||n.size===0;n||(n=new Set,this.eventListeners.set(e,n)),n.add(t),r&&this.subscribe(e)}off(e,t){let n=this.eventListeners.get(e);n&&(n.delete(t),n.size===0&&(this.eventListeners.delete(e),this.unsubscribe(e)))}once(e,t){return new Promise((n,r)=>{let i=t??this.timeoutMs,a={reject:r,timer:void 0},o=()=>{clearTimeout(a.timer),this.pendingOnce.delete(a),this.off(e,s)};a.timer=setTimeout(()=>{o(),r(Error(`Remote CDP event timed out: ${e}`))},i);let s=e=>{o(),n(e)};this.pendingOnce.add(a),this.on(e,s)})}handleEvent(e,t){let n=this.eventListeners.get(e);if(n)for(let e of[...n])e(t)}ensurePushRegistered(e){this.pushRegistered||=(e.registerPushTarget(this.key,e=>this.handleEvent(e.method,e.params??{})),!0)}subscribe(e){let t=this.getPanelRpc();if(!t){Va.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=>{Va.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=>{Va.error(`remote-cdp unsubscribe failed (page-side forwarder may leak)`,{key:this.key,event:e,error:t instanceof Error?t.message:String(t)})})}};function Ua(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 Ha(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 Wa(e){return`slicc_feature_flags_remote:${e}`}let Ga=null;function Ka(e,t){let n=Ja(t);Ga=e,Me(e,Ya(n,e)??{})}function qa(e,t){if(!Ga||e!==void 0&&e!==Wa(Ga))return!1;let n=Ja(t);return Ae(Ga,Ya(n,Ga)??{}),!0}function Ja(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 Ya(e,t){try{let n=e?.getItem(Wa(t));return n?Xa(JSON.parse(n)):null}catch{return null}}function Xa(e){return!Za(e)||Object.values(e).some(e=>typeof e!=`string`)?null:e}function Za(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}const Qa=_(`stale-asset`),$a=/dynamically imported module|importing a module script failed|expected a javascript module|module script/i;function eo(e){return $a.test(e)}let to=null;function no(e){if(!e){to=null;return}to=e}function ro(e=!1){if(!to||typeof BroadcastChannel!=`function`)return;let t=new BroadcastChannel(`slicc-stale-asset-reload`);try{t.postMessage({type:`stale-asset-reload`,instanceId:to,replayTurn:e})}finally{t.close()}}function io(e){eo(e instanceof Error?e.message:String(e))&&ro()}function ao(e,t){return!e||e===t?!1:(Qa.warn(`mixed build graph: page ${e} vs worker ${t} — requesting reload`),ro(),!0)}var oo=class{_state=`disconnected`;nextCommandId=1;listeners=new Map;pendingCommands=new Bi;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 Vi(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 so(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 co(e){let t=so(e);return{onMessage:e=>t.onMessage(e),send:(e,n)=>{t.send({source:`offscreen`,payload:e},n)}}}var lo=class extends oo{constructor(e){let t=so(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 uo(e,t){return e.find(e=>e.folder===t)??e.find(e=>e.folder===`${t}-scoop`)??e.find(e=>e.name===t)}const fo=/^[\p{ID_Start}_$][\p{ID_Continue}_$\u200C\u200D]*$/u;function po(e){return fo.test(e)}function A(e,t){return`(${e} && ${t})`}function j(e,t){return`(${e} || ${t})`}function mo(e){return`!(${e})`}function ho(e){return`Array.isArray(${e})`}function go(e){return`typeof ${e} === "bigint"`}function _o(e){return`typeof ${e} === "boolean"`}function vo(e){return`Number.isInteger(${e})`}function yo(e){return`${e} === null`}function bo(e){return`Number.isFinite(${e})`}function xo(e){return A(So(e),mo(ho(e)))}function So(e){return`typeof ${e} === "object" && ${e} !== null`}function Co(e){return`typeof ${e} === "string"`}function wo(e){return`typeof ${e} === "symbol"`}function To(e){return`${e} === undefined`}function Eo(e){return`typeof ${e} === "function"`}function Do(e){return`Guard.IsConstructor(${e})`}function Oo(e,t){return`${e} === ${t}`}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`Guard.IsMinLength(${e}, ${t})`}function Po(e,t){return`Guard.IsMaxLength(${e}, ${t})`}function Fo(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 Io(e,t,n){return`${e}.some((${t[0]}, ${t[1]}) => ${n})`}function Lo(e,t,n){return`((value) => { let result = false; value.forEach((${t[0]}, ${t[1]}) => { if (${n}) result = true }); return result })(${e})`}function Ro(e,t,n){return`${e}.reduce((result, ${t[0]}, ${t[1]}) => (${n}) ? ++result : result, 0)`}function zo(e){return`Object.entries(${e})`}function Bo(e){return`Object.getOwnPropertyNames(${e})`}function Vo(e,t){return E(t,`"__proto__"`)||E(t,`"constructor"`)?`Object.prototype.hasOwnProperty.call(${e}, ${t})`:`${t} in ${e}`}function Ho(e,t){return`Guard.IsDeepEqual(${e}, ${t})`}function Uo(e){return`[${e.join(`, `)}]`}function Wo(e,t){return`((${e.join(`, `)}) => ${t})`}function M(e,t){return`${e}(${t.join(`, `)})`}function Go(e,t){return`new ${e}(${t.join(`, `)})`}function N(e,t){return`${e}${po(t)?`.${t}`:`[${P(t)}]`}`}function P(e){if(!it(e))throw Error(`Unsupported Constant`);return x(e)?JSON.stringify(e):`${e}`}function Ko(e,t,n){return`(${e} ? ${t} : ${n})`}function qo(e){return`{ ${e.join(`; `)}; }`}function Jo(e,t){return`const ${e} = ${t}`}function Yo(e,t){return`if(${e}) { ${t} }`}function Xo(e){return`return ${e}`}function Zo(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=$e;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&&Ut().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`)&&Pt(e.check)&&Pt(e.error))}function F(e){return y(e)&&!T(e)}function ms(e){return Dt(e)}function I(e){return F(e)||ms(e)}function hs(e){return C(e,`additionalItems`)&&I(e.additionalItems)}function gs(e){return C(e,`additionalProperties`)&&I(e.additionalProperties)}function _s(e){return C(e,`allOf`)&&T(e.allOf)&&e.allOf.every(e=>I(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=>I(e))}function bs(e){return C(e,`const`)}function xs(e){return C(e,`contains`)&&I(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=>I(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=>I(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`)&&I(e.else)}function ks(e){return C(e,`enum`)&&T(e.enum)}function As(e){return C(e,`exclusiveMaximum`)&&(S(e.exclusiveMaximum)||tn(e.exclusiveMaximum))}function js(e){return C(e,`exclusiveMinimum`)&&(S(e.exclusiveMinimum)||tn(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`)&&I(e.if)}function Fs(e){return C(e,`items`)&&(I(e.items)||T(e.items)&&e.items.every(e=>I(e)))}function Is(e){return Fs(e)&&T(e.items)}function Ls(e){return C(e,`maximum`)&&(S(e.maximum)||tn(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)||tn(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)||tn(e.multipleOf))}function Js(e){return C(e,`not`)&&I(e.not)}function Ys(e){return C(e,`oneOf`)&&T(e.oneOf)&&e.oneOf.every(e=>I(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=>I(e))}function Qs(e){return C(e,`prefixItems`)&&T(e.prefixItems)&&e.prefixItems.every(e=>I(e))}function $s(e){return C(e,`properties`)&&y(e.properties)&&Object.values(e.properties).every(e=>I(e))}function ec(e){return C(e,`propertyNames`)&&(y(e.propertyNames)||I(e.propertyNames))}function tc(e){return C(e,`$recursiveAnchor`)&&Dt(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`)&&I(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`)&&Dt(e.uniqueItems)}function lc(e){return C(e,`unevaluatedItems`)&&I(e.unevaluatedItems)}function uc(e){return C(e,`unevaluatedProperties`)&&I(e.unevaluatedProperties)}function dc(e){return lc(e)||uc(e)||ct(b(e),t=>pc(e[t]))}function fc(e){return ct(e,e=>pc(e))}function pc(e){return T(e)?fc(e):y(e)?dc(e):!1}function mc(e,t){return pc(t)||ct(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>=Ut().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 Fo(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 Zt(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 L(){return`var_${Tc++}`}function Ec(e){return Fs(e)&&T(e.items)}function Dc(e,t,n,r){let[i,a]=[L(),L()],o=zp(e,t,n.additionalItems,i),s=Ao(a,P(n.items.length)),c=t.AddIndex(a);return Fo(r,P(0),[i,a],j(s,A(o,c)))}function Oc(e,t,n,r){let[i,a]=[L(),L()],o=zp(e,t,n.additionalItems,i),s=Ao(a,P(n.items.length));return Fo(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)=>wt(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 wt(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 Oo(N(M(N(`Object`,`getOwnPropertyNames`),[n]),`length`),P(t.required.length))}function Rc(e,t,n,r){let[i,a]=[L(),L()],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 Fo(Bo(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 Zt(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=Jo(`results`,`[]`),o=n.map((e,t)=>Jo(`context_${t}`,Go(`CheckContext`,[]))),s=n.map((n,i)=>Jo(`condition_${i}`,M(Wo([`context`],z(e,t,n,r)),[`context_${i}`]))),c=n.map((e,t)=>Yo(`condition_${t}`,M(N(`results`,`push`),[`context_${t}`]))),l=Xo(A(i,t.Merge(`results`)));return M(Wo([],qo([a,...o,...s,...c,l])),[])}function Uc(e,t,n,r){return Hc(e,t,n.allOf,r,Oo(N(`results`,`length`),P(n.allOf.length)))}function Wc(e,t,n,r){return Zo(n.allOf.map(n=>z(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 B(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,ko(N(`results`,`length`),P(0)))}function Yc(e,t,n,r){return Qo(n.anyOf.map(n=>z(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 B(e,i,n,r)?[...t,i]:t},[]);return bt(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=bt(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 it(n.const)?Oo(r,P(n.const)):Ho(r,yc(n.const))}function rl(e,t,n,r){return it(n.const)?E(r,n.const):Kt(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]=[L(),L()];return A(mo(Oo(N(r,`length`),P(0))),Lo(r,[i,a],A(z(e,t,n.contains,i),t.AddIndex(a))))}function sl(e,t,n,r){let[i]=[L()];return A(mo(Oo(N(r,`length`),P(0))),Io(r,[i,`_`],z(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)&&Xe(r,(r,i)=>B(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(Oo(N(Bo(r),`length`),P(0)),Zo(w(n.dependencies).map(([n,i])=>{let a=mo(Vo(r,P(n))),o=z(e,t,i,r);return j(a,T(i)?(e=>Zo(e.map(e=>Vo(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)):B(e,t,i,r)));return i||a}function pl(e,t,n,r,i,a){let o=E(b(a).length,0),s=Zt(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(Oo(N(Bo(r),`length`),P(0)),Zo(w(n.dependentRequired).map(([e,t])=>j(mo(Vo(r,P(e))),Zo(t.map(e=>Vo(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=Zt(w(i.dependentRequired),0,([e,i])=>!C(a,e)||Zt(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(Oo(N(Bo(r),`length`),P(0)),Zo(w(n.dependentSchemas).map(([n,i])=>j(mo(Vo(r,P(n))),z(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)||B(e,t,i,r));return i||a}function yl(e,t,n,r,i,a){let o=E(b(a).length,0),s=Zt(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 I(i)&&B(e,t,i,r)}function Sl(e,t,n,r,i,a){let o=e.DynamicRef(i)??!1;return I(o)&&Hp(e,t,`#`,r,o,a)}function Cl(e,t,n,r){return Qo(n.enum.map(e=>it(e)?Oo(r,P(e)):Ho(r,yc(e))))}function wl(e,t,n,r){return ct(n.enum,e=>it(e)?E(r,e):Kt(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 Ao(r,P(n.exclusiveMaximum))}function Dl(e,t,n,r){return wt(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 ko(r,P(n.exclusiveMinimum))}function Al(e,t,n,r){return bt(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 R=new Map;function _d(){R.clear()}function vd(){return[...R.entries()]}function yd(e,t){R.set(e,t)}function bd(e){return R.has(e)}function xd(e){return R.get(e)}function Sd(e,t){return R.get(e)?.(t)??!0}function Cd(){_d(),R.set(`date-time`,Rl),R.set(`date`,Fl),R.set(`duration`,Bl),R.set(`email`,Hl),R.set(`hostname`,zu),R.set(`idn-email`,Vu),R.set(`idn-hostname`,Hu),R.set(`ipv4`,Wu),R.set(`ipv6`,Ku),R.set(`iri-reference`,Yu),R.set(`iri`,ed),R.set(`json-pointer-uri-fragment`,nd),R.set(`json-pointer`,id),R.set(`regex`,ad),R.set(`relative-json-pointer`,sd),R.set(`time`,Ll),R.set(`uri-reference`,ld),R.set(`uri-template`,dd),R.set(`uri`,pd),R.set(`url`,md),R.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 Ko(z(e,t,n.if,r),z(e,t,i,r),z(e,t,a,r))}function kd(e,t,n,r){let i=!oc(n)||n.then,a=!Os(n)||n.else;return B(e,t,n.if,r)?B(e,t,i,r):B(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 Zo(n.items.map((n,i)=>j(jo(N(r,`length`),P(i)),A(zp(e,t,n,`${r}[${i}]`),t.AddIndex(P(i))))))}function Md(e,t,n,r){return Zo(n.items.map((n,i)=>j(jo(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)=>un(r.length,i)||Bp(e,t,n,r[i])&&t.AddIndex(i))}function Fd(e,t,n,r,i,a){return Zt(i.items,0,(i,o)=>{let s=`${n}/items/${o}`,c=`${r}/${o}`;return un(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 Fo(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 Fo(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 Zt(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]=[L()];return jo(Ro(r,[i,`_`],z(e,t,n.contains,i)),P(n.maxContains))}function Kd(e,t,n,r){if(!Wd(n))return!0;let i=Yt(r,r=>B(e,t,n.contains,r));return un(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 jo(r,P(n.maximum))}function Yd(e,t,n,r){return un(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 jo(N(r,`length`),P(n.maxItems))}function Qd(e,t,n,r){return un(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 Po(r,P(n.maxLength))}function tf(e,t,n,r){return cn(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 jo(N(Bo(r),`length`),P(n.maxProperties))}function af(e,t,n,r){return un(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]=[L(),L()];return Mo(Ro(r,[i,a],A(z(e,t,n.contains,i),t.AddIndex(a))),P(n.minContains))}function lf(e,t,n,r){let[i]=[L()];return Mo(Ro(r,[i,`_`],z(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=Yt(r,(r,i)=>B(e,t,n.contains,r)&&t.AddIndex(i));return Mt(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 Mo(r,P(n.minimum))}function mf(e,t,n,r){return Mt(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 Mo(N(r,`length`),P(n.minItems))}function _f(e,t,n,r){return Mt(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 No(r,P(n.minLength))}function bf(e,t,n,r){return dt(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 Mo(N(Bo(r),`length`),P(n.minProperties))}function Cf(e,t,n,r){return Mt(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 Ge(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,mo(Oo(N(`results`,`length`),P(1))))}function kf(e,t,n,r){return mo(z(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!B(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,Oo(N(`results`,`length`),P(1)))}function Pf(e,t,n,r){let[i]=[L()];return Oo(Ro(Uo(n.oneOf.map(n=>z(e,t,n,r))),[i,`_`],Oo(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 B(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 Zo(w(n.patternProperties).map(([n,i])=>{let[a,o]=[L(),L()],s=mo(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 Fo(zo(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 Zt(w(i.patternProperties),0,([i,o])=>{let s=`${n}/patternProperties/${i}`,c=Mc(i);return Zt(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 Zo(n.prefixItems.map((n,i)=>{let a=jo(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)=>un(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)||Zt(i.prefixItems,0,(i,o)=>{let s=`${n}/prefixItems/${o}`,c=`${r}/${o}`;return un(a.length,o)||Vp(e,t,s,c,i,a[o])&&t.AddIndex(o)})}function qf(e,t){return e.includes(t)||Ut().exactOptionalPropertyTypes}function Jf(e,t){return To(N(e,t))}function Yf(e,t){return v(e[t])}function Xf(e,t,n,r){let i=ac(n)?n.required:[];return Zo(w(n.properties).map(([n,a])=>{let o=mo(Vo(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 Zt(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]=[L(),L()];return Fo(Bo(r),P(0),[i,a],z(e,t,n.propertyNames,i))}function ep(e,t,n,r){return D(b(r),0,(r,i)=>B(e,t,n.propertyNames,r))}function tp(e,t,n,r,i,a){let o=[];return Zt(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 I(i)&&B(e,t,i,r)}function ip(e,t,n,r,i,a){let o=e.RecursiveRef(i)??!1;return I(o)&&Hp(e,t,`#`,r,o,a)}function ap(e,t,n,r){let i=Wo([`context`,`value`],Qp(e,t,n,`value`));return M(Wo([`context`,`value`],qo([Jo(`nextContext`,Go(`CheckContext`,[])),Jo(`result`,M(i,[`nextContext`,`value`])),Yo(`result`,t.Merge(`[nextContext]`)),Xo(`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=I(i)&&B(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=I(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 Zo(n.required.map(e=>Vo(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 Zt(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`)?xo(r):E(n,`array`)?ho(r):E(n,`boolean`)?_o(r):E(n,`integer`)?vo(r):E(n,`number`)?bo(r):E(n,`null`)?yo(r):E(n,`string`)?Co(r):E(n,`bigint`)?go(r):E(n,`constructor`)?Do(r):E(n,`function`)?Eo(r):E(n,`symbol`)?wo(r):E(n,`undefined`)||E(n,`void`)?To(r):P(!0)}function mp(e,t,n,r,i){return E(n,`object`)?qe(i):E(n,`array`)?T(i):E(n,`boolean`)?Dt(i):E(n,`integer`)?rn(i):E(n,`number`)?S(i):E(n,`null`)?on(i):E(n,`string`)?x(i):E(n,`bigint`)?tn(i):E(n,`constructor`)?At(i):E(n,`function`)?Pt(i):E(n,`symbol`)?zt(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 ct(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]=[L(),L()],o=M(N(`context`,`GetIndices`),[]),s=M(N(`indices`,`has`),[i]),c=z(e,t,n.unevaluatedItems,a),l=M(N(`context`,`AddIndex`),[i]),u=Fo(r,P(0),[a,i],A(j(s,c),l));return M(Wo([`context`],qo([Jo(`indices`,o),Xo(u)])),[`context`])}function xp(e,t,n,r){let i=t.GetIndices();return D(r,0,(r,a)=>(i.has(a)||B(e,t,n.unevaluatedItems,r))&&t.AddIndex(a))}function Sp(e,t,n,r,i,a){let o=t.GetIndices(),s=[];return Zt(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]=[L(),L()],o=M(N(`context`,`GetKeys`),[]),s=M(N(`keys`,`has`),[i]),c=M(N(`context`,`AddKey`),[i]),l=z(e,t,n.unevaluatedProperties,a),u=Fo(zo(r),P(0),[`[${i}, ${a}]`,`_`],j(s,A(l,c)));return M(Wo([`context`],qo([Jo(`keys`,o),Xo(u)])),[`context`])}function wp(e,t,n,r){let i=t.GetKeys();return D(w(r),0,([r,a])=>i.has(r)||B(e,t,n.unevaluatedProperties,a)&&t.AddKey(r))}function Tp(e,t,n,r,i,a){let o=t.GetKeys(),s=[];return Zt(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)?Oo(N(Go(`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(st)).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=st(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)&&bt(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 F(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 F(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 F(e)&&(Gs(e)||Bs(e)||Ms(e)||Xs(e))}function Lp(e){return Ap(e,`number`)||Ap(e,`bigint`)}function Rp(e){return F(e)&&(Hs(e)||Ls(e)||As(e)||js(e)||qs(e))}function zp(e,t,n,r){return t.UseUnevaluated()?A(A(t.Push(),z(e,t,n,r)),t.Pop()):z(e,t,n,r)}function z(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=Zo(a),s=j(mo(xo(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=Zo(a),s=j(mo(ho(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=Zo(a),s=j(mo(Co(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=Zo(a),s=j(mo(j(bo(r),go(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(mo(ho(r)),bp(e,t,n,r))),uc(n)&&i.push(j(mo(So(r)),Cp(e,t,n,r))),ps(n)&&i.push(Sc(e,t,n,r));let a=Zo(i);return e.Pop(n),a}function Bp(e,t,n,r){return t.Push()&&B(e,t,n,r)&&t.Pop()}function B(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)||tn(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)||tn(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=z(e,t,n,`value`);return t.UseUnevaluated()?Jo(`check_${r}`,Wo([`context`,`value`],i)):Jo(`check_${r}`,Wo([`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)&&!Lt(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=F(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=F(e)&&Ns(e)?new URL(e.$id,t.href):t;if(F(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 F(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=F(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(F(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!F(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||!F(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 V=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)},H,Am,jm,Mm,Nm,Pm,Fm,Im,Lm,Rm,zm,Bm,Vm,Hm,Um,Wm=class{constructor(e,t){H.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 V(this,H,`m`,Mm).call(this,this.ids)}Push(e){if(!F(e))return;Ns(e)&&V(this,H,`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){F(e)&&(Ns(e)&&V(this,H,`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(),V(this,H,`m`,Um).call(this,e))}Ref(e){let t=Dm(V(this,H,`m`,Am).call(this),e);return V(this,H,`m`,jm).call(this,t),t.schema}RecursiveRef(e){let t=Om(V(this,H,`m`,Am).call(this),e);return t&&(this.pendingResource=!0),t}DynamicRef(e){let t=km(V(this,H,`m`,Am).call(this),e);return t&&(this.pendingResource=!0),t}};H=new WeakSet,Am=function(){return{context:this.context,root:this.schema,ids:this.ids,lexicalSchema:V(this,H,`m`,Fm).call(this),lexicalBase:this.LexicalBaseURL(),referenceBase:V(this,H,`m`,Pm).call(this),resourceBase:V(this,H,`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)||V(this,H,`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:V(this,H,`m`,Mm).call(this,this.resourceIds)},Pm=function(){if(this.retrievedFrames.length>0)return V(this,H,`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():V(this,H,`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=>V(this,H,`m`,Rm).call(this,e,!1))},Lm=function(e){e.forEach(e=>V(this,H,`m`,zm).call(this,e,!1))},Rm=function e(t,n=!0){if(ms(t))return;if(T(t))return V(this,H,`m`,Im).call(this,t);if(!F(t))return;let r=t;if(!(!n&&Ns(r))){!n&&Es(r)&&this.dynamicAnchors.push(r);for(let t of b(r))V(this,H,`m`,e).call(this,r[t],!1)}},zm=function e(t,n=!0){if(ms(t))return;if(T(t))return V(this,H,`m`,Lm).call(this,t);if(!F(t))return;let r=t;if(!(!n&&Ns(r))){!n&&Es(r)&&this.dynamicAnchors.pop();for(let t of b(r))V(this,H,`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),V(this,H,`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(),V(this,H,`m`,zm).call(this,e,!0)},Hm=function(e,t){V(this,H,`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);V(this,H,`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,$e,wd,Ye,e.External().variables)}function qm(e){let t=new Wm(e.Context(),e.Schema()),n=new gc;return r=>B(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 B(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},et(t.$ref),n)}function ah(e,t){let n=C(t,`unevaluatedProperties`)?{additionalProperties:t.unevaluatedProperties}:{},r=Jt(e,t),i=Ht(r);return Ze(i)?Ft(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(Dt(r)&&E(r,!0)||Ot(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(Et(t)),kt(t)];for(let t of b(n)){if(i.test(t)){n[t]=mh(e,a,n[t]);continue}if(Dt(r)&&E(r,!0)||Ot(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 bt(n.length,r)?n.slice(0,r):n}function fh(e){return $t(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 lt(t)?rh(e,t,n):Ue(t)?ih(e,t,n):ut(t)?oh(e,t,n):Ze(t)?ch(e,t,n):Tt(t)?lh(e,t,n):qt(t)?uh(e,t,n):Gt(t)?dh(e,t,n):jt(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(Qt(e))}function vh(e){return e.map(e=>yh(e))}function yh(e){return hh(e,lt(e)?Ve(yh(e.items),vt(e)):ut(e)?nt(vh(e.allOf)):jt(e)?yt(_h(e.anyOf)):Ze(e)?pt(gh(e.properties)):Tt(e)?Bt(en(e),yh(kt(e))):Gt(e)?Vt(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,Ut().unionPrioritySort?bh(n):n,r)}function Sh(e){return y(e)&&C(e,`value`)}function U(e){return{value:e}}function Ch(e){return T(e)?U(e):U([e])}function wh(e){return E(e,!0)?U(BigInt(1)):U(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)?U(BigInt(e.slice(0,e.length-1))):kh(e)?U(BigInt(e.split(`.`)[0])):Ah(e)?U(BigInt(e)):E(t,`false`)?U(BigInt(0)):E(t,`true`)?U(BigInt(1)):void 0}function Mh(e){return tn(e)?U(e):Dt(e)?wh(e):S(e)?U(BigInt(Math.trunc(e))):on(e)?U(BigInt(0)):x(e)?jh(e):v(e)?U(BigInt(0)):void 0}function Nh(e){return E(e,BigInt(0))?U(!1):E(e,BigInt(1))?U(!0):void 0}function Ph(e){return E(e,0)?U(!1):E(e,1)?U(!0):void 0}function Fh(e){return E(e.toLowerCase(),`false`)?U(!1):E(e.toLowerCase(),`true`)?U(!0):E(e,`0`)?U(!1):E(e,`1`)?U(!0):void 0}function Ih(e){return tn(e)?Nh(e):Dt(e)?U(e):S(e)?Ph(e):on(e)?U(!1):x(e)?Fh(e):v(e)?U(!1):void 0}function Lh(e){return E(e,BigInt(0))?U(null):void 0}function Rh(e){return E(e,!1)?U(null):void 0}function zh(e){return E(e,0)?U(null):void 0}function Bh(e){let t=e.toLowerCase();return E(t,`undefined`)||E(t,`null`)||E(e,``)||E(e,`0`)?U(null):void 0}function Vh(e){return tn(e)?Lh(e):Dt(e)?Rh(e):S(e)?zh(e):on(e)?U(null):x(e)?Bh(e):v(e)?U(null):void 0}const Hh=BigInt(2**53-1),Uh=BigInt(-(2**53-1));function Wh(e){return e<=Hh&&e>=Uh?U(Number(e)):void 0}function Gh(e){return U(+!!e)}function Kh(e){let t=+e;if(S(t))return U(t);let n=e.toLowerCase();if(E(n,`false`))return U(0);if(E(n,`true`))return U(1);let r=Mh(e);if(Sh(r))return r.value<=Hh&&r.value>=Uh?U(Number(r.value)):void 0}function qh(e){return tn(e)?Wh(e):Dt(e)?Gh(e):S(e)?U(e):on(e)?U(0):x(e)?Kh(e):v(e)?U(0):void 0}function Jh(e){return tn(e)||Dt(e)||S(e)?U(e.toString()):on(e)?U(`null`):x(e)?U(e):v(e)?U(``):void 0}function Yh(e){return E(e,BigInt(0))?U(void 0):void 0}function Xh(e){return E(e,!1)?U(void 0):void 0}function Zh(e){return E(e,0)?U(void 0):void 0}function Qh(e){let t=e.toLowerCase();return E(t,`undefined`)||E(t,`null`)||E(e,``)||E(e,`0`)?U(void 0):void 0}function $h(e){return tn(e)?Yh(e):Dt(e)?Xh(e):S(e)?Zh(e):on(e)?U(void 0):x(e)?Qh(e):v(e)?U(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},et(t.$ref),n)}function ig(e,t,n){return Dg(e,Ht(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=Jt(e,t);return Dg(e,Ht(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:ft(t)?sg(e,t,n):Je(t)?cg(e,t,n):Ke(t)?lg(e,t,n):ot(t)?ug(e,t,n):Qe()}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 ht(e)&&v(n[t])}function gg(e,t,n){let r=St(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 qe(n)?gg(e,t,n):n}function vg(e,t,n){let r=St(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 qe(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,Ht(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 lt(t)?eg(e,t,n):rt(t)?tg(e,t,n):It(t)?ng(e,t,n):Ue(t)?rg(e,t,n):dn(t)?ig(e,t,n):He(t)?ag(e,t,n):ut(t)?og(e,t,n):an(t)?dg(e,t,n):We(t)?fg(e,t,n):sn(t)?pg(e,t,n):Ze(t)?_g(e,t,n):Tt(t)?yg(e,t,n):qt(t)?bg(e,t,n):nn(t)?xg(e,t,n):xt(t)?Sg(e,t,n):Gt(t)?Cg(e,t,n):Xt(t)?wg(e,t,n):jt(t)?Tg(e,t,n):Wt(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},et(t.$ref),n)}function jg(e,t){return v(t)?Pt(e.default)?e.default():fh(e.default):t}function Mg(e,t,n){let r=Jt(e,t);return Rg(e,Ht(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)&&(ht(t.properties[i])||!C(t.properties[i],`default`))||(n[i]=r)}if(!gs(t)||Dt(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(Et(t)),kt(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 lt(t)?kg(e,t,r):Ue(t)?Ag(e,t,r):ut(t)?Mg(e,t,r):Ze(t)?Ng(e,t,r):Tt(t)?Pg(e,t,r):qt(t)?Fg(e,t,r):Gt(t)?Ig(e,t,r):jt(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 W(e,t,n,r){return at(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 W(e,t,n,r)}function Wg(e,t,n,r){let i=W(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},et(n.$ref),r),W(e,t,n,r)}function qg(e){return e.reduce((e,t)=>({...e,...t}),{})}function Jg(e,t){for(let n of t)if(!Kt(e,n))return n;return e}function Yg(e,t,n,r){if(E(n.allOf.length,0))return W(e,t,n,r);let i=n.allOf.map(n=>f_(e,t,n,xh(n,fh(r))));return W(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 W(e,t,n,r);let i=W(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(!qe(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 W(e,t,n,r)}function $g(e,t,n,r){let i=W(e,t,n,r);if(!qe(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(!qe(r))return r;let i=new RegExp(Et(n));for(let a of b(r))i.test(a)&&(r[a]=f_(e,t,kt(n),r[a]));return W(e,t,n,r)}function n_(e,t,n,r){let i=W(e,t,n,r);if(!qe(i))return i;let a=new RegExp(Et(n));for(let r of b(i))a.test(r)&&(i[r]=f_(e,t,kt(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`)?W(e,t,n,i_(e,t,n,r)):i_(e,t,n,W(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 W(e,t,n,r)}function s_(e,t,n,r){let i=W(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 W(e,t,n,f_(e,t,i,r));return r}function u_(e,t,n,r){let i=W(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 lt(n)?Gg(e,t,n,r):Ue(n)?Kg(e,t,n,r):ut(n)?Zg(e,t,n,r):Ze(n)?e_(e,t,n,r):Tt(n)?r_(e,t,n,r):qt(n)?a_(e,t,n,r):Gt(n)?c_(e,t,n,r):jt(n)?d_(e,t,n,r):W(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,Ut().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,Ut().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 at(t)||j_(e,t.items)}function w_(e,t){return at(t)||O_({...e,...t.$defs},et(t.$ref))}function T_(e,t){return at(t)||t.allOf.some(t=>j_(e,t))}function E_(e,t){return at(t)||b(t.properties).some(n=>j_(e,t.properties[n]))}function D_(e,t){return at(t)||j_(e,kt(t))}function O_(e,t){return!M_.has(t.$ref)&&(M_.add(t.$ref),at(t)||C(e,t.$ref)&&j_(e,e[t.$ref]))}function k_(e,t){return at(t)||t.items.some(t=>j_(e,t))}function A_(e,t){return at(t)||t.anyOf.some(t=>j_(e,t))}function j_(e,t){return lt(t)?C_(e,t):Ue(t)?w_(e,t):ut(t)?T_(e,t):Ze(t)?E_(e,t):Tt(t)?D_(e,t):qt(t)?O_(e,t):Gt(t)?k_(e,t):jt(t)?A_(e,t):at(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 Pt(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},et(t.$ref))}function V_(e,t){return rv(e,Ht(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=Jt(e,t);return rv(e,Ht(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=Nt(t.pattern);if(nn(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):lt(t)?I_(e,t):rt(t)?L_(e,t):It(t)?R_(e,t):gt(t)?z_(e,t):Ue(t)?B_(e,t):dn(t)?V_(e,t):_t(t)?H_(e,t):He(t)?U_(e,t):ut(t)?W_(e,t):an(t)?G_(e,t):tt(t)?K_(e,t):We(t)?q_(e,t):sn(t)?J_(e,t):Ze(t)?Y_(e,t):Tt(t)?X_(e,t):qt(t)?Z_(e,t):nn(t)?Q_(e,t):Ct(t)?$_(e,t):xt(t)?ev(e,t):Gt(t)?tv(e,t):Xt(t)?void 0:jt(t)?nv(e,t):(Wt(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=pt({type:Rt(`insert`),path:ln(),value:mt()}),lv=Object({type:Rt(`update`),path:ln(),value:mt()}),uv=pt({type:Rt(`delete`),path:ln()});yt([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(Ut().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=gn(vn([...e.messages,...i]),(e.tools??[]).map(yn)),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=mn({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=_n(e?.systemPrompt,t.map(yn));return n[0]?.role!==`system`&&r&&n.unshift(r),{get systemPrompt(){return hn(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=pn(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
|
|
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=ue();if(!e)return null;let t=Pe(e);if(!t?.getBudgetUsage)return null;let n=await t.getBudgetUsage();return n?{...n,providerId:e}:null}function fy(){try{return ue()}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(!An().test(e))return Cy(e,t);let n=Cy(e.replace(An(),``).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(!An().test(e))return Cy(e,t);let n=[],r=0;for(let i of e.matchAll(An()))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
|
|
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
|
|
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=
|
|
891
|
-
`),Ce())}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=Xn(n);if(!r||r.length===0)return null;let i=tr(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 yr(r?.descriptor.workspace??vr)}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=er(n).level;return r&&Cr(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&&!Cr(a))return{error:{finalText:`agent: invalid thinking level: ${String(a)} (one of: ${wr.join(`, `)})`,exitCode:1}};let o=Vn(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=Rn(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 te={finalText:``,exitCode:1};try{let t=await vb(i,e,h,l,ee);return te=t.outcome,await lb(i,e,l,t),te}finally{e.signal?.removeEventListener(`abort`,g),ee.unsubscribe?.(),await pb(i,e,l,s,te),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 de(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=In(e);return t.endsWith(`/`)?t:`${t}/`}function Db(e){let t=Vn(e);return t.ok?t.mode:Hn}function Ob(e,t,n=Hn){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=Hn){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 Nr(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=Tr.fromHandle(i,{mountId:t.mountId});return await n.mount(e,s,{limits:Er}),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 Pr({mountId:s,ttlMs:3e4}),mountId:s},l=i===`s3`?new Or({...t,signedFetch:kr(o)}):i===`aem`?new jr({...t,signedFetch:Mr()}):new Dr({...t,signedFetch:Mr()});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
|
|
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
|
|
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
|
|
896
|
-
`)}}function
|
|
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=zn(e.workspace?.mode??e.config?.workspaceMode),r=e.workspace?.from??`/workspace`,i=pr(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:Sr(n).root}}:e}var mx=class{host;constructor(e){this.host=e}async create(e){e.parentId===null&&e.workspace?.mode!==void 0&&zn(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}`);Jn(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 fr(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=zr(t),r=gx(t,t.parentJid);t.parentJid=null,lr(t);try{await this.host.persistScoop(t)}catch(e){throw _x(t,r),e}return await this.host.rekeyConversation?.(n,{key:zr(t),workUnitId:t.jid,workspaceId:Rr(t),folder:t.folder,legacyKeys:{agentSessionId:t.jid,chatSessionId:rr(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=Xn(e),n=tr(e),{level:r,effortOverride:i}=er(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 G={SCOOPS:`scoops`,MESSAGES:`messages`,SESSIONS:`sessions`,TASKS:`tasks`,STATE:`state`,WEBHOOKS:`webhooks`,CRONTASKS:`crontasks`};let Ox=null;function kx(e){if(!e.objectStoreNames.contains(G.MESSAGES)){let t=e.createObjectStore(G.MESSAGES,{keyPath:`id`});t.createIndex(`chatJid`,`chatJid`),t.createIndex(`timestamp`,`timestamp`),t.createIndex(`chatJid_timestamp`,[`chatJid`,`timestamp`])}e.objectStoreNames.contains(G.SESSIONS)||e.createObjectStore(G.SESSIONS,{keyPath:`groupFolder`}),e.objectStoreNames.contains(G.TASKS)||e.createObjectStore(G.TASKS,{keyPath:`id`}).createIndex(`groupFolder`,`groupFolder`),e.objectStoreNames.contains(G.STATE)||e.createObjectStore(G.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(G.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(G.SCOOPS)||t.createObjectStore(G.SCOOPS,{keyPath:`jid`}).createIndex(`type`,`type`)}function Mx(e){e.objectStoreNames.contains(G.WEBHOOKS)||e.createObjectStore(G.WEBHOOKS,{keyPath:`id`}),e.objectStoreNames.contains(G.CRONTASKS)||e.createObjectStore(G.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(G).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 K(e,t=`readonly`){return(await Ix()).transaction(e,t).objectStore(e)}async function Lx(e){let t=await K(G.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 K(G.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 K(G.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 K(G.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 K(G.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 K(G.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 K(G.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 K(G.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 K(G.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 K(G.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 K(G.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 K(G.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 K(G.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 K(G.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 K(G.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 K(G.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 K(G.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 K(G.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 K(G.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 K(G.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 K(G.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 K(G.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 K(G.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(Vr(),Te())}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:ie(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 ae(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(rr(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=te(e),s=[];n&&s.push({source:`explicit target`,value:n}),o&&o!==n&&s.push({source:`configured route`,value:o});let c=[],l;for(let e of s){if(l=uo(a,e.value),l)break;c.push(e)}if(l||=this.originRootOf(a,r?.unitJid)??O(a)[0],c.length>0&&CS.warn(`Sprinkle lick target could not be resolved; using fallback`,{sprinkleName:e,unresolvedTargets:c,fallbackJid:l?.jid}),!l)return;let u=`sprinkle-${e}-${Date.now()}`,d=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\`\`\``,f=c.map(({source:e,value:t})=>`${e} ${JSON.stringify(t)}`).join(` and `),p=d+(f?`\n\n> Delivery note: ${f} could not be resolved; delivered to fallback ${JSON.stringify(l.folder)}.`:``),m={id:u,chatJid:l.jid,senderId:`sprinkle`,senderName:`sprinkle:${e}`,content:p,timestamp:new Date().toISOString(),fromAssistant:!1,channel:`sprinkle`};this.getBuffer(l.jid).push({id:u,role:`user`,content:p,timestamp:Date.now(),source:`lick`,channel:`sprinkle`}),await this.orchestrator.handleMessage(m)}originRootOf(e,t){if(t)return qn(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(()=>pT),a=await i(r,{source:nr(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=or(e,i),o=a===cr,s=O(i)[0],c=r??(s?sr(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:nr(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?nr(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=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&&Un(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=rr({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(rr({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`){Mn.markMounted(t);return}try{await Mn.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}),Mn.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
|
|
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
|
|
910
|
-
`)||n.includes(`\r`)||n.includes(`#`))throw Error(`Invalid llms.txt ignore hostname.`);let r=``;try{r=await e.readFile(
|
|
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(
|
|
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
|
|
987
|
-
`);function
|
|
988
|
-
`)}\n`}var
|
|
989
|
-
`).some(e=>e.trim()===s))return
|
|
990
|
-
`)?o:`${o}\n`:
|
|
991
|
-
`)?`${r}\n`:r,a=e===`Cmnd`?` `:` `;await this.fs.writeFile(pi,`${i}NOPASSWD ${e}${a}${n}\n`),await this.reload()}startWatching(){this.watcher&&(this.unwatch||=this.watcher.watch(`/etc`,oC,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=sC(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 fC(e){return e.replace(/~/g,`~0`).replace(/\//g,`~1`)}function pC(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function mC(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++)mC(e[r],`${t}/${r}`,n);return}if(pC(e))for(let[r,i]of Object.entries(e))mC(i,`${t}/${fC(r)}`,n)}function hC(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}if(pC(e)){let r=!1,i={};for(let[a,o]of Object.entries(e)){let e=hC(o,`${t}/${fC(a)}`,n);e!==o&&(r=!0),i[a]=e}return r?i:e}return e}function gC(e,t,n){if(pC(e))return hC(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=gC(e[a],`${t}/${a}`,n);o!==e[a]&&(r=!0),i.push(o)}return r?i:e}return e}function _C(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 vC(e,t,n){let r=[],i=0;for(;i<e.length;){if(n?.aborted)throw new a(`redaction-unavailable`);let o=0,s=i;for(;s<e.length;){let t=e[s].length;if(s>i&&o+t>1048576)break;o+=t,s++}let c=e.slice(i,s),l;try{l=await t.redact(c,n)}catch{throw new a(`redaction-unavailable`)}if(l.length!==c.length)throw new a(`redaction-unavailable`);r.push(...l),i=s}return r}function yC(e,t,n,r){let i=[],a=_C(e);for(let{category:e,id:t}of a.values())i.push({id:t,category:e,detector:`pre-obfuscated`,target:n});let o=_C(t);for(let[e,{category:t,id:r,count:s}]of o)s>(a.get(e)?.count??0)&&i.push({id:r,category:t,detector:`known-secret`,target:n});let{text:s,matches:c,nextId:l}=xe(t,`r`,r);for(let{id:e,category:t}of c)i.push({id:e,category:t,detector:`credential-pattern`,target:n});return{finalText:s,redactions:i,nextId:l}}function bC(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 xC(e,t,n,r){if(r?.aborted)throw new a(`redaction-unavailable`);let{privacy:i,...o}=e,s=[];mC(o,``,s);let c=s.filter(e=>!ne(e.pointer)),l=[...t.entries()],u=await vC([...c.map(e=>e.value),...l.map(([,e])=>e)],n,r),d=[],f={},p=1,m=new Map,h=[];for(let e=0;e<c.length;e++){let t=c[e],n=yC(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)}bC(h,d,f);let ee=new Map,g=c.length,te=[];for(let e=0;e<l.length;e++){let[t,n]=l[e],r=yC(n,u[g+e],{kind:`attachment`,attachmentId:t},p);p=r.nextId,ee.set(t,r.finalText),te.push(r)}bC(te,d,f);let re=gC(e,``,m);return{document:{...re,privacy:{...re.privacy,redactionCounts:f,redactions:d}},textAttachments:ee}}function SC(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 CC(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 wC={"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 TC(e,t){return wC[e]??(t===`text-redacted`?`.txt`:`.bin`)}function EC(e,t,n){return`attachments/att-${String(e+1).padStart(4,`0`)}${TC(t,n)}`}function DC(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 OC(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 kC(e,t,n,r,i){let a=SC(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(DC(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=DC(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 AC(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:DC(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(kC(c.a,s.attachmentId,s.conversationId,s.messageId,r))}return{pendingPromises:i,mismatchedConvIds:a,processedUiPositions:o}}function jC(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 MC(e,t,n,r,i,a,o){let s=jC(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(kC(i,l,n,e.id,o)),c.push({type:`attachment-ref`,attachmentId:l}))}return c}function NC(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=MC(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 PC(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,EC(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 FC(e,t,n,r,i){let{rawAttachments:o,textMap:s}=PC(e,n),c,l;try{let e=await xC({...t,attachments:o},s,r,i);c=e.document,l=e.textAttachments}catch(e){throw e instanceof a?e:new a(`attachment-unreadable`)}let u=new Map;for(let t of e){if(u.has(t.attachmentId))throw new a(`schema-invalid`);u.set(t.attachmentId,t)}let d=new Map,f=await Promise.all(c.attachments.map(async e=>{if(!e.present||!e.path)return e;let t=u.get(e.id);if(t===void 0)throw new a(`schema-invalid`);let n=t.handling===`text-redacted`?new TextEncoder().encode(l.get(t.attachmentId)??t.rawText??``):t.rawBytes,r=await CC(n);return d.set(e.path,n),{...e,byteLength:n.length,sha256:r}}));return{redactedDocument:{...c,attachments:f},bundleFiles:d}}async function IC(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}=AC(OC(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}=NC(t,n,new Set(d.map(e=>e.attachmentId)),u,o),m=await Promise.all(p),h=[...d,...m],ee=t;f.size>0&&(ee={...t,conversations:t.conversations.map(e=>{let t=f.get(e.id);return t?{...e,messages:e.messages.map(e=>{let n=t.get(e.id);return n?{...e,content:n}:e})}:e})});let{redactedDocument:g,bundleFiles:te}=await FC(h,ee,s,r,i),ne=[...g.session.completeness.missing.filter(e=>!s.has(e)),...s];return{document:{...g,session:{...g.session,completeness:{status:ne.length>0?`partial`:g.session.completeness.status,missing:ne}}},bundleFiles:te}}function LC(e){return rr(e)}function RC(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 zC(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:Un(t)?`cone`:`scoop`,name:t.name,...t.folder&&!Un(t)?{folder:t.folder}:{},...t.parentJid?{parentConversationId:t.parentJid}:{},...t.originToolCallId?{originToolCallId:t.originToolCallId}:{},messages:e};o.push(n);let c=LC(t),l=a.get(c);l&&s.set(t.jid,l.messages)}return{sources:o,chatMessagesByConversation:s}}async function BC(e,t,n={}){let r=e=>n.rootJid===void 0?e:Gn(e,n.rootJid);for(;;){let n=r(e.listScoops());for(;n.some(t=>e.isProcessing(t.jid));)if(t?.aborted||(await e.wait(50,t),t?.aborted))throw new a(`transfer-aborted`);let i=RC(n,e),[o,s]=await Promise.all([e.loadPersistedSessions(),e.loadUiChatSessions()]);if(t?.aborted)throw new a(`transfer-aborted`);let c=r(e.listScoops());if(i===RC(c,e))return zC(c,o,s,e)}}var VC=e({SESSIONS_DIR:()=>HC,SESSIONS_INDEX_PATH:()=>UC,parseFrozenArchive:()=>GC,readSessionsIndex:()=>WC});const HC=`/sessions`,UC=`/sessions/index.json`;async function WC(e){try{let t=await e.readFile(UC,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),r=JSON.parse(n);return Array.isArray(r)?r:[]}catch{return[]}}function GC(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,KC(i[1]));let e=i[1].match(/^title:\s*(.+?)\s*$/m);e&&(n=qC(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:YC(t),...r})}function KC(e){let t={},n=JC(e,`cost`),r=JC(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=qC(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 qC(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 JC(e,t){let n=RegExp(`^${t}:\\s*(.+?)\\s*$`,`m`).exec(e)?.[1];if(n)try{return JSON.parse(n)}catch{return}}function YC(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 XC(e,t){return`${e}-msg-${t.toString().padStart(6,`0`)}`}function ZC(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(ZC(t,r++));return n}function $C(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=ZC(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 ew(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=ZC(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 tw(e,t,n){let r=XC(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 nw(e,t,n){let r=XC(t,n),{blocks:i,excluded:a,images:o}=$C(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 rw(e,t,n){let r=XC(t,n),{blocks:i,images:a}=ew(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 iw(e,t,n){return e.role===`user`?tw(e,t,n):e.role===`assistant`?nw(e,t,n):e.role===`toolResult`?rw(e,t,n):{message:null,excludedReasoningBlocks:0,images:new Map}}function aw(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 ow(e){let t=0,n=new Map;return{conversations:e.map(e=>{let r=e.messages.flatMap((r,i)=>{let a=iw(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:aw(e),excludedReasoningBlocks:t,canonicalImages:n}}const sw=(()=>{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 cw(e){let t=-1>>>0;for(let n=0;n<e.length;n++)t=t>>>8^sw[(t^e[n])&255];return~t>>>0}const lw=new TextEncoder;function q(e,t,n){e[t]=n&255,e[t+1]=n>>>8&255}function uw(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 dw(e,t,n){let r=new Uint8Array(30+e.length);return r[0]=80,r[1]=75,r[2]=3,r[3]=4,q(r,4,20),q(r,6,2048),q(r,8,0),q(r,10,0),q(r,12,0),uw(r,14,n),uw(r,18,t),uw(r,22,t),q(r,26,e.length),q(r,28,0),r.set(e,30),r}function fw(e,t,n,r){let i=new Uint8Array(46+e.length);return i[0]=80,i[1]=75,i[2]=1,i[3]=2,q(i,4,20),q(i,6,20),q(i,8,2048),q(i,10,0),q(i,12,0),q(i,14,0),uw(i,16,n),uw(i,20,t),uw(i,24,t),q(i,28,e.length),q(i,30,0),q(i,32,0),q(i,34,0),q(i,36,0),uw(i,38,0),uw(i,42,r),i.set(e,46),i}function pw(e,t,n){let r=new Uint8Array(22);return r[0]=80,r[1]=75,r[2]=5,r[3]=6,q(r,4,0),q(r,6,0),q(r,8,e),q(r,10,e),uw(r,12,t),uw(r,16,n),q(r,20,0),r}function mw(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 hw(e){let t=e.export.generatedAt.slice(0,10),n=e.export.id.slice(0,8);return`slicc-${t}-${be(e.session.title,{maxLen:40,fallback:`transcript`})}-${n}.zip`}async function*gw(e,t,n,r,i){if(n?.aborted)throw i(new a(`transfer-aborted`)),new a(`transfer-aborted`);let o=()=>i(new a(`transfer-aborted`));n?.addEventListener(`abort`,o,{once:!0});let s=hi.create(),c=0,l=0,u=[],d=!1;function*f(e){s.update(e),c+=e.byteLength,l+=e.byteLength,yield e}try{let i=new TextEncoder().encode(JSON.stringify(e,null,2)),o=lw.encode(`transcript.json`),p=cw(i),m=dw(o,i.length,p);if(u.push({nameBytes:o,size:i.length,crc:p,localOffset:l}),n?.aborted||(yield*f(m),n?.aborted))throw new a(`transfer-aborted`);yield*f(i);for(let[e,r]of t){if(n?.aborted)throw new a(`transfer-aborted`);let t=lw.encode(e),i=cw(r),o=dw(t,r.length,i);if(u.push({nameBytes:t,size:r.length,crc:i,localOffset:l}),yield*f(o),n?.aborted)throw new a(`transfer-aborted`);yield*f(r)}let h=l;for(let e of u){if(n?.aborted)throw new a(`transfer-aborted`);yield*f(fw(e.nameBytes,e.size,e.crc,e.localOffset))}if(n?.aborted)throw new a(`transfer-aborted`);yield*f(pw(u.length,l-h,h)),d=!0,r({byteLength:c,sha256:s.hex()})}catch(e){throw d=!0,i(e),e}finally{n?.removeEventListener(`abort`,o),d||(d=!0,i(new a(`transfer-aborted`)))}}function _w(e,t,n){for(let e of t.keys())if(!mw(e))throw new a(`schema-invalid`);if(t.size+1>65535)throw new a(`schema-invalid`);for(let e of t.values())if(e.byteLength>4294967295)throw new a(`schema-invalid`);let r,i,o=new Promise((e,t)=>{r=e,i=t});return{filename:hw(e),chunks:gw(e,t,n,r,i),completion:o}}function vw(e,t,n,r,i,a={}){return{schemaVersion:1,export:{id:crypto.randomUUID(),generatedAt:new Date().toISOString(),producer:{application:`slicc`,version:i},format:re},session:{id:e,title:t,state:n,completeness:{status:`complete`,missing:[]},...a},privacy:{reasoningExcluded:!0,excludedReasoningBlocks:r.excludedReasoningBlocks,binaryAttachments:`included-unchanged`,redactionCounts:{},redactions:[]},conversations:r.conversations,delegations:r.delegations,attachments:[]}}function yw(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 bw(e){let t=n(e);if(!t.ok)throw new a(`schema-invalid`,t.error)}function xw(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 Sw(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 Cw(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 ww=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),bw(i.document),r?.({phase:`packaging`}),_w(i.document,i.bundleFiles,n)}async captureFrozen(e,t){let n=await BC(this.deps.collection,t,{...e.rootJid?{rootJid:e.rootJid}:{}});if(e.rootJid&&n.sources.length===0)return;let r=ow(n.sources),{document:i,bundleFiles:o}=await IC({document:vw(e.sessionId,e.title,`frozen`,r,this.deps.version,{frozenAt:e.frozenAt,createdAt:new Date(e.createdAt).toISOString(),updatedAt:new Date(e.updatedAt).toISOString()}),chatMessagesByConversation:n.chatMessagesByConversation,knownSecrets:this.deps.knownSecrets,canonicalImages:r.canonicalImages,vfsReader:e=>this.readBinaryFromVfs(e),signal:t});if(bw(i),t?.aborted)throw new a(`transfer-aborted`);await this.deps.snapshotStore.write(e.sessionId,{document:i,attachments:o},t)}async buildActiveSnapshot(e,t){t?.({phase:`waiting-for-conversations`}),t?.({phase:`collecting`});let n=await BC(this.deps.collection,e),r=ow(n.sources),{id:i,title:a}=this.deps.getActiveSessionInfo(),o=vw(i,a,`active`,r,this.deps.version);return t?.({phase:`redacting`}),IC({document:o,chatMessagesByConversation:n.chatMessagesByConversation,knownSecrets:this.deps.knownSecrets,canonicalImages:r.canonicalImages,vfsReader:e=>this.readBinaryFromVfs(e),signal:e})}async buildFrozenSnapshot(e,t,n){let r;try{r=await this.deps.snapshotStore.read(e)}catch(e){if(!(e instanceof a)||e.code!==`session-not-found`)throw e;r=null}return r?(n?.({phase:`redacting`}),this.reredactStoredSnapshot(r,t)):this.buildLegacyPartial(e,t,n)}async reredactStoredSnapshot(e,t){let n=new Map;for(let t of e.document.attachments){if(t.handling!==`text-redacted`||!t.present||!t.path)continue;let r=e.attachments.get(t.path);r&&n.set(t.id,new TextDecoder().decode(r))}let r,i;try{let a=await xC(e.document,n,this.deps.knownSecrets,t);r=a.document,i=a.textAttachments}catch{throw new a(`redaction-unavailable`)}let o=xw(r.attachments,i,e.attachments),s=await Sw(r.attachments,o);return{document:{...r,attachments:s},bundleFiles:o}}async buildLegacyPartial(e,t,n){let r=(await WC(this.deps.vfs)).find(t=>t.sessionId===e||!t.sessionId&&t.filename===e);if(!r)throw new a(`session-not-found`);let i;try{let e=await this.deps.vfs.readFile(`/sessions/${r.filename}`,{encoding:`utf-8`});i=typeof e==`string`?e:new TextDecoder().decode(e)}catch{throw new a(`session-not-found`)}let{loadFrozenArchive:o}=await import(`./session-jsonl-BT08KJtu.js`),{title:s,messages:c}=await o(this.deps.vfs,i,r.filename),l=`legacy-cone`,u=yw(c,l),d=Cw(i),f={schemaVersion:1,export:{id:crypto.randomUUID(),generatedAt:new Date().toISOString(),producer:{application:`slicc`,version:this.deps.version},format:re},session:{id:e,title:s,state:`frozen`,...r.frozenAt?{frozenAt:r.frozenAt}:{},...d,completeness:{status:`partial`,missing:[`complete-snapshot-unavailable`,`canonical-agent-history-unavailable`]}},privacy:{reasoningExcluded:!0,excludedReasoningBlocks:0,binaryAttachments:`included-unchanged`,redactionCounts:{},redactions:[]},conversations:[{id:l,kind:`cone`,name:s,messages:u}],delegations:[],attachments:[]},p=new Map([[l,c]]);return n?.({phase:`redacting`}),IC({document:f,chatMessagesByConversation:p,knownSecrets:this.deps.knownSecrets,vfsReader:e=>this.readBinaryFromVfs(e),signal:t})}async readBinaryFromVfs(e){let t=await this.deps.vfs.readFile(e,{encoding:`binary`});if(!(t instanceof Uint8Array))throw new a(`attachment-unreadable`);return t}};const Tw=`/sessions/data`,Ew=`document.json`,Dw=`.publishing`;function Ow(e){if(e?.aborted)throw new a(`transfer-aborted`)}async function kw(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 Aw(e){if(e.length===0||/[/\\\x00]/.test(e)||e===`..`||e===`.`||e.includes(`..`)||!/^[a-zA-Z0-9._-]+$/.test(e))throw new a(`session-not-found`)}function jw(e){return`${Tw}/${e}`}function Mw(e){return`${Tw}/.tmp-${e}`}async function Nw(e,t){try{await e.mkdir(t,{recursive:!0})}catch{}}async function Pw(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 Pw(e,n);try{await e.rm(n)}catch{}}try{await e.rm(t)}catch{}}async function Fw(e,t){let n=await e.readDir(t);for(let r of n){if(r.name===Dw)continue;let n=`${t}/${r.name}`;r.type===`directory`?await Pw(e,n):await e.rm(n)}}async function Iw(e,t,n,r){Ow(r),await Nw(e,n);let i=await e.readDir(t);for(let a of i){Ow(r);let i=`${t}/${a.name}`,o=`${n}/${a.name}`;if(a.type===`directory`)await Iw(e,i,o,r);else{let t=await e.readFile(i,{encoding:`binary`});await e.writeFile(o,t)}}}async function Lw(e,t,n,r){Aw(t);let i=Mw(t),o=jw(t),s=new Map(n.document.attachments.filter(e=>e.present&&e.path).map(e=>[e.path,e]));for(let[e]of n.attachments)if(!s.has(e))throw new a(`schema-invalid`);Ow(r),await Nw(e,i);let c=!1;try{let t=[...n.document.attachments];for(let[e,i]of n.attachments){Ow(r);let n=await kw(i),a=s.get(e);if(a!==void 0){let e=t.indexOf(a);e!==-1&&(t[e]={...a,sha256:n,byteLength:i.length})}}let a={...n.document,attachments:t},l=JSON.stringify(a,null,2);if(await e.writeFile(`${i}/${Ew}`,l),n.attachments.size>0)for(let[t,r]of n.attachments){let n=`${i}/${t}`,a=t.lastIndexOf(`/`);a!==-1&&await Nw(e,`${i}/${t.slice(0,a)}`),await e.writeFile(n,r)}await e.flush(),Ow(r),await Nw(e,o),c=!0,await e.writeFile(`${o}/${Dw}`,`in-progress`),await Fw(e,o),Ow(r),await Iw(e,i,o,r),await e.flush(),Ow(r),await e.rm(`${o}/${Dw}`)}catch(t){if(c)try{await Fw(e,o)}catch{}throw await Pw(e,i),t}await Pw(e,i)}async function Rw(e,t){Aw(t);let r=jw(t),i=`${r}/${Ew}`;try{throw await e.stat(`${r}/${Dw}`),new a(`session-not-found`)}catch(e){if(e instanceof a||e.code!==`ENOENT`)throw e}let o;try{let t=await e.readFile(i,{encoding:`utf-8`});o=typeof t==`string`?t:new TextDecoder().decode(t)}catch{throw new a(`session-not-found`)}let s;try{s=JSON.parse(o)}catch{throw new a(`schema-invalid`)}if(!n(s).ok)throw new a(`schema-invalid`);let c=new Map;for(let t of s.attachments){if(!t.present||!t.path)continue;let n=`${r}/${t.path}`,i;try{let t=await e.readFile(n,{encoding:`binary`});i=t instanceof Uint8Array?t:new TextEncoder().encode(t)}catch{throw new a(`transfer-corrupt`)}if(await kw(i)!==t.sha256)throw new a(`transfer-corrupt`);c.set(t.path,i)}return{document:s,attachments:c}}function zw(e){return`error`in e}function Bw(){throw new a(`redaction-unavailable`)}function Vw(e,t){return(typeof e!=`object`||!e||!Array.isArray(e.texts)||e.texts.length!==t)&&Bw(),e.texts}function Hw(){return{async redact(e){let t;try{t=await fetch(Re(`/api/secrets/redact-export`),{method:`POST`,headers:ze({"content-type":`application/json`}),body:JSON.stringify({texts:e})})}catch{Bw()}t.ok||Bw();let n;try{n=await t.json()}catch{Bw()}return Vw(n,e.length)}}}function Uw(){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{Bw()}return typeof t==`object`&&t&&zw(t)&&Bw(),Vw(t,e.length)}}}function Ww(){return{async redact(e){let t;try{t=await kn(`secrets.redact-export`,{texts:e})}catch{Bw()}return t??Bw(),typeof t==`object`&&t&&zw(t)&&Bw(),Vw(t,e.length)}}}function Gw(){return{async redact(e){Bw()}}}function Kw(){let e=Sn();return e===`connect`?Gw():e===`extension-direct`?Uw():e===`extension-delegate`?Ww():Hw()}const qw=new Set([`scoop-notify`,`scoop-idle`,`scoop-wait`]);function Jw(e){return`e${e}`}function Yw(e){let t=[];for(let n of e){let e=Qw(n),r=eT(n);if(e===`assistant`){let e=t.length,i=Jw(e);t.push({id:i,seq:e,kind:`assistant`,timestamp:r,text:rT(n),message:n,model:nT(n)});for(let e of iT(n)){let n=t.length;t.push({id:Jw(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:Jw(i),seq:i,kind:`tool-result`,timestamp:r,text:rT(n),message:n,toolCallId:e.toolCallId??``,isError:e.isError});continue}let i=rT(n),a=e===`user`?Zw(i):null,o=t.length,s=Jw(o);a===null?t.push({id:s,seq:o,kind:`user`,timestamp:r,text:i,message:n}):qw.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 Xw(e){let t=[];for(let n of e){let e=t.length,r=Jw(e),i=tT(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:Jw(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:Zw(a);o===null?t.push({id:r,seq:e,kind:`user`,timestamp:i,text:a,chat:n}):qw.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 Zw(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 $w(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 eT(e){return $w(e.timestamp)}function tT(e){return $w(e.timestamp)}function nT(e){let t=e.model;return typeof t==`string`?t:void 0}function rT(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 iT(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 aT(e){let t=e.markers?.some(e=>e.kind===`error`)??!1,n=(e.projectionPrefix?.length??0)>0;return t||n?2:1}function oT(e){return e!==null&&e.version<=2}const sT=_(`work-unit-conversation`);var cT=class extends Error{};const lT=`conversations`;async function uT(e){let t=e.now??(()=>Date.now()),n=await fT(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=zr(s);if(i.has(c)){r.alreadyDone++;continue}try{let n=await dT(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}],sT.warn(`Skipping a unit whose conversation could not be migrated`,{key:c,folder:s.folder,error:o}),i instanceof cT){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),sT.info(`Canonical conversation migration complete`,{...r}),r}async function dT(e,t,n,r){let i=await e.store.read(n);if(i.status===`ok`)return`already`;if(i.status===`incompatible`)return sT.info(`Leaving a newer-schema conversation record untouched`,{key:n,version:i.version}),`already`;if(i.status===`error`)throw new cT(`canonical record unreadable: ${i.reason}`);let a=Br(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:Yw(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:Xw(s.messages),createdAt:s.createdAt??r,updatedAt:r,migratedFrom:`browser-coding-agent`};return await e.store.save(t),`migrated`}return`empty`}async function fT(e,t){let n=await e.getMigrationState(lT);return n&&n.version===1?{...n,completedKeys:Array.isArray(n.completedKeys)?n.completedKeys:[],skipped:Array.isArray(n.skipped)?n.skipped:[]}:{id:lT,version:1,completedKeys:[],skipped:[],done:!1,startedAt:t,updatedAt:t}}var pT=e({applyAttachmentOverlays:()=>_T,interleaveMarkers:()=>vT,toAgentMessages:()=>hT,toChatMessages:()=>gT});const mT=new Set([`summarized`,`fallback`]);function hT(e){if(!oT(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 gT(e,t={}){if(!oT(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 vT(t,e.markers)}let n=e.projectionPrefix??[],r=hT(e);if(r.length===0)return vT([...n],e.markers);let{agentMessagesToChatMessages:i}=await Promise.resolve().then(()=>Oy),a=_T(i(r,t),e.attachments);return vT([...n,...a],e.markers)}function _T(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 vT(e,t){let n=(t??[]).filter(e=>e.kind!==`compaction`||mT.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=yT(t);for(;a<r.length&&r[a].timestamp<=e;)i.push(bT(r[a++]));i.push(t)}for(;a<r.length;)i.push(bT(r[a++]));return i}function yT(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 bT(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 xT(e){return{id:e.legacyKeys.chatSessionId,messages:await gT(e),createdAt:e.createdAt,updatedAt:e.updatedAt}}function ST(e){return{id:e.workUnitId,messages:hT(e),config:{},createdAt:e.createdAt,updatedAt:e.updatedAt}}var CT=class{store;constructor(e){this.store=e}async loadAgentSessions(){return(await this.latestPerUnit()).map(ST)}async loadChatSessions(){return Promise.all((await this.latestPerUnit()).map(xT))}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(Sr({parentJid:null,folder:e}).root);return t?xT(t):null}async load(e){return e.startsWith(`session-`)?this.loadRootChatSession(e.slice(8)):null}};const wT=_(`work-unit-conversation`),TT=`conversations`,ET=`migrations`;var DT=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 PT((await this.getDb()).transaction(TT,`readonly`).objectStore(TT).get(e));return t?oT(t)?Array.isArray(t.entries)?{status:`ok`,record:t}:(wT.warn(`Conversation record has no entry list`,{key:e}),{status:`malformed`,reason:`entries is not a list`}):(wT.warn(`Ignoring conversation record from a newer schema`,{key:e,version:t.version}),{status:`incompatible`,version:t.version}):{status:`absent`}}catch(t){return wT.warn(`Conversation record read failed`,{key:e,error:IT(t)}),{status:`error`,reason:IT(t)}}}async save(e){let t=e.version>2?e.version:aT(e),n={...e,version:t},r=(await this.getDb()).transaction(TT,`readwrite`);return r.objectStore(TT).put(n),await FT(r),n}delete(e){return this.serialize(e,async()=>{try{let t=(await this.getDb()).transaction(TT,`readwrite`);t.objectStore(TT).delete(e),await FT(t)}catch(t){wT.warn(`Conversation record delete failed`,{key:e,error:IT(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`){wT.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){wT.warn(`Conversation rekey failed`,{fromKey:e,toKey:t.key,error:IT(n)})}}async loadAll(){try{return(await PT((await this.getDb()).transaction(TT,`readonly`).objectStore(TT).getAll())).filter(e=>oT(e)&&Array.isArray(e.entries))}catch(e){return wT.warn(`Conversation record listing failed`,{error:IT(e)}),[]}}async loadLatestInWorkspace(e){try{let t=`${e}::`,n=await PT((await this.getDb()).transaction(TT,`readonly`).objectStore(TT).getAll(IDBKeyRange.bound(t,`${t}\uffff`))),r=null;for(let e of n)!oT(e)||!Array.isArray(e.entries)||(!r||e.updatedAt>r.updatedAt)&&(r=e);return r}catch(t){return wT.warn(`Conversation workspace lookup failed`,{workspaceId:e,error:IT(t)}),null}}async listKeys(){try{return(await PT((await this.getDb()).transaction(TT,`readonly`).objectStore(TT).getAllKeys())).map(String)}catch(e){return wT.warn(`Conversation key listing failed`,{error:IT(e)}),[]}}async syncAgentMessages(e,t,n={}){let r=n.now??Date.now(),i=Yw(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=OT(a,t,e,`agent-history`,{createdAt:n.createdAt??r,now:r});return o?await this.save(o):a}catch(t){return wT.warn(`Conversation record write failed`,{key:e.key,error:IT(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?kT(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 wT.warn(`Conversation marker write failed`,{key:e,error:IT(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 PT((await this.getDb()).transaction(ET,`readonly`).objectStore(ET).get(e))??null}catch(t){return wT.warn(`Migration state read failed`,{id:e,error:IT(t)}),null}}async putMigrationState(e){try{let t=(await this.getDb()).transaction(ET,`readwrite`);t.objectStore(ET).put(e),await FT(t)}catch(t){wT.warn(`Migration state write failed`,{id:e.id,error:IT(t)})}}async clearAll(){let e=(await this.getDb()).transaction([TT,ET],`readwrite`);e.objectStore(TT).clear(),e.objectStore(ET).clear(),await FT(e)}getDb(){return this.dbPromise||(this.dbPromise=NT(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 OT(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??[],...AT(e)],updatedAt:i.now,legacyKeys:n.legacyKeys};let a=e.entries;if(t.length===a.length&&jT(a,t))return null;let o=t.length>a.length&&jT(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 kT(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 AT(e){let t=[];for(let n of e.entries)n.kind!==`tool-call`&&n.chat&&t.push(n.chat);return t}function jT(e,t){if(e.length>t.length)return!1;for(let n=0;n<e.length;n++)if(!MT(e[n],t[n]))return!1;return!0}function MT(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 NT(e){return new Promise((t,n)=>{let r=indexedDB.open(e,1);r.onupgradeneeded=()=>{let e=r.result;e.objectStoreNames.contains(TT)||e.createObjectStore(TT,{keyPath:`key`}),e.objectStoreNames.contains(ET)||e.createObjectStore(ET,{keyPath:`id`})},r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error)})}function PT(e){return new Promise((t,n)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>n(e.error)})}function FT(e){return new Promise((t,n)=>{e.oncomplete=()=>t(),e.onerror=()=>n(e.error),e.onabort=()=>n(e.error)})}function IT(e){return e instanceof Error?e.message:String(e)}var LT=e({CONE_MEMORY_PATH:()=>BT,MEMORY_BASE_CHARS:()=>MEMORY_BASE_CHARS,MEMORY_OVERSHOOT_RATIO:()=>zT,MEMORY_PER_LOG_CHARS:()=>MEMORY_PER_LOG_CHARS,SESSIONS_INDEX_PATH:()=>VT,applyConeMemoryBudget:()=>KT,readSessionCount:()=>WT,restructureConeMemory:()=>GT,splitConeMemory:()=>UT});const RT=_(`cone-memory-budget`),zT=1.25,BT=vr.memoryPath,VT=`/sessions/index.json`,HT=/^## Auto-extracted/m;function UT(e){let t=HT.exec(e);if(!t)return{header:e,autoExtracted:``};let n=t.index;return{header:e.slice(0,n),autoExtracted:e.slice(n)}}async function WT(e){try{let t=await e.readFile(VT,{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 GT(e){let{header:t,autoExtracted:n}=UT(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}
|
|
@@ -999,13 +999,10 @@ Rules:
|
|
|
999
999
|
- One fact per bullet. Drop duplicates and superseded facts. Keep the most recent / specific phrasing.
|
|
1000
1000
|
- Preserve concrete identifiers (file paths, URLs, IDs, names) verbatim.
|
|
1001
1001
|
- Be terse. Aim well under the original size.
|
|
1002
|
-
- Do NOT add preamble, commentary, or any heading other than the single consolidated one.`}],timestamp:Date.now()},a=await
|
|
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 KT(e){if(!e.model||!e.apiKey)return{restructured:!1,reason:`no-llm`};let t=e.memoryPath??BT,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 WT(e.vfs),i=gi(r),a=i*zT;if(n.length<=a)return{restructured:!1,reason:`under-threshold`};RT.info(`Cone memory over threshold — restructuring`,{size:n.length,budget:i,threshold:a,sessionCount:r});try{let r=await GT({currentContent:n,budget:i,model:e.model,apiKey:e.apiKey,headers:e.headers,signal:e.signal});return await e.vfs.writeFile(t,r),RT.info(`Cone memory restructured`,{before:n.length,after:r.length}),{restructured:!0}}catch(e){return RT.warn(`Cone memory restructure failed — leaving appended content in place`,{error:e instanceof Error?e.message:String(e)}),{restructured:!1,reason:`error`}}}const qT=`.skill`,JT=`/workspace/skills`,YT=`SKILL.md`,XT=_(`skills-discovery`),ZT=[`native`,`agents`,`claude`,`marketplace`,`plugin`],QT=new Map([[`.agents`,`agents`],[`.claude`,`claude`]]),$T=new Set([`.git`,`.slicc`,`node_modules`]),eE=2e4,tE=[`mkdir`,`mount`,`rename`,`rm`,`unmount`,`writeFile`],nE=new WeakMap,rE=new WeakSet,iE=new WeakMap,aE=new WeakMap,oE=new Set([`.agents`,`.claude`,`.claude-plugin`]),sE=new Set([`mount`,`rename`,`rm`,`unmount`]);async function cE(e,t=JT){let n=await _E(e,t),r=await mE(e),i=await lE(e);return[...ZT.flatMap(e=>(e===`native`?n:e===`plugin`?i:r.filter(t=>t.source===e)).sort((e,t)=>e.path.localeCompare(t.path)))]}async function lE(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 wE(e,t);for(let r of i){if(r.type!==`directory`)continue;let i=`${t}/${r.name}`,a=`${i}/${YT}`;await CE(e,a)&&n.push({source:`plugin`,sourceRoot:t,path:i,skillFilePath:a})}}return n}function uE(e){return e.map(e=>({...e}))}function dE(e){nE.delete(e),aE.delete(e),iE.set(e,(iE.get(e)??0)+1)}function fE(e){let t=e.split(`/`);for(let e of t)if(oE.has(e))return!0;return t[t.length-1]===`SKILL.md`||t.includes(`skills`)}function pE(e,t){if(sE.has(e))return!0;let n=t[0];return typeof n==`string`&&fE(n)}async function mE(e){if(hE(e))return uE(await xE(e));SE(e);let t=e,n=nE.get(t);if(n)return uE(n);let r=iE.get(t)??0,i=aE.get(t);if(i&&i.generation===r)return uE(await i.promise);let a=xE(e).then(e=>((iE.get(t)??0)===r&&nE.set(t,e),e)),o;return o=a.finally(()=>{aE.get(t)?.promise===o&&aE.delete(t)}),aE.set(t,{generation:r,promise:o}),uE(await o)}function hE(e){try{return e[di]===!0}catch{return!1}}function gE(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 _E(e,t){let n=await wE(e,t),r=[];for(let i of n){if(i.type!==`directory`)continue;let n=`${t}/${i.name}`,a=`${n}/${YT}`;await CE(e,a)&&r.push({source:`native`,sourceRoot:t,path:n,skillFilePath:a})}return r}async function vE(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 yE(e,t,n){let r=await vE(e,`${t}/marketplace.json`),i=[];for(let t of r){let r=`${t}/skills`,a=await wE(e,r);for(let t of a){if(t.type!==`directory`)continue;let a=`${r}/${t.name}`,o=`${a}/${YT}`;!await CE(e,o)||n.has(a)||(n.add(a),i.push({source:`marketplace`,sourceRoot:r,path:a,skillFilePath:o}))}}return i}async function bE(e,t,n,r){let i=`${t}/skills`,a=await wE(e,i),o=[];for(let t of a){if(t.type!==`directory`)continue;let a=`${i}/${t.name}`,s=`${a}/${YT}`;!await CE(e,s)||r.has(a)||(r.add(a),o.push({source:n,sourceRoot:i,path:a,skillFilePath:s}))}return o}async function xE(e){let t=[],n=new Set,r=new Set([`/`]),i=[{path:`/`,depth:0}];for(let a=0;a<i.length;a+=1){if(a>=eE){XT.warn(`skills discovery: directory budget exhausted; walk truncated`,{budget:eE});break}let{path:o,depth:s}=i[a],c=await wE(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 bE(e,c,l,n);t.push(...r)}if(a.name===`.claude-plugin`){let r=await yE(e,c,n);t.push(...r);continue}!$T.has(a.name)&&s<24&&!r.has(c)&&(r.add(c),i.push({path:c,depth:s+1}))}}return t}function SE(e){if(hE(e))return;let t=e;if(rE.has(t))return;rE.add(t);let n=e;for(let r of tE){let i=n[r];if(typeof i==`function`)try{n[r]=async(...n)=>{let a=await i.apply(e,n);return pE(r,n)&&dE(t),a}}catch{}}}async function CE(e,t){try{return await e.stat(t),!0}catch{return!1}}async function wE(e,t){try{return[...await e.readDir(t)].sort((e,t)=>e.name.localeCompare(t.name))}catch{return[]}}async function TE(e,t=`/workspace/skills`){let n=await cE(e,t),r=[];for(let t of n){let n=t.path.split(`/`).pop()??t.path,i=``;if(t.skillFilePath)try{i=OE(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}=gE(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 EE(e,t,n=`/workspace/skills`){return(await TE(e,n)).find(e=>e.name===t)||null}async function DE(e,t,n=`/workspace/skills`){let r=await EE(e,t,n);if(!r?.skillFilePath)return null;try{return await e.readTextFile(r.skillFilePath)}catch{return null}}function OE(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 kE=/^[A-Za-z0-9][A-Za-z0-9._-]*$/;function AE(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 jE=class extends Error{};function ME(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 NE(e){if(!kE.test(e))throw Error(`Invalid skill: skill name "${e}" must be a simple directory name.`)}function PE(e){let t=[];for(let[n,r]of Object.entries(e)){let e=ME(n);e&&(AE(e)||t.push({originalPath:n,path:e,bytes:r}))}return t}function FE(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 ${YT}.`);if(t.length>1)throw Error(`Skill archive contains multiple ${YT} files.`);return t[0]}function IE(e){let t=0,n=0;return xi(e,{filter(e){if(t++,t>1e3)throw new jE(`Skill archives may contain at most 1000 entries.`);if(n+=e.originalSize,n>52428800)throw new jE(`Skill archives must expand to 50 MB or smaller after extraction.`);return!0}})}function LE(e){let t=`${Date.now()}-${Math.random().toString(16).slice(2,8)}`;return Ln(JT,`.${e}.tmp-${t}`)}function RE(e,t){return t===`SKILL.md`?e.replace(/\.skill$/i,``):t.slice(0,-9).split(`/`).pop()??``}function zE(e){if(!e.name.toLowerCase().endsWith(`.skill`))throw Error(`Only ${qT} archives can be installed with drag and drop.`);if(e.size>52428800)throw Error(`Skill archives must be 50 MB or smaller.`)}async function BE(e){try{return IE(new Uint8Array(await e.arrayBuffer()))}catch(e){if(e instanceof jE)throw e;let t=e instanceof Error?e.message:String(e);throw Error(`Invalid .skill archive: ${t}`)}}function VE(e){return e.path===`SKILL.md`?``:e.path.slice(0,-9)}function HE(e,t){return t&&(e===t||!e.startsWith(`${t}/`))?null:(t?e.slice(t.length+1):e)||null}async function UE(e,t,n,r){let i=Ln(t,n),{dir:a}=Fn(i);a!==`/`&&await e.mkdir(a,{recursive:!0}),await e.writeFile(i,r)}async function WE(e,t,n,r){let i=0;for(let a of t){let t=HE(a.path,n);t&&(await UE(e,r,t,a.bytes),i++)}return i}async function GE(e,t){await e.exists(t)&&await e.rm(t,{recursive:!0})}async function KE(e,t){let n=Ln(JT,t);if(await e.exists(n))throw Error(`Skill "${t}" already exists at ${n}.`);return n}async function qE(e,t){zE(t);let n=PE(await BE(t)),r=FE(n),i=RE(t.name,r.path);NE(i);let a=await KE(e,i),o=LE(i),s=VE(r);await e.mkdir(o,{recursive:!0});try{let t=await WE(e,n,s,o);return await e.rename(o,a),{skillName:i,destinationPath:a,fileCount:t}}catch(t){throw await GE(e,o),t}}var JE=e({MAX_SKILL_ARCHIVE_SIZE_BYTES:()=>52428800,SKILLS_DIR:()=>`skills`,SKILL_ARCHIVE_EXTENSION:()=>qT,SKILL_FILE:()=>YT,WORKSPACE_SKILLS_PATH:()=>JT,discoverSkillCandidates:()=>cE,discoverSkills:()=>TE,getSkillInfo:()=>EE,installSkillFromDrop:()=>qE,readSkillInstructions:()=>DE,resolveSkillNameCollisions:()=>gE});const YE=_(`skills`),XE=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)}),ZE=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 $E={};function eD(){let e={};for(let[t,n]of Object.entries(XE))e[t]=n;for(let[t,n]of Object.entries(ZE))e[t]=async()=>QE(await n());for(let[t,n]of Object.entries($E)){let r=t.replace(`/packages/dev-tools/vfs-dev-skills/`,`/packages/vfs-root/workspace/skills/`);e[r]=()=>Promise.resolve(n)}return e}function tD(e){let t=new Map;for(let n of e){if(t.has(n.metadata.name)){YE.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 nD(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 rD=new WeakMap;function iD(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 aD(e,t){let n=await oD(e,t),r=await sD(e,t),i=n.filter(e=>e.source===`native`),a=n.filter(e=>e.source!==`native`),o=tD([...i,...r,...a]);return YE.info(`Skills loaded`,{count:o.length,dir:t}),o}async function oD(e,t){let n=await TE(e,t),r=[];for(let t of n)if(t.skillFilePath)try{let{metadata:n,body:i}=nD(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}),YE.debug(`Loaded discovered skill`,{name:a,path:t.skillFilePath,source:t.source})}catch{YE.debug(`Failed to load discovered skill`,{name:t.name,path:t.skillFilePath})}return r}async function sD(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}=nD(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}),YE.debug(`Loaded standalone skill`,{name:s,path:r})}catch{}}}catch{YE.debug(`Standalone skills directory not found`,{dir:t})}return n}function cD(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
|
|
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),
|
|
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),pD.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 gD(e){return Date.UTC(e.y,e.m-1,e.d,e.h,e.i,e.s)}function _D(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 vD(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(`-`)?SD(n.getUTCFullYear(),n.getUTCMonth()+1,n.getUTCDate(),n.getUTCHours(),n.getUTCMinutes(),n.getUTCSeconds(),`Etc/UTC`):SD(n.getFullYear(),n.getMonth()+1,n.getDate(),n.getHours(),n.getMinutes(),n.getSeconds(),t)}function yD(e,t,n){return bD(vD(e,t),n)}function bD(e,t){let n=new Date(gD(e)),r=xD(n,e.tz),i=gD(e)-gD(r),a=new Date(n.getTime()+i),o=xD(a,e.tz);if(_D(o,e)){let t=new Date(a.getTime()-36e5);return _D(xD(t,e.tz),e)?t:a}let s=new Date(a.getTime()+gD(e)-gD(o));if(_D(xD(s,e.tz),e))return s;if(t)throw Error(`Invalid date passed to fromTZ()`);return a.getTime()>s.getTime()?a:s}function xD(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 SD(e,t,n,r,i,a,o){return{y:e,m:t,d:n,h:r,i,s:a,tz:o}}var CD=[1,2,4,8,16],wD=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]|CD[t-1];else throw TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${t}, Type: ${typeof t}`)}},TD=[31,28,31,30,31,30,31,31,30,31,30,31],J=[[`month`,`year`,0],[`day`,`month`,-1],[`hour`,`day`,0],[`minute`,`hour`,0],[`second`,`minute`,0]],Y=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():TD[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&&CD[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=xD(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>TD[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=yD(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(yD(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,J[n][0],e,J[n][2]);if(r>1){let i=n+1;for(;i<J.length;)this[J[i][0]]=-J[i][2],i++;if(r===3){if(this[J[n][1]]++,this[J[n][0]]=-J[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>=J.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,J[n][0],e,J[n][2]);if(i>1){let a=n+1;for(;a<J.length;){let t=J[a][0],n=J[a][2],r=this.getMaxPatternValue(t,e,n);this[t]=r,a++}if(i===3){if(this[J[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():TD[t];this.day>n&&(this.day=n)}}this.apply();let i=J[n][0],a=J[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=J[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,J[2][2]),this.minute=this.getMaxPatternValue(`minute`,e,J[3][2]),this.second=this.getMaxPatternValue(`second`,e,J[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>=J.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)):bD(SD(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<J.length;n++){let r=J[n][0],i=J[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 ED(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 Y(e.startAt,e.timezone)),e.stopAt&&(e.stopAt=new Y(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 DD(e){return Object.prototype.toString.call(e)===`[object Function]`||typeof e==`function`||e instanceof Function}function OD(e){return DD(e)}function kD(e){typeof Deno<`u`&&typeof Deno.unrefTimer<`u`?Deno.unrefTimer(e):e&&typeof e.unref<`u`&&e.unref()}var AD=3e4,jD=[],MD=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(DD(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(DD(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=ED(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 wD(`* * * * *`,void 0,{mode:`auto`})},e&&(e instanceof Date||typeof e==`string`&&e.indexOf(`:`)>0)?this._states.once=new Y(e,this.getTz()):this._states.pattern=new wD(e,this.options.timezone,{mode:this.options.mode,alternativeWeekdays:this.options.alternativeWeekdays,sloppyRanges:this.options.sloppyRanges}),this.name){if(jD.find(e=>e.name===this.name))throw Error(`Cron: Tried to initialize new named job '`+this.name+`', but name already taken.`);jD.push(this)}return i!==void 0&&OD(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 Y(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 Y(e,this.getTz());t.ms=0;let n=new Y(this._states.once,this.getTz());return n.ms=0,t.getTime()===n.getTime()}let t=new Y(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 Y||e instanceof Date?t.getTime()-e.getTime():t.getTime()-new Y(e).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let e=jD.indexOf(this);e>=0&&jD.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>AD&&(t=AD),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(n),t),this._states.currentTimeout&&this.options.unref&&kD(this._states.currentTimeout),this)}async _trigger(e){this._states.blocking=!0,this._states.currentRun=new Y(void 0,this.getTz());try{if(this.options.catch)try{this.fn!==void 0&&await this.fn(this,this.options.context)}catch(e){if(DD(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 Y(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&&DD(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 Y(e,this.getTz()),this.options.startAt&&e&&e.getTime()<this.options.startAt.getTime()&&(e=this.options.startAt);let r=this._states.once||new Y(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 Y(e,this.getTz());this.options.stopAt&&t.getTime()>this.options.stopAt.getTime()&&(t=this.options.stopAt);let n=new Y(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 Y(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 Y(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 ND(e,t){try{return new MD(e.trim(),{domAndDow:!0}).nextRun(t)??null}catch{return null}}var PD=e({FORWARDABLE_TO_LEADER:()=>FD,LickManager:()=>RD,buildActiveLicksError:()=>VD,getLickManager:()=>UD,lickScoopMatches:()=>zD,lickTargetCandidates:()=>BD});const X=_(`lick-manager`),FD=new Set([`navigate`,`discovery`]);function ID(e){if(typeof e!=`object`||!e)return null;let t=e;return typeof t.verb!=`string`||typeof t.target!=`string`?null:oe({verb:t.verb,target:t.target,branch:typeof t.branch==`string`?t.branch:void 0,path:typeof t.path==`string`?t.path:void 0,instruction:typeof t.instruction==`string`?t.instruction:void 0})}function LD(e){return!e.discoveryKind&&!e.discoveryUrl&&!e.discoveryOrigin?null:Ki({origin:e.discoveryOrigin,kind:e.discoveryKind,url:e.discoveryUrl})}var RD=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=>zD(e,t.name,t.folder))?{status:`resolved`}:{status:`unresolved`,candidates:BD(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&&FD.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=ID(e.body),n=this.seenNavigateFingerprints,r=`navigate`;else if(e.type===`discovery`)t=LD(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=ND(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=>zD(n.scoop,e,t)),cronTasks:Array.from(this.crontasks.values()).filter(n=>zD(n.scoop,e,t))}}async getLicksForScoopFromDb(e,t){let[n,r]=await Promise.all([oS(),uS()]);return{webhooks:n.filter(n=>zD(n.scoop,e,t)),cronTasks:r.filter(n=>zD(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=ND(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=ND(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 zD(e,t,n){return e?e===t||e===n||`${e}-scoop`===n:!1}function BD(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 VD(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
|
|
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
|
|
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,7 +1058,7 @@ ${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
|
|
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(`
|
|
1065
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(`
|
|
@@ -1069,9 +1066,9 @@ ${e.map(e=>{let t=e.metadata.allowedTools?` Allowed tools: ${e.metadata.allowed
|
|
|
1069
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(`
|
|
1070
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(`
|
|
1071
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(`
|
|
1072
|
-
`)}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=Pn(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=>Nn(e.ids,t)),r=e.get(Pn(t));return{current:r?Nn(r.ids,t):t,models:n}}function SO(e,t){let n=Xn(e);return!n||!tr(e)&&Pn(t)!==Pn(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:Un(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=Nn(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=Pn(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=_r(e,this.tab??void 0);return this.closed?{...t,status:`closed`}:t}get status(){return this.closed?`closed`:hr(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:hr(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`&&fs(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(`
|
|
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
|
-
`);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=
|
|
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=
|
|
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,25 +1154,25 @@ 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`)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
|
|
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(`
|
|
1161
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+[\`"'(]*${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),
|
|
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
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(`
|
|
1166
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(`
|
|
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 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=
|
|
1168
|
-
`)||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,s
|
|
1169
|
-
`)||e.length===0?e:`${e}\n`}${kA(
|
|
1170
|
-
`)?e:`${e}\n`}Shell error: ${a.error}`:`Shell error: ${a.error}`}let
|
|
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(`
|
|
1171
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(`
|
|
1172
|
-
`));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:
|
|
1173
|
-
`)}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||!
|
|
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(`
|
|
1174
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(`
|
|
1175
|
-
`)}`}}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=
|
|
1176
|
-
`)}}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`?
|
|
1177
|
-
`)}`}}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:[...wr],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=Kn(e.scoop);return Un(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}const aM=_(`scoop-context`);function oM(e){return{currentGate(){let t=e.getTurnGuestGates();if(t.length!==0)return{async approve(n,r){let{approveToolCallForGuests:i}=await import(`./guest-tool-gate-Df5NH2fw.js`);return i(t,n,r,e.callbacks.approveGuestToolCall)}}}}}async function sM(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:de,onDropScoop:r.onDropScoop,onMuteScoops:r.onMuteScoops,onUnmuteScoops:r.onUnmuteScoops,onScheduleScoopWait:r.onScheduleScoopWait,onSetGlobalMemory:r.setGlobalMemory,getGlobalMemory:r.getGlobalMemory,onSudoRequest:r.onSudoRequest,onSudoResolve:r.onSudoResolve,onListSudoRequests:r.onListSudoRequests}),a=BA(e.gatedFs,n.workspace.root),o=e.blindReads??null,s=WA(e.memoryFs,{readSessionCount:async()=>{let{readSessionCount:t}=await Promise.resolve().then(()=>LT);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:Cn(),...o?{annotateResult:()=>o.takeNote()}:{},fireLick:e=>{let n=globalThis.__slicc_lick_handler;return n?(n(e),!0):(aM.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:Cn()},u=oM(e),d=e.processManager?wn(c,{processManager:e.processManager,owner:e.processOwner,getParentPid:e.getTurnPid},l,u):wn(c,void 0,l,u),f=fM(await cM(e.fs,t),u,l);return[...d,...f]}async function cM(e,t){try{if(t.parentJid!==null)return[];let{listServers:n}=await import(`./store-D8XRrwq1.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`||pM(e)});if(a.length===0)return[];let{toAgentTools:o}=await import(`./agent-tools-BL9-Zw2C.js`),s=await hM(),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-D8XRrwq1.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 lM(t,a,r,n);u&&c.push(u)}catch(e){aM.warn(`failed to load MCP tools for agent`,{server:t,error:e instanceof Error?e.message:String(e)})}return c}catch(e){return aM.debug(`MCP agent tools unavailable`,{error:e instanceof Error?e.message:String(e)}),[]}}async function lM(e,t,n,r){try{let{createCodemodeAgentTool:i}=await import(`./codemode-tool-wGfb8DBp.js`);return i({serverName:e,tools:t,connection:n,exposure:r.exposure,toolExposure:r.toolExposure})}catch(t){return aM.debug(`codemode tool unavailable for server`,{server:e,error:t instanceof Error?t.message:String(t)}),null}}async function uM(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 dM(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 fM(e,t,n){return e.map(e=>({...e,async execute(r,i,a,o){let s=await uM(e.name,i,t,a);if(s)return s;let c=await e.execute(r,i,a,o);return await dM(c,n.scrubToolResult),c}}))}function pM(e){return e.toolExposure?Object.values(e.toolExposure).some(e=>e===`direct`||e===`codemode`||e===`codemode-deferred`):!1}let mM=null;async function hM(){if(mM)return mM;let{McpConnectionManager:e}=await import(`./connection-manager-SNYTz_SX.js`);return mM=new e({getAuthHeader:async e=>{try{let{getOAuthAccountInfo:t}=await import(`./account-store-p9YkaR-j.js`).then(e=>e.t),n=t(`mcp:${e}`);return n?`Bearer ${n.token}`:null}catch{return null}}}),mM}const gM=_(`scoop-context`);async function _M(e){let{scoop:t,unit:n,fs:r,callbacks:i}=e,a=e.getTmpDir();gM.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()});e.onShellReady(o);let d=await sM({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 gM.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:te,getCompactionApiKey:ne}=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 re=er(t);return{kind:`ready`,agent:Sk({model:m,tools:d,systemPrompt:h,messages:ee,thinkingLevel:dk(fk()??re.level,m),getApiKey:()=>ik(t)??void 0,transformContext:te,streamFn:g,onContextCompacted:()=>e.sessions.persistNow(),captureStructuredOutput:t.config?.structuredOutputSchema?e.onStructuredOutput:void 0}),compactFn:te,getCompactionApiKey:ne,effortOverride:re.effortOverride,toolCount:d.length}}const vM=_(`scoop-context`);var yM=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 vM.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=hT(t);if(t&&(this.createdAt=t.createdAt),n.length===0)return[];let r=Tn(n);return vM.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=>{vM.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){vM.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 bM(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 xM(e,t,n){!t||!e||(n.lastError&&!n.aborted?e.exit(t.pid,1):e.exit(t.pid,n.aborted?null:0))}function SM(e,t,n,r){t&&e?e.signal(t.pid,n):r?.abort()}const CM=_(`scoop-context`);var wM=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;CM.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)&&(CM.error(`Agent error`,{folder:this.deps.folder,error:r,attempt:t,isRetryable:UO(r)}),!!(t<3&&(await WO(TM(t),n)||this.deps.isDisposed())))}handleNonRetryableError(e){return HO(e)?(CM.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 eo(e)?(CM.error(`Stale-asset import failure; requesting page reload`,{folder:this.deps.folder,error:e}),ro(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=TM(t);return CM.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 TM(e){return 1e3*2**(e-1)}function EM(e,t,n,r){let i=e.state?.isStreaming??!1;if(r.isProcessing||i){CM.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 DM=_(`scoop-context`);var OM=class{scoop;callbacks;fs=null;shell=null;agent=null;status=`initializing`;isProcessing=!1;disposed=!1;didStreamDeltas=!1;promptStreamErrorMessage=null;unsubscribe=null;promptAbortController=null;forceReleaseTimer=null;turnEpoch=0;processManager=null;currentTurnProcess=null;compactFn=null;getCompactionApiKey=null;coneJid;unit;owner;skillsFs=null;sudoManager=null;capabilityBroker=null;structuredOutputValue;activeEffortOverride;structuredOutputCaptured=!1;sessions;runBounds;bashJobs;imageRecovery;overflow;idleCompaction=null;idleCompactionLoading=null;sessionGeneration=0;turnRunner;turnJournal;eventSink={textDelta:e=>{this.didStreamDeltas=!0,this.callbacks.onResponse(e,!0)},toolStart:(e,t,n)=>(this.callbacks.onToolStart?.(e,t,n),this.makeToolCallDurable(e,t,n)),toolUI:(e,t,n)=>this.callbacks.onToolUI?.(e,t,n),toolUIDone:e=>this.callbacks.onToolUIDone?.(e),toolProgress:(e,t,n)=>this.callbacks.onToolProgress?.(e,t,n),toolResult:(e,t,n,r)=>this.callbacks.onToolEnd?.(e,t,n,r),checkpoint:e=>this.checkpoint(e),assistantMessageEnd:e=>this.handleAssistantMessageEnd(e),turnStart:()=>this.runBounds.enforceOnTurnStart(),turnCompleted:()=>this.runBounds.recordCompletedTurn(),responseDone:()=>this.callbacks.onResponseDone(),agentEnd:(e,t)=>this.handleAgentEndEvent(e,t)};constructor(e,t,n,r,i,a,o,s,c,l,u){this.scoop=e,this.unit=_r(e),this.owner={kind:Zn(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 yM({store:r??null,canonical:c?{store:c,identity:Br(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 wM({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 mr(this.callbacks.getScoops(),this.scoop)}getStructuredOutput(){return{captured:this.structuredOutputCaptured,value:this.structuredOutputValue}}get isBusy(){return this.isProcessing||(this.agent?.state?.isStreaming??!1)}async init(){this.setStatus(`initializing`);try{if(!this.fs)throw Error(`Filesystem not provided`);let e=await _M({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},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`),DM.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);DM.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&&xM(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),xM(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(EM(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=bM(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(){SM(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=pn(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 rC(this.scoop)?!0:this.unit.parentId===null&&ke(`compact-on-idle`)}armIdleCompaction(){if(!this.idleCompactionEnabled()){this.idleCompaction?.disarm();return}if(this.idleCompaction){this.idleCompaction.arm();return}this.idleCompactionLoading??=this.loadIdleCompaction(),this.idleCompactionLoading.then(e=>{!this.disposed&&this.status===`ready`&&e.arm()})}async loadIdleCompaction(){let[{IdleCompaction:e},{readIdleCompactionSettings:t}]=await Promise.all([import(`./idle-compaction-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:En,onCompacted:()=>this.sessions.persistNow(),onDiscarded:e=>this.callbacks.onCompactionStateChange?.(`cancelled`,{trigger:`idle`,roundId:e}),folder:this.scoop.folder});return this.idleCompaction=n,n}async maybeSnapshotBeforeCompaction(e,t){if(!(this.unit.parentId!==null&&!ke(`memory-v2`)))return this.snapshotBeforeCompaction(e,t)}async snapshotBeforeCompaction(e,t){if(!this.fs||this.disposed)return;let n=this.sessionGeneration,{scoopSessionsDir:r,snapshotLiveSession:i}=await import(`./live-session-snapshot-2ANcFmFa.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-CBWOt4Na.js`).then(e=>e.r).then(n=>n.scheduleLiveDeltaCuration({vfs:e,cone:t})).catch(e=>{DM.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-2ANcFmFa.js`);e?await t(this.fs,this.scoop.folder):await n(this.fs,this.scoop.folder)}catch(t){DM.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 DM.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 DM.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(),SM(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`&&DM.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 Q=_(`scoop-lifecycle-manager`);var kM=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 qn(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){Q.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 Lr))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`)Q.info(`Re-creating context after error`,{jid:e}),n.disposeContext();else{Q.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=_r(t).policy.filesystem;if(a.kind===`restricted`){let e=Vn(a.mode);if(!e.ok)throw Error(e.error)}let o=a.kind===`full-workspace`?r:new Lr(r,[...a.writablePaths],[...a.visiblePaths],`sudo-delegated`,{includeMounts:Bn(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 OM(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=>{Q.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),Q.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);Q.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),Q.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 Q.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&&rC(o)&&(await this.syncGelatiereModel(),!sr(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(Q.debug(`Context initializing, waiting to send message`,{jid:e}),!await this.waitForTabReady(e)){Q.error(`Context did not become ready in time, dropping prompt`,{jid:e});return}s=this.getContext(e)}if(!s||!c){Q.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`)),Q.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=Yn(t.values())?.jid;if(lr(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=$n(e.folder,n);r!==e.folder&&(Q.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),Q.info(`Scoop registered`,{jid:e.jid,name:e.name});try{await this.createTab(e.jid),e.parentJid!==null&&oO(`spawn`,e.folder)}catch(n){Q.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){Q.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=>{Q.warn(`Failed to rollback scoop registration`,{jid:e.jid,name:e.name,error:t instanceof Error?t.message:String(t)})}),n}Yn(t.values())?.jid!==n&&await this.syncGelatiereModel().catch(t=>{Q.warn(`Failed to follow the new leading cone after registration`,{jid:e.jid,error:t instanceof Error?t.message:String(t)})})}inheritModel(e){if(rC(e)){let t=Yn(this.deps.getScoops().values());Qn(e,t?sr(t):void 0);return}if(Xn(e))return;let t=e.parentJid?this.deps.getScoops().get(e.parentJid):void 0,n=(t?sr(t):void 0)??XD();n&&Qn(e,n)}async unregister(e){let t=this.deps.getScoops(),n=Yn(t.values())?.jid===e;for(let n of fr(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=>{Q.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(zr(r)):void 0,this.deps.getSessionStore()?.delete(e).catch(t=>{Q.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&&Q.info(`Failed-closed pending sudo requests for unregistered scoop`,{jid:e,count:o}),r&&this.deps.getSudoManager()?.forgetScoopPolicies(r.folder),Q.info(`Scoop unregistered`,{jid:e}),r)try{this.deps.callbacks.onScoopUnregistered?.(r)}catch(t){Q.warn(`onScoopUnregistered callback threw`,{jid:e,error:t instanceof Error?t.message:String(t)})}n&&await this.syncGelatiereModel().catch(t=>{Q.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(rC(n))return await this.syncGelatiereModel(),!1;let r=Yn(this.deps.getScoops().values())?.jid===e,i=n.model;Qn(n,t),this.getContext(e)?.updateModel();try{await this.deps.db.saveScoop(n)}catch(t){return Qn(n,i),this.getContext(e)?.updateModel(),Q.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=>{Q.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(rC);if(!t)return!1;let n=Yn(e.values()),r=n?sr(n):void 0,i=sr(t),a=r?i?.provider===r.provider&&i.id===r.id:Xn(t)===void 0;if(!a){let e=t.model?{...t.model}:void 0,i=t.config?{...t.config}:void 0;Qn(t,r);try{await this.deps.db.saveScoop(t)}catch(n){throw t.model=e,t.config=i,n}Q.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();Q.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=>{Q.warn(`Failed to reload skills for scoop`,{jid:t,error:e instanceof Error?e.message:String(e)})}))}await Promise.all(e),Q.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;ar(r,t===void 0?void 0:{level:t,effortOverride:n});try{await this.deps.db.saveScoop(r)}catch(t){Q.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}=_r(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 Jn(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:Sr(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,Un(t)?void 0:e):void 0,onListSudoRequests:o.canResolveApprovals?()=>i.listPendingSudoRequests(Un(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(Q.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`),_r(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){Q.error(`Failed to record fatal error for scoop owner`,{scoop:r.folder,error:e instanceof Error?e.message:String(e)})}}};const $=_(`scoop-message-router`);var AM=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($.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){$.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),$.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);$.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){$.info(`routeToScoop: unregistered target`,{chatJid:e.chatJid});return}if(!this.passesTriggerGate(t,e)){$.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($.debug(`routeToScoop: queued`,{chatJid:e.chatJid,scoopName:t.name,tabStatus:r?.status??`no-tab`,queueLength:n.length}),r?.status===`error`){$.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{$.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);$.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);$.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,$.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){$.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){$.debug(`processScoopQueue: queue not registered`,{jid:e});return}let n=this.deps.getTabs().get(e);if(n?.status!==`ready`&&n?.status!==`processing`){$.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($.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){$.debug(`processScoopQueue: no messages from DB, clearing queue`,{jid:e}),this.messageQueues.set(e,[]),this.clearBusyDeferral(e);return}if(s.length===0){$.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){$.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);$.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=>{$.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=>{$.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),$.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=>{$.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=>{$.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(),$.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 jM=_(`orchestrator`),MM={decision:`deny`};var NM=class{scoops=new Map;workUnits=new mx(this);container;callbacks;config;scheduler=null;sharedFs=null;memoryStore=new hD({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=>Wx(e),saveMessage:e=>Hx(e)});lickRegistry=new KD({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 AM({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 kM({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)=>VD(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 ZD(async n=>(await this.ensureRootStructure(),n(),this.sudoManager=new dC({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 YD(e,t),await this.modelPolicyFile.init(),n(),Rx()),n,{stagePrefix:`orchestrator-init`})}setOnConversationsReady(e){this.onConversationsReady=e}async openSharedFilesystem(e,t){let n=await ZD(e=>Ir.create({dbName:`slicc-fs`,onRepairProgress:e}),e);this.sharedFs=n,this.sessionStore=new cy,this.conversationStore=new DT;let{TurnJournal:r}=await import(`./turn-journal-B-yFOK6T.js`);this.turnJournal=new r,this.interruptedTurns=await this.turnJournal.readAll();let i=new Fr;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=>ir(e))?.jid;for(let e of Object.values(i)){await this.backfillParent(e,a),lr(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 $D({onTaskRun:async(e,t)=>{jM.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(),jM.info(`Orchestrator initialized`,{scoopCount:this.scoops.size}),e?.(`conversations-ready`),await this.onConversationsReady?.(),await this.restoreScoopContexts(e),Kr(e=>this.getSessionCostsForCommand(e)),qr(async()=>{let{refreshBudgetWindow:e}=await Promise.resolve().then(()=>uy);return e()}),this.unregisterExportService=s(this.buildWorkerExportService()),this.messageRouter.startMessageLoop()}whenBootRestoresSettled(){return this.bootRestoreTail}async restoreScoopContexts(e){let t=[],n=[];for(let e of this.scoops.values())e.parentJid===null?t.push(e):n.push(e);await rO(t,4,t=>this.restoreScoopContext(t,e));let r=rO(n,4,t=>this.restoreScoopContext(t,e)).catch(e=>{jM.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);jM.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 uT({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){jM.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(Br(r),t).catch(t=>{jM.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=ir(e)?null:t??null;try{await Lx(e)}catch(t){jM.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=>!Xn(e)&&!rC(e));if(e.length>0){let t=XD(),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?sr(n):void 0)??t;if(r){Qn(e,r);try{await Lx(e)}catch(t){jM.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){jM.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=`${vr.root}/`,r=yr(xr(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-ALHdAvDT.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:Sr,approveAsUser:async e=>{let t=this.sudoManager;return t?t.approve(e):(jM.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 Lx(e),e.parentJid===null&&await this.lifecycle.syncGelatiereModel().catch(t=>{jM.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 ur(this.scoops.values(),t)??this.defaultRoot()}ownerRootOrDefault(e){let t=e===void 0?void 0:this.scoops.get(e);return qn(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 Ir.create({dbName:`slicc-fs`,wipe:!0}),this.fsWatcher&&this.sharedFs.setWatcher(this.fsWatcher),await this.ensureRootStructure(),await this.memoryStore.ensureGlobalMemory(),await lD(this.sharedFs).catch(e=>{jM.warn(`Failed to re-seed default skills`,{error:e instanceof Error?e.message:String(e)})}),this.sudoManager?.dispose(),this.sudoManager=new dC({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 YD(this.sharedFs,this.fsWatcher),await this.modelPolicyFile.init(),this.lickManager?.setDiscoveryIgnore?.(e=>this.llmsTxtIgnorePolicy?.ignores(e)??!1),this.costTracker.reset(),jM.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-DUcRwxv3.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 Wn(this.scoops.values(),e))this.completionService.cancelScheduledWaits(t),this.completionService.suppressCompletionUntilNextPrompt(t),this.lifecycle.getContext(t)?.stop(),this.clearQueuedMessages(t).catch(e=>{jM.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-CNbJWFVZ.js`);return await e(this.sharedFs,n,t)}catch(t){return jM.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(()=>VC),r=await n(this.sharedFs);return[...t,...r.map(Jr)]}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&&jM.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,jM.info(`Orchestrator shutdown`)}buildWorkerExportService(){let e=this.conversationStore?new CT(this.conversationStore):null,t=this.sharedFs;return new ww({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:Kw(),snapshotStore:{read:e=>Rw(t,e),write:(e,n,r)=>Lw(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.227.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[f]=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)+`
|
|
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)+`
|
|
1179
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
1178
|
`}function sN(e){return e.argv.join(`\0`)+`\0`}function cN(e){return e.cwd+`
|
|
@@ -1184,7 +1181,7 @@ Created: ${new Date().toISOString()}
|
|
|
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 pN=Math.max(
|
|
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 TN(e,t,n,r){try{let{startLickWsBridge:i}=await import(`./lick-ws-bridge-C_yTWgQK.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 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})},{...DN(t),isOwnTab:RS(()=>r??null)});return e.start(),()=>e.stop()}catch(e){return n.warn(`Failed to start NavigationWatcher`,e),null}}function DN(e){let t=ye();return{onDiscovery:t=>{e.emitEvent({type:`discovery`,targetScoop:void 0,timestamp:new Date().toISOString(),discoveryOrigin:t.origin,discoveryKind:t.kind,discoveryUrl:t.url,discoverySource:`live-navigation`,body:{origin:t.origin,kind:t.kind,url:t.url,targetId:t.targetId}})},probeFetch:async(e,n)=>{let r=t(e,{method:n?.method??`GET`}),i=n?.signal,a=i?await Promise.race([r,new Promise((e,t)=>{if(i.aborted){t(Error(`aborted`));return}i.addEventListener(`abort`,()=>t(Error(`aborted`)),{once:!0})})]):await r,o=a.headers;return{ok:a.status>=200&&a.status<300,status:a.status,headers:{get(e){return o?o[e.toLowerCase()]??o[e]??null:null}}}},isDiscoveryEnabled:()=>VS()}}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-BxWnVMjS.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(()=>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 MN(){Wr(async()=>{let{getLastSeenVersion:e}=await import(`./upgrade-detection-BofecB7v.js`);return e()})}function NN(e,t){(async()=>{try{let{detectUpgrade:t,recordVersionSeen:n}=await import(`./upgrade-detection-BofecB7v.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-BEnRKsg5.js`).then(async r=>{let i=r.createGelatiereSeam(e,t);if(r.publishGelatiereSeam(i),!n||!ke(`memory-v2`)){await r.haltGelatiere(i);return}let{loadGelatiereConfig:a}=await import(`./gelatiere-store-DNMjj5xM.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-CRQovNy0.js`).then(t=>t.publishMemorySeam(t.createMemorySeam(e))).catch(e=>t.warn(`memory seam failed to publish`,e));let n=!1,r=null;return ke(`memory-v2`)&&import(`./memory-health-CWV9igFz.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}xb(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 te=FN(p.adapter)?await TN(m,o,e.localLickWsUrl??null,f):null,ne=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 re=null,_=null;f&&({bshWatchdogStop:re,scriptCatalogDispose:_}=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:re,memoryHealthStop:h,scriptCatalogDispose:_,lickWsBridgeStop:te,navigationWatcherStop:ne,syncFsResponderDispose:ie,sharedFs:f,wsRegistry:g,wsBridge:ee,processManager:c,lickManager:m,browser:n,log:o}))}}}async function 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,wi(null)),t.__slicc_lickManager===e.lickManager&&delete t.__slicc_lickManager,e.browser&&t.__slicc_browser===e.browser&&delete t.__slicc_browser,e.wsRegistry&&t.__slicc_wsSubscribers===e.wsRegistry&&delete t.__slicc_wsSubscribers,delete t[f]}const 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=Li(ae(e.stdin))}catch{this.emitExit(e,127),this.log.warn(`[terminal-session-host] exec with invalid stdin (expected base64)`,e.sid);return}let a=await t.shell.executeCommand(e.command,n.signal,r?.pid,i);await this.emitExecSuccess(e,a,n,r)}catch(t){this.emitExecError(e,t,n,r)}finally{t.currentExec===n&&(t.currentExec=null,t.currentProcess=null,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 ee{sid;transport;constructor(e,t,n){super(n),this.sid=e,this.transport=t}async renderMediaPreview(e){for(let t of e){let e=``,n=t.bytes,r=8192;for(let t=0;t<n.length;t+=r)e+=String.fromCharCode(...n.subarray(t,t+r));let i={type:`terminal-media-preview`,sid:this.sid,path:t.path,mediaType:t.mimeType,data:btoa(e)};this.transport.send(i)}}};const 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??Ur},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`)){m(_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(`
|
|
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(`
|
|
1189
1186
|
`).filter(e=>!bP(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 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=Le();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=ao(e.pageBuildId,`6.227.0-muo2volq`);return()=>{t&&vP(`mixed-build-graph`,`page ${e.pageBuildId} worker 6.227.0-muo2volq`)}}function eF(e){UP(),Ie(e.localApiBaseUrl??null),Fe(e.bridgeToken??null),Ti(e.syncFsBridgeEnabled??!1),t(e.pageLoadedAt??null),Be(e.extensionDelegateId??null),GP(e.localStorageSeed??{}),e.flagFloat&&Ka(e.flagFloat)}async function tF(e){no(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 Ne(),n(`providers-registered`);let r=co(e.kernelPort),i=new ES(r),a=ES.createCallbacks(i),o=new lo(e.cdpPort);await o.connect(),n(`cdp-connected`);let s=new Pa(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 zi)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(Ua(Oe));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){io(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-yt0EoyNf.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{fb as _,UC as a,ny as b,$S as c,eC as d,rC as f,Zy as g,dx as h,HC as i,tC as l,nS as m,Mk as n,GC as o,tS as p,JE as r,WC as s,RA as t,nC as u,ky as v,gy as y};
|
|
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};
|