shadow-claw 1.31.0 → 1.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.well-known/mcp/server-card.json +1 -1
- package/.well-known/mcp.json +1 -1
- package/dist/lib/components/index.js +21 -21
- package/dist/lib/components/settings/shadow-claw-channel-config.js +1 -1
- package/dist/lib/components/settings/shadow-claw-control-plane.js +1 -1
- package/dist/lib/components/settings/shadow-claw-git.js +1 -1
- package/dist/lib/components/settings/shadow-claw-llm.js +1 -1
- package/dist/lib/components/settings/shadow-claw-networking.js +1 -1
- package/dist/lib/components/settings/shadow-claw-notifications.js +1 -1
- package/dist/lib/components/settings/shadow-claw-peerjs.js +1 -1
- package/dist/lib/components/settings/shadow-claw-storage.js +1 -1
- package/dist/lib/components/settings/shadow-claw-task-server.js +1 -1
- package/dist/lib/components/settings/shadow-claw-webvm.js +1 -1
- package/dist/lib/components/shadow-claw-channel-config.js +1 -1
- package/dist/lib/components/shadow-claw-channels.js +1 -1
- package/dist/lib/components/shadow-claw-chat.js +1 -1
- package/dist/lib/components/shadow-claw-control-plane.js +1 -1
- package/dist/lib/components/shadow-claw-conversations.js +1 -1
- package/dist/lib/components/shadow-claw-file-viewer.js +1 -1
- package/dist/lib/components/shadow-claw-files.js +1 -1
- package/dist/lib/components/shadow-claw-git.js +1 -1
- package/dist/lib/components/shadow-claw-llm.js +1 -1
- package/dist/lib/components/shadow-claw-networking.js +1 -1
- package/dist/lib/components/shadow-claw-notifications.js +1 -1
- package/dist/lib/components/shadow-claw-pages.js +1 -1
- package/dist/lib/components/shadow-claw-peerjs.js +1 -1
- package/dist/lib/components/shadow-claw-settings.js +1 -1
- package/dist/lib/components/shadow-claw-storage.js +1 -1
- package/dist/lib/components/shadow-claw-task-server.js +1 -1
- package/dist/lib/components/shadow-claw-tasks.js +1 -1
- package/dist/lib/components/shadow-claw-terminal.js +1 -1
- package/dist/lib/components/shadow-claw-tools.js +1 -1
- package/dist/lib/components/shadow-claw-webvm.js +1 -1
- package/dist/lib/components/shadow-claw.js +1 -1
- package/dist/lib/{configurePeerJs-u7CYSquX.js → configurePeerJs-DD3G3Pms.js} +2 -2
- package/dist/lib/{configurePeerJs-u7CYSquX.js.map → configurePeerJs-DD3G3Pms.js.map} +1 -1
- package/dist/lib/{git-DAP_EV6R.js → git-Brr7JIbs.js} +25 -8
- package/dist/lib/{git-DAP_EV6R.js.map → git-Brr7JIbs.js.map} +1 -1
- package/dist/lib/index.js +21 -21
- package/dist/lib/{initControlPlane-DCK_SHeR.js → initControlPlane-3TUdhRBM.js} +7 -7
- package/dist/lib/{initControlPlane-DCK_SHeR.js.map → initControlPlane-3TUdhRBM.js.map} +1 -1
- package/dist/lib/{orchestrator-XygttQw2.js → orchestrator-DLnCmeTZ.js} +5 -5
- package/dist/lib/{orchestrator-XygttQw2.js.map → orchestrator-DLnCmeTZ.js.map} +1 -1
- package/dist/lib/{orchestrator-DNamnY-k.js → orchestrator-DW5l2bbW.js} +22 -4
- package/dist/lib/{orchestrator-DNamnY-k.js.map → orchestrator-DW5l2bbW.js.map} +1 -1
- package/dist/lib/{peerjs-BgkPSHKa.js → peerjs-BXlMuIQn.js} +3 -3
- package/dist/lib/{peerjs-BgkPSHKa.js.map → peerjs-BXlMuIQn.js.map} +1 -1
- package/dist/lib/{push-client-C09NQEk5.js → push-client-B419nn-i.js} +2 -2
- package/dist/lib/{push-client-C09NQEk5.js.map → push-client-B419nn-i.js.map} +1 -1
- package/dist/lib/{shadow-claw-vzcggiax.js → shadow-claw-DmMO4vVG.js} +4 -4
- package/dist/lib/{shadow-claw-vzcggiax.js.map → shadow-claw-DmMO4vVG.js.map} +1 -1
- package/dist/lib/{shadow-claw-channel-config-Cl3JvxIJ.js → shadow-claw-channel-config-BhxHf6wZ.js} +3 -3
- package/dist/lib/{shadow-claw-channel-config-Cl3JvxIJ.js.map → shadow-claw-channel-config-BhxHf6wZ.js.map} +1 -1
- package/dist/lib/{shadow-claw-channels-kv21lr_O.js → shadow-claw-channels-B5vzE9Z2.js} +2 -2
- package/dist/lib/{shadow-claw-channels-kv21lr_O.js.map → shadow-claw-channels-B5vzE9Z2.js.map} +1 -1
- package/dist/lib/{shadow-claw-chat-Cj1fHQIl.js → shadow-claw-chat-BsYnJ4-G.js} +3 -3
- package/dist/lib/{shadow-claw-chat-Cj1fHQIl.js.map → shadow-claw-chat-BsYnJ4-G.js.map} +1 -1
- package/dist/lib/{shadow-claw-control-plane-DySeKB36.js → shadow-claw-control-plane-DqcgQsun.js} +6 -6
- package/dist/lib/{shadow-claw-control-plane-DySeKB36.js.map → shadow-claw-control-plane-DqcgQsun.js.map} +1 -1
- package/dist/lib/{shadow-claw-conversations-DghueOOD.js → shadow-claw-conversations-B9Pn58g3.js} +2 -2
- package/dist/lib/{shadow-claw-conversations-DghueOOD.js.map → shadow-claw-conversations-B9Pn58g3.js.map} +1 -1
- package/dist/lib/{shadow-claw-file-viewer-C_ITv8T6.js → shadow-claw-file-viewer-DL6c4oPK.js} +2 -2
- package/dist/lib/{shadow-claw-file-viewer-C_ITv8T6.js.map → shadow-claw-file-viewer-DL6c4oPK.js.map} +1 -1
- package/dist/lib/{shadow-claw-files-CWBaYt9p.js → shadow-claw-files-C_ksPb8W.js} +2 -2
- package/dist/lib/{shadow-claw-files-CWBaYt9p.js.map → shadow-claw-files-C_ksPb8W.js.map} +1 -1
- package/dist/lib/{shadow-claw-git-XfPBpfXd.js → shadow-claw-git-jwsY7L1N.js} +3 -3
- package/dist/lib/{shadow-claw-git-XfPBpfXd.js.map → shadow-claw-git-jwsY7L1N.js.map} +1 -1
- package/dist/lib/{shadow-claw-llm-Gzx4ufL_.js → shadow-claw-llm-CEPJh1Jh.js} +2 -2
- package/dist/lib/{shadow-claw-llm-Gzx4ufL_.js.map → shadow-claw-llm-CEPJh1Jh.js.map} +1 -1
- package/dist/lib/{shadow-claw-networking-CYEbc5TR.js → shadow-claw-networking-Bi4yvc73.js} +2 -2
- package/dist/lib/{shadow-claw-networking-CYEbc5TR.js.map → shadow-claw-networking-Bi4yvc73.js.map} +1 -1
- package/dist/lib/{shadow-claw-notifications-DHvkTrgv.js → shadow-claw-notifications-C-JgGqQx.js} +2 -2
- package/dist/lib/{shadow-claw-notifications-DHvkTrgv.js.map → shadow-claw-notifications-C-JgGqQx.js.map} +1 -1
- package/dist/lib/{shadow-claw-pages-Bj3w3V6Y.js → shadow-claw-pages-OEOClgA8.js} +2 -2
- package/dist/lib/{shadow-claw-pages-Bj3w3V6Y.js.map → shadow-claw-pages-OEOClgA8.js.map} +1 -1
- package/dist/lib/{shadow-claw-peerjs-B3sx2xLA.js → shadow-claw-peerjs-DmC2CV-9.js} +3 -3
- package/dist/lib/{shadow-claw-peerjs-B3sx2xLA.js.map → shadow-claw-peerjs-DmC2CV-9.js.map} +1 -1
- package/dist/lib/{shadow-claw-settings-DK-0kp3A.js → shadow-claw-settings-xAtFog0T.js} +2 -2
- package/dist/lib/{shadow-claw-settings-DK-0kp3A.js.map → shadow-claw-settings-xAtFog0T.js.map} +1 -1
- package/dist/lib/{shadow-claw-storage-p9nVMQPF.js → shadow-claw-storage-B4UHl-po.js} +2 -2
- package/dist/lib/{shadow-claw-storage-p9nVMQPF.js.map → shadow-claw-storage-B4UHl-po.js.map} +1 -1
- package/dist/lib/{shadow-claw-task-server-BNKCWG2M.js → shadow-claw-task-server-B0eWzg57.js} +2 -2
- package/dist/lib/{shadow-claw-task-server-BNKCWG2M.js.map → shadow-claw-task-server-B0eWzg57.js.map} +1 -1
- package/dist/lib/{shadow-claw-tasks-Dbq9rUku.js → shadow-claw-tasks-HHU_8Gyg.js} +2 -2
- package/dist/lib/{shadow-claw-tasks-Dbq9rUku.js.map → shadow-claw-tasks-HHU_8Gyg.js.map} +1 -1
- package/dist/lib/{shadow-claw-terminal-Wk2qRWJ9.js → shadow-claw-terminal-CdC2G6Zz.js} +2 -2
- package/dist/lib/{shadow-claw-terminal-Wk2qRWJ9.js.map → shadow-claw-terminal-CdC2G6Zz.js.map} +1 -1
- package/dist/lib/{shadow-claw-tools-C9TEf2k7.js → shadow-claw-tools-2AICxVXA.js} +3 -3
- package/dist/lib/{shadow-claw-tools-C9TEf2k7.js.map → shadow-claw-tools-2AICxVXA.js.map} +1 -1
- package/dist/lib/{shadow-claw-webvm-VoKerWW8.js → shadow-claw-webvm-Cy-Ia2vs.js} +2 -2
- package/dist/lib/{shadow-claw-webvm-VoKerWW8.js.map → shadow-claw-webvm-Cy-Ia2vs.js.map} +1 -1
- package/dist/lib/subsystems/git/git.d.ts +8 -1
- package/dist/lib/subsystems/git/types.d.ts +7 -1
- package/dist/lib/{syncWebMcpRegistration-DEs4JjI_.js → syncWebMcpRegistration-CaAPPg2V.js} +2 -2
- package/dist/lib/{syncWebMcpRegistration-DEs4JjI_.js.map → syncWebMcpRegistration-CaAPPg2V.js.map} +1 -1
- package/dist/public/.well-known/mcp/server-card.json +1 -1
- package/dist/public/.well-known/mcp.json +1 -1
- package/dist/public/agent.worker.js +2 -2
- package/dist/public/{configurePeerJs-B68egTBd.js → configurePeerJs--JGpJVti.js} +1 -1
- package/dist/public/docs/example/article/index.html +1 -1
- package/dist/public/docs/publishing/index.html +1 -1
- package/dist/public/docs/skill-creator/index.html +1 -1
- package/dist/public/{e2e-bridge-DQ4Mb_eC.js → e2e-bridge-CbYqdMp-.js} +1 -1
- package/dist/public/{file-viewer-BqNHyqzy.js → file-viewer-vHJ5Zsgk.js} +1 -1
- package/dist/public/git-8F7wvoUB.js +100 -0
- package/dist/public/git-DgFF7xTW.js +100 -0
- package/dist/public/index.html +1 -1
- package/dist/public/index.js +1 -1
- package/dist/public/{initControlPlane-DG_LcLDy.js → initControlPlane-C5v0FtJE.js} +1 -1
- package/dist/public/main/index.html +1 -1
- package/dist/public/main/memory/index.html +1 -1
- package/dist/public/{orchestrator-DAJkyJmV.js → orchestrator-BeJfwtvz.js} +3 -3
- package/dist/public/{orchestrator-BXwxW4N2.js → orchestrator-DNr2HDI2.js} +1 -1
- package/dist/public/{peerjs-BaDbzfgl.js → peerjs-mG30TAJ_.js} +1 -1
- package/dist/public/{push-client-B1CCaldJ.js → push-client-C2zMT3Sf.js} +1 -1
- package/dist/public/service-worker.js +1 -1
- package/dist/public/{shadow-claw-CpBmveOh.js → shadow-claw-Ble6l0Iw.js} +2 -2
- package/dist/public/{shadow-claw-channels-7Oew09u0.js → shadow-claw-channels-D_xfBoWp.js} +1 -1
- package/dist/public/{shadow-claw-chat-CskwjDzZ.js → shadow-claw-chat-D_Lbi5oH.js} +1 -1
- package/dist/public/{shadow-claw-control-plane-BqjEyhx7.js → shadow-claw-control-plane-CrnA5lM0.js} +2 -2
- package/dist/public/{shadow-claw-conversations-ClGgBPVY.js → shadow-claw-conversations-BN-hFmN1.js} +1 -1
- package/dist/public/{shadow-claw-file-viewer-rDepUwFJ.js → shadow-claw-file-viewer-BKEpzpbx.js} +1 -1
- package/dist/public/{shadow-claw-files-C0r05PYf.js → shadow-claw-files-DDZMk5AA.js} +1 -1
- package/dist/public/{shadow-claw-git-CXrECHKy.js → shadow-claw-git-CqOO97Re.js} +2 -2
- package/dist/public/{shadow-claw-llm-jeGVNciG.js → shadow-claw-llm-DoGxEHQL.js} +1 -1
- package/dist/public/{shadow-claw-networking--q6MgEAT.js → shadow-claw-networking-DJeCdb7e.js} +1 -1
- package/dist/public/{shadow-claw-notifications-CrFUF0fl.js → shadow-claw-notifications-hSKJeMXb.js} +1 -1
- package/dist/public/{shadow-claw-pages-_n1wVXAV.js → shadow-claw-pages-DTS98Zbi.js} +1 -1
- package/dist/public/{shadow-claw-settings-5yIfa3ie.js → shadow-claw-settings-5w0ce8SP.js} +2 -2
- package/dist/public/{shadow-claw-storage-PLX9EFGn.js → shadow-claw-storage-DqlVt27X.js} +1 -1
- package/dist/public/{shadow-claw-task-server-BMps7aSr.js → shadow-claw-task-server-ByZwKI6S.js} +1 -1
- package/dist/public/{shadow-claw-tasks-CHO1xvsu.js → shadow-claw-tasks-Dc4G4zBu.js} +1 -1
- package/dist/public/{shadow-claw-terminal-BJnSXRsb.js → shadow-claw-terminal-DvusP7wg.js} +1 -1
- package/dist/public/{shadow-claw-tools-BHfxRckC.js → shadow-claw-tools-BEsid8q-.js} +1 -1
- package/dist/public/{shadow-claw-webvm-CyI23mQT.js → shadow-claw-webvm-BWlIeK78.js} +1 -1
- package/dist/public/{syncWebMcpRegistration-R0tha3kP.js → syncWebMcpRegistration-CqVCB6m8.js} +1 -1
- package/package.json +1 -1
- package/src/storage/staticMainSite.ts +16 -2
- package/src/stores/orchestrator.test.ts +33 -0
- package/src/stores/orchestrator.ts +36 -0
- package/src/subsystems/git/git.test.ts +99 -0
- package/src/subsystems/git/git.ts +92 -12
- package/src/subsystems/git/types.ts +7 -0
- package/dist/public/git-BDaM5VT5.js +0 -100
- package/dist/public/git-D4n46G9B.js +0 -100
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{i as e,n as t,r as n,t as r}from"./rolldown-runtime-aKtaBQYM.js";import{C as i,F as a,I as o,O as s,P as c,R as l,c as u,m as d,n as f,o as p,r as m,u as h,y as g}from"./config-Bnwx4EfS.js";import{a as _,n as v}from"./app-routes-BMQ4HFaM.js";import{n as y,t as b}from"./txPromise-EBECky1b.js";import{t as x}from"./getConfig-D89uJgo5.js";import{t as ee}from"./browser-nBz_r6l4.js";import{a as S,c as C,o as w,t as T}from"./custom-element-security-Da_6HQ6X.js";import{t as E}from"./dist-B9m1QM9v.js";import{a as D,i as O,o as te,r as ne,s as re,t as ie}from"./getGroupDir-BwprrdrQ.js";import{a as ae,c as oe,d as se,f as ce,l as le,o as ue,p as de,r as fe,s as pe,t as me}from"./tools-Cp1gequ8.js";import{t as k}from"./setConfig-DFMYnYLE.js";import{t as he}from"./ulid-BY7rQVLN.js";import{i as ge,r as _e,t as ve}from"./tools-CcgG5XuA.js";import"./tools-B-PzsLc2.js";import{t as ye}from"./buffer-9oRIc-5Z.js";import{n as be,r as xe}from"./crypto-C8c5wMzN.js";import{c as Se,d as Ce,i as we,l as Te,m as Ee,n as De,p as Oe,r as ke,t as Ae}from"./mcp-reconnect-CBHuaYdF.js";import{a as je,c as Me,d as Ne,f as Pe,h as Fe,i as Ie,l as Le,m as Re,n as ze,o as Be,p as Ve,r as He,s as Ue,t as We,u as Ge,y as Ke}from"./is-typed-array-CnI-JI7u.js";import{n as qe,o as Je,r as Ye,t as Xe}from"./constants-BR3kgTKA.js";import{a as Ze,i as Qe,n as $e,o as et,r as tt,s as nt,t as rt}from"./connections-6575KDGE.js";import{t as it}from"./getAllTasks-vpBlgGsc.js";import{r as at}from"./push-client-
|
|
1
|
+
import{i as e,n as t,r as n,t as r}from"./rolldown-runtime-aKtaBQYM.js";import{C as i,F as a,I as o,O as s,P as c,R as l,c as u,m as d,n as f,o as p,r as m,u as h,y as g}from"./config-Bnwx4EfS.js";import{a as _,n as v}from"./app-routes-BMQ4HFaM.js";import{n as y,t as b}from"./txPromise-EBECky1b.js";import{t as x}from"./getConfig-D89uJgo5.js";import{t as ee}from"./browser-nBz_r6l4.js";import{a as S,c as C,o as w,t as T}from"./custom-element-security-Da_6HQ6X.js";import{t as E}from"./dist-B9m1QM9v.js";import{a as D,i as O,o as te,r as ne,s as re,t as ie}from"./getGroupDir-BwprrdrQ.js";import{a as ae,c as oe,d as se,f as ce,l as le,o as ue,p as de,r as fe,s as pe,t as me}from"./tools-Cp1gequ8.js";import{t as k}from"./setConfig-DFMYnYLE.js";import{t as he}from"./ulid-BY7rQVLN.js";import{i as ge,r as _e,t as ve}from"./tools-CcgG5XuA.js";import"./tools-B-PzsLc2.js";import{t as ye}from"./buffer-9oRIc-5Z.js";import{n as be,r as xe}from"./crypto-C8c5wMzN.js";import{c as Se,d as Ce,i as we,l as Te,m as Ee,n as De,p as Oe,r as ke,t as Ae}from"./mcp-reconnect-CBHuaYdF.js";import{a as je,c as Me,d as Ne,f as Pe,h as Fe,i as Ie,l as Le,m as Re,n as ze,o as Be,p as Ve,r as He,s as Ue,t as We,u as Ge,y as Ke}from"./is-typed-array-CnI-JI7u.js";import{n as qe,o as Je,r as Ye,t as Xe}from"./constants-BR3kgTKA.js";import{a as Ze,i as Qe,n as $e,o as et,r as tt,s as nt,t as rt}from"./connections-6575KDGE.js";import{t as it}from"./getAllTasks-vpBlgGsc.js";import{r as at}from"./push-client-C2zMT3Sf.js";import{o as ot,r as st}from"./toast-BXgUfbyh.js";const ct={openrouter:{label:`OpenRouter API Keys`,href:`https://openrouter.ai/keys`},huggingface:{label:`HuggingFace Access Tokens`,href:`https://huggingface.co/settings/tokens`},bedrock_proxy:{label:`AWS Bedrock Setup`,href:`https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html`},ollama:{label:`Install Ollama`,href:`https://ollama.com/download`},prompt_api:{label:`Prompt API Docs`,href:`https://developer.chrome.com/docs/ai/built-in`}},lt=new Set([`ollama`,`bedrock_proxy`,`llamafile`,`transformers_js_local`]);function ut(e){return a(e)?.name||e}function dt(e,t,n){let r=(t||``).toLowerCase();return r?n&&(r.includes(`api key not configured`)||r.includes(`go to settings to add your api key`)||r.includes(`missing api key`)||r.includes(`no api key`))?`api-key-missing`:n&&(r.includes(`invalid api key`)||r.includes(`incorrect api key`)||r.includes(`authentication failed`)||r.includes(`401`)||r.includes(`403`)||r.includes(`unauthorized`)||r.includes(`forbidden`))?`api-key-invalid`:r.includes(`429`)||r.includes(`rate limit`)||r.includes(`too many requests`)?`rate-limited`:r.includes(`failed to fetch`)||r.includes(`networkerror`)||r.includes(`network error`)||r.includes(`econnrefused`)||r.includes(`connection refused`)||r.includes(`enotfound`)||r.includes(`timed out`)||r.includes(`timeout`)||r.includes(`503`)||r.includes(`502`)?`provider-unreachable`:null:null}function ft(e,t,n){let r=ut(e),i=ct[e]?[ct[e]]:[],a=[],o=`${r} Issue`,s=`ShadowClaw hit a ${r} provider error.`;return t===`api-key-missing`?(o=`${r} API Key Required`,s=`${r} needs an API key before requests can run.`,a.push(`Open Settings > AI > Model Provider and enter an API key as required.`),a.push(`Click Save Provider, then retry your message.`)):t===`api-key-invalid`?(o=`${r} Authentication Failed`,s=`${r} rejected the current API key.`,a.push(`Generate or copy a fresh API key for this provider.`),a.push(`Open Settings > AI > Model Provider, replace the key, click Save Provider, then retry.`)):t===`provider-unreachable`?(o=`${r} Not Reachable`,s=`ShadowClaw could not reach ${r}.`,lt.has(e)?(a.push(`Make sure the local ShadowClaw server is running (npm start) and the proxy URL in Settings is correct.`),a.push(`If this provider depends on another local runtime, verify it is running too.`)):(a.push(`Check internet connectivity and confirm the provider service is available.`),a.push(`If you are using a proxy or VPN, ensure requests to the provider are allowed.`))):t===`rate-limited`&&(o=`${r} Rate Limited`,s=`${r} is throttling requests right now.`,a.push(`Wait a moment and retry the request.`),a.push(`If this keeps happening, switch to a lower-traffic model or reduce request frequency.`)),n&&n.trim()&&a.push(`Details: ${n.trim()}`),{mode:`info`,title:o,message:s,details:a,links:i,confirmLabel:`OK`,autoCloseSeconds:30}}function pt(e){if(typeof e.size==`number`&&e.size>0)return e.size;if(typeof e.data==`string`&&e.data.length>0){let t=e.data.endsWith(`==`)?2:+!!e.data.endsWith(`=`);return Math.max(0,Math.floor(e.data.length*3/4)-t)}return 0}function mt(e){return e?e.startsWith(`text/`)||e===`json`||e===`xml`||e===`javascript`||e===`csv`||e===`markdown`:!1}function ht(e){let t=pt(e);if(t===0)return 0;switch(e.mediaType){case`image`:return 1500;case`audio`:return 1500;case`video`:return 2500;default:return mt(e.mimeType)?Math.ceil(t/4):Math.ceil(t/16)}}function gt(e){return e?Math.ceil(e.length/4):0}function _t(e){let t=0;if(typeof e.content==`string`)t=gt(e.content);else if(Array.isArray(e.content))for(let n of e.content)if(n.type===`text`&&n.text)t+=gt(n.text);else if(n.type===`tool_use`)t+=gt(n.name),t+=gt(JSON.stringify(n.input));else if(n.type===`tool_result`){let e=n.content;t+=gt(typeof e==`string`?e:JSON.stringify(e))}else n.type===`attachment`&&(t+=gt(n.fileName),t+=gt(n.mimeType),t+=gt(n.path),t+=ht(n));return t+4}function vt(e,t){if(!e)return``;if(e.length<=t)return e;let n=e.slice(0,t).lastIndexOf(`
|
|
2
2
|
`),r=n>t*.5?n:t;return`${e.slice(0,r)}\n[...truncated ${e.length-r} chars]`}function yt(e,t){let{contextLimit:n,systemPromptTokens:r,maxOutputTokens:i,skimTop:a=!1}=t;if(e.length===0)return{messages:[],estimatedTokens:0,truncatedCount:0,contextLimit:n,usagePercent:0};let o=Math.max(0,n-r-i),s=Math.min(25e3,Math.max(1e3,Math.floor(o*.6*4))),c=e.map(e=>bt(e,s)),l=0,u=c.length,d=null,f=0;if(a&&c.length>0){let e=c[0];(e.role===`user`||e.role===`system`)&&(f=_t(e),f<=o&&(d=e))}let p=o-f;for(let e=c.length-1;e>=+!!d;e--){let t=_t(c[e]),n=c[e],r=!1;if(n.role===`user`&&Array.isArray(n.content)&&n.content.some(e=>e.type===`tool_result`)){let n=c[e-1];n&&n.role===`assistant`&&Array.isArray(n.content)&&n.content.some(e=>e.type===`tool_use`)&&(r=!0,t+=_t(n))}if(l+t>p&&e<c.length-1)break;l+=t,r?(u=e-1,e--):u=e}let m=c.slice(u),h=u;d&&u>0&&(m=[d,...m],h=Math.max(0,u-1));let g=l+f,_=g+r,v=n>0?Math.round(_/n*100*10)/10:0;return{messages:m,estimatedTokens:g,truncatedCount:h,contextLimit:n,usagePercent:v}}function bt(e,t){if(!Array.isArray(e.content))return e;let n=e.content.map(e=>e.type===`tool_result`&&typeof e.content==`string`?{...e,content:vt(e.content,t)}:e);return{...e,content:n}}function xt(e=``,t=``){let n=e.toLowerCase(),r=t.toLowerCase();return n.startsWith(`text/`)||n.includes(`json`)||n.includes(`xml`)||r.endsWith(`.md`)||r.endsWith(`.txt`)?`text`:n.startsWith(`image/`)?`image`:n.startsWith(`audio/`)?`audio`:n.startsWith(`video/`)?`video`:n===`application/pdf`||r.endsWith(`.pdf`)?`document`:`file`}function St(e){let t=(e||``).toLowerCase(),n=l.getModelInfo(t);if(n){let e=n.supportsImageInput===!0||n.routesByRequestFeatures===!0,t=n.supportsAudioInput===!0||n.routesByRequestFeatures===!0,r=n.supportsVideoInput===!0||n.routesByRequestFeatures===!0,i=n.supportsDocumentInput===!0||n.routesByRequestFeatures===!0;if(n.supportsImageInput!==void 0||n.supportsAudioInput!==void 0||n.supportsVideoInput!==void 0||n.supportsDocumentInput!==void 0||n.routesByRequestFeatures)return{images:e,audio:t,video:r,documents:i,routerByFeatures:!!n.routesByRequestFeatures,source:`metadata`}}let r=[`gpt-4o`,`gpt-4.1`,`claude-3`,`claude-4`,`claude-sonnet`,`claude-haiku`,`claude-opus`,`gemini`,`llava`,`qwen-vl`,`pixtral`].some(e=>t.includes(e)),i=t.includes(`claude-3-5`)||t.includes(`claude-3.5`)||t.includes(`claude-3-7`)||t.includes(`claude-3.7`)||t.includes(`claude-4`)||t.includes(`gemini`)||/claude-(?:sonnet|haiku|opus)-\d/.test(t);return r?{images:!0,audio:t.includes(`omni`)||t.includes(`audio`),video:t.includes(`omni`)||t.includes(`video`),documents:i,routerByFeatures:t===`openrouter/free`,source:`heuristic`}:{images:!1,audio:!1,video:!1,documents:!1,routerByFeatures:t===`openrouter/free`,source:`unknown`}}function Ct(e){let t=St(e),n=[t.images?`images native`:`images fallback`,t.audio?`audio native`:`audio fallback`,t.video?`video native`:`video fallback`,t.documents?`PDFs native`:`PDFs fallback`];return t.routerByFeatures&&n.push(`router can adapt by request features`),n.join(` · `)}async function wt(e,t,n){let r=await ie(e,t),{dirs:i,filename:a}=de(n),o=r;for(let e of i)o=await o.getDirectoryHandle(e);let s=await o.getFileHandle(a);try{let e=await s.createSyncAccessHandle(),t=e.getSize(),n=new Uint8Array(t);return e.read(n,{at:0}),e.close(),n}catch{let e=await(await s.getFile()).arrayBuffer();return new Uint8Array(e)}}function Tt(e,t){return new Promise(async(n,r)=>{try{let i=await y();if(!i)return r(Error(`failed to get transaction, cannot get recent messages.`));let a=i.transaction(`messages`,`readonly`);if(!a)return r(Error(`failed to get transaction`));let o=a.objectStore(`messages`).index(`by-group-time`),s=IDBKeyRange.bound([e,0],[e,1/0]),c=o.openCursor(s,`prev`),l=[];c.onsuccess=()=>{let e=c.result;e&&l.length<t?(l.push(e.value),e.continue()):n(l.reverse())},c.onerror=()=>r(c.error)}catch(e){r(e)}})}const Et=5*1024*1024,Dt=20*1024*1024;async function Ot(e,t){let n=await Tt(e,t),r=await y();return await Promise.all(n.map(async t=>{if(t.isFromMe)return{role:`assistant`,content:t.content};let n=`${t.sender}: ${t.content}`,i=await kt(r,e,t.attachments||[]);return i.length===0?{role:`user`,content:n}:{role:`user`,content:[{type:`text`,text:n},...i]}}))}async function kt(e,t,n){let r=[];for(let i of n){let n=i.mimeType||`application/octet-stream`,a=xt(n,i.fileName),o=a===`text`?`file`:a===`document`?`document`:a,s={type:`attachment`,mediaType:o,fileName:i.fileName,mimeType:n,size:i.size,path:i.path};if(e&&o===`image`&&i.path&&(i.size||0)<=3145728)try{s.data=At(await wt(e,t,i.path))}catch{}if(e&&o===`audio`&&i.path&&(i.size||0)<=Et)try{s.data=At(await wt(e,t,i.path))}catch{}if(e&&o===`document`&&i.path&&(i.size||0)<=Dt)try{s.data=At(await wt(e,t,i.path))}catch{}if(e&&o===`audio`&&i.path&&(i.size||0)<=Et)try{s.data=At(await wt(e,t,i.path))}catch{}if(e&&o===`document`&&i.path&&(i.size||0)<=Dt)try{s.data=At(await wt(e,t,i.path))}catch{}r.push(s)}return r}function At(e){let t=``,n=32768;for(let r=0;r<e.length;r+=n){let i=e.subarray(r,r+n);t+=String.fromCharCode(...i)}return btoa(t)}const jt=`group_metadata`;async function Mt(e){let t=await x(e,jt);if(!t)return[];try{return JSON.parse(t)}catch{return[]}}async function Nt(e,t){await k(e,jt,JSON.stringify(t))}async function Pt(e,t,n=`br:`,r){let i=await Mt(e),a={groupId:`${n}${r??he()}`,name:t,createdAt:Date.now()};return i.push(a),await Nt(e,i),a}async function Ft(e,t,n){let r=await Mt(e),i=r.find(e=>e.groupId===t);i&&(i.name=n),await Nt(e,r)}async function It(e,t,n){let r=await Mt(e),i=r.find(e=>e.groupId===t);i&&(n&&n.length>0?i.toolTags=n:delete i.toolTags),await Nt(e,r)}async function Lt(e,t){await Nt(e,(await Mt(e)).filter(e=>e.groupId!==t))}async function Rt(e){let t=await Mt(e);if(t.length===0){let t={groupId:p,name:`Main`,createdAt:0};return await Nt(e,[t]),[t]}return t}async function zt(e,t){let n=await Mt(e),r=new Map(n.map(e=>[e.groupId,e])),i=[];for(let e of t){let t=r.get(e);t&&(i.push(t),r.delete(e))}for(let e of n)r.has(e.groupId)&&i.push(e);await Nt(e,i)}async function Bt(e,t){let n=await Mt(e),r=n.find(e=>e.groupId===t);if(!r)return null;let i=t.indexOf(`:`),a={groupId:`${i>=0?t.slice(0,i+1):`br:`}${he()}`,name:`${r.name} (copy)`,createdAt:Date.now(),pinnedMaxTokens:r.pinnedMaxTokens,providerRuntimeOverrides:r.providerRuntimeOverrides?JSON.parse(JSON.stringify(r.providerRuntimeOverrides)):void 0,subagentModelSelectionMode:r.subagentModelSelectionMode,subagentMaxTokens:r.subagentMaxTokens,subagentPinnedProvider:r.subagentPinnedProvider,subagentPinnedModel:r.subagentPinnedModel,subagentFastProvider:r.subagentFastProvider,subagentFastModel:r.subagentFastModel,subagentSmartProvider:r.subagentSmartProvider,subagentSmartModel:r.subagentSmartModel,subagentPowerfulProvider:r.subagentPowerfulProvider,subagentPowerfulModel:r.subagentPowerfulModel,toolTags:r.toolTags?[...r.toolTags]:void 0};return n.push(a),await Nt(e,n),a}async function Vt(e,t,n,r,i){let a=await Mt(e),o=a.find(e=>e.groupId===t);o&&(n?o.pinnedProvider=n:delete o.pinnedProvider,r?o.pinnedModel=r:delete o.pinnedModel,typeof i==`number`&&Number.isFinite(i)&&i>0?o.pinnedMaxTokens=Math.floor(i):delete o.pinnedMaxTokens),await Nt(e,a)}async function Ht(e,t,n,r,i,a){let o=await Mt(e),s=o.find(e=>e.groupId===t);s&&(s.subagentModelSelectionMode=n,n===`manual`?(r?s.subagentPinnedProvider=r:delete s.subagentPinnedProvider,i?s.subagentPinnedModel=i:delete s.subagentPinnedModel):(delete s.subagentPinnedProvider,delete s.subagentPinnedModel),typeof a==`number`&&Number.isFinite(a)&&a>0?s.subagentMaxTokens=Math.floor(a):delete s.subagentMaxTokens),await Nt(e,o)}async function Ut(e,t,n){let r=await Mt(e),i=r.find(e=>e.groupId===t);i&&(n&&Object.keys(n).length>0?i.providerRuntimeOverrides=JSON.parse(JSON.stringify(n)):delete i.providerRuntimeOverrides),await Nt(e,r)}const Wt=[/<\|start_header_id\|>\s*(?:system|user|assistant|tool)\s*<\|end_header_id\|>/gi,/<\|(?:begin_of_text|end_of_text|eot_id|im_start|im_end|end_of_message)\|>/gi,/<\|(?:startofturn|endofturn|start_of_turn|end_of_turn)\|>/gi,/<\|(?:image|audio|video|tool_call|tool_response|tool_result|function_call)\|>|<\|\/function_call\|>/gi,/<|(?:system|user|assistant|im_start|im_end)|>/g,/\[\s*INST\s*\]|\[\s*\/INST\s*\]|<<\s*SYS\s*>>|<<\s*\/SYS\s*>>/gi,/<\/?s>|<\/?bos>|<\/?eos>|<\|(?:bos|eos|pad|unk)\|>/gi,/<\|(?:START_OF_TURN_TOKEN|END_OF_TURN_TOKEN|CHATBOT_TOKEN|USER_TOKEN|SYSTEM_TOKEN)\|>/gi,/<\|(?:system|user|assistant|end|endoftext|placeholder\d*)\|>/gi,/<|(?:begin▁of▁sentence|end▁of▁sentence)|>/g,/<\|start\|>\s*(?:system|user|assistant|tool)\s*<\|message\|>/gi];function Gt(e){for(let t of Wt)if(t.test(e))return!0;return!1}function Kt(e){let t=String(e||``),n=t;for(let e of Wt)t=t.replace(e,``);return t!==n&&(t=t.replace(/^[ \t]+$/gm,``),t=t.replace(/\n{3,}/g,`
|
|
3
3
|
|
|
4
4
|
`)),t}function qt(e,t){let n=Kt(e);return n!==e&&Gt(e)&&console.info(`[ShadowClaw] Chat-template control token(s) detected and stripped from "${t}" output. The provider or model may not be applying its chat template correctly. Original length: ${e.length}, cleaned length: ${n.length}.`),n}function Jt(e,t,n,r){return{type:`thinking-log`,payload:{groupId:e,level:t,timestamp:Date.now(),label:n,message:r||``}}}function Yt(e,t,n){return{type:`tool-activity`,payload:{groupId:e,tool:t,status:n}}}async function Xt(e,t,n,r){let{dirs:i,filename:a}=de(n);for(let n=0;n<2;n++)try{let n=await ie(e,t);for(let e of i)n=await n.getDirectoryHandle(e,{create:!0});let o=await n.getFileHandle(a,{create:!0});try{await pe(o,r);return}catch(t){if(!((t instanceof Error?t.message:String(t)).includes(`Writable file streams are not supported`)&&(await D(e)).type===`opfs`))throw t}let s=t.replace(/:/g,`-`);await oe([ne(),`groups`,s,...i,a],r);return}catch(e){if(n===0&&re(e)){te();continue}throw e}}let Zt=null;function Qt(e){Zt=e}const $t=new Map;function en(e,t){$t.set(e,t)}function tn(e){$t.delete(e)}function nn(e){let t=e?.payload?.groupId;if(t&&$t.has(t)){$t.get(t).push(e);return}if(Zt){Zt(e);return}typeof self<`u`&&typeof self.postMessage==`function`&&self.postMessage(e)}function rn(e,t){let n=RegExp(`<${t}[^>]*>`,`i`),r=e.match(n);if(!r||r.index===void 0)return null;let i=r.index+r[0].length,a=RegExp(`</${t}>`,`i`),o=e.slice(i).match(a);return!o||o.index===void 0?null:e.slice(i,i+o.index)}function an(e,t){let n=e;for(let e of t)n=n.replace(RegExp(`<${e}[^>]*>[\\s\\S]*?</${e}>`,`gi`),``);return n}function on(e){let t=e;return t=t.replace(/<[^>]+>/g,` `),t=t.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`).replace(/'/g,`'`).replace(/ /g,` `).replace(/&#\d+;/g,``),t=t.replace(/[ \t]+/g,` `).replace(/\n\s*\n/g,`
|
|
@@ -1942,7 +1942,7 @@ const restoreGlobals = applyGlobalShadows();
|
|
|
1942
1942
|
`);for(let e=0;e<o.length;e++){let t=o[e],n;if(d){let e=t.length>JH?t.slice(0,JH):t;n=d.test(e)}else n=t.includes(i);if(n){let n=t.length>500?t.slice(0,500)+`…`:t;if(p.push(`${r}:${e+1}: ${n}`),p.length>=500){p.push(`... (results truncated at 500 matches)`),g=!0;return}}}}}}return await _(a||`.`),h&&p.push(`... (file visit limit of ${l} reached; narrow your search with path or file_glob)`),p.length===0?`No matches found.`:p.join(`
|
|
1943
1943
|
`)}async function ZH(e,t,n){if(!t.path||typeof t.path!=`string`)return`Error: send_file requires a valid path string.`;let r=n.startsWith(`peer:`),i=n.startsWith(`room:`);if(!r&&!i)return`Error: send_file only works in peer or room conversations (groupId must start with 'peer:' or 'room:'). The current conversation is not a peer session.`;let a=Jz(t.path);return a?qz(a)?`Error: send_file path cannot contain '..' segments.`:await ae(e,n,a)?(nn({payload:{groupId:n,path:a},type:`send-file`}),`Sending file to ${i?`room`:`peer`}: ${a}. The transfer will proceed in the background — you can continue chatting.`):`Error: send_file could not find ${a} in the workspace.`:`Error: send_file received an empty file path.`}async function QH(e,t,n){return await ue(e,n,`MEMORY.md`,t.content),`Memory updated successfully.`}async function $H(e,t,n){return await ue(e,n,t.path,t.content),`Written ${t.content.length} bytes to ${t.path}`}const eU=2e3;async function tU(e,t=p){let n=[],r=[],i=t===`br:main`?[p]:[t,p];for(let a of i)try{let i=await ie(e,a),o=[],s=0;async function c(e,t){if(s+=1,s>eU){r.push({path:`.agents/skills`,message:`Skill discovery stopped after ${eU} directories`});return}for await(let[n,r]of e.entries()){let e=t?`${t}/${n}`:n;r.kind===`directory`?await c(r,e):n===`SKILL.md`&&e.startsWith(`.agents/skills/`)&&o.push(e)}}try{await c(await(await i.getDirectoryHandle(`.agents`)).getDirectoryHandle(`skills`),`.agents/skills`)}catch{continue}for(let i of o.sort())try{let o=fe(i,await ce(e,a,i));if(n.some(e=>e.name===o.name)){a===t&&r.push({path:i,message:`Duplicate skill name: ${o.name}`});continue}o.groupId=a,n.push(o)}catch(e){r.push({path:i,message:e instanceof Error?e.message:String(e)})}}catch{}return{skills:n,diagnostics:r}}async function nU(e,t=p,n){let r=(await tU(e,t)).skills.find(e=>e.name===n);if(!r)return null;let i=r.groupId||t,a=fe(r.path,await ce(e,i,r.path));return a.groupId=i,a.resources=await rU(e,i,a.basePath),a}async function rU(e,t,n){let r=await ie(e,t),i=n.split(`/`).filter(Boolean),a=r;for(let e of i)a=await a.getDirectoryHandle(e);let o=[];async function s(e,t){for await(let[r,i]of e.entries()){let e=`${t}/${r}`;i.kind===`directory`?await s(i,e):e!==`${n}/SKILL.md`&&o.push(e)}}return await s(a,n),o.sort()}async function iU(e,t,n){let r=typeof t.name==`string`?t.name.trim():``,i=await tU(e,n),a=i.skills.map(e=>e.name),o=a.length>0?a.join(`, `):`(none)`;if(!r){let e=`Error: activate_skill requires a skill name. Available skills: ${o}.`;return i.diagnostics.length>0&&(e+=` (Note: ${i.diagnostics.length} skill file(s) had errors: ${i.diagnostics.map(e=>`${e.path}: ${e.message}`).join(`; `)})`),e}let s=await nU(e,n,r);if(!s){let e=i.diagnostics.find(e=>e.path.toLowerCase().includes(r.toLowerCase())||e.message.toLowerCase().includes(r.toLowerCase()));if(e)return`Error: skill "${r}" was found at "${e.path}" but failed to load: ${e.message}. Please fix the frontmatter in SKILL.md. Available skills: ${o}.`;let t=`Error: skill "${r}" was not found in this conversation workspace. Available skills: ${o}.`;return i.diagnostics.length>0&&(t+=` (Note: ${i.diagnostics.length} skill file(s) had errors: ${i.diagnostics.map(e=>`${e.path}: ${e.message}`).join(`; `)})`),t}return s.disableModelInvocation?`Error: skill "${r}" is not available for model-driven activation.`:[`<skill_content name="${s.name}">`,s.body||`(This skill has no instructions.)`,`Skill directory: ${s.basePath}`,`Resolve all relative paths against the skill directory.`,s.resources&&s.resources.length>0?[`<skill_resources>`,...s.resources.map(e=>` <file>${e}</file>`),`</skill_resources>`].join(`
|
|
1944
1944
|
`):``,`</skill_content>`].filter(Boolean).join(`
|
|
1945
|
-
`)}async function aU(e,t,n){let r=he();return nn({type:`request-native-ai-task`,payload:{id:r,groupId:e,taskType:t,input:n}}),await new Promise((e,t)=>{globalThis.pendingNativeAiResolvers=globalThis.pendingNativeAiResolvers||{},globalThis.pendingNativeAiResolvers[r]={resolve:e,reject:t}})}async function oU(e,t){let n=String(e.text||``).trim();if(!n)return`Error: text is required for summarize_text`;try{return await aU(t,`summarize`,{text:n,type:e.type,format:e.format,length:e.length,preference:e.preference,context:e.context})}catch(e){return`Error summarizing text: ${e instanceof Error?e.message:String(e)}`}}async function sU(e,t){let n=String(e.prompt||``).trim();if(!n)return`Error: prompt is required for write_text`;try{return await aU(t,`write`,{prompt:n,context:e.context})}catch(e){return`Error writing text: ${e instanceof Error?e.message:String(e)}`}}async function cU(e,t){let n=String(e.text||``).trim();if(!n)return`Error: text is required for rewrite_text`;try{return await aU(t,`rewrite`,{text:n,tone:e.tone,length:e.length,context:e.context})}catch(e){return`Error rewriting text: ${e instanceof Error?e.message:String(e)}`}}async function lU(e,t){let n=String(e.text||``).trim();if(!n)return`Error: text is required for proofread_text`;try{return await aU(t,`proofread`,{text:n,context:e.context})}catch(e){return`Error proofreading text: ${e instanceof Error?e.message:String(e)}`}}async function uU(e,t){let n=String(e.text||``).trim();if(!n)return`Error: text is required for detect_language`;try{let e=await aU(t,`detect-language`,{text:n});return JSON.stringify(e,null,2)}catch(e){return`Error detecting language: ${e instanceof Error?e.message:String(e)}`}}async function dU(e,t){let n=String(e.text||``).trim(),r=String(e.sourceLanguage||``).trim(),i=String(e.targetLanguage||``).trim();if(!n||!r||!i)return`Error: text, sourceLanguage, and targetLanguage are required for translate_text`;try{return await aU(t,`translate`,{text:n,sourceLanguage:r,targetLanguage:i})}catch(e){return`Error translating text: ${e instanceof Error?e.message:String(e)}`}}function fU(e,t,n,r){let i=t*2**e,a=Math.min(i,n),o=a*r*Math.random();return Math.max(0,a-o)}function pU(e,t){return new Promise((n,r)=>{if(t?.aborted){r(t.reason??new DOMException(`Aborted`,`AbortError`));return}let i=setTimeout(n,e);if(t){let e=()=>{clearTimeout(i),r(t.reason??new DOMException(`Aborted`,`AbortError`))};t.addEventListener(`abort`,e,{once:!0});let a=n;n=(n=>{t.removeEventListener(`abort`,e),a(n)})}})}async function mU(e,t={}){let{maxRetries:n=3,baseDelayMs:r=1e3,maxDelayMs:i=3e4,jitterFactor:a=.5,shouldRetry:o=()=>!0,onRetry:s,signal:c}=t,l;for(let t=0;t<=n;t++){if(c?.aborted)throw c.reason??new DOMException(`Aborted`,`AbortError`);try{return await e()}catch(e){if(l=e,e instanceof DOMException&&e.name===`AbortError`||e instanceof Error&&e.name===`AbortError`)throw e;if(t>=n||!o(e,t+1))break;let u=fU(t,r,i,a);s&&s(t+1,n,u,e),await pU(u,c)}}throw l}const hU=new Set([408,429,500,502,503,504]);function gU(e){if(e instanceof TypeError)return!0;if(typeof e?.status==`number`)return hU.has(e.status);if(e instanceof Error){let t=e.message,n=t.match(/\b(4\d{2}|5\d{2})\b/);if(n)return hU.has(Number(n[1]));if(/network|ECONNRESET|ECONNREFUSED|ETIMEDOUT|fetch failed|EAI_AGAIN|EAI_NONAME|getaddrinfo/i.test(t))return!0}return!1}function _U(e){return e instanceof TypeError?!0:e&&typeof e.status==`number`?hU.has(e.status):e instanceof Error&&/network|ECONNRESET|ECONNREFUSED|ETIMEDOUT|fetch failed|EAI_AGAIN|EAI_NONAME|getaddrinfo/i.test(e.message)}let vU=null;async function yU(){return vU||=import(`./git-BDaM5VT5.js`),vU}function bU(e){if(!Array.isArray(e))return null;let t=e.map(e=>typeof e==`string`?e:typeof e?.name==`string`?e.name:null).filter(Boolean);return new Set(t)}async function xU(e,t,n,r,i={}){try{let a=bU(i.allowedTools);if(a&&!a.has(t))return`Tool "${t}" is not allowed in the current context. Do not call it again. Use one of the available tools or ask for help.`;if((i.isScheduledTask||i.isTaskExecution)&&t===`run_task`)return`Tool "run_task" cannot be called from within a task execution to prevent infinite loops.`;if(i.isScheduledTask&&new Set([`create_task`,`update_task`,`delete_task`,`enable_task`,`disable_task`,`send_notification`,`create_room`,`invite_to_room`,`leave_room`]).has(t))return`Tool "${t}" is not allowed during scheduled task execution to prevent recursion.`;switch(t){case`bash`:return await Nz(e,n,r);case`read_file`:return await qH(e,n,r);case`open_file`:return await HH(e,n,r);case`attach_file_to_chat`:return await kH(e,n,r);case`send_file`:return await ZH(e,n,r);case`write_file`:return await $H(e,n,r);case`delete_file`:return await LH(e,n,r);case`move_file`:return await VH(e,n,r);case`copy_file`:return await PH(e,n,r);case`create_directory`:return await FH(e,n,r);case`patch_file`:return await UH(e,n,r);case`list_files`:return await zH(e,n,r);case`manage_tools`:return xH(n,r);case`list_tool_profiles`:return await bH(e);case`fetch_url`:return await nB(e,n,r,{buildAuthHeaders:Ce,fetchImpl:fetch,fetchMaxResponse:d,isRetryableFetchError:_U,post:nn,resolveGitCredentials:Oe,resolveServiceCredentials:Ee,retryableStatusCodes:hU,stripHtml:sn,uploadGroupFile:Xt,withRetry:mU});case`fetch_file`:return await Qz(e,n,r,{buildAuthHeaders:Ce,fetchImpl:fetch,isRetryableFetchError:_U,post:nn,resolveGitCredentials:Oe,resolveServiceCredentials:Ee,retryableStatusCodes:hU,uploadGroupFile:Xt,withRetry:mU,writeGroupFile:ue});case`update_memory`:return await QH(e,n,r);case`create_task`:return eH(n,r);case`javascript`:return await vH(e,n);case`activate_skill`:return await iU(e,n,r);case`list_tasks`:return await aH(e,r);case`update_task`:return await sH(e,n,r);case`enable_task`:return await iH(e,n,r);case`disable_task`:return await rH(e,n,r);case`delete_task`:return tH(n,r);case`run_task`:return await oH(e,n,r);case`clear_chat`:return lH(r);case`show_toast`:return TH(n);case`send_notification`:return wH(n,r);case`create_room`:return vB(n);case`invite_to_room`:return OB(n,r);case`leave_room`:return kB(n,r);case`list_room_members`:return await AB(e,n,r);case`manage_email`:case`manage_integration`:return Kz(e,n,r);case`email_read_messages`:case`integration_read_messages`:return xU(e,`manage_email`,{...n,action:`read_messages`},r);case`email_send_message`:case`integration_send_message`:return xU(e,`manage_email`,{...n,action:`send_message`},r);case`remote_mcp_list_tools`:return await gB(e,n,r,{callRemoteMcpTool:ke,listRemoteMcpTools:we,McpReauthRequiredError:De,post:nn});case`remote_mcp_call_tool`:return await _B(e,n,r,{callRemoteMcpTool:ke,listRemoteMcpTools:we,McpReauthRequiredError:De,post:nn});case`git_clone`:case`git_checkout`:case`git_branch`:case`git_status`:case`git_add`:case`git_log`:case`git_diff`:case`git_branches`:case`git_list_repos`:case`git_delete_repo`:case`git_commit`:case`git_pull`:case`git_push`:case`git_merge`:case`git_reset`:case`git_fetch`:case`git_read_file_at_ref`:case`git_show`:case`git_delete_branch`:case`git_init`:case`git_tag`:case`git_remote`:case`git_config`:case`git_unstage`:{let i=await yU();return await cB(e,t,n,r,{configKeys:{GIT_CORS_PROXY:m.GIT_CORS_PROXY,GIT_PROXY_URL:m.GIT_PROXY_URL,GIT_AUTHOR_NAME:m.GIT_AUTHOR_NAME,GIT_AUTHOR_EMAIL:m.GIT_AUTHOR_EMAIL},getConfig:x,getGroupDir:ie,getProxyUrl:i.getProxyUrl,getRemoteUrl:i.getRemoteUrl,gitAdd:i.gitAdd,gitBranch:i.gitBranch,gitCheckout:i.gitCheckout,gitClone:i.gitClone,gitCommit:i.gitCommit,gitConfig:i.gitConfig,gitDeleteBranch:i.gitDeleteBranch,gitDeleteRepo:i.gitDeleteRepo,gitDiff:i.gitDiff,gitFetch:i.gitFetch,gitInit:i.gitInit,gitListBranches:i.gitListBranches,gitListRepos:i.gitListRepos,gitListTags:i.gitListTags,gitLog:i.gitLog,gitMerge:i.gitMerge,gitPull:i.gitPull,gitPush:i.gitPush,gitReadFileAtRef:i.gitReadFileAtRef,gitRemote:i.gitRemote,gitReset:i.gitReset,gitShow:i.gitShow,gitStatus:i.gitStatus,gitTag:i.gitTag,gitUnstage:i.gitUnstage,readGroupFile:ce,resolveGitCredentials:Oe})}case`list_components`:return yH();case`render_component`:return CH(n,r);case`spawn_subagent`:return i.invokeContext?await $V(n,r,i.invokeContext):`Error: spawn_subagent requires an active agent invocation context. This tool cannot be called directly.`;case`get_current_time`:return uH(n);case`search_files`:return await XH(e,n,r,{maxFileBytes:me.searchFilesMaxFileBytes,maxFilesVisited:me.searchFilesMaxFilesVisited,skipDirs:me.searchFilesSkipDirsSet});case`diff_files`:return await RH(e,n,r);case`ask_user`:return await cH(n,r);case`web_search`:return await EH(n);case`summarize_text`:return await oU(n,r);case`write_text`:return await sU(n,r);case`rewrite_text`:return await cU(n,r);case`proofread_text`:return await lU(n,r);case`detect_language`:return await uU(n,r);case`translate_text`:return await dU(n,r);default:{let a=await le(e,r,t);if(!a)return`Unknown tool: ${t}`;let o=i.declarativeDepth||0;if(o>=8)return`Tool error (${t}): declarative tool nesting limit exceeded.`;if(a.execution.type===`tool`){let s=a.execution.name;return s?await xU(e,s,a.execution.input?{...n,...a.execution.input}:n,r,{...i,declarativeDepth:o+1}):`Tool error (${t}): declarative tool target is missing.`}return a.execution.type===`bash`?await Nz(e,{command:a.execution.command,stdin:JSON.stringify(n)},r):await vH(e,{code:a.execution.code,data:JSON.stringify(n)})}}}catch(e){return`Tool error (${t}): ${e instanceof Error?e.message:String(e)}`}}const SU=ve.filter(e=>se.enabledToolNames.includes(e.name));function CU(){let e=globalThis.LanguageModel;return!e||typeof e!=`function`||typeof e.availability!=`function`||typeof e.create!=`function`?null:e}function wU(){return!!CU()}function TU(){return!0}const EU={expectedInputs:[{type:`text`,languages:[`en`]}],expectedOutputs:[{type:`text`,languages:[`en`]}]},DU={key:null,session:null,cleanupTimer:null};function OU(){DU.cleanupTimer&&=(clearTimeout(DU.cleanupTimer),null)}async function kU(){if(OU(),!DU.session){DU.key=null;return}await Promise.resolve(DU.session.destroy?.()).catch(()=>{}),DU.session=null,DU.key=null}function AU(){OU(),DU.cleanupTimer=setTimeout(()=>{kU()},1e4)}function jU(e){return typeof e?.content==`string`?e.content:Array.isArray(e?.content)?e.content.map(e=>e?.type===`text`?e.text||``:e?.type===`tool_use`?`[TOOL_CALL ${e.name}] ${JSON.stringify(e.input||{})}`:e?.type===`tool_result`?`[TOOL_RESULT ${e.tool_use_id}] ${String(e.content||``)}`:e?.type===`attachment`?`[ATTACHMENT ${e.mediaType}] ${e.fileName} (${e.mimeType})`:``).filter(Boolean).join(`
|
|
1945
|
+
`)}async function aU(e,t,n){let r=he();return nn({type:`request-native-ai-task`,payload:{id:r,groupId:e,taskType:t,input:n}}),await new Promise((e,t)=>{globalThis.pendingNativeAiResolvers=globalThis.pendingNativeAiResolvers||{},globalThis.pendingNativeAiResolvers[r]={resolve:e,reject:t}})}async function oU(e,t){let n=String(e.text||``).trim();if(!n)return`Error: text is required for summarize_text`;try{return await aU(t,`summarize`,{text:n,type:e.type,format:e.format,length:e.length,preference:e.preference,context:e.context})}catch(e){return`Error summarizing text: ${e instanceof Error?e.message:String(e)}`}}async function sU(e,t){let n=String(e.prompt||``).trim();if(!n)return`Error: prompt is required for write_text`;try{return await aU(t,`write`,{prompt:n,context:e.context})}catch(e){return`Error writing text: ${e instanceof Error?e.message:String(e)}`}}async function cU(e,t){let n=String(e.text||``).trim();if(!n)return`Error: text is required for rewrite_text`;try{return await aU(t,`rewrite`,{text:n,tone:e.tone,length:e.length,context:e.context})}catch(e){return`Error rewriting text: ${e instanceof Error?e.message:String(e)}`}}async function lU(e,t){let n=String(e.text||``).trim();if(!n)return`Error: text is required for proofread_text`;try{return await aU(t,`proofread`,{text:n,context:e.context})}catch(e){return`Error proofreading text: ${e instanceof Error?e.message:String(e)}`}}async function uU(e,t){let n=String(e.text||``).trim();if(!n)return`Error: text is required for detect_language`;try{let e=await aU(t,`detect-language`,{text:n});return JSON.stringify(e,null,2)}catch(e){return`Error detecting language: ${e instanceof Error?e.message:String(e)}`}}async function dU(e,t){let n=String(e.text||``).trim(),r=String(e.sourceLanguage||``).trim(),i=String(e.targetLanguage||``).trim();if(!n||!r||!i)return`Error: text, sourceLanguage, and targetLanguage are required for translate_text`;try{return await aU(t,`translate`,{text:n,sourceLanguage:r,targetLanguage:i})}catch(e){return`Error translating text: ${e instanceof Error?e.message:String(e)}`}}function fU(e,t,n,r){let i=t*2**e,a=Math.min(i,n),o=a*r*Math.random();return Math.max(0,a-o)}function pU(e,t){return new Promise((n,r)=>{if(t?.aborted){r(t.reason??new DOMException(`Aborted`,`AbortError`));return}let i=setTimeout(n,e);if(t){let e=()=>{clearTimeout(i),r(t.reason??new DOMException(`Aborted`,`AbortError`))};t.addEventListener(`abort`,e,{once:!0});let a=n;n=(n=>{t.removeEventListener(`abort`,e),a(n)})}})}async function mU(e,t={}){let{maxRetries:n=3,baseDelayMs:r=1e3,maxDelayMs:i=3e4,jitterFactor:a=.5,shouldRetry:o=()=>!0,onRetry:s,signal:c}=t,l;for(let t=0;t<=n;t++){if(c?.aborted)throw c.reason??new DOMException(`Aborted`,`AbortError`);try{return await e()}catch(e){if(l=e,e instanceof DOMException&&e.name===`AbortError`||e instanceof Error&&e.name===`AbortError`)throw e;if(t>=n||!o(e,t+1))break;let u=fU(t,r,i,a);s&&s(t+1,n,u,e),await pU(u,c)}}throw l}const hU=new Set([408,429,500,502,503,504]);function gU(e){if(e instanceof TypeError)return!0;if(typeof e?.status==`number`)return hU.has(e.status);if(e instanceof Error){let t=e.message,n=t.match(/\b(4\d{2}|5\d{2})\b/);if(n)return hU.has(Number(n[1]));if(/network|ECONNRESET|ECONNREFUSED|ETIMEDOUT|fetch failed|EAI_AGAIN|EAI_NONAME|getaddrinfo/i.test(t))return!0}return!1}function _U(e){return e instanceof TypeError?!0:e&&typeof e.status==`number`?hU.has(e.status):e instanceof Error&&/network|ECONNRESET|ECONNREFUSED|ETIMEDOUT|fetch failed|EAI_AGAIN|EAI_NONAME|getaddrinfo/i.test(e.message)}let vU=null;async function yU(){return vU||=import(`./git-8F7wvoUB.js`),vU}function bU(e){if(!Array.isArray(e))return null;let t=e.map(e=>typeof e==`string`?e:typeof e?.name==`string`?e.name:null).filter(Boolean);return new Set(t)}async function xU(e,t,n,r,i={}){try{let a=bU(i.allowedTools);if(a&&!a.has(t))return`Tool "${t}" is not allowed in the current context. Do not call it again. Use one of the available tools or ask for help.`;if((i.isScheduledTask||i.isTaskExecution)&&t===`run_task`)return`Tool "run_task" cannot be called from within a task execution to prevent infinite loops.`;if(i.isScheduledTask&&new Set([`create_task`,`update_task`,`delete_task`,`enable_task`,`disable_task`,`send_notification`,`create_room`,`invite_to_room`,`leave_room`]).has(t))return`Tool "${t}" is not allowed during scheduled task execution to prevent recursion.`;switch(t){case`bash`:return await Nz(e,n,r);case`read_file`:return await qH(e,n,r);case`open_file`:return await HH(e,n,r);case`attach_file_to_chat`:return await kH(e,n,r);case`send_file`:return await ZH(e,n,r);case`write_file`:return await $H(e,n,r);case`delete_file`:return await LH(e,n,r);case`move_file`:return await VH(e,n,r);case`copy_file`:return await PH(e,n,r);case`create_directory`:return await FH(e,n,r);case`patch_file`:return await UH(e,n,r);case`list_files`:return await zH(e,n,r);case`manage_tools`:return xH(n,r);case`list_tool_profiles`:return await bH(e);case`fetch_url`:return await nB(e,n,r,{buildAuthHeaders:Ce,fetchImpl:fetch,fetchMaxResponse:d,isRetryableFetchError:_U,post:nn,resolveGitCredentials:Oe,resolveServiceCredentials:Ee,retryableStatusCodes:hU,stripHtml:sn,uploadGroupFile:Xt,withRetry:mU});case`fetch_file`:return await Qz(e,n,r,{buildAuthHeaders:Ce,fetchImpl:fetch,isRetryableFetchError:_U,post:nn,resolveGitCredentials:Oe,resolveServiceCredentials:Ee,retryableStatusCodes:hU,uploadGroupFile:Xt,withRetry:mU,writeGroupFile:ue});case`update_memory`:return await QH(e,n,r);case`create_task`:return eH(n,r);case`javascript`:return await vH(e,n);case`activate_skill`:return await iU(e,n,r);case`list_tasks`:return await aH(e,r);case`update_task`:return await sH(e,n,r);case`enable_task`:return await iH(e,n,r);case`disable_task`:return await rH(e,n,r);case`delete_task`:return tH(n,r);case`run_task`:return await oH(e,n,r);case`clear_chat`:return lH(r);case`show_toast`:return TH(n);case`send_notification`:return wH(n,r);case`create_room`:return vB(n);case`invite_to_room`:return OB(n,r);case`leave_room`:return kB(n,r);case`list_room_members`:return await AB(e,n,r);case`manage_email`:case`manage_integration`:return Kz(e,n,r);case`email_read_messages`:case`integration_read_messages`:return xU(e,`manage_email`,{...n,action:`read_messages`},r);case`email_send_message`:case`integration_send_message`:return xU(e,`manage_email`,{...n,action:`send_message`},r);case`remote_mcp_list_tools`:return await gB(e,n,r,{callRemoteMcpTool:ke,listRemoteMcpTools:we,McpReauthRequiredError:De,post:nn});case`remote_mcp_call_tool`:return await _B(e,n,r,{callRemoteMcpTool:ke,listRemoteMcpTools:we,McpReauthRequiredError:De,post:nn});case`git_clone`:case`git_checkout`:case`git_branch`:case`git_status`:case`git_add`:case`git_log`:case`git_diff`:case`git_branches`:case`git_list_repos`:case`git_delete_repo`:case`git_commit`:case`git_pull`:case`git_push`:case`git_merge`:case`git_reset`:case`git_fetch`:case`git_read_file_at_ref`:case`git_show`:case`git_delete_branch`:case`git_init`:case`git_tag`:case`git_remote`:case`git_config`:case`git_unstage`:{let i=await yU();return await cB(e,t,n,r,{configKeys:{GIT_CORS_PROXY:m.GIT_CORS_PROXY,GIT_PROXY_URL:m.GIT_PROXY_URL,GIT_AUTHOR_NAME:m.GIT_AUTHOR_NAME,GIT_AUTHOR_EMAIL:m.GIT_AUTHOR_EMAIL},getConfig:x,getGroupDir:ie,getProxyUrl:i.getProxyUrl,getRemoteUrl:i.getRemoteUrl,gitAdd:i.gitAdd,gitBranch:i.gitBranch,gitCheckout:i.gitCheckout,gitClone:i.gitClone,gitCommit:i.gitCommit,gitConfig:i.gitConfig,gitDeleteBranch:i.gitDeleteBranch,gitDeleteRepo:i.gitDeleteRepo,gitDiff:i.gitDiff,gitFetch:i.gitFetch,gitInit:i.gitInit,gitListBranches:i.gitListBranches,gitListRepos:i.gitListRepos,gitListTags:i.gitListTags,gitLog:i.gitLog,gitMerge:i.gitMerge,gitPull:i.gitPull,gitPush:i.gitPush,gitReadFileAtRef:i.gitReadFileAtRef,gitRemote:i.gitRemote,gitReset:i.gitReset,gitShow:i.gitShow,gitStatus:i.gitStatus,gitTag:i.gitTag,gitUnstage:i.gitUnstage,readGroupFile:ce,resolveGitCredentials:Oe})}case`list_components`:return yH();case`render_component`:return CH(n,r);case`spawn_subagent`:return i.invokeContext?await $V(n,r,i.invokeContext):`Error: spawn_subagent requires an active agent invocation context. This tool cannot be called directly.`;case`get_current_time`:return uH(n);case`search_files`:return await XH(e,n,r,{maxFileBytes:me.searchFilesMaxFileBytes,maxFilesVisited:me.searchFilesMaxFilesVisited,skipDirs:me.searchFilesSkipDirsSet});case`diff_files`:return await RH(e,n,r);case`ask_user`:return await cH(n,r);case`web_search`:return await EH(n);case`summarize_text`:return await oU(n,r);case`write_text`:return await sU(n,r);case`rewrite_text`:return await cU(n,r);case`proofread_text`:return await lU(n,r);case`detect_language`:return await uU(n,r);case`translate_text`:return await dU(n,r);default:{let a=await le(e,r,t);if(!a)return`Unknown tool: ${t}`;let o=i.declarativeDepth||0;if(o>=8)return`Tool error (${t}): declarative tool nesting limit exceeded.`;if(a.execution.type===`tool`){let s=a.execution.name;return s?await xU(e,s,a.execution.input?{...n,...a.execution.input}:n,r,{...i,declarativeDepth:o+1}):`Tool error (${t}): declarative tool target is missing.`}return a.execution.type===`bash`?await Nz(e,{command:a.execution.command,stdin:JSON.stringify(n)},r):await vH(e,{code:a.execution.code,data:JSON.stringify(n)})}}}catch(e){return`Tool error (${t}): ${e instanceof Error?e.message:String(e)}`}}const SU=ve.filter(e=>se.enabledToolNames.includes(e.name));function CU(){let e=globalThis.LanguageModel;return!e||typeof e!=`function`||typeof e.availability!=`function`||typeof e.create!=`function`?null:e}function wU(){return!!CU()}function TU(){return!0}const EU={expectedInputs:[{type:`text`,languages:[`en`]}],expectedOutputs:[{type:`text`,languages:[`en`]}]},DU={key:null,session:null,cleanupTimer:null};function OU(){DU.cleanupTimer&&=(clearTimeout(DU.cleanupTimer),null)}async function kU(){if(OU(),!DU.session){DU.key=null;return}await Promise.resolve(DU.session.destroy?.()).catch(()=>{}),DU.session=null,DU.key=null}function AU(){OU(),DU.cleanupTimer=setTimeout(()=>{kU()},1e4)}function jU(e){return typeof e?.content==`string`?e.content:Array.isArray(e?.content)?e.content.map(e=>e?.type===`text`?e.text||``:e?.type===`tool_use`?`[TOOL_CALL ${e.name}] ${JSON.stringify(e.input||{})}`:e?.type===`tool_result`?`[TOOL_RESULT ${e.tool_use_id}] ${String(e.content||``)}`:e?.type===`attachment`?`[ATTACHMENT ${e.mediaType}] ${e.fileName} (${e.mimeType})`:``).filter(Boolean).join(`
|
|
1946
1946
|
`):``}function MU(e,t=[]){return wV(t,e)}async function NU(e,t,n,r,i){await e({type:`model-download-progress`,payload:{groupId:t,status:n,progress:r,...i?{message:i}:{}}})}async function PU(e,t,n){await e(Jt(t,`info`,`Prompt API`,n))}function FU(e){let t=(e instanceof Error?e.message:String(e||``)).toLowerCase();return t.includes(`unable to create a session`)&&(t.includes(`availability()`)||t.includes(`availability`)||t.includes(`check the result`))}async function IU(e){if(await new Promise(e=>{setTimeout(()=>{e()},500)}),e?.aborted)throw Error(`Prompt API session creation aborted.`)}function LU(e,t){let n=HU(e,t)||`unknown`,r={model:n};[`model`,`modelId`,`modelName`,`name`,`id`].forEach(t=>{let n=e[t];n!==void 0&&(r[t]=n)});let i=Object.entries(r).map(([e,t])=>`${e}=${t}`).join(`, `),a=e.capabilities||{},o=e.metadata||{},s=Object.keys({...a,...o});return[`resolved model: ${n}`,i?`session fields: ${i}`:`session fields: none`,s.length>0?`capabilities: ${s.join(`, `)}`:`capabilities: none`].join(` | `)}async function RU(e,t){try{let n=await fetch(`https://huggingface.co/api/models/${encodeURI(e)}/tree/main?recursive=true`);if(n.ok){let e=await n.json();if(Array.isArray(e)&&e.length>0){let n=e.filter(e=>e.type===`file`),r=n.filter(e=>[`config.json`,`generation_config.json`,`tokenizer.json`,`tokenizer_config.json`,`special_tokens_map.json`,`added_tokens.json`,`chat_template.jinja`,`tokenizer.model`].includes(e.path)).reduce((e,t)=>e+(Number(t.size)||0),0),i=n.filter(e=>{let n=String(e.path||``).toLowerCase();if(!n.endsWith(`.onnx`)&&!n.includes(`.onnx_data`)&&!n.includes(`.onnx.data`)&&!n.includes(`_data`))return!1;if(t){let e=t.toLowerCase();if(n.includes(`model_${e}.`)||n.includes(`model_${e}_`)||n.includes(`_${e}.`)||n.includes(`_${e}_`)||n.includes(`/${e}/`))return!0}return!1});i.length===0&&(i=n.filter(e=>{let t=String(e.path||``).toLowerCase();return(t.includes(`onnx/model.`)||t.includes(`onnx/model_quantized.`)||t.includes(`model.`))&&(t.endsWith(`.onnx`)||t.includes(`.onnx_data`)||t.includes(`.onnx.data`))}));let a=r+i.reduce((e,t)=>e+(Number(t.size)||0),0);if(a>5*1024*1024)return a}}}catch{}let n=[`config.json`,`generation_config.json`,`tokenizer.json`,`tokenizer_config.json`,`special_tokens_map.json`,`onnx/model_${t}.onnx`,`onnx/model_${t}.onnx_data`,`onnx/model_${t}.onnx.data`,`onnx/model.onnx`,`onnx/model.onnx_data`,`onnx/model_quantized.onnx`,`onnx/model_quantized.onnx_data`];try{let t=(await Promise.all(n.map(async t=>{try{let n=await fetch(`https://huggingface.co/${e}/resolve/main/${t}`,{method:`HEAD`});if(n.ok)return parseInt(n.headers.get(`content-length`)||`0`,10)}catch{}return 0}))).reduce((e,t)=>e+t,0);if(t>5*1024*1024)return t}catch{}return JB}async function zU(e,t,n,r=[],i=!0,a,o){await LV();let s=CU();if(!s)throw Error(`Prompt API is unavailable in this browser. Enable Prompt API flags in a supported browser (for example Edge Dev/Canary or Chrome with the required flags) or switch provider.`);let c={...a?.samplingMode?{samplingMode:a.samplingMode}:{},...typeof a?.temperature==`number`&&Number.isFinite(a.temperature)?{temperature:a.temperature}:{},...typeof a?.topK==`number`&&Number.isFinite(a.topK)?{topK:Math.floor(a.topK)}:{}},l=o&&o.length>0?o.map(e=>({name:e.name,description:e.description,inputSchema:e.input_schema,parameters:e.input_schema,...typeof e.execute==`function`?{execute:e.execute}:{}})):void 0,u=await s.availability({...EU,...c,...l?{tools:l}:{},...r&&r.length>0?{initialPrompts:r}:{}});if(await PU(e,t,`availability() returned: ${u}`),u===`unavailable`||u===`no`)throw Error(`Prompt API model is unavailable on this device/browser. Switch provider or enable the feature flags.`);let d=u===`readily`,f=u!==`readily`&&u!==`available`,p=!!globalThis.TRANSFORMERS_CONFIG||u===`available`&&!(`LanguageModel`in globalThis)&&!globalThis.ai?.languageModel,m=0;if(p){let e=globalThis.TRANSFORMERS_CONFIG||{};m=await RU(e.modelName||await FV(),e.dtype||`q4`)}let h=new YB((n,r,i)=>{NU(e,t,n,r,i)},{expectedTotalBytes:m,suppressInitialZero:!0,logEvents:!1});f&&(h.markActive(),await NU(e,t,`running`,u===`downloading`?null:0,`Downloading Prompt API model...`));let g,_=u;try{GB((e,t,n,r)=>{h.onStreamProgress(e,t,n,!!r)});let i=d?{}:{monitor(e){!e||typeof e.addEventListener!=`function`||e.addEventListener(`downloadprogress`,e=>{h.onProgressEvent(e)})}};for(let a=1;a<=4;a++){await PU(e,t,`Creating Prompt API session... (attempt ${a}/4)`);try{g=await IV(s,{...EU,...c,...l?{tools:l}:{},...r.length>0?{initialPrompts:r}:{},signal:n,...i});break}catch(i){if(!(_!==`readily`&&_!==`available`&&_!==`unavailable`&&_!==`no`&&FU(i))||a>=4)throw i;await PU(e,t,`Session creation failed while model is still downloading; retrying shortly...`),_=await s.availability({...EU,...c,...l?{tools:l}:{},...r&&r.length>0?{initialPrompts:r}:{}}),await PU(e,t,`availability() recheck returned: ${_}`),_!==`readily`&&_!==`available`&&_!==`unavailable`&&_!==`no`&&(h.hasEmitted||await NU(e,t,`running`,_===`downloading`?null:0,`Downloading Prompt API model...`)),await IU(n)}}}catch(n){let r=n instanceof Error?n.message:String(n);throw i&&h.onError(n),await PU(e,t,`Session creation failed: ${r}`),n}finally{KB()}return await PU(e,t,LU(g,s)),(f||h.hasEmitted)&&h.onDone(),g}function BU(e){let t=(e instanceof Error?e.message:String(e||``)).toLowerCase();return t.includes(`monitor option`)||t.includes(`downloadprogresscallback`)||t.includes(`dictionary`)||t.includes(`initialprompts`)||t.includes(`not supported`)&&(t.includes(`option`)||t.includes(`monitor`))}function VU(e){let t=e.toLowerCase();return t.includes(`gemma4`)||t.includes(`gemma 4`)||t.includes(`gemma-4`)?`Gemma 4`:t.includes(`nano_v3`)||t.includes(`gemini nano`)||t.includes(`gemini-nano`)||t.includes(`prompt_api`)?`Gemini Nano`:e}function HU(e,t){let n=[e.model,e.modelId,e.modelName,e.id,e.name,t.model,t.modelId,t.modelName,t.id,t.name].find(e=>typeof e==`string`&&e.trim());return n?VU(n.trim()):`Gemini Nano`}async function UU(e,t,n,r,i,a,o=[]){await LV();let s=CU();if(!s)throw Error(`Prompt API is unavailable in this browser. Enable Prompt API flags in a supported browser (for example Edge Dev/Canary or Chrome with the required flags) or switch provider.`);let c=MU(n,o),l={...i?.samplingMode?{samplingMode:i.samplingMode}:{},...typeof i?.temperature==`number`&&Number.isFinite(i.temperature)?{temperature:i.temperature}:{},...typeof i?.topK==`number`&&Number.isFinite(i.topK)?{topK:Math.floor(i.topK)}:{}},u=a&&a.length>0?a.map(e=>({name:e.name,description:e.description,inputSchema:e.input_schema,parameters:e.input_schema})):void 0;return await zU(e,t,r,c,!1,i,a).catch(async n=>{if(!BU(n))throw n;let i;try{i=await IV(s,{...EU,...l,...u?{tools:u}:{},...c.length>0?{initialPrompts:c}:{},signal:r})}catch(n){throw await NU(e,t,`error`,null,n instanceof Error?n.message:String(n)),n}let a=await s.availability({...EU,...l,...u?{tools:u}:{},...c&&c.length>0?{initialPrompts:c}:{}}).catch(()=>`available`);return a!==`readily`&&a!==`available`&&await NU(e,t,`done`,1,`Prompt API model ready.`),i})}async function WU(e,t,n,r,i,a,o=[]){let s=String(n||``)+(o.length?JSON.stringify(o):``);if(OU(),DU.session&&DU.key===s&&typeof DU.session.clone==`function`)try{let e=await DU.session.clone();return AU(),{session:e,destroyAfterUse:!0}}catch{await kU()}await kU();let c=await UU(e,t,n,r,i,a,o);if(typeof c.clone==`function`){DU.session=c,DU.key=s,AU();try{return{session:await c.clone(),destroyAfterUse:!0}}catch{}}return{session:c,destroyAfterUse:!0}}function GU(e,t,n=[],r=!0){let i=r?[`SYSTEM INSTRUCTIONS:`,e,``,`CONVERSATION:`]:[`CONVERSATION:`];for(let e of t){let t=e?.role===`assistant`?`ASSISTANT`:`USER`;if(typeof e?.content==`string`){i.push(`${t}: ${e.content}`);continue}if(Array.isArray(e?.content)){let n=e.content.map(e=>e?.type===`text`?e.text||``:e?.type===`tool_use`?`[TOOL_CALL ${e.name}] ${JSON.stringify(e.input||{})}`:e?.type===`tool_result`?`[TOOL_RESULT ${e.tool_use_id}] ${String(e.content||``)}`:e?.type===`attachment`?`[ATTACHMENT ${e.mediaType}] ${e.fileName} (${e.mimeType})`:``).filter(Boolean).join(`
|
|
1947
1947
|
`);i.push(`${t}: ${n}`);continue}i.push(`${t}:`)}if(n.length>0){i.push(``,`TOOL RESULT HINTS:`);for(let e of n)i.push(`- ${e}`)}return i.join(`
|
|
1948
1948
|
`)}function KU(e){let t=qt(String(e||``),`prompt_api`).trim();if(!t)return null;let n=[...t.matchAll(/<tool_call>([\s\S]*?)<\/tool_call>/g)];if(n.length>0){let e=[];for(let t of n)try{let n=JSON.parse(t[1].trim()),r=n.name||n.function?.name;r&&e.push({id:n.id||`call_${Date.now()}_${e.length}`,name:r,input:n.arguments||n.function?.arguments||n.parameters||n.input||{}})}catch{}if(e.length>0)return{type:`tool_use`,tool_calls:e}}let r=null;try{r=JSON.parse(t)}catch{let e=t.indexOf(`{`),n=t.lastIndexOf(`}`);if(e>=0&&n>e)try{r=JSON.parse(t.slice(e,n+1))}catch{r=null}}if(r&&typeof r==`object`){if(r.type===`tool_use`||Array.isArray(r.tool_calls))return{type:`tool_use`,tool_calls:Array.isArray(r.tool_calls)?r.tool_calls:[],response:typeof r.response==`string`?r.response:void 0};let e=typeof r.response==`string`?r.response:typeof r.text==`string`?r.text:typeof r.message==`string`?r.message:typeof r.content==`string`?r.content:typeof r.answer==`string`?r.answer:void 0;if(e!==void 0||r.type===`response`)return{type:`response`,response:e}}return null}async function qU(e,t,n,r,i,a,o,s,c,l){let u=s||SU,d=CU();await a(Jt(t,`info`,`Starting`,`Provider: Prompt API (initializing) · ${u.length} tools`));let f=r.length>1?r.slice(0,-1):[],p=r.length>0?r[r.length-1]:null,{session:m,destroyAfterUse:h}=await WU(a,t,n,o,l,u,f),g=HU(m,d);await a(Jt(t,`info`,`Provider`,`Provider: Prompt API (${g||`On-device`}) · ${u.length} tools`)),g||await a(Jt(t,`info`,`Model`,`Prompt API runtime did not expose an exact model id.`));try{let n={type:`object`,additionalProperties:!1,properties:{type:{type:`string`,enum:[`response`,`tool_use`]},response:{type:`string`},tool_calls:{type:`array`,items:{type:`object`,additionalProperties:!1,properties:{id:{type:`string`},name:{type:`string`,enum:u.map(e=>e.name)},input:{type:`object`}},required:[`name`,`input`]}}},required:[`type`]},i=[...r];for(let s=0;s<12;s++){await a(Jt(t,`api-call`,`Prompt API call #${s+1}`,`${i.length} messages in context`));let l;if(s===0)l=jU(p)||`Continue.`;else{let e=i[i.length-1],t=Array.isArray(e?.content)?e.content.map(e=>`[TOOL_RESULT ${e.tool_use_id}] ${typeof e.content==`string`?e.content:JSON.stringify(e.content)}`):[String(e?.content||``)],n=[...r].reverse().find(e=>e?.role===`user`&&typeof e.content==`string`)?.content||``;l=[`Tool execution results:`,...t,``,n?`Original user request: "${n}"`:``,`If the user's original request is NOW fully satisfied, provide a final response.`,`Otherwise, call the next required tool.`].filter(Boolean).join(`
|
|
@@ -1962,4 +1962,4 @@ const restoreGlobals = applyGlobalShadows();
|
|
|
1962
1962
|
|
|
1963
1963
|
⚠️ This model has a small context window. Try clicking **'Compact'** in the header to summarize the conversation and reduce token usage.`),c===`llamafile`&&XW(i)&&(o=!0,e.events.emit(`provider-help`,{providerId:`llamafile`,reason:i})),c===`transformers_js_local`&&QW(i)&&(o=!0,e.events.emit(`provider-help`,{providerId:`transformers_js_local`,reason:i})),!o){let t=dt(c,i,l?.requiresApiKey!==!1);t&&e.events.emit(`provider-help`,{providerId:c,reason:i,helpType:t})}await JW(e,t,r,`⚠️ Error: ${a}`);break}case`typing`:{let{groupId:t}=n.payload;e.router?.setTyping(t,!0),e.events.emit(`typing`,{groupId:t,typing:!0});break}case`tool-activity`:e.events.emit(`tool-activity`,n.payload),(n.payload.tool===`write_file`&&n.payload.status===`done`||n.payload.tool===`bash`&&n.payload.status===`done`)&&e.events.emit(`file-change`,{groupId:n.payload.groupId});break;case`model-download-progress`:e.events.emit(`model-download-progress`,n.payload);break;case`thinking-log`:e.events.emit(`thinking-log`,n.payload);break;case`compact-done`:e.clearProviderRequest(n.payload.groupId),await e.handleCompactDone(t,n.payload.groupId,n.payload.summary);break;case`token-usage`:e.events.emit(`token-usage`,n.payload);break;case`task-list-request`:{let{groupId:r}=n.payload,i=(await it(t)).filter(e=>e.groupId===r);e.agentWorker?.postMessage({type:`task-list-response`,payload:{groupId:r,tasks:i}});break}case`update-task`:{let{task:r}=n.payload;if(r.groupId&&e.schedulerTriggeredGroups.has(r.groupId)){ot(`⚠️ Task update blocked — scheduled tasks cannot modify tasks (recursion prevention).`,{type:`warning`,duration:8e3});break}try{if(!await PG(e,r,await nG(t))){ot(`Failed to sync task update to server — task was not updated.`,{type:`error`});break}await rG(t,r),e.events.emit(`task-change`,{type:`updated`,task:r})}catch(e){console.error(`Failed to update task from agent:`,e),ot(`Failed to update task.`,{type:`error`})}break}case`delete-task`:{let{id:r,groupId:i}=n.payload;if(i&&e.schedulerTriggeredGroups.has(i)){ot(`⚠️ Task deletion blocked — scheduled tasks cannot delete tasks (recursion prevention).`,{type:`warning`,duration:8e3});break}try{if(!await FG(e,r,await nG(t))){ot(`Failed to delete task from server — task kept in view.`,{type:`error`});break}await eG(t,r),e.events.emit(`task-change`,{type:`deleted`,id:r})}catch(e){console.error(`Failed to delete task from agent:`,e)}break}case`clear-chat`:{let{groupId:r}=n.payload;try{await e.newSession(t,r)}catch(e){console.error(`Failed to clear chat from agent:`,e)}break}case`show-toast`:{let{message:e,type:t,duration:r}=n.payload;ot(e,{type:t||`info`,duration:r});break}case`mcp-reauth-required`:{let{connectionId:r}=n.payload,i=await Se(t,r),a=i?.label||r;if(i?.autoReconnectOAuth){ot(`🔑 MCP connection "${a}" returned 401 — auto-reconnecting OAuth…`,{type:`info`,duration:5e3});let n=await Ae(t,r,{silentOnly:!0});n.success?ot(`🔑 OAuth reconnected for "${a}"`,{type:`success`,duration:5e3}):ot(`🔑 OAuth auto-reconnect failed for "${a}": ${n.error}`,{action:{label:`Reconnect Now`,onClick:async()=>{let e=await Ae(t,r);e.success?ot(`🔑 OAuth reconnected for "${a}"`,{type:`success`,duration:5e3}):ot(`🔑 OAuth reconnect failed for "${a}": ${e.error}`,{type:`error`,duration:1e4})}},duration:15e3,type:`error`}),e.agentWorker?.postMessage({payload:{connectionId:r,success:n.success},type:`mcp-reauth-result`})}else ot(`🔑 MCP connection "${a}" returned 401 — OAuth re-authentication required. Go to Settings → Remote MCP to reconnect.`,{type:`warning`,duration:1e4}),e.agentWorker?.postMessage({payload:{connectionId:r,success:!1},type:`mcp-reauth-result`});e.events.emit(`mcp-reauth-required`,{connectionId:r,label:a});break}case`manage-tools`:{let{action:r,toolNames:i,profileId:a}=n.payload;if(r===`activate_profile`&&a)await me.activateProfile(t,a);else if((r===`enable`||r===`disable`)&&i){let e=r===`enable`;for(let n of i)await me.setToolEnabled(t,n,e)}let o=n.payload.groupId||`br:main`;e.agentWorker?.postMessage({type:`update-tools`,payload:{enabledTools:me.enabledTools,groupId:o,systemPromptOverride:me.systemPromptOverride}});break}case`send-notification`:{let{title:t,body:r,groupId:i}=n.payload;if(i&&e.schedulerTriggeredGroups.has(i)){ot(`⚠️ Notification blocked — scheduled tasks triggered via push cannot send push notifications (recursion prevention).`,{type:`warning`,duration:8e3});break}at(`/push/broadcast`).then(e=>{fetch(e,{body:JSON.stringify({title:t,body:r}),headers:{"Content-Type":`application/json`},method:`POST`}).catch(e=>console.error(`Failed to broadcast push notification:`,e))});break}case`vm-status`:e.vmStatus={...n.payload},e.events.emit(`vm-status`,e.vmStatus);break;case`vm-terminal-opened`:e.events.emit(`vm-terminal-opened`,n.payload);break;case`vm-terminal-output`:e.events.emit(`vm-terminal-output`,n.payload);break;case`vm-terminal-closed`:e.events.emit(`vm-terminal-closed`,n.payload);break;case`vm-workspace-synced`:e.events.emit(`file-change`,{groupId:n.payload?.groupId});break;case`vm-terminal-error`:e.events.emit(`vm-terminal-error`,n.payload);break;case`open-file`:e.events.emit(`open-file`,n.payload);break;case`send-file`:{let{groupId:t,path:r}=n.payload;(async()=>{e.router?.setTyping(t,!0);try{await e.router?.send(t,``,[{path:r,fileName:r.split(`/`).pop()||r,mimeType:`application/octet-stream`,size:0}])}catch(e){let t=e instanceof Error?e.message:String(e);console.error(`send-file: delivery failed:`,e),ot(`Failed to send file to peer: ${t}`,{type:`error`,duration:6e3})}finally{e.router?.setTyping(t,!1)}})();break}case`render-component`:{let{groupId:t,envelope:r}=n.payload;if(e.events.emit(`a2ui-surface`,{groupId:t,envelope:r}),t.startsWith(`peer:`)){let n=e.router?.findChannel(t);n&&`sendA2UI`in n&&n.sendA2UI(t,r).catch(e=>console.error(`render-component: peer delivery failed:`,e))}t.startsWith(`room:`)&&e.roomManager.broadcastA2UI(SB(t),r);break}case`request-native-ai-task`:{let{id:r,groupId:i,taskType:a,input:o}=n.payload;(async()=>{try{let n=await x(t,m.BUILTIN_AI_TOOLS_BACKEND)||`active_provider`,s;if(n!==`local`)s=await BG(e,a,o,i);else{let t=t=>{e.events.emit(`model-download-progress`,{groupId:i,status:t.status,progress:t.progress,message:t.message})};if(a===`summarize`)s=await zV(o.text,{...o,onProgress:t});else if(a===`write`)s=await BV(o.prompt,{...o,onProgress:t});else if(a===`rewrite`)s=await VV(o.text,{...o,onProgress:t});else if(a===`proofread`)s=await WV(o.text,{...o,onProgress:t});else if(a===`detect-language`)s=await HV(o.text,{onProgress:t});else if(a===`translate`)s=await UV(o.text,{...o,onProgress:t});else if(a===`semantic-embedder`)s=await GV(o.text,{...o,onProgress:t});else throw Error(`Unknown native AI task: ${a}`)}i&&e.events.emit(`model-download-progress`,{groupId:i,status:`done`,progress:1});let c=globalThis.pendingNativeAiResolvers;c&&c[r]&&(c[r].resolve(s),delete c[r]),e.agentWorker?.postMessage({type:`native-ai-task-response`,payload:{id:r,response:s}})}catch(t){i&&e.events.emit(`model-download-progress`,{groupId:i,status:`error`,progress:null,message:t?.message||String(t)});let n=globalThis.pendingNativeAiResolvers;n&&n[r]&&(n[r].reject(t instanceof Error?t:Error(String(t))),delete n[r]),e.agentWorker?.postMessage({type:`native-ai-task-response`,payload:{id:r,error:t?.message||String(t)}})}})();break}case`ask-user`:e.events.emit(`ask-user`,n.payload);break}}async function BG(e,t,n,r){let i=r?e.inFlightEffectiveProviderByGroup?.get(r):void 0,o=i?.providerId||e.provider,s=i?.model||i?.providerConfig?.defaultModel||e.model,c=``;if(t===`translate`)c=`Translate the following text from ${n.sourceLanguage||`auto`} to ${n.targetLanguage}. Provide ONLY the raw translated text without commentary or quotation marks:\n\n${n.text}`;else if(t===`summarize`)c=`Summarize the following text (type: ${n.type||`tldr`}, format: ${n.format||`plain-text`}, length: ${n.length||`medium`}). Provide ONLY the summary:\n\n${n.text}`;else if(t===`write`)c=`Draft content for the following request (context: ${n.context||`none`}):\n\n${n.prompt}`;else if(t===`rewrite`)c=`Rewrite the following text (tone: ${n.tone||`standard`}, length: ${n.length||`as-is`}):\n\n${n.text}`;else if(t===`proofread`)c=`Proofread and correct grammar, spelling, and style in the following text. Provide ONLY the corrected text:\n\n${n.text}`;else if(t===`detect-language`)c=`Detect the language of the following text. Return ONLY a JSON array of objects with "detectedLanguage" (BCP 47 code) and "confidence" (0.0 - 1.0), e.g. [{"detectedLanguage":"en","confidence":0.99}]:\n\n${n.text}`;else if(t===`semantic-embedder`)c=`Provide a concise semantic description/representation for the following content:\n\n${JSON.stringify(n.text)}`;else throw Error(`Unknown task type: ${t}`);if(o===`prompt_api`){await LV();let e=globalThis,n=e.LanguageModel||e.ai?.languageModel;if(n&&typeof n.create==`function`){let e;try{e=await n.create()}catch(e){console.warn(`Prompt API session creation failed in active provider task:`,e)}if(e)try{let n=await e.prompt(c),r=String(n||``).trim();if(t===`detect-language`)try{let e=JSON.parse(r);return Array.isArray(e)?e:[e]}catch{return[{detectedLanguage:`en`,confidence:.8}]}return r}finally{typeof e.destroy==`function`&&e.destroy()}}}let l=a(o);if(!l||!l.baseUrl||l.baseUrl.startsWith(`builtin://`)||l.baseUrl.startsWith(`local://`)||l.format===`prompt_api`||l.format===`transformers_js`){if(t===`summarize`)return await zV(n.text,n);if(t===`write`)return await BV(n.prompt,n);if(t===`rewrite`)return await VV(n.text,n);if(t===`proofread`)return await WV(n.text,n);if(t===`detect-language`)return await HV(n.text);if(t===`translate`)return await UV(n.text,{sourceLanguage:n.sourceLanguage||`auto`,targetLanguage:n.targetLanguage||`en`,...n});if(t===`semantic-embedder`)return await GV(n.text,n);throw Error(`Provider ${o} not found and no local fallback available`)}let u={...oW(l,await aG(e)||``),...uG(e,o,``)},d=_W(l,[{role:`user`,content:c}],[],{maxTokens:e.maxTokens||2048,model:s,system:`You are a specialized text task assistant. Fulfill the user request directly and accurately without conversational filler.`}),f=await fetch(l.baseUrl,{body:JSON.stringify(d),headers:u,method:`POST`});if(!f.ok){let e=await f.text();throw Error(`Active provider task API error ${f.status}: ${e}`)}let p=yW(l,await f.json()).content?.filter(e=>e.type===`text`)?.map(e=>e.text)?.join(``)?.trim()||``;if(t===`detect-language`)try{let e=JSON.parse(p);return Array.isArray(e)?e:[e]}catch{return[{detectedLanguage:`en`,confidence:.8}]}return p}async function VG(e,t,n=p){let r=(await Rt(t)).find(e=>e.groupId===n),i=r?.pinnedProvider??e.provider,o=r?.pinnedModel??(r?.pinnedProvider?a(r.pinnedProvider)?.defaultModel??e.model:e.model),s=(a(i)??e.providerConfig)?.requiresApiKey!==!1,c=i===e.provider?await aG(e):await e.getApiKeyForSpecificProvider(t,i);if(s&&!c){let t=`API key not configured. Cannot compact context.`;e.events.emit(`provider-help`,{providerId:i,reason:t,helpType:dt(i,t,s)}),e.events.emit(`error`,{groupId:n,error:t});return}if(e.state!==`idle`){e.events.emit(`error`,{groupId:n,error:`Cannot compact while processing. Wait for the current response to finish.`});return}e.setState(`thinking`,n),e.events.emit(`typing`,{groupId:n,typing:!0});let l=``;try{l=await ce(t,n,`MEMORY.md`)}catch{}let u=me.enabledTools,d=tq.getPeerState(n)||void 0,f=SW(e.assistantName,l,u,me.systemPromptOverride,d,void 0,{groupId:n}),h=o;i===`prompt_api`&&(o===`browser-built-in`||!o)&&!wU()&&(h=await x(t,m.PROMPT_API_FALLBACK_MODEL)||`onnx-community/Qwen3-0.6B-ONNX`);let g=bW(h),_=gt(f),v=yt(await Ot(n,200),{contextLimit:g,systemPromptTokens:_,maxOutputTokens:4096,skimTop:e.contextCompressionEnabled}).messages;if(await x(t,m.COMPACTION_ENGINE_PREFERENCE)===`builtin_task_api`)try{let r=await zV(v.map(e=>`${e.role.toUpperCase()}: ${typeof e.content==`string`?e.content:JSON.stringify(e.content)}`).join(`
|
|
1964
1964
|
|
|
1965
|
-
`),{type:`key-points`,format:`markdown`,length:`medium`});await e.handleCompactDone(t,n,r);return}catch(r){await JW(e,t,n,`⚠️ Built-in Task API compaction failed, falling back to provider: ${r instanceof Error?r.message:String(r)}`)}if(i===`prompt_api`){if(wU()||await LV(),!wU()){e.events.emit(`error`,{groupId:n,error:`Prompt API is not available in this browser. Switch provider or enable experimental browser flags.`}),e.events.emit(`typing`,{groupId:n,typing:!1}),e.setState(`idle`,n);return}let r=new AbortController;e.promptControllers.set(n,r);try{let i=await JU(xW(f),v,r.signal,async n=>{await zG(e,t,n)},n);await e.handleCompactDone(t,n,i)}catch(r){if(r instanceof Error&&r.name===`AbortError`)return;await JW(e,t,n,`⚠️ Error: Compaction failed: ${r instanceof Error?r.message:String(r)}`)}finally{e.promptControllers.delete(n)}return}let y=e.createProviderRequestId(n);e.agentWorker?.postMessage({type:`compact`,payload:{apiKey:c,assistantName:e.assistantName,contextCompression:e.contextCompressionEnabled,contextLimit:bW(h),groupId:n,memory:l,messages:v,model:o,provider:i,providerHeaders:uG(e,i,y,r?.providerRuntimeOverrides),rateLimitAutoAdapt:e.rateLimitAutoAdapt,rateLimitCallsPerMinute:e.rateLimitCallsPerMinute,storageHandle:await x(t,m.STORAGE_HANDLE),systemPrompt:f}})}function HG(e,t=p){e.agentWorker?.postMessage({payload:{groupId:t},type:`vm-terminal-open`})}function UG(e,t=p){e.agentWorker?.postMessage({payload:{groupId:t},type:`vm-terminal-close`})}function WG(e,t){e.agentWorker?.postMessage({payload:{data:t},type:`vm-terminal-input`})}function GG(e,t=p){e.agentWorker?.postMessage({payload:{groupId:t},type:`vm-workspace-sync`})}function KG(e,t=p){e.agentWorker?.postMessage({payload:{groupId:t},type:`vm-workspace-flush`})}function qG(e,t,n){e.agentWorker?.postMessage({payload:{id:t,response:n},type:`ask-user-response`})}async function JG(e,t,n,r=k){let i=n===`disabled`||n===`9p`||n===`ext2`||n===`auto`?n:`disabled`;e.vmBootMode=i,await r(t,m.VM_BOOT_MODE,i),e.agentWorker?.postMessage({payload:{mode:i},type:`set-vm-mode`})}async function YG(e,t,n,r=k){let i=typeof n==`string`?n.trim():``;await r(t,m.VM_BOOT_HOST,i),e.agentWorker?.postMessage({payload:{bootHost:i},type:`set-vm-mode`})}async function XG(e,t,n,r=k){let i=typeof n==`string`?n.trim():``;await r(t,m.VM_NETWORK_RELAY_URL,i),e.agentWorker?.postMessage({payload:{networkRelayUrl:i},type:`set-vm-mode`})}function ZG(e){`serviceWorker`in navigator&&navigator.serviceWorker?.controller&&navigator.serviceWorker.controller.postMessage({type:`set-proxy-config`,payload:{useProxy:e.useProxy,proxyUrl:e.proxyUrl}})}async function QG(e,t,n,r=k){e.contextCompressionEnabled=!!n,await r(t,m.CONTEXT_COMPRESSION_ENABLED,e.contextCompressionEnabled?`true`:`false`)}async function $G(e,t,n,r=k){e.gitProxyUrl=n||`/git-proxy`,await r(t,m.GIT_PROXY_URL,e.gitProxyUrl)}async function eK(e,t,n,r=k){e.maxIterations=n,await r(t,m.MAX_ITERATIONS,String(n))}async function tK(e,t,n,r=k){let i=Math.max(1,n);e.maxTokens=i,await r(t,m.MAX_TOKENS,String(i))}async function nK(e,t,n,r=k){e.proxyUrl=n||`/proxy`,await r(t,m.PROXY_URL,e.proxyUrl),ZG(e)}async function rK(e,t,n,r=k){e.rateLimitAutoAdapt=!!n,await r(t,m.RATE_LIMIT_AUTO_ADAPT,e.rateLimitAutoAdapt?`true`:`false`)}async function iK(e,t,n,r=k){let i=Number.isFinite(n)?Math.max(0,Math.floor(n)):0;e.rateLimitCallsPerMinute=i,await r(t,m.RATE_LIMIT_CALLS_PER_MINUTE,String(i))}async function aK(e,t,n,r=k){e.reasoningEffort=(typeof n==`string`?n.trim().toLowerCase():`none`)||`none`,await r(t,m.REASONING_EFFORT,e.reasoningEffort)}async function oK(e,t,n,r=k){e.streamingEnabled=!!n,await r(t,m.STREAMING_ENABLED,e.streamingEnabled?`true`:`false`)}async function sK(e,t,n,r=k){e.taskServerEnabled=!!n,await r(t,m.TASK_SERVER_ENABLED,e.taskServerEnabled?`true`:`false`)}async function cK(e,t,n,r=k){e.taskServerUrl=n||`http://localhost:8888/schedule`,await r(t,m.TASK_SERVER_URL,e.taskServerUrl)}async function lK(e,t,n,r=k){e.useProxy=!!n,await r(t,m.USE_PROXY,e.useProxy?`true`:`false`),ZG(e)}async function uK(e,t,n,r=k){e.vmBashFullInternetAccess=!!n,await r(t,m.VM_BASH_FULL_INTERNET_ACCESS,e.vmBashFullInternetAccess?`true`:`false`)}async function dK(e,t,n,r=k){let i=Math.min(Math.max(Math.floor(n),1),1800);await r(t,m.VM_BASH_TIMEOUT_SEC,String(i))}function fK(e,t){return new Promise((n,r)=>{try{let i=e?.transaction(`messages`,`readwrite`);if(!i)return r(Error(`failed to get transaction, cannot clear group messages.`));let a=i.objectStore(`messages`).index(`by-group`).openCursor(t);a.onsuccess=()=>{let e=a.result;e?(e.delete(),e.continue()):n(void 0)},a.onerror=()=>r(a.error)}catch(e){r(e)}})}function pK(e,t,n){return new Promise((r,i)=>{let a=e?.transaction(`messages`,`readwrite`);if(!a)throw Error(`failed to get transaction, cannot clone messages.`);let o=a.objectStore(`messages`),s=o.index(`by-group`).openCursor(t),c=0;s.onsuccess=()=>{let e=s.result;if(e){let t={...e.value,id:he(),groupId:n};o.put(t),c++,e.continue()}else r(c)},s.onerror=()=>i(s.error)})}function mK(e,t,n){return new Promise((r,i)=>{let a=e?.transaction(`tasks`,`readwrite`);if(!a)throw Error(`failed to get transaction, cannot clone tasks.`);let o=a.objectStore(`tasks`),s=o.index(`by-group`).openCursor(t),c=0;s.onsuccess=()=>{let e=s.result;if(e){let t={...e.value,id:he(),groupId:n};o.put(t),c++,e.continue()}else r(c)},s.onerror=()=>i(s.error)})}function hK(e,t){return b(e,`messages`,`readwrite`,e=>e.delete(t)).then(()=>void 0)}function gK(e,t){return new Promise(async(n,r)=>{try{let i=await y();if(!i)return r(Error(`failed to get transaction, cannot update task last run.`));let a=i.transaction(`tasks`,`readwrite`);if(!a)return r(Error(`failed to get transaction`));let o=a.objectStore(`tasks`),s=o.get(e);s.onsuccess=()=>{let e=s.result;if(!e){n();return}e.lastRun=t;let i=o.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)},s.onerror=()=>r(s.error)}catch(e){r(e)}})}async function _K(e,t,n){let r=(await it(e)).filter(e=>e.groupId===t),i=new Map(r.map(e=>[e.id,e])),a=[],o=0;for(let t of n){let n=i.get(t);n&&(n.order=o++,await rG(e,n),a.push(n),i.delete(t))}let s=Array.from(i.values()).sort((e,t)=>{let n=e.order??0,r=t.order??0;return n===r?e.createdAt-t.createdAt:n-r});for(let t of s)t.order=o++,await rG(e,t),a.push(t);return a}async function vK(e,t,n,r){let i=await ie(e,t),a=await ie(e,n),o=r.replace(/\\/g,`/`).replace(/^\/+/,``).split(`/`).filter(Boolean),s=i,c=a;for(let e of o)s=await s.getDirectoryHandle(e),c=await c.getDirectoryHandle(e,{create:!0});let l=n.replace(/:/g,`-`),u=[ne(),`groups`,l,...o];try{await yK(e,n,s,c,u)}catch(e){throw o.length>0&&await a.removeEntry(o[0],{recursive:!0}).catch(()=>void 0),e}}async function yK(e,t,n,r,i){for await(let[a,o]of n.entries()){if(o.kind===`directory`){await yK(e,t,o,await r.getDirectoryHandle(a,{create:!0}),[...i,a]);continue}let n=await o.getFile(),s=await r.getFileHandle(a,{create:!0});try{await pe(s,n)}catch(t){if(!((t instanceof Error?t.message:String(t)).includes(`Writable file streams are not supported`)&&(await D(e)).type===`opfs`))throw t;await oe([...i,a],n)}}}function bK(e){if(!e||typeof e!=`object`)return!1;let t=globalThis.FileSystemDirectoryHandle;return t!==void 0&&e instanceof t||typeof e.getDirectoryHandle==`function`&&typeof e.getFileHandle==`function`&&typeof e.requestPermission==`function`}async function xK(e){let t=await x(e,m.STORAGE_HANDLE);return!bK(t)||await t.requestPermission({mode:`readwrite`})===`granted`}function SK(e){let t=_();return t?`shadowclaw:${t}:${e}`:e}function CK(e){if(typeof localStorage>`u`)return null;let t=SK(e);try{let n=localStorage.getItem(t);if(n!==null)return n;if(t===e)return null;let r=localStorage.getItem(e);if(r!==null)return localStorage.setItem(t,r),r}catch(e){console.warn(`Unable to read from localStorage:`,e)}return null}function wK(e,t){if(typeof localStorage>`u`)return;let n=SK(e);try{localStorage.setItem(n,t)}catch(e){console.warn(`Unable to write to localStorage:`,e)}}function TK(e){if(typeof localStorage>`u`)return;let t=SK(e);try{localStorage.removeItem(t)}catch(e){console.warn(`Unable to remove from localStorage:`,e)}}async function EK(e,t){let n=await ie(e,t);for await(let[e]of n.entries())await n.removeEntry(e,{recursive:!0})}function DK(e=p){return e===`br:main`?m.STATIC_MAIN_SITE_SEEDED:`${m.STATIC_MAIN_SITE_SEEDED}:${e}`}async function OK(e,t=p){let n=await x(e,DK(t));return n===!0||n===`true`}async function kK(e,t=p,n=!0){await k(e,DK(t),n)}function AK(){let e=v(`/static-main-manifest.json`);if(typeof window<`u`&&window.location?.origin)try{return new URL(e,window.location.origin).toString()}catch{return e}return e}function jK(e){let t=v(`/static-main/${e.replace(/^\/+/,``)}`);if(typeof window<`u`&&window.location?.origin)try{return new URL(t,window.location.origin).toString()}catch{return t}return t}async function MK(){if(typeof fetch!=`function`)return null;try{let e=AK(),t=await fetch(e);if(t.ok){let e=await t.json();if(e&&Array.isArray(e.pages))return e}}catch{}return null}async function NK(e){if(typeof fetch!=`function`)return null;try{let t=jK(e),n=await fetch(t);if(n.ok)return await n.text()}catch{}return null}async function PK(e={}){let t=()=>{if(typeof document<`u`){let e=document.getElementById(`shadow-claw-static-manifest`);if(e&&e.textContent)try{let t=JSON.parse(e.textContent);if(t&&Array.isArray(t.pages))return t}catch(e){console.warn(`Failed to parse embedded static main manifest:`,e)}}return null};if(e.preferEmbedded!==!1){let e=t();if(e)return e}if(e.fetchFallback!==!1){let e=await MK();if(e)return e}if(e.preferEmbedded===!1){let e=t();if(e)return e}return{pages:[{displayPath:`index.html`,content:fz},{displayPath:`MEMORY.md`,content:sz}]}}async function FK(e){if(typeof document<`u`){let t=document.getElementById(`shadow-claw-static-manifest`);if(t&&t.textContent)try{let n=JSON.parse(t.textContent);if(n&&Array.isArray(n.pages)){let t=n.pages.find(t=>t.displayPath===e);if(t&&typeof t.content==`string`)return t.content}}catch{}}let t=await NK(e);if(typeof t==`string`)return t;let n=await MK();if(n&&Array.isArray(n.pages)){let t=n.pages.find(t=>t.displayPath===e);if(t&&typeof t.content==`string`)return t.content}return null}async function IK(e,t,n=[]){for(let[r,i]of Object.entries(t))if(r===`purgePreRenderedStaticPages`&&i===!0){if(n.length>0){let t=n[0],r=n.slice(1).join(`/`);try{r?await IH(e,t,r):await EK(e,t)}catch(e){console.warn(`Failed to purge pre-rendered static pages for ${t}/${r}:`,e)}}}else typeof i==`object`&&i&&await IK(e,i,[...n,r])}function LK(){if(typeof document<`u`)try{let e=document.getElementById(`shadow-claw-site-config`);if(e?.textContent){let t=JSON.parse(e.textContent);if(t?.pages?.sortOrder===`desc`)return`desc`;if(t?.pages?.sortOrder===`asc`)return`asc`}}catch{}return`desc`}function RK(e,t){let n=t??LK();return[...e].sort((e,t)=>{let r=e.path,i=t.path,a=r.split(`/`).pop()||``,o=i.split(`/`).pop()||``,s=/^index\.(html?|xhtml)$/iu.test(a),c=/^index\.(html?|xhtml)$/iu.test(o);if(s&&!c)return-1;if(!s&&c)return 1;let l=/^memory\.(md|markdown)$/iu.test(a),u=/^memory\.(md|markdown)$/iu.test(o);return l&&!u?1:!l&&u?-1:n===`asc`?r.localeCompare(i,void 0,{numeric:!0,sensitivity:`base`}):i.localeCompare(r,void 0,{numeric:!0,sensitivity:`base`})})}async function zK(e,t,n=`sc:purge-id`,r=`static_main_site_purge_id`){let i=t??`__legacy_purge_pages__`;try{if(CK(n)===i)return!0}catch{}try{if(await x(e,r)===i){try{wK(n,i)}catch{}return!0}await k(e,r,i);try{wK(n,i)}catch{}}catch{try{wK(n,i)}catch{}}return!1}async function BK(e,t=p,n=[],r={}){await gz(e,t);let i=await PK(r),a=!1;i.preRenderedStaticPages&&(await zK(e,i.purgeId)||(a=!0,await IK(e,i.preRenderedStaticPages)));let o=!1;if(t===`br:main`&&i.skillsPurgeId!==void 0&&!await zK(e,i.skillsPurgeId,`sc:skills-purge-id`,`static_main_skills_purge_id`)){o=!0;try{await IH(e,t,`.agents/skills/main`)}catch(e){if(!(e&&typeof e==`object`&&`name`in e&&e.name===`NotFoundError`))throw e}}for(let n of i.pages)if(n.content?.includes(`slug: "shadow-claw--purge-pages"`)){!a&&!await zK(e,i.purgeId)&&(a=!0,await EK(e,t));break}let s=t===`br:main`&&await lz(e),c=new Set(i.pages.map(e=>_z(t,e.displayPath))),l=a?n.filter(e=>e.groupId!==t||c.has(_z(e.groupId,e.path))):[...n];for(let n of i.pages)if(!n.content?.includes(`slug: "shadow-claw--purge-pages"`)){if(/^memory\.(md|markdown)$/iu.test(n.displayPath)){if(s)continue;let r=n.content===sz?void 0:n.content;if(r===void 0?await dz(e,t):await dz(e,t,r)){let e=_z(t,n.displayPath);l.some(t=>_z(t.groupId,t.path)===e)||l.push({groupId:t,path:n.displayPath})}continue}if(!await yz(e,t,n.displayPath))try{if(!await ae(e,t,n.displayPath)){let r=n.content;typeof r!=`string`&&(r=await NK(n.displayPath)??``),await ue(e,t,n.displayPath,r)}let r=_z(t,n.displayPath);l.some(e=>_z(e.groupId,e.path)===r)||l.push({groupId:t,path:n.displayPath})}catch(e){console.warn(`Failed to seed static page file ${n.displayPath}:`,e)}}if(t===`br:main`){for(let n of i.skills||[]){let r=`.agents/skills/main/${n.displayPath}`;try{await ae(e,t,r)||await ue(e,t,r,n.content)}catch(e){console.warn(`Failed to seed skill file ${r}:`,e)}}for(let n of i.tools||[]){let r=`.agents/tools/main/${n.displayPath}`;try{await ae(e,t,r)||await ue(e,t,r,n.content)}catch(e){console.warn(`Failed to seed tool file ${r}:`,e)}}}let u=typeof document<`u`&&document.getElementById(`shadow-claw-static-manifest`)!==null;return r.preferEmbedded!==!1&&u||await kK(e,t,!0),Object.defineProperty(l,"didPurge",{value:a,enumerable:!1,writable:!0,configurable:!0}),Object.defineProperty(l,"didPurgeSkills",{value:o,enumerable:!1,writable:!0,configurable:!0}),RK(l)}var VK=class{_events;_handlers=[];_runs=new Map;constructor(e){this._events=e}start(){this._listen(`streaming-start`,this._onStreamingStart),this._listen(`streaming-chunk`,this._onStreamingChunk),this._listen(`streaming-end`,this._onStreamingEnd),this._listen(`streaming-done`,this._onStreamingDone),this._listen(`streaming-error`,this._onStreamingError),this._listen(`tool-activity`,this._onToolActivity)}stop(){for(let{event:e,handler:t}of this._handlers)this._events.off(e,t);this._handlers=[],this._runs.clear()}_emit(e,t){window.dispatchEvent(new CustomEvent(`shadow-claw-agui-event`,{detail:{groupId:e,event:t}}))}_listen(e,t){this._events.on(e,t),this._handlers.push({event:e,handler:t})}_onStreamingChunk=({groupId:e,text:t})=>{let n=this._runs.get(e);!n||!n.messageId||this._emit(e,{type:`TEXT_MESSAGE_CONTENT`,messageId:n.messageId,delta:t,timestamp:Date.now()})};_onStreamingDone=({groupId:e})=>{let t=this._runs.get(e);t&&(t.messageId&&this._emit(e,{type:`TEXT_MESSAGE_END`,messageId:t.messageId,timestamp:Date.now()}),this._emit(e,{type:`RUN_FINISHED`,threadId:t.threadId,runId:t.runId,timestamp:Date.now()}),this._runs.delete(e))};_onStreamingEnd=({groupId:e})=>{let t=this._runs.get(e);!t||!t.messageId||(this._emit(e,{type:`TEXT_MESSAGE_END`,messageId:t.messageId,timestamp:Date.now()}),t.messageId=null)};_onStreamingError=({groupId:e,error:t})=>{let n=this._runs.get(e);n&&(n.messageId&&this._emit(e,{type:`TEXT_MESSAGE_END`,messageId:n.messageId,timestamp:Date.now()}),this._emit(e,{type:`RUN_ERROR`,message:t||`Unknown streaming error`,timestamp:Date.now()}),this._runs.delete(e))};_onStreamingStart=({groupId:e})=>{let t=he(),n=e,r=he();this._runs.set(e,{runId:t,threadId:n,messageId:r,activeToolCallIds:new Set}),this._emit(e,{type:`RUN_STARTED`,threadId:n,runId:t,timestamp:Date.now()}),this._emit(e,{type:`TEXT_MESSAGE_START`,messageId:r,role:`assistant`,timestamp:Date.now()})};_onToolActivity=({groupId:e,tool:t,status:n})=>{let r=this._runs.get(e);if(r){if(n===`running`){let n=he();r.activeToolCallIds.add(n),this._emit(e,{type:`TOOL_CALL_START`,toolCallId:n,toolCallName:t,timestamp:Date.now()}),r._lastToolCallId=n}else if(n===`done`||n===`error`){let t=r._lastToolCallId;t&&(r.activeToolCallIds.delete(t),this._emit(e,{type:`TOOL_CALL_END`,toolCallId:t,timestamp:Date.now()}))}}}};function HK(e,t){if(!e||typeof e!=`object`)return e;let n=JSON.parse(JSON.stringify(e));for(let e of t)UK(n,e);return n}function UK(e,t){let{op:n,path:r,value:i}=t;if(!r||!r.startsWith(`/`))return;let a=r.split(`/`).slice(1).map(e=>e.replace(/~1/g,`/`).replace(/~0/g,`~`)),o=a.pop();if(o===void 0)return;let s=e;for(let e of a){if(typeof s!=`object`||!s)return;s=s[e]}typeof s!=`object`||!s||(Array.isArray(s)?WK(s,o,n,i):GK(s,o,n,i))}function WK(e,t,n,r){if(n===`add`)if(t===`-`)e.push(r);else{let n=parseInt(t,10);!isNaN(n)&&n>=0&&n<=e.length&&e.splice(n,0,r)}else if(n===`replace`){let n=parseInt(t,10);!isNaN(n)&&n>=0&&n<e.length&&(e[n]=r)}else if(n===`remove`){let n=parseInt(t,10);!isNaN(n)&&n>=0&&n<e.length&&e.splice(n,1)}}function GK(e,t,n,r){n===`add`||n===`replace`?e[t]=r:n===`remove`&&delete e[t]}var KK=t({OrchestratorStore:()=>eq,accumulateTokenUsage:()=>$K,orchestratorStore:()=>tq});function qK(e){if(e){if(Array.isArray(e))return e;if(typeof e==`string`)try{let t=JSON.parse(e);return Array.isArray(t)?t:void 0}catch{return}}}function JK(e){if(typeof e==`boolean`)return e;if(typeof e==`string`){let t=e.trim().toLowerCase();return t===`true`||t===`1`}return typeof e==`number`&&e===1}function YK(e){return!!e}async function XK(e,t,n,r){if(!YK(r))return!0;if(!e.schedule)return await ZK(e.id,t,n,r)!==`failed`;try{let r=t.replace(/\/$/,``);return(await fetch(`${r}/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({...e,subscriberId:n})})).ok}catch{return!1}}async function ZK(e,t,n,r){if(!YK(r))return`missing`;try{let r=t.replace(/\/$/,``),i=`subscriberId=${encodeURIComponent(n)}`,a=await fetch(`${r}/tasks/${encodeURIComponent(e)}?${i}`,{method:`DELETE`});return a.ok?`deleted`:a.status===404||a.status===405?`missing`:`failed`}catch{return`failed`}}async function QK(e,t,n,r){if(!YK(r))return null;try{let r=t.replace(/\/$/,``),i=await fetch(`${r}/tasks?groupId=${encodeURIComponent(e)}&subscriberId=${encodeURIComponent(n)}`,{method:`GET`});if(!i.ok||typeof i.json!=`function`)return null;let a=await i.json();return Array.isArray(a)?a.filter(e=>!!e&&typeof e==`object`&&typeof e.id==`string`&&typeof e.schedule==`string`&&typeof e.prompt==`string`).map(t=>({id:t.id,groupId:t.group_id||t.groupId||e,schedule:t.schedule,type:t.type,prompt:t.prompt,tools:qK(t.tools),channel:typeof t.channel==`string`?t.channel:void 0,enabled:t.enabled===!0||t.enabled===1,lastRun:typeof t.lastRun==`number`?t.lastRun:typeof t.last_run==`number`?t.last_run:null,createdAt:typeof t.createdAt==`number`?t.createdAt:typeof t.created_at==`number`?t.created_at:Date.now(),name:typeof t.name==`string`?t.name:void 0,order:typeof t.order==`number`?t.order:typeof t.task_order==`number`?t.task_order:void 0})):null}catch{return null}}function $K(e,t){let n=(e?.inputTokens??0)+(t.inputTokens??0),r=(e?.outputTokens??0)+(t.outputTokens??0),i=(e?.cacheReadTokens??0)+(t.cacheReadTokens??0),a=(e?.cacheCreationTokens??0)+(t.cacheCreationTokens??0);return{groupId:t.groupId||e?.groupId||``,inputTokens:n,outputTokens:r,cacheReadTokens:i,cacheCreationTokens:a,totalTokens:n+r+i+a,contextLimit:t.contextLimit||e?.contextLimit||0}}var eq=class e{static DEFAULT_PAGE_PATH=`MEMORY.md`;orchestrator;_activeGroupId;_activePage;_activePinnedPage;_defaultPinnedPage;_activityLog;_activityLogSessionStartedAtByGroup;_aguiAdapter;_aguiEvent;_contextUsage;_currentPath;_db;_error;_files;_gitProxyUrl;_groups;_hadPersistedActivePage;_initResolve;_isTyping;_lastOrchestratorDisplayState=`idle`;_messages;_modelDownloadProgress;_onlineReplayHandler;_pages;_peerStateByGroup;_proxyUrl;_ready;_remoteAgentStatusByGroup;_remoteAgentTypingByGroup;_replayingTaskSyncOutbox;_subscriberId;_sidebarDefaultPage;_state;_storageStatus;_streamingText;_tasks;_taskSyncOutbox;_tokenUsage;_tokenUsageAccumulator=null;_toolActivity;_unreadGroupIds;_useProxy;_vmBashFullInternetAccess;_whenInitialized;_whenReady;_readyResolve;constructor(){this._messages=new E.State([]),this._isTyping=new E.State(!1),this._storageStatus=new E.State(null),this._toolActivity=new E.State(null),this._modelDownloadProgress=new E.State(null),this._activityLog=new E.State([]),this._state=new E.State(`idle`),this._tokenUsage=new E.State(null),this._error=new E.State(null),this._activeGroupId=new E.State(p),this._ready=new E.State(!1),this._tasks=new E.State([]),this._files=new E.State([]),this._currentPath=new E.State(`.`),this._groups=new E.State([]),this._unreadGroupIds=new E.State(new Set),this._streamingText=new E.State(null),this._aguiEvent=new E.State(null),this._contextUsage=new E.State(null),this._useProxy=new E.State(!1),this._proxyUrl=new E.State(`/proxy`),this._gitProxyUrl=new E.State(`/git-proxy`),this._vmBashFullInternetAccess=new E.State(!1),this._activePage=new E.State(`pages`),this._sidebarDefaultPage=new E.State(`chat`),this._pages=new E.State([]),this._activePinnedPage=new E.State(null),this._defaultPinnedPage=new E.State(null),this._remoteAgentStatusByGroup=new E.State(new Map),this._remoteAgentTypingByGroup=new E.State(new Map),this._peerStateByGroup=new E.State(new Map),this._hadPersistedActivePage=!1,this._initResolve=null,this._whenInitialized=new Promise(e=>{this._initResolve=e}),this._readyResolve=null,this._whenReady=new Promise(e=>{this._readyResolve=e}),this.orchestrator=null,this._db=null,this._activityLogSessionStartedAtByGroup=new Map,this._taskSyncOutbox=[],this._replayingTaskSyncOutbox=!1,this._subscriberId=null,this._onlineReplayHandler=null,this._aguiAdapter=null}get activeGroupId(){return this._activeGroupId.get()}get activePage(){return this._activePage.get()}get activePinnedPage(){return this._activePinnedPage.get()}get defaultPinnedPage(){return this._defaultPinnedPage.get()}get effectiveDefaultPage(){return this._pages.get()[0]||null}get activityLog(){return this._activityLog.get()}get aguiEvent(){return this._aguiEvent.get()}clearError(){this._error.set(null),this._state.get()===`error`&&this._state.set(`idle`)}get contextUsage(){return this._contextUsage.get()}get tokenUsageAccumulator(){return this._tokenUsageAccumulator}get currentPath(){return this._currentPath.get()}get error(){return this._error.get()}get files(){return this._files.get()}getPeerState(e){return this._peerStateByGroup.get().get(e)||null}getRemoteAgentStatus(e){return this._remoteAgentStatusByGroup.get().get(e)||`idle`}getState(){return{messages:this.messages,isTyping:this.isTyping,toolActivity:this.toolActivity,activityLog:this.activityLog,state:this.state,tokenUsage:this.tokenUsage,modelDownloadProgress:this.modelDownloadProgress,error:this.error,activeGroupId:this.activeGroupId,pages:this.pages,ready:this.ready,files:this.files,currentPath:this.currentPath,streamingText:this.streamingText,contextUsage:this.contextUsage}}getTasksForBackup(){return this._tasks.get()}get gitProxyUrl(){return this._gitProxyUrl.get()}get groups(){return this._groups.get()}get hadPersistedActivePage(){return this._hadPersistedActivePage}isRemoteAgentTyping(e){return this._remoteAgentTypingByGroup.get().get(e)||!1}get isTyping(){return this._isTyping.get()}get messages(){return this._messages.get()}get modelDownloadProgress(){return this._modelDownloadProgress.get()}get pages(){return this._pages.get()}get proxyUrl(){return this._proxyUrl.get()}get ready(){return this._ready.get()}sendMessage(e,t=[],n){n===void 0?this.orchestrator?.browserChat?.submit(e,this._activeGroupId.get(),t):this.orchestrator?.browserChat?.submit(e,this._activeGroupId.get(),t,n)}setActiveGroup(e,t,n=this._activePage.get()===`chat`){if(this._activeGroupId.set(t),this._messages.set([]),this._activityLog.set([]),this._error.set(null),this._isTyping.set(!1),this._toolActivity.set(null),this._modelDownloadProgress.set(null),this._streamingText.set(null),this._currentPath.set(`.`),n){let e=new Set(this._unreadGroupIds.get());e.delete(t)&&this._unreadGroupIds.set(e)}this.loadHistory(),this.loadTasks(e),this.loadFiles(e)}setReady(e=!0){this._ready.set(e),e&&this._readyResolve&&this._readyResolve()}setRemoteAgentStatus(e,t){let n=this._remoteAgentStatusByGroup.get(),r=new Map(n);r.set(e,t),this._remoteAgentStatusByGroup.set(r)}setRemoteAgentTyping(e,t){let n=this._remoteAgentTypingByGroup.get(),r=new Map(n);t?r.set(e,!0):r.delete(e),this._remoteAgentTypingByGroup.set(r)}get sidebarDefaultPage(){return this._sidebarDefaultPage.get()}get state(){return this._state.get()}stopCurrentRequest(){this.orchestrator?.stopCurrentRequest?.(this._activeGroupId.get())}get storageStatus(){return this._storageStatus.get()}get streamingText(){return this._streamingText.get()}syncHostWorkspaceToVM(){GG(this.orchestrator,this._activeGroupId.get())}syncVMWorkspaceToHost(){KG(this.orchestrator,this._activeGroupId.get())}get tasks(){return this._tasks.get()}get tokenUsage(){return this._tokenUsage.get()}get toolActivity(){return this._toolActivity.get()}get unreadGroupIds(){return this._unreadGroupIds.get()}get useProxy(){return this._useProxy.get()}get vmBashFullInternetAccess(){return this._vmBashFullInternetAccess.get()}get whenInitialized(){return this._whenInitialized}async resetSiteConfigSeed(e){await k(e,m.SITE_CONFIG_SEEDED,!1)}get whenReady(){return this._whenReady}async addPage(e,t,n=this._activeGroupId.get()){let r=n===`br:main`?this.normalizePagePath(t):t.trim();if(!r)return;let i=this._pages.get();i.some(e=>e.path===r&&e.groupId===n)||(this.setPages([...i,{groupId:n,path:r}]),await xz(e,n,r),n===`br:main`&&r===`MEMORY.md`&&await uz(e,!1),await this.persistPages(e))}async clearAllTasks(e){let t=await it(e),n=this._activeGroupId.get(),r=t.filter(e=>e.groupId===n),i=await this.getSubscriberId(e);for(let t of r){if(await ZK(t.id,this.getTaskServerBaseUrl(),i,this.orchestrator?.taskServerEnabled??!1)===`failed`){console.warn(`Failed to delete task "${t.id}" from server — queued for replay.`),await this.queueTaskSyncOutboxOperation(e,{type:`delete`,id:t.id,queuedAt:Date.now()});continue}await eG(e,t.id)}await this.loadTasks(e)}async cloneConversation(e,t){let n=await Bt(e,t);if(!n)return null;await pK(e,t,n.groupId),await mK(e,t,n.groupId);try{let r=await ce(e,t,`MEMORY.md`);r&&await ue(e,n.groupId,`MEMORY.md`,r)}catch{}try{await vK(e,t,n.groupId,`attachments`)}catch{}return await this.loadGroups(e),this.setActiveGroup(e,n.groupId),n}async compactContext(e){if(this.orchestrator)return VG(this.orchestrator,e,this._activeGroupId.get())}async createConversation(e,t){let n=await Pt(e,t);return await this.loadGroups(e),this.setActiveGroup(e,n.groupId),n}async deleteConversation(e,t){if(!(this._groups.get().length<=1)&&(await Lt(e,t),await fK(e,t),await this.loadGroups(e),this._activeGroupId.get()===t)){let t=this._groups.get()[0]?.groupId||`br:main`;this.setActiveGroup(e,t)}}async deleteMessage(e,t){await hK(e,t),await this.loadHistory(),this.orchestrator?.refreshContextUsage&&await this.orchestrator.refreshContextUsage(e,this._activeGroupId.get())}async deleteTask(e,t){let n=await this.getSubscriberId(e);if(await ZK(t,this.getTaskServerBaseUrl(),n,this.orchestrator?.taskServerEnabled??!1)===`failed`)throw console.warn(`Failed to delete task from server — queued for replay.`),await this.queueTaskSyncOutboxOperation(e,{type:`delete`,id:t,queuedAt:Date.now()}),Error(`Failed to delete scheduled task on server; task kept locally.`);await eG(e,t),await this.loadTasks(e)}async ensurePeerConversation(e,t){let n=`peer:${t}`,r=await Rt(e);if(!r.find(e=>e.groupId===n)){let i=[...r],a=``;if(this.orchestrator?.peerjsPeerAliases){for(let[e,n]of Object.entries(this.orchestrator.peerjsPeerAliases))if(n===t){a=e;break}}i.push({groupId:n,name:`Peer: ${a||t.substring(0,8)}`,createdAt:Date.now()}),await Nt(e,i),await this.loadGroups(e)}return n}async grantStorageAccess(e){try{await xK(e),await this.loadFiles(e)}catch(e){console.error(`Failed to grant storage access:`,e)}}async init(e,t){this._db=e,this.orchestrator=t,this._taskSyncOutbox=this.parseTaskSyncOutbox(await x(e,m.TASK_SYNC_OUTBOX)),await this.replayTaskSyncOutbox(e),typeof window<`u`&&!this._onlineReplayHandler&&(this._onlineReplayHandler=()=>{this._db&&this.replayTaskSyncOutbox(this._db)},window.addEventListener(`online`,this._onlineReplayHandler)),t.events.on(`a2ui-surface`,async({groupId:t,envelope:n})=>{t&&this.ensureGroupExists(e,t);let r=this._messages.get(),i=r.findIndex(e=>e.a2uiEnvelopes?.some(e=>e.surfaceId===n.surfaceId));if(i!==-1){let t=r[i],a=[...t.a2uiEnvelopes||[],n],o={...t,a2uiEnvelopes:a},s=[...r];s[i]=o,this._messages.set(s),await CW(e,o)}else{let i=!t.startsWith(`peer:`),a={id:he(),groupId:t,sender:i?`agent`:t.replace(/^peer:/,``),content:``,timestamp:Date.now(),channel:t.startsWith(`peer:`)?`peerjs`:`browser`,isFromMe:i,isTrigger:!1,a2uiEnvelopes:[n]};t===this._activeGroupId.get()&&this._messages.set([...r,a]),await CW(e,a)}}),t.events.on(`message`,t=>{if(t.groupId&&this.ensureGroupExists(e,t.groupId,t.timestamp),t.groupId&&t.groupId!==this._activeGroupId.get()){let e=new Set(this._unreadGroupIds.get());e.add(t.groupId),this._unreadGroupIds.set(e);return}t.isFromMe&&this._streamingText.get()!==null&&this._streamingText.set(null),this._messages.set([...this._messages.get(),t])}),t.events.on(`typing`,({groupId:e,typing:t})=>{e&&e!==this._activeGroupId.get()||this._isTyping.set(t)}),t.events.on(`tool-activity`,({groupId:e,tool:t,status:n})=>{e&&e!==this._activeGroupId.get()||this._toolActivity.set(n===`running`?{tool:t,status:n}:null)}),t.events.on(`model-download-progress`,e=>{this._modelDownloadProgress.set(e.status===`done`?null:e)}),t.events.on(`thinking-log`,e=>{e.groupId&&e.groupId!==this._activeGroupId.get()||(e.level===`info`&&e.label===`Starting`?this._activityLog.set([e]):this._activityLog.set([...this._activityLog.get(),e]),this.forwardActivityLogEntryToServer(e))}),t.events.on(`state-change`,e=>{let t=typeof e==`string`?e:e.state,n=typeof e==`string`?void 0:e.groupId;if(n&&n!==this._activeGroupId.get())return;let r=this._lastOrchestratorDisplayState;this._lastOrchestratorDisplayState=t,this._state.set(t),t===`idle`&&(this._toolActivity.set(null),this._modelDownloadProgress.set(null),this._streamingText.set(null)),t===`thinking`&&r!==`thinking`&&r!==`responding`&&(this._tokenUsageAccumulator=null)}),t.events.on(`error`,({error:e})=>{console.error(`[Orchestrator Error Event]`,e),this._error.set(e),this._state.set(`error`)}),t.events.on(`session-reset`,()=>{this._messages.set([]),this._activityLog.set([]),this._tokenUsageAccumulator=null,this._tokenUsage.set(null),this._contextUsage.set(null),this._toolActivity.set(null),this._modelDownloadProgress.set(null),this._streamingText.set(null),this._isTyping.set(!1),this._state.set(`idle`)}),t.events.on(`context-compacted`,e=>{e?.groupId&&e.groupId!==this._activeGroupId.get()||(this._tokenUsage.set(null),this.loadHistory())}),t.events.on(`token-usage`,e=>{if(!e||e.groupId&&e.groupId!==this._activeGroupId.get())return;let t=$K(this._tokenUsageAccumulator,e);this._tokenUsageAccumulator=t,this._tokenUsage.set(t),this.orchestrator?.refreshContextUsage&&this._db&&this.orchestrator.refreshContextUsage(this._db,this._activeGroupId.get())}),t.events.on(`context-usage`,e=>{this._contextUsage.set(e)}),t.events.on(`ready`,()=>{this._ready.set(!0)}),t.events.on(`task-change`,()=>{this.loadTasks(e)}),t.events.on(`file-change`,()=>{this.loadFiles(e)}),t.events.on(`streaming-start`,({groupId:e})=>{e===this._activeGroupId.get()&&this._streamingText.set(``)}),t.events.on(`streaming-chunk`,({groupId:e,text:t})=>{if(e!==this._activeGroupId.get())return;let n=this._streamingText.get();this._streamingText.set((n||``)+t)}),t.events.on(`streaming-end`,({groupId:e})=>{e===this._activeGroupId.get()&&this._streamingText.set(null)}),t.events.on(`streaming-done`,({groupId:e})=>{this._activeGroupId.get()}),t.events.on(`streaming-error`,({groupId:e})=>{this._activeGroupId.get()}),this._aguiAdapter=new VK(t.events),this._aguiAdapter.start(),typeof window<`u`&&window.addEventListener(`shadow-claw-agui-event`,(e=>{e.detail.groupId===this._activeGroupId.get()&&this._aguiEvent.set(e.detail);let t=e.detail.event;if(t){if(t.type===`STATE_SNAPSHOT`){let n=new Map(this._peerStateByGroup.get());n.set(e.detail.groupId,t.snapshot||{}),this._peerStateByGroup.set(n)}else if(t.type===`STATE_DELTA`){let n=new Map(this._peerStateByGroup.get()),r=HK(n.get(e.detail.groupId)||{},t.delta||[]);n.set(e.detail.groupId,r),this._peerStateByGroup.set(n)}}})),await C(e),w(),S();let n=await x(e,m.PAGES_LIST),r=await BK(e,p,n==null?[]:this.parsePagesList(n));r.length>0?(this.setPages(r),await this.persistPages(e)):await this.ensureDefaultPage(e),await this.applySiteConfigDefaults(e),await this.loadGroups(e);let i=await x(e,m.LAST_ACTIVE_GROUP);i&&i!==this._activeGroupId.get()&&this._activeGroupId.set(i);let a=await x(e,m.LAST_ACTIVE_PAGE);a&&(this._activePage.set(a),this._hadPersistedActivePage=!0);let o=await x(e,m.SIDEBAR_DEFAULT_PAGE);this._sidebarDefaultPage.set(this.normalizeSidebarDefaultPage(o));let s=await x(e,m.LAST_SELECTED_PINNED_PAGE);if(s)try{let e=JSON.parse(s);e&&typeof e.path==`string`&&typeof e.groupId==`string`&&this._activePinnedPage.set(e)}catch{}this.orchestrator&&(this._useProxy.set(this.orchestrator.useProxy),this._proxyUrl.set(this.orchestrator.proxyUrl),this._gitProxyUrl.set(this.orchestrator.gitProxyUrl),this._vmBashFullInternetAccess.set(this.orchestrator.vmBashFullInternetAccess)),await Promise.all([this.loadHistory(),this.loadTasks(e),this.loadFiles(e)]),this._initResolve?.(),this.scheduleBackgroundStaticMainSiteSeeding(e)}async loadFiles(e){let t=this._activeGroupId.get(),n=this._currentPath.get();try{this._storageStatus.set(await D(e));let r=await Cz(e,t,n);this._files.set(r)}catch(e){console.error(`Failed to load files in store:`,e)}}async loadGroups(e){let t=await Rt(e);this._groups.set(t)}async loadHistory(){let e=this._activeGroupId.get(),t=await Tt(e,200);this._activeGroupId.get()===e&&this._messages.set(t)}async loadTasks(e){let t=this._activeGroupId.get(),n=await it(e),r=n.filter(e=>e.groupId===t);r.sort((e,t)=>{let n=e.order??0,r=t.order??0;return n===r?e.createdAt-t.createdAt:n-r}),this._tasks.set(r);let i=await this.getSubscriberId(e),a=await QK(t,this.getTaskServerBaseUrl(),i,this.orchestrator?.taskServerEnabled??!1);if(!a)return;let o=new Set(n.map(e=>e.id)),s=a.filter(e=>!o.has(e.id));if(s.length===0)return;for(let t of s)await rG(e,t);let c=[...r,...s];c.sort((e,t)=>{let n=e.order??0,r=t.order??0;return n===r?e.createdAt-t.createdAt:n-r}),this._tasks.set(c)}async navigateBackFolder(e){let t=this._currentPath.get();if(t===`.`)return;let n=t.split(`/`).filter(Boolean);n.pop();let r=n.length===0?`.`:n.join(`/`);await this.setCurrentPath(e,r)}async navigateIntoFolder(e,t){let n=this._currentPath.get(),r=n===`.`?t.replace(/\/$/,``):`${n}/${t.replace(/\/$/,``)}`;try{await this.setCurrentPath(e,r)}catch(t){console.error(`Failed to navigate into folder in store:`,t),st(`Folder not found: ${r}`,4500),await this.loadFiles(e)}}async newSession(e){await this.orchestrator?.newSession?.(e,this._activeGroupId.get()),await this.loadHistory()}async removePage(t,n,r=this._activeGroupId.get()){let i=this.normalizePagePath(n);if(!i)return;let a=this._pages.get();if(!a.some(e=>e.path===i&&e.groupId===r))return;let o=a.filter(e=>!(e.path===i&&e.groupId===r));await bz(t,r,i);let s=r===`br:main`&&i===`MEMORY.md`;s&&await uz(t,!0);let c=s||await lz(t);if(o.length===0&&!c)if(await dz(t,`br:main`))o.push({groupId:p,path:e.DEFAULT_PAGE_PATH});else return;this.setPages(o);let l=this._defaultPinnedPage.get();l&&l.path===i&&l.groupId===r&&await this.setDefaultPinnedPage(t,null),await this.persistPages(t)}async removeAllPages(e){let t=[...this._pages.get()];for(let n of t)await bz(e,n.groupId,n.path),n.groupId===`br:main`&&n.path===`MEMORY.md`&&await uz(e,!0);this.setPages([]),await this.setDefaultPinnedPage(e,null),await this.setActivePinnedPage(e,null),await this.persistPages(e)}async renameConversation(e,t,n){await Ft(e,t,n),await this.loadGroups(e)}async reorderConversations(e,t){await zt(e,t),await this.loadGroups(e)}async reorderTasks(e,t,n){let r=await _K(e,t,n);await this.loadTasks(e);let i=await this.getSubscriberId(e);for(let t of r)await XK(t,this.getTaskServerBaseUrl(),i,this.orchestrator?.taskServerEnabled??!1)||(console.warn(`Failed to sync reordered task "${t.id}" to server — queued for replay.`),await this.queueTaskSyncOutboxOperation(e,{type:`upsert`,id:t.id,task:t,queuedAt:Date.now()}))}async replayTaskSyncOutbox(e){if(!(this._replayingTaskSyncOutbox||this._taskSyncOutbox.length===0)){this._replayingTaskSyncOutbox=!0;try{let t=await this.getSubscriberId(e),n=[];for(let e of this._taskSyncOutbox){let r=this.getTaskServerBaseUrl();(e.type===`upsert`?await XK(e.task,r,t,this.orchestrator?.taskServerEnabled??!1):await ZK(e.id,r,t,this.orchestrator?.taskServerEnabled??!1))||n.push(e)}this._taskSyncOutbox=this.compactTaskSyncOutbox(n),await this.persistTaskSyncOutbox(e)}finally{this._replayingTaskSyncOutbox=!1}}}async resetToRootFolder(e){await this.setCurrentPath(e,`.`)}async restartCurrentRequest(){return this.orchestrator?.restartCurrentRequest?this.orchestrator.restartCurrentRequest(this._activeGroupId.get()):!1}async restoreTasksFromBackup(e,t){await this.clearAllTasks(e);let n=this._activeGroupId.get();for(let r of t){let t={...r,groupId:n,id:crypto.randomUUID?crypto.randomUUID():`task-${Date.now()}-${Math.random()}`};await this.upsertTask(e,t,{reloadTasks:!1})}await this.loadTasks(e)}async runTask(e,t=!1){let n=this._db;if(t&&n&&(await gK(e.id,Date.now()),await this.loadTasks(n)),e.type===`tools`&&Array.isArray(e.tools)&&e.tools.length>0)if(this.orchestrator?.agentWorker){let n=e.subagent?`subagent:${he()}`:e.groupId;this.orchestrator.agentWorker.postMessage({type:`execute-task-tools`,payload:{groupId:n,tools:e.tools,isManual:t}})}else console.error(`Agent worker not available to execute tool task.`);else{if(!e.groupId){console.error(`Task ${e.id} has no groupId - refusing to execute in active conversation to prevent context pollution.`);return}this.orchestrator?.browserChat?.submit(e.prompt,e.groupId,[],void 0,e.freshContext,e.subagent)}}async setActivePage(e,t){this._activePage.set(t),await k(e,m.LAST_ACTIVE_PAGE,t);let n=this.resolveSidebarDefaultPageForActivePage(t);n!==this._sidebarDefaultPage.get()&&(this._sidebarDefaultPage.set(n),await k(e,m.SIDEBAR_DEFAULT_PAGE,n))}async setActivePinnedPage(e,t){this._activePinnedPage.set(t),t?await k(e,m.LAST_SELECTED_PINNED_PAGE,JSON.stringify(t)):await k(e,m.LAST_SELECTED_PINNED_PAGE,null)}async setDefaultPinnedPage(e,t){let n=this._defaultPinnedPage.get(),r=n&&t&&n.path===t.path&&n.groupId===t.groupId?null:t;this._defaultPinnedPage.set(r),r?await k(e,m.DEFAULT_PINNED_PAGE,JSON.stringify(r)):await k(e,m.DEFAULT_PINNED_PAGE,null)}async reorderPages(e,t){this.setPages(t),await this.persistPages(e)}async setCurrentPath(e,t){let n=t.replace(/^\/+|\/+$/g,``)||`.`,r=this._activeGroupId.get();this._storageStatus.set(await D(e));let i=await Cz(e,r,n);this._currentPath.set(n),this._files.set(i)}async setGitProxyUrl(e,t){this.orchestrator&&(await $G(this.orchestrator,e,t),this._gitProxyUrl.set(this.orchestrator.gitProxyUrl))}async setProxyUrl(e,t){this.orchestrator&&(await nK(this.orchestrator,e,t),this._proxyUrl.set(this.orchestrator.proxyUrl))}async setUseProxy(e,t){this.orchestrator&&(await lK(this.orchestrator,e,t),this._useProxy.set(this.orchestrator.useProxy))}async setVMBashFullInternetAccess(e,t){this.orchestrator&&(await uK(this.orchestrator,e,t),this._vmBashFullInternetAccess.set(this.orchestrator.vmBashFullInternetAccess))}async switchConversation(e,t,n){this.setActiveGroup(e,t,n??this._activePage.get()===`chat`),await k(e,m.LAST_ACTIVE_GROUP,t)}async toggleTask(e,t,n){let r={...t,enabled:n};await rG(e,r),await this.loadTasks(e),await XK(r,this.getTaskServerBaseUrl(),await this.getSubscriberId(e),this.orchestrator?.taskServerEnabled??!1)||(console.warn(`Failed to update task on server — queued for replay.`),await this.queueTaskSyncOutboxOperation(e,{type:`upsert`,id:r.id,task:r,queuedAt:Date.now()}))}async updateConversationPinnedProvider(e,t,n,r,i){await Vt(e,t,n,r,i),await this.loadGroups(e)}async updateConversationProviderRuntimeOverrides(e,t,n){await Ut(e,t,n),await this.loadGroups(e)}async updateConversationSubagentSettings(e,t,n,r,i,a){await Ht(e,t,n,r,i,a),await this.loadGroups(e)}async updateConversationToolTags(e,t,n){await It(e,t,n),await this.loadGroups(e)}async upsertTask(e,t,n){let r=n?.reloadTasks!==!1;await rG(e,t),r&&await this.loadTasks(e);let i=await this.getSubscriberId(e);await XK(t,this.getTaskServerBaseUrl(),i,this.orchestrator?.taskServerEnabled??!1)||(console.warn(`Failed to sync task to server — queued for replay.`),await this.queueTaskSyncOutboxOperation(e,{type:`upsert`,id:t.id,task:t,queuedAt:Date.now()}))}compactTaskSyncOutbox(e){let t=new Map;return e.forEach((e,n)=>{t.set(e.id,n)}),e.filter((e,n)=>t.get(e.id)===n)}deriveGroupName(e){return e.startsWith(`tg:`)?`Telegram ${e.slice(3)}`:e.startsWith(`im:`)?`iMessage ${e.slice(3)}`:e.startsWith(`br:`)?e===`br:main`?`Main`:`Browser Conversation`:`Conversation`}getActivityLogSessionStartedAt(e){let t=this._activityLogSessionStartedAtByGroup.get(e);if(t)return t;let n=new Date().toISOString();return this._activityLogSessionStartedAtByGroup.set(e,n),n}getTaskServerBaseUrl(){return this.orchestrator?.taskServerUrl??`/schedule`}async getSubscriberId(e){if(this._subscriberId)return this._subscriberId;let t=await nG(e);return this._subscriberId=t,t}normalizePagePath(t){let n=t.trim().replace(/^\/+/,``).replace(/\/+/g,`/`);return n===`main/memory.md`?e.DEFAULT_PAGE_PATH:n}normalizeSidebarDefaultPage(e){return e===`pages`||e===`chat`||e===`tasks`||e===`files`?e:`chat`}parsePagesList(e){if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.map(e=>{if(typeof e==`string`)return{groupId:p,path:this.normalizePagePath(e)};if(!e||typeof e!=`object`)return null;let t=e;if(typeof t.path!=`string`)return null;let n=typeof t.groupId==`string`&&t.groupId.trim().length>0?t.groupId:p,r=n===`br:main`?this.normalizePagePath(t.path):t.path.trim();return r?{groupId:n,path:r}:null}).filter(e=>!!e).filter((e,t,n)=>{let r=`${e.groupId}\u0000${e.path}`;return t===n.findIndex(e=>`${e.groupId}\u0000${e.path}`===r)}):[]}catch{return[]}}parseTaskSyncOutbox(e){if(!e)return[];try{let t=JSON.parse(e);if(!Array.isArray(t))return[];let n=t.filter(e=>!!e&&typeof e==`object`).filter(e=>e.type===`upsert`||e.type===`delete`).filter(e=>typeof e.id==`string`&&e.id.length>0).map(e=>({...e,queuedAt:typeof e.queuedAt==`number`?e.queuedAt:Date.now()}));return this.compactTaskSyncOutbox(n)}catch{return[]}}resolveSidebarDefaultPageForActivePage(e){return e===`pages`||e===`chat`||e===`tasks`||e===`files`?e:this._sidebarDefaultPage.get()}setPages(e){let t=e.filter(e=>e.path.toLowerCase()===`memory.md`),n=e.filter(e=>e.path.toLowerCase()!==`memory.md`);this._pages.set([...n,...t])}async ensureDefaultPage(t){if(await lz(t))return;let n=await dz(t,p);await gz(t,p),!(!n||this._pages.get().length>0)&&(this.setPages([{groupId:p,path:e.DEFAULT_PAGE_PATH}]),await this.persistPages(t))}async ensureGroupExists(e,t,n){let r=this._groups.get();if(r.some(e=>e.groupId===t))return;let i=[...r,{groupId:t,name:this.deriveGroupName(t),createdAt:n||Date.now()}];this._groups.set(i);try{await Nt(e,i)}catch(e){console.error(`Failed to persist new conversation metadata:`,e)}}async forwardActivityLogEntryToServer(e){if(!this._db||!JK(await x(this._db,m.ACTIVITY_LOG_DISK_LOGGING_ENABLED)))return;let t=typeof e.groupId==`string`&&e.groupId?e.groupId:this._activeGroupId.get();if(!t)return;let n=typeof e.message==`string`?e.message.trim():``;if(!n)return;e.level===`info`&&e.label===`Starting`&&this._activityLogSessionStartedAtByGroup.set(t,new Date().toISOString());let r=this.getActivityLogSessionStartedAt(t);try{await fetch(`/activity-log`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({groupId:t,level:e.level,label:e.label,message:n,timestamp:new Date().toISOString(),sessionStartedAt:r})})}catch(e){console.warn(`Failed to persist activity log entry to server:`,e)}}scheduleBackgroundStaticMainSiteSeeding(e){if(typeof window>`u`)return;let t=async()=>{try{if(await OK(e,`br:main`))return;let t=await x(e,m.PAGES_LIST),n=await BK(e,p,t==null?[]:this.parsePagesList(t),{preferEmbedded:!1});n&&n.length>0&&(this.setPages(n),await this.persistPages(e))}catch(e){console.warn(`Background static main site seeding failed:`,e)}};typeof window.requestIdleCallback==`function`?window.requestIdleCallback(()=>void t(),{timeout:3e3}):setTimeout(()=>void t(),100)}async persistPages(e){await k(e,m.PAGES_LIST,JSON.stringify(this._pages.get()))}async persistTaskSyncOutbox(e){await k(e,m.TASK_SYNC_OUTBOX,JSON.stringify(this._taskSyncOutbox))}async queueTaskSyncOutboxOperation(e,t){this._taskSyncOutbox=this.compactTaskSyncOutbox([...this._taskSyncOutbox,t]),await this.persistTaskSyncOutbox(e)}async applySiteConfigDefaults(e){if(!(typeof document>`u`))try{let t=document.getElementById(`shadow-claw-site-config`);if(!t?.textContent)return;let n=JSON.parse(t.textContent);if(!n||typeof n!=`object`)return;T(n),w(),S();let r=n.customElements;if((await Rt(e)).find(e=>e.groupId===`br:main`)?.toolTags&&await It(e,p,void 0),await x(e,m.SITE_CONFIG_SEEDED))return;let i=n.allowedCustomElements||(typeof r==`object`&&!Array.isArray(r)?r.allowedElements:void 0);i!==void 0&&await k(e,m.ALLOWED_CUSTOM_ELEMENTS,JSON.stringify(i));let a=n.allowedCustomElementDomains||(typeof r==`object`&&!Array.isArray(r)?r.allowedDomains:void 0);if(a!==void 0&&await k(e,m.ALLOWED_CUSTOM_ELEMENT_HOST_PATTERNS,JSON.stringify(a)),n.sidebar&&typeof n.sidebar==`object`){let{pagesHidden:t,chatHidden:r,tasksHidden:i,filesHidden:a,defaultPage:o}=n.sidebar;t!==void 0&&await k(e,m.SIDEBAR_PAGES_HIDDEN,String(!!t)),r!==void 0&&await k(e,m.SIDEBAR_CHAT_HIDDEN,String(!!r)),i!==void 0&&await k(e,m.SIDEBAR_TASKS_HIDDEN,String(!!i)),a!==void 0&&await k(e,m.SIDEBAR_FILES_HIDDEN,String(!!a)),o&&typeof o==`string`&&await k(e,m.SIDEBAR_DEFAULT_PAGE,o)}if(n.settings&&typeof n.settings==`object`){let{assistantName:t}=n.settings;t&&typeof t==`string`&&await k(e,m.ASSISTANT_NAME,t)}let o=(n.settings&&typeof n.settings==`object`?n.settings.defaultToolsProfile:void 0)??n.defaultToolsProfile;if(typeof o==`string`&&o.trim().length>0){let t=o.trim();if(t.toLowerCase()===`none`)await me.deactivateProfile(e);else{let n=me.profiles.find(e=>e.id.toLowerCase()===t.toLowerCase()||e.name.toLowerCase()===t.toLowerCase());n?await me.activateProfile(e,n.id):console.warn(`Default tools profile "${t}" specified in site-config was not found.`)}}if(n.pages&&typeof n.pages==`object`){let{defaultPinnedPage:t}=n.pages;t&&typeof t==`string`&&await k(e,m.DEFAULT_PINNED_PAGE,t)}if(Array.isArray(n.enabledTools)){let t=n.enabledTools.filter(e=>typeof e==`string`&&e.trim().length>0);await me.setAllEnabled(e,t),await me.setAllDeclarativeEnabled(e,t)}await k(e,m.SITE_CONFIG_SEEDED,`true`)}catch(e){console.warn(`Failed to apply site-config defaults:`,e)}}};const tq=new eq;export{gG as $,gz as $t,XG as A,mW as At,jG as B,AH as Bt,ZG as C,kW as Ct,WG as D,oW as Dt,HG as E,SW as Et,DG as F,gU as Ft,aG as G,DB as Gt,fG as H,CV as Ht,MG as I,mU as It,oG as J,SB as Jt,cG as K,CB as Kt,OG as L,tU as Lt,zG as M,qU as Mt,IG as N,wU as Nt,YG as O,_W as Ot,LG as P,xU as Pt,hG as Q,Sz as Qt,kG as R,BH as Rt,dK as S,UW as St,UG as T,CW as Tt,EG as U,UB as Ut,dG as V,LV as Vt,iG as W,MB as Wt,lG as X,Pz as Xt,uG as Y,TB as Yt,mG as Z,wz as Zt,aK as _,ft as _n,FW as _t,CK as a,Xt as an,wG as at,cK as b,VW as bt,wK as c,qt as cn,YW as ct,QG as d,wt as dn,zW as dt,dz as en,_G as et,eK as f,Ct as fn,BW as ft,iK as g,gt as gn,AW as gt,rK as h,yt as hn,MW as ht,EK as i,tn as in,SG as it,VG as j,yW as jt,JG as k,bW as kt,gK as l,Rt as ln,ZW as lt,nK as m,St as mn,KW as mt,KK as n,en as nn,yG as nt,SK as o,Yt as on,TG as ot,tK as p,xt as pn,GW as pt,sG as q,xB as qt,FK as r,Qt as rn,bG as rt,TK as s,Jt as sn,$W as st,tq as t,nn as tn,vG as tt,fK as u,Ot as un,JW as ut,oK as v,dt as vn,NW as vt,qG as w,DW as wt,lK as x,HW as xt,sK as y,PW as yt,AG as z,IH as zt};
|
|
1965
|
+
`),{type:`key-points`,format:`markdown`,length:`medium`});await e.handleCompactDone(t,n,r);return}catch(r){await JW(e,t,n,`⚠️ Built-in Task API compaction failed, falling back to provider: ${r instanceof Error?r.message:String(r)}`)}if(i===`prompt_api`){if(wU()||await LV(),!wU()){e.events.emit(`error`,{groupId:n,error:`Prompt API is not available in this browser. Switch provider or enable experimental browser flags.`}),e.events.emit(`typing`,{groupId:n,typing:!1}),e.setState(`idle`,n);return}let r=new AbortController;e.promptControllers.set(n,r);try{let i=await JU(xW(f),v,r.signal,async n=>{await zG(e,t,n)},n);await e.handleCompactDone(t,n,i)}catch(r){if(r instanceof Error&&r.name===`AbortError`)return;await JW(e,t,n,`⚠️ Error: Compaction failed: ${r instanceof Error?r.message:String(r)}`)}finally{e.promptControllers.delete(n)}return}let y=e.createProviderRequestId(n);e.agentWorker?.postMessage({type:`compact`,payload:{apiKey:c,assistantName:e.assistantName,contextCompression:e.contextCompressionEnabled,contextLimit:bW(h),groupId:n,memory:l,messages:v,model:o,provider:i,providerHeaders:uG(e,i,y,r?.providerRuntimeOverrides),rateLimitAutoAdapt:e.rateLimitAutoAdapt,rateLimitCallsPerMinute:e.rateLimitCallsPerMinute,storageHandle:await x(t,m.STORAGE_HANDLE),systemPrompt:f}})}function HG(e,t=p){e.agentWorker?.postMessage({payload:{groupId:t},type:`vm-terminal-open`})}function UG(e,t=p){e.agentWorker?.postMessage({payload:{groupId:t},type:`vm-terminal-close`})}function WG(e,t){e.agentWorker?.postMessage({payload:{data:t},type:`vm-terminal-input`})}function GG(e,t=p){e.agentWorker?.postMessage({payload:{groupId:t},type:`vm-workspace-sync`})}function KG(e,t=p){e.agentWorker?.postMessage({payload:{groupId:t},type:`vm-workspace-flush`})}function qG(e,t,n){e.agentWorker?.postMessage({payload:{id:t,response:n},type:`ask-user-response`})}async function JG(e,t,n,r=k){let i=n===`disabled`||n===`9p`||n===`ext2`||n===`auto`?n:`disabled`;e.vmBootMode=i,await r(t,m.VM_BOOT_MODE,i),e.agentWorker?.postMessage({payload:{mode:i},type:`set-vm-mode`})}async function YG(e,t,n,r=k){let i=typeof n==`string`?n.trim():``;await r(t,m.VM_BOOT_HOST,i),e.agentWorker?.postMessage({payload:{bootHost:i},type:`set-vm-mode`})}async function XG(e,t,n,r=k){let i=typeof n==`string`?n.trim():``;await r(t,m.VM_NETWORK_RELAY_URL,i),e.agentWorker?.postMessage({payload:{networkRelayUrl:i},type:`set-vm-mode`})}function ZG(e){`serviceWorker`in navigator&&navigator.serviceWorker?.controller&&navigator.serviceWorker.controller.postMessage({type:`set-proxy-config`,payload:{useProxy:e.useProxy,proxyUrl:e.proxyUrl}})}async function QG(e,t,n,r=k){e.contextCompressionEnabled=!!n,await r(t,m.CONTEXT_COMPRESSION_ENABLED,e.contextCompressionEnabled?`true`:`false`)}async function $G(e,t,n,r=k){e.gitProxyUrl=n||`/git-proxy`,await r(t,m.GIT_PROXY_URL,e.gitProxyUrl)}async function eK(e,t,n,r=k){e.maxIterations=n,await r(t,m.MAX_ITERATIONS,String(n))}async function tK(e,t,n,r=k){let i=Math.max(1,n);e.maxTokens=i,await r(t,m.MAX_TOKENS,String(i))}async function nK(e,t,n,r=k){e.proxyUrl=n||`/proxy`,await r(t,m.PROXY_URL,e.proxyUrl),ZG(e)}async function rK(e,t,n,r=k){e.rateLimitAutoAdapt=!!n,await r(t,m.RATE_LIMIT_AUTO_ADAPT,e.rateLimitAutoAdapt?`true`:`false`)}async function iK(e,t,n,r=k){let i=Number.isFinite(n)?Math.max(0,Math.floor(n)):0;e.rateLimitCallsPerMinute=i,await r(t,m.RATE_LIMIT_CALLS_PER_MINUTE,String(i))}async function aK(e,t,n,r=k){e.reasoningEffort=(typeof n==`string`?n.trim().toLowerCase():`none`)||`none`,await r(t,m.REASONING_EFFORT,e.reasoningEffort)}async function oK(e,t,n,r=k){e.streamingEnabled=!!n,await r(t,m.STREAMING_ENABLED,e.streamingEnabled?`true`:`false`)}async function sK(e,t,n,r=k){e.taskServerEnabled=!!n,await r(t,m.TASK_SERVER_ENABLED,e.taskServerEnabled?`true`:`false`)}async function cK(e,t,n,r=k){e.taskServerUrl=n||`http://localhost:8888/schedule`,await r(t,m.TASK_SERVER_URL,e.taskServerUrl)}async function lK(e,t,n,r=k){e.useProxy=!!n,await r(t,m.USE_PROXY,e.useProxy?`true`:`false`),ZG(e)}async function uK(e,t,n,r=k){e.vmBashFullInternetAccess=!!n,await r(t,m.VM_BASH_FULL_INTERNET_ACCESS,e.vmBashFullInternetAccess?`true`:`false`)}async function dK(e,t,n,r=k){let i=Math.min(Math.max(Math.floor(n),1),1800);await r(t,m.VM_BASH_TIMEOUT_SEC,String(i))}function fK(e,t){return new Promise((n,r)=>{try{let i=e?.transaction(`messages`,`readwrite`);if(!i)return r(Error(`failed to get transaction, cannot clear group messages.`));let a=i.objectStore(`messages`).index(`by-group`).openCursor(t);a.onsuccess=()=>{let e=a.result;e?(e.delete(),e.continue()):n(void 0)},a.onerror=()=>r(a.error)}catch(e){r(e)}})}function pK(e,t,n){return new Promise((r,i)=>{let a=e?.transaction(`messages`,`readwrite`);if(!a)throw Error(`failed to get transaction, cannot clone messages.`);let o=a.objectStore(`messages`),s=o.index(`by-group`).openCursor(t),c=0;s.onsuccess=()=>{let e=s.result;if(e){let t={...e.value,id:he(),groupId:n};o.put(t),c++,e.continue()}else r(c)},s.onerror=()=>i(s.error)})}function mK(e,t,n){return new Promise((r,i)=>{let a=e?.transaction(`tasks`,`readwrite`);if(!a)throw Error(`failed to get transaction, cannot clone tasks.`);let o=a.objectStore(`tasks`),s=o.index(`by-group`).openCursor(t),c=0;s.onsuccess=()=>{let e=s.result;if(e){let t={...e.value,id:he(),groupId:n};o.put(t),c++,e.continue()}else r(c)},s.onerror=()=>i(s.error)})}function hK(e,t){return b(e,`messages`,`readwrite`,e=>e.delete(t)).then(()=>void 0)}function gK(e,t){return new Promise(async(n,r)=>{try{let i=await y();if(!i)return r(Error(`failed to get transaction, cannot update task last run.`));let a=i.transaction(`tasks`,`readwrite`);if(!a)return r(Error(`failed to get transaction`));let o=a.objectStore(`tasks`),s=o.get(e);s.onsuccess=()=>{let e=s.result;if(!e){n();return}e.lastRun=t;let i=o.put(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)},s.onerror=()=>r(s.error)}catch(e){r(e)}})}async function _K(e,t,n){let r=(await it(e)).filter(e=>e.groupId===t),i=new Map(r.map(e=>[e.id,e])),a=[],o=0;for(let t of n){let n=i.get(t);n&&(n.order=o++,await rG(e,n),a.push(n),i.delete(t))}let s=Array.from(i.values()).sort((e,t)=>{let n=e.order??0,r=t.order??0;return n===r?e.createdAt-t.createdAt:n-r});for(let t of s)t.order=o++,await rG(e,t),a.push(t);return a}async function vK(e,t,n,r){let i=await ie(e,t),a=await ie(e,n),o=r.replace(/\\/g,`/`).replace(/^\/+/,``).split(`/`).filter(Boolean),s=i,c=a;for(let e of o)s=await s.getDirectoryHandle(e),c=await c.getDirectoryHandle(e,{create:!0});let l=n.replace(/:/g,`-`),u=[ne(),`groups`,l,...o];try{await yK(e,n,s,c,u)}catch(e){throw o.length>0&&await a.removeEntry(o[0],{recursive:!0}).catch(()=>void 0),e}}async function yK(e,t,n,r,i){for await(let[a,o]of n.entries()){if(o.kind===`directory`){await yK(e,t,o,await r.getDirectoryHandle(a,{create:!0}),[...i,a]);continue}let n=await o.getFile(),s=await r.getFileHandle(a,{create:!0});try{await pe(s,n)}catch(t){if(!((t instanceof Error?t.message:String(t)).includes(`Writable file streams are not supported`)&&(await D(e)).type===`opfs`))throw t;await oe([...i,a],n)}}}function bK(e){if(!e||typeof e!=`object`)return!1;let t=globalThis.FileSystemDirectoryHandle;return t!==void 0&&e instanceof t||typeof e.getDirectoryHandle==`function`&&typeof e.getFileHandle==`function`&&typeof e.requestPermission==`function`}async function xK(e){let t=await x(e,m.STORAGE_HANDLE);return!bK(t)||await t.requestPermission({mode:`readwrite`})===`granted`}function SK(e){let t=_();return t?`shadowclaw:${t}:${e}`:e}function CK(e){if(typeof localStorage>`u`)return null;let t=SK(e);try{let n=localStorage.getItem(t);if(n!==null)return n;if(t===e)return null;let r=localStorage.getItem(e);if(r!==null)return localStorage.setItem(t,r),r}catch(e){console.warn(`Unable to read from localStorage:`,e)}return null}function wK(e,t){if(typeof localStorage>`u`)return;let n=SK(e);try{localStorage.setItem(n,t)}catch(e){console.warn(`Unable to write to localStorage:`,e)}}function TK(e){if(typeof localStorage>`u`)return;let t=SK(e);try{localStorage.removeItem(t)}catch(e){console.warn(`Unable to remove from localStorage:`,e)}}async function EK(e,t){let n=await ie(e,t);for await(let[e]of n.entries())await n.removeEntry(e,{recursive:!0})}function DK(e=p){return e===`br:main`?m.STATIC_MAIN_SITE_SEEDED:`${m.STATIC_MAIN_SITE_SEEDED}:${e}`}async function OK(e,t=p){let n=await x(e,DK(t));return n===!0||n===`true`}async function kK(e,t=p,n=!0){await k(e,DK(t),n)}function AK(){let e=v(`/static-main-manifest.json`);if(typeof window<`u`&&window.location?.origin)try{return new URL(e,window.location.origin).toString()}catch{return e}return e}function jK(e){let t=v(`/static-main/${e.replace(/^\/+/,``)}`);if(typeof window<`u`&&window.location?.origin)try{return new URL(t,window.location.origin).toString()}catch{return t}return t}async function MK(){if(typeof fetch!=`function`)return null;try{let e=AK(),t=await fetch(e);if(t.ok){let e=await t.json();if(e&&Array.isArray(e.pages))return e}}catch{}return null}async function NK(e){if(typeof fetch!=`function`)return null;try{let t=jK(e),n=await fetch(t);if(n.ok)return await n.text()}catch{}return null}async function PK(e={}){let t=()=>{if(typeof document<`u`){let e=document.getElementById(`shadow-claw-static-manifest`);if(e&&e.textContent)try{let t=JSON.parse(e.textContent);if(t&&Array.isArray(t.pages))return t}catch(e){console.warn(`Failed to parse embedded static main manifest:`,e)}}return null};if(e.preferEmbedded!==!1){let e=t();if(e)return e}if(e.fetchFallback!==!1){let e=await MK();if(e)return e}if(e.preferEmbedded===!1){let e=t();if(e)return e}return{pages:[{displayPath:`index.html`,content:fz},{displayPath:`MEMORY.md`,content:sz}]}}async function FK(e){if(typeof document<`u`){let t=document.getElementById(`shadow-claw-static-manifest`);if(t&&t.textContent)try{let n=JSON.parse(t.textContent);if(n&&Array.isArray(n.pages)){let t=n.pages.find(t=>t.displayPath===e);if(t&&typeof t.content==`string`)return t.content}}catch{}}let t=await NK(e);if(typeof t==`string`)return t;let n=await MK();if(n&&Array.isArray(n.pages)){let t=n.pages.find(t=>t.displayPath===e);if(t&&typeof t.content==`string`)return t.content}return null}async function IK(e,t,n=[]){for(let[r,i]of Object.entries(t))if(r===`purgePreRenderedStaticPages`&&i===!0){if(n.length>0){let t=n[0],r=n.slice(1).join(`/`);try{r?await IH(e,t,r):await EK(e,t)}catch(e){console.warn(`Failed to purge pre-rendered static pages for ${t}/${r}:`,e)}}}else typeof i==`object`&&i&&await IK(e,i,[...n,r])}function LK(){if(typeof document<`u`)try{let e=document.getElementById(`shadow-claw-site-config`);if(e?.textContent){let t=JSON.parse(e.textContent);if(t?.pages?.sortOrder===`desc`)return`desc`;if(t?.pages?.sortOrder===`asc`)return`asc`}}catch{}return`desc`}function RK(e,t){let n=t??LK();return[...e].sort((e,t)=>{let r=e.path,i=t.path,a=r.split(`/`).pop()||``,o=i.split(`/`).pop()||``,s=/^index\.(html?|xhtml)$/iu.test(a),c=/^index\.(html?|xhtml)$/iu.test(o);if(s&&!c)return-1;if(!s&&c)return 1;let l=/^memory\.(md|markdown)$/iu.test(a),u=/^memory\.(md|markdown)$/iu.test(o);return l&&!u?1:!l&&u?-1:n===`asc`?r.localeCompare(i,void 0,{numeric:!0,sensitivity:`base`}):i.localeCompare(r,void 0,{numeric:!0,sensitivity:`base`})})}async function zK(e,t,n=`sc:purge-id`,r=`static_main_site_purge_id`){let i=t??`__legacy_purge_pages__`;try{if(CK(n)===i)return!0}catch{}try{if(await x(e,r)===i){try{wK(n,i)}catch{}return!0}await k(e,r,i);try{wK(n,i)}catch{}}catch{try{wK(n,i)}catch{}}return!1}async function BK(e,t=p,n=[],r={}){await gz(e,t);let i=await PK(r),a=!1;i.preRenderedStaticPages&&(await zK(e,i.purgeId)||(a=!0,await IK(e,i.preRenderedStaticPages)));let o=!1;if(t===`br:main`&&i.skillsPurgeId!==void 0&&!await zK(e,i.skillsPurgeId,`sc:skills-purge-id`,`static_main_skills_purge_id`)){o=!0;try{await IH(e,t,`.agents/skills/main`)}catch(e){if(!(e&&typeof e==`object`&&`name`in e&&e.name===`NotFoundError`))throw e}try{await IH(e,t,`.agents/tools/main`)}catch(e){if(!(e&&typeof e==`object`&&`name`in e&&e.name===`NotFoundError`))throw e}}for(let n of i.pages)if(n.content?.includes(`slug: "shadow-claw--purge-pages"`)){!a&&!await zK(e,i.purgeId)&&(a=!0,await EK(e,t));break}let s=t===`br:main`&&await lz(e),c=new Set(i.pages.map(e=>_z(t,e.displayPath))),l=a?n.filter(e=>e.groupId!==t||c.has(_z(e.groupId,e.path))):[...n];for(let n of i.pages)if(!n.content?.includes(`slug: "shadow-claw--purge-pages"`)){if(/^memory\.(md|markdown)$/iu.test(n.displayPath)){if(s)continue;let r=n.content===sz?void 0:n.content;if(r===void 0?await dz(e,t):await dz(e,t,r)){let e=_z(t,n.displayPath);l.some(t=>_z(t.groupId,t.path)===e)||l.push({groupId:t,path:n.displayPath})}continue}if(!await yz(e,t,n.displayPath))try{if(!await ae(e,t,n.displayPath)){let r=n.content;typeof r!=`string`&&(r=await NK(n.displayPath)??``),await ue(e,t,n.displayPath,r)}let r=_z(t,n.displayPath);l.some(e=>_z(e.groupId,e.path)===r)||l.push({groupId:t,path:n.displayPath})}catch(e){console.warn(`Failed to seed static page file ${n.displayPath}:`,e)}}if(t===`br:main`){for(let n of i.skills||[]){let r=`.agents/skills/main/${n.displayPath}`;try{await ae(e,t,r)||await ue(e,t,r,n.content)}catch(e){console.warn(`Failed to seed skill file ${r}:`,e)}}for(let n of i.tools||[]){let r=`.agents/tools/main/${n.displayPath}`;try{(o||!await ae(e,t,r))&&await ue(e,t,r,n.content)}catch(e){console.warn(`Failed to seed tool file ${r}:`,e)}}}let u=typeof document<`u`&&document.getElementById(`shadow-claw-static-manifest`)!==null;return r.preferEmbedded!==!1&&u||await kK(e,t,!0),Object.defineProperty(l,"didPurge",{value:a,enumerable:!1,writable:!0,configurable:!0}),Object.defineProperty(l,"didPurgeSkills",{value:o,enumerable:!1,writable:!0,configurable:!0}),RK(l)}var VK=class{_events;_handlers=[];_runs=new Map;constructor(e){this._events=e}start(){this._listen(`streaming-start`,this._onStreamingStart),this._listen(`streaming-chunk`,this._onStreamingChunk),this._listen(`streaming-end`,this._onStreamingEnd),this._listen(`streaming-done`,this._onStreamingDone),this._listen(`streaming-error`,this._onStreamingError),this._listen(`tool-activity`,this._onToolActivity)}stop(){for(let{event:e,handler:t}of this._handlers)this._events.off(e,t);this._handlers=[],this._runs.clear()}_emit(e,t){window.dispatchEvent(new CustomEvent(`shadow-claw-agui-event`,{detail:{groupId:e,event:t}}))}_listen(e,t){this._events.on(e,t),this._handlers.push({event:e,handler:t})}_onStreamingChunk=({groupId:e,text:t})=>{let n=this._runs.get(e);!n||!n.messageId||this._emit(e,{type:`TEXT_MESSAGE_CONTENT`,messageId:n.messageId,delta:t,timestamp:Date.now()})};_onStreamingDone=({groupId:e})=>{let t=this._runs.get(e);t&&(t.messageId&&this._emit(e,{type:`TEXT_MESSAGE_END`,messageId:t.messageId,timestamp:Date.now()}),this._emit(e,{type:`RUN_FINISHED`,threadId:t.threadId,runId:t.runId,timestamp:Date.now()}),this._runs.delete(e))};_onStreamingEnd=({groupId:e})=>{let t=this._runs.get(e);!t||!t.messageId||(this._emit(e,{type:`TEXT_MESSAGE_END`,messageId:t.messageId,timestamp:Date.now()}),t.messageId=null)};_onStreamingError=({groupId:e,error:t})=>{let n=this._runs.get(e);n&&(n.messageId&&this._emit(e,{type:`TEXT_MESSAGE_END`,messageId:n.messageId,timestamp:Date.now()}),this._emit(e,{type:`RUN_ERROR`,message:t||`Unknown streaming error`,timestamp:Date.now()}),this._runs.delete(e))};_onStreamingStart=({groupId:e})=>{let t=he(),n=e,r=he();this._runs.set(e,{runId:t,threadId:n,messageId:r,activeToolCallIds:new Set}),this._emit(e,{type:`RUN_STARTED`,threadId:n,runId:t,timestamp:Date.now()}),this._emit(e,{type:`TEXT_MESSAGE_START`,messageId:r,role:`assistant`,timestamp:Date.now()})};_onToolActivity=({groupId:e,tool:t,status:n})=>{let r=this._runs.get(e);if(r){if(n===`running`){let n=he();r.activeToolCallIds.add(n),this._emit(e,{type:`TOOL_CALL_START`,toolCallId:n,toolCallName:t,timestamp:Date.now()}),r._lastToolCallId=n}else if(n===`done`||n===`error`){let t=r._lastToolCallId;t&&(r.activeToolCallIds.delete(t),this._emit(e,{type:`TOOL_CALL_END`,toolCallId:t,timestamp:Date.now()}))}}}};function HK(e,t){if(!e||typeof e!=`object`)return e;let n=JSON.parse(JSON.stringify(e));for(let e of t)UK(n,e);return n}function UK(e,t){let{op:n,path:r,value:i}=t;if(!r||!r.startsWith(`/`))return;let a=r.split(`/`).slice(1).map(e=>e.replace(/~1/g,`/`).replace(/~0/g,`~`)),o=a.pop();if(o===void 0)return;let s=e;for(let e of a){if(typeof s!=`object`||!s)return;s=s[e]}typeof s!=`object`||!s||(Array.isArray(s)?WK(s,o,n,i):GK(s,o,n,i))}function WK(e,t,n,r){if(n===`add`)if(t===`-`)e.push(r);else{let n=parseInt(t,10);!isNaN(n)&&n>=0&&n<=e.length&&e.splice(n,0,r)}else if(n===`replace`){let n=parseInt(t,10);!isNaN(n)&&n>=0&&n<e.length&&(e[n]=r)}else if(n===`remove`){let n=parseInt(t,10);!isNaN(n)&&n>=0&&n<e.length&&e.splice(n,1)}}function GK(e,t,n,r){n===`add`||n===`replace`?e[t]=r:n===`remove`&&delete e[t]}var KK=t({OrchestratorStore:()=>eq,accumulateTokenUsage:()=>$K,orchestratorStore:()=>tq});function qK(e){if(e){if(Array.isArray(e))return e;if(typeof e==`string`)try{let t=JSON.parse(e);return Array.isArray(t)?t:void 0}catch{return}}}function JK(e){if(typeof e==`boolean`)return e;if(typeof e==`string`){let t=e.trim().toLowerCase();return t===`true`||t===`1`}return typeof e==`number`&&e===1}function YK(e){return!!e}async function XK(e,t,n,r){if(!YK(r))return!0;if(!e.schedule)return await ZK(e.id,t,n,r)!==`failed`;try{let r=t.replace(/\/$/,``);return(await fetch(`${r}/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({...e,subscriberId:n})})).ok}catch{return!1}}async function ZK(e,t,n,r){if(!YK(r))return`missing`;try{let r=t.replace(/\/$/,``),i=`subscriberId=${encodeURIComponent(n)}`,a=await fetch(`${r}/tasks/${encodeURIComponent(e)}?${i}`,{method:`DELETE`});return a.ok?`deleted`:a.status===404||a.status===405?`missing`:`failed`}catch{return`failed`}}async function QK(e,t,n,r){if(!YK(r))return null;try{let r=t.replace(/\/$/,``),i=await fetch(`${r}/tasks?groupId=${encodeURIComponent(e)}&subscriberId=${encodeURIComponent(n)}`,{method:`GET`});if(!i.ok||typeof i.json!=`function`)return null;let a=await i.json();return Array.isArray(a)?a.filter(e=>!!e&&typeof e==`object`&&typeof e.id==`string`&&typeof e.schedule==`string`&&typeof e.prompt==`string`).map(t=>({id:t.id,groupId:t.group_id||t.groupId||e,schedule:t.schedule,type:t.type,prompt:t.prompt,tools:qK(t.tools),channel:typeof t.channel==`string`?t.channel:void 0,enabled:t.enabled===!0||t.enabled===1,lastRun:typeof t.lastRun==`number`?t.lastRun:typeof t.last_run==`number`?t.last_run:null,createdAt:typeof t.createdAt==`number`?t.createdAt:typeof t.created_at==`number`?t.created_at:Date.now(),name:typeof t.name==`string`?t.name:void 0,order:typeof t.order==`number`?t.order:typeof t.task_order==`number`?t.task_order:void 0})):null}catch{return null}}function $K(e,t){let n=(e?.inputTokens??0)+(t.inputTokens??0),r=(e?.outputTokens??0)+(t.outputTokens??0),i=(e?.cacheReadTokens??0)+(t.cacheReadTokens??0),a=(e?.cacheCreationTokens??0)+(t.cacheCreationTokens??0);return{groupId:t.groupId||e?.groupId||``,inputTokens:n,outputTokens:r,cacheReadTokens:i,cacheCreationTokens:a,totalTokens:n+r+i+a,contextLimit:t.contextLimit||e?.contextLimit||0}}var eq=class e{static DEFAULT_PAGE_PATH=`MEMORY.md`;orchestrator;_activeGroupId;_activePage;_activePinnedPage;_defaultPinnedPage;_activityLog;_activityLogSessionStartedAtByGroup;_aguiAdapter;_aguiEvent;_contextUsage;_currentPath;_db;_error;_files;_gitProxyUrl;_groups;_hadPersistedActivePage;_initResolve;_isTyping;_lastOrchestratorDisplayState=`idle`;_messages;_modelDownloadProgress;_onlineReplayHandler;_pages;_peerStateByGroup;_proxyUrl;_ready;_remoteAgentStatusByGroup;_remoteAgentTypingByGroup;_replayingTaskSyncOutbox;_subscriberId;_sidebarDefaultPage;_state;_storageStatus;_streamingText;_tasks;_taskSyncOutbox;_tokenUsage;_tokenUsageAccumulator=null;_toolActivity;_unreadGroupIds;_useProxy;_vmBashFullInternetAccess;_whenInitialized;_whenReady;_readyResolve;constructor(){this._messages=new E.State([]),this._isTyping=new E.State(!1),this._storageStatus=new E.State(null),this._toolActivity=new E.State(null),this._modelDownloadProgress=new E.State(null),this._activityLog=new E.State([]),this._state=new E.State(`idle`),this._tokenUsage=new E.State(null),this._error=new E.State(null),this._activeGroupId=new E.State(p),this._ready=new E.State(!1),this._tasks=new E.State([]),this._files=new E.State([]),this._currentPath=new E.State(`.`),this._groups=new E.State([]),this._unreadGroupIds=new E.State(new Set),this._streamingText=new E.State(null),this._aguiEvent=new E.State(null),this._contextUsage=new E.State(null),this._useProxy=new E.State(!1),this._proxyUrl=new E.State(`/proxy`),this._gitProxyUrl=new E.State(`/git-proxy`),this._vmBashFullInternetAccess=new E.State(!1),this._activePage=new E.State(`pages`),this._sidebarDefaultPage=new E.State(`chat`),this._pages=new E.State([]),this._activePinnedPage=new E.State(null),this._defaultPinnedPage=new E.State(null),this._remoteAgentStatusByGroup=new E.State(new Map),this._remoteAgentTypingByGroup=new E.State(new Map),this._peerStateByGroup=new E.State(new Map),this._hadPersistedActivePage=!1,this._initResolve=null,this._whenInitialized=new Promise(e=>{this._initResolve=e}),this._readyResolve=null,this._whenReady=new Promise(e=>{this._readyResolve=e}),this.orchestrator=null,this._db=null,this._activityLogSessionStartedAtByGroup=new Map,this._taskSyncOutbox=[],this._replayingTaskSyncOutbox=!1,this._subscriberId=null,this._onlineReplayHandler=null,this._aguiAdapter=null}get activeGroupId(){return this._activeGroupId.get()}get activePage(){return this._activePage.get()}get activePinnedPage(){return this._activePinnedPage.get()}get defaultPinnedPage(){return this._defaultPinnedPage.get()}get effectiveDefaultPage(){return this._pages.get()[0]||null}get activityLog(){return this._activityLog.get()}get aguiEvent(){return this._aguiEvent.get()}clearError(){this._error.set(null),this._state.get()===`error`&&this._state.set(`idle`)}get contextUsage(){return this._contextUsage.get()}get tokenUsageAccumulator(){return this._tokenUsageAccumulator}get currentPath(){return this._currentPath.get()}get error(){return this._error.get()}get files(){return this._files.get()}getPeerState(e){return this._peerStateByGroup.get().get(e)||null}getRemoteAgentStatus(e){return this._remoteAgentStatusByGroup.get().get(e)||`idle`}getState(){return{messages:this.messages,isTyping:this.isTyping,toolActivity:this.toolActivity,activityLog:this.activityLog,state:this.state,tokenUsage:this.tokenUsage,modelDownloadProgress:this.modelDownloadProgress,error:this.error,activeGroupId:this.activeGroupId,pages:this.pages,ready:this.ready,files:this.files,currentPath:this.currentPath,streamingText:this.streamingText,contextUsage:this.contextUsage}}getTasksForBackup(){return this._tasks.get()}get gitProxyUrl(){return this._gitProxyUrl.get()}get groups(){return this._groups.get()}get hadPersistedActivePage(){return this._hadPersistedActivePage}isRemoteAgentTyping(e){return this._remoteAgentTypingByGroup.get().get(e)||!1}get isTyping(){return this._isTyping.get()}get messages(){return this._messages.get()}get modelDownloadProgress(){return this._modelDownloadProgress.get()}get pages(){return this._pages.get()}get proxyUrl(){return this._proxyUrl.get()}get ready(){return this._ready.get()}sendMessage(e,t=[],n){n===void 0?this.orchestrator?.browserChat?.submit(e,this._activeGroupId.get(),t):this.orchestrator?.browserChat?.submit(e,this._activeGroupId.get(),t,n)}setActiveGroup(e,t,n=this._activePage.get()===`chat`){if(this._activeGroupId.set(t),this._messages.set([]),this._activityLog.set([]),this._error.set(null),this._isTyping.set(!1),this._toolActivity.set(null),this._modelDownloadProgress.set(null),this._streamingText.set(null),this._currentPath.set(`.`),n){let e=new Set(this._unreadGroupIds.get());e.delete(t)&&this._unreadGroupIds.set(e)}this.loadHistory(),this.loadTasks(e),this.loadFiles(e)}setReady(e=!0){this._ready.set(e),e&&this._readyResolve&&this._readyResolve()}setRemoteAgentStatus(e,t){let n=this._remoteAgentStatusByGroup.get(),r=new Map(n);r.set(e,t),this._remoteAgentStatusByGroup.set(r)}setRemoteAgentTyping(e,t){let n=this._remoteAgentTypingByGroup.get(),r=new Map(n);t?r.set(e,!0):r.delete(e),this._remoteAgentTypingByGroup.set(r)}get sidebarDefaultPage(){return this._sidebarDefaultPage.get()}get state(){return this._state.get()}stopCurrentRequest(){this.orchestrator?.stopCurrentRequest?.(this._activeGroupId.get())}get storageStatus(){return this._storageStatus.get()}get streamingText(){return this._streamingText.get()}syncHostWorkspaceToVM(){GG(this.orchestrator,this._activeGroupId.get())}syncVMWorkspaceToHost(){KG(this.orchestrator,this._activeGroupId.get())}get tasks(){return this._tasks.get()}get tokenUsage(){return this._tokenUsage.get()}get toolActivity(){return this._toolActivity.get()}get unreadGroupIds(){return this._unreadGroupIds.get()}get useProxy(){return this._useProxy.get()}get vmBashFullInternetAccess(){return this._vmBashFullInternetAccess.get()}get whenInitialized(){return this._whenInitialized}async resetSiteConfigSeed(e){await k(e,m.SITE_CONFIG_SEEDED,!1)}get whenReady(){return this._whenReady}async addPage(e,t,n=this._activeGroupId.get()){let r=n===`br:main`?this.normalizePagePath(t):t.trim();if(!r)return;let i=this._pages.get();i.some(e=>e.path===r&&e.groupId===n)||(this.setPages([...i,{groupId:n,path:r}]),await xz(e,n,r),n===`br:main`&&r===`MEMORY.md`&&await uz(e,!1),await this.persistPages(e))}async clearAllTasks(e){let t=await it(e),n=this._activeGroupId.get(),r=t.filter(e=>e.groupId===n),i=await this.getSubscriberId(e);for(let t of r){if(await ZK(t.id,this.getTaskServerBaseUrl(),i,this.orchestrator?.taskServerEnabled??!1)===`failed`){console.warn(`Failed to delete task "${t.id}" from server — queued for replay.`),await this.queueTaskSyncOutboxOperation(e,{type:`delete`,id:t.id,queuedAt:Date.now()});continue}await eG(e,t.id)}await this.loadTasks(e)}async cloneConversation(e,t){let n=await Bt(e,t);if(!n)return null;await pK(e,t,n.groupId),await mK(e,t,n.groupId);try{let r=await ce(e,t,`MEMORY.md`);r&&await ue(e,n.groupId,`MEMORY.md`,r)}catch{}try{await vK(e,t,n.groupId,`attachments`)}catch{}return await this.loadGroups(e),this.setActiveGroup(e,n.groupId),n}async compactContext(e){if(this.orchestrator)return VG(this.orchestrator,e,this._activeGroupId.get())}async createConversation(e,t){let n=await Pt(e,t);return await this.loadGroups(e),this.setActiveGroup(e,n.groupId),n}async deleteConversation(e,t){if(!(this._groups.get().length<=1)&&(await Lt(e,t),await fK(e,t),await this.loadGroups(e),this._activeGroupId.get()===t)){let t=this._groups.get()[0]?.groupId||`br:main`;this.setActiveGroup(e,t)}}async deleteMessage(e,t){await hK(e,t),await this.loadHistory(),this.orchestrator?.refreshContextUsage&&await this.orchestrator.refreshContextUsage(e,this._activeGroupId.get())}async deleteTask(e,t){let n=await this.getSubscriberId(e);if(await ZK(t,this.getTaskServerBaseUrl(),n,this.orchestrator?.taskServerEnabled??!1)===`failed`)throw console.warn(`Failed to delete task from server — queued for replay.`),await this.queueTaskSyncOutboxOperation(e,{type:`delete`,id:t,queuedAt:Date.now()}),Error(`Failed to delete scheduled task on server; task kept locally.`);await eG(e,t),await this.loadTasks(e)}async ensurePeerConversation(e,t){let n=`peer:${t}`,r=await Rt(e);if(!r.find(e=>e.groupId===n)){let i=[...r],a=``;if(this.orchestrator?.peerjsPeerAliases){for(let[e,n]of Object.entries(this.orchestrator.peerjsPeerAliases))if(n===t){a=e;break}}i.push({groupId:n,name:`Peer: ${a||t.substring(0,8)}`,createdAt:Date.now()}),await Nt(e,i),await this.loadGroups(e)}return n}async grantStorageAccess(e){try{await xK(e),await this.loadFiles(e)}catch(e){console.error(`Failed to grant storage access:`,e)}}async init(e,t){this._db=e,this.orchestrator=t,this._taskSyncOutbox=this.parseTaskSyncOutbox(await x(e,m.TASK_SYNC_OUTBOX)),await this.replayTaskSyncOutbox(e),typeof window<`u`&&!this._onlineReplayHandler&&(this._onlineReplayHandler=()=>{this._db&&this.replayTaskSyncOutbox(this._db)},window.addEventListener(`online`,this._onlineReplayHandler)),t.events.on(`a2ui-surface`,async({groupId:t,envelope:n})=>{t&&this.ensureGroupExists(e,t);let r=this._messages.get(),i=r.findIndex(e=>e.a2uiEnvelopes?.some(e=>e.surfaceId===n.surfaceId));if(i!==-1){let t=r[i],a=[...t.a2uiEnvelopes||[],n],o={...t,a2uiEnvelopes:a},s=[...r];s[i]=o,this._messages.set(s),await CW(e,o)}else{let i=!t.startsWith(`peer:`),a={id:he(),groupId:t,sender:i?`agent`:t.replace(/^peer:/,``),content:``,timestamp:Date.now(),channel:t.startsWith(`peer:`)?`peerjs`:`browser`,isFromMe:i,isTrigger:!1,a2uiEnvelopes:[n]};t===this._activeGroupId.get()&&this._messages.set([...r,a]),await CW(e,a)}}),t.events.on(`message`,t=>{if(t.groupId&&this.ensureGroupExists(e,t.groupId,t.timestamp),t.groupId&&t.groupId!==this._activeGroupId.get()){let e=new Set(this._unreadGroupIds.get());e.add(t.groupId),this._unreadGroupIds.set(e);return}t.isFromMe&&this._streamingText.get()!==null&&this._streamingText.set(null),this._messages.set([...this._messages.get(),t])}),t.events.on(`typing`,({groupId:e,typing:t})=>{e&&e!==this._activeGroupId.get()||this._isTyping.set(t)}),t.events.on(`tool-activity`,({groupId:e,tool:t,status:n})=>{e&&e!==this._activeGroupId.get()||this._toolActivity.set(n===`running`?{tool:t,status:n}:null)}),t.events.on(`model-download-progress`,e=>{this._modelDownloadProgress.set(e.status===`done`?null:e)}),t.events.on(`thinking-log`,e=>{e.groupId&&e.groupId!==this._activeGroupId.get()||(e.level===`info`&&e.label===`Starting`?this._activityLog.set([e]):this._activityLog.set([...this._activityLog.get(),e]),this.forwardActivityLogEntryToServer(e))}),t.events.on(`state-change`,e=>{let t=typeof e==`string`?e:e.state,n=typeof e==`string`?void 0:e.groupId;if(n&&n!==this._activeGroupId.get())return;let r=this._lastOrchestratorDisplayState;this._lastOrchestratorDisplayState=t,this._state.set(t),t===`idle`&&(this._toolActivity.set(null),this._modelDownloadProgress.set(null),this._streamingText.set(null)),t===`thinking`&&r!==`thinking`&&r!==`responding`&&(this._tokenUsageAccumulator=null)}),t.events.on(`error`,({error:e})=>{console.error(`[Orchestrator Error Event]`,e),this._error.set(e),this._state.set(`error`)}),t.events.on(`session-reset`,()=>{this._messages.set([]),this._activityLog.set([]),this._tokenUsageAccumulator=null,this._tokenUsage.set(null),this._contextUsage.set(null),this._toolActivity.set(null),this._modelDownloadProgress.set(null),this._streamingText.set(null),this._isTyping.set(!1),this._state.set(`idle`)}),t.events.on(`context-compacted`,e=>{e?.groupId&&e.groupId!==this._activeGroupId.get()||(this._tokenUsage.set(null),this.loadHistory())}),t.events.on(`token-usage`,e=>{if(!e||e.groupId&&e.groupId!==this._activeGroupId.get())return;let t=$K(this._tokenUsageAccumulator,e);this._tokenUsageAccumulator=t,this._tokenUsage.set(t),this.orchestrator?.refreshContextUsage&&this._db&&this.orchestrator.refreshContextUsage(this._db,this._activeGroupId.get())}),t.events.on(`context-usage`,e=>{this._contextUsage.set(e)}),t.events.on(`ready`,()=>{this._ready.set(!0)}),t.events.on(`task-change`,()=>{this.loadTasks(e)}),t.events.on(`file-change`,()=>{this.loadFiles(e)}),t.events.on(`streaming-start`,({groupId:e})=>{e===this._activeGroupId.get()&&this._streamingText.set(``)}),t.events.on(`streaming-chunk`,({groupId:e,text:t})=>{if(e!==this._activeGroupId.get())return;let n=this._streamingText.get();this._streamingText.set((n||``)+t)}),t.events.on(`streaming-end`,({groupId:e})=>{e===this._activeGroupId.get()&&this._streamingText.set(null)}),t.events.on(`streaming-done`,({groupId:e})=>{this._activeGroupId.get()}),t.events.on(`streaming-error`,({groupId:e})=>{this._activeGroupId.get()}),this._aguiAdapter=new VK(t.events),this._aguiAdapter.start(),typeof window<`u`&&window.addEventListener(`shadow-claw-agui-event`,(e=>{e.detail.groupId===this._activeGroupId.get()&&this._aguiEvent.set(e.detail);let t=e.detail.event;if(t){if(t.type===`STATE_SNAPSHOT`){let n=new Map(this._peerStateByGroup.get());n.set(e.detail.groupId,t.snapshot||{}),this._peerStateByGroup.set(n)}else if(t.type===`STATE_DELTA`){let n=new Map(this._peerStateByGroup.get()),r=HK(n.get(e.detail.groupId)||{},t.delta||[]);n.set(e.detail.groupId,r),this._peerStateByGroup.set(n)}}})),await C(e),w(),S();let n=await x(e,m.PAGES_LIST),r=await BK(e,p,n==null?[]:this.parsePagesList(n));r.length>0?(this.setPages(r),await this.persistPages(e)):await this.ensureDefaultPage(e),await this.applySiteConfigDefaults(e),await this.loadGroups(e);let i=await x(e,m.LAST_ACTIVE_GROUP);i&&i!==this._activeGroupId.get()&&this._activeGroupId.set(i);let a=await x(e,m.LAST_ACTIVE_PAGE);a&&(this._activePage.set(a),this._hadPersistedActivePage=!0);let o=await x(e,m.SIDEBAR_DEFAULT_PAGE);this._sidebarDefaultPage.set(this.normalizeSidebarDefaultPage(o));let s=await x(e,m.LAST_SELECTED_PINNED_PAGE);if(s)try{let e=JSON.parse(s);e&&typeof e.path==`string`&&typeof e.groupId==`string`&&this._activePinnedPage.set(e)}catch{}this.orchestrator&&(this._useProxy.set(this.orchestrator.useProxy),this._proxyUrl.set(this.orchestrator.proxyUrl),this._gitProxyUrl.set(this.orchestrator.gitProxyUrl),this._vmBashFullInternetAccess.set(this.orchestrator.vmBashFullInternetAccess)),await Promise.all([this.loadHistory(),this.loadTasks(e),this.loadFiles(e)]),this._initResolve?.(),this.scheduleBackgroundStaticMainSiteSeeding(e)}async loadFiles(e){let t=this._activeGroupId.get(),n=this._currentPath.get();try{this._storageStatus.set(await D(e));let r=await Cz(e,t,n);this._files.set(r)}catch(e){console.error(`Failed to load files in store:`,e)}}async loadGroups(e){let t=await Rt(e);this._groups.set(t)}async loadHistory(){let e=this._activeGroupId.get(),t=await Tt(e,200);this._activeGroupId.get()===e&&this._messages.set(t)}async loadTasks(e){let t=this._activeGroupId.get(),n=await it(e),r=n.filter(e=>e.groupId===t);r.sort((e,t)=>{let n=e.order??0,r=t.order??0;return n===r?e.createdAt-t.createdAt:n-r}),this._tasks.set(r);let i=await this.getSubscriberId(e),a=await QK(t,this.getTaskServerBaseUrl(),i,this.orchestrator?.taskServerEnabled??!1);if(!a)return;let o=new Set(n.map(e=>e.id)),s=a.filter(e=>!o.has(e.id));if(s.length===0)return;for(let t of s)await rG(e,t);let c=[...r,...s];c.sort((e,t)=>{let n=e.order??0,r=t.order??0;return n===r?e.createdAt-t.createdAt:n-r}),this._tasks.set(c)}async navigateBackFolder(e){let t=this._currentPath.get();if(t===`.`)return;let n=t.split(`/`).filter(Boolean);n.pop();let r=n.length===0?`.`:n.join(`/`);await this.setCurrentPath(e,r)}async navigateIntoFolder(e,t){let n=this._currentPath.get(),r=n===`.`?t.replace(/\/$/,``):`${n}/${t.replace(/\/$/,``)}`;try{await this.setCurrentPath(e,r)}catch(t){console.error(`Failed to navigate into folder in store:`,t),st(`Folder not found: ${r}`,4500),await this.loadFiles(e)}}async newSession(e){await this.orchestrator?.newSession?.(e,this._activeGroupId.get()),await this.loadHistory()}async removePage(t,n,r=this._activeGroupId.get()){let i=this.normalizePagePath(n);if(!i)return;let a=this._pages.get();if(!a.some(e=>e.path===i&&e.groupId===r))return;let o=a.filter(e=>!(e.path===i&&e.groupId===r));await bz(t,r,i);let s=r===`br:main`&&i===`MEMORY.md`;s&&await uz(t,!0);let c=s||await lz(t);if(o.length===0&&!c)if(await dz(t,`br:main`))o.push({groupId:p,path:e.DEFAULT_PAGE_PATH});else return;this.setPages(o);let l=this._defaultPinnedPage.get();l&&l.path===i&&l.groupId===r&&await this.setDefaultPinnedPage(t,null),await this.persistPages(t)}async removeAllPages(e){let t=[...this._pages.get()];for(let n of t)await bz(e,n.groupId,n.path),n.groupId===`br:main`&&n.path===`MEMORY.md`&&await uz(e,!0);this.setPages([]),await this.setDefaultPinnedPage(e,null),await this.setActivePinnedPage(e,null),await this.persistPages(e)}async renameConversation(e,t,n){await Ft(e,t,n),await this.loadGroups(e)}async reorderConversations(e,t){await zt(e,t),await this.loadGroups(e)}async reorderTasks(e,t,n){let r=await _K(e,t,n);await this.loadTasks(e);let i=await this.getSubscriberId(e);for(let t of r)await XK(t,this.getTaskServerBaseUrl(),i,this.orchestrator?.taskServerEnabled??!1)||(console.warn(`Failed to sync reordered task "${t.id}" to server — queued for replay.`),await this.queueTaskSyncOutboxOperation(e,{type:`upsert`,id:t.id,task:t,queuedAt:Date.now()}))}async replayTaskSyncOutbox(e){if(!(this._replayingTaskSyncOutbox||this._taskSyncOutbox.length===0)){this._replayingTaskSyncOutbox=!0;try{let t=await this.getSubscriberId(e),n=[];for(let e of this._taskSyncOutbox){let r=this.getTaskServerBaseUrl();(e.type===`upsert`?await XK(e.task,r,t,this.orchestrator?.taskServerEnabled??!1):await ZK(e.id,r,t,this.orchestrator?.taskServerEnabled??!1))||n.push(e)}this._taskSyncOutbox=this.compactTaskSyncOutbox(n),await this.persistTaskSyncOutbox(e)}finally{this._replayingTaskSyncOutbox=!1}}}async resetToRootFolder(e){await this.setCurrentPath(e,`.`)}async restartCurrentRequest(){return this.orchestrator?.restartCurrentRequest?this.orchestrator.restartCurrentRequest(this._activeGroupId.get()):!1}async restoreTasksFromBackup(e,t){await this.clearAllTasks(e);let n=this._activeGroupId.get();for(let r of t){let t={...r,groupId:n,id:crypto.randomUUID?crypto.randomUUID():`task-${Date.now()}-${Math.random()}`};await this.upsertTask(e,t,{reloadTasks:!1})}await this.loadTasks(e)}async runTask(e,t=!1){let n=this._db;if(t&&n&&(await gK(e.id,Date.now()),await this.loadTasks(n)),e.type===`tools`&&Array.isArray(e.tools)&&e.tools.length>0)if(this.orchestrator?.agentWorker){let n=e.subagent?`subagent:${he()}`:e.groupId;this.orchestrator.agentWorker.postMessage({type:`execute-task-tools`,payload:{groupId:n,tools:e.tools,isManual:t}})}else console.error(`Agent worker not available to execute tool task.`);else{if(!e.groupId){console.error(`Task ${e.id} has no groupId - refusing to execute in active conversation to prevent context pollution.`);return}this.orchestrator?.browserChat?.submit(e.prompt,e.groupId,[],void 0,e.freshContext,e.subagent)}}async setActivePage(e,t){this._activePage.set(t),await k(e,m.LAST_ACTIVE_PAGE,t);let n=this.resolveSidebarDefaultPageForActivePage(t);n!==this._sidebarDefaultPage.get()&&(this._sidebarDefaultPage.set(n),await k(e,m.SIDEBAR_DEFAULT_PAGE,n))}async setActivePinnedPage(e,t){this._activePinnedPage.set(t),t?await k(e,m.LAST_SELECTED_PINNED_PAGE,JSON.stringify(t)):await k(e,m.LAST_SELECTED_PINNED_PAGE,null)}async setDefaultPinnedPage(e,t){let n=this._defaultPinnedPage.get(),r=n&&t&&n.path===t.path&&n.groupId===t.groupId?null:t;this._defaultPinnedPage.set(r),r?await k(e,m.DEFAULT_PINNED_PAGE,JSON.stringify(r)):await k(e,m.DEFAULT_PINNED_PAGE,null)}async reorderPages(e,t){this.setPages(t),await this.persistPages(e)}async setCurrentPath(e,t){let n=t.replace(/^\/+|\/+$/g,``)||`.`,r=this._activeGroupId.get();this._storageStatus.set(await D(e));let i=await Cz(e,r,n);this._currentPath.set(n),this._files.set(i)}async setGitProxyUrl(e,t){this.orchestrator&&(await $G(this.orchestrator,e,t),this._gitProxyUrl.set(this.orchestrator.gitProxyUrl))}async setProxyUrl(e,t){this.orchestrator&&(await nK(this.orchestrator,e,t),this._proxyUrl.set(this.orchestrator.proxyUrl))}async setUseProxy(e,t){this.orchestrator&&(await lK(this.orchestrator,e,t),this._useProxy.set(this.orchestrator.useProxy))}async setVMBashFullInternetAccess(e,t){this.orchestrator&&(await uK(this.orchestrator,e,t),this._vmBashFullInternetAccess.set(this.orchestrator.vmBashFullInternetAccess))}async switchConversation(e,t,n){this.setActiveGroup(e,t,n??this._activePage.get()===`chat`),await k(e,m.LAST_ACTIVE_GROUP,t)}async toggleTask(e,t,n){let r={...t,enabled:n};await rG(e,r),await this.loadTasks(e),await XK(r,this.getTaskServerBaseUrl(),await this.getSubscriberId(e),this.orchestrator?.taskServerEnabled??!1)||(console.warn(`Failed to update task on server — queued for replay.`),await this.queueTaskSyncOutboxOperation(e,{type:`upsert`,id:r.id,task:r,queuedAt:Date.now()}))}async updateConversationPinnedProvider(e,t,n,r,i){await Vt(e,t,n,r,i),await this.loadGroups(e)}async updateConversationProviderRuntimeOverrides(e,t,n){await Ut(e,t,n),await this.loadGroups(e)}async updateConversationSubagentSettings(e,t,n,r,i,a){await Ht(e,t,n,r,i,a),await this.loadGroups(e)}async updateConversationToolTags(e,t,n){await It(e,t,n),await this.loadGroups(e)}async upsertTask(e,t,n){let r=n?.reloadTasks!==!1;await rG(e,t),r&&await this.loadTasks(e);let i=await this.getSubscriberId(e);await XK(t,this.getTaskServerBaseUrl(),i,this.orchestrator?.taskServerEnabled??!1)||(console.warn(`Failed to sync task to server — queued for replay.`),await this.queueTaskSyncOutboxOperation(e,{type:`upsert`,id:t.id,task:t,queuedAt:Date.now()}))}compactTaskSyncOutbox(e){let t=new Map;return e.forEach((e,n)=>{t.set(e.id,n)}),e.filter((e,n)=>t.get(e.id)===n)}deriveGroupName(e){return e.startsWith(`tg:`)?`Telegram ${e.slice(3)}`:e.startsWith(`im:`)?`iMessage ${e.slice(3)}`:e.startsWith(`br:`)?e===`br:main`?`Main`:`Browser Conversation`:`Conversation`}getActivityLogSessionStartedAt(e){let t=this._activityLogSessionStartedAtByGroup.get(e);if(t)return t;let n=new Date().toISOString();return this._activityLogSessionStartedAtByGroup.set(e,n),n}getTaskServerBaseUrl(){return this.orchestrator?.taskServerUrl??`/schedule`}async getSubscriberId(e){if(this._subscriberId)return this._subscriberId;let t=await nG(e);return this._subscriberId=t,t}normalizePagePath(t){let n=t.trim().replace(/^\/+/,``).replace(/\/+/g,`/`);return n===`main/memory.md`?e.DEFAULT_PAGE_PATH:n}normalizeSidebarDefaultPage(e){return e===`pages`||e===`chat`||e===`tasks`||e===`files`?e:`chat`}parsePagesList(e){if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.map(e=>{if(typeof e==`string`)return{groupId:p,path:this.normalizePagePath(e)};if(!e||typeof e!=`object`)return null;let t=e;if(typeof t.path!=`string`)return null;let n=typeof t.groupId==`string`&&t.groupId.trim().length>0?t.groupId:p,r=n===`br:main`?this.normalizePagePath(t.path):t.path.trim();return r?{groupId:n,path:r}:null}).filter(e=>!!e).filter((e,t,n)=>{let r=`${e.groupId}\u0000${e.path}`;return t===n.findIndex(e=>`${e.groupId}\u0000${e.path}`===r)}):[]}catch{return[]}}parseTaskSyncOutbox(e){if(!e)return[];try{let t=JSON.parse(e);if(!Array.isArray(t))return[];let n=t.filter(e=>!!e&&typeof e==`object`).filter(e=>e.type===`upsert`||e.type===`delete`).filter(e=>typeof e.id==`string`&&e.id.length>0).map(e=>({...e,queuedAt:typeof e.queuedAt==`number`?e.queuedAt:Date.now()}));return this.compactTaskSyncOutbox(n)}catch{return[]}}resolveSidebarDefaultPageForActivePage(e){return e===`pages`||e===`chat`||e===`tasks`||e===`files`?e:this._sidebarDefaultPage.get()}setPages(e){let t=e.filter(e=>e.path.toLowerCase()===`memory.md`),n=e.filter(e=>e.path.toLowerCase()!==`memory.md`);this._pages.set([...n,...t])}async ensureDefaultPage(t){if(await lz(t))return;let n=await dz(t,p);await gz(t,p),!(!n||this._pages.get().length>0)&&(this.setPages([{groupId:p,path:e.DEFAULT_PAGE_PATH}]),await this.persistPages(t))}async ensureGroupExists(e,t,n){let r=this._groups.get();if(r.some(e=>e.groupId===t))return;let i=[...r,{groupId:t,name:this.deriveGroupName(t),createdAt:n||Date.now()}];this._groups.set(i);try{await Nt(e,i)}catch(e){console.error(`Failed to persist new conversation metadata:`,e)}}async forwardActivityLogEntryToServer(e){if(!this._db||!JK(await x(this._db,m.ACTIVITY_LOG_DISK_LOGGING_ENABLED)))return;let t=typeof e.groupId==`string`&&e.groupId?e.groupId:this._activeGroupId.get();if(!t)return;let n=typeof e.message==`string`?e.message.trim():``;if(!n)return;e.level===`info`&&e.label===`Starting`&&this._activityLogSessionStartedAtByGroup.set(t,new Date().toISOString());let r=this.getActivityLogSessionStartedAt(t);try{await fetch(`/activity-log`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({groupId:t,level:e.level,label:e.label,message:n,timestamp:new Date().toISOString(),sessionStartedAt:r})})}catch(e){console.warn(`Failed to persist activity log entry to server:`,e)}}scheduleBackgroundStaticMainSiteSeeding(e){if(typeof window>`u`)return;let t=async()=>{try{if(await OK(e,`br:main`))return;let t=await x(e,m.PAGES_LIST),n=await BK(e,p,t==null?[]:this.parsePagesList(t),{preferEmbedded:!1});n&&n.length>0&&(this.setPages(n),await this.persistPages(e))}catch(e){console.warn(`Background static main site seeding failed:`,e)}};typeof window.requestIdleCallback==`function`?window.requestIdleCallback(()=>void t(),{timeout:3e3}):setTimeout(()=>void t(),100)}async persistPages(e){await k(e,m.PAGES_LIST,JSON.stringify(this._pages.get()))}async persistTaskSyncOutbox(e){await k(e,m.TASK_SYNC_OUTBOX,JSON.stringify(this._taskSyncOutbox))}async queueTaskSyncOutboxOperation(e,t){this._taskSyncOutbox=this.compactTaskSyncOutbox([...this._taskSyncOutbox,t]),await this.persistTaskSyncOutbox(e)}async applySiteConfigDefaults(e){if(!(typeof document>`u`))try{let t=document.getElementById(`shadow-claw-site-config`);if(!t?.textContent)return;let n=JSON.parse(t.textContent);if(!n||typeof n!=`object`)return;T(n),w(),S();let r=n.customElements;if((await Rt(e)).find(e=>e.groupId===`br:main`)?.toolTags&&await It(e,p,void 0),(n.settings?.internetAccess??n.settings?.vm_bash_full_internet_access??n.settings?.fullInternetAccess??n.internetAccess)===!0&&await x(e,m.VM_BASH_FULL_INTERNET_ACCESS)!==`true`&&(await k(e,m.VM_BASH_FULL_INTERNET_ACCESS,`true`),this.orchestrator&&(this.orchestrator.vmBashFullInternetAccess=!0),this._vmBashFullInternetAccess.set(!0)),await x(e,m.SITE_CONFIG_SEEDED))return;let i=n.allowedCustomElements||(typeof r==`object`&&!Array.isArray(r)?r.allowedElements:void 0);i!==void 0&&await k(e,m.ALLOWED_CUSTOM_ELEMENTS,JSON.stringify(i));let a=n.allowedCustomElementDomains||(typeof r==`object`&&!Array.isArray(r)?r.allowedDomains:void 0);if(a!==void 0&&await k(e,m.ALLOWED_CUSTOM_ELEMENT_HOST_PATTERNS,JSON.stringify(a)),n.sidebar&&typeof n.sidebar==`object`){let{pagesHidden:t,chatHidden:r,tasksHidden:i,filesHidden:a,defaultPage:o}=n.sidebar;t!==void 0&&await k(e,m.SIDEBAR_PAGES_HIDDEN,String(!!t)),r!==void 0&&await k(e,m.SIDEBAR_CHAT_HIDDEN,String(!!r)),i!==void 0&&await k(e,m.SIDEBAR_TASKS_HIDDEN,String(!!i)),a!==void 0&&await k(e,m.SIDEBAR_FILES_HIDDEN,String(!!a)),o&&typeof o==`string`&&await k(e,m.SIDEBAR_DEFAULT_PAGE,o)}if(n.settings&&typeof n.settings==`object`){let{assistantName:t}=n.settings;t&&typeof t==`string`&&await k(e,m.ASSISTANT_NAME,t);let r=n.settings.internetAccess??n.settings.vm_bash_full_internet_access??n.settings.fullInternetAccess??n.internetAccess;typeof r==`boolean`&&(await k(e,m.VM_BASH_FULL_INTERNET_ACCESS,String(r)),this.orchestrator&&(this.orchestrator.vmBashFullInternetAccess=r),this._vmBashFullInternetAccess.set(r))}let o=(n.settings&&typeof n.settings==`object`?n.settings.defaultToolsProfile:void 0)??n.defaultToolsProfile;if(typeof o==`string`&&o.trim().length>0){let t=o.trim();if(t.toLowerCase()===`none`)await me.deactivateProfile(e);else{let n=me.profiles.find(e=>e.id.toLowerCase()===t.toLowerCase()||e.name.toLowerCase()===t.toLowerCase());n?await me.activateProfile(e,n.id):console.warn(`Default tools profile "${t}" specified in site-config was not found.`)}}if(n.pages&&typeof n.pages==`object`){let{defaultPinnedPage:t}=n.pages;t&&typeof t==`string`&&await k(e,m.DEFAULT_PINNED_PAGE,t)}if(Array.isArray(n.enabledTools)){let t=n.enabledTools.filter(e=>typeof e==`string`&&e.trim().length>0);await me.setAllEnabled(e,t),await me.setAllDeclarativeEnabled(e,t)}await k(e,m.SITE_CONFIG_SEEDED,`true`)}catch(e){console.warn(`Failed to apply site-config defaults:`,e)}}};const tq=new eq;export{gG as $,gz as $t,XG as A,mW as At,jG as B,AH as Bt,ZG as C,kW as Ct,WG as D,oW as Dt,HG as E,SW as Et,DG as F,gU as Ft,aG as G,DB as Gt,fG as H,CV as Ht,MG as I,mU as It,oG as J,SB as Jt,cG as K,CB as Kt,OG as L,tU as Lt,zG as M,qU as Mt,IG as N,wU as Nt,YG as O,_W as Ot,LG as P,xU as Pt,hG as Q,Sz as Qt,kG as R,BH as Rt,dK as S,UW as St,UG as T,CW as Tt,EG as U,UB as Ut,dG as V,LV as Vt,iG as W,MB as Wt,lG as X,Pz as Xt,uG as Y,TB as Yt,mG as Z,wz as Zt,aK as _,ft as _n,FW as _t,CK as a,Xt as an,wG as at,cK as b,VW as bt,wK as c,qt as cn,YW as ct,QG as d,wt as dn,zW as dt,dz as en,_G as et,eK as f,Ct as fn,BW as ft,iK as g,gt as gn,AW as gt,rK as h,yt as hn,MW as ht,EK as i,tn as in,SG as it,VG as j,yW as jt,JG as k,bW as kt,gK as l,Rt as ln,ZW as lt,nK as m,St as mn,KW as mt,KK as n,en as nn,yG as nt,SK as o,Yt as on,TG as ot,tK as p,xt as pn,GW as pt,sG as q,xB as qt,FK as r,Qt as rn,bG as rt,TK as s,Jt as sn,$W as st,tq as t,nn as tn,vG as tt,fK as u,Ot as un,JW as ut,oK as v,dt as vn,NW as vt,qG as w,DW as wt,lK as x,HW as xt,sK as y,PW as yt,AG as z,IH as zt};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{D as e,E as t,F as n,I as r,M as i,O as a,P as o,R as s,T as c,_ as l,g as u,j as d,l as f,o as p,r as m,s as h,t as g,v as _,w as v}from"./config-Bnwx4EfS.js";import{n as y,r as b}from"./txPromise-EBECky1b.js";import{t as x}from"./getConfig-D89uJgo5.js";import{p as S}from"./custom-element-security-Da_6HQ6X.js";import{t as C}from"./dist-B9m1QM9v.js";import{At as w,C as T,Ct as E,Dt as ee,Et as te,Ft as D,G as O,Gt as k,H as A,Ht as j,I as M,It as N,Jt as P,Kt as F,Lt as I,M as ne,Mt as re,N as ie,Nt as L,Ot as R,P as ae,Pt as oe,St as z,Tt as se,U as B,Ut as ce,V as le,Vt as ue,W as de,Wt as fe,X as pe,Y as me,Yt as he,at as ge,bt as _e,cn as V,dn as ve,dt as ye,ft as be,gn as xe,gt as Se,hn as Ce,in as we,j as Te,jt as Ee,kt as H,l as De,ln as Oe,nn as ke,on as U,ot as Ae,qt as je,rn as Me,sn as Ne,t as W,tn as G,u as Pe,un as Fe,ut as Ie,vn as Le}from"./orchestrator-DAJkyJmV.js";import{l as Re,r as ze}from"./getGroupDir-BwprrdrQ.js";import{c as Be,f as Ve,s as He,t as K,u as Ue}from"./tools-Cp1gequ8.js";import{t as q}from"./setConfig-DFMYnYLE.js";import{t as J}from"./ulid-BY7rQVLN.js";import{t as We}from"./tools-CcgG5XuA.js";import{i as Ge,r as Ke}from"./syncWebMcpRegistration-R0tha3kP.js";import"./tools-B-PzsLc2.js";import{n as qe,r as Je}from"./crypto-C8c5wMzN.js";import{a as Ye,i as Xe,r as Y,t as Ze}from"./peerjs-BaDbzfgl.js";import{i as Qe,r as $e}from"./webmcp-DBONjQWd.js";import{ensureControlPlaneConnected as et}from"./initControlPlane-DG_LcLDy.js";async function tt(e){if(!(!e||e.name===`shadowclaw`)){try{if(await x(e,m.DB_MIGRATED_FROM_LEGACY)===`true`)return}catch{}try{let t=await new Promise(e=>{let t=indexedDB.open(l);t.onsuccess=()=>{let n=t.result;if(!n.objectStoreNames||n.objectStoreNames.length===0){n.close(),e(null);return}e(n)},t.onerror=()=>e(null)});if(t){let n=Array.from(t.objectStoreNames).filter(t=>e.objectStoreNames.contains(t));for(let r of n)await new Promise(n=>{try{let i=t.transaction(r,`readonly`).objectStore(r).getAll();i.onsuccess=()=>{let t=i.result||[];if(t.length>0)try{let i=e.transaction(r,`readwrite`),a=i.objectStore(r);for(let e of t)a.put(e);i.oncomplete=()=>n(),i.onerror=()=>n(),i.onabort=()=>n()}catch{n()}else n()},i.onerror=()=>n()}catch{n()}});t.close()}}catch(e){console.warn(`Legacy IndexedDB migration warning:`,e)}finally{try{await q(e,m.DB_MIGRATED_FROM_LEGACY,`true`)}catch{}}}}async function nt(e,t,n){for await(let[r,i]of e.entries())if(i.kind===`directory`)await nt(i,await t.getDirectoryHandle(r,{create:!0}),[...n,r]);else if(i.kind===`file`){let e=await i.getFile(),a=await t.getFileHandle(r,{create:!0});try{await He(a,e)}catch(t){if(!(t instanceof Error?t.message:String(t)).includes(`Writable file streams are not supported`))throw t;await Be([...n,r],e)}}}async function rt(e){if(!e)return;try{if(await x(e,m.OPFS_MIGRATED_FROM_LEGACY)===`true`)return}catch{}let t=ze();if(t!==`shadowclaw`&&!(typeof navigator>`u`||!navigator.storage||typeof navigator.storage.getDirectory!=`function`))try{let n=await navigator.storage.getDirectory(),r;try{r=await n.getDirectoryHandle(_)}catch{try{await q(e,m.OPFS_MIGRATED_FROM_LEGACY,`true`)}catch{}return}let i=await n.getDirectoryHandle(t,{create:!0});await nt(r,i,[t])}catch(e){console.warn(`Legacy OPFS migration warning:`,e)}finally{try{await q(e,m.OPFS_MIGRATED_FROM_LEGACY,`true`)}catch{}}}function it(){return new Promise(async(e,t)=>{let n,r=d(),i=indexedDB.open(r,2);i.onupgradeneeded=()=>{let e=i.result;if(!e.objectStoreNames.contains(`messages`)){let t=e.createObjectStore(`messages`,{keyPath:`id`});t.createIndex(`by-group-time`,[`groupId`,`timestamp`]),t.createIndex(`by-group`,`groupId`)}if(e.objectStoreNames.contains(`sessions`)||e.createObjectStore(`sessions`,{keyPath:`groupId`}),!e.objectStoreNames.contains(`tasks`)){let t=e.createObjectStore(`tasks`,{keyPath:`id`});t.createIndex(`by-group`,`groupId`),t.createIndex(`by-enabled`,`enabled`)}e.objectStoreNames.contains(`config`)||e.createObjectStore(`config`,{keyPath:`key`}),e.objectStoreNames.contains(`pendingShares`)||e.createObjectStore(`pendingShares`,{keyPath:`id`}).createIndex(`by-createdAt`,`createdAt`)},i.onsuccess=async()=>{n=i.result,b(n);try{await tt(n),await rt(n)}catch(e){console.warn(`Error running legacy migration:`,e)}e(n)},i.onerror=()=>{t(Error(`Failed to open IndexedDB: ${i.error?.message}`))}})}var at=class{activeGroupId;displayCallback;messageCallback;type;typingCallback;constructor(){this.type=`browser`,this.messageCallback=null,this.typingCallback=null,this.displayCallback=null,this.activeGroupId=p}getActiveGroup(){return this.activeGroupId}onDisplay(e){this.displayCallback=e}onMessage(e){this.messageCallback=e}onTyping(e){this.typingCallback=e}setActiveGroup(e){this.activeGroupId=e}setTyping(e,t){this.typingCallback?.(e,t)}start(){}stop(){}submit(e,t,n=[],r,i,a){let o=t||this.activeGroupId,s={id:J(),groupId:o,sender:`You`,content:e,timestamp:Date.now(),channel:`browser`,attachments:n,a2uiAction:r,freshContext:i,subagent:a};this.messageCallback?.(s)}async send(e,t,n){this.displayCallback?.(e,t,!0)}},ot=class{_entries;constructor(){this._entries=[]}find(e){return this.resolve(e)?.channel??null}get(e){return this._entries.find(t=>t.prefix===e)?.channel}getBadge(e){return this.resolve(e)?.badge??``}getChannelType(e){return this.resolve(e)?.channel.type??null}onMessage(e){for(let t of this._entries)t.channel.onMessage(e)}onTyping(e){for(let t of this._entries)t.channel.onTyping&&t.channel.onTyping(e)}prefixes(){return this._entries.map(e=>e.prefix)}register(e,t,n){let r=typeof n==`string`?{badge:n}:n??{};this._entries.push({prefix:e,channel:t,badge:r.badge??e.replace(/:$/,``),autoTrigger:r.autoTrigger??!1}),this._entries.sort((e,t)=>t.prefix.length-e.prefix.length)}resolve(e){for(let t of this._entries)if(e.startsWith(t.prefix))return t;return null}shouldAutoTrigger(e){return this.resolve(e)?.autoTrigger??!1}startAll(){for(let e of this._entries)e.channel.start()}stopAll(){for(let e of this._entries)e.channel.stop()}},st=class{abortController=null;apiKey=``;apiMode=`unknown`;cursor=null;fileReader=null;messageCallback=null;reconnectDelayMs=1e3;registeredChatIds=new Set;running=!1;seenMessageIds=new Map;serverUrl=``;type=`imessage`;configure(e,t,n){this.serverUrl=ct(e),this.apiKey=t.trim(),this.registeredChatIds=new Set(n.map(e=>e.trim()).filter(Boolean)),this.cursor=null,this.apiMode=`unknown`}handleIncomingMessage(e){this.pruneSeenMessageIds();let t=String(e.chatId||e.conversationId||``).trim();if(!t||this.registeredChatIds.size>0&&!this.registeredChatIds.has(t))return;let n=`${e.text||e.body||``}`.trim();if(!n)return;let r=`${e.id||e.guid||`${t}:${e.timestamp||e.createdAt||n}`}`;if(this.seenMessageIds.has(r))return;this.seenMessageIds.set(r,Date.now());let i={id:r,groupId:`im:${t}`,sender:`${e.sender||e.handle||e.from||`iMessage`}`,content:n,timestamp:lt(e.timestamp||e.createdAt),channel:`imessage`};this.messageCallback?.(i)}handlePollResponse(e){e.nextCursor!==void 0&&e.nextCursor!==null?this.cursor=String(e.nextCursor):e.cursor!==void 0&&e.cursor!==null&&(this.cursor=String(e.cursor));let t=Array.isArray(e.messages)?e.messages:[];for(let e of t)this.handleIncomingMessage(e)}isConfigured(){return this.serverUrl.length>0}onMessage(e){this.messageCallback=e}pruneSeenMessageIds(){let e=Date.now();for(let[t,n]of this.seenMessageIds.entries())e-n>6e4&&this.seenMessageIds.delete(t)}setTyping(e,t){if(!t)return;let n=e.replace(/^im:/,``);this.requestJson(`/messages/typing`,{method:`POST`,body:JSON.stringify({chatId:n,typing:!0})}).catch(()=>{})}start(){!this.isConfigured()||this.running||(this.running=!0,this.abortController=new AbortController,this.poll())}ensureConnected(){!this.isConfigured()||!this.running||(this.reconnectDelayMs=1e3,this.abortController?.abort(),this.abortController=new AbortController,this.poll())}stop(){this.running=!1,this.abortController?.abort(),this.abortController=null}async ensureApiMode(){if(this.apiMode!==`unknown`)return this.apiMode;try{await this.requestJson(`/v1/info`,{method:`GET`}),this.apiMode=`beeper-desktop`}catch{this.apiMode=`legacy`}return this.apiMode}async poll(){for(;this.running&&this.abortController&&!this.abortController.signal.aborted;)try{let e=new URLSearchParams({timeout:`25`});this.cursor&&e.set(`cursor`,this.cursor);let t=await this.requestJson(`/messages?${e.toString()}`,{method:`GET`},u+5e3,this.abortController.signal);this.reconnectDelayMs=1e3,this.handlePollResponse(t)}catch(e){if(e instanceof Error&&e.name===`AbortError`)break;console.error(`iMessage bridge poll error:`,e),await ut(this.reconnectDelayMs),this.reconnectDelayMs=Math.min(this.reconnectDelayMs*2,3e4)}}async requestJson(e,t,n=u,r){let i=new AbortController,a=setTimeout(()=>i.abort(),n),o=()=>i.abort();r?.addEventListener(`abort`,o,{once:!0});try{let n=new Headers(t.headers);n.set(`Accept`,`application/json`),!n.has(`Content-Type`)&&t.body&&!(t.body instanceof FormData)&&n.set(`Content-Type`,`application/json`),this.apiKey&&(n.set(`Authorization`,`Bearer ${this.apiKey}`),n.set(`X-API-Key`,this.apiKey));let r=await fetch(`${this.serverUrl}${e}`,{...t,headers:n,signal:i.signal});if(!r.ok){let e=await r.text();throw Error(`iMessage bridge request failed: ${r.status} ${e}`)}return r.status===204?{messages:[]}:await r.json()}finally{clearTimeout(a),r?.removeEventListener(`abort`,o)}}async send(e,t,n){let r=e.replace(/^im:/,``),{remainingText:i,attachments:a}=dt(t);for(let t of a){if(!this.fileReader){await this.sendText(r,`[${t.alt}] (file: ${t.path})`);continue}try{let n=await this.fileReader(e,t.path);if(!n||n.size===0)throw Error(`Attachment file is empty or unavailable.`);await this.sendAttachment(r,n,t)}catch(e){console.warn(`iMessage attachment send failed for ${t.path}:`,e),await this.sendText(r,`[${t.alt}] (file: ${t.path})`)}}let o=i.trim();o&&await this.sendText(r,o)}async sendAttachment(e,t,n){if(await this.ensureApiMode()===`beeper-desktop`){await this.sendAttachmentViaBeeperDesktop(e,t,n);return}await this.sendAttachmentViaLegacyBridge(e,t,n)}async sendAttachmentViaBeeperDesktop(e,t,n){let r=n.path.split(`/`).pop()||`attachment.bin`,i=new FormData;i.append(`file`,t,r),i.append(`fileName`,r),t.type&&i.append(`mimeType`,t.type);let a=`${(await this.requestJson(`/v1/assets/upload`,{method:`POST`,body:i})).uploadID||``}`.trim();if(!a)throw Error(`Beeper asset upload failed: missing uploadID`);await this.requestJson(`/v1/chats/${encodeURIComponent(e)}/messages`,{method:`POST`,body:JSON.stringify({text:n.alt||void 0,attachment:{uploadID:a,fileName:r,mimeType:t.type||void 0}})})}async sendAttachmentViaLegacyBridge(e,t,n){let r=n.path.split(`/`).pop()||`attachment.bin`,i=new FormData;i.append(`chatId`,e),n.alt&&i.append(`text`,n.alt),i.append(`file`,t,r),await this.requestJson(`/messages/send`,{method:`POST`,body:i})}async sendText(e,t){if(await this.ensureApiMode()===`beeper-desktop`){await this.requestJson(`/v1/chats/${encodeURIComponent(e)}/messages`,{method:`POST`,body:JSON.stringify({text:t})});return}await this.requestJson(`/messages/send`,{method:`POST`,body:JSON.stringify({chatId:e,text:t})})}};function ct(e){return e.trim().replace(/\/+$/,``)}function lt(e){if(typeof e==`number`&&Number.isFinite(e))return e>0xe8d4a51000?e:e*1e3;if(typeof e==`string`){let t=Number(e);if(Number.isFinite(t))return lt(t);let n=Date.parse(e);if(Number.isFinite(n))return n}return Date.now()}function ut(e){return new Promise(t=>setTimeout(t,e))}function dt(e){let t=[],n=/!?\[([^\]]*)\]\(([^)]+)\)/g,r=null,i=e;for(;(r=n.exec(e))!==null;){let e=r[1]||``,n=ft((r[2]||``).trim());n&&(t.push({alt:e,path:n}),i=i.replace(r[0],``))}return{remainingText:i,attachments:t}}function ft(e){if(!e)return null;let t=e.trim();if(/^[a-zA-Z][a-zA-Z\d+.-]*:/.test(t)||t.startsWith(`//`))return null;let n=t.replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^\.\//,``);if(!n)return null;let r=n.split(`/`).filter(Boolean);return r.some(e=>e===`..`)?null:r.join(`/`)}var pt=class{messageCallback=null;running=!1;type=`room`;typingCallback=null;_manager=null;_peerjs=null;deliverInbound(e){this.messageCallback?.(e)}onMessage(e){this.messageCallback=e}onTyping(e){this.typingCallback=e}setManager(e){this._manager=e}setPeerJs(e){this._peerjs=e}setTyping(e,t){}start(){this.running=!0}stop(){this.running=!1}async send(e,t,n){if(!this._manager)return;let r=P(e);if(n&&n.length>0&&this._peerjs){let t=this._manager.get(r);t&&await this._peerjs.sendAttachmentsToRoom(t,e,n)}this._manager.broadcast(r,t,n)}};const mt=1e3;var ht=class{abortController=null;fileReader=null;messageCallback=null;offset=0;pollRetryDelayMs=mt;pollSessionId=0;registeredChatIds=new Set;running=!1;token=``;type=`telegram`;useProxy=!1;buildFileUrl(e){let t=e.split(`/`).filter(Boolean).map(e=>encodeURIComponent(e)).join(`/`);return`${this.useProxy?`/telegram/file/bot`:`https://api.telegram.org/file/bot`}${this.token}/${t}`}buildMethodUrl(t){let n=t.replace(/^\/+/,``);return`${this.useProxy?e:c}${this.token}/${n}`}configure(e,t,n=!1){this.token=e.trim(),this.registeredChatIds=new Set(t.map(e=>e.trim()).filter(Boolean)),this.useProxy=!!n}isConfigured(){return this.token.length>0}nextPollRetryDelay(){let e=this.pollRetryDelayMs;return this.pollRetryDelayMs=Math.min(this.pollRetryDelayMs*2,6e4),e}onMessage(e){this.messageCallback=e}registerChatId(e){let t=e.trim();t&&this.registeredChatIds.add(t)}resetPollBackoff(){this.pollRetryDelayMs=mt}setTyping(e,t){if(!t)return;let n=e.replace(/^tg:/,``);this.apiCall(`sendChatAction`,{chat_id:n,action:`typing`}).catch(()=>{})}start(){if(!this.token||this.running)return;this.running=!0,this.resetPollBackoff();let e=++this.pollSessionId,t=new AbortController;this.abortController=t,this.poll(e,t)}ensureConnected(){if(!this.token||!this.running)return;this.resetPollBackoff(),this.abortController?.abort();let e=++this.pollSessionId,t=new AbortController;this.abortController=t,this.poll(e,t)}stop(){this.running=!1,this.resetPollBackoff(),this.pollSessionId+=1,this.abortController?.abort(),this.abortController=null}async apiCall(e,t){let n=await fetch(this.buildMethodUrl(e),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!n.ok){let t=await n.text();throw Error(`Telegram API ${e} failed: ${n.status} ${t}`)}return await n.json()}async extractAttachments(e){let t=[],n=Array.isArray(e.photo)?e.photo.at(-1):null;n?.file_id&&t.push({id:n.file_id,fileName:`photo-${e.message_id}.png`,mimeType:`image/png`,previewDisposition:`inline`}),e.document?.file_id&&t.push({id:e.document.file_id,fileName:e.document.file_name||`document-${e.message_id}`,mimeType:e.document.mime_type}),e.video?.file_id&&t.push({id:e.video.file_id,fileName:e.video.file_name||`video-${e.message_id}.mp4`,mimeType:e.video.mime_type||`video/mp4`}),e.audio?.file_id&&t.push({id:e.audio.file_id,fileName:e.audio.file_name||`audio-${e.message_id}.mp3`,mimeType:e.audio.mime_type||`audio/mpeg`}),e.voice?.file_id&&t.push({id:e.voice.file_id,fileName:`voice-${e.message_id}.ogg`,mimeType:e.voice.mime_type||`audio/ogg`}),e.animation?.file_id&&t.push({id:e.animation.file_id,fileName:e.animation.file_name||`animation-${e.message_id}.mp4`,mimeType:e.animation.mime_type||`video/mp4`}),e.sticker?.file_id&&t.push({id:e.sticker.file_id,fileName:`sticker-${e.message_id}.${vt(e.sticker)}`,mimeType:e.sticker.is_animated?`application/x-tgsticker`:e.sticker.is_video?`video/webm`:`image/webp`});let r=[];for(let e of t){let t=await this.fetchTelegramFileInfo(e.id);r.push({id:e.id,fileName:e.fileName,mimeType:e.mimeType,size:t.file_size,previewDisposition:e.previewDisposition,source:{kind:`remote-url`,url:this.buildFileUrl(t.file_path)}})}return r}async fetchTelegramFileInfo(e){let t=await this.apiCall(`getFile`,{file_id:e});if(!t.ok||!t.result?.file_path)throw Error(`Telegram getFile failed for attachment ${e}`);return t.result}async handleUpdate(e){let t=e.message;if(!t)return;let n=String(t.chat.id);if(t.text===`/chatid`){this.apiCall(`sendMessage`,{chat_id:n,text:`Chat ID: ${n}\nRegister this ID in ShadowClaw settings.`}).catch(console.error);return}if(t.text===`/ping`){this.apiCall(`sendMessage`,{chat_id:n,text:`Pong! ShadowClaw is running.`}).catch(console.error);return}if(!this.registeredChatIds.has(n))return;let r=await this.extractAttachments(t),i=`${t.text||t.caption||``}`.trim()||(t.photo?.length?`[Photo]`:null)||(t.voice?`[Voice message]`:null)||(t.video?`[Video]`:null)||(t.audio?`[Audio]`:null)||(t.animation?`[Animation]`:null)||(t.document?`[Document: ${t.document.file_name||`unnamed`}]`:null)||(t.sticker?`[Sticker: ${t.sticker.emoji||``}]`:null)||(t.location?`[Location: ${t.location.latitude}, ${t.location.longitude}]`:null)||(t.contact?`[Contact: ${t.contact.first_name}]`:null)||`[Unsupported message type]`,a=t.from?.first_name||t.from?.username||String(t.from?.id||`Unknown`),o={id:String(t.message_id),groupId:`tg:${n}`,sender:a,content:i,timestamp:t.date*1e3,channel:`telegram`,attachments:r};this.messageCallback?.(o)}async poll(e,t){for(;this.running&&this.pollSessionId===e&&!t.signal.aborted;)try{let e=await fetch(this.buildMethodUrl(`getUpdates?offset=${this.offset}&timeout=30`),{signal:t.signal});if(!e.ok){console.error(`Telegram poll error: HTTP ${e.status}`),await this.waitForRetry(this.nextPollRetryDelay());continue}let n=await e.json();if(!n.ok||!Array.isArray(n.result)){await this.waitForRetry(this.nextPollRetryDelay());continue}this.resetPollBackoff();for(let e of n.result)this.offset=e.update_id+1,await this.handleUpdate(e)}catch(e){if(e instanceof Error&&e.name===`AbortError`)break;console.error(`Telegram poll error:`,e),await this.waitForRetry(this.nextPollRetryDelay())}}async send(e,n,r){let i=e.replace(/^tg:/,``),{remainingText:a,attachments:o}=yt(n);for(let t of o){if(this.fileReader)try{let n=await this.fileReader(e,t.path);if(n&&n.size>0){let e=t.path.toLowerCase();e.endsWith(`.png`)||e.endsWith(`.jpg`)||e.endsWith(`.jpeg`)||e.endsWith(`.gif`)||e.endsWith(`.webp`)?await this.sendPhoto(i,n,t.alt,t.path):await this.sendDocument(i,n,t.alt,t.path);continue}}catch(e){console.warn(`TelegramChannel: failed to read file ${t.path}:`,e)}await this.apiCall(`sendMessage`,{chat_id:i,text:`[${t.alt}] (file: ${t.path})`})}let s=a.trim();if(s){let e=gt(s,t);for(let t of e)await this.apiCall(`sendMessage`,{chat_id:i,text:t})}}async sendDocument(e,t,n,r){let i=r.split(`/`).pop()||`document.file`,a=new FormData;a.append(`chat_id`,e),a.append(`document`,t,i),n&&a.append(`caption`,n);let o=await fetch(this.buildMethodUrl(`sendDocument`),{method:`POST`,body:a});if(!o.ok){let e=await o.text();throw Error(`Telegram sendDocument failed: ${o.status} ${e}`)}}async sendPhoto(e,t,n,r){let i=r.split(`/`).pop()||`image.png`,a=new FormData;a.append(`chat_id`,e),a.append(`photo`,t,i),n&&a.append(`caption`,n);let o=await fetch(this.buildMethodUrl(`sendPhoto`),{method:`POST`,body:a});if(!o.ok){let e=await o.text();throw Error(`Telegram sendPhoto failed: ${o.status} ${e}`)}}async waitForRetry(e){await _t(e)}};function gt(e,t){if(e.length<=t)return[e];let n=[],r=e;for(;r.length>0;){if(r.length<=t){n.push(r);break}let e=t,i=r.lastIndexOf(`
|
|
1
|
+
import{D as e,E as t,F as n,I as r,M as i,O as a,P as o,R as s,T as c,_ as l,g as u,j as d,l as f,o as p,r as m,s as h,t as g,v as _,w as v}from"./config-Bnwx4EfS.js";import{n as y,r as b}from"./txPromise-EBECky1b.js";import{t as x}from"./getConfig-D89uJgo5.js";import{p as S}from"./custom-element-security-Da_6HQ6X.js";import{t as C}from"./dist-B9m1QM9v.js";import{At as w,C as T,Ct as E,Dt as ee,Et as te,Ft as D,G as O,Gt as k,H as A,Ht as j,I as M,It as N,Jt as P,Kt as F,Lt as I,M as ne,Mt as re,N as ie,Nt as L,Ot as R,P as ae,Pt as oe,St as z,Tt as se,U as B,Ut as ce,V as le,Vt as ue,W as de,Wt as fe,X as pe,Y as me,Yt as he,at as ge,bt as _e,cn as V,dn as ve,dt as ye,ft as be,gn as xe,gt as Se,hn as Ce,in as we,j as Te,jt as Ee,kt as H,l as De,ln as Oe,nn as ke,on as U,ot as Ae,qt as je,rn as Me,sn as Ne,t as W,tn as G,u as Pe,un as Fe,ut as Ie,vn as Le}from"./orchestrator-BeJfwtvz.js";import{l as Re,r as ze}from"./getGroupDir-BwprrdrQ.js";import{c as Be,f as Ve,s as He,t as K,u as Ue}from"./tools-Cp1gequ8.js";import{t as q}from"./setConfig-DFMYnYLE.js";import{t as J}from"./ulid-BY7rQVLN.js";import{t as We}from"./tools-CcgG5XuA.js";import{i as Ge,r as Ke}from"./syncWebMcpRegistration-CqVCB6m8.js";import"./tools-B-PzsLc2.js";import{n as qe,r as Je}from"./crypto-C8c5wMzN.js";import{a as Ye,i as Xe,r as Y,t as Ze}from"./peerjs-mG30TAJ_.js";import{i as Qe,r as $e}from"./webmcp-DBONjQWd.js";import{ensureControlPlaneConnected as et}from"./initControlPlane-C5v0FtJE.js";async function tt(e){if(!(!e||e.name===`shadowclaw`)){try{if(await x(e,m.DB_MIGRATED_FROM_LEGACY)===`true`)return}catch{}try{let t=await new Promise(e=>{let t=indexedDB.open(l);t.onsuccess=()=>{let n=t.result;if(!n.objectStoreNames||n.objectStoreNames.length===0){n.close(),e(null);return}e(n)},t.onerror=()=>e(null)});if(t){let n=Array.from(t.objectStoreNames).filter(t=>e.objectStoreNames.contains(t));for(let r of n)await new Promise(n=>{try{let i=t.transaction(r,`readonly`).objectStore(r).getAll();i.onsuccess=()=>{let t=i.result||[];if(t.length>0)try{let i=e.transaction(r,`readwrite`),a=i.objectStore(r);for(let e of t)a.put(e);i.oncomplete=()=>n(),i.onerror=()=>n(),i.onabort=()=>n()}catch{n()}else n()},i.onerror=()=>n()}catch{n()}});t.close()}}catch(e){console.warn(`Legacy IndexedDB migration warning:`,e)}finally{try{await q(e,m.DB_MIGRATED_FROM_LEGACY,`true`)}catch{}}}}async function nt(e,t,n){for await(let[r,i]of e.entries())if(i.kind===`directory`)await nt(i,await t.getDirectoryHandle(r,{create:!0}),[...n,r]);else if(i.kind===`file`){let e=await i.getFile(),a=await t.getFileHandle(r,{create:!0});try{await He(a,e)}catch(t){if(!(t instanceof Error?t.message:String(t)).includes(`Writable file streams are not supported`))throw t;await Be([...n,r],e)}}}async function rt(e){if(!e)return;try{if(await x(e,m.OPFS_MIGRATED_FROM_LEGACY)===`true`)return}catch{}let t=ze();if(t!==`shadowclaw`&&!(typeof navigator>`u`||!navigator.storage||typeof navigator.storage.getDirectory!=`function`))try{let n=await navigator.storage.getDirectory(),r;try{r=await n.getDirectoryHandle(_)}catch{try{await q(e,m.OPFS_MIGRATED_FROM_LEGACY,`true`)}catch{}return}let i=await n.getDirectoryHandle(t,{create:!0});await nt(r,i,[t])}catch(e){console.warn(`Legacy OPFS migration warning:`,e)}finally{try{await q(e,m.OPFS_MIGRATED_FROM_LEGACY,`true`)}catch{}}}function it(){return new Promise(async(e,t)=>{let n,r=d(),i=indexedDB.open(r,2);i.onupgradeneeded=()=>{let e=i.result;if(!e.objectStoreNames.contains(`messages`)){let t=e.createObjectStore(`messages`,{keyPath:`id`});t.createIndex(`by-group-time`,[`groupId`,`timestamp`]),t.createIndex(`by-group`,`groupId`)}if(e.objectStoreNames.contains(`sessions`)||e.createObjectStore(`sessions`,{keyPath:`groupId`}),!e.objectStoreNames.contains(`tasks`)){let t=e.createObjectStore(`tasks`,{keyPath:`id`});t.createIndex(`by-group`,`groupId`),t.createIndex(`by-enabled`,`enabled`)}e.objectStoreNames.contains(`config`)||e.createObjectStore(`config`,{keyPath:`key`}),e.objectStoreNames.contains(`pendingShares`)||e.createObjectStore(`pendingShares`,{keyPath:`id`}).createIndex(`by-createdAt`,`createdAt`)},i.onsuccess=async()=>{n=i.result,b(n);try{await tt(n),await rt(n)}catch(e){console.warn(`Error running legacy migration:`,e)}e(n)},i.onerror=()=>{t(Error(`Failed to open IndexedDB: ${i.error?.message}`))}})}var at=class{activeGroupId;displayCallback;messageCallback;type;typingCallback;constructor(){this.type=`browser`,this.messageCallback=null,this.typingCallback=null,this.displayCallback=null,this.activeGroupId=p}getActiveGroup(){return this.activeGroupId}onDisplay(e){this.displayCallback=e}onMessage(e){this.messageCallback=e}onTyping(e){this.typingCallback=e}setActiveGroup(e){this.activeGroupId=e}setTyping(e,t){this.typingCallback?.(e,t)}start(){}stop(){}submit(e,t,n=[],r,i,a){let o=t||this.activeGroupId,s={id:J(),groupId:o,sender:`You`,content:e,timestamp:Date.now(),channel:`browser`,attachments:n,a2uiAction:r,freshContext:i,subagent:a};this.messageCallback?.(s)}async send(e,t,n){this.displayCallback?.(e,t,!0)}},ot=class{_entries;constructor(){this._entries=[]}find(e){return this.resolve(e)?.channel??null}get(e){return this._entries.find(t=>t.prefix===e)?.channel}getBadge(e){return this.resolve(e)?.badge??``}getChannelType(e){return this.resolve(e)?.channel.type??null}onMessage(e){for(let t of this._entries)t.channel.onMessage(e)}onTyping(e){for(let t of this._entries)t.channel.onTyping&&t.channel.onTyping(e)}prefixes(){return this._entries.map(e=>e.prefix)}register(e,t,n){let r=typeof n==`string`?{badge:n}:n??{};this._entries.push({prefix:e,channel:t,badge:r.badge??e.replace(/:$/,``),autoTrigger:r.autoTrigger??!1}),this._entries.sort((e,t)=>t.prefix.length-e.prefix.length)}resolve(e){for(let t of this._entries)if(e.startsWith(t.prefix))return t;return null}shouldAutoTrigger(e){return this.resolve(e)?.autoTrigger??!1}startAll(){for(let e of this._entries)e.channel.start()}stopAll(){for(let e of this._entries)e.channel.stop()}},st=class{abortController=null;apiKey=``;apiMode=`unknown`;cursor=null;fileReader=null;messageCallback=null;reconnectDelayMs=1e3;registeredChatIds=new Set;running=!1;seenMessageIds=new Map;serverUrl=``;type=`imessage`;configure(e,t,n){this.serverUrl=ct(e),this.apiKey=t.trim(),this.registeredChatIds=new Set(n.map(e=>e.trim()).filter(Boolean)),this.cursor=null,this.apiMode=`unknown`}handleIncomingMessage(e){this.pruneSeenMessageIds();let t=String(e.chatId||e.conversationId||``).trim();if(!t||this.registeredChatIds.size>0&&!this.registeredChatIds.has(t))return;let n=`${e.text||e.body||``}`.trim();if(!n)return;let r=`${e.id||e.guid||`${t}:${e.timestamp||e.createdAt||n}`}`;if(this.seenMessageIds.has(r))return;this.seenMessageIds.set(r,Date.now());let i={id:r,groupId:`im:${t}`,sender:`${e.sender||e.handle||e.from||`iMessage`}`,content:n,timestamp:lt(e.timestamp||e.createdAt),channel:`imessage`};this.messageCallback?.(i)}handlePollResponse(e){e.nextCursor!==void 0&&e.nextCursor!==null?this.cursor=String(e.nextCursor):e.cursor!==void 0&&e.cursor!==null&&(this.cursor=String(e.cursor));let t=Array.isArray(e.messages)?e.messages:[];for(let e of t)this.handleIncomingMessage(e)}isConfigured(){return this.serverUrl.length>0}onMessage(e){this.messageCallback=e}pruneSeenMessageIds(){let e=Date.now();for(let[t,n]of this.seenMessageIds.entries())e-n>6e4&&this.seenMessageIds.delete(t)}setTyping(e,t){if(!t)return;let n=e.replace(/^im:/,``);this.requestJson(`/messages/typing`,{method:`POST`,body:JSON.stringify({chatId:n,typing:!0})}).catch(()=>{})}start(){!this.isConfigured()||this.running||(this.running=!0,this.abortController=new AbortController,this.poll())}ensureConnected(){!this.isConfigured()||!this.running||(this.reconnectDelayMs=1e3,this.abortController?.abort(),this.abortController=new AbortController,this.poll())}stop(){this.running=!1,this.abortController?.abort(),this.abortController=null}async ensureApiMode(){if(this.apiMode!==`unknown`)return this.apiMode;try{await this.requestJson(`/v1/info`,{method:`GET`}),this.apiMode=`beeper-desktop`}catch{this.apiMode=`legacy`}return this.apiMode}async poll(){for(;this.running&&this.abortController&&!this.abortController.signal.aborted;)try{let e=new URLSearchParams({timeout:`25`});this.cursor&&e.set(`cursor`,this.cursor);let t=await this.requestJson(`/messages?${e.toString()}`,{method:`GET`},u+5e3,this.abortController.signal);this.reconnectDelayMs=1e3,this.handlePollResponse(t)}catch(e){if(e instanceof Error&&e.name===`AbortError`)break;console.error(`iMessage bridge poll error:`,e),await ut(this.reconnectDelayMs),this.reconnectDelayMs=Math.min(this.reconnectDelayMs*2,3e4)}}async requestJson(e,t,n=u,r){let i=new AbortController,a=setTimeout(()=>i.abort(),n),o=()=>i.abort();r?.addEventListener(`abort`,o,{once:!0});try{let n=new Headers(t.headers);n.set(`Accept`,`application/json`),!n.has(`Content-Type`)&&t.body&&!(t.body instanceof FormData)&&n.set(`Content-Type`,`application/json`),this.apiKey&&(n.set(`Authorization`,`Bearer ${this.apiKey}`),n.set(`X-API-Key`,this.apiKey));let r=await fetch(`${this.serverUrl}${e}`,{...t,headers:n,signal:i.signal});if(!r.ok){let e=await r.text();throw Error(`iMessage bridge request failed: ${r.status} ${e}`)}return r.status===204?{messages:[]}:await r.json()}finally{clearTimeout(a),r?.removeEventListener(`abort`,o)}}async send(e,t,n){let r=e.replace(/^im:/,``),{remainingText:i,attachments:a}=dt(t);for(let t of a){if(!this.fileReader){await this.sendText(r,`[${t.alt}] (file: ${t.path})`);continue}try{let n=await this.fileReader(e,t.path);if(!n||n.size===0)throw Error(`Attachment file is empty or unavailable.`);await this.sendAttachment(r,n,t)}catch(e){console.warn(`iMessage attachment send failed for ${t.path}:`,e),await this.sendText(r,`[${t.alt}] (file: ${t.path})`)}}let o=i.trim();o&&await this.sendText(r,o)}async sendAttachment(e,t,n){if(await this.ensureApiMode()===`beeper-desktop`){await this.sendAttachmentViaBeeperDesktop(e,t,n);return}await this.sendAttachmentViaLegacyBridge(e,t,n)}async sendAttachmentViaBeeperDesktop(e,t,n){let r=n.path.split(`/`).pop()||`attachment.bin`,i=new FormData;i.append(`file`,t,r),i.append(`fileName`,r),t.type&&i.append(`mimeType`,t.type);let a=`${(await this.requestJson(`/v1/assets/upload`,{method:`POST`,body:i})).uploadID||``}`.trim();if(!a)throw Error(`Beeper asset upload failed: missing uploadID`);await this.requestJson(`/v1/chats/${encodeURIComponent(e)}/messages`,{method:`POST`,body:JSON.stringify({text:n.alt||void 0,attachment:{uploadID:a,fileName:r,mimeType:t.type||void 0}})})}async sendAttachmentViaLegacyBridge(e,t,n){let r=n.path.split(`/`).pop()||`attachment.bin`,i=new FormData;i.append(`chatId`,e),n.alt&&i.append(`text`,n.alt),i.append(`file`,t,r),await this.requestJson(`/messages/send`,{method:`POST`,body:i})}async sendText(e,t){if(await this.ensureApiMode()===`beeper-desktop`){await this.requestJson(`/v1/chats/${encodeURIComponent(e)}/messages`,{method:`POST`,body:JSON.stringify({text:t})});return}await this.requestJson(`/messages/send`,{method:`POST`,body:JSON.stringify({chatId:e,text:t})})}};function ct(e){return e.trim().replace(/\/+$/,``)}function lt(e){if(typeof e==`number`&&Number.isFinite(e))return e>0xe8d4a51000?e:e*1e3;if(typeof e==`string`){let t=Number(e);if(Number.isFinite(t))return lt(t);let n=Date.parse(e);if(Number.isFinite(n))return n}return Date.now()}function ut(e){return new Promise(t=>setTimeout(t,e))}function dt(e){let t=[],n=/!?\[([^\]]*)\]\(([^)]+)\)/g,r=null,i=e;for(;(r=n.exec(e))!==null;){let e=r[1]||``,n=ft((r[2]||``).trim());n&&(t.push({alt:e,path:n}),i=i.replace(r[0],``))}return{remainingText:i,attachments:t}}function ft(e){if(!e)return null;let t=e.trim();if(/^[a-zA-Z][a-zA-Z\d+.-]*:/.test(t)||t.startsWith(`//`))return null;let n=t.replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^\.\//,``);if(!n)return null;let r=n.split(`/`).filter(Boolean);return r.some(e=>e===`..`)?null:r.join(`/`)}var pt=class{messageCallback=null;running=!1;type=`room`;typingCallback=null;_manager=null;_peerjs=null;deliverInbound(e){this.messageCallback?.(e)}onMessage(e){this.messageCallback=e}onTyping(e){this.typingCallback=e}setManager(e){this._manager=e}setPeerJs(e){this._peerjs=e}setTyping(e,t){}start(){this.running=!0}stop(){this.running=!1}async send(e,t,n){if(!this._manager)return;let r=P(e);if(n&&n.length>0&&this._peerjs){let t=this._manager.get(r);t&&await this._peerjs.sendAttachmentsToRoom(t,e,n)}this._manager.broadcast(r,t,n)}};const mt=1e3;var ht=class{abortController=null;fileReader=null;messageCallback=null;offset=0;pollRetryDelayMs=mt;pollSessionId=0;registeredChatIds=new Set;running=!1;token=``;type=`telegram`;useProxy=!1;buildFileUrl(e){let t=e.split(`/`).filter(Boolean).map(e=>encodeURIComponent(e)).join(`/`);return`${this.useProxy?`/telegram/file/bot`:`https://api.telegram.org/file/bot`}${this.token}/${t}`}buildMethodUrl(t){let n=t.replace(/^\/+/,``);return`${this.useProxy?e:c}${this.token}/${n}`}configure(e,t,n=!1){this.token=e.trim(),this.registeredChatIds=new Set(t.map(e=>e.trim()).filter(Boolean)),this.useProxy=!!n}isConfigured(){return this.token.length>0}nextPollRetryDelay(){let e=this.pollRetryDelayMs;return this.pollRetryDelayMs=Math.min(this.pollRetryDelayMs*2,6e4),e}onMessage(e){this.messageCallback=e}registerChatId(e){let t=e.trim();t&&this.registeredChatIds.add(t)}resetPollBackoff(){this.pollRetryDelayMs=mt}setTyping(e,t){if(!t)return;let n=e.replace(/^tg:/,``);this.apiCall(`sendChatAction`,{chat_id:n,action:`typing`}).catch(()=>{})}start(){if(!this.token||this.running)return;this.running=!0,this.resetPollBackoff();let e=++this.pollSessionId,t=new AbortController;this.abortController=t,this.poll(e,t)}ensureConnected(){if(!this.token||!this.running)return;this.resetPollBackoff(),this.abortController?.abort();let e=++this.pollSessionId,t=new AbortController;this.abortController=t,this.poll(e,t)}stop(){this.running=!1,this.resetPollBackoff(),this.pollSessionId+=1,this.abortController?.abort(),this.abortController=null}async apiCall(e,t){let n=await fetch(this.buildMethodUrl(e),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)});if(!n.ok){let t=await n.text();throw Error(`Telegram API ${e} failed: ${n.status} ${t}`)}return await n.json()}async extractAttachments(e){let t=[],n=Array.isArray(e.photo)?e.photo.at(-1):null;n?.file_id&&t.push({id:n.file_id,fileName:`photo-${e.message_id}.png`,mimeType:`image/png`,previewDisposition:`inline`}),e.document?.file_id&&t.push({id:e.document.file_id,fileName:e.document.file_name||`document-${e.message_id}`,mimeType:e.document.mime_type}),e.video?.file_id&&t.push({id:e.video.file_id,fileName:e.video.file_name||`video-${e.message_id}.mp4`,mimeType:e.video.mime_type||`video/mp4`}),e.audio?.file_id&&t.push({id:e.audio.file_id,fileName:e.audio.file_name||`audio-${e.message_id}.mp3`,mimeType:e.audio.mime_type||`audio/mpeg`}),e.voice?.file_id&&t.push({id:e.voice.file_id,fileName:`voice-${e.message_id}.ogg`,mimeType:e.voice.mime_type||`audio/ogg`}),e.animation?.file_id&&t.push({id:e.animation.file_id,fileName:e.animation.file_name||`animation-${e.message_id}.mp4`,mimeType:e.animation.mime_type||`video/mp4`}),e.sticker?.file_id&&t.push({id:e.sticker.file_id,fileName:`sticker-${e.message_id}.${vt(e.sticker)}`,mimeType:e.sticker.is_animated?`application/x-tgsticker`:e.sticker.is_video?`video/webm`:`image/webp`});let r=[];for(let e of t){let t=await this.fetchTelegramFileInfo(e.id);r.push({id:e.id,fileName:e.fileName,mimeType:e.mimeType,size:t.file_size,previewDisposition:e.previewDisposition,source:{kind:`remote-url`,url:this.buildFileUrl(t.file_path)}})}return r}async fetchTelegramFileInfo(e){let t=await this.apiCall(`getFile`,{file_id:e});if(!t.ok||!t.result?.file_path)throw Error(`Telegram getFile failed for attachment ${e}`);return t.result}async handleUpdate(e){let t=e.message;if(!t)return;let n=String(t.chat.id);if(t.text===`/chatid`){this.apiCall(`sendMessage`,{chat_id:n,text:`Chat ID: ${n}\nRegister this ID in ShadowClaw settings.`}).catch(console.error);return}if(t.text===`/ping`){this.apiCall(`sendMessage`,{chat_id:n,text:`Pong! ShadowClaw is running.`}).catch(console.error);return}if(!this.registeredChatIds.has(n))return;let r=await this.extractAttachments(t),i=`${t.text||t.caption||``}`.trim()||(t.photo?.length?`[Photo]`:null)||(t.voice?`[Voice message]`:null)||(t.video?`[Video]`:null)||(t.audio?`[Audio]`:null)||(t.animation?`[Animation]`:null)||(t.document?`[Document: ${t.document.file_name||`unnamed`}]`:null)||(t.sticker?`[Sticker: ${t.sticker.emoji||``}]`:null)||(t.location?`[Location: ${t.location.latitude}, ${t.location.longitude}]`:null)||(t.contact?`[Contact: ${t.contact.first_name}]`:null)||`[Unsupported message type]`,a=t.from?.first_name||t.from?.username||String(t.from?.id||`Unknown`),o={id:String(t.message_id),groupId:`tg:${n}`,sender:a,content:i,timestamp:t.date*1e3,channel:`telegram`,attachments:r};this.messageCallback?.(o)}async poll(e,t){for(;this.running&&this.pollSessionId===e&&!t.signal.aborted;)try{let e=await fetch(this.buildMethodUrl(`getUpdates?offset=${this.offset}&timeout=30`),{signal:t.signal});if(!e.ok){console.error(`Telegram poll error: HTTP ${e.status}`),await this.waitForRetry(this.nextPollRetryDelay());continue}let n=await e.json();if(!n.ok||!Array.isArray(n.result)){await this.waitForRetry(this.nextPollRetryDelay());continue}this.resetPollBackoff();for(let e of n.result)this.offset=e.update_id+1,await this.handleUpdate(e)}catch(e){if(e instanceof Error&&e.name===`AbortError`)break;console.error(`Telegram poll error:`,e),await this.waitForRetry(this.nextPollRetryDelay())}}async send(e,n,r){let i=e.replace(/^tg:/,``),{remainingText:a,attachments:o}=yt(n);for(let t of o){if(this.fileReader)try{let n=await this.fileReader(e,t.path);if(n&&n.size>0){let e=t.path.toLowerCase();e.endsWith(`.png`)||e.endsWith(`.jpg`)||e.endsWith(`.jpeg`)||e.endsWith(`.gif`)||e.endsWith(`.webp`)?await this.sendPhoto(i,n,t.alt,t.path):await this.sendDocument(i,n,t.alt,t.path);continue}}catch(e){console.warn(`TelegramChannel: failed to read file ${t.path}:`,e)}await this.apiCall(`sendMessage`,{chat_id:i,text:`[${t.alt}] (file: ${t.path})`})}let s=a.trim();if(s){let e=gt(s,t);for(let t of e)await this.apiCall(`sendMessage`,{chat_id:i,text:t})}}async sendDocument(e,t,n,r){let i=r.split(`/`).pop()||`document.file`,a=new FormData;a.append(`chat_id`,e),a.append(`document`,t,i),n&&a.append(`caption`,n);let o=await fetch(this.buildMethodUrl(`sendDocument`),{method:`POST`,body:a});if(!o.ok){let e=await o.text();throw Error(`Telegram sendDocument failed: ${o.status} ${e}`)}}async sendPhoto(e,t,n,r){let i=r.split(`/`).pop()||`image.png`,a=new FormData;a.append(`chat_id`,e),a.append(`photo`,t,i),n&&a.append(`caption`,n);let o=await fetch(this.buildMethodUrl(`sendPhoto`),{method:`POST`,body:a});if(!o.ok){let e=await o.text();throw Error(`Telegram sendPhoto failed: ${o.status} ${e}`)}}async waitForRetry(e){await _t(e)}};function gt(e,t){if(e.length<=t)return[e];let n=[],r=e;for(;r.length>0;){if(r.length<=t){n.push(r);break}let e=t,i=r.lastIndexOf(`
|
|
2
2
|
`,t);i>t*.5&&(e=i),n.push(r.slice(0,e)),r=r.slice(e)}return n}function _t(e){return new Promise(t=>setTimeout(t,e))}function vt(e){return e?.is_animated?`tgs`:e?.is_video?`webm`:`webp`}function yt(e){let t=[],n=/!?\[([^\]]*)\]\(([^)]+)\)/g,r,i=e;for(;(r=n.exec(e))!==null;){let e=r[1],n=bt((r[2]||``).trim());n&&(t.push({alt:e,path:n}),i=i.replace(r[0],``))}return{remainingText:i,attachments:t}}function bt(e){if(!e)return null;let t=e.trim();if(/^[a-zA-Z][a-zA-Z\d+.-]*:/.test(t)||t.startsWith(`//`))return null;let n=t.replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^\.\//,``);if(!n)return null;let r=n.split(`/`).filter(Boolean);return r.some(e=>e===`..`)?null:r.join(`/`)}function xt(e,t){let n=JSON.stringify(e.dataModel??{},null,2),r=t?`${t}`:`The user`;return`[A2UI ACTION]\nsurfaceId: "${e.surfaceId}"\nactionId: "${e.actionId}"\n`+(t?`firedBy: "${t}"\n`:``)+`dataModel:\n${n}\n\nInstructions: ${r} triggered the "${e.actionId}" action on surface "${e.surfaceId}". The dataModel above contains the current form values. Use the appropriate tool(s) to fulfill the action based on the actionId and dataModel values. After you have a result, call render_component with action "updateDataModel" on surfaceId "${e.surfaceId}" to update the surface (e.g. set path "/result" to the output value). Do NOT respond with plain text only — always update the surface via render_component.`}var St=class{static formatMessagesXml(e){let t=e=>e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`);return`<messages>\n${e.map(e=>`<message sender="${t(e.sender)}" time="${new Date(e.timestamp).toISOString()}">${t(e.content)}</message>`).join(`
|
|
3
3
|
`)}\n</messages>`}static formatOutbound(e){return e.replace(/<internal>[\s\S]*?<\/internal>/g,``).trim()}registry;constructor(e){this.registry=e}findChannel(e){return this.registry.find(e)}setTyping(e,t){this.findChannel(e)?.setTyping(e,t)}async send(e,t,n){let r=this.findChannel(e);if(!r){console.warn(`No channel for groupId: ${e}`);return}await r.send(e,t,n)}};const Ct={"litert-community/gemma-4-E2B-it-litert-lm":`https://huggingface.co/litert-community/gemma-4-E2B-it-litert-lm/resolve/main/gemma-4-E2B-it-web.litertlm`,"litert-community/gemma-4-E4B-it-litert-lm":`https://huggingface.co/litert-community/gemma-4-E4B-it-litert-lm/resolve/main/gemma-4-E4B-it-web.litertlm`},wt=Object.keys(Ct);function Tt(){return typeof navigator<`u`&&`gpu`in navigator&&typeof WebAssembly<`u`&&`Suspending`in WebAssembly}let X=null,Et=null,Dt=null,Ot=null;const kt=fe;async function At(e,t,n){return ce(e,t,n,{cacheName:`shadow-claw-litertlm-models`,chunkSize:kt})}async function jt(e,t,n){if(Et===e&&X)return X;if(Dt&&Ot===e)return Dt;Ot=e,Dt=(async()=>{if(X){try{await X.delete?.()}catch{}X=null,Et=null}let r=Ct[e];if(!r)throw Error(`LiteRT-LM: Model '${e} is not supported. Supported models: ${wt.join(`, `)}`);let i=await import(`./dist-DUy1CvmT.js`).catch(()=>{throw Error(`LiteRT-LM: The @litert-lm/core package is not installed. Run: npm install @litert-lm/core`)}),a=i.Engine??i.default?.Engine;if(typeof a?.create!=`function`)throw Error(`LiteRT-LM: Could not locate Engine.create in @litert-lm/core. Ensure you have the latest version installed.`);let o=await At(r,t??(()=>{}),n),s=await a.create({model:o,mainExecutorSettings:{maxNumTokens:8192}});return X=s,Et=e,s})();try{return await Dt}finally{Dt=null,Ot=null}}function Mt(e){if(!e)return null;let t=e.match(/<\|tool_call>call:([A-Za-z0-9_]+)(\{[\s\S]*?)(?:<tool_call\|>|$)/);if(!t)return null;let n=t[1],r=t[2];r=r.replace(/<\|"\|>/g,`"`);function i(e){return e.replace(/([{,]\s*)([A-Za-z_$][A-Za-z0-9_$]*)(\s*:)/g,`$1"$2"$3`)}let a={},o=[r,i(r)];for(let e of o)try{let t=JSON.parse(e);if(t&&typeof t==`object`&&!Array.isArray(t)){a=t;break}}catch{}if(Object.keys(a).length===0){let e=r.indexOf(`{`),t=r.lastIndexOf(`}`);if(e>=0&&t>e){let n=r.slice(e,t+1);for(let e of[n,i(n)])try{let t=JSON.parse(e);if(t&&typeof t==`object`&&!Array.isArray(t)){a=t;break}}catch{}}}return{name:n,input:a}}function Nt(e){let t=V(String(e||``),`litert_lm`).trim();if(!t)return null;let n=e=>{try{let t=JSON.parse(e);if(t&&typeof t==`object`&&(t.type===`tool_use`||t.type===`response`))return t.tools_calls&&!t.tool_calls&&(t.tool_calls=t.tools_calls),{...t,format:`json`}}catch{}return null},r=n(t);if(r)return r;let i=t.indexOf(`{`),a=t.lastIndexOf(`}`);if(i>=0&&a>i&&(r=n(t.slice(i,a+1)),r))return r;if(t.includes(`"tool_use"`)){let e=/"name"\s*:\s*"([^"]+)"/.exec(t);if(e){let n={},r=/"input"\s*:\s*(\{.*?\})\s*(?:]|\}|"|$)/s.exec(t);if(r)try{n=JSON.parse(r[1])}catch{}return{type:`tool_use`,format:`json`,tool_calls:[{id:`litert_${Date.now()}`,name:e[1],input:n}]}}}let o=Mt(t);return o?{type:`tool_use`,format:`model_specific`,tool_calls:[{id:`litert_${Date.now()}`,name:o.name,input:o.input}]}:null}function Pt(e,t,n){let r=[],i=e||``;if(n.length>0){let e=[``,`TOOL CALLING INSTRUCTIONS:`,`Return ONLY valid JSON (no markdown fences).`,`To call a tool: {"type":"tool_use","tool_calls":[{"name":"<tool>","input":{...}}]}`,`To reply: {"type":"response","response":"<your answer>"}`,`IMPORTANT: When you need to use a tool, output ONLY the JSON above — do NOT describe the call as text.`,``,`Available tools:`,n.map(e=>{let t=Object.keys(e.input_schema.properties||{}).join(`, `),n=e.description.split(`. `)[0];return`${e.name}(${t}): ${n}`}).join(`
|
|
4
4
|
`)].join(`
|