sliccy 4.0.1 → 4.1.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 (125) hide show
  1. package/dist/ui/assets/{adobe-DoAyyVNn.js → adobe-BwRrpnWQ.js} +2 -2
  2. package/dist/ui/assets/{adobe-VfIHddf0.js → adobe-YCqMd4M8.js} +1 -1
  3. package/dist/ui/assets/{agent-message-to-chat-CXyvHW11.js → agent-message-to-chat-ChcTjd5F.js} +1 -1
  4. package/dist/ui/assets/{anthropic-CU8e0YEi.js → anthropic-CltEkzGo.js} +1 -1
  5. package/dist/ui/assets/{apps-Cr4q5X7Z.js → apps-vzxUl8nN.js} +1 -1
  6. package/dist/ui/assets/{azure-openai-BYh7YxvP.js → azure-openai-5Rfc0X5i.js} +1 -1
  7. package/dist/ui/assets/{azure-openai-BrqJygof.js → azure-openai-aAwJc4Fa.js} +1 -1
  8. package/dist/ui/assets/{azure-openai-responses-DLYXw2dZ.js → azure-openai-responses-DESC-gcX.js} +1 -1
  9. package/dist/ui/assets/{bsh-watchdog-CbgVC6hK.js → bsh-watchdog-B1TPqoBQ.js} +1 -1
  10. package/dist/ui/assets/cdn-url-builder-Cq7LLgru.js +1 -0
  11. package/dist/ui/assets/{cdp-Cumq3Yue.js → cdp-CujGeIJU.js} +3 -3
  12. package/dist/ui/assets/composer-speech-DfnD3xcC.js +1 -0
  13. package/dist/ui/assets/{connect-surface-DeZTd_-m.js → connect-surface-jUsi5PyQ.js} +1 -1
  14. package/dist/ui/assets/dip-Dggx_orS.js +1 -0
  15. package/dist/ui/assets/{dist-BogPgVvk.js → dist-CBvnVOEd.js} +2 -2
  16. package/dist/ui/assets/{dist-YX1oCw5p.js → dist-dBl5PjGe.js} +1 -1
  17. package/dist/ui/assets/{es-kzztLvuJ.js → es-CnYi0fp5.js} +1 -1
  18. package/dist/ui/assets/esp8266-CMGB5YBw.js +1 -0
  19. package/dist/ui/assets/{esptool-operations-CCUhSa0l.js → esptool-operations-CfNLR8qu.js} +2 -2
  20. package/dist/ui/assets/{fs-Bg0mgP1B.js → fs-CYeTnPI-.js} +2 -2
  21. package/dist/ui/assets/{fs-BR9YHW3k.js → fs-DXM6_XIF.js} +1 -1
  22. package/dist/ui/assets/{github-BcMC7w-5.js → github-BSPJYOw7.js} +1 -1
  23. package/dist/ui/assets/{github-CT_UMuEQ.js → github-DU8PC7nW.js} +2 -2
  24. package/dist/ui/assets/{github-copilot-Dh6HXFWt.js → github-copilot-BFJtAP76.js} +2 -2
  25. package/dist/ui/assets/{github-copilot-B-KOWbdV.js → github-copilot-DRgOjqUh.js} +1 -1
  26. package/dist/ui/assets/{google-BlIK_dKp.js → google-SsK6qdQk.js} +1 -1
  27. package/dist/ui/assets/{google-shared-CRong-YB.js → google-shared-CZRDSncd.js} +1 -1
  28. package/dist/ui/assets/{google-vertex-1C3q9ZMN.js → google-vertex-Cmb8gKhI.js} +1 -1
  29. package/dist/ui/assets/hear-CCWbFt5_.js +1 -0
  30. package/dist/ui/assets/hear-D7LjCnnn.js +1 -0
  31. package/dist/ui/assets/{hosted-config-apply-BPz7z9ob.js → hosted-config-apply-DsUClJCf.js} +1 -1
  32. package/dist/ui/assets/{kernel-worker-CzfA4MkE.js → kernel-worker-B2ABxAEr.js} +1057 -1034
  33. package/dist/ui/assets/kokoro-ZxnO-aOl.js +4 -0
  34. package/dist/ui/assets/kokoro-engine-DyvWt6FN.js +2 -0
  35. package/dist/ui/assets/kokoro-engine-yfBASo8d.js +1 -0
  36. package/dist/ui/assets/kokoro-pZaPWf_-.js +4 -0
  37. package/dist/ui/assets/{legacy-styles-tj4HdTF2.js → legacy-styles-BgH6AX8T.js} +1 -1
  38. package/dist/ui/assets/{lick-ws-bridge-C4IKXkw-.js → lick-ws-bridge-Ct6u2TbW.js} +1 -1
  39. package/dist/ui/assets/{local-llm-BovXckYJ.js → local-llm-Dq1pfvQ-.js} +1 -1
  40. package/dist/ui/assets/magick-wasm-C5I4sRv-.js +1 -0
  41. package/dist/ui/assets/{main-DiKQ_cUI.js → main-VDVlW6vJ.js} +4 -4
  42. package/dist/ui/assets/{main-cherry-Bv-RASh-.js → main-cherry-DoViGBUI.js} +1 -1
  43. package/dist/ui/assets/mime-types-BqLkKWa7.js +1 -0
  44. package/dist/ui/assets/{mistral-DbpbsUuD.js → mistral-DVlL8TT7.js} +1 -1
  45. package/dist/ui/assets/mount-B0bCtsNy.js +1 -0
  46. package/dist/ui/assets/mount-CqEOKmto.js +2 -0
  47. package/dist/ui/assets/{mount-id-B2LAsUxP.js → mount-id-BL7k4LOS.js} +1 -1
  48. package/dist/ui/assets/{mount-picker-popup-Q_33JNg2.js → mount-picker-popup-L-IvOEYc.js} +1 -1
  49. package/dist/ui/assets/{new-session-BYIn8giU.js → new-session-BCfdkRT4.js} +1 -1
  50. package/dist/ui/assets/oauth-bootstrap-05gVzJH7.js +2 -0
  51. package/dist/ui/assets/{oauth-service-oj6dWuDF.js → oauth-service-CPXp6Df0.js} +1 -1
  52. package/dist/ui/assets/{oauth-service-CSJo71ct.js → oauth-service-DQVciyk_.js} +1 -1
  53. package/dist/ui/assets/{onboarding-orchestrator-9YyoAT9E.js → onboarding-orchestrator-D86cOg_Y.js} +1 -1
  54. package/dist/ui/assets/{openai-codex-NeheBH-W.js → openai-codex-Ce9D8qSi.js} +1 -1
  55. package/dist/ui/assets/{openai-codex-CVfD17gd.js → openai-codex-WUlFTC7l.js} +1 -1
  56. package/dist/ui/assets/{openai-codex-responses-D7GsgAZ6.js → openai-codex-responses-Cw7sZSKi.js} +1 -1
  57. package/dist/ui/assets/{openai-completions-D0XLkmAm.js → openai-completions-BANj7Zwf.js} +1 -1
  58. package/dist/ui/assets/{openai-responses-Dtcl9mGK.js → openai-responses-Bdz_r-35.js} +1 -1
  59. package/dist/ui/assets/{openai-responses-shared-CmhR3xeD.js → openai-responses-shared-Bf0GVnxb.js} +1 -1
  60. package/dist/ui/assets/panel-rpc-Ck8CVyMh.js +1 -0
  61. package/dist/ui/assets/panel-rpc-handlers-D9E1NuOF.js +2 -0
  62. package/dist/ui/assets/{picker-approval-BcmiXq7P.js → picker-approval-ZlSNf9XH.js} +1 -1
  63. package/dist/ui/assets/{provider-BsHT9NE2.js → provider-BD44wd5M.js} +2 -2
  64. package/dist/ui/assets/{provider-wT4Jn66D.js → provider-DchdZ_iY.js} +1 -1
  65. package/dist/ui/assets/{provider-settings-Ce5TqtO7.js → provider-settings-Bpero1dy.js} +2 -2
  66. package/dist/ui/assets/provider-store-access-BRsxr8aG.js +1 -0
  67. package/dist/ui/assets/provider-store-access-CXH2pv7H.js +1 -0
  68. package/dist/ui/assets/{providers-pbugLO2n.js → providers-BkYhxKu6.js} +1 -1
  69. package/dist/ui/assets/{quick-llm-C8ipHUcS.js → quick-llm-C7qsNQ23.js} +1 -1
  70. package/dist/ui/assets/{remote-cdp-transport-BiS9AZmA.js → remote-cdp-transport-CY4HCHMt.js} +1 -1
  71. package/dist/ui/assets/{remote-terminal-view-GI0J7uCs.js → remote-terminal-view-CAspkbd0.js} +1 -1
  72. package/dist/ui/assets/{secret-env-l9-UXjo5.js → secret-env-ClpNQz5E.js} +1 -1
  73. package/dist/ui/assets/session-freezer-CDJ0LMDM.js +1 -0
  74. package/dist/ui/assets/{setup-sprinkle-exec-DRqkhOqm.js → setup-sprinkle-exec-3Ce8eZIO.js} +1 -1
  75. package/dist/ui/assets/setup-sudo-DvCouRbU.js +1 -0
  76. package/dist/ui/assets/{slicc-editor-D5MmcwO7.js → slicc-editor-3x24ubXG.js} +1 -1
  77. package/dist/ui/assets/speak-BP4kRSob.js +1 -0
  78. package/dist/ui/assets/speak-ClR2IFMA.js +1 -0
  79. package/dist/ui/assets/speech-GZe1rUoJ.js +1 -0
  80. package/dist/ui/assets/{sprinkle-manager-CcuRLEL6.js → sprinkle-manager-CnY6ywkn.js} +1 -1
  81. package/dist/ui/assets/{sprinkle-renderer-CtNbE53l.js → sprinkle-renderer-VEg0Lrdb.js} +3 -3
  82. package/dist/ui/assets/{store-DVWA7_4b.js → store-CwrBveMa.js} +1 -1
  83. package/dist/ui/assets/{sudo-Bjf0v6xP.js → sudo-zQotxIxd.js} +1 -1
  84. package/dist/ui/assets/{sync-dialog-OuOR653p.js → sync-dialog-Du9ou3tH.js} +1 -1
  85. package/dist/ui/assets/transformers-env-6vj5CcH9.js +1 -0
  86. package/dist/ui/assets/transformers-env-BpvHTeJT.js +1 -0
  87. package/dist/ui/assets/transformers.web-CZmmPdTH.js +37 -0
  88. package/dist/ui/assets/transformers.web-DJfCkvxA.js +43 -0
  89. package/dist/ui/assets/{tray-leave-runtime-BTXeZHoM.js → tray-leave-runtime-LeLWNjL3.js} +1 -1
  90. package/dist/ui/assets/upgrade-detection-CG244vbe.js +1 -0
  91. package/dist/ui/assets/voice-reply-DKjUm-gK.js +1 -0
  92. package/dist/ui/assets/{wc-attach-BhfccWfJ.js → wc-attach-BhTWbr7A.js} +3 -3
  93. package/dist/ui/assets/{wc-detached-CJ8se6La.js → wc-detached-CaTkd06a.js} +1 -1
  94. package/dist/ui/assets/wc-extension-CBhrd25w.js +2 -0
  95. package/dist/ui/assets/{wc-live-rni8HvKq.js → wc-live-D-74QVkK.js} +6 -6
  96. package/dist/ui/assets/{wc-nav-DceBq2sz.js → wc-nav-sEwx5MmG.js} +2 -2
  97. package/dist/ui/assets/{wc-onboarding-BQXJc7XV.js → wc-onboarding-B8ix1fhH.js} +2 -2
  98. package/dist/ui/assets/{wc-placeholder-j1jeovFY.js → wc-placeholder-CxOC717D.js} +3 -3
  99. package/dist/ui/assets/{wc-settings-cYZ3nb2_.js → wc-settings-FThSal5a.js} +3 -3
  100. package/dist/ui/assets/{wc-shell-B3_sXQdU.js → wc-shell-DZWnmdP6.js} +233 -110
  101. package/dist/ui/assets/{wc-sprinkles-EN6gXKWB.js → wc-sprinkles-DBsp5Mxm.js} +2 -2
  102. package/dist/ui/assets/{wc-tray-BDZjjZBC.js → wc-tray-6hyXFRhO.js} +3 -3
  103. package/dist/ui/assets/{wc-voice-DSXr384a.js → wc-voice-DWqHH3C5.js} +1 -1
  104. package/dist/ui/assets/{welcome-detection-BdSKCbMR.js → welcome-detection-DDhgn9wj.js} +1 -1
  105. package/dist/ui/assets/whisper-session-D6m7AmYy.js +2 -0
  106. package/dist/ui/assets/{xai-grok-CO4Xs6H4.js → xai-grok-BmiypN03.js} +1 -1
  107. package/dist/ui/assets/{xai-grok-CgbrlwLJ.js → xai-grok-sUSfoNvO.js} +1 -1
  108. package/dist/ui/index.html +1 -1
  109. package/dist/ui/packages/webapp/index.html +1 -1
  110. package/package.json +1 -1
  111. package/dist/ui/assets/dip-bVCNYQPw.js +0 -1
  112. package/dist/ui/assets/esp8266-Gx-cAXS3.js +0 -1
  113. package/dist/ui/assets/magick-wasm-DWTf-fBy.js +0 -1
  114. package/dist/ui/assets/mime-types-BG9Gw1bq.js +0 -1
  115. package/dist/ui/assets/mount-CoxnSTbm.js +0 -2
  116. package/dist/ui/assets/mount-DEZF_-La.js +0 -1
  117. package/dist/ui/assets/oauth-bootstrap-91y3JxoM.js +0 -2
  118. package/dist/ui/assets/panel-rpc-Bcvr75SR.js +0 -1
  119. package/dist/ui/assets/panel-rpc-handlers-B4ou6nR5.js +0 -2
  120. package/dist/ui/assets/provider-store-access-CBCasAQc.js +0 -1
  121. package/dist/ui/assets/provider-store-access-CF_8cB86.js +0 -1
  122. package/dist/ui/assets/session-freezer-N1eotDc4.js +0 -1
  123. package/dist/ui/assets/setup-sudo-RDQOAmu9.js +0 -1
  124. package/dist/ui/assets/upgrade-detection-D5hQeRBm.js +0 -1
  125. package/dist/ui/assets/wc-extension-nXebAXRc.js +0 -2
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/main-DiKQ_cUI.js","assets/chunk-aKtaBQYM.js","assets/modulepreload-polyfill-Dezn_h7o.js"])))=>i.map(i=>d[i]);
2
- import{Dt as e,Q as t}from"./main-DiKQ_cUI.js";import{t as n}from"./types-idfTVsM8.js";import"./mount-id-B2LAsUxP.js";function r(e,t,n){let r=`----DaMount${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`,i=new TextEncoder,a=i.encode(`--${r}\r\nContent-Disposition: form-data; name="data"; filename="${e}"\r\nContent-Type: ${t}\r\n\r\n`),o=i.encode(`\r\n--${r}--\r\n`),s=new Uint8Array(a.byteLength+n.byteLength+o.byteLength);return s.set(a,0),s.set(n,a.byteLength),s.set(o,a.byteLength+n.byteLength),{contentType:`multipart/form-data; boundary=${r}`,body:s}}function i(e){return e.split(`/`).pop()||`data`}function a(e){let t=e.match(/^da:\/\/([^/]+)\/([^/]+)(?:\/(.*))?$/);if(!t)throw Error(`invalid DA source '${e}' — expected da://org/repo[/path]`);return{org:t[1],repo:t[2],path:(t[3]??``).replace(/^\/+/,``).replace(/\/+$/,``)}}var o=5*1024*1024,s=class{kind=`da`;source;profile;mountId;parsed;cache;maxBodyBytes;transport;closed=!1;constructor(e){this.source=e.source,this.profile=e.profile,this.mountId=e.mountId??crypto.randomUUID(),this.parsed=a(e.source),this.cache=e.cache,this.maxBodyBytes=e.maxBodyBytes??o,this.transport=e.signedFetch}assertOpen(e){if(this.closed)throw new n(`EBADF`,`mount closed`,e)}toMountRelative(e){return e.replace(/^\/+/,``)}toSourcePath(e){let t=e.replace(/^\/+/,``).replace(/\/+$/,``),n=[this.parsed.path,t].filter(e=>e.length>0).join(`/`);return`/source/${this.parsed.org}/${this.parsed.repo}${n?`/${n}`:``}`}toListPath(e){let t=e.replace(/^\/+/,``).replace(/\/+$/,``),n=[this.parsed.path,t].filter(e=>e.length>0).join(`/`);return`/list/${this.parsed.org}/${this.parsed.repo}${n?`/${n}`:``}`}async readFile(e){this.assertOpen(e);let t=this.toMountRelative(e),r=await this.cache.getBody(t);if(r&&!this.cache.isStale(r.cachedAt))return r.body;let i={};r&&(i[`if-none-match`]=r.etag);let a=await this.transport({method:`GET`,path:this.toSourcePath(t),headers:i});if(a.status===304&&r)return await this.cache.putBody(t,r.body,r.etag),r.body;if(a.status===404)throw await this.cache.invalidateBody(t),new n(`ENOENT`,`no such file`,e);if(a.status===401||a.status===403)throw new n(`EACCES`,`da access denied`,e);if(a.status>=400)throw new n(`EIO`,`da readFile failed: ${a.status}`,e);let o=a.headers.get(`content-length`),s=o?Number(o):void 0;if(s!==void 0&&s>this.maxBodyBytes)throw new n(`EFBIG`,`body exceeds maxBodyBytes`,e);let c=new Uint8Array(await a.arrayBuffer());if(c.byteLength>this.maxBodyBytes)throw new n(`EFBIG`,`body exceeds maxBodyBytes`,e);let l=a.headers.get(`etag`)??``;return await this.cache.putBody(t,c,l),c}async writeFile(e,a){if(this.assertOpen(e),a.byteLength>this.maxBodyBytes)throw new n(`EFBIG`,`body exceeds maxBodyBytes`,e);let o=this.toMountRelative(e),s=await this.cache.getBody(o),c=r(i(e),t(e),a),l={"content-type":c.contentType,"content-length":String(c.body.byteLength)};s?.etag?l[`if-match`]=s.etag:s||(l[`if-none-match`]=`*`);let u=()=>this.transport({method:`POST`,path:this.toSourcePath(o),headers:l,body:c.body}),d,f=1;try{d=await u()}catch{f=2,d=await u()}if(d.status===412){if(f===2){let t=await this.transport({method:`HEAD`,path:this.toSourcePath(o)});if(t.status>=400)throw new n(`EIO`,`da reconcile HEAD failed: ${t.status}`,e);let r=t.headers.get(`etag`)??``;await this.cache.putBody(o,a,r);let i=o.split(`/`).slice(0,-1).join(`/`);await this.cache.invalidateListing(i);return}await this.cache.invalidateBody(o);try{await this.readFile(e)}catch{}throw new n(`EBUSY`,`remote modified since last read — re-read and retry`,e)}if(d.status===401||d.status===403)throw new n(`EACCES`,`da write denied`,e);if(d.status>=400)throw new n(`EIO`,`da writeFile failed: ${d.status}`,e);let p=d.headers.get(`etag`)??``;await this.cache.putBody(o,a,p);let m=o.split(`/`).slice(0,-1).join(`/`);await this.cache.invalidateListing(m)}async readDir(e){this.assertOpen(e);let t=this.toMountRelative(e).replace(/\/+$/,``),r=await this.cache.getListing(t);if(r&&!this.cache.isStale(r.cachedAt))return r.entries;let i=await this.transport({method:`GET`,path:this.toListPath(t)});if(i.status===404)throw new n(`ENOENT`,`no such directory`,e);if(i.status>=400)throw new n(`EIO`,`da list failed: ${i.status}`,e);let a=(await i.json()).map(e=>e.ext?{name:`${e.name}.${e.ext}`,kind:`file`,etag:e.etag,lastModified:e.lastModified}:{name:e.name,kind:`directory`,lastModified:e.lastModified});return await this.cache.putListing(t,a),a}async stat(e){this.assertOpen(e);let t=this.toMountRelative(e),r=await this.cache.getBody(t);if(r)return{kind:`file`,size:r.size,mtime:r.cachedAt,etag:r.etag};let i=t.split(`/`),a=i.pop()??``,o=i.join(`/`),s=await this.cache.getListing(o);if(s&&!this.cache.isStale(s.cachedAt)){let t=s.entries.find(e=>e.name===a);if(t?.kind===`file`&&t.size!==void 0)return{kind:`file`,size:t.size,mtime:t.lastModified??s.cachedAt,etag:t.etag??``};if(t?.kind===`directory`)return{kind:`directory`,size:0,mtime:t.lastModified??s.cachedAt};if(!t)throw new n(`ENOENT`,`no such file or directory`,e)}let c=await this.transport({method:`HEAD`,path:this.toSourcePath(t)});if(c.status===200){let e=Number(c.headers.get(`content-length`)??`0`),t=c.headers.get(`etag`)??``,n=c.headers.get(`last-modified`),r=n?Date.parse(n):0;if(s){let n=s.entries.map(n=>n.name===a&&n.kind===`file`?{...n,size:e,etag:t,lastModified:r}:n);await this.cache.putListing(o,n)}return{kind:`file`,size:e,mtime:r,etag:t}}if(c.status===404){let r=await this.cache.getListing(t);if(r)return{kind:`directory`,size:0,mtime:r.cachedAt};throw new n(`ENOENT`,`no such file or directory`,e)}throw new n(`EIO`,`da stat failed: ${c.status}`,e)}async mkdir(e){}async remove(e){this.assertOpen(e);let t=this.toMountRelative(e),r=await this.transport({method:`DELETE`,path:this.toSourcePath(t)});if(r.status===404)throw new n(`ENOENT`,`no such file`,e);if(r.status===401||r.status===403)throw new n(`EACCES`,`da delete denied`,e);if(r.status>=400)throw new n(`EIO`,`da delete failed: ${r.status}`,e);await this.cache.invalidateBody(t);let i=t.split(`/`).slice(0,-1).join(`/`);await this.cache.invalidateListing(i)}async refresh(e){this.assertOpen(`/`);let t={added:[],removed:[],changed:[],unchanged:0,errors:[]},n=[``];for(;n.length>0;){let e=n.pop();try{let r=await this.transport({method:`GET`,path:this.toListPath(e)});if(r.status>=400){t.errors.push({path:e,message:`list failed: ${r.status}`});continue}let i=await r.json(),a=[];for(let r of i)if(r.ext){let n=e?`${e}/${r.name}.${r.ext}`:`${r.name}.${r.ext}`;a.push({name:`${r.name}.${r.ext}`,kind:`file`,etag:r.etag,lastModified:r.lastModified});let i=await this.cache.getBody(n);i?r.etag&&i.etag!==r.etag?(await this.cache.invalidateBody(n),t.changed.push(n)):t.unchanged++:t.added.push(n)}else{a.push({name:r.name,kind:`directory`});let t=e?`${e}/${r.name}`:r.name;n.push(t)}await this.cache.putListing(e,a)}catch(n){t.errors.push({path:e,message:n instanceof Error?n.message:String(n)})}}if(e?.bodies)for(let e of t.changed)try{await this.readFile(e)}catch(n){t.errors.push({path:e,message:n instanceof Error?n.message:String(n)})}return t}describe(){return{displayName:`${this.parsed.org}/${this.parsed.repo}${this.parsed.path?`/${this.parsed.path}`:``}`,source:this.source,profile:this.profile}}async close(){this.closed||=!0}};function c(e){let t=e.match(/^s3:\/\/([^/]+)(?:\/(.*))?$/);if(!t)throw Error(`invalid S3 source '${e}' — expected s3://bucket[/prefix]`);return{bucket:t[1],prefix:(t[2]??``).replace(/^\/+/,``).replace(/\/+$/,``)}}var l=25*1024*1024,u=class{kind=`s3`;source;profile;mountId;parsed;cache;maxBodyBytes;transport;closed=!1;constructor(e){this.source=e.source,this.profile=e.profile,this.mountId=e.mountId??crypto.randomUUID(),this.parsed=c(e.source),this.cache=e.cache,this.maxBodyBytes=e.maxBodyBytes??l,this.transport=e.signedFetch}assertOpen(e){if(this.closed)throw new n(`EBADF`,`mount closed`,e)}toMountRelative(e){return e.replace(/^\/+/,``)}toS3Key(e){let t=e.replace(/^\/+/,``).replace(/\/+$/,``);return[this.parsed.prefix,t].filter(e=>e.length>0).join(`/`)}toMountRelativeKey(e){return this.parsed.prefix?e.slice(this.parsed.prefix.length+1):e}async readFile(e){this.assertOpen(e);let t=this.toMountRelative(e),r=await this.cache.getBody(t);if(r&&!this.cache.isStale(r.cachedAt))return r.body;let i={};r&&(i[`if-none-match`]=r.etag);let a=await this.transport({method:`GET`,bucket:this.parsed.bucket,key:this.toS3Key(t),headers:i});if(a.status===304&&r)return await this.cache.putBody(t,r.body,r.etag),r.body;if(a.status===404)throw await this.cache.invalidateBody(t),new n(`ENOENT`,`no such file`,e);if(a.status===401||a.status===403)throw new n(`EACCES`,`s3 access denied`,e);if(a.status>=400)throw new n(`EIO`,`s3 readFile failed: ${a.status}`,e);let o=a.headers.get(`content-length`),s=o?Number(o):void 0;if(s!==void 0&&s>this.maxBodyBytes)throw new n(`EFBIG`,`body exceeds maxBodyBytes (${s} > ${this.maxBodyBytes})`,e);let c=new Uint8Array(await a.arrayBuffer());if(c.byteLength>this.maxBodyBytes)throw new n(`EFBIG`,`body exceeds maxBodyBytes`,e);let l=a.headers.get(`etag`)??``;return await this.cache.putBody(t,c,l),c}async writeFile(e,t){this.assertOpen(e);let r=this.toMountRelative(e);if(t.byteLength>this.maxBodyBytes)throw new n(`EFBIG`,`body exceeds maxBodyBytes`,e);let i=await this.cache.getBody(r),a={"content-type":`application/octet-stream`,"content-length":String(t.byteLength)};i?a[`if-match`]=i.etag:a[`if-none-match`]=`*`;let o=()=>this.transport({method:`PUT`,bucket:this.parsed.bucket,key:this.toS3Key(r),headers:a,body:t}),s,c=1;try{s=await o()}catch{c=2,s=await o()}if(s.status===412){if(c===2){let i=await this.transport({method:`HEAD`,bucket:this.parsed.bucket,key:this.toS3Key(r)});if(i.status>=400)throw new n(`EIO`,`s3 reconcile HEAD failed: ${i.status}`,e);let a=i.headers.get(`etag`)??``;await this.cache.putBody(r,t,a);let o=r.split(`/`).slice(0,-1).join(`/`);await this.cache.invalidateListing(o);return}await this.cache.invalidateBody(r);try{await this.readFile(e)}catch{}throw new n(`EBUSY`,`remote modified since last read — re-read and retry`,e)}if(s.status===401||s.status===403)throw new n(`EACCES`,`s3 write denied`,e);if(s.status>=400)throw new n(`EIO`,`s3 writeFile failed: ${s.status}`,e);let l=s.headers.get(`etag`)??``;await this.cache.putBody(r,t,l);let u=r.split(`/`).slice(0,-1).join(`/`);await this.cache.invalidateListing(u)}async listObjectsV2(){let e=[],t;do{let r={"list-type":`2`};this.parsed.prefix&&(r.prefix=`${this.parsed.prefix}/`),t&&(r[`continuation-token`]=t);let i=await this.transport({method:`GET`,bucket:this.parsed.bucket,key:``,query:r});if(i.status>=400)throw new n(`EIO`,`s3 list failed: ${i.status}`,`/`);let a=await i.text(),o=this.parseListingXml(a);e.push(...o.contents),t=o.nextContinuationToken}while(t);return e}parseListingXml(e){let t=[];for(let n of e.matchAll(/<Contents>([\s\S]*?)<\/Contents>/g)){let e=n[1],r=e.match(/<Key>([^<]+)<\/Key>/)?.[1]??``,i=e.match(/<ETag>([^<]+)<\/ETag>/)?.[1]??``,a=e.match(/<Size>([^<]+)<\/Size>/)?.[1]??`0`,o=e.match(/<LastModified>([^<]+)<\/LastModified>/)?.[1]??``;t.push({key:r,etag:i,size:Number(a),lastModified:o?Date.parse(o):0})}return{contents:t,nextContinuationToken:e.match(/<IsTruncated>([^<]+)<\/IsTruncated>/)?.[1]===`true`?e.match(/<NextContinuationToken>([^<]+)<\/NextContinuationToken>/)?.[1]:void 0}}async readDir(e){this.assertOpen(e);let t=this.toMountRelative(e).replace(/\/+$/,``),n=await this.cache.getListing(t);if(n&&!this.cache.isStale(n.cachedAt))return n.entries;let r=await this.listObjectsV2(),i=this.groupByDir(r);for(let[e,t]of i)await this.cache.putListing(e,t);return i.get(t)??[]}groupByDir(e){let t=new Map,n=e=>(t.has(e)||t.set(e,[]),t.get(e));n(``);for(let t of e){let e=this.toMountRelativeKey(t.key).split(`/`),r=e.pop();n(e.join(`/`)).push({name:r,kind:`file`,size:t.size,etag:t.etag,lastModified:t.lastModified});let i=``;for(let t of e){let e=i;i=i?`${i}/${t}`:t;let r=n(e);r.find(e=>e.name===t&&e.kind===`directory`)||r.push({name:t,kind:`directory`}),n(i)}}return t}async stat(e){this.assertOpen(e);let t=this.toMountRelative(e),r=await this.cache.getBody(t);if(r)return{kind:`file`,size:r.body.byteLength,mtime:r.cachedAt,etag:r.etag};let i=t.split(`/`),a=i.pop()??``,o=i.join(`/`),s=await this.cache.getListing(o);if(s&&!this.cache.isStale(s.cachedAt)){let t=s.entries.find(e=>e.name===a);if(t?.kind===`file`&&t.size!==void 0)return{kind:`file`,size:t.size,mtime:t.lastModified??s.cachedAt,etag:t.etag??``};if(t?.kind===`directory`)return{kind:`directory`,size:0,mtime:t.lastModified??s.cachedAt};if(!t)throw new n(`ENOENT`,`no such file or directory`,e)}let c=await this.transport({method:`HEAD`,bucket:this.parsed.bucket,key:this.toS3Key(t)});if(c.status===200){let e=Number(c.headers.get(`content-length`)??`0`),t=c.headers.get(`etag`)??``,n=c.headers.get(`last-modified`);return{kind:`file`,size:e,mtime:n?Date.parse(n):0,etag:t}}if(c.status===404){let r=await this.cache.getListing(t);if(r)return{kind:`directory`,size:0,mtime:r.cachedAt};throw new n(`ENOENT`,`no such file or directory`,e)}throw new n(`EIO`,`s3 stat failed: ${c.status}`,e)}async refresh(e){this.assertOpen(`/`);let t=await this.listObjectsV2(),n=new Set(t.map(e=>this.toMountRelativeKey(e.key))),r=new Map(t.map(e=>[this.toMountRelativeKey(e.key),e.etag])),i={added:[],removed:[],changed:[],unchanged:0,errors:[]};for(let e of n){let t=await this.cache.getBody(e),n=r.get(e);t?t.etag===n?i.unchanged++:(await this.cache.invalidateBody(e),i.changed.push(e)):i.added.push(e)}let a=this.groupByDir(t);for(let[e,t]of a)await this.cache.putListing(e,t);if(e?.bodies)for(let e of i.changed)try{await this.readFile(e)}catch(t){i.errors.push({path:e,message:t instanceof Error?t.message:String(t)})}return i}async mkdir(e){}async remove(e,t){this.assertOpen(e);let r=this.toMountRelative(e);if(t?.recursive)throw new n(`EINVAL`,`recursive remove not yet supported on S3`,e);let i=await this.transport({method:`DELETE`,bucket:this.parsed.bucket,key:this.toS3Key(r)});if(i.status===404)throw new n(`ENOENT`,`no such file`,e);if(i.status===401||i.status===403)throw new n(`EACCES`,`s3 delete denied`,e);if(i.status>=400)throw new n(`EIO`,`s3 delete failed: ${i.status}`,e);await this.cache.invalidateBody(r);let a=r.split(`/`).slice(0,-1).join(`/`);await this.cache.invalidateListing(a)}describe(){return{displayName:this.parsed.prefix?`${this.parsed.bucket}/${this.parsed.prefix}`:this.parsed.bucket,source:this.source,profile:this.profile}}async close(){this.closed||=!0}},d=class extends Error{constructor(e){super(e),this.name=`ProfileNotConfiguredError`}};async function f(){let{getAccounts:t}=await e(async()=>{let{getAccounts:e}=await import(`./main-DiKQ_cUI.js`).then(e=>e.h);return{getAccounts:e}},__vite__mapDeps([0,1,2])),n=t().find(e=>e.providerId===`adobe`);if(!n?.accessToken)throw new d(`No Adobe IMS account found. Log in via Settings → Providers → Adobe first.`);return{identity:`adobe-ims`,getBearerToken:async()=>n.accessToken}}var p=`slicc-mount-cache`,m=`listings`,h=`bodies`,g=class{mountId;ttlMs;dbName;dbPromise=null;constructor(e){this.mountId=e.mountId,this.ttlMs=e.ttlMs,this.dbName=e.dbName??p}isStale(e,t){return Date.now()-e>=(t??this.ttlMs)}async openDb(){return this.dbPromise||=new Promise((e,t)=>{let n=indexedDB.open(this.dbName,1);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(m)||e.createObjectStore(m),e.objectStoreNames.contains(h)||e.createObjectStore(h)},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)}),this.dbPromise}key(e){return`${this.mountId}::${e}`}async getListing(e){let t=await this.openDb();return new Promise((n,r)=>{let i=t.transaction(m,`readonly`).objectStore(m).get(this.key(e));i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async putListing(e,t){let n=await this.openDb();return new Promise((r,i)=>{let a=n.transaction(m,`readwrite`),o={entries:t,cachedAt:Date.now()};a.objectStore(m).put(o,this.key(e)),a.oncomplete=()=>r(),a.onerror=()=>i(a.error)})}async invalidateListing(e){let t=await this.openDb();return new Promise((n,r)=>{let i=t.transaction(m,`readwrite`);i.objectStore(m).delete(this.key(e)),i.oncomplete=()=>n(),i.onerror=()=>r(i.error)})}async getBody(e){let t=await this.openDb();return new Promise((n,r)=>{let i=t.transaction(h,`readonly`).objectStore(h).get(this.key(e));i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async putBody(e,t,n){let r=await this.openDb(),i={body:t,etag:n,size:t.byteLength,cachedAt:Date.now()};try{await this.txPut(r,h,this.key(e),i)}catch(t){if(t instanceof DOMException&&t.name===`QuotaExceededError`){await this.evictLru(.25);try{await this.txPut(r,h,this.key(e),i)}catch{}return}throw t}}async invalidateBody(e){let t=await this.openDb();return new Promise((n,r)=>{let i=t.transaction(h,`readwrite`);i.objectStore(h).delete(this.key(e)),i.oncomplete=()=>n(),i.onerror=()=>r(i.error)})}async clearMount(){let e=await this.openDb(),t=`${this.mountId}::`,n=n=>new Promise((r,i)=>{let a=e.transaction(n,`readwrite`),o=a.objectStore(n),s=o.getAllKeys();s.onsuccess=()=>{for(let e of s.result)typeof e==`string`&&e.startsWith(t)&&o.delete(e)},a.oncomplete=()=>r(),a.onerror=()=>i(a.error)});await Promise.all([n(m),n(h)])}txPut(e,t,n,r){return new Promise((i,a)=>{let o=e.transaction(t,`readwrite`);o.objectStore(t).put(r,n),o.oncomplete=()=>i(),o.onerror=()=>a(o.error)})}async evictLru(e){let t=await this.openDb(),n=`${this.mountId}::`,r=await new Promise((e,r)=>{let i=t.transaction(h,`readonly`).objectStore(h),a=[],o=i.openCursor();o.onsuccess=()=>{let t=o.result;if(!t){e(a);return}if(typeof t.key==`string`&&t.key.startsWith(n)){let e=t.value;a.push({key:t.key,cachedAt:e.cachedAt})}t.continue()},o.onerror=()=>r(o.error)});r.sort((e,t)=>e.cachedAt-t.cachedAt);let i=Math.max(1,Math.ceil(r.length*e)),a=r.slice(0,i);await new Promise((e,n)=>{let r=t.transaction(h,`readwrite`),i=r.objectStore(h);for(let{key:e}of a)i.delete(e);r.oncomplete=()=>e(),r.onerror=()=>n(r.error)})}};function _(){return typeof chrome<`u`&&!!chrome?.runtime?.id}function v(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}function y(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return btoa(t)}var b=new Set([`invalid_profile`,`invalid_request`,`profile_not_configured`,`fetch_failed`,`internal`]),x=new Set([101,103,204,205,304]);function S(e){if(!e.ok)throw e.errorCode===`profile_not_configured`||e.errorCode===`invalid_profile`?new n(`EACCES`,e.error):e.errorCode===`invalid_request`?new n(`EINVAL`,e.error):e.errorCode===`fetch_failed`||e.errorCode===`internal`||b.has(String(e.errorCode))?new n(`EIO`,e.error):new n(`EINVAL`,`mount transport returned unrecognized errorCode '${e.errorCode}': ${e.error}`);let t;try{t=v(e.bodyBase64)}catch(e){throw new n(`EIO`,`mount transport: response body decode failed: ${e instanceof Error?e.message:String(e)}`)}let r=x.has(e.status)?null:t;return new Response(r,{status:e.status,headers:new Headers(e.headers)})}async function C(e,t){let r;try{r=await fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)})}catch(e){throw new n(`EIO`,`mount transport failed: ${e instanceof Error?e.message:String(e)} (SLICC backend at localhost may not be running)`)}try{return await r.json()}catch(e){throw new n(`EIO`,`mount transport: response is not a JSON envelope (status ${r.status}): ${e instanceof Error?e.message:String(e)}`)}}async function w(e,t){try{return await chrome.runtime.sendMessage({type:e,envelope:t})}catch(e){throw new n(`EIO`,`mount transport failed: ${e instanceof Error?e.message:String(e)} (extension service worker not responding)`)}}function T(e){return async t=>{let n={profile:e,method:t.method,bucket:t.bucket,key:t.key,query:t.query,headers:t.headers,bodyBase64:t.body?y(t.body):void 0};return S(_()?await w(`mount.s3-sign-and-forward`,n):await C(`/api/s3-sign-and-forward`,n))}}function E(e){let t=e?.getImsToken??(async()=>(await f()).getBearerToken());return async e=>{let r;try{r=await t()}catch(e){throw new n(`EACCES`,`DA mount: ${e instanceof Error?e.message:String(e)}`)}let i={imsToken:r,method:e.method,path:e.path,query:e.query,headers:e.headers,bodyBase64:e.body?y(e.body):void 0};return S(_()?await w(`mount.da-sign-and-forward`,i):await C(`/api/da-sign-and-forward`,i))}}export{s as DaMountBackend,g as RemoteMountCache,u as S3MountBackend,E as makeSignedFetchDa,T as makeSignedFetchS3};
@@ -1 +0,0 @@
1
- import{r as e}from"./chunk-CMxvf4Kt.js";import"./backend-local-CMfz45hs.js";import{t}from"./types-idfTVsM8.js";import"./src-CpdsjHiA.js";import{t as n}from"./mime-types-BG9Gw1bq.js";import{t as r}from"./remote-cache-_bhYZSLy.js";function i(e,t,n){let r=`----DaMount${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`,i=new TextEncoder,a=i.encode(`--${r}\r\nContent-Disposition: form-data; name="data"; filename="${e}"\r\nContent-Type: ${t}\r\n\r\n`),o=i.encode(`\r\n--${r}--\r\n`),s=new Uint8Array(a.byteLength+n.byteLength+o.byteLength);return s.set(a,0),s.set(n,a.byteLength),s.set(o,a.byteLength+n.byteLength),{contentType:`multipart/form-data; boundary=${r}`,body:s}}function a(e){return e.split(`/`).pop()||`data`}function o(e){let t=e.match(/^da:\/\/([^/]+)\/([^/]+)(?:\/(.*))?$/);if(!t)throw Error(`invalid DA source '${e}' — expected da://org/repo[/path]`);return{org:t[1],repo:t[2],path:(t[3]??``).replace(/^\/+/,``).replace(/\/+$/,``)}}var s=class{kind=`da`;source;profile;mountId;parsed;cache;maxBodyBytes;transport;closed=!1;constructor(e){this.source=e.source,this.profile=e.profile,this.mountId=e.mountId??crypto.randomUUID(),this.parsed=o(e.source),this.cache=e.cache,this.maxBodyBytes=e.maxBodyBytes??5242880,this.transport=e.signedFetch}assertOpen(e){if(this.closed)throw new t(`EBADF`,`mount closed`,e)}toMountRelative(e){return e.replace(/^\/+/,``)}toSourcePath(e){let t=e.replace(/^\/+/,``).replace(/\/+$/,``),n=[this.parsed.path,t].filter(e=>e.length>0).join(`/`);return`/source/${this.parsed.org}/${this.parsed.repo}${n?`/${n}`:``}`}toListPath(e){let t=e.replace(/^\/+/,``).replace(/\/+$/,``),n=[this.parsed.path,t].filter(e=>e.length>0).join(`/`);return`/list/${this.parsed.org}/${this.parsed.repo}${n?`/${n}`:``}`}async readFile(e){this.assertOpen(e);let n=this.toMountRelative(e),r=await this.cache.getBody(n);if(r&&!this.cache.isStale(r.cachedAt))return r.body;let i={};r&&(i[`if-none-match`]=r.etag);let a=await this.transport({method:`GET`,path:this.toSourcePath(n),headers:i});if(a.status===304&&r)return await this.cache.putBody(n,r.body,r.etag),r.body;if(a.status===404)throw await this.cache.invalidateBody(n),new t(`ENOENT`,`no such file`,e);if(a.status===401||a.status===403)throw new t(`EACCES`,`da access denied`,e);if(a.status>=400)throw new t(`EIO`,`da readFile failed: ${a.status}`,e);let o=a.headers.get(`content-length`),s=o?Number(o):void 0;if(s!==void 0&&s>this.maxBodyBytes)throw new t(`EFBIG`,`body exceeds maxBodyBytes`,e);let c=new Uint8Array(await a.arrayBuffer());if(c.byteLength>this.maxBodyBytes)throw new t(`EFBIG`,`body exceeds maxBodyBytes`,e);let l=a.headers.get(`etag`)??``;return await this.cache.putBody(n,c,l),c}async writeFile(e,r){if(this.assertOpen(e),r.byteLength>this.maxBodyBytes)throw new t(`EFBIG`,`body exceeds maxBodyBytes`,e);let o=this.toMountRelative(e),s=await this.cache.getBody(o),c=i(a(e),n(e),r),l={"content-type":c.contentType,"content-length":String(c.body.byteLength)};s?.etag?l[`if-match`]=s.etag:s||(l[`if-none-match`]=`*`);let u=()=>this.transport({method:`POST`,path:this.toSourcePath(o),headers:l,body:c.body}),d,f=1;try{d=await u()}catch{f=2,d=await u()}if(d.status===412){if(f===2){let n=await this.transport({method:`HEAD`,path:this.toSourcePath(o)});if(n.status>=400)throw new t(`EIO`,`da reconcile HEAD failed: ${n.status}`,e);let i=n.headers.get(`etag`)??``;await this.cache.putBody(o,r,i);let a=o.split(`/`).slice(0,-1).join(`/`);await this.cache.invalidateListing(a);return}await this.cache.invalidateBody(o);try{await this.readFile(e)}catch{}throw new t(`EBUSY`,`remote modified since last read — re-read and retry`,e)}if(d.status===401||d.status===403)throw new t(`EACCES`,`da write denied`,e);if(d.status>=400)throw new t(`EIO`,`da writeFile failed: ${d.status}`,e);let p=d.headers.get(`etag`)??``;await this.cache.putBody(o,r,p);let m=o.split(`/`).slice(0,-1).join(`/`);await this.cache.invalidateListing(m)}async readDir(e){this.assertOpen(e);let n=this.toMountRelative(e).replace(/\/+$/,``),r=await this.cache.getListing(n);if(r&&!this.cache.isStale(r.cachedAt))return r.entries;let i=await this.transport({method:`GET`,path:this.toListPath(n)});if(i.status===404)throw new t(`ENOENT`,`no such directory`,e);if(i.status>=400)throw new t(`EIO`,`da list failed: ${i.status}`,e);let a=(await i.json()).map(e=>e.ext?{name:`${e.name}.${e.ext}`,kind:`file`,etag:e.etag,lastModified:e.lastModified}:{name:e.name,kind:`directory`,lastModified:e.lastModified});return await this.cache.putListing(n,a),a}async stat(e){this.assertOpen(e);let n=this.toMountRelative(e),r=await this.cache.getBody(n);if(r)return{kind:`file`,size:r.size,mtime:r.cachedAt,etag:r.etag};let i=n.split(`/`),a=i.pop()??``,o=i.join(`/`),s=await this.cache.getListing(o);if(s&&!this.cache.isStale(s.cachedAt)){let n=s.entries.find(e=>e.name===a);if(n?.kind===`file`&&n.size!==void 0)return{kind:`file`,size:n.size,mtime:n.lastModified??s.cachedAt,etag:n.etag??``};if(n?.kind===`directory`)return{kind:`directory`,size:0,mtime:n.lastModified??s.cachedAt};if(!n)throw new t(`ENOENT`,`no such file or directory`,e)}let c=await this.transport({method:`HEAD`,path:this.toSourcePath(n)});if(c.status===200){let e=Number(c.headers.get(`content-length`)??`0`),t=c.headers.get(`etag`)??``,n=c.headers.get(`last-modified`),r=n?Date.parse(n):0;if(s){let n=s.entries.map(n=>n.name===a&&n.kind===`file`?{...n,size:e,etag:t,lastModified:r}:n);await this.cache.putListing(o,n)}return{kind:`file`,size:e,mtime:r,etag:t}}if(c.status===404){let r=await this.cache.getListing(n);if(r)return{kind:`directory`,size:0,mtime:r.cachedAt};throw new t(`ENOENT`,`no such file or directory`,e)}throw new t(`EIO`,`da stat failed: ${c.status}`,e)}async mkdir(e){}async remove(e){this.assertOpen(e);let n=this.toMountRelative(e),r=await this.transport({method:`DELETE`,path:this.toSourcePath(n)});if(r.status===404)throw new t(`ENOENT`,`no such file`,e);if(r.status===401||r.status===403)throw new t(`EACCES`,`da delete denied`,e);if(r.status>=400)throw new t(`EIO`,`da delete failed: ${r.status}`,e);await this.cache.invalidateBody(n);let i=n.split(`/`).slice(0,-1).join(`/`);await this.cache.invalidateListing(i)}async refresh(e){this.assertOpen(`/`);let t={added:[],removed:[],changed:[],unchanged:0,errors:[]},n=[``];for(;n.length>0;){let e=n.pop();try{let r=await this.transport({method:`GET`,path:this.toListPath(e)});if(r.status>=400){t.errors.push({path:e,message:`list failed: ${r.status}`});continue}let i=await r.json(),a=[];for(let r of i)if(r.ext){let n=e?`${e}/${r.name}.${r.ext}`:`${r.name}.${r.ext}`;a.push({name:`${r.name}.${r.ext}`,kind:`file`,etag:r.etag,lastModified:r.lastModified});let i=await this.cache.getBody(n);i?r.etag&&i.etag!==r.etag?(await this.cache.invalidateBody(n),t.changed.push(n)):t.unchanged++:t.added.push(n)}else{a.push({name:r.name,kind:`directory`});let t=e?`${e}/${r.name}`:r.name;n.push(t)}await this.cache.putListing(e,a)}catch(n){t.errors.push({path:e,message:n instanceof Error?n.message:String(n)})}}if(e?.bodies)for(let e of t.changed)try{await this.readFile(e)}catch(n){t.errors.push({path:e,message:n instanceof Error?n.message:String(n)})}return t}describe(){return{displayName:`${this.parsed.org}/${this.parsed.repo}${this.parsed.path?`/${this.parsed.path}`:``}`,source:this.source,profile:this.profile}}async close(){this.closed||=!0}};function c(e){let t=e.match(/^s3:\/\/([^/]+)(?:\/(.*))?$/);if(!t)throw Error(`invalid S3 source '${e}' — expected s3://bucket[/prefix]`);return{bucket:t[1],prefix:(t[2]??``).replace(/^\/+/,``).replace(/\/+$/,``)}}var l=class{kind=`s3`;source;profile;mountId;parsed;cache;maxBodyBytes;transport;closed=!1;constructor(e){this.source=e.source,this.profile=e.profile,this.mountId=e.mountId??crypto.randomUUID(),this.parsed=c(e.source),this.cache=e.cache,this.maxBodyBytes=e.maxBodyBytes??26214400,this.transport=e.signedFetch}assertOpen(e){if(this.closed)throw new t(`EBADF`,`mount closed`,e)}toMountRelative(e){return e.replace(/^\/+/,``)}toS3Key(e){let t=e.replace(/^\/+/,``).replace(/\/+$/,``);return[this.parsed.prefix,t].filter(e=>e.length>0).join(`/`)}toMountRelativeKey(e){return this.parsed.prefix?e.slice(this.parsed.prefix.length+1):e}async readFile(e){this.assertOpen(e);let n=this.toMountRelative(e),r=await this.cache.getBody(n);if(r&&!this.cache.isStale(r.cachedAt))return r.body;let i={};r&&(i[`if-none-match`]=r.etag);let a=await this.transport({method:`GET`,bucket:this.parsed.bucket,key:this.toS3Key(n),headers:i});if(a.status===304&&r)return await this.cache.putBody(n,r.body,r.etag),r.body;if(a.status===404)throw await this.cache.invalidateBody(n),new t(`ENOENT`,`no such file`,e);if(a.status===401||a.status===403)throw new t(`EACCES`,`s3 access denied`,e);if(a.status>=400)throw new t(`EIO`,`s3 readFile failed: ${a.status}`,e);let o=a.headers.get(`content-length`),s=o?Number(o):void 0;if(s!==void 0&&s>this.maxBodyBytes)throw new t(`EFBIG`,`body exceeds maxBodyBytes (${s} > ${this.maxBodyBytes})`,e);let c=new Uint8Array(await a.arrayBuffer());if(c.byteLength>this.maxBodyBytes)throw new t(`EFBIG`,`body exceeds maxBodyBytes`,e);let l=a.headers.get(`etag`)??``;return await this.cache.putBody(n,c,l),c}async writeFile(e,n){this.assertOpen(e);let r=this.toMountRelative(e);if(n.byteLength>this.maxBodyBytes)throw new t(`EFBIG`,`body exceeds maxBodyBytes`,e);let i=await this.cache.getBody(r),a={"content-type":`application/octet-stream`,"content-length":String(n.byteLength)};i?a[`if-match`]=i.etag:a[`if-none-match`]=`*`;let o=()=>this.transport({method:`PUT`,bucket:this.parsed.bucket,key:this.toS3Key(r),headers:a,body:n}),s,c=1;try{s=await o()}catch{c=2,s=await o()}if(s.status===412){if(c===2){let i=await this.transport({method:`HEAD`,bucket:this.parsed.bucket,key:this.toS3Key(r)});if(i.status>=400)throw new t(`EIO`,`s3 reconcile HEAD failed: ${i.status}`,e);let a=i.headers.get(`etag`)??``;await this.cache.putBody(r,n,a);let o=r.split(`/`).slice(0,-1).join(`/`);await this.cache.invalidateListing(o);return}await this.cache.invalidateBody(r);try{await this.readFile(e)}catch{}throw new t(`EBUSY`,`remote modified since last read — re-read and retry`,e)}if(s.status===401||s.status===403)throw new t(`EACCES`,`s3 write denied`,e);if(s.status>=400)throw new t(`EIO`,`s3 writeFile failed: ${s.status}`,e);let l=s.headers.get(`etag`)??``;await this.cache.putBody(r,n,l);let u=r.split(`/`).slice(0,-1).join(`/`);await this.cache.invalidateListing(u)}async listObjectsV2(){let e=[],n;do{let r={"list-type":`2`};this.parsed.prefix&&(r.prefix=`${this.parsed.prefix}/`),n&&(r[`continuation-token`]=n);let i=await this.transport({method:`GET`,bucket:this.parsed.bucket,key:``,query:r});if(i.status>=400)throw new t(`EIO`,`s3 list failed: ${i.status}`,`/`);let a=await i.text(),o=this.parseListingXml(a);e.push(...o.contents),n=o.nextContinuationToken}while(n);return e}parseListingXml(e){let t=[];for(let n of e.matchAll(/<Contents>([\s\S]*?)<\/Contents>/g)){let e=n[1],r=e.match(/<Key>([^<]+)<\/Key>/)?.[1]??``,i=e.match(/<ETag>([^<]+)<\/ETag>/)?.[1]??``,a=e.match(/<Size>([^<]+)<\/Size>/)?.[1]??`0`,o=e.match(/<LastModified>([^<]+)<\/LastModified>/)?.[1]??``;t.push({key:r,etag:i,size:Number(a),lastModified:o?Date.parse(o):0})}return{contents:t,nextContinuationToken:e.match(/<IsTruncated>([^<]+)<\/IsTruncated>/)?.[1]===`true`?e.match(/<NextContinuationToken>([^<]+)<\/NextContinuationToken>/)?.[1]:void 0}}async readDir(e){this.assertOpen(e);let t=this.toMountRelative(e).replace(/\/+$/,``),n=await this.cache.getListing(t);if(n&&!this.cache.isStale(n.cachedAt))return n.entries;let r=await this.listObjectsV2(),i=this.groupByDir(r);for(let[e,t]of i)await this.cache.putListing(e,t);return i.get(t)??[]}groupByDir(e){let t=new Map,n=e=>(t.has(e)||t.set(e,[]),t.get(e));n(``);for(let t of e){let e=this.toMountRelativeKey(t.key).split(`/`),r=e.pop();n(e.join(`/`)).push({name:r,kind:`file`,size:t.size,etag:t.etag,lastModified:t.lastModified});let i=``;for(let t of e){let e=i;i=i?`${i}/${t}`:t;let r=n(e);r.find(e=>e.name===t&&e.kind===`directory`)||r.push({name:t,kind:`directory`}),n(i)}}return t}async stat(e){this.assertOpen(e);let n=this.toMountRelative(e),r=await this.cache.getBody(n);if(r)return{kind:`file`,size:r.body.byteLength,mtime:r.cachedAt,etag:r.etag};let i=n.split(`/`),a=i.pop()??``,o=i.join(`/`),s=await this.cache.getListing(o);if(s&&!this.cache.isStale(s.cachedAt)){let n=s.entries.find(e=>e.name===a);if(n?.kind===`file`&&n.size!==void 0)return{kind:`file`,size:n.size,mtime:n.lastModified??s.cachedAt,etag:n.etag??``};if(n?.kind===`directory`)return{kind:`directory`,size:0,mtime:n.lastModified??s.cachedAt};if(!n)throw new t(`ENOENT`,`no such file or directory`,e)}let c=await this.transport({method:`HEAD`,bucket:this.parsed.bucket,key:this.toS3Key(n)});if(c.status===200){let e=Number(c.headers.get(`content-length`)??`0`),t=c.headers.get(`etag`)??``,n=c.headers.get(`last-modified`);return{kind:`file`,size:e,mtime:n?Date.parse(n):0,etag:t}}if(c.status===404){let r=await this.cache.getListing(n);if(r)return{kind:`directory`,size:0,mtime:r.cachedAt};throw new t(`ENOENT`,`no such file or directory`,e)}throw new t(`EIO`,`s3 stat failed: ${c.status}`,e)}async refresh(e){this.assertOpen(`/`);let t=await this.listObjectsV2(),n=new Set(t.map(e=>this.toMountRelativeKey(e.key))),r=new Map(t.map(e=>[this.toMountRelativeKey(e.key),e.etag])),i={added:[],removed:[],changed:[],unchanged:0,errors:[]};for(let e of n){let t=await this.cache.getBody(e),n=r.get(e);t?t.etag===n?i.unchanged++:(await this.cache.invalidateBody(e),i.changed.push(e)):i.added.push(e)}let a=this.groupByDir(t);for(let[e,t]of a)await this.cache.putListing(e,t);if(e?.bodies)for(let e of i.changed)try{await this.readFile(e)}catch(t){i.errors.push({path:e,message:t instanceof Error?t.message:String(t)})}return i}async mkdir(e){}async remove(e,n){this.assertOpen(e);let r=this.toMountRelative(e);if(n?.recursive)throw new t(`EINVAL`,`recursive remove not yet supported on S3`,e);let i=await this.transport({method:`DELETE`,bucket:this.parsed.bucket,key:this.toS3Key(r)});if(i.status===404)throw new t(`ENOENT`,`no such file`,e);if(i.status===401||i.status===403)throw new t(`EACCES`,`s3 delete denied`,e);if(i.status>=400)throw new t(`EIO`,`s3 delete failed: ${i.status}`,e);await this.cache.invalidateBody(r);let a=r.split(`/`).slice(0,-1).join(`/`);await this.cache.invalidateListing(a)}describe(){return{displayName:this.parsed.prefix?`${this.parsed.bucket}/${this.parsed.prefix}`:this.parsed.bucket,source:this.source,profile:this.profile}}async close(){this.closed||=!0}},u=class extends Error{constructor(e){super(e),this.name=`ProfileNotConfiguredError`}};async function d(){let{getAccounts:e}=await import(`./provider-settings-Ce5TqtO7.js`).then(e=>e.u),t=e().find(e=>e.providerId===`adobe`);if(!t?.accessToken)throw new u(`No Adobe IMS account found. Log in via Settings → Providers → Adobe first.`);return{identity:`adobe-ims`,getBearerToken:async()=>t.accessToken}}function f(){return typeof chrome<`u`&&!!chrome?.runtime?.id}function p(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}function m(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return btoa(t)}const h=new Set([`invalid_profile`,`invalid_request`,`profile_not_configured`,`fetch_failed`,`internal`]),g=new Set([101,103,204,205,304]);function _(e){if(!e.ok)throw e.errorCode===`profile_not_configured`||e.errorCode===`invalid_profile`?new t(`EACCES`,e.error):e.errorCode===`invalid_request`?new t(`EINVAL`,e.error):e.errorCode===`fetch_failed`||e.errorCode===`internal`||h.has(String(e.errorCode))?new t(`EIO`,e.error):new t(`EINVAL`,`mount transport returned unrecognized errorCode '${e.errorCode}': ${e.error}`);let n;try{n=p(e.bodyBase64)}catch(e){throw new t(`EIO`,`mount transport: response body decode failed: ${e instanceof Error?e.message:String(e)}`)}let r=g.has(e.status)?null:n;return new Response(r,{status:e.status,headers:new Headers(e.headers)})}async function v(e,n){let r;try{r=await fetch(e,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(n)})}catch(e){throw new t(`EIO`,`mount transport failed: ${e instanceof Error?e.message:String(e)} (SLICC backend at localhost may not be running)`)}try{return await r.json()}catch(e){throw new t(`EIO`,`mount transport: response is not a JSON envelope (status ${r.status}): ${e instanceof Error?e.message:String(e)}`)}}async function y(e,n){try{return await chrome.runtime.sendMessage({type:e,envelope:n})}catch(e){throw new t(`EIO`,`mount transport failed: ${e instanceof Error?e.message:String(e)} (extension service worker not responding)`)}}function b(e){return async t=>{let n={profile:e,method:t.method,bucket:t.bucket,key:t.key,query:t.query,headers:t.headers,bodyBase64:t.body?m(t.body):void 0};return _(f()?await y(`mount.s3-sign-and-forward`,n):await v(`/api/s3-sign-and-forward`,n))}}function x(e){let n=e?.getImsToken??(async()=>(await d()).getBearerToken());return async e=>{let r;try{r=await n()}catch(e){throw new t(`EACCES`,`DA mount: ${e instanceof Error?e.message:String(e)}`)}let i={imsToken:r,method:e.method,path:e.path,query:e.query,headers:e.headers,bodyBase64:e.body?m(e.body):void 0};return _(f()?await y(`mount.da-sign-and-forward`,i):await v(`/api/da-sign-and-forward`,i))}}var S=e({DaMountBackend:()=>s,RemoteMountCache:()=>r,S3MountBackend:()=>l,makeSignedFetchDa:()=>x,makeSignedFetchS3:()=>b});export{s as a,l as i,x as n,b as r,S as t};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/provider-BsHT9NE2.js","assets/main-DiKQ_cUI.js","assets/chunk-aKtaBQYM.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/global-db-CbuLl-zx.js","assets/types-idfTVsM8.js"])))=>i.map(i=>d[i]);
2
- import{Dt as e,J as t,nt as n,r,v as i}from"./main-DiKQ_cUI.js";var a=n(`oauth-bootstrap`),o=6e4;async function s(){try{let{ensureAllMcpProvidersRegistered:t}=await e(async()=>{let{ensureAllMcpProvidersRegistered:e}=await import(`./provider-BsHT9NE2.js`);return{ensureAllMcpProvidersRegistered:e}},__vite__mapDeps([0,1,2,3,4,5])),n=await t();n.length>0&&a.debug(`Pre-registered MCP providers for OAuth bootstrap`,{count:n.length})}catch(e){a.warn(`Failed to pre-register MCP providers for OAuth bootstrap`,{error:e instanceof Error?e.message:String(e)})}let n=r();a.info(`Bootstrap OAuth replicas`,{count:n.length});for(let e of n){if(!e.accessToken){a.debug(`Skipping account without token`,{providerId:e.providerId});continue}if((e.tokenExpiresAt??1/0)-Date.now()<=o){let n=t(e.providerId);if(n?.onSilentRenew)try{if(await n.onSilentRenew()){a.info(`Silently renewed OAuth token`,{providerId:e.providerId});continue}a.warn(`Silent renewal yielded no token; user must re-authenticate`,{providerId:e.providerId});continue}catch(t){a.warn(`Silent renewal failed`,{providerId:e.providerId,error:t instanceof Error?t.message:String(t)});continue}a.debug(`Skipping expired account (no silent-renew hook)`,{providerId:e.providerId});continue}try{await i({providerId:e.providerId,accessToken:e.accessToken,refreshToken:e.refreshToken,tokenExpiresAt:e.tokenExpiresAt,userName:e.userName,userAvatar:e.userAvatar}),a.debug(`Bootstrapped OAuth replica`,{providerId:e.providerId})}catch(t){a.error(`OAuth bootstrap failed`,{providerId:e.providerId,error:t instanceof Error?t.message:String(t)})}}}export{s as bootstrapOAuthReplicas};
@@ -1 +0,0 @@
1
- import{r as e}from"./chunk-CMxvf4Kt.js";var t=e({PANEL_RPC_DEFAULT_TIMEOUT_MS:()=>i,createPanelRpcClient:()=>o,getPanelRpcClient:()=>c,hasLocalDom:()=>l,panelRpcChannelName:()=>a});const n=`slicc-panel-rpc`,r=15e3,i=r;function a(e){return e?`${n}:${e}`:n}function o(e={}){if(typeof BroadcastChannel!=`function`)return{call:()=>Promise.reject(Error(`panel-rpc: BroadcastChannel is unavailable`)),onEvent:()=>()=>{},registerPushTarget:()=>{},unregisterPushTarget:()=>{},dispose:()=>{}};let t=a(e.instanceId),n=new BroadcastChannel(t),i=new Map,o=new Map,c=new Map;n.addEventListener(`message`,e=>{let t=e.data;if(t?.type===`panel-rpc-event`){let e=c.get(t.channel);if(e)for(let n of e)try{n(t.payload)}catch(e){console.warn(`panel-rpc: event handler for '${t.channel}' threw:`,e instanceof Error?e.message:String(e))}return}if(t?.type===`panel-rpc-push`){if(t.op===`remote-cdp-event`){let e=t.payload;o.get(`${e.runtimeId}:${e.localTargetId}`)?.(e)}return}if(t?.type!==`panel-rpc-response`)return;let n=i.get(t.id);n&&(i.delete(t.id),clearTimeout(n.timer),typeof t.error==`string`?n.reject(Error(t.error)):n.resolve(t.result))});function l(e,t){let n=c.get(e);return n||(n=new Set,c.set(e,n)),n.add(t),()=>{let n=c.get(e);n&&(n.delete(t),n.size===0&&c.delete(e))}}function u(e,t,a={}){let o=s(),c=a.timeoutMs??r;return new Promise((r,a)=>{let s=setTimeout(()=>{i.delete(o),a(Error(`panel-rpc: op '${e}' timed out after ${c}ms`))},c);i.set(o,{resolve:r,reject:a,timer:s});let l={type:`panel-rpc-request`,id:o,op:e,payload:t};n.postMessage(l)})}function d(e,t){o.set(e,t)}function f(e){o.delete(e)}function p(){for(let[,e]of i)clearTimeout(e.timer),e.reject(Error(`panel-rpc: client disposed`));i.clear(),c.clear(),o.clear();try{n.close()}catch{}}return{call:u,onEvent:l,registerPushTarget:d,unregisterPushTarget:f,dispose:p}}function s(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?`prpc-${crypto.randomUUID()}`:`prpc-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,12)}`}function c(){return globalThis.__slicc_panelRpc??null}function l(){return typeof window<`u`&&typeof document<`u`}export{t as i,c as n,l as r,i as t};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/esptool-operations-CCUhSa0l.js","assets/chunk-aKtaBQYM.js","assets/main-DiKQ_cUI.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/rom-eeWiO07Z.js"])))=>i.map(i=>d[i]);
2
- import{Dt as e,a as t,y as n}from"./main-DiKQ_cUI.js";import{n as r,r as i}from"./hid-device-registry-D2LsJCRr.js";import{a,i as o}from"./serial-port-registry-Bc4wlwED.js";import{A as s,C as c,D as l,E as u,O as d,S as f,T as p,_ as m,a as h,b as g,c as _,d as v,f as y,g as b,h as x,i as ee,j as S,k as C,l as w,m as T,n as E,o as D,p as O,r as k,s as A,t as j,u as M,v as N,w as P,x as F,y as I}from"./usb-operations-CkcrNzZw.js";import{i as te,r as L}from"./usb-device-registry-BP58Vi0S.js";function R(r={}){let i=new Map;return{"page-info":()=>({origin:window.location.origin,href:window.location.href,title:document.title||``}),screencapture:async({mimeType:e,quality:t})=>{let n=await Z(e,t),r=await n.arrayBuffer(),i=await Q(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(X)}:{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(X)}},"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 $(),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 ne(r),await $(),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 Y(e)}),"capture-camera":async e=>await K(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(!r.resetTray)throw Error(`host reset: no active tray session to reset`);return await r.resetTray()},"tray-leave":async({workerBaseUrl:e,requestId:t})=>{if(!r.leaveTray)throw Error(`host leave: tray leave is not available in this environment`);return await r.leaveTray({workerBaseUrl:e,requestId:t})},"cherry-emit":async({runtimeId:e,name:t,detail:n})=>{if(!r.emitCherrySliccEvent)throw Error(`cherry-emit: not available in this environment`);return{delivered:r.emitCherrySliccEvent(e,t,n)}},"oauth-extras-set":({providerId:e,domains:r})=>(n(e,r),{storeAfter:t()}),"save-oauth-accounts":({accountsJson:e})=>(localStorage.setItem(`slicc_accounts`,e),{storedJson:localStorage.getItem(`slicc_accounts`)??e}),"usb-list":async()=>({devices:await D(z(),B())}),"usb-request":async({filters:e})=>({device:await w(z(),B(),e)}),"usb-device-info":({handle:e})=>({device:h(z(),e)}),"usb-open":async({handle:e})=>(await A(z(),e),{done:!0}),"usb-close":async({handle:e})=>(await E(z(),e),{done:!0}),"usb-select-configuration":async({handle:e,configurationValue:t})=>(await v(z(),e,t),{done:!0}),"usb-claim-interface":async({handle:e,interfaceNumber:t})=>(await j(z(),e,t),{done:!0}),"usb-release-interface":async({handle:e,interfaceNumber:t})=>(await _(z(),e,t),{done:!0}),"usb-control-transfer-in":async({handle:e,setup:t,length:n})=>k(z(),e,t,n),"usb-control-transfer-out":async({handle:e,setup:t,bytes:n})=>ee(z(),e,t,n),"usb-transfer-in":async({handle:e,endpointNumber:t,length:n})=>y(z(),e,t,n),"usb-transfer-out":async({handle:e,endpointNumber:t,bytes:n})=>O(z(),e,t,n),"usb-reset":async({handle:e})=>(await M(z(),e),{done:!0}),"hid-list":async()=>({devices:await b(V(),H())}),"hid-request":async({filters:e})=>({devices:await I(V(),H(),e)}),"hid-device-info":({handle:e})=>({device:x(V(),e)}),"hid-open":async({handle:e})=>(await m(V(),e),{done:!0}),"hid-close":async({handle:e})=>(await T(V(),e),{done:!0}),"hid-send-report":async({handle:e,reportId:t,bytes:n})=>(await F(V(),e,t,n),{done:!0}),"hid-send-feature-report":async({handle:e,reportId:t,bytes:n})=>(await g(V(),e,t,n),{done:!0}),"hid-receive-feature-report":async({handle:e,reportId:t})=>N(V(),e,t),"hid-subscribe-input-reports":async({handle:e})=>{i.get(e)?.();let t=await f(V(),e,t=>{r.emitEvent?.(`hid-input-report`,{handle:e,reportId:t.reportId,bytes:t.bytes})});return i.set(e,t),{done:!0}},"hid-unsubscribe-input-reports":({handle:e})=>(i.get(e)?.(),i.delete(e),{done:!0}),"serial-list":async()=>({devices:await u(U(),W())}),"serial-request":async({filters:e})=>({device:await C(U(),W(),e)}),"serial-device-info":({handle:e})=>({device:P(U(),e)}),"serial-open":async({handle:e,options:t})=>(await l(U(),e,t),{done:!0}),"serial-close":async({handle:e})=>(await c(U(),e),{done:!0}),"serial-read":async({handle:e,maxBytes:t,until:n,timeoutMs:r})=>{let i=await d(U(),e,{maxBytes:t,until:n?new Uint8Array(n):void 0,timeoutMs:r});return{bytes:i.buffer.slice(i.byteOffset,i.byteOffset+i.byteLength)}},"serial-write":async({handle:e,bytes:t})=>({bytesWritten:await S(U(),e,new Uint8Array(t))}),"serial-get-signals":async({handle:e})=>({signals:await p(U(),e)}),"serial-set-signals":async({handle:e,signals:t})=>(await s(U(),e,t),{done:!0}),"esptool-chip-info":async({handle:t,baudRate:n})=>(await e(()=>import(`./esptool-operations-CCUhSa0l.js`),__vite__mapDeps([0,1,2,3,4]))).esptoolChipInfo(U(),t,n,e=>r.emitEvent?.(`esptool-progress`,{handle:t,line:e})),"esptool-read-mac":async({handle:t,baudRate:n})=>(await e(()=>import(`./esptool-operations-CCUhSa0l.js`),__vite__mapDeps([0,1,2,3,4]))).esptoolReadMac(U(),t,n,e=>r.emitEvent?.(`esptool-progress`,{handle:t,line:e})),"esptool-erase-flash":async({handle:t,baudRate:n})=>(await(await e(()=>import(`./esptool-operations-CCUhSa0l.js`),__vite__mapDeps([0,1,2,3,4]))).esptoolEraseFlash(U(),t,n,e=>r.emitEvent?.(`esptool-progress`,{handle:t,line:e})),{done:!0}),"esptool-flash":async({handle:t,baudRate:n,eraseAll:i,segments:a})=>(await(await e(()=>import(`./esptool-operations-CCUhSa0l.js`),__vite__mapDeps([0,1,2,3,4]))).esptoolFlash(U(),t,n,i,a.map(e=>({address:e.address,data:new Uint8Array(e.bytes)})),e=>r.emitEvent?.(`esptool-progress`,{handle:t,line:e})),{done:!0}),"esptool-read-flash":async({handle:t,baudRate:n,address:i,size:a})=>{let o=await(await e(()=>import(`./esptool-operations-CCUhSa0l.js`),__vite__mapDeps([0,1,2,3,4]))).esptoolReadFlash(U(),t,n,i,a,e=>r.emitEvent?.(`esptool-progress`,{handle:t,line:e}));return{bytes:o.buffer.slice(o.byteOffset,o.byteOffset+o.byteLength)}},"esptool-read-reg":async({handle:t,baudRate:n,address:i})=>(await e(()=>import(`./esptool-operations-CCUhSa0l.js`),__vite__mapDeps([0,1,2,3,4]))).esptoolReadReg(U(),t,n,i,e=>r.emitEvent?.(`esptool-progress`,{handle:t,line:e})),"esptool-flash-id":async({handle:t,baudRate:n})=>(await e(()=>import(`./esptool-operations-CCUhSa0l.js`),__vite__mapDeps([0,1,2,3,4]))).esptoolFlashId(U(),t,n,e=>r.emitEvent?.(`esptool-progress`,{handle:t,line:e})),"esptool-erase-region":async({handle:t,baudRate:n,address:i,size:a})=>(await(await e(()=>import(`./esptool-operations-CCUhSa0l.js`),__vite__mapDeps([0,1,2,3,4]))).esptoolEraseRegion(U(),t,n,i,a,e=>r.emitEvent?.(`esptool-progress`,{handle:t,line:e})),{done:!0}),"esptool-run":async({handle:t,baudRate:n})=>(await(await e(()=>import(`./esptool-operations-CCUhSa0l.js`),__vite__mapDeps([0,1,2,3,4]))).esptoolRun(U(),t,n,e=>r.emitEvent?.(`esptool-progress`,{handle:t,line:e})),{done:!0}),"list-remote-targets":async()=>r.listRemoteTargets?{targets:(await r.listRemoteTargets()).filter(e=>e.targetId.includes(`:`)).map(e=>({targetId:e.targetId,title:e.title,url:e.url}))}:{targets:[]},"remote-cdp-send":async({runtimeId:e,localTargetId:t,method:n,params:i,sessionId:a,timeout:o})=>{if(!r.remoteCdp)throw Error(`remote-cdp bridge not available`);return r.remoteCdp.send({runtimeId:e,localTargetId:t,method:n,params:i,sessionId:a,timeout:o})},"remote-cdp-subscribe":async({runtimeId:e,localTargetId:t,event:n})=>{if(!r.remoteCdp)throw Error(`remote-cdp bridge not available`);return r.remoteCdp.subscribe({runtimeId:e,localTargetId:t,event:n})},"remote-cdp-unsubscribe":async({runtimeId:e,localTargetId:t,event:n})=>{if(!r.remoteCdp)throw Error(`remote-cdp bridge not available`);return r.remoteCdp.unsubscribe({runtimeId:e,localTargetId:t,event:n})},"remote-cdp-detach":async({runtimeId:e,localTargetId:t})=>{if(!r.remoteCdp)throw Error(`remote-cdp bridge not available`);return r.remoteCdp.detach({runtimeId:e,localTargetId:t})},"remote-open-tab":async({runtimeId:e,url:t})=>{if(!r.remoteCdp)throw Error(`remote-cdp bridge not available`);return r.remoteCdp.openTab({runtimeId:e,url:t})}}}function z(){return te()}function B(){let e=L();if(!e)throw Error(`WebUSB is unavailable in this browser`);return e}function V(){return i()}function H(){let e=r();if(!e)throw Error(`WebHID is unavailable in this browser`);return e}function U(){return a()}function W(){let e=o();if(!e)throw Error(`Web Serial is unavailable in this browser`);return e}var G=1500;async function K(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 r=await J({wantVideo:t,videoDeviceId:t?await q(e.deviceId,`videoinput`):void 0,audioDeviceId:n?await q(e.audioDeviceId,`audioinput`):void 0,wantAudio:n,width:e.width,height:e.height,frameRate:e.frameRate,exact:!!e.exactSize});try{let n=null,i=0,a=0;if(t){n=document.createElement(`video`),n.srcObject=r,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())),i=e.videoWidth,a=e.videoHeight}if(e.mode===`photo`){if(!n)throw Error(`photo capture requires a video track`);let t=e.warmupMs??G;t>0&&await new Promise(e=>setTimeout(e,t));let r=document.createElement(`canvas`);r.width=i,r.height=a;let o=r.getContext(`2d`);if(!o)throw Error(`Failed to get canvas context`);o.drawImage(n,0,0,i,a);let s=await new Promise((t,n)=>{r.toBlob(e=>e?t(e):n(Error(`Failed to encode photo`)),e.mimeType,e.quality)});return{bytes:await s.arrayBuffer(),mimeType:s.type||e.mimeType,width:i,height:a}}let o=Math.max(100,Math.min(e.durationMs??5e3,6e4)),s=typeof MediaRecorder<`u`&&MediaRecorder.isTypeSupported(e.mimeType)?e.mimeType:`video/webm`,c=new MediaRecorder(r,{mimeType:s}),l=[];c.ondataavailable=e=>{e.data&&e.data.size>0&&l.push(e.data)};let u=new Promise(e=>{c.onstop=()=>e()});c.start(),await new Promise(e=>setTimeout(e,o)),c.stop(),await u;let d=new Blob(l,{type:s});return{bytes:await d.arrayBuffer(),mimeType:d.type||s,width:i,height:a,durationMs:o}}finally{r.getTracks().forEach(e=>{e.stop()})}}async function q(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 J(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 Y(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),i=setInterval(async()=>{if(!r)try{let e=await fetch(`/api/oauth-result`);if(e.status===204||!e.ok)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(e){console.warn(`[panel-rpc:oauth-popup] Poll failed:`,e instanceof Error?e.message:String(e))}},1e3);let s=setTimeout(()=>{a();try{n?.close()}catch{}t(null)},12e4)})}function X(e){return{name:e.name,lang:e.lang,default:e.default}}async function Z(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 Q(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 ne(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 $(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{R as createStandalonePanelRpcHandlers};
@@ -1 +0,0 @@
1
- import{t as e}from"./store-DVWA7_4b.js";import"./provider-wT4Jn66D.js";export{e as readMcpAuthEntries};
@@ -1 +0,0 @@
1
- import{t as e}from"./provider-BsHT9NE2.js";export{e as readMcpAuthEntries};
@@ -1 +0,0 @@
1
- import{l as e}from"./wc-live-rni8HvKq.js";export{e as readSessionsIndex};
@@ -1 +0,0 @@
1
- import{g as e,h as t}from"./wc-live-rni8HvKq.js";export{t as setupSudoExtension,e as setupSudoStandalone};
@@ -1 +0,0 @@
1
- import{_ as e,g as t}from"./kernel-worker-CzfA4MkE.js";const n=`slicc:last-seen-version`;function r(){return{version:`4.0.1`,releasedAt:`2026-06-12T17:03:28Z`}}async function i(){let e=await t(n);return e&&e.length>0?e:null}async function a(t){await e(n,t)}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};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/setup-sudo-RDQOAmu9.js","assets/wc-live-rni8HvKq.js","assets/main-DiKQ_cUI.js","assets/chunk-aKtaBQYM.js","assets/modulepreload-polyfill-Dezn_h7o.js","assets/wc-shell-B3_sXQdU.js","assets/iconsAndAliases-Bzj1tGpU.js","assets/wc-shell-WkeczD9x.css","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-CtNbE53l.js","assets/theme-BBwuyzvz.js"])))=>i.map(i=>d[i]);
2
- import{Dt as e}from"./main-DiKQ_cUI.js";import{wireWcDetached as t}from"./wc-detached-CJ8se6La.js";import{attachWcClient as n,createWcLiveCallbacks as r,prepareWcShell as i,t as a}from"./wc-live-rni8HvKq.js";async function o(o,s,c=!1){let l=i(o,`extension · wc`),u=new a(r(l.wiring));n(l,u,s),t({client:u,isDetachedSelf:c});let{setupSudoExtension:d}=await e(async()=>{let{setupSudoExtension:e}=await import(`./setup-sudo-RDQOAmu9.js`);return{setupSudoExtension:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]));await d({log:s}),u.requestState(),s.info(`WC extension shell connected to offscreen engine`)}export{o as mountWcUiExtension};