sliccy 6.128.2 → 6.128.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/node-server/sudo/endpoint.d.ts +4 -2
- package/dist/node-server/sudo/endpoint.js +4 -2
- package/dist/node-server/sudo/types.d.ts +3 -1
- package/dist/node-server/sudo/types.js +3 -1
- package/dist/ui/.vite/manifest.json +268 -234
- package/dist/ui/assets/{account-store-QAWTf9es.js → account-store-B0pm3ilU.js} +3 -3
- package/dist/ui/assets/{account-store-AnNFDy2P.js → account-store-DgWIQYhS.js} +1 -1
- package/dist/ui/assets/{adobe-CwWmY478.js → adobe-C7ttuS1D.js} +2 -2
- package/dist/ui/assets/{adobe-BN1ZAXjw.js → adobe-xdn-0Szs.js} +1 -1
- package/dist/ui/assets/{agent-bridge-DJBiO6eU.js → agent-bridge-CboPNUry.js} +1 -1
- package/dist/ui/assets/{apply-layout-DRX2hbKF.js → apply-layout-lqKGEUj5.js} +1 -1
- package/dist/ui/assets/approval-decision-CS9Wwm5B.js +1 -0
- package/dist/ui/assets/{apps-BF0_egNy.js → apps-ChyfYcg0.js} +1 -1
- package/dist/ui/assets/{azure-openai-CBmQJEBL.js → azure-openai-B2aCr8ue.js} +1 -1
- package/dist/ui/assets/{azure-openai-Demqg5Qi.js → azure-openai-BCuwUxnV.js} +1 -1
- package/dist/ui/assets/boundary-Cp9c_bPu.js +1 -0
- package/dist/ui/assets/capability-BurSRZ-s.js +2 -0
- package/dist/ui/assets/{cerebras-DqE8lqTV.js → cerebras-DCzEYUIW.js} +1 -1
- package/dist/ui/assets/{cerebras-B1cmQz2k.js → cerebras-uFI2seBT.js} +1 -1
- package/dist/ui/assets/{composer-speech-o750u66j.js → composer-speech-B90r7re0.js} +1 -1
- package/dist/ui/assets/{connect-surface-12gDDi-P.js → connect-surface-BlAw1TBi.js} +1 -1
- package/dist/ui/assets/{directed-approval-B1e2ES3a.js → directed-approval-xbnO_YpT.js} +1 -1
- package/dist/ui/assets/{discovery-preference-rzSxl6g3.js → discovery-preference-CiKcjd83.js} +1 -1
- package/dist/ui/assets/{ensure-speech-assets-DGXbz9uT.js → ensure-speech-assets-hPZ8_uTN.js} +1 -1
- package/dist/ui/assets/extension-ops-B1o0wS2l.js +1 -0
- package/dist/ui/assets/{float-topology-B1E_mH1v.js → float-topology-D_ESvEeq.js} +1 -1
- package/dist/ui/assets/follower-navigate-watcher-n7yKTzhc.js +1 -0
- package/dist/ui/assets/{fs-CjjuhOp_.js → fs-ClSU6Svf.js} +2 -2
- package/dist/ui/assets/{fs-BIk-iv5m.js → fs-DVPBVoA6.js} +1 -1
- package/dist/ui/assets/{github-copilot--XEHMOYM.js → github-copilot-BvtJwOEN.js} +1 -1
- package/dist/ui/assets/{github-copilot-C9FoWf5Q.js → github-copilot-sb0XMuMp.js} +1 -1
- package/dist/ui/assets/{github-1KFQrsFp.js → github-iKkFfOTY.js} +1 -1
- package/dist/ui/assets/{github-install-DJwKDZ2X.js → github-install-D1D6_h6a.js} +1 -1
- package/dist/ui/assets/{github-CW1YbGum.js → github-rwnY1NyM.js} +2 -2
- package/dist/ui/assets/{github-zip-B1SOCvRU.js → github-zip-rIgqnmTE.js} +1 -1
- package/dist/ui/assets/{hear-B8lQZty5.js → hear-BIjL3g3l.js} +1 -1
- package/dist/ui/assets/{help-tl-9MNkV.js → help-DxzGXiWx.js} +1 -1
- package/dist/ui/assets/{host-command-C3f7bKlE.js → host-command-D0p9e1GO.js} +1 -1
- package/dist/ui/assets/{js-realm-worker-BIhTDwhB.js → js-realm-worker-vV7W_ULG.js} +1 -1
- package/dist/ui/assets/{kernel-worker-D6GE2eW6.js → kernel-worker-B8vq6pw1.js} +628 -628
- package/dist/ui/assets/{leader-session-events-BMpq401g.js → leader-session-events-DxNdvTBd.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-BgRQepmP.js → lick-ws-bridge-o9sDM3Nj.js} +1 -1
- package/dist/ui/assets/{local-llm-wC4GLZz1.js → local-llm-BNDdVv2n.js} +1 -1
- package/dist/ui/assets/{local-llm-Bp3hYRkd.js → local-llm-CTYzZEWt.js} +1 -1
- package/dist/ui/assets/{main-wQEmvcig.js → main-DviG_EYD.js} +3 -3
- package/dist/ui/assets/{mount-v0iuE8_k.js → mount-CKR0X5XV.js} +3 -3
- package/dist/ui/assets/{mount-CvJ9EIqL.js → mount-DI-HtwYx.js} +1 -1
- package/dist/ui/assets/{mount-bridge-client-DWskyztE.js → mount-bridge-client-BeGKXIel.js} +1 -1
- package/dist/ui/assets/{mount-recovery-DMW71B2R.js → mount-recovery-DaseLIrW.js} +1 -1
- package/dist/ui/assets/{new-session-CfKDiPZX.js → new-session-smBDQX3q.js} +2 -2
- package/dist/ui/assets/{oauth-bootstrap-B-6P1ECI.js → oauth-bootstrap-tVq_HSnE.js} +2 -2
- package/dist/ui/assets/{oauth-service-BJMc4Gsx.js → oauth-service-BQ9OoA-h.js} +1 -1
- package/dist/ui/assets/{openai-codex-QpFfvitC.js → openai-codex-81G3E4XD.js} +1 -1
- package/dist/ui/assets/{openai-codex-BSkoVpsZ.js → openai-codex-_LZ-mEm_.js} +1 -1
- package/dist/ui/assets/{openrouter-DdMDMVvm.js → openrouter-B51OkPaT.js} +1 -1
- package/dist/ui/assets/{openrouter-B10ZIJHb.js → openrouter-QGWCsJVX.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-CYPTNmFd.js → openrouter-oauth-DRdeg_Cv.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-Z8D9Uexm.js → openrouter-oauth-DuWt_JSk.js} +1 -1
- package/dist/ui/assets/page-approval-service-BA_9yawH.js +1 -0
- package/dist/ui/assets/{panel-rpc-handlers-BiZ4asca.js → panel-rpc-handlers--TLo2YZf.js} +2 -2
- package/dist/ui/assets/{port-bridge-client-CVZpTSrA.js → port-bridge-client-DX2fz9_b.js} +1 -1
- package/dist/ui/assets/{provider-BgIyNZvR.js → provider-Ce3ebk2m.js} +1 -1
- package/dist/ui/assets/{provider-5TDJo0ur.js → provider-DP6hzQYh.js} +2 -2
- package/dist/ui/assets/{provider-settings-Bx1ls4Yh.js → provider-settings-B60owuay.js} +1 -1
- package/dist/ui/assets/{provider-settings-BNDUj_a2.js → provider-settings-CywNgA7F.js} +2 -2
- package/dist/ui/assets/provider-store-access-CN5P0ZBp.js +1 -0
- package/dist/ui/assets/{provider-store-access-FCVeMJRb.js → provider-store-access-DiolEv-A.js} +2 -2
- package/dist/ui/assets/{providers-CFsw2G3b.js → providers-B6qPKl3h.js} +1 -1
- package/dist/ui/assets/{providers-CMdt7NIp.js → providers-BD05-ghU.js} +2 -2
- package/dist/ui/assets/proxied-fetch-DuC82T1c.js +2 -0
- package/dist/ui/assets/{quick-llm-u8uic8QB.js → quick-llm-XpxZHtoE.js} +1 -1
- package/dist/ui/assets/{recovery-screen-CZYT7flO.js → recovery-screen-B5T7Gt9r.js} +1 -1
- package/dist/ui/assets/request-body-FFoHDB3I.js +1 -0
- package/dist/ui/assets/rest-ops-BFV8rlC4.js +1 -0
- package/dist/ui/assets/rest-ops-DKg-BuYw.js +1 -0
- package/dist/ui/assets/rest-paths-DJCfupdz.js +1 -0
- package/dist/ui/assets/{run-EHwjzgre.js → run-Bxx7JBRF.js} +2 -2
- package/dist/ui/assets/{run-BQKfwSke.js → run-C1_gSDDb.js} +1 -1
- package/dist/ui/assets/{secret-env-BKKHVcyt.js → secret-env-4sdtvoSr.js} +1 -1
- package/dist/ui/assets/secret-topology-D5sJYeG9.js +1 -0
- package/dist/ui/assets/{secrets-bridge-client-BCv_YZhX.js → secrets-bridge-client-aihv9k6e.js} +1 -1
- package/dist/ui/assets/{session-freezer-BGtUBp7O.js → session-freezer-BEQwaGG9.js} +3 -3
- package/dist/ui/assets/{setup-feature-flags-remote-l9KfTyYp.js → setup-feature-flags-remote-DR-OKJcY.js} +1 -1
- package/dist/ui/assets/{setup-standalone-prelude-CRyLSjRK.js → setup-standalone-prelude-BbvlqPte.js} +2 -2
- package/dist/ui/assets/setup-sudo-DIn7zIQj.js +2 -0
- package/dist/ui/assets/{skills-BiYtev0K.js → skills-Dd0eKBEa.js} +1 -1
- package/dist/ui/assets/slicc-version-BPKGOtIS.js +1 -0
- package/dist/ui/assets/{snapshot-BVDkGgv2.js → snapshot-_ILnpqQY.js} +1 -1
- package/dist/ui/assets/{snapshot-features-_gfLx1rZ.js → snapshot-features-D6kCg1IW.js} +1 -1
- package/dist/ui/assets/{speak-BCIaxflW.js → speak-D8vfanJ1.js} +1 -1
- package/dist/ui/assets/{state-B1fUKJq0.js → state-C5xqpSrW.js} +1 -1
- package/dist/ui/assets/{store-IrYUKEu1.js → store-DPqCXvF4.js} +1 -1
- package/dist/ui/assets/{store-UM5Ipvg3.js → store-DvQXcAG7.js} +1 -1
- package/dist/ui/assets/sudo-CUq8SkHd.js +5 -0
- package/dist/ui/assets/{transformers-env-BvDjQzHU.js → transformers-env-De3lhfut.js} +1 -1
- package/dist/ui/assets/tray-leader-C4W6t_QT.js +1 -0
- package/dist/ui/assets/{tray-leave-runtime-ze84Lgj4.js → tray-leave-runtime-wtoD861i.js} +1 -1
- package/dist/ui/assets/{tray-runtime-config-D-kNf-DT.js → tray-runtime-config-GI-8c29v.js} +1 -1
- package/dist/ui/assets/{tray-sidecar-BEMiR0yy.js → tray-sidecar-BX6Kd_4j.js} +1 -1
- package/dist/ui/assets/types-BfwydWt7.js +1 -0
- package/dist/ui/assets/{upgrade-detection-BhBRUFIl.js → upgrade-detection-BQLdlocW.js} +1 -1
- package/dist/ui/assets/{voice-reply-D8de58Jp.js → voice-reply-C-njgXqT.js} +1 -1
- package/dist/ui/assets/{wc-extension-BLA8yGsG.js → wc-extension-BfqYfNBt.js} +2 -2
- package/dist/ui/assets/{wc-float-label-_S5TsF66.js → wc-float-label-DCnN6-DZ.js} +1 -1
- package/dist/ui/assets/{wc-floatbar-online-BRZloJeW.js → wc-floatbar-online-BRk6j7Xu.js} +1 -1
- package/dist/ui/assets/{wc-follower-tRbhAiRk.js → wc-follower-Csq24jFd.js} +3 -3
- package/dist/ui/assets/wc-live-GxJkJPVB.js +8 -0
- package/dist/ui/assets/wc-nav-XNmmtRbV.js +2 -0
- package/dist/ui/assets/{wc-onboarding-Be_O8bmO.js → wc-onboarding-D4pVCaE1.js} +2 -2
- package/dist/ui/assets/{wc-placeholder-DtI6L3KZ.js → wc-placeholder-CYmFB4jJ.js} +2 -2
- package/dist/ui/assets/{wc-settings-DzKLh6wd.js → wc-settings-BCwD-KEg.js} +3 -3
- package/dist/ui/assets/{wc-shell-C6Pg0Q54.js → wc-shell-Bj04ITtO.js} +2 -2
- package/dist/ui/assets/{wc-sprinkles-D6ytPwhq.js → wc-sprinkles-B7m1zqE-.js} +2 -2
- package/dist/ui/assets/{wc-tray-DtpbV4Hy.js → wc-tray-Bd4nV5dS.js} +4 -4
- package/dist/ui/assets/wc-unit-context-1szdc5sL.js +1 -0
- package/dist/ui/assets/{whisper-session-is7cka6b.js → whisper-session-D86jO6RQ.js} +2 -2
- package/dist/ui/assets/{xai-grok--gX-Nc6Q.js → xai-grok-BdA3Q8m2.js} +1 -1
- package/dist/ui/assets/{xai-grok-Cd-DzyGd.js → xai-grok-Cpo9k2fY.js} +1 -1
- package/dist/ui/index.html +12 -12
- package/dist/ui/packages/webapp/index.html +12 -12
- package/package.json +1 -1
- package/dist/ui/assets/boundary-BBU8IvQr.js +0 -1
- package/dist/ui/assets/extension-ops-4CHxluMA.js +0 -1
- package/dist/ui/assets/follower-navigate-watcher-CMpGLDLi.js +0 -1
- package/dist/ui/assets/page-approval-service-BVBSKskj.js +0 -1
- package/dist/ui/assets/provider-store-access-CruwM-j5.js +0 -1
- package/dist/ui/assets/proxied-fetch-DC4o4pmp.js +0 -2
- package/dist/ui/assets/request-body-DJomJP6T.js +0 -1
- package/dist/ui/assets/rest-ops-PnqziEjh.js +0 -1
- package/dist/ui/assets/secret-topology-CVgFEYzE.js +0 -1
- package/dist/ui/assets/setup-sudo-CYrdyJH7.js +0 -2
- package/dist/ui/assets/slicc-version-3d67O-JT.js +0 -1
- package/dist/ui/assets/sudo-CteiAvdB.js +0 -5
- package/dist/ui/assets/tray-leader-CqidEcFq.js +0 -1
- package/dist/ui/assets/types-Db38aZfh.js +0 -1
- package/dist/ui/assets/wc-live-Cgl26Lem.js +0 -8
- package/dist/ui/assets/wc-nav-DrRK17dw.js +0 -2
- package/dist/ui/assets/wc-unit-context-DOZ0CCmn.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./record-DOq72weu.js";function t(e){return e.role===`primary`}function n(e,t,n){let i=r(e,t)??e.find(e=>e.id===t);return i?i.model:n}function r(e,n){let r=n?e.find(e=>e.id===n):void 0;for(let n=0;r&&n<=e.length;n++){if(t(r))return r;let n=r.parentId;r=n?e.find(e=>e.id===n):void 0}}function i(e,t,n,r){for(let a of e)a.parentId===t.id&&!n.has(a.id)&&(n.add(a.id),r.push(a),i(e,a,n,r));return r}function a(e,n){if(!e.some(e=>e.parentId!==void 0))return[...o(e.filter(t)),...e.filter(e=>!t(e))];let a=new Set,s=o(e.filter(t));for(let e of s)a.add(e.id);let c=r(e,n),l=c?i(e,c,a,[]):[],u=s.flatMap(t=>i(e,t,a,[])),d=e.filter(e=>!a.has(e.id));return[...s,...l,...u,...d]}function o(e){return e.length<2||!e.every(e=>e.addedAt)?[...e]:[...e].sort((e,t)=>(e.addedAt??``).localeCompare(t.addedAt??``)||e.id.localeCompare(t.id))}function s(e){return e.role===`child`}function c(e){return e===`broken`?`dead`:e===`initializing`?`none`:`open`}function l(e,n,r){return a(e,n).map(e=>{let n=t(e);return{key:e.id,type:n?`cone`:`scoop`,color:r({isRoot:n,name:e.name}),label:n?e.assistantLabel:e.name,eyes:c(e.state),state:e.state,fill:e.fill,...e.state===`working`&&e.phase?{phase:e.phase}:{},...e.state===`idle`&&e.awaiting?{awaiting:!0}:{}}})}function u(e){return t(e)&&e.folder===`cone`}function d(e){return t(e)?e.assistantLabel:e.name}function f(e){return u(e)?`cone`:t(e)?`cone:${e.folder}`:`scoop:${e.name}`}function p(e){return u(e)?`cone`:t(e)?e.folder:e.name}function m(e,n){if(n.startsWith(`scoop:`)){let r=n.slice(6);return e.find(e=>!t(e)&&e.name===r)}if(n.startsWith(`cone:`)){let r=n.slice(5);return e.find(e=>t(e)&&e.folder===r)}return h(e)}function h(e){let n=o(e.filter(t));return n.find(u)??n[0]}function g(e,t){let n=r(e,t?.id);if(n)return n;if(!_(e,t?.id))return h(e)}function _(e,n){if(n===void 0)return!1;let r=e.find(e=>e.id===n);return r!==void 0&&!t(r)&&r.parentId===void 0}function v(t){return t==null||t===`cone`?e:t.startsWith(`cone:`)?t.slice(5)||`cone`:null}function y(e,n){return n?e.find(e=>t(e)&&e.folder===n)??h(e):h(e)}function b(e){return t(e)?`cone`:`scoop`}function x(e){return s({role:e===`cone`?`primary`:`child`})}export{g as a,m as c,s as d,t as f,y as i,b as l,l as m,x as n,d as o,n as p,v as r,f as s,h as t,p as u};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/speak-
|
|
2
|
-
import{t as e}from"./preload-helper-Czpn1I53.js";import{t}from"./logger-DDBAeTLF.js";import{a as n,n as r,o as i,r as a,t as o}from"./transformers-env-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/speak-D8vfanJ1.js","assets/preload-helper-Czpn1I53.js","assets/logger-DDBAeTLF.js","assets/runtime-env-Dlaokqg1.js","assets/runtime-env-CgsZ7LTp.js","assets/runtime-env-E-i2SW1s.js","assets/src-CAWTvdAa.js","assets/speech-assets-bridge-CFYafE89.js","assets/transformers-env-De3lhfut.js","assets/proxied-fetch-DuC82T1c.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/base64-DJRlyqZu.js","assets/fetch-body-D2PwksUW.js","assets/api-endpoint-CWeRbcY3.js","assets/shared-2T6O01rS.js","assets/mime-types-k2E6ulyv.js","assets/transformers.web-B0gi9Hor.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{t as e}from"./preload-helper-Czpn1I53.js";import{t}from"./logger-DDBAeTLF.js";import{a as n,n as r,o as i,r as a,t as o}from"./transformers-env-De3lhfut.js";var s=t(`speech:whisper`),c=null,l=`idle`,u=null,d=new Set;function f(){return l}function p(){return u}function m(e){return e&&d.add(e),c||=(l=`loading`,g().then(e=>(l=`ready`,h(),e),e=>{throw l=`failed`,c=null,s.error(`whisper load failed`,e),e})),c}function h(){e(async()=>{let{kokoroWarmup:e}=await import(`./speak-D8vfanJ1.js`);return{kokoroWarmup:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15])).then(({kokoroWarmup:e})=>e()).catch(e=>s.warn(`kokoro warmup (chained after whisper) failed`,e))}async function g(){let{pipeline:t,env:c}=await e(async()=>{let{pipeline:e,env:t}=await import(`./transformers.web-B0gi9Hor.js`);return{pipeline:e,env:t}},__vite__mapDeps([16,10,1]));r(c),await o(n),await a();let l=i(),f=e=>{if(e?.file){if(e.status===`progress`)l.update(e.file,e.loaded??0,e.total??0);else if(e.status===`done`)l.complete(e.file);else return;u=l.snapshot();for(let e of d)e(u)}},p=async e=>await t(`automatic-speech-recognition`,n,{device:e,dtype:e===`webgpu`?`fp32`:`q8`,progress_callback:f}),m=typeof navigator<`u`&&`gpu`in navigator,h;if(m)try{h=await p(`webgpu`)}catch(e){s.warn(`whisper webgpu init failed; retrying on wasm`,e),h=await p(`wasm`)}else h=await p(`wasm`);return s.info(`whisper ready`,{model:n,device:m?`webgpu`:`wasm`}),{async transcribe(e,t){let n=performance.now(),r=await h(e,{chunk_length_s:30,task:`transcribe`,...t?.language?{language:t.language}:{}}),i=Array.isArray(r)?r.map(e=>e.text??``).join(` `):r.text??``;return s.info(`whisper transcribe`,{elapsedMs:Math.round(performance.now()-n),audioSeconds:Math.round(e.length/160)/100,numThreads:c.backends?.onnx?.wasm?.numThreads,device:m?`webgpu`:`wasm`}),i.trim()}}}var _=16e3;async function v(e){if(typeof AudioContext>`u`||typeof OfflineAudioContext>`u`)throw Error(`audio decoding requires a window/page realm (AudioContext unavailable)`);let t=new AudioContext,n;try{n=await t.decodeAudioData(e.slice(0))}finally{await t.close().catch(()=>{})}let r=Math.max(1,Math.ceil(n.duration*_)),i=new OfflineAudioContext(1,r,_),a=i.createBufferSource();return a.buffer=n,a.connect(i.destination),a.start(),(await i.startRendering()).getChannelData(0).slice(0)}var y=t(`speech:whisper-session`),b=2e3,x=500,S=5e3,C=3e4,w=(e,t,n)=>new Promise((r,i)=>{let a=setTimeout(()=>i(Error(`${n} timed out after ${t}ms`)),t);e.then(e=>{clearTimeout(a),r(e)},e=>{clearTimeout(a),i(e)})});function T(e){return e?.split(`-`)[0]?.toLowerCase()||void 0}async function E(e,t){let n;if(t.stream)n=t.stream;else{if(!navigator.mediaDevices?.getUserMedia)throw Error(`microphone capture unavailable in this realm`);n=await navigator.mediaDevices.getUserMedia({audio:t.deviceId&&t.deviceId!=="default"?{deviceId:{exact:t.deviceId}}:!0})}let r=new MediaRecorder(n),i=[],a=T(t.lang),o=!1,s=!1;r.ondataavailable=e=>{e.data.size>0&&i.push(e.data)};let c=async()=>{if(i.length===0)return``;let t=await v(await new Blob(i,{type:r.mimeType||`audio/webm`}).arrayBuffer());return e.transcribe(t,{language:a})},l=Promise.resolve(``),u=()=>{let e=l.catch(()=>``).then(()=>c());return l=e.catch(()=>``),e},d=setInterval(()=>{o||s||i.length===0||(o=!0,u().then(e=>{!s&&e&&t.onPartial?.(e)}).catch(e=>{y.warn(`partial transcription failed`,e)}).finally(()=>{o=!1}))},b),f=()=>{if(clearInterval(d),r.state!==`inactive`)try{r.stop()}catch{}for(let e of n.getTracks())e.stop()},p=()=>new Promise(e=>{if(r.state===`inactive`){e();return}r.onstop=()=>e();try{r.stop()}catch{e()}});return r.start(x),{async stop(){if(s)return``;s=!0,clearInterval(d);try{await w(p(),S,`recorder flush`);for(let e of n.getTracks())e.stop();return await w(u(),C,`transcription`)}catch(e){for(let e of n.getTracks())e.stop();let r=e instanceof Error?e.message:String(e);return t.onError?.(`transcription failed: ${r}`),``}},cancel(){s||(s=!0,f())}}}export{p as a,m as i,T as n,f as o,v as r,E as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{H as e,d as t}from"./account-store-
|
|
1
|
+
import{H as e,d as t}from"./account-store-B0pm3ilU.js";import{a as n}from"./diagnostics-DN_idNHx.js";import{c as r,u as i}from"./claude-model-version-BJLrDjmH.js";import{c as a,i as o,r as s,s as c}from"./legacy-api-aliases-45zvHmpJ.js";import"./provider-settings-CywNgA7F.js";import{n as l,r as u,t as d}from"./pkce-hGf_TEnP.js";import{XaiErrorCode as f,XaiOAuthError as p}from"./xai-grok-errors-bnlIBeu-.js";var m=`xai-grok`,h=`https://auth.x.ai`,g=`${h}/oauth2/authorize`,_=`${h}/oauth2/token`,v=`b1a00492-073a-47ea-816f-4c329264a828`,y=`openid profile email offline_access grok-cli:access api:access`,b=`http://127.0.0.1:56121/callback`,x=`http://127.0.0.1:56121/*`,S=`https://api.x.ai/v1`,C=`grok-4.5`,w=`${m}-openai`;function T(){return r(`xai`)}function E(e){return{id:e.id,name:e.name,api:`openai`,reasoning:e.reasoning,input:e.input,context_window:e.contextWindow,max_tokens:e.maxTokens,compat:e.compat,thinkingLevelMap:e.thinkingLevelMap}}function D(e){let t=T(),n=t.find(t=>t.id===e.id);if(!n&&(console.warn(`xAI model "${e.id}" is no longer in the pi-ai catalog; falling back to default "${C}"`),n=t.find(e=>e.id===C),!n))throw Error(`xAI default model "${C}" is not registered by pi-ai`);if(n.api!==`openai-responses`&&n.api!==`openai-completions`)throw Error(`Unsupported pi-ai API "${n.api}" for xAI model "${e.id}"`);return{...e,...n,baseUrl:S}}async function O(e,t){let n=new URLSearchParams({grant_type:`authorization_code`,code:e,redirect_uri:b,client_id:v,code_verifier:t}),r=await fetch(_,{method:`POST`,headers:{"Content-Type":`application/x-www-form-urlencoded`},body:n});if(!r.ok)throw new p(`xAI token exchange failed: ${r.status} ${await r.text()}`,f.TOKEN_EXCHANGE_FAILED);let i=await r.json();if(!i.access_token)throw new p(`xAI token exchange did not return access_token.`,f.TOKEN_EXCHANGE_INVALID);return i}async function k(e){try{let t=new URLSearchParams({grant_type:`refresh_token`,refresh_token:e,client_id:v}),n=await fetch(_,{method:`POST`,headers:{"Content-Type":`application/x-www-form-urlencoded`},body:t});return n.ok?await n.json():(console.error(`[xai-grok] refresh failed:`,n.status,await n.text()),null)}catch(e){return console.error(`[xai-grok] refresh error:`,e instanceof Error?e.message:String(e)),null}}function A(){return t().find(e=>e.providerId===m)}async function j(){let t=A();if(!t?.accessToken)throw new p("Not signed in to xAI Grok — run /login or `oauth-token xai-grok`",f.AUTH_MISSING,!0);let n=t.tokenExpiresAt??0;if(n&&Date.now()+6e4<n)return t.accessToken;if(t.refreshToken){let n=await k(t.refreshToken);if(n?.access_token)return await e({providerId:m,accessToken:n.access_token,refreshToken:n.refresh_token??t.refreshToken,tokenExpiresAt:Date.now()+(n.expires_in??21600)*1e3,scopes:n.scope??t.scopes}),n.access_token}return t.accessToken}function M(e,t){return{type:`error`,reason:`error`,error:{role:`assistant`,content:[],api:w,provider:m,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`error`,errorMessage:t instanceof Error?t.message:String(t),timestamp:Date.now()}}}function N(e,t){return t?{...e??{},"x-grok-conv-id":t}:e}function P(e){console.error(`[xai-grok] Stream error:`,e instanceof Error?e.message:String(e))}async function F(e,t,n,r){try{let i=await j(),a=r.sessionId,c=D(t),l={...r,apiKey:i,headers:N(r.headers,a)},u=c.api===`openai-responses`?o(c,n,l):s(c,n,l);for await(let t of u)e.push(t);e.end()}catch(n){P(n),e.push(M(t,n)),e.end()}}async function I(e,t,n,r){try{let i=await j(),o=r?.sessionId,s=D(t),l={...r,apiKey:i,headers:N(r?.headers,o)},u=s.api===`openai-responses`?a(s,n,l):c(s,n,l);for await(let t of u)e.push(t);e.end()}catch(n){P(n),e.push(M(t,n)),e.end()}}var L=(e,t,r={})=>{let i=n();return F(i,e,t,r).catch(P),i},R=(e,t,r)=>{let i=n();return I(i,e,t,r).catch(P),i},z={id:m,name:`xAI Grok (SuperGrok OAuth)`,description:`Grok via xAI OAuth — uses your SuperGrok subscription, no API key needed. Default model is Grok 4.5.`,requiresApiKey:!1,requiresBaseUrl:!1,isOAuth:!0,defaultModelId:C,oauthTokenDomains:[`api.x.ai`,`*.x.ai`,`auth.x.ai`,`accounts.x.ai`],getModelIds:()=>T().map(E),onOAuthLoginIntercepted:async(t,n,r)=>{let i=l(),a=await d(i),o=u(),s=u(),c=new URL(g);c.searchParams.set(`response_type`,`code`),c.searchParams.set(`client_id`,v),c.searchParams.set(`redirect_uri`,b),c.searchParams.set(`scope`,r?.scopes??y),c.searchParams.set(`code_challenge`,a),c.searchParams.set(`code_challenge_method`,`S256`),c.searchParams.set(`state`,o),c.searchParams.set(`nonce`,s),c.searchParams.set(`plan`,`generic`),c.searchParams.set(`referrer`,`slicc`);let h=await t({authorizeUrl:c.toString(),redirectUriPattern:x,onCapture:`close`});if(!h)throw new p(`xAI OAuth login was cancelled or timed out`,f.CALLBACK_TIMEOUT);let _=new URL(h),C=_.searchParams.get(`code`),w=_.searchParams.get(`state`);if(!C)throw new p(`xAI OAuth redirect did not include a code`,f.CODE_MISSING);if(w!==o)throw new p(`xAI OAuth state mismatch — possible CSRF, aborting`,f.STATE_MISMATCH);let T=await O(C,i);await e({providerId:m,accessToken:T.access_token,refreshToken:T.refresh_token,tokenExpiresAt:Date.now()+(T.expires_in??21600)*1e3,baseUrl:S,scopes:T.scope}),n()},onOAuthLogout:async()=>{await e({providerId:m,accessToken:``})},onSilentRenew:async()=>{let t=A();if(!t?.refreshToken)return null;let n=await k(t.refreshToken);return n?.access_token?(await e({providerId:m,accessToken:n.access_token,refreshToken:n.refresh_token??t.refreshToken,tokenExpiresAt:Date.now()+(n.expires_in??21600)*1e3,scopes:n.scope??t.scopes}),n.access_token):null}};function B(){i({api:w,stream:L,streamSimple:R})}export{f as XaiErrorCode,p as XaiOAuthError,z as config,B as register};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as e,n as t}from"./account-store-
|
|
1
|
+
import{g as e,n as t}from"./account-store-DgWIQYhS.js";import{a as n}from"./diagnostics-DN_idNHx.js";import{a as r,r as i}from"./compat-uEPf6-XW.js";import{c as a,i as o,r as s,s as c}from"./legacy-api-aliases-jKEvBgOL.js";import"./provider-settings-B60owuay.js";import{n as l,r as u,t as d}from"./pkce-hGf_TEnP.js";import{XaiErrorCode as f,XaiOAuthError as p}from"./xai-grok-errors-ByEMMSoz.js";const m=`xai-grok`,h=`https://auth.x.ai`,g=`${h}/oauth2/authorize`,_=`${h}/oauth2/token`,v=`b1a00492-073a-47ea-816f-4c329264a828`,y=`http://127.0.0.1:56121/callback`,b=`https://api.x.ai/v1`,x=`grok-4.5`,S=`${m}-openai`;function C(){return i(`xai`)}function w(e){return{id:e.id,name:e.name,api:`openai`,reasoning:e.reasoning,input:e.input,context_window:e.contextWindow,max_tokens:e.maxTokens,compat:e.compat,thinkingLevelMap:e.thinkingLevelMap}}function T(e){let t=C(),n=t.find(t=>t.id===e.id);if(!n&&(console.warn(`xAI model "${e.id}" is no longer in the pi-ai catalog; falling back to default "${x}"`),n=t.find(e=>e.id===x),!n))throw Error(`xAI default model "${x}" is not registered by pi-ai`);if(n.api!==`openai-responses`&&n.api!==`openai-completions`)throw Error(`Unsupported pi-ai API "${n.api}" for xAI model "${e.id}"`);return{...e,...n,baseUrl:b}}async function E(e,t){let n=new URLSearchParams({grant_type:`authorization_code`,code:e,redirect_uri:y,client_id:v,code_verifier:t}),r=await fetch(_,{method:`POST`,headers:{"Content-Type":`application/x-www-form-urlencoded`},body:n});if(!r.ok)throw new p(`xAI token exchange failed: ${r.status} ${await r.text()}`,f.TOKEN_EXCHANGE_FAILED);let i=await r.json();if(!i.access_token)throw new p(`xAI token exchange did not return access_token.`,f.TOKEN_EXCHANGE_INVALID);return i}async function D(e){try{let t=new URLSearchParams({grant_type:`refresh_token`,refresh_token:e,client_id:v}),n=await fetch(_,{method:`POST`,headers:{"Content-Type":`application/x-www-form-urlencoded`},body:t});return n.ok?await n.json():(console.error(`[xai-grok] refresh failed:`,n.status,await n.text()),null)}catch(e){return console.error(`[xai-grok] refresh error:`,e instanceof Error?e.message:String(e)),null}}function O(){return t().find(e=>e.providerId===m)}async function k(){let t=O();if(!t?.accessToken)throw new p("Not signed in to xAI Grok — run /login or `oauth-token xai-grok`",f.AUTH_MISSING,!0);let n=t.tokenExpiresAt??0;if(n&&Date.now()+6e4<n)return t.accessToken;if(t.refreshToken){let n=await D(t.refreshToken);if(n?.access_token)return await e({providerId:m,accessToken:n.access_token,refreshToken:n.refresh_token??t.refreshToken,tokenExpiresAt:Date.now()+(n.expires_in??21600)*1e3,scopes:n.scope??t.scopes}),n.access_token}return t.accessToken}function A(e,t){return{type:`error`,reason:`error`,error:{role:`assistant`,content:[],api:S,provider:m,model:e.id,usage:{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}},stopReason:`error`,errorMessage:t instanceof Error?t.message:String(t),timestamp:Date.now()}}}function j(e,t){return t?{...e??{},"x-grok-conv-id":t}:e}function M(e){console.error(`[xai-grok] Stream error:`,e instanceof Error?e.message:String(e))}async function N(e,t,n,r){try{let i=await k(),a=r.sessionId,c=T(t),l={...r,apiKey:i,headers:j(r.headers,a)},u=c.api===`openai-responses`?o(c,n,l):s(c,n,l);for await(let t of u)e.push(t);e.end()}catch(n){M(n),e.push(A(t,n)),e.end()}}async function P(e,t,n,r){try{let i=await k(),o=r?.sessionId,s=T(t),l={...r,apiKey:i,headers:j(r?.headers,o)},u=s.api===`openai-responses`?a(s,n,l):c(s,n,l);for await(let t of u)e.push(t);e.end()}catch(n){M(n),e.push(A(t,n)),e.end()}}const F=(e,t,r={})=>{let i=n();return N(i,e,t,r).catch(M),i},I=(e,t,r)=>{let i=n();return P(i,e,t,r).catch(M),i},L={id:m,name:`xAI Grok (SuperGrok OAuth)`,description:`Grok via xAI OAuth — uses your SuperGrok subscription, no API key needed. Default model is Grok 4.5.`,requiresApiKey:!1,requiresBaseUrl:!1,isOAuth:!0,defaultModelId:x,oauthTokenDomains:[`api.x.ai`,`*.x.ai`,`auth.x.ai`,`accounts.x.ai`],getModelIds:()=>C().map(w),onOAuthLoginIntercepted:async(t,n,r)=>{let i=l(),a=await d(i),o=u(),s=u(),c=new URL(g);c.searchParams.set(`response_type`,`code`),c.searchParams.set(`client_id`,v),c.searchParams.set(`redirect_uri`,y),c.searchParams.set(`scope`,r?.scopes??`openid profile email offline_access grok-cli:access api:access`),c.searchParams.set(`code_challenge`,a),c.searchParams.set(`code_challenge_method`,`S256`),c.searchParams.set(`state`,o),c.searchParams.set(`nonce`,s),c.searchParams.set(`plan`,`generic`),c.searchParams.set(`referrer`,`slicc`);let h=await t({authorizeUrl:c.toString(),redirectUriPattern:`http://127.0.0.1:56121/*`,onCapture:`close`});if(!h)throw new p(`xAI OAuth login was cancelled or timed out`,f.CALLBACK_TIMEOUT);let _=new URL(h),x=_.searchParams.get(`code`),S=_.searchParams.get(`state`);if(!x)throw new p(`xAI OAuth redirect did not include a code`,f.CODE_MISSING);if(S!==o)throw new p(`xAI OAuth state mismatch — possible CSRF, aborting`,f.STATE_MISMATCH);let C=await E(x,i);await e({providerId:m,accessToken:C.access_token,refreshToken:C.refresh_token,tokenExpiresAt:Date.now()+(C.expires_in??21600)*1e3,baseUrl:b,scopes:C.scope}),n()},onOAuthLogout:async()=>{await e({providerId:m,accessToken:``})},onSilentRenew:async()=>{let t=O();if(!t?.refreshToken)return null;let n=await D(t.refreshToken);return n?.access_token?(await e({providerId:m,accessToken:n.access_token,refreshToken:n.refresh_token??t.refreshToken,tokenExpiresAt:Date.now()+(n.expires_in??21600)*1e3,scopes:n.scope??t.scopes}),n.access_token):null}};function R(){r({api:S,stream:F,streamSimple:I})}export{f as XaiErrorCode,p as XaiOAuthError,L as config,R as register};
|
package/dist/ui/index.html
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>slicc</title>
|
|
7
7
|
<link rel="icon" type="image/png" href="/logos/sliccy-color-1scoops-32x32.png" />
|
|
8
|
-
<script type="module" crossorigin src="/assets/main-
|
|
8
|
+
<script type="module" crossorigin src="/assets/main-DviG_EYD.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-P2Xu9kJm.js">
|
|
10
10
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-Dd_uD5pT.js">
|
|
11
11
|
<link rel="modulepreload" crossorigin href="/assets/preload-helper-Czpn1I53.js">
|
|
@@ -22,29 +22,29 @@
|
|
|
22
22
|
<link rel="modulepreload" crossorigin href="/assets/fetch-body-D2PwksUW.js">
|
|
23
23
|
<link rel="modulepreload" crossorigin href="/assets/runtime-env-Dlaokqg1.js">
|
|
24
24
|
<link rel="modulepreload" crossorigin href="/assets/api-endpoint-CWeRbcY3.js">
|
|
25
|
-
<link rel="modulepreload" crossorigin href="/assets/proxied-fetch-
|
|
25
|
+
<link rel="modulepreload" crossorigin href="/assets/proxied-fetch-DuC82T1c.js">
|
|
26
26
|
<link rel="modulepreload" crossorigin href="/assets/runtime-env-E-i2SW1s.js">
|
|
27
|
-
<link rel="modulepreload" crossorigin href="/assets/float-topology-
|
|
28
|
-
<link rel="modulepreload" crossorigin href="/assets/secret-topology-
|
|
29
|
-
<link rel="modulepreload" crossorigin href="/assets/port-bridge-client-
|
|
30
|
-
<link rel="modulepreload" crossorigin href="/assets/secrets-bridge-client-
|
|
27
|
+
<link rel="modulepreload" crossorigin href="/assets/float-topology-D_ESvEeq.js">
|
|
28
|
+
<link rel="modulepreload" crossorigin href="/assets/secret-topology-D5sJYeG9.js">
|
|
29
|
+
<link rel="modulepreload" crossorigin href="/assets/port-bridge-client-DX2fz9_b.js">
|
|
30
|
+
<link rel="modulepreload" crossorigin href="/assets/secrets-bridge-client-aihv9k6e.js">
|
|
31
31
|
<link rel="modulepreload" crossorigin href="/assets/image-markers-CxJ9ZBgw.js">
|
|
32
32
|
<link rel="modulepreload" crossorigin href="/assets/tool-ui-eSQ1g2I1.js">
|
|
33
|
-
<link rel="modulepreload" crossorigin href="/assets/providers-
|
|
33
|
+
<link rel="modulepreload" crossorigin href="/assets/providers-BD05-ghU.js">
|
|
34
34
|
<link rel="modulepreload" crossorigin href="/assets/panel-rpc-B3MSVImO.js">
|
|
35
35
|
<link rel="modulepreload" crossorigin href="/assets/bedrock-camp-compat-CgBMwna8.js">
|
|
36
|
-
<link rel="modulepreload" crossorigin href="/assets/account-store-
|
|
36
|
+
<link rel="modulepreload" crossorigin href="/assets/account-store-B0pm3ilU.js">
|
|
37
37
|
<link rel="modulepreload" crossorigin href="/assets/messages-BD4p8GuF.js">
|
|
38
|
-
<link rel="modulepreload" crossorigin href="/assets/tray-runtime-config-
|
|
38
|
+
<link rel="modulepreload" crossorigin href="/assets/tray-runtime-config-GI-8c29v.js">
|
|
39
39
|
<link rel="modulepreload" crossorigin href="/assets/runtime-env-CgsZ7LTp.js">
|
|
40
|
-
<link rel="modulepreload" crossorigin href="/assets/setup-sudo-
|
|
41
|
-
<link rel="modulepreload" crossorigin href="/assets/setup-standalone-prelude-
|
|
40
|
+
<link rel="modulepreload" crossorigin href="/assets/setup-sudo-DIn7zIQj.js">
|
|
41
|
+
<link rel="modulepreload" crossorigin href="/assets/setup-standalone-prelude-BbvlqPte.js">
|
|
42
42
|
<link rel="modulepreload" crossorigin href="/assets/telemetry-BVzuNdvW.js">
|
|
43
43
|
<link rel="modulepreload" crossorigin href="/assets/feature-flags-DaSRRz0w.js">
|
|
44
44
|
<link rel="modulepreload" crossorigin href="/assets/tray-follower-status-BAjnN7Ar.js">
|
|
45
45
|
<link rel="modulepreload" crossorigin href="/assets/clipboard-eqmn97SP.js">
|
|
46
46
|
<link rel="modulepreload" crossorigin href="/assets/tray-join-url-BIvzbiFR.js">
|
|
47
|
-
<link rel="modulepreload" crossorigin href="/assets/provider-settings-
|
|
47
|
+
<link rel="modulepreload" crossorigin href="/assets/provider-settings-CywNgA7F.js">
|
|
48
48
|
</head>
|
|
49
49
|
<body>
|
|
50
50
|
<div id="app"></div>
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>slicc</title>
|
|
7
7
|
<link rel="icon" type="image/png" href="/logos/sliccy-color-1scoops-32x32.png" />
|
|
8
|
-
<script type="module" crossorigin src="/assets/main-
|
|
8
|
+
<script type="module" crossorigin src="/assets/main-DviG_EYD.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-P2Xu9kJm.js">
|
|
10
10
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-Dd_uD5pT.js">
|
|
11
11
|
<link rel="modulepreload" crossorigin href="/assets/preload-helper-Czpn1I53.js">
|
|
@@ -22,29 +22,29 @@
|
|
|
22
22
|
<link rel="modulepreload" crossorigin href="/assets/fetch-body-D2PwksUW.js">
|
|
23
23
|
<link rel="modulepreload" crossorigin href="/assets/runtime-env-Dlaokqg1.js">
|
|
24
24
|
<link rel="modulepreload" crossorigin href="/assets/api-endpoint-CWeRbcY3.js">
|
|
25
|
-
<link rel="modulepreload" crossorigin href="/assets/proxied-fetch-
|
|
25
|
+
<link rel="modulepreload" crossorigin href="/assets/proxied-fetch-DuC82T1c.js">
|
|
26
26
|
<link rel="modulepreload" crossorigin href="/assets/runtime-env-E-i2SW1s.js">
|
|
27
|
-
<link rel="modulepreload" crossorigin href="/assets/float-topology-
|
|
28
|
-
<link rel="modulepreload" crossorigin href="/assets/secret-topology-
|
|
29
|
-
<link rel="modulepreload" crossorigin href="/assets/port-bridge-client-
|
|
30
|
-
<link rel="modulepreload" crossorigin href="/assets/secrets-bridge-client-
|
|
27
|
+
<link rel="modulepreload" crossorigin href="/assets/float-topology-D_ESvEeq.js">
|
|
28
|
+
<link rel="modulepreload" crossorigin href="/assets/secret-topology-D5sJYeG9.js">
|
|
29
|
+
<link rel="modulepreload" crossorigin href="/assets/port-bridge-client-DX2fz9_b.js">
|
|
30
|
+
<link rel="modulepreload" crossorigin href="/assets/secrets-bridge-client-aihv9k6e.js">
|
|
31
31
|
<link rel="modulepreload" crossorigin href="/assets/image-markers-CxJ9ZBgw.js">
|
|
32
32
|
<link rel="modulepreload" crossorigin href="/assets/tool-ui-eSQ1g2I1.js">
|
|
33
|
-
<link rel="modulepreload" crossorigin href="/assets/providers-
|
|
33
|
+
<link rel="modulepreload" crossorigin href="/assets/providers-BD05-ghU.js">
|
|
34
34
|
<link rel="modulepreload" crossorigin href="/assets/panel-rpc-B3MSVImO.js">
|
|
35
35
|
<link rel="modulepreload" crossorigin href="/assets/bedrock-camp-compat-CgBMwna8.js">
|
|
36
|
-
<link rel="modulepreload" crossorigin href="/assets/account-store-
|
|
36
|
+
<link rel="modulepreload" crossorigin href="/assets/account-store-B0pm3ilU.js">
|
|
37
37
|
<link rel="modulepreload" crossorigin href="/assets/messages-BD4p8GuF.js">
|
|
38
|
-
<link rel="modulepreload" crossorigin href="/assets/tray-runtime-config-
|
|
38
|
+
<link rel="modulepreload" crossorigin href="/assets/tray-runtime-config-GI-8c29v.js">
|
|
39
39
|
<link rel="modulepreload" crossorigin href="/assets/runtime-env-CgsZ7LTp.js">
|
|
40
|
-
<link rel="modulepreload" crossorigin href="/assets/setup-sudo-
|
|
41
|
-
<link rel="modulepreload" crossorigin href="/assets/setup-standalone-prelude-
|
|
40
|
+
<link rel="modulepreload" crossorigin href="/assets/setup-sudo-DIn7zIQj.js">
|
|
41
|
+
<link rel="modulepreload" crossorigin href="/assets/setup-standalone-prelude-BbvlqPte.js">
|
|
42
42
|
<link rel="modulepreload" crossorigin href="/assets/telemetry-BVzuNdvW.js">
|
|
43
43
|
<link rel="modulepreload" crossorigin href="/assets/feature-flags-DaSRRz0w.js">
|
|
44
44
|
<link rel="modulepreload" crossorigin href="/assets/tray-follower-status-BAjnN7Ar.js">
|
|
45
45
|
<link rel="modulepreload" crossorigin href="/assets/clipboard-eqmn97SP.js">
|
|
46
46
|
<link rel="modulepreload" crossorigin href="/assets/tray-join-url-BIvzbiFR.js">
|
|
47
|
-
<link rel="modulepreload" crossorigin href="/assets/provider-settings-
|
|
47
|
+
<link rel="modulepreload" crossorigin href="/assets/provider-settings-CywNgA7F.js">
|
|
48
48
|
</head>
|
|
49
49
|
<body>
|
|
50
50
|
<div id="app"></div>
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as e}from"./types-Db38aZfh.js";const t=`sudo-request`,n=`/api/sudo-approve`;function r(e,t){let n=null;return()=>(n===null&&(n=(t===void 0?e():i(e(),t,e=>`module load exceeded ${e}ms`)).catch(e=>{throw n=null,e})),n)}function i(e,t,n=e=>`no answer within ${e}ms`){return new Promise((r,i)=>{let a=setTimeout(()=>i(Error(n(t))),t);e.then(e=>{clearTimeout(a),r(e)},e=>{clearTimeout(a),i(e)})})}async function a(t,n,r){try{return await r()}catch(r){return e(t,n,r instanceof Error?r.message:String(r))}}export{t as a,n as i,a as n,i as r,r as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./base64-DzRgusa4.js";import"./src-CcFD5QfS.js";import{t}from"./content-type-_QKWY0B2.js";import{a as n,r}from"./boundary-BBU8IvQr.js";import{s as i}from"./types-Db38aZfh.js";import{n as a,t as o}from"./request-body-DJomJP6T.js";function s(n){let r=n.adapter===`extension-direct`,a={callSecrets:n.callSecrets??(e=>l(r,e)),callMount:n.callMount??((e,t)=>u(r,e,t)),crossOriginFetch:n.crossOriginFetch??(e=>d(r,e)),requestApproval:n.requestApproval??(e=>p(r,e))};async function o(e,t,n){try{return{ok:!0,value:await n()}}catch(n){return i(e,t,n instanceof Error?n.message:String(n))}}async function s(e){let t=await o(`secrets`,e,()=>a.callSecrets({type:`secrets.list-masked-entries`}));if(!t.ok)return t;let n=t.value;return n?.error?i(`secrets`,e,n.error):Array.isArray(n?.entries)?{ok:!0,value:n.entries}:i(`secrets`,e,`secrets bridge returned no entries`)}async function c(e){let t=await o(`secrets`,`set`,()=>a.callSecrets({type:e.scope===`persisted`?`secrets.set`:`secrets.session.set`,name:e.name,value:e.value,domains:[...e.domains??[]]}));if(!t.ok)return t;let n=t.value;return n?.ok?{ok:!0,value:void 0}:i(`secrets`,`set`,n?.error??`secrets.set failed`)}async function f(e){let t=await o(`secrets`,`delete`,()=>a.callSecrets({type:`secrets.delete`,name:e.name}));if(!t.ok)return t;let n=t.value;return n?.ok?{ok:!0,value:{removed:n.removed??!0,fromSession:n.fromSession===!0}}:i(`secrets`,`delete`,n?.error??`secrets.delete failed`)}async function m(n){let r=await o(`network`,`crossOriginFetch`,()=>a.crossOriginFetch(n));if(!r.ok)return r;let i=r.value,s=t(i.headers[`content-type`]??``);return{ok:!0,value:{status:i.status,ok:i.status>=200&&i.status<300,statusText:i.statusText,headers:i.headers,body:s?new TextDecoder().decode(i.bytes):e(i.bytes),bodyEncoding:s?`text`:`base64`,url:n.url}}}async function h(e){let t=await o(`mounts`,`signRequest`,()=>a.callMount(e.backend===`s3`?`mount.s3-sign-and-forward`:`mount.da-sign-and-forward`,e.envelope));return t.ok?t.value&&typeof t.value.ok==`boolean`?{ok:!0,value:t.value}:i(`mounts`,`signRequest`,`mount bridge returned no envelope`):t}return{crossOriginFetch:m,secrets:{async listMaskedEnv(){let e=await s(`listMaskedEnv`);return e.ok?{ok:!0,value:{entries:e.value}}:e},async getMasked(e){let t=await s(`getMasked`);if(!t.ok)return t;let n=t.value.find(t=>t.name===e.name);return n?{ok:!0,value:n}:i(`secrets`,`getMasked`,`no secret named "${e.name}"`)},set:c,delete:f},signRequest:h,requestApproval:e=>o(`approvals`,`request`,()=>a.requestApproval(e))}}function c(e){return new Promise((t,n)=>{chrome.runtime.sendMessage(e,e=>{let r=chrome.runtime.lastError;r?n(Error(r.message??`chrome.runtime.lastError`)):t(e)})})}async function l(e,t){if(e)return c(t);let{callSecretsBridge:n}=await import(`./secrets-bridge-client-B1taU1mB.js`).then(e=>e.n),{type:r,...i}=t;return n(r,i)}async function u(e,t,n){if(e)return await r(c({type:t,envelope:n}),12e4);let{callMountBridge:i}=await import(`./mount-bridge-client-HmmY0hET.js`);return i(t,n)}async function d(e,t){let{collectViaExtensionDelegate:n,collectViaExtensionPort:r,REQUEST_BODY_CAP:i}=await import(`./proxied-fetch-C-cyGbiR.js`).then(e=>e.i),a=o(t);if(a!==void 0&&a.byteLength>i)throw Error(`request body is ${a.byteLength} bytes, over the ${i}-byte proxy limit`);let{head:s,body:c}=await(e?r:n)(t.url,{method:t.method??`GET`,headers:t.headers,...a===void 0?{}:{body:a}});return{status:s.status,statusText:s.statusText,headers:s.headers,bytes:new Uint8Array(c)}}function f(e,t){return t?new Promise((n,r)=>{if(t.aborted){r(Error(`approval relay cancelled before it was sent`));return}let i=()=>r(Error(`approval relay did not answer`));t.addEventListener(`abort`,i,{once:!0}),e.then(n,r).finally(()=>t.removeEventListener(`abort`,i))}):e}async function p(e,t){let r=t.suggestedPattern??t.detail,i={kind:t.kind,detail:t.detail,suggestedPattern:r,...t.requester?{requester:t.requester}:{},...t.approver?{approver:t.approver}:{}};if(e){let e=await f(c({source:`offscreen`,payload:{type:n,request:i}}),t.signal);if(!e?.ok||e.decision===void 0)throw Error(e?.error??`sudo relay returned no decision`);return a(e.decision,r)}let{getPanelRpcClient:o}=await import(`./panel-rpc-BPwAqRch.js`).then(e=>e.i),s=o();if(!s)throw Error(`panel-RPC client unavailable in this realm`);let{decision:l}=await f(s.call(`sudo-request`,{request:i},{timeoutMs:6e5}),t.signal);return a(l,r)}export{s as createExtensionOps};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./logger-DDBAeTLF.js";import{t}from"./proxied-fetch-DC4o4pmp.js";import{t as n}from"./navigation-watcher-CUyfUWfd.js";import{t as r}from"./discovery-preference-rzSxl6g3.js";var i=e(`follower-navigate-watcher`);function a(e){let n=t();return{onDiscovery:t=>{let n=e();if(!n){i.warn(`discovery lick dropped — no follower sync connected`,{url:t.url});return}n.forwardLick({type:`discovery`,targetScoop:void 0,timestamp:new Date().toISOString(),discoveryOrigin:t.origin,discoveryKind:t.kind,discoveryUrl:t.url,discoverySource:`live-navigation`,body:{origin:t.origin,kind:t.kind,url:t.url,targetId:t.targetId}})},probeFetch:async(e,t)=>{let r=n(e,{method:t?.method??`GET`}),i=t?.signal,a=i?await Promise.race([r,new Promise((e,t)=>{if(i.aborted){t(Error(`aborted`));return}i.addEventListener(`abort`,()=>t(Error(`aborted`)),{once:!0})})]):await r,o=a.headers;return{ok:a.status>=200&&a.status<300,status:a.status,headers:{get(e){return o?o[e.toLowerCase()]??o[e]??null:null}}}},isDiscoveryEnabled:()=>r()}}function o(e,t){let r=new n(e,e=>{let n={url:e.url,verb:e.verb,target:e.target};e.instruction!=null&&(n.instruction=e.instruction),e.branch!=null&&(n.branch=e.branch),e.path!=null&&(n.path=e.path),e.title!=null&&(n.title=e.title);let r=t();if(!r){i.warn(`navigate lick dropped — no follower sync connected`,{url:e.url});return}r.forwardLick({type:`navigate`,navigateUrl:e.url,targetScoop:void 0,timestamp:new Date().toISOString(),body:n})},a(t));return r.start(),()=>void r.stop()}export{o as startFollowerNavigateWatcher};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./logger-DDBAeTLF.js";import{t}from"./float-topology-B1E_mH1v.js";var n=`sudo-request`,r=`/api/sudo-approve`,i=e(`sudo-panel`),a=typeof globalThis.confirm==`function`?globalThis.confirm.bind(globalThis):void 0,o=typeof globalThis.prompt==`function`?globalThis.prompt.bind(globalThis):void 0;function s(e,t={}){let n=t.confirm??a,r=t.prompt??o;if(!n)return i.warn(`no native confirm available in this realm — denying`),{decision:`deny`};let s=e.requester?`Requested by: ${e.requester}\n\n`:``;if(!n(`Approve ${e.kind}:\n\n${s}${e.detail}\n\nOK = allow · Cancel = deny`))return{decision:`deny`};let c=e.suggestedPattern?.trim()||e.detail.trim();if(!n(`Always allow actions matching:\n\n${c}\n\nOK = always · Cancel = just this once`))return{decision:`allow`};let l=r?.(`Edit the "Always" allow pattern:`,c);return{decision:`always`,pattern:l&&l.trim().length>0?l.trim():c}}function c(e={}){let t=globalThis.chrome?.runtime?.onMessage;return!t||typeof t.addListener!=`function`?!1:(t.addListener((t,n,r)=>{if(!l(t))return;let a=t.payload.request;try{r({ok:!0,decision:s(a,e)})}catch(e){i.warn(`panel responder threw — denying`,{error:e instanceof Error?e.message:String(e)}),r({ok:!1,decision:{decision:`deny`},error:`panel responder error`})}return!1}),!0)}function l(e){if(!e||typeof e!=`object`)return!1;let t=e;if(t.source!==`offscreen`)return!1;let n=t.payload;if(!n||n.type!==`sudo-request`)return!1;let r=n.request;return!!r&&typeof r.kind==`string`&&typeof r.detail==`string`}var u=e(`sudo:page`),d=null;function f(e){d=e}async function p(e){let t=d;if(!t)return null;let n=!1;try{n=t.shouldDelegate()}catch(e){u.warn(`tray delegate probe threw — treating as not delegable`,{error:e instanceof Error?e.message:String(e)})}if(!n)return null;try{return{decision:await t.requestApproval(e),handled:!0}}catch(e){return u.warn(`tray-delegated sudo approval threw — denying`,{error:e instanceof Error?e.message:String(e)}),{decision:{decision:`deny`},handled:!0}}}async function m(e,t){try{return{decision:t(e),handled:!0}}catch(e){return u.warn(`in-page sudo prompt threw — denying`,{error:e instanceof Error?e.message:String(e)}),{decision:{decision:`deny`},handled:!0}}}async function h(e,n=`resolve`,r={}){let i=await p(e);if(i)return i;let a=r.hasLocalNodeServer??t;return n===`tray-first`&&a()?{decision:{decision:`deny`},handled:!1}:m(e,r.nativeResolve??s)}export{n as i,s as n,r,h as resolveSudoApprovalInPage,f as setSudoTrayDelegate,c as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./store-UM5Ipvg3.js";export{e as readMcpAuthEntries};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/panel-rpc-B3MSVImO.js","assets/rolldown-runtime-Dd_uD5pT.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./preload-helper-Czpn1I53.js";import{r as n,t as r}from"./base64-DJRlyqZu.js";import"./src-CAWTvdAa.js";import{t as i}from"./fetch-body-D2PwksUW.js";import{a,i as o,n as s,r as c,t as l}from"./api-endpoint-CWeRbcY3.js";function u(e){if(!e)return!1;let t=e.toLowerCase();return t.startsWith(`text/`)||t.includes(`json`)||t.includes(`xml`)||t.includes(`javascript`)||t.includes(`ecmascript`)||t.includes(`html`)||t.includes(`css`)||t.includes(`svg`)}var d=new Map,f=new Map;function p(e,t){d.set(e,t),setTimeout(()=>d.delete(e),1e4)}function m(e,t){f.set(e,t),setTimeout(()=>f.delete(e),1e4)}function h(e){return e.headers.get(`x-proxy-error`)===`1`}async function g(e){let t=`Proxy error ${e.status}`,n;try{n=await e.text()}catch{return t}return _(n,t)}function _(e,t){let n;try{n=JSON.parse(e)}catch{return t}if(!n||typeof n!=`object`)return t;let r=n.error;if(typeof r==`string`&&r.length>0)return r;if(r&&typeof r==`object`){let e=r.message;if(typeof e==`string`&&e.length>0)return e;try{return JSON.stringify(r)}catch{return t}}return t}function v(e){if(!e)return{};let t={};for(let[n,r]of Object.entries(e)){let e=n.toLowerCase();e===`cookie`?t[`X-Proxy-Cookie`]=r:e===`origin`?t[`X-Proxy-Origin`]=r:e===`referer`?t[`X-Proxy-Referer`]=r:e.startsWith(`proxy-`)?t[`X-Proxy-${n}`]=r:t[n]=r}return t}function y(e){let t={};for(let[n,r]of Object.entries(e))n.toLowerCase()===`x-proxy-set-cookie`?t[`set-cookie`]=r:t[n]=r;return t}function b(e){if(e){if(e instanceof Headers){let t={};return e.forEach((e,n)=>{t[n]=e}),t}return e}}var x=e({BINARY_CACHE_BODY_CAP:()=>w,PROXY_CONTENT_LENGTH_HEADER:()=>M,REQUEST_BODY_CAP:()=>S,collectViaExtensionDelegate:()=>G,collectViaExtensionPort:()=>U,createProxiedFetch:()=>K,decodeForbiddenResponseHeaders:()=>L,encodeForbiddenRequestHeaders:()=>I,getLocalApiBaseUrl:()=>o,headersToRecord:()=>j,isTextContentType:()=>u,prepareRequestBody:()=>F,readResponseBody:()=>O,responseTooLargeError:()=>T}),S=33554432,C=536870912,w=33554432;function T(e,t){let n=Math.round(C/1048576),r=t===void 0?``:` (${t} bytes)`;return Error(`proxied-fetch: response body for ${e} exceeds the ${n} MiB download limit${r}; download it in ranges (curl -r) or from a native float`)}var E=new Set([101,103,204,205,304]);function D(){return a(`/api/fetch-proxy`)}async function O(e,t,n,r){let i=e.headers.get(`content-type`)??``,a=r??N(e.headers);if(a!==void 0&&a>C)throw await e.body?.cancel().catch(()=>void 0),T(t??e.url,a);let o=await A(e,t??e.url,n,a);return k(o,i,t),o}function k(e,t,n){if(u(t)||e.byteLength>33554432)return;if(n){m(n,e);return}let r=``;for(let t=0;t<e.length;t+=32768)r+=String.fromCharCode(...e.subarray(t,t+32768));p(r,e)}async function A(e,t,n,r){if(!e.body)return new Uint8Array(await e.arrayBuffer());let i=e.body.getReader(),a=r!==void 0&&r>0?new Uint8Array(r):null,o=[],s=0;for(;;){let{done:e,value:r}=await i.read();if(e)break;let c=r;if(a?s+c.byteLength<=a.byteLength?a.set(c,s):(o.push(a.subarray(0,s),c),a=null):o.push(c),s+=c.byteLength,s>C)throw await i.cancel().catch(()=>void 0),T(t,void 0);n?.(s)}return a?s===a.byteLength?a:a.slice(0,s):z(o)}var j=b,M=`x-proxy-content-length`;function N(e){let t=t=>e instanceof Headers?e.get(t):Object.entries(e).find(([e])=>e.toLowerCase()===t)?.[1]??null,n=t(`x-proxy-content-length`)??t(`content-length`);if(n==null||!/^\d+$/.test(n))return;let r=Number(n);return Number.isSafeInteger(r)&&r>=0?r:void 0}async function P(e,t,n){if(!e)return n();try{return await n()}finally{e.end(t)}}function F(e,t){if(e==null||e===``)return;if(typeof e!=`string`)return new Blob([e]);let n=Object.entries(t??{}).find(([e])=>e.toLowerCase()===`content-type`)?.[1]??``;if(n&&!u(n)){let t=i(e);return new Blob([t])}return e}var I=v,L=y,R=r;function z(e){let t=e.reduce((e,t)=>e+t.length,0),n=new Uint8Array(t),r=0;for(let t of e)n.set(t,r),r+=t.length;return n}function B(e,t,n){let r=new Headers;for(let[t,n]of Object.entries(e.headers))r.set(t,String(n));let i=E.has(e.status)?new Uint8Array:t;return k(i,r.get(`content-type`)??``,n),{status:e.status,statusText:e.statusText,headers:L(e.headers),body:i,url:n}}async function V(e){let t=j(e?.headers),r=e?.method??`GET`,i=e?.body?F(e.body,t):void 0,a=I(t),o,s=!1;if(i!==void 0){let e=i instanceof Uint8Array?i:new Uint8Array(await new Response(i).arrayBuffer());e.byteLength>33554432?s=!0:o=n(e)}return{method:r,transportHeaders:a,bodyBase64:o,requestBodyTooLarge:s}}async function H(e,t,n,r){let{method:i,transportHeaders:a,bodyBase64:o,requestBodyTooLarge:s}=await V(n),c=e();return new Promise((e,n)=>{let l=null,u=!1,d=0,f,p=[],m=e=>{u=!0,p.length=0,n(e),c.disconnect()},h=e=>{if(l={status:e.status,statusText:e.statusText,headers:e.headers},f=N(e.headers),f!==void 0&&f>C){m(T(t,f));return}r?.start(t,f)},g=e=>{if(u)return;let n=R(e.dataBase64);if(d+=n.byteLength,d>C){m(T(t,void 0));return}p.push(n),r?.chunk(t,d,f)},_=()=>{if(!u){if(u=!0,!l){n(Error(`fetch-proxy: response-end before response-head`));return}e({head:l,body:z(p).buffer}),c.disconnect()}};c.onMessage.addListener(e=>{let t=e;t.type===`response-head`?h(t):t.type===`response-chunk`?g(t):t.type===`response-end`?_():t.type===`response-error`&&m(Error(t.error))}),c.onDisconnect.addListener(()=>{u||n(Error(l?`fetch-proxy port disconnected mid-stream`:`fetch-proxy port disconnected before response`))}),c.postMessage({type:`request`,url:t,method:i,headers:a,bodyBase64:o,requestBodyTooLarge:s})})}function U(e,t,n){return H(()=>chrome.runtime.connect({name:`fetch-proxy.fetch`}),e,t,n)}async function W(e,t,n){let{head:r,body:i}=await P(n,e,()=>U(e,t,n));return B(r,new Uint8Array(i),e)}async function G(e,t,n){let r=c();if(!r)throw Error(`proxied-fetch: no extension delegate id configured`);let i=chrome.runtime.connect;return H(()=>i(r,{name:`fetch-proxy.fetch`}),e,t,n)}function K(e={}){let n=e.progress;return s()?(e,t)=>W(e,t,n):typeof chrome<`u`&&typeof chrome?.runtime?.connect==`function`&&c()?async(e,t)=>{let{head:r,body:i}=await P(n,e,()=>G(e,t,n));return B(r,new Uint8Array(i),e)}:typeof chrome>`u`&&c()?async(e,r)=>{let{getPanelRpcClient:i}=await t(async()=>{let{getPanelRpcClient:e}=await import(`./panel-rpc-B3MSVImO.js`).then(e=>e.i);return{getPanelRpcClient:e}},__vite__mapDeps([0,1])),a=i();if(!a)throw Error(`proxied-fetch: panel-RPC client unavailable in worker realm`);let o=r?.method??`GET`,s=j(r?.headers)??{};n?.start(e,void 0);let{head:c,body:l}=await P(n,e,()=>a.call(`proxied-fetch`,{url:e,method:o,headers:s,body:r?.body},{timeoutMs:12e4}));return B(c,new Uint8Array(l),e)}:async(e,t)=>{let r=t?.method??`GET`,i=I(j(t?.headers)),a=l({...i,"X-Target-URL":e}),o={method:r,headers:a,cache:`no-store`};if(t?.body&&![`GET`,`HEAD`].includes(r)){let e=F(t.body,a);e instanceof Blob&&(a[`X-Slicc-Raw-Body`]=`1`),o.body=e}return P(n,e,async()=>{let t=await fetch(D(),o);if(h(t))throw Error(await g(t));let r=N(t.headers);n?.start(e,r);let i=await O(t,e,n?t=>n.chunk(e,t,r):void 0,r),a={};t.headers.forEach((e,t)=>{a[t]=e});let s=L(a);return{status:t.status,statusText:t.statusText,headers:s,body:i,url:e}})}}export{g as i,x as n,h as r,K as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./base64-DzRgusa4.js";import"./src-CcFD5QfS.js";import{t}from"./content-type-_QKWY0B2.js";import{r as n}from"./fetch-body-COdvQyTD.js";function r(e,t){if(!e||typeof e!=`object`)return{decision:`deny`};let n=e.decision;if(n===`allow`)return{decision:`allow`};if(n===`always`){let n=e.pattern;return{decision:`always`,pattern:typeof n==`string`&&n.trim().length>0?n.trim():t}}return{decision:`deny`}}const i=new Set([`GET`,`HEAD`]);function a(r){let a=(r.method??`GET`).toUpperCase();if(r.body===void 0||i.has(a))return;if(r.bodyEncoding===`base64`)return e(r.body);let o=Object.entries(r.headers??{}).find(([e])=>e.toLowerCase()===`content-type`)?.[1]??``;return o&&!t(o)?n(r.body):new TextEncoder().encode(r.body)}export{r as n,a as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./base64-DzRgusa4.js";import"./src-CcFD5QfS.js";import{t}from"./content-type-_QKWY0B2.js";import{a as n,o as r,r as i,t as a}from"./proxied-fetch-C-cyGbiR.js";import{a as o,t as s}from"./api-endpoint-IY1FgPuM.js";import{c,s as l}from"./types-Db38aZfh.js";import{n as u,t as d}from"./rest-paths-Dia19u9P.js";import{n as f,t as p}from"./request-body-DJomJP6T.js";const m=u;function h(e){return e instanceof Error&&(e.name===`AbortError`||e.name===`TimeoutError`)}function g(e,t,n){if(n)return t;let r=AbortSignal.timeout(e);return t&&typeof AbortSignal.any==`function`?AbortSignal.any([r,t]):r}function _(e){let t=e.fetchImpl??((...e)=>globalThis.fetch(...e)),n=e.resolveUrl??o,r=e.headers??s,i=e.controlTimeoutMs??m;async function a(e,r){try{return await t(n(e),r)}catch(e){return e instanceof Error?e:Error(String(e))}}return{headers:r,send:a,async callJson(e,t,n,o){let s=o?.timeoutMs??i,c=g(s,o?.signal,o?.humanPaced===!0),l={method:e,headers:r({"Content-Type":`application/json`}),...c?{signal:c}:{}};n!==void 0&&(l.body=JSON.stringify(n));let u=await a(t,l);if(u instanceof Error)return{status:0,ok:!1,body:{error:h(u)?`no answer within ${s}ms`:u.message}};let d=await u.json().catch(()=>void 0);return{status:u.status,ok:u.ok,body:d}}}}function v(e,t){let n=e.body?.error;return typeof n==`string`&&n.length>0?n:e.status===0?`${t} (transport unreachable)`:`${t} (HTTP ${e.status})`}function y(e){return e.status===0?void 0:e.status}function b(e,t,n,r){return l(e,t,v(n,r),y(n))}async function x(e,t){let n=await e.callJson(`GET`,d.secretsMasked);return n.ok?Array.isArray(n.body)?{ok:!0,value:n.body}:l(`secrets`,t,`masked secrets response is not an array`):b(`secrets`,t,n,`masked secrets request failed`)}function S(e){return{async listMaskedEnv(){let t=await x(e,`listMaskedEnv`);return t.ok?{ok:!0,value:{entries:t.value}}:t},async getMasked(t){let n=await x(e,`getMasked`);if(!n.ok)return n;let r=n.value.find(e=>e.name===t.name);return r?{ok:!0,value:r}:l(`secrets`,`getMasked`,`no secret named "${t.name}"`,404)},async set(t){let n=t.scope===`persisted`,r=n?d.secretsPersisted:d.secretsSession,i=await e.callJson(`POST`,r,{name:t.name,value:t.value,domains:[...t.domains??[]]});return n&&i.status===404?c(`secrets`,`set`,`this server has no persisted-secret write route (see issue #2806); retry with scope: 'session'`):i.ok?{ok:!0,value:void 0}:b(`secrets`,`set`,i,`set secret failed`)},async delete(t){let n=await e.callJson(`DELETE`,`${d.secretsPersisted}/${encodeURIComponent(t.name)}`);if(!n.ok)return b(`secrets`,`delete`,n,`delete secret failed`);let r=n.body;return{ok:!0,value:{removed:r?.removed??!0,fromSession:r?.fromSession===!0}}}}}async function C(o,s){let c={method:s.method??`GET`,headers:o.headers({...r(s.headers),"X-Target-URL":s.url}),cache:`no-store`};s.signal&&(c.signal=s.signal);let u=p(s);if(u!==void 0){if(u.byteLength>33554432)return l(`network`,`crossOriginFetch`,`request body is ${u.byteLength} bytes, over the ${a}-byte proxy limit`);c.body=u}let f=await o.send(d.fetchProxy,c);if(f instanceof Error)return l(`network`,`crossOriginFetch`,h(f)?`request cancelled`:f.message);if(f.headers.get(`x-proxy-error`)===`1`){let e=await f.text().catch(()=>``);return l(`network`,`crossOriginFetch`,e||`fetch-proxy reported an error`,f.status)}let m=i(),g=Number(f.headers.get(`content-length`)??``);if(Number.isFinite(g)&&g>m)return l(`network`,`crossOriginFetch`,`response body is ${g} bytes, over the ${m}-byte download limit`,f.status);let _;try{_=new Uint8Array(await f.arrayBuffer())}catch(e){return l(`network`,`crossOriginFetch`,h(e)?`response body cancelled`:`response body failed: ${e instanceof Error?e.message:String(e)}`,f.status)}if(_.byteLength>m)return l(`network`,`crossOriginFetch`,`response body is ${_.byteLength} bytes, over the ${m}-byte download limit`,f.status);let v={};f.headers.forEach((e,t)=>{v[t]=e});let y=n(v),b=t(y[`content-type`]??``);return{ok:!0,value:{status:f.status,ok:f.ok,statusText:f.statusText,headers:y,body:b?new TextDecoder().decode(_):e(_),bodyEncoding:b?`text`:`base64`,url:s.url}}}async function w(e,t){let n=t.backend===`s3`?d.s3SignAndForward:d.daSignAndForward,r=await e.callJson(`POST`,n,t.envelope,{timeoutMs:12e4}),i=r.body;return i&&typeof i==`object`&&typeof i.ok==`boolean`?{ok:!0,value:i}:b(`mounts`,`signRequest`,r,`sign-and-forward response is not an envelope`)}async function T(e,t){let n=t.suggestedPattern??t.detail,r=await e.callJson(`POST`,d.sudoApprove,{kind:t.kind,detail:t.detail,suggestedPattern:n,...t.requester?{requester:t.requester}:{},...t.approver?{approver:t.approver}:{}},{humanPaced:!0,...t.signal?{signal:t.signal}:{}});return r.ok?{ok:!0,value:f(r.body,n)}:b(`approvals`,`request`,r,`approval endpoint returned non-OK`)}function E(e){let t=_(e);return{crossOriginFetch:e=>C(t,e),secrets:S(t),signRequest:e=>w(t,e),requestApproval:e=>T(t,e)}}export{E as createRestOps};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./float-topology-B1E_mH1v.js";
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/sudo-CteiAvdB.js","assets/preload-helper-Czpn1I53.js","assets/logger-DDBAeTLF.js","assets/proxied-fetch-DC4o4pmp.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/base64-DJRlyqZu.js","assets/src-CAWTvdAa.js","assets/fetch-body-D2PwksUW.js","assets/api-endpoint-CWeRbcY3.js","assets/runtime-env-Dlaokqg1.js","assets/runtime-env-CgsZ7LTp.js","assets/runtime-env-E-i2SW1s.js","assets/quick-llm-u8uic8QB.js","assets/account-store-QAWTf9es.js","assets/claude-model-version-BJLrDjmH.js","assets/models-BSkXF4T6.js","assets/diagnostics-DN_idNHx.js","assets/provider-env-CTOcDKrQ.js","assets/__vite-browser-external-5eBdwsFd.js","assets/openrouter.models-B-zmcypy.js","assets/libesm-BypnjKEL.js","assets/float-topology-B1E_mH1v.js","assets/secret-topology-CVgFEYzE.js","assets/secrets-bridge-client-BCv_YZhX.js","assets/port-bridge-client-CVZpTSrA.js","assets/image-markers-CxJ9ZBgw.js","assets/tool-ui-eSQ1g2I1.js","assets/providers-CMdt7NIp.js","assets/panel-rpc-B3MSVImO.js","assets/bedrock-camp-compat-CgBMwna8.js","assets/llm-session-id-bZQs6gBN.js","assets/icons-BJsliYCh.js","assets/page-approval-service-BVBSKskj.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./preload-helper-Czpn1I53.js";var n=e({setupSudoExtension:()=>i,setupSudoStandalone:()=>r});async function r(e){let{installSudoTestHook:n}=await t(async()=>{let{installSudoTestHook:e}=await import(`./sudo-CteiAvdB.js`);return{installSudoTestHook:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32]));n()}async function i(e){let{installPanelSudoResponder:n}=await t(async()=>{let{installPanelSudoResponder:e}=await import(`./sudo-CteiAvdB.js`);return{installPanelSudoResponder:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32]));n()}export{n,r as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
function e(){return{version:`6.128.2`,releasedAt:`2026-09-04T01:55:31Z`,buildId:`6.128.2-mtmaxy04`}}let t=null;function n(e){t=e}function r(){return t}export{e as n,n as r,r as t};
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/panel-rpc-B3MSVImO.js","assets/rolldown-runtime-Dd_uD5pT.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{t as e}from"./preload-helper-Czpn1I53.js";import{t}from"./logger-DDBAeTLF.js";import"./proxied-fetch-DC4o4pmp.js";import{n}from"./runtime-env-Dlaokqg1.js";import{a as r,r as i,t as a}from"./api-endpoint-CWeRbcY3.js";import"./runtime-env-CgsZ7LTp.js";import{t as o}from"./quick-llm-u8uic8QB.js";import{i as s,t as c}from"./page-approval-service-BVBSKskj.js";var l=t(`sudo:timeout`);function u(e=`user-timeout`){return{decision:`deny`,reason:e}}function d(e,t={}){let n=t.timeoutMs??3e5;if(!Number.isFinite(n)||n<=0)return e;let r=t.setTimer??((e,t)=>setTimeout(e,t)),i=t.clearTimer??(e=>clearTimeout(e));return{requestApproval(t,a){return new Promise(o=>{let s=new AbortController,c=()=>s.abort();a?.signal?.addEventListener(`abort`,c,{once:!0});let d=!1,f=e=>{d=!0,a?.signal?.removeEventListener(`abort`,c),o(e)},p=r(()=>{d||(l.warn(`sudo approval timed out — failing closed`,{kind:t.kind,detail:t.detail,timeoutMs:n}),s.abort(),f(u(`user-timeout`)))},n),m=e=>{if(d){l.warn(`sudo decision arrived after timeout — discarded`,{kind:t.kind,detail:t.detail,decision:e.decision});return}i(p),f(e)};e.requestApproval(t,{signal:s.signal}).then(m,e=>{l.warn(`sudo broker threw — denying`,{error:e instanceof Error?e.message:String(e)}),m({decision:`deny`})})})}}}var f=t(`sudo-suggest`),p=[`You generalize a single shell command into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the leading command/sub-command verbatim and replace only`,`the volatile tail (args, paths, refs) with a single trailing "*".`,`Examples:`,` git push origin main -> git push*`,` rm -rf build/cache -> rm -rf*`,` npm install left-pad -> npm install*`].join(`
|
|
3
|
-
`),m=[`You generalize a single filesystem path into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the meaningful directory prefix and replace the volatile`,`leaf (and below) with "**". Examples:`,` /workspace/.git/config -> /workspace/.git/**`,` /shared/secrets/openai.key -> /shared/secrets/**`,` /workspace/src/app/main.ts -> /workspace/src/**`].join(`
|
|
4
|
-
`);async function h(e,t){if(e.suggestedPattern&&e.suggestedPattern.trim().length>0)return e.suggestedPattern.trim();let n=e.detail.trim(),r=e.kind===`command`?p:m,i=null;try{i=await o({prompt:n,system:r,maxTokens:40,temperature:0,signal:t})}catch(e){f.debug(`suggestPattern: quickLabel threw`,{error:e instanceof Error?e.message:String(e)}),i=null}return g(i)||n}function g(e){if(!e)return null;let t=(e.split(`
|
|
5
|
-
`,1)[0]?.trim()??``).replace(/^`+/,``).replace(/`+$/,``).replace(/^["']/,``).replace(/["']$/,``).trim();return t.length===0?null:t}var _=t(`sudo-ext`);function v(e={}){let t=e.suggest??h;return{async requestApproval(e,n){let r=n?.signal,i;try{i=await t(e,r)}catch{i=e.detail}return r?.aborted?(_.warn(`sudo approval aborted before prompting — denying`,{detail:e.detail}),{decision:`deny`}):y({...e,suggestedPattern:i})}}}function y(e){return new Promise(t=>{let n=globalThis.chrome?.runtime;if(!n||typeof n.sendMessage!=`function`){_.warn(`chrome.runtime.sendMessage unavailable — denying`),t({decision:`deny`});return}let r=r=>{let i=n.lastError;if(i){_.warn(`sudo relay lastError — denying`,{error:i.message}),t({decision:`deny`});return}if(!r||typeof r!=`object`){_.warn(`sudo relay empty response — denying`),t({decision:`deny`});return}let a=r;if(!a.ok||!a.decision){_.warn(`sudo relay error response — denying`,{error:a.error}),t({decision:`deny`});return}t(b(a.decision,e.suggestedPattern??e.detail))};try{n.sendMessage({source:`offscreen`,payload:{type:s,request:e}},r)}catch(e){_.warn(`sudo relay threw — denying`,{error:e instanceof Error?e.message:String(e)}),t({decision:`deny`})}})}function b(e,t){return e.decision===`allow`?{decision:`allow`}:e.decision===`always`?{decision:`always`,pattern:typeof e.pattern==`string`&&e.pattern.trim().length>0?e.pattern.trim():t}:{decision:`deny`}}var x=t(`sudo-http`);function S(e={}){let t=e.fetchImpl??globalThis.fetch.bind(globalThis),n=e.path??`/api/sudo-approve`,i=e.suggest??h;return{async requestApproval(e,o){let s=o?.signal,c;if(e.suggestedPattern)c=e.suggestedPattern;else try{c=await i(e,s)}catch{c=e.detail}if(s?.aborted)return x.warn(`sudo approval aborted before prompting — denying`,{detail:e.detail}),{decision:`deny`};try{let i=await t(r(n),{method:`POST`,headers:a({"Content-Type":`application/json`}),body:JSON.stringify({kind:e.kind,detail:e.detail,suggestedPattern:c,...e.requester?{requester:e.requester}:{}}),signal:s});return i.ok?C(await i.json(),c):(x.warn(`sudo endpoint returned non-OK status — denying`,{status:i.status}),{decision:`deny`})}catch(e){return x.warn(`sudo endpoint request failed — denying`,{error:e instanceof Error?e.message:String(e)}),{decision:`deny`}}}}}function C(e,t){if(!e||typeof e!=`object`)return{decision:`deny`};let n=e.decision;if(n===`allow`)return{decision:`allow`};if(n===`always`){let n=e.pattern;return{decision:`always`,pattern:typeof n==`string`&&n.trim().length>0?n.trim():t}}return{decision:`deny`}}var w=t(`sudo-panel-rpc`),T=6e5;function E(t={}){let n=t.suggest??h,r=t.timeoutMs??T,i=t.getClient??(async()=>{let{getPanelRpcClient:t}=await e(async()=>{let{getPanelRpcClient:e}=await import(`./panel-rpc-B3MSVImO.js`).then(e=>e.i);return{getPanelRpcClient:e}},__vite__mapDeps([0,1]));return t()});return{async requestApproval(e,t){let a=t?.signal,o;try{o=await n(e,a)}catch{o=e.detail}let s={...e,suggestedPattern:o},c;try{c=await i()}catch(e){return w.warn(`panel-RPC client lookup threw — denying`,{error:e instanceof Error?e.message:String(e)}),{decision:`deny`}}if(!c)return w.warn(`panel-RPC client unavailable in worker realm — denying`),{decision:`deny`};if(a?.aborted)return w.warn(`sudo approval aborted before prompting — denying`,{detail:e.detail}),{decision:`deny`};try{let{decision:e}=await c.call(`sudo-request`,{request:s},{timeoutMs:r});return D(e,o)}catch(e){return w.warn(`sudo panel-RPC relay failed — denying`,{error:e instanceof Error?e.message:String(e)}),{decision:`deny`}}}}}function D(e,t){if(!e||typeof e!=`object`)return{decision:`deny`};let n=e.decision;if(n===`allow`)return{decision:`allow`};if(n===`always`){let n=e.pattern;return{decision:`always`,pattern:typeof n==`string`&&n.trim().length>0?n.trim():t}}return{decision:`deny`}}var O=t(`sudo:tray-first`),k=6e5;function A(t,n={}){let r=n.suggest??h,i=n.timeoutMs??k,a=n.getClient??(async()=>{let{getPanelRpcClient:t}=await e(async()=>{let{getPanelRpcClient:e}=await import(`./panel-rpc-B3MSVImO.js`).then(e=>e.i);return{getPanelRpcClient:e}},__vite__mapDeps([0,1]));return t()});return{async requestApproval(e,n){if(n?.signal?.aborted)return{decision:`deny`};let o=e.suggestedPattern;if(!o)try{o=await r(e,n?.signal)}catch{o=e.detail}let s={...e,suggestedPattern:o},c=null;try{c=await a()}catch(e){O.debug?.(`panel-RPC client lookup threw — using native broker`,{error:e instanceof Error?e.message:String(e)})}if(c)try{let e=await c.call(`sudo-request`,{request:s,mode:`tray-first`},{timeoutMs:i});if(e?.handled!==!1)return j(e?.decision,o)}catch(e){O.warn(`tray-first sudo probe failed — using native broker`,{error:e instanceof Error?e.message:String(e)})}return t.requestApproval(s,n)}}}function j(e,t){if(!e||typeof e!=`object`)return{decision:`deny`};let n=e,r=n.attestation===`biometric`||n.attestation===`passcode`||n.attestation===`none`?n.attestation:void 0;return n.decision===`allow`?{decision:`allow`,...r?{attestation:r}:{}}:n.decision===`always`?{decision:`always`,pattern:typeof n.pattern==`string`&&n.pattern.trim().length>0?n.pattern.trim():t,...r?{attestation:r}:{}}:{decision:`deny`}}var M=t(`sudo`),N=`__slicc_sudo`;function P(){return n()}function F(){return typeof chrome>`u`&&i()!==null}function I(){return d(L())}function L(){return P()?v():F()?E():A(S())}function R(e=I()){let t={requestApproval:t=>e.requestApproval(t)};return globalThis[N]=t,M.info(`sudo broker test hook published on globalThis.__slicc_sudo`),t}export{c as installPanelSudoResponder,R as installSudoTestHook};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./logger-DDBAeTLF.js";import{i as n,r}from"./proxied-fetch-DC4o4pmp.js";import{i}from"./tray-runtime-config-D-kNf-DT.js";import{a,n as o,t as s}from"./api-endpoint-CWeRbcY3.js";import{n as c,r as l}from"./db-cKsBsMMN.js";var u={state:`inactive`,session:null,error:null};function d(){return{...u,session:u.session?{...u.session}:null}}var f=new Set;function p(e){return f.add(e),()=>{f.delete(e)}}function m(e){if(u={...e,session:e.session?{...e.session}:null},f.size!==0)for(let e of[...f])try{e(d())}catch{}}var h=class extends Error{constructor(e){super(e),this.name=`TrayProxyFetchError`}};function g(e=fetch){return o()?(t,n)=>e(t,n):async(t,i={})=>{let o=typeof t==`string`?t:t.toString();try{if(new URL(o).origin===window.location.origin)return e(o,{...i,cache:`no-store`})}catch{}let c=new Headers(i.headers);c.set(`X-Target-URL`,o);for(let[e,t]of Object.entries(s()))c.set(e,t);let l=await e(a(`/api/fetch-proxy`),{...i,headers:c,cache:`no-store`});if(r(l))throw new h(await n(l));return l}}var _=e({IndexedDbLeaderTraySessionStore:()=>D,LEADER_STATUS_STORAGE_KEY:()=>LEADER_STATUS_STORAGE_KEY,LeaderTrayManager:()=>k,TrayProxyFetchError:()=>h,createTrayFetch:()=>g,getLeaderTrayRuntimeStatus:()=>d,parseLeaderTraySession:()=>O,setLeaderTrayRuntimeStatus:()=>m}),v=t(`tray-leader`),y=`leader-tray-session`,b=3e4,x=1e4,S=1e3,C=3e4,w=2,T=20,E=1e4,D=class{key;constructor(e=y){this.key=e}async load(){return O(await c(this.key))}async save(e){await l(this.key,JSON.stringify(e))}async clear(){await l(this.key,``)}};function O(e){if(!e)return null;try{let t=JSON.parse(e);return typeof t.workerBaseUrl!=`string`||typeof t.trayId!=`string`||typeof t.createdAt!=`string`||typeof t.controllerId!=`string`||typeof t.controllerUrl!=`string`||typeof t.joinUrl!=`string`||typeof t.webhookUrl!=`string`||typeof t.runtime!=`string`?null:{workerBaseUrl:t.workerBaseUrl,trayId:t.trayId,createdAt:t.createdAt,controllerId:t.controllerId,controllerUrl:t.controllerUrl,joinUrl:t.joinUrl,webhookUrl:t.webhookUrl,leaderKey:typeof t.leaderKey==`string`?t.leaderKey:void 0,leaderWebSocketUrl:typeof t.leaderWebSocketUrl==`string`?t.leaderWebSocketUrl:null,runtime:t.runtime}}catch{return null}}var k=class{options;store;fetchImpl;webSocketFactory;pingIntervalMs;connectTimeoutMs;reconnectEnabled;reconnectBaseDelayMs;reconnectMaxDelayMs;reconnectBackoffMultiplier;reconnectMaxAttempts;reconnectSleep;socket=null;pingTimer=null;currentSession=null;stopped=!1;reconnecting=!1;reconnectGeneration=0;constructor(e){this.options=e,this.store=e.store??new D,this.fetchImpl=e.fetchImpl??g(),this.webSocketFactory=e.webSocketFactory??(e=>new WebSocket(e)),this.pingIntervalMs=e.pingIntervalMs??b,this.connectTimeoutMs=e.connectTimeoutMs??x;let t=e.reconnect;this.reconnectEnabled=t!==!1;let n=t===!1||!t?{}:t;this.reconnectBaseDelayMs=n.baseDelayMs??S,this.reconnectMaxDelayMs=n.maxDelayMs??C,this.reconnectBackoffMultiplier=n.backoffMultiplier??w,this.reconnectMaxAttempts=n.maxAttempts??T,this.reconnectSleep=n.sleep??(e=>new Promise(t=>setTimeout(t,e)))}async start(){if(this.stopped=!1,this.currentSession&&this.socket)return m({state:`leader`,session:this.currentSession,error:null}),this.currentSession;m({state:`connecting`,session:null,error:null}),this.currentSession=null;try{let e=await this.connectOnce();v.info(`Leader joined tray`,{trayId:e.trayId,controllerId:e.controllerId,runtime:e.runtime});try{this.options.onLeaderReady?.(e)}catch(e){v.warn(`onLeaderReady callback threw`,{error:e instanceof Error?e.message:String(e)})}return e}catch(e){throw m({state:`error`,session:this.currentSession,error:e instanceof Error?e.message:String(e)}),e}}stop(){this.stopped=!0,this.reconnecting=!1,this.reconnectGeneration++,this.tearDownSocket(),this.currentSession=null,m({state:`inactive`,session:null,error:null})}tearDownSocket(){this.pingTimer&&=(clearInterval(this.pingTimer),null);let e=this.socket;if(this.socket=null,e)try{e.close()}catch{}}async connectOnce(){let e=await this.store.load(),t=e?.workerBaseUrl===this.options.workerBaseUrl?e:null,n=await this.attachWithRecovery(t);this.currentSession=n;let r=await this.openLeaderSocket(n.leaderWebSocketUrl);return this.socket=r,this.startPingLoop(r),m({state:`leader`,session:n,error:null}),n}async handleUnexpectedDisconnect(e){if(this.stopped)return;if(!this.reconnectEnabled){v.warn(`Leader WebSocket dropped and auto-reconnect is disabled`,{reason:e}),this.tearDownSocket(),this.currentSession=null,m({state:`error`,session:null,error:`Leader WebSocket dropped: ${e}`});return}if(this.reconnecting)return;this.reconnecting=!0;let t=++this.reconnectGeneration;v.warn(`Leader WebSocket dropped — starting reconnect loop`,{reason:e}),this.tearDownSocket();let n=0,r=this.reconnectBaseDelayMs,i=e;for(;!this.stopped&&t===this.reconnectGeneration&&n<this.reconnectMaxAttempts&&(n++,m({state:`reconnecting`,session:this.currentSession,error:null,reconnectAttempts:n}),this.options.onReconnecting?.(n,i),v.info(`Leader reconnect attempt`,{attempt:n,delay:r}),await this.reconnectSleep(r),!(this.stopped||t!==this.reconnectGeneration));){try{let e=await this.connectOnce();if(this.stopped||t!==this.reconnectGeneration){this.tearDownSocket();break}this.reconnecting=!1,v.info(`Leader reconnect successful`,{attempt:n,trayId:e.trayId}),this.options.onReconnected?.(e);try{this.options.onLeaderReady?.(e)}catch(e){v.warn(`onLeaderReady callback threw`,{error:e instanceof Error?e.message:String(e)})}return}catch(e){i=e instanceof Error?e.message:String(e),v.warn(`Leader reconnect attempt failed`,{attempt:n,error:i}),this.tearDownSocket()}r=Math.min(r*this.reconnectBackoffMultiplier,this.reconnectMaxDelayMs)}!this.stopped&&t===this.reconnectGeneration&&(this.reconnecting=!1,this.currentSession=null,m({state:`error`,session:null,error:`Leader reconnect failed after ${n} attempts: ${i}`,reconnectAttempts:n}),v.warn(`Leader reconnect gave up`,{attempts:n,lastError:i}),this.options.onReconnectGaveUp?.(i,n))}async clearSession(){await this.store.clear()}sendControlMessage(e){if(!this.socket)throw Error(`Tray leader WebSocket is not connected`);this.socket.send(JSON.stringify(e))}async attachWithRecovery(e){try{return await this.claimLeaderSession(e)}catch(t){if(!e||!j(t))throw t;v.warn(`Stored tray session is stale, creating a fresh tray`,{trayId:e.trayId,error:t instanceof Error?t.message:String(t)}),await this.store.clear();let n=await this.claimLeaderSession(null);return this.notifyTraySuperseded(e,n.joinUrl,n.webhookUrl),n}}async notifyTraySuperseded(e,t,n){try{let r=new URL(e.controllerUrl).pathname.split(`/`).pop();if(!r)return;let a=i(e.workerBaseUrl,`api/tray/${e.trayId}/supersede`);await this.fetchImpl(a,{method:`POST`,headers:{"content-type":`application/json`,authorization:`Bearer ${r}`},body:JSON.stringify({joinUrl:t,...n?{webhookUrl:n}:{}}),signal:AbortSignal.timeout(E)})}catch(t){v.warn(`Failed to notify old tray of supersession (best-effort)`,{oldTrayId:e.trayId,error:t instanceof Error?t.message:String(t)})}}async claimLeaderSession(e){let t=e??await this.createTraySession(),n=await this.fetchJson(t.controllerUrl,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({controllerId:t.controllerId,leaderKey:t.leaderKey,runtime:this.options.runtime})});if(n.role!==`leader`||!n.leaderKey||!n.websocket?.url)throw Error(`Tray attach did not return leader access for controller ${n.controllerId}`);let r={...t,trayId:n.trayId,controllerId:n.controllerId,leaderKey:n.leaderKey,leaderWebSocketUrl:n.websocket.url,runtime:this.options.runtime};return await this.store.save(r),r}async createTraySession(){let e=this.options.kind?JSON.stringify({kind:this.options.kind}):void 0,t=await this.fetchJson(i(this.options.workerBaseUrl,`tray`),{method:`POST`,...e?{headers:{"content-type":`application/json`}}:{},...e?{body:e}:{}});return{workerBaseUrl:this.options.workerBaseUrl,trayId:t.trayId,createdAt:t.createdAt,controllerId:crypto.randomUUID(),controllerUrl:t.capabilities.controller.url,joinUrl:t.capabilities.join.url,webhookUrl:t.capabilities.webhook.url,runtime:this.options.runtime}}async openLeaderSocket(e){return await new Promise((t,n)=>{let r=this.webSocketFactory(e),i=!1,a=setTimeout(()=>{o(`Tray leader WebSocket timed out after ${this.connectTimeoutMs}ms waiting for leader.connected`);try{r.close(1e3,`leader.connected timeout`)}catch{}},this.connectTimeoutMs),o=e=>{i||(i=!0,clearTimeout(a),n(Error(e)))};r.addEventListener(`message`,e=>{let n=M(e.data);if(n){if(n.type===`leader.connected`){i||(i=!0,clearTimeout(a),t(r));return}if(n.type===`pong`){v.debug(`Tray leader heartbeat acknowledged`,{trayId:this.currentSession?.trayId});return}this.options.onControlMessage?.(n)}}),r.addEventListener(`close`,()=>o(`Tray leader WebSocket closed before leader.connected`)),r.addEventListener(`error`,()=>o(`Tray leader WebSocket failed before leader.connected`))})}startPingLoop(e){this.pingTimer&&clearInterval(this.pingTimer);let t=t=>{this.stopped||this.socket!==e||this.handleUnexpectedDisconnect(t).catch(e=>{v.warn(`Leader reconnect loop crashed`,{error:e instanceof Error?e.message:String(e)})})},n=()=>{try{e.send(JSON.stringify({type:`ping`}))}catch(e){t(`Leader ping send failed: ${e instanceof Error?e.message:String(e)}`)}};n(),this.pingTimer=setInterval(n,this.pingIntervalMs),e.addEventListener(`close`,()=>t(`Leader WebSocket closed`)),e.addEventListener(`error`,()=>t(`Leader WebSocket errored`))}async fetchJson(e,t){let n=await this.fetchImpl(e,t);if(!n.ok)throw await A.fromResponse(n);return await n.json()}},A=class e extends Error{status;code;constructor(e,t,n){super(n),this.status=e,this.code=t,this.name=`LeaderTrayHttpError`}static async fromResponse(t){try{let n=await t.json();return new e(t.status,n.code??null,n.error??`Tray request failed (${t.status})`)}catch{return new e(t.status,null,`Tray request failed (${t.status})`)}}};function j(e){return e instanceof h?!0:e instanceof A?e.status===403||e.status===404||e.status===410||e.status>=500:!1}function M(e){if(typeof e!=`string`)return null;try{return JSON.parse(e)}catch{return null}}export{p as a,m as i,_ as n,d as r,k as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const e=[`listTargets`,`createTarget`,`navigate`,`screenshot`,`evaluate`],t=[`localNodeServer`,`crossOriginFetch`,`websocket`],n=[`listMaskedEnv`,`getMasked`,`set`,`delete`],r=[`usbRequest`,`serialRequest`,`hidRequest`],i=[`signRequest`,`pickDirectory`,`recover`],a=[`request`,`resolve`];function o(e,t,n){return{ok:!1,reason:`unavailable`,capability:e,operation:t,message:n}}function s(e,t,n,r){return{ok:!1,reason:`failed`,capability:e,operation:t,message:n,...r===void 0?{}:{status:r}}}export{t as a,o as c,i,e as n,n as o,r,s,a as t};
|