sliccy 6.136.0 → 6.136.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ui/.vite/manifest.json +140 -139
- package/dist/ui/assets/{SKILL-CLNwFz3P.js → SKILL-Dkk5iZlJ.js} +1 -1
- package/dist/ui/assets/{account-store-CG9Pz134.js → account-store-BzCpAbzU.js} +1 -1
- package/dist/ui/assets/{account-store-B8IgsGFb.js → account-store-IBc-Swl2.js} +1 -1
- package/dist/ui/assets/{adobe-BgPcRuIn.js → adobe-BlUDEEVT.js} +1 -1
- package/dist/ui/assets/{adobe-DJimoIir.js → adobe-xtVVXp2q.js} +1 -1
- package/dist/ui/assets/{agent-bridge-WC9o6r65.js → agent-bridge-Bgb7xaDh.js} +1 -1
- package/dist/ui/assets/{apply-layout-Dv1RaUFe.js → apply-layout-l78p8Bos.js} +1 -1
- package/dist/ui/assets/{apps-BOBYtKMD.js → apps-DDo9wnih.js} +1 -1
- package/dist/ui/assets/{azure-openai-CSeH1BDL.js → azure-openai-CRb9ZtBO.js} +1 -1
- package/dist/ui/assets/{azure-openai-C1v6YymB.js → azure-openai-zWPF524s.js} +1 -1
- package/dist/ui/assets/{cdp-0LZ0nstT.js → cdp-DKhmYptD.js} +1 -1
- package/dist/ui/assets/{cerebras-BUohc5O0.js → cerebras-COu_QlOd.js} +1 -1
- package/dist/ui/assets/{cerebras-C4a_X7D8.js → cerebras-DtLUDEbM.js} +1 -1
- package/dist/ui/assets/{connect-surface-D2e8Twf-.js → connect-surface-B4G8l--y.js} +1 -1
- package/dist/ui/assets/{dip-DjZvvl_D.js → dip-DySyh98z.js} +4 -4
- package/dist/ui/assets/{directed-approval-rMofdevJ.js → directed-approval-CZK0YFwX.js} +1 -1
- package/dist/ui/assets/{fs-DX7ZCHzZ.js → fs-BXsWV91k.js} +2 -2
- package/dist/ui/assets/{fs-Brsg4Rlu.js → fs-D5rn9Yg2.js} +1 -1
- package/dist/ui/assets/{github-D0j7COIL.js → github-CJd5WOrc.js} +1 -1
- package/dist/ui/assets/{github-BsDD6b6E.js → github-DzUDXVwm.js} +2 -2
- package/dist/ui/assets/{github-copilot-DmmtmUPS.js → github-copilot-CPDNi2pJ.js} +1 -1
- package/dist/ui/assets/{github-copilot-DJnyx6Kk.js → github-copilot-OMKzjJ2o.js} +1 -1
- package/dist/ui/assets/{github-install-DHWvp_ed.js → github-install-DY3uazWz.js} +1 -1
- package/dist/ui/assets/{github-zip-C7RqBdik.js → github-zip-BGeyA2Li.js} +1 -1
- package/dist/ui/assets/{help-Db3oErKr.js → help-CjuK8HDa.js} +1 -1
- package/dist/ui/assets/{js-realm-worker-7yCsdyVv.js → js-realm-worker-Ca9s6UEK.js} +1 -1
- package/dist/ui/assets/{kernel-worker-B28ddZ6G.js → kernel-worker-CC7asGg9.js} +31 -31
- package/dist/ui/assets/{local-llm-jlZx1MJC.js → local-llm-C4lmoelF.js} +1 -1
- package/dist/ui/assets/{local-llm-Xuq1mj9S.js → local-llm-DZ9jctP2.js} +1 -1
- package/dist/ui/assets/{main-DtQE8ZJN.js → main-CcfFeq6P.js} +3 -3
- package/dist/ui/assets/{main-cherry-BRvnemBM.js → main-cherry-Ibu56rin.js} +1 -1
- package/dist/ui/assets/{mount-CSNG1HDe.js → mount-DbUK_ouC.js} +3 -3
- package/dist/ui/assets/{mount-recovery-DG2kvUyT.js → mount-recovery-Dzskgqa7.js} +1 -1
- package/dist/ui/assets/{mount-dY50JDIC.js → mount-vbEbpo4N.js} +1 -1
- package/dist/ui/assets/{new-session-Ba4480Kn.js → new-session-BscrQvQH.js} +2 -2
- package/dist/ui/assets/{oauth-bootstrap-CSqwVxsH.js → oauth-bootstrap-CCnmEqBW.js} +2 -2
- package/dist/ui/assets/{openai-codex-uDeSXi0c.js → openai-codex-B-7bpkdM.js} +1 -1
- package/dist/ui/assets/{openai-codex-D0gE5hCX.js → openai-codex-BO7ubdvf.js} +1 -1
- package/dist/ui/assets/{openrouter-KPrk7aTG.js → openrouter-C2yH1Eg2.js} +1 -1
- package/dist/ui/assets/{openrouter-CELFnxj8.js → openrouter-c4UnAH0g.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-CRIb5OcK.js → openrouter-oauth-DOOgBCk9.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-C9851OCp.js → openrouter-oauth-SIQYiorE.js} +1 -1
- package/dist/ui/assets/{panel-rpc-handlers-zoyvF7_M.js → panel-rpc-handlers-DAdmCiAM.js} +2 -2
- package/dist/ui/assets/{provider-BuVKaW63.js → provider-DHmZizbV.js} +1 -1
- package/dist/ui/assets/{provider-DXM2_o56.js → provider-DSOEMASd.js} +2 -2
- package/dist/ui/assets/provider-settings-BS8lFD1q.js +1 -0
- package/dist/ui/assets/{provider-settings-BusT_5Y1.js → provider-settings-CGwq2ZSe.js} +1 -1
- package/dist/ui/assets/{provider-store-access-BJulUz_a.js → provider-store-access-CMRf7M8N.js} +2 -2
- package/dist/ui/assets/provider-store-access-CVOw7bhE.js +1 -0
- package/dist/ui/assets/{providers-CxGK6Fqy.js → providers-DEZ_uN7Q.js} +2 -2
- package/dist/ui/assets/{providers-IZ5cNVfA.js → providers-DfgkYKp3.js} +1 -1
- package/dist/ui/assets/{quick-llm-DBwEP6q1.js → quick-llm-CTm8kfpN.js} +1 -1
- package/dist/ui/assets/{recovery-screen-D1reb-pz.js → recovery-screen-D7czDrGy.js} +1 -1
- package/dist/ui/assets/{run-jqtaDwYu.js → run-BbwmmE0l.js} +1 -1
- package/dist/ui/assets/{run-Bo2fK4R4.js → run-CMPmBjRA.js} +1 -1
- package/dist/ui/assets/{run-BjclDk0Z.js → run-kHiTfPA_.js} +2 -2
- package/dist/ui/assets/{session-freezer-kUAj24xS.js → session-freezer-C7H1VByB.js} +3 -3
- package/dist/ui/assets/{setup-feature-flags-remote-CkzzcYU8.js → setup-feature-flags-remote-J95n02lO.js} +1 -1
- package/dist/ui/assets/{setup-standalone-prelude-C4d7EdCJ.js → setup-standalone-prelude-L6dqa7or.js} +2 -2
- package/dist/ui/assets/{setup-sudo-Fk7Y7Qt-.js → setup-sudo-DXCFEDCh.js} +2 -2
- package/dist/ui/assets/{skills-BAQj3H1g.js → skills-DLlIa_OZ.js} +1 -1
- package/dist/ui/assets/slicc-version-C8iZhVsg.js +1 -0
- package/dist/ui/assets/{snapshot-Cfd5BBqA.js → snapshot-BWdwScwG.js} +1 -1
- package/dist/ui/assets/{snapshot-features-Bluz5JNp.js → snapshot-features-CHwnS5pR.js} +1 -1
- package/dist/ui/assets/sprinkle-bridge-CeRz-DjR.js +2 -0
- package/dist/ui/assets/{sprinkle-manager-CtUCzppZ.js → sprinkle-manager-jHNM2oxy.js} +1 -1
- package/dist/ui/assets/{sprinkle-renderer-DJyQFvKt.js → sprinkle-renderer-Ce6YjEek.js} +72 -13
- package/dist/ui/assets/{state-99acinkj.js → state-BaXCc20k.js} +1 -1
- package/dist/ui/assets/{store-D48jOp3G.js → store-BDD3IHgP.js} +1 -1
- package/dist/ui/assets/{store-GRTMEtdq.js → store-Ca4Dnbdu.js} +1 -1
- package/dist/ui/assets/{sudo-BMl-vlg6.js → sudo-CA0RFOLj.js} +1 -1
- package/dist/ui/assets/{upgrade-detection-DH1eohPP.js → upgrade-detection-C145Khtm.js} +1 -1
- package/dist/ui/assets/{wc-extension-CY666K0U.js → wc-extension-Bi0TRT8Q.js} +2 -2
- package/dist/ui/assets/{wc-follower-BWQOhNee.js → wc-follower-Bo_J3jq5.js} +3 -3
- package/dist/ui/assets/{wc-follower-oauth-ClOA_w6r.js → wc-follower-oauth-DCz20htV.js} +1 -1
- package/dist/ui/assets/{wc-live-B1dex7oL.js → wc-live-NRwfoCVf.js} +3 -3
- package/dist/ui/assets/{wc-nav-DVdmQDvN.js → wc-nav-DrHMR3BW.js} +2 -2
- package/dist/ui/assets/{wc-onboarding-NYG1uBXD.js → wc-onboarding-De4Igl1i.js} +2 -2
- package/dist/ui/assets/{wc-placeholder-MzB6mEv3.js → wc-placeholder-DPzXeItf.js} +2 -2
- package/dist/ui/assets/{wc-settings-DyL5gfGi.js → wc-settings-CVX_pOD-.js} +2 -2
- package/dist/ui/assets/{wc-shell-DchXcP-_.js → wc-shell-DgmtA7sH.js} +2 -2
- package/dist/ui/assets/{wc-sprinkles-DtoxWB3_.js → wc-sprinkles-FfifZkuL.js} +2 -2
- package/dist/ui/assets/{wc-tray-DWjggXZK.js → wc-tray-DJF61Czu.js} +4 -4
- package/dist/ui/assets/{xai-grok-BnXKBV79.js → xai-grok-9c2GZFuB.js} +1 -1
- package/dist/ui/assets/{xai-grok-BTJ50D3E.js → xai-grok-DrI5c3BY.js} +1 -1
- package/dist/ui/index.html +6 -6
- package/dist/ui/packages/webapp/index.html +6 -6
- package/package.json +1 -1
- package/dist/ui/assets/provider-settings-CHgRgntH.js +0 -1
- package/dist/ui/assets/provider-store-access-BSv6hr_9.js +0 -1
- package/dist/ui/assets/slicc-version-C3ORozzC.js +0 -1
- package/dist/ui/assets/sprinkle-bridge-B8DKuaxn.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
import{W as e,f as t}from"./account-store-
|
|
1
|
+
import{W as e,f as t}from"./account-store-BzCpAbzU.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-CGwq2ZSe.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{_ as e,r as t}from"./account-store-
|
|
1
|
+
import{_ as e,r as t}from"./account-store-IBc-Swl2.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-BS8lFD1q.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-CcfFeq6P.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">
|
|
@@ -28,21 +28,21 @@
|
|
|
28
28
|
<link rel="modulepreload" crossorigin href="/assets/secrets-bridge-client-BVl0YuB2.js">
|
|
29
29
|
<link rel="modulepreload" crossorigin href="/assets/image-markers-BFDmhPy4.js">
|
|
30
30
|
<link rel="modulepreload" crossorigin href="/assets/tool-ui-eSQ1g2I1.js">
|
|
31
|
-
<link rel="modulepreload" crossorigin href="/assets/providers-
|
|
31
|
+
<link rel="modulepreload" crossorigin href="/assets/providers-DEZ_uN7Q.js">
|
|
32
32
|
<link rel="modulepreload" crossorigin href="/assets/panel-rpc-B3MSVImO.js">
|
|
33
33
|
<link rel="modulepreload" crossorigin href="/assets/bedrock-camp-compat-CgBMwna8.js">
|
|
34
|
-
<link rel="modulepreload" crossorigin href="/assets/account-store-
|
|
34
|
+
<link rel="modulepreload" crossorigin href="/assets/account-store-BzCpAbzU.js">
|
|
35
35
|
<link rel="modulepreload" crossorigin href="/assets/bridge-protocol-06nbmp2X.js">
|
|
36
36
|
<link rel="modulepreload" crossorigin href="/assets/messages-BD4p8GuF.js">
|
|
37
37
|
<link rel="modulepreload" crossorigin href="/assets/tray-runtime-config-BQL-GPqt.js">
|
|
38
|
-
<link rel="modulepreload" crossorigin href="/assets/setup-sudo-
|
|
39
|
-
<link rel="modulepreload" crossorigin href="/assets/setup-standalone-prelude-
|
|
38
|
+
<link rel="modulepreload" crossorigin href="/assets/setup-sudo-DXCFEDCh.js">
|
|
39
|
+
<link rel="modulepreload" crossorigin href="/assets/setup-standalone-prelude-L6dqa7or.js">
|
|
40
40
|
<link rel="modulepreload" crossorigin href="/assets/telemetry-MJ77Fp1a.js">
|
|
41
41
|
<link rel="modulepreload" crossorigin href="/assets/feature-flags-DaSRRz0w.js">
|
|
42
42
|
<link rel="modulepreload" crossorigin href="/assets/tray-follower-status-BAjnN7Ar.js">
|
|
43
43
|
<link rel="modulepreload" crossorigin href="/assets/clipboard-eqmn97SP.js">
|
|
44
44
|
<link rel="modulepreload" crossorigin href="/assets/tray-join-url-BIvzbiFR.js">
|
|
45
|
-
<link rel="modulepreload" crossorigin href="/assets/provider-settings-
|
|
45
|
+
<link rel="modulepreload" crossorigin href="/assets/provider-settings-CGwq2ZSe.js">
|
|
46
46
|
</head>
|
|
47
47
|
<body>
|
|
48
48
|
<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-CcfFeq6P.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">
|
|
@@ -28,21 +28,21 @@
|
|
|
28
28
|
<link rel="modulepreload" crossorigin href="/assets/secrets-bridge-client-BVl0YuB2.js">
|
|
29
29
|
<link rel="modulepreload" crossorigin href="/assets/image-markers-BFDmhPy4.js">
|
|
30
30
|
<link rel="modulepreload" crossorigin href="/assets/tool-ui-eSQ1g2I1.js">
|
|
31
|
-
<link rel="modulepreload" crossorigin href="/assets/providers-
|
|
31
|
+
<link rel="modulepreload" crossorigin href="/assets/providers-DEZ_uN7Q.js">
|
|
32
32
|
<link rel="modulepreload" crossorigin href="/assets/panel-rpc-B3MSVImO.js">
|
|
33
33
|
<link rel="modulepreload" crossorigin href="/assets/bedrock-camp-compat-CgBMwna8.js">
|
|
34
|
-
<link rel="modulepreload" crossorigin href="/assets/account-store-
|
|
34
|
+
<link rel="modulepreload" crossorigin href="/assets/account-store-BzCpAbzU.js">
|
|
35
35
|
<link rel="modulepreload" crossorigin href="/assets/bridge-protocol-06nbmp2X.js">
|
|
36
36
|
<link rel="modulepreload" crossorigin href="/assets/messages-BD4p8GuF.js">
|
|
37
37
|
<link rel="modulepreload" crossorigin href="/assets/tray-runtime-config-BQL-GPqt.js">
|
|
38
|
-
<link rel="modulepreload" crossorigin href="/assets/setup-sudo-
|
|
39
|
-
<link rel="modulepreload" crossorigin href="/assets/setup-standalone-prelude-
|
|
38
|
+
<link rel="modulepreload" crossorigin href="/assets/setup-sudo-DXCFEDCh.js">
|
|
39
|
+
<link rel="modulepreload" crossorigin href="/assets/setup-standalone-prelude-L6dqa7or.js">
|
|
40
40
|
<link rel="modulepreload" crossorigin href="/assets/telemetry-MJ77Fp1a.js">
|
|
41
41
|
<link rel="modulepreload" crossorigin href="/assets/feature-flags-DaSRRz0w.js">
|
|
42
42
|
<link rel="modulepreload" crossorigin href="/assets/tray-follower-status-BAjnN7Ar.js">
|
|
43
43
|
<link rel="modulepreload" crossorigin href="/assets/clipboard-eqmn97SP.js">
|
|
44
44
|
<link rel="modulepreload" crossorigin href="/assets/tray-join-url-BIvzbiFR.js">
|
|
45
|
-
<link rel="modulepreload" crossorigin href="/assets/provider-settings-
|
|
45
|
+
<link rel="modulepreload" crossorigin href="/assets/provider-settings-CGwq2ZSe.js">
|
|
46
46
|
</head>
|
|
47
47
|
<body>
|
|
48
48
|
<div id="app"></div>
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./logger-LESFN7Hj.js";import"./account-store-B8IgsGFb.js";import"./core-B8y1Kyh_.js";import"./tray-runtime-config-C3Ti4Pik.js";e(`provider-settings`);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./store-GRTMEtdq.js";export{e as readMcpAuthEntries};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
function e(){return{version:`6.136.0`,releasedAt:`2026-09-07T13:02:37Z`,buildId:`6.136.0-mtr93e2n`}}let t=null;function n(e){t=e}function r(){return t}export{e as n,n as r,r as t};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{n as e,r as t}from"./hid-device-registry-B2R-0rNt.js";import{a as n,i as r}from"./serial-port-registry-CCqklAEr.js";import{A as i,C as a,D as o,O as s,S as c,T as l,_ as u,a as d,b as f,c as p,d as m,f as h,g,h as _,i as v,l as y,m as b,n as x,o as S,p as C,r as w,s as T,t as E,u as D,v as O,w as k}from"./usb-operations-BsAiCAWF.js";import{i as A,r as j}from"./usb-device-registry-DmUBqrA-.js";import"./shared-Djytys1b.js";import{t as M}from"./preview-url-r19H6zH1.js";var N=`slicc-sprinkle-routes`;function P(){try{let e=localStorage.getItem(N);return e?JSON.parse(e):{}}catch{return{}}}function F(e){return P()[e]}var I=`SLICCJSH`;function L(e){return e.length===0?`''`:`'${e.replace(/'/g,`'\\''`)}'`}function R(e,t){return`var REQ=${JSON.stringify({op:e,args:t})};var P=${JSON.stringify(I)};function emit(o){process.stdout.write(P+JSON.stringify(o));}try{var op=REQ.op,a=REQ.args||[],out;if(op==='fetch'){var r=await fetch(a[0],a[1]||undefined);var h={};r.headers.forEach(function(v,k){h[k]=v;});var u=new Uint8Array(await r.arrayBuffer());var bin="",C=0x8000;for(var i=0;i<u.length;i+=C){bin+=String.fromCharCode.apply(null,u.subarray(i,i+C));}out={ok:r.ok,status:r.status,statusText:r.statusText,url:r.url,headers:h,bodyBase64:btoa(bin)};}else if(op==='http'){var c=http.client(a[0]||{});var res=await c[a[1]](a[2],Object.assign({},a[3]||{},{raw:true}));out={status:res.status,headers:res.headers,body:res.body};}else if(op==='browser'){var m=a[0];if(typeof browser[m]!=="function")throw new Error("browser."+m+" is not available over the sprinkle bridge");out=await browser[m].apply(browser,a.slice(1));}else if(op==='spawn'){out=await exec.spawn(a[0]);}else if(op==='fetchToFile'){out=await fs.fetchToFile(a[0],a[1]);}else{throw new Error("unknown jsh op: "+op);}emit({ok:true,value:out});}catch(e){emit({ok:false,error:(e&&e.message)?e.message:String(e)});}`}function z(e,t){return`node -e ${L(R(e,t))}`}function B(e){let t=e.stdout.lastIndexOf(I);if(t===-1){let t=e.stderr.trim()||e.stdout.trim()||`exit code ${e.exitCode}`;throw Error(`jsh bridge: no result (${t})`)}let n;try{n=JSON.parse(e.stdout.slice(t+10))}catch{throw Error(`jsh bridge: malformed result`)}if(!n.ok)throw Error(n.error||`jsh bridge error`);return n.value}async function V(e,t,n){return B(await e(z(t,n)))}function H(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}function U(e){let t=``,n=32768;for(let r=0;r<e.length;r+=n)t+=String.fromCharCode(...e.subarray(r,r+n));return btoa(t)}function W(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 G(e){if(e instanceof Uint8Array)return e;if(e instanceof ArrayBuffer)return new Uint8Array(e);if(ArrayBuffer.isView(e)){let t=e;return new Uint8Array(t.buffer,t.byteOffset,t.byteLength)}if(Array.isArray(e))return new Uint8Array(e);throw Error(`expected Uint8Array, ArrayBuffer, or number[]`)}var K=new Set([101,103,204,205,304]);function q(e){let t=W(e.bodyBase64),n=K.has(e.status)?null:t,r=new Headers(e.headers),i;try{return i=new Response(n,{status:e.status,statusText:e.statusText,headers:r}),Object.defineProperty(i,"url",{value:e.url,configurable:!0}),i}catch{i=new Response(n,{headers:r});let t=e.status>=200&&e.status<300;return Object.defineProperty(i,"status",{value:e.status,configurable:!0}),Object.defineProperty(i,"statusText",{value:e.statusText,configurable:!0}),Object.defineProperty(i,"ok",{value:t,configurable:!0}),Object.defineProperty(i,"url",{value:e.url,configurable:!0}),i}}function J(e){return e.length===0?`''`:`'${e.replace(/'/g,`'\\''`)}'`}var Y=class{listeners=new Map;lickHandler;fs;closeHandler;minimizeHandler;stopConeHandler;attachImageHandler;captureScreenHandler;execHandler;hidSubs=new Map;iframePusher;constructor(e,t,n,r,i,a,o,s,c){this.fs=e,this.lickHandler=t,this.closeHandler=n,this.minimizeHandler=r,this.stopConeHandler=i,this.attachImageHandler=a,this.captureScreenHandler=o,this.execHandler=s,this.iframePusher=c}setIframePusher(e){this.iframePusher=e}async hidOp(n,r,i){let a=t();switch(r){case`list`:{let t=e();if(!t)throw Error(`WebHID is unavailable in this browser`);return u(a,t)}case`request`:{let t=e();if(!t)throw Error(`WebHID is unavailable in this browser`);return f(a,t,i[0]??[])}case`info`:return g(a,i[0]);case`open`:{let e=i[0];return await O(a,e),await this.attachHidInputReports(n,e),{ok:!0}}case`close`:{let e=i[0];return await this.detachHidInputReports(n,e),await _(a,e),{ok:!0}}case`sendReport`:{let e=i[0],t=i[1],n=G(i[2]),r=n.buffer.slice(n.byteOffset,n.byteOffset+n.byteLength);return await c(a,e,t,r),{ok:!0}}default:throw Error(`hid: unknown op '${r}'`)}}async serialOp(e,t,a){let c=n();switch(t){case`list`:{let e=r();if(!e)throw Error(`Web Serial is unavailable in this browser`);return o(c,e)}case`request`:{let e=r();if(!e)throw Error(`Web Serial is unavailable in this browser`);return i(c,e,a[0]??[])}case`info`:return l(c,a[0]);case`open`:{let e=a[0],t=a[1]??{baudRate:9600};return await s(c,e,t),{ok:!0}}case`close`:{let e=a[0];return await k(c,e),{ok:!0}}default:throw Error(`serial: unknown op '${t}'`)}}async usbOp(e,t,n){let r=A();switch(t){case`list`:{let e=j();if(!e)throw Error(`WebUSB is unavailable in this browser`);return T(r,e)}case`request`:{let e=j();if(!e)throw Error(`WebUSB is unavailable in this browser`);return D(r,e,n[0]??[])}case`info`:return S(r,n[0]);case`open`:return await p(r,n[0]),{ok:!0};case`close`:return await w(r,n[0]),{ok:!0};case`reset`:return await m(r,n[0]),{ok:!0};case`selectConfig`:return await h(r,n[0],n[1]),{ok:!0};case`claim`:return await E(r,n[0],n[1]),{ok:!0};case`release`:return await y(r,n[0],n[1]),{ok:!0};case`clearHalt`:return await x(r,n[0],n[1],n[2]),{ok:!0};case`controlIn`:{let e=await v(r,n[0],n[1],n[2]);return{status:e.status,base64:U(new Uint8Array(e.bytes))}}case`controlOut`:{let e=await d(r,n[0],n[1],H(W(n[2])));return{status:e.status,bytesWritten:e.bytesWritten}}case`transferIn`:{let e=await C(r,n[0],n[1],n[2]);return{status:e.status,base64:U(new Uint8Array(e.bytes))}}case`transferOut`:{let e=await b(r,n[0],n[1],H(W(n[2])));return{status:e.status,bytesWritten:e.bytesWritten}}default:throw Error(`usb: unknown op '${t}'`)}}async deviceOp(e,t,n,r){if(t===`hid`)return this.hidOp(e,n,r);if(t===`serial`)return this.serialOp(e,n,r);if(t===`usb`)return this.usbOp(e,n,r);throw Error(`unknown device channel '${t}'`)}async attachHidInputReports(e,n){let r=this.hidSubs.get(e);if(r||(r=new Map,this.hidSubs.set(e,r)),r.has(n))return;let i=await a(t(),n,t=>{let r=t.bytes instanceof Uint8Array?t.bytes:new Uint8Array(t.bytes);this.deliverHidInputReport(e,{handle:n,reportId:t.reportId,data:r})});r.set(n,i)}async detachHidInputReports(e,t){let n=this.hidSubs.get(e);if(!n)return;let r=n.get(t);if(r){n.delete(t);try{await Promise.resolve(r())}catch{}}n.size===0&&this.hidSubs.delete(e)}deliverHidInputReport(e,t){let n=this.listeners.get(`${e}:hid:inputreport`);if(n)for(let e of n){let r=n;setTimeout(()=>{if(r.has(e))try{e(t)}catch{}},0)}try{this.iframePusher?.(e,`hid:inputreport`,t)}catch{}}async runExec(e){if(!this.execHandler)return{stdout:``,stderr:`exec: shell bridge not available
|
|
2
|
-
`,exitCode:127};try{return await this.execHandler(e)}catch(e){return{stdout:``,stderr:`exec: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async jshDispatch(e,t){if(e===`readFileBinary`)return{base64:U(await this.fs.readFile(t[0],{encoding:`binary`}))};if(e===`writeFileBinary`)return await this.fs.writeFile(t[0],W(t[1])),!0;let n=await V(e=>this.runExec(e),e,t);return e===`fetch`?q(n):n}createLickHandler(e){return t=>{let n=typeof t==`string`?t:t.action,r=typeof t==`string`?void 0:t.data,i={type:`sprinkle`,sprinkleName:e,targetScoop:F(e),timestamp:new Date().toISOString(),body:{action:n,data:r}};this.lickHandler(i)}}createScreenshotHandler(e){return async t=>{if(!e)return``;let n=t?e.querySelector(t):e;if(!n)throw Error(`Element not found: `+(t||`container`));let r=n.getBoundingClientRect(),i=Math.ceil(r.width),a=Math.ceil(r.height);if(i===0||a===0)throw Error(`Element has zero dimensions`);let o=document.createElement(`canvas`),s=window.devicePixelRatio||1;o.width=i*s,o.height=a*s;let c=o.getContext(`2d`);c.scale(s,s);let l=n.cloneNode(!0),u=`<svg xmlns="http://www.w3.org/2000/svg" width="${i}" height="${a}"><foreignObject width="100%" height="100%">${new XMLSerializer().serializeToString(l)}</foreignObject></svg>`;return new Promise((e,t)=>{let n=new Image;n.onload=()=>{c.drawImage(n,0,0),e(o.toDataURL(`image/png`))},n.onerror=()=>t(Error(`Screenshot rendering failed`)),n.src=`data:image/svg+xml;charset=utf-8,`+encodeURIComponent(u)})}}createAgentHandler(){return async(e,t)=>{let n=t?.cwd??`.`,r=t?.allowedCommands??`*`,i=[`agent`];t?.model&&i.push(`--model`,J(t.model)),t?.thinking&&i.push(`--thinking`,J(t.thinking)),t?.readOnly&&i.push(`--read-only`,J(t.readOnly)),i.push(J(n),J(r),J(e));let a=await this.runExec(i.join(` `));return{stdout:a.stdout||a.stderr,exitCode:a.exitCode}}}createHidApi(e){return{list:()=>this.hidOp(e,`list`,[]),request:t=>this.hidOp(e,`request`,[t??[]]),open:async t=>{await this.hidOp(e,`open`,[t])},close:async t=>{await this.hidOp(e,`close`,[t])},sendReport:async(t,n,r)=>{await this.hidOp(e,`sendReport`,[t,n,r])},on:(t,n)=>{if(t!==`inputreport`)return;let r=`${e}:hid:inputreport`,i=this.listeners.get(r);i||(i=new Set,this.listeners.set(r,i)),i.add(n)},off:(t,n)=>{t===`inputreport`&&this.listeners.get(`${e}:hid:inputreport`)?.delete(n)}}}createSerialApi(e){return{list:()=>this.serialOp(e,`list`,[]),request:t=>this.serialOp(e,`request`,[t??[]]),open:async(t,n)=>{await this.serialOp(e,`open`,[t,n])},close:async t=>{await this.serialOp(e,`close`,[t])}}}createUsbApi(e){return{list:()=>this.usbOp(e,`list`,[]),request:t=>this.usbOp(e,`request`,[t??[]]),open:async t=>{await this.usbOp(e,`open`,[t])},close:async t=>{await this.usbOp(e,`close`,[t])},reset:async t=>{await this.usbOp(e,`reset`,[t])},selectConfiguration:async(t,n)=>{await this.usbOp(e,`selectConfig`,[t,n])},claimInterface:async(t,n)=>{await this.usbOp(e,`claim`,[t,n])},releaseInterface:async(t,n)=>{await this.usbOp(e,`release`,[t,n])},clearHalt:async(t,n,r)=>{await this.usbOp(e,`clearHalt`,[t,n,r])},controlTransferIn:async(t,n,r)=>{let i=await this.usbOp(e,`controlIn`,[t,n,r]);return{status:i.status,bytes:W(i.base64)}},controlTransferOut:async(t,n,r)=>this.usbOp(e,`controlOut`,[t,n,U(r)]),transferIn:async(t,n,r)=>{let i=await this.usbOp(e,`transferIn`,[t,n,r]);return{status:i.status,bytes:W(i.base64)}},transferOut:async(t,n,r)=>this.usbOp(e,`transferOut`,[t,n,U(r)])}}createHttpClient(e){let t=t=>(n,r)=>this.jshDispatch(`http`,[e,t,n,r??null]);return{get:t(`get`),post:t(`post`),put:t(`put`),patch:t(`patch`),delete:t(`delete`)}}createAPI(e){let t={name:e,lick:this.createLickHandler(e),on:(t,n)=>{let r=`${e}:${t}`,i=this.listeners.get(r);i||(i=new Set,this.listeners.set(r,i)),i.add(n)},off:(t,n)=>{let r=`${e}:${t}`;this.listeners.get(r)?.delete(n)},readFile:async e=>await this.fs.readFile(e,{encoding:`utf-8`}),writeFile:async(e,t)=>{await this.fs.writeFile(e,t)},readDir:async e=>(await this.fs.readDir(e)).map(e=>({name:e.name,type:e.type})),exists:async e=>this.fs.exists(e),stat:async e=>{let t=await this.fs.stat(e);return{type:t.type,size:t.size}},mkdir:async e=>{await this.fs.mkdir(e,{recursive:!0})},rm:async e=>{await this.fs.rm(e)},screenshot:e=>this.createScreenshotHandler(t._container)(e),setState:t=>{try{localStorage.setItem(`slicc-sprinkle-state:${e}`,JSON.stringify(t))}catch{}},getState:()=>{try{let t=localStorage.getItem(`slicc-sprinkle-state:${e}`);return t?JSON.parse(t):null}catch{return null}},open:e=>{let t=/^https?:|^chrome-extension:/.test(e)?e:M(e);window.open(t,`_blank`)},close:()=>this.closeHandler(e),minimize:()=>this.minimizeHandler(e),stopCone:()=>this.stopConeHandler(),attachImage:(e,t,n)=>this.attachImageHandler(e,t,n),captureScreen:()=>this.captureScreenHandler(),exec:Object.assign(e=>this.runExec(e),{spawn:e=>this.jshDispatch(`spawn`,[e])}),fetch:(e,t)=>this.jshDispatch(`fetch`,[e,t??null]),http:{client:e=>this.createHttpClient(e)},browser:{findTab:e=>this.jshDispatch(`browser`,[`findTab`,e]),ensureTab:(e,t)=>this.jshDispatch(`browser`,[`ensureTab`,e,t??{}]),eval:(e,t)=>this.jshDispatch(`browser`,[`eval`,e,t]),evalAsync:(e,t)=>this.jshDispatch(`browser`,[`evalAsync`,e,t]),cookie:(e,t)=>this.jshDispatch(`browser`,[`cookie`,e,t]),localStorage:(e,t)=>this.jshDispatch(`browser`,[`localStorage`,e,t]),fetch:(e,t,n)=>this.jshDispatch(`browser`,[`fetch`,e,t,n??{}])},hid:this.createHidApi(e),serial:this.createSerialApi(e),usb:this.createUsbApi(e),readFileBinary:async e=>W((await this.jshDispatch(`readFileBinary`,[e])).base64),writeFileBinary:async(e,t)=>{await this.jshDispatch(`writeFileBinary`,[e,U(t)])},fetchToFile:(e,t)=>this.jshDispatch(`fetchToFile`,[e,t]),_jsh:(e,t)=>this.jshDispatch(e,t),_device:(t,n,r)=>this.deviceOp(e,t,n,r),agent:this.createAgentHandler()};return t}pushUpdate(e,t){let n=`${e}:update`,r=this.listeners.get(n);if(r)for(let e of r){let n=r;setTimeout(()=>{if(n.has(e))try{e(t)}catch{}},0)}}removeSprinkle(e){for(let t of this.listeners.keys())t.startsWith(`${e}:`)&&this.listeners.delete(t);let t=this.hidSubs.get(e);if(t){for(let e of t.values())try{Promise.resolve(e()).catch(()=>{})}catch{}this.hidSubs.delete(e)}}};export{V as n,Y as t};
|