sliccy 4.28.2 → 4.28.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ui/assets/{account-store-DmjUSua_.js → account-store-BEhGWtfD.js} +2 -2
- package/dist/ui/assets/{account-store-Dha2nLml.js → account-store-Dd_leIXI.js} +2 -2
- package/dist/ui/assets/{adobe-CpNl5eLk.js → adobe-D48uApVM.js} +1 -1
- package/dist/ui/assets/{adobe-CtI7bDCt.js → adobe-n060f8AC.js} +1 -1
- package/dist/ui/assets/{agent-message-to-chat-DQErB0Zj.js → agent-message-to-chat-Bx_Ero1x.js} +1 -1
- package/dist/ui/assets/{apps-BAXGsVHu.js → apps-CywJTObv.js} +1 -1
- package/dist/ui/assets/{azure-openai-CKd81QhZ.js → azure-openai-B1Zfi2XG.js} +1 -1
- package/dist/ui/assets/{azure-openai-DTsNmcxo.js → azure-openai-VRDt5QVP.js} +1 -1
- package/dist/ui/assets/{bsh-watchdog-B27e-Og-.js → bsh-watchdog-DbLa5QsS.js} +1 -1
- package/dist/ui/assets/{connect-surface-CyQMJFj3.js → connect-surface-C-4WfE1D.js} +1 -1
- package/dist/ui/assets/dip-D889fVdn.js +1 -0
- package/dist/ui/assets/{dist-CVvNIY9j.js → dist-DLhwzhGb.js} +1 -1
- package/dist/ui/assets/{dist-Ciobg3J4.js → dist-Dn-OG2Uq.js} +1 -1
- package/dist/ui/assets/{es-DjQZltrp.js → es-DaEzN-e4.js} +1 -1
- package/dist/ui/assets/{fs-Bv2avR3Y.js → fs-B40WJSMO.js} +2 -2
- package/dist/ui/assets/{fs-B-yB8nmS.js → fs-FoD_qa2m.js} +1 -1
- package/dist/ui/assets/{github-DcwUCUyU.js → github-CAYclPFE.js} +1 -1
- package/dist/ui/assets/{github-DRvbws57.js → github-WET9dsz8.js} +2 -2
- package/dist/ui/assets/{github-copilot-CFeOxiAY.js → github-copilot-BSb0sjqN.js} +1 -1
- package/dist/ui/assets/{github-copilot--B7IUER8.js → github-copilot-R5lpJGvp.js} +1 -1
- package/dist/ui/assets/{hear-20YdcW5b.js → hear-C4xX91lk.js} +1 -1
- package/dist/ui/assets/{kernel-worker-DuaByjq4.js → kernel-worker-BWuqWtNZ.js} +21 -21
- package/dist/ui/assets/{kokoro-engine-CjyxHaAM.js → kokoro-engine-DuH7Gw3x.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-CbVQgXpI.js → lick-ws-bridge-CO4sVUnO.js} +1 -1
- package/dist/ui/assets/{local-llm-FEU-X2iM.js → local-llm-BA1NDIU9.js} +1 -1
- package/dist/ui/assets/{main-D-3iO2Pb.js → main-xJNt0P6z.js} +3 -3
- package/dist/ui/assets/{mount-B60ugIMY.js → mount-Blejt3yC.js} +1 -1
- package/dist/ui/assets/{mount-TPowGzXN.js → mount-BpQ-KROh.js} +2 -2
- package/dist/ui/assets/{new-session-BjrjaQDu.js → new-session-BKd3_lSr.js} +2 -2
- package/dist/ui/assets/{oauth-bootstrap-D15vXH8k.js → oauth-bootstrap--I6asg_u.js} +2 -2
- package/dist/ui/assets/{oauth-service-D49nt7eJ.js → oauth-service-DAzsBd4D.js} +1 -1
- package/dist/ui/assets/{openai-codex-DIIqvcoZ.js → openai-codex-DyAASUvZ.js} +1 -1
- package/dist/ui/assets/{openai-codex-BpHxok9y.js → openai-codex-MZbc8sm2.js} +1 -1
- package/dist/ui/assets/{panel-rpc-handlers-Ca3yEyOL.js → panel-rpc-handlers-WBg5aql4.js} +1 -1
- package/dist/ui/assets/{provider-UGTRh0sb.js → provider-DNnOLtMP.js} +1 -1
- package/dist/ui/assets/{provider-CT4MGofi.js → provider-L4NElIF3.js} +2 -2
- package/dist/ui/assets/provider-store-access-CmS1duqc.js +1 -0
- package/dist/ui/assets/provider-store-access-IaKurQe7.js +1 -0
- package/dist/ui/assets/{providers-C-thqKYx.js → providers-DerbEWIP.js} +1 -1
- package/dist/ui/assets/{quick-llm-pCxnbK4A.js → quick-llm-BOgo_uty.js} +1 -1
- package/dist/ui/assets/session-freezer-k9segaoE.js +1 -0
- package/dist/ui/assets/setup-sudo-CocP-GMB.js +1 -0
- package/dist/ui/assets/{speak-EKtIqp6j.js → speak-BtCLW3r-.js} +1 -1
- package/dist/ui/assets/{sprinkle-manager-C3_2AgeR.js → sprinkle-manager-BXB1EDB8.js} +1 -1
- package/dist/ui/assets/{store-DSwnBJEJ.js → store-p07O-6qm.js} +1 -1
- package/dist/ui/assets/{sudo-B4yfntyh.js → sudo-BGiCdyHh.js} +1 -1
- package/dist/ui/assets/{transformers-env-O5Vtz_xj.js → transformers-env-BEJ8prM4.js} +1 -1
- package/dist/ui/assets/{tray-leave-runtime-Dk3OSbMO.js → tray-leave-runtime-BIU4slWr.js} +1 -1
- package/dist/ui/assets/{upgrade-detection-Dcc69AtK.js → upgrade-detection-CjNy2QVK.js} +1 -1
- package/dist/ui/assets/{wc-attach-B62W7N_T.js → wc-attach-B2r60IVZ.js} +2 -2
- package/dist/ui/assets/{wc-detached-CJFrvQ5w.js → wc-detached-CVCrBego.js} +1 -1
- package/dist/ui/assets/{wc-extension-C1CIBnT2.js → wc-extension-Bj-WZK-v.js} +2 -2
- package/dist/ui/assets/{wc-live-B3Dxlxlf.js → wc-live-692eqzbB.js} +5 -5
- package/dist/ui/assets/{wc-nav-DWMYNnDA.js → wc-nav-KPH2me07.js} +2 -2
- package/dist/ui/assets/{wc-onboarding-DpKk5u_V.js → wc-onboarding-BMIcqP11.js} +2 -2
- package/dist/ui/assets/{wc-placeholder-CGPP_IEm.js → wc-placeholder-LktBOWny.js} +3 -3
- package/dist/ui/assets/{wc-settings-DjqUSzpO.js → wc-settings-BZvKvAI9.js} +2 -2
- package/dist/ui/assets/{wc-shell-BGaEWRGh.js → wc-shell-Cl1ON8m4.js} +3 -3
- package/dist/ui/assets/{wc-sprinkles-B5_aCIM5.js → wc-sprinkles-C675pGpy.js} +2 -2
- package/dist/ui/assets/{wc-tray-kVPhrwG1.js → wc-tray-DDcDU_hv.js} +3 -3
- package/dist/ui/assets/{xai-grok-CggP425A.js → xai-grok-3pMUa44B.js} +1 -1
- package/dist/ui/assets/{xai-grok-BX1SWx3y.js → xai-grok-Dk2TY3YV.js} +1 -1
- package/dist/ui/index.html +2 -2
- package/dist/ui/packages/webapp/index.html +2 -2
- package/package.json +1 -1
- package/dist/ui/assets/dip-De30SVSa.js +0 -1
- package/dist/ui/assets/provider-store-access-BHHITTJF.js +0 -1
- package/dist/ui/assets/provider-store-access-BSS9maA7.js +0 -1
- package/dist/ui/assets/session-freezer-NFd-CALu.js +0 -1
- package/dist/ui/assets/setup-sudo-KPDfIsQ7.js +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import{i as e,o as t,r as n,t as r}from"./chunk-CMxvf4Kt.js";import{t as i}from"./logger-LESFN7Hj.js";import{a,o,t as s}from"./tool-ui-N76-EdVc.js";import{a as c,i as l,n as u,o as d,r as f,t as p}from"./backend-local-CMfz45hs.js";import{t as m}from"./types-idfTVsM8.js";import{t as h}from"./src-CpdsjHiA.js";import{n as g,t as _}from"./mime-types-BqLkKWa7.js";import{a as v,i as y,n as b,r as x}from"./mount-
|
|
1
|
+
import{i as e,o as t,r as n,t as r}from"./chunk-CMxvf4Kt.js";import{t as i}from"./logger-LESFN7Hj.js";import{a,o,t as s}from"./tool-ui-N76-EdVc.js";import{a as c,i as l,n as u,o as d,r as f,t as p}from"./backend-local-CMfz45hs.js";import{t as m}from"./types-idfTVsM8.js";import{t as h}from"./src-CpdsjHiA.js";import{n as g,t as _}from"./mime-types-BqLkKWa7.js";import{a as v,i as y,n as b,r as x}from"./mount-Blejt3yC.js";import{t as S}from"./mount-id-nJcx05eu.js";import{t as C}from"./remote-cache-BffIqHgi.js";import{n as w}from"./mount-table-store-CQJEV6Ij.js";import{n as T,r as E,t as D}from"./panel-rpc-Ck8CVyMh.js";import{a as O}from"./providers-DerbEWIP.js";import{n as k,t as ee}from"./path-utils-DU6QhF_k.js";import{b as te,d as A,l as j,u as ne}from"./bedrock-camp-DS1dgU6g.js";import{f as re,o as ie}from"./transform-messages-BjP6vDPY.js";import{A as ae,C as oe,D as se,E as ce,F as le,I as ue,L as M,M as de,N as fe,O as pe,P as me,R as he,S as ge,T as _e,_ as ve,a as ye,b as N,c as be,d as xe,f as Se,g as Ce,h as we,i as P,j as Te,k as F,l as I,m as Ee,o as De,p as Oe,r as ke,s as Ae,t as je,u as Me,v as Ne,w as Pe,x as Fe,y as Ie}from"./account-store-BEhGWtfD.js";import{i as Le,n as Re,r as ze}from"./fs-FoD_qa2m.js";import{n as Be,r as Ve}from"./openai-completions-CyC3I8Ls.js";const He=`__slicc_binary__`;function Ue(e){if(!e||typeof e!=`object`)return!1;let t=e;return t[He]===`b64`&&typeof t.data==`string`}function We(e){let t=32768,n=``;for(let r=0;r<e.byteLength;r+=t){let i=e.subarray(r,Math.min(r+t,e.byteLength));n+=String.fromCharCode.apply(null,i)}return btoa(n)}function Ge(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}function Ke(e){if(e instanceof Uint8Array)return{[He]:`b64`,data:We(e)};if(Array.isArray(e))return e.map(Ke);if(e&&typeof e==`object`){let t={};for(let[n,r]of Object.entries(e))t[n]=Ke(r);return t}return e}function qe(e){if(Ue(e))return Ge(e.data);if(Array.isArray(e))return e.map(qe);if(e&&typeof e==`object`){let t={};for(let[n,r]of Object.entries(e))t[n]=qe(r);return t}return e}const Je=i(`panel-transport`);function Ye(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function Xe(){return{onMessage:e=>{let t=(t,n,r)=>(Ye(t)&&e(qe(t)),!1);return chrome.runtime.onMessage.addListener(t),()=>chrome.runtime.onMessage.removeListener(t)},send:(e,t)=>{let n=Ke(e);chrome.runtime.sendMessage({source:`offscreen`,payload:n}).catch(e=>{let t=e instanceof Error?e.message:String(e);/receiving end does not exist/i.test(t)||Je.error(`Offscreen → panel transport send failed`,{error:t})})}}}const Ze=new Set([`send_message`,`list_scoops`,`list_tasks`,`sudo_request`,`list_sudo_requests`,`lick_confirm`,`lick_dismiss`]);var Qe=n({formatMountRecoveryPrompt:()=>nt,mdInlineCode:()=>tt,recoverMounts:()=>$e,shellQuote:()=>et});async function $e(e,t,n){let r=[],i=[];for(let a of e){let{targetPath:e,descriptor:o}=a;if(o.kind===`local`){let a=await w(o.idbHandleKey),s=typeof a?.name==`string`?a.name:``;if(!a||!(`queryPermission`in a)){i.push({kind:`local`,path:e,dirName:s});continue}let c;try{c=await a.queryPermission({mode:`readwrite`})}catch(t){n?.warn?.(`queryPermission threw on persisted handle`,{path:e,error:t instanceof Error?t.message:String(t)}),i.push({kind:`local`,path:e,dirName:s});continue}if(c!==`granted`){i.push({kind:`local`,path:e,dirName:s});continue}try{let i=p.fromHandle(a,{mountId:o.mountId});await t.mount(e,i),n?.info?.(`Restored mount from previous session`,{path:e,name:s}),r.push({kind:`local`,path:e,dirName:s})}catch(t){n?.warn?.(`Failed to re-mount persisted handle`,{path:e,error:t instanceof Error?t.message:String(t)}),i.push({kind:`local`,path:e,dirName:s})}continue}if(o.kind===`s3`){try{let i=new C({mountId:o.mountId,ttlMs:3e4}),a=new y({source:o.source,profile:o.profile,cache:i,mountId:o.mountId,signedFetch:x(o.profile)});await t.mount(e,a),n?.info?.(`Restored S3 mount from previous session`,{path:e,source:o.source}),r.push({kind:`s3`,path:e,source:o.source,profile:o.profile,reason:``})}catch(t){let r=t instanceof Error?t.message:String(t);n?.warn?.(`Failed to restore S3 mount`,{path:e,error:r}),i.push({kind:`s3`,path:e,source:o.source,profile:o.profile,reason:r})}continue}if(o.kind===`da`)try{let i=new C({mountId:o.mountId,ttlMs:3e4}),a=new v({source:o.source,profile:o.profile,cache:i,mountId:o.mountId,signedFetch:b()});await t.mount(e,a),n?.info?.(`Restored DA mount from previous session`,{path:e,source:o.source}),r.push({kind:`da`,path:e,source:o.source,profile:o.profile,reason:``})}catch(t){let r=t instanceof Error?t.message:String(t);n?.warn?.(`Failed to restore DA mount`,{path:e,error:r}),i.push({kind:`da`,path:e,source:o.source,profile:o.profile,reason:r})}}return{restored:r,needsRecovery:i}}function et(e){return`'${e.replace(/'/g,`'\\''`)}'`}function tt(e){let t=e.replace(/\r\n|[\r\n]/g,` `),n=t.match(/`+/g),r=n?Math.max(...n.map(e=>e.length))+1:1,i="`".repeat(r);return`${i}${t.startsWith("`")||t.endsWith("`")?` ${t} `:t}${i}`}function nt(e){if(!Array.isArray(e)||e.length===0)return null;let t=e.length===1?`mount point`:`mount points`,n=e.length===1?`it`:`them`,r=e.filter(e=>e.kind===`local`),i=e.filter(e=>e.kind===`s3`||e.kind===`da`),a=[`[Session Reload] Mount recovery required for ${e.length} ${t}.`,``];if(r.length>0){let e=r.map(({path:e,dirName:t})=>{let n=t?` (previously mounted from ${tt(t)})`:``;return`- ${tt(e)}${n}`}),i=r.map(({path:e})=>` mount ${et(e)}`);a.push(`The page was reloaded and the following local ${t} lost filesystem permission. The browser cannot restore access without a fresh user gesture, so ${n} cannot be used until the user re-authorizes:`,``,...e,``,`Please tell the user what happened and ask whether they want to re-mount. If yes, run the corresponding command(s) so the folder picker opens and they can re-select the same directory:`,``,...i,``)}if(i.length>0){let e=i.map(({path:e,source:t,profile:n,reason:r})=>{let i=n==="default"?``:` --profile ${et(n)}`,a=`mount --source ${et(t)}${i} ${et(e)}`;return`- ${tt(e)} (${tt(t)}, profile ${tt(n)}) — ${r}\n Retry: ${tt(a)}`});a.push(`The following remote ${t} could not be auto-restored:`,``,...e,``)}return a.push("If the user no longer needs a mount, run `mount unmount <path>` (with the path shell-quoted the same way) to clear the stale entry instead."),a.join(`
|
|
2
2
|
`)}const eee=new Set([`webhook`,`cron`,`sprinkle`,`fswatch`,`session-reload`,`navigate`,`upgrade`,`cherry`,`workflow`,`sudo-request`]);function tee(e){return e!=null&&eee.has(e)}const nee={webhook:`Webhook Event`,sprinkle:`Sprinkle Event`,fswatch:`File Watch Event`,"session-reload":`Session Reload`,navigate:`Navigate Event`,upgrade:`Upgrade Event`,cherry:`Cherry Event`,workflow:`Workflow Event`,cron:`Cron Event`,"sudo-request":`Scoop Access Request`};function rt(e){switch(e.type){case`webhook`:return e.webhookName;case`sprinkle`:return e.sprinkleName;case`fswatch`:return e.fswatchName;case`session-reload`:return`mount-recovery`;case`navigate`:return e.navigateUrl;case`upgrade`:return`${e.upgradeFromVersion??`unknown`}→${e.upgradeToVersion??`unknown`}`;case`cherry`:return e.cherryName;case`workflow`:return e.workflowName;case`sudo-request`:return e.sudoScoopName;default:return e.cronName}}function it(e,t){let n=e.body,r=e.lickId;if(n?.reason===`mount-recovery`){let e=nt(n.mounts??[]);return e===null?null:{label:t,content:`${e}${r?`\n\nLick ID: ${r}\nThis card is actionable: call \`lick_confirm\` with this lick id to re-run the listed \`mount …\` command(s) so the user can re-authorize, or \`lick_dismiss\` to leave them unmounted. The card flips to ✓ on confirm / muted ✗ on dismiss.`:``}`}}let i=lt(e,t);if(!r)return i;let a=`\n\nLick ID: ${r}\nThis card is informational — there is NO confirm action. Call \`lick_dismiss\` with this lick id to acknowledge and clear it. The card flips to muted ✗ on dismiss.`;return{label:i.label,content:`${i.content}${a}`}}function at(e,t){let n=e.upgradeFromVersion??`unknown`,r=e.upgradeToVersion??`unknown`,i=e.body?.releasedAt??null,a=i?`\nReleased: ${i}`:``,o=e.lickId;return{label:t,content:`[${t}: ${n}→${r}]\n\nSLICC was upgraded from \`${n}\` to \`${r}\`.${a}${o?`\n\nLick ID: ${o}\nUse the **upgrade** skill (\`/workspace/skills/upgrade/SKILL.md\`). The card is a binary action: call \`lick_confirm\` with this lick id to **Update workspace files** (it runs the three-way merge of bundled vfs-root content into the user's VFS), or \`lick_dismiss\` to clear it. The card flips to ✓ on confirm / muted ✗ on dismiss. Reviewing the changelog is a separate step you can run first — it is NOT a card action.`:`
|
|
3
3
|
|
|
4
4
|
Use the **upgrade** skill (\`/workspace/skills/upgrade/SKILL.md\`) to offer the user a three-way merge of bundled vfs-root content into their workspace (bundled snapshot vs user's VFS, reconciled with the GitHub tag-to-tag diff).`}`}}function ot(e,t){let n=e.cherryOrigin??`unknown origin`,r=e.cherryRuntimeId??`unknown`;return{label:t,content:`[${t}: ${e.cherryName??`unnamed`}] from ${n} (runtime ${r})\n\`\`\`json\n${JSON.stringify(e.body,null,2)}\n\`\`\``}}function st(e,t){let n=e.workflowName??`workflow`,r=e.resultPath??`(no result file)`,i=e.preview??``;return{label:t,content:`[${t}: ${n}] ${e.body?.status??`complete`} — ${i}\nFull result: ${r} (read it only if you need the whole thing).`}}function ct(e,t){let n=e.sudoScoopName??`a scoop`,r=e.lickId??`(unknown)`,i=e.sudoKind??`unknown`,a=e.sudoDetail??``,o=[`[${t}: ${n}]`,`Lick ID: ${r}`,`Kind: ${i}`,`Detail: ${a}`];return e.sudoSuggestedPattern&&o.push(`Suggested pattern: ${e.sudoSuggestedPattern}`),o.push(``,`Use the lick_confirm tool with lick_id="${r}" to approve (or always-approve with a pattern), or lick_dismiss with lick_id="${r}" to deny.`),{label:t,content:o.join(`
|
|
5
|
-
`)}}function lt(e,t){let n=rt(e);return{label:t,content:`${e.originLabel?`_Forwarded from ${e.originLabel}._\n\n`:``}[${t}: ${n}]\n\`\`\`json\n${JSON.stringify(e.body,null,2)}\n\`\`\``}}function ut(e,t){let n=lt(e,t),r=e.lickId;if(!r)return n;let i=e.body?.verb===`upskill`?`\n\nLick ID: ${r}\nUpskill install. To install, call \`lick_confirm\` with this lick id (it runs \`upskill\` with any branch/path scope from the body); to skip, call \`lick_dismiss\`. The card flips to ✓ on confirm / muted ✗ on dismiss.`:`\n\nLick ID: ${r}\nExternal handoff — stays human-gated. Show the approval dip and wait for the user; do NOT use \`lick_confirm\` / \`lick_dismiss\` here. Carry the lick id in the dip action so the card resolves: slicc.lick({action:'accept'|'dismiss', data:{lickId:'${r}'}}).`;return{label:n.label,content:`${n.content}${i}`}}function dt(e){let t=nee[e.type];return e.type===`session-reload`?it(e,t):e.type===`upgrade`?at(e,t):e.type===`cherry`?ot(e,t):e.type===`workflow`?st(e,t):e.type===`sudo-request`?ct(e,t):e.type===`navigate`?ut(e,t):lt(e,t)}const ft=64*1024;function pt(e,t=ft){return e.length<=t?e:`${e.slice(0,t)}\n… [tool output truncated for the chat transcript: showing ${gt(t)} of ${gt(e.length)} — the agent received the full output]`}function mt(e,t=ft,n=4){if(typeof e==`string`)return pt(e,t);if(typeof e!=`object`||!e||n<=0)return e;if(Array.isArray(e)){let r=null;for(let i=0;i<e.length;i++){let a=mt(e[i],t,n-1);a!==e[i]&&(r??=[...e],r[i]=a)}return r??e}let r=null;for(let[i,a]of Object.entries(e)){let o=mt(a,t,n-1);o!==a&&(r??={...e},r[i]=o)}return r??e}const ht=()=>/<img:data:image\/[^>]+>/g;function ree(e,t=ft){if(!e)return e;if(!ht().test(e))return pt(e,t);let n=pt(e.replace(ht(),``).trim(),t);return n.length>0?`${n}\n[screenshot omitted from transcript]`:`[screenshot]`}function iee(e,t=ft){if(e.length<=t)return e;if(!ht().test(e))return pt(e,t);let n=[],r=0;for(let i of e.matchAll(ht()))n.push(pt(e.slice(r,i.index),t)),n.push(i[0]),r=(i.index??0)+i[0].length;return n.push(pt(e.slice(r),t)),n.join(``)}function gt(e){return e>=1024*1024?`${(e/(1024*1024)).toFixed(1)} MB`:`${Math.round(e/1024)} KB`}let aee={state:`inactive`,joinUrl:null,trayId:null,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:0,lastAttachCode:null,connectingSince:null,lastError:null};function _t(){return{...aee}}const vt=new Set;function yt(e){return vt.add(e),()=>{vt.delete(e)}}function bt(e){return e.headers.get(`x-proxy-error`)===`1`}async function xt(e){let t=`Proxy error ${e.status}`,n;try{n=await e.text()}catch{return t}return St(n,t)}function St(e,t){let n;try{n=JSON.parse(e)}catch{return t}if(!n||typeof n!=`object`)return t;let r=n.error;if(typeof r==`string`&&r.length>0)return r;if(r&&typeof r==`object`){let e=r.message;if(typeof e==`string`&&e.length>0)return e;try{return JSON.stringify(r)}catch{return t}}return t}const Ct={SCOOPS:`scoops`,MESSAGES:`messages`,SESSIONS:`sessions`,TASKS:`tasks`,STATE:`state`,WEBHOOKS:`webhooks`,CRONTASKS:`crontasks`};let wt=null;function Tt(e){if(!e.objectStoreNames.contains(Ct.MESSAGES)){let t=e.createObjectStore(Ct.MESSAGES,{keyPath:`id`});t.createIndex(`chatJid`,`chatJid`),t.createIndex(`timestamp`,`timestamp`),t.createIndex(`chatJid_timestamp`,[`chatJid`,`timestamp`])}e.objectStoreNames.contains(Ct.SESSIONS)||e.createObjectStore(Ct.SESSIONS,{keyPath:`groupFolder`}),e.objectStoreNames.contains(Ct.TASKS)||e.createObjectStore(Ct.TASKS,{keyPath:`id`}).createIndex(`groupFolder`,`groupFolder`),e.objectStoreNames.contains(Ct.STATE)||e.createObjectStore(Ct.STATE,{keyPath:`key`})}function Et(e){let t=e.isMain??!1;return{jid:e.jid,name:e.name,folder:e.folder,trigger:t?void 0:e.trigger||`@${e.folder}`,requiresTrigger:!t&&(e.requiresTrigger??!0),isCone:t,type:t?`cone`:`scoop`,assistantLabel:t?`sliccy`:e.config?.assistantName||e.folder,addedAt:e.addedAt,config:e.config?{systemPromptAppend:e.config.systemPromptAppend,timeout:e.config.timeout,assistantName:e.config.assistantName}:void 0}}function Dt(e,t){if(t.objectStoreNames.contains(`groups`)){let n=e.target.transaction.objectStore(`groups`).getAll();n.onsuccess=()=>{let e=n.result;t.deleteObjectStore(`groups`);let r=t.createObjectStore(Ct.SCOOPS,{keyPath:`jid`});r.createIndex(`type`,`type`);for(let t of e)r.put(Et(t))};return}t.objectStoreNames.contains(Ct.SCOOPS)||t.createObjectStore(Ct.SCOOPS,{keyPath:`jid`}).createIndex(`type`,`type`)}function Ot(e){e.objectStoreNames.contains(Ct.WEBHOOKS)||e.createObjectStore(Ct.WEBHOOKS,{keyPath:`id`}),e.objectStoreNames.contains(Ct.CRONTASKS)||e.createObjectStore(Ct.CRONTASKS,{keyPath:`id`})}function kt(e){let t=e.target.result,n=e.oldVersion;n<1&&Tt(t),n<2&&Dt(e,t),n<3&&Ot(t)}function At(){if(!wt)return null;let e=Object.values(Ct).every(e=>wt.objectStoreNames.contains(e));return wt.version===3&&e?wt:(wt.close(),wt=null,null)}function jt(e){e.onversionchange=()=>{e.close(),wt===e&&(wt=null)},e.onclose=()=>{wt===e&&(wt=null)}}async function Mt(){return At()||new Promise((e,t)=>{let n=indexedDB.open(`slicc-groups`,3);n.onupgradeneeded=kt,n.onsuccess=()=>{let t=n.result;jt(t),wt=t,e(t)},n.onerror=()=>t(n.error)})}async function Nt(e,t=`readonly`){return(await Mt()).transaction(e,t).objectStore(e)}async function Pt(e){let t=await Nt(Ct.SCOOPS,`readwrite`);return new Promise((n,r)=>{let i=t.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Ft(){let e=await Nt(Ct.SCOOPS);return new Promise((t,n)=>{let r=e.getAll();r.onsuccess=()=>{let e={};for(let t of r.result)e[t.jid]=t;t(e)},r.onerror=()=>n(r.error)})}async function It(e){let t=await Nt(Ct.SCOOPS,`readwrite`);return new Promise((n,r)=>{let i=t.delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Lt(){let e=await Nt(Ct.MESSAGES,`readwrite`);return new Promise((t,n)=>{let r=e.clear();r.onsuccess=()=>t(),r.onerror=()=>n(r.error)})}async function Rt(e){let t=(await Nt(Ct.MESSAGES,`readwrite`)).index(`chatJid_timestamp`),n=IDBKeyRange.bound([e,``],[e,``],!1,!1);return new Promise((e,r)=>{let i=t.openCursor(n);i.onsuccess=()=>{let t=i.result;if(!t){e();return}t.delete(),t.continue()},i.onerror=()=>r(i.error)})}async function zt(e){let t=await Nt(Ct.MESSAGES,`readwrite`);return new Promise((n,r)=>{let i=t.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Bt(e){let t=await Nt(Ct.MESSAGES,`readwrite`);return new Promise((n,r)=>{let i=t.delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Vt(e){let t=(await Nt(Ct.MESSAGES)).index(`chatJid_timestamp`),n=IDBKeyRange.bound([e,``],[e,``],!1,!1);return new Promise((e,r)=>{let i=t.getAll(n);i.onsuccess=()=>e(i.result),i.onerror=()=>r(i.error)})}async function oee(e,t,n){let r=(await Nt(Ct.MESSAGES)).index(`chatJid_timestamp`),i=IDBKeyRange.bound([e,t],[e,``],!0,!1);return new Promise((e,t)=>{let a=r.getAll(i);a.onsuccess=()=>{let t=a.result;n&&(t=t.filter(e=>e.senderName!==n)),e(t)},a.onerror=()=>t(a.error)})}async function Ht(e){let t=await Nt(Ct.TASKS,`readwrite`);return new Promise((n,r)=>{let i=t.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Ut(e){let t=await Nt(Ct.TASKS);return new Promise((n,r)=>{let i=t.get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async function Wt(){let e=await Nt(Ct.TASKS);return new Promise((t,n)=>{let r=e.getAll();r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error)})}async function see(e){let t=await Nt(Ct.TASKS,`readwrite`);return new Promise((n,r)=>{let i=t.delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Gt(e){let t=await Nt(Ct.STATE);return new Promise((n,r)=>{let i=t.get(e);i.onsuccess=()=>n(i.result?.value??null),i.onerror=()=>r(i.error)})}async function Kt(e,t){let n=await Nt(Ct.STATE,`readwrite`);return new Promise((r,i)=>{let a=n.put({key:e,value:t});a.onsuccess=()=>r(),a.onerror=()=>i(a.error)})}async function qt(){await Mt()}async function Jt(e){let t=await Nt(Ct.WEBHOOKS,`readwrite`);return new Promise((n,r)=>{let i=t.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Yt(){try{let e=await Nt(Ct.WEBHOOKS);return new Promise((t,n)=>{let r=e.getAll();r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error)})}catch{return[]}}async function Xt(e){let t=await Nt(Ct.WEBHOOKS,`readwrite`);return new Promise((n,r)=>{let i=t.delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Zt(e){let t=await Nt(Ct.CRONTASKS,`readwrite`);return new Promise((n,r)=>{let i=t.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Qt(){try{let e=await Nt(Ct.CRONTASKS);return new Promise((t,n)=>{let r=e.getAll();r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error)})}catch{return[]}}async function $t(e){let t=await Nt(Ct.CRONTASKS,`readwrite`);return new Promise((n,r)=>{let i=t.delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}function en(e){if(!e)return null;try{let t=new URL(e.trim());t.search=``,t.hash=``,t.pathname!==`/`&&(t.pathname=t.pathname.replace(/\/+$/,``)||`/`);let n=t.toString();return n.endsWith(`/`)?n.slice(0,-1):n}catch{return null}}const tn=`slicc.trayWorkerBaseUrl`,nn=`https://www.sliccy.ai`;i(`tray-leader`);let rn={state:`inactive`,session:null,error:null};function an(){return{...rn,session:rn.session?{...rn.session}:null}}function on(){let e=an();if(e.state!==`inactive`)return e;try{let e=globalThis.localStorage?.getItem(`slicc.leaderTrayStatus`);if(e){let t=JSON.parse(e);if(t?.state&&t.state!==`inactive`)return t}}catch{}return e}const sn=new Set;function cn(e){return sn.add(e),()=>{sn.delete(e)}}const ln=`sessions`;function un(){return new Promise((e,t)=>{let n=indexedDB.open(`browser-coding-agent`,1);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(ln)||e.createObjectStore(ln,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}var dn=class{db=null;async init(){await this.getDb()}async getDb(){if(!this.db){let e=await un();e.onversionchange=()=>{e.close(),this.db=null},e.onclose=()=>{this.db=null},this.db=e}return this.db}async save(e){let t=await this.getDb();return new Promise((n,r)=>{let i=t.transaction(ln,`readwrite`);i.objectStore(ln).put(e),i.oncomplete=()=>n(),i.onerror=()=>r(i.error)})}async load(e){let t=await this.getDb();return new Promise((n,r)=>{let i=t.transaction(ln,`readonly`).objectStore(ln).get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async list(){let e=await this.getDb();return new Promise((t,n)=>{let r=e.transaction(ln,`readonly`).objectStore(ln).getAll();r.onsuccess=()=>{t(r.result.sort((e,t)=>t.updatedAt-e.updatedAt).map(e=>e.id))},r.onerror=()=>n(r.error)})}async delete(e){let t=await this.getDb();return new Promise((n,r)=>{let i=t.transaction(ln,`readwrite`);i.objectStore(ln).delete(e),i.oncomplete=()=>n(),i.onerror=()=>r(i.error)})}async saveMessages(e,t){let n=await this.load(e),r=n?{...n,messages:t,updatedAt:Date.now()}:{id:e,messages:t,createdAt:Date.now(),updatedAt:Date.now()};await this.save(r)}};const fn=i(`offscreen-bridge`);function pn(e){if(typeof e!=`object`||!e)return null;let t=e;if(t.action!==`accept`&&t.action!==`dismiss`)return null;let n=t.data,r=n&&typeof n.lickId==`string`?n.lickId:null;return r?{lickId:r,accepted:t.action===`accept`}:null}var mn=class{orchestrator=null;browserAPI=null;messageBuffers=new Map;currentMessageId=new Map;scoopStatuses=new Map;sessionStore=null;followerSync=null;followerActive=!1;_transport;transportUnsubscribe=null;activeScoopJid=null;agentEventListeners=new Set;fanOutMessageId=new Map;constructor(e){this._transport=e??null}get transport(){return this._transport||=Xe(),this._transport}async bind(e,t){this.orchestrator=e,this.browserAPI=t??null,this.transportUnsubscribe?.(),this.transportUnsubscribe=this.setupMessageListener();let n=new dn;await n.init(),this.sessionStore=n}static createCallbacks(e){return{onResponse:(t,n,r)=>{let i=e.getOrCreateAssistantMsg(t);r?i.content+=n:(i.content=n,i.isStreaming=!1),e.emit({type:`agent-event`,scoopJid:t,eventType:`text_delta`,text:n})},onResponseDone:t=>{let n=e.currentMessageId.get(t);if(n){let r=e.getBuffer(t).find(e=>e.id===n);r&&(r.isStreaming=!1),e.currentMessageId.delete(t)}e.persistScoop(t),e.emit({type:`agent-event`,scoopJid:t,eventType:`response_done`})},onSendMessage:(t,n)=>{let r=e.getBuffer(t),i=`msg-${hn()}`;r.push({id:i,role:`assistant`,content:n,timestamp:Date.now()}),e.persistScoop(t),e.emit({type:`agent-event`,scoopJid:t,eventType:`text_delta`,text:n}),e.emit({type:`agent-event`,scoopJid:t,eventType:`response_done`})},onStatusChange:(t,n)=>{e.scoopStatuses.set(t,n),n===`ready`&&e.currentMessageId.delete(t),e.emit({type:`scoop-status`,scoopJid:t,status:n}),e.emitScoopList()},onCompactionStateChange:(t,n)=>{e.emit({type:`compaction-state`,scoopJid:t,state:n})},onError:(t,n)=>{e.emit({type:`error`,scoopJid:t,error:n})},onToolStart:(t,n,r)=>{Ze.has(n)||e.bufferToolStart(t,n,r)},onToolEnd:(t,n,r,i)=>{Ze.has(n)||e.bufferToolEnd(t,n,r,i)},onToolUI:(t,n,r,i)=>{e.emit({type:`agent-event`,scoopJid:t,eventType:`tool_ui`,toolName:n,requestId:r,html:i})},onToolUIDone:(t,n)=>{e.emit({type:`agent-event`,scoopJid:t,eventType:`tool_ui_done`,requestId:n})},onIncomingMessage:(t,n)=>e.bufferIncomingMessage(t,n),onMessageUpdate:(t,n)=>e.applyMessageUpdate(t,n),onScoopUnregistered:t=>e.evictScoopState(t)}}bufferToolStart(e,t,n){let r=mt(n),i=this.getOrCreateAssistantMsg(e);i.toolCalls||=[],i.toolCalls.push({id:hn(),name:t,input:r}),this.emit({type:`agent-event`,scoopJid:e,eventType:`tool_start`,toolName:t,toolInput:r})}bufferToolEnd(e,t,n,r){let i=this.currentMessageId.get(e);if(i){let a=this.getBuffer(e).find(e=>e.id===i);if(a?.toolCalls){let e=[...a.toolCalls].reverse().find(e=>e.name===t&&e.result===void 0);e&&(e.result=ree(n),e.isError=r)}}this.persistScoop(e),this.emit({type:`agent-event`,scoopJid:e,eventType:`tool_end`,toolName:t,toolResult:iee(n),isError:r})}bufferIncomingMessage(e,t){let n={id:t.id,role:`user`,content:t.channel===`delegation`?`**[Instructions from sliccy]**\n\n${t.content}`:t.content,attachments:t.attachments,timestamp:new Date(t.timestamp).getTime(),source:t.channel===`delegation`?`delegation`:void 0,channel:t.channel,lickId:t.lickId,lickState:t.lickState};this.getBuffer(e).push(n),this.persistScoop(e),this.notifyPanelIncomingMessage(e,t)}evictScoopState(e){this.messageBuffers.delete(e.jid),this.currentMessageId.delete(e.jid),this.fanOutMessageId.delete(e.jid),this.scoopStatuses.delete(e.jid),!e.isCone&&this.sessionStore&&this.sessionStore.delete(`session-${e.folder}`).catch(t=>{console.warn(`[offscreen-bridge] Failed to delete session for unregistered scoop:`,e.folder,t)}),this.emitScoopList()}notifyPanelIncomingMessage(e,t){this.emit({type:`incoming-message`,scoopJid:e,message:{id:t.id,content:t.content,attachments:t.attachments,channel:t.channel,senderName:t.senderName,fromAssistant:t.fromAssistant,timestamp:t.timestamp,lickId:t.lickId,lickState:t.lickState}})}applyMessageUpdate(e,t){let n=this.messageBuffers.get(e)?.find(e=>t.lickId&&e.lickId===t.lickId||e.id===t.messageId);n&&(n.lickState=t.lickState,this.persistScoop(e)),this.emit({type:`message-updated`,scoopJid:e,messageId:t.messageId,lickId:t.lickId,lickState:t.lickState})}toScoopSnapshot(e){let t=e.config&&(e.config.modelId!==void 0||e.config.thinkingLevel!==void 0)?{...e.config.modelId===void 0?{}:{modelId:e.config.modelId},...e.config.thinkingLevel===void 0?{}:{thinkingLevel:e.config.thinkingLevel}}:void 0;return{jid:e.jid,name:e.name,folder:e.folder,isCone:e.isCone,assistantLabel:e.assistantLabel,status:this.scoopStatuses.get(e.jid)??`ready`,...t?{config:t}:{}}}buildStateSnapshot(){let e=this.orchestrator?.getScoops().map(e=>this.toScoopSnapshot(e))??[],t=e.find(e=>e.isCone);return{type:`state-snapshot`,scoops:e,activeScoopJid:this.getActiveScoopJid()??t?.jid??null,trayRuntimeStatus:this.buildTrayRuntimeStatus()}}emitTrayRuntimeStatus(){let e=this.buildTrayRuntimeStatus(),t={type:`tray-runtime-status`,leader:e.leader,follower:e.follower};this.emit(t)}buildTrayRuntimeStatus(){let e=an(),t=_t();return{leader:{state:e.state,session:e.session,error:e.error??null,reconnectAttempts:e.reconnectAttempts??0},follower:{state:t.state,joinUrl:t.joinUrl,trayId:t.trayId,error:t.error,lastError:t.lastError,reconnectAttempts:t.reconnectAttempts,attachAttempts:t.attachAttempts,lastAttachCode:t.lastAttachCode,connectingSince:t.connectingSince,lastPingTime:t.lastPingTime}}}setFollowerSync(e){this.followerSync=e}setFollowerActive(e){this.followerActive=e}setActiveScoopJid(e){this.activeScoopJid=e}getActiveScoopJid(){return this.activeScoopJid}onAgentEvent(e){return this.agentEventListeners.add(e),()=>{this.agentEventListeners.delete(e)}}fanOutAgentEvent(e){let{scoopJid:t,eventType:n}=e,r=[],i=()=>{let e=this.fanOutMessageId.get(t);return e||(e=`scoop-${t}-${hn()}`,this.fanOutMessageId.set(t,e),r.push({type:`message_start`,messageId:e})),e};switch(n){case`text_delta`:{let t=i();r.push({type:`content_delta`,messageId:t,text:e.text??``});break}case`tool_start`:{let t=i();r.push({type:`tool_use_start`,messageId:t,toolName:e.toolName??``,toolInput:e.toolInput});break}case`tool_end`:{let n=this.fanOutMessageId.get(t);if(!n)return;r.push({type:`tool_result`,messageId:n,toolName:e.toolName??``,result:e.toolResult??``,isError:e.isError});break}case`tool_ui`:{let t=i();r.push({type:`tool_ui`,messageId:t,toolName:e.toolName??``,requestId:e.requestId??``,html:e.html??``});break}case`tool_ui_done`:{let n=this.fanOutMessageId.get(t);if(!n)return;r.push({type:`tool_ui_done`,messageId:n,requestId:e.requestId??``});break}case`response_done`:{let e=this.fanOutMessageId.get(t);if(!e)return;r.push({type:`content_done`,messageId:e}),this.fanOutMessageId.delete(t);break}case`turn_end`:this.fanOutMessageId.delete(t);break}for(let e of r)for(let n of this.agentEventListeners)try{n(t,e)}catch(e){fn.error(`onAgentEvent listener threw`,{error:e instanceof Error?e.message:String(e)})}}getMessagesForJid(e){return this.getBuffer(e)}async routeSprinkleLick(e,t,n,r){if(!this.orchestrator)return;let i=pn(t);i&&this.orchestrator.resolveNavigateHandoffByHuman(i.lickId,i.accepted);let a=this.orchestrator.getScoops(),o=n?a.find(e=>e.name===n||e.folder===n||e.folder===`${n}-scoop`):void 0;if(o||=a.find(e=>e.isCone),!o)return;let s=`sprinkle-${e}-${Date.now()}`,c=dt({type:`sprinkle`,sprinkleName:e,timestamp:new Date().toISOString(),body:t,originLabel:r})?.content??`[Sprinkle Event: ${e}]\n\`\`\`json\n${JSON.stringify(t,null,2)}\n\`\`\``,l={id:s,chatJid:o.jid,senderId:`sprinkle`,senderName:`sprinkle:${e}`,content:c,timestamp:new Date().toISOString(),fromAssistant:!1,channel:`sprinkle`};this.getBuffer(o.jid).push({id:s,role:`user`,content:c,timestamp:Date.now(),source:`lick`,channel:`sprinkle`}),this.persistScoop(o.jid),await this.orchestrator.handleMessage(l)}applyFollowerSnapshot(e){if(!this.orchestrator)return;let t=this.orchestrator.getScoops().find(e=>e.isCone);if(!t)return;let n=e.map(e=>({id:e.id,role:e.role,content:e.content,attachments:e.attachments,timestamp:e.timestamp,source:e.source,channel:e.channel,toolCalls:e.toolCalls?.map(e=>({id:e.id,name:e.name,input:e.input,result:e.result,isError:e.isError})),isStreaming:e.isStreaming}));if(this.messageBuffers.set(t.jid,n),this.currentMessageId.delete(t.jid),this.fanOutMessageId.delete(t.jid),this.sessionStore){let n=t.isCone?`session-cone`:`session-${t.folder}`;this.sessionStore.saveMessages(n,e).catch(e=>{fn.error(`applyFollowerSnapshot persist failed`,{error:e instanceof Error?e.message:String(e)})})}this.emit({type:`scoop-messages-replaced`,scoopJid:t.jid,messages:n})}getConeJid(){return this.orchestrator?.getScoops().find(e=>e.isCone)?.jid??null}emitFollowerAgentEvent(e){let t=this.getConeJid();if(t)switch(e.type){case`content_delta`:this.emit({type:`agent-event`,scoopJid:t,eventType:`text_delta`,text:e.text});break;case`content_done`:this.emit({type:`agent-event`,scoopJid:t,eventType:`response_done`});break;case`tool_use_start`:this.emit({type:`agent-event`,scoopJid:t,eventType:`tool_start`,toolName:e.toolName,toolInput:e.toolInput});break;case`tool_result`:this.emit({type:`agent-event`,scoopJid:t,eventType:`tool_end`,toolName:e.toolName,toolResult:e.result,isError:e.isError});break;case`turn_end`:this.emit({type:`agent-event`,scoopJid:t,eventType:`turn_end`});break;case`error`:this.emit({type:`error`,scoopJid:t,error:e.error});break}}emitFollowerIncomingMessage(e,t){let n=this.getConeJid();n&&this.emit({type:`incoming-message`,scoopJid:n,message:{id:e,content:t,channel:`web`,senderName:`User`,fromAssistant:!1,timestamp:new Date().toISOString()}})}emitFollowerStatus(e){let t=this.getConeJid();if(!t)return;let n=e===`processing`?`processing`:`ready`;this.scoopStatuses.set(t,n),this.emit({type:`scoop-status`,scoopJid:t,status:n})}async buildBufferFromAgentMessages(e){let t=this.orchestrator?.getScoopContext(e.jid);if(!t)return null;let n=t.getAgentMessages();if(n.length===0)return null;let{agentMessagesToChatMessages:r}=await import(`./agent-message-to-chat-DQErB0Zj.js`);return r(n,{source:e.isCone?`cone`:e.name??e.folder}).map(e=>({id:e.id,role:e.role,content:e.content,attachments:e.attachments,timestamp:e.timestamp,source:e.source,channel:e.channel,toolCalls:e.toolCalls?.map(e=>({id:e.id,name:e.name,input:e.input,result:e.result,isError:e.isError})),isStreaming:!1}))}async seedBuffersFromAgentState(){if(this.orchestrator)for(let e of this.orchestrator.getScoops()){let t=this.messageBuffers.get(e.jid);if(t&&t.length>0)continue;let n=await this.buildBufferFromAgentMessages(e);n&&(this.messageBuffers.set(e.jid,n),this.currentMessageId.delete(e.jid),this.fanOutMessageId.delete(e.jid),await this.persistScoopAwait(e.jid))}}async handleRequestScoopMessages(e){if(!this.orchestrator)return;let t=this.orchestrator.getScoops().find(t=>t.jid===e);if(!t)return;let n=this.messageBuffers.get(e);if(n&&n.length>0){this.emit({type:`scoop-messages-replaced`,scoopJid:e,messages:n});return}let r=await this.buildBufferFromAgentMessages(t);if(r){this.messageBuffers.set(e,r),this.currentMessageId.delete(e),this.fanOutMessageId.delete(e),this.persistScoop(e),this.emit({type:`scoop-messages-replaced`,scoopJid:e,messages:r});return}if(this.sessionStore){let n=t.isCone?`session-cone`:`session-${t.folder}`;try{let t=(await this.sessionStore.load(n))?.messages??[];t.length>0&&(this.messageBuffers.set(e,t),this.currentMessageId.delete(e),this.fanOutMessageId.delete(e),this.emit({type:`scoop-messages-replaced`,scoopJid:e,messages:t}))}catch(e){fn.error(`sessionStore load failed`,{sessionId:n,error:e instanceof Error?e.message:String(e)})}}}async handleConeCreate(e){if(!this.orchestrator)return;let t={jid:`cone_${Date.now()}`,name:e,folder:`cone`,isCone:!0,type:`cone`,requiresTrigger:!1,assistantLabel:`sliccy`,addedAt:new Date().toISOString()};await this.orchestrator.registerScoop(t),this.emit({type:`scoop-created`,scoop:this.toScoopSnapshot(t)})}handleRequestSessionStats(e){let t=0,n=[];try{t=(this.orchestrator?.getSessionCosts()??[]).reduce((e,t)=>e+t.usage.cost.total,0),n=this.orchestrator?.getContextFills()??[]}catch{}this.emit({type:`session-stats`,requestId:e,totalCost:t,fills:n})}async handleRequestScoopTranscript(e,t){let n=()=>{this.emit({type:`scoop-transcript`,requestId:e,scoopJid:t,transcript:``})};if(!this.orchestrator){n();return}let r=this.orchestrator.getScoops().find(e=>e.jid===t);if(!r){n();return}let i=this.messageBuffers.get(t);if(i&&i.length>0){this.emit({type:`scoop-transcript`,requestId:e,scoopJid:t,transcript:gn(i)});return}let a=this.orchestrator.getScoopContext(t);if(a){let{agentMessagesToChatMessages:n}=await import(`./agent-message-to-chat-DQErB0Zj.js`),i=a.getAgentMessages();if(i.length>0){let a=n(i,{source:r.isCone?`cone`:r.name??r.folder});this.emit({type:`scoop-transcript`,requestId:e,scoopJid:t,transcript:gn(a)});return}}n()}persistScoop(e){this.persistScoopAwait(e)}async persistScoopAwait(e){if(!this.sessionStore||!this.orchestrator)return;let t=this.orchestrator.getScoops().find(t=>t.jid===e);if(!t)return;let n=t.isCone?`session-cone`:`session-${t.folder}`,r=this.messageBuffers.get(e);if(!(!r||r.length===0))try{await this.sessionStore.saveMessages(n,r)}catch(e){fn.error(`persistScoop failed`,{sessionId:n,error:e instanceof Error?e.message:String(e)})}}getBuffer(e){let t=this.messageBuffers.get(e);return t||(t=[],this.messageBuffers.set(e,t)),t}getOrCreateAssistantMsg(e){let t=this.getBuffer(e),n=this.currentMessageId.get(e);if(n){let e=t.find(e=>e.id===n);if(e)return e}n=`scoop-${e}-${hn()}`,this.currentMessageId.set(e,n);let r=(this.orchestrator?.getScoops()??[]).find(t=>t.jid===e),i=r?.isCone?`cone`:r?.name??`unknown`,a={id:n,role:`assistant`,content:``,timestamp:Date.now(),toolCalls:[],isStreaming:!0,source:i};return t.push(a),a}setupMessageListener(){return this.transport.onMessage(e=>{if(e.source===`panel`){if(e.payload?.type===`sprinkle-op-response`){import(`./sprinkle-proxy-B4nH2NxC.js`).then(({handleSprinkleOpResponse:t})=>{t(e.payload)});return}this.handlePanelMessage(e.payload).catch(t=>{console.error(`[offscreen-bridge] handlePanelMessage error:`,t);let n=e.payload.scoopJid;n&&this.emit({type:`error`,scoopJid:n,error:t instanceof Error?t.message:String(t)})})}})}async handlePanelMessage(e){if(this.orchestrator)switch(e.type){case`user-message`:await this.handleUserMessage(e);break;case`cone-create`:await this.handleConeCreate(e.name);break;case`scoop-feed`:await this.orchestrator.delegateToScoop(e.scoopJid,e.prompt,`sliccy`);break;case`scoop-drop`:await this.handleScoopDrop(e.scoopJid);break;case`abort`:this.orchestrator.stopScoop(e.scoopJid),this.orchestrator.clearQueuedMessages(e.scoopJid).catch(e=>{console.warn(`[offscreen-bridge] Failed to clear queued messages on abort:`,e)});break;case`delete-queued-message`:this.handleDeleteQueuedMessage(e.scoopJid,e.messageId);break;case`set-model`:this.orchestrator.updateModel();break;case`request-state`:this.emit(this.buildStateSnapshot());break;case`request-scoop-messages`:await this.handleRequestScoopMessages(e.scoopJid);break;case`request-scoop-transcript`:await this.handleRequestScoopTranscript(e.requestId,e.scoopJid);break;case`request-session-stats`:this.handleRequestSessionStats(e.requestId);break;case`clear-chat`:await this.handleClearChat(e.requestId);break;case`clear-filesystem`:await this.orchestrator.resetFilesystem().catch(e=>console.error(`[offscreen-bridge] clear-filesystem failed:`,e));break;case`refresh-model`:this.orchestrator.updateModel();break;case`set-thinking-level`:{let t=e;try{await this.orchestrator.setScoopThinkingLevel(t.scoopJid,t.level)}catch(e){console.error(`[offscreen-bridge] set-thinking-level failed:`,e)}break}case`sprinkle-lick`:await this.handleSprinkleLickMsg(e);break;case`lick-webhook-event`:this.orchestrator.handleWebhookEvent(e.webhookId,e.headers,e.body);break;case`set-follower-forwarding`:this.handleSetFollowerForwarding(e.enabled);break;case`inject-forwarded-lick`:this.handleInjectForwardedLick(e.event);break;case`lick-cherry-host-event`:this.orchestrator.handleCherryHostEvent(e.cherryRuntimeId,e.name,e.detail);break;case`reload-skills`:this.orchestrator.reloadAllSkills().catch(e=>{console.warn(`[offscreen-bridge] Skill reload failed:`,e)});break;case`panel-cdp-command`:await this.handlePanelCdpCommand(e);break;case`tool-ui-action`:await this.handleToolUIAction(e);break;case`local-storage-set`:this.applyLocalStorageOp(e.type,t=>t.setItem(e.key,e.value));break;case`local-storage-remove`:this.applyLocalStorageOp(e.type,t=>t.removeItem(e.key));break;case`local-storage-clear`:this.applyLocalStorageOp(e.type,e=>e.clear());break}}handleDeleteQueuedMessage(e,t){if(!this.orchestrator)return;this.orchestrator.deleteQueuedMessage(e,t).catch(e=>{console.warn(`[offscreen-bridge] Failed to delete queued message:`,e)});let n=this.messageBuffers.get(e);if(!n)return;let r=n.filter(e=>e.id!==t);r.length!==n.length&&(this.messageBuffers.set(e,r),this.persistScoop(e))}async handleUserMessage(e){if(this.getBuffer(e.scoopJid).push({id:e.messageId,role:`user`,content:e.text,attachments:e.attachments,timestamp:Date.now()}),this.persistScoop(e.scoopJid),this.followerSync){this.followerSync.sendMessage(e.text,e.messageId,e.attachments);return}let t={id:e.messageId,chatJid:e.scoopJid,senderId:`user`,senderName:`User`,content:e.text,attachments:e.attachments,timestamp:new Date().toISOString(),fromAssistant:!1,channel:`web`};await this.orchestrator?.handleMessage(t),this.orchestrator?.createScoopTab(e.scoopJid)}async handleScoopDrop(e){if(!this.orchestrator)return;let t=this.orchestrator.getScoops().find(t=>t.jid===e);if(await this.orchestrator.unregisterScoop(e),this.messageBuffers.delete(e),this.currentMessageId.delete(e),this.fanOutMessageId.delete(e),this.scoopStatuses.delete(e),t&&this.sessionStore){let e=t.isCone?`session-cone`:`session-${t.folder}`;this.sessionStore.delete(e).catch(t=>{console.warn(`[offscreen-bridge] Failed to delete session on scoop drop:`,e,t)})}this.emitScoopList()}async handleClearChat(e){let t=this.orchestrator?.getScoops().find(e=>e.isCone)?.jid;t&&await this.orchestrator?.clearScoopMessages(t),this.sessionStore&&await this.sessionStore.delete(`session-cone`),t&&(this.messageBuffers.delete(t),this.currentMessageId.delete(t),this.fanOutMessageId.delete(t)),this.emit({type:`clear-chat-ack`,requestId:e})}async handleSprinkleLickMsg(e){if(this.followerActive){this.followerSync?this.followerSync.sendSprinkleLick(e.sprinkleName,e.body,e.targetScoop):console.warn(`[offscreen-bridge] sprinkle-lick dropped: follower sync mid-reconnect`,{sprinkleName:e.sprinkleName});return}await this.routeSprinkleLick(e.sprinkleName,e.body,e.targetScoop,e.originLabel)}handleSetFollowerForwarding(e){let t=globalThis.__slicc_lickManager;if(!t){console.warn(`[offscreen-bridge] set-follower-forwarding ignored: worker LickManager unavailable`);return}e?t.setForwarder(e=>this.emit({type:`forward-lick`,event:e})):t.setForwarder(null)}handleInjectForwardedLick(e){let t=globalThis.__slicc_lickManager;if(!t){console.warn(`[offscreen-bridge] inject-forwarded-lick dropped: worker LickManager unavailable`,{type:e.type});return}t.emitEvent(e)}async handlePanelCdpCommand(e){let{id:t,method:n,params:r,sessionId:i}=e;if(!this.browserAPI){console.warn(`[offscreen-bridge] Panel CDP command received but BrowserAPI is null`),this.emit({type:`panel-cdp-response`,id:t,error:`BrowserAPI not available`});return}try{let e=await this.browserAPI.getTransport().send(n,r,i);this.emit({type:`panel-cdp-response`,id:t,result:e})}catch(e){this.emit({type:`panel-cdp-response`,id:t,error:e instanceof Error?e.message:String(e)})}}async handleToolUIAction(e){let{requestId:t,action:n,data:r}=e;try{await o.handleAction(t,{action:n,data:r})}catch(e){let r=e instanceof Error?e.message:String(e);console.error(`[offscreen-bridge] Tool UI action failed`,{requestId:t,action:n,error:r}),o.cancel(t,`Action failed: ${r}`)}}applyLocalStorageOp(e,t){try{let e=globalThis.localStorage;e&&t(e)}catch(t){console.warn(`[offscreen-bridge] ${e} failed:`,t)}}emitScoopList(){let e=this.orchestrator?.getScoops().map(e=>this.toScoopSnapshot(e))??[];this.emit({type:`scoop-list`,scoops:e})}emit(e){this.transport.send(e),e.type===`agent-event`&&this.fanOutAgentEvent(e)}};function hn(){return Date.now().toString(36)+Math.random().toString(36).slice(2,8)}function gn(e){let t=[];for(let n of e){let e=(n.content??``).trim();e.length!==0&&t.push(`${n.role}: ${e}`)}return t.join(`
|
|
5
|
+
`)}}function lt(e,t){let n=rt(e);return{label:t,content:`${e.originLabel?`_Forwarded from ${e.originLabel}._\n\n`:``}[${t}: ${n}]\n\`\`\`json\n${JSON.stringify(e.body,null,2)}\n\`\`\``}}function ut(e,t){let n=lt(e,t),r=e.lickId;if(!r)return n;let i=e.body?.verb===`upskill`?`\n\nLick ID: ${r}\nUpskill install. To install, call \`lick_confirm\` with this lick id (it runs \`upskill\` with any branch/path scope from the body); to skip, call \`lick_dismiss\`. The card flips to ✓ on confirm / muted ✗ on dismiss.`:`\n\nLick ID: ${r}\nExternal handoff — stays human-gated. Show the approval dip and wait for the user; do NOT use \`lick_confirm\` / \`lick_dismiss\` here. Carry the lick id in the dip action so the card resolves: slicc.lick({action:'accept'|'dismiss', data:{lickId:'${r}'}}).`;return{label:n.label,content:`${n.content}${i}`}}function dt(e){let t=nee[e.type];return e.type===`session-reload`?it(e,t):e.type===`upgrade`?at(e,t):e.type===`cherry`?ot(e,t):e.type===`workflow`?st(e,t):e.type===`sudo-request`?ct(e,t):e.type===`navigate`?ut(e,t):lt(e,t)}const ft=64*1024;function pt(e,t=ft){return e.length<=t?e:`${e.slice(0,t)}\n… [tool output truncated for the chat transcript: showing ${gt(t)} of ${gt(e.length)} — the agent received the full output]`}function mt(e,t=ft,n=4){if(typeof e==`string`)return pt(e,t);if(typeof e!=`object`||!e||n<=0)return e;if(Array.isArray(e)){let r=null;for(let i=0;i<e.length;i++){let a=mt(e[i],t,n-1);a!==e[i]&&(r??=[...e],r[i]=a)}return r??e}let r=null;for(let[i,a]of Object.entries(e)){let o=mt(a,t,n-1);o!==a&&(r??={...e},r[i]=o)}return r??e}const ht=()=>/<img:data:image\/[^>]+>/g;function ree(e,t=ft){if(!e)return e;if(!ht().test(e))return pt(e,t);let n=pt(e.replace(ht(),``).trim(),t);return n.length>0?`${n}\n[screenshot omitted from transcript]`:`[screenshot]`}function iee(e,t=ft){if(e.length<=t)return e;if(!ht().test(e))return pt(e,t);let n=[],r=0;for(let i of e.matchAll(ht()))n.push(pt(e.slice(r,i.index),t)),n.push(i[0]),r=(i.index??0)+i[0].length;return n.push(pt(e.slice(r),t)),n.join(``)}function gt(e){return e>=1024*1024?`${(e/(1024*1024)).toFixed(1)} MB`:`${Math.round(e/1024)} KB`}let aee={state:`inactive`,joinUrl:null,trayId:null,error:null,lastPingTime:null,reconnectAttempts:0,attachAttempts:0,lastAttachCode:null,connectingSince:null,lastError:null};function _t(){return{...aee}}const vt=new Set;function yt(e){return vt.add(e),()=>{vt.delete(e)}}function bt(e){return e.headers.get(`x-proxy-error`)===`1`}async function xt(e){let t=`Proxy error ${e.status}`,n;try{n=await e.text()}catch{return t}return St(n,t)}function St(e,t){let n;try{n=JSON.parse(e)}catch{return t}if(!n||typeof n!=`object`)return t;let r=n.error;if(typeof r==`string`&&r.length>0)return r;if(r&&typeof r==`object`){let e=r.message;if(typeof e==`string`&&e.length>0)return e;try{return JSON.stringify(r)}catch{return t}}return t}const Ct={SCOOPS:`scoops`,MESSAGES:`messages`,SESSIONS:`sessions`,TASKS:`tasks`,STATE:`state`,WEBHOOKS:`webhooks`,CRONTASKS:`crontasks`};let wt=null;function Tt(e){if(!e.objectStoreNames.contains(Ct.MESSAGES)){let t=e.createObjectStore(Ct.MESSAGES,{keyPath:`id`});t.createIndex(`chatJid`,`chatJid`),t.createIndex(`timestamp`,`timestamp`),t.createIndex(`chatJid_timestamp`,[`chatJid`,`timestamp`])}e.objectStoreNames.contains(Ct.SESSIONS)||e.createObjectStore(Ct.SESSIONS,{keyPath:`groupFolder`}),e.objectStoreNames.contains(Ct.TASKS)||e.createObjectStore(Ct.TASKS,{keyPath:`id`}).createIndex(`groupFolder`,`groupFolder`),e.objectStoreNames.contains(Ct.STATE)||e.createObjectStore(Ct.STATE,{keyPath:`key`})}function Et(e){let t=e.isMain??!1;return{jid:e.jid,name:e.name,folder:e.folder,trigger:t?void 0:e.trigger||`@${e.folder}`,requiresTrigger:!t&&(e.requiresTrigger??!0),isCone:t,type:t?`cone`:`scoop`,assistantLabel:t?`sliccy`:e.config?.assistantName||e.folder,addedAt:e.addedAt,config:e.config?{systemPromptAppend:e.config.systemPromptAppend,timeout:e.config.timeout,assistantName:e.config.assistantName}:void 0}}function Dt(e,t){if(t.objectStoreNames.contains(`groups`)){let n=e.target.transaction.objectStore(`groups`).getAll();n.onsuccess=()=>{let e=n.result;t.deleteObjectStore(`groups`);let r=t.createObjectStore(Ct.SCOOPS,{keyPath:`jid`});r.createIndex(`type`,`type`);for(let t of e)r.put(Et(t))};return}t.objectStoreNames.contains(Ct.SCOOPS)||t.createObjectStore(Ct.SCOOPS,{keyPath:`jid`}).createIndex(`type`,`type`)}function Ot(e){e.objectStoreNames.contains(Ct.WEBHOOKS)||e.createObjectStore(Ct.WEBHOOKS,{keyPath:`id`}),e.objectStoreNames.contains(Ct.CRONTASKS)||e.createObjectStore(Ct.CRONTASKS,{keyPath:`id`})}function kt(e){let t=e.target.result,n=e.oldVersion;n<1&&Tt(t),n<2&&Dt(e,t),n<3&&Ot(t)}function At(){if(!wt)return null;let e=Object.values(Ct).every(e=>wt.objectStoreNames.contains(e));return wt.version===3&&e?wt:(wt.close(),wt=null,null)}function jt(e){e.onversionchange=()=>{e.close(),wt===e&&(wt=null)},e.onclose=()=>{wt===e&&(wt=null)}}async function Mt(){return At()||new Promise((e,t)=>{let n=indexedDB.open(`slicc-groups`,3);n.onupgradeneeded=kt,n.onsuccess=()=>{let t=n.result;jt(t),wt=t,e(t)},n.onerror=()=>t(n.error)})}async function Nt(e,t=`readonly`){return(await Mt()).transaction(e,t).objectStore(e)}async function Pt(e){let t=await Nt(Ct.SCOOPS,`readwrite`);return new Promise((n,r)=>{let i=t.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Ft(){let e=await Nt(Ct.SCOOPS);return new Promise((t,n)=>{let r=e.getAll();r.onsuccess=()=>{let e={};for(let t of r.result)e[t.jid]=t;t(e)},r.onerror=()=>n(r.error)})}async function It(e){let t=await Nt(Ct.SCOOPS,`readwrite`);return new Promise((n,r)=>{let i=t.delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Lt(){let e=await Nt(Ct.MESSAGES,`readwrite`);return new Promise((t,n)=>{let r=e.clear();r.onsuccess=()=>t(),r.onerror=()=>n(r.error)})}async function Rt(e){let t=(await Nt(Ct.MESSAGES,`readwrite`)).index(`chatJid_timestamp`),n=IDBKeyRange.bound([e,``],[e,``],!1,!1);return new Promise((e,r)=>{let i=t.openCursor(n);i.onsuccess=()=>{let t=i.result;if(!t){e();return}t.delete(),t.continue()},i.onerror=()=>r(i.error)})}async function zt(e){let t=await Nt(Ct.MESSAGES,`readwrite`);return new Promise((n,r)=>{let i=t.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Bt(e){let t=await Nt(Ct.MESSAGES,`readwrite`);return new Promise((n,r)=>{let i=t.delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Vt(e){let t=(await Nt(Ct.MESSAGES)).index(`chatJid_timestamp`),n=IDBKeyRange.bound([e,``],[e,``],!1,!1);return new Promise((e,r)=>{let i=t.getAll(n);i.onsuccess=()=>e(i.result),i.onerror=()=>r(i.error)})}async function oee(e,t,n){let r=(await Nt(Ct.MESSAGES)).index(`chatJid_timestamp`),i=IDBKeyRange.bound([e,t],[e,``],!0,!1);return new Promise((e,t)=>{let a=r.getAll(i);a.onsuccess=()=>{let t=a.result;n&&(t=t.filter(e=>e.senderName!==n)),e(t)},a.onerror=()=>t(a.error)})}async function Ht(e){let t=await Nt(Ct.TASKS,`readwrite`);return new Promise((n,r)=>{let i=t.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Ut(e){let t=await Nt(Ct.TASKS);return new Promise((n,r)=>{let i=t.get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async function Wt(){let e=await Nt(Ct.TASKS);return new Promise((t,n)=>{let r=e.getAll();r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error)})}async function see(e){let t=await Nt(Ct.TASKS,`readwrite`);return new Promise((n,r)=>{let i=t.delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Gt(e){let t=await Nt(Ct.STATE);return new Promise((n,r)=>{let i=t.get(e);i.onsuccess=()=>n(i.result?.value??null),i.onerror=()=>r(i.error)})}async function Kt(e,t){let n=await Nt(Ct.STATE,`readwrite`);return new Promise((r,i)=>{let a=n.put({key:e,value:t});a.onsuccess=()=>r(),a.onerror=()=>i(a.error)})}async function qt(){await Mt()}async function Jt(e){let t=await Nt(Ct.WEBHOOKS,`readwrite`);return new Promise((n,r)=>{let i=t.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Yt(){try{let e=await Nt(Ct.WEBHOOKS);return new Promise((t,n)=>{let r=e.getAll();r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error)})}catch{return[]}}async function Xt(e){let t=await Nt(Ct.WEBHOOKS,`readwrite`);return new Promise((n,r)=>{let i=t.delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Zt(e){let t=await Nt(Ct.CRONTASKS,`readwrite`);return new Promise((n,r)=>{let i=t.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function Qt(){try{let e=await Nt(Ct.CRONTASKS);return new Promise((t,n)=>{let r=e.getAll();r.onsuccess=()=>t(r.result),r.onerror=()=>n(r.error)})}catch{return[]}}async function $t(e){let t=await Nt(Ct.CRONTASKS,`readwrite`);return new Promise((n,r)=>{let i=t.delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}function en(e){if(!e)return null;try{let t=new URL(e.trim());t.search=``,t.hash=``,t.pathname!==`/`&&(t.pathname=t.pathname.replace(/\/+$/,``)||`/`);let n=t.toString();return n.endsWith(`/`)?n.slice(0,-1):n}catch{return null}}const tn=`slicc.trayWorkerBaseUrl`,nn=`https://www.sliccy.ai`;i(`tray-leader`);let rn={state:`inactive`,session:null,error:null};function an(){return{...rn,session:rn.session?{...rn.session}:null}}function on(){let e=an();if(e.state!==`inactive`)return e;try{let e=globalThis.localStorage?.getItem(`slicc.leaderTrayStatus`);if(e){let t=JSON.parse(e);if(t?.state&&t.state!==`inactive`)return t}}catch{}return e}const sn=new Set;function cn(e){return sn.add(e),()=>{sn.delete(e)}}const ln=`sessions`;function un(){return new Promise((e,t)=>{let n=indexedDB.open(`browser-coding-agent`,1);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(ln)||e.createObjectStore(ln,{keyPath:`id`})},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}var dn=class{db=null;async init(){await this.getDb()}async getDb(){if(!this.db){let e=await un();e.onversionchange=()=>{e.close(),this.db=null},e.onclose=()=>{this.db=null},this.db=e}return this.db}async save(e){let t=await this.getDb();return new Promise((n,r)=>{let i=t.transaction(ln,`readwrite`);i.objectStore(ln).put(e),i.oncomplete=()=>n(),i.onerror=()=>r(i.error)})}async load(e){let t=await this.getDb();return new Promise((n,r)=>{let i=t.transaction(ln,`readonly`).objectStore(ln).get(e);i.onsuccess=()=>n(i.result??null),i.onerror=()=>r(i.error)})}async list(){let e=await this.getDb();return new Promise((t,n)=>{let r=e.transaction(ln,`readonly`).objectStore(ln).getAll();r.onsuccess=()=>{t(r.result.sort((e,t)=>t.updatedAt-e.updatedAt).map(e=>e.id))},r.onerror=()=>n(r.error)})}async delete(e){let t=await this.getDb();return new Promise((n,r)=>{let i=t.transaction(ln,`readwrite`);i.objectStore(ln).delete(e),i.oncomplete=()=>n(),i.onerror=()=>r(i.error)})}async saveMessages(e,t){let n=await this.load(e),r=n?{...n,messages:t,updatedAt:Date.now()}:{id:e,messages:t,createdAt:Date.now(),updatedAt:Date.now()};await this.save(r)}};const fn=i(`offscreen-bridge`);function pn(e){if(typeof e!=`object`||!e)return null;let t=e;if(t.action!==`accept`&&t.action!==`dismiss`)return null;let n=t.data,r=n&&typeof n.lickId==`string`?n.lickId:null;return r?{lickId:r,accepted:t.action===`accept`}:null}var mn=class{orchestrator=null;browserAPI=null;messageBuffers=new Map;currentMessageId=new Map;scoopStatuses=new Map;sessionStore=null;followerSync=null;followerActive=!1;_transport;transportUnsubscribe=null;activeScoopJid=null;agentEventListeners=new Set;fanOutMessageId=new Map;constructor(e){this._transport=e??null}get transport(){return this._transport||=Xe(),this._transport}async bind(e,t){this.orchestrator=e,this.browserAPI=t??null,this.transportUnsubscribe?.(),this.transportUnsubscribe=this.setupMessageListener();let n=new dn;await n.init(),this.sessionStore=n}static createCallbacks(e){return{onResponse:(t,n,r)=>{let i=e.getOrCreateAssistantMsg(t);r?i.content+=n:(i.content=n,i.isStreaming=!1),e.emit({type:`agent-event`,scoopJid:t,eventType:`text_delta`,text:n})},onResponseDone:t=>{let n=e.currentMessageId.get(t);if(n){let r=e.getBuffer(t).find(e=>e.id===n);r&&(r.isStreaming=!1),e.currentMessageId.delete(t)}e.persistScoop(t),e.emit({type:`agent-event`,scoopJid:t,eventType:`response_done`})},onSendMessage:(t,n)=>{let r=e.getBuffer(t),i=`msg-${hn()}`;r.push({id:i,role:`assistant`,content:n,timestamp:Date.now()}),e.persistScoop(t),e.emit({type:`agent-event`,scoopJid:t,eventType:`text_delta`,text:n}),e.emit({type:`agent-event`,scoopJid:t,eventType:`response_done`})},onStatusChange:(t,n)=>{e.scoopStatuses.set(t,n),n===`ready`&&e.currentMessageId.delete(t),e.emit({type:`scoop-status`,scoopJid:t,status:n}),e.emitScoopList()},onCompactionStateChange:(t,n)=>{e.emit({type:`compaction-state`,scoopJid:t,state:n})},onError:(t,n)=>{e.emit({type:`error`,scoopJid:t,error:n})},onToolStart:(t,n,r)=>{Ze.has(n)||e.bufferToolStart(t,n,r)},onToolEnd:(t,n,r,i)=>{Ze.has(n)||e.bufferToolEnd(t,n,r,i)},onToolUI:(t,n,r,i)=>{e.emit({type:`agent-event`,scoopJid:t,eventType:`tool_ui`,toolName:n,requestId:r,html:i})},onToolUIDone:(t,n)=>{e.emit({type:`agent-event`,scoopJid:t,eventType:`tool_ui_done`,requestId:n})},onIncomingMessage:(t,n)=>e.bufferIncomingMessage(t,n),onMessageUpdate:(t,n)=>e.applyMessageUpdate(t,n),onScoopUnregistered:t=>e.evictScoopState(t)}}bufferToolStart(e,t,n){let r=mt(n),i=this.getOrCreateAssistantMsg(e);i.toolCalls||=[],i.toolCalls.push({id:hn(),name:t,input:r}),this.emit({type:`agent-event`,scoopJid:e,eventType:`tool_start`,toolName:t,toolInput:r})}bufferToolEnd(e,t,n,r){let i=this.currentMessageId.get(e);if(i){let a=this.getBuffer(e).find(e=>e.id===i);if(a?.toolCalls){let e=[...a.toolCalls].reverse().find(e=>e.name===t&&e.result===void 0);e&&(e.result=ree(n),e.isError=r)}}this.persistScoop(e),this.emit({type:`agent-event`,scoopJid:e,eventType:`tool_end`,toolName:t,toolResult:iee(n),isError:r})}bufferIncomingMessage(e,t){let n={id:t.id,role:`user`,content:t.channel===`delegation`?`**[Instructions from sliccy]**\n\n${t.content}`:t.content,attachments:t.attachments,timestamp:new Date(t.timestamp).getTime(),source:t.channel===`delegation`?`delegation`:void 0,channel:t.channel,lickId:t.lickId,lickState:t.lickState};this.getBuffer(e).push(n),this.persistScoop(e),this.notifyPanelIncomingMessage(e,t)}evictScoopState(e){this.messageBuffers.delete(e.jid),this.currentMessageId.delete(e.jid),this.fanOutMessageId.delete(e.jid),this.scoopStatuses.delete(e.jid),!e.isCone&&this.sessionStore&&this.sessionStore.delete(`session-${e.folder}`).catch(t=>{console.warn(`[offscreen-bridge] Failed to delete session for unregistered scoop:`,e.folder,t)}),this.emitScoopList()}notifyPanelIncomingMessage(e,t){this.emit({type:`incoming-message`,scoopJid:e,message:{id:t.id,content:t.content,attachments:t.attachments,channel:t.channel,senderName:t.senderName,fromAssistant:t.fromAssistant,timestamp:t.timestamp,lickId:t.lickId,lickState:t.lickState}})}applyMessageUpdate(e,t){let n=this.messageBuffers.get(e)?.find(e=>t.lickId&&e.lickId===t.lickId||e.id===t.messageId);n&&(n.lickState=t.lickState,this.persistScoop(e)),this.emit({type:`message-updated`,scoopJid:e,messageId:t.messageId,lickId:t.lickId,lickState:t.lickState})}toScoopSnapshot(e){let t=e.config&&(e.config.modelId!==void 0||e.config.thinkingLevel!==void 0)?{...e.config.modelId===void 0?{}:{modelId:e.config.modelId},...e.config.thinkingLevel===void 0?{}:{thinkingLevel:e.config.thinkingLevel}}:void 0;return{jid:e.jid,name:e.name,folder:e.folder,isCone:e.isCone,assistantLabel:e.assistantLabel,status:this.scoopStatuses.get(e.jid)??`ready`,...t?{config:t}:{}}}buildStateSnapshot(){let e=this.orchestrator?.getScoops().map(e=>this.toScoopSnapshot(e))??[],t=e.find(e=>e.isCone);return{type:`state-snapshot`,scoops:e,activeScoopJid:this.getActiveScoopJid()??t?.jid??null,trayRuntimeStatus:this.buildTrayRuntimeStatus()}}emitTrayRuntimeStatus(){let e=this.buildTrayRuntimeStatus(),t={type:`tray-runtime-status`,leader:e.leader,follower:e.follower};this.emit(t)}buildTrayRuntimeStatus(){let e=an(),t=_t();return{leader:{state:e.state,session:e.session,error:e.error??null,reconnectAttempts:e.reconnectAttempts??0},follower:{state:t.state,joinUrl:t.joinUrl,trayId:t.trayId,error:t.error,lastError:t.lastError,reconnectAttempts:t.reconnectAttempts,attachAttempts:t.attachAttempts,lastAttachCode:t.lastAttachCode,connectingSince:t.connectingSince,lastPingTime:t.lastPingTime}}}setFollowerSync(e){this.followerSync=e}setFollowerActive(e){this.followerActive=e}setActiveScoopJid(e){this.activeScoopJid=e}getActiveScoopJid(){return this.activeScoopJid}onAgentEvent(e){return this.agentEventListeners.add(e),()=>{this.agentEventListeners.delete(e)}}fanOutAgentEvent(e){let{scoopJid:t,eventType:n}=e,r=[],i=()=>{let e=this.fanOutMessageId.get(t);return e||(e=`scoop-${t}-${hn()}`,this.fanOutMessageId.set(t,e),r.push({type:`message_start`,messageId:e})),e};switch(n){case`text_delta`:{let t=i();r.push({type:`content_delta`,messageId:t,text:e.text??``});break}case`tool_start`:{let t=i();r.push({type:`tool_use_start`,messageId:t,toolName:e.toolName??``,toolInput:e.toolInput});break}case`tool_end`:{let n=this.fanOutMessageId.get(t);if(!n)return;r.push({type:`tool_result`,messageId:n,toolName:e.toolName??``,result:e.toolResult??``,isError:e.isError});break}case`tool_ui`:{let t=i();r.push({type:`tool_ui`,messageId:t,toolName:e.toolName??``,requestId:e.requestId??``,html:e.html??``});break}case`tool_ui_done`:{let n=this.fanOutMessageId.get(t);if(!n)return;r.push({type:`tool_ui_done`,messageId:n,requestId:e.requestId??``});break}case`response_done`:{let e=this.fanOutMessageId.get(t);if(!e)return;r.push({type:`content_done`,messageId:e}),this.fanOutMessageId.delete(t);break}case`turn_end`:this.fanOutMessageId.delete(t);break}for(let e of r)for(let n of this.agentEventListeners)try{n(t,e)}catch(e){fn.error(`onAgentEvent listener threw`,{error:e instanceof Error?e.message:String(e)})}}getMessagesForJid(e){return this.getBuffer(e)}async routeSprinkleLick(e,t,n,r){if(!this.orchestrator)return;let i=pn(t);i&&this.orchestrator.resolveNavigateHandoffByHuman(i.lickId,i.accepted);let a=this.orchestrator.getScoops(),o=n?a.find(e=>e.name===n||e.folder===n||e.folder===`${n}-scoop`):void 0;if(o||=a.find(e=>e.isCone),!o)return;let s=`sprinkle-${e}-${Date.now()}`,c=dt({type:`sprinkle`,sprinkleName:e,timestamp:new Date().toISOString(),body:t,originLabel:r})?.content??`[Sprinkle Event: ${e}]\n\`\`\`json\n${JSON.stringify(t,null,2)}\n\`\`\``,l={id:s,chatJid:o.jid,senderId:`sprinkle`,senderName:`sprinkle:${e}`,content:c,timestamp:new Date().toISOString(),fromAssistant:!1,channel:`sprinkle`};this.getBuffer(o.jid).push({id:s,role:`user`,content:c,timestamp:Date.now(),source:`lick`,channel:`sprinkle`}),this.persistScoop(o.jid),await this.orchestrator.handleMessage(l)}applyFollowerSnapshot(e){if(!this.orchestrator)return;let t=this.orchestrator.getScoops().find(e=>e.isCone);if(!t)return;let n=e.map(e=>({id:e.id,role:e.role,content:e.content,attachments:e.attachments,timestamp:e.timestamp,source:e.source,channel:e.channel,toolCalls:e.toolCalls?.map(e=>({id:e.id,name:e.name,input:e.input,result:e.result,isError:e.isError})),isStreaming:e.isStreaming}));if(this.messageBuffers.set(t.jid,n),this.currentMessageId.delete(t.jid),this.fanOutMessageId.delete(t.jid),this.sessionStore){let n=t.isCone?`session-cone`:`session-${t.folder}`;this.sessionStore.saveMessages(n,e).catch(e=>{fn.error(`applyFollowerSnapshot persist failed`,{error:e instanceof Error?e.message:String(e)})})}this.emit({type:`scoop-messages-replaced`,scoopJid:t.jid,messages:n})}getConeJid(){return this.orchestrator?.getScoops().find(e=>e.isCone)?.jid??null}emitFollowerAgentEvent(e){let t=this.getConeJid();if(t)switch(e.type){case`content_delta`:this.emit({type:`agent-event`,scoopJid:t,eventType:`text_delta`,text:e.text});break;case`content_done`:this.emit({type:`agent-event`,scoopJid:t,eventType:`response_done`});break;case`tool_use_start`:this.emit({type:`agent-event`,scoopJid:t,eventType:`tool_start`,toolName:e.toolName,toolInput:e.toolInput});break;case`tool_result`:this.emit({type:`agent-event`,scoopJid:t,eventType:`tool_end`,toolName:e.toolName,toolResult:e.result,isError:e.isError});break;case`turn_end`:this.emit({type:`agent-event`,scoopJid:t,eventType:`turn_end`});break;case`error`:this.emit({type:`error`,scoopJid:t,error:e.error});break}}emitFollowerIncomingMessage(e,t){let n=this.getConeJid();n&&this.emit({type:`incoming-message`,scoopJid:n,message:{id:e,content:t,channel:`web`,senderName:`User`,fromAssistant:!1,timestamp:new Date().toISOString()}})}emitFollowerStatus(e){let t=this.getConeJid();if(!t)return;let n=e===`processing`?`processing`:`ready`;this.scoopStatuses.set(t,n),this.emit({type:`scoop-status`,scoopJid:t,status:n})}async buildBufferFromAgentMessages(e){let t=this.orchestrator?.getScoopContext(e.jid);if(!t)return null;let n=t.getAgentMessages();if(n.length===0)return null;let{agentMessagesToChatMessages:r}=await import(`./agent-message-to-chat-Bx_Ero1x.js`);return r(n,{source:e.isCone?`cone`:e.name??e.folder}).map(e=>({id:e.id,role:e.role,content:e.content,attachments:e.attachments,timestamp:e.timestamp,source:e.source,channel:e.channel,toolCalls:e.toolCalls?.map(e=>({id:e.id,name:e.name,input:e.input,result:e.result,isError:e.isError})),isStreaming:!1}))}async seedBuffersFromAgentState(){if(this.orchestrator)for(let e of this.orchestrator.getScoops()){let t=this.messageBuffers.get(e.jid);if(t&&t.length>0)continue;let n=await this.buildBufferFromAgentMessages(e);n&&(this.messageBuffers.set(e.jid,n),this.currentMessageId.delete(e.jid),this.fanOutMessageId.delete(e.jid),await this.persistScoopAwait(e.jid))}}async handleRequestScoopMessages(e){if(!this.orchestrator)return;let t=this.orchestrator.getScoops().find(t=>t.jid===e);if(!t)return;let n=this.messageBuffers.get(e);if(n&&n.length>0){this.emit({type:`scoop-messages-replaced`,scoopJid:e,messages:n});return}let r=await this.buildBufferFromAgentMessages(t);if(r){this.messageBuffers.set(e,r),this.currentMessageId.delete(e),this.fanOutMessageId.delete(e),this.persistScoop(e),this.emit({type:`scoop-messages-replaced`,scoopJid:e,messages:r});return}if(this.sessionStore){let n=t.isCone?`session-cone`:`session-${t.folder}`;try{let t=(await this.sessionStore.load(n))?.messages??[];t.length>0&&(this.messageBuffers.set(e,t),this.currentMessageId.delete(e),this.fanOutMessageId.delete(e),this.emit({type:`scoop-messages-replaced`,scoopJid:e,messages:t}))}catch(e){fn.error(`sessionStore load failed`,{sessionId:n,error:e instanceof Error?e.message:String(e)})}}}async handleConeCreate(e){if(!this.orchestrator)return;let t={jid:`cone_${Date.now()}`,name:e,folder:`cone`,isCone:!0,type:`cone`,requiresTrigger:!1,assistantLabel:`sliccy`,addedAt:new Date().toISOString()};await this.orchestrator.registerScoop(t),this.emit({type:`scoop-created`,scoop:this.toScoopSnapshot(t)})}handleRequestSessionStats(e){let t=0,n=[];try{t=(this.orchestrator?.getSessionCosts()??[]).reduce((e,t)=>e+t.usage.cost.total,0),n=this.orchestrator?.getContextFills()??[]}catch{}this.emit({type:`session-stats`,requestId:e,totalCost:t,fills:n})}async handleRequestScoopTranscript(e,t){let n=()=>{this.emit({type:`scoop-transcript`,requestId:e,scoopJid:t,transcript:``})};if(!this.orchestrator){n();return}let r=this.orchestrator.getScoops().find(e=>e.jid===t);if(!r){n();return}let i=this.messageBuffers.get(t);if(i&&i.length>0){this.emit({type:`scoop-transcript`,requestId:e,scoopJid:t,transcript:gn(i)});return}let a=this.orchestrator.getScoopContext(t);if(a){let{agentMessagesToChatMessages:n}=await import(`./agent-message-to-chat-Bx_Ero1x.js`),i=a.getAgentMessages();if(i.length>0){let a=n(i,{source:r.isCone?`cone`:r.name??r.folder});this.emit({type:`scoop-transcript`,requestId:e,scoopJid:t,transcript:gn(a)});return}}n()}persistScoop(e){this.persistScoopAwait(e)}async persistScoopAwait(e){if(!this.sessionStore||!this.orchestrator)return;let t=this.orchestrator.getScoops().find(t=>t.jid===e);if(!t)return;let n=t.isCone?`session-cone`:`session-${t.folder}`,r=this.messageBuffers.get(e);if(!(!r||r.length===0))try{await this.sessionStore.saveMessages(n,r)}catch(e){fn.error(`persistScoop failed`,{sessionId:n,error:e instanceof Error?e.message:String(e)})}}getBuffer(e){let t=this.messageBuffers.get(e);return t||(t=[],this.messageBuffers.set(e,t)),t}getOrCreateAssistantMsg(e){let t=this.getBuffer(e),n=this.currentMessageId.get(e);if(n){let e=t.find(e=>e.id===n);if(e)return e}n=`scoop-${e}-${hn()}`,this.currentMessageId.set(e,n);let r=(this.orchestrator?.getScoops()??[]).find(t=>t.jid===e),i=r?.isCone?`cone`:r?.name??`unknown`,a={id:n,role:`assistant`,content:``,timestamp:Date.now(),toolCalls:[],isStreaming:!0,source:i};return t.push(a),a}setupMessageListener(){return this.transport.onMessage(e=>{if(e.source===`panel`){if(e.payload?.type===`sprinkle-op-response`){import(`./sprinkle-proxy-B4nH2NxC.js`).then(({handleSprinkleOpResponse:t})=>{t(e.payload)});return}this.handlePanelMessage(e.payload).catch(t=>{console.error(`[offscreen-bridge] handlePanelMessage error:`,t);let n=e.payload.scoopJid;n&&this.emit({type:`error`,scoopJid:n,error:t instanceof Error?t.message:String(t)})})}})}async handlePanelMessage(e){if(this.orchestrator)switch(e.type){case`user-message`:await this.handleUserMessage(e);break;case`cone-create`:await this.handleConeCreate(e.name);break;case`scoop-feed`:await this.orchestrator.delegateToScoop(e.scoopJid,e.prompt,`sliccy`);break;case`scoop-drop`:await this.handleScoopDrop(e.scoopJid);break;case`abort`:this.orchestrator.stopScoop(e.scoopJid),this.orchestrator.clearQueuedMessages(e.scoopJid).catch(e=>{console.warn(`[offscreen-bridge] Failed to clear queued messages on abort:`,e)});break;case`delete-queued-message`:this.handleDeleteQueuedMessage(e.scoopJid,e.messageId);break;case`set-model`:this.orchestrator.updateModel();break;case`request-state`:this.emit(this.buildStateSnapshot());break;case`request-scoop-messages`:await this.handleRequestScoopMessages(e.scoopJid);break;case`request-scoop-transcript`:await this.handleRequestScoopTranscript(e.requestId,e.scoopJid);break;case`request-session-stats`:this.handleRequestSessionStats(e.requestId);break;case`clear-chat`:await this.handleClearChat(e.requestId);break;case`clear-filesystem`:await this.orchestrator.resetFilesystem().catch(e=>console.error(`[offscreen-bridge] clear-filesystem failed:`,e));break;case`refresh-model`:this.orchestrator.updateModel();break;case`set-thinking-level`:{let t=e;try{await this.orchestrator.setScoopThinkingLevel(t.scoopJid,t.level)}catch(e){console.error(`[offscreen-bridge] set-thinking-level failed:`,e)}break}case`sprinkle-lick`:await this.handleSprinkleLickMsg(e);break;case`lick-webhook-event`:this.orchestrator.handleWebhookEvent(e.webhookId,e.headers,e.body);break;case`set-follower-forwarding`:this.handleSetFollowerForwarding(e.enabled);break;case`inject-forwarded-lick`:this.handleInjectForwardedLick(e.event);break;case`lick-cherry-host-event`:this.orchestrator.handleCherryHostEvent(e.cherryRuntimeId,e.name,e.detail);break;case`reload-skills`:this.orchestrator.reloadAllSkills().catch(e=>{console.warn(`[offscreen-bridge] Skill reload failed:`,e)});break;case`panel-cdp-command`:await this.handlePanelCdpCommand(e);break;case`tool-ui-action`:await this.handleToolUIAction(e);break;case`local-storage-set`:this.applyLocalStorageOp(e.type,t=>t.setItem(e.key,e.value));break;case`local-storage-remove`:this.applyLocalStorageOp(e.type,t=>t.removeItem(e.key));break;case`local-storage-clear`:this.applyLocalStorageOp(e.type,e=>e.clear());break}}handleDeleteQueuedMessage(e,t){if(!this.orchestrator)return;this.orchestrator.deleteQueuedMessage(e,t).catch(e=>{console.warn(`[offscreen-bridge] Failed to delete queued message:`,e)});let n=this.messageBuffers.get(e);if(!n)return;let r=n.filter(e=>e.id!==t);r.length!==n.length&&(this.messageBuffers.set(e,r),this.persistScoop(e))}async handleUserMessage(e){if(this.getBuffer(e.scoopJid).push({id:e.messageId,role:`user`,content:e.text,attachments:e.attachments,timestamp:Date.now()}),this.persistScoop(e.scoopJid),this.followerSync){this.followerSync.sendMessage(e.text,e.messageId,e.attachments);return}let t={id:e.messageId,chatJid:e.scoopJid,senderId:`user`,senderName:`User`,content:e.text,attachments:e.attachments,timestamp:new Date().toISOString(),fromAssistant:!1,channel:`web`};await this.orchestrator?.handleMessage(t),this.orchestrator?.createScoopTab(e.scoopJid)}async handleScoopDrop(e){if(!this.orchestrator)return;let t=this.orchestrator.getScoops().find(t=>t.jid===e);if(await this.orchestrator.unregisterScoop(e),this.messageBuffers.delete(e),this.currentMessageId.delete(e),this.fanOutMessageId.delete(e),this.scoopStatuses.delete(e),t&&this.sessionStore){let e=t.isCone?`session-cone`:`session-${t.folder}`;this.sessionStore.delete(e).catch(t=>{console.warn(`[offscreen-bridge] Failed to delete session on scoop drop:`,e,t)})}this.emitScoopList()}async handleClearChat(e){let t=this.orchestrator?.getScoops().find(e=>e.isCone)?.jid;t&&await this.orchestrator?.clearScoopMessages(t),this.sessionStore&&await this.sessionStore.delete(`session-cone`),t&&(this.messageBuffers.delete(t),this.currentMessageId.delete(t),this.fanOutMessageId.delete(t)),this.emit({type:`clear-chat-ack`,requestId:e})}async handleSprinkleLickMsg(e){if(this.followerActive){this.followerSync?this.followerSync.sendSprinkleLick(e.sprinkleName,e.body,e.targetScoop):console.warn(`[offscreen-bridge] sprinkle-lick dropped: follower sync mid-reconnect`,{sprinkleName:e.sprinkleName});return}await this.routeSprinkleLick(e.sprinkleName,e.body,e.targetScoop,e.originLabel)}handleSetFollowerForwarding(e){let t=globalThis.__slicc_lickManager;if(!t){console.warn(`[offscreen-bridge] set-follower-forwarding ignored: worker LickManager unavailable`);return}e?t.setForwarder(e=>this.emit({type:`forward-lick`,event:e})):t.setForwarder(null)}handleInjectForwardedLick(e){let t=globalThis.__slicc_lickManager;if(!t){console.warn(`[offscreen-bridge] inject-forwarded-lick dropped: worker LickManager unavailable`,{type:e.type});return}t.emitEvent(e)}async handlePanelCdpCommand(e){let{id:t,method:n,params:r,sessionId:i}=e;if(!this.browserAPI){console.warn(`[offscreen-bridge] Panel CDP command received but BrowserAPI is null`),this.emit({type:`panel-cdp-response`,id:t,error:`BrowserAPI not available`});return}try{let e=await this.browserAPI.getTransport().send(n,r,i);this.emit({type:`panel-cdp-response`,id:t,result:e})}catch(e){this.emit({type:`panel-cdp-response`,id:t,error:e instanceof Error?e.message:String(e)})}}async handleToolUIAction(e){let{requestId:t,action:n,data:r}=e;try{await o.handleAction(t,{action:n,data:r})}catch(e){let r=e instanceof Error?e.message:String(e);console.error(`[offscreen-bridge] Tool UI action failed`,{requestId:t,action:n,error:r}),o.cancel(t,`Action failed: ${r}`)}}applyLocalStorageOp(e,t){try{let e=globalThis.localStorage;e&&t(e)}catch(t){console.warn(`[offscreen-bridge] ${e} failed:`,t)}}emitScoopList(){let e=this.orchestrator?.getScoops().map(e=>this.toScoopSnapshot(e))??[];this.emit({type:`scoop-list`,scoops:e})}emit(e){this.transport.send(e),e.type===`agent-event`&&this.fanOutAgentEvent(e)}};function hn(){return Date.now().toString(36)+Math.random().toString(36).slice(2,8)}function gn(e){let t=[];for(let n of e){let e=(n.content??``).trim();e.length!==0&&t.push(`${n.role}: ${e}`)}return t.join(`
|
|
6
6
|
`)}const _n=i(`cdp`);var vn=class{ws=null;nextId=1;pending=new Map;listeners=new Map;_state=`disconnected`;get state(){return this._state}async connect(e){if(this._state!==`disconnected`)throw Error(`Cannot connect: state is ${this._state}`);if(!e?.url)throw Error(`CDPClient.connect() requires a WebSocket URL`);let{url:t,timeout:n=5e3,protocols:r}=e;return this._state=`connecting`,new Promise((e,i)=>{let a=setTimeout(()=>{this.cleanup(),i(Error(`CDP connection timed out after ${n}ms`))},n);try{this.ws=r===void 0?new WebSocket(t):new WebSocket(t,r)}catch(e){clearTimeout(a),this._state=`disconnected`,i(e);return}this.ws.onopen=()=>{clearTimeout(a),this._state=`connected`,_n.info(`Connected`,{url:t}),e()},this.ws.onerror=e=>{clearTimeout(a),this._state===`connecting`&&(_n.error(`Connection failed`,{url:t}),this.cleanup(),i(Error(`CDP WebSocket connection failed`)))},this.ws.onmessage=e=>{this.handleMessage(e.data)},this.ws.onclose=()=>{this.handleClose()}})}disconnect(){this.ws&&(this.ws.onclose=null,this.ws.close()),this.cleanup(),_n.info(`Disconnected`)}async send(e,t,n,r=3e4){if(this._state!==`connected`||!this.ws)throw Error(`CDP client is not connected`);let i=this.nextId++,a={id:i,method:e};return t&&(a.params=t),n&&(a.sessionId=n),_n.debug(`Send`,{method:e,id:i,sessionId:n}),new Promise((t,n)=>{let o=setTimeout(()=>{this.pending.delete(i),n(Error(`CDP command timed out after ${r}ms: ${e}`))},r);this.pending.set(i,{resolve:e=>{clearTimeout(o),t(e)},reject:e=>{clearTimeout(o),n(e)}}),this.ws.send(JSON.stringify(a))})}on(e,t){let n=this.listeners.get(e);n||(n=new Set,this.listeners.set(e,n)),n.add(t)}off(e,t){let n=this.listeners.get(e);n&&(n.delete(t),n.size===0&&this.listeners.delete(e))}once(e,t=3e4){return new Promise((n,r)=>{let i=setTimeout(()=>{this.off(e,a),r(Error(`Timed out waiting for event: ${e}`))},t),a=t=>{clearTimeout(i),this.off(e,a),n(t)};this.on(e,a)})}handleMessage(e){let t;try{t=JSON.parse(e)}catch{return}if(`id`in t&&typeof t.id==`number`){let e=t;_n.debug(`Response`,{id:e.id,hasError:!!e.error});let n=this.pending.get(e.id);n&&(this.pending.delete(e.id),e.error?(_n.error(`Command error`,{id:e.id,code:e.error.code,message:e.error.message}),n.reject(Error(`CDP error: ${e.error.message} (${e.error.code})`))):n.resolve(e.result??{}));return}if(`method`in t){let e=t;_n.debug(`Event`,{method:e.method,sessionId:e.sessionId});let n=this.listeners.get(e.method);if(n){let t=e.sessionId?{...e.params,sessionId:e.sessionId}:e.params??{};for(let e of n)try{e(t)}catch{}}}}handleClose(){_n.error(`Connection closed unexpectedly`,{pendingCommands:this.pending.size});for(let[,e]of this.pending)e.reject(Error(`CDP connection closed`));this.cleanup()}cleanup(){this.ws=null,this._state=`disconnected`,this.pending.clear()}};const yn=`(function() {
|
|
7
7
|
'use strict';
|
|
8
8
|
|
|
@@ -2545,7 +2545,7 @@ Options:
|
|
|
2545
2545
|
#
|
|
2546
2546
|
# Gate writes anywhere under /mnt (mounted external storage):
|
|
2547
2547
|
# Write /mnt/**
|
|
2548
|
-
`;const zR=i(`sudo:sudoers`),BR=`/etc/sudoers`,VR=`/etc/sudoers.d`,HR=/^\/scoops\/[^/]+\/etc\/sudoers$/;function UR(e){return`/scoops/${e}/etc/sudoers`}function WR(e,t){return e===`no-match`?t===`require-approval`?`require-approval`:`no-match`:e}function GR(){return{cmnd:[],read:[],write:[]}}function KR(e){return`.+^$()[]|\\{}`.includes(e)?`\\${e}`:e}function qR(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+=KR(r),n+=1)}return RegExp(`^${t}
|
|
2548
|
+
`;const zR=i(`sudo:sudoers`),BR=`/etc/sudoers`,VR=`/etc/sudoers.d`,HR=/^\/scoops\/[^/]+\/etc\/sudoers$/;function UR(e){return`/scoops/${e}/etc/sudoers`}function WR(e,t){return e===`no-match`?t===`require-approval`?`require-approval`:`no-match`:e}function GR(){return{cmnd:[],read:[],write:[]}}function KR(e){return`.+^$()[]|\\{}`.includes(e)?`\\${e}`:e}function qR(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+=KR(r),n+=1)}return RegExp(`^${t}$`,`s`)}function JR(e){let t=``,n=0;for(;n<e.length;){let r=e[n];r===`*`&&e[n+1]===`*`?(t.endsWith(`/`)?t=`${t.slice(0,-1)}(?:/.*)?`:t+=`.*`,n+=2,e[n]===`/`&&(n+=1)):r===`*`?(t+=`[^/]*`,n+=1):r===`?`?(t+=`[^/]`,n+=1):(t+=KR(r),n+=1)}return RegExp(`^${t}$`)}function YR(e){return e.split(/\r?\n/,1)[0]?.trim()??``}const XR=new Set([`Cmnd`,`Read`,`Write`]);function ZR(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(!XR.has(a))return null;let o=i===-1?``:t.slice(i).trim();return o?{directive:a,nopasswd:n,pattern:o}:null}function QR(e){let t=GR();try{if(typeof e!=`string`)return t;for(let n of e.split(`
|
|
2549
2549
|
`)){let e=n.trim();if(!e||e.startsWith(`#`))continue;let r=ZR(e);if(!r){zR.warn(`Skipping unrecognized sudoers line`,{line:e});continue}let i=r.directive===`Cmnd`?qR:JR,a={pattern:r.pattern,nopasswd:r.nopasswd,regex:i(r.pattern)};r.directive===`Cmnd`?t.cmnd.push(a):r.directive===`Read`?t.read.push(a):t.write.push(a)}return t}catch(e){return zR.error(`Failed to parse sudoers; falling back to self-protection only`,{err:e}),GR()}}function $R(...e){let t=GR();for(let n of e)n&&(t.cmnd.push(...n.cmnd),t.read.push(...n.read),t.write.push(...n.write));return t}function ez(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 tz(e,t){return ez(e.cmnd,t.trim())}function nz(e){return e===`/etc/sudoers`||e===`/etc/sudoers.d`||e.startsWith(`/etc/sudoers.d/`)||HR.test(e)}function rz(e,t,n){let r=k(n);return t===`write`&&nz(r)?`require-approval`:ez(t===`read`?e.read:e.write,r)}const iz=i(`sudo:fs`),az=Symbol.for(`slicc.fs.monkeypatchUnsafe`),oz=`${VR}/granted`,sz=[`readFile`,`readTextFile`,`readDir`,`exists`,`stat`],cz=[`writeFile`,`mkdir`,`rm`];async function lz(e,t,n,r){let i=YR(r);if(!i)return;let a=t(),o={pattern:i,nopasswd:!0,regex:JR(i)};(n===`read`?a.read:a.write).push(o);let s=`NOPASSWD ${n===`read`?`Read`:`Write`} ${i}\n`;try{await e.mkdir(VR,{recursive:!0});let t=``;try{t=await e.readFile(oz,{encoding:`utf-8`})}catch(e){if(!(e instanceof m&&e.code===`ENOENT`))throw e}let n=t.length>0&&!t.endsWith(`
|
|
2550
2550
|
`)?`
|
|
2551
2551
|
`:``;await e.writeFile(oz,t+n+s)}catch(e){iz.warn(`Failed to persist NOPASSWD grant; effective in-session only`,{error:e instanceof Error?e.message:String(e)})}}function uz(e,t){let{broker:n,getPolicy:r}=t,i=t.defaultDisposition??`allow`,a=t.onGrant?t.onGrant:(t,n)=>lz(e,r,t,n);async function o(e,t){let o=k(t),s=rz(r(),e,o);if((e===`write`?WR(s,i):s)!==`require-approval`)return;let c=e,l=await n.requestApproval({kind:c,detail:o});if(l.decision===`deny`)throw new m(`EACCES`,`sudo: approval denied`,o);l.decision===`always`&&await a(e,l.pattern?.trim()||o)}function s(e){return rz(r(),`read`,k(e))!==`require-approval`}let c=t=>typeof e[t]==`function`,l={};for(let t of sz)c(t)&&(l[t]=async(n,...r)=>(await o(`read`,n),e[t](n,...r)));for(let t of cz)c(t)&&(l[t]=async(n,...r)=>(await o(`write`,n),e[t](n,...r)));return c(`walk`)&&(l.walk=async function*(t,...n){await o(`read`,t),yield*e.walk(t,...n)}),c(`symlink`)&&(l.symlink=async(t,n)=>(await o(`write`,n),e.symlink(t,n))),c(`rename`)&&(l.rename=async(t,n)=>(await o(`read`,t),await o(`write`,t),await o(`write`,n),e.rename(t,n))),c(`copyFile`)&&(l.copyFile=async(t,n)=>(await o(`read`,t),await o(`write`,n),e.copyFile(t,n))),c(`statSync`)&&(l.statSync=t=>s(t)?e.statSync(t):null),c(`readDirSync`)&&(l.readDirSync=t=>s(t)?e.readDirSync(t):null),new Proxy(e,{get(e,t,n){if(t===az)return!0;if(typeof t==`string`&&t in l)return l[t];let r=Reflect.get(e,t,n);return typeof r==`function`?r.bind(e):r}})}const dz=i(`sudo:manager`);function fz(e){return e===`/etc/sudoers`||e===`/etc/sudoers.d`||e.startsWith(`/etc/sudoers.d/`)}const pz=/^\/scoops\/([^/]+)\/etc\/sudoers$/;function mz(e){return pz.test(e)}function hz(e){return pz.exec(e)?.[1]??null}function gz(e){return e.length>1&&e.endsWith(`/`)?e.slice(0,-1):e}function _z(e){let t=[`# Per-scoop sudoers — generated from ScoopConfig (sandbox surface).`,`# Writes to this file always require approval (self-protected).`,``],n=e?.allowedCommands;if(n===void 0||n.includes(`*`))t.push(`NOPASSWD Cmnd *`);else for(let e of n){let n=YR(e);n&&(t.push(`NOPASSWD Cmnd ${n}`),t.push(`NOPASSWD Cmnd ${n} *`))}for(let n of e?.writablePaths??[]){let e=YR(n);e&&t.push(`NOPASSWD Write ${gz(e)}/**`)}for(let n of e?.visiblePaths??[]){let e=YR(n);e&&t.push(`NOPASSWD Read ${gz(e)}/**`)}return`${t.join(`
|
|
@@ -4236,8 +4236,8 @@ Options:
|
|
|
4236
4236
|
`;case`idle`:return`enhanced engine: not downloaded (run hear --warmup)
|
|
4237
4237
|
`;case`loading`:{let t=e=>(e/1024/1024).toFixed(1);return`enhanced engine: downloading${e.loaded!=null&&e.total?` ${t(e.loaded)}/${t(e.total)} MB`:``}${e.etaSeconds!=null&&Number.isFinite(e.etaSeconds)?` · ready in ~${Math.max(1,Math.round(e.etaSeconds))}s`:``}\n`}}}function c8(e){return{stdout:``,stderr:`hear: ${e}\n`,exitCode:1}}function l8(e){return e instanceof Error?e.message:String(e)}function u8(e){let t=e.map((e,t)=>`${e.deviceId}\t${e.label||`Microphone ${t+1}`}`);return t.join(`
|
|
4238
4238
|
`)+(t.length?`
|
|
4239
|
-
`:``)}async function Zie(e){try{return e.local?navigator.mediaDevices?.enumerateDevices?{stdout:u8((await navigator.mediaDevices.enumerateDevices()).filter(e=>e.kind===`audioinput`)),stderr:``,exitCode:0}:c8(`device enumeration unavailable`):{stdout:u8((await e.panelRpc.call(`enumerate-media-devices`,void 0)).audioinputs),stderr:``,exitCode:0}}catch(e){return c8(l8(e))}}async function Qie(e,t){try{if(e.local){let{hearStatus:e,hearWarmup:n}=await import(`./hear-
|
|
4240
|
-
`,stderr:``,exitCode:0}}catch(e){return c8(`transcription failed: ${l8(e)}`)}}async function eae(e,t){let n=Math.round(t.timeoutSeconds*1e3);try{let r={lang:t.lang,timeoutMs:n,deviceId:t.deviceId,engine:t.engine},i=e.local?await(await import(`./hear-
|
|
4239
|
+
`:``)}async function Zie(e){try{return e.local?navigator.mediaDevices?.enumerateDevices?{stdout:u8((await navigator.mediaDevices.enumerateDevices()).filter(e=>e.kind===`audioinput`)),stderr:``,exitCode:0}:c8(`device enumeration unavailable`):{stdout:u8((await e.panelRpc.call(`enumerate-media-devices`,void 0)).audioinputs),stderr:``,exitCode:0}}catch(e){return c8(l8(e))}}async function Qie(e,t){try{if(e.local){let{hearStatus:e,hearWarmup:n}=await import(`./hear-C4xX91lk.js`);return{stdout:s8(t?n():e()),stderr:``,exitCode:0}}return{stdout:s8(t?await e.panelRpc.call(`hear-warmup`,void 0):await e.panelRpc.call(`hear-status`,void 0)),stderr:``,exitCode:0}}catch(e){return c8(l8(e))}}async function $ie(e,t,n){let r=t.inputFile,i=n.fs.resolvePath(n.cwd,r),a;try{a=new Uint8Array(await n.fs.readFileBuffer(i))}catch{return c8(`cannot open ${r}: No such file`)}let o=dJ(i);if(!o.startsWith(`audio/`)&&!o.startsWith(`video/`))return c8(`${r} is not an audio file`);let s=new ArrayBuffer(a.byteLength);new Uint8Array(s).set(a);try{return{stdout:(e.local?await(await import(`./hear-C4xX91lk.js`)).hearTranscribe(s,t.lang):await e.panelRpc.call(`hear-transcribe`,{bytes:s,lang:t.lang},{timeoutMs:6e5})).transcript+`
|
|
4240
|
+
`,stderr:``,exitCode:0}}catch(e){return c8(`transcription failed: ${l8(e)}`)}}async function eae(e,t){let n=Math.round(t.timeoutSeconds*1e3);try{let r={lang:t.lang,timeoutMs:n,deviceId:t.deviceId,engine:t.engine},i=e.local?await(await import(`./hear-C4xX91lk.js`)).hearCapture(r):await e.panelRpc.call(`hear-capture`,r,{timeoutMs:n+3e4});return i.transcript?{stdout:i.transcript+`
|
|
4241
4241
|
`,stderr:``,exitCode:0}:{stdout:``,stderr:`hear: no speech detected
|
|
4242
4242
|
`,exitCode:1}}catch(e){return c8(l8(e))}}function tae(){return mN(`hear`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return qie();let n=Xie(e);if(`exitCode`in n)return n;let r={local:E(),panelRpc:T()};return!r.local&&!r.panelRpc?c8(`speech recognition unavailable in this environment`):n.devices?Zie(r):n.status||n.warmup?Qie(r,n.warmup):n.inputFile?$ie(r,n,t):eae(r,n)})}const d8=[`playwright-cli`,`playwright`,`puppeteer`],f8=new WeakMap;function nae(e,t){let n=f8.get(e);n||(n=new WeakMap,f8.set(e,n));let r=n.get(t);return r||(r={snapshots:new Map,appTabId:null,harRecorder:null,sessionDirsCreated:!1,teleportWatchers:new Map},n.set(t,r)),r}function p8(e){let t=e.match(/^(f[0-9]+)(e[0-9]+)$/);return t?{framePrefix:t[1],isIframe:!0}:{framePrefix:``,isIframe:!1}}function rae(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}const iae=new Set([`click`,`dblclick`,`fill`,`type`,`press`,`goto`,`navigate`,`select`,`check`,`uncheck`,`drag`,`dialog-accept`,`dialog-dismiss`]);function m8(e){return e.toISOString().replace(/:/g,`-`)}function aae(e){return e instanceof m||typeof e==`object`&&e&&`code`in e?e.code===`EEXIST`:e instanceof Error&&e.message.includes(`EEXIST`)}const h8=`function(text) {
|
|
4243
4243
|
const el = this;
|
|
@@ -4696,20 +4696,20 @@ authorization-code flow, stores the access token, and retries.
|
|
|
4696
4696
|
On success, the server is persisted to /workspace/.mcp/servers.json and
|
|
4697
4697
|
an alias shim is written to /workspace/.mcp/aliases/<name>.jsh so the
|
|
4698
4698
|
short name resolves on the PATH.
|
|
4699
|
-
`);let n=e.filter(e=>!e.startsWith(`--`));if(n.length<2)return O5(`mcp add: expected <url> <name>`);let[r,i]=n;if(!/^https?:\/\//i.test(r))return O5(`mcp add: invalid URL "${r}" (must start with http:// or https://)`);if(!/^[A-Za-z][A-Za-z0-9_-]*$/.test(i))return O5(`mcp add: invalid name "${i}" (letters, digits, _ and - only; must start with a letter)`);let{getServer:a,setServer:o}=await import(`./store-
|
|
4699
|
+
`);let n=e.filter(e=>!e.startsWith(`--`));if(n.length<2)return O5(`mcp add: expected <url> <name>`);let[r,i]=n;if(!/^https?:\/\//i.test(r))return O5(`mcp add: invalid URL "${r}" (must start with http:// or https://)`);if(!/^[A-Za-z][A-Za-z0-9_-]*$/.test(i))return O5(`mcp add: invalid name "${i}" (letters, digits, _ and - only; must start with a letter)`);let{getServer:a,setServer:o}=await import(`./store-p07O-6qm.js`).then(e=>e.r);if(await a(i,t.fs))return O5(`mcp add: a server named "${i}" already exists`);let{McpClient:s,McpAuthRequiredError:c}=await Promise.resolve().then(()=>y5),l=new s({url:r,fetchImpl:t.fetchImpl}),u;try{await l.initialize()}catch(e){if(!(e instanceof c))throw e;u=await _se(r,i,e.resourceMetadataUrl,t),l=new s({url:r,fetchImpl:t.fetchImpl,getAuthHeader:()=>M5(i)}),await l.initialize()}let d=await l.toolsList(),f=await l.appsList(),p=new Date().toISOString();await o(i,{url:r,tools:d,apps:f,addedAt:p,lastRefreshedAt:p,...u?{auth:u}:{}},t.fs),await Fse(i,t);let m=await F5(i,f,t);if(u){let{registerMcpProvider:e}=await import(`./provider-DNnOLtMP.js`);e({name:i,serverUrl:r,auth:u})}return D5([`Added MCP server "${i}" → ${r}`,` tools: ${d.length}, apps: ${f.length} (${m} sprinkle${m===1?``:`s`})`,` alias: ${E5}/${i}.jsh`,u?` auth: oauth (provider mcp:${i})`:` auth: none`].join(`
|
|
4700
4700
|
`)+`
|
|
4701
4701
|
`)}async function _se(e,t,n,r){let{discoverAuth:i,dynamicRegister:a,runAuthFlow:o}=await import(`./oauth-Czw-MuuR.js`),{saveOAuthAccount:s}=await Promise.resolve().then(()=>pR),c=await Nse(r.oauthFetchImpl),l=r.oauthLauncher??await N5(),u=await i(e,n,c);T5.debug(`MCP OAuth discovery succeeded`,{name:t,serverUrl:e,discoveryPath:u.discoveryPath,issuer:u.issuer});let d=await Mse(),f=await a(u,d,c),p=u.supportedScopes&&u.supportedScopes.length>0?u.supportedScopes.join(` `):void 0,m=await o({asMetadata:u,clientId:f.clientId,scope:p,redirectUri:d,launcher:l,fetchImpl:c}),h=`mcp:${t}`;return await s({providerId:h,accessToken:m.accessToken,refreshToken:m.refreshToken,tokenExpiresAt:m.expiresAt}),{providerId:h,authorizationServer:u.issuer,clientId:f.clientId,scope:m.scope??p,registrationClientUri:f.registrationClientUri}}async function vse(e,t){if(e.includes(`--help`)||e.includes(`-h`))return D5(`usage: mcp list
|
|
4702
|
-
`);let{ensureAllMcpProvidersRegistered:n}=await import(`./provider-
|
|
4702
|
+
`);let{ensureAllMcpProvidersRegistered:n}=await import(`./provider-DNnOLtMP.js`);await n();let{listServers:r}=await import(`./store-p07O-6qm.js`).then(e=>e.r),i=await r(t.fs),a=Object.keys(i).sort();if(a.length===0)return D5("No MCP servers configured. Use `mcp add <url> <name>`.\n");let o=[[`NAME`,`URL`,`AUTH`,`TOOLS`,`APPS`,`ADDED`]];for(let e of a){let t=i[e];o.push([e,t.url,t.auth?`yes`:`no`,String(t.tools?.length??0),String(t.apps?.length??0),t.addedAt?t.addedAt.slice(0,10):`-`])}return D5(k5(o))}function k5(e){let t=e[0].map((t,n)=>e.reduce((e,t)=>Math.max(e,(t[n]??``).length),0));return e.map(e=>e.map((e,n)=>e.padEnd(t[n])).join(` `).trimEnd()).join(`
|
|
4703
4703
|
`)+`
|
|
4704
4704
|
`}async function yse(e,t){if(e[0]===`--help`||e[0]===`-h`)return D5(`usage: mcp search <query>
|
|
4705
4705
|
|
|
4706
4706
|
Case-insensitive substring search across the cached tools of every
|
|
4707
4707
|
registered MCP server. Matches tool name OR description and prints a
|
|
4708
4708
|
table of (server, tool, description, match-field) rows.
|
|
4709
|
-
`);if(e.length===0)return O5(`mcp search: expected <query>`);let n=e[0],r=n.toLowerCase(),{ensureAllMcpProvidersRegistered:i}=await import(`./provider-
|
|
4710
|
-
`);let n=e[0],{ensureMcpProviderRegistered:r,removeMcpProvider:i}=await import(`./provider-
|
|
4709
|
+
`);if(e.length===0)return O5(`mcp search: expected <query>`);let n=e[0],r=n.toLowerCase(),{ensureAllMcpProvidersRegistered:i}=await import(`./provider-DNnOLtMP.js`);await i();let{listServers:a}=await import(`./store-p07O-6qm.js`).then(e=>e.r),o=await a(t.fs),s=Object.keys(o).sort();if(s.length===0)return D5("No MCP servers configured. Use `mcp add <url> <name>`.\n");let c=[];for(let e of s){let t=o[e].tools??[];for(let n of t){let t=n.description??``,i=n.name.toLowerCase().includes(r),a=t.toLowerCase().includes(r);if(!i&&!a)continue;let o=i&&a?`name+description`:i?`name`:`description`;c.push({server:e,tool:n.name,description:t,match:o})}}if(c.length===0)return D5(`No tools matched "${n}".\n`);c.sort((e,t)=>e.server===t.server?e.tool.localeCompare(t.tool):e.server.localeCompare(t.server));let l=[[`SERVER`,`TOOL`,`DESCRIPTION`,`MATCH`]];for(let e of c)l.push([e.server,e.tool,bse(e.description),e.match]);return D5(k5(l))}function bse(e){if(!e)return``;let t=e.replace(/\s+/g,` `).trim();return t.length<=60?t:t.slice(0,59)+`…`}async function xse(e,t){if(e.length===0||e[0]===`--help`||e[0]===`-h`)return e.length===0?O5(`mcp delete: expected <name>`):D5(`usage: mcp delete <name>
|
|
4710
|
+
`);let n=e[0],{ensureMcpProviderRegistered:r,removeMcpProvider:i}=await import(`./provider-DNnOLtMP.js`);await r(n);let{deleteServer:a}=await import(`./store-p07O-6qm.js`).then(e=>e.r),o=await a(n,t.fs);await Ise(n,t),await Lse(n,t);let s=`mcp:${n}`,c=!1;try{let{removeAccount:e,getAccounts:t}=await Promise.resolve().then(()=>pR);t().some(e=>e.providerId===s)&&(await e(s),c=!0)}catch(e){T5.warn(`mcp delete: OAuth removal failed`,{providerId:s,error:e instanceof Error?e.message:String(e)})}let l=i(n);return!o&&!c&&!l?O5(`mcp delete: no server, alias, or account found for "${n}"`):D5([`Removed MCP server "${n}"`,` servers.json: ${o?`removed`:`not present`}`,` alias: cleaned`,` sprinkles: cleaned`,` oauth: ${c?`removed`:`not present`}`,` provider: ${l?`unregistered`:`not registered`}`].join(`
|
|
4711
4711
|
`)+`
|
|
4712
|
-
`)}async function Sse(e,t){if(e.length===0||e[0]===`--help`||e[0]===`-h`)return e.length===0?O5(`mcp invoke: expected <name>`):D5(wse());let n=e[0],r=e.slice(1),{ensureMcpProviderRegistered:i}=await import(`./provider-
|
|
4712
|
+
`)}async function Sse(e,t){if(e.length===0||e[0]===`--help`||e[0]===`-h`)return e.length===0?O5(`mcp invoke: expected <name>`):D5(wse());let n=e[0],r=e.slice(1),{ensureMcpProviderRegistered:i}=await import(`./provider-DNnOLtMP.js`);await i(n);let{getServer:a}=await import(`./store-p07O-6qm.js`).then(e=>e.r),o=await a(n,t.fs);if(!o)return O5(`mcp invoke: unknown server "${n}" (run \`mcp add <url> ${n}\` first)`);let s=o.tools??[];if(r.length===0||r[0]===`--help`||r[0]===`-h`)return D5(Tse(n,o,s));let c=r[0],l=s.find(e=>e.name===c);if(!l)return O5(`mcp invoke: unknown tool "${c}" on "${n}" (run \`${n}\` to list tools)`);let{timeoutMs:u,remaining:d,warnings:f}=Cse(r.slice(1));if(d.includes(`--help`)||d.includes(`-h`))return D5(Ese(n,l));let p=Dse(d,l.inputSchema);if(!p.ok)return O5(`mcp invoke: ${p.error}`);let{McpClient:m}=await Promise.resolve().then(()=>y5),h=new m({url:o.url,fetchImpl:t.fetchImpl,headers:o.headers,getAuthHeader:o.auth?()=>M5(n):void 0,...u===void 0?{}:{timeoutMs:u}});await h.initialize();let g=kse(await h.toolsCall(c,p.value));return f.length>0&&(g.stderr=f.map(e=>`${e}\n`).join(``)+g.stderr),g}function Cse(e){let t=[],n=[],r,i=0;for(;i<e.length;){let a=e[i];if(a.startsWith(`--timeout=`)){let e=A5(a.slice(10));e.ok?r=e.value:n.push(e.error),i+=1;continue}if(a===`--timeout`){let t=e[i+1];if(t===void 0||t.startsWith(`--`)){n.push(`mcp invoke: --timeout requires a value (got ${t===void 0?`nothing`:`"${t}"`}); using default.`),i+=1;continue}let a=A5(t);a.ok?r=a.value:n.push(a.error),i+=2;continue}t.push(a),i+=1}return{timeoutMs:r,remaining:t,warnings:n}}function A5(e){if(!/^-?\d+$/.test(e))return{ok:!1,error:`mcp invoke: invalid --timeout value "${e}" (expected positive integer seconds); using default.`};let t=Number(e);return!Number.isFinite(t)||t<1?{ok:!1,error:`mcp invoke: invalid --timeout value "${e}" (must be >= 1 second); using default.`}:{ok:!0,value:t*1e3}}function wse(){return`usage: mcp invoke <name> [tool] [--timeout <seconds>] [--flag value …]
|
|
4713
4713
|
|
|
4714
4714
|
mcp invoke <name> List tools on <name>.
|
|
4715
4715
|
mcp invoke <name> <tool> --help Show flags for <tool>.
|
|
@@ -4739,7 +4739,7 @@ Arguments are coerced according to the tool's JSON Schema:
|
|
|
4739
4739
|
|
|
4740
4740
|
Re-fetches the tool catalog and \`apps/list\` for <name>. Does NOT refresh
|
|
4741
4741
|
OAuth tokens — for OAuth token refresh use \`mcp auth <name>\`.
|
|
4742
|
-
`);let n=e[0],{ensureMcpProviderRegistered:r}=await import(`./provider-
|
|
4742
|
+
`);let n=e[0],{ensureMcpProviderRegistered:r}=await import(`./provider-DNnOLtMP.js`);await r(n);let{getServer:i,setServer:a}=await import(`./store-p07O-6qm.js`).then(e=>e.r),o=await i(n,t.fs);if(!o)return O5(`mcp refresh: unknown server "${n}"`);let{McpClient:s,McpAuthRequiredError:c}=await Promise.resolve().then(()=>y5),l=new s({url:o.url,fetchImpl:t.fetchImpl,headers:o.headers,getAuthHeader:o.auth?()=>M5(n):void 0});try{await l.initialize()}catch(e){if(e instanceof c)return O5(`mcp refresh: server "${n}" returned 401 — token may have expired. Run \`mcp auth ${n}\` to re-authenticate.`);throw e}let u=await l.toolsList(),d=await l.appsList();await a(n,{...o,sessionId:void 0,tools:u,apps:d,lastRefreshedAt:new Date().toISOString()},t.fs);let f=await F5(n,d,t);return D5(`Refreshed "${n}" — tools: ${u.length}, apps: ${d.length} (${f} sprinkle${f===1?``:`s`})\n`)}async function jse(e,t){if(e.includes(`--help`)||e.includes(`-h`))return D5(`usage: mcp auth <name> [--silent | --interactive]
|
|
4743
4743
|
|
|
4744
4744
|
Re-authenticate an existing MCP server. By default, attempts a silent
|
|
4745
4745
|
token renewal using the persisted refresh_token; if that returns no
|
|
@@ -4751,7 +4751,7 @@ Options:
|
|
|
4751
4751
|
-i, --interactive Skip silent renewal and open the OAuth popup
|
|
4752
4752
|
directly. Use after revoking a refresh token or
|
|
4753
4753
|
when the AS no longer accepts the cached one.
|
|
4754
|
-
`);let n=e.filter(e=>!e.startsWith(`-`));if(n.length===0)return O5(`mcp auth: expected <name>`);let r=n[0],i=e.includes(`--silent`)||e.includes(`-s`),a=e.includes(`--interactive`)||e.includes(`-i`);if(i&&a)return O5(`mcp auth: --silent and --interactive are mutually exclusive`);let{ensureMcpProviderRegistered:o}=await import(`./provider-
|
|
4754
|
+
`);let n=e.filter(e=>!e.startsWith(`-`));if(n.length===0)return O5(`mcp auth: expected <name>`);let r=n[0],i=e.includes(`--silent`)||e.includes(`-s`),a=e.includes(`--interactive`)||e.includes(`-i`);if(i&&a)return O5(`mcp auth: --silent and --interactive are mutually exclusive`);let{ensureMcpProviderRegistered:o}=await import(`./provider-DNnOLtMP.js`),s=await o(r),{getServer:c}=await import(`./store-p07O-6qm.js`).then(e=>e.r),l=await c(r,t.fs);if(!l)return O5(`mcp auth: unknown server "${r}" (run \`mcp list\` to see configured servers)`);if(!l.auth)return O5(`mcp auth: server "${r}" does not use OAuth`);if(!s)return O5(`mcp auth: failed to register provider for "${r}"`);let u=`mcp:${r}`,{getRegisteredProviderConfig:d}=await import(`./providers-DerbEWIP.js`).then(e=>e.r),f=d(u);if(!f)return O5(`mcp auth: provider "${u}" is not registered`);if(a)return await j5(r,f,t);if(!f.onSilentRenew)return i?O5(`mcp auth: provider "${u}" does not support silent renewal; retry without --silent`):await j5(r,f,t);let p=null;try{p=await f.onSilentRenew()}catch(e){let t=e instanceof Error?e.message:String(e);if(i)return O5(`mcp auth: silent renewal for "${r}" failed (${t}); retry without --silent to run the interactive flow`);T5.debug(`mcp auth: silent renewal threw, falling back to interactive`,{name:r,error:t})}return p?D5(`Re-authenticated "${r}" via silent renewal (provider ${u})\n`):i?O5(`mcp auth: silent renewal for "${r}" returned no token; retry without --silent to run the interactive flow`):await j5(r,f,t)}async function j5(e,t,n){if(!t.onOAuthLogin)return O5(`mcp auth: provider "${t.id}" does not support interactive OAuth login`);let r=n.oauthLauncher??await N5(),i=!1;return await t.onOAuthLogin(r,()=>{i=!0}),i?D5(`Re-authenticated "${e}" via interactive login (provider ${t.id})\n`):O5(`mcp auth: interactive login for "${e}" did not complete`)}async function M5(e){let t=`mcp:${e}`,{getOAuthAccountInfo:n}=await Promise.resolve().then(()=>pR),r=n(t);if(!r)return null;if(r.expired){try{let{getRegisteredProviderConfig:e}=await import(`./providers-DerbEWIP.js`).then(e=>e.r),n=await e(t)?.onSilentRenew?.();if(n)return`Bearer ${n}`}catch(e){T5.debug(`silent renewal threw`,{providerId:t,error:e instanceof Error?e.message:String(e)})}return null}return`Bearer ${r.token}`}async function N5(){let{createOAuthLauncher:e}=await import(`./oauth-service-DAzsBd4D.js`);return e()}async function Mse(){let e=typeof chrome<`u`?chrome:void 0;if(e?.runtime?.id)return e.identity?.getRedirectURL?.(`mcp-callback`)??`https://${e.runtime.id}.chromiumapp.org/mcp-callback`;let{getOAuthPageOrigin:t}=await import(`./oauth-service-DAzsBd4D.js`),{origin:n}=await t();return`${n}/auth/callback`}async function Nse(e){if(e)return e;let{createProxiedFetch:t}=await Promise.resolve().then(()=>Hn),n=t();return async(e,t)=>{let r=await n(e,{method:t?.method,headers:t?.headers,body:t?.body}),i=new TextDecoder().decode(r.body);return{ok:r.status>=200&&r.status<300,status:r.status,statusText:r.statusText,text:async()=>i,json:async()=>JSON.parse(i),headers:{get:e=>r.headers[e.toLowerCase()]??null}}}}async function P5(e){if(e)return e;let{VirtualFS:t}=await import(`./fs-FoD_qa2m.js`).then(e=>e.t),{GLOBAL_FS_DB_NAME:n}=await Promise.resolve().then(()=>Cq);return await t.create({dbName:n})}function Pse(e){return`// MCP alias for "${e}" — forwards args to \`mcp invoke ${e}\`.
|
|
4755
4755
|
// Auto-generated by \`mcp add ${e}\`; do not edit by hand.
|
|
4756
4756
|
const argv = Array.isArray(process.argv) ? process.argv.slice(2) : [];
|
|
4757
4757
|
const escape = (s) => {
|
|
@@ -4765,7 +4765,7 @@ const r = await exec(cmd);
|
|
|
4765
4765
|
if (r.stdout) process.stdout.write(r.stdout);
|
|
4766
4766
|
if (r.stderr) process.stderr.write(r.stderr);
|
|
4767
4767
|
process.exit(r.exitCode || 0);
|
|
4768
|
-
`}async function Fse(e,t){let n=await P5(t.fs);await n.mkdir(E5,{recursive:!0}),await n.writeFile(`${E5}/${e}.jsh`,Pse(e)),t.scriptCatalog?.invalidateJsh()}async function Ise(e,t){let n=await P5(t.fs),r=`${E5}/${e}.jsh`;try{await n.exists(r)&&await n.rm(r)}catch(e){T5.debug(`alias removal failed`,{path:r,error:e instanceof Error?e.message:String(e)})}t.scriptCatalog?.invalidateJsh()}async function Lse(e,t){let{removeAppSprinkles:n}=await import(`./apps-
|
|
4768
|
+
`}async function Fse(e,t){let n=await P5(t.fs);await n.mkdir(E5,{recursive:!0}),await n.writeFile(`${E5}/${e}.jsh`,Pse(e)),t.scriptCatalog?.invalidateJsh()}async function Ise(e,t){let n=await P5(t.fs),r=`${E5}/${e}.jsh`;try{await n.exists(r)&&await n.rm(r)}catch(e){T5.debug(`alias removal failed`,{path:r,error:e instanceof Error?e.message:String(e)})}t.scriptCatalog?.invalidateJsh()}async function Lse(e,t){let{removeAppSprinkles:n}=await import(`./apps-CywJTObv.js`);await n(e,t.fs)}async function F5(e,t,n){try{let{materializeAppSprinkles:r}=await import(`./apps-CywJTObv.js`);return(await r(e,t,n.fs)).length}catch(t){return T5.warn(`mcp: failed to materialize app sprinkles`,{name:e,error:t instanceof Error?t.message:String(t)}),0}}const I5=`/.cache/artificial-analysis.json`;async function Rse(e,t=!1){if(e&&!t)try{let t=await e.readFile(I5),n=JSON.parse(t);if(Date.now()-n.fetchedAt<864e5)return n.models}catch{}let n=null;try{n=localStorage.getItem(`aa_api_key`)}catch{}let r={Accept:`application/json`};n&&(r[`x-api-key`]=n);let i=ar(),a;try{a=await i(`https://artificialanalysis.ai/api/v2/data/llms/models`,{method:`GET`,headers:r})}catch{return[]}if(a.status===401||a.status<200||a.status>=300)return[];let o;try{let e=new TextDecoder().decode(a.body);o=JSON.parse(e)}catch{return[]}let s=(Array.isArray(o)?o:o?.data??o?.models??[]).map(e=>({slug:e.slug??``,name:e.name??``,creator_slug:e.model_creator?.slug??``,intelligence_index:e.evaluations?.artificial_analysis_intelligence_index??null,coding_index:e.evaluations?.artificial_analysis_coding_index??null,speed_tps:e.median_output_tokens_per_second??null}));if(e&&s.length>0){let t={fetchedAt:Date.now(),models:s};try{await e.mkdir(`/.cache`,{recursive:!0}),await e.writeFile(I5,JSON.stringify(t))}catch{}}return s}function L5(e){return e.toLowerCase().replace(/\./g,`-`).replace(/-\d{8}$/,``).replace(/-\d{4}$/,``)}function zse(e,t){let n=e.toLowerCase(),r=t.find(e=>e.slug===n);if(r)return r;let i=L5(e),a=t.find(e=>L5(e.slug)===i);if(a)return a;let o=t.filter(e=>n.includes(e.slug)||e.slug.includes(n));if(o.length>0)return o.sort((e,t)=>t.slug.length-e.slug.length),o[0]}function Bse(){return`models - list available LLM models
|
|
4769
4769
|
|
|
4770
4770
|
Usage: models [options]
|
|
4771
4771
|
|
|
@@ -4878,13 +4878,13 @@ Examples:
|
|
|
4878
4878
|
--authorize-url 'https://auth.x.ai/oauth2/auth?...' \\
|
|
4879
4879
|
--redirect-pattern 'http://127.0.0.1:56121/*'
|
|
4880
4880
|
curl -H "Authorization: Bearer $(oauth-token github)" https://api.github.com/user
|
|
4881
|
-
`}function rce(){return mN(`oauth-token`,async(e,t)=>{let{getOAuthAccountInfo:n,getSelectedProvider:r,getAccounts:i}=await Promise.resolve().then(()=>pR),{getRegisteredProviderConfig:a,getRegisteredProviderIds:o}=await import(`./providers-
|
|
4881
|
+
`}function rce(){return mN(`oauth-token`,async(e,t)=>{let{getOAuthAccountInfo:n,getSelectedProvider:r,getAccounts:i}=await Promise.resolve().then(()=>pR),{getRegisteredProviderConfig:a,getRegisteredProviderIds:o}=await import(`./providers-DerbEWIP.js`).then(e=>e.r);if(e.includes(`--help`)||e.includes(`-h`))return{stdout:nce(),stderr:``,exitCode:0};if(e.includes(`--list`))return oce(i,o,a,n);if(e.includes(`--renew`))return ice(e);if(e.includes(`--from-file`)||e.includes(`--intercept`))return ace(e,t);let s,c=e.indexOf(`--scope`);if(c>=0){if(s=e[c+1]?.trim(),!s||s.startsWith(`-`))return{stdout:``,stderr:`oauth-token: --scope requires a value
|
|
4882
4882
|
`,exitCode:1};e.splice(c,2)}let l,u=e.indexOf(`--provider`);if(u>=0){if(l=e[u+1],!l)return{stdout:``,stderr:`oauth-token: --provider requires a value
|
|
4883
4883
|
`,exitCode:1}}else if(e.length>0)l=e[0];else{let e=r(),t=a(e);if(t?.isOAuth&&(t.onOAuthLogin||t.onOAuthLoginIntercepted))l=e;else if(l=o().find(e=>{let t=a(e);return t?.isOAuth&&(t.onOAuthLogin||t.onOAuthLoginIntercepted)}),!l)return{stdout:``,stderr:`oauth-token: no OAuth providers configured
|
|
4884
|
-
`,exitCode:1}}let d=a(l);if(!d)return{stdout:``,stderr:`oauth-token: unknown provider "${l}"\n`,exitCode:1};if(!d.isOAuth||!d.onOAuthLogin&&!d.onOAuthLoginIntercepted)return{stdout:``,stderr:`oauth-token: provider "${l}" is not an OAuth provider\n`,exitCode:1};if(!s){let e=n(l);if(e&&!e.expired){let t=e.maskedValue;return t?{stdout:`${t}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`oauth-token: no masked value for ${l} (try logging in again)\n`,exitCode:1}}}try{if(d.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await import(`./oauth-service-
|
|
4885
|
-
`,exitCode:1}}catch(e){let t=e instanceof Error?e.message:String(e);return console.error(`[oauth-token] Provider ${l}: login failed:`,t),{stdout:``,stderr:`oauth-token: login failed: ${t}\n`,exitCode:1}}})}async function ice(e){let{getSelectedProvider:t,getOAuthAccountInfo:n}=await Promise.resolve().then(()=>pR),{getRegisteredProviderConfig:r,getRegisteredProviderIds:i}=await import(`./providers-
|
|
4884
|
+
`,exitCode:1}}let d=a(l);if(!d)return{stdout:``,stderr:`oauth-token: unknown provider "${l}"\n`,exitCode:1};if(!d.isOAuth||!d.onOAuthLogin&&!d.onOAuthLoginIntercepted)return{stdout:``,stderr:`oauth-token: provider "${l}" is not an OAuth provider\n`,exitCode:1};if(!s){let e=n(l);if(e&&!e.expired){let t=e.maskedValue;return t?{stdout:`${t}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`oauth-token: no masked value for ${l} (try logging in again)\n`,exitCode:1}}}try{if(d.onOAuthLoginIntercepted){let{createInterceptingOAuthLauncherForCurrentRuntime:e}=await import(`./oauth-service-DAzsBd4D.js`),t=await e();if(!t)return{stdout:``,stderr:`oauth-token: provider "${l}" needs the controlled-browser interceptor, but no CDP transport is available in this runtime.\n`,exitCode:1};await d.onOAuthLoginIntercepted(t,()=>{},s?{scopes:s}:void 0)}else if(d.onOAuthLogin){let{createOAuthLauncher:e}=await import(`./oauth-service-DAzsBd4D.js`),t=e();await d.onOAuthLogin(t,()=>{},s?{scopes:s}:void 0)}else return{stdout:``,stderr:`oauth-token: provider "${l}" has no OAuth login hook\n`,exitCode:1};let e=n(l);if(e?.token){let t=e.maskedValue;return t?{stdout:`${t}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`oauth-token: no masked value for ${l} (try logging in again)\n`,exitCode:1}}return console.error(`[oauth-token] Provider ${l}: login completed but no token was saved`),{stdout:``,stderr:`oauth-token: login completed but no token was saved
|
|
4885
|
+
`,exitCode:1}}catch(e){let t=e instanceof Error?e.message:String(e);return console.error(`[oauth-token] Provider ${l}: login failed:`,t),{stdout:``,stderr:`oauth-token: login failed: ${t}\n`,exitCode:1}}})}async function ice(e){let{getSelectedProvider:t,getOAuthAccountInfo:n}=await Promise.resolve().then(()=>pR),{getRegisteredProviderConfig:r,getRegisteredProviderIds:i}=await import(`./providers-DerbEWIP.js`).then(e=>e.r),a=e.filter(e=>!e.startsWith(`-`))[0];if(!a){let e=t();a=r(e)?.onSilentRenew?e:i().find(e=>r(e)?.onSilentRenew)}if(!a)return H5(`oauth-token --renew: no provider supports silent renewal`);let o=r(a);if(!o)return H5(`oauth-token --renew: unknown provider "${a}"`);if(!o.onSilentRenew)return H5(`oauth-token --renew: provider "${a}" has no onSilentRenew hook`);let s=n(a),c=s?.token,l=[`oauth-token --renew ${a}`];l.push(` before: ${B5(s)}`);let u=null,d=null;try{u=await o.onSilentRenew()}catch(e){d=e instanceof Error?e.message:String(e)}if(d)l.push(` silent renewal: ERROR — ${d}`);else if(u){let e=n(a),t=!!(c&&e?.token&&c!==e.token);l.push(` silent renewal: SUCCESS${t?` — token refreshed`:` (token unchanged)`}`),l.push(` after: ${B5(e)}`)}else l.push(` silent renewal: FAILED (onSilentRenew returned null)`),l.push(` → no window should have appeared. Open DevTools console and`),l.push(` look for "[oauth-service] Extension OAuth error" / "[adobe]" to see`),l.push(` the IMS/Chrome reason (e.g. login_required).`);return{stdout:l.join(`
|
|
4886
4886
|
`)+`
|
|
4887
|
-
`,stderr:``,exitCode:+!u}}function B5(e){if(!e)return`no token`;if(e.expired)return`expired`;if(e.expiresAt){let t=e.expiresAt-Date.now();if(t>0){let e=Math.floor(t/36e5),n=Math.floor(t%36e5/6e4);return e>0?`valid, expires in ${e}h ${n}m`:`valid, expires in ${n}m`}}return`valid`}async function ace(e,t){let{parseInterceptOAuthConfig:n}=await import(`./intercepted-oauth-tLpKagkf.js`).then(e=>e.n),{createInterceptingOAuthLauncherForCurrentRuntime:r}=await import(`./oauth-service-
|
|
4887
|
+
`,stderr:``,exitCode:+!u}}function B5(e){if(!e)return`no token`;if(e.expired)return`expired`;if(e.expiresAt){let t=e.expiresAt-Date.now();if(t>0){let e=Math.floor(t/36e5),n=Math.floor(t%36e5/6e4);return e>0?`valid, expires in ${e}h ${n}m`:`valid, expires in ${n}m`}}return`valid`}async function ace(e,t){let{parseInterceptOAuthConfig:n}=await import(`./intercepted-oauth-tLpKagkf.js`).then(e=>e.n),{createInterceptingOAuthLauncherForCurrentRuntime:r}=await import(`./oauth-service-DAzsBd4D.js`),i,a=e.indexOf(`--from-file`);if(a>=0){let n=e[a+1];if(!n)return H5(`oauth-token: --from-file requires a path`);try{let e=t.fs.resolvePath(t.cwd,n),r=await t.fs.readFile(e);i=JSON.parse(typeof r==`string`?r:new TextDecoder().decode(r))}catch(e){return H5(`oauth-token: failed to read ${n}: ${e instanceof Error?e.message:String(e)}`)}}else{let t=V5(e,`--authorize-url`),n=V5(e,`--redirect-pattern`);if(!t)return H5(`oauth-token: --authorize-url is required`);if(!n)return H5(`oauth-token: --redirect-pattern is required`);let r=[];for(let t=0;t<e.length;t++){if(e[t]!==`--rewrite`)continue;let n=e[t+1];if(!n)return H5(`oauth-token: --rewrite requires a value`);let i=n.split(`=`);if(i.length<3)return H5(`oauth-token: --rewrite "${n}" must be "<match>=<key>=<value>"`);let[a,o,...s]=i;r.push({match:a,appendParams:{[o]:s.join(`=`)}})}i={authorizeUrl:t,redirectUriPattern:n,onCapture:e.includes(`--leave-tab`)?`leave`:`close`,...r.length>0?{rewrite:r}:{}}}let o=n(i);if(!o.ok)return H5(`oauth-token: invalid intercept config: ${o.error}`);let s=await r();if(!s)return H5(`oauth-token: no CDP transport available in this runtime; --intercept needs the controlled browser.`);let c=await s(o.config);return c?{stdout:`${c}\n`,stderr:``,exitCode:0}:H5(`oauth-token: intercept timed out or was cancelled`)}function V5(e,t){let n=e.indexOf(t);if(n<0)return;let r=e[n+1];if(!(!r||r.startsWith(`--`)))return r}function H5(e){return{stdout:``,stderr:`${e}\n`,exitCode:1}}function oce(e,t,n,r){let i=t().filter(e=>n(e)?.isOAuth);if(i.length===0)return{stdout:`No OAuth providers configured.
|
|
4888
4888
|
`,stderr:``,exitCode:0};let a=[];for(let e of i){let t=r(e);if(!t)a.push(`${e} (no token)`);else if(t.expired){let n=t.userName?` as ${t.userName}`:``;a.push(`${e} (expired${n})`)}else{let n=[];if(t.userName?n.push(`logged in as ${t.userName}`):n.push(`logged in`),t.expiresAt){let e=t.expiresAt-Date.now();if(e>0){let t=Math.floor(e/36e5),r=Math.floor(e%36e5/6e4);t>0?n.push(`expires in ${t}h`):n.push(`expires in ${r}m`)}}a.push(`${e} (${n.join(`, `)})`)}}return{stdout:a.join(`
|
|
4889
4889
|
`)+`
|
|
4890
4890
|
`,stderr:``,exitCode:0}}const sce=new Set([`--download`,`-d`,`--view`,`-v`]),U5={low:256,medium:768,high:1536};function W5(){return{stdout:`usage: open [--download|-d] [--view|-v [--size <spec>]] <url|path> [url|path...]
|
|
@@ -4913,7 +4913,7 @@ Examples:
|
|
|
4913
4913
|
`,exitCode:1};let r;try{r=await t.fs.stat(n)}catch{return{stdout:``,stderr:`open: no such file: ${e}\n`,exitCode:1}}if(!r.isFile)return{stdout:``,stderr:`open: not a file: ${e}\n`,exitCode:1};let i;try{i=await t.fs.readFileBuffer(n)}catch{return{stdout:``,stderr:`open: failed to read: ${e}\n`,exitCode:1}}let a=new Uint8Array(i.byteLength);a.set(i);let o=new Blob([a.buffer],{type:dJ(n)}),s=URL.createObjectURL(o),l=document.createElement(`a`);l.href=s,l.download=iJ(n)||`download`,l.style.display=`none`,document.body.appendChild(l),l.click(),document.body.removeChild(l),setTimeout(()=>URL.revokeObjectURL(s),0),f.push(`downloaded ${n}`)}else{if(!u)return{stdout:``,stderr:`open: browser APIs are unavailable in this environment
|
|
4914
4914
|
`,exitCode:1};let e=fJ(n);try{await d(e)}catch(e){return{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}f.push(`opened ${n} → ${e}`)}}return{stdout:f.join(`
|
|
4915
4915
|
`)+`
|
|
4916
|
-
`,stderr:``,exitCode:0}})}let K5=null,q5=null;async function J5(){return K5||=import(`./es-
|
|
4916
|
+
`,stderr:``,exitCode:0}})}let K5=null,q5=null;async function J5(){return K5||=import(`./es-DaEzN-e4.js`),K5}async function _ce(){return q5||=import(`./dist-CrC-F8vu.js`),q5}function vce(e){return e.endsWith(`right`)?{range:e.slice(0,-5),rotation:90}:e.endsWith(`left`)?{range:e.slice(0,-4),rotation:270}:e.endsWith(`down`)?{range:e.slice(0,-4),rotation:180}:{range:e}}function Y5(e){let{range:t,rotation:n}=vce(e);if(/^\d+$/.test(t)){let e=parseInt(t,10);return{start:e,end:e,rotation:n}}let r=t.match(/^(\d+)-(\d+|end)$/);if(r)return{start:parseInt(r[1],10),end:r[2]===`end`?`end`:parseInt(r[2],10),rotation:n};throw Error(`Invalid page range: ${e}`)}function X5(e,t){let n=e.start,r=e.end;if(n<1||n>t)throw Error(`Page ${n} out of range (1-${t})`);let i=r===`end`?t:r;if(i<1||i>t)throw Error(`Page ${i} out of range (1-${t})`);if(i<n)throw Error(`Invalid range: ${n}-${i}`);let a=[];for(let e=n;e<=i;e++)a.push(e);return a}function yce(){return{stdout:`usage: pdftk <input.pdf> <operation> [args...]
|
|
4917
4917
|
|
|
4918
4918
|
Operations:
|
|
4919
4919
|
dump_data Print metadata (page count, title, author, etc.)
|
|
@@ -5016,11 +5016,11 @@ Examples:
|
|
|
5016
5016
|
-r rate Speech rate (0.1 to 10, default 1)
|
|
5017
5017
|
-l lang Language tag (required, BCP 47, e.g. en-US, de-DE, fr-FR)
|
|
5018
5018
|
--list List available voices (kokoro voices first when ready)
|
|
5019
|
-
`,stderr:``,exitCode:0}}function c7(e){return{stdout:``,stderr:`say: ${e}\n`,exitCode:1}}function l7(e){return e instanceof Error?e.message:String(e)}let u7=!1,d7=null;function f7(){return u7?Promise.resolve(speechSynthesis.getVoices()):(d7||=new Promise(e=>{let t=speechSynthesis.getVoices();if(t.length>0){u7=!0,e(t);return}let n=()=>{u7=!0,speechSynthesis.removeEventListener(`voiceschanged`,n),e(speechSynthesis.getVoices())};speechSynthesis.addEventListener(`voiceschanged`,n),setTimeout(()=>{speechSynthesis.removeEventListener(`voiceschanged`,n),u7=!0,e(speechSynthesis.getVoices())},1e3)}),d7)}const p7={"-v":`a voice name`,"-r":`a rate value`,"-l":`a language tag`};function Qce(e,t,n){switch(t){case`-v`:return e.voiceName=n,null;case`-l`:return e.lang=n,null;case`-r`:{let t=parseFloat(n);return Number.isNaN(t)||t<.1||t>10?`rate must be between 0.1 and 10`:(e.rate=t,null)}default:return`unknown option: ${t}`}}function $ce(e){let t={voiceName:null,rate:1,lang:null,text:``},n=[];for(let r=0;r<e.length;r++){let i=e[r];if(i in p7){let n=r+1<e.length&&!e[r+1].startsWith(`-`)?e[++r]:null;if(n==null)return c7(`${i} requires ${p7[i]}`);let a=Qce(t,i,n);if(a)return c7(a)}else if(i.startsWith(`-`)&&i!==`--list`)return c7(`unknown option: ${i}`);else i.startsWith(`-`)||n.push(i)}return t.text=n.join(` `),t}async function ele(e){if(e.local){let{kokoroVoicesIfReady:e}=await import(`./speak-
|
|
5019
|
+
`,stderr:``,exitCode:0}}function c7(e){return{stdout:``,stderr:`say: ${e}\n`,exitCode:1}}function l7(e){return e instanceof Error?e.message:String(e)}let u7=!1,d7=null;function f7(){return u7?Promise.resolve(speechSynthesis.getVoices()):(d7||=new Promise(e=>{let t=speechSynthesis.getVoices();if(t.length>0){u7=!0,e(t);return}let n=()=>{u7=!0,speechSynthesis.removeEventListener(`voiceschanged`,n),e(speechSynthesis.getVoices())};speechSynthesis.addEventListener(`voiceschanged`,n),setTimeout(()=>{speechSynthesis.removeEventListener(`voiceschanged`,n),u7=!0,e(speechSynthesis.getVoices())},1e3)}),d7)}const p7={"-v":`a voice name`,"-r":`a rate value`,"-l":`a language tag`};function Qce(e,t,n){switch(t){case`-v`:return e.voiceName=n,null;case`-l`:return e.lang=n,null;case`-r`:{let t=parseFloat(n);return Number.isNaN(t)||t<.1||t>10?`rate must be between 0.1 and 10`:(e.rate=t,null)}default:return`unknown option: ${t}`}}function $ce(e){let t={voiceName:null,rate:1,lang:null,text:``},n=[];for(let r=0;r<e.length;r++){let i=e[r];if(i in p7){let n=r+1<e.length&&!e[r+1].startsWith(`-`)?e[++r]:null;if(n==null)return c7(`${i} requires ${p7[i]}`);let a=Qce(t,i,n);if(a)return c7(a)}else if(i.startsWith(`-`)&&i!==`--list`)return c7(`unknown option: ${i}`);else i.startsWith(`-`)||n.push(i)}return t.text=n.join(` `),t}async function ele(e){if(e.local){let{kokoroVoicesIfReady:e}=await import(`./speak-BtCLW3r-.js`),t=e().map(e=>`${e.id} (${e.lang}) [kokoro]`),n=await f7();return{stdout:[...t,...n.map(e=>`${e.name} (${e.lang})${e.default?` [default]`:``}`)].join(`
|
|
5020
5020
|
`)+`
|
|
5021
5021
|
`,stderr:``,exitCode:0}}try{return{stdout:(await e.panelRpc.call(`list-voices`,void 0)).voices.map(e=>`${e.name} (${e.lang})${e.default?` [default]`:``}`).join(`
|
|
5022
5022
|
`)+`
|
|
5023
|
-
`,stderr:``,exitCode:0}}catch(e){return c7(l7(e))}}async function tle(e){if(!e.local)return(await e.panelRpc.call(`list-voices`,void 0)).voices;let{kokoroVoicesIfReady:t}=await import(`./speak-
|
|
5023
|
+
`,stderr:``,exitCode:0}}catch(e){return c7(l7(e))}}async function tle(e){if(!e.local)return(await e.panelRpc.call(`list-voices`,void 0)).voices;let{kokoroVoicesIfReady:t}=await import(`./speak-BtCLW3r-.js`),n=t().map(e=>({name:e.id})),r=(await f7()).map(e=>({name:e.name}));return[...n,...r]}async function nle(e,t){let n=(await tle(e)).find(e=>e.name.toLowerCase().includes(t.toLowerCase()));return n?{resolved:n.name}:{error:c7(`voice "${t}" not found. Use --list to see available voices.`)}}async function rle(e){try{let{speak:t}=await import(`./speak-BtCLW3r-.js`);return await t(e),{stdout:``,stderr:``,exitCode:0}}catch(e){return c7(`speech synthesis error: ${l7(e)}`)}}async function ile(e,t){try{return await e.panelRpc.call(`speak-text`,t),{stdout:``,stderr:``,exitCode:0}}catch(e){return c7(l7(e))}}function ale(){return mN(`say`,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return s7();let t={local:typeof window<`u`&&typeof speechSynthesis<`u`,panelRpc:T()};if(!t.local&&!t.panelRpc)return c7(`Web Speech API unavailable in this environment`);if(e.includes(`--list`))return ele(t);let n=$ce(e);if(`exitCode`in n)return n;if(!n.text)return s7();if(!n.lang)return c7(`-l language tag is required`);let r;if(n.voiceName){let{resolved:e,error:i}=await nle(t,n.voiceName);if(i)return i;r=e}let i={text:n.text,lang:n.lang,voice:r,rate:n.rate};return t.local?rle(i):ile(t,i)})}function ole(){return{stdout:`screencapture - capture screen, window, or tab using browser screen sharing
|
|
5024
5024
|
|
|
5025
5025
|
Usage: screencapture [options] <output-file>
|
|
5026
5026
|
|
|
@@ -9817,4 +9817,4 @@ ${t}
|
|
|
9817
9817
|
`;case`cmdline`:return`kernel-host\0`;case`cwd`:return`/
|
|
9818
9818
|
`;case`stat`:return`1 (kernel-host) R 0 - 0 -
|
|
9819
9819
|
`}}function ppe(e){switch(e.type){case`webhook`:return e.webhookName;case`sprinkle`:return e.sprinkleName;case`fswatch`:return e.fswatchName;case`navigate`:return e.navigateUrl;case`upgrade`:return`${e.upgradeFromVersion??`unknown`}→${e.upgradeToVersion??`unknown`}`;case`session-reload`:return`mount-recovery`;case`workflow`:return e.workflowName??e.workflowRunId??`workflow`;default:return e.cronName}}function mpe(e){switch(e.type){case`webhook`:return e.webhookId;case`sprinkle`:return e.sprinkleName;case`fswatch`:return e.fswatchId;case`navigate`:return e.navigateUrl;case`upgrade`:return`upgrade-${e.upgradeToVersion??`unknown`}`;case`session-reload`:return`session-reload-${e.timestamp}`;case`workflow`:return`workflow-${e.workflowRunId??`unknown`}`;default:return e.cronId}}function hpe(e,t){if(e.type===`sudo-request`){t.log.debug?.(`sudo-request lick: UI-chip-only path; orchestrator owns delivery`,{lickId:e.lickId});return}gpe(e,t)}function gpe(e,{orchestrator:t,log:n}){e.type===`navigate`?e.lickId=t.registerNavigateLick(e):e.type===`session-reload`?e.lickId=t.registerSessionReloadLick(e):e.type===`upgrade`&&(e.lickId=t.registerUpgradeLick(e));let r=dt(e);if(r===null){n.debug?.(`dropping lick event with no renderable content`,{type:e.type});return}let i=ppe(e),a=mpe(e),o=e.type,s=t.getScoops(),c;if(c=e.targetScoop?s.find(t=>t.name===e.targetScoop||t.folder===e.targetScoop||t.folder===`${e.targetScoop}-scoop`):s.find(e=>e.isCone),!c){n.warn(`Lick target scoop not found`,e.targetScoop);return}let l={id:`${o}-${a}-${Date.now()}`,chatJid:c.jid,senderId:o,senderName:`${o}:${i}`,content:r.content,timestamp:e.timestamp,fromAssistant:!1,channel:o,...e.lickId?{lickId:e.lickId}:{}};t.handleMessage(l)}async function _pe(e,t,n,r){let i=new eJ,a=new ape(e,{...r,getBrowserAPI:()=>t});a.setProcessManager(i),globalThis.__slicc_pm=i,globalThis.__slicc_browser=t,await n.bind(a,t);let o=cn(()=>n.emitTrayRuntimeStatus()),s=yt(()=>n.emitTrayRuntimeStatus());return await a.init(),await n.seedBuffersFromAgentState(),{processManager:i,orchestrator:a,unsubLeader:o,unsubFollower:s,sharedFs:a.getSharedFS()}}async function vpe(e,t,n){let{registerSessionCostsProvider:r}=await Promise.resolve().then(()=>YL);r(()=>e.getSessionCosts());let{getLickManager:i}=await Promise.resolve().then(()=>qz),a=i();await a.init(),e.setLickManager(a);let o=t.lickEventHandler??hpe,s={orchestrator:e,lickManager:a,log:n};return a.setEventHandler(e=>o(e,s)),a}async function ype(e){e.getScoops().some(e=>e.isCone)||await e.registerScoop({jid:`cone_${Date.now()}`,name:`Cone`,folder:`cone`,isCone:!0,type:`cone`,requiresTrigger:!1,assistantLabel:`sliccy`,addedAt:new Date().toISOString()})}function bpe(e){let{orchestrator:t,processManager:n,lickManager:r,sharedFs:i}=e;Vue({sharedFs:i,getConeJid:()=>t.getScoops().find(e=>e.isCone)?.jid,fireLick:e=>r.emitEvent(e),processManager:n,runRealm:(e,t,n)=>i$(e,t,n,void 0,{filename:t[1]}),makeRunId:()=>t9().slice(10,22),splitResult:(e,t)=>n9(e,t)})}async function K9(e){let{browser:t,lickManager:n,orchestrator:r,sharedFs:i,log:a}=e,{CdpWsPageBridge:o}=await import(`./cdp-ws-page-bridge-D_PY6ku1.js`),{WsSubscriberRegistry:s}=await import(`./ws-subscribers-Dzuxa2F7.js`),c=new o({browser:t});return{wsBridge:c,wsRegistry:new s({bridge:c,webhooks:{has:e=>n.getWebhook(e)!==void 0},dispatcher:{webhook:(e,t)=>{n.handleWebhookEvent(e,{},t)},scoop:(e,t)=>{if(!r.getScoops().find(t=>t.jid===e)){a.warn?.(`browser.websocket: scoop sink not found`,{jid:e});return}let n={id:`ws-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,chatJid:e,senderId:`browser.websocket`,senderName:`browser.websocket`,content:typeof t==`string`?t:JSON.stringify(t,null,2),timestamp:new Date().toISOString(),fromAssistant:!1,channel:`browser.websocket`};r.handleMessage(n)},vfs:async(e,t)=>{if(!i)return;let n=(typeof t==`string`?t:JSON.stringify(t))+`
|
|
9820
|
-
`,r=``;try{let t=await i.readFile(e);r=typeof t==`string`?t:new TextDecoder().decode(t)}catch{}await i.writeFile(e,r+n)},log:e=>{a.info?.(`browser.websocket frame`,{payload:e})}}})}}async function xpe(e,t,n){try{let{startLickWsBridge:t}=await import(`./lick-ws-bridge-CbVQgXpI.js`);return t(e,{locationHref:self.location.href,lickWsUrl:n??null}).stop}catch(e){return(t.error?.bind(t)??t.warn.bind(t)??((e,t)=>console.error(`[lick-ws-bridge]`,e,t)))(`Failed to start lick-ws bridge — webhook / crontask / handoff lick delivery is non-functional in this session`,{error:e instanceof Error?e.message:String(e)}),null}}function Spe(e,t,n){try{let n=new $r(e.getTransport(),e=>{let n={url:e.url,verb:e.verb,target:e.target};e.instruction!=null&&(n.instruction=e.instruction),e.branch!=null&&(n.branch=e.branch),e.path!=null&&(n.path=e.path),e.title!=null&&(n.title=e.title),t.emitEvent({type:`navigate`,navigateUrl:e.url,targetScoop:void 0,timestamp:new Date().toISOString(),body:n})});return n.start(),()=>n.stop()}catch(e){return n.warn(`Failed to start NavigationWatcher`,e),null}}function Cpe(e,t,n){(async()=>{try{let{getAllMountEntries:r}=await import(`./mount-table-store-CQJEV6Ij.js`).then(e=>e.r),{recoverMounts:i}=await Promise.resolve().then(()=>Qe),a=await r();if(a.length===0)return;let{needsRecovery:o}=await i(a,e,n);if(o.length===0)return;t.emitEvent({type:`session-reload`,targetScoop:void 0,timestamp:new Date().toISOString(),body:{reason:`mount-recovery`,mounts:o}})}catch(e){n.warn(`mount recovery failed`,e)}})()}function wpe(e,t){(async()=>{try{let{detectUpgrade:t,recordVersionSeen:n}=await import(`./upgrade-detection-Dcc69AtK.js`),r=await t();if(!r.isUpgrade||r.lastSeen===null)return;e.emitEvent({type:`upgrade`,targetScoop:void 0,timestamp:new Date().toISOString(),upgradeFromVersion:r.lastSeen,upgradeToVersion:r.bundled.version,body:{from:r.lastSeen,to:r.bundled.version,releasedAt:r.bundled.releasedAt}}),await n(r.bundled.version)}catch(e){t.warn(`Upgrade detection failed`,e)}})()}async function Tpe(e,t,n){try{let{BshWatchdog:n}=await import(`./bsh-watchdog-B27e-Og-.js`),{ScriptCatalog:r}=await Promise.resolve().then(()=>F$),i=new r({jshFs:e,bshFs:e,watcher:e.getWatcher()}),a=new n({browserAPI:t,scriptCatalog:i,fs:e});return a.start(),{bshWatchdogStop:()=>a.stop(),scriptCatalogDispose:()=>i.dispose()}}catch(e){return n.warn(`Failed to start BSH watchdog`,e),{bshWatchdogStop:null,scriptCatalogDispose:null}}}async function Epe(e){let{container:t,browser:n,bridge:r,callbacks:i,skipConeBootstrap:a=!1,isExtension:o=!1}=e,s=e.logger??console,{processManager:c,orchestrator:l,unsubLeader:u,unsubFollower:d,sharedFs:f}=await _pe(t,n,r,i);if(f?fi(l,f,l.getSessionStore()):s.warn(`AgentBridge not published — orchestrator.getSharedFS() returned null`),f)try{await f.mountInternal(`/proc`,new ope(c))}catch(e){s.warn(`Failed to mount /proc`,e)}let p=await vpe(l,e,s);f&&bpe({orchestrator:l,processManager:c,lickManager:p,sharedFs:f}),globalThis.__slicc_lickManager=p;let{wsBridge:m,wsRegistry:h}=await K9({browser:n,lickManager:p,orchestrator:l,sharedFs:f,log:s});globalThis.__slicc_wsSubscribers=h;let g=null;o||(g=await xpe(p,s,e.localLickWsUrl??null));let _=null;o||(_=Spe(n,p,s)),f&&Cpe(f,p,s),a||await ype(l),f&&wpe(p,s);let v=null,y=null;f&&({bshWatchdogStop:v,scriptCatalogDispose:y}=await Tpe(f,n,s));let b=!1;return{orchestrator:l,browser:n,bridge:r,lickManager:p,sharedFs:f??null,processManager:c,async dispose(){b||(b=!0,await Dpe({unsubLeader:u,unsubFollower:d,bshWatchdogStop:v,scriptCatalogDispose:y,lickWsBridgeStop:g,navigationWatcherStop:_,sharedFs:f,wsRegistry:h,wsBridge:m,processManager:c,lickManager:p,browser:n,log:s}))}}}async function Dpe(e){let{sharedFs:t,wsRegistry:n,wsBridge:r,processManager:i,lickManager:a,browser:o,log:s}=e;if(e.unsubLeader?.(),e.unsubFollower?.(),e.bshWatchdogStop?.(),e.scriptCatalogDispose?.(),e.lickWsBridgeStop?.(),e.navigationWatcherStop)try{await e.navigationWatcherStop()}catch(e){s.warn(`NavigationWatcher.stop() failed`,e)}if(t)try{await t.unmountInternal(`/proc`)}catch{}try{n.dispose()}catch(e){s.warn(`WsSubscriberRegistry.dispose() failed`,e)}try{r.dispose()}catch(e){s.warn(`CdpWsPageBridge.dispose() failed`,e)}Ope({processManager:i,lickManager:a,browser:o,wsRegistry:n})}function Ope(e){let t=globalThis;t.__slicc_pm===e.processManager&&delete t.__slicc_pm,t.__slicc_lickManager===e.lickManager&&delete t.__slicc_lickManager,e.browser&&t.__slicc_browser===e.browser&&delete t.__slicc_browser,e.wsRegistry&&t.__slicc_wsSubscribers===e.wsRegistry&&delete t.__slicc_wsSubscribers,delete t[Q7]}const q9=`x-bypass-llm-proxy`;function kpe(e,t,n){return t?(r,i)=>{if(!Ape(r,t,n))return e(r,i);let a=new Headers(i?.headers);return a.has(q9)||a.set(q9,`1`),e(r,{...i,headers:a})}:e}function Ape(e,t,n){if(Mpe(e,t))return!0;let r=n?.()??null;return r?jpe(e,r,t):!1}function jpe(e,t,n){let r=J9(e),i,a;try{i=new URL(r,n),a=new URL(t)}catch{return!1}return i.origin===a.origin&&i.pathname===`/api/fetch-proxy`}function Mpe(e,t){let n=J9(e);try{return new URL(n,t).origin===t}catch{return!0}}function J9(e){return typeof e==`string`?e:e instanceof URL?e.href:e.url}function Npe(e,t={}){let n=t.onError??(e=>console.error(`[kernel-worker] boot failed`,e)),r=t.onDuplicate??(()=>console.warn(`[kernel-worker] received duplicate kernel-worker-init; ignoring`)),i=!1;return{handle(t){if(i){r();return}i=!0,e(t).catch(e=>{i=!1,n(e)})},isInitialized(){return i}}}var Ppe=class{transport;createShell;log;pm;defaultOwner;sessions=new Map;unsubscribe=null;constructor(e){this.transport=e.transport,this.createShell=e.createShell,this.log=e.logger??console,this.pm=e.processManager??null,this.defaultOwner=e.defaultOwner??{kind:`system`}}start(){return this.unsubscribe||=this.transport.onMessage(e=>{if(!Fpe(e)||e.source!==`panel`)return;let t=e.payload;Lpe(t)&&this.handleControl(t).catch(e=>{this.log.warn(`[terminal-session-host] handler error`,e)})}),()=>this.dispose()}dispose(){this.unsubscribe?.(),this.unsubscribe=null;for(let[,e]of this.sessions)e.currentProcess&&this.pm?(this.pm.signal(e.currentProcess.pid,`SIGTERM`),this.pm.exit(e.currentProcess.pid,null)):e.currentExec?.abort(),e.shell.dispose?.();this.sessions.clear()}async handleControl(e){switch(e.type){case`terminal-open`:return this.handleOpen(e);case`terminal-close`:return this.handleClose(e);case`terminal-exec`:return this.handleExec(e);case`terminal-signal`:return this.handleSignal(e);case`terminal-stdin`:case`terminal-resize`:return}}async handleOpen(e){if(this.sessions.has(e.sid)){this.emitStatus(e.sid,`error`,`session already open`);return}try{let t=this.createShell(e.sid,{cwd:e.cwd,env:e.env});this.sessions.set(e.sid,{shell:t,currentExec:null,currentProcess:null}),this.emitStatus(e.sid,`opened`)}catch(t){this.emitStatus(e.sid,`error`,t instanceof Error?t.message:String(t))}}async handleClose(e){let t=this.sessions.get(e.sid);t&&(t.currentProcess&&this.pm?(this.pm.signal(t.currentProcess.pid,`SIGTERM`),this.pm.exit(t.currentProcess.pid,null)):t.currentExec?.abort(),t.shell.dispose?.(),this.sessions.delete(e.sid),this.emitStatus(e.sid,`closed`))}emitExit(e,t){this.emit({type:`terminal-exit`,sid:e.sid,execId:e.execId,exitCode:t})}emitStream(e,t,n){this.emit({type:`terminal-output`,sid:e.sid,execId:e.execId,stream:t,data:n})}async handleExec(e){let t=this.sessions.get(e.sid);if(!t){this.emitExit(e,127),this.log.warn(`[terminal-session-host] exec on unknown session`,e.sid);return}if(t.currentExec){this.emitExit(e,130);return}let n=new AbortController;t.currentExec=n;let r=this.pm?this.pm.spawn({kind:`shell`,argv:[e.command],cwd:t.shell.getCwd?.()??void 0,owner:this.defaultOwner,adoptAbort:n}):null;t.currentProcess=r;try{let i=await t.shell.executeCommand(e.command,n.signal);await this.emitExecSuccess(e,i,n,r)}catch(t){this.emitExecError(e,t,n,r)}finally{t.currentExec===n&&(t.currentExec=null,t.currentProcess=null)}}async emitExecSuccess(e,t,n,r){let i=n.signal.aborted?130:t.exitCode;n.signal.aborted||(r&&await r.gate.wait(),t.stdout&&this.emitStream(e,`stdout`,t.stdout),t.stderr&&this.emitStream(e,`stderr`,t.stderr)),this.emitExit(e,i),r&&this.pm&&this.pm.exit(r.pid,n.signal.aborted?null:t.exitCode)}emitExecError(e,t,n,r){if(n.signal.aborted){this.emitExit(e,Ipe(r?.terminatedBy??`SIGINT`)),r&&this.pm&&this.pm.exit(r.pid,null);return}let i=t instanceof Error?t.message:String(t);this.emitStream(e,`stderr`,`Error: ${i}\n`),this.emitExit(e,1),r&&this.pm&&this.pm.exit(r.pid,1)}async handleSignal(e){let t=this.sessions.get(e.sid);if(!t){this.log.warn(`[terminal-session-host] signal on unknown session`,e.sid);return}(e.signal===`SIGINT`||e.signal===`SIGTERM`||e.signal===`SIGKILL`)&&(t.currentProcess&&this.pm?this.pm.signal(t.currentProcess.pid,e.signal):t.currentExec?.abort())}emit(e){this.transport.send(e)}emitStatus(e,t,n){let r=n?{type:`terminal-status`,sid:e,state:t,error:n}:{type:`terminal-status`,sid:e,state:t};this.emit(r)}};function Fpe(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function Ipe(e){switch(e){case`SIGINT`:return 130;case`SIGTERM`:return 143;case`SIGKILL`:return 137;case`SIGSTOP`:case`SIGCONT`:return 130}}function Lpe(e){if(typeof e!=`object`||!e)return!1;let t=e.type;return t===`terminal-open`||t===`terminal-close`||t===`terminal-exec`||t===`terminal-signal`||t===`terminal-stdin`||t===`terminal-resize`}var Rpe=class extends l9{sid;transport;constructor(e,t,n){super(n),this.sid=e,this.transport=t}async renderMediaPreview(e){for(let t of e){let e=``,n=t.bytes,r=8192;for(let t=0;t<n.length;t+=r)e+=String.fromCharCode(...n.subarray(t,t+r));let i={type:`terminal-media-preview`,sid:this.sid,path:t.path,mediaType:t.mimeType,data:btoa(e)};this.transport.send(i)}}};function zpe(e){let{transport:t,fs:n,browser:r,processManager:i,sudoManager:a}=e,o=e.logger??console,s=a?.getShellConfig({transparentGating:!1}),c=new Ppe({transport:t,processManager:i,createShell:(e,a)=>new Rpe(e,t,{fs:n,cwd:a.cwd,env:a.env,browserAPI:r,processManager:i,processOwner:{kind:`system`},sudo:s}),logger:o});return{host:c,stop:c.start()}}function Bpe(e){let t=new Vpe(e);return t.start(),{stop:()=>t.dispose()}}var Vpe=class{transport;client;writableClient;log;unsubscribe=null;constructor(e){this.transport=e.transport,this.client=e.client,this.writableClient=e.writableClient??null,this.log=e.logger??console}start(){this.unsubscribe||=this.transport.onMessage(e=>{if(!Hpe(e)||e.source!==`panel`)return;let t=e.payload;if(Upe(t)){this.handleRequest(t).catch(e=>{this.log.warn(`[vfs-rpc-host] handler unexpectedly threw`,e)});return}if(Wpe(t)){this.handleWriteRequest(t).catch(e=>{this.log.warn(`[vfs-rpc-host] write handler unexpectedly threw`,e)});return}})}dispose(){this.unsubscribe?.(),this.unsubscribe=null}async handleRequest(e){switch(e.type){case`vfs-read-dir`:return this.handleReadDir(e);case`vfs-read-file`:return this.handleReadFile(e);case`vfs-stat`:return this.handleStat(e)}}async handleReadDir(e){try{let t=await this.client.readDir(e.path),n={type:`vfs-read-dir-result`,requestId:e.requestId,ok:!0,entries:t};this.transport.send(n)}catch(t){this.emitError(`vfs-read-dir-result`,e.requestId,t,e.path)}}async handleReadFile(e){let t=e.encoding??`utf-8`;try{let n=await this.client.readFile(e.path,{encoding:t});if(t===`binary`){if(!(n instanceof Uint8Array)){this.emitError(`vfs-read-file-result`,e.requestId,new m(`EIO`,`readFile(binary) did not return Uint8Array`),e.path);return}let t={type:`vfs-read-file-result`,requestId:e.requestId,ok:!0,encoding:`binary`,data:n},r=n.buffer,i=typeof ArrayBuffer<`u`&&r instanceof ArrayBuffer?[r]:void 0;this.transport.send(t,i)}else{if(typeof n!=`string`){this.emitError(`vfs-read-file-result`,e.requestId,new m(`EIO`,`readFile(utf-8) did not return string`),e.path);return}let t={type:`vfs-read-file-result`,requestId:e.requestId,ok:!0,encoding:`utf-8`,data:n};this.transport.send(t)}}catch(t){this.emitError(`vfs-read-file-result`,e.requestId,t,e.path)}}async handleStat(e){try{let t=await this.client.stat(e.path),n={type:`vfs-stat-result`,requestId:e.requestId,ok:!0,stats:t};this.transport.send(n)}catch(t){this.emitError(`vfs-stat-result`,e.requestId,t,e.path)}}async handleWriteRequest(e){if(!this.writableClient){this.emitWriteError(Gpe(e.type),e.requestId,new m(`EACCES`,`vfs-rpc-host has no writable backend wired`),Kpe(e));return}switch(e.type){case`vfs-write-file`:return this.handleWriteFile(e,this.writableClient);case`vfs-mkdir`:return this.handleMkdir(e,this.writableClient);case`vfs-rm`:return this.handleRm(e,this.writableClient);case`vfs-flush`:return this.handleFlush(e,this.writableClient)}}async handleWriteFile(e,t){try{if(e.encoding===`binary`){if(!(e.data instanceof Uint8Array)){this.emitWriteError(`vfs-write-file-result`,e.requestId,new m(`EIO`,`vfs-write-file(binary) data is not Uint8Array`),e.path);return}}else if(typeof e.data!=`string`){this.emitWriteError(`vfs-write-file-result`,e.requestId,new m(`EIO`,`vfs-write-file(utf-8) data is not string`),e.path);return}let n=e.recursive===void 0?void 0:{recursive:e.recursive};await t.writeFile(e.path,e.data,n);let r={type:`vfs-write-file-result`,requestId:e.requestId,ok:!0};this.transport.send(r)}catch(t){this.emitWriteError(`vfs-write-file-result`,e.requestId,t,e.path)}}async handleMkdir(e,t){try{let n=e.recursive===void 0?void 0:{recursive:e.recursive};await t.mkdir(e.path,n);let r={type:`vfs-mkdir-result`,requestId:e.requestId,ok:!0};this.transport.send(r)}catch(t){this.emitWriteError(`vfs-mkdir-result`,e.requestId,t,e.path)}}async handleRm(e,t){try{let n=e.recursive===void 0?void 0:{recursive:e.recursive};await t.rm(e.path,n);let r={type:`vfs-rm-result`,requestId:e.requestId,ok:!0};this.transport.send(r)}catch(t){this.emitWriteError(`vfs-rm-result`,e.requestId,t,e.path)}}async handleFlush(e,t){try{await t.flush();let n={type:`vfs-flush-result`,requestId:e.requestId,ok:!0};this.transport.send(n)}catch(t){this.emitWriteError(`vfs-flush-result`,e.requestId,t,``)}}emitError(e,t,n,r){let i=Y9(n,r);switch(e){case`vfs-read-dir-result`:{let e={type:`vfs-read-dir-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-read-file-result`:{let e={type:`vfs-read-file-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-stat-result`:{let e={type:`vfs-stat-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}}}emitWriteError(e,t,n,r){let i=Y9(n,r);switch(r===``&&i.path===``&&delete i.path,e){case`vfs-write-file-result`:{let e={type:`vfs-write-file-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-mkdir-result`:{let e={type:`vfs-mkdir-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-rm-result`:{let e={type:`vfs-rm-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-flush-result`:{let e={type:`vfs-flush-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}}}};function Hpe(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function Upe(e){if(typeof e!=`object`||!e)return!1;let t=e.type;return t===`vfs-read-dir`||t===`vfs-read-file`||t===`vfs-stat`}function Wpe(e){if(typeof e!=`object`||!e)return!1;let t=e.type;return t===`vfs-write-file`||t===`vfs-mkdir`||t===`vfs-rm`||t===`vfs-flush`}function Gpe(e){switch(e){case`vfs-write-file`:return`vfs-write-file-result`;case`vfs-mkdir`:return`vfs-mkdir-result`;case`vfs-rm`:return`vfs-rm-result`;case`vfs-flush`:return`vfs-flush-result`}}function Kpe(e){return e.type===`vfs-flush`?``:e.path}function Y9(e,t){return e instanceof m?{code:e.code,message:e.message,path:e.path??t}:{code:`EIO`,message:e instanceof Error?e.message:String(e),path:t}}function qpe(){let e=globalThis.fetch;if(!e)return;let t=self?.location?self.location.origin:void 0;globalThis.fetch=kpe(e.bind(globalThis),t,Jpe)}function Jpe(){let e=Kn();if(!e)return null;try{return new URL(e).origin}catch{return null}}function Ype(e){let t=new Map(Object.entries(e));Object.defineProperty(globalThis,"localStorage",{value:{get length(){return t.size},key(e){return Array.from(t.keys())[e]??null},getItem(e){return t.has(e)?t.get(e):null},setItem(e,n){t.set(e,n)},removeItem(e){t.delete(e)},clear(){t.clear()}},configurable:!0,writable:!0})}let X9=null,Z9=null,Q9=null,$9=null;const Xpe=Npe(e=>Zpe(e));self.addEventListener(`message`,e=>{e.data?.type===`kernel-worker-init`&&Xpe.handle(e.data)});async function Zpe(e){qpe(),Gn(e.localApiBaseUrl??null),qn(e.bridgeToken??null),Ype(e.localStorageSeed??{}),yr().catch(()=>{}),await O();let t=jr(e.kernelPort),n=new mn(t),r=mn.createCallbacks(n),i=new Mr(e.cdpPort);await i.connect();let a=new Cn(i);X9=await Epe({container:{},browser:a,bridge:n,callbacks:r,logger:console,localLickWsUrl:e.localLickWsUrl??null});let{createSprinkleManagerProxyOverChannel:o}=await import(`./sprinkle-bridge-channel-BceIr6aT.js`);globalThis.__slicc_sprinkleManager=o({instanceId:e.instanceId});let{createPanelRpcClient:s}=await import(`./panel-rpc-Ck8CVyMh.js`).then(e=>e.i);$9=s({instanceId:e.instanceId}),globalThis.__slicc_panelRpc=$9,a.setTrayTargetProvider(Dn(T));let c=X9.processManager,l=X9.sharedFs;l?(Z9=zpe({transport:t,fs:l,browser:a,processManager:c,sudoManager:X9.orchestrator.getSudoManager(),logger:console}).stop,Q9=Bpe({transport:t,client:l,writableClient:l,logger:console}).stop):console.warn(`[kernel-worker] shared FS unavailable; terminal sessions will fail to open`),e.kernelPort.postMessage({type:`kernel-worker-ready`})}self.addEventListener(`message`,e=>{e.data?.type===`kernel-worker-shutdown`&&(Z9?.(),Z9=null,Q9?.(),Q9=null,$9?.dispose(),$9=null,X9?.dispose())});export{Kt as C,Ze as E,Gt as S,mt as T,Hn as _,t3 as a,nn as b,kq as c,_B as d,fB as f,Kn as g,Jn as h,s5 as i,wq as l,cR as m,V7 as n,yY as o,dR as p,B7 as r,bY as s,wue as t,MV as u,on as v,pt as w,tn as x,an as y};
|
|
9820
|
+
`,r=``;try{let t=await i.readFile(e);r=typeof t==`string`?t:new TextDecoder().decode(t)}catch{}await i.writeFile(e,r+n)},log:e=>{a.info?.(`browser.websocket frame`,{payload:e})}}})}}async function xpe(e,t,n){try{let{startLickWsBridge:t}=await import(`./lick-ws-bridge-CO4sVUnO.js`);return t(e,{locationHref:self.location.href,lickWsUrl:n??null}).stop}catch(e){return(t.error?.bind(t)??t.warn.bind(t)??((e,t)=>console.error(`[lick-ws-bridge]`,e,t)))(`Failed to start lick-ws bridge — webhook / crontask / handoff lick delivery is non-functional in this session`,{error:e instanceof Error?e.message:String(e)}),null}}function Spe(e,t,n){try{let n=new $r(e.getTransport(),e=>{let n={url:e.url,verb:e.verb,target:e.target};e.instruction!=null&&(n.instruction=e.instruction),e.branch!=null&&(n.branch=e.branch),e.path!=null&&(n.path=e.path),e.title!=null&&(n.title=e.title),t.emitEvent({type:`navigate`,navigateUrl:e.url,targetScoop:void 0,timestamp:new Date().toISOString(),body:n})});return n.start(),()=>n.stop()}catch(e){return n.warn(`Failed to start NavigationWatcher`,e),null}}function Cpe(e,t,n){(async()=>{try{let{getAllMountEntries:r}=await import(`./mount-table-store-CQJEV6Ij.js`).then(e=>e.r),{recoverMounts:i}=await Promise.resolve().then(()=>Qe),a=await r();if(a.length===0)return;let{needsRecovery:o}=await i(a,e,n);if(o.length===0)return;t.emitEvent({type:`session-reload`,targetScoop:void 0,timestamp:new Date().toISOString(),body:{reason:`mount-recovery`,mounts:o}})}catch(e){n.warn(`mount recovery failed`,e)}})()}function wpe(e,t){(async()=>{try{let{detectUpgrade:t,recordVersionSeen:n}=await import(`./upgrade-detection-CjNy2QVK.js`),r=await t();if(!r.isUpgrade||r.lastSeen===null)return;e.emitEvent({type:`upgrade`,targetScoop:void 0,timestamp:new Date().toISOString(),upgradeFromVersion:r.lastSeen,upgradeToVersion:r.bundled.version,body:{from:r.lastSeen,to:r.bundled.version,releasedAt:r.bundled.releasedAt}}),await n(r.bundled.version)}catch(e){t.warn(`Upgrade detection failed`,e)}})()}async function Tpe(e,t,n){try{let{BshWatchdog:n}=await import(`./bsh-watchdog-DbLa5QsS.js`),{ScriptCatalog:r}=await Promise.resolve().then(()=>F$),i=new r({jshFs:e,bshFs:e,watcher:e.getWatcher()}),a=new n({browserAPI:t,scriptCatalog:i,fs:e});return a.start(),{bshWatchdogStop:()=>a.stop(),scriptCatalogDispose:()=>i.dispose()}}catch(e){return n.warn(`Failed to start BSH watchdog`,e),{bshWatchdogStop:null,scriptCatalogDispose:null}}}async function Epe(e){let{container:t,browser:n,bridge:r,callbacks:i,skipConeBootstrap:a=!1,isExtension:o=!1}=e,s=e.logger??console,{processManager:c,orchestrator:l,unsubLeader:u,unsubFollower:d,sharedFs:f}=await _pe(t,n,r,i);if(f?fi(l,f,l.getSessionStore()):s.warn(`AgentBridge not published — orchestrator.getSharedFS() returned null`),f)try{await f.mountInternal(`/proc`,new ope(c))}catch(e){s.warn(`Failed to mount /proc`,e)}let p=await vpe(l,e,s);f&&bpe({orchestrator:l,processManager:c,lickManager:p,sharedFs:f}),globalThis.__slicc_lickManager=p;let{wsBridge:m,wsRegistry:h}=await K9({browser:n,lickManager:p,orchestrator:l,sharedFs:f,log:s});globalThis.__slicc_wsSubscribers=h;let g=null;o||(g=await xpe(p,s,e.localLickWsUrl??null));let _=null;o||(_=Spe(n,p,s)),f&&Cpe(f,p,s),a||await ype(l),f&&wpe(p,s);let v=null,y=null;f&&({bshWatchdogStop:v,scriptCatalogDispose:y}=await Tpe(f,n,s));let b=!1;return{orchestrator:l,browser:n,bridge:r,lickManager:p,sharedFs:f??null,processManager:c,async dispose(){b||(b=!0,await Dpe({unsubLeader:u,unsubFollower:d,bshWatchdogStop:v,scriptCatalogDispose:y,lickWsBridgeStop:g,navigationWatcherStop:_,sharedFs:f,wsRegistry:h,wsBridge:m,processManager:c,lickManager:p,browser:n,log:s}))}}}async function Dpe(e){let{sharedFs:t,wsRegistry:n,wsBridge:r,processManager:i,lickManager:a,browser:o,log:s}=e;if(e.unsubLeader?.(),e.unsubFollower?.(),e.bshWatchdogStop?.(),e.scriptCatalogDispose?.(),e.lickWsBridgeStop?.(),e.navigationWatcherStop)try{await e.navigationWatcherStop()}catch(e){s.warn(`NavigationWatcher.stop() failed`,e)}if(t)try{await t.unmountInternal(`/proc`)}catch{}try{n.dispose()}catch(e){s.warn(`WsSubscriberRegistry.dispose() failed`,e)}try{r.dispose()}catch(e){s.warn(`CdpWsPageBridge.dispose() failed`,e)}Ope({processManager:i,lickManager:a,browser:o,wsRegistry:n})}function Ope(e){let t=globalThis;t.__slicc_pm===e.processManager&&delete t.__slicc_pm,t.__slicc_lickManager===e.lickManager&&delete t.__slicc_lickManager,e.browser&&t.__slicc_browser===e.browser&&delete t.__slicc_browser,e.wsRegistry&&t.__slicc_wsSubscribers===e.wsRegistry&&delete t.__slicc_wsSubscribers,delete t[Q7]}const q9=`x-bypass-llm-proxy`;function kpe(e,t,n){return t?(r,i)=>{if(!Ape(r,t,n))return e(r,i);let a=new Headers(i?.headers);return a.has(q9)||a.set(q9,`1`),e(r,{...i,headers:a})}:e}function Ape(e,t,n){if(Mpe(e,t))return!0;let r=n?.()??null;return r?jpe(e,r,t):!1}function jpe(e,t,n){let r=J9(e),i,a;try{i=new URL(r,n),a=new URL(t)}catch{return!1}return i.origin===a.origin&&i.pathname===`/api/fetch-proxy`}function Mpe(e,t){let n=J9(e);try{return new URL(n,t).origin===t}catch{return!0}}function J9(e){return typeof e==`string`?e:e instanceof URL?e.href:e.url}function Npe(e,t={}){let n=t.onError??(e=>console.error(`[kernel-worker] boot failed`,e)),r=t.onDuplicate??(()=>console.warn(`[kernel-worker] received duplicate kernel-worker-init; ignoring`)),i=!1;return{handle(t){if(i){r();return}i=!0,e(t).catch(e=>{i=!1,n(e)})},isInitialized(){return i}}}var Ppe=class{transport;createShell;log;pm;defaultOwner;sessions=new Map;unsubscribe=null;constructor(e){this.transport=e.transport,this.createShell=e.createShell,this.log=e.logger??console,this.pm=e.processManager??null,this.defaultOwner=e.defaultOwner??{kind:`system`}}start(){return this.unsubscribe||=this.transport.onMessage(e=>{if(!Fpe(e)||e.source!==`panel`)return;let t=e.payload;Lpe(t)&&this.handleControl(t).catch(e=>{this.log.warn(`[terminal-session-host] handler error`,e)})}),()=>this.dispose()}dispose(){this.unsubscribe?.(),this.unsubscribe=null;for(let[,e]of this.sessions)e.currentProcess&&this.pm?(this.pm.signal(e.currentProcess.pid,`SIGTERM`),this.pm.exit(e.currentProcess.pid,null)):e.currentExec?.abort(),e.shell.dispose?.();this.sessions.clear()}async handleControl(e){switch(e.type){case`terminal-open`:return this.handleOpen(e);case`terminal-close`:return this.handleClose(e);case`terminal-exec`:return this.handleExec(e);case`terminal-signal`:return this.handleSignal(e);case`terminal-stdin`:case`terminal-resize`:return}}async handleOpen(e){if(this.sessions.has(e.sid)){this.emitStatus(e.sid,`error`,`session already open`);return}try{let t=this.createShell(e.sid,{cwd:e.cwd,env:e.env});this.sessions.set(e.sid,{shell:t,currentExec:null,currentProcess:null}),this.emitStatus(e.sid,`opened`)}catch(t){this.emitStatus(e.sid,`error`,t instanceof Error?t.message:String(t))}}async handleClose(e){let t=this.sessions.get(e.sid);t&&(t.currentProcess&&this.pm?(this.pm.signal(t.currentProcess.pid,`SIGTERM`),this.pm.exit(t.currentProcess.pid,null)):t.currentExec?.abort(),t.shell.dispose?.(),this.sessions.delete(e.sid),this.emitStatus(e.sid,`closed`))}emitExit(e,t){this.emit({type:`terminal-exit`,sid:e.sid,execId:e.execId,exitCode:t})}emitStream(e,t,n){this.emit({type:`terminal-output`,sid:e.sid,execId:e.execId,stream:t,data:n})}async handleExec(e){let t=this.sessions.get(e.sid);if(!t){this.emitExit(e,127),this.log.warn(`[terminal-session-host] exec on unknown session`,e.sid);return}if(t.currentExec){this.emitExit(e,130);return}let n=new AbortController;t.currentExec=n;let r=this.pm?this.pm.spawn({kind:`shell`,argv:[e.command],cwd:t.shell.getCwd?.()??void 0,owner:this.defaultOwner,adoptAbort:n}):null;t.currentProcess=r;try{let i=await t.shell.executeCommand(e.command,n.signal);await this.emitExecSuccess(e,i,n,r)}catch(t){this.emitExecError(e,t,n,r)}finally{t.currentExec===n&&(t.currentExec=null,t.currentProcess=null)}}async emitExecSuccess(e,t,n,r){let i=n.signal.aborted?130:t.exitCode;n.signal.aborted||(r&&await r.gate.wait(),t.stdout&&this.emitStream(e,`stdout`,t.stdout),t.stderr&&this.emitStream(e,`stderr`,t.stderr)),this.emitExit(e,i),r&&this.pm&&this.pm.exit(r.pid,n.signal.aborted?null:t.exitCode)}emitExecError(e,t,n,r){if(n.signal.aborted){this.emitExit(e,Ipe(r?.terminatedBy??`SIGINT`)),r&&this.pm&&this.pm.exit(r.pid,null);return}let i=t instanceof Error?t.message:String(t);this.emitStream(e,`stderr`,`Error: ${i}\n`),this.emitExit(e,1),r&&this.pm&&this.pm.exit(r.pid,1)}async handleSignal(e){let t=this.sessions.get(e.sid);if(!t){this.log.warn(`[terminal-session-host] signal on unknown session`,e.sid);return}(e.signal===`SIGINT`||e.signal===`SIGTERM`||e.signal===`SIGKILL`)&&(t.currentProcess&&this.pm?this.pm.signal(t.currentProcess.pid,e.signal):t.currentExec?.abort())}emit(e){this.transport.send(e)}emitStatus(e,t,n){let r=n?{type:`terminal-status`,sid:e,state:t,error:n}:{type:`terminal-status`,sid:e,state:t};this.emit(r)}};function Fpe(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function Ipe(e){switch(e){case`SIGINT`:return 130;case`SIGTERM`:return 143;case`SIGKILL`:return 137;case`SIGSTOP`:case`SIGCONT`:return 130}}function Lpe(e){if(typeof e!=`object`||!e)return!1;let t=e.type;return t===`terminal-open`||t===`terminal-close`||t===`terminal-exec`||t===`terminal-signal`||t===`terminal-stdin`||t===`terminal-resize`}var Rpe=class extends l9{sid;transport;constructor(e,t,n){super(n),this.sid=e,this.transport=t}async renderMediaPreview(e){for(let t of e){let e=``,n=t.bytes,r=8192;for(let t=0;t<n.length;t+=r)e+=String.fromCharCode(...n.subarray(t,t+r));let i={type:`terminal-media-preview`,sid:this.sid,path:t.path,mediaType:t.mimeType,data:btoa(e)};this.transport.send(i)}}};function zpe(e){let{transport:t,fs:n,browser:r,processManager:i,sudoManager:a}=e,o=e.logger??console,s=a?.getShellConfig({transparentGating:!1}),c=new Ppe({transport:t,processManager:i,createShell:(e,a)=>new Rpe(e,t,{fs:n,cwd:a.cwd,env:a.env,browserAPI:r,processManager:i,processOwner:{kind:`system`},sudo:s}),logger:o});return{host:c,stop:c.start()}}function Bpe(e){let t=new Vpe(e);return t.start(),{stop:()=>t.dispose()}}var Vpe=class{transport;client;writableClient;log;unsubscribe=null;constructor(e){this.transport=e.transport,this.client=e.client,this.writableClient=e.writableClient??null,this.log=e.logger??console}start(){this.unsubscribe||=this.transport.onMessage(e=>{if(!Hpe(e)||e.source!==`panel`)return;let t=e.payload;if(Upe(t)){this.handleRequest(t).catch(e=>{this.log.warn(`[vfs-rpc-host] handler unexpectedly threw`,e)});return}if(Wpe(t)){this.handleWriteRequest(t).catch(e=>{this.log.warn(`[vfs-rpc-host] write handler unexpectedly threw`,e)});return}})}dispose(){this.unsubscribe?.(),this.unsubscribe=null}async handleRequest(e){switch(e.type){case`vfs-read-dir`:return this.handleReadDir(e);case`vfs-read-file`:return this.handleReadFile(e);case`vfs-stat`:return this.handleStat(e)}}async handleReadDir(e){try{let t=await this.client.readDir(e.path),n={type:`vfs-read-dir-result`,requestId:e.requestId,ok:!0,entries:t};this.transport.send(n)}catch(t){this.emitError(`vfs-read-dir-result`,e.requestId,t,e.path)}}async handleReadFile(e){let t=e.encoding??`utf-8`;try{let n=await this.client.readFile(e.path,{encoding:t});if(t===`binary`){if(!(n instanceof Uint8Array)){this.emitError(`vfs-read-file-result`,e.requestId,new m(`EIO`,`readFile(binary) did not return Uint8Array`),e.path);return}let t={type:`vfs-read-file-result`,requestId:e.requestId,ok:!0,encoding:`binary`,data:n},r=n.buffer,i=typeof ArrayBuffer<`u`&&r instanceof ArrayBuffer?[r]:void 0;this.transport.send(t,i)}else{if(typeof n!=`string`){this.emitError(`vfs-read-file-result`,e.requestId,new m(`EIO`,`readFile(utf-8) did not return string`),e.path);return}let t={type:`vfs-read-file-result`,requestId:e.requestId,ok:!0,encoding:`utf-8`,data:n};this.transport.send(t)}}catch(t){this.emitError(`vfs-read-file-result`,e.requestId,t,e.path)}}async handleStat(e){try{let t=await this.client.stat(e.path),n={type:`vfs-stat-result`,requestId:e.requestId,ok:!0,stats:t};this.transport.send(n)}catch(t){this.emitError(`vfs-stat-result`,e.requestId,t,e.path)}}async handleWriteRequest(e){if(!this.writableClient){this.emitWriteError(Gpe(e.type),e.requestId,new m(`EACCES`,`vfs-rpc-host has no writable backend wired`),Kpe(e));return}switch(e.type){case`vfs-write-file`:return this.handleWriteFile(e,this.writableClient);case`vfs-mkdir`:return this.handleMkdir(e,this.writableClient);case`vfs-rm`:return this.handleRm(e,this.writableClient);case`vfs-flush`:return this.handleFlush(e,this.writableClient)}}async handleWriteFile(e,t){try{if(e.encoding===`binary`){if(!(e.data instanceof Uint8Array)){this.emitWriteError(`vfs-write-file-result`,e.requestId,new m(`EIO`,`vfs-write-file(binary) data is not Uint8Array`),e.path);return}}else if(typeof e.data!=`string`){this.emitWriteError(`vfs-write-file-result`,e.requestId,new m(`EIO`,`vfs-write-file(utf-8) data is not string`),e.path);return}let n=e.recursive===void 0?void 0:{recursive:e.recursive};await t.writeFile(e.path,e.data,n);let r={type:`vfs-write-file-result`,requestId:e.requestId,ok:!0};this.transport.send(r)}catch(t){this.emitWriteError(`vfs-write-file-result`,e.requestId,t,e.path)}}async handleMkdir(e,t){try{let n=e.recursive===void 0?void 0:{recursive:e.recursive};await t.mkdir(e.path,n);let r={type:`vfs-mkdir-result`,requestId:e.requestId,ok:!0};this.transport.send(r)}catch(t){this.emitWriteError(`vfs-mkdir-result`,e.requestId,t,e.path)}}async handleRm(e,t){try{let n=e.recursive===void 0?void 0:{recursive:e.recursive};await t.rm(e.path,n);let r={type:`vfs-rm-result`,requestId:e.requestId,ok:!0};this.transport.send(r)}catch(t){this.emitWriteError(`vfs-rm-result`,e.requestId,t,e.path)}}async handleFlush(e,t){try{await t.flush();let n={type:`vfs-flush-result`,requestId:e.requestId,ok:!0};this.transport.send(n)}catch(t){this.emitWriteError(`vfs-flush-result`,e.requestId,t,``)}}emitError(e,t,n,r){let i=Y9(n,r);switch(e){case`vfs-read-dir-result`:{let e={type:`vfs-read-dir-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-read-file-result`:{let e={type:`vfs-read-file-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-stat-result`:{let e={type:`vfs-stat-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}}}emitWriteError(e,t,n,r){let i=Y9(n,r);switch(r===``&&i.path===``&&delete i.path,e){case`vfs-write-file-result`:{let e={type:`vfs-write-file-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-mkdir-result`:{let e={type:`vfs-mkdir-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-rm-result`:{let e={type:`vfs-rm-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}case`vfs-flush-result`:{let e={type:`vfs-flush-result`,requestId:t,ok:!1,error:i};this.transport.send(e);return}}}};function Hpe(e){return typeof e==`object`&&!!e&&`source`in e&&`payload`in e}function Upe(e){if(typeof e!=`object`||!e)return!1;let t=e.type;return t===`vfs-read-dir`||t===`vfs-read-file`||t===`vfs-stat`}function Wpe(e){if(typeof e!=`object`||!e)return!1;let t=e.type;return t===`vfs-write-file`||t===`vfs-mkdir`||t===`vfs-rm`||t===`vfs-flush`}function Gpe(e){switch(e){case`vfs-write-file`:return`vfs-write-file-result`;case`vfs-mkdir`:return`vfs-mkdir-result`;case`vfs-rm`:return`vfs-rm-result`;case`vfs-flush`:return`vfs-flush-result`}}function Kpe(e){return e.type===`vfs-flush`?``:e.path}function Y9(e,t){return e instanceof m?{code:e.code,message:e.message,path:e.path??t}:{code:`EIO`,message:e instanceof Error?e.message:String(e),path:t}}function qpe(){let e=globalThis.fetch;if(!e)return;let t=self?.location?self.location.origin:void 0;globalThis.fetch=kpe(e.bind(globalThis),t,Jpe)}function Jpe(){let e=Kn();if(!e)return null;try{return new URL(e).origin}catch{return null}}function Ype(e){let t=new Map(Object.entries(e));Object.defineProperty(globalThis,"localStorage",{value:{get length(){return t.size},key(e){return Array.from(t.keys())[e]??null},getItem(e){return t.has(e)?t.get(e):null},setItem(e,n){t.set(e,n)},removeItem(e){t.delete(e)},clear(){t.clear()}},configurable:!0,writable:!0})}let X9=null,Z9=null,Q9=null,$9=null;const Xpe=Npe(e=>Zpe(e));self.addEventListener(`message`,e=>{e.data?.type===`kernel-worker-init`&&Xpe.handle(e.data)});async function Zpe(e){qpe(),Gn(e.localApiBaseUrl??null),qn(e.bridgeToken??null),Ype(e.localStorageSeed??{}),yr().catch(()=>{}),await O();let t=jr(e.kernelPort),n=new mn(t),r=mn.createCallbacks(n),i=new Mr(e.cdpPort);await i.connect();let a=new Cn(i);X9=await Epe({container:{},browser:a,bridge:n,callbacks:r,logger:console,localLickWsUrl:e.localLickWsUrl??null});let{createSprinkleManagerProxyOverChannel:o}=await import(`./sprinkle-bridge-channel-BceIr6aT.js`);globalThis.__slicc_sprinkleManager=o({instanceId:e.instanceId});let{createPanelRpcClient:s}=await import(`./panel-rpc-Ck8CVyMh.js`).then(e=>e.i);$9=s({instanceId:e.instanceId}),globalThis.__slicc_panelRpc=$9,a.setTrayTargetProvider(Dn(T));let c=X9.processManager,l=X9.sharedFs;l?(Z9=zpe({transport:t,fs:l,browser:a,processManager:c,sudoManager:X9.orchestrator.getSudoManager(),logger:console}).stop,Q9=Bpe({transport:t,client:l,writableClient:l,logger:console}).stop):console.warn(`[kernel-worker] shared FS unavailable; terminal sessions will fail to open`),e.kernelPort.postMessage({type:`kernel-worker-ready`})}self.addEventListener(`message`,e=>{e.data?.type===`kernel-worker-shutdown`&&(Z9?.(),Z9=null,Q9?.(),Q9=null,$9?.dispose(),$9=null,X9?.dispose())});export{Kt as C,Ze as E,Gt as S,mt as T,Hn as _,t3 as a,nn as b,kq as c,_B as d,fB as f,Kn as g,Jn as h,s5 as i,wq as l,cR as m,V7 as n,yY as o,dR as p,B7 as r,bY as s,wue as t,MV as u,on as v,pt as w,tn as x,an as y};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./logger-LESFN7Hj.js";import{n as t,t as n}from"./transformers-env-
|
|
1
|
+
import{t as e}from"./logger-LESFN7Hj.js";import{n as t,t as n}from"./transformers-env-BEJ8prM4.js";const r=e(`speech:kokoro`),i=`onnx-community/Kokoro-82M-v1.0-ONNX`;function a(e){return Object.entries(e).map(([e,t])=>({id:e,name:t.name||e,lang:t.language===`en-gb`||e.startsWith(`b`)?`en-GB`:`en-US`,...t.gender?{gender:t.gender}:{}}))}let o=null,s=null,c=null;function l(){return c}function u(e){return o||=d(e).then(e=>(c=e,e),e=>{throw o=null,r.error(`kokoro load failed`,e),e}),o}async function d(e){let{env:o}=await import(`./transformers.web-DJfCkvxA.js`);n(o);let{KokoroTTS:c}=await import(`./kokoro-pZaPWf_-.js`),l=t(),u=typeof navigator<`u`&&`gpu`in navigator,d=await c.from_pretrained(i,{device:u?`webgpu`:`wasm`,dtype:u?`fp32`:`q8`,progress_callback:t=>{if(t?.file){if(t.status===`progress`)l.update(t.file,t.loaded??0,t.total??0);else if(t.status===`done`)l.complete(t.file);else return;s=l.snapshot(),e?.(s)}}});r.info(`kokoro ready`,{model:i,device:u?`webgpu`:`wasm`});let f=a(d.voices);return{async synthesize(e,t){let n=await d.generate(e,{...t?.voice?{voice:t.voice}:{},...t?.speed?{speed:t.speed}:{}});return{audio:n.audio,sampleRate:n.sampling_rate}},async*synthesizeStream(e,t){let n={...t?.voice?{voice:t.voice}:{},...t?.speed?{speed:t.speed}:{},...t?.splitPattern?{split_pattern:t.splitPattern}:{}};for await(let t of d.stream(e,n))yield{audio:t.audio.audio,sampleRate:t.audio.sampling_rate}},voices:()=>f}}export{u as getKokoro,l as kokoroIfReady};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./logger-LESFN7Hj.js";import{n as t,r as n,t as r,v as i,y as a}from"./kernel-worker-
|
|
1
|
+
import{t as e}from"./logger-LESFN7Hj.js";import{n as t,r as n,t as r,v as i,y as a}from"./kernel-worker-BWuqWtNZ.js";const o=e(`lick-ws-bridge`);function s(e){if(e.stopped)return;let t;try{t=e.wsFactory(e.wsUrl)}catch(t){o.error(`Failed to construct lick WebSocket`,{url:e.wsUrl,error:t instanceof Error?t.message:String(t)}),c(e,`construct-threw`);return}e.socket=t,t.onopen=()=>{e.consecutiveFailures>0?o.info(`Lick WebSocket recovered`,{attempts:e.consecutiveFailures}):o.info(`Lick WebSocket connected`),e.consecutiveFailures=0,e.unrecoverableSignalled=!1},t.onmessage=n=>{u(e,t,n.data).catch(e=>{let t=typeof n.data==`string`?n.data.slice(0,200):`[non-string payload]`;o.error(`Failed to process lick message`,{error:e instanceof Error?e.message:String(e),preview:t})})},t.onclose=n=>{if(e.socket===t&&(e.socket=null),e.stopped)return;let r=n.reason?` reason=${JSON.stringify(n.reason)}`:``;c(e,`disconnected code=${n.code}${r}`)},t.onerror=t=>{let n=t.target;o.error(`Lick WebSocket error`,{url:e.wsUrl,readyState:n?.readyState,eventType:t.type})}}function c(e,t){if(e.reconnectHandle!=null){o.debug(`Lick WS failure during pending reconnect — keeping existing timer`,{cause:t});return}e.consecutiveFailures++;let n=Math.min(e.baseDelay*2**(e.consecutiveFailures-1),6e4),r={url:e.wsUrl,attempt:e.consecutiveFailures,cause:t,retryInMs:n};if(e.consecutiveFailures>=3?o.error(`Lick WebSocket still down`,r):o.warn(`Lick WebSocket down`,r),e.consecutiveFailures===20&&!e.unrecoverableSignalled){e.unrecoverableSignalled=!0;try{e.lickManager.emitEvent({type:`session-reload`,targetScoop:void 0,timestamp:new Date().toISOString(),body:{reason:`lick-ws-bridge-down`,url:e.wsUrl,attempts:e.consecutiveFailures}})}catch(e){o.error(`Failed to emit lick-ws-bridge-down signal`,{error:e instanceof Error?e.message:String(e)})}}l(e,n)}function l(e,t){e.stopped||e.reconnectHandle!=null||(e.reconnectHandle=e.setTimer(()=>{e.reconnectHandle=null,s(e)},t))}async function u(e,t,n){let r=JSON.parse(typeof n==`string`?n:String(n));if(r.requestId){let n=r.requestId,i=await p(e,r,n);if(e.stopped||e.socket!==t||t.readyState!==1){o.warn(`Lick reply dropped — socket changed/closed mid-request`,{type:r.type,requestId:n});return}try{t.send(JSON.stringify(i))}catch(e){o.error(`ws.send() failed delivering lick reply`,{type:r.type,requestId:n,error:e instanceof Error?e.message:String(e)})}return}if(r.type===`webhook_event`){d(e.lickManager,r);return}r.type===`navigate_event`&&f(e.lickManager,r)}function d(e,t){let n=typeof t.webhookId==`string`?t.webhookId:null;if(!n){o.error(`Malformed webhook_event from lick-ws`,{receivedKeys:Object.keys(t)});return}let r=t.headers&&typeof t.headers==`object`?t.headers:{};try{e.handleWebhookEvent(n,r,t.body)}catch(e){o.error(`Webhook event dispatch failed`,{webhookId:n,error:e instanceof Error?e.message:String(e)})}}function f(e,t){let n=typeof t.verb==`string`?t.verb:null,r=typeof t.target==`string`?t.target:null,i=typeof t.url==`string`&&t.url.length>0?t.url:null;if(n!==`handoff`&&n!==`upskill`||!r||!i){o.debug(`navigate_event dropped — invalid payload`,{hasVerb:!!n,hasTarget:!!r,hasUrl:!!i});return}let a={url:i,verb:n,target:r};typeof t.instruction==`string`&&(a.instruction=t.instruction),typeof t.branch==`string`&&(a.branch=t.branch),typeof t.path==`string`&&(a.path=t.path),typeof t.title==`string`&&(a.title=t.title),e.emitEvent({type:`navigate`,navigateUrl:i,targetScoop:void 0,timestamp:typeof t.timestamp==`string`?t.timestamp:new Date().toISOString(),body:a})}async function p(e,t,n){let{lickManager:r}=e;try{switch(t.type){case`list_webhooks`:return{type:`response`,requestId:n,data:r.listWebhooks().map(t=>({...t,url:m(e,t.id)}))};case`create_webhook`:{let i=await r.createWebhook(t.name||`default`,t.scoop,t.filter);return{type:`response`,requestId:n,data:{...i,url:m(e,i.id)}}}case`delete_webhook`:return await r.deleteWebhook(t.id)?{type:`response`,requestId:n,data:{ok:!0}}:{type:`response`,requestId:n,data:{error:`Webhook not found`}};case`list_crontasks`:return{type:`response`,requestId:n,data:r.listCronTasks()};case`create_crontask`:if(!t.name)throw Error(`name is required`);if(!t.cron)throw Error(`cron is required`);return{type:`response`,requestId:n,data:await r.createCronTask(t.name,t.cron,t.scoop,t.filter)};case`delete_crontask`:return await r.deleteCronTask(t.id)?{type:`response`,requestId:n,data:{ok:!0}}:{type:`response`,requestId:n,data:{error:`Cron task not found`}};case`tray_status`:{let e=i();return{type:`response`,requestId:n,data:{state:e.state,joinUrl:e.session?.joinUrl??null,workerBaseUrl:e.session?.workerBaseUrl??null,trayId:e.session?.trayId??null}}}default:return{type:`response`,requestId:n,error:`Unknown request type: ${t.type}`}}}catch(e){return{type:`response`,requestId:n,error:e instanceof Error?e.message:String(e)}}}function m(e,r){let i=a().session;return i?.webhookUrl?t(i.webhookUrl,r):e.webhookOriginOverride?`${e.webhookOriginOverride}/webhooks/${r}`:n(e.options.locationHref,r)}function h(e){if(e.stopped)return;e.stopped=!0,e.reconnectHandle!=null&&(e.clearTimer(e.reconnectHandle),e.reconnectHandle=null);let t=e.socket;if(e.socket=null,t)try{t.close()}catch(e){t.readyState!==3&&t.readyState!==2&&o.warn(`Lick socket close() threw before terminal state`,{readyState:t.readyState,error:e instanceof Error?e.message:String(e)})}}function g(e,t){try{new URL(t.locationHref)}catch(e){throw Error(`startLickWsBridge: invalid locationHref ${JSON.stringify(t.locationHref)}: ${e instanceof Error?e.message:String(e)}`)}let n=typeof t.lickWsUrl==`string`&&t.lickWsUrl.length>0?t.lickWsUrl:r(t.locationHref),i=null;if(typeof t.lickWsUrl==`string`&&t.lickWsUrl.length>0)try{let e=new URL(t.lickWsUrl);i=`${e.protocol===`wss:`?`https:`:`http:`}//${e.host}`}catch{i=null}let a={lickManager:e,options:t,wsUrl:n,webhookOriginOverride:i,baseDelay:t.reconnectDelayMs??3e3,wsFactory:t.webSocketFactory??(e=>new WebSocket(e)),setTimer:t.setTimeoutFn??setTimeout.bind(globalThis),clearTimer:t.clearTimeoutFn??clearTimeout.bind(globalThis),stopped:!1,socket:null,reconnectHandle:null,consecutiveFailures:0,unrecoverableSignalled:!1};return s(a),{stop(){h(a)}}}export{g as startLickWsBridge};
|