sliccy 6.146.2 → 6.147.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/node-server/fetch-proxy-gzip.d.ts +34 -0
- package/dist/node-server/fetch-proxy-gzip.js +123 -0
- package/dist/node-server/fetch-proxy-headers.js +7 -0
- package/dist/node-server/routes/fetch-proxy.js +21 -12
- package/dist/ui/.vite/manifest.json +170 -158
- package/dist/ui/assets/{SKILL-CkfptFag.js → SKILL-2Mi1pQ3F.js} +30 -4
- package/dist/ui/assets/SKILL-BmzmDv0e.js +1 -0
- package/dist/ui/assets/{account-store-BRUCr96D.js → account-store-B1iVHXUI.js} +1 -1
- package/dist/ui/assets/{account-store-BSBnFFPS.js → account-store-CWEAADeP.js} +1 -1
- package/dist/ui/assets/{adobe-D2ONtf9b.js → adobe-ONrE9NWb.js} +1 -1
- package/dist/ui/assets/{adobe-BePmoDqc.js → adobe-j0lX3kiM.js} +1 -1
- package/dist/ui/assets/{agent-bridge-DslQDtty.js → agent-bridge-KyX8EP3Z.js} +1 -1
- package/dist/ui/assets/{agent-panels-Ds3CUde9.js → agent-panels-CH_BrlMR.js} +1 -1
- package/dist/ui/assets/{apply-layout-CuJIEJ0g.js → apply-layout-BM1O4DWE.js} +1 -1
- package/dist/ui/assets/{apps-xYbVYVNJ.js → apps-x95UwLLV.js} +1 -1
- package/dist/ui/assets/{azure-openai-DLXgdMoO.js → azure-openai-BSpFid3b.js} +1 -1
- package/dist/ui/assets/{azure-openai-C9RMKMwt.js → azure-openai-Bk_7bp5-.js} +1 -1
- package/dist/ui/assets/{budget-usage-source-DRsm-qIe.js → budget-usage-source-P-1c__Ag.js} +1 -1
- package/dist/ui/assets/{cdp-Bgplxqwh.js → cdp-C2bgdwiN.js} +1 -1
- package/dist/ui/assets/{cerebras-Bc5srro5.js → cerebras-0C_EDA3g.js} +1 -1
- package/dist/ui/assets/{cerebras-Bw_QvTrp.js → cerebras-BwhQpaNk.js} +1 -1
- package/dist/ui/assets/{composer-speech-B9r4JYxu.js → composer-speech-9tQyDjVE.js} +1 -1
- package/dist/ui/assets/{connect-surface-VgwGEglg.js → connect-surface-Jc9hJ1qB.js} +1 -1
- package/dist/ui/assets/{directed-approval--0iRHwbB.js → directed-approval-DNDKlU_3.js} +1 -1
- package/dist/ui/assets/es-BR4l6CGS.js +1 -0
- package/dist/ui/assets/feature-flags-COdcJUhl.js +1 -0
- package/dist/ui/assets/frozen-archive-format-B4efpvB9.js +1 -0
- package/dist/ui/assets/frozen-archive-writer-cEYcj5un.js +8 -0
- package/dist/ui/assets/{fs-CWmEOkSn.js → fs-DL9hfAka.js} +1 -1
- package/dist/ui/assets/{fs-sNrIPaO_.js → fs-QdZLjZ9G.js} +2 -2
- package/dist/ui/assets/{github-BL7xlelB.js → github-BO3ntG4f.js} +2 -2
- package/dist/ui/assets/{github-DNtfKMGK.js → github-Bz0_AFKA.js} +1 -1
- package/dist/ui/assets/{github-copilot-C62fDFcu.js → github-copilot-DGZmiwmz.js} +1 -1
- package/dist/ui/assets/{github-copilot-CtPhNQnK.js → github-copilot-Un-Y_WFH.js} +1 -1
- package/dist/ui/assets/{github-install-DOMbiICh.js → github-install-BCoi8VPT.js} +1 -1
- package/dist/ui/assets/{github-zip-BjQhOm6P.js → github-zip-BeOCyf5X.js} +1 -1
- package/dist/ui/assets/{hear-C4mXu7ZW.js → hear-CGE2BC1s.js} +1 -1
- package/dist/ui/assets/{help-DHpBUyiO.js → help-CSZPurcQ.js} +1 -1
- package/dist/ui/assets/{js-realm-worker-EoBKAZHX.js → js-realm-worker-DDM4WJwj.js} +1 -1
- package/dist/ui/assets/{kernel-worker-DacBBg8w.js → kernel-worker-Tz_0rnJe.js} +644 -644
- package/dist/ui/assets/live-session-snapshot-BnA6Mq0G.js +1 -0
- package/dist/ui/assets/{local-llm-BLnqY8h6.js → local-llm-CxgSeEYX.js} +1 -1
- package/dist/ui/assets/{local-llm-Cr6CTkbj.js → local-llm-DEkl-I_B.js} +1 -1
- package/dist/ui/assets/{main-w_xCet4j.js → main-DSiIT2Zw.js} +3 -3
- package/dist/ui/assets/{main-cherry-DLuhoDS1.js → main-cherry-BlU4TnQR.js} +1 -1
- package/dist/ui/assets/memory-v2-flag-C1duOEOb.js +1 -0
- package/dist/ui/assets/{mount-7bYA8pGl.js → mount-Deyjm5x3.js} +3 -3
- package/dist/ui/assets/{mount-recovery-DgGwhnxS.js → mount-recovery-soJELy8U.js} +1 -1
- package/dist/ui/assets/{mount-uOkkZNjk.js → mount-w5_9Ng9R.js} +1 -1
- package/dist/ui/assets/{new-session-DBtk1rCL.js → new-session-B8XzIc8Q.js} +2 -2
- package/dist/ui/assets/{oauth-bootstrap-DYxjJLsL.js → oauth-bootstrap-DfSZxwQE.js} +2 -2
- package/dist/ui/assets/{onboarding-orchestrator-B6T_Ny1B.js → onboarding-orchestrator-o3VViOFw.js} +1 -1
- package/dist/ui/assets/{openai-codex-BlCGePv3.js → openai-codex-C5RekyZV.js} +1 -1
- package/dist/ui/assets/{openai-codex-DkzYl_Av.js → openai-codex-CiayWsof.js} +1 -1
- package/dist/ui/assets/{openrouter-Cj2pVk0X.js → openrouter-B83RCbFs.js} +1 -1
- package/dist/ui/assets/{openrouter-DfxV_kXn.js → openrouter-DMQy-KKM.js} +1 -1
- package/dist/ui/assets/{openrouter-free-BjPH_kdE.js → openrouter-free-C0JGq62M.js} +1 -1
- package/dist/ui/assets/{openrouter-free-DldbK6sa.js → openrouter-free-SS7fpd0i.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-DgDO8d-n.js → openrouter-oauth-D5vNIEH9.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-CH1i_4Ro.js → openrouter-oauth-DUGD2y3m.js} +1 -1
- package/dist/ui/assets/{panel-rpc-handlers-Ae7e5szM.js → panel-rpc-handlers-CXwQrHsy.js} +2 -2
- package/dist/ui/assets/{panelize-shell-9kCQ9OZk.js → panelize-shell-DZDs3zYf.js} +1 -1
- package/dist/ui/assets/{provider-BtR7FzYX.js → provider-BI8YYBre.js} +2 -2
- package/dist/ui/assets/{provider-Cb_dptea.js → provider-CXxMpJkz.js} +1 -1
- package/dist/ui/assets/provider-settings-DGIFYqZZ.js +1 -0
- package/dist/ui/assets/provider-store-access-BPqDMr97.js +1 -0
- package/dist/ui/assets/provider-store-access-DwXuPmyu.js +1 -0
- package/dist/ui/assets/{providers-Bj5Jgeyh.js → providers-D6Ef5U-a.js} +1 -1
- package/dist/ui/assets/{providers-CCYUf1lu.js → providers-SXCyVs8S.js} +2 -2
- package/dist/ui/assets/{quick-llm-B8LK4tjq.js → quick-llm-m2zlZjFT.js} +1 -1
- package/dist/ui/assets/{recovery-screen-D-eWqkZz.js → recovery-screen-jVLbowtH.js} +1 -1
- package/dist/ui/assets/{run-Clc4oMMw.js → run-BSIpZdkj.js} +2 -2
- package/dist/ui/assets/{run-BSItVSs5.js → run-DKJHr_5p.js} +1 -1
- package/dist/ui/assets/{run-QTBA9VNJ.js → run-Da0sp26F.js} +1 -1
- package/dist/ui/assets/session-command-memory-Bh_U73Lu.js +21 -0
- package/dist/ui/assets/session-jsonl-BxhPJRfn.js +3 -0
- package/dist/ui/assets/session-jsonl-DcEZap-X.js +11 -0
- package/dist/ui/assets/session-search-index-CYtd-I68.js +3 -0
- package/dist/ui/assets/{setup-feature-flags-remote-C0aFgOXn.js → setup-feature-flags-remote-C-dQV79P.js} +1 -1
- package/dist/ui/assets/sidecar-repair-9ZhXBSsu.js +1 -0
- package/dist/ui/assets/{silent-renew-backoff-BXFOEcR4.js → silent-renew-backoff-Bt2GjeOj.js} +1 -1
- package/dist/ui/assets/{skills-DH0igvmk.js → skills-DjZ7Eln1.js} +1 -1
- package/dist/ui/assets/slicc-version-B3akX0fg.js +1 -0
- package/dist/ui/assets/{snapshot-B23VxS3Z.js → snapshot-CHRkEn1u.js} +1 -1
- package/dist/ui/assets/{snapshot-features-EdqS3LYW.js → snapshot-features-CChvVb35.js} +1 -1
- package/dist/ui/assets/{soundscape-DbhVL1J6.js → soundscape-JzbhDh5W.js} +1 -1
- package/dist/ui/assets/{speak-Nt2Xatm_.js → speak-jhy2qJPd.js} +1 -1
- package/dist/ui/assets/{sprinkle-manager-Gcr6PESp.js → sprinkle-manager-CvYiBryj.js} +1 -1
- package/dist/ui/assets/{sprinkle-renderer-BgznbYny.js → sprinkle-renderer-COXUa0Hf.js} +1 -1
- package/dist/ui/assets/{state-BiRW-NX3.js → state-5QPaUSSz.js} +1 -1
- package/dist/ui/assets/{store-Sz2R7uqe.js → store-CCVnZCWJ.js} +1 -1
- package/dist/ui/assets/{store-BgpATPUF.js → store-ve5mq2br.js} +1 -1
- package/dist/ui/assets/{sudo-DcFRMDHW.js → sudo-BZ-HbvCF.js} +1 -1
- package/dist/ui/assets/{sync-dialog-CG7oN3ii.js → sync-dialog-D6fstzeQ.js} +1 -1
- package/dist/ui/assets/{transformers-env-CAqo4XNv.js → transformers-env-BVx9lRjS.js} +1 -1
- package/dist/ui/assets/{tray-sidecar-DH_L8_VL.js → tray-sidecar-6nc9OtBv.js} +1 -1
- package/dist/ui/assets/{upgrade-detection-CIrFLX7C.js → upgrade-detection-7OZzvJpD.js} +1 -1
- package/dist/ui/assets/{voice-reply-S9gknH7c.js → voice-reply-CutW51kw.js} +1 -1
- package/dist/ui/assets/{wc-attach-Dh-J7Xnm.js → wc-attach-C4gIYF_M.js} +2 -2
- package/dist/ui/assets/{wc-extension-DGzZxlv0.js → wc-extension-BUXOk9jr.js} +2 -2
- package/dist/ui/assets/{wc-follower-CBYRavvs.js → wc-follower-BrUt1SmG.js} +3 -3
- package/dist/ui/assets/{wc-follower-oauth-Dbdj3gVn.js → wc-follower-oauth-D5Q66d0Z.js} +1 -1
- package/dist/ui/assets/wc-live-ART73oe9.js +399 -0
- package/dist/ui/assets/{wc-nav-69LMhXN-.js → wc-nav-DYC4BF7x.js} +2 -2
- package/dist/ui/assets/{wc-onboarding-DeLL7QQz.js → wc-onboarding-DAb8qvn2.js} +2 -2
- package/dist/ui/assets/{wc-placeholder-B4z6NazB.js → wc-placeholder-CT4PfhBi.js} +3 -3
- package/dist/ui/assets/{wc-secret-request-CPlXgRlo.js → wc-secret-request-BMOHo8At.js} +1 -1
- package/dist/ui/assets/{wc-settings-CFSgQw3j.js → wc-settings-D7Z5KR5L.js} +3 -3
- package/dist/ui/assets/{wc-shell-CZCKkLJP.js → wc-shell-D9hwrlW6.js} +3 -3
- package/dist/ui/assets/{wc-shortcut-config-DO8_9Cf2.js → wc-shortcut-config-DuV5CR3I.js} +1 -1
- package/dist/ui/assets/{wc-shortcuts-_REWQgA9.js → wc-shortcuts-D0rBXwwC.js} +1 -1
- package/dist/ui/assets/{wc-sprinkles-Cmtrm7gu.js → wc-sprinkles-BeJqRgYQ.js} +2 -2
- package/dist/ui/assets/{wc-transcript-export-C7BaP8YL.js → wc-transcript-export-CiC7iZEN.js} +2 -2
- package/dist/ui/assets/{wc-tray-Juzpc0lo.js → wc-tray-BVsyQHIH.js} +4 -4
- package/dist/ui/assets/welcome-detection-oXuOQLgu.js +1 -0
- package/dist/ui/assets/{whisper-session-B1zyLwlp.js → whisper-session-DoglB0LV.js} +2 -2
- package/dist/ui/assets/{xai-grok-BkZGmqHN.js → xai-grok-Bud3uBoC.js} +1 -1
- package/dist/ui/assets/{xai-grok-CYoaZvHZ.js → xai-grok-DMvTy83_.js} +1 -1
- package/dist/ui/index.html +3 -3
- package/dist/ui/packages/webapp/index.html +3 -3
- package/package.json +2 -2
- package/dist/ui/assets/SKILL-u5bVJ6oJ.js +0 -1
- package/dist/ui/assets/frozen-archive-format-CP0rleV0.js +0 -1
- package/dist/ui/assets/live-session-snapshot-Dw8Q7uwS.js +0 -8
- package/dist/ui/assets/provider-settings-wIUvBGiz.js +0 -1
- package/dist/ui/assets/provider-store-access-Dt__oRzP.js +0 -1
- package/dist/ui/assets/provider-store-access-pBCuTMk1.js +0 -1
- package/dist/ui/assets/sidecar-repair-CODJ1Gjx.js +0 -1
- package/dist/ui/assets/slicc-version-Ddu_nmhS.js +0 -1
- package/dist/ui/assets/wc-live-DmfNvJns.js +0 -402
- package/dist/ui/assets/welcome-detection-B8VXP3l5.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e}from"./wc-onboarding-DAb8qvn2.js";export{e as hasOnboardingFinalLickInHistory};
|
|
@@ -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-jhy2qJPd.js","assets/preload-helper-Czpn1I53.js","assets/logger-DDBAeTLF.js","assets/runtime-env-Dlaokqg1.js","assets/speech-assets-bridge-CFYafE89.js","assets/transformers-env-BVx9lRjS.js","assets/wc-shortcuts-D0rBXwwC.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/account-store-CWEAADeP.js","assets/claude-model-version-CSATLzrT.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/base64-DJRlyqZu.js","assets/proxied-fetch-DyBveeCl.js","assets/fetch-body-1l9I58Vk.js","assets/api-endpoint-DGxXvrur.js","assets/float-topology-YtctpJaG.js","assets/secret-topology-DLJBhHOi.js","assets/secrets-bridge-client--VZ3E0yk.js","assets/port-bridge-client-Dn8JtUyP.js","assets/tool-ui-eSQ1g2I1.js","assets/providers-SXCyVs8S.js","assets/panel-rpc-B3MSVImO.js","assets/bedrock-camp-compat-BeCSBUrZ.js","assets/icons-Btz9xfZH.js","assets/shared-mBEktoxE.js","assets/mime-types-D0xZwlMO.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-BVx9lRjS.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-jhy2qJPd.js`);return{kokoroWarmup: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])).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([31,7,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{G as e,f as t}from"./account-store-
|
|
1
|
+
import{G as e,f as t}from"./account-store-CWEAADeP.js";import{a as n}from"./diagnostics-DN_idNHx.js";import{d as r,l as i}from"./claude-model-version-CSATLzrT.js";import{c as a,i as o,r as s,s as c}from"./legacy-api-aliases-bAJ0Klzq.js";import"./main-DSiIT2Zw.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=`https://cli-chat-proxy.grok.com/v1/billing?format=credits`,h=8e3,g=65536,_=1e3;function v(e){return typeof e==`object`&&!!e}function y(e){if(!v(e))return null;let t=v(e.config)?e.config:e,n=t.creditUsagePercent;if(typeof n!=`number`||!Number.isFinite(n))return null;let r=Math.min(_,Math.max(0,n)),i=v(t.currentPeriod)?t.currentPeriod:{},a=i.type,o=typeof a==`string`?a.replace(`USAGE_PERIOD_TYPE_`,``).toLowerCase():``,s=i.end??t.billingPeriodEnd,c=typeof s==`string`&&Number.isFinite(Date.parse(s))?s:void 0;return{percent:r,status:`ok`,window:o&&o!==`unspecified`?o:`billing`,...c?{resetsAt:c}:{}}}async function b(e,t,n={}){let r=new AbortController,i=setTimeout(()=>r.abort(),n.timeoutMs??h);try{let n=await t(m,{headers:{Authorization:`Bearer ${e}`},signal:r.signal}),{status:i}=n;if(i===404||i===501)return null;if(!n.ok)throw Error(`xAI Grok usage: ${i===401||i===403?`re-login required`:`failed`} (${i})`);let a=await n.text();if(a.length>g)return null;try{return y(JSON.parse(a))}catch{return null}}finally{clearTimeout(i)}}var x=`xai-grok`,S=`https://auth.x.ai`,C=`${S}/oauth2/authorize`,w=`${S}/oauth2/token`,T=`b1a00492-073a-47ea-816f-4c329264a828`,E=`openid profile email offline_access grok-cli:access api:access`,D=`http://127.0.0.1:56121/callback`,O=`http://127.0.0.1:56121/*`,k=`https://api.x.ai/v1`,A=`grok-4.5`,j=`${x}-openai`;function M(){return i(`xai`)}function N(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 P(e){let t=M(),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 "${A}"`),n=t.find(e=>e.id===A),!n))throw Error(`xAI default model "${A}" 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:k}}async function F(e,t){let n=new URLSearchParams({grant_type:`authorization_code`,code:e,redirect_uri:D,client_id:T,code_verifier:t}),r=await fetch(w,{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 I(e){try{let t=new URLSearchParams({grant_type:`refresh_token`,refresh_token:e,client_id:T}),n=await fetch(w,{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 L(){return t().find(e=>e.providerId===x)}async function R(){let t=L();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 I(t.refreshToken);if(n?.access_token)return await e({providerId:x,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}async function z(){if(!L()?.accessToken)throw Error(`xAI Grok budget: not signed in`);return b(await R(),fetch)}function B(e,t){return{type:`error`,reason:`error`,error:{role:`assistant`,content:[],api:j,provider:x,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 V(e,t){return t?{...e??{},"x-grok-conv-id":t}:e}function H(e){console.error(`[xai-grok] Stream error:`,e instanceof Error?e.message:String(e))}async function U(e,t,n,r){try{let i=await R(),a=r.sessionId,c=P(t),l={...r,apiKey:i,headers:V(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){H(n),e.push(B(t,n)),e.end()}}async function W(e,t,n,r){try{let i=await R(),o=r?.sessionId,s=P(t),l={...r,apiKey:i,headers:V(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){H(n),e.push(B(t,n)),e.end()}}var G=(e,t,r={})=>{let i=n();return U(i,e,t,r).catch(H),i},K=(e,t,r)=>{let i=n();return W(i,e,t,r).catch(H),i},q={id:x,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:A,oauthTokenDomains:[`api.x.ai`,`*.x.ai`,`auth.x.ai`,`accounts.x.ai`,`cli-chat-proxy.grok.com`],getModelIds:()=>M().map(N),getBudgetUsage:z,onOAuthLoginIntercepted:async(t,n,r)=>{let i=l(),a=await d(i),o=u(),s=u(),c=new URL(C);c.searchParams.set(`response_type`,`code`),c.searchParams.set(`client_id`,T),c.searchParams.set(`redirect_uri`,D),c.searchParams.set(`scope`,r?.scopes??E),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 m=await t({authorizeUrl:c.toString(),redirectUriPattern:O,onCapture:`close`});if(!m)throw new p(`xAI OAuth login was cancelled or timed out`,f.CALLBACK_TIMEOUT);let h=new URL(m),g=h.searchParams.get(`code`),_=h.searchParams.get(`state`);if(!g)throw new p(`xAI OAuth redirect did not include a code`,f.CODE_MISSING);if(_!==o)throw new p(`xAI OAuth state mismatch — possible CSRF, aborting`,f.STATE_MISMATCH);let v=await F(g,i);await e({providerId:x,accessToken:v.access_token,refreshToken:v.refresh_token,tokenExpiresAt:Date.now()+(v.expires_in??21600)*1e3,baseUrl:k,scopes:v.scope}),n()},onOAuthLogout:async()=>{await e({providerId:x,accessToken:``})},onSilentRenew:async()=>{let t=L();if(!t?.refreshToken)return null;let n=await I(t.refreshToken);return n?.access_token?(await e({providerId:x,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 J(){r({api:j,stream:G,streamSimple:K})}export{f as XaiErrorCode,p as XaiOAuthError,q as config,J as register};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as e,r as t}from"./account-store-
|
|
1
|
+
import{_ as e,r as t}from"./account-store-B1iVHXUI.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-DGIFYqZZ.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";function m(e){return typeof e==`object`&&!!e}function h(e){if(!m(e))return null;let t=m(e.config)?e.config:e,n=t.creditUsagePercent;if(typeof n!=`number`||!Number.isFinite(n))return null;let r=Math.min(1e3,Math.max(0,n)),i=m(t.currentPeriod)?t.currentPeriod:{},a=i.type,o=typeof a==`string`?a.replace(`USAGE_PERIOD_TYPE_`,``).toLowerCase():``,s=i.end??t.billingPeriodEnd,c=typeof s==`string`&&Number.isFinite(Date.parse(s))?s:void 0;return{percent:r,status:`ok`,window:o&&o!==`unspecified`?o:`billing`,...c?{resetsAt:c}:{}}}async function g(e,t,n={}){let r=new AbortController,i=setTimeout(()=>r.abort(),n.timeoutMs??8e3);try{let n=await t(`https://cli-chat-proxy.grok.com/v1/billing?format=credits`,{headers:{Authorization:`Bearer ${e}`},signal:r.signal}),{status:i}=n;if(i===404||i===501)return null;if(!n.ok)throw Error(`xAI Grok usage: ${i===401||i===403?`re-login required`:`failed`} (${i})`);let a=await n.text();if(a.length>65536)return null;try{return h(JSON.parse(a))}catch{return null}}finally{clearTimeout(i)}}const _=`xai-grok`,v=`https://auth.x.ai`,y=`${v}/oauth2/authorize`,b=`${v}/oauth2/token`,x=`b1a00492-073a-47ea-816f-4c329264a828`,S=`http://127.0.0.1:56121/callback`,C=`https://api.x.ai/v1`,w=`grok-4.5`,T=`${_}-openai`;function E(){return i(`xai`)}function D(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 O(e){let t=E(),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 "${w}"`),n=t.find(e=>e.id===w),!n))throw Error(`xAI default model "${w}" 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:C}}async function k(e,t){let n=new URLSearchParams({grant_type:`authorization_code`,code:e,redirect_uri:S,client_id:x,code_verifier:t}),r=await fetch(b,{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 A(e){try{let t=new URLSearchParams({grant_type:`refresh_token`,refresh_token:e,client_id:x}),n=await fetch(b,{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 j(){return t().find(e=>e.providerId===_)}async function M(){let t=j();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 A(t.refreshToken);if(n?.access_token)return await e({providerId:_,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}async function N(){if(!j()?.accessToken)throw Error(`xAI Grok budget: not signed in`);return g(await M(),fetch)}function P(e,t){return{type:`error`,reason:`error`,error:{role:`assistant`,content:[],api:T,provider:_,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 F(e,t){return t?{...e??{},"x-grok-conv-id":t}:e}function I(e){console.error(`[xai-grok] Stream error:`,e instanceof Error?e.message:String(e))}async function L(e,t,n,r){try{let i=await M(),a=r.sessionId,c=O(t),l={...r,apiKey:i,headers:F(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){I(n),e.push(P(t,n)),e.end()}}async function R(e,t,n,r){try{let i=await M(),o=r?.sessionId,s=O(t),l={...r,apiKey:i,headers:F(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){I(n),e.push(P(t,n)),e.end()}}const z=(e,t,r={})=>{let i=n();return L(i,e,t,r).catch(I),i},B=(e,t,r)=>{let i=n();return R(i,e,t,r).catch(I),i},V={id:_,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:w,oauthTokenDomains:[`api.x.ai`,`*.x.ai`,`auth.x.ai`,`accounts.x.ai`,`cli-chat-proxy.grok.com`],getModelIds:()=>E().map(D),getBudgetUsage:N,onOAuthLoginIntercepted:async(t,n,r)=>{let i=l(),a=await d(i),o=u(),s=u(),c=new URL(y);c.searchParams.set(`response_type`,`code`),c.searchParams.set(`client_id`,x),c.searchParams.set(`redirect_uri`,S),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 m=await t({authorizeUrl:c.toString(),redirectUriPattern:`http://127.0.0.1:56121/*`,onCapture:`close`});if(!m)throw new p(`xAI OAuth login was cancelled or timed out`,f.CALLBACK_TIMEOUT);let h=new URL(m),g=h.searchParams.get(`code`),v=h.searchParams.get(`state`);if(!g)throw new p(`xAI OAuth redirect did not include a code`,f.CODE_MISSING);if(v!==o)throw new p(`xAI OAuth state mismatch — possible CSRF, aborting`,f.STATE_MISMATCH);let b=await k(g,i);await e({providerId:_,accessToken:b.access_token,refreshToken:b.refresh_token,tokenExpiresAt:Date.now()+(b.expires_in??21600)*1e3,baseUrl:C,scopes:b.scope}),n()},onOAuthLogout:async()=>{await e({providerId:_,accessToken:``})},onSilentRenew:async()=>{let t=j();if(!t?.refreshToken)return null;let n=await A(t.refreshToken);return n?.access_token?(await e({providerId:_,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 H(){r({api:T,stream:z,streamSimple:B})}export{f as XaiErrorCode,p as XaiOAuthError,V as config,H 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-DSiIT2Zw.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-Dd_uD5pT.js">
|
|
10
10
|
<link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-P2Xu9kJm.js">
|
|
11
11
|
<link rel="modulepreload" crossorigin href="/assets/preload-helper-Czpn1I53.js">
|
|
@@ -27,10 +27,10 @@
|
|
|
27
27
|
<link rel="modulepreload" crossorigin href="/assets/port-bridge-client-Dn8JtUyP.js">
|
|
28
28
|
<link rel="modulepreload" crossorigin href="/assets/secrets-bridge-client--VZ3E0yk.js">
|
|
29
29
|
<link rel="modulepreload" crossorigin href="/assets/tool-ui-eSQ1g2I1.js">
|
|
30
|
-
<link rel="modulepreload" crossorigin href="/assets/providers-
|
|
30
|
+
<link rel="modulepreload" crossorigin href="/assets/providers-SXCyVs8S.js">
|
|
31
31
|
<link rel="modulepreload" crossorigin href="/assets/panel-rpc-B3MSVImO.js">
|
|
32
32
|
<link rel="modulepreload" crossorigin href="/assets/bedrock-camp-compat-BeCSBUrZ.js">
|
|
33
|
-
<link rel="modulepreload" crossorigin href="/assets/account-store-
|
|
33
|
+
<link rel="modulepreload" crossorigin href="/assets/account-store-CWEAADeP.js">
|
|
34
34
|
<link rel="modulepreload" crossorigin href="/assets/bridge-protocol-06nbmp2X.js">
|
|
35
35
|
<link rel="modulepreload" crossorigin href="/assets/messages-BD4p8GuF.js">
|
|
36
36
|
<link rel="modulepreload" crossorigin href="/assets/tray-runtime-config-DB2KZRBg.js">
|
|
@@ -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-DSiIT2Zw.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-Dd_uD5pT.js">
|
|
10
10
|
<link rel="modulepreload" crossorigin href="/assets/modulepreload-polyfill-P2Xu9kJm.js">
|
|
11
11
|
<link rel="modulepreload" crossorigin href="/assets/preload-helper-Czpn1I53.js">
|
|
@@ -27,10 +27,10 @@
|
|
|
27
27
|
<link rel="modulepreload" crossorigin href="/assets/port-bridge-client-Dn8JtUyP.js">
|
|
28
28
|
<link rel="modulepreload" crossorigin href="/assets/secrets-bridge-client--VZ3E0yk.js">
|
|
29
29
|
<link rel="modulepreload" crossorigin href="/assets/tool-ui-eSQ1g2I1.js">
|
|
30
|
-
<link rel="modulepreload" crossorigin href="/assets/providers-
|
|
30
|
+
<link rel="modulepreload" crossorigin href="/assets/providers-SXCyVs8S.js">
|
|
31
31
|
<link rel="modulepreload" crossorigin href="/assets/panel-rpc-B3MSVImO.js">
|
|
32
32
|
<link rel="modulepreload" crossorigin href="/assets/bedrock-camp-compat-BeCSBUrZ.js">
|
|
33
|
-
<link rel="modulepreload" crossorigin href="/assets/account-store-
|
|
33
|
+
<link rel="modulepreload" crossorigin href="/assets/account-store-CWEAADeP.js">
|
|
34
34
|
<link rel="modulepreload" crossorigin href="/assets/bridge-protocol-06nbmp2X.js">
|
|
35
35
|
<link rel="modulepreload" crossorigin href="/assets/messages-BD4p8GuF.js">
|
|
36
36
|
<link rel="modulepreload" crossorigin href="/assets/tray-runtime-config-DB2KZRBg.js">
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sliccy",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.147.1",
|
|
4
4
|
"description": "Browser-based coding agent with thin CLI server",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -120,7 +120,7 @@
|
|
|
120
120
|
"@semantic-release/exec": "7.1.0",
|
|
121
121
|
"@semantic-release/git": "11.0.1",
|
|
122
122
|
"@size-limit/file": "13.0.3",
|
|
123
|
-
"@tessl/cli": "0.
|
|
123
|
+
"@tessl/cli": "0.105.0",
|
|
124
124
|
"@types/node": "24.13.3",
|
|
125
125
|
"@vitest/browser": "4.1.11",
|
|
126
126
|
"@vitest/browser-playwright": "4.1.11",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e="---\nname: dips\ndescription: |\n Use this whenever a response could benefit from richer visualization, guided\n interaction, or a touch of fun — pickers, calculators, sliders, mini\n explorers, charts, animated demos, choose-your-own-adventure prompts,\n anything that lands better as a hydrating widget than as plain prose. Dips\n are ephemeral `shtml` code blocks rendered inline in chat (no state\n persistence, lick-only). Reach for them generously: every interactive moment\n the user gets is a moment they don't have to type a clarifying message. For\n persistent dashboards, editors, or multi-page apps use sprinkles instead.\nallowed-tools: bash\n---\n\n# Dips\n\nDips are inline `shtml` code blocks in chat that hydrate into sandboxed interactive widgets. **Ephemeral** — no state persistence, no `readFile`. Only `slicc.lick(event)` is available for agent communication; always pack payloads as `{ action, data: { ... } }` for a predictable shape on the cone side.\n\n**Use them generously.** A dip is the right answer any time a response could benefit from visualization, interaction, or a moment of delight. Don't reserve them for \"complex\" tasks — a slider that lets the user feel a number, a chart that beats a paragraph of stats, a button that's faster than typing \"yes\" all earn their keep.\n\n| Reach for a dip when … | Reach for a sprinkle when … |\n| ------------------------------------------------------ | --------------------------------------------------------------- |\n| The answer would land better as a widget than as prose | The user needs a persistent dashboard / editor / multi-page app |\n| The user is choosing, confirming, or tuning a value | The UI must survive across turns or sessions |\n| You want a chart, animation, or interactive demo | You need `readFile`, `screenshot`, or any persistent state |\n| The result deserves a bit of fun | The interaction is long-running |\n\nFor a gallery of 10 ready-to-adapt patterns (drag-on-canvas, slider→DOM reflow, paste→tree, ...) read the companion file: `read_file /workspace/skills/dips/patterns.md`.\n\n## Card structure\n\nAlways wrap interactive content in `.sprinkle-action-card` for visual containment. Don't output bare HTML — cards need a visible boundary.\n\n```shtml\n<div class=\"sprinkle-action-card\">\n <div class=\"sprinkle-action-card__header\">Title <span class=\"sprinkle-badge sprinkle-badge--notice\">Status</span></div>\n <div class=\"sprinkle-action-card__body\">Description text</div>\n <div class=\"sprinkle-action-card__actions\">\n <button class=\"sprinkle-btn sprinkle-btn--secondary\" onclick=\"slicc.lick('cancel')\">Cancel</button>\n <button class=\"sprinkle-btn sprinkle-btn--primary\" onclick=\"slicc.lick('confirm')\">Confirm</button>\n </div>\n</div>\n```\n\nWhen the user clicks a button, you receive the lick as a message. Respond conversationally, with another dip, or by spawning a scoop.\n\n### Use existing components inside cards\n\n- **Progress** → `.sprinkle-progress-bar` with `--progress` CSS variable. Not raw colored divs.\n- **Status indicators** → `.sprinkle-status-light` with `--positive` / `--negative` / `--notice` variants.\n- **Stats** → `.sprinkle-stat-card` grid.\n- **Tables** → `.sprinkle-table` with `.sprinkle-badge` for severity.\n- **Badges** → `.sprinkle-badge` variants (`--positive`, `--negative`, `--notice`, `--informative`).\n\nMultiple cards in one message: each is a separate `.sprinkle-action-card`. The host sheet zeros card margin and adds `margin-top: 12px` between adjacent cards — don't add your own card margins (a class like `.my-card { margin-top: 12px }` loses on specificity). Don't wrap multiple cards in a single container.\n\n## Pre-styled form elements\n\nInside dips, bare HTML form elements are pre-styled to match S2:\n\n- `<input type=\"range\">` — 4px track, 18px accent thumb.\n- `<input type=\"text\">`, `<textarea>` — S2 layer-2 background, accent focus ring. `rows` is fine as an initial size; never add `overflow:auto` or a fixed pixel height — the dip auto-sizes (see \"Sizing\").\n- `<select>` — S2 styled with focus ring.\n- `<button>` — pill-rounded, 28px height, hover state. Use `.sprinkle-btn--primary` class for the accent fill.\n- `<canvas>` — full-width, rounded corners.\n- `<mark>` — accent-tinted highlight.\n\nNo custom CSS needed for basic widgets. Just write bare HTML.\n\n## Sizing\n\nThe dip iframe auto-sizes to its content via `ResizeObserver` on `document.body`. **Your content's natural height becomes the iframe height. Don't fight it.**\n\nNever set `height`, `max-height`, `min-height`, `overflow: auto`, or `overflow: scroll` on dip containers. The outer iframe has `overflow: hidden`, so any internal scroller or fixed height clips content instead of growing the iframe. Let content flow and grow.\n\nThe one exception is `<canvas>`: canvases need explicit pixel `width`/`height` for the drawing buffer. That's a drawing surface, not a scrollable container — set the pixel dimensions you need.\n\nIf content is long enough that it would want to scroll, it belongs in a sprinkle.\n\n## Light & dark mode\n\nDips inherit the parent's theme automatically. The parent injects its S2 tokens and toggles a `.theme-light` class on the iframe's `<html>` whenever the user flips themes; every `var(--s2-*)` token swaps in lockstep. **Never hard-code dark colors** — always use S2 tokens, or `light-dark()` for one-off custom colors (set `color-scheme: light dark` on an ancestor). **Do not use `@media (prefers-color-scheme: ...)`** — the parent toggle is class-based, so media queries desync. See `/workspace/skills/sprinkles/style-guide.md` for the full S2 token reference and a `light-dark()` example.\n\n## Color palette for charts\n\nUse these classes on chart elements, diagram nodes, or badges. Two or three colors per visualization, not six. Assign by meaning, not by sequence.\n\n| Class | Use for |\n| ----------- | ----------------------- |\n| `.c-purple` | Primary category, AI/ML |\n| `.c-teal` | Success, growth |\n| `.c-coral` | Secondary category |\n| `.c-pink` | Tertiary category |\n| `.c-gray` | Neutral, structural |\n| `.c-blue` | Informational |\n| `.c-amber` | Warning, in-progress |\n| `.c-red` | Error, critical |\n| `.c-green` | Success, complete |\n\n## Layout & viewport\n\nDips render in the chat column. They are **single-column by design** — don't author multi-column or sidebar+main layouts. The chat column is narrow on iOS / Sliccstart and on the extension side panel; multi-column dips break visually in those floats. If you need multi-column, use a sprinkle and let the user pop it to full-screen.\n\n## Cheap interactions via `agent`\n\nWhen a dip's lick handler needs to do real work (lookup, transformation, generation) but the cone or owning scoop should NOT be woken up, route the lick to a one-shot `agent` call.\n\nThe flow:\n\n1. Dip emits a lick: `slicc.lick({action: 'compute', data: {input: ...}})`.\n2. The lick reaches the cone (or scoop) as a message.\n3. Instead of replying conversationally, the receiver shells out to `agent` with a tight allow-list and a self-contained prompt.\n4. `agent` returns the answer on stdout. The receiver writes the result back to the dip via a follow-up dip or via `sprinkle send` (if the dip was the entry point to a sprinkle flow).\n\n```bash\n# Inside a feed_scoop reply to a dip lick:\nresult=$(agent \"$TMPDIR\" \"curl,jq\" \"Fetch <url>, return field 'price' as a number.\")\n# Render a fresh dip with `result` inline.\n```\n\n`agent` is the right tool here because it has **no handoff**: ephemeral scoops don't notify the cone on completion, so a busy cone or sprinkle-owning scoop isn't pre-empted by every dip click. See `/workspace/skills/delegation/SKILL.md` for the full `agent` reference.\n\n## Design rules\n\n- Use S2 CSS variables for all colors (`var(--s2-content-default)`, `var(--s2-bg-layer-2)`, ...).\n- Round all displayed numbers: `Math.round()`, `.toFixed(2)`, `.toLocaleString()`.\n- Set `step` on range sliders for clean values.\n- Show errors inline (not `alert()`).\n- Sentence case always — never Title Case or ALL CAPS.\n- One root `render()` / `calc()` function triggered by all inputs.\n- Call `render()` on load with defaults so the widget is immediately interactive.\n\n## Don't\n\n- Don't hardcode hex colors or theme-specific values — use S2 tokens or `light-dark()` (see \"Light & dark mode\").\n- Don't use `@media (prefers-color-scheme: ...)` to swap colors — the parent's theme toggle is class-based and the media query desyncs.\n- Don't set `height`, `max-height`, `min-height`, `overflow: auto`, or `overflow: scroll` on dip containers — the iframe auto-sizes to content; fixed heights and internal scrollers clip it. Canvases are the one exception (they need pixel dimensions for the drawing buffer). Long content belongs in a sprinkle.\n- Don't build custom progress bars — use `.sprinkle-progress-bar`.\n- Don't build custom status dots — use `.sprinkle-status-light`.\n- Don't use numbered headings (1. File Operations) inside cards — the `__header` IS the heading.\n- Don't put prose / markdown headings between cards — let cards stand alone.\n\n## Lick patterns\n\n```javascript\n// Explicit \"send to agent\" button.\nslicc.lick({ action: 'use-config', data: { config: getCurrentConfig() } });\n\n// Lick on threshold crossing.\nif (total > budget) {\n slicc.lick({ action: 'over-budget', data: { total, budget, breakdown } });\n}\n\n// Lick on completion.\nslicc.lick({ action: 'sort-complete', data: { algorithm: algo, comparisons: n } });\n```\n\n> **Payload shape:** `slicc.lick(eventOrAction)` accepts either a plain\n> action string (`slicc.lick('cancel')`) or an `{ action, data? }`\n> object. **Always pack extra fields inside `data: { ... }`** — the\n> cone reads `event.data` as the payload, so top-level extras either\n> get dropped (sprinkle bridge) or folded into `data` as the whole\n> event object (dip bridge), neither of which gives the cone a\n> predictable shape. The canonical form works identically in both.\n\nThe agent receives the lick as a structured message and can respond with prose, another dip, or spawn a scoop.\n";export{e as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";var t=e({SESSIONS_DIR:()=>n,SESSIONS_INDEX_PATH:()=>r,parseFrozenArchive:()=>a,readSessionsIndex:()=>i});const n=`/sessions`,r=`/sessions/index.json`;async function i(e){try{let t=await e.readFile(r,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),i=JSON.parse(n);return Array.isArray(i)?i:[]}catch{return[]}}function a(e){let t=e,n=`Untitled`,r={},i=t.match(/^---\n([\s\S]*?)\n---\n+/);if(i){t=t.slice(i[0].length),Object.assign(r,o(i[1]));let e=i[1].match(/^title:\s*(.+?)\s*$/m);e&&(n=s(e[1]))}let a=t.match(/<!-- slicc:session-data\n([\s\S]*?)\n-->\n*/);if(a){try{let e=a[1].replace(/-- >/g,`-->`),t=JSON.parse(e);if(Array.isArray(t))return{title:n,messages:t,...r}}catch{}t=t.replace(/<!-- slicc:session-data\n[\s\S]*?\n-->\n*/,``)}return t=t.replace(/^#\s+[^\n]*\n+/,``),{title:n,messages:l(t),...r}}function o(e){let t={},n=c(e,`cost`),r=c(e,`models`);n&&(t.cost=n),r&&(t.models=r);let i=e.match(/^cone:\s*(.+?)\s*$/m)?.[1];i&&(t.cone=i);let a=e.match(/^coneLabel:\s*(.+?)\s*$/m)?.[1];a&&(t.coneLabel=s(a)),/^memorySkipped:\s*true\s*$/m.test(e)&&(t.memorySkipped=!0),/^live:\s*true\s*$/m.test(e)&&(t.live=!0);let o=Number(e.match(/^liveThrough:\s*(\d+)\s*$/m)?.[1]);Number.isFinite(o)&&o>0&&(t.liveThrough=o);let l=Number(e.match(/^compactions:\s*(\d+)\s*$/m)?.[1]);Number.isFinite(l)&&l>0&&(t.compactions=l);let u=e.match(/^id:\s*(\S+)\s*$/m)?.[1];return u&&(t.id=u),t}function s(e){let t=e.trim();if(!t.startsWith(`"`))return t;try{let e=JSON.parse(t);if(typeof e==`string`)return e}catch{}return t.replace(/^"|"$/g,``)}function c(e,t){let n=RegExp(`^${t}:\\s*(.+?)\\s*$`,`m`).exec(e)?.[1];if(n)try{return JSON.parse(n)}catch{return}}function l(e){let t=[],n=/^## (User|Assistant)\s*\n/gm,r=[],i;for(;(i=n.exec(e))!==null;)r.push({role:i[1]===`User`?`user`:`assistant`,start:i.index,bodyStart:i.index+i[0].length});for(let n=0;n<r.length;n++){let i=n+1<r.length?r[n+1].start:e.length,a=e.slice(r[n].bodyStart,i).trim();t.push({id:`frozen-${n}`,role:r[n].role,content:a,timestamp:0})}return t}export{i as a,a as i,r as n,t as r,n as t};
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./logger-LESFN7Hj.js";import{t}from"./slugify-BYJ6QVAt.js";import{t as n}from"./attachments-u2K0aIPI.js";import"./record-YqlVEfh_.js";import{t as r}from"./agent-message-to-chat-w7n13QEN.js";import{t as i}from"./types-Dgm4REV3.js";import{i as a,n as o,t as s}from"./frozen-archive-format-CP0rleV0.js";const c=/\uD83C\uDF99\uFE0F?/g,l=/\u25C1[\s\S]*?\u25B7/g;function u(e){return e.replace(l,``).replace(c,``).replace(/[ \t]+$/g,``).trimEnd()}function d(e){let t=``;for(let r of e){let e=r.role===`user`?`User`:`Assistant`,i=r.role===`user`?u(r.content):r.content;if(t+=`## ${e}\n${i}\n\n`,r.attachments?.length&&(t+=`Attachments:\n${r.attachments.map(e=>`- ${n(e)}`).join(`
|
|
2
|
-
`)}\n\n`),r.toolCalls)for(let e of r.toolCalls)t+=`### Tool: ${e.name}\nInput: ${JSON.stringify(e.input,null,2)}\nResult: ${e.result??``}\n\n`}return t}function f(e){return`live-${h(e)}-${m()}.md`}function p(e,t){return e.find(e=>e.live===!0&&(e.cone??`cone`)===t)}function m(){return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`}function h(e){return t(e,{maxLen:48,fallback:`session`})}function g(e){let t=e.find(e=>e.role===`user`);if(!t?.content)return`untitled-session`;let n=t.content.trim().replace(/\s+/g,` `);return n.length>60?`${n.slice(0,60)}…`:n||`untitled-session`}function _(e){return e.map(e=>{let t={id:e.id,role:e.role,content:e.content,timestamp:e.timestamp};return e.attachments?.length&&(t.attachments=e.attachments),e.toolCalls?.length&&(t.toolCalls=e.toolCalls.map(e=>({id:e.id,name:e.name,input:e.input,...e.result===void 0?{}:{result:e.result},...e.isError?{isError:e.isError}:{}}))),e.source&&(t.source=e.source),e.channel&&(t.channel=e.channel),e.compaction&&(t.compaction=e.compaction),t})}function v(e){let t=(e.cost?`cost: ${JSON.stringify(e.cost)}\n`:``)+(e.models?`models: ${JSON.stringify(e.models)}\n`:``),n=(e.cone?`cone: ${e.cone}\n`:``)+(e.coneLabel?`coneLabel: ${JSON.stringify(e.coneLabel)}\n`:``)+(e.memorySkipped?`memorySkipped: true
|
|
3
|
-
`:``)+(e.live?`live: true
|
|
4
|
-
`:``)+(e.live&&e.liveThrough?`liveThrough: ${e.liveThrough}\n`:``)+(e.live&&e.compactions?`compactions: ${e.compactions}\n`:``),r=`---\nid: ${e.id}\ntitle: ${JSON.stringify(e.title)}\nfrozenAt: ${e.frozenAt}\ncreatedAt: ${e.createdAt}\nupdatedAt: ${e.updatedAt}\nmessageCount: ${e.messageCount}\n`+t+n+`---
|
|
5
|
-
|
|
6
|
-
`,i=`<!-- slicc:session-data
|
|
7
|
-
${JSON.stringify(_(e.messages)).replace(/-->/g,`-- >`)}
|
|
8
|
-
-->\n\n`,a=`# ${e.title}\n\n`;return r+i+a+d(e.messages)}function y(e){return e===`/sessions`?o:`${e}/index.json`}function b(e){return e===`/sessions`?C:`slicc:sessions-index:${e}`}async function x(e,t=s){try{await e.mkdir(t,{recursive:!0})}catch{}}async function S(e,t=s){try{let n=await e.readFile(y(t),{encoding:`utf-8`}),r=typeof n==`string`?n:new TextDecoder().decode(n),i=JSON.parse(r);return Array.isArray(i)?i:[]}catch(e){if(e instanceof i&&e.code!==`ENOENT`)throw e;return[]}}const C=`slicc:sessions-index`;let w=Promise.resolve();function T(e,t=C){let n=()=>{let n=globalThis.navigator?.locks;return typeof n?.request==`function`?n.request(t,()=>e()):e()},r=w.then(n,n);return w=r.then(()=>void 0,()=>void 0),r}function E(e,t,n=s){return e.writeFile(y(n),JSON.stringify(t,null,2))}async function D(e,t,n=s){await E(e,[t,...(await S(e,n)).filter(e=>e.filename!==t.filename)],n)}const O=e(`live-session-snapshot`);function k(e,t){return`/scoops/${e}/sessions/${t}`}function A(e){let t=e.cone.folder||`cone`,n=e.sessionsDir??`/sessions`,i=r(e.messages,{source:e.cone.label??t,uncapped:!0});return T(async()=>e.stillValid&&!e.stillValid()?(O.info(`Live session snapshot skipped: session gone before the write`,{cone:t,sessionsDir:n,trigger:e.trigger}),null):j(e,t,n,i),b(n))}async function j(e,t,n,r){let i=e.now??Date.now,a=p(await S(e.vfs,n),t),o=a?await I(e.vfs,n,a):null,s=o===null?0:a?.liveThrough??F(o),c=P(r,o??[],s),l=[...o??[],...c],u=Math.max(s,F(r)),d=a?.filename??f(t),m=a?.frozenAt??new Date(i()).toISOString(),h=a?.title??g(l),_=(a?.compactions??0)+1,y={cone:t,...t!==`cone`&&e.cone.label?{coneLabel:e.cone.label}:{}},b={id:a?.sessionId??crypto.randomUUID(),title:h,frozenAt:m,createdAt:l[0]?.timestamp||i(),updatedAt:i(),messageCount:l.length,messages:l,...y,live:!0,liveThrough:u,compactions:_},C={filename:d,sessionId:b.id,title:h,frozenAt:m,messageCount:l.length,...y,...a?.icon?{icon:a.icon}:{},live:!0,liveThrough:u,compactions:_};await x(e.vfs,n);let w=`${n}/${d}`;return await e.vfs.writeFile(w,v(b)),await D(e.vfs,C,n),await e.vfs.flush(),O.info(`Live session snapshot written`,{cone:t,sessionsDir:n,filename:d,trigger:e.trigger,appended:c.length,total:l.length,compactions:_}),{transcriptPath:w,entry:C,appended:c.length}}function M(e,t){let n=t||`cone`;return T(async()=>{let t=await S(e),r=p(t,n);if(!r)return!1;let{live:i,liveThrough:a,...o}=r,c={...o,pendingEnrichment:!0};return await E(e,t.map(e=>e===r?c:e)),await L(e,`${s}/${r.filename}`),await e.flush(),O.info(`Live session snapshot finalized`,{cone:n,filename:r.filename}),!0})}function N(e,t){let n=t||`cone`;return T(async()=>{let t=await S(e),r=t.filter(e=>e.live===!0&&(e.cone??`cone`)===n);if(r.length===0)return 0;await E(e,t.filter(e=>!r.includes(e)));for(let t of r)try{await e.rm(`${s}/${t.filename}`)}catch(e){if(!(e instanceof i)||e.code!==`ENOENT`)throw e}return await e.flush(),O.info(`Live session snapshot discarded`,{cone:n,removed:r.length}),r.length})}function P(e,t,n){if(t.length===0)return e;let r=t.filter(e=>e.timestamp===n);return e.filter(e=>e.timestamp>n?!0:e.timestamp<n?!1:!r.some(t=>t.role===e.role&&t.content===e.content))}function F(e){let t=0;for(let n of e)n.timestamp>t&&(t=n.timestamp);return t}async function I(e,t,n){try{let r=await e.readFile(`${t}/${n.filename}`,{encoding:`utf-8`}),i=typeof r==`string`?r:new TextDecoder().decode(r);return a(i).messages}catch(e){if(!(e instanceof i)||e.code!==`ENOENT`)throw e;return O.warn(`Live snapshot archive missing; rewriting from the agent history`,{sessionsDir:t,filename:n.filename}),null}}async function L(e,t){try{let n=await e.readFile(t,{encoding:`utf-8`}),r=typeof n==`string`?n:new TextDecoder().decode(n),i=r.match(/^---\n([\s\S]*?)\n---\n/);if(!i)return;let a=i[1].replace(/^(live: true|liveThrough: \d+)\n?/gm,``);if(a===i[1])return;await e.writeFile(t,`---\n${a}\n---\n${r.slice(i[0].length)}`)}catch(e){if(e instanceof i&&e.code===`ENOENT`)return;throw e}}export{N as discardLiveSnapshot,M as finalizeLiveSnapshot,k as scoopSessionsDir,A as snapshotLiveSession};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./logger-LESFN7Hj.js";import"./account-store-BRUCr96D.js";import"./core-D59qaXEb.js";import"./tray-runtime-config--rtR6Gxd.js";e(`provider-settings`);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./store-BgpATPUF.js";export{e as readMcpAuthEntries};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./provider-BtR7FzYX.js";export{e as readMcpAuthEntries};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e,n as t}from"./fs-sNrIPaO_.js";export{t as repairOpfsMetadataSidecar,e as resolveWithSidecarRepair};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
function e(){return{version:`6.146.2`,releasedAt:`2026-09-10T15:19:03Z`,buildId:`6.146.2-mtvoagz3`}}let t=null;function n(e){t=e}function r(){return t}export{e as n,n as r,r as t};
|