sliccy 6.71.0 → 6.73.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -3
- package/dist/node-server/_shared/sign-and-forward.d.ts +6 -0
- package/dist/node-server/_shared/sign-and-forward.d.ts.map +1 -1
- package/dist/node-server/_shared/sign-and-forward.js +22 -1
- package/dist/node-server/_shared/sign-and-forward.js.map +1 -1
- package/dist/ui/assets/{account-store-yQMPeovo.js → account-store-BuVWWg4g.js} +3 -3
- package/dist/ui/assets/{account-store-DFQ8Dgj9.js → account-store-Dc-E87aK.js} +2 -2
- package/dist/ui/assets/{adobe-t02nptZw.js → adobe-DhSQa1GO.js} +1 -1
- package/dist/ui/assets/{adobe-C0N_GiSE.js → adobe-qoXKYi_7.js} +2 -2
- package/dist/ui/assets/{apply-layout-BIMv75Rh.js → apply-layout-CmtM1OI1.js} +1 -1
- package/dist/ui/assets/{apps-N_cHAFMa.js → apps-DXei5jWs.js} +1 -1
- package/dist/ui/assets/{azure-openai-DCgUdhkV.js → azure-openai-BU3jkdBF.js} +1 -1
- package/dist/ui/assets/{azure-openai-DITUdhKw.js → azure-openai-kGzmQ_gd.js} +1 -1
- package/dist/ui/assets/{backend-local-CsZd2f8u.js → backend-local-B6kc_FvN.js} +2 -2
- package/dist/ui/assets/{cerebras-DXvruR-f.js → cerebras-BFzwGzc8.js} +1 -1
- package/dist/ui/assets/{cerebras-BKsOcNmK.js → cerebras-Dy9qdKPE.js} +1 -1
- package/dist/ui/assets/{client-CSGMDS3X.js → client-BGJKiXya.js} +1 -1
- package/dist/ui/assets/{composer-speech-B31O0GIg.js → composer-speech-DjiKeqzE.js} +1 -1
- package/dist/ui/assets/{connect-surface-BxkxiSNH.js → connect-surface-_7IgUsFb.js} +1 -1
- package/dist/ui/assets/{discovery-preference-lWdnjDWF.js → discovery-preference-DnRQbFjv.js} +1 -1
- package/dist/ui/assets/{ensure-speech-assets-SaPIFvTd.js → ensure-speech-assets-D9TyM6uW.js} +1 -1
- package/dist/ui/assets/{float-topology-De3nA4jm.js → float-topology-BX3WJDxo.js} +1 -1
- package/dist/ui/assets/follower-navigate-watcher-B9JWWBt4.js +1 -0
- package/dist/ui/assets/{fs-DDemTXw8.js → fs-DFixibqD.js} +2 -2
- package/dist/ui/assets/{fs-mfTn4f6R.js → fs-DQberWD7.js} +1 -1
- package/dist/ui/assets/github-BxAcEWAM.js +2 -0
- package/dist/ui/assets/{github-D3_RDWlR.js → github-D_fXbTbQ.js} +1 -1
- package/dist/ui/assets/{github-copilot-Dblzr8C1.js → github-copilot-BPWzy0Xo.js} +1 -1
- package/dist/ui/assets/{github-copilot-DBMMN7nj.js → github-copilot-Bxz89bj_.js} +1 -1
- package/dist/ui/assets/{github-install-S3gH1LN1.js → github-install-BcINIt7W.js} +1 -1
- package/dist/ui/assets/{github-zip-w452Q-_E.js → github-zip-BpiLLNZg.js} +1 -1
- package/dist/ui/assets/{hear-BfIzJaKG.js → hear-B93gms6h.js} +1 -1
- package/dist/ui/assets/{hear-gw7ynFW0.js → hear-WHQF6n_v.js} +1 -1
- package/dist/ui/assets/{host-command-C-OOmT75.js → host-command-DVTPKi1L.js} +1 -1
- package/dist/ui/assets/installer-CyaKvN2m.js +3 -0
- package/dist/ui/assets/{js-realm-worker-kzfHhxZE.js → js-realm-worker-CidRCEJX.js} +1 -1
- package/dist/ui/assets/{kernel-worker-CKJO9mkv.js → kernel-worker-DOJcEOQ_.js} +639 -639
- package/dist/ui/assets/{kokoro-engine-k0nXmrdW.js → kokoro-engine-vHEgB5uZ.js} +1 -1
- package/dist/ui/assets/{lick-urls-DLSVBTRW.js → lick-urls-DEfVsxzt.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-Cxjciab-.js → lick-ws-bridge-C5jpbwXT.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-vaDFKuEL.js → lick-ws-bridge-Cn0JxFJP.js} +1 -1
- package/dist/ui/assets/{local-llm-CKMcrybN.js → local-llm-B7K4wTc6.js} +1 -1
- package/dist/ui/assets/{local-llm-bBO3kMGG.js → local-llm-BJWp5icu.js} +1 -1
- package/dist/ui/assets/{main-NDI7TUj5.js → main-a02U5M9G.js} +3 -3
- package/dist/ui/assets/mount-Cm64PL1z.js +1 -0
- package/dist/ui/assets/mount-aJSBQ7sj.js +2 -0
- package/dist/ui/assets/{mount-bridge-client-D5axbHW9.js → mount-bridge-client-CdactLBz.js} +1 -1
- package/dist/ui/assets/mount-recovery-BKppbelz.js +2 -0
- package/dist/ui/assets/{new-session-B4NDvbFN.js → new-session-PmqHao7W.js} +2 -2
- package/dist/ui/assets/{oauth-bootstrap-BTERUpnb.js → oauth-bootstrap-OJcslCSj.js} +2 -2
- package/dist/ui/assets/{oauth-service-KeQsTKOW.js → oauth-service-C9Jn4g2n.js} +1 -1
- package/dist/ui/assets/{oauth-service-BWDgBZaN.js → oauth-service-DNcIcWT8.js} +1 -1
- package/dist/ui/assets/{openai-codex-YzN0-rk7.js → openai-codex-Bv-imcoM.js} +1 -1
- package/dist/ui/assets/{openai-codex-Tm1Y39dv.js → openai-codex-CYly41Y0.js} +1 -1
- package/dist/ui/assets/{openrouter-L1Z1bzso.js → openrouter-DO5WvDWN.js} +1 -1
- package/dist/ui/assets/{openrouter-DT4yW9JI.js → openrouter-J-ycWIJD.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-BNIfHZiC.js → openrouter-oauth-CFD1A67C.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-BbRCDNH_.js → openrouter-oauth-DMlC1C_K.js} +1 -1
- package/dist/ui/assets/{page-approval-service-D6ou384J.js → page-approval-service-BwheP_IN.js} +1 -1
- package/dist/ui/assets/{panel-rpc-handlers-DvZFQHmG.js → panel-rpc-handlers-BDY-10YP.js} +2 -2
- package/dist/ui/assets/{panelize-shell-BusmMR6B.js → panelize-shell-BuwzGhwR.js} +1 -1
- package/dist/ui/assets/{port-bridge-client-Bw9y6i0a.js → port-bridge-client-CqQzd6rs.js} +1 -1
- package/dist/ui/assets/{port-bridge-client-V3i4ld9z.js → port-bridge-client-VUdCD0pB.js} +1 -1
- package/dist/ui/assets/{provider-CR0TbkfA.js → provider-BSsTn-L_.js} +2 -2
- package/dist/ui/assets/{provider-DcNunfGw.js → provider-BhU0zb85.js} +1 -1
- package/dist/ui/assets/{provider-settings-uQZPJpQ-.js → provider-settings-1-gireds.js} +1 -1
- package/dist/ui/assets/{provider-settings-CmFmQOKw.js → provider-settings-Cs1AC8DE.js} +2 -2
- package/dist/ui/assets/{provider-store-access-D39HNRa8.js → provider-store-access-DhSRscW_.js} +2 -2
- package/dist/ui/assets/provider-store-access-vKVdQSJR.js +1 -0
- package/dist/ui/assets/{providers-CpDGMO7m.js → providers-D9UPT6Cm.js} +1 -1
- package/dist/ui/assets/{providers-CVxe90mP.js → providers-M-hs_Ho5.js} +2 -2
- package/dist/ui/assets/proxied-fetch-5-UeqOh8.js +2 -0
- package/dist/ui/assets/proxied-fetch-CWqWgyRG.js +1 -0
- package/dist/ui/assets/{quick-llm-Ct6grxEh.js → quick-llm-YeJSmz2c.js} +1 -1
- package/dist/ui/assets/{recovery-screen-BtyCzv9Q.js → recovery-screen-Ba5xgxqI.js} +1 -1
- package/dist/ui/assets/redirect-uri-VdQocoGn.js +1 -0
- package/dist/ui/assets/{secret-env-0q_I_PmT.js → secret-env-D-b2fLc6.js} +1 -1
- package/dist/ui/assets/secret-topology-DzxAuCnz.js +1 -0
- package/dist/ui/assets/{secrets-bridge-client-Bz8CHwrq.js → secrets-bridge-client-C6W2y020.js} +1 -1
- package/dist/ui/assets/{session-freezer-Bv1AQxPg.js → session-freezer-BPgOJqHh.js} +3 -3
- package/dist/ui/assets/{setup-feature-flags-remote-BqAkCaPE.js → setup-feature-flags-remote-CaVkw_WZ.js} +1 -1
- package/dist/ui/assets/{setup-standalone-prelude-EvR5fr1C.js → setup-standalone-prelude-DdQgcnCm.js} +2 -2
- package/dist/ui/assets/{setup-sudo-Ba1ZKNJf.js → setup-sudo-DTO3S0U7.js} +2 -2
- package/dist/ui/assets/{skills-BLthDf6N.js → skills-BMrBv0gu.js} +1 -1
- package/dist/ui/assets/slicc-version-C-fMcAtA.js +1 -0
- package/dist/ui/assets/{speak-CPyB70vx.js → speak-BKeTIQet.js} +1 -1
- package/dist/ui/assets/{speak-BU_1au5-.js → speak-DojWcMh7.js} +1 -1
- package/dist/ui/assets/{src-BXAvZ-ei.js → src-C1dIx3UV.js} +189 -142
- package/dist/ui/assets/{store-B-jkwqm-.js → store-B_wawQT3.js} +1 -1
- package/dist/ui/assets/{store-DdWTmm3h.js → store-Bb3MDuJw.js} +1 -1
- package/dist/ui/assets/{sudo-BeUuC0o9.js → sudo-DN1-Hy4S.js} +2 -2
- package/dist/ui/assets/tool-ui-DRnUkp2g.js +1 -0
- package/dist/ui/assets/transformers-env-BHtkkEox.js +1 -0
- package/dist/ui/assets/transformers-env-BbJm3nro.js +1 -0
- package/dist/ui/assets/{tray-leader-CochmofT.js → tray-leader-wwljq4Tw.js} +1 -1
- package/dist/ui/assets/{tray-leave-runtime-Dqijtz8l.js → tray-leave-runtime-5MLCSmgw.js} +1 -1
- package/dist/ui/assets/{tray-runtime-config-BXoU8ne0.js → tray-runtime-config-BoItLnrD.js} +1 -1
- package/dist/ui/assets/tray-runtime-config-DAGrwZQV.js +1 -0
- package/dist/ui/assets/{upgrade-detection-f52RtdSL.js → upgrade-detection-BWBoKii8.js} +1 -1
- package/dist/ui/assets/{voice-reply-sVHTZ7lW.js → voice-reply-CpvxYJTw.js} +1 -1
- package/dist/ui/assets/{wc-attach-Cs2JeOdI.js → wc-attach-DDaQOa8_.js} +2 -2
- package/dist/ui/assets/{wc-extension-BI4I-KdP.js → wc-extension-DdDd5Y_M.js} +2 -2
- package/dist/ui/assets/wc-float-label-BhT8N0Fl.js +1 -0
- package/dist/ui/assets/{wc-follower-4iPR_Tul.js → wc-follower-cBDizOQ9.js} +3 -3
- package/dist/ui/assets/wc-live-CHh-NGIZ.js +8 -0
- package/dist/ui/assets/{wc-nav-B5V0ZfKc.js → wc-nav-CwD8K8To.js} +2 -2
- package/dist/ui/assets/{wc-onboarding-YcNmsJ75.js → wc-onboarding-VVFE8cLN.js} +2 -2
- package/dist/ui/assets/{wc-placeholder-DNzomi1i.js → wc-placeholder-CiutuaNG.js} +2 -2
- package/dist/ui/assets/{wc-settings--zuiJWUa.js → wc-settings-C8fW0nag.js} +3 -3
- package/dist/ui/assets/wc-shell-CDdjB8aV.js +117 -0
- package/dist/ui/assets/{wc-sprinkles-CcJhUBxA.js → wc-sprinkles-D1Q7jho7.js} +2 -2
- package/dist/ui/assets/{wc-tray-9TbX3W4_.js → wc-tray-DhQql48L.js} +2 -2
- package/dist/ui/assets/{wc-tray-scoops-MegcQ3OZ.js → wc-tray-scoops-CpmuS87s.js} +1 -1
- package/dist/ui/assets/{whisper-engine-B8PhWzXe.js → whisper-engine-DSv6HorQ.js} +1 -1
- package/dist/ui/assets/{whisper-session-CX9bk3dj.js → whisper-session-C1hZx_cc.js} +2 -2
- package/dist/ui/assets/{xai-grok-DjZBl8MI.js → xai-grok-D5qZeGy6.js} +1 -1
- package/dist/ui/assets/{xai-grok-QgmTZ127.js → xai-grok-DtGi369r.js} +1 -1
- package/dist/ui/index.html +12 -12
- package/dist/ui/packages/webapp/index.html +12 -12
- package/package.json +1 -1
- package/dist/ui/assets/follower-navigate-watcher-BwI5acCE.js +0 -1
- package/dist/ui/assets/github-Cj9EgGkZ.js +0 -2
- package/dist/ui/assets/installer-BesmgfFs.js +0 -3
- package/dist/ui/assets/mount-C9lbsxh0.js +0 -1
- package/dist/ui/assets/mount-DT8z_PVy.js +0 -2
- package/dist/ui/assets/mount-recovery-mi1lXBvI.js +0 -2
- package/dist/ui/assets/provider-store-access-DG1MMrgG.js +0 -1
- package/dist/ui/assets/proxied-fetch-Cf4bBarA.js +0 -1
- package/dist/ui/assets/proxied-fetch-DLOgqk5A.js +0 -2
- package/dist/ui/assets/redirect-uri-Cs2XQJRH.js +0 -1
- package/dist/ui/assets/secret-topology-3L5_wLhL.js +0 -1
- package/dist/ui/assets/slicc-version-BOhPSJSS.js +0 -1
- package/dist/ui/assets/tool-ui-t6ocn6AG.js +0 -1
- package/dist/ui/assets/transformers-env-2x0fcgXG.js +0 -1
- package/dist/ui/assets/transformers-env-DQiiTgcj.js +0 -1
- package/dist/ui/assets/tray-runtime-config-BDiVOcsu.js +0 -1
- package/dist/ui/assets/wc-float-label-Dsdaicq7.js +0 -1
- package/dist/ui/assets/wc-live-AqeIm2i0.js +0 -8
- package/dist/ui/assets/wc-shell-Db9tKR47.js +0 -117
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{D as t,E as n,m as r,w as i}from"./account-store-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{D as t,E as n,m as r,w as i}from"./account-store-BuVWWg4g.js";import{l as a}from"./bedrock-camp-C8bCNVSq.js";import{t as o}from"./logger-DDBAeTLF.js";import{t as s}from"./llm-session-id-bZQs6gBN.js";import{i as c,t as l}from"./icons-DtQGhvkp.js";var u=e({lucideIconNames:()=>h,pickLucideIcon:()=>g,quickLabel:()=>f}),d=o(`quick-llm`);async function f(e){let i=r();if(!i)return d.debug(`No API key for active provider — skipping`),null;let o=t(),s=n(),c;if(c=e.modelId?b(o,e.modelId)??b(o,s):_(o,s),!c)return d.debug(`No model available for provider`,{providerId:o}),null;let l={role:`user`,content:e.prompt,timestamp:Date.now()},u={};c.provider===`adobe`&&(u[`X-Session-Id`]=S());try{let t=(await a(c,{systemPrompt:e.system,messages:[l]},{apiKey:i,maxTokens:e.maxTokens??60,temperature:e.temperature??.3,signal:e.signal,headers:Object.keys(u).length>0?u:void 0})).content.filter(e=>e.type===`text`).map(e=>e.text).join(``).trim();return t.length>0?t:null}catch(e){return d.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}var p=null;function m(e){return e.replace(/([A-Z]+)([A-Z][a-z])/g,`$1-$2`).replace(/([a-z0-9])([A-Z])/g,`$1-$2`).replace(/([A-Za-z])(\d)/g,`$1-$2`).toLowerCase()}function h(){return p||=Object.keys(c).map(m).sort(),p}async function g(e){let t=h(),n=await(e.labelFn??f)({system:`You pick ONE icon for a UI element. Respond with exactly one icon name from the provided list — lowercase, no quotes, no punctuation, nothing else.`,prompt:`Pick the single most fitting icon for: ${e.subject}\n\nValid icon names:\n${t.join(` `)}`,maxTokens:16,temperature:.2,signal:e.signal});if(!n)return null;let r=n.trim().toLowerCase().replace(/[^a-z0-9-]/g,``);return l(r)?r:null}function _(e,t){let n=i(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],a=y(r.id),o=n.filter(e=>v(e,r,a));return o.length===0?r:(o.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),o[0])}function v(e,t,n){if(e.id===t.id)return!1;let r=t.cost?.input??1/0;if((e.cost?.input??1/0)>=r)return!1;let i=e.id.toLowerCase();switch(n){case`claude`:return i.includes(`haiku`);case`gpt`:return/(^|-)mini(-|$)|(^|-)nano(-|$)/.test(i);case`gemini`:return i.includes(`flash`);case`grok`:return/(^|-)mini(-|$)|(^|-)fast(-|$)/.test(i);case`unknown`:return!0}}function y(e){let t=e.toLowerCase();return t.includes(`claude`)?`claude`:t.includes(`gemini`)?`gemini`:t.includes(`grok`)?`grok`:/^(gpt|o\d)/.test(t)?`gpt`:`unknown`}function b(e,t){return i(e).find(e=>e.id===t)}var x=`ui-quick-llm`;function S(){return s(x)}export{u as n,f as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./main-
|
|
1
|
+
import{t as e}from"./main-a02U5M9G.js";async function t(){try{let e=await navigator.serviceWorker?.getRegistrations?.();e&&await Promise.all(e.map(e=>e.unregister().catch(()=>!1)))}catch{}try{let e=await indexedDB.databases();await Promise.all(e.filter(e=>!!e.name).map(e=>new Promise(t=>{let n=indexedDB.deleteDatabase(e.name);n.onsuccess=()=>t(),n.onerror=()=>t(),n.onblocked=()=>t()})))}catch{}try{let e=navigator.storage;if(typeof e?.getDirectory==`function`){let t=await e.getDirectory(),n=[];for await(let e of t.keys())n.push(e);await Promise.all(n.map(e=>t.removeEntry(e,{recursive:!0}).catch(()=>{})))}}catch{}}function n(n,r,i={}){if(n.dataset.recoveryBusy===`1`)return;let a=i.wipe??t,o=i.reload??(()=>location.reload()),s=r instanceof Error?r.message:String(r),c=i.verdict===`browser-wedged`,l=document.createElement(`div`);l.style.cssText=`padding:2rem;text-align:center;font-family:system-ui;`;let u=document.createElement(`h1`);u.style.color=`var(--s2-negative, #e34850)`,u.textContent=c?`Your browser needs a restart`:`Failed to start`;let d=document.createElement(`p`);d.style.color=`var(--s2-content-tertiary, #717171)`,d.textContent=s;let f=document.createElement(`div`);f.style.cssText=`display:flex;gap:0.75rem;justify-content:center;flex-wrap:wrap;margin-top:1.5rem;`;let p=document.createElement(`button`);p.type=`button`,p.textContent=`Reset local data & reload`,p.dataset.variant=c?`demoted`:`destructive`,p.style.cssText=c?`padding:0.5rem 1rem;cursor:pointer;border:1px solid var(--s2-content-tertiary, #717171);background:transparent;color:inherit;border-radius:4px;`:`padding:0.5rem 1rem;cursor:pointer;border:1px solid var(--s2-negative, #e34850);background:var(--s2-negative, #e34850);color:#fff;border-radius:4px;`;let m=document.createElement(`button`);if(m.type=`button`,m.textContent=`Reload`,m.style.cssText=c?`padding:0.5rem 1rem;cursor:pointer;border:1px solid var(--s2-accent, #0265dc);background:var(--s2-accent, #0265dc);color:#fff;border-radius:4px;`:`padding:0.5rem 1rem;cursor:pointer;border:1px solid var(--s2-content-tertiary, #717171);background:transparent;color:inherit;border-radius:4px;`,p.addEventListener(`click`,()=>{p.disabled=!0,m.disabled=!0,p.textContent=`Resetting…`,n.dataset.recoveryBusy=`1`,(async()=>{try{await a()}catch{}for(let t of e)try{localStorage.removeItem(t)}catch{}o()})()}),m.addEventListener(`click`,()=>{o()}),c){let e=document.createElement(`p`);e.style.cssText=`max-width:34rem;margin:1rem auto 0;`,e.textContent=`This browser has stopped starting web workers — a browser process issue, not a problem with your data. Quit the browser completely, reopen it, and come back. Your local data is intact; resetting it will not fix this.`,l.append(u,d,e),f.append(m,p)}else l.append(u,d),f.append(p,m);for(l.append(f);n.firstChild;)n.removeChild(n.firstChild);n.appendChild(l)}export{n as renderBootRecoveryScreen};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{it as e}from"./account-store-Dc-E87aK.js";async function t(){let t=e();if(t===`extension-direct`){let e=chrome;return e.identity?.getRedirectURL?.(`mcp-callback`)??`https://${e.runtime?.id??``}.chromiumapp.org/mcp-callback`}if(t===`node-rest`){let{getLocalApiBaseUrl:e}=await import(`./proxied-fetch-CWqWgyRG.js`).then(e=>e.n),t=e();if(t)return`${t}/auth/callback`}let{getOAuthPageOrigin:n}=await import(`./oauth-service-DNcIcWT8.js`),{origin:r}=await n();return`${r}${t===`extension-delegate`?`/auth/mcp-callback`:`/auth/callback`}`}export{t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./logger-DDBAeTLF.js";import{o as t,
|
|
1
|
+
import{t as e}from"./logger-DDBAeTLF.js";import{o as t,r as n}from"./proxied-fetch-5-UeqOh8.js";import{n as r}from"./float-topology-BX3WJDxo.js";import"./secret-topology-DzxAuCnz.js";import{t as i}from"./secrets-bridge-client-C6W2y020.js";function a(e){return/^[A-Za-z_][A-Za-z0-9_]*$/.test(e)}var o=e(`secret-env`);function s(e){let t={},n;for(let r of e)!r?.name||!r?.maskedValue||(r.name===`oauth.github.token`&&(n=r.maskedValue),a(r.name)&&(t[r.name]=r.maskedValue));return n&&(t.GITHUB_TOKEN===void 0&&(t.GITHUB_TOKEN=n),t.GH_TOKEN===void 0&&(t.GH_TOKEN=n)),t}async function c(){let e=r();if(e===`extension-direct`)return new Promise(e=>{chrome.runtime.sendMessage({type:`secrets.list-masked-entries`},t=>{let n=s(t?.entries??[]);Object.keys(n).length>0&&o.info(`Loaded masked secrets into shell env from SW`,{count:Object.keys(n).length}),e(n)})});if(e===`extension-delegate`)try{let e=s((await i(`secrets.list-masked-entries`))?.entries??[]);return Object.keys(e).length>0&&o.info(`Loaded masked secrets into shell env from bridge`,{count:Object.keys(e).length}),e}catch(e){return o.debug(`Bridge list-masked-entries failed`,{error:e instanceof Error?e.message:String(e)}),{}}if(e===`connect`)return{};try{let e=await fetch(t(`/api/secrets/masked`),{headers:n()});if(!e.ok)return o.warn(`Failed to fetch masked secrets`,{status:e.status}),{};let r=await e.json();if(!Array.isArray(r)||r.length===0)return{};let i=s(r);return Object.keys(i).length>0&&o.info(`Loaded masked secrets into shell env`,{count:Object.keys(i).length}),i}catch(e){return o.debug(`Could not fetch masked secrets (server may be unavailable)`,{error:e instanceof Error?e.message:String(e)}),{}}}export{c as fetchSecretEnvVars};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./float-topology-BX3WJDxo.js";
|
package/dist/ui/assets/{secrets-bridge-client-Bz8CHwrq.js → secrets-bridge-client-C6W2y020.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./port-bridge-client-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./port-bridge-client-CqQzd6rs.js";var n=e({callSecretsBridge:()=>i}),r=t({portName:`secrets.crud`,panelRpcOp:`secrets-bridge`,timeoutMs:1e4,onUnavailable:`resolve-undefined`,makeError:e=>Error(e),logNamespace:`secrets-bridge`,toPortMessage:({type:e,payload:t})=>({type:e,...t}),toPanelRpcPayload:({type:e,payload:t})=>({type:e,payload:t})});function i(e,t){return r({type:e,payload:t})}export{n,i as t};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/quick-llm-
|
|
2
|
-
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{Q as t,X as n,Z as r}from"./account-store-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/quick-llm-YeJSmz2c.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/account-store-BuVWWg4g.js","assets/preload-helper-Czpn1I53.js","assets/bedrock-camp-C8bCNVSq.js","assets/diagnostics-DN_idNHx.js","assets/transform-messages-N_eMsP2M.js","assets/provider-env-CTOcDKrQ.js","assets/__vite-browser-external-5eBdwsFd.js","assets/openrouter.models-CrhNqqEN.js","assets/libesm-BI4UHVqp.js","assets/logger-DDBAeTLF.js","assets/src-CAWTvdAa.js","assets/proxied-fetch-5-UeqOh8.js","assets/base64-DpPqYZJF.js","assets/runtime-env-Dlaokqg1.js","assets/fetch-body-D2PwksUW.js","assets/float-topology-BX3WJDxo.js","assets/runtime-env-E-i2SW1s.js","assets/secret-topology-DzxAuCnz.js","assets/secrets-bridge-client-C6W2y020.js","assets/port-bridge-client-CqQzd6rs.js","assets/image-markers-BXtVm4og.js","assets/tool-ui-DfXu6quJ.js","assets/providers-M-hs_Ho5.js","assets/panel-rpc-B3MSVImO.js","assets/llm-session-id-bZQs6gBN.js","assets/icons-DtQGhvkp.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{Q as t,X as n,Z as r}from"./account-store-BuVWWg4g.js";import{t as i}from"./preload-helper-Czpn1I53.js";import{l as a}from"./bedrock-camp-C8bCNVSq.js";import{t as o}from"./logger-DDBAeTLF.js";import{t as s}from"./attachments-CByeG2Ru.js";import{t as c}from"./types-idfTVsM8.js";import{t as l}from"./icons-DtQGhvkp.js";import{a as u}from"./dictation-priming-CNllGgNq.js";import"./agent-message-to-chat-_cvF5A5g.js";var d=`---
|
|
3
3
|
writablePaths:
|
|
4
4
|
- /workspace/CLAUDE.md
|
|
5
5
|
visiblePaths:
|
|
@@ -149,7 +149,7 @@ ${n}
|
|
|
149
149
|
`}${s}\n`}async function de(e){if(!e.model||!e.apiKey)return{restructured:!1,reason:`no-llm`};let t=``;try{let n=await e.vfs.readFile(m,{encoding:`utf-8`});t=typeof n==`string`?n:new TextDecoder().decode(n)}catch{return{restructured:!1,reason:`missing-file`}}let n=await g(e.vfs),r=h(n),i=r*ie;if(t.length<=i)return{restructured:!1,reason:`under-threshold`};p.info(`Cone memory over threshold — restructuring`,{size:t.length,budget:r,threshold:i,sessionCount:n});try{let n=await ue({currentContent:t,budget:r,model:e.model,apiKey:e.apiKey,headers:e.headers,signal:e.signal});return await e.vfs.writeFile(m,n),p.info(`Cone memory restructured`,{before:t.length,after:n.length}),{restructured:!0}}catch(e){return p.warn(`Cone memory restructure failed — leaving appended content in place`,{error:e instanceof Error?e.message:String(e)}),{restructured:!1,reason:`error`}}}var _=o(`agentic-memory`),fe=`/shared/MEMORY.md`,pe=[m],me=[`/sessions/`,`/shared/`,`/workspace/`],he=`/workspace`,ge=`awk.cat.cp.cut.date.diff.du.echo.file.find.grep.head.jq.ls.mkdir.mount.mv.nl.od.printf.readlink.sed.sort.stat.tail.touch.tr.uniq.upskill.wc.xxd`.split(`.`),_e=new Set([`writablePaths`,`visiblePaths`,`allowedCommands`]),ve=new Set([`model`,`timeoutSeconds`,`thinkingLevel`]),ye=`medium`,v=3e4;async function be(e){try{if(e.signal?.aborted)return{ok:!1,reason:`aborted`,legacyFallbackSafe:!1};let t=await xe(e.vfs),n=ke(t,Ae(t.promptTemplate,{MEMORY_PATH:m,SESSION_ARCHIVE_PATH:e.sessionArchivePath,SESSION_COUNT:String(e.sessionCount),BUDGET_CHARS:String(h(e.sessionCount)),TODAY:e.today??new Date().toISOString().slice(0,10)}),e.sessionArchivePath);e.signal&&(n.signal=e.signal);let r=await je(Promise.resolve().then(()=>e.spawn(n)),t.timeoutSeconds*1e3+v,e.signal);if(r.type===`timeout`)return _.warn(`Agentic memory wait timed out past the in-run bound + grace`,{timeoutSeconds:t.timeoutSeconds,graceMs:v}),{ok:!1,reason:`timeout`,legacyFallbackSafe:!1};if(r.type===`aborted`)return{ok:!1,reason:`aborted`,legacyFallbackSafe:!1};if(r.type===`error`)return{ok:!1,reason:w(r.error),legacyFallbackSafe:!0};if(r.result.exitCode!==0){let e=(r.result.finalText??``).startsWith(te);return{ok:!1,reason:r.result.finalText||`exit-${r.result.exitCode}`,legacyFallbackSafe:!e}}return{ok:!0,report:r.result.finalText}}catch(e){return _.warn(`Agentic memory pass failed`,{error:w(e)}),{ok:!1,reason:w(e),legacyFallbackSafe:!1}}}async function xe(e){try{let t=await e.readFile(fe,{encoding:`utf-8`});return y(typeof t==`string`?t:new TextDecoder().decode(t))}catch(e){return _.warn(`Could not load valid MEMORY.md; using built-in default`,{error:w(e)}),y(d)}}function y(e){let t=e.replace(/^\uFEFF/,``).replace(/\r\n?/g,`
|
|
150
150
|
`).match(/^---\s*\n([\s\S]*?)\n---\s*\n([\s\S]*)$/);if(!t?.[2].trim())throw Error(`MEMORY.md requires frontmatter and a prompt`);let n=Ce(t[1]),r=x(n,`writablePaths`,pe);if(r.length===0)throw Error(`writablePaths must not be empty`);S(r,`writablePaths`);let i=x(n,`visiblePaths`,me);S(i,`visiblePaths`);let a=Oe(n.timeoutSeconds),o=De(n.model,`model`);return{writablePaths:r,visiblePaths:i,allowedCommands:[...new Set([...ge,...x(n,`allowedCommands`,[])])],...o?{model:o}:{},thinkingLevel:Se(n.thinkingLevel),timeoutSeconds:a,promptTemplate:t[2].trim()}}function Se(e){if(e===void 0)return ye;if(typeof e!=`string`||!ee(e))throw Error(`thinkingLevel must be one of ${f.join(`, `)}`);return e}function Ce(e){let t={},n=e.split(`
|
|
151
151
|
`);for(let e=0;e<n.length;e+=1){let r=n[e];if(!r.trim()||r.trimStart().startsWith(`#`))continue;let i=r.match(/^([A-Za-z][A-Za-z0-9]*):\s*(.*)$/);if(!i)throw Error(`Invalid frontmatter line: ${r}`);let[,a,o]=i;if(_e.has(a)){let r=we(n,e,o);t[a]=r.value,e=r.lastIndex}else if(ve.has(a)&&o.trim())t[a]=b(o);else throw Error(`Unsupported or empty frontmatter field: ${a}`)}return t}function we(e,t,n){if(n.trim()){let e=n.trim();if(!e.startsWith(`[`)||!e.endsWith(`]`))throw Error(`Expected an array`);let r=e.slice(1,-1).trim();return{value:r?Te(r):[],lastIndex:t}}let r=[],i=t;for(let n=t+1;n<e.length;n+=1){let t=e[n].match(/^\s+-\s+(.+)$/);if(!t)break;r.push(b(Ee(t[1]))),i=n}return{value:r,lastIndex:i}}function Te(e){let t=[],n=0,r;for(let i=0;i<e.length;i+=1){let a=e[i];a===`"`||a===`'`?r=r===a?void 0:r??a:a===`,`&&!r&&(t.push(b(e.slice(n,i))),n=i+1)}if(r)throw Error(`Unclosed quoted value`);return t.push(b(e.slice(n))),t}function Ee(e){let t;for(let n=0;n<e.length;n+=1){let r=e[n];if(r===`"`||r===`'`)t=t===r?void 0:t??r;else if(r===`#`&&!t&&(n===0||/\s/.test(e[n-1])))return e.slice(0,n).trimEnd()}return e}function b(e){let t=e.trim();if(!t)throw Error(`Empty frontmatter value`);let n=t[0];if((n===`"`||n===`'`)&&t.at(-1)===n)return t.slice(1,-1);if(n===`"`||n===`'`)throw Error(`Unclosed quoted value`);return t}function x(e,t,n){let r=e[t];if(r===void 0)return[...n];if(!Array.isArray(r)||r.some(e=>!e))throw Error(`${t} is invalid`);return[...r]}function De(e,t){if(e!==void 0){if(typeof e!=`string`||!e)throw Error(`${t} is invalid`);return e}}function Oe(e){if(e===void 0)return 600;if(typeof e!=`string`)throw Error(`timeoutSeconds is invalid`);let t=Number(e);if(!Number.isFinite(t)||t<=0)throw Error(`timeoutSeconds must be positive`);return Math.min(t,600)}function S(e,t){if(e.some(e=>!e.startsWith(`/`)||e.includes(`\0`)||t===`writablePaths`&&e===`/`))throw Error(`${t} must contain absolute VFS paths`)}function C(e){return`/sessions/.curated/${e.slice(e.lastIndexOf(`/`)+1)}`}function ke(e,t,n){let r=e.model===`parent`||e.model===`cone`;return{cwd:he,writablePaths:e.writablePaths,visiblePaths:e.visiblePaths,allowedCommands:e.allowedCommands,prompt:t,thinkingLevel:e.thinkingLevel,persistSession:!0,name:`memory-curator`,notifyOnComplete:!0,successReceiptPath:C(n),maxWallClockMs:e.timeoutSeconds*1e3,...!r&&e.model?{modelId:e.model}:{}}}function Ae(e,t){let n=e;for(let[e,r]of Object.entries(t))n=n.replaceAll(`{{${e}}}`,r);return n}function je(e,t,n){return new Promise(r=>{let i=!1,a=e=>{i||(i=!0,clearTimeout(s),n?.removeEventListener(`abort`,o),r(e))},o=()=>a({type:`aborted`}),s=setTimeout(()=>a({type:`timeout`}),t);n?.addEventListener(`abort`,o,{once:!0}),e.then(e=>a({type:`result`,result:e}),e=>a({type:`error`,error:e}))})}function w(e){return e instanceof Error?e.message:String(e)}var T=`/sessions`,E=`/sessions/index.json`;async function D(e){try{let t=await e.readFile(E,{encoding:`utf-8`}),n=typeof t==`string`?t:new TextDecoder().decode(t),r=JSON.parse(n);return Array.isArray(r)?r:[]}catch{return[]}}function O(e){return`${T}/${e.filename}`}function k(e){let t=e,n=`Untitled`,r={},i=t.match(/^---\n([\s\S]*?)\n---\n+/);if(i){t=t.slice(i[0].length);let e=A(i[1],`cost`),a=A(i[1],`models`);e&&(r.cost=e),a&&(r.models=a);let o=i[1].match(/^title:\s*(.+?)\s*$/m);if(o){let e=o[1].trim();if(e.startsWith(`"`))try{let t=JSON.parse(e);typeof t==`string`&&(n=t)}catch{n=e.replace(/^"|"$/g,``)}else n=e}}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:Me(t),...r}}function A(e,t){let n=RegExp(`^${t}:\\s*(.+?)\\s*$`,`m`).exec(e)?.[1];if(n)try{return JSON.parse(n)}catch{return}}function Me(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}function j(e){let t=``;for(let n of e){let e=n.role===`user`?`User`:`Assistant`,r=n.role===`user`?u(n.content):n.content;if(t+=`## ${e}\n${r}\n\n`,n.attachments?.length&&(t+=`Attachments:\n${n.attachments.map(e=>`- ${s(e)}`).join(`
|
|
152
|
-
`)}\n\n`),n.toolCalls)for(let e of n.toolCalls)t+=`### Tool: ${e.name}\nInput: ${JSON.stringify(e.input,null,2)}\nResult: ${e.result??``}\n\n`}return t}var Ne=e({PENDING_SESSION_ATTEMPT_LIMIT:()=>3,SESSIONS_INDEX_PATH:()=>E,curateFrozenSessionMemories:()=>I,enrichPendingSession:()=>X,freezeConeSession:()=>F,listPendingEnrichments:()=>q,markSnapshotUnavailable:()=>$,processPendingSessions:()=>J,readSessionsIndex:()=>D}),M=o(`session-freezer`),Pe=4,N=2048,P=40,Fe=`${T}/attachments`;async function F(e){let t=await Ge(e.sessionStore);if(!t||t.messages.length<Pe)return M.info(`Skipping freeze: session below threshold or missing`,{messageCount:t?.messages.length??0}),null;let n=H(t.messages),r=e.mode??`full`,i=r===`full`&&!!(e.apiKey&&e.model);e.agenticMemorySpawn||await R(e,n,i);let a=await Le(e,n,i)||Xe(t.messages);return await z(e,t,a,r,i?await Ie(e,a):void 0,!!e.agenticMemorySpawn)}async function I(e,t){let n=H(t.archive.messages),r;try{r=await be({spawn:e.agenticMemorySpawn,vfs:e.vfs,sessionArchivePath:O(t),sessionCount:await g(e.vfs)})}catch(e){r={ok:!1,reason:e instanceof Error?e.message:String(e),legacyFallbackSafe:!1}}if(r.ok){let n=await lt(e.vfs,t.filename);return await Z(e.vfs,t.filename),n?(delete t.memoryPending,M.info(`Agentic memory pass completed`,{filename:t.filename}),n):(M.info(`Agentic memory pass completed; index entry already gone`,{filename:t.filename}),null)}return r.legacyFallbackSafe?(M.warn(`Agentic memory pass failed after finishing — falling back to legacy extraction`,{filename:t.filename,reason:r.reason}),await R(e,n,!0),null):(M.warn(`Agentic memory pass unfinished — entry stays pending for boot catch-up`,{filename:t.filename,reason:r.reason,attemptLimit:3}),null)}async function Ie(e,t){try{return L(await(e.pickIcon??(await i(async()=>{let{pickLucideIcon:e}=await import(`./quick-llm-
|
|
152
|
+
`)}\n\n`),n.toolCalls)for(let e of n.toolCalls)t+=`### Tool: ${e.name}\nInput: ${JSON.stringify(e.input,null,2)}\nResult: ${e.result??``}\n\n`}return t}var Ne=e({PENDING_SESSION_ATTEMPT_LIMIT:()=>3,SESSIONS_INDEX_PATH:()=>E,curateFrozenSessionMemories:()=>I,enrichPendingSession:()=>X,freezeConeSession:()=>F,listPendingEnrichments:()=>q,markSnapshotUnavailable:()=>$,processPendingSessions:()=>J,readSessionsIndex:()=>D}),M=o(`session-freezer`),Pe=4,N=2048,P=40,Fe=`${T}/attachments`;async function F(e){let t=await Ge(e.sessionStore);if(!t||t.messages.length<Pe)return M.info(`Skipping freeze: session below threshold or missing`,{messageCount:t?.messages.length??0}),null;let n=H(t.messages),r=e.mode??`full`,i=r===`full`&&!!(e.apiKey&&e.model);e.agenticMemorySpawn||await R(e,n,i);let a=await Le(e,n,i)||Xe(t.messages);return await z(e,t,a,r,i?await Ie(e,a):void 0,!!e.agenticMemorySpawn)}async function I(e,t){let n=H(t.archive.messages),r;try{r=await be({spawn:e.agenticMemorySpawn,vfs:e.vfs,sessionArchivePath:O(t),sessionCount:await g(e.vfs)})}catch(e){r={ok:!1,reason:e instanceof Error?e.message:String(e),legacyFallbackSafe:!1}}if(r.ok){let n=await lt(e.vfs,t.filename);return await Z(e.vfs,t.filename),n?(delete t.memoryPending,M.info(`Agentic memory pass completed`,{filename:t.filename}),n):(M.info(`Agentic memory pass completed; index entry already gone`,{filename:t.filename}),null)}return r.legacyFallbackSafe?(M.warn(`Agentic memory pass failed after finishing — falling back to legacy extraction`,{filename:t.filename,reason:r.reason}),await R(e,n,!0),null):(M.warn(`Agentic memory pass unfinished — entry stays pending for boot catch-up`,{filename:t.filename,reason:r.reason,attemptLimit:3}),null)}async function Ie(e,t){try{return L(await(e.pickIcon??(await i(async()=>{let{pickLucideIcon:e}=await import(`./quick-llm-YeJSmz2c.js`).then(e=>e.n);return{pickLucideIcon: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]))).pickLucideIcon)({subject:`"${t}" — an archived chat session`})??void 0)}catch(e){M.warn(`Icon pick failed (freeze still proceeds)`,{error:e instanceof Error?e.message:String(e)});return}}function L(e){if(e)return l(e)?e:void 0}async function R(e,r,i){if(!i){M.info(`LLM unavailable — skipping memory extraction; freezing anyway`);return}let a=``;try{a=await t({messages:r,instruction:n,model:e.model,apiKey:e.apiKey,maxTokens:N,headers:e.headers})}catch(e){M.warn(`Memory extraction call failed (freeze still proceeds)`,{error:e instanceof Error?e.message:String(e)});return}if(!a.trim()||a.trim()===`NONE`){M.info(`Memory extraction returned no durable memories`);return}try{await K(e.vfs,a.trim(),`new-session`,{model:e.model,apiKey:e.apiKey,headers:e.headers}),M.info(`Memory extracted and appended on new-session`)}catch(e){M.warn(`Memory append failed`,{error:e instanceof Error?e.message:String(e)})}}async function Le(e,n,i){if(!i)return``;try{return U(await t({messages:n,instruction:r,model:e.model,apiKey:e.apiKey,maxTokens:P,headers:e.headers}))}catch(e){return M.warn(`Title generation call failed (using heuristic)`,{error:e instanceof Error?e.message:String(e)}),``}}async function z(e,t,n,r,i,a=!1){let o=new Date().toISOString(),s=crypto.randomUUID(),c=r===`quick`?`pending-${Ze()}.md`:`${o.replace(/[:.]/g,`-`)}-${W(n)}.md`,l=Re(t.messages),u={filename:c,sessionId:s,title:n,frozenAt:o,messageCount:t.messages.length,...l??{},...i?{icon:i}:{},...r===`quick`?{pendingEnrichment:!0}:{},...a?{memoryPending:!0}:{}};try{await G(e.vfs,T);let r=await Be(e.vfs,t.messages,c.replace(/\.md$/,``)),i={id:t.id,title:n,frozenAt:o,createdAt:t.createdAt,updatedAt:t.updatedAt,messageCount:t.messages.length,messages:r,...l??{}},a=Ye(i);return await e.vfs.writeFile(`${T}/${c}`,a),await $e(e.vfs,u),await e.vfs.flush(),M.info(`Cone session frozen`,{filename:c,title:n,messageCount:t.messages.length}),{...u,archive:i}}catch(e){return M.warn(`Failed to write frozen session to VFS`,{error:e instanceof Error?e.message:String(e)}),null}}function Re(e){let t={total:0,input:0,output:0,cacheRead:0,cacheWrite:0},n=new Map,r=!1;for(let i of e){if(i.role!==`assistant`)continue;let{model:e,usage:a}=i;if(!e||!a||!ze(a))return null;let o=a.cost;r=!0,t.total+=o.total,t.input+=o.input,t.output+=o.output,t.cacheRead+=o.cacheRead,t.cacheWrite+=o.cacheWrite;let s=n.get(e)??{model:e,cost:0,turns:0,tokens:0};s.cost+=o.total,s.turns+=1,s.tokens+=a.input+a.output+a.cacheRead+a.cacheWrite,n.set(e,s)}return r?{cost:t,models:[...n.values()].sort((e,t)=>t.cost-e.cost)}:null}function B(e){return typeof e==`number`&&Number.isFinite(e)}function ze(e){let{cost:t}=e;return[e.input,e.output,e.cacheRead,e.cacheWrite].every(B)&&[t.input,t.output,t.cacheRead,t.cacheWrite,t.total].every(B)}async function Be(e,t,n){let r={vfs:e,archiveDir:`${Fe}/${n}`,copiedPaths:new Map,fileIndex:0},i=[];for(let e of t){if(!e.attachments?.some(V)){i.push(e);continue}let t=[];for(let n of e.attachments)t.push(await Ve(r,n));i.push({...e,attachments:t})}return i}async function Ve(e,t){if(!V(t))return t;let n=e.copiedPaths.get(t.path);if(n)return{...t,path:n};let r=await He(e.vfs,t.path);if(!r)return We(t);let i=t.name.replace(/[^A-Za-z0-9._-]+/g,`_`)||`attachment`,a=`${e.archiveDir}/${e.fileIndex++}-${i}`;return await G(e.vfs,e.archiveDir),await e.vfs.writeFile(a,r),e.copiedPaths.set(t.path,a),{...t,path:a}}async function He(e,t){try{if(!await Ue(e,t))return null;let n=await e.readFile(t,{encoding:`binary`});if(!(n instanceof Uint8Array))throw Error(`Expected binary attachment content at ${t}`);return n}catch{return null}}function V(e){return typeof e.path==`string`&&e.path.startsWith(`/tmp/`)&&e.data===void 0&&e.text===void 0}async function Ue(e,t){let n=t.split(`/`).slice(1);if(n.length<2||n[0]!==`tmp`||n.some(e=>!e||e===`.`||e===`..`))return!1;let r=`/`;for(let t=0;t<n.length;t+=1){let i=(await e.readDir(r)).find(e=>e.name===n[t]);if(!i)return!1;if(t===n.length-1)return i.type===`file`;if(i.type!==`directory`)return!1;r=r===`/`?`/${n[t]}`:`${r}/${n[t]}`}return!1}function We(e){let{path:t,...n}=e;return{...n,error:e.error??`Archived attachment file is missing or unsafe to preserve.`}}async function Ge(e){try{return await e.load(`session-cone`)}catch(e){return M.warn(`Failed to load session-cone`,{error:e instanceof Error?e.message:String(e)}),null}}function H(e){return e.map(e=>({role:e.role,content:[{type:`text`,text:e.content}],timestamp:e.timestamp}))}var Ke=`<!-- slicc:session-data
|
|
153
153
|
`,qe=`
|
|
154
154
|
-->`;function Je(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),t})}function Ye(e){let t=(e.cost?`cost: ${JSON.stringify(e.cost)}\n`:``)+(e.models?`models: ${JSON.stringify(e.models)}\n`:``),n=`---\nid: ${e.id}\ntitle: ${JSON.stringify(e.title)}\nfrozenAt: ${e.frozenAt}\ncreatedAt: ${e.createdAt}\nupdatedAt: ${e.updatedAt}\nmessageCount: ${e.messageCount}\n`+t+`---
|
|
155
155
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./feature-flags-Cf-Bv5AK.js";import{h as t,n,t as r}from"./tray-runtime-config-
|
|
1
|
+
import{n as e}from"./feature-flags-Cf-Bv5AK.js";import{h as t,n,t as r}from"./tray-runtime-config-DAGrwZQV.js";import{n as i,r as a}from"./main-a02U5M9G.js";var o=3e3;async function s(t,n){let r=i(n.storage);try{let i=new URL(`/api/flags`,`${n.workerBaseUrl.replace(/\/+$/,``)}/`);i.searchParams.set(`float`,t);let s=await c(i.toString(),n.fetchImpl??fetch,n.timeoutMs??o);if(!s)return;a(r,t,s),e(t,s)}catch{}}async function c(e,t,n){let r=new AbortController,i;try{let a=new Promise(e=>{i=setTimeout(()=>{r.abort(),e(null)},n)}),o=t(e,{cache:`no-store`,headers:{Accept:`application/json`},signal:r.signal}).then(async e=>e.ok?l(await e.json()):null).catch(()=>null);return await Promise.race([o,a])}catch{return null}finally{i!==void 0&&clearTimeout(i)}}function l(e){return!u(e)||!u(e.flags)||Object.values(e.flags).some(e=>typeof e!=`string`)?null:e.flags}function u(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function d(e,t){return s(e,{workerBaseUrl:f(t),storage:t.storage})}function f(e){let i=p(e.storage),a=t(e.envBaseUrl??null);if(i)return i;if(a)return a;if(!e.isDev)try{let t=new URL(e.locationHref);if(t.protocol===`http:`||t.protocol===`https:`)return t.origin}catch{}return e.isDev?n:r}function p(e){try{return t(e?.getItem(`slicc.trayWorkerBaseUrl`)??null)}catch{return null}}export{d as refreshFeatureFlagsForPage};
|
package/dist/ui/assets/{setup-standalone-prelude-EvR5fr1C.js → setup-standalone-prelude-DdQgcnCm.js}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/extension-bridge-transport-D3PItLFo.js","assets/logger-DDBAeTLF.js","assets/pending-request-table-Dgn6qYdL.js","assets/lick-ws-bridge-
|
|
2
|
-
import{t as e}from"./preload-helper-Czpn1I53.js";import{t}from"./logger-DDBAeTLF.js";import"./src-CAWTvdAa.js";import{c as n,l as r,s as i}from"./proxied-fetch-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/extension-bridge-transport-D3PItLFo.js","assets/logger-DDBAeTLF.js","assets/pending-request-table-Dgn6qYdL.js","assets/lick-ws-bridge-Cn0JxFJP.js","assets/logger-BoSvu4mW.js","assets/tray-leader-wwljq4Tw.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/proxied-fetch-5-UeqOh8.js","assets/preload-helper-Czpn1I53.js","assets/base64-DpPqYZJF.js","assets/src-CAWTvdAa.js","assets/runtime-env-Dlaokqg1.js","assets/fetch-body-D2PwksUW.js","assets/runtime-env-CgsZ7LTp.js","assets/runtime-env-E-i2SW1s.js","assets/tray-runtime-config-DAGrwZQV.js","assets/messages-BD4p8GuF.js","assets/db-C7OEVMWU.js","assets/cdp-BAGGi_P9.js","assets/navigation-watcher-CcKsLKw9.js","assets/handoff-link-BM4ctkE8.js","assets/remote-cdp-transport-CgOXLjZ8.js","assets/tray-sync-protocol-BZ5yhJH9.js","assets/main-cherry-L2scWl6W.js","assets/synthetic-cdp-transport-Ds83IPjw.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{t as e}from"./preload-helper-Czpn1I53.js";import{t}from"./logger-DDBAeTLF.js";import"./src-CAWTvdAa.js";import{c as n,l as r,s as i}from"./proxied-fetch-5-UeqOh8.js";import{t as a}from"./bridge-launch-params-zrpWWxT3.js";import{t as o}from"./runtime-env-Dlaokqg1.js";import"./runtime-env-CgsZ7LTp.js";import"./messages-BD4p8GuF.js";import{d as s,s as c,t as l,u}from"./tray-runtime-config-DAGrwZQV.js";import{t as d}from"./setup-sudo-DTO3S0U7.js";function f(e,t,n){if(t){try{if(new URL(e).searchParams.has(`detached`))return`extension-detached`}catch{}return`extension`}try{let t=new URL(e);if(t.searchParams.get(`connect`)===`1`)return`connect`;if(t.searchParams.get(`runtime`)===`hosted-leader`)return`hosted-leader`;if(t.searchParams.get(`cherry`)===`1`)return`cherry`;let r=n===void 0?typeof window<`u`?window.localStorage:null:n;return u(e,r)?`follower`:m(t)?`electron-overlay`:`standalone`}catch{return`standalone`}}function p(e,t){return e===`electron-overlay`||e===`hosted-leader`||e===`standalone`&&t}function m(e){return e.pathname===`/electron`||e.pathname===`/electron/`||e.searchParams.get(`runtime`)===`electron-overlay`}t(`stale-asset`);var h=`slicc-stale-asset-reload`;function g(e,t){if(typeof BroadcastChannel!=`function`)return()=>{};let n=new BroadcastChannel(h),r=n=>{let r=n.data;r?.type===`stale-asset-reload`&&r.instanceId===e&&t(r.replayTurn===!0)};return n.addEventListener(`message`,r),()=>{n.removeEventListener(`message`,r),n.close()}}var _=`slicc:stale-asset-reloaded-at`,v=6e4,y=`slicc:stale-asset-replay`;function b(e=window.sessionStorage){try{e.setItem(y,`1`)}catch{}}function x(e=window.sessionStorage){try{return e.getItem(y)===`1`&&(e.removeItem(y),!0)}catch{return!1}}function S(){return{reload:()=>window.location.reload(),storage:window.sessionStorage,now:()=>Date.now(),windowMs:v,storageKey:_}}function C(e,t,n){return e===null||t-e>=n}function w(e=S()){let t;try{t=e.storage.getItem(e.storageKey)}catch{return!1}let n=t===null?null:Number(t),r=n!==null&&Number.isFinite(n)?n:null,i=e.now();if(!C(r,i,e.windowMs))return!1;try{e.storage.setItem(e.storageKey,String(i))}catch{return!1}return e.reload(),!0}var T=null,E=null;function D(e){T||(E={...S(),...e},T=e=>{w(E)&&e.preventDefault()},window.addEventListener(`vite:preloadError`,T))}var O=null;function k(e){return O||(O=g(e,e=>{e&&b(),w(E??void 0)}),O)}var A=`slicc-cdp-superseded-banner`;function j(e){if(e.getElementById(A))return;let t=e.createElement(`div`);t.id=A,t.setAttribute(`role`,`alert`),t.textContent=`Another SLICC tab or window has taken control of this browser instance. Only one tab can drive the browser per instance — close the other tabs, then reload this page to resume.`,t.style.cssText=[`position:fixed`,`top:0`,`left:0`,`right:0`,`z-index:2147483647`,`padding:10px 16px`,`background:#b3261e`,`color:#fff`,`font:13px/1.4 system-ui,sans-serif`,`text-align:center`,`box-shadow:0 1px 4px rgba(0,0,0,0.3)`].join(`;`),e.body.appendChild(t)}function M(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`slicc-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function N(e){let t;try{t=new URLSearchParams(e)}catch{return null}if(t.get(`slicc`)!==`leader`)return null;let n=t.get(`ext`);return n?{extensionId:n}:null}var P=[100,200,400,800,1600];async function F(e,t,n,r=P,i=e=>new Promise(t=>setTimeout(t,e))){let a=r.length+1,o=null;for(let s=0;s<a;s++)try{await e.connect(t),s>0&&n.info(`CDP bridge connect succeeded after retry`,{attempt:s+1});return}catch(e){o=e,s<r.length&&await i(r[s]??0)}n.warn(`Initial CDP connect failed after retries; worker-forwarded commands will retry on demand`,o instanceof Error?o.message:String(o))}async function I(t,n,r){let{ExtensionBridgeTransport:i}=await e(async()=>{let{ExtensionBridgeTransport:e}=await import(`./extension-bridge-transport-D3PItLFo.js`);return{ExtensionBridgeTransport:e}},__vite__mapDeps([0,1,2])),{mapDiscoveryPayloadToLickEvent:a,mapNavigatePayloadToLickEvent:o}=await e(async()=>{let{mapDiscoveryPayloadToLickEvent:e,mapNavigatePayloadToLickEvent:t}=await import(`./lick-ws-bridge-Cn0JxFJP.js`);return{mapDiscoveryPayloadToLickEvent:e,mapNavigatePayloadToLickEvent:t}},__vite__mapDeps([3,1,4,5,6,7,8,9,10,11,12,13,14,15,16,17])),s=null,c=[],l=!1,u=e=>{s=e;for(let t of c)e.sendForwardedLick(t);c.length=0},d=e=>{if(e){if(s){s.sendForwardedLick(e);return}c.length>=50&&(c.shift(),l||(l=!0,r.warn(`extension-bridge lick buffer overflow (cap 50); dropping oldest pending licks until the kernel client attaches`))),c.push(e)}},f=new t(new i({extensionId:n,onLick:e=>{d(o(e))},onDiscovery:e=>{d(a(e))},onOpenSettings:()=>{globalThis.dispatchEvent(new CustomEvent(`slicc:open-settings-from-panel`))}}));return await F(f,void 0,r),{browser:f,attachLickForwardingClient:u}}async function L(t){let{runtimeMode:u,envBaseUrl:f,window:m,log:h}=t,g=u===`electron-overlay`;h.info(`setting up standalone page runtime (BrowserAPI + CDP)`,{runtimeMode:u});let{BrowserAPI:_}=await e(async()=>{let{BrowserAPI:e}=await import(`./cdp-BAGGi_P9.js`);return{BrowserAPI:e}},__vite__mapDeps([18,1,2,4,19,20,10,21,22]));await d({log:h});let v,y,b,x=null,S=null,C=null,w=null,T,E=u===`cherry`?null:N(m.location.search),D=!!E&&o(),O=u===`cherry`||D?null:a(m.location.search);O?.apiBaseUrl&&(x=O.apiBaseUrl,r(O.apiBaseUrl),S=O.token,i(O.token)),O?.lickWsUrl&&(C=O.lickWsUrl);let k=u===`cherry`||D||O!==null,A=await c(),P=p(u,A!==null)?l:null;if(await s({locationHref:m.location.href,storage:m.localStorage,envBaseUrl:f,defaultWorkerBaseUrl:P,runtimeConfigFetcher:async()=>A}),u===`cherry`){let{setupCherryFollower:t}=await e(async()=>{let{setupCherryFollower:e}=await import(`./main-cherry-L2scWl6W.js`);return{setupCherryFollower:e}},__vite__mapDeps([23,1,10,2,18,4,19,20,21,22,24])),n=await t();v=n.browser,y=n.joinUrl,b=n.transport}else if(E&&o()){h.info(`Routing CDP through the extension bridge (leader tab)`);let e=await I(_,E.extensionId,h);v=e.browser,T=e.attachLickForwardingClient,w=E.extensionId,n(E.extensionId)}else{v=new _,O&&h.info(`Routing CDP through local standalone bridge`,{url:O.url,role:O.role??`(unset)`});let e=O?{url:O.url,protocols:O.subprotocol}:void 0;O?.role===`follower`?(h.info(`Skipping CDP connect for follower overlay tab`),v.primeConnectOptions(e)):(await F(v,e,h),v.setCdpSupersededHandler(()=>j(m.document)))}let L=v.getTransport();return globalThis.__slicc_browser=v,{browser:v,realCdpTransport:L,hasLocalCdpSurface:k,cherryJoinUrl:y,cherryTransport:b,instanceId:M(),isElectronOverlay:g,localApiBaseUrl:x,bridgeToken:S,localLickWsUrl:C,extensionDelegateId:w,attachLickForwardingClient:T}}export{k as a,w as i,L as n,D as o,x as r,f as s,N as t};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/sudo-
|
|
2
|
-
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./preload-helper-Czpn1I53.js";var n=e({setupSudoExtension:()=>i,setupSudoStandalone:()=>r});async function r(e){let{installSudoTestHook:n}=await t(async()=>{let{installSudoTestHook:e}=await import(`./sudo-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/sudo-DN1-Hy4S.js","assets/preload-helper-Czpn1I53.js","assets/logger-DDBAeTLF.js","assets/proxied-fetch-5-UeqOh8.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/base64-DpPqYZJF.js","assets/src-CAWTvdAa.js","assets/runtime-env-Dlaokqg1.js","assets/fetch-body-D2PwksUW.js","assets/runtime-env-CgsZ7LTp.js","assets/runtime-env-E-i2SW1s.js","assets/quick-llm-YeJSmz2c.js","assets/account-store-BuVWWg4g.js","assets/bedrock-camp-C8bCNVSq.js","assets/diagnostics-DN_idNHx.js","assets/transform-messages-N_eMsP2M.js","assets/provider-env-CTOcDKrQ.js","assets/__vite-browser-external-5eBdwsFd.js","assets/openrouter.models-CrhNqqEN.js","assets/libesm-BI4UHVqp.js","assets/float-topology-BX3WJDxo.js","assets/secret-topology-DzxAuCnz.js","assets/secrets-bridge-client-C6W2y020.js","assets/port-bridge-client-CqQzd6rs.js","assets/image-markers-BXtVm4og.js","assets/tool-ui-DfXu6quJ.js","assets/providers-M-hs_Ho5.js","assets/panel-rpc-B3MSVImO.js","assets/llm-session-id-bZQs6gBN.js","assets/icons-DtQGhvkp.js","assets/page-approval-service-BwheP_IN.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./preload-helper-Czpn1I53.js";var n=e({setupSudoExtension:()=>i,setupSudoStandalone:()=>r});async function r(e){let{installSudoTestHook:n}=await t(async()=>{let{installSudoTestHook:e}=await import(`./sudo-DN1-Hy4S.js`);return{installSudoTestHook:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]));n()}async function i(e){let{installPanelSudoResponder:n}=await t(async()=>{let{installPanelSudoResponder:e}=await import(`./sudo-DN1-Hy4S.js`);return{installPanelSudoResponder:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]));n()}export{n,r as t};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./logger-LESFN7Hj.js";import{n,r}from"./path-utils-DNJG-zQf.js";import{t as i}from"./types-idfTVsM8.js";import{i as a}from"./fs-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./logger-LESFN7Hj.js";import{n,r}from"./path-utils-DNJG-zQf.js";import{t as i}from"./types-idfTVsM8.js";import{i as a}from"./fs-DQberWD7.js";const o=t(`sudo:sudoers`),s=`/etc/sudoers`,c=`/etc/sudoers.d`,l=/^\/scoops\/[^/]+\/etc\/sudoers$/;function u(e){return`/scoops/${e}/etc/sudoers`}function d(e,t){return e===`no-match`?t===`require-approval`?`require-approval`:`no-match`:e}function f(){return{cmnd:[],read:[],write:[],export:[]}}function p(e){return`.+^$()[]|\\{}`.includes(e)?`\\${e}`:e}function m(e){let t=``,n=0;for(;n<e.length;){let r=e[n];r===`*`?(t+=`.*`,n+=e[n+1]===`*`?2:1):r===`?`?(t+=`.`,n+=1):(t+=p(r),n+=1)}return RegExp(`^${t}$`,`s`)}function h(e){return e.split(/\r?\n/,1)[0]?.trim()??``}const g=new Set([`Cmnd`,`Read`,`Write`,`Export`]);function _(e){switch(e){case`read`:return`Read`;case`write`:return`Write`;case`export`:return`Export`;default:return`Cmnd`}}function v(e){let t=e.trim(),n=!1,r=t.search(/\s/);(r===-1?t:t.slice(0,r))===`NOPASSWD`&&(n=!0,t=r===-1?``:t.slice(r).trimStart());let i=t.search(/\s/),a=i===-1?t:t.slice(0,i);if(!g.has(a))return null;let o=i===-1?``:t.slice(i).trim();return o?{directive:a,nopasswd:n,pattern:o}:null}function y(e){let t=f();try{if(typeof e!=`string`)return t;for(let n of e.split(`
|
|
2
2
|
`)){let e=n.trim();if(!e||e.startsWith(`#`))continue;let i=v(e);if(!i){o.warn(`Skipping unrecognized sudoers line`,{line:e});continue}let a=i.directive===`Cmnd`||i.directive===`Export`?m:r,s={pattern:i.pattern,nopasswd:i.nopasswd,regex:a(i.pattern)};i.directive===`Cmnd`?t.cmnd.push(s):i.directive===`Read`?t.read.push(s):i.directive===`Export`?t.export.push(s):t.write.push(s)}return t}catch(e){return o.error(`Failed to parse sudoers; falling back to self-protection only`,{err:e}),f()}}const ee=[`NOPASSWD Read /tmp`,`NOPASSWD Read /tmp/**`,`NOPASSWD Write /tmp`,`NOPASSWD Write /tmp/**`].join(`
|
|
3
3
|
`);let b=null;function te(){return b??=y(ee),b}function x(...e){let t=f();for(let n of e)n&&(t.cmnd.push(...n.cmnd),t.read.push(...n.read),t.write.push(...n.write),t.export.push(...n.export??[]));return t}function S(e,t){let n=!1;for(let r of e)if(r.regex.test(t)){if(r.nopasswd)return`nopasswd-allow`;n=!0}return n?`require-approval`:`no-match`}function ne(e,t){return S(e.export??[],t)===`nopasswd-allow`?`nopasswd-allow`:`require-approval`}function re(e,t){return S(e.cmnd,t.trim())}function ie(e){return e===`/etc/sudoers`||e===`/etc/sudoers.d`||e.startsWith(`/etc/sudoers.d/`)||l.test(e)||e===`/etc/slicc/layouts`||e.startsWith(`/etc/slicc/layouts/`)}function C(e,t,r,i){let o=n(r);if(t===`write`){if(ie(o))return`require-approval`;if(i?.isContentWrite&&a(o))return`nopasswd-allow`}return S(t===`read`?e.read:e.write,o)}const w=t(`sudo:timeout`),T={"user-timeout":`no response from the user within 5 minutes. This is a TIMEOUT, not a denial — the user was not there to answer. Do not retry this action; report that the approval request went unanswered and wait for the user before trying again.`,"cone-timeout":`no response from the cone agent within 5 minutes. This is a TIMEOUT, not a denial — no human was ever prompted, the cone simply never resolved the request. Do not retry this action; report that the escalation went unanswered and continue with work that does not need it.`};function E(e){return T[e]}function D(e=`user-timeout`){return{decision:`deny`,reason:e}}function O(e,t){let n=t.decision===`deny`?t.reason:void 0;return n?`${e}: approval request timed out — ${E(n)}`:`${e}: approval denied`}function ae(e,t={}){let n=t.timeoutMs??3e5;if(!Number.isFinite(n)||n<=0)return e;let r=t.setTimer??((e,t)=>setTimeout(e,t)),i=t.clearTimer??(e=>clearTimeout(e));return{requestApproval(t,a){return new Promise(o=>{let s=new AbortController,c=()=>s.abort();a?.signal?.addEventListener(`abort`,c,{once:!0});let l=!1,u=e=>{l=!0,a?.signal?.removeEventListener(`abort`,c),o(e)},d=r(()=>{l||(w.warn(`sudo approval timed out — failing closed`,{kind:t.kind,detail:t.detail,timeoutMs:n}),s.abort(),u(D(`user-timeout`)))},n),f=e=>{if(l){w.warn(`sudo decision arrived after timeout — discarded`,{kind:t.kind,detail:t.detail,decision:e.decision});return}i(d),u(e)};e.requestApproval(t,{signal:s.signal}).then(f,e=>{w.warn(`sudo broker threw — denying`,{error:e instanceof Error?e.message:String(e)}),f({decision:`deny`})})})}}}const oe=t(`sudo:fs`),k=Symbol.for(`slicc.fs.monkeypatchUnsafe`),A=`${c}/granted`;function j(e){return O(`sudo`,e)}const M=[`readFile`,`readTextFile`,`readDir`,`exists`,`stat`],N=[`writeFile`],P=[`mkdir`,`rm`];async function F(e,t,n,a){let o=h(a);if(!o)return;let s=t(),l={pattern:o,nopasswd:!0,regex:r(o)};(n===`read`?s.read:s.write).push(l);let u=`NOPASSWD ${n===`read`?`Read`:`Write`} ${o}\n`;try{await e.mkdir(c,{recursive:!0});let t=``;try{t=await e.readFile(A,{encoding:`utf-8`})}catch(e){if(!(e instanceof i&&e.code===`ENOENT`))throw e}let n=t.length>0&&!t.endsWith(`
|
|
4
4
|
`)?`
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(){return{version:`6.73.0`,releasedAt:`2026-08-21T11:21:28Z`,buildId:`6.73.0-mt2uzumt`}}let t=null;function n(e){t=e}function r(){return t}export{e as n,n as r,r as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./logger-LESFN7Hj.js";import{t}from"./runtime-env-DadgceZk.js";import"./runtime-env-DVGQx9p3.js";import{callEnsureSpeechAssets as n}from"./speech-assets-bridge-Cbtek1FE.js";import{a as r,i,n as a,r as o}from"./kokoro-engine-
|
|
1
|
+
import{t as e}from"./logger-LESFN7Hj.js";import{t}from"./runtime-env-DadgceZk.js";import"./runtime-env-DVGQx9p3.js";import{callEnsureSpeechAssets as n}from"./speech-assets-bridge-Cbtek1FE.js";import{a as r,i,n as a,r as o}from"./kokoro-engine-vHEgB5uZ.js";function s(e,t,n){for(let r=0;r<n.length;r++)e.setUint8(t+r,n.charCodeAt(r))}function c(e){let t=Math.max(-1,Math.min(1,e));return Math.round(t<0?t*32768:t*32767)}function l(e){if(e.length===0)throw Error(`wav-encode: at least one PCM chunk is required`);let t=e[0].sampleRate;if(!Number.isFinite(t)||t<=0)throw Error(`wav-encode: invalid sample rate ${t}`);let n=0;for(let r of e){if(r.sampleRate!==t)throw Error(`wav-encode: mixed sample rates (${r.sampleRate} vs ${t}) — resample upstream`);n+=r.audio.length}let r=n*1*2,i=new ArrayBuffer(44+r),a=new DataView(i);s(a,0,`RIFF`),a.setUint32(4,36+r,!0),s(a,8,`WAVE`),s(a,12,`fmt `),a.setUint32(16,16,!0),a.setUint16(20,1,!0),a.setUint16(22,1,!0),a.setUint32(24,t,!0),a.setUint32(28,t*1*2,!0),a.setUint16(32,2,!0),a.setUint16(34,16,!0),s(a,36,`data`),a.setUint32(40,r,!0);let o=44;for(let t of e)for(let e=0;e<t.audio.length;e++)a.setInt16(o,c(t.audio[e]),!0),o+=2;return new Uint8Array(i)}const u=e(`speech:speak`);function d(e){return e.toLowerCase().startsWith(`en`)}function f(e,t){if(!t.ready)return`webspeech`;let n=e=>e.onDevice&&(d(e.lang)||t.nonEnglishOnDevice);if(e.voice){let r=t.voices.find(t=>t.id===e.voice);return r&&n(r)?`kokoro`:`webspeech`}let r=(e.lang?e.lang.split(`-`)[0]:`en`).toLowerCase();return t.voices.some(e=>e.lang.split(`-`)[0].toLowerCase()===r&&n(e))?`kokoro`:`webspeech`}function p(e,t){if(!e||d(e))return;let n=e.split(`-`)[0].toLowerCase();return t.find(e=>e.onDevice&&e.lang.split(`-`)[0].toLowerCase()===n)?.id}const m=t;function h(e){return e.onDevice&&(d(e.lang)||!m())}function g(){return i()?.voices().map(e=>({...e,onDevice:h(e)}))??[]}async function _(){if(typeof speechSynthesis>`u`)return[];let e=speechSynthesis.getVoices();return e.length>0||typeof speechSynthesis.addEventListener!=`function`?e:new Promise(e=>{let t=()=>{clearTimeout(r),speechSynthesis.removeEventListener(`voiceschanged`,n),e(speechSynthesis.getVoices())},n=()=>t(),r=setTimeout(t,2e3);speechSynthesis.addEventListener(`voiceschanged`,n)})}let v;function y(){let e=o();return{state:r(),...e?{loaded:e.loaded,total:e.total,etaSeconds:e.etaSeconds}:{}}}async function b(){try{m()||await n({instanceId:v})}catch(e){u.warn(`kokoro asset staging failed; trying already-present weights`,e)}try{await a()}catch(e){u.warn(`kokoro warmup load failed`,e)}}function x(){return b(),y()}let S=null;function C(){return(!S||S.state===`closed`)&&(S=new AudioContext),S}async function w(e,t,n=1){let r=C();r.state===`suspended`&&await r.resume();let i=r.createBuffer(1,e.length,t);i.copyToChannel(new Float32Array(e),0);let a=r.createBufferSource();a.buffer=i;let o=r.createGain();o.gain.value=n,a.connect(o),o.connect(r.destination),await new Promise(e=>{a.onended=()=>e(),a.start()})}async function T(e){if(typeof speechSynthesis>`u`)throw Error(`speechSynthesis is unavailable in this realm`);let t=await _();return new Promise((n,r)=>{let i=new SpeechSynthesisUtterance(e.text);if(e.lang!==void 0&&(i.lang=e.lang),e.rate!==void 0&&(i.rate=e.rate),e.pitch!==void 0&&(i.pitch=e.pitch),e.volume!==void 0&&(i.volume=e.volume),e.voice){let n=t.find(t=>t.name===e.voice);n&&(i.voice=n)}else if(e.lang){let n=e.lang.split(`-`)[0].toLowerCase(),r=t.find(e=>e.lang.split(`-`)[0].toLowerCase()===n);r&&(i.voice=r)}i.onend=()=>n(),i.onerror=e=>r(Error(`speak: ${e.error||`utterance failed`}`)),speechSynthesis.speak(i)})}async function E(e){let t=i(),n=t?.voices()??[];if(f(e,{ready:t!==null,voices:n,nonEnglishOnDevice:!m()})===`kokoro`&&t){let r=e.voice??p(e.lang,n),i=0;try{let n=t.synthesizeStream(e.text,{...r?{voice:r}:{},...e.rate?{speed:e.rate}:{}});for await(let t of n)await w(t.audio,t.sampleRate,e.volume),i++;return{engine:`kokoro`}}catch(e){if(i>0)return u.warn(`kokoro stream failed mid-playback; stopping`,e),{engine:`kokoro`};u.warn(`kokoro synthesis failed; falling back to webspeech`,e)}}return await T(e),{engine:`webspeech`}}async function D(e){let t=i();if(!t)throw Error(`on-device voice not ready — run say --warmup and retry once it reports ready`);if(e.lang&&!e.lang.toLowerCase().startsWith(`en`))throw Error(`-o writes WAV via the on-device voice, which is English-only (got ${e.lang})`);if(e.voice&&!t.voices().map(e=>e.id).includes(e.voice))throw Error(`-o writes WAV via the on-device voice; "${e.voice}" is a Web Speech voice. Pick a kokoro voice (e.g. af_heart) or omit -v.`);let n=[],r=t.synthesizeStream(e.text,{...e.voice?{voice:e.voice}:{},...e.rate?{speed:e.rate}:{}});for await(let e of r)n.push({audio:e.audio,sampleRate:e.sampleRate});if(n.length===0)throw Error(`kokoro produced no audio (text is empty after sentence split?)`);return l(n)}export{y as kokoroStatus,g as kokoroVoicesIfReady,x as kokoroWarmup,E as speak,D as synthesizeToWav};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/transformers.web-Cg_-cFJu.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/preload-helper-Czpn1I53.js","assets/kokoro-Bs5vU5OU.js","assets/__vite-browser-external-5eBdwsFd.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{t as e}from"./preload-helper-Czpn1I53.js";import{t}from"./logger-DDBAeTLF.js";import{n}from"./runtime-env-Dlaokqg1.js";import"./runtime-env-CgsZ7LTp.js";import{t as r}from"./speech-assets-bridge-CFYafE89.js";import{i,n as a,r as o,t as s}from"./transformers-env-
|
|
2
|
+
import{t as e}from"./preload-helper-Czpn1I53.js";import{t}from"./logger-DDBAeTLF.js";import{n}from"./runtime-env-Dlaokqg1.js";import"./runtime-env-CgsZ7LTp.js";import{t as r}from"./speech-assets-bridge-CFYafE89.js";import{i,n as a,r as o,t as s}from"./transformers-env-BHtkkEox.js";var c=t(`speech:espeak`),l=`/workspace/node_modules/espeak-ng/dist/`,u=`espeak-ng.js`,d=`espeak-ng.wasm`;async function f(e,t,n,r){let i=`phonemes.txt`;return(await e({arguments:[`-q`,`-b=1`,`--ipa`,`-v`,n,`--phonout`,i,t],...r?{locateFile:r}:{}})).FS.readFile(i,{encoding:`utf8`}).split(`
|
|
3
3
|
`).map(e=>e.trim()).filter(e=>e.length>0)}function ee(e,t){return async n=>{let r=URL.createObjectURL(new Blob([new Uint8Array(t)],{type:`application/wasm`}));try{let t=e=>e.endsWith(`.wasm`)?r:n.locateFile?.(e)??e;return await e({...n,locateFile:t})}finally{URL.revokeObjectURL(r)}}}function p(e){if(typeof BroadcastChannel>`u`)return Promise.reject(Error(`Cannot read VFS path ${e}: BroadcastChannel unavailable`));let t=new BroadcastChannel(`preview-vfs`),n=`espeak-${Date.now()}-${Math.random().toString(36).slice(2)}`;return new Promise((r,i)=>{let a=e=>{t.removeEventListener(`message`,c),t.close(),e()},o,s=()=>{clearTimeout(o),o=setTimeout(()=>a(()=>i(Error(`ENOENT: ${e} (timed out)`))),3e4)};s();let c=t=>{let c=t.data;if(!(!c||c.id!==n)){if(c.type===`preview-vfs-start`){s();return}if(c.type===`preview-vfs-response`)if(clearTimeout(o),typeof c.error==`string`)a(()=>i(Error(c.error)));else if(c.content instanceof Uint8Array){let e=c.content;a(()=>r(e))}else if(typeof c.content==`string`){let e=c.content;a(()=>r(new TextEncoder().encode(e)))}else a(()=>i(Error(`Empty preview-vfs response for ${e}`)))}};t.addEventListener(`message`,c),t.postMessage({type:`preview-vfs-read`,id:n,path:e,asText:!1})})}async function te(){let[t,n]=await Promise.all([p(`${l}${u}`),p(`${l}${d}`)]),r=URL.createObjectURL(new Blob([new Uint8Array(t)],{type:`text/javascript`}));try{return{factory:ee((await e(()=>import(r),[])).default,n)}}finally{URL.revokeObjectURL(r)}}var ne=te,m=null;function h(){return m||=ne().then(({factory:e,locateFile:t})=>(c.info(`espeak-ng multilingual phonemizer loaded`),(n,r)=>f(e,n,r,t)),e=>{throw m=null,c.error(`espeak-ng load failed`,e),e}),m}var re=Object.freeze({e:`es`,f:`fr-fr`,i:`it`,h:`hi`,p:`pt-br`});function g(e){return re[e[0]]??null}var _=Object.freeze({a:`en-us`,b:`en-gb`});function v(e){return _[e[0]]??null}function ie(e){let t=e instanceof Error?e.message:String(e);return/Invalid language identifier/i.test(t)&&/Should be one of:\s*\.?\s*$/i.test(t)}var ae=RegExp(`(\\s*[${`;:,.!?¡¿—…"«»“”(){}[]`.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}]+\\s*)+`,`g`);function oe(e){let t=[],n=0;for(let r of e.matchAll(ae)){let i=r[0],a=r.index??0;n<a&&t.push({punct:!1,text:e.slice(n,a)}),i.length>0&&t.push({punct:!0,text:i}),n=a+i.length}return n<e.length&&t.push({punct:!1,text:e.slice(n)}),t}function se(e){return e.replace(/kəkˈoːɹoʊ/g,`kˈoʊkəɹoʊ`).replace(/kəkˈɔːɹəʊ/g,`kˈəʊkəɹəʊ`).replace(/(?<=[a-zɹrː])(?=hˈʌndɹɪd)/g,` `).replace(/ z(?=[;:,.!?¡¿—…"«»“” ]|$)/g,`z`).trim()}async function ce(e,t,n){let r=oe(e);return se((await Promise.all(r.map(async e=>e.punct?e.text:(await n(e.text,t)).join(` `)))).join(``))}var y=t(`speech:kokoro`),b=`onnx-community/Kokoro-82M-v1.0-ONNX`,x={a:`en-US`,b:`en-GB`,e:`es-ES`,f:`fr-FR`,i:`it-IT`,h:`hi-IN`,p:`pt-BR`,j:`ja-JP`,z:`zh-CN`},S=new Set([`en-US`,`en-GB`,`es-ES`,`fr-FR`,`it-IT`,`hi-IN`,`pt-BR`]);function C(e){let[t,n]=e.split(`-`);return n?`${t.toLowerCase()}-${n.toUpperCase()}`:t.toLowerCase()}function w(e,t){if(!t)return!1;if(S.has(t))return!0;if(t.includes(`-`))return!1;let n=x[e[0]];return n!==void 0&&S.has(n)&&n.split(`-`)[0].toLowerCase()===t}function le(e){return Object.entries(e).map(([e,t])=>{let n=t.language?C(t.language):x[e[0]];return{id:e,name:t.name||e,lang:n??`en-US`,onDevice:w(e,n),...t.gender?{gender:t.gender}:{}}})}var ue=Object.freeze({ef_dora:{name:`Dora`,gender:`Female`},em_alex:{name:`Alex`,gender:`Male`},em_santa:{name:`Santa`,gender:`Male`},ff_siwis:{name:`Siwis`,gender:`Female`},hf_alpha:{name:`Alpha`,gender:`Female`},hf_beta:{name:`Beta`,gender:`Female`},hm_omega:{name:`Omega`,gender:`Male`},hm_psi:{name:`Psi`,gender:`Male`},if_sara:{name:`Sara`,gender:`Female`},im_nicola:{name:`Nicola`,gender:`Male`},pf_dora:{name:`Dora`,gender:`Female`},pm_alex:{name:`Alex`,gender:`Male`},pm_santa:{name:`Santa`,gender:`Male`},jf_alpha:{name:`Alpha`,gender:`Female`},jf_gongitsune:{name:`Gongitsune`,gender:`Female`},jf_nezumi:{name:`Nezumi`,gender:`Female`},jf_tebukuro:{name:`Tebukuro`,gender:`Female`},jm_kumo:{name:`Kumo`,gender:`Male`},zf_xiaobei:{name:`Xiaobei`,gender:`Female`},zf_xiaoni:{name:`Xiaoni`,gender:`Female`},zf_xiaoxiao:{name:`Xiaoxiao`,gender:`Female`},zf_xiaoyi:{name:`Xiaoyi`,gender:`Female`},zm_yunjian:{name:`Yunjian`,gender:`Male`},zm_yunxi:{name:`Yunxi`,gender:`Male`},zm_yunxia:{name:`Yunxia`,gender:`Male`},zm_yunyang:{name:`Yunyang`,gender:`Male`}});function de(e){let t={...e};for(let[e,n]of Object.entries(ue))e in t||(t[e]=n);return le(t)}var T=`style_text_to_speech_2`,E=`StyleTextToSpeech2Model`;function fe(e){return e?.model_type===T&&(!Array.isArray(e.architectures)||e.architectures.length===0)&&(e.architectures=[E]),e}var D=Symbol.for(`slicc.kokoro.style-tts2-arch-shim`);function pe(e){let t=e?.AutoConfig,n=t?.from_pretrained;if(!t||typeof n!=`function`){y.debug(`style_text_to_speech_2 shim skipped: AutoConfig.from_pretrained unavailable`);return}if(n[D])return;let r=async(...e)=>{let r=await n.apply(t,e),i=r?.model_type===T&&(!Array.isArray(r.architectures)||r.architectures.length===0);return fe(r),i&&y.debug(`style_text_to_speech_2 architectures injected for "${String(e[0])}": [${E}]`),r};r[D]=!0,t.from_pretrained=r,y.debug(`style_text_to_speech_2 architecture shim installed on AutoConfig.from_pretrained`)}async function O(e,t,n,r,i,a){let o=await ce(t,n,a),s=e.tokenizer,{input_ids:c}=s(o,{truncation:!0}),l=await e.generate_from_ids(c,{voice:r,...i?{speed:i}:{}});return{audio:l.audio,sampleRate:l.sampling_rate}}var me=/(?<=[.!?。!?…])\s+|\n{2,}/u;function k(e,t){let n=t??me,r=e.split(n).map(e=>e.trim()).filter(e=>e.length>0),i=e.trim();return r.length>0?r:i?[i]:[]}var A=null,j=`idle`,M=null,N=null;function P(){return j}function F(){return M}function I(){return N}function L(e){return A||=(j=`loading`,R(e).then(e=>(j=`ready`,N=e,e),e=>{throw j=`failed`,A=null,y.error(`kokoro load failed`,e),e})),A}async function R(t){let n=await e(()=>import(`./transformers.web-Cg_-cFJu.js`),__vite__mapDeps([0,1,2]));a(n.env),pe(n),await s(b),await o();let{KokoroTTS:r,TextSplitterStream:c}=await e(async()=>{let{KokoroTTS:e,TextSplitterStream:t}=await import(`./kokoro-Bs5vU5OU.js`);return{KokoroTTS:e,TextSplitterStream:t}},__vite__mapDeps([3,1,4,0,2])),l=i(),u=typeof navigator<`u`&&`gpu`in navigator,d=await r.from_pretrained(b,{device:u?`webgpu`:`wasm`,dtype:u?`fp32`:`q8`,progress_callback: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;M=l.snapshot(),t?.(M)}}});y.info(`kokoro ready`,{model:b,device:u?`webgpu`:`wasm`});let f=de(d.voices);return{async synthesize(e,t){let r=t?.voice??`af_heart`,i=g(r);if(i){let n=await h();return O(d,e,i,r,t?.speed,n)}try{let r=performance.now(),i=await d.generate(e,{...t?.voice?{voice:t.voice}:{},...t?.speed?{speed:t.speed}:{}}),a=i.audio;return y.info(`kokoro synthesize`,{elapsedMs:Math.round(performance.now()-r),chars:e.length,audioSeconds:Math.round(a.length/i.sampling_rate*100)/100,numThreads:n.env.backends?.onnx?.wasm?.numThreads}),{audio:a,sampleRate:i.sampling_rate}}catch(n){let i=await z(n,r);if(!i)throw n;return O(d,e,i.lang,r,t?.speed,i.phonemize)}},async*synthesizeStream(e,t){let r=t?.voice??`af_heart`,i=g(r);if(i){let n=await h();for(let a of k(e,t?.splitPattern))yield await O(d,a,i,r,t?.speed,n);return}let a={...t?.voice?{voice:t.voice}:{},...t?.speed?{speed:t.speed}:{}},o=new c;if(t?.splitPattern){let n=e.split(t.splitPattern).map(e=>e.trim()).filter(e=>e.length>0);o.push(...n)}else o.push(e);o.close();try{let t=performance.now(),r=0,i=0,s=0;for await(let e of d.stream(o,a)){let t=e.audio.audio;r+=1,i+=t.length,s=e.audio.sampling_rate,yield{audio:t,sampleRate:s}}y.info(`kokoro synthesizeStream`,{elapsedMs:Math.round(performance.now()-t),chunks:r,chars:e.length,audioSeconds:s?Math.round(i/s*100)/100:0,numThreads:n.env.backends?.onnx?.wasm?.numThreads})}catch(n){let i=await z(n,r);if(!i)throw n;for(let n of k(e,t?.splitPattern))yield await O(d,n,i.lang,r,t?.speed,i.phonemize)}},voices:()=>f}}async function z(e,t){if(!ie(e))return null;let n=v(t);if(!n)return null;try{let e=await h();return y.warn(`kokoro bundled phonemizer reported no languages; phonemizing English with the staged espeak-ng`,{voiceId:t,lang:n}),{lang:n,phonemize:e}}catch(e){return y.warn(`staged espeak-ng unavailable, cannot recover English synthesis`,{error:String(e)}),null}}var B=44,V=16,H=1,U=V/8;function W(e,t,n){for(let r=0;r<n.length;r++)e.setUint8(t+r,n.charCodeAt(r))}function he(e){let t=Math.max(-1,Math.min(1,e));return Math.round(t<0?t*32768:t*32767)}function ge(e){if(e.length===0)throw Error(`wav-encode: at least one PCM chunk is required`);let t=e[0].sampleRate;if(!Number.isFinite(t)||t<=0)throw Error(`wav-encode: invalid sample rate ${t}`);let n=0;for(let r of e){if(r.sampleRate!==t)throw Error(`wav-encode: mixed sample rates (${r.sampleRate} vs ${t}) — resample upstream`);n+=r.audio.length}let r=n*H*U,i=new ArrayBuffer(B+r),a=new DataView(i);W(a,0,`RIFF`),a.setUint32(4,36+r,!0),W(a,8,`WAVE`),W(a,12,`fmt `),a.setUint32(16,16,!0),a.setUint16(20,1,!0),a.setUint16(22,H,!0),a.setUint32(24,t,!0),a.setUint32(28,t*H*U,!0),a.setUint16(32,2,!0),a.setUint16(34,V,!0),W(a,36,`data`),a.setUint32(40,r,!0);let o=B;for(let t of e)for(let e=0;e<t.audio.length;e++)a.setInt16(o,he(t.audio[e]),!0),o+=U;return new Uint8Array(i)}var G=t(`speech:speak`),K=2e4;function q(e){return e.toLowerCase().startsWith(`en`)}function _e(e,t){if(!t.ready)return`webspeech`;let n=e=>e.onDevice&&(q(e.lang)||t.nonEnglishOnDevice);if(e.voice){let r=t.voices.find(t=>t.id===e.voice);return r&&n(r)?`kokoro`:`webspeech`}let r=(e.lang?e.lang.split(`-`)[0]:`en`).toLowerCase();return t.voices.some(e=>e.lang.split(`-`)[0].toLowerCase()===r&&n(e))?`kokoro`:`webspeech`}function ve(e,t){if(!e||q(e))return;let n=e.split(`-`)[0].toLowerCase();return t.find(e=>e.onDevice&&e.lang.split(`-`)[0].toLowerCase()===n)?.id}var ye=48;function be(e){let t=e;return t=t.replace(/```[\s\S]*?```/g,` `),t=t.replace(/~~~[\s\S]*?~~~/g,` `),t=t.replace(/(?:```|~~~)[\s\S]*$/,` `),t=t.replace(/!\[([^\]]*)\]\([^)]*\)/g,`$1`),t=t.replace(/\[([^\]]+)\]\([^)]*\)/g,`$1`),t=t.replace(/`([^`]*)`/g,(e,t)=>t.length>ye?` `:t),t=t.replace(/<[^>\n]+>/g,` `),t=t.replace(/^[ \t]{0,3}#{1,6}[ \t]+/gm,``),t=t.replace(/^[ \t]*>[ \t]?/gm,``),t=t.replace(/^[ \t]*(?:[-*+]|\d+[.)])[ \t]+/gm,``),t=t.replace(/[*_~]{1,3}([^*_~]+)[*_~]{1,3}/g,`$1`),t=t.replace(/\s+/g,` `).trim(),t.length>K&&(t=`${t.slice(0,K).replace(/\s+\S*$/,``)}…`),t}var J=n;function xe(e){return e.onDevice&&(q(e.lang)||!J())}function Y(){return I()?.voices().map(e=>({...e,onDevice:xe(e)}))??[]}async function X(){if(typeof speechSynthesis>`u`)return[];let e=speechSynthesis.getVoices();return e.length>0||typeof speechSynthesis.addEventListener!=`function`?e:new Promise(e=>{let t=()=>{clearTimeout(r),speechSynthesis.removeEventListener(`voiceschanged`,n),e(speechSynthesis.getVoices())},n=()=>t(),r=setTimeout(t,2e3);speechSynthesis.addEventListener(`voiceschanged`,n)})}async function Se(e){let t=e.split(`-`)[0]?.toLowerCase();return t?Y().some(e=>e.onDevice&&e.lang.split(`-`)[0].toLowerCase()===t)?!0:(await X()).some(e=>e.lang.split(`-`)[0].toLowerCase()===t):!1}var Z;function Ce(e){Z=e}function Q(){let e=F();return{state:P(),...e?{loaded:e.loaded,total:e.total,etaSeconds:e.etaSeconds}:{}}}async function we(){try{J()||await r({instanceId:Z})}catch(e){G.warn(`kokoro asset staging failed; trying already-present weights`,e)}try{await L()}catch(e){G.warn(`kokoro warmup load failed`,e)}}function Te(){return we(),Q()}var $=null;function Ee(){return(!$||$.state===`closed`)&&($=new AudioContext),$}async function De(e,t,n=1){let r=Ee();r.state===`suspended`&&await r.resume();let i=r.createBuffer(1,e.length,t);i.copyToChannel(new Float32Array(e),0);let a=r.createBufferSource();a.buffer=i;let o=r.createGain();o.gain.value=n,a.connect(o),o.connect(r.destination),await new Promise(e=>{a.onended=()=>e(),a.start()})}async function Oe(e){if(typeof speechSynthesis>`u`)throw Error(`speechSynthesis is unavailable in this realm`);let t=await X();return new Promise((n,r)=>{let i=new SpeechSynthesisUtterance(e.text);if(e.lang!==void 0&&(i.lang=e.lang),e.rate!==void 0&&(i.rate=e.rate),e.pitch!==void 0&&(i.pitch=e.pitch),e.volume!==void 0&&(i.volume=e.volume),e.voice){let n=t.find(t=>t.name===e.voice);n&&(i.voice=n)}else if(e.lang){let n=e.lang.split(`-`)[0].toLowerCase(),r=t.find(e=>e.lang.split(`-`)[0].toLowerCase()===n);r&&(i.voice=r)}i.onend=()=>n(),i.onerror=e=>r(Error(`speak: ${e.error||`utterance failed`}`)),speechSynthesis.speak(i)})}async function ke(e){let t=I(),n=t?.voices()??[];if(_e(e,{ready:t!==null,voices:n,nonEnglishOnDevice:!J()})===`kokoro`&&t){let r=e.voice??ve(e.lang,n),i=0;try{let n=t.synthesizeStream(e.text,{...r?{voice:r}:{},...e.rate?{speed:e.rate}:{}});for await(let t of n)await De(t.audio,t.sampleRate,e.volume),i++;return{engine:`kokoro`}}catch(e){if(i>0)return G.warn(`kokoro stream failed mid-playback; stopping`,e),{engine:`kokoro`};G.warn(`kokoro synthesis failed; falling back to webspeech`,e)}}return await Oe(e),{engine:`webspeech`}}async function Ae(e){let t=I();if(!t)throw Error(`on-device voice not ready — run say --warmup and retry once it reports ready`);if(e.lang&&!e.lang.toLowerCase().startsWith(`en`))throw Error(`-o writes WAV via the on-device voice, which is English-only (got ${e.lang})`);if(e.voice&&!t.voices().map(e=>e.id).includes(e.voice))throw Error(`-o writes WAV via the on-device voice; "${e.voice}" is a Web Speech voice. Pick a kokoro voice (e.g. af_heart) or omit -v.`);let n=[],r=t.synthesizeStream(e.text,{...e.voice?{voice:e.voice}:{},...e.rate?{speed:e.rate}:{}});for await(let e of r)n.push({audio:e.audio,sampleRate:e.sampleRate});if(n.length===0)throw Error(`kokoro produced no audio (text is empty after sentence split?)`);return ge(n)}export{Se as hasVoiceForLang,Q as kokoroStatus,Y as kokoroVoicesIfReady,Te as kokoroWarmup,Ce as setSpeakAssetsInstanceId,ke as speak,be as speechTextFromMarkdown,Ae as synthesizeToWav};
|