sliccy 6.7.2 → 6.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. package/dist/node-server/_shared/tray-sync-protocol.d.ts +4 -0
  2. package/dist/node-server/_shared/tray-sync-protocol.d.ts.map +1 -1
  3. package/dist/node-server/_shared/tray-sync-protocol.js.map +1 -1
  4. package/dist/ui/assets/AdobeClean-Regular-CVsq5gF7.otf +0 -0
  5. package/dist/ui/assets/account-store-ByWKm2sG.js +43 -0
  6. package/dist/ui/assets/account-store-aQmBMRJf.js +101 -0
  7. package/dist/ui/assets/adobe-BB3wN27o.js +2 -0
  8. package/dist/ui/assets/adobe-BiAC-73A.js +1 -0
  9. package/dist/ui/assets/{anthropic-messages-C8dDJE2X.js → anthropic-messages-BbI5c8JA.js} +2 -2
  10. package/dist/ui/assets/anthropic-messages-BqlIV27l.js +39 -0
  11. package/dist/ui/assets/{apps-BW3Oz1Y-.js → apps-9CkLGEWH.js} +1 -1
  12. package/dist/ui/assets/azure-openai-DJSSuU88.js +1 -0
  13. package/dist/ui/assets/azure-openai-Dxn30Pk7.js +1 -0
  14. package/dist/ui/assets/azure-openai-responses-C1EEdmtw.js +1 -0
  15. package/dist/ui/assets/azure-openai-responses-DOqakjfa.js +1 -0
  16. package/dist/ui/assets/bedrock-camp-CHi38ceE.js +1 -0
  17. package/dist/ui/assets/bedrock-camp-CVX95quY.js +1 -0
  18. package/dist/ui/assets/cerebras-2GuPmwT9.js +1 -0
  19. package/dist/ui/assets/cerebras-BPLmNddn.js +1 -0
  20. package/dist/ui/assets/compat-BhgG-Qr-.js +2 -0
  21. package/dist/ui/assets/{connect-surface-D4yI8jZH.js → connect-surface-B1idun57.js} +1 -1
  22. package/dist/ui/assets/{context-compaction-C3e7rcEG.js → context-compaction-gzCxn8vG.js} +1 -1
  23. package/dist/ui/assets/{event-stream-qbAZIAKV.js → diagnostics-DN_idNHx.js} +1 -1
  24. package/dist/ui/assets/{dip-BubHLPf_.js → dip-ByAv1QK8.js} +1 -1
  25. package/dist/ui/assets/error-body-CqsCxuQ4.js +1 -0
  26. package/dist/ui/assets/fs-CAyJY9DY.js +2 -0
  27. package/dist/ui/assets/{fs-CVsqBODM.js → fs-DxMcx1Zl.js} +1 -1
  28. package/dist/ui/assets/github-C_iNDp3b.js +2 -0
  29. package/dist/ui/assets/{github-nhvWTo1J.js → github-TTLkYWv0.js} +1 -1
  30. package/dist/ui/assets/github-copilot-BSaGkwkB.js +2 -0
  31. package/dist/ui/assets/github-copilot-DC_IMNqQ.js +1 -0
  32. package/dist/ui/assets/google-generative-ai-BjzUffX7.js +1 -0
  33. package/dist/ui/assets/google-generative-ai-CUyKfom8.js +1 -0
  34. package/dist/ui/assets/{google-shared-BAKd3aSn.js → google-shared-Bvf-cbUv.js} +1 -1
  35. package/dist/ui/assets/{google-shared-CCLlnqMF.js → google-shared-Dh_qL7z7.js} +1 -1
  36. package/dist/ui/assets/google-vertex-Bf_2YfBL.js +1 -0
  37. package/dist/ui/assets/google-vertex-Dc8m8x5E.js +1 -0
  38. package/dist/ui/assets/{kernel-worker-B67oBRUh.js → kernel-worker-CooTXxii.js} +645 -627
  39. package/dist/ui/assets/{legacy-api-aliases-BWm3gxUe.js → legacy-api-aliases-DrEKVikN.js} +1 -1
  40. package/dist/ui/assets/{legacy-api-aliases-YuuBU-he.js → legacy-api-aliases-MR6kosFL.js} +1 -1
  41. package/dist/ui/assets/{local-llm-7ddT86qb.js → local-llm-MqtVJYNK.js} +1 -1
  42. package/dist/ui/assets/{local-llm-9V2nT_qC.js → local-llm-XYSHuL1i.js} +1 -1
  43. package/dist/ui/assets/{main-BATAIZJP.js → main-D1gV0DbW.js} +3 -3
  44. package/dist/ui/assets/{mistral-conversations-CIMZoDT4.js → mistral-conversations-CkIx9cg4.js} +3 -3
  45. package/dist/ui/assets/{mistral-conversations-CKK59QJS.js → mistral-conversations-Ct4-30zw.js} +3 -3
  46. package/dist/ui/assets/models-DmWu8BeM.js +1 -0
  47. package/dist/ui/assets/{mount-CQwcMV_F.js → mount-Bl0_WNUE.js} +1 -1
  48. package/dist/ui/assets/{mount-DLFFkSOw.js → mount-CKdIc9MA.js} +2 -2
  49. package/dist/ui/assets/{mount-recovery-D4LSB-KQ.js → mount-recovery-BYC4_ujb.js} +1 -1
  50. package/dist/ui/assets/{new-session-FIXn2nko.js → new-session-ycHOmVXQ.js} +2 -2
  51. package/dist/ui/assets/{oauth-bootstrap-CysuVxDa.js → oauth-bootstrap-4Hn435MM.js} +2 -2
  52. package/dist/ui/assets/openai-codex-B0uMeTyi.js +1 -0
  53. package/dist/ui/assets/openai-codex-DmENmuEr.js +1 -0
  54. package/dist/ui/assets/openai-codex-responses-BdgEOEuS.js +7 -0
  55. package/dist/ui/assets/openai-codex-responses-CLGX-aTS.js +7 -0
  56. package/dist/ui/assets/openai-completions-BnbrI3UF.js +5 -0
  57. package/dist/ui/assets/openai-completions-DgBXkZQB.js +5 -0
  58. package/dist/ui/assets/openai-responses-BCmB_39F.js +1 -0
  59. package/dist/ui/assets/openai-responses-ltU_A4Wo.js +1 -0
  60. package/dist/ui/assets/{openai-responses-shared-IJFiSqdz.js → openai-responses-shared-BhTvPbKN.js} +4 -4
  61. package/dist/ui/assets/{openai-responses-shared-CiIL52L-.js → openai-responses-shared-ULQmXcCD.js} +4 -4
  62. package/dist/ui/assets/{openrouter-D80siy_U.js → openrouter-CD_7_dhq.js} +1 -1
  63. package/dist/ui/assets/{openrouter-B7xDa-L5.js → openrouter-DrcoJ_Cw.js} +1 -1
  64. package/dist/ui/assets/openrouter-images-1178rM_U.js +1 -0
  65. package/dist/ui/assets/openrouter-images-HP0r87fI.js +1 -0
  66. package/dist/ui/assets/{openrouter-models-Bu1Cy5AD.js → openrouter-models-DmontTTG.js} +1 -1
  67. package/dist/ui/assets/{openrouter-models-CfnkMx5-.js → openrouter-models-gCCUSdgw.js} +1 -1
  68. package/dist/ui/assets/{openrouter-oauth-Bf47JNKK.js → openrouter-oauth--wX-eV3t.js} +1 -1
  69. package/dist/ui/assets/{openrouter-oauth-BFWWLqj4.js → openrouter-oauth-CClQ6-WB.js} +1 -1
  70. package/dist/ui/assets/openrouter.models-Byp0hyfF.js +1 -0
  71. package/dist/ui/assets/openrouter.models-C8HitxAG.js +1 -0
  72. package/dist/ui/assets/{panel-rpc-handlers-DAgL3NAS.js → panel-rpc-handlers-Bz6sMFJ1.js} +2 -2
  73. package/dist/ui/assets/pi-messages-BcCsdrH5.js +7 -0
  74. package/dist/ui/assets/pi-messages-CrwvmK0e.js +7 -0
  75. package/dist/ui/assets/{provider-L11hxHeS.js → provider-C9Fb-MUs.js} +2 -2
  76. package/dist/ui/assets/{provider-settings-a1nHhD_8.js → provider-settings-BO1eLfyY.js} +1 -1
  77. package/dist/ui/assets/{provider-settings-B4rEHMW6.js → provider-settings-DInYjmnv.js} +1 -1
  78. package/dist/ui/assets/provider-store-access-CUjR4MRh.js +2 -0
  79. package/dist/ui/assets/provider-store-access-CelOKML2.js +1 -0
  80. package/dist/ui/assets/{provider-BMlQ6-V6.js → provider-tql-Msbl.js} +1 -1
  81. package/dist/ui/assets/providers-C4kQzHNr.js +2 -0
  82. package/dist/ui/assets/{providers-CZB0cXRu.js → providers-laxAGOqc.js} +1 -1
  83. package/dist/ui/assets/{quick-llm-DKk9pK8_.js → quick-llm-CIJ1y55H.js} +1 -1
  84. package/dist/ui/assets/{redirect-uri-BqBUQdM5.js → redirect-uri-CUNxiJO4.js} +1 -1
  85. package/dist/ui/assets/{session-freezer-DqAxoGJ_.js → session-freezer-B3uZDavc.js} +3 -3
  86. package/dist/ui/assets/{setup-feature-flags-remote-iZXxY35M.js → setup-feature-flags-remote-Nr8IHAvv.js} +1 -1
  87. package/dist/ui/assets/{setup-standalone-prelude-y8NGd_3h.js → setup-standalone-prelude-CROHGPM2.js} +1 -1
  88. package/dist/ui/assets/setup-sudo-BgmNK5vl.js +2 -0
  89. package/dist/ui/assets/{skills-BcxxniVN.js → skills-B-SIcbkv.js} +1 -1
  90. package/dist/ui/assets/sprinkle-manager-DbCWJGba.js +1 -0
  91. package/dist/ui/assets/{sprinkle-renderer-oLgy--3J.js → sprinkle-renderer-DZ_7mdV4.js} +3 -3
  92. package/dist/ui/assets/{src-BTviaay1.js → src-D7DXox0A.js} +191 -233
  93. package/dist/ui/assets/{store-DKBwY1LO.js → store-DWC2EmoP.js} +1 -1
  94. package/dist/ui/assets/{sudo-B4W1O9pP.js → sudo-BMZxV-y2.js} +1 -1
  95. package/dist/ui/assets/{theme-C8b_iQ_9.js → theme-BOdTMzQ7.js} +1 -1
  96. package/dist/ui/assets/theme-engine-BMhxbTGC.js +3 -0
  97. package/dist/ui/assets/transform-messages-D27pVLZ-.js +1 -0
  98. package/dist/ui/assets/transform-messages-DgR3h-Ck.js +1 -0
  99. package/dist/ui/assets/{upgrade-detection-CNBV5I5-.js → upgrade-detection-Bn3wvOdU.js} +1 -1
  100. package/dist/ui/assets/{wc-attach-7hrcOh0v.js → wc-attach-Ct0uTuNZ.js} +2 -2
  101. package/dist/ui/assets/{wc-extension-DnoMXsSf.js → wc-extension-DCts9IAT.js} +2 -2
  102. package/dist/ui/assets/{wc-follower-CiEV5ftc.js → wc-follower-DgewcUeA.js} +3 -3
  103. package/dist/ui/assets/wc-live-N7sX79wf.js +8 -0
  104. package/dist/ui/assets/{wc-nav-4l0__ItF.js → wc-nav-z_0WrxAQ.js} +2 -2
  105. package/dist/ui/assets/{wc-onboarding-BlB3EEKF.js → wc-onboarding-y1kxdpZt.js} +2 -2
  106. package/dist/ui/assets/{wc-placeholder-Dad2TVLF.js → wc-placeholder-Crb6qu68.js} +2 -2
  107. package/dist/ui/assets/{wc-settings-Vbh_8eo_.js → wc-settings-BQ2NYd0O.js} +3 -3
  108. package/dist/ui/assets/{wc-shell-D-sgt0Jv.js → wc-shell-D0YjqeYz.js} +4 -4
  109. package/dist/ui/assets/{wc-sprinkles-BT3nD0Fl.js → wc-sprinkles-DPCMqs0D.js} +2 -2
  110. package/dist/ui/assets/wc-tray-Cju9CB6j.js +2 -0
  111. package/dist/ui/assets/wc-tray-scoops-DIT9CbNq.js +5 -0
  112. package/dist/ui/assets/xai-grok-DN4m8ZtL.js +1 -0
  113. package/dist/ui/assets/xai-grok-DcJSFGCY.js +1 -0
  114. package/dist/ui/index.html +13 -13
  115. package/dist/ui/packages/webapp/index.html +13 -13
  116. package/package.json +1 -1
  117. package/dist/ui/assets/account-store-CJEiowvN.js +0 -101
  118. package/dist/ui/assets/account-store-CysBUUQJ.js +0 -43
  119. package/dist/ui/assets/adobe-CNFykD03.js +0 -2
  120. package/dist/ui/assets/adobe-DVg3o99r.js +0 -1
  121. package/dist/ui/assets/anthropic-messages-BFic5zKY.js +0 -39
  122. package/dist/ui/assets/azure-openai-Cw8XjNk4.js +0 -1
  123. package/dist/ui/assets/azure-openai-jOz-FRxG.js +0 -1
  124. package/dist/ui/assets/azure-openai-responses-B_twhN44.js +0 -1
  125. package/dist/ui/assets/azure-openai-responses-CzG7X9qb.js +0 -1
  126. package/dist/ui/assets/bedrock-camp-CJY4i7di.js +0 -1
  127. package/dist/ui/assets/bedrock-camp-DS0ilb3O.js +0 -1
  128. package/dist/ui/assets/cerebras-7j_cJCUH.js +0 -1
  129. package/dist/ui/assets/cerebras-CARI-C52.js +0 -1
  130. package/dist/ui/assets/compat-CkpNnFQS.js +0 -2
  131. package/dist/ui/assets/diagnostics-BsVbaNHR.js +0 -1
  132. package/dist/ui/assets/error-body-C0EnfbdK.js +0 -1
  133. package/dist/ui/assets/fs-DL8cK1hj.js +0 -2
  134. package/dist/ui/assets/github--kukodlK.js +0 -2
  135. package/dist/ui/assets/github-copilot-DlmAfv3i.js +0 -1
  136. package/dist/ui/assets/github-copilot-KQLyygnx.js +0 -2
  137. package/dist/ui/assets/google-generative-ai-4YtIu_sJ.js +0 -1
  138. package/dist/ui/assets/google-generative-ai-DzD1vsXe.js +0 -1
  139. package/dist/ui/assets/google-vertex-8lUayXF0.js +0 -1
  140. package/dist/ui/assets/google-vertex-oQOD3HKr.js +0 -1
  141. package/dist/ui/assets/models-Bnh9VDA1.js +0 -1
  142. package/dist/ui/assets/openai-codex-DSWCeXF8.js +0 -1
  143. package/dist/ui/assets/openai-codex-L0P-RVew.js +0 -1
  144. package/dist/ui/assets/openai-codex-responses-DRR6raXn.js +0 -7
  145. package/dist/ui/assets/openai-codex-responses-DU5CHdDQ.js +0 -7
  146. package/dist/ui/assets/openai-completions-B9S6450Q.js +0 -5
  147. package/dist/ui/assets/openai-completions-DhKgaAgM.js +0 -5
  148. package/dist/ui/assets/openai-responses-C4_jiYtu.js +0 -1
  149. package/dist/ui/assets/openai-responses-DmKhLxzV.js +0 -1
  150. package/dist/ui/assets/openrouter-images-6_MxZkJZ.js +0 -1
  151. package/dist/ui/assets/openrouter-images-BixC5B6a.js +0 -1
  152. package/dist/ui/assets/openrouter.models-DS1_VkCm.js +0 -1
  153. package/dist/ui/assets/openrouter.models-HnnH-abS.js +0 -1
  154. package/dist/ui/assets/pi-messages-DRdk3sMN.js +0 -7
  155. package/dist/ui/assets/pi-messages-fKU_b1SK.js +0 -7
  156. package/dist/ui/assets/provider-store-access-C0EyiLUq.js +0 -1
  157. package/dist/ui/assets/provider-store-access-CAWGqbUW.js +0 -2
  158. package/dist/ui/assets/providers-CLGnrQ6p.js +0 -2
  159. package/dist/ui/assets/setup-sudo-vqSc8pzk.js +0 -2
  160. package/dist/ui/assets/sprinkle-manager-HaNmX2ye.js +0 -1
  161. package/dist/ui/assets/theme-engine-jfuTMXZM.js +0 -3
  162. package/dist/ui/assets/transform-messages-Bp94o3FD.js +0 -1
  163. package/dist/ui/assets/transform-messages-wECJwtH0.js +0 -1
  164. package/dist/ui/assets/wc-floatbar-online-B6FIfDc-.js +0 -5
  165. package/dist/ui/assets/wc-live-B1Iu67p2.js +0 -8
  166. package/dist/ui/assets/wc-tray-BaxW8xKP.js +0 -2
  167. package/dist/ui/assets/xai-grok-BjDy3qLc.js +0 -1
  168. package/dist/ui/assets/xai-grok-C-SdAKKH.js +0 -1
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-aKtaBQYM.js";import{t}from"./logger-LESFN7Hj.js";import{t as n}from"./types-idfTVsM8.js";import{n as r}from"./path-utils-DU6QhF_k.js";import{i}from"./fs-CVsqBODM.js";const a=t(`sudo:sudoers`),o=`/etc/sudoers`,s=`/etc/sudoers.d`,c=/^\/scoops\/[^/]+\/etc\/sudoers$/;function l(e){return`/scoops/${e}/etc/sudoers`}function u(e,t){return e===`no-match`?t===`require-approval`?`require-approval`:`no-match`:e}function d(){return{cmnd:[],read:[],write:[]}}function f(e){return`.+^$()[]|\\{}`.includes(e)?`\\${e}`:e}function p(e){let t=``,n=0;for(;n<e.length;){let r=e[n];r===`*`?(t+=`.*`,n+=e[n+1]===`*`?2:1):r===`?`?(t+=`.`,n+=1):(t+=f(r),n+=1)}return RegExp(`^${t}$`,`s`)}function m(e){let t=``,n=0;for(;n<e.length;){let r=e[n];r===`*`&&e[n+1]===`*`?(t.endsWith(`/`)?t=`${t.slice(0,-1)}(?:/.*)?`:t+=`.*`,n+=2,e[n]===`/`&&(n+=1)):r===`*`?(t+=`[^/]*`,n+=1):r===`?`?(t+=`[^/]`,n+=1):(t+=f(r),n+=1)}return RegExp(`^${t}$`)}function h(e){return e.split(/\r?\n/,1)[0]?.trim()??``}const g=new Set([`Cmnd`,`Read`,`Write`]);function _(e){let t=e.trim(),n=!1,r=t.search(/\s/);(r===-1?t:t.slice(0,r))===`NOPASSWD`&&(n=!0,t=r===-1?``:t.slice(r).trimStart());let i=t.search(/\s/),a=i===-1?t:t.slice(0,i);if(!g.has(a))return null;let o=i===-1?``:t.slice(i).trim();return o?{directive:a,nopasswd:n,pattern:o}:null}function v(e){let t=d();try{if(typeof e!=`string`)return t;for(let n of e.split(`
1
+ import{n as e}from"./rolldown-runtime-aKtaBQYM.js";import{t}from"./logger-LESFN7Hj.js";import{t as n}from"./types-idfTVsM8.js";import{n as r}from"./path-utils-DU6QhF_k.js";import{i}from"./fs-DxMcx1Zl.js";const a=t(`sudo:sudoers`),o=`/etc/sudoers`,s=`/etc/sudoers.d`,c=/^\/scoops\/[^/]+\/etc\/sudoers$/;function l(e){return`/scoops/${e}/etc/sudoers`}function u(e,t){return e===`no-match`?t===`require-approval`?`require-approval`:`no-match`:e}function d(){return{cmnd:[],read:[],write:[]}}function f(e){return`.+^$()[]|\\{}`.includes(e)?`\\${e}`:e}function p(e){let t=``,n=0;for(;n<e.length;){let r=e[n];r===`*`?(t+=`.*`,n+=e[n+1]===`*`?2:1):r===`?`?(t+=`.`,n+=1):(t+=f(r),n+=1)}return RegExp(`^${t}$`,`s`)}function m(e){let t=``,n=0;for(;n<e.length;){let r=e[n];r===`*`&&e[n+1]===`*`?(t.endsWith(`/`)?t=`${t.slice(0,-1)}(?:/.*)?`:t+=`.*`,n+=2,e[n]===`/`&&(n+=1)):r===`*`?(t+=`[^/]*`,n+=1):r===`?`?(t+=`[^/]`,n+=1):(t+=f(r),n+=1)}return RegExp(`^${t}$`)}function h(e){return e.split(/\r?\n/,1)[0]?.trim()??``}const g=new Set([`Cmnd`,`Read`,`Write`]);function _(e){let t=e.trim(),n=!1,r=t.search(/\s/);(r===-1?t:t.slice(0,r))===`NOPASSWD`&&(n=!0,t=r===-1?``:t.slice(r).trimStart());let i=t.search(/\s/),a=i===-1?t:t.slice(0,i);if(!g.has(a))return null;let o=i===-1?``:t.slice(i).trim();return o?{directive:a,nopasswd:n,pattern:o}:null}function v(e){let t=d();try{if(typeof e!=`string`)return t;for(let n of e.split(`
2
2
  `)){let e=n.trim();if(!e||e.startsWith(`#`))continue;let r=_(e);if(!r){a.warn(`Skipping unrecognized sudoers line`,{line:e});continue}let i=r.directive===`Cmnd`?p:m,o={pattern:r.pattern,nopasswd:r.nopasswd,regex:i(r.pattern)};r.directive===`Cmnd`?t.cmnd.push(o):r.directive===`Read`?t.read.push(o):t.write.push(o)}return t}catch(e){return a.error(`Failed to parse sudoers; falling back to self-protection only`,{err:e}),d()}}function y(...e){let t=d();for(let n of e)n&&(t.cmnd.push(...n.cmnd),t.read.push(...n.read),t.write.push(...n.write));return t}function b(e,t){let n=!1;for(let r of e)if(r.regex.test(t)){if(r.nopasswd)return`nopasswd-allow`;n=!0}return n?`require-approval`:`no-match`}function x(e,t){return b(e.cmnd,t.trim())}function S(e){return e===`/etc/sudoers`||e===`/etc/sudoers.d`||e.startsWith(`/etc/sudoers.d/`)||c.test(e)}function C(e,t,n,a){let o=r(n);if(t===`write`){if(S(o))return`require-approval`;if(a?.isContentWrite&&i(o))return`nopasswd-allow`}return b(t===`read`?e.read:e.write,o)}const w=t(`sudo:fs`),T=Symbol.for(`slicc.fs.monkeypatchUnsafe`),E=`${s}/granted`,D=[`readFile`,`readTextFile`,`readDir`,`exists`,`stat`],O=[`writeFile`],k=[`mkdir`,`rm`];async function ee(e,t,r,i){let a=h(i);if(!a)return;let o=t(),c={pattern:a,nopasswd:!0,regex:m(a)};(r===`read`?o.read:o.write).push(c);let l=`NOPASSWD ${r===`read`?`Read`:`Write`} ${a}\n`;try{await e.mkdir(s,{recursive:!0});let t=``;try{t=await e.readFile(E,{encoding:`utf-8`})}catch(e){if(!(e instanceof n&&e.code===`ENOENT`))throw e}let r=t.length>0&&!t.endsWith(`
3
3
  `)?`
4
4
  `:``;await e.writeFile(E,t+r+l)}catch(e){w.warn(`Failed to persist NOPASSWD grant; effective in-session only`,{error:e instanceof Error?e.message:String(e)})}}function te(e,t){let{broker:i,getPolicy:a}=t,o=t.defaultDisposition??`allow`,s=t.onGrant?t.onGrant:(t,n)=>ee(e,a,t,n);async function c(e,t,c=!1){let l=r(t),d=C(a(),e,l,{isContentWrite:c});if((e===`write`?u(d,o):d)!==`require-approval`)return;let f=e,p=await i.requestApproval({kind:f,detail:l});if(p.decision===`deny`)throw new n(`EACCES`,`sudo: approval denied`,l);p.decision===`always`&&await s(e,p.pattern?.trim()||l)}function l(e){return C(a(),`read`,r(e))!==`require-approval`}let d=t=>typeof e[t]==`function`,f={};for(let t of D)d(t)&&(f[t]=async(n,...r)=>(await c(`read`,n),e[t](n,...r)));for(let t of O)d(t)&&(f[t]=async(n,...r)=>(await c(`write`,n,!0),e[t](n,...r)));for(let t of k)d(t)&&(f[t]=async(n,...r)=>(await c(`write`,n),e[t](n,...r)));return d(`walk`)&&(f.walk=async function*(t,...n){await c(`read`,t),yield*e.walk(t,...n)}),d(`symlink`)&&(f.symlink=async(t,n)=>(await c(`write`,n),e.symlink(t,n))),d(`rename`)&&(f.rename=async(t,n)=>(await c(`read`,t),await c(`write`,t),await c(`write`,n),e.rename(t,n))),d(`copyFile`)&&(f.copyFile=async(t,n)=>(await c(`read`,t),await c(`write`,n),e.copyFile(t,n))),d(`mount`)&&(f.mount=async(t,...n)=>(await c(`write`,t),e.mount(t,...n))),d(`unmount`)&&(f.unmount=async t=>(await c(`write`,t),e.unmount(t))),d(`refreshMount`)&&(f.refreshMount=async(t,...n)=>(await c(`write`,t),e.refreshMount(t,...n))),d(`statSync`)&&(f.statSync=t=>l(t)?e.statSync(t):null),d(`readDirSync`)&&(f.readDirSync=t=>l(t)?e.readDirSync(t):null),new Proxy(e,{get(e,t,n){if(t===T)return!0;if(typeof t==`string`&&t in f)return f[t];let r=Reflect.get(e,t,n);return typeof r==`function`?r.bind(e):r}})}const A=`/workspace/skills`,j=`SKILL.md`,M=t(`skills-discovery`),N=[`native`,`agents`,`claude`,`marketplace`],P=new Map([[`.agents`,`agents`],[`.claude`,`claude`]]),F=new Set([`.git`,`.slicc`,`node_modules`]),I=2e4,L=[`mkdir`,`mount`,`rename`,`rm`,`unmount`,`writeFile`],R=new WeakMap,z=new WeakSet;async function B(e,t=A){let n=await W(e,t),r=await V(e);return[...N.flatMap(e=>(e===`native`?n:r.filter(t=>t.source===e)).sort((e,t)=>e.path.localeCompare(t.path)))]}async function V(e){if(H(e))return(await J(e)).map(e=>({...e}));Y(e);let t=e,n=R.get(t);if(n)return n.map(e=>({...e}));let r=await J(e);return R.set(t,r),r.map(e=>({...e}))}function H(e){try{return e[T]===!0}catch{return!1}}function U(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 W(e,t){let n=await Z(e,t),r=[];for(let i of n){if(i.type!==`directory`)continue;let n=`${t}/${i.name}`,a=`${n}/${j}`;await X(e,a)&&r.push({source:`native`,sourceRoot:t,path:n,skillFilePath:a})}return r}async function G(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||!Array.isArray(r.plugins))return[];let i=t.replace(/\/[^/]+$/,``).replace(/\/.claude-plugin$/,``),a=[];for(let e of r.plugins){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(/^\.$/,``);a.push(n?`${i}/${n}`:i)}return a}async function K(e,t,n){let r=await G(e,`${t}/marketplace.json`),i=[];for(let t of r){let r=`${t}/skills`,a=await Z(e,r);for(let t of a){if(t.type!==`directory`)continue;let a=`${r}/${t.name}`,o=`${a}/${j}`;!await X(e,o)||n.has(a)||(n.add(a),i.push({source:`marketplace`,sourceRoot:r,path:a,skillFilePath:o}))}}return i}async function q(e,t,n,r){let i=`${t}/skills`,a=await Z(e,i),o=[];for(let t of a){if(t.type!==`directory`)continue;let a=`${i}/${t.name}`,s=`${a}/${j}`;!await X(e,s)||r.has(a)||(r.add(a),o.push({source:n,sourceRoot:i,path:a,skillFilePath:s}))}return o}async function J(e){let t=[],n=new Set,r=new Set([`/`]),i=[{path:`/`,depth:0}];for(let a=0;a<i.length;a+=1){if(a>=I){M.warn(`skills discovery: directory budget exhausted; walk truncated`,{budget:I});break}let{path:o,depth:s}=i[a],c=await Z(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=P.get(a.name);if(l){let r=await q(e,c,l,n);t.push(...r)}if(a.name===`.claude-plugin`){let r=await K(e,c,n);t.push(...r);continue}!F.has(a.name)&&s<24&&!r.has(c)&&(r.add(c),i.push({path:c,depth:s+1}))}}return t}function Y(e){if(H(e))return;let t=e;if(z.has(t))return;z.add(t);let n=e;for(let r of L){let i=n[r];if(typeof i!=`function`)continue;let a=i;try{n[r]=async(...n)=>{let r=await a.apply(e,n);return R.delete(t),r}}catch{}}}async function X(e,t){try{return await e.stat(t),!0}catch{return!1}}async function Z(e,t){try{return[...await e.readDir(t)].sort((e,t)=>e.name.localeCompare(t.name))}catch{return[]}}async function Q(e,t=`/workspace/skills`){let n=await B(e,t),r=[];for(let t of n){let n=t.path.split(`/`).pop()??t.path,i=``;if(t.skillFilePath)try{i=re(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}=U(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 $(e,t,n=`/workspace/skills`){return(await Q(e,n)).find(e=>e.name===t)||null}async function ne(e,t,n=`/workspace/skills`){let r=await $(e,t,n);if(!r?.skillFilePath)return null;try{return await e.readTextFile(r.skillFilePath)}catch{return null}}function re(e){let t=e.replace(/^\uFEFF/,``).replace(/\r\n?/g,`
@@ -0,0 +1 @@
1
+ import{t as e}from"./logger-DDBAeTLF.js";import{n as t,t as n}from"./panel-rpc-DmJSNs0I.js";import{s as r}from"./telemetry-DqIqVG5n.js";import{t as i}from"./sprinkle-renderer-DZ_7mdV4.js";import{t as a}from"./sprinkle-bridge-DziYRsuS.js";var o=[`/shared/sprinkles`],s=new Set([`welcome`,`connect-llm`]);async function c(e){let t=new Map;for(let n of o)await e.exists(n)&&await l(e,n,t);return await l(e,`/`,t),t}async function l(e,t,n){for await(let r of e.walk(t)){if(!r.endsWith(`.shtml`))continue;let t=u(r);if(!s.has(t)&&!n.has(t)){let i;try{i=await e.readFile(r,{encoding:`utf-8`})??``}catch{i=``}n.set(t,{name:t,path:r,title:d(i,t),autoOpen:f(i),icon:p(i)})}}}function u(e){let t=e.split(`/`).pop()??e;return t.endsWith(`.shtml`)?t.slice(0,-6):t}function d(e,t){let n=e.match(/data-sprinkle-title=["']([^"']+)["']/);if(n)return n[1];let r=e.match(/<title>([^<]+)<\/title>/i);return r?r[1].trim():t}function f(e){return/data-sprinkle-autoopen\b/.test(e)}function p(e){let t=/<link\b/gi,n;for(;(n=t.exec(e))!==null;){let t=n.index+n[0].length,r=m(e,t);if(r<0)continue;let i=e.slice(t,r);if(!/\brel\s*=\s*("|')\s*(?:shortcut\s+)?icon\s*\1/i.test(i))continue;let a=h(i,`href`);if(a!==void 0)return a.trim()}let r=h(e,`data-sprinkle-icon`);if(r!==void 0)return r.trim()}function m(e,t){let n=!1,r=!1;for(let i=t;i<e.length;i++){let t=e.charCodeAt(i);if(n)t===34&&(n=!1);else if(r)t===39&&(r=!1);else if(t===34)n=!0;else if(t===39)r=!0;else if(t===62)return i}return-1}function h(e,t){let n=RegExp(`\\b${t}\\s*=\\s*(?:"([^"]*)"|'([^']*)')`,`i`),r=e.match(n);if(r)return r[1]??r[2]??void 0}var g=e(`sprinkle-manager`),_=`slicc-open-sprinkles`,v=`sprinkles`;function y(){try{if(typeof window>`u`||!window.location)return null;let e=new URLSearchParams(window.location.search).get(v);return e===null?null:e===``?[]:e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0)}catch{return null}}function b(e){try{if(typeof window>`u`||!window.location||typeof history>`u`||typeof history.replaceState!=`function`)return;let t=new URL(window.location.href);e.length===0?t.searchParams.delete(v):t.searchParams.set(v,e.join(`,`));let n=t.pathname+t.search+t.hash;history.replaceState(history.state??null,``,n)}catch{}}var x=`slicc-known-sprinkles`;function S(e){try{let t=new Set(e),n=C().filter(e=>t.has(e));localStorage.setItem(x,JSON.stringify(n))}catch{}}function C(){try{let e=localStorage.getItem(x);if(!e)return[];let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>typeof e==`string`):[]}catch{return[]}}var w=`slicc-autoopened-once`,T=[`/workspace`,`/shared`,`/scoops`],E=250,D=class{fs;bridge;callbacks;availableSprinkles=new Map;watcherUnsub;openSprinkles=new Map;attentionOnly=new Set;inflightRefresh=null;lastRefreshAt=0;autoOpenBehavior;onSendToSprinkle;onSprinkleReloaded;registeredSprinkles=new Set;inlineSprinkles;changeListeners=new Set;changeNotifyScheduled=!1;urlWriteScheduled=!1;constructor(e,r,i,o,s={}){this.fs=e;let c=async()=>{let e=`image/png`,r=t(),i=n();if(!r&&!i)throw Error(`Screen capture unavailable in this environment`);if(r&&!navigator.mediaDevices?.getDisplayMedia)throw Error(`Screen capture not supported in this browser`);let a,o,s;if(r){let t=await navigator.mediaDevices.getDisplayMedia({video:!0,audio:!1});try{let n=document.createElement(`video`);n.srcObject=t,n.muted=!0,n.playsInline=!0,await new Promise((e,t)=>{n.onloadedmetadata=()=>n.play().then(()=>e()).catch(t),n.onerror=()=>t(Error(`Failed to load video stream`))}),await new Promise(e=>setTimeout(e,100)),o=n.videoWidth,s=n.videoHeight;let r=document.createElement(`canvas`);r.width=o,r.height=s;let i=r.getContext(`2d`);if(!i)throw Error(`Failed to get canvas context`);i.drawImage(n,0,0,o,s),a=await(await new Promise((t,n)=>{r.toBlob(e=>e?t(e):n(Error(`Failed to create image blob`)),e,1)})).arrayBuffer()}finally{for(let e of t.getTracks())e.stop()}}else{let t=await i.call(`screencapture`,{mimeType:e,quality:1},{timeoutMs:5*6e4});a=t.bytes,o=t.width,s=t.height}let c=new Uint8Array(a),l=[],u=8192;for(let e=0;e<c.length;e+=u)l.push(String.fromCharCode(...c.subarray(e,e+u)));return{base64:btoa(l.join(``)),width:o,height:s,mimeType:e}};this.bridge=new a(e,r,e=>this.close(e),e=>this.minimize(e),o,s.onAttachImage??(()=>{}),c,s.execHandler,(e,t,n)=>{this.openSprinkles.get(e)?.renderer.pushDeviceEvent(t,n)}),this.callbacks=i,this.autoOpenBehavior=s.autoOpenBehavior??`activate`,this.onSendToSprinkle=s.onSendToSprinkle,this.onSprinkleReloaded=s.onSprinkleReloaded,this.inlineSprinkles=s.inlineSprinkles??new Set}setSendToSprinkleHook(e){this.onSendToSprinkle&&!e&&g.error(`SprinkleManager broadcast hook detached`),this.onSendToSprinkle=e}setReloadHook(e){this.onSprinkleReloaded=e}async reload(e){let t=this.openSprinkles.get(e);if(!t){g.info(`Cannot reload closed sprinkle`,{name:e});return}let n=this.availableSprinkles.get(e);if(n||=(await this.refresh(),this.availableSprinkles.get(e)),!n){g.warn(`Sprinkle not found during reload`,{name:e});return}let r=await this.fs.readFile(n.path,{encoding:`utf-8`});if(r==null){g.warn(`Failed to read sprinkle content during reload`,{name:e});return}let a=typeof r==`string`?r:new TextDecoder(`utf-8`).decode(r);t.renderer?.dispose(),this.bridge.removeSprinkle(e);let o=this.bridge.createAPI(e),s=new i(t.container,o);if(await s.render(a,e),!this.openSprinkles.has(e)){s.dispose();return}if(t.renderer=s,s.activateBridgeLifecycle(),this.openSprinkles.has(e)&&(g.info(`Sprinkle reloaded`,{name:e}),this.notifyChange(),this.onSprinkleReloaded))try{this.onSprinkleReloaded(e)}catch(t){g.error(`onSprinkleReloaded hook threw`,{name:e,error:t instanceof Error?t.message:String(t)})}}async restoreOpenSprinkles(){try{let e=y();if(e!==null){await this.reopenInBackground(e);return}let t=localStorage.getItem(_);t?await this.restoreFromLegacyStorage(t):await this.autoOpenFirstRun()}catch{}await this.surfaceUnseenSprinkles()}async reopenInBackground(e){for(let t of e)try{await this.open(t,void 0,{background:!0})}catch{g.warn(`Failed to restore sprinkle`,{name:t})}}async restoreFromLegacyStorage(e){try{await this.reopenInBackground(JSON.parse(e))}finally{try{localStorage.removeItem(_)}catch{}}}async autoOpenFirstRun(){let e=this.autoOpenBehavior===`attention`,t=this.loadAutoOpenedOnce(),n=new Set;for(let r of this.availableSprinkles.values())if(!(!r.autoOpen||t.has(r.name)))try{await this.open(r.name,void 0,{attention:e}),n.add(r.name)}catch{g.warn(`Failed to auto-open sprinkle`,{name:r.name})}n.size>0&&this.persistAutoOpenedOnce(n)}async surfaceUnseenSprinkles(){let e=this.loadKnownSprinkles(),t=this.loadAutoOpenedOnce(),n=this.autoOpenBehavior===`attention`,r=new Set;for(let i of this.availableSprinkles.values())if(!e.has(i.name)&&!this.openSprinkles.has(i.name)&&!(i.autoOpen&&t.has(i.name)))try{await this.open(i.name,void 0,{attention:!i.autoOpen||n}),i.autoOpen&&r.add(i.name),g.info(`Surfaced previously-unseen sprinkle`,{name:i.name})}catch{g.warn(`Failed to surface unseen sprinkle`,{name:i.name})}this.persistKnownSprinkles(new Set(this.availableSprinkles.keys())),r.size>0&&this.persistAutoOpenedOnce(r)}loadKnownSprinkles(){return new Set(C())}persistKnownSprinkles(e){try{let t=new Set([...this.loadKnownSprinkles(),...e]);localStorage.setItem(x,JSON.stringify([...t]))}catch{}}loadAutoOpenedOnce(){try{let e=localStorage.getItem(w);if(!e)return new Set;let t=JSON.parse(e);return Array.isArray(t)?new Set(t.filter(e=>typeof e==`string`)):new Set}catch{return new Set}}persistAutoOpenedOnce(e){try{let t=new Set([...this.loadAutoOpenedOnce(),...e]);localStorage.setItem(w,JSON.stringify([...t]))}catch{}}persistOpenSprinkles(){try{let e=[...this.openSprinkles.keys()].filter(e=>!this.attentionOnly.has(e));localStorage.setItem(_,JSON.stringify(e))}catch{}this.schedulePersistOpenSprinklesToUrl()}schedulePersistOpenSprinklesToUrl(){this.urlWriteScheduled||(this.urlWriteScheduled=!0,queueMicrotask(()=>{this.urlWriteScheduled=!1,b([...this.openSprinkles.keys()].filter(e=>!this.attentionOnly.has(e)))}))}async openNewAutoOpenSprinkles(){if(this.inflightRefresh)return this.inflightRefresh;if(!(Date.now()-this.lastRefreshAt<E))return this.inflightRefresh=this.runOpenNewAutoOpenSprinkles().finally(()=>{this.lastRefreshAt=Date.now(),this.inflightRefresh=null}),this.inflightRefresh}async runOpenNewAutoOpenSprinkles(){let e=new Set(this.availableSprinkles.keys());await this.refresh();let t=this.autoOpenBehavior===`attention`,n=this.loadAutoOpenedOnce(),r=new Set,i=!1;for(let a of this.availableSprinkles.values())if(!this.openSprinkles.has(a.name)&&!e.has(a.name))if(i=!0,a.autoOpen){if(n.has(a.name)){g.info(`Skipped one-shot auto-open for previously-consumed sprinkle`,{name:a.name});continue}try{await this.open(a.name,void 0,{attention:t}),r.add(a.name),g.info(`Auto-opened new sprinkle after install`,{name:a.name,attention:t})}catch{g.warn(`Failed to auto-open new sprinkle`,{name:a.name})}}else try{await this.open(a.name,void 0,{attention:!0}),g.info(`Surfaced newly-installed sprinkle in rail`,{name:a.name})}catch{g.warn(`Failed to surface newly-installed sprinkle`,{name:a.name})}i&&this.persistKnownSprinkles(new Set(this.availableSprinkles.keys())),r.size>0&&this.persistAutoOpenedOnce(r)}async refresh(){this.availableSprinkles=await c(this.fs),g.info(`Discovered sprinkles`,{count:this.availableSprinkles.size}),this.syncRegisteredIcons(),this.notifyChange()}syncRegisteredIcons(){if(!this.callbacks.registerSprinkle)return;let e=new Set;for(let t of this.availableSprinkles.values())this.inlineSprinkles.has(t.name)||e.add(t.name);for(let t of this.availableSprinkles.values())if(e.has(t.name)&&!this.registeredSprinkles.has(t.name))try{this.callbacks.registerSprinkle(t.name,t.title,{icon:t.icon}),this.registeredSprinkles.add(t.name)}catch(e){g.warn(`registerSprinkle callback threw`,{name:t.name,error:e instanceof Error?e.message:String(e)})}for(let t of[...this.registeredSprinkles])if(!e.has(t)){this.openSprinkles.has(t)&&this.close(t);try{this.callbacks.unregisterSprinkle?.(t)}catch(e){g.warn(`unregisterSprinkle callback threw`,{name:t,error:e instanceof Error?e.message:String(e)})}this.registeredSprinkles.delete(t)}}onChange(e){return this.changeListeners.add(e),()=>{this.changeListeners.delete(e)}}notifyChange(){this.changeNotifyScheduled||(this.changeNotifyScheduled=!0,queueMicrotask(()=>{this.changeNotifyScheduled=!1;for(let e of this.changeListeners)try{e()}catch(e){g.error(`SprinkleManager.onChange handler threw`,{error:e instanceof Error?e.message:String(e)})}}))}async open(e,t,n={}){if(this.openSprinkles.has(e)){g.info(`Sprinkle already open`,{name:e});return}let a=this.availableSprinkles.get(e);if(a||=(await this.refresh(),this.availableSprinkles.get(e)),!a)throw Error(`Sprinkle not found: ${e}`);let o=await this.fs.readFile(a.path,{encoding:`utf-8`});if(o==null)throw Error(`Failed to read sprinkle content: ${a.path} (file may be corrupted or missing)`);let s=typeof o==`string`?o:new TextDecoder(`utf-8`).decode(o),c=document.createElement(`div`);c.className=`sprinkle-panel`,c.style.cssText=`width: 100%; height: 100%; display: flex; flex-direction: column; overflow-y: auto;`,c.dataset.sprinkle=e,this.openSprinkles.set(e,{renderer:null,container:c}),n.attention?this.attentionOnly.add(e):this.attentionOnly.delete(e),this.callbacks.addSprinkle(e,a.title,c,t,{...n,icon:a.icon});let l=new i(c,this.bridge.createAPI(e));await l.render(s,e);let u=this.openSprinkles.get(e);if(!u){l.dispose();return}u.renderer=l,l.activateBridgeLifecycle(),this.openSprinkles.has(e)&&(this.persistOpenSprinkles(),r(e),g.info(`Sprinkle opened`,{name:e,title:a.title}),this.notifyChange())}markActivated(e){this.attentionOnly.has(e)&&(this.attentionOnly.delete(e),this.persistOpenSprinkles(),g.info(`Sprinkle promoted from attention to user-opened`,{name:e}),this.notifyChange())}async activate(e,t){if(this.attentionOnly.has(e)){this.markActivated(e);return}if(!this.openSprinkles.has(e))try{await this.open(e,t)}catch(t){g.warn(`Failed to open sprinkle from rail-icon click`,{name:e,error:t instanceof Error?t.message:String(t)})}}close(e){let t=this.openSprinkles.get(e);t&&(t.renderer?.dispose(),t.container.remove(),this.bridge.removeSprinkle(e),this.openSprinkles.delete(e),this.attentionOnly.delete(e),this.callbacks.closeSprinkleContent?this.callbacks.closeSprinkleContent(e):this.callbacks.removeSprinkle(e),this.persistOpenSprinkles(),g.info(`Sprinkle closed`,{name:e}),this.notifyChange())}minimize(e){this.openSprinkles.has(e)&&(this.callbacks.minimizeSprinkle(e),g.info(`Sprinkle minimized`,{name:e}))}available(){return Array.from(this.availableSprinkles.values())}opened(){return Array.from(this.openSprinkles.keys())}setupWatcher(e){let t=null,n=new Map,r=e=>{let r=!1;for(let t of e){let e=this.findOpenSprinkleByPath(t.path);if(e){let t=n.get(e);t&&clearTimeout(t),n.set(e,setTimeout(()=>{n.delete(e),this.reload(e).catch(t=>{g.warn(`Sprinkle reload on watcher event failed`,{name:e,error:t instanceof Error?t.message:String(t)})})},300))}else r=!0}r&&!t&&(t=setTimeout(()=>{t=null,this.openNewAutoOpenSprinkles().catch(e=>{g.warn(`Sprinkle refresh on watcher event failed`,{error:e instanceof Error?e.message:String(e)})})},150))},i=T.map(t=>e.watch(t,e=>e.endsWith(`.shtml`),r));this.watcherUnsub=()=>{for(let e of i)e();t&&=(clearTimeout(t),null);for(let e of n.values())clearTimeout(e);n.clear()}}findOpenSprinkleByPath(e){for(let[t]of this.openSprinkles){let n=this.availableSprinkles.get(t);if(n&&n.path===e)return t}return null}dispose(){this.watcherUnsub?.()}sendToSprinkle(e,t){let n=this.openSprinkles.get(e);if(!n){g.warn(`Cannot send to closed sprinkle`,{name:e});return}if(this.bridge.pushUpdate(e,t),n.renderer.pushUpdate(t),this.onSendToSprinkle)try{this.onSendToSprinkle(e,t)}catch(t){g.error(`onSendToSprinkle hook threw`,{name:e,error:t instanceof Error?t.message:String(t)})}}};export{D as SprinkleManager,S as pruneKnownSprinkleNames,C as readKnownSprinkleNames};
@@ -1,8 +1,8 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/slicc-editor-BoIEeofq.js","assets/preload-helper-Czpn1I53.js","assets/dist-Bq5i9FMJ.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-Czpn1I53.js";import{a as t,n,r}from"./theme-C8b_iQ_9.js";function i(){try{return window.self!==window.top}catch{return!0}}var a=new WeakSet;function o(e,t){if(a.has(e)){t?.();return}let n=!1;s(e,t,()=>{n=!0}),setTimeout(()=>{n||e.isConnected&&s(e)},500)}function s(e,t,n){if(a.has(e)){t?.();return}a.add(e);let r=e.style.display;e.style.display=`none`;let i=!1,o=o=>{i||(i=!0,e.style.display=r,a.delete(e),o&&n?.(),t?.())};typeof requestAnimationFrame==`function`&&requestAnimationFrame(()=>{requestAnimationFrame(()=>o(!0))}),setTimeout(()=>o(!1),100)}function c(e){let t=e.trimStart().toLowerCase();return t.startsWith(`<!doctype`)||t.startsWith(`<html`)}function l(e,t,n,r={}){e.contentWindow?.postMessage({type:t,id:n,...r},`*`)}function u(e,t,n,r,i){r.then(r=>l(e,t,n,i(r)),r=>l(e,t,n,{error:r instanceof Error?r.message:String(r)}))}function d(e){return{"sprinkle-lick":(t,n)=>e.lick({action:n.action,data:n.data}),"sprinkle-set-state":(t,n)=>e.setState(n.data),"sprinkle-close":()=>e.close(),"sprinkle-minimize":()=>e.minimize(),"sprinkle-stop-cone":()=>e.stopCone(),"sprinkle-attach-image":(t,n)=>e.attachImage(n.base64,n.name,n.mimeType),"sprinkle-readfile":(t,n)=>u(t,`sprinkle-readfile-response`,n.id,e.readFile(n.path),e=>({content:e})),"sprinkle-writefile":(t,n)=>u(t,`sprinkle-writefile-response`,n.id,e.writeFile(n.path,n.content),()=>({})),"sprinkle-readdir":(t,n)=>u(t,`sprinkle-readdir-response`,n.id,e.readDir(n.path),e=>({entries:e})),"sprinkle-exists":(t,n)=>u(t,`sprinkle-exists-response`,n.id,e.exists(n.path),e=>({exists:e})),"sprinkle-stat":(t,n)=>u(t,`sprinkle-stat-response`,n.id,e.stat(n.path),e=>({stat:e})),"sprinkle-mkdir":(t,n)=>u(t,`sprinkle-mkdir-response`,n.id,e.mkdir(n.path),()=>({})),"sprinkle-rm":(t,n)=>u(t,`sprinkle-rm-response`,n.id,e.rm(n.path),()=>({})),"sprinkle-capture-screen":(t,n)=>u(t,`sprinkle-capture-screen-response`,n.id,e.captureScreen(),e=>({base64:e.base64,width:e.width,height:e.height,mimeType:e.mimeType})),"sprinkle-exec":(t,n)=>u(t,`sprinkle-exec-response`,n.id,e.exec(n.cmd),e=>({result:e})),"sprinkle-agent":(t,n)=>u(t,`sprinkle-agent-response`,n.id,e.agent(n.prompt,n.opts),e=>({result:e})),"sprinkle-jsh":(t,n)=>u(t,`sprinkle-jsh-response`,n.id,e._jsh(n.op,n.args),e=>({result:e})),"sprinkle-device-op":(t,n)=>u(t,`sprinkle-device-op-response`,n.id,e._device(n.channel,n.op,n.args??[]),e=>({result:e}))}}function f(e,t){return n=>{if(n.source!==e.contentWindow)return;let r=n.data;r?.type&&t[r.type]?.(e,r)}}function p(t){if(t.includes(`<slicc-editor`)&&!customElements.get(`slicc-editor`)&&e(()=>import(`./slicc-editor-BoIEeofq.js`),__vite__mapDeps([0,1,2])),t.includes(`<slicc-diff`)&&!customElements.get(`slicc-diff`)){let e=document.createElement(`script`);e.src=`/slicc-diff.js`,document.head.appendChild(e)}}function m(e){for(let t of e.querySelectorAll(`.fill[data-value]`)){let e=parseFloat(t.dataset.value||`0`);e>=0&&e<=100&&(t.style.width=`${e}%`)}}function h(e,t){let n=`window.__slicc_sprinkles[${JSON.stringify(t)}]`;for(let t of e.querySelectorAll(`[onclick]`)){let e=t.getAttribute(`onclick`)||``;/\b(slicc|bridge)\b/.test(e)&&t.setAttribute(`onclick`,e.replace(/\b(slicc|bridge)\b/g,n))}return n}function g(e){let t=new Set;for(let n of e.querySelectorAll(`[onclick]`)){let e=n.getAttribute(`onclick`)||``;for(let n of e.matchAll(/\b(\w+)\s*\(/g)){let e=n[1];[`slicc`,`bridge`,`lick`,`close`,`exec`,`agent`].includes(e)||t.add(e)}}return t}function _(e,t){let n=[];for(let r of Array.from(e.querySelectorAll(`script`))){r.remove();let i=document.createElement(`script`);for(let e of r.attributes)i.setAttribute(e.name,e.value);if(!r.src){let n=[...g(e)].map(e=>`if (typeof ${e} === 'function') window.${e} = ${e};`).join(`
2
+ import{t as e}from"./preload-helper-Czpn1I53.js";import{a as t,n,r}from"./theme-BOdTMzQ7.js";function i(){try{return window.self!==window.top}catch{return!0}}var a=new WeakSet;function o(e,t){if(a.has(e)){t?.();return}let n=!1;s(e,t,()=>{n=!0}),setTimeout(()=>{n||e.isConnected&&s(e)},500)}function s(e,t,n){if(a.has(e)){t?.();return}a.add(e);let r=e.style.display;e.style.display=`none`;let i=!1,o=o=>{i||(i=!0,e.style.display=r,a.delete(e),o&&n?.(),t?.())};typeof requestAnimationFrame==`function`&&requestAnimationFrame(()=>{requestAnimationFrame(()=>o(!0))}),setTimeout(()=>o(!1),100)}function c(e){let t=e.trimStart().toLowerCase();return t.startsWith(`<!doctype`)||t.startsWith(`<html`)}function l(e,t,n,r={}){e.contentWindow?.postMessage({type:t,id:n,...r},`*`)}function u(e,t,n,r,i){r.then(r=>l(e,t,n,i(r)),r=>l(e,t,n,{error:r instanceof Error?r.message:String(r)}))}function d(e){return{"sprinkle-lick":(t,n)=>e.lick({action:n.action,data:n.data}),"sprinkle-set-state":(t,n)=>e.setState(n.data),"sprinkle-close":()=>e.close(),"sprinkle-minimize":()=>e.minimize(),"sprinkle-stop-cone":()=>e.stopCone(),"sprinkle-attach-image":(t,n)=>e.attachImage(n.base64,n.name,n.mimeType),"sprinkle-readfile":(t,n)=>u(t,`sprinkle-readfile-response`,n.id,e.readFile(n.path),e=>({content:e})),"sprinkle-writefile":(t,n)=>u(t,`sprinkle-writefile-response`,n.id,e.writeFile(n.path,n.content),()=>({})),"sprinkle-readdir":(t,n)=>u(t,`sprinkle-readdir-response`,n.id,e.readDir(n.path),e=>({entries:e})),"sprinkle-exists":(t,n)=>u(t,`sprinkle-exists-response`,n.id,e.exists(n.path),e=>({exists:e})),"sprinkle-stat":(t,n)=>u(t,`sprinkle-stat-response`,n.id,e.stat(n.path),e=>({stat:e})),"sprinkle-mkdir":(t,n)=>u(t,`sprinkle-mkdir-response`,n.id,e.mkdir(n.path),()=>({})),"sprinkle-rm":(t,n)=>u(t,`sprinkle-rm-response`,n.id,e.rm(n.path),()=>({})),"sprinkle-capture-screen":(t,n)=>u(t,`sprinkle-capture-screen-response`,n.id,e.captureScreen(),e=>({base64:e.base64,width:e.width,height:e.height,mimeType:e.mimeType})),"sprinkle-exec":(t,n)=>u(t,`sprinkle-exec-response`,n.id,e.exec(n.cmd),e=>({result:e})),"sprinkle-agent":(t,n)=>u(t,`sprinkle-agent-response`,n.id,e.agent(n.prompt,n.opts),e=>({result:e})),"sprinkle-jsh":(t,n)=>u(t,`sprinkle-jsh-response`,n.id,e._jsh(n.op,n.args),e=>({result:e})),"sprinkle-device-op":(t,n)=>u(t,`sprinkle-device-op-response`,n.id,e._device(n.channel,n.op,n.args??[]),e=>({result:e}))}}function f(e,t){return n=>{if(n.source!==e.contentWindow)return;let r=n.data;r?.type&&t[r.type]?.(e,r)}}function p(t){if(t.includes(`<slicc-editor`)&&!customElements.get(`slicc-editor`)&&e(()=>import(`./slicc-editor-BoIEeofq.js`),__vite__mapDeps([0,1,2])),t.includes(`<slicc-diff`)&&!customElements.get(`slicc-diff`)){let e=document.createElement(`script`);e.src=`/slicc-diff.js`,document.head.appendChild(e)}}function m(e){for(let t of e.querySelectorAll(`.fill[data-value]`)){let e=parseFloat(t.dataset.value||`0`);e>=0&&e<=100&&(t.style.width=`${e}%`)}}function h(e,t){let n=`window.__slicc_sprinkles[${JSON.stringify(t)}]`;for(let t of e.querySelectorAll(`[onclick]`)){let e=t.getAttribute(`onclick`)||``;/\b(slicc|bridge)\b/.test(e)&&t.setAttribute(`onclick`,e.replace(/\b(slicc|bridge)\b/g,n))}return n}function g(e){let t=new Set;for(let n of e.querySelectorAll(`[onclick]`)){let e=n.getAttribute(`onclick`)||``;for(let n of e.matchAll(/\b(\w+)\s*\(/g)){let e=n[1];[`slicc`,`bridge`,`lick`,`close`,`exec`,`agent`].includes(e)||t.add(e)}}return t}function _(e,t){let n=[];for(let r of Array.from(e.querySelectorAll(`script`))){r.remove();let i=document.createElement(`script`);for(let e of r.attributes)i.setAttribute(e.name,e.value);if(!r.src){let n=[...g(e)].map(e=>`if (typeof ${e} === 'function') window.${e} = ${e};`).join(`
3
3
  `);i.textContent=`(function() { var slicc = ${t}; var bridge = slicc;\n`+r.textContent+(n?`
4
4
  `+n:``)+`
5
- })();`}e.appendChild(i),n.push(i)}return n}var v=class{container;bridge;scripts=[];iframe=null;messageHandler=null;visibilityObserver=null;constructor(e,t){this.container=e,this.bridge=t}async render(e,t){this.dispose(),c(e)?await this.renderFullDoc(e,t):this.renderInline(e,t)}pushUpdate(e){this.iframe?.contentWindow&&this.iframe.contentWindow.postMessage({type:`sprinkle-update`,data:e},`*`)}pushDeviceEvent(e,t){this.iframe?.contentWindow&&this.iframe.contentWindow.postMessage({type:`sprinkle-device-event`,channel:e,payload:t},`*`)}collectThemeCSS(){return b()}generateBridgeScript(){return`(function() {
5
+ })();`}e.appendChild(i),n.push(i)}return n}var v=class{container;bridge;scripts=[];iframe=null;messageHandler=null;visibilityObserver=null;bridgeLifecycleReady=!1;pendingBridgeLifecycle=[];constructor(e,t){this.container=e,this.bridge=t}async render(e,t){if(this.dispose(),c(e))try{await this.renderFullDoc(e,t)}catch(e){throw this.dispose(),e}else this.renderInline(e,t)}activateBridgeLifecycle(){for(this.bridgeLifecycleReady=!0;this.bridgeLifecycleReady&&this.pendingBridgeLifecycle.length>0;)this.pendingBridgeLifecycle.shift()()}pushUpdate(e){this.iframe?.contentWindow&&this.iframe.contentWindow.postMessage({type:`sprinkle-update`,data:e},`*`)}pushDeviceEvent(e,t){this.iframe?.contentWindow&&this.iframe.contentWindow.postMessage({type:`sprinkle-device-event`,channel:e,payload:t},`*`)}collectThemeCSS(){return b()}generateBridgeScript(){return`(function() {
6
6
  var _updateListeners = new Set();
7
7
  var _hidInputReportListeners = new Set();
8
8
  var _sprinkleName = '';
@@ -184,7 +184,7 @@ import{t as e}from"./preload-helper-Czpn1I53.js";import{a as t,n,r}from"./theme-
184
184
  };
185
185
  window.slicc = api;
186
186
  window.bridge = api;
187
- })();`}async renderFullDoc(e,t){let a=`<script>${this.generateBridgeScript()}<\/script>`,s=this.collectThemeCSS(),c=s?`<style>${s}</style>`:``,l=e.includes(`<slicc-editor`)?`<script src="/slicc-editor.js"><\/script>`:``,u=e.includes(`<slicc-diff`)?`<script src="/slicc-diff.js"><\/script>`:``,p=`<script>(function(){try{if(${n()?`true`:`false`})document.documentElement.classList.add('theme-light');}catch(e){}})();<\/script>`+a+c+l+u+`<script src="/lucide-icons.js"><\/script>`,m,h=e.match(/<head\b[^>]*>/i);if(h){let t=h.index+h[0].length;m=e.slice(0,t)+p+e.slice(t)}else{let t=e.match(/<script\b/i);if(t)m=e.slice(0,t.index)+p+e.slice(t.index);else{let t=e.match(/<html\b[^>]*>/i);if(t){let n=t.index+t[0].length;m=e.slice(0,n)+p+e.slice(n)}else m=p+e}}let g=document.createElement(`iframe`),_=i()?`allow-scripts allow-same-origin allow-popups`:`allow-scripts allow-same-origin`;if(g.setAttribute(`sandbox`,_),g.style.cssText=`width: 100%; flex: 1; border: none; min-height: 0;`+(i()?` transform: translateZ(0);`:``),g.srcdoc=m,this.iframe=g,await new Promise((e,n)=>{let a=setTimeout(()=>{n(Error(`full-doc iframe load timed out`))},5e3);g.addEventListener(`load`,()=>{clearTimeout(a),r(g.contentWindow);let n=this.bridge.getState();g.contentWindow?.postMessage({type:`sprinkle-init`,name:t,savedState:n},`*`),i()&&o(g),e()},{once:!0}),g.addEventListener(`error`,()=>{clearTimeout(a),n(Error(`full-doc iframe failed to load`))},{once:!0}),this.container.appendChild(g)}),this.messageHandler=f(g,d(this.bridge)),window.addEventListener(`message`,this.messageHandler),i()&&typeof IntersectionObserver<`u`){let e=!1,t=new IntersectionObserver(n=>{if(n[n.length-1].isIntersecting){if(e){e=!1;return}t.unobserve(g),o(g,()=>{e=!0,t.observe(g)})}});this.visibilityObserver=t,t.observe(g)}}renderInline(e,t){p(e),window.__slicc_sprinkles||(window.__slicc_sprinkles={}),window.__slicc_sprinkles[t]=this.bridge,this.bridge._container=this.container;let n=document.createElement(`div`);n.className=`sprinkle-content`,n.innerHTML=e,this.container.appendChild(n),m(n);let r=h(n,t);this.scripts=_(n,r)}dispose(){this.visibilityObserver&&=(this.visibilityObserver.disconnect(),null),this.messageHandler&&=(window.removeEventListener(`message`,this.messageHandler),null),this.iframe&&=(t(this.iframe.contentWindow),this.iframe.remove(),null);for(let e of this.scripts)e.remove();this.scripts=[];let e=this.container.querySelector(`.sprinkle-content`);e&&e.remove(),window.__slicc_sprinkles&&delete window.__slicc_sprinkles[this.bridge.name]}};function y(e,t){return e.replace(/url\(\s*['"]?([^'")]+)['"]?\s*\)/g,(e,n)=>{if(/^(https?:|data:|blob:)/i.test(n))return`url('${n}')`;try{return`url('${new URL(n,t).href}')`}catch{return`url('${n}')`}})}function b(){if(typeof getComputedStyle!=`function`)return``;let e=[],t=[],n=[],r=location.href,i=e=>e===`:root`||e===`:root.theme-light`||e.startsWith(`.theme-light `)||e===`.theme-light`||e.split(`,`).some(e=>{let t=e.trim();return t===`:root`||t===`:root.theme-light`||t.startsWith(`.theme-light `)||t===`.theme-light`});for(let a of document.styleSheets)try{for(let o of a.cssRules)if(o instanceof CSSFontFaceRule)e.push(y(o.cssText,r));else if(o instanceof CSSStyleRule){let e=o.selectorText;i(e)&&t.push(o.cssText),(e.includes(`.sprinkle-`)||e.includes(`.fill`))&&n.push(o.cssText)}}catch{}return e.join(`
187
+ })();`}async renderFullDoc(e,t){let a=`<script>${this.generateBridgeScript()}<\/script>`,s=this.collectThemeCSS(),c=s?`<style>${s}</style>`:``,l=e.includes(`<slicc-editor`)?`<script src="/slicc-editor.js"><\/script>`:``,u=e.includes(`<slicc-diff`)?`<script src="/slicc-diff.js"><\/script>`:``,p=`<script>(function(){try{if(${n()?`true`:`false`})document.documentElement.classList.add('theme-light');}catch(e){}})();<\/script>`+a+c+l+u+`<script src="/lucide-icons.js"><\/script>`,m,h=e.match(/<head\b[^>]*>/i);if(h){let t=h.index+h[0].length;m=e.slice(0,t)+p+e.slice(t)}else{let t=e.match(/<script\b/i);if(t)m=e.slice(0,t.index)+p+e.slice(t.index);else{let t=e.match(/<html\b[^>]*>/i);if(t){let n=t.index+t[0].length;m=e.slice(0,n)+p+e.slice(n)}else m=p+e}}let g=document.createElement(`iframe`),_=i()?`allow-scripts allow-same-origin allow-popups`:`allow-scripts allow-same-origin`;g.setAttribute(`sandbox`,_),g.style.cssText=`width: 100%; flex: 1; border: none; min-height: 0;`+(i()?` transform: translateZ(0);`:``),g.srcdoc=m,this.iframe=g;let v=d(this.bridge);for(let e of[`sprinkle-close`,`sprinkle-minimize`]){let t=v[e];v[e]=(e,n)=>{if(!this.bridgeLifecycleReady){this.pendingBridgeLifecycle.push(()=>t(e,n));return}t(e,n)}}if(this.messageHandler=f(g,v),window.addEventListener(`message`,this.messageHandler),await new Promise((e,n)=>{let a=setTimeout(()=>{n(Error(`full-doc iframe load timed out`))},5e3);g.addEventListener(`load`,()=>{clearTimeout(a),r(g.contentWindow);let n=this.bridge.getState();g.contentWindow?.postMessage({type:`sprinkle-init`,name:t,savedState:n},`*`),i()&&o(g),e()},{once:!0}),g.addEventListener(`error`,()=>{clearTimeout(a),n(Error(`full-doc iframe failed to load`))},{once:!0}),this.container.appendChild(g)}),i()&&typeof IntersectionObserver<`u`){let e=!1,t=new IntersectionObserver(n=>{if(n[n.length-1].isIntersecting){if(e){e=!1;return}t.unobserve(g),o(g,()=>{e=!0,t.observe(g)})}});this.visibilityObserver=t,t.observe(g)}}renderInline(e,t){p(e),window.__slicc_sprinkles||(window.__slicc_sprinkles={}),window.__slicc_sprinkles[t]=this.bridge,this.bridge._container=this.container;let n=document.createElement(`div`);n.className=`sprinkle-content`,n.innerHTML=e,this.container.appendChild(n),m(n);let r=h(n,t);this.scripts=_(n,r)}dispose(){this.bridgeLifecycleReady=!1,this.pendingBridgeLifecycle=[],this.visibilityObserver&&=(this.visibilityObserver.disconnect(),null),this.messageHandler&&=(window.removeEventListener(`message`,this.messageHandler),null),this.iframe&&=(t(this.iframe.contentWindow),this.iframe.remove(),null);for(let e of this.scripts)e.remove();this.scripts=[];let e=this.container.querySelector(`.sprinkle-content`);e&&e.remove(),window.__slicc_sprinkles&&delete window.__slicc_sprinkles[this.bridge.name]}};function y(e,t){return e.replace(/url\(\s*['"]?([^'")]+)['"]?\s*\)/g,(e,n)=>{if(/^(https?:|data:|blob:)/i.test(n))return`url('${n}')`;try{return`url('${new URL(n,t).href}')`}catch{return`url('${n}')`}})}function b(){if(typeof getComputedStyle!=`function`)return``;let e=[],t=[],n=[],r=location.href,i=e=>e===`:root`||e===`:root.theme-light`||e.startsWith(`.theme-light `)||e===`.theme-light`||e.split(`,`).some(e=>{let t=e.trim();return t===`:root`||t===`:root.theme-light`||t.startsWith(`.theme-light `)||t===`.theme-light`});for(let a of document.styleSheets)try{for(let o of a.cssRules)if(o instanceof CSSFontFaceRule)e.push(y(o.cssText,r));else if(o instanceof CSSStyleRule){let e=o.selectorText;i(e)&&t.push(o.cssText),(e.includes(`.sprinkle-`)||e.includes(`.fill`))&&n.push(o.cssText)}}catch{}return e.join(`
188
188
  `)+`
189
189
  `+t.join(`
190
190
  `)+`