sliccy 3.2.3 → 3.3.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 (88) hide show
  1. package/dist/ui/assets/{adobe-QN2CGEuK.js → adobe-BdCtqEqU.js} +1 -1
  2. package/dist/ui/assets/adobe-JQRe3bod.js +2 -0
  3. package/dist/ui/assets/{agent-bridge-C3yTqUsW.js → agent-bridge-BWE_pp9l.js} +1 -1
  4. package/dist/ui/assets/{agent-message-to-chat-DA9jQnkg.js → agent-message-to-chat-BM6jzZ6n.js} +1 -1
  5. package/dist/ui/assets/{anthropic-Iifm_Ljc.js → anthropic-B7fNhak0.js} +4 -4
  6. package/dist/ui/assets/{anthropic-vLH5Wqs1.js → anthropic-aUxP169Q.js} +2 -2
  7. package/dist/ui/assets/apps-DWZCyXIN.js +27 -0
  8. package/dist/ui/assets/azure-openai-PfW3sU2b.js +1 -0
  9. package/dist/ui/assets/{azure-openai-Dul8yrdC.js → azure-openai-i66UDzXv.js} +1 -1
  10. package/dist/ui/assets/{azure-openai-responses-v6_djoy0.js → azure-openai-responses-BkGRRdAD.js} +1 -1
  11. package/dist/ui/assets/{azure-openai-responses-Bv_GxAPf.js → azure-openai-responses-D7UJrvli.js} +1 -1
  12. package/dist/ui/assets/{bsh-watchdog-S8D_8Nfa.js → bsh-watchdog-CionJQzX.js} +1 -1
  13. package/dist/ui/assets/{cdp-Dov9DJkT.js → cdp-Bi_ZZORW.js} +4 -4
  14. package/dist/ui/assets/cost-command-DU2TIEMo.js +1 -0
  15. package/dist/ui/assets/{es-BCrJzVim.js → es-D5fSLUeK.js} +5 -5
  16. package/dist/ui/assets/{follower-sprinkle-bridge-B3x8kxZm.js → follower-sprinkle-bridge-ClXxojMG.js} +1 -1
  17. package/dist/ui/assets/github-DvIH7nBH.js +2 -0
  18. package/dist/ui/assets/{github-CGR7VRwT.js → github-w_6fA7fI.js} +1 -1
  19. package/dist/ui/assets/global-db-B97_fwjD.js +1 -0
  20. package/dist/ui/assets/google-BR3KH-kW.js +1 -0
  21. package/dist/ui/assets/google-ckNp9qko.js +1 -0
  22. package/dist/ui/assets/{google-shared-CZf2rVDo.js → google-shared-BBm3X1gE.js} +1 -1
  23. package/dist/ui/assets/{google-shared-D_dLvQOv.js → google-shared-DVo3REsz.js} +3 -3
  24. package/dist/ui/assets/{google-vertex-DjRs7IYH.js → google-vertex-CvP5D3qn.js} +1 -1
  25. package/dist/ui/assets/{google-vertex-ROGH_e7C.js → google-vertex-DMNr4B05.js} +1 -1
  26. package/dist/ui/assets/index-DjZsBrmT.js +1574 -0
  27. package/dist/ui/assets/{intercepted-oauth-BRuy2Kfs.js → intercepted-oauth-DXYHEGEL.js} +1 -1
  28. package/dist/ui/assets/{kernel-worker-DD8Usyxx.js → kernel-worker-3eWlr-XP.js} +1043 -961
  29. package/dist/ui/assets/lick-ws-bridge-D8_HMPGU.js +1 -0
  30. package/dist/ui/assets/{local-llm-EzEzei9O.js → local-llm-MXMrQ9Qy.js} +2 -2
  31. package/dist/ui/assets/{magick-wasm-27-2_Eho.js → magick-wasm-D0TJQdQE.js} +1 -1
  32. package/dist/ui/assets/{mistral-D8AzlZW_.js → mistral-DTDNhiYb.js} +2 -2
  33. package/dist/ui/assets/{mistral-DLpWJDUH.js → mistral-hrlZ9Fvn.js} +2 -2
  34. package/dist/ui/assets/{nuke-command-DDKQSsN7.js → nuke-command-BLKb4RXp.js} +1 -1
  35. package/dist/ui/assets/oauth-Cedh7cQP.js +1 -0
  36. package/dist/ui/assets/oauth-bootstrap-DOpOUmX1.js +2 -0
  37. package/dist/ui/assets/{oauth-service-CHW2vtTw.js → oauth-service-BnWJPxHa.js} +1 -1
  38. package/dist/ui/assets/{oauth-service-oUFpJ_KO.js → oauth-service-L6LpBh52.js} +1 -1
  39. package/dist/ui/assets/{offscreen-client-D1PbNub7.js → offscreen-client-C6iYkH_v.js} +1 -1
  40. package/dist/ui/assets/{onboarding-orchestrator-B82tihZv.js → onboarding-orchestrator-gxtgdjmG.js} +1 -1
  41. package/dist/ui/assets/{openai-codex-responses-DKXkHpcT.js → openai-codex-responses-Ca8W_NiF.js} +2 -2
  42. package/dist/ui/assets/{openai-codex-responses-C3po1AZV.js → openai-codex-responses-Ct8QA5QT.js} +4 -4
  43. package/dist/ui/assets/{openai-completions-B8rB17k5.js → openai-completions-CLlXSPdb.js} +3 -3
  44. package/dist/ui/assets/{openai-responses-C0p9Yysz.js → openai-responses-BZ2RM91p.js} +1 -1
  45. package/dist/ui/assets/{openai-responses-D0Pv1V2J.js → openai-responses-CPOMk1dt.js} +1 -1
  46. package/dist/ui/assets/{openai-responses-shared-tMsFRUiy.js → openai-responses-shared-BWBDlq5C.js} +5 -5
  47. package/dist/ui/assets/{openai-responses-shared-BHD4dY5m.js → openai-responses-shared-pPqB4OJp.js} +1 -1
  48. package/dist/ui/assets/panel-rpc-handlers-CrrAIzUK.js +1 -0
  49. package/dist/ui/assets/provider-BvQcRKGs.js +1 -0
  50. package/dist/ui/assets/provider-DmtVgsFn.js +2 -0
  51. package/dist/ui/assets/provider-store-access-CNmZMEgu.js +1 -0
  52. package/dist/ui/assets/provider-store-access-CzxlROAo.js +1 -0
  53. package/dist/ui/assets/proxied-fetch-DktYWmJT.js +1 -0
  54. package/dist/ui/assets/{pyodide-DgAqpC8i.js → pyodide-V32Gh4TZ.js} +2 -2
  55. package/dist/ui/assets/{remote-terminal-view-J9J7pk1H.js → remote-terminal-view-DTwtF24a.js} +3 -3
  56. package/dist/ui/assets/{secret-env--0BcYjEq.js → secret-env-Ca6g9EJr.js} +1 -1
  57. package/dist/ui/assets/{slicc-editor-BzGs3P5h.js → slicc-editor-EjiRB92k.js} +1 -1
  58. package/dist/ui/assets/{spawn-KTT1KFUY.js → spawn-DP9_12yt.js} +1 -1
  59. package/dist/ui/assets/{sql-wasm-BgLnn2vi.js → sql-wasm-C33d0bG7.js} +2 -2
  60. package/dist/ui/assets/store-C0fTrWzc.js +1 -0
  61. package/dist/ui/assets/{tray-leave-runtime-B-6PC-Ne.js → tray-leave-runtime-CvLzwPJU.js} +1 -1
  62. package/dist/ui/assets/upgrade-detection-C7EfIRB6.js +1 -0
  63. package/dist/ui/assets/{xai-grok-Bs1PPsw-.js → xai-grok-BTgDW3MI.js} +1 -1
  64. package/dist/ui/assets/{xai-grok-D-OPqtYg.js → xai-grok-EEexU6rP.js} +1 -1
  65. package/dist/ui/assets/{xai-grok-sanitize-CiOn_xsO.js → xai-grok-sanitize-h_8XMTD9.js} +1 -1
  66. package/dist/ui/index.html +1 -1
  67. package/dist/ui/packages/webapp/index.html +1 -1
  68. package/package.json +1 -1
  69. package/dist/ui/assets/adobe-C6L-KqM8.js +0 -2
  70. package/dist/ui/assets/azure-openai-E3Wl5zJa.js +0 -1
  71. package/dist/ui/assets/cost-command-yt4lKOdD.js +0 -1
  72. package/dist/ui/assets/github-BwW6n9oL.js +0 -2
  73. package/dist/ui/assets/google-C-gvkOTh.js +0 -1
  74. package/dist/ui/assets/google-CajcZ91f.js +0 -1
  75. package/dist/ui/assets/index-C4gHNw6L.js +0 -1574
  76. package/dist/ui/assets/lick-ws-bridge-ZB_XB9cZ.js +0 -1
  77. package/dist/ui/assets/oauth-bootstrap-BEREFAjD.js +0 -1
  78. package/dist/ui/assets/panel-rpc-handlers-zcYFQzD1.js +0 -1
  79. package/dist/ui/assets/upgrade-detection-CKnfP1Ro.js +0 -1
  80. /package/dist/ui/assets/{active-transport-DeSPCdTV.js → active-transport-Dm6CWYVE.js} +0 -0
  81. /package/dist/ui/assets/{azure-ai-foundry-k_w7vD5C.js → azure-ai-foundry-BHLfY_0t.js} +0 -0
  82. /package/dist/ui/assets/{chat-fixture-BNN19l1e.js → chat-fixture-DOzffHLr.js} +0 -0
  83. /package/dist/ui/assets/{git-config-DFJqG7AS.js → git-config-CGMfR0WK.js} +0 -0
  84. /package/dist/ui/assets/{page-storage-sync-BxtXNbwY.js → page-storage-sync-CqMAh8jG.js} +0 -0
  85. /package/dist/ui/assets/{rum-wVO4iYd-.js → rum-DCU8sePD.js} +0 -0
  86. /package/dist/ui/assets/{sprinkle-bridge-channel-no1Jz9ii.js → sprinkle-bridge-channel-DJC5SGWr.js} +0 -0
  87. /package/dist/ui/assets/{xai-grok-errors-CGcnoVae.js → xai-grok-errors-Bzn3oNvW.js} +0 -0
  88. /package/dist/ui/assets/{xai-grok-models-0q2zveAT.js → xai-grok-models-DMYWtapT.js} +0 -0
@@ -1 +0,0 @@
1
- import{Q as e,d as t,f as n,q as r,u as i}from"./kernel-worker-DD8Usyxx.js";const a=e(`lick-ws-bridge`);function o(e,o){try{new URL(o.locationHref)}catch(e){throw Error(`startLickWsBridge: invalid locationHref ${JSON.stringify(o.locationHref)}: ${e instanceof Error?e.message:String(e)}`)}let s=o.webSocketFactory??(e=>new WebSocket(e)),c=o.reconnectDelayMs??3e3,l=o.setTimeoutFn??setTimeout,u=o.clearTimeoutFn??clearTimeout,d=!1,f=null,p=null,m=0,h=!1,g=i(o.locationHref),_=()=>{if(d)return;let e;try{e=s(g)}catch(e){a.error(`Failed to construct lick WebSocket`,{url:g,error:e instanceof Error?e.message:String(e)}),v(`construct-threw`);return}f=e,e.onopen=()=>{m>0?a.info(`Lick WebSocket recovered`,{attempts:m}):a.info(`Lick WebSocket connected`),m=0,h=!1},e.onmessage=t=>{b(e,t.data).catch(e=>{let n=typeof t.data==`string`?t.data.slice(0,200):`[non-string payload]`;a.error(`Failed to process lick message`,{error:e instanceof Error?e.message:String(e),preview:n})})},e.onclose=t=>{if(f===e&&(f=null),d)return;let n=t.reason?` reason=${JSON.stringify(t.reason)}`:``;v(`disconnected code=${t.code}${n}`)},e.onerror=e=>{let t=e.target;a.error(`Lick WebSocket error`,{url:g,readyState:t?.readyState,eventType:e.type})}},v=t=>{if(p!=null){a.debug(`Lick WS failure during pending reconnect — keeping existing timer`,{cause:t});return}m++;let n=Math.min(c*2**(m-1),6e4),r={url:g,attempt:m,cause:t,retryInMs:n};if(m>=3?a.error(`Lick WebSocket still down`,r):a.warn(`Lick WebSocket down`,r),m===20&&!h){h=!0;try{e.emitEvent({type:`session-reload`,targetScoop:void 0,timestamp:new Date().toISOString(),body:{reason:`lick-ws-bridge-down`,url:g,attempts:m}})}catch(e){a.error(`Failed to emit lick-ws-bridge-down signal`,{error:e instanceof Error?e.message:String(e)})}}y(n)},y=e=>{d||p!=null||(p=l(()=>{p=null,_()},e))},b=async(t,n)=>{let r=JSON.parse(typeof n==`string`?n:String(n));if(r.requestId){let e=r.requestId,n=await x(r,e);if(d||f!==t||t.readyState!==1){a.warn(`Lick reply dropped — socket changed/closed mid-request`,{type:r.type,requestId:e});return}try{t.send(JSON.stringify(n))}catch(t){a.error(`ws.send() failed delivering lick reply`,{type:r.type,requestId:e,error:t instanceof Error?t.message:String(t)})}return}if(r.type===`webhook_event`){let t=typeof r.webhookId==`string`?r.webhookId:null;if(!t){a.error(`Malformed webhook_event from lick-ws`,{receivedKeys:Object.keys(r)});return}let n=r.headers&&typeof r.headers==`object`?r.headers:{};try{e.handleWebhookEvent(t,n,r.body)}catch(e){a.error(`Webhook event dispatch failed`,{webhookId:t,error:e instanceof Error?e.message:String(e)})}return}if(r.type===`navigate_event`){let t=typeof r.verb==`string`?r.verb:null,n=typeof r.target==`string`?r.target:null,i=typeof r.url==`string`&&r.url.length>0?r.url:null;if(t!==`handoff`&&t!==`upskill`||!n||!i){a.debug(`navigate_event dropped — invalid payload`,{hasVerb:!!t,hasTarget:!!n,hasUrl:!!i});return}let o={url:i,verb:t,target:n};typeof r.instruction==`string`&&(o.instruction=r.instruction),typeof r.branch==`string`&&(o.branch=r.branch),typeof r.path==`string`&&(o.path=r.path),typeof r.title==`string`&&(o.title=r.title),e.emitEvent({type:`navigate`,navigateUrl:i,targetScoop:void 0,timestamp:typeof r.timestamp==`string`?r.timestamp:new Date().toISOString(),body:o})}},x=async(t,n)=>{try{switch(t.type){case`list_webhooks`:return{type:`response`,requestId:n,data:e.listWebhooks().map(e=>({...e,url:S(e.id)}))};case`create_webhook`:{let r=await e.createWebhook(t.name||`default`,t.scoop,t.filter);return{type:`response`,requestId:n,data:{...r,url:S(r.id)}}}case`delete_webhook`:return await e.deleteWebhook(t.id)?{type:`response`,requestId:n,data:{ok:!0}}:{type:`response`,requestId:n,data:{error:`Webhook not found`}};case`list_crontasks`:return{type:`response`,requestId:n,data:e.listCronTasks()};case`create_crontask`:if(!t.name)throw Error(`name is required`);if(!t.cron)throw Error(`cron is required`);return{type:`response`,requestId:n,data:await e.createCronTask(t.name,t.cron,t.scoop,t.filter)};case`delete_crontask`:return await e.deleteCronTask(t.id)?{type:`response`,requestId:n,data:{ok:!0}}:{type:`response`,requestId:n,data:{error:`Cron task not found`}};case`tray_status`:{let e=r();return{type:`response`,requestId:n,data:{state:e.state,joinUrl:e.session?.joinUrl??null,workerBaseUrl:e.session?.workerBaseUrl??null,trayId:e.session?.trayId??null}}}default:return{type:`response`,requestId:n,error:`Unknown request type: ${t.type}`}}}catch(e){return{type:`response`,requestId:n,error:e instanceof Error?e.message:String(e)}}},S=e=>{let i=r().session;return i?.webhookUrl?t(i.webhookUrl,e):n(o.locationHref,e)};return _(),{stop(){if(d)return;d=!0,p!=null&&(u(p),p=null);let e=f;if(f=null,e)try{e.close()}catch(t){e.readyState!==3&&e.readyState!==2&&a.warn(`Lick socket close() threw before terminal state`,{readyState:e.readyState,error:t instanceof Error?t.message:String(t)})}}}}export{o as startLickWsBridge};
@@ -1 +0,0 @@
1
- import{G as e,p as t,s as n,y as r}from"./index-C4gHNw6L.js";var i=e(`oauth-bootstrap`),a=6e4;async function o(){let e=n();i.info(`Bootstrap OAuth replicas`,{count:e.length});for(let n of e){if(!n.accessToken){i.debug(`Skipping account without token`,{providerId:n.providerId});continue}if((n.tokenExpiresAt??1/0)-Date.now()<=a){let e=r(n.providerId);if(e?.onSilentRenew)try{if(await e.onSilentRenew()){i.info(`Silently renewed OAuth token`,{providerId:n.providerId});continue}i.warn(`Silent renewal yielded no token; user must re-authenticate`,{providerId:n.providerId});continue}catch(e){i.warn(`Silent renewal failed`,{providerId:n.providerId,error:e instanceof Error?e.message:String(e)});continue}i.debug(`Skipping expired account (no silent-renew hook)`,{providerId:n.providerId});continue}try{await t({providerId:n.providerId,accessToken:n.accessToken,refreshToken:n.refreshToken,tokenExpiresAt:n.tokenExpiresAt,userName:n.userName,userAvatar:n.userAvatar}),i.debug(`Bootstrapped OAuth replica`,{providerId:n.providerId})}catch(e){i.error(`OAuth bootstrap failed`,{providerId:n.providerId,error:e instanceof Error?e.message:String(e)})}}}export{o as bootstrapOAuthReplicas};
@@ -1 +0,0 @@
1
- import{c as e,m as t}from"./index-C4gHNw6L.js";function n(n={}){return{"page-info":()=>({origin:window.location.origin,href:window.location.href,title:document.title||``}),screencapture:async({mimeType:e,quality:t})=>{let n=await l(e,t),r=await n.arrayBuffer(),i=await u(n);return{bytes:r,width:i.width,height:i.height,mimeType:e}},"speak-text":async({text:e,lang:t,voice:n,rate:r,pitch:i,volume:a})=>{if(typeof speechSynthesis>`u`)throw Error(`speechSynthesis is unavailable in this page`);return await new Promise((o,s)=>{let c=new SpeechSynthesisUtterance(e);if(t!==void 0&&(c.lang=t),r!==void 0&&(c.rate=r),i!==void 0&&(c.pitch=i),a!==void 0&&(c.volume=a),n){let e=speechSynthesis.getVoices().find(e=>e.name===n);e&&(c.voice=e)}c.onend=()=>o(),c.onerror=e=>s(Error(`speak: ${e.error||`utterance failed`}`)),speechSynthesis.speak(c)}),{done:!0}},"list-voices":async()=>{if(typeof speechSynthesis>`u`)throw Error(`speechSynthesis is unavailable in this page`);let e=speechSynthesis.getVoices();return e.length>0?{voices:e.map(c)}:{voices:(await new Promise(e=>{let t=()=>{speechSynthesis.removeEventListener(`voiceschanged`,t),e(speechSynthesis.getVoices())};speechSynthesis.addEventListener(`voiceschanged`,t),setTimeout(()=>{speechSynthesis.removeEventListener(`voiceschanged`,t),e(speechSynthesis.getVoices())},1e3)})).map(c)}},"play-audio":async({bytes:e,volume:t})=>{if(typeof AudioContext>`u`)throw Error(`Web Audio API is unavailable in this page`);let n=new AudioContext;try{let r=await n.decodeAudioData(e.slice(0)),i=n.createBufferSource();if(i.buffer=r,t!==void 0){let e=n.createGain();e.gain.value=Math.max(0,Math.min(1,t)),i.connect(e),e.connect(n.destination)}else i.connect(n.destination);await new Promise(e=>{i.onended=()=>e(),i.start()})}finally{try{await n.close()}catch{}}return{done:!0}},"play-chime":async({tone:e})=>{let t={success:[880,1320],error:[440,220],notify:[660,660]},[n,r]=t[e??`notify`]??t.notify;if(typeof AudioContext>`u`)throw Error(`Web Audio API is unavailable in this page`);let i=new AudioContext;try{let e=i.currentTime;for(let[t,a]of[n,r].entries()){let n=i.createOscillator();n.type=`sine`,n.frequency.value=a;let r=i.createGain();r.gain.setValueAtTime(1e-4,e+t*.18),r.gain.exponentialRampToValueAtTime(.2,e+t*.18+.02),r.gain.exponentialRampToValueAtTime(1e-4,e+t*.18+.18),n.connect(r),r.connect(i.destination),n.start(e+t*.18),n.stop(e+t*.18+.2)}await new Promise(e=>setTimeout(e,450))}finally{try{await i.close()}catch{}}return{done:!0}},"clipboard-read-text":async()=>{if(!navigator.clipboard?.readText)throw Error(`clipboard API unavailable`);return{text:await navigator.clipboard.readText()}},"clipboard-write-text":async({text:e})=>{if(!navigator.clipboard?.writeText)throw Error(`clipboard API unavailable`);return await f(),await navigator.clipboard.writeText(e),{done:!0}},"clipboard-write-image":async({bytes:e,mimeType:t})=>{if(!navigator.clipboard?.write||typeof ClipboardItem>`u`)throw Error(`clipboard image API unavailable`);let n,r=new Blob([e],{type:t});return n=t===`image/png`?r:await d(r),await f(),await navigator.clipboard.write([new ClipboardItem({"image/png":n})]),{done:!0}},"window-open":async({url:e,target:t,features:n})=>({opened:window.open(e,t??`_blank`,n??`noopener,noreferrer`)!==null}),"oauth-popup":async({url:e})=>({redirectUrl:await s(e)}),"capture-camera":async e=>await i(e),"enumerate-media-devices":async()=>{if(!navigator.mediaDevices?.enumerateDevices)throw Error(`enumerateDevices is not supported in this browser`);let e=await navigator.mediaDevices.enumerateDevices(),t=e=>({deviceId:e.deviceId,label:e.label||``,...e.groupId?{groupId:e.groupId}:{}});return{videoinputs:e.filter(e=>e.kind===`videoinput`).map(t),audioinputs:e.filter(e=>e.kind===`audioinput`).map(t)}},"tray-reset":async()=>{if(!n.resetTray)throw Error(`host reset: no active tray session to reset`);return await n.resetTray()},"tray-leave":async({workerBaseUrl:e,requestId:t})=>{if(!n.leaveTray)throw Error(`host leave: tray leave is not available in this environment`);return await n.leaveTray({workerBaseUrl:e,requestId:t})},"oauth-extras-set":({providerId:n,domains:r})=>(t(n,r),{storeAfter:e()})}}var r=1500;async function i(e){if(!navigator.mediaDevices?.getUserMedia)throw Error(`getUserMedia is not supported in this browser`);let t=e.mode===`photo`||e.captureVideo!==!1,n=!!e.captureAudio&&e.mode===`video`;if(!t&&!n)throw Error(`camera capture: at least one of video or audio must be requested`);let i=await o({wantVideo:t,videoDeviceId:t?await a(e.deviceId,`videoinput`):void 0,audioDeviceId:n?await a(e.audioDeviceId,`audioinput`):void 0,wantAudio:n,width:e.width,height:e.height,frameRate:e.frameRate,exact:!!e.exactSize});try{let n=null,a=0,o=0;if(t){n=document.createElement(`video`),n.srcObject=i,n.muted=!0,n.playsInline=!0;let e=n;await new Promise((t,n)=>{e.onloadedmetadata=()=>e.play().then(()=>t()).catch(n),e.onerror=()=>n(Error(`Failed to load camera stream`))}),await new Promise(e=>requestAnimationFrame(()=>e())),await new Promise(e=>requestAnimationFrame(()=>e())),a=e.videoWidth,o=e.videoHeight}if(e.mode===`photo`){if(!n)throw Error(`photo capture requires a video track`);let t=e.warmupMs??r;t>0&&await new Promise(e=>setTimeout(e,t));let i=document.createElement(`canvas`);i.width=a,i.height=o;let s=i.getContext(`2d`);if(!s)throw Error(`Failed to get canvas context`);s.drawImage(n,0,0,a,o);let c=await new Promise((t,n)=>{i.toBlob(e=>e?t(e):n(Error(`Failed to encode photo`)),e.mimeType,e.quality)});return{bytes:await c.arrayBuffer(),mimeType:c.type||e.mimeType,width:a,height:o}}let s=Math.max(100,Math.min(e.durationMs??5e3,6e4)),c=typeof MediaRecorder<`u`&&MediaRecorder.isTypeSupported(e.mimeType)?e.mimeType:`video/webm`,l=new MediaRecorder(i,{mimeType:c}),u=[];l.ondataavailable=e=>{e.data&&e.data.size>0&&u.push(e.data)};let d=new Promise(e=>{l.onstop=()=>e()});l.start(),await new Promise(e=>setTimeout(e,s)),l.stop(),await d;let f=new Blob(u,{type:c});return{bytes:await f.arrayBuffer(),mimeType:f.type||c,width:a,height:o,durationMs:s}}finally{i.getTracks().forEach(e=>e.stop())}}async function a(e,t){if(e===void 0||e===``)return;if(!/^\d+$/.test(e))return e;if(!navigator.mediaDevices?.enumerateDevices)return;let n=parseInt(e,10);return(await navigator.mediaDevices.enumerateDevices()).filter(e=>e.kind===t)[n]?.deviceId}async function o(e){let t=t=>{if(!e.wantVideo)return!1;let n={};return e.videoDeviceId&&(n.deviceId={exact:e.videoDeviceId}),e.width&&(n.width=t===`exact`?{exact:e.width}:{ideal:e.width}),e.height&&(n.height=t===`exact`?{exact:e.height}:{ideal:e.height}),e.frameRate&&(n.frameRate=t===`exact`?{exact:e.frameRate}:{ideal:e.frameRate}),Object.keys(n).length>0?n:!0},n=()=>e.wantAudio?e.audioDeviceId?{deviceId:{exact:e.audioDeviceId}}:!0:!1;try{return await navigator.mediaDevices.getUserMedia({video:t(e.exact?`exact`:`ideal`),audio:n()})}catch(r){let i=r?.name;if(!e.exact||i!==`OverconstrainedError`&&i!==`NotReadableError`)throw r;return console.warn(`panel-rpc:capture-camera: exact ${e.width??`?`}x${e.height??`?`}@${e.frameRate??`?`} unmet, falling back to ideal`),await navigator.mediaDevices.getUserMedia({video:t(`ideal`),audio:n()})}}function s(e){return new Promise(t=>{let n=window.open(e,`_blank`,`width=500,height=700,popup=yes`),r=!1,i=null,a=()=>{r||(r=!0,window.removeEventListener(`message`,o),clearTimeout(s),i&&clearInterval(i))},o=e=>{if(e.data?.type!==`oauth-callback`||e.origin!==window.location.origin||n&&e.source!==n)return;if(a(),e.data.error){console.error(`[panel-rpc:oauth-popup] OAuth error:`,e.data.error),t(null);return}let r=e.data.redirectUrl;typeof r!=`string`&&r!=null||t(r??null)};window.addEventListener(`message`,o),(location.pathname.startsWith(`/electron`)||new URLSearchParams(location.search).get(`runtime`)===`electron-overlay`)&&(i=setInterval(async()=>{if(!r)try{let e=await fetch(`/api/oauth-result`);if(e.status===204)return;let n=await e.json();if(r)return;if(a(),n.error){console.error(`[panel-rpc:oauth-popup] Server relay OAuth error:`,n.error),t(null);return}t(n.redirectUrl??null)}catch{}},1e3));let s=setTimeout(()=>{a();try{n?.close()}catch{}t(null)},12e4)})}function c(e){return{name:e.name,lang:e.lang,default:e.default}}async function l(e,t){if(!navigator.mediaDevices?.getDisplayMedia)throw Error(`screen capture is not supported in this browser`);let n=await navigator.mediaDevices.getDisplayMedia({video:!0,audio:!1});try{let r=document.createElement(`video`);r.srcObject=n,r.muted=!0,r.playsInline=!0,await new Promise((e,t)=>{r.onloadedmetadata=()=>r.play().then(()=>e()).catch(t),r.onerror=()=>t(Error(`Failed to load video stream`))}),await new Promise(e=>setTimeout(e,100));let i=r.videoWidth,a=r.videoHeight,o=document.createElement(`canvas`);o.width=i,o.height=a;let s=o.getContext(`2d`);if(!s)throw Error(`Failed to get canvas context`);return s.drawImage(r,0,0,i,a),await new Promise((n,r)=>{o.toBlob(e=>e?n(e):r(Error(`Failed to create image blob`)),e,t)})}finally{n.getTracks().forEach(e=>e.stop())}}async function u(e){let t=URL.createObjectURL(e);try{let e=new Image;return await new Promise((n,r)=>{e.onload=()=>n(),e.onerror=()=>r(Error(`Failed to decode capture`)),e.src=t}),{width:e.naturalWidth,height:e.naturalHeight}}finally{URL.revokeObjectURL(t)}}async function d(e){let t=URL.createObjectURL(e);try{let e=new Image;await new Promise((n,r)=>{e.onload=()=>n(),e.onerror=()=>r(Error(`Failed to load image for clipboard conversion`)),e.src=t});let n=document.createElement(`canvas`);n.width=e.naturalWidth,n.height=e.naturalHeight;let r=n.getContext(`2d`);if(!r)throw Error(`Failed to get canvas context`);return r.drawImage(e,0,0),await new Promise((e,t)=>{n.toBlob(n=>n?e(n):t(Error(`PNG re-encode failed`)),`image/png`)})}finally{URL.revokeObjectURL(t)}}async function f(e=5*6e4){typeof document>`u`||typeof document.hasFocus==`function`&&(document.hasFocus()||await new Promise((t,n)=>{let r=()=>{window.removeEventListener(`focus`,i),document.removeEventListener(`visibilitychange`,a),clearTimeout(o)},i=()=>{document.hasFocus()&&(r(),t())},a=()=>{document.visibilityState===`visible`&&document.hasFocus()&&(r(),t())},o=setTimeout(()=>{r(),n(Error(`timed out waiting for window focus`))},e);window.addEventListener(`focus`,i),document.addEventListener(`visibilitychange`,a)}))}export{n as createStandalonePanelRpcHandlers};
@@ -1 +0,0 @@
1
- import{X as e,Z as t}from"./kernel-worker-DD8Usyxx.js";const n=`slicc:last-seen-version`;function r(){return{version:`3.2.3`,releasedAt:`2026-05-21T21:21:30Z`}}async function i(){let t=await e(n);return t&&t.length>0?t:null}async function a(e){await t(n,e)}async function o(){let e=r(),t=await i();return t===null?(await a(e.version),{bundled:e,lastSeen:null,isUpgrade:!1}):t===e.version?{bundled:e,lastSeen:t,isUpgrade:!1}:{bundled:e,lastSeen:t,isUpgrade:!0}}async function s(e){await a(e)}export{o as detectUpgrade,s as recordVersionSeen};