sliccy 4.2.0 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/README.md +1 -1
  2. package/dist/ui/assets/{account-store-CiB6cAel.js → account-store-B7QAqqi3.js} +2 -2
  3. package/dist/ui/assets/{account-store-BcAPWTGv.js → account-store-C8na8kHM.js} +2 -2
  4. package/dist/ui/assets/{adobe-CrAdS9SD.js → adobe-B3FAPCSl.js} +1 -1
  5. package/dist/ui/assets/{adobe-B-oaNVGg.js → adobe-CLAtsbgy.js} +1 -1
  6. package/dist/ui/assets/{agent-message-to-chat-BAWaR5C4.js → agent-message-to-chat-u5bAg3Dv.js} +1 -1
  7. package/dist/ui/assets/{apps-BHERTKiO.js → apps-BrQb6D54.js} +1 -1
  8. package/dist/ui/assets/{azure-openai-C-826Dlw.js → azure-openai-BfAHTf5F.js} +1 -1
  9. package/dist/ui/assets/{azure-openai-DvGwGsI1.js → azure-openai-DdRohXjQ.js} +1 -1
  10. package/dist/ui/assets/{bsh-watchdog-ClOjddgN.js → bsh-watchdog-Bc7J2Bk7.js} +1 -1
  11. package/dist/ui/assets/{connect-surface-D6ECkvh5.js → connect-surface-FrHkI2dH.js} +1 -1
  12. package/dist/ui/assets/dip-CBvyzPyQ.js +1 -0
  13. package/dist/ui/assets/{dist-Dejj5eGe.js → dist-DOo6fKGj.js} +1 -1
  14. package/dist/ui/assets/{dist-l3FWXCp1.js → dist-eq0qrLpe.js} +1 -1
  15. package/dist/ui/assets/{es-BxwKdh2y.js → es-CRDAPvPn.js} +1 -1
  16. package/dist/ui/assets/{fs-D2X8IzCo.js → fs-Bd1RYTR9.js} +2 -2
  17. package/dist/ui/assets/{fs-BDe3kEbh.js → fs-BlUrfzJM.js} +1 -1
  18. package/dist/ui/assets/{github-BAqz3bbU.js → github-CqzS1etP.js} +1 -1
  19. package/dist/ui/assets/{github-BPoxioKX.js → github-Dik4gFKy.js} +2 -2
  20. package/dist/ui/assets/{github-copilot-C7kttkXK.js → github-copilot-B2O232DQ.js} +1 -1
  21. package/dist/ui/assets/{github-copilot-Colai-cF.js → github-copilot-yPQNbALb.js} +1 -1
  22. package/dist/ui/assets/{hear-lee28_gN.js → hear-UQAn2f9B.js} +1 -1
  23. package/dist/ui/assets/js-realm-worker-BWFis6jC.js +5 -0
  24. package/dist/ui/assets/{kernel-worker-ic1QU0mg.js → kernel-worker-BMe--kS1.js} +1163 -1173
  25. package/dist/ui/assets/{kokoro-engine-C5c0LOmY.js → kokoro-engine-Cu1pI-kR.js} +1 -1
  26. package/dist/ui/assets/{lick-ws-bridge-C0dPnE8i.js → lick-ws-bridge-DAuwCMQO.js} +1 -1
  27. package/dist/ui/assets/{local-llm-DzOVooE9.js → local-llm-l4-XQFY8.js} +1 -1
  28. package/dist/ui/assets/{main-DqjICHRh.js → main-BDx9HQkN.js} +3 -3
  29. package/dist/ui/assets/{mount-DqjQTDCU.js → mount-CWCvNUcA.js} +1 -1
  30. package/dist/ui/assets/{mount-CCmhX5cE.js → mount-D5vdZ9ZD.js} +2 -2
  31. package/dist/ui/assets/{new-session-DeH2bC1U.js → new-session-Gr9WMwtw.js} +1 -1
  32. package/dist/ui/assets/{oauth-bootstrap-B6wP6zi_.js → oauth-bootstrap-BsfJ9QeQ.js} +2 -2
  33. package/dist/ui/assets/{openai-codex-C_G8kpA8.js → openai-codex-BaNE798j.js} +1 -1
  34. package/dist/ui/assets/{openai-codex-DKhn8od8.js → openai-codex-kuA3-9C7.js} +1 -1
  35. package/dist/ui/assets/{panel-rpc-handlers-CEpB4s-n.js → panel-rpc-handlers-BcpEgTGa.js} +1 -1
  36. package/dist/ui/assets/{provider-CkWZObGz.js → provider-BmbE_rtX.js} +2 -2
  37. package/dist/ui/assets/{provider-Bu84IJif.js → provider-CEn9M9_r.js} +1 -1
  38. package/dist/ui/assets/provider-store-access-BSVI8UyE.js +1 -0
  39. package/dist/ui/assets/provider-store-access-CWZqsjgW.js +1 -0
  40. package/dist/ui/assets/{providers-Dqi1y25H.js → providers-MUCDnWww.js} +1 -1
  41. package/dist/ui/assets/proxied-fetch-Dg114MVx.js +1 -0
  42. package/dist/ui/assets/{quick-llm-7TCMcdio.js → quick-llm-DB--outF.js} +1 -1
  43. package/dist/ui/assets/session-freezer-DUHrs9By.js +1 -0
  44. package/dist/ui/assets/setup-sudo-B5JoDQ4W.js +1 -0
  45. package/dist/ui/assets/{speak-lc1xl5Fy.js → speak-BHHbBLx8.js} +1 -1
  46. package/dist/ui/assets/{sprinkle-manager-Pfbc1BH8.js → sprinkle-manager-COo-zwx8.js} +1 -1
  47. package/dist/ui/assets/{store-B3VfUVG6.js → store-CqhogTXq.js} +1 -1
  48. package/dist/ui/assets/{sudo-CZTI9OeD.js → sudo-IiXNo0Z2.js} +1 -1
  49. package/dist/ui/assets/{transformers-env-CCpYiaIa.js → transformers-env-d7AMEyAX.js} +1 -1
  50. package/dist/ui/assets/{tray-leave-runtime-CdAgBa02.js → tray-leave-runtime-CQ20HzV5.js} +1 -1
  51. package/dist/ui/assets/{upgrade-detection--E7KkpNj.js → upgrade-detection-CqAg8yKN.js} +1 -1
  52. package/dist/ui/assets/{wc-attach-DAWHF0q6.js → wc-attach-NtXmSLiR.js} +2 -2
  53. package/dist/ui/assets/{wc-detached-DaE992Vl.js → wc-detached-TITxuKki.js} +1 -1
  54. package/dist/ui/assets/{wc-extension-CI60x7Bm.js → wc-extension-Dy7sBRt4.js} +2 -2
  55. package/dist/ui/assets/{wc-live-C_qPXh6O.js → wc-live-CKs-VTsl.js} +5 -5
  56. package/dist/ui/assets/{wc-nav-Fk2p4da7.js → wc-nav-BSmxk4Wx.js} +2 -2
  57. package/dist/ui/assets/{wc-onboarding-CKZm1pcF.js → wc-onboarding-D4j2oDHI.js} +2 -2
  58. package/dist/ui/assets/{wc-placeholder-DcxEXlT1.js → wc-placeholder-Cg0ggHwo.js} +2 -2
  59. package/dist/ui/assets/{wc-settings-CrD6Tm6Z.js → wc-settings-BlGVWM4o.js} +2 -2
  60. package/dist/ui/assets/{wc-shell-DPYESGkK.js → wc-shell-RljPbgFJ.js} +2 -2
  61. package/dist/ui/assets/{wc-sprinkles-DEfLhO36.js → wc-sprinkles-B791LgwY.js} +2 -2
  62. package/dist/ui/assets/{wc-tray-CP8sez4_.js → wc-tray-DCscOwKN.js} +3 -3
  63. package/dist/ui/assets/{xai-grok-CUqytO26.js → xai-grok-Dh1WJ9QS.js} +1 -1
  64. package/dist/ui/assets/{xai-grok-BpmkOGg0.js → xai-grok-Z0dPXLgr.js} +1 -1
  65. package/dist/ui/index.html +2 -2
  66. package/dist/ui/packages/webapp/index.html +2 -2
  67. package/package.json +4 -3
  68. package/dist/ui/assets/dip-ilEHW-Zu.js +0 -1
  69. package/dist/ui/assets/js-realm-worker-DFuUhqWh.js +0 -5
  70. package/dist/ui/assets/provider-store-access-6diGA3zc.js +0 -1
  71. package/dist/ui/assets/provider-store-access-KstUmZ39.js +0 -1
  72. package/dist/ui/assets/proxied-fetch-DK_0fIag.js +0 -1
  73. package/dist/ui/assets/session-freezer-1L0xsBeg.js +0 -1
  74. package/dist/ui/assets/setup-sudo-_cBqLWHH.js +0 -1
@@ -1 +1 @@
1
- import{b as e,h as t,y as n}from"./bedrock-camp-wxdDcDkR.js";import{o as r}from"./transform-messages-C1X1O3BY.js";import{E as i,i as a}from"./account-store-CiB6cAel.js";import"./kernel-worker-ic1QU0mg.js";import{XaiErrorCode as o,XaiOAuthError as s}from"./xai-grok-errors-ByEMMSoz.js";import{resolveModels as c,toModelMetadata as l}from"./xai-grok-models-B0Tf--xf.js";import{sanitizePayload as u}from"./xai-grok-sanitize-CV6qvaEF.js";const d=`xai-grok`,f=`https://auth.x.ai`,p=`${f}/oauth2/authorize`,m=`${f}/oauth2/token`,h=`b1a00492-073a-47ea-816f-4c329264a828`,g=`http://127.0.0.1:56121/callback`,_=`https://api.x.ai/v1`,v=`openai-responses`,y=`${d}-openai`;function b(){return typeof process>`u`?null:{}.PI_XAI_OAUTH_MODELS??null}const x=c(b());function S(e){let t=``;for(let n of e)t+=String.fromCharCode(n);return btoa(t).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/,``)}function C(e){let t=new Uint8Array(e);return crypto.getRandomValues(t),t}function w(){return S(C(32))}async function T(e){let t=new TextEncoder().encode(e);return S(new Uint8Array(await crypto.subtle.digest(`SHA-256`,t)))}function E(){return S(C(16))}async function D(e,t){let n=new URLSearchParams({grant_type:`authorization_code`,code:e,redirect_uri:g,client_id:h,code_verifier:t}),r=await fetch(m,{method:`POST`,headers:{"Content-Type":`application/x-www-form-urlencoded`},body:n});if(!r.ok)throw new s(`xAI token exchange failed: ${r.status} ${await r.text()}`,o.TOKEN_EXCHANGE_FAILED);let i=await r.json();if(!i.access_token)throw new s(`xAI token exchange did not return access_token.`,o.TOKEN_EXCHANGE_INVALID);return i}async function O(e){try{let t=new URLSearchParams({grant_type:`refresh_token`,refresh_token:e,client_id:h}),n=await fetch(m,{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 k(){return a().find(e=>e.providerId===d)}async function A(){let e=k();if(!e?.accessToken)throw new s("Not signed in to xAI Grok — run /login or `oauth-token xai-grok`",o.AUTH_MISSING,!0);let t=e.tokenExpiresAt??0;if(t&&Date.now()+6e4<t)return e.accessToken;if(e.refreshToken){let t=await O(e.refreshToken);if(t?.access_token)return await i({providerId:d,accessToken:t.access_token,refreshToken:t.refresh_token??e.refreshToken,tokenExpiresAt:Date.now()+(t.expires_in??21600)*1e3}),t.access_token}return e.accessToken}function j(e,t){return{type:`error`,reason:`error`,error:{role:`assistant`,content:[],api:y,provider:d,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 M(e,t){return n=>!n||typeof n!=`object`?n:u(n,e,t)}function N(e,t){return t?{...e??{},"x-grok-conv-id":t}:e}const P=(e,n,i={})=>{let a=r();return(async()=>{try{let r=await A(),o=i.sessionId,s=t({...e,baseUrl:_,api:v},n,{...i,apiKey:r,headers:N(i.headers,o),onPayload:M(e.id,o)});for await(let e of s)a.push(e);a.end()}catch(t){console.error(`[xai-grok] Stream error:`,t instanceof Error?t.message:String(t)),a.push(j(e,t)),a.end()}})(),a},F=(e,t,i)=>{let a=r();return(async()=>{try{let r=await A(),o=i?.sessionId,s=n({...e,baseUrl:_,api:v},t,{...i,apiKey:r,headers:N(i?.headers,o),onPayload:M(e.id,o)});for await(let e of s)a.push(e);a.end()}catch(t){console.error(`[xai-grok] Stream error:`,t instanceof Error?t.message:String(t)),a.push(j(e,t)),a.end()}})(),a},I={id:d,name:`xAI Grok (SuperGrok OAuth)`,description:`Grok via xAI OAuth — uses your SuperGrok subscription, no API key needed. Default model is Grok Heavy.`,requiresApiKey:!1,requiresBaseUrl:!1,isOAuth:!0,defaultModelId:`grok-4.20-multi-agent-0309`,oauthTokenDomains:[`api.x.ai`,`*.x.ai`,`auth.x.ai`,`accounts.x.ai`],getModelIds:()=>x.map(e=>{let t=l(e);return e.thinkingLevelMap?{...t,thinkingLevelMap:e.thinkingLevelMap}:t}),onOAuthLoginIntercepted:async(e,t,n)=>{let r=w(),a=await T(r),c=E(),l=E(),u=new URL(p);u.searchParams.set(`response_type`,`code`),u.searchParams.set(`client_id`,h),u.searchParams.set(`redirect_uri`,g),u.searchParams.set(`scope`,n?.scopes??`openid profile email offline_access grok-cli:access api:access`),u.searchParams.set(`code_challenge`,a),u.searchParams.set(`code_challenge_method`,`S256`),u.searchParams.set(`state`,c),u.searchParams.set(`nonce`,l),u.searchParams.set(`plan`,`generic`),u.searchParams.set(`referrer`,`slicc`);let f=await e({authorizeUrl:u.toString(),redirectUriPattern:`http://127.0.0.1:56121/*`,onCapture:`close`});if(!f)throw new s(`xAI OAuth login was cancelled or timed out`,o.CALLBACK_TIMEOUT);let m=new URL(f),v=m.searchParams.get(`code`),y=m.searchParams.get(`state`);if(!v)throw new s(`xAI OAuth redirect did not include a code`,o.CODE_MISSING);if(y!==c)throw new s(`xAI OAuth state mismatch — possible CSRF, aborting`,o.STATE_MISMATCH);let b=await D(v,r);await i({providerId:d,accessToken:b.access_token,refreshToken:b.refresh_token,tokenExpiresAt:Date.now()+(b.expires_in??21600)*1e3,baseUrl:_}),t()},onOAuthLogout:async()=>{await i({providerId:d,accessToken:``})},onSilentRenew:async()=>{let e=k();if(!e?.refreshToken)return null;let t=await O(e.refreshToken);return t?.access_token?(await i({providerId:d,accessToken:t.access_token,refreshToken:t.refresh_token??e.refreshToken,tokenExpiresAt:Date.now()+(t.expires_in??21600)*1e3}),t.access_token):null}};function L(){e({api:y,stream:P,streamSimple:F})}export{o as XaiErrorCode,s as XaiOAuthError,I as config,L as register};
1
+ import{b as e,h as t,y as n}from"./bedrock-camp-wxdDcDkR.js";import{o as r}from"./transform-messages-C1X1O3BY.js";import{E as i,i as a}from"./account-store-B7QAqqi3.js";import"./kernel-worker-BMe--kS1.js";import{XaiErrorCode as o,XaiOAuthError as s}from"./xai-grok-errors-ByEMMSoz.js";import{resolveModels as c,toModelMetadata as l}from"./xai-grok-models-B0Tf--xf.js";import{sanitizePayload as u}from"./xai-grok-sanitize-CV6qvaEF.js";const d=`xai-grok`,f=`https://auth.x.ai`,p=`${f}/oauth2/authorize`,m=`${f}/oauth2/token`,h=`b1a00492-073a-47ea-816f-4c329264a828`,g=`http://127.0.0.1:56121/callback`,_=`https://api.x.ai/v1`,v=`openai-responses`,y=`${d}-openai`;function b(){return typeof process>`u`?null:{}.PI_XAI_OAUTH_MODELS??null}const x=c(b());function S(e){let t=``;for(let n of e)t+=String.fromCharCode(n);return btoa(t).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/,``)}function C(e){let t=new Uint8Array(e);return crypto.getRandomValues(t),t}function w(){return S(C(32))}async function T(e){let t=new TextEncoder().encode(e);return S(new Uint8Array(await crypto.subtle.digest(`SHA-256`,t)))}function E(){return S(C(16))}async function D(e,t){let n=new URLSearchParams({grant_type:`authorization_code`,code:e,redirect_uri:g,client_id:h,code_verifier:t}),r=await fetch(m,{method:`POST`,headers:{"Content-Type":`application/x-www-form-urlencoded`},body:n});if(!r.ok)throw new s(`xAI token exchange failed: ${r.status} ${await r.text()}`,o.TOKEN_EXCHANGE_FAILED);let i=await r.json();if(!i.access_token)throw new s(`xAI token exchange did not return access_token.`,o.TOKEN_EXCHANGE_INVALID);return i}async function O(e){try{let t=new URLSearchParams({grant_type:`refresh_token`,refresh_token:e,client_id:h}),n=await fetch(m,{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 k(){return a().find(e=>e.providerId===d)}async function A(){let e=k();if(!e?.accessToken)throw new s("Not signed in to xAI Grok — run /login or `oauth-token xai-grok`",o.AUTH_MISSING,!0);let t=e.tokenExpiresAt??0;if(t&&Date.now()+6e4<t)return e.accessToken;if(e.refreshToken){let t=await O(e.refreshToken);if(t?.access_token)return await i({providerId:d,accessToken:t.access_token,refreshToken:t.refresh_token??e.refreshToken,tokenExpiresAt:Date.now()+(t.expires_in??21600)*1e3}),t.access_token}return e.accessToken}function j(e,t){return{type:`error`,reason:`error`,error:{role:`assistant`,content:[],api:y,provider:d,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 M(e,t){return n=>!n||typeof n!=`object`?n:u(n,e,t)}function N(e,t){return t?{...e??{},"x-grok-conv-id":t}:e}const P=(e,n,i={})=>{let a=r();return(async()=>{try{let r=await A(),o=i.sessionId,s=t({...e,baseUrl:_,api:v},n,{...i,apiKey:r,headers:N(i.headers,o),onPayload:M(e.id,o)});for await(let e of s)a.push(e);a.end()}catch(t){console.error(`[xai-grok] Stream error:`,t instanceof Error?t.message:String(t)),a.push(j(e,t)),a.end()}})(),a},F=(e,t,i)=>{let a=r();return(async()=>{try{let r=await A(),o=i?.sessionId,s=n({...e,baseUrl:_,api:v},t,{...i,apiKey:r,headers:N(i?.headers,o),onPayload:M(e.id,o)});for await(let e of s)a.push(e);a.end()}catch(t){console.error(`[xai-grok] Stream error:`,t instanceof Error?t.message:String(t)),a.push(j(e,t)),a.end()}})(),a},I={id:d,name:`xAI Grok (SuperGrok OAuth)`,description:`Grok via xAI OAuth — uses your SuperGrok subscription, no API key needed. Default model is Grok Heavy.`,requiresApiKey:!1,requiresBaseUrl:!1,isOAuth:!0,defaultModelId:`grok-4.20-multi-agent-0309`,oauthTokenDomains:[`api.x.ai`,`*.x.ai`,`auth.x.ai`,`accounts.x.ai`],getModelIds:()=>x.map(e=>{let t=l(e);return e.thinkingLevelMap?{...t,thinkingLevelMap:e.thinkingLevelMap}:t}),onOAuthLoginIntercepted:async(e,t,n)=>{let r=w(),a=await T(r),c=E(),l=E(),u=new URL(p);u.searchParams.set(`response_type`,`code`),u.searchParams.set(`client_id`,h),u.searchParams.set(`redirect_uri`,g),u.searchParams.set(`scope`,n?.scopes??`openid profile email offline_access grok-cli:access api:access`),u.searchParams.set(`code_challenge`,a),u.searchParams.set(`code_challenge_method`,`S256`),u.searchParams.set(`state`,c),u.searchParams.set(`nonce`,l),u.searchParams.set(`plan`,`generic`),u.searchParams.set(`referrer`,`slicc`);let f=await e({authorizeUrl:u.toString(),redirectUriPattern:`http://127.0.0.1:56121/*`,onCapture:`close`});if(!f)throw new s(`xAI OAuth login was cancelled or timed out`,o.CALLBACK_TIMEOUT);let m=new URL(f),v=m.searchParams.get(`code`),y=m.searchParams.get(`state`);if(!v)throw new s(`xAI OAuth redirect did not include a code`,o.CODE_MISSING);if(y!==c)throw new s(`xAI OAuth state mismatch — possible CSRF, aborting`,o.STATE_MISMATCH);let b=await D(v,r);await i({providerId:d,accessToken:b.access_token,refreshToken:b.refresh_token,tokenExpiresAt:Date.now()+(b.expires_in??21600)*1e3,baseUrl:_}),t()},onOAuthLogout:async()=>{await i({providerId:d,accessToken:``})},onSilentRenew:async()=>{let e=k();if(!e?.refreshToken)return null;let t=await O(e.refreshToken);return t?.access_token?(await i({providerId:d,accessToken:t.access_token,refreshToken:t.refresh_token??e.refreshToken,tokenExpiresAt:Date.now()+(t.expires_in??21600)*1e3}),t.access_token):null}};function L(){e({api:y,stream:P,streamSimple:F})}export{o as XaiErrorCode,s as XaiOAuthError,I as config,L as register};
@@ -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-DqjICHRh.js"></script>
8
+ <script type="module" crossorigin src="/assets/main-BDx9HQkN.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-aKtaBQYM.js">
10
10
  <link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-Dezn_h7o.js">
11
11
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-zJ_50EbN.js">
@@ -20,7 +20,7 @@
20
20
  <link rel="modulepreload" crossorigin href="/assets/transform-messages-DzB_lMo-.js">
21
21
  <link rel="modulepreload" crossorigin href="/assets/bedrock-camp-D64i9rke.js">
22
22
  <link rel="modulepreload" crossorigin href="/assets/tool-ui-YOPqzMmL.js">
23
- <link rel="modulepreload" crossorigin href="/assets/account-store-BcAPWTGv.js">
23
+ <link rel="modulepreload" crossorigin href="/assets/account-store-C8na8kHM.js">
24
24
  <link rel="modulepreload" crossorigin href="/assets/clipboard-DgFtRQbq.js">
25
25
  </head>
26
26
  <body>
@@ -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-DqjICHRh.js"></script>
8
+ <script type="module" crossorigin src="/assets/main-BDx9HQkN.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/assets/chunk-aKtaBQYM.js">
10
10
  <link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-Dezn_h7o.js">
11
11
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-zJ_50EbN.js">
@@ -20,7 +20,7 @@
20
20
  <link rel="modulepreload" crossorigin href="/assets/transform-messages-DzB_lMo-.js">
21
21
  <link rel="modulepreload" crossorigin href="/assets/bedrock-camp-D64i9rke.js">
22
22
  <link rel="modulepreload" crossorigin href="/assets/tool-ui-YOPqzMmL.js">
23
- <link rel="modulepreload" crossorigin href="/assets/account-store-BcAPWTGv.js">
23
+ <link rel="modulepreload" crossorigin href="/assets/account-store-C8na8kHM.js">
24
24
  <link rel="modulepreload" crossorigin href="/assets/clipboard-DgFtRQbq.js">
25
25
  </head>
26
26
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sliccy",
3
- "version": "4.2.0",
3
+ "version": "4.3.0",
4
4
  "description": "Browser-based coding agent with thin CLI server",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -59,11 +59,12 @@
59
59
  "test:server-integration": "vitest run --config packages/node-server/tests/integration/server/vitest.config.ts",
60
60
  "test:e2e": "npx playwright test --config packages/webapp/tests/e2e/playwright.config.ts",
61
61
  "start:extension": "npm run build -w @slicc/chrome-extension && npm run dev -- --profile=extension",
62
- "lint": "biome check --write . && prettier --write . && npm run lint:docs && npm run lint:skills && npm run lint:no-innerhtml",
63
- "lint:ci": "biome check . && prettier --check . && npm run lint:docs && npm run lint:skills -- --strict && npm run lint:no-innerhtml",
62
+ "lint": "biome check --write . && prettier --write . && npm run lint:docs && npm run lint:skills && npm run lint:no-innerhtml && npm run lint:patches",
63
+ "lint:ci": "biome check . && prettier --check . && npm run lint:docs && npm run lint:skills -- --strict && npm run lint:no-innerhtml && npm run lint:patches",
64
64
  "lint:docs": "node packages/dev-tools/tools/check-doc-sizes.mjs",
65
65
  "lint:skills": "node packages/dev-tools/tools/lint-skills.mjs",
66
66
  "lint:no-innerhtml": "node packages/dev-tools/tools/check-no-innerhtml.mjs",
67
+ "lint:patches": "node packages/dev-tools/patch-reconcile/check-patches.mjs",
67
68
  "lint:swift": "npm run lint -w @slicc/swift-server && npm run lint -w @slicc/swift-launcher && cd packages/ios-app && swiftlint lint",
68
69
  "deadcode": "knip --include files,dependencies,devDependencies,unlisted,binaries,unresolved,duplicates",
69
70
  "deadcode:full": "knip",
@@ -1 +0,0 @@
1
- import{m as e}from"./wc-live-C_qPXh6O.js";export{e as setDipExecHandler};
@@ -1,5 +0,0 @@
1
- [`unpkg`,`com`].join(`.`);const e=[`esm`,`sh`].join(`.`);[`cdn`,`jsdelivr`,`net`].join(`.`);function t(e,t){return new URL(t,`https://${e}`)}function n(n,r={}){let i=t(e,n.startsWith(`/`)?n:`/${n}`),a=[];if(r.bundle&&a.push(`bundle`),r.target&&a.push(`target=${encodeURIComponent(r.target)}`),r.query)for(let[e,t]of Object.entries(r.query))a.push(t===!0?e:`${e}=${encodeURIComponent(t)}`);return a.length>0&&(i.search=`?${a.join(`&`)}`),i}var r=class extends Error{status;statusText;url;body;constructor(e,t,n,r){let a=typeof r==`string`&&r?`: ${r.slice(0,200)}`:r&&typeof r==`object`?`: ${i(r).slice(0,200)}`:``;super(`HTTP ${e} ${t} ${n}${a}`),this.status=e,this.statusText=t,this.url=n,this.body=r,this.name=`HttpError`}};function i(e){try{return JSON.stringify(e)}catch{return String(e)}}function a(e){return new Promise(t=>setTimeout(t,e))}function o(e,t,n){let r;if(r=/^[a-z][a-z0-9+.-]*:\/\//i.test(t)?t:e?`${e.endsWith(`/`)?e.slice(0,-1):e}${t.startsWith(`/`)?t:`/${t}`}`:t,!n)return r;let i=[];for(let[e,t]of Object.entries(n))if(t!=null)if(Array.isArray(t))for(let n of t)n!=null&&i.push(`${encodeURIComponent(e)}=${encodeURIComponent(String(n))}`);else i.push(`${encodeURIComponent(e)}=${encodeURIComponent(String(t))}`);return i.length===0?r:r+(r.includes(`?`)?`&`:`?`)+i.join(`&`)}function s(e,t){let n={};if(e)for(let[t,r]of Object.entries(e))n[t]=r;if(t)for(let[e,r]of Object.entries(t))n[e]=r;return n}function c(e){if(!e)return!1;let t=e.toLowerCase();return t.startsWith(`application/json`)||/[+/]json(;|$|\s)/.test(t)}function l(e){if(!e)return null;let t=e.trim();if(!t)return null;if(/^\d+(\.\d+)?$/.test(t)){let e=Number(t);if(Number.isFinite(e)&&e>=0)return Math.round(e*1e3)}let n=Date.parse(t);if(Number.isFinite(n)){let e=n-Date.now();return e>0?e:0}return null}async function u(e){if(c(e.headers.get(`content-type`))){let t=await e.text();if(!t)return null;try{return JSON.parse(t)}catch{return t}}return e.text()}function d(e,t){if(e!=null)return typeof e==`string`||e instanceof ArrayBuffer||ArrayBuffer.isView(e)||typeof Blob<`u`&&e instanceof Blob||typeof FormData<`u`&&e instanceof FormData||typeof URLSearchParams<`u`&&e instanceof URLSearchParams||typeof ReadableStream<`u`&&e instanceof ReadableStream?e:typeof e==`object`?(Object.keys(t).some(e=>e.toLowerCase()===`content-type`)||(t[`Content-Type`]=`application/json`),JSON.stringify(e)):String(e)}function f(e){let t=e.sleep??a;function n(n){let i=new Set(n.retry?.on??[]),a=Math.max(1,Math.trunc(n.retry?.maxAttempts??1));async function c(c,f,p={}){let m=o(n.baseUrl,f,p.params),h=s(n.headers,p.headers);if(n.token){let e=await n.token({method:c,path:f,url:m});e&&(Object.keys(h).some(e=>e.toLowerCase()===`authorization`)||(h.Authorization=`Bearer ${e}`))}let g=d(p.body,h),_={method:c,headers:h};g!==void 0&&(_.body=g);let v=null;for(let o=0;o<a;o++){let s=n.timeoutMs?new AbortController:null,c=s?setTimeout(()=>s.abort(Error(`timeout`)),n.timeoutMs):null,d=p.signal&&s?.signal?AbortSignal.any([p.signal,s.signal]):p.signal??s?.signal,f=d?{..._,signal:d}:_,h;try{h=await e.fetch(m,f)}finally{c!==null&&clearTimeout(c)}if(v=h,h.ok){let e=await u(h);return p.raw?{body:e,headers:Object.fromEntries(h.headers.entries()),status:h.status}:e}if(!(o+1<a&&i.has(h.status))){let e=await u(h).catch(()=>null);throw new r(h.status,h.statusText,m,e)}let g=l(h.headers.get(`retry-after`)),y=500*2**o;await t(g===null?y:g)}if(v){let e=await u(v).catch(()=>null);throw new r(v.status,v.statusText,m,e)}throw Error(`http: no attempts made for ${c} ${m}`)}return Object.freeze({get:((e,t)=>c(`GET`,e,t)),post:((e,t)=>c(`POST`,e,t)),put:((e,t)=>c(`PUT`,e,t)),patch:((e,t)=>c(`PATCH`,e,t)),delete:((e,t)=>c(`DELETE`,e,t))})}return Object.freeze({client:n})}function p(e){let t=[],n={},r=[],i=(e,t)=>{if(e in n){let r=n[e];Array.isArray(r)?r.push(String(t)):n[e]=[String(r),String(t)]}else n[e]=t},a=2;for(;a<e.length;){let n=e[a];if(n===`--`){r.push(...e.slice(a+1));break}if(n.startsWith(`--`)){let t=n.slice(2),r=t.indexOf(`=`);if(r!==-1){i(t.slice(0,r),t.slice(r+1)),a++;continue}let o=e[a+1];if(o!==void 0&&!o.startsWith(`-`)){i(t,o),a+=2;continue}i(t,!0),a++;continue}if(n.startsWith(`-`)&&n.length>1){for(let e of n.slice(1))i(e,!0);a++;continue}t.push(n),a++}return{positional:t,flags:n,subcommand:t.length>0&&/^[a-z][\w-]*$/i.test(t[0])?t[0]:null,passthrough:r}}function m(e){let t=[...e];return Object.defineProperty(t,"parseFlags",{value:()=>p(t),enumerable:!1,writable:!1,configurable:!1}),t}function h(e){let t=e=>{if(typeof e==`string`)return e;if(e instanceof Error)return e.message;if(e==null)return String(e);try{return JSON.stringify(e)}catch{return String(e)}},n=(e,t,n)=>t===void 0?`${e(`Error:`)} ${n}\n`:t===``?`${e(n)}\n`:`${e(`${t}:`)} ${n}\n`,r=(t,n)=>t===void 0?`${e.color.yellow(`Warning:`)} ${n}\n`:t===``?`${e.color.yellow(n)}\n`:`${e.color.yellow(`${t}:`)} ${n}\n`;return{die(r,i){let a=typeof i==`number`?i:i?.exitCode??1,o=typeof i==`object`&&i&&`prefix`in i?i.prefix:void 0,s=t(r);throw e.writeStderr(n(e.color.red,o,s)),e.exit(a),Error(`unreachable`)},out(t){if(typeof t==`string`){e.writeStdout(t.endsWith(`
2
- `)?t:`${t}\n`);return}try{e.writeStdout(`${JSON.stringify(t,null,2)}\n`)}catch{e.writeStdout(`${String(t)}\n`)}},warn(n,i){let a=typeof i==`object`&&i&&`prefix`in i?i.prefix:void 0;e.writeStderr(r(a,t(n)))},help(t){throw e.writeStdout(t.endsWith(`
3
- `)?t:`${t}\n`),e.exit(0),Error(`unreachable`)}}}const g={reset:`\x1B[0m`,green:`\x1B[32m`,red:`\x1B[31m`,yellow:`\x1B[33m`,gray:`\x1B[90m`,bold:`\x1B[1m`,cyan:`\x1B[36m`,dim:`\x1B[2m`};function _(e){let t=e.isTTY&&!e.noColor,n=e=>n=>t?`${e}${n}${g.reset}`:String(n);return{enabled:t,green:n(g.green),red:n(g.red),yellow:n(g.yellow),gray:n(g.gray),bold:n(g.bold),cyan:n(g.cyan),dim:n(g.dim)}}const v={ms:1,s:1e3,m:6e4,h:36e5,d:864e5,w:6048e5,M:26298e5,y:315576e5};function y(e){if(typeof e==`number`&&Number.isFinite(e))return Math.trunc(e);if(typeof e!=`string`)throw TypeError(`time.parseDuration: spec must be string or number`);let t=e.trim(),n=/^([0-9]+(?:\.[0-9]+)?)\s*(ms|s|m|h|d|w|M|y)?$/.exec(t);if(!n)throw RangeError(`time.parseDuration: unrecognized spec "${e}"`);let r=Number(n[1]),i=n[2]??`ms`;return Math.trunc(r*v[i])}function b(e){return e<10?`0${e}`:String(e)}const x={parseDuration:y,ago(e,t=new Date){return new Date(t.getTime()-y(e))},range(e,t=new Date){let n=new Date(t.getTime());return{start:new Date(n.getTime()-y(e)),end:n}},future(e,t=new Date){let n=new Date(t.getTime());return{start:n,end:new Date(n.getTime()+y(e))}},gmailDate(e,t=new Date){let n=new Date(t.getTime()-y(e));return`${n.getFullYear()}/${b(n.getMonth()+1)}/${b(n.getDate())}`}},S=/\u001b\[[0-9;]*m/g;function C(e){return e.replace(S,``)}function w(e){return C(e).length}function T(e,t){let n=String(e??``);return t<=0?``:w(n)<=t?n:t<=1?n.slice(0,t):`${C(n).slice(0,t-1)}…`}function E(e,t){let n=String(e??``),r=w(n);return r===t?n:r>t?T(n,t):n+` `.repeat(t-r)}function D(e,t){if(!e.length)return``;let n=Math.max(...e.map(e=>e.length)),r=[];for(let i=0;i<n;i++)if(t&&t[i]!==void 0)r[i]=t[i];else{let t=0;for(let n of e){let e=i<n.length?String(n[i]??``):``;t=Math.max(t,w(e))}r[i]=t}return e.map(e=>r.map((t,n)=>E(n<e.length?String(e[n]??``):``,t)).join(` `).replace(/\s+$/,``)).join(`
4
- `)}function O(e){return e instanceof Date?e:new Date(e)}function k(e,t=`short`){let n=O(e);if(Number.isNaN(n.getTime()))return String(e);if(t===`iso`)return n.toISOString();if(t===`locale`)return new Intl.DateTimeFormat(void 0,{dateStyle:`medium`}).format(n);if(t===`human`){let e=Date.now()-n.getTime(),t=Math.abs(e);if(t<6e4)return e>=0?`just now`:`in a moment`;let r=(t,n)=>e>=0?`${t} ${n}${t===1?``:`s`} ago`:`in ${t} ${n}${t===1?``:`s`}`;return t<36e5?r(Math.round(t/6e4),`minute`):t<864e5?r(Math.round(t/36e5),`hour`):t<26298e5?r(Math.round(t/864e5),`day`):t<315576e5?r(Math.round(t/26298e5),`month`):r(Math.round(t/315576e5),`year`)}return`${n.getFullYear()}-${b(n.getMonth()+1)}-${b(n.getDate())}`}const ee={trunc:T,col:E,table:D,date:k},te=async(e,t,n)=>{let r=Math.max(1,Math.trunc(e)||1),i=Array(t.length),a=0,o=[],s=async()=>{for(;;){let e=a++;if(e>=t.length)return;i[e]=await n(t[e],e)}};for(let e=0;e<Math.min(r,t.length);e++)o.push(s());return await Promise.all(o),i};var ne=class{port;nextId=1;pending=new Map;eventSubscribers=new Map;handler;disposed=!1;constructor(e){this.port=e,this.handler=e=>{let t=e.data;if(t?.type===`realm-rpc-res`){let t=e.data,n=this.pending.get(t.id);if(!n)return;this.pending.delete(t.id),typeof t.error==`string`?n.reject(Error(t.error)):n.resolve(t.result);return}if(t?.type===`realm-event`){let t=e.data,n=this.eventSubscribers.get(t.channel);if(!n)return;for(let e of[...n])try{e(t.payload)}catch{}}},e.addEventListener(`message`,this.handler),e.start?.()}call(e,t,n=[]){if(this.disposed)return Promise.reject(Error(`realm-rpc: client disposed`));let r=this.nextId++,i={type:`realm-rpc-req`,id:r,channel:e,op:t,args:n};return new Promise((e,t)=>{this.pending.set(r,{resolve:e,reject:t}),this.port.postMessage(i)})}onEvent(e,t){if(this.disposed)return()=>{};let n=this.eventSubscribers.get(e);return n||(n=new Set,this.eventSubscribers.set(e,n)),n.add(t),()=>{let n=this.eventSubscribers.get(e);n&&(n.delete(t),n.size===0&&this.eventSubscribers.delete(e))}}dispose(){if(this.disposed)return;this.disposed=!0,this.port.removeEventListener(`message`,this.handler);let e=Error(`realm-rpc: client disposed`);for(let t of this.pending.values())t.reject(e);this.pending.clear(),this.eventSubscribers.clear()}};const A=new Set([`bcrypt`,`better-sqlite3`,`canvas`,`cpu-features`,`fsevents`,`leveldown`,`libxmljs`,`libxmljs2`,`node-gyp-build`,`node-sass`,`puppeteer`,`robotjs`,`sass-embedded`,`sharp`,`snappy`,`sqlite3`,`tree-sitter`,`usb`]),j={sharp:` Use the built-in 'convert' shell command for image work.`,canvas:` Use the built-in 'convert' / OffscreenCanvas for image work.`,"better-sqlite3":` Use the built-in 'sqlite3' shell command (sql.js WASM).`,sqlite3:` Use the built-in 'sqlite3' shell command (sql.js WASM).`,bcrypt:` Use crypto.subtle.digest() with PBKDF2 / Argon2 in pure JS.`,puppeteer:` Use the built-in browser-automation shell commands.`};function M(e){let t=e?.SLICC_REALM_PREFETCH_BUDGET_MS;if(typeof t==`string`&&t.length>0){let e=Number.parseInt(t,10);if(Number.isFinite(e)&&e>0)return e}return 15e3}function N(e,t){let n=j[t]??``;return Error(`require('${e}'): '${t}' is a Node native module (C++ bindings) — it cannot run in the browser sandbox.${n}`)}function P(e,t,n){return new Promise((r,i)=>{let a=setTimeout(()=>{i(Error(`Timed out after ${t/1e3}s loading ${n}`))},t);e.then(e=>{clearTimeout(a),r(e)},e=>{clearTimeout(a),i(e)})})}function F(e){if(!e)return``;let t=e.lastIndexOf(`/`);return t<0?``:t===0?`/`:e.substring(0,t)}function I(e){return/^[A-Za-z0-9_\-./:@]+$/.test(e)?e:`'`+e.replace(/'/g,`'\\''`)+`'`}function L(e,t){return e===``?t:e===`/`?`/${t}`:`${e}/${t}`}function R(e){let t=F(e.argv[1]??``),n=L(t,`references`),r=L(t,`assets`),i=L(t,`.config`);async function a(){let t;try{t=await e.fs.exists(i)}catch{return null}if(!t)return null;let n;try{n=await e.fs.readFile(i)}catch{return null}let r=typeof n==`string`?n:String(n);if(!r.trim())return null;let a;try{a=JSON.parse(r)}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`skill.config(): failed to parse ${i}: ${t}`)}if(a&&typeof a==`object`&&!Array.isArray(a))return a;throw Error(`skill.config(): ${i} must contain a JSON object`)}async function o(t){let n=await a();if(t===void 0)return n;if(typeof t!=`object`||!t||Array.isArray(t))throw TypeError(`skill.config(updates): updates must be a plain object`);let r={...n??{},...t};return await e.fs.writeFile(i,JSON.stringify(r,null,2)+`
5
- `),r}async function s(t){if(typeof t!=`string`||!t.trim())throw TypeError(`skill.token(providerId): providerId must be a non-empty string`);let n=`oauth-token ${I(t)}`,{stdout:r,stderr:i,exitCode:a}=await e.exec(n);if(a!==0){let e=i.trim()||`oauth-token exited with code ${a}`;throw Error(`skill.token('${t}'): ${e}`)}return r.replace(/\r?\n+$/,``)}return Object.freeze({dir:t,refs:n,assets:r,config:o,token:s})}const z=new Set([`http`,`https`,`net`,`tls`,`dgram`,`dns`,`cluster`,`worker_threads`,`child_process`,`crypto`,`os`,`stream`,`zlib`,`vm`,`v8`,`perf_hooks`,`readline`,`repl`,`tty`,`inspector`]),B=new Set([`fs`,`process`,`buffer`]);var V=class extends Error{code;constructor(e){super(`Process exited with code ${e}`),this.code=e,this.name=`NodeExitError`}};function H(e){let t=/\brequire\s*\(\s*(['"`])([^'"`\s]+)\1\s*\)/g,n=new Set,r;for(;(r=t.exec(e))!==null;)n.add(r[2]);return[...n]}function U(e){if(typeof e==`string`)return e;if(e==null)return String(e);try{return JSON.stringify(e)}catch{return String(e)}}async function W(e,t,r=re){let i=[],a=[],o=e=>{i.push(typeof e==`string`?e:String(e))},s=e=>{a.push(typeof e==`string`?e:String(e))},c={log:(...e)=>o(`${e.map(U).join(` `)}\n`),info:(...e)=>o(`${e.map(U).join(` `)}\n`),warn:(...e)=>s(`${e.map(U).join(` `)}\n`),error:(...e)=>s(`${e.map(U).join(` `)}\n`)},l=e.stdin??``,u=!1,d={isTTY:!1,read(){return u?null:(u=!0,l)},toString(){return l},[Symbol.asyncIterator](){return{async next(){return u?{value:void 0,done:!0}:(u=!0,{value:l,done:!1})}}}},p=m(e.argv),g=!!e.env?.NO_COLOR,v={argv:p,env:e.env,cwd:()=>e.cwd,exit:e=>{throw new V(Number.isFinite(e)?Number(e):0)},stdin:d,stdout:{write:o,isTTY:!g},stderr:{write:s,isTTY:!g}},y=_({isTTY:!g,noColor:g}),b=h({writeStdout:o,writeStderr:s,exit:e=>{throw new V(e)},color:y}),S=new ne(t),C={readFile:e=>S.call(`vfs`,`readFile`,[e]),readFileBinary:e=>S.call(`vfs`,`readFileBinary`,[e]),writeFile:(e,t)=>S.call(`vfs`,`writeFile`,[e,t]),writeFileBinary:(e,t)=>S.call(`vfs`,`writeFileBinary`,[e,t]),readDir:e=>S.call(`vfs`,`readDir`,[e]),exists:e=>S.call(`vfs`,`exists`,[e]),stat:e=>S.call(`vfs`,`stat`,[e]),mkdir:e=>S.call(`vfs`,`mkdir`,[e]),rm:e=>S.call(`vfs`,`rm`,[e]),fetchToFile:async(e,t)=>{let n=await F(e);if(!n.ok)throw Error(`fetch ${n.status} ${n.statusText}`);let r=new Uint8Array(await n.arrayBuffer());return await S.call(`vfs`,`writeFileBinary`,[t,r]),r.byteLength}},w=Object.assign(e=>S.call(`exec`,`run`,[e]),{spawn:e=>S.call(`exec`,`spawn`,[e])}),T=R({argv:e.argv,fs:C,exec:w}),E={findTab:e=>S.call(`browser`,`findTab`,[ae(e)]),ensureTab:(e,t={})=>S.call(`browser`,`ensureTab`,[e,oe(t)]),eval:(e,t)=>S.call(`browser`,`eval`,[K(e),q(t,!1)]),evalAsync:(e,t)=>S.call(`browser`,`evalAsync`,[K(e),q(t,!0)]),cookie:(e,t)=>S.call(`browser`,`cookie`,[K(e),t]),localStorage:(e,t)=>S.call(`browser`,`localStorage`,[K(e),t]),fetch:(e,t,n={})=>S.call(`browser`,`evalAsync`,[K(e),ie(t,n)]),websocket:se(S)},D=ce(S),O=le(S),k=ue(S),j=f({fetch:F});async function F(e,t){let n=e instanceof Request?e.url:e instanceof URL?e.toString():String(e),r=await S.call(`fetch`,`request`,[n,G(t,e)]),i=r.body.byteLength===0?null:r.body.buffer.slice(r.body.byteOffset,r.body.byteOffset+r.body.byteLength),a=new Response(i,{status:r.status,statusText:r.statusText,headers:r.headers});return Object.defineProperty(a,"url",{value:r.url||n}),a}let I=H(e.code).map(e=>e.startsWith(`node:`)?e.slice(5):e).filter(e=>!B.has(e)&&!z.has(e)),L=I.filter(e=>A.has(e)),W=I.filter(e=>!A.has(e));for(let e of L)s(`Warning: ${N(e,e).message}\n`);let J=Object.create(null),Y=M(e.env);if(W.length>0){let e=await Promise.allSettled(W.map(async e=>{let t=await P(r(e),Y,`require('${e}')`);J[e]=t&&`default`in t?t.default:t}));for(let t=0;t<e.length;t++){let n=e[t];if(n.status===`rejected`){let e=n.reason instanceof Error?n.reason.message:String(n.reason);s(`Warning: failed to pre-load require('${W[t]}'): ${e}\n`)}}}let X=e=>{let t=e.startsWith(`node:`)?e.slice(5):e;if(t===`fs`)return C;if(t===`process`)return v;if(t===`buffer`)return{Buffer:globalThis.Buffer};if(t===`path`){if(`path`in J)return J.path;if(e in J)return J[e];throw Error(`require('${e}'): path module not pre-loaded. Add require('path') as a static import.`)}if(A.has(t))throw N(e,t);if(z.has(t))throw Error(`require('${e}'): Node built-in '${t}' is not available in the browser environment.${{http:` Use fetch() instead.`,https:` Use fetch() instead.`,child_process:` Use exec() which is available as a shell bridge.`,crypto:` Use globalThis.crypto (Web Crypto API) instead.`}[t]||``}`);if(e in J)return J[e];if(t in J)return J[t];throw Error(`require('${e}'): module not pre-loaded. Use a string literal so it can be pre-fetched, or use \`await import('${n(e).toString()}')\` directly.`)},Z={exports:{},filename:e.filename},Q=0;try{let t=Object.getPrototypeOf(async function(){}).constructor;await new t(`fs`,`process`,`console`,`require`,`module`,`exports`,`exec`,`fetch`,`skill`,`http`,`browser`,`usb`,`serial`,`hid`,`cli`,`c`,`time`,`fmt`,`pool`,`"use strict";\n${e.code}`)(C,v,c,X,Z,Z.exports,w,F,T,j,E,D,O,k,b,y,x,ee,te)}catch(e){e instanceof V?Q=e.code:(s(`${e instanceof Error?e.stack??e.message:String(e)}\n`),Q=1)}S.dispose();let $={type:`realm-done`,stdout:i.join(``),stderr:a.join(``),exitCode:Q};t.postMessage($)}function G(e,t){if(!e&&!(t instanceof Request))return;let n=t instanceof Request?t:null,r=(e?.method??n?.method??`GET`).toUpperCase(),i={};if(e?.headers)if(e.headers instanceof Headers)e.headers.forEach((e,t)=>{i[t]=e});else if(Array.isArray(e.headers))for(let[t,n]of e.headers)i[t]=n;else Object.assign(i,e.headers);else n&&n.headers.forEach((e,t)=>{i[t]=e});let a;return e?.body!==void 0&&e?.body!==null&&e?.body!==``&&(a=typeof e.body==`string`?e.body:String(e.body)),{method:r,headers:i,body:a}}async function re(e){return await import(n(e).toString())}function K(e){if(typeof e==`string`)return e;if(e&&typeof e==`object`&&typeof e.targetId==`string`)return e.targetId;throw TypeError(`browser: expected a tab handle or targetId string`)}function q(e,t){if(typeof e==`function`)return`(${e.toString()})()`;if(typeof e==`string`)return e;throw TypeError(`browser.eval/evalAsync: source must be a function or string`)}function ie(e,t={}){let n={},r=t.headers??{};for(let[e,t]of Object.entries(r))typeof t==`string`&&(n[e]=t);let i=typeof t.method==`string`?t.method:`GET`,a=t.credentials===`same-origin`||t.credentials===`omit`?t.credentials:`include`,o;t.body!==void 0&&t.body!==null&&(typeof t.body==`string`?o=t.body:(o=JSON.stringify(t.body),Object.keys(n).some(e=>e.toLowerCase()===`content-type`)||(n[`Content-Type`]=`application/json`)));let s={method:i,credentials:a,headers:n};o!==void 0&&(s.body=o);for(let e of[`mode`,`cache`,`redirect`,`referrer`,`referrerPolicy`,`integrity`,`keepalive`]){let n=t[e];n!==void 0&&(s[e]=n)}return`(async () => {const r = await fetch(`+JSON.stringify(e)+`, `+JSON.stringify(s)+`);const h = {};r.headers.forEach((v, k) => { h[k] = v; });const ct = r.headers.get('content-type') || '';let b;if (ct.indexOf('application/json') !== -1) {try { b = await r.json(); } catch (e) { b = await r.text(); }} else { b = await r.text(); }return { ok: r.ok, status: r.status, headers: h, body: b };})()`}function ae(e){let t={};return e.domain!==void 0&&(t.domain=e.domain),e.urlMatch!==void 0&&(t.urlMatch=e.urlMatch instanceof RegExp?e.urlMatch.source:e.urlMatch),t}function oe(e){return e.matchUrl===void 0?{}:{matchUrl:e.matchUrl instanceof RegExp?e.matchUrl.source:e.matchUrl}}function se(e){function t(t){return{...t,async update(n){let r={};return n.urlMatch!==void 0&&(r.urlMatch=n.urlMatch===null?null:n.urlMatch instanceof RegExp?n.urlMatch.source:n.urlMatch),n.filter!==void 0&&(r.filter=n.filter),e.call(`browser`,`wsUpdate`,[t.id,r])},async close(){return e.call(`browser`,`wsClose`,[t.id])}}}return{on(n,r={}){let i=K(n),a=r.urlMatch===void 0?void 0:r.urlMatch instanceof RegExp?r.urlMatch.source:r.urlMatch,o,s={filter(e){if(typeof e==`function`||typeof e==`string`)throw TypeError(`browser.websocket: filter must be a declarative JSON object, not a function or string`);return o=e,s},async forward(n){return t(await e.call(`browser`,`wsObserve`,[{targetId:i,urlMatch:a,filter:o,forward:n}]))}};return s},async list(){return e.call(`browser`,`wsList`,[])}}}function J(e){if(e instanceof Uint8Array)return e;if(ArrayBuffer.isView(e))return new Uint8Array(e.buffer,e.byteOffset,e.byteLength);if(e instanceof ArrayBuffer)return new Uint8Array(e);throw TypeError(`expected an ArrayBuffer or typed array`)}function Y(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}function X(e){return e==null?[]:Array.isArray(e)?e:[e]}function Z(e,t){let n=t.handle,r=e=>({status:e.status,data:Y(e.bytes)});return{...t,open:()=>e.call(`usb`,`open`,[n]),close:()=>e.call(`usb`,`close`,[n]),reset:()=>e.call(`usb`,`reset`,[n]),selectConfiguration:t=>e.call(`usb`,`selectConfig`,[n,t]),claimInterface:t=>e.call(`usb`,`claim`,[n,t]),releaseInterface:t=>e.call(`usb`,`release`,[n,t]),controlTransferIn:async(t,i)=>r(await e.call(`usb`,`controlIn`,[n,t,i])),controlTransferOut:(t,r)=>e.call(`usb`,`controlOut`,[n,t,J(r)]),transferIn:async(t,i)=>r(await e.call(`usb`,`transferIn`,[n,t,i])),transferOut:(t,r)=>e.call(`usb`,`transferOut`,[n,t,J(r)])}}function ce(e){return{list:async()=>(await e.call(`usb`,`list`,[])).map(t=>Z(e,t)),request:async t=>Z(e,await e.call(`usb`,`request`,[X(t)]))}}function Q(e,t){let n=t.handle;return{...t,open:t=>e.call(`serial`,`open`,[n,t]),close:()=>e.call(`serial`,`close`,[n]),read:(t={})=>e.call(`serial`,`read`,[n,{maxBytes:t.maxBytes??t.bytes,until:t.until?J(t.until):void 0,timeoutMs:t.timeoutMs}]),write:t=>e.call(`serial`,`write`,[n,J(t)]),getSignals:()=>e.call(`serial`,`getSignals`,[n]),setSignals:t=>e.call(`serial`,`setSignals`,[n,t])}}function le(e){return{list:async()=>(await e.call(`serial`,`list`,[])).map(t=>Q(e,t)),request:async t=>Q(e,await e.call(`serial`,`request`,[X(t)]))}}function $(e,t){let n=t.handle,r=new Set,i=new Set,a=!1,o=null,s=e=>{let t=e;if(!t||t.handle!==n)return;let i={reportId:t.reportId,data:Y(t.bytes)};for(let e of[...r])try{e(i)}catch{}},c=()=>{a||(a=!0,o=e.onEvent?e.onEvent(`hid-input-report`,s):null,e.call(`hid`,`subscribeInputReports`,[n]).catch(()=>{a=!1,o?.(),o=null}))},l=()=>{!a||r.size>0||(a=!1,o?.(),o=null,e.call(`hid`,`unsubscribeInputReports`,[n]).catch(()=>{}))};return{...t,open:()=>e.call(`hid`,`open`,[n]),close:()=>e.call(`hid`,`close`,[n]),sendReport:(t,r)=>e.call(`hid`,`sendReport`,[n,t,J(r)]),sendFeatureReport:(t,r)=>e.call(`hid`,`sendFeatureReport`,[n,t,J(r)]),receiveFeatureReport:async t=>Y((await e.call(`hid`,`receiveFeatureReport`,[n,t])).bytes),addEventListener(e,t){if(e===`inputreport`)r.add(t),c();else if(e===`disconnect`)i.add(t);else throw TypeError(`hid device: unknown event type '${String(e)}'`)},removeEventListener(e,t){e===`inputreport`?(r.delete(t),l()):e===`disconnect`&&i.delete(t)},onInputReport(e){r.add(e),c()}}}function ue(e){return{list:async()=>(await e.call(`hid`,`list`,[])).map(t=>$(e,t)),request:async t=>{let n=(await e.call(`hid`,`request`,[X(t)]))[0];if(!n)throw Error(`No device selected.`);return $(e,n)}}}const de={postMessage:(e,t)=>t?self.postMessage(e,t):self.postMessage(e),addEventListener:(e,t)=>self.addEventListener(e,t),removeEventListener:(e,t)=>self.removeEventListener(e,t)};self.addEventListener(`message`,e=>{if(e.data?.type!==`realm-init`)return;let t=e.data;t.kind===`js`&&W(t,de).catch(e=>{let t={type:`realm-error`,message:e instanceof Error?e.message:String(e)};self.postMessage(t)})});
@@ -1 +0,0 @@
1
- import{t as e}from"./provider-CkWZObGz.js";export{e as readMcpAuthEntries};
@@ -1 +0,0 @@
1
- import{t as e}from"./store-B3VfUVG6.js";import"./provider-Bu84IJif.js";export{e as readMcpAuthEntries};
@@ -1 +0,0 @@
1
- import{n as e,t}from"./proxy-error-9UvXMpzG.js";var n=new Map,r=new Map;function i(e){let t=e.length;return t===0?`0`:`${t}:${e.charCodeAt(0)}:${t>1?e.charCodeAt(1):0}:${t>2?e.charCodeAt(2):0}:${t>3?e.charCodeAt(3):0}:${t>4?e.charCodeAt(Math.floor(t/4)):0}:${t>4?e.charCodeAt(Math.floor(t/2)):0}:${t>4?e.charCodeAt(Math.floor(3*t/4)):0}:${e.charCodeAt(t-1)}`}function a(e,t){let r=i(e);n.set(r,t),setTimeout(()=>n.delete(r),1e4)}function o(e,t){r.set(e,t),setTimeout(()=>r.delete(e),1e4)}new TextDecoder;function s(e){if(typeof e!=`string`)return e;let t=new Uint8Array(e.length);for(let n=0;n<e.length;n++)t[n]=e.charCodeAt(n)&255;return t}function c(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 l(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 u(e){if(e){if(e instanceof Headers){let t={};return e.forEach((e,n)=>{t[n]=e}),t}return e}}var d=32*1024*1024;function f(e){if(!e)return!0;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`)}async function p(e,t){let n=e.headers.get(`content-type`)??``,r=await e.arrayBuffer(),i=new Uint8Array(r);if(!f(n)){let e=``;for(let t=0;t<i.length;t+=32768)e+=String.fromCharCode(...i.subarray(t,t+32768));a(e,i),t&&o(t,i)}return i}var m=u;function h(e,t){if(e){if(!f(t?.[`Content-Type`]??t?.[`content-type`]??``)){let t=s(e);return new Blob([t])}return e}}var g=c,_=l;async function v(e,t){let n=chrome.runtime.connect({name:`fetch-proxy.fetch`}),r=m(t?.headers),i=t?.method??`GET`,a=t?.body?h(t.body,r):void 0,o=g(r),s,c=!1;if(a!==void 0){let e=a instanceof Uint8Array?a:new Uint8Array(await new Response(a).arrayBuffer());if(e.byteLength>d)c=!0;else{let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);s=btoa(t)}}return new Promise((t,r)=>{let a=null,l=!1,u=[];n.onMessage.addListener(i=>{let o=i;if(o.type===`response-head`)a=o;else if(o.type===`response-chunk`){let e=atob(o.dataBase64),t=new Uint8Array(e.length);for(let n=0;n<e.length;n++)t[n]=e.charCodeAt(n);u.push(t)}else if(o.type===`response-end`){if(!a){l=!0,r(Error(`fetch-proxy: response-end before response-head`));return}let i=u.reduce((e,t)=>e+t.length,0),o=new Uint8Array(i),s=0;for(let e of u)o.set(e,s),s+=e.length;let c=new Headers;for(let[e,t]of Object.entries(a.headers))c.set(e,String(t));p(new Response(o,{status:a.status,statusText:a.statusText,headers:c}),e).then(n=>{let r=_(a.headers);t({status:a.status,statusText:a.statusText,headers:r,body:n,url:e})}).catch(r),l=!0,n.disconnect()}else o.type===`response-error`&&(l=!0,r(Error(o.error)),n.disconnect())}),n.onDisconnect.addListener(()=>{l||r(Error(a?`fetch-proxy port disconnected mid-stream`:`fetch-proxy port disconnected before response`))}),n.postMessage({type:`request`,url:e,method:i,headers:o,bodyBase64:s,requestBodyTooLarge:c})})}function y(){return typeof chrome<`u`&&chrome?.runtime?.id?v:async(n,r)=>{let i=r?.method??`GET`,a={...g(m(r?.headers)),"X-Target-URL":n},o={method:i,headers:a,cache:`no-store`};r?.body&&![`GET`,`HEAD`].includes(i)&&(o.body=h(r.body,a));let s=await fetch(`/api/fetch-proxy`,o);if(t(s))throw Error(await e(s));let c=await p(s,n),l={};s.headers.forEach((e,t)=>{l[t]=e});let u=_(l);return{status:s.status,statusText:s.statusText,headers:u,body:c,url:n}}}export{y as createProxiedFetch};
@@ -1 +0,0 @@
1
- import{l as e}from"./wc-live-C_qPXh6O.js";export{e as readSessionsIndex};
@@ -1 +0,0 @@
1
- import{g as e,h as t}from"./wc-live-C_qPXh6O.js";export{t as setupSudoExtension,e as setupSudoStandalone};