sliccy 6.150.2 → 6.150.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/dist/node-server/_shared/github-releases.d.ts +79 -0
  2. package/dist/node-server/_shared/github-releases.d.ts.map +1 -0
  3. package/dist/node-server/_shared/github-releases.js +86 -0
  4. package/dist/node-server/_shared/github-releases.js.map +1 -0
  5. package/dist/node-server/_shared/index.d.ts +1 -0
  6. package/dist/node-server/_shared/index.d.ts.map +1 -1
  7. package/dist/node-server/_shared/index.js +1 -0
  8. package/dist/node-server/_shared/index.js.map +1 -1
  9. package/dist/node-server/install-cli.d.ts +1 -1
  10. package/dist/node-server/install-cli.js +17 -38
  11. package/dist/ui/.vite/manifest.json +166 -166
  12. package/dist/ui/assets/CLAUDE-BcGVPwX6.js +1 -0
  13. package/dist/ui/assets/{account-store-WHtW2xQT.js → account-store-CV9MqwUm.js} +1 -1
  14. package/dist/ui/assets/{account-store-igNbS3Ak.js → account-store-D8e8oik0.js} +1 -1
  15. package/dist/ui/assets/{adobe-DES78X4G.js → adobe-BVISN7vp.js} +1 -1
  16. package/dist/ui/assets/{adobe-qGeGJSVK.js → adobe-BxjyXT87.js} +1 -1
  17. package/dist/ui/assets/{agent-bridge-Bj-PqjME.js → agent-bridge-BBkdIfsJ.js} +1 -1
  18. package/dist/ui/assets/{agent-panels-BWaMcEJL.js → agent-panels-CjeQdy1Y.js} +1 -1
  19. package/dist/ui/assets/{apply-layout-Cw4kGKTd.js → apply-layout-CvLXxRBE.js} +1 -1
  20. package/dist/ui/assets/{apps-GYMxMVb3.js → apps-DxHLnxIs.js} +1 -1
  21. package/dist/ui/assets/{azure-openai-BbxUu9bl.js → azure-openai-CeWhvhCg.js} +1 -1
  22. package/dist/ui/assets/{azure-openai-Df42STSp.js → azure-openai-CrXxL0yw.js} +1 -1
  23. package/dist/ui/assets/{budget-usage-source-CkdCr5f4.js → budget-usage-source-DKTPDwsD.js} +1 -1
  24. package/dist/ui/assets/{cdp-bzn_Xeev.js → cdp-C6pQEDl7.js} +1 -1
  25. package/dist/ui/assets/{cerebras-BdSVSPms.js → cerebras-Dy4v03m_.js} +1 -1
  26. package/dist/ui/assets/{cerebras-CnqGnpF2.js → cerebras-NYRgbfj7.js} +1 -1
  27. package/dist/ui/assets/{composer-speech-Bk2rlnG1.js → composer-speech-C_q-fKNK.js} +1 -1
  28. package/dist/ui/assets/{connect-surface-CHDb1bpy.js → connect-surface-DnqcwOmu.js} +1 -1
  29. package/dist/ui/assets/{directed-approval-KW7sZoq9.js → directed-approval-FjkkjI1B.js} +1 -1
  30. package/dist/ui/assets/{fs-FVRsAbgb.js → fs-DtsuwDhC.js} +1 -1
  31. package/dist/ui/assets/{fs-ih2eMSkQ.js → fs-cMwqXtFi.js} +2 -2
  32. package/dist/ui/assets/{github--5oROr4B.js → github-C9LAMuX2.js} +1 -1
  33. package/dist/ui/assets/{github-CMoh4wrN.js → github-DMrOAHK5.js} +2 -2
  34. package/dist/ui/assets/{github-copilot-DkYiMCsw.js → github-copilot-CIlYMLNf.js} +1 -1
  35. package/dist/ui/assets/{github-copilot-qWy0Zt4S.js → github-copilot-CMZIEIwW.js} +1 -1
  36. package/dist/ui/assets/{github-install-BNlfwzSw.js → github-install-Br7_N-Wz.js} +1 -1
  37. package/dist/ui/assets/{github-zip-BlzKyxxV.js → github-zip-JuyNsUge.js} +1 -1
  38. package/dist/ui/assets/{hear-DZ1gevW6.js → hear-WpLAGmLj.js} +1 -1
  39. package/dist/ui/assets/{help-AarM8EZw.js → help-DygoYzMM.js} +1 -1
  40. package/dist/ui/assets/{js-realm-worker-B0sapExQ.js → js-realm-worker-B_adS-Xa.js} +1 -1
  41. package/dist/ui/assets/{kernel-worker-BsjX-8Q_.js → kernel-worker-D6QiQmF8.js} +33 -33
  42. package/dist/ui/assets/{local-llm-Bm7qcibx.js → local-llm-BsNQFYst.js} +1 -1
  43. package/dist/ui/assets/{local-llm-oYJuPYM9.js → local-llm-CKk6H8PP.js} +1 -1
  44. package/dist/ui/assets/{main-0FLLRgpr.js → main-D1uZduJD.js} +3 -3
  45. package/dist/ui/assets/{main-cherry-DgWyX5j1.js → main-cherry-C309Ei0U.js} +1 -1
  46. package/dist/ui/assets/{memory-curation-seam-DaqkHe0O.js → memory-curation-seam-BHv-E0Wj.js} +1 -1
  47. package/dist/ui/assets/{mount-pNmGh8WK.js → mount-CvYjFqV-.js} +1 -1
  48. package/dist/ui/assets/{mount-BQVKp_Ky.js → mount-DEDbw6Zx.js} +3 -3
  49. package/dist/ui/assets/{mount-recovery-BAhGb_bv.js → mount-recovery-fCH5-MTl.js} +1 -1
  50. package/dist/ui/assets/{new-session-DTTLrwVg.js → new-session-B0QCLfxz.js} +2 -2
  51. package/dist/ui/assets/{oauth-bootstrap-CyfMMMHH.js → oauth-bootstrap-CGkRhQ3S.js} +2 -2
  52. package/dist/ui/assets/{onboarding-orchestrator-yYN6eJua.js → onboarding-orchestrator-CPTdYW2L.js} +1 -1
  53. package/dist/ui/assets/{openai-codex-DG43gisr.js → openai-codex-DYK7kjvj.js} +1 -1
  54. package/dist/ui/assets/{openai-codex-r3KGBkgC.js → openai-codex-DdHlWXt7.js} +1 -1
  55. package/dist/ui/assets/{openrouter-DssYc44Z.js → openrouter-BVTGfTQU.js} +1 -1
  56. package/dist/ui/assets/{openrouter-Bk7xqCwB.js → openrouter-DIGFK8vL.js} +1 -1
  57. package/dist/ui/assets/{openrouter-free-Bhx3nBtn.js → openrouter-free-3AcyjDsF.js} +1 -1
  58. package/dist/ui/assets/{openrouter-free-CSLhk_A7.js → openrouter-free-Ckpy86qX.js} +1 -1
  59. package/dist/ui/assets/{openrouter-oauth-ByDzZ41D.js → openrouter-oauth-BgOHLX8g.js} +1 -1
  60. package/dist/ui/assets/{openrouter-oauth-C8yHZzXx.js → openrouter-oauth-Dg6fl3Oy.js} +1 -1
  61. package/dist/ui/assets/{panel-rpc-handlers-S63g21yk.js → panel-rpc-handlers-CTskO2UP.js} +2 -2
  62. package/dist/ui/assets/{panelize-shell-B59FHf_a.js → panelize-shell-0NEazEbP.js} +1 -1
  63. package/dist/ui/assets/{provider-DTjGYfpI.js → provider-DZFS2iTq.js} +2 -2
  64. package/dist/ui/assets/{provider-B_5ZkOJ1.js → provider-c_Gkn3pV.js} +1 -1
  65. package/dist/ui/assets/provider-settings-CSEOVhGE.js +1 -0
  66. package/dist/ui/assets/provider-store-access-CVanUg7C.js +1 -0
  67. package/dist/ui/assets/provider-store-access-nMfbpDYJ.js +1 -0
  68. package/dist/ui/assets/{providers-w9myWTsL.js → providers-CraHfd4c.js} +1 -1
  69. package/dist/ui/assets/{providers-70klvlGo.js → providers-CuieHopm.js} +2 -2
  70. package/dist/ui/assets/{quick-llm-Bji5F30H.js → quick-llm-CFpL1uZA.js} +1 -1
  71. package/dist/ui/assets/{recovery-screen-lqxJwXM8.js → recovery-screen-CtXko1KE.js} +1 -1
  72. package/dist/ui/assets/{run-Ba8ggbts.js → run-5nsq-ysK.js} +2 -2
  73. package/dist/ui/assets/{run-BWhPamLe.js → run-DGB0hXS2.js} +1 -1
  74. package/dist/ui/assets/{run-Byf9dPJf.js → run-ydpfdHvF.js} +1 -1
  75. package/dist/ui/assets/{session-jsonl-BCOxqyX1.js → session-jsonl-C1iwca-E.js} +1 -1
  76. package/dist/ui/assets/{setup-feature-flags-remote-D1ban-xx.js → setup-feature-flags-remote-CbzffM1B.js} +1 -1
  77. package/dist/ui/assets/sidecar-repair-CXNpjnvd.js +1 -0
  78. package/dist/ui/assets/{silent-renew-backoff-DycrXmC_.js → silent-renew-backoff-gBUL-f53.js} +1 -1
  79. package/dist/ui/assets/{skills-CyvmUs8o.js → skills-9NWZ7vcj.js} +1 -1
  80. package/dist/ui/assets/slicc-version-uWYg_KNr.js +1 -0
  81. package/dist/ui/assets/{snapshot-CezJTIo1.js → snapshot-Czf24viR.js} +1 -1
  82. package/dist/ui/assets/{snapshot-features-i5G7O7jE.js → snapshot-features-DfvhK1Lt.js} +1 -1
  83. package/dist/ui/assets/{soundscape-B9l997Lg.js → soundscape-BLaJxYcC.js} +1 -1
  84. package/dist/ui/assets/{speak-DHglNoiP.js → speak-CAQFQMzh.js} +1 -1
  85. package/dist/ui/assets/{sprinkle-manager-oNv4Dxy0.js → sprinkle-manager-Buwj_jkg.js} +1 -1
  86. package/dist/ui/assets/{sprinkle-renderer-CeGc4B0L.js → sprinkle-renderer-BUZzvREL.js} +1 -1
  87. package/dist/ui/assets/{state-CENLKudR.js → state-MYRT4Xjf.js} +1 -1
  88. package/dist/ui/assets/{store-BZA4REpw.js → store-BDq6OolL.js} +1 -1
  89. package/dist/ui/assets/{store-L5QyZg_g.js → store-CB6g9ei3.js} +1 -1
  90. package/dist/ui/assets/{sudo-B6DNIqye.js → sudo-3qFVn_jk.js} +1 -1
  91. package/dist/ui/assets/{sync-dialog-CroF8oTi.js → sync-dialog-DLe5es1y.js} +1 -1
  92. package/dist/ui/assets/{transformers-env-CUhuRO-A.js → transformers-env-DZUIAHH5.js} +1 -1
  93. package/dist/ui/assets/{tray-sidecar-Djlc71w_.js → tray-sidecar-C7ntovgd.js} +1 -1
  94. package/dist/ui/assets/{upgrade-detection-BLcTRETI.js → upgrade-detection-D3hzscHI.js} +1 -1
  95. package/dist/ui/assets/{voice-reply-Pzf7yCCs.js → voice-reply-g-JL5D2I.js} +1 -1
  96. package/dist/ui/assets/{wc-attach-BBHTF92w.js → wc-attach-KSgc0h1w.js} +2 -2
  97. package/dist/ui/assets/{wc-extension-BVUF-GVc.js → wc-extension-bo5QJG1Y.js} +2 -2
  98. package/dist/ui/assets/{wc-follower-oauth-B-LgkRB6.js → wc-follower-oauth-DUFBBrud.js} +1 -1
  99. package/dist/ui/assets/{wc-follower-9mZwPNR8.js → wc-follower-rNFcP2rQ.js} +3 -3
  100. package/dist/ui/assets/{wc-gelatiere-Cse9kSXf.js → wc-gelatiere-GM9XFlw0.js} +1 -1
  101. package/dist/ui/assets/{wc-live-Ts1bLhjx.js → wc-live-DU8Ig125.js} +5 -5
  102. package/dist/ui/assets/{wc-nav-DO33b6Qg.js → wc-nav-CjA4TRbH.js} +2 -2
  103. package/dist/ui/assets/{wc-onboarding-DeCWfgKN.js → wc-onboarding-DHIjYBxt.js} +2 -2
  104. package/dist/ui/assets/{wc-placeholder-DgM1-HSU.js → wc-placeholder-B6MYdfoe.js} +3 -3
  105. package/dist/ui/assets/{wc-secret-request-BNTQEHzM.js → wc-secret-request-Cr4JjH2j.js} +1 -1
  106. package/dist/ui/assets/{wc-settings-CCJ-33PW.js → wc-settings-B0IuZcmh.js} +3 -3
  107. package/dist/ui/assets/{wc-shell-S_KQG-ZJ.js → wc-shell-BxKrLKUy.js} +3 -3
  108. package/dist/ui/assets/{wc-shortcut-config-DOL-7eLe.js → wc-shortcut-config-VG4rRXQ0.js} +1 -1
  109. package/dist/ui/assets/{wc-shortcuts-BU_YGmdb.js → wc-shortcuts-DqTUPTab.js} +1 -1
  110. package/dist/ui/assets/{wc-sprinkles-l4l891y6.js → wc-sprinkles-CJCiFv9X.js} +2 -2
  111. package/dist/ui/assets/{wc-transcript-export-DRwVoKZj.js → wc-transcript-export-BwmlRSNL.js} +2 -2
  112. package/dist/ui/assets/{wc-tray-qlcU6L0f.js → wc-tray-Csk1-trz.js} +4 -4
  113. package/dist/ui/assets/welcome-detection-CG-n5Lly.js +1 -0
  114. package/dist/ui/assets/{whisper-session-D3sdmYD8.js → whisper-session-CSoPKl8n.js} +2 -2
  115. package/dist/ui/assets/{xai-grok-DStVYmfz.js → xai-grok-CLJ0EDW2.js} +1 -1
  116. package/dist/ui/assets/{xai-grok-pQ6Q0CcQ.js → xai-grok-DY1YCas3.js} +1 -1
  117. package/dist/ui/index.html +3 -3
  118. package/dist/ui/packages/webapp/index.html +3 -3
  119. package/package.json +1 -1
  120. package/dist/ui/assets/CLAUDE-C2sAF3Q0.js +0 -1
  121. package/dist/ui/assets/provider-settings-uchEkvQy.js +0 -1
  122. package/dist/ui/assets/provider-store-access-Cz_2CeJI.js +0 -1
  123. package/dist/ui/assets/provider-store-access-kQEPDMDW.js +0 -1
  124. package/dist/ui/assets/sidecar-repair-CJngowmG.js +0 -1
  125. package/dist/ui/assets/slicc-version-BhF_V6lj.js +0 -1
  126. package/dist/ui/assets/welcome-detection-BFFz2Urt.js +0 -1
@@ -0,0 +1 @@
1
+ import{n as e}from"./wc-onboarding-DHIjYBxt.js";export{e as hasOnboardingFinalLickInHistory};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/speak-DHglNoiP.js","assets/preload-helper-Czpn1I53.js","assets/logger-DDBAeTLF.js","assets/runtime-env-Dlaokqg1.js","assets/speech-assets-bridge-CFYafE89.js","assets/transformers-env-CUhuRO-A.js","assets/wc-shortcuts-BU_YGmdb.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/account-store-igNbS3Ak.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-70klvlGo.js","assets/panel-rpc-B3MSVImO.js","assets/bedrock-camp-compat-BeCSBUrZ.js","assets/icons-Df1OSRR-.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-CUhuRO-A.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-DHglNoiP.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
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/speak-CAQFQMzh.js","assets/preload-helper-Czpn1I53.js","assets/logger-DDBAeTLF.js","assets/runtime-env-Dlaokqg1.js","assets/speech-assets-bridge-CFYafE89.js","assets/transformers-env-DZUIAHH5.js","assets/wc-shortcuts-DqTUPTab.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/account-store-D8e8oik0.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-CuieHopm.js","assets/panel-rpc-B3MSVImO.js","assets/bedrock-camp-compat-BeCSBUrZ.js","assets/icons-Df1OSRR-.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-DZUIAHH5.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-CAQFQMzh.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-igNbS3Ak.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-0FLLRgpr.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
+ import{G as e,f as t}from"./account-store-D8e8oik0.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-D1uZduJD.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-WHtW2xQT.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-uchEkvQy.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};
1
+ import{_ as e,r as t}from"./account-store-CV9MqwUm.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-CSEOVhGE.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};
@@ -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-0FLLRgpr.js"></script>
8
+ <script type="module" crossorigin src="/assets/main-D1uZduJD.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-70klvlGo.js">
30
+ <link rel="modulepreload" crossorigin href="/assets/providers-CuieHopm.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-igNbS3Ak.js">
33
+ <link rel="modulepreload" crossorigin href="/assets/account-store-D8e8oik0.js">
34
34
  <link rel="modulepreload" crossorigin href="/assets/bridge-protocol-06nbmp2X.js">
35
35
  <link rel="modulepreload" crossorigin href="/assets/messages-zAgr7E2T.js">
36
36
  <link rel="modulepreload" crossorigin href="/assets/tray-runtime-config-B9jN9kUJ.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-0FLLRgpr.js"></script>
8
+ <script type="module" crossorigin src="/assets/main-D1uZduJD.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-70klvlGo.js">
30
+ <link rel="modulepreload" crossorigin href="/assets/providers-CuieHopm.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-igNbS3Ak.js">
33
+ <link rel="modulepreload" crossorigin href="/assets/account-store-D8e8oik0.js">
34
34
  <link rel="modulepreload" crossorigin href="/assets/bridge-protocol-06nbmp2X.js">
35
35
  <link rel="modulepreload" crossorigin href="/assets/messages-zAgr7E2T.js">
36
36
  <link rel="modulepreload" crossorigin href="/assets/tray-runtime-config-B9jN9kUJ.js">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sliccy",
3
- "version": "6.150.2",
3
+ "version": "6.150.4",
4
4
  "description": "Browser-based coding agent with thin CLI server",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -1 +0,0 @@
1
- var e="# CLAUDE.md\n\nThis file covers the default virtual filesystem payload in `packages/vfs-root/`.\n\n## What This Package Contains\n\n`packages/vfs-root/` is copied into the app's virtual filesystem on init/reset. It is content, not runtime code.\n\n## Directory Structure\n\n| Path | Purpose |\n| --------------------------------------- | ------------------------------------------------------------------------------------------ |\n| `packages/vfs-root/shared/` | Shared content that becomes `/shared/` in the VFS |\n| `packages/vfs-root/workspace/` | Default workspace content that becomes `/workspace/` in the VFS |\n| `packages/vfs-root/shared/CLAUDE.md` | Agent-facing runtime instructions bundled into `/shared/CLAUDE.md` |\n| `packages/vfs-root/shared/MEMORY.md` | User-editable memory curator config bundled as `/shared/MEMORY.md` |\n| `packages/vfs-root/shared/DREAMING.md` | User-editable memory dreamer config bundled as `/shared/DREAMING.md` |\n| `packages/vfs-root/shared/GELATIERE.md` | User-editable gelatiere pass instructions + config bundled as `/shared/GELATIERE.md` |\n| `packages/vfs-root/shared/wiki/` | Shared knowledge-base scaffold (`WIKI.md` schema, empty `index.md`/`log.md`) |\n| `packages/vfs-root/shared/sprinkles/` | Built-in sprinkle UIs |\n| `packages/vfs-root/shared/sounds/` | Shared notification sounds |\n| `packages/vfs-root/workspace/skills/` | Default installable workspace skills |\n| `packages/vfs-root/etc/` | System config seeded into `/etc/` (`models`, `sudoers`, `APPROVALS.md`, `slicc/keys.json`) |\n\n## Adding Default Content\n\n### Gelatiere\n\n- `shared/GELATIERE.md` is the gelatiere's twin of `MEMORY.md`: the store's build-time fallback\n and the seeded `/shared/GELATIERE.md`, seeded only when absent, user-edited only. Same\n frontmatter dialect (`base/instruction-frontmatter.ts`); keys are `intervalHours`, `nightly`\n (5-field cron) and `maxSuggestions` (capped at 10). No placeholders: the unit `cat`s the file at\n the start of every pass, so keep it self-contained (literal paths, `date` for today).\n- The gelatiere is a persistent SCOOP under a synthetic owner (folder `gelatiere`,\n `scoops/gelatiere-unit.ts`), not a spawned agent: its charter is the record's `systemPromptAppend`, the pass recipe is this file.\n Its deliverable is `gelatiere suggest <candidates.json> && gelatiere deliver`; the command owns\n the store and the addressing. Keep the recipe's commands on `GELATIERE_ALLOWED_COMMANDS` (a child\n escalates anything else) and its cross-pass memory in `/shared/.gelatiere/notes.md`. Design:\n `docs/gelatiere.md`.\n- `shared/sprinkles/suggestions/suggestions.shtml` is the gelatiere's suggestion stream (flat\n entries read through the dip bridge's `slicc.readFile`), split from the onboarding-only\n `shared/sprinkles/welcome/welcome.shtml` so follower/extension handling of the welcome dip can\n never mask or restart the stream. The cone re-posts it as a dip on every delivery (per\n `workspace/skills/gelatiere/SKILL.md`) and it is rail-pickable under Memory v2. The card buttons\n lick `gelatiere-install` / `gelatiere-try` (settled page-side, then the cone acts per the skill)\n and `gelatiere-dismiss` (settled page-side).\n\n### Memory curator\n\n- `shared/MEMORY.md` is the single source for the runner's build-time fallback and the seeded\n `/shared/MEMORY.md` file.\n- The file is seeded only when absent, so user and skill customizations survive later boots.\n- `MEMORY.md` is user-edited only; the curator intentionally cannot rewrite its own instructions.\n- Frontmatter uses a strict YAML subset: block-array items may have `#` comment tails; inline\n entries containing commas must be quoted. A bare `/` is rejected from `writablePaths`.\n- Frontmatter `allowedCommands` entries extend the curator's built-in base set; they do not\n replace or remove base commands.\n- The curator may rewrite the entire memory file, and the hard character budget\n applies to the entire file with no protected region.\n- **The curator edits a staged draft, never the live file.** `{{MEMORY_PATH}}` resolves to\n `/sessions/.curation/<archive>/draft.md`, seeded (with a `base.md` snapshot) from the live\n memory when the pass spawns; the agent bridge three-way-merges base→draft onto the live file\n on exit 0, before the success receipt (`mergeOnSuccess`). Concurrent live edits survive;\n conflicting regions resolve to the curator. A killed or failed run leaves the live memory\n untouched. The bridge also writes `/sessions/.curation/<archive>/status.json` on both exit\n paths (`outcomeReceiptPath`) — the durable ledger of which sessions completed vs failed\n curation; the index entry mirrors it as `memoryCuratedAt` / `memoryFailed`. Per-archive\n keying means parallel per-cone curators (#1666) never share staging state.\n- Every `##`/`###` memory section ends with a `YYYY-MM-DD` last-verified date, in UTC to match\n archive timestamps. Each pass re-verifies the oldest sections first; undated sections are\n maximally stale.\n- Entries follow the provenance/supersession grammar (MEMORY.md \"Entry grammar\"): `human:` /\n `process:` actor prefixes, version pins instead of confidence scores, `stale_after: YYYY-MM-DD`\n as an absolute instant, corrections that REPLACE claims, and a `## Not true` block\n (`- not: … — why … — instead …`) for refuted claims worth keeping as traps. The dreamer\n (`DREAMING.md`) enforces the grammar on old entries and reports contradiction-pair counts\n before/after so a pass that cannot reduce them is visible.\n- The curator's write grant is `/workspace/CLAUDE.md` alone, not `/workspace/`. It can run `upskill`\n to look up a skill for a pitfall it found, and a directory-wide grant would also let it install\n into `/workspace/skills/`. Reads still cover `/workspace/`. Single-file entries in\n `writablePaths` work because `generateScoopSudoers` emits both the bare path and the `/**` form.\n- The pass is detached, so it spawns with `notifyOnComplete`. Its closing message reaches the cone\n on the `scoop-notify` channel; that is where a skill suggestion lands. Without it the report is\n discarded and the cone never learns the pass ran.\n- Turn count is what a pass costs, because every turn re-reads the whole context as a cache read.\n Two things keep it down, and both belong to the prompt rather than the runtime: `thinkingLevel`\n (default `medium`; spawned agents otherwise resolve to `off`) so the curator plans the cut\n instead of converging by trial and error, and the archive reading recipes so it never `cat`s a\n multi-megabyte archive whose `slicc:session-data` block is a single line holding half the file.\n\n### Approver agent\n\n- `etc/APPROVALS.md` is the single source for the runner's build-time fallback and\n the seeded `/etc/APPROVALS.md`, exactly like `shared/MEMORY.md` is for the curator.\n `SudoManager.ensureDefaults()` does the seeding, when absent, on the ungated\n handle — the same place `/etc/sudoers` is seeded, and for the same reason: the\n file is self-protected, so anything else that had to create it (the `upgrade\napply` merge) would prompt the owner to approve the default already in force (#2686).\n- It lives in `/etc/` because it is POLICY, next to `sudoers` — not in `/shared/`,\n which is agent-visible content. Writes to it are self-protected in\n `base/sudoers.ts` (`isSelfProtectedWrite`) for the same reason writes to\n `/etc/sudoers` are: it decides what a GUEST may do, and a cone acting on a\n guest's message must not rewrite the rules gating that guest without the owner\n seeing a prompt.\n- Re-read on EVERY decision, not cached: an owner who tightens it after a bad\n call expects the next decision to use it. Missing or unreadable falls back to\n the bundled default rather than wedging approvals shut.\n- The optional ```yaml block tunes `timeoutSeconds` (clamped — a guest, and for\n a tool gate the cone's turn, is blocked on the decision), `model`, and\n `thinkingLevel`. Unreadable values fall back rather than becoming real.\n- The approver never reads this file itself; the runtime reads it and puts it in\n the prompt. The agent holds no write grant at all.\n\n### Skills\n\n- Add new built-in workspace skills under `packages/vfs-root/workspace/skills/<skill-name>/`.\n- Include `SKILL.md` and any companion assets or `.jsh` scripts the skill needs.\n\n### Wiki\n\n- `shared/wiki/` seeds the shared knowledge base at `/shared/wiki/`: `WIKI.md` is the schema\n contract (upgrade-merged like `MEMORY.md`), `index.md` and `log.md` are user data seeded once.\n- The read-only CLI is `workspace/skills/wiki/wiki.jsh`, adapted from `ai-ecoverse/skills` →\n `skills/llm-wiki/wiki.jsh` with the wiki root pinned to `/shared/wiki`; keep the body in sync\n with upstream when refreshing, and keep the Tier-0 behavior (fs bound via `require`, zero scans\n fail loudly) — `tests/shell/wiki-jsh.test.ts` pins both.\n- The nightly dreamer (`shared/DREAMING.md`) holds the write path: over-budget reference knowledge\n moves from memory files into wiki pages, leaving a pointer line behind.\n\n### Keyboard shortcuts\n\n- `etc/slicc/keys.json` is the user's OVERRIDE file for keyboard mode, seeded on first boot by\n `ui/wc/wc-shortcut-config.ts`. It ships with `\"trigger\": \"auto\"` and `\"bindings\": {}` — the\n keymap itself is `DEFAULT_KEYMAP` in `ui/wc/wc-shortcuts.ts`, and a test asserts the file binds\n nothing. `trigger` is `auto` | `esc` | `null` (Theme settings switches it live).\n- **Never list a binding here again.** v1 wrote its whole keymap into the seed, and because the\n file is applied OVER the defaults that pinned every install to v1 forever: no later map, and no\n key for any command added since, could reach anyone who had booted once. An empty bindings object\n is what makes the shipped map — and every future change to it — inheritable.\n- The one write beyond seeding is that migration: a file still holding the v1 map exactly\n (`isUntouchedV1Document`) is replaced once. Anything else, including v1 with one line changed,\n is the user's and is left alone — an edited config must survive every later boot. Theme settings\n may also rewrite `trigger` in place.\n- The `//` comment must name every `CommandId` (a test asserts it) and carries the v1 keymap as a\n paste-back block for anyone who wants the old keys. `s` maps to `sprinkles` there, not to a\n cycle command: `p`/`s` opens the first and the step keys walk the rest.\n\n### Sprinkles\n\n- Add built-in sprinkles under `packages/vfs-root/shared/sprinkles/<name>/`.\n- Keep the main file named `<name>.shtml` to match discovery and sprinkle naming conventions.\n\n### Sounds\n\n- Add shared sounds under `packages/vfs-root/shared/sounds/`.\n- Prefer stable filenames because shell commands and docs may reference them directly.\n\n## External Handoffs\n\n- Mechanism: RFC 8288 `Link` response header carrying `https://www.sliccy.ai/rel/handoff` or `https://www.sliccy.ai/rel/upskill` on a main-frame document response → `navigate` lick → cone approval card.\n- Agent-facing flow: `packages/vfs-root/workspace/skills/handoff/SKILL.md` (bundled to `/workspace/skills/handoff/SKILL.md`); the agent reaches it through the injected skill index, not through `shared/CLAUDE.md`, which only states that handoffs are human-gated.\n- Protocol reference: `docs/slicc-handoff.md`.\n- When handoff behavior changes, keep the skill and `docs/slicc-handoff.md` aligned — do not duplicate their content here or in `shared/CLAUDE.md`.\n\n## Important Distinction\n\n`packages/vfs-root/shared/CLAUDE.md` is **agent-facing runtime content** bundled into the virtual filesystem.\n\nIt is different from the developer-facing `CLAUDE.md` files in the repository. Do not merge those roles together.\n";export{e as default};
@@ -1 +0,0 @@
1
- import{t as e}from"./logger-LESFN7Hj.js";import"./account-store-WHtW2xQT.js";import"./core-D59qaXEb.js";import"./tray-runtime-config--rtR6Gxd.js";e(`provider-settings`);
@@ -1 +0,0 @@
1
- import{t as e}from"./provider-DTjGYfpI.js";export{e as readMcpAuthEntries};
@@ -1 +0,0 @@
1
- import{t as e}from"./store-L5QyZg_g.js";export{e as readMcpAuthEntries};
@@ -1 +0,0 @@
1
- import{i as e,n as t}from"./fs-ih2eMSkQ.js";export{t as repairOpfsMetadataSidecar,e as resolveWithSidecarRepair};
@@ -1 +0,0 @@
1
- function e(){return{version:`6.150.2`,releasedAt:`2026-09-12T11:00:15Z`,buildId:`6.150.2-mty9xagt`}}let t=null;function n(e){t=e}function r(){return t}export{e as n,n as r,r as t};
@@ -1 +0,0 @@
1
- import{n as e}from"./wc-onboarding-DeCWfgKN.js";export{e as hasOnboardingFinalLickInHistory};