sliccy 4.0.2 → 4.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/dist/ui/assets/__vite-browser-external-C7iut881.js +1 -0
  2. package/dist/ui/assets/account-store-BcAPWTGv.js +38 -0
  3. package/dist/ui/assets/account-store-CiB6cAel.js +99 -0
  4. package/dist/ui/assets/adobe-B-oaNVGg.js +1 -0
  5. package/dist/ui/assets/adobe-CrAdS9SD.js +2 -0
  6. package/dist/ui/assets/{agent-message-to-chat-2oatz-4r.js → agent-message-to-chat-BAWaR5C4.js} +1 -1
  7. package/dist/ui/assets/{anthropic-DdhoKMtR.js → anthropic-DVpFSsKH.js} +2 -2
  8. package/dist/ui/assets/{apps-BkzP1PLW.js → apps-BHERTKiO.js} +1 -1
  9. package/dist/ui/assets/azure-openai-C-826Dlw.js +1 -0
  10. package/dist/ui/assets/azure-openai-DvGwGsI1.js +1 -0
  11. package/dist/ui/assets/azure-openai-responses-BPLbXfA6.js +1 -0
  12. package/dist/ui/assets/bedrock-camp-D64i9rke.js +1 -0
  13. package/dist/ui/assets/{bsh-watchdog-BFmmHSkm.js → bsh-watchdog-ClOjddgN.js} +1 -1
  14. package/dist/ui/assets/cdn-url-builder-Cq7LLgru.js +1 -0
  15. package/dist/ui/assets/{cdp-Bx-nkPzL.js → cdp-Cbi5Katl.js} +3 -3
  16. package/dist/ui/assets/{clipboard-C2cR8flR.js → clipboard-DgFtRQbq.js} +1 -1
  17. package/dist/ui/assets/composer-speech-BuzPv_Yy.js +1 -0
  18. package/dist/ui/assets/{connect-surface-Dwz7gSuy.js → connect-surface-D6ECkvh5.js} +1 -1
  19. package/dist/ui/assets/context-compaction-DJF_qJZJ.js +27 -0
  20. package/dist/ui/assets/diagnostics-mI-AnKx_.js +1 -0
  21. package/dist/ui/assets/dip-ilEHW-Zu.js +1 -0
  22. package/dist/ui/assets/dist-CSwuvPa6.js +4 -0
  23. package/dist/ui/assets/{dist-DwJ61hEj.js → dist-CvzfEfDj2.js} +1 -1
  24. package/dist/ui/assets/{dist-DU9Hdb6p.js → dist-Dejj5eGe.js} +2 -2
  25. package/dist/ui/assets/{dist-DBjE4kB5.js → dist-l3FWXCp1.js} +1 -1
  26. package/dist/ui/assets/{es-CxV76drH.js → es-BxwKdh2y.js} +1 -1
  27. package/dist/ui/assets/esp8266-BPLrOmN4.js +1 -0
  28. package/dist/ui/assets/{esptool-operations-CXqSawtf.js → esptool-operations-CiX8mbpu.js} +2 -2
  29. package/dist/ui/assets/event-stream-Cs43PhOB.js +1 -0
  30. package/dist/ui/assets/{fs-Dg90t6PY.js → fs-BDe3kEbh.js} +1 -1
  31. package/dist/ui/assets/fs-D2X8IzCo.js +2 -0
  32. package/dist/ui/assets/github-BAqz3bbU.js +1 -0
  33. package/dist/ui/assets/github-BPoxioKX.js +2 -0
  34. package/dist/ui/assets/github-copilot-C7kttkXK.js +1 -0
  35. package/dist/ui/assets/github-copilot-Colai-cF.js +2 -0
  36. package/dist/ui/assets/google-shared-CVRDRmWo.js +11 -0
  37. package/dist/ui/assets/google-syj0sMxL.js +1 -0
  38. package/dist/ui/assets/google-vertex-CzAYHmbM.js +1 -0
  39. package/dist/ui/assets/hear-W4qlQvtc.js +1 -0
  40. package/dist/ui/assets/hear-lee28_gN.js +1 -0
  41. package/dist/ui/assets/hosted-config-apply-uAym2aS5.js +1 -0
  42. package/dist/ui/assets/json-parse-BUunmmNl.js +3 -0
  43. package/dist/ui/assets/{kernel-worker-DpRMAeb1.js → kernel-worker-ic1QU0mg.js} +1055 -1032
  44. package/dist/ui/assets/kokoro-IuvgZkZk.js +4 -0
  45. package/dist/ui/assets/kokoro-engine-B330eLPz.js +2 -0
  46. package/dist/ui/assets/kokoro-engine-C5c0LOmY.js +1 -0
  47. package/dist/ui/assets/kokoro-pZaPWf_-.js +4 -0
  48. package/dist/ui/assets/legacy-styles-4PP74ISo.js +2 -0
  49. package/dist/ui/assets/{lick-ws-bridge-CIdCZl2q.js → lick-ws-bridge-C0dPnE8i.js} +1 -1
  50. package/dist/ui/assets/{local-llm-DgWHei2e.js → local-llm-DzOVooE9.js} +2 -2
  51. package/dist/ui/assets/logger-DDBAeTLF.js +1 -0
  52. package/dist/ui/assets/magick-wasm-BvNy9LFP.js +1 -0
  53. package/dist/ui/assets/main-DqjICHRh.js +22 -0
  54. package/dist/ui/assets/main-cherry-Bap_NTtV.js +1 -0
  55. package/dist/ui/assets/mime-types-BqLkKWa7.js +1 -0
  56. package/dist/ui/assets/mime-types-ugOWOUZ9.js +1 -0
  57. package/dist/ui/assets/{mistral-C8Uiexjg.js → mistral-pCZ0Zm3T.js} +2 -2
  58. package/dist/ui/assets/mount-CCmhX5cE.js +2 -0
  59. package/dist/ui/assets/{mount-CYuBE82h.js → mount-DqjQTDCU.js} +1 -1
  60. package/dist/ui/assets/mount-id-DtHfwjbZ.js +1 -0
  61. package/dist/ui/assets/mount-picker-popup-BORxgnGu.js +1 -0
  62. package/dist/ui/assets/new-session-DeH2bC1U.js +1 -0
  63. package/dist/ui/assets/oauth-bootstrap-B6wP6zi_.js +2 -0
  64. package/dist/ui/assets/oauth-service-CTlktxVj.js +1 -0
  65. package/dist/ui/assets/{oauth-service-CSJo71ct.js → oauth-service-DQVciyk_.js} +1 -1
  66. package/dist/ui/assets/onboarding-orchestrator-MNoD_6wi.js +1 -0
  67. package/dist/ui/assets/openai-codex-C_G8kpA8.js +1 -0
  68. package/dist/ui/assets/openai-codex-DKhn8od8.js +1 -0
  69. package/dist/ui/assets/{openai-codex-responses-iASEGX_4.js → openai-codex-responses-C8xgMZBo.js} +3 -3
  70. package/dist/ui/assets/openai-completions-Dry_mhhJ.js +5 -0
  71. package/dist/ui/assets/openai-responses-Bmov8oh7.js +1 -0
  72. package/dist/ui/assets/{openai-responses-shared-B1lth5mr.js → openai-responses-shared-Ct3FUe7d.js} +4 -4
  73. package/dist/ui/assets/panel-rpc-Ck8CVyMh.js +1 -0
  74. package/dist/ui/assets/panel-rpc-DqT2FG7c.js +1 -0
  75. package/dist/ui/assets/panel-rpc-handlers-CEpB4s-n.js +2 -0
  76. package/dist/ui/assets/{picker-approval-EweLNWgE.js → picker-approval-tzbkMw-e.js} +1 -1
  77. package/dist/ui/assets/preload-helper-zJ_50EbN.js +1 -0
  78. package/dist/ui/assets/provider-Bu84IJif.js +1 -0
  79. package/dist/ui/assets/provider-CkWZObGz.js +2 -0
  80. package/dist/ui/assets/provider-store-access-6diGA3zc.js +1 -0
  81. package/dist/ui/assets/provider-store-access-KstUmZ39.js +1 -0
  82. package/dist/ui/assets/{providers-BmSZZhhm.js → providers-Dqi1y25H.js} +1 -1
  83. package/dist/ui/assets/quick-llm-7TCMcdio.js +1 -0
  84. package/dist/ui/assets/remote-cdp-transport-Cf0sDZ5N.js +1 -0
  85. package/dist/ui/assets/{remote-terminal-view-Hlq3HwiU.js → remote-terminal-view-FVcjc7kw.js} +1 -1
  86. package/dist/ui/assets/secret-env-DcfTe28K.js +1 -0
  87. package/dist/ui/assets/session-freezer-1L0xsBeg.js +1 -0
  88. package/dist/ui/assets/setup-sprinkle-exec-BGXT8k4k.js +1 -0
  89. package/dist/ui/assets/setup-sudo-_cBqLWHH.js +1 -0
  90. package/dist/ui/assets/slicc-editor-BdfBeQCF.js +12 -0
  91. package/dist/ui/assets/speak-C8nGyR-z.js +1 -0
  92. package/dist/ui/assets/speak-lc1xl5Fy.js +1 -0
  93. package/dist/ui/assets/speech-GZe1rUoJ.js +1 -0
  94. package/dist/ui/assets/sprinkle-manager-Pfbc1BH8.js +1 -0
  95. package/dist/ui/assets/{sprinkle-renderer-5HX0pMZZ.js → sprinkle-renderer-GiRRbdBx.js} +3 -3
  96. package/dist/ui/assets/src-DlEHAkLd.js +1 -0
  97. package/dist/ui/assets/{store-CQo5JYZe.js → store-B3VfUVG6.js} +1 -1
  98. package/dist/ui/assets/{sudo-fe6QprlZ.js → sudo-CZTI9OeD.js} +1 -1
  99. package/dist/ui/assets/sync-dialog-BFKWO6DT.js +1 -0
  100. package/dist/ui/assets/tool-ui-YOPqzMmL.js +1 -0
  101. package/dist/ui/assets/transform-messages-DzB_lMo-.js +1 -0
  102. package/dist/ui/assets/transformers-env-6vj5CcH9.js +1 -0
  103. package/dist/ui/assets/transformers-env-CCpYiaIa.js +1 -0
  104. package/dist/ui/assets/transformers.web-C9_H_wuQ.js +37 -0
  105. package/dist/ui/assets/transformers.web-DJfCkvxA.js +43 -0
  106. package/dist/ui/assets/{tray-leave-runtime--Ue08Cke.js → tray-leave-runtime-CdAgBa02.js} +1 -1
  107. package/dist/ui/assets/upgrade-detection--E7KkpNj.js +1 -0
  108. package/dist/ui/assets/voice-reply-BdYE1gSs.js +1 -0
  109. package/dist/ui/assets/{wc-attach-xs9Fh-R8.js → wc-attach-DAWHF0q6.js} +3 -3
  110. package/dist/ui/assets/{wc-detached-ux_E6SNJ.js → wc-detached-DaE992Vl.js} +1 -1
  111. package/dist/ui/assets/wc-extension-CI60x7Bm.js +2 -0
  112. package/dist/ui/assets/{wc-live-DHS3FYU1.js → wc-live-C_qPXh6O.js} +11 -11
  113. package/dist/ui/assets/wc-nav-Fk2p4da7.js +2 -0
  114. package/dist/ui/assets/wc-onboarding-CKZm1pcF.js +2 -0
  115. package/dist/ui/assets/wc-placeholder-DcxEXlT1.js +4 -0
  116. package/dist/ui/assets/{wc-settings-DiYFz75I.js → wc-settings-CrD6Tm6Z.js} +3 -3
  117. package/dist/ui/assets/{wc-shell-9F74yNEh.js → wc-shell-DPYESGkK.js} +233 -110
  118. package/dist/ui/assets/wc-sprinkles-DEfLhO36.js +2 -0
  119. package/dist/ui/assets/wc-tray-CP8sez4_.js +5 -0
  120. package/dist/ui/assets/wc-voice-erm0EtRv.js +1 -0
  121. package/dist/ui/assets/welcome-detection-Cr8mNEkt.js +1 -0
  122. package/dist/ui/assets/whisper-session-DwkDWttW.js +2 -0
  123. package/dist/ui/assets/xai-grok-BpmkOGg0.js +1 -0
  124. package/dist/ui/assets/xai-grok-CUqytO26.js +1 -0
  125. package/dist/ui/index.html +15 -1
  126. package/dist/ui/packages/webapp/index.html +15 -1
  127. package/package.json +1 -1
  128. package/dist/ui/assets/adobe-B4ZijlN3.js +0 -1
  129. package/dist/ui/assets/adobe-CXtz_LR-.js +0 -2
  130. package/dist/ui/assets/azure-openai-C-3E46Ld.js +0 -1
  131. package/dist/ui/assets/azure-openai-DTW6COMC.js +0 -1
  132. package/dist/ui/assets/azure-openai-responses-CdvI3ZMk.js +0 -1
  133. package/dist/ui/assets/dip-_QvZN8wj.js +0 -1
  134. package/dist/ui/assets/esp8266-91jA_HHD.js +0 -1
  135. package/dist/ui/assets/fs-C3bDUkXJ.js +0 -2
  136. package/dist/ui/assets/github-CPCc-EUr.js +0 -1
  137. package/dist/ui/assets/github-DxSzH6PI.js +0 -2
  138. package/dist/ui/assets/github-copilot-BSdH-X0I.js +0 -1
  139. package/dist/ui/assets/github-copilot-C0PA1-T1.js +0 -2
  140. package/dist/ui/assets/google-Cp_gRCg5.js +0 -1
  141. package/dist/ui/assets/google-shared-BoLRjUxb.js +0 -11
  142. package/dist/ui/assets/google-vertex-IdSaJxmx.js +0 -1
  143. package/dist/ui/assets/hosted-config-apply-CizDb9Vw.js +0 -1
  144. package/dist/ui/assets/legacy-styles-Bt2Mk3g2.js +0 -2
  145. package/dist/ui/assets/magick-wasm-BCSDiya9.js +0 -1
  146. package/dist/ui/assets/main-D7K1MTaQ.js +0 -88
  147. package/dist/ui/assets/main-cherry-CXrrVAC-.js +0 -1
  148. package/dist/ui/assets/mime-types-BG9Gw1bq.js +0 -1
  149. package/dist/ui/assets/mount-BYWcec4u.js +0 -2
  150. package/dist/ui/assets/mount-id-Cy4nG68v.js +0 -1
  151. package/dist/ui/assets/mount-picker-popup-B4U0fkZK.js +0 -1
  152. package/dist/ui/assets/new-session-C8X_CG95.js +0 -1
  153. package/dist/ui/assets/oauth-bootstrap-DIqfOl-7.js +0 -2
  154. package/dist/ui/assets/oauth-service-CmHwn7zK.js +0 -1
  155. package/dist/ui/assets/onboarding-orchestrator-DSR8Msku.js +0 -1
  156. package/dist/ui/assets/openai-codex-Bnd4L2L7.js +0 -1
  157. package/dist/ui/assets/openai-codex-DkqkFtKq.js +0 -1
  158. package/dist/ui/assets/openai-completions-CnLJNyQk.js +0 -5
  159. package/dist/ui/assets/openai-responses-TN943MT8.js +0 -1
  160. package/dist/ui/assets/panel-rpc-Bcvr75SR.js +0 -1
  161. package/dist/ui/assets/panel-rpc-handlers-BgzkmaOE.js +0 -2
  162. package/dist/ui/assets/provider-DQ7BvBZw.js +0 -2
  163. package/dist/ui/assets/provider-settings-VV6aNiP5.js +0 -99
  164. package/dist/ui/assets/provider-store-access-BGKXkdbd.js +0 -1
  165. package/dist/ui/assets/provider-store-access-Vtg1yxDc.js +0 -1
  166. package/dist/ui/assets/provider-tWBv0sFX.js +0 -1
  167. package/dist/ui/assets/quick-llm-DdZDN1QH.js +0 -1
  168. package/dist/ui/assets/remote-cdp-transport-B3-CFmk-.js +0 -1
  169. package/dist/ui/assets/secret-env-CkbRu-AG.js +0 -1
  170. package/dist/ui/assets/session-freezer-JMR8P1Lt.js +0 -1
  171. package/dist/ui/assets/setup-sprinkle-exec-ByJwHfyz.js +0 -1
  172. package/dist/ui/assets/setup-sudo-DPXnK0Zw.js +0 -1
  173. package/dist/ui/assets/slicc-editor-BxRqmU98.js +0 -12
  174. package/dist/ui/assets/sprinkle-manager-CqLTFoc9.js +0 -1
  175. package/dist/ui/assets/sync-dialog-C1-e9vyv.js +0 -1
  176. package/dist/ui/assets/tray-runtime-config-BRnpyDNS.js +0 -1
  177. package/dist/ui/assets/upgrade-detection-CHRBJqBB.js +0 -1
  178. package/dist/ui/assets/wc-extension-BLxY1h5k.js +0 -2
  179. package/dist/ui/assets/wc-nav-BZZe3rw8.js +0 -2
  180. package/dist/ui/assets/wc-onboarding-Cz9h4OE8.js +0 -2
  181. package/dist/ui/assets/wc-placeholder-CO111fjo.js +0 -4
  182. package/dist/ui/assets/wc-sprinkles-CUllz5Rn.js +0 -2
  183. package/dist/ui/assets/wc-tray-DnIxlO0o.js +0 -5
  184. package/dist/ui/assets/wc-voice-DyAmRENA.js +0 -1
  185. package/dist/ui/assets/welcome-detection-D-eB9s6-.js +0 -1
  186. package/dist/ui/assets/xai-grok-BNfjuAeJ.js +0 -1
  187. package/dist/ui/assets/xai-grok-D8Dda6Qy.js +0 -1
  188. /package/dist/ui/assets/{dist-C6lFkA1A.js → dist-C6lFkA1A2.js} +0 -0
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/tokens-Drbn7djl.css","assets/base-DmaCA25W.css","assets/dialog-DnPdZfH5.css","assets/dips-DsUu7NzC.css","assets/sprinkle-components-Z-5QHGGU.css"])))=>i.map(i=>d[i]);
2
+ import{t as e}from"./preload-helper-zJ_50EbN.js";async function t(){await e(()=>Promise.resolve({}),__vite__mapDeps([0])),await e(()=>Promise.resolve({}),__vite__mapDeps([1])),await e(()=>Promise.resolve({}),__vite__mapDeps([2]))}async function n(){await e(()=>Promise.resolve({}),__vite__mapDeps([0])),await e(()=>Promise.resolve({}),__vite__mapDeps([2]))}async function r(){await e(()=>Promise.resolve({}),__vite__mapDeps([0])),await e(()=>Promise.resolve({}),__vite__mapDeps([3]))}async function i(){await e(()=>Promise.resolve({}),__vite__mapDeps([0])),await e(()=>Promise.resolve({}),__vite__mapDeps([4]))}export{r as loadDipStyles,n as loadLegacyDialogStyles,t as loadLegacyStyles,i as loadSprinkleStyles};
@@ -1 +1 @@
1
- import{t as e}from"./logger-LESFN7Hj.js";import{h as t,m as n,n as r,r as i,t as a}from"./kernel-worker-DpRMAeb1.js";const o=e(`lick-ws-bridge`);function s(e){if(e.stopped)return;let t;try{t=e.wsFactory(e.wsUrl)}catch(t){o.error(`Failed to construct lick WebSocket`,{url:e.wsUrl,error:t instanceof Error?t.message:String(t)}),c(e,`construct-threw`);return}e.socket=t,t.onopen=()=>{e.consecutiveFailures>0?o.info(`Lick WebSocket recovered`,{attempts:e.consecutiveFailures}):o.info(`Lick WebSocket connected`),e.consecutiveFailures=0,e.unrecoverableSignalled=!1},t.onmessage=n=>{u(e,t,n.data).catch(e=>{let t=typeof n.data==`string`?n.data.slice(0,200):`[non-string payload]`;o.error(`Failed to process lick message`,{error:e instanceof Error?e.message:String(e),preview:t})})},t.onclose=n=>{if(e.socket===t&&(e.socket=null),e.stopped)return;let r=n.reason?` reason=${JSON.stringify(n.reason)}`:``;c(e,`disconnected code=${n.code}${r}`)},t.onerror=t=>{let n=t.target;o.error(`Lick WebSocket error`,{url:e.wsUrl,readyState:n?.readyState,eventType:t.type})}}function c(e,t){if(e.reconnectHandle!=null){o.debug(`Lick WS failure during pending reconnect — keeping existing timer`,{cause:t});return}e.consecutiveFailures++;let n=Math.min(e.baseDelay*2**(e.consecutiveFailures-1),6e4),r={url:e.wsUrl,attempt:e.consecutiveFailures,cause:t,retryInMs:n};if(e.consecutiveFailures>=3?o.error(`Lick WebSocket still down`,r):o.warn(`Lick WebSocket down`,r),e.consecutiveFailures===20&&!e.unrecoverableSignalled){e.unrecoverableSignalled=!0;try{e.lickManager.emitEvent({type:`session-reload`,targetScoop:void 0,timestamp:new Date().toISOString(),body:{reason:`lick-ws-bridge-down`,url:e.wsUrl,attempts:e.consecutiveFailures}})}catch(e){o.error(`Failed to emit lick-ws-bridge-down signal`,{error:e instanceof Error?e.message:String(e)})}}l(e,n)}function l(e,t){e.stopped||e.reconnectHandle!=null||(e.reconnectHandle=e.setTimer(()=>{e.reconnectHandle=null,s(e)},t))}async function u(e,t,n){let r=JSON.parse(typeof n==`string`?n:String(n));if(r.requestId){let n=r.requestId,i=await p(e,r,n);if(e.stopped||e.socket!==t||t.readyState!==1){o.warn(`Lick reply dropped — socket changed/closed mid-request`,{type:r.type,requestId:n});return}try{t.send(JSON.stringify(i))}catch(e){o.error(`ws.send() failed delivering lick reply`,{type:r.type,requestId:n,error:e instanceof Error?e.message:String(e)})}return}if(r.type===`webhook_event`){d(e.lickManager,r);return}r.type===`navigate_event`&&f(e.lickManager,r)}function d(e,t){let n=typeof t.webhookId==`string`?t.webhookId:null;if(!n){o.error(`Malformed webhook_event from lick-ws`,{receivedKeys:Object.keys(t)});return}let r=t.headers&&typeof t.headers==`object`?t.headers:{};try{e.handleWebhookEvent(n,r,t.body)}catch(e){o.error(`Webhook event dispatch failed`,{webhookId:n,error:e instanceof Error?e.message:String(e)})}}function f(e,t){let n=typeof t.verb==`string`?t.verb:null,r=typeof t.target==`string`?t.target:null,i=typeof t.url==`string`&&t.url.length>0?t.url:null;if(n!==`handoff`&&n!==`upskill`||!r||!i){o.debug(`navigate_event dropped — invalid payload`,{hasVerb:!!n,hasTarget:!!r,hasUrl:!!i});return}let a={url:i,verb:n,target:r};typeof t.instruction==`string`&&(a.instruction=t.instruction),typeof t.branch==`string`&&(a.branch=t.branch),typeof t.path==`string`&&(a.path=t.path),typeof t.title==`string`&&(a.title=t.title),e.emitEvent({type:`navigate`,navigateUrl:i,targetScoop:void 0,timestamp:typeof t.timestamp==`string`?t.timestamp:new Date().toISOString(),body:a})}async function p(e,t,r){let{lickManager:i}=e;try{switch(t.type){case`list_webhooks`:return{type:`response`,requestId:r,data:i.listWebhooks().map(t=>({...t,url:m(e,t.id)}))};case`create_webhook`:{let n=await i.createWebhook(t.name||`default`,t.scoop,t.filter);return{type:`response`,requestId:r,data:{...n,url:m(e,n.id)}}}case`delete_webhook`:return await i.deleteWebhook(t.id)?{type:`response`,requestId:r,data:{ok:!0}}:{type:`response`,requestId:r,data:{error:`Webhook not found`}};case`list_crontasks`:return{type:`response`,requestId:r,data:i.listCronTasks()};case`create_crontask`:if(!t.name)throw Error(`name is required`);if(!t.cron)throw Error(`cron is required`);return{type:`response`,requestId:r,data:await i.createCronTask(t.name,t.cron,t.scoop,t.filter)};case`delete_crontask`:return await i.deleteCronTask(t.id)?{type:`response`,requestId:r,data:{ok:!0}}:{type:`response`,requestId:r,data:{error:`Cron task not found`}};case`tray_status`:{let e=n();return{type:`response`,requestId:r,data:{state:e.state,joinUrl:e.session?.joinUrl??null,workerBaseUrl:e.session?.workerBaseUrl??null,trayId:e.session?.trayId??null}}}default:return{type:`response`,requestId:r,error:`Unknown request type: ${t.type}`}}}catch(e){return{type:`response`,requestId:r,error:e instanceof Error?e.message:String(e)}}}function m(e,n){let a=t().session;return a?.webhookUrl?r(a.webhookUrl,n):i(e.options.locationHref,n)}function h(e){if(e.stopped)return;e.stopped=!0,e.reconnectHandle!=null&&(e.clearTimer(e.reconnectHandle),e.reconnectHandle=null);let t=e.socket;if(e.socket=null,t)try{t.close()}catch(e){t.readyState!==3&&t.readyState!==2&&o.warn(`Lick socket close() threw before terminal state`,{readyState:t.readyState,error:e instanceof Error?e.message:String(e)})}}function g(e,t){try{new URL(t.locationHref)}catch(e){throw Error(`startLickWsBridge: invalid locationHref ${JSON.stringify(t.locationHref)}: ${e instanceof Error?e.message:String(e)}`)}let n={lickManager:e,options:t,wsUrl:a(t.locationHref),baseDelay:t.reconnectDelayMs??3e3,wsFactory:t.webSocketFactory??(e=>new WebSocket(e)),setTimer:t.setTimeoutFn??setTimeout,clearTimer:t.clearTimeoutFn??clearTimeout,stopped:!1,socket:null,reconnectHandle:null,consecutiveFailures:0,unrecoverableSignalled:!1};return s(n),{stop(){h(n)}}}export{g as startLickWsBridge};
1
+ import{t as e}from"./logger-LESFN7Hj.js";import{_ as t,g as n,n as r,r as i,t as a}from"./kernel-worker-ic1QU0mg.js";const o=e(`lick-ws-bridge`);function s(e){if(e.stopped)return;let t;try{t=e.wsFactory(e.wsUrl)}catch(t){o.error(`Failed to construct lick WebSocket`,{url:e.wsUrl,error:t instanceof Error?t.message:String(t)}),c(e,`construct-threw`);return}e.socket=t,t.onopen=()=>{e.consecutiveFailures>0?o.info(`Lick WebSocket recovered`,{attempts:e.consecutiveFailures}):o.info(`Lick WebSocket connected`),e.consecutiveFailures=0,e.unrecoverableSignalled=!1},t.onmessage=n=>{u(e,t,n.data).catch(e=>{let t=typeof n.data==`string`?n.data.slice(0,200):`[non-string payload]`;o.error(`Failed to process lick message`,{error:e instanceof Error?e.message:String(e),preview:t})})},t.onclose=n=>{if(e.socket===t&&(e.socket=null),e.stopped)return;let r=n.reason?` reason=${JSON.stringify(n.reason)}`:``;c(e,`disconnected code=${n.code}${r}`)},t.onerror=t=>{let n=t.target;o.error(`Lick WebSocket error`,{url:e.wsUrl,readyState:n?.readyState,eventType:t.type})}}function c(e,t){if(e.reconnectHandle!=null){o.debug(`Lick WS failure during pending reconnect — keeping existing timer`,{cause:t});return}e.consecutiveFailures++;let n=Math.min(e.baseDelay*2**(e.consecutiveFailures-1),6e4),r={url:e.wsUrl,attempt:e.consecutiveFailures,cause:t,retryInMs:n};if(e.consecutiveFailures>=3?o.error(`Lick WebSocket still down`,r):o.warn(`Lick WebSocket down`,r),e.consecutiveFailures===20&&!e.unrecoverableSignalled){e.unrecoverableSignalled=!0;try{e.lickManager.emitEvent({type:`session-reload`,targetScoop:void 0,timestamp:new Date().toISOString(),body:{reason:`lick-ws-bridge-down`,url:e.wsUrl,attempts:e.consecutiveFailures}})}catch(e){o.error(`Failed to emit lick-ws-bridge-down signal`,{error:e instanceof Error?e.message:String(e)})}}l(e,n)}function l(e,t){e.stopped||e.reconnectHandle!=null||(e.reconnectHandle=e.setTimer(()=>{e.reconnectHandle=null,s(e)},t))}async function u(e,t,n){let r=JSON.parse(typeof n==`string`?n:String(n));if(r.requestId){let n=r.requestId,i=await p(e,r,n);if(e.stopped||e.socket!==t||t.readyState!==1){o.warn(`Lick reply dropped — socket changed/closed mid-request`,{type:r.type,requestId:n});return}try{t.send(JSON.stringify(i))}catch(e){o.error(`ws.send() failed delivering lick reply`,{type:r.type,requestId:n,error:e instanceof Error?e.message:String(e)})}return}if(r.type===`webhook_event`){d(e.lickManager,r);return}r.type===`navigate_event`&&f(e.lickManager,r)}function d(e,t){let n=typeof t.webhookId==`string`?t.webhookId:null;if(!n){o.error(`Malformed webhook_event from lick-ws`,{receivedKeys:Object.keys(t)});return}let r=t.headers&&typeof t.headers==`object`?t.headers:{};try{e.handleWebhookEvent(n,r,t.body)}catch(e){o.error(`Webhook event dispatch failed`,{webhookId:n,error:e instanceof Error?e.message:String(e)})}}function f(e,t){let n=typeof t.verb==`string`?t.verb:null,r=typeof t.target==`string`?t.target:null,i=typeof t.url==`string`&&t.url.length>0?t.url:null;if(n!==`handoff`&&n!==`upskill`||!r||!i){o.debug(`navigate_event dropped — invalid payload`,{hasVerb:!!n,hasTarget:!!r,hasUrl:!!i});return}let a={url:i,verb:n,target:r};typeof t.instruction==`string`&&(a.instruction=t.instruction),typeof t.branch==`string`&&(a.branch=t.branch),typeof t.path==`string`&&(a.path=t.path),typeof t.title==`string`&&(a.title=t.title),e.emitEvent({type:`navigate`,navigateUrl:i,targetScoop:void 0,timestamp:typeof t.timestamp==`string`?t.timestamp:new Date().toISOString(),body:a})}async function p(e,t,r){let{lickManager:i}=e;try{switch(t.type){case`list_webhooks`:return{type:`response`,requestId:r,data:i.listWebhooks().map(t=>({...t,url:m(e,t.id)}))};case`create_webhook`:{let n=await i.createWebhook(t.name||`default`,t.scoop,t.filter);return{type:`response`,requestId:r,data:{...n,url:m(e,n.id)}}}case`delete_webhook`:return await i.deleteWebhook(t.id)?{type:`response`,requestId:r,data:{ok:!0}}:{type:`response`,requestId:r,data:{error:`Webhook not found`}};case`list_crontasks`:return{type:`response`,requestId:r,data:i.listCronTasks()};case`create_crontask`:if(!t.name)throw Error(`name is required`);if(!t.cron)throw Error(`cron is required`);return{type:`response`,requestId:r,data:await i.createCronTask(t.name,t.cron,t.scoop,t.filter)};case`delete_crontask`:return await i.deleteCronTask(t.id)?{type:`response`,requestId:r,data:{ok:!0}}:{type:`response`,requestId:r,data:{error:`Cron task not found`}};case`tray_status`:{let e=n();return{type:`response`,requestId:r,data:{state:e.state,joinUrl:e.session?.joinUrl??null,workerBaseUrl:e.session?.workerBaseUrl??null,trayId:e.session?.trayId??null}}}default:return{type:`response`,requestId:r,error:`Unknown request type: ${t.type}`}}}catch(e){return{type:`response`,requestId:r,error:e instanceof Error?e.message:String(e)}}}function m(e,n){let a=t().session;return a?.webhookUrl?r(a.webhookUrl,n):i(e.options.locationHref,n)}function h(e){if(e.stopped)return;e.stopped=!0,e.reconnectHandle!=null&&(e.clearTimer(e.reconnectHandle),e.reconnectHandle=null);let t=e.socket;if(e.socket=null,t)try{t.close()}catch(e){t.readyState!==3&&t.readyState!==2&&o.warn(`Lick socket close() threw before terminal state`,{readyState:t.readyState,error:e instanceof Error?e.message:String(e)})}}function g(e,t){try{new URL(t.locationHref)}catch(e){throw Error(`startLickWsBridge: invalid locationHref ${JSON.stringify(t.locationHref)}: ${e instanceof Error?e.message:String(e)}`)}let n={lickManager:e,options:t,wsUrl:a(t.locationHref),baseDelay:t.reconnectDelayMs??3e3,wsFactory:t.webSocketFactory??(e=>new WebSocket(e)),setTimer:t.setTimeoutFn??setTimeout,clearTimer:t.clearTimeoutFn??clearTimeout,stopped:!1,socket:null,reconnectHandle:null,consecutiveFailures:0,unrecoverableSignalled:!1};return s(n),{stop(){h(n)}}}export{g as startLickWsBridge};
@@ -1,2 +1,2 @@
1
- import{Ot as e,l as t,nt as n,xt as r}from"./main-D7K1MTaQ.js";import{streamOpenAICompletions as i,streamSimpleOpenAICompletions as a}from"./openai-completions-CnLJNyQk.js";var o=n(`local-llm`),s=`local-llm`,c=`local`,l=`${s}-unconfigured`,u={id:s,name:`Local LLM (OpenAI-compatible)`,description:[`Connect to any OpenAI-compatible local model server.`,``,`Common base URLs:`,` • Ollama http://localhost:11434/v1`,` • LM Studio http://localhost:1234/v1`,` • llama.cpp http://localhost:8080/v1`,` • vLLM http://localhost:8000/v1`,` • mlx_lm http://localhost:8080/v1`,` • Jan http://localhost:1337/v1`,``,`Ollama needs OLLAMA_ORIGINS=* (or chrome-extension://*) so the`,`browser can reach it. macOS: launchctl setenv OLLAMA_ORIGINS "*".`].join(`
2
- `),requiresApiKey:!1,optionalApiKey:!0,apiKeyPlaceholder:`Leave empty for local servers, or paste a key for hosted endpoints`,apiKeyEnvVar:`LOCAL_LLM_API_KEY`,requiresBaseUrl:!0,baseUrlPlaceholder:`http://localhost:11434/v1`,baseUrlDescription:`Ollama: 11434 • LM Studio: 1234 • llama.cpp/mlx: 8080 • vLLM: 8000 • Jan: 1337. Trailing /v1 required.`,requiresDeployment:!0,deploymentPlaceholder:`llama3.1:8b, qwen2.5-coder:14b`,deploymentDescription:`Comma-separated model IDs from your server. List them with: curl <baseUrl>/models | jq -r .data[].id`,getModelIds:()=>{let e=d(t(s));return e.length===0?[{id:l,name:`Local LLM (set base URL + model IDs in Settings)`,api:`openai`}]:e.map(e=>({id:e,name:e,api:`openai`,input:[`text`],context_window:32e3,max_tokens:4096}))}};function d(e){return e?e.split(`,`).map(e=>e.trim()).filter(Boolean):[]}var f=`openai-completions`,p=`${s}-openai`;function m(e){return{...e,api:f}}function h(e){let t=e??{};return!t.apiKey||t.apiKey.length===0?{...t,apiKey:c}:t}var g=(e,t,n={})=>e.id===l?v(e,`Local LLM is not configured. Set base URL and model IDs in Settings.`):e.baseUrl?i(m(e),t,h(n)):v(e,`Local LLM base URL is required (e.g. http://localhost:11434/v1).`),_=(e,t,n)=>e.id===l?v(e,`Local LLM is not configured. Set base URL and model IDs in Settings.`):e.baseUrl?a(m(e),t,h(n)):v(e,`Local LLM base URL is required (e.g. http://localhost:11434/v1).`);function v(e,t){let n=r(),i={role:`assistant`,content:[],api:e.api,provider:e.provider,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`error`,errorMessage:t,timestamp:Date.now()};return queueMicrotask(()=>{n.push({type:`error`,reason:`error`,error:i}),n.end()}),n}function y(){e({api:p,stream:g,streamSimple:_})}function b(e){try{let t=new URL(e);return`${t.protocol}//${t.host}`}catch{return e.replace(/\/v1\/?$/,``).replace(/\/+$/,``)}}function x(e){let t=e.replace(/\/+$/,``);try{let e=new URL(t);if(e.pathname===``||e.pathname===`/`)return`${t}/v1`}catch{}return t}async function S(e,t,n){let r=`${x(e)}/models`,i={Accept:`application/json`};t&&t.length>0&&(i.Authorization=`Bearer ${t}`);let a=await fetch(r,{method:`GET`,headers:i,signal:n});if(!a.ok)throw Error(`GET ${r} -> ${a.status} ${a.statusText}`);let o=await a.json();return Array.isArray(o.data)?o.data.map(e=>e.id??``).filter(e=>e.length>0):[]}async function C(e,t){let n=b(e),r=await T(`${n}/api/version`,t);if(r&&typeof r.version==`string`)return{kind:`ollama`,version:r.version};let i=await T(`${n}/api/v0/models`,t);if(i&&i.object===`list`)return{kind:`lmstudio`};let a=await T(`${n}/props`,t);if(a&&`build_info`in a)return{kind:`llamacpp`,version:a.build_info?.version};let o=w(e);return o===`11434`?{kind:`ollama`}:o===`1234`?{kind:`lmstudio`}:o===`8000`?{kind:`vllm`}:o===`1337`?{kind:`jan`}:{kind:`unknown`}}function w(e){try{return new URL(e).port||null}catch{return null}}async function T(e,t){try{let n=await fetch(e,{method:`GET`,signal:t});return n.ok?await n.json():null}catch{return null}}async function E(e,t,n){let r={kind:`unknown`};try{r=await C(e,n)}catch{}try{let i=await S(e,t,n);return{ok:!0,runtime:r,models:i}}catch(t){let n=t instanceof Error?t.message:String(t),i=D(n,r.kind);return o.warn(`verifyConnection failed`,{baseUrl:e,runtime:r.kind,message:n}),{ok:!1,runtime:r,models:[],error:i}}}function D(e,t){let n=e.toLowerCase();return n.includes(`failed to fetch`)||n.includes(`networkerror`)?t===`ollama`?{kind:`cors`,message:e,hint:'Ollama rejects requests from non-localhost origins by default. Set OLLAMA_ORIGINS=* (or chrome-extension://*) and restart Ollama. macOS: `launchctl setenv OLLAMA_ORIGINS "*"` then quit and relaunch the Ollama app.'}:{kind:`connection`,message:e,hint:`Server unreachable. Check the URL and that the server is running.`}:n.includes(` 401`)||n.includes(` 403`)?{kind:`auth`,message:e,hint:`Server returned an auth error. If your endpoint requires a key, set it in Settings.`}:/-> \d{3} /.test(e)?{kind:`http`,message:e}:{kind:`unknown`,message:e}}export{u as config,C as detectRuntime,S as discoverModels,b as originOf,y as register,E as verifyConnection};
1
+ import{u as e}from"./dist-CSwuvPa6.js";import{n as t}from"./event-stream-Cs43PhOB.js";import{b as n}from"./account-store-BcAPWTGv.js";import{t as r}from"./logger-DDBAeTLF.js";import{streamOpenAICompletions as i,streamSimpleOpenAICompletions as a}from"./openai-completions-Dry_mhhJ.js";var o=r(`local-llm`),s=`local-llm`,c=`local`,l=`${s}-unconfigured`,u={id:s,name:`Local LLM (OpenAI-compatible)`,description:[`Connect to any OpenAI-compatible local model server.`,``,`Common base URLs:`,` • Ollama http://localhost:11434/v1`,` • LM Studio http://localhost:1234/v1`,` • llama.cpp http://localhost:8080/v1`,` • vLLM http://localhost:8000/v1`,` • mlx_lm http://localhost:8080/v1`,` • Jan http://localhost:1337/v1`,``,`Ollama needs OLLAMA_ORIGINS=* (or chrome-extension://*) so the`,`browser can reach it. macOS: launchctl setenv OLLAMA_ORIGINS "*".`].join(`
2
+ `),requiresApiKey:!1,optionalApiKey:!0,apiKeyPlaceholder:`Leave empty for local servers, or paste a key for hosted endpoints`,apiKeyEnvVar:`LOCAL_LLM_API_KEY`,requiresBaseUrl:!0,baseUrlPlaceholder:`http://localhost:11434/v1`,baseUrlDescription:`Ollama: 11434 • LM Studio: 1234 • llama.cpp/mlx: 8080 • vLLM: 8000 • Jan: 1337. Trailing /v1 required.`,requiresDeployment:!0,deploymentPlaceholder:`llama3.1:8b, qwen2.5-coder:14b`,deploymentDescription:`Comma-separated model IDs from your server. List them with: curl <baseUrl>/models | jq -r .data[].id`,getModelIds:()=>{let e=d(n(s));return e.length===0?[{id:l,name:`Local LLM (set base URL + model IDs in Settings)`,api:`openai`}]:e.map(e=>({id:e,name:e,api:`openai`,input:[`text`],context_window:32e3,max_tokens:4096}))}};function d(e){return e?e.split(`,`).map(e=>e.trim()).filter(Boolean):[]}var f=`openai-completions`,p=`${s}-openai`;function m(e){return{...e,api:f}}function h(e){let t=e??{};return!t.apiKey||t.apiKey.length===0?{...t,apiKey:c}:t}var g=(e,t,n={})=>e.id===l?v(e,`Local LLM is not configured. Set base URL and model IDs in Settings.`):e.baseUrl?i(m(e),t,h(n)):v(e,`Local LLM base URL is required (e.g. http://localhost:11434/v1).`),_=(e,t,n)=>e.id===l?v(e,`Local LLM is not configured. Set base URL and model IDs in Settings.`):e.baseUrl?a(m(e),t,h(n)):v(e,`Local LLM base URL is required (e.g. http://localhost:11434/v1).`);function v(e,n){let r=t(),i={role:`assistant`,content:[],api:e.api,provider:e.provider,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`error`,errorMessage:n,timestamp:Date.now()};return queueMicrotask(()=>{r.push({type:`error`,reason:`error`,error:i}),r.end()}),r}function y(){e({api:p,stream:g,streamSimple:_})}function b(e){try{let t=new URL(e);return`${t.protocol}//${t.host}`}catch{return e.replace(/\/v1\/?$/,``).replace(/\/+$/,``)}}function x(e){let t=e.replace(/\/+$/,``);try{let e=new URL(t);if(e.pathname===``||e.pathname===`/`)return`${t}/v1`}catch{}return t}async function S(e,t,n){let r=`${x(e)}/models`,i={Accept:`application/json`};t&&t.length>0&&(i.Authorization=`Bearer ${t}`);let a=await fetch(r,{method:`GET`,headers:i,signal:n});if(!a.ok)throw Error(`GET ${r} -> ${a.status} ${a.statusText}`);let o=await a.json();return Array.isArray(o.data)?o.data.map(e=>e.id??``).filter(e=>e.length>0):[]}async function C(e,t){let n=b(e),r=await T(`${n}/api/version`,t);if(r&&typeof r.version==`string`)return{kind:`ollama`,version:r.version};let i=await T(`${n}/api/v0/models`,t);if(i&&i.object===`list`)return{kind:`lmstudio`};let a=await T(`${n}/props`,t);if(a&&`build_info`in a)return{kind:`llamacpp`,version:a.build_info?.version};let o=w(e);return o===`11434`?{kind:`ollama`}:o===`1234`?{kind:`lmstudio`}:o===`8000`?{kind:`vllm`}:o===`1337`?{kind:`jan`}:{kind:`unknown`}}function w(e){try{return new URL(e).port||null}catch{return null}}async function T(e,t){try{let n=await fetch(e,{method:`GET`,signal:t});return n.ok?await n.json():null}catch{return null}}async function E(e,t,n){let r={kind:`unknown`};try{r=await C(e,n)}catch{}try{let i=await S(e,t,n);return{ok:!0,runtime:r,models:i}}catch(t){let n=t instanceof Error?t.message:String(t),i=D(n,r.kind);return o.warn(`verifyConnection failed`,{baseUrl:e,runtime:r.kind,message:n}),{ok:!1,runtime:r,models:[],error:i}}}function D(e,t){let n=e.toLowerCase();return n.includes(`failed to fetch`)||n.includes(`networkerror`)?t===`ollama`?{kind:`cors`,message:e,hint:'Ollama rejects requests from non-localhost origins by default. Set OLLAMA_ORIGINS=* (or chrome-extension://*) and restart Ollama. macOS: `launchctl setenv OLLAMA_ORIGINS "*"` then quit and relaunch the Ollama app.'}:{kind:`connection`,message:e,hint:`Server unreachable. Check the URL and that the server is running.`}:n.includes(` 401`)||n.includes(` 403`)?{kind:`auth`,message:e,hint:`Server returned an auth error. If your endpoint requires a key, set it in Settings.`}:/-> \d{3} /.test(e)?{kind:`http`,message:e}:{kind:`unknown`,message:e}}export{u as config,C as detectRuntime,S as discoverModels,b as originOf,y as register,E as verifyConnection};
@@ -0,0 +1 @@
1
+ var e={DEBUG:0,INFO:1,WARN:2,ERROR:3},t=e.ERROR,n=10,r=6e4;function i(e,t){let n=e;if(t.length>0)try{n+=` `+JSON.stringify(t)}catch{n+=` [unserializable]`}return n.replace(/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/gi,`<id>`).replace(/\b[0-9a-f]{8,}\b/gi,`<hex>`).replace(/\b\d{10,}\b/g,`<ts>`).replace(/\b\d+(\.\d+)?\b/g,`<n>`)}var a=class{entries=[];log(e,t,r,a,o){let s=i(a,o),c=Date.now();this.evict(c);let l=this.entries.find(e=>e.fingerprint===s&&e.level===r);if(l)return l.count++,!1;if(this.entries.length>=n){let e=this.entries.shift();this.flushEntry(e)}return this.entries.push({fingerprint:s,count:0,firstSeen:c,level:r,consoleFn:e,prefix:t,message:a}),!0}flush(){for(let e of this.entries)this.flushEntry(e);this.entries=[]}clear(){this.entries=[]}evict(e){for(;this.entries.length>0&&e-this.entries[0].firstSeen>r;){let e=this.entries.shift();this.flushEntry(e)}}flushEntry(e){e.count>0&&t<=e.level&&e.consoleFn(e.prefix,`(suppressed ${e.count} similar: "${e.message}")`)}},o=new Set;function s(n){let r=`[${n}]`,i=new a;o.add(i);function s(n){return(a,...o)=>{if(t>n)return;let s=n===e.DEBUG?console.debug:n===e.INFO?console.info:n===e.WARN?console.warn:console.error;i.log(s,r,n,a,o)&&s(r,a,...o)}}return{debug:s(e.DEBUG),info:s(e.INFO),warn:s(e.WARN),error:s(e.ERROR)}}export{s as t};
@@ -0,0 +1 @@
1
+ import{t as e}from"./preload-helper-zJ_50EbN.js";import{t}from"./cdn-url-builder-Cq7LLgru.js";import{t as n}from"./shared-B7TdM-Ik.js";var r={"image/jpeg":`JPEG`,"image/png":`PNG`,"image/gif":`GIF`,"image/webp":`WEBP`,"image/bmp":`BMP`,"image/tiff":`TIFF`,"image/avif":`AVIF`},i=null,a=t(`@imagemagick/magick-wasm`,`0.0.38`,`dist/`).toString(),o=typeof chrome<`u`&&!!chrome?.runtime?.id;async function s(){return i||=(async()=>{try{let t=await e(()=>import(`./dist-DElqKLgF.js`),[]);if(o){let e=chrome.runtime.getURL(`magick.wasm`),n=await fetch(e);if(!n.ok)throw Error(`Failed to fetch magick.wasm: ${n.status} ${n.statusText}`);let r=new Uint8Array(await n.arrayBuffer());await t.initializeImageMagick(r)}else{let e=n()?new URL(`/assets/index-BeMnZBAU.js`,``+import.meta.url).toString():a,r=new URL(`magick.wasm`,e);await t.initializeImageMagick(r)}return t}catch(e){throw i=null,e}})(),i}export{a as MAGICK_WASM_CDN,r as MIME_TO_MAGICK_FORMAT,s as getMagick,o as isExtension};
@@ -0,0 +1,22 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/oauth-service-CTlktxVj.js","assets/preload-helper-zJ_50EbN.js","assets/panel-rpc-DqT2FG7c.js","assets/chunk-aKtaBQYM.js","assets/wc-shell-DPYESGkK.js","assets/iconsAndAliases-Bzj1tGpU.js","assets/speech-GZe1rUoJ.js","assets/wc-shell-WkeczD9x.css","assets/oauth-bootstrap-B6wP6zi_.js","assets/account-store-BcAPWTGv.js","assets/dist-CSwuvPa6.js","assets/event-stream-Cs43PhOB.js","assets/json-parse-BUunmmNl.js","assets/__vite-browser-external-C7iut881.js","assets/context-compaction-DJF_qJZJ.js","assets/logger-DDBAeTLF.js","assets/src-DlEHAkLd.js","assets/bedrock-camp-D64i9rke.js","assets/transform-messages-DzB_lMo-.js","assets/tool-ui-YOPqzMmL.js","assets/legacy-styles-4PP74ISo.js","assets/connect-surface-D6ECkvh5.js","assets/wc-extension-CI60x7Bm.js","assets/wc-live-C_qPXh6O.js","assets/proxy-error-9UvXMpzG.js","assets/hid-device-registry-D2LsJCRr.js","assets/usb-operations-CkcrNzZw.js","assets/serial-port-registry-Bc4wlwED.js","assets/usb-device-registry-BP58Vi0S.js","assets/sprinkle-bridge-DrAUCEC_.js","assets/shared-B7TdM-Ik.js","assets/sprinkle-renderer-GiRRbdBx.js","assets/theme-BBwuyzvz.js","assets/wc-detached-DaE992Vl.js"])))=>i.map(i=>d[i]);
2
+ import{n as e}from"./chunk-aKtaBQYM.js";import"./modulepreload-polyfill-Dezn_h7o.js";import{t}from"./preload-helper-zJ_50EbN.js";import{A as n,B as r,C as i,D as a,E as o,F as s,H as c,I as l,K as u,L as d,M as f,N as p,O as m,P as h,R as g,S as _,T as v,U as y,V as b,_ as x,a as S,b as C,c as ee,d as w,f as te,g as ne,h as re,i as T,j as ie,k as ae,l as oe,m as se,n as ce,o as le,p as ue,s as de,t as fe,u as E,v as pe,w as me,x as he,y as D,z as ge}from"./account-store-BcAPWTGv.js";import{t as O}from"./logger-DDBAeTLF.js";import{n as _e}from"./clipboard-DgFtRQbq.js";function ve(){if(typeof chrome<`u`&&chrome?.runtime?.id)return;let e=new Blob([`
3
+ let lastPong = Date.now();
4
+ let frozen = false;
5
+ setInterval(() => {
6
+ postMessage({ type: 'ping' });
7
+ const elapsed = Date.now() - lastPong;
8
+ if (elapsed > 5000 && !frozen) {
9
+ frozen = true;
10
+ postMessage({ type: 'freeze-detected', elapsed });
11
+ }
12
+ }, 2000);
13
+ self.onmessage = (e) => {
14
+ if (e.data.type === 'pong') {
15
+ lastPong = Date.now();
16
+ if (frozen) {
17
+ frozen = false;
18
+ postMessage({ type: 'freeze-recovered' });
19
+ }
20
+ }
21
+ };
22
+ `],{type:`application/javascript`}),t=URL.createObjectURL(e),n=new Worker(t);URL.revokeObjectURL(t),n.onmessage=e=>{if(e.data.type===`ping`)n.postMessage({type:`pong`});else if(e.data.type===`freeze-detected`)console.error(`[freeze-watchdog] Main thread blocked for ${e.data.elapsed}ms — capturing trace on recovery`);else if(e.data.type===`freeze-recovered`){console.error(`[freeze-watchdog] Main thread recovered. Stack trace at recovery point:`),console.trace(`[freeze-watchdog] recovery stack`);let e=performance.getEntriesByType(`longtask`);e.length>0&&console.error(`[freeze-watchdog] Long tasks:`,e.map(e=>({duration:e.duration,startTime:e.startTime,name:e.name})))}},window.addEventListener(`beforeunload`,()=>{n.terminate()},{once:!0})}var k=O(`boot/sw-registration`);async function ye(){let e=(()=>{try{return new URL(window.location.href).searchParams.get(`connect`)===`1`}catch{return!1}})();if(`serviceWorker`in navigator&&e&&await be())return`reload-pending`;if(!(`serviceWorker`in navigator)||e)return`ready`;try{if(await navigator.serviceWorker.register(`/preview-sw.js`,{scope:`/preview/`}),k.info(`Preview SW registered`),!(typeof chrome<`u`&&chrome?.runtime?.id))try{await navigator.serviceWorker.register(`/llm-proxy-sw.js`,{scope:`/`}),k.info(`LLM-proxy SW registered`)}catch(e){k.error(`LLM-proxy SW registration failed — cross-origin LLM calls will hit CORS`,e)}if(navigator.serviceWorker.controller||await Promise.race([new Promise(e=>navigator.serviceWorker.addEventListener(`controllerchange`,()=>e(),{once:!0})),new Promise(e=>setTimeout(e,1500))]),!navigator.serviceWorker.controller&&!sessionStorage.getItem(`slicc-sw-reloaded`))return sessionStorage.setItem(`slicc-sw-reloaded`,`1`),k.info(`Reloading once to gain SW control`),location.reload(),`reload-pending`;sessionStorage.removeItem(`slicc-sw-reloaded`)}catch(e){k.error(`Preview SW registration failed — preview feature will not work`,e)}return`ready`}async function be(){try{let e=await navigator.serviceWorker.getRegistrations();if(await Promise.all(e.map(e=>e.unregister().catch(()=>!1))),navigator.serviceWorker.controller&&!sessionStorage.getItem(`slicc-connect-sw-cleared`))return sessionStorage.setItem(`slicc-connect-sw-cleared`,`1`),k.info(`connect mode: detaching from service worker (no proxy on worker origin)`),location.reload(),!0;sessionStorage.removeItem(`slicc-connect-sw-cleared`)}catch(e){k.error(`connect-mode SW cleanup failed`,e)}return!1}var A={state:`inactive`,joinUrl:null,trayId:null,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:0,lastAttachCode:null,connectingSince:null,lastError:null};function j(){return{...A}}var M=new Set;function N(){if(M.size!==0)for(let e of[...M])try{e({...A})}catch{}}function xe(e){A={...e},N()}function Se(e){A={...A,lastPingTime:e},N()}var P=`tray`,F=`trayWorkerUrl`,I=`lead`;function L(e){if(!e)return null;try{let t=new URL(e.trim());t.search=``,t.hash=``,t.pathname!==`/`&&(t.pathname=t.pathname.replace(/\/+$/,``)||`/`);let n=t.toString();return n.endsWith(`/`)?n.slice(0,-1):n}catch{return null}}function R(e){if(!e)return null;try{let t=new URL(e.trim());t.search=``,t.hash=``;let n=t.toString(),r=t.pathname.split(`/`).filter(Boolean);if(r.length<2||r.at(-2)!==`join`)return null;let[i,a,...o]=decodeURIComponent(r.at(-1)).split(`.`);if(!i||!a||o.length>0)return null;r.splice(-2,2),t.pathname=r.length>0?`/${r.join(`/`)}`:`/`;let s=L(t.toString());return s?{workerBaseUrl:s,trayId:i,joinUrl:n}:null}catch{return null}}function Ce(e,t){let n=new URL(e);return n.searchParams.delete(F),n.searchParams.delete(I),n.searchParams.set(P,t),n.toString()}var z=`slicc.trayWorkerBaseUrl`,B=`slicc.trayJoinUrl`,we=`https://www.sliccy.ai`;function Te(e,t){let n=L(e);if(!n)throw Error(`Invalid tray worker base URL: ${e}`);let r=t.replace(/^\/+/,``);return new URL(r,`${n}/`).toString()}function V(e){if(!e)return null;try{let t=new URL(e.trim());t.search=``,t.hash=``;let n=t.pathname.split(`/`).filter(Boolean),r=null;if(n.length>=2&&n.at(-2)===`tray`)r=decodeURIComponent(n.at(-1)),n.splice(-2,2),t.pathname=n.length>0?`/${n.join(`/`)}`:`/`;else if(n.length>=2&&n.at(-2)===`join`)return R(t.toString());let i=L(t.toString());return i?{workerBaseUrl:i,trayId:r,joinUrl:null}:null}catch{return null}}function H(e){let t=V(e);return t?.joinUrl?t:null}function U(e,t){let n=H(t);return n?(e.setItem(B,n.joinUrl),e.setItem(z,n.workerBaseUrl),n):null}function Ee(e){return!!H(e?.getItem(`slicc.trayJoinUrl`)??null)}function De(e,t){let n=L(e);if(!n)throw Error(`Invalid tray worker base URL: ${e}`);let r=t?.trim();return r?new URL(`tray/${encodeURIComponent(r)}`,`${n}/`).toString():n}function Oe(e,t,n){return Ce(e,De(t,n))}async function ke(e){let t=Me(e.locationHref);if(t)return e.storage&&(t.joinUrl&&e.storage.setItem(B,t.joinUrl),e.storage.setItem(z,t.workerBaseUrl)),t;let n=H(e.storage?.getItem(`slicc.trayJoinUrl`)??null);if(n)return e.storage&&e.storage.setItem(z,n.workerBaseUrl),n;let r=e.runtimeConfigFetcher?await Ne(e.runtimeConfigFetcher):null;if(r?.joinConfig)return e.storage&&(e.storage.setItem(B,r.joinConfig.joinUrl),e.storage.setItem(z,r.joinConfig.workerBaseUrl)),r.joinConfig;let i=r?.workerBaseUrl??null,a=L(e.storage?.getItem(`slicc.trayWorkerBaseUrl`)??null),o=L(e.envBaseUrl??null),s=L(e.defaultWorkerBaseUrl??null),c=i??a??o??s;return c?(e.storage&&e.storage.setItem(z,c),{workerBaseUrl:c,trayId:null,joinUrl:null}):null}async function Ae(e){return(await ke(e))?.workerBaseUrl??null}async function je(e=fetch){try{let t=await e(`/api/runtime-config`,{cache:`no-store`});return t.ok?await t.json():null}catch{return null}}function Me(e){try{let t=new URL(e),n=V(t.searchParams.get(P));if(n)return n;let r=V(t.searchParams.get(I));if(r)return r;let i=L(t.searchParams.get(F));return i?{workerBaseUrl:i,trayId:null,joinUrl:null}:R(e)||null}catch{return null}}async function Ne(e){let t=await e();if(!t)return null;let n=H(t.trayJoinUrl??null);return{workerBaseUrl:L(t.trayWorkerBaseUrl??null),joinConfig:n}}var Pe=null;function Fe(e){Pe?.(`viewblock`,{source:e})}function Ie(e){Pe?.(`signup`,{source:e})}function Le(e,t){if(e.state===`inactive`&&t.state===`inactive`)return{kind:`leader-offer`,label:`Enable multi-browser sync`,caption:`Connect another browser to this session.`};if(e.state===`leader`&&e.session?.joinUrl)return{kind:`leader-copy`,joinUrl:e.session.joinUrl,label:`Enable multi-browser sync`,caption:`Share this URL to connect more browsers.`};if(e.state!==`inactive`){let t=e.state===`connecting`?`Setting up multi-browser sync…`:e.state===`reconnecting`?`Reconnecting…`:`Sync service unreachable.`;return{kind:`leader-pending`,label:`Multi-browser sync`,caption:e.error??t}}return{kind:`follower`,label:`Multi-browser sync`,caption:t.error??t.lastError??Re(t.state)??`Mirroring another browser.`}}function Re(e){switch(e){case`connected`:return`Connected — mirroring another browser.`;case`connecting`:return`Connecting to the other browser…`;case`reconnecting`:return`Reconnecting…`;case`disconnected`:return`Disconnected from the other browser.`;default:return null}}function ze(e){let t=e.trim();if(!t)return`Paste a sync URL to continue.`;let n=null;try{n=new URL(t)}catch{return`That doesn’t look like a URL. Paste the full https://… link from the other browser.`}return n.protocol!==`https:`&&n.protocol!==`http:`?`Sync URLs must start with https://.`:n.pathname.includes(`/join/`)?`That sync URL is malformed. Re-copy it from the other browser and try again.`:`This URL is missing the /join/… capability. Use “Enable multi-browser sync” on the other browser.`}var Be=e({ACCOUNTS_KEY:()=>fe,__test__:()=>ce,_testOnly_dispatchTrayJoinWithFailureFeedback:()=>Ue,addAccount:()=>T,applyProviderDefaults:()=>S,clearAllSettings:()=>le,clearApiKey:()=>de,clearBaseUrl:()=>ee,clearSelectedProvider:()=>oe,describeInvalidJoinUrl:()=>ze,downloadProviders:()=>Ge,exportProviders:()=>E,getAccounts:()=>w,getAllAvailableModels:()=>te,getAllExtraOAuthDomains:()=>ue,getApiKey:()=>se,getApiKeyForProvider:()=>re,getApiVersionForProvider:()=>ne,getAvailableProviders:()=>x,getBaseUrl:()=>pe,getBaseUrlForProvider:()=>D,getDeploymentForProvider:()=>C,getExtraOAuthDomains:()=>he,getOAuthAccountInfo:()=>_,getProviderConfig:()=>i,getProviderModels:()=>me,getRawApiKeyForProvider:()=>v,getSelectedModelId:()=>o,getSelectedProvider:()=>a,isModelHiddenFromPicker:()=>m,logoutOAuthAccount:()=>ae,maskOAuthTokenWithRetry:()=>n,migrateLegacyAuthOnlySelection:()=>ie,persistOAuthMaskViaServiceWorker:()=>f,providerOffersLlmModels:()=>p,removeAccount:()=>h,resolveCurrentModel:()=>s,resolveModelById:()=>l,saveOAuthAccount:()=>d,setApiKey:()=>g,setBaseUrl:()=>ge,setExtraOAuthDomains:()=>r,setExtraOAuthDomainsAsync:()=>b,setSelectedModelId:()=>c,setSelectedProvider:()=>y,showProviderSettings:()=>mt}),Ve=O(`provider-settings`);function He(){return typeof chrome<`u`&&!!chrome?.runtime?.id}function Ue(e,t){return We(e,t)}function We(e,t){let n=`tray-join-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,r=!1,i,a=()=>{r||(r=!0,i!==void 0&&clearTimeout(i),window.removeEventListener(`slicc:tray-join-failed`,o))},o=r=>{let i=r.detail;if(i.requestId!==void 0&&i.requestId!==n)return;if(a(),!t.isConnected){Ve.error(`Tray-join failure arrived after dialog dismissed (UX swallowed half-state)`,{joinUrl:e,error:i.error,requestId:n});return}let o=t.dataset.dismissTimer;if(o){let e=Number(o);Number.isFinite(e)&&clearTimeout(e),delete t.dataset.dismissTimer}t.textContent=`Sync failed: ${i.error}. Reload the page and try again.`,t.style.color=`var(--slicc-cone)`};return window.addEventListener(`slicc:tray-join-failed`,o),i=setTimeout(a,1e4),window.dispatchEvent(new CustomEvent(`slicc:tray-join`,{detail:{joinUrl:e,requestId:n}})),a}function Ge(){let e=JSON.stringify(E(),null,2),t=new Blob([e],{type:`application/json`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`providers.json`,r.click(),URL.revokeObjectURL(n)}function Ke(e){return e.length<=10?`****`:e.slice(0,4)+`...`+e.slice(-4)}function W(e){let t=`http://www.w3.org/2000/svg`,n=document.createElementNS(t,`svg`);n.setAttribute(`width`,`14`),n.setAttribute(`height`,`14`),n.setAttribute(`viewBox`,`0 0 20 20`),n.setAttribute(`fill`,`none`),n.setAttribute(`stroke`,`currentColor`),n.setAttribute(`stroke-width`,`1.5`),n.setAttribute(`stroke-linecap`,`round`),n.setAttribute(`stroke-linejoin`,`round`);for(let r of e){let e=document.createElementNS(t,`path`);e.setAttribute(`d`,r),n.appendChild(e)}return n}var G={pen:[`M14.3 3.3a1.5 1.5 0 0 1 2.1 0l.3.3a1.5 1.5 0 0 1 0 2.1L7.7 14.8l-3.2.7.7-3.2z`],trash:[`M4 6h12`,`M8 6V4a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v2`,`M6 6v10a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V6`],logout:[`M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4`,`M16 17l5-5-5-5`,`M21 12H9`],login:[`M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4`,`M10 17l5-5-5-5`,`M15 12H3`]},K=`background: transparent; border: 1px solid var(--s2-border-subtle); color: var(--s2-content-secondary); border-radius: var(--s2-radius-s); padding: 6px; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: color 0.15s, border-color 0.15s;`;function q(e,t){e.addEventListener(`mouseenter`,()=>{e.style.color=t,e.style.borderColor=t}),e.addEventListener(`mouseleave`,()=>{e.style.color=`var(--s2-content-secondary)`,e.style.borderColor=`var(--s2-border-subtle)`})}function J(e){e.overlay.remove(),e.resolve((localStorage.getItem(`slicc_accounts`)??``)!==e.accountsBefore)}function Y(e){e.options?.startInAddAccount?J(e):X(e)}function qe(e){let t=document.createElement(`div`);return t.style.cssText=`font-size: 11px; color: var(--s2-content-disabled); font-family: monospace; margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;`,e.loggedOut?(t.textContent=e.userName?`Logged out — was ${e.userName}`:`Logged out`,t.style.color=`var(--s2-content-disabled)`):e.userName?t.textContent=e.userName:e.accessToken?t.textContent=`Logged in`:t.textContent=Ke(e.apiKey),e.baseUrl&&(t.textContent+=` • `+e.baseUrl),t}async function Je(e,n){let{createOAuthLauncher:r,createInterceptingOAuthLauncherForCurrentRuntime:i}=await t(async()=>{let{createOAuthLauncher:e,createInterceptingOAuthLauncherForCurrentRuntime:t}=await import(`./oauth-service-CTlktxVj.js`);return{createOAuthLauncher:e,createInterceptingOAuthLauncherForCurrentRuntime:t}},__vite__mapDeps([0,1,2,3])),a={forceReauth:!0};if(e.onOAuthLoginIntercepted){let t=await i();t&&await e.onOAuthLoginIntercepted(t,n,a)}else if(e.onOAuthLogin){let t=r();await e.onOAuthLogin(t,n,a)}}function Ye(e,t){let n=document.createElement(`button`);return n.style.cssText=K,n.setAttribute(`aria-label`,`Edit account`),n.appendChild(W(G.pen)),q(n,`var(--s2-accent)`),n.addEventListener(`click`,()=>Z(e,t)),n}function Xe(e,t,n){let r=document.createElement(`button`);return r.style.cssText=K,t.loggedOut===!0?(r.setAttribute(`aria-label`,`Log in`),r.setAttribute(`title`,`Log in`),r.appendChild(W(G.login)),q(r,`var(--s2-accent)`),r.addEventListener(`click`,()=>{Je(n,()=>X(e))})):(r.setAttribute(`aria-label`,`Log out`),r.setAttribute(`title`,`Log out`),r.appendChild(W(G.logout)),q(r,`var(--s2-warning, #f59e0b)`),r.addEventListener(`click`,()=>{(async()=>{await ae(t.providerId),X(e)})()})),r}function Ze(e,t){let n=document.createElement(`button`);return n.style.cssText=K,n.setAttribute(`aria-label`,`Remove account`),n.appendChild(W(G.trash)),q(n,`var(--s2-negative)`),n.addEventListener(`click`,()=>{(async()=>{await h(t.providerId),X(e)})()}),n}function Qe(e,t){let n=i(t.providerId),r=document.createElement(`div`);r.style.cssText=`display: flex; align-items: center; justify-content: space-between; padding: 10px 12px; background: var(--s2-bg-layer-2); border-radius: var(--s2-radius-default); margin-bottom: 8px; border: 1px solid var(--s2-border-subtle);`;let a=document.createElement(`div`);a.style.cssText=`flex: 1; min-width: 0;`;let o=document.createElement(`div`);o.style.cssText=`font-size: 14px; font-weight: 600; color: var(--s2-content-default);`,o.textContent=n.name,a.appendChild(o),a.appendChild(qe(t)),r.appendChild(a);let s=document.createElement(`div`);return s.style.cssText=`display: flex; gap: 4px; margin-left: 12px; flex-shrink: 0;`,s.appendChild(Ye(e,t)),n.isOAuth&&s.appendChild(Xe(e,t,n)),s.appendChild(Ze(e,t)),r.appendChild(s),r}function $e(e){let t=document.createDocumentFragment(),n=document.createElement(`hr`);n.style.cssText=`border: none; border-top: 1px solid var(--s2-border-subtle); margin: 16px 0;`,t.appendChild(n);let r=document.createElement(`div`);r.className=`dialog__desc`,r.style.cssText=`font-weight: 600; margin-bottom: 8px;`,r.textContent=`Tray`,t.appendChild(r);let i=j(),a=i.state!==`inactive`,o=Ee(window.localStorage);if(a||o){let e=document.createElement(`div`);e.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); margin-bottom: 8px;`,e.textContent=`Follower: ${a?i.state:`configured`}`,i.error&&(e.textContent+=` — ${i.error}`,e.style.color=`var(--slicc-cone)`),t.appendChild(e)}let s=document.createElement(`button`);return s.className=`dialog__btn dialog__btn--secondary`,s.textContent=a||o?`Reconnect to other browser`:`Connect to another browser`,s.addEventListener(`click`,()=>Q(e)),t.appendChild(s),t}function X(e){let{dialog:t}=e;t.innerHTML=``;let n=document.createElement(`div`);n.className=`dialog__title`,n.textContent=`Accounts`,t.appendChild(n);let r=w();if(r.length===0){let e=document.createElement(`div`);e.className=`dialog__desc`,e.textContent=`No accounts configured.`,t.appendChild(e)}else{let n=document.createElement(`div`);n.style.cssText=`margin-bottom: 16px;`;for(let t of r)n.appendChild(Qe(e,t));t.appendChild(n)}let i=document.createElement(`div`);i.style.cssText=`display: flex; gap: 8px;`;let a=document.createElement(`button`);a.className=r.length>0?`dialog__btn dialog__btn--secondary`:`dialog__btn`,a.style.flex=`1`,a.textContent=`Add Account`,a.addEventListener(`click`,()=>Z(e)),i.appendChild(a);let o=document.createElement(`button`);o.className=`dialog__btn dialog__btn--secondary`,o.style.flex=`1`,o.textContent=`Export`,o.addEventListener(`click`,()=>Ge()),i.appendChild(o),t.appendChild(i),t.appendChild($e(e));let s=document.createElement(`hr`);s.style.cssText=`border: none; border-top: 1px solid var(--s2-border-subtle); margin: 16px 0;`,t.appendChild(s);let c=document.createElement(`button`);c.className=`dialog__btn`,c.textContent=`Get Started`,c.addEventListener(`click`,()=>J(e)),t.appendChild(c)}function et(e,t){let n=document.createElement(`select`);if(n.className=`dialog__input`,n.style.marginBottom=`8px`,t){let e=i(t.providerId),r=document.createElement(`option`);return r.value=t.providerId,r.textContent=e.name,n.appendChild(r),n.disabled=!0,n.style.opacity=`0.7`,n}let r=document.createElement(`option`);r.value=``,r.textContent=`Select a provider…`,r.disabled=!0,r.selected=!0,r.hidden=!0,n.appendChild(r);let a=new Set(w().map(e=>e.providerId)),o=[...x()].sort((e,t)=>i(e).name.localeCompare(i(t).name));for(let t of o){if(a.has(t))continue;if(e?.providerFilter){if(!e.providerFilter(t))continue}else if(!p(t))continue;let r=document.createElement(`option`);r.value=t,r.textContent=i(t).name,n.appendChild(r)}return n}function tt(e,t){let n=et(e,t),r=document.createElement(`div`);r.className=`dialog__desc`,r.style.cssText=`font-size: 12px; color: var(--s2-content-tertiary); margin-bottom: 16px; margin-top: -4px;`;let i=document.createElement(`div`);i.style.cssText=`margin-bottom: 16px; display: none;`;let a=document.createElement(`button`);a.className=`dialog__btn`,a.textContent=`Login`,a.style.cssText=`width: 100%; margin-bottom: 8px;`,i.appendChild(a);let o=document.createElement(`div`);o.className=`dialog__desc`,o.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); text-align: center;`,i.appendChild(o);let s=document.createElement(`div`),c=document.createElement(`div`);c.className=`dialog__desc`,s.appendChild(c);let l=document.createElement(`input`);l.className=`dialog__input`,l.type=`password`,l.autocomplete=`off`,l.spellcheck=!1,t&&(l.value=t.apiKey),s.appendChild(l);let u=document.createElement(`div`),d=document.createElement(`div`);d.className=`dialog__desc`,d.textContent=`Base URL:`,u.appendChild(d);let f=document.createElement(`input`);f.className=`dialog__input`,f.type=`text`,f.autocomplete=`off`,f.spellcheck=!1,t?.baseUrl&&(f.value=t.baseUrl),u.appendChild(f);let p=document.createElement(`div`);p.className=`dialog__desc`,p.style.cssText=`font-size: 11px; color: var(--s2-content-secondary); margin-top: -12px; margin-bottom: 16px;`,u.appendChild(p);let m=document.createElement(`div`);m.style.display=`none`;let h=document.createElement(`div`);h.className=`dialog__desc`,h.textContent=`Deployment:`,m.appendChild(h);let g=document.createElement(`input`);g.className=`dialog__input`,g.type=`text`,g.autocomplete=`off`,g.spellcheck=!1,t?.deployment&&(g.value=t.deployment),m.appendChild(g);let _=document.createElement(`div`);_.className=`dialog__desc`,_.style.cssText=`font-size: 11px; color: var(--s2-content-secondary); margin-top: -12px; margin-bottom: 16px;`,m.appendChild(_);let v=document.createElement(`div`);v.style.display=`none`;let y=document.createElement(`div`);y.className=`dialog__desc`,y.textContent=`API Version:`,v.appendChild(y);let b=document.createElement(`input`);b.className=`dialog__input`,b.type=`text`,b.autocomplete=`off`,b.spellcheck=!1,t?.apiVersion&&(b.value=t.apiVersion),v.appendChild(b);let x=document.createElement(`div`);x.className=`dialog__desc`,x.style.cssText=`font-size: 11px; color: var(--s2-content-secondary); margin-top: -12px; margin-bottom: 16px;`,v.appendChild(x);let S=document.createElement(`div`);S.style.cssText=`color: var(--slicc-cone); font-size: 12px; margin-bottom: 8px; display: none;`;let C=document.createElement(`button`);return C.className=`dialog__btn`,C.textContent=t?`Save`:`Add`,{providerSelect:n,providerDesc:r,oauth:{section:i,loginBtn:a,status:o},apiKeySection:s,apiKeyLabel:c,apiKeyInput:l,baseUrlSection:u,baseUrlInput:f,baseUrlDesc:p,deploymentSection:m,deploymentInput:g,deploymentDesc:_,apiVersionSection:v,apiVersionInput:b,apiVersionDesc:x,errorEl:S,saveBtn:C}}function nt(e){let t=document.createElement(`div`);t.setAttribute(`data-slicc-device-code-prompt`,``),t.style.cssText=`display:flex;flex-direction:column;gap:8px`;let n=document.createElement(`div`);n.className=`dialog__desc`,n.textContent=`Verification code`,n.style.cssText=`font-size: 11px; color: var(--s2-content-tertiary);`;let r=document.createElement(`div`);r.textContent=e,r.style.cssText=[`font: 600 22px ui-monospace, SFMono-Regular, Menlo, monospace`,`letter-spacing: 2px`,`color: var(--s2-content-primary, #e6edf3)`,`background: var(--s2-bg-secondary, #161b22)`,`border: 1px solid var(--s2-border, #30363d)`,`border-radius: 6px`,`padding: 10px 12px`,`text-align: center`,`user-select: all`,`cursor: text`].join(`;`);let i=document.createElement(`div`);i.className=`dialog__desc`,i.style.cssText=`font-size: 12px; color: var(--s2-content-secondary);`,i.textContent=`Click Copy & Continue — we will open the GitHub authorization page in a new tab. Paste this code there if it is not already filled in.`;let a=document.createElement(`div`);a.style.cssText=`display:flex;gap:8px;justify-content:flex-end;margin-top:4px`;let o=document.createElement(`button`);o.type=`button`,o.className=`dialog__btn`,o.textContent=`Cancel`;let s=document.createElement(`button`);return s.type=`button`,s.className=`dialog__btn dialog__btn--primary`,s.textContent=`Copy & Continue`,a.appendChild(o),a.appendChild(s),t.appendChild(n),t.appendChild(r),t.appendChild(i),t.appendChild(a),{prompt:t,cancelBtn:o,continueBtn:s}}function rt(e){return t=>new Promise(n=>{let r=e.loginBtn.style.display,i=e.status.style.display;e.loginBtn.style.display=`none`,e.status.style.display=`none`;let{prompt:a,cancelBtn:o,continueBtn:s}=nt(t.userCode),c=()=>{try{a.remove()}catch{}e.loginBtn.style.display=r,e.status.style.display=i};o.addEventListener(`click`,()=>{c(),n(`cancel`)}),s.addEventListener(`click`,()=>{(async()=>{try{await _e(t.userCode)}catch{}c(),e.status.style.display=i,e.status.textContent=`Waiting for you to authorize in the new tab…`,n(`continue`)})()}),e.section.appendChild(a)})}async function it(e,n){let r=n.providerSelect.value;if(!r)return;let a=i(r);if(!a.onOAuthLogin&&!a.onOAuthLoginIntercepted)return;let{status:o}=n.oauth,s=w().some(e=>e.providerId===r),c=D(r);if(a.requiresBaseUrl&&!n.baseUrlInput.value.trim()&&!c){o.textContent=`Base URL is required.`,o.style.color=`var(--slicc-cone)`,n.baseUrlInput.focus();return}a.requiresBaseUrl&&n.baseUrlInput.value.trim()&&T(r,``,n.baseUrlInput.value.trim()),o.textContent=`Opening login window...`;try{if(a.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:r}=await t(async()=>{let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await import(`./oauth-service-CTlktxVj.js`);return{createInterceptingOAuthLauncherForCurrentRuntime:e}},__vite__mapDeps([0,1,2,3])),i=await r();if(!i)throw Error(`No controlled-browser CDP transport available — open SLICC in standalone mode or the Chrome extension.`);await a.onOAuthLoginIntercepted(i,()=>Y(e),{presentDeviceCode:rt(n.oauth)})}else if(a.onOAuthLogin){let{createOAuthLauncher:n}=await t(async()=>{let{createOAuthLauncher:e}=await import(`./oauth-service-CTlktxVj.js`);return{createOAuthLauncher:e}},__vite__mapDeps([0,1,2,3])),r=n();await a.onOAuthLogin(r,()=>Y(e))}}catch(e){if(!s)try{await h(r)}catch{}Ve.error(`OAuth login failed`,{providerId:r,error:e instanceof Error?e.message:String(e)}),o.textContent=`Login failed: ${e instanceof Error?e.message:String(e)}`}}function at(e,t){if(t.isOAuth){e.oauth.section.style.display=``,e.apiKeySection.style.display=`none`,e.baseUrlSection.style.display=t.requiresBaseUrl?``:`none`,t.requiresBaseUrl&&(e.baseUrlInput.placeholder=t.baseUrlPlaceholder||`https://...`,e.baseUrlDesc.textContent=t.baseUrlDescription||``),e.oauth.loginBtn.textContent=`Login with ${t.name}`,e.saveBtn.style.display=`none`;return}e.oauth.section.style.display=`none`;let n=t.requiresApiKey?`API Key`:`API Key (optional)`;e.apiKeyLabel.textContent=`${n}${t.apiKeyEnvVar?` (${t.apiKeyEnvVar})`:``}:`,e.apiKeyInput.placeholder=t.apiKeyPlaceholder||`API key`,e.apiKeySection.style.display=t.requiresApiKey||t.optionalApiKey?``:`none`,e.baseUrlInput.placeholder=t.baseUrlPlaceholder||`https://...`,e.baseUrlDesc.textContent=t.baseUrlDescription||``,e.baseUrlSection.style.display=t.requiresBaseUrl?``:`none`,e.saveBtn.style.display=``}function ot(e,t){t.requiresDeployment?(e.deploymentSection.style.display=``,e.deploymentInput.placeholder=t.deploymentPlaceholder||`deployment-name`,e.deploymentDesc.textContent=t.deploymentDescription||``):e.deploymentSection.style.display=`none`}function st(e,t){t.requiresApiVersion?(e.apiVersionSection.style.display=``,!e.apiVersionInput.value&&t.apiVersionDefault&&(e.apiVersionInput.value=t.apiVersionDefault),e.apiVersionInput.placeholder=t.apiVersionDefault||`api-version`,e.apiVersionDesc.textContent=t.apiVersionDescription||``):e.apiVersionSection.style.display=`none`}function ct(e){let t=e.providerSelect.value;if(!t){e.providerDesc.textContent=``,e.oauth.section.style.display=`none`,e.apiKeySection.style.display=`none`,e.baseUrlSection.style.display=`none`,e.deploymentSection.style.display=`none`,e.apiVersionSection.style.display=`none`,e.saveBtn.style.display=`none`;return}let n=i(t);e.providerDesc.textContent=n.description,at(e,n),ot(e,n),st(e,n)}function lt(e,t){let n=t.providerSelect.value;if(!n)return;let r=i(n),a=(e,n)=>{t.errorEl.textContent=e,t.errorEl.style.display=``,n.focus()};if(r.requiresApiKey&&t.apiKeyInput.value.trim().length<5){a(`API key is required (at least 5 characters).`,t.apiKeyInput);return}if(r.requiresBaseUrl&&!t.baseUrlInput.value.trim()){a(`Base URL is required for this provider.`,t.baseUrlInput);return}if(r.requiresDeployment&&!t.deploymentInput.value.trim()){a(`Deployment name is required for this provider.`,t.deploymentInput);return}T(n,t.apiKeyInput.value.trim(),t.baseUrlInput.value.trim()||void 0,t.deploymentInput.value.trim()||void 0,t.apiVersionInput.value.trim()||void 0),Y(e)}function ut(e,t){let{dialog:n,options:r}=e,i=w().length>0;if(r?.startInAddAccount){let t=document.createElement(`button`);t.className=`dialog__btn dialog__btn--secondary`,t.style.marginTop=`8px`,t.textContent=`Cancel`,t.addEventListener(`click`,()=>J(e)),n.appendChild(t)}else if(!t&&!i){let t=document.createElement(`button`);t.className=`dialog__btn dialog__btn--secondary`,t.style.marginTop=`8px`,t.textContent=`Connect to another browser`,t.addEventListener(`click`,()=>Q(e)),n.appendChild(t)}else if(i){let t=document.createElement(`button`);t.className=`dialog__btn dialog__btn--secondary`,t.style.marginTop=`8px`,t.textContent=`Back`,t.addEventListener(`click`,()=>X(e)),n.appendChild(t)}}function Z(e,t){let{dialog:n}=e;n.innerHTML=``;let r=document.createElement(`div`);r.className=`dialog__title`,r.textContent=t?`Edit Account`:`Add Account`,n.appendChild(r);let a=document.createElement(`div`);a.className=`dialog__desc`,a.textContent=`Provider:`,n.appendChild(a);let o=tt(e.options,t);n.appendChild(o.providerSelect),n.appendChild(o.providerDesc),o.oauth.loginBtn.addEventListener(`click`,()=>{it(e,o)}),t?.userName&&(o.oauth.status.textContent=`Logged in as ${t.userName}`,o.oauth.loginBtn.textContent=`Re-login`),n.appendChild(o.oauth.section),n.appendChild(o.apiKeySection),n.appendChild(o.baseUrlSection),n.appendChild(o.deploymentSection),n.appendChild(o.apiVersionSection),n.appendChild(o.errorEl),o.providerSelect.addEventListener(`change`,()=>{o.errorEl.style.display=`none`,ct(o)}),ct(o),o.saveBtn.addEventListener(`click`,()=>lt(e,o));let s=t=>{t.key===`Enter`&&lt(e,o)};o.apiKeyInput.addEventListener(`keydown`,s),o.baseUrlInput.addEventListener(`keydown`,s),o.deploymentInput.addEventListener(`keydown`,s),o.apiVersionInput.addEventListener(`keydown`,s),n.appendChild(o.saveBtn),ut(e,!!t),requestAnimationFrame(()=>{let e=o.providerSelect.value;if(!e)return;let t=i(e);t.requiresApiKey?o.apiKeyInput.focus():t.requiresBaseUrl&&o.baseUrlInput.focus()})}function dt(e,t,n,r){if(He()){let e={type:`refresh-tray-runtime`,joinUrl:t,workerBaseUrl:n};chrome.runtime.sendMessage({source:`panel`,payload:e}).catch(()=>{})}else We(t,r);r.textContent=`Connecting…`,r.style.display=``,r.style.color=`var(--s2-content-secondary)`;let i=setTimeout(()=>{e.overlay.remove(),e.resolve(!1)},800);r.dataset.dismissTimer=String(i)}function ft(e,t){let{dialog:n}=e;n.innerHTML=``;let r=document.createElement(`div`);r.className=`dialog__title`,r.textContent=`Connect this browser?`,n.appendChild(r);let i=document.createElement(`div`);i.className=`dialog__desc`,i.style.marginBottom=`12px`,i.textContent=`You’ve been invited to mirror another SLICC browser. Click below to start syncing.`,n.appendChild(i);let a=document.createElement(`div`);a.className=`dialog__desc`,a.style.cssText=`font-family: monospace; font-size: 11px; color: var(--s2-content-secondary); word-break: break-all; margin-bottom: 16px; padding: 8px; background: var(--s2-bg-secondary); border-radius: 4px;`,a.textContent=t.length>80?t.slice(0,40)+`…`+t.slice(-37):t,n.appendChild(a);let o=document.createElement(`div`);o.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); margin-bottom: 8px; display: none;`,n.appendChild(o);let s=document.createElement(`button`);s.className=`dialog__btn`,s.textContent=`Connect`,s.addEventListener(`click`,()=>{let n=U(window.localStorage,t);if(!n){o.textContent=`Invalid sync URL.`,o.style.display=``,o.style.color=`var(--slicc-cone)`;return}dt(e,n.joinUrl,n.workerBaseUrl,o)}),n.appendChild(s);let c=document.createElement(`button`);c.className=`dialog__btn dialog__btn--secondary`,c.style.marginTop=`8px`,c.textContent=`Set up an account instead`,c.addEventListener(`click`,()=>Z(e)),n.appendChild(c)}function pt(){let e=document.createElement(`details`);e.style.cssText=`margin-bottom: 12px; font-size: 12px; color: var(--s2-content-secondary);`;let t=document.createElement(`summary`);t.style.cssText=`cursor: pointer; user-select: none; color: var(--s2-content-secondary);`,t.textContent=`How do I get the sync URL?`,e.appendChild(t);let n=document.createElement(`div`);n.style.cssText=`margin-top: 8px; padding: 10px 12px; background: var(--s2-bg-layer-2); border-radius: var(--s2-radius-default); border: 1px solid var(--s2-border-subtle); line-height: 1.5;`;let r=document.createElement(`ol`);r.style.cssText=`margin: 0; padding-left: 20px;`;for(let e of[`On the other SLICC, click the avatar (top right).`,`Choose “Enable multi-browser sync” — the URL is copied automatically.`,`Paste it below. Both browsers must be on the same SLICC version.`]){let t=document.createElement(`li`);t.textContent=e,r.appendChild(t)}return n.appendChild(r),e.appendChild(n),e}function Q(e){let{dialog:t}=e;t.innerHTML=``;let n=document.createElement(`div`);n.className=`dialog__title`,n.textContent=`Connect to another browser`,t.appendChild(n);let r=document.createElement(`div`);r.className=`dialog__desc`,r.style.marginBottom=`12px`,r.textContent=`Paste a multi-browser sync URL to mirror another SLICC browser.`,t.appendChild(r),t.appendChild(pt());let i=document.createElement(`div`);i.className=`dialog__desc`,i.textContent=`Sync URL:`,t.appendChild(i);let a=document.createElement(`input`);a.className=`dialog__input`,a.type=`text`,a.autocomplete=`off`,a.spellcheck=!1,a.placeholder=`https://www.sliccy.ai/join/<token>`,t.appendChild(a);let o=document.createElement(`div`);o.style.cssText=`color: var(--slicc-cone); font-size: 12px; margin-bottom: 8px; display: none;`,t.appendChild(o);let s=document.createElement(`div`);s.style.cssText=`font-size: 12px; color: var(--s2-content-secondary); margin-bottom: 8px; display: none;`;let c=document.createElement(`button`);c.className=`dialog__btn`,c.textContent=`Connect`,c.addEventListener(`click`,()=>{let t=a.value.trim();if(!t){o.textContent=`Paste a sync URL to continue.`,o.style.display=``,a.focus();return}let n=U(window.localStorage,t);if(!n){o.textContent=ze(t),o.style.display=``,a.focus();return}dt(e,n.joinUrl,n.workerBaseUrl,s)}),t.appendChild(c),t.appendChild(s);let l=document.createElement(`button`);l.className=`dialog__btn dialog__btn--secondary`,l.style.marginTop=`8px`,l.textContent=`Back`,l.addEventListener(`click`,()=>Z(e)),t.appendChild(l),a.addEventListener(`input`,()=>{o.style.display=`none`}),a.addEventListener(`keydown`,e=>{e.key===`Enter`&&c.click()}),requestAnimationFrame(()=>a.focus())}function mt(e){return Ie(`button`),new Promise(t=>{let n=document.createElement(`div`);n.className=`dialog-overlay`;let r=document.createElement(`div`);r.className=`dialog`,r.style.cssText=`max-width: 480px; width: 90vw; padding: 32px;`;let i={overlay:n,dialog:r,options:e,accountsBefore:localStorage.getItem(`slicc_accounts`)??``,resolve:t};e?.startInAddAccount?Z(i):w().length>0?X(i):e?.autoJoinUrl?ft(i,e.autoJoinUrl):e?.preferTrayJoin?Q(i):Z(i),n.appendChild(r),document.body.appendChild(n)})}function ht(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e&&typeof e.source==`string`}new Set([{id:`chat`,label:`Chat`},{id:`terminal`,label:`Terminal`},{id:`files`,label:`Files`},{id:`memory`,label:`Memory`}].map(e=>e.id));function gt(e,t){if(t){try{if(new URL(e).searchParams.get(`detached`)===`1`)return`extension-detached`}catch{}return`extension`}try{let t=new URL(e);return t.searchParams.get(`connect`)===`1`?`connect`:t.searchParams.get(`runtime`)===`hosted-leader`?`hosted-leader`:t.searchParams.get(`cherry`)===`1`?`cherry`:vt(t)?`electron-overlay`:`standalone`}catch{return`standalone`}}function _t(e,t){return e===`electron-overlay`||e===`hosted-leader`||e===`standalone`&&t}function vt(e){return e.pathname===`/electron`||e.pathname===`/electron/`||e.searchParams.get(`runtime`)===`electron-overlay`}var $=O(`main`);function yt(e){try{return new URL(e).searchParams.has(`ui-fixture`)}catch{return!1}}async function bt(){let e=document.getElementById(`app`);if(!e)throw Error(`#app element not found`);let n=typeof chrome<`u`&&!!chrome?.runtime?.id,r=gt(window.location.href,n);if(yt(window.location.href)){let{mountWcUiPreview:n}=await t(async()=>{let{mountWcUiPreview:e}=await import(`./wc-shell-DPYESGkK.js`).then(e=>e.a);return{mountWcUiPreview:e}},__vite__mapDeps([4,3,1,5,6,7]));n(e);return}if(ve(),await ye()===`reload-pending`)return;await u(),S();let{bootstrapOAuthReplicas:i}=await t(async()=>{let{bootstrapOAuthReplicas:e}=await import(`./oauth-bootstrap-B6wP6zi_.js`);return{bootstrapOAuthReplicas:e}},__vite__mapDeps([8,1,9,3,10,11,12,13,14,15,16,2,17,18,19]));if(await Promise.race([i().catch(e=>{$.error(`OAuth bootstrap failed`,e)}),new Promise(e=>setTimeout(e,1e4))]),r===`connect`){globalThis.__slicc_connect_mode=!0;let{loadLegacyStyles:n}=await t(async()=>{let{loadLegacyStyles:e}=await import(`./legacy-styles-4PP74ISo.js`);return{loadLegacyStyles:e}},__vite__mapDeps([20,1]));await n();let{mountConnectSurface:r}=await t(async()=>{let{mountConnectSurface:e}=await import(`./connect-surface-D6ECkvh5.js`);return{mountConnectSurface:e}},__vite__mapDeps([21,9,3,1,10,11,12,13,14,15,16,2,17,18,19]));await r(e);return}if(n){let{mountWcUiExtension:n}=await t(async()=>{let{mountWcUiExtension:e}=await import(`./wc-extension-CI60x7Bm.js`);return{mountWcUiExtension:e}},__vite__mapDeps([22,1,23,10,11,12,3,13,14,15,4,5,6,7,24,25,26,27,28,29,30,31,32,33]));return n(e,$,r===`extension-detached`)}let{mountWcUiLive:a}=await t(async()=>{let{mountWcUiLive:e}=await import(`./wc-live-C_qPXh6O.js`);return{mountWcUiLive:e}},__vite__mapDeps([23,1,10,11,12,3,13,14,15,4,5,6,7,24,25,26,27,28,29,30,31,32]));return a(e,$,r)}bt().catch(e=>{$.error(`Fatal error`,e);let t=document.getElementById(`app`);if(t){let n=document.createElement(`div`);n.style.cssText=`padding: 2rem; text-align: center;`;let r=document.createElement(`h1`);r.style.color=`var(--s2-negative, #e34850)`,r.textContent=`Failed to start`;let i=document.createElement(`p`);for(i.style.color=`var(--s2-content-tertiary, #717171)`,i.textContent=e.message,n.appendChild(r),n.appendChild(i);t.firstChild;)t.removeChild(t.firstChild);t.appendChild(n)}});export{Se as _,Le as a,B as c,Te as d,je as f,j as g,Ae as h,mt as i,z as l,ke as m,ht as n,Fe as o,Ee as p,Be as r,we as s,_t as t,Oe as u,xe as v};
@@ -0,0 +1 @@
1
+ import{t as e}from"./logger-DDBAeTLF.js";import{BrowserAPI as t}from"./cdp-Cbi5Katl.js";var n=new Set([`handshake.hello`,`handshake.welcome`,`cdp.request`,`cdp.response`,`cdp.event`,`permission.request`,`permission.response`,`host.event`,`slicc.event`]);function r(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.cherry===1&&typeof t.channelId==`string`&&typeof t.kind==`string`&&n.has(t.kind)}function i(e,t){return!(!t.allowOrigins.includes(e.origin)||t.expectedSource!==null&&e.source!==t.expectedSource||!r(e.data)||t.channelId!==null&&e.data.channelId!==t.channelId)}var a=e(`cherry-transport`),o=`cherry-session`,s=`cherry-target`,c=`cherry-frame`,l=3e4,u=class{opts;channelId=null;nextId=1;_state=`disconnected`;pending=new Map;listeners=new Map;connectResolve=null;connectTimer=null;_joinUrl=null;boundHandler=e=>this.handleMessage(e);onHostEvent=null;constructor(e){this.opts=e}get state(){return this._state}get joinUrl(){return this._joinUrl}async connect(e){if(this._state!==`disconnected`)throw Error(`Cannot connect: state is ${this._state}`);this._state=`connecting`,this.channelId=`cherry-${crypto.randomUUID()}`,typeof window<`u`&&window.addEventListener(`message`,this.boundHandler);let t=e?.timeout??l;return new Promise((e,n)=>{this.connectResolve=e,this.connectTimer=setTimeout(()=>{this.connectTimer=null,typeof window<`u`&&window.removeEventListener(`message`,this.boundHandler),this._state=`disconnected`,this.channelId=null,this.connectResolve=null,n(Error(`Cherry handshake timed out after ${t}ms`))},t),this.post({cherry:1,channelId:this.channelId,kind:`handshake.hello`,capabilities:this.opts.capabilities??{navigate:!0,screenshot:!0,openUrl:!0}})})}disconnect(){this.connectTimer!==null&&(clearTimeout(this.connectTimer),this.connectTimer=null),typeof window<`u`&&window.removeEventListener(`message`,this.boundHandler);for(let[,e]of this.pending)e.reject(Error(`Cherry transport disconnected`));this.pending.clear(),this._state=`disconnected`,this.channelId=null}async send(e,t,n,r=3e4){if(this._state!==`connected`)throw Error(`Cherry transport is not connected`);let i=this.handleSynthetic(e,t);if(i)return i;let a=this.nextId++,o=await new Promise((n,i)=>{let o=setTimeout(()=>{this.pending.delete(a),i(Error(`Cherry CDP timed out after ${r}ms: ${e}`))},r);this.pending.set(a,{resolve:e=>{clearTimeout(o),n(e)},reject:e=>{clearTimeout(o),i(e)}}),this.post({cherry:1,channelId:this.channelId,kind:`cdp.request`,id:a,method:e,params:t})});return e===`Page.navigate`&&this.synthesizeNavigationLifecycle(o,t?.url),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 new Promise((n,r)=>{let i=setTimeout(()=>{this.off(e,a),r(Error(`Timed out waiting for event: ${e}`))},t),a=t=>{clearTimeout(i),this.off(e,a),n(t)};this.on(e,a)})}__test_receive(e){this.handleMessage(e)}emitSliccEventToHost(e,t){if(!this.channelId){a.warn(`Dropping slicc.event before handshake (no channelId yet)`,{name:e});return}this.post({cherry:1,channelId:this.channelId,kind:`slicc.event`,name:e,detail:t})}post(e){this.opts.counterpart.postMessage(e,this.opts.targetOrigin)}emit(e,t){let n=this.listeners.get(e);if(n)for(let e of n)try{e(t)}catch{}}handleSynthetic(e,t){switch(e){case`Target.getTargets`:return Promise.resolve({targetInfos:[{targetId:s,type:`page`,title:`Cherry Host Page`,url:typeof location<`u`?location.href:`about:blank`,attached:!0}]});case`Target.attachToTarget`:return Promise.resolve({sessionId:o});case`Target.detachFromTarget`:case`Target.closeTarget`:return Promise.resolve({success:!0});case`Page.enable`:case`Runtime.enable`:case`DOM.enable`:case`Page.bringToFront`:return Promise.resolve({});case`Page.getFrameTree`:return Promise.resolve({frameTree:{frame:{id:c,loaderId:`cherry-loader`,url:typeof location<`u`?location.href:`about:blank`,securityOrigin:this.opts.targetOrigin,mimeType:`text/html`},childFrames:[]}});case`Runtime.createIsolatedWorld`:return Promise.resolve({executionContextId:1});default:return null}}synthesizeNavigationLifecycle(e,t){let n=e.frameId??c,r=t??(typeof location<`u`?location.href:`about:blank`);this.emit(`Page.frameNavigated`,{frame:{id:n,loaderId:`cherry-loader`,url:r,securityOrigin:this.opts.targetOrigin,mimeType:`text/html`},sessionId:o}),this.emit(`Page.loadEventFired`,{timestamp:Date.now()/1e3,sessionId:o})}handleMessage(e){if(!i(e,{allowOrigins:this.opts.allowOrigins,expectedSource:this.opts.counterpart,channelId:this.channelId})){r(e.data)&&a.warn(`Rejected a cherry envelope (origin/source/channel mismatch)`,{origin:e.origin,allowOrigins:this.opts.allowOrigins});return}let t=e.data;switch(t.kind){case`handshake.welcome`:this.connectTimer!==null&&(clearTimeout(this.connectTimer),this.connectTimer=null),this._state=`connected`,this._joinUrl=t.joinUrl??null,a.info(`Cherry handshake complete`,{channelId:this.channelId}),this.connectResolve?.(),this.connectResolve=null;return;case`cdp.response`:{let e=this.pending.get(t.id);if(!e)return;this.pending.delete(t.id),t.error?e.reject(Error(`Cherry CDP error: ${t.error.message} (${t.error.code})`)):e.resolve(t.result??{});return}case`cdp.event`:this.emit(t.method,{...t.params??{},sessionId:t.sessionId??o});return;case`host.event`:this.onHostEvent?.(t.name,t.detail);return;default:return}}},d=e(`cherry-boot`);async function f(){let e=[document.referrer?new URL(document.referrer).origin:location.origin],n=e[0],r=new u({counterpart:window.parent,allowOrigins:e,targetOrigin:n});await r.connect(),d.info(`Cherry transport connected`);let i=r.joinUrl;if(!i)throw Error(`cherry boot: no joinUrl from handshake`);return{transport:r,browser:new t(r),joinUrl:i}}export{f as setupCherryFollower};
@@ -0,0 +1 @@
1
+ const e={html:`text/html`,htm:`text/html`,css:`text/css`,js:`application/javascript`,mjs:`application/javascript`,json:`application/json`,svg:`image/svg+xml`,png:`image/png`,jpg:`image/jpeg`,jpeg:`image/jpeg`,gif:`image/gif`,webp:`image/webp`,avif:`image/avif`,apng:`image/apng`,bmp:`image/bmp`,ico:`image/x-icon`,woff:`font/woff`,woff2:`font/woff2`,ttf:`font/ttf`,mp3:`audio/mpeg`,wav:`audio/wav`,ogg:`audio/ogg`,oga:`audio/ogg`,m4a:`audio/mp4`,aac:`audio/aac`,flac:`audio/flac`,weba:`audio/webm`,mp4:`video/mp4`,webm:`video/webm`,mov:`video/quicktime`,m4v:`video/x-m4v`,ogv:`video/ogg`,pdf:`application/pdf`,txt:`text/plain`,xml:`application/xml`,wasm:`application/wasm`};function t(t){return e[t.split(`.`).pop()?.toLowerCase()??``]??`application/octet-stream`}function n(e){return e.startsWith(`image/`)}function r(e){return e.startsWith(`video/`)}function i(e){return n(e)||r(e)}export{i as n,t};
@@ -0,0 +1 @@
1
+ var e={html:`text/html`,htm:`text/html`,css:`text/css`,js:`application/javascript`,mjs:`application/javascript`,json:`application/json`,svg:`image/svg+xml`,png:`image/png`,jpg:`image/jpeg`,jpeg:`image/jpeg`,gif:`image/gif`,webp:`image/webp`,avif:`image/avif`,apng:`image/apng`,bmp:`image/bmp`,ico:`image/x-icon`,woff:`font/woff`,woff2:`font/woff2`,ttf:`font/ttf`,mp3:`audio/mpeg`,wav:`audio/wav`,ogg:`audio/ogg`,oga:`audio/ogg`,m4a:`audio/mp4`,aac:`audio/aac`,flac:`audio/flac`,weba:`audio/webm`,mp4:`video/mp4`,webm:`video/webm`,mov:`video/quicktime`,m4v:`video/x-m4v`,ogv:`video/ogg`,pdf:`application/pdf`,txt:`text/plain`,xml:`application/xml`,wasm:`application/wasm`};function t(t){return e[t.split(`.`).pop()?.toLowerCase()??``]??`application/octet-stream`}export{t};