shadow-claw 1.34.5 → 1.35.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/README.md +5 -1
- package/dist/cli/chunk-BCLxzLO92.js +5 -0
- package/dist/cli/chunk-BHNCi3ui2.js +1 -0
- package/dist/cli/chunk-BMPhLSn8.js +1 -0
- package/dist/cli/chunk-BMW6QB5-2.js +27 -0
- package/dist/cli/chunk-BQCWtrzh.js +1 -0
- package/dist/cli/chunk-BQCWtrzh2.js +1 -0
- package/dist/cli/chunk-BdJUjMuz.js +1 -0
- package/dist/cli/chunk-C47WdxKx2.js +1 -0
- package/dist/cli/{chunk-D9dku_3t.js → chunk-CAqvQuGr.js} +1 -1
- package/dist/cli/{chunk-DoVxObGa2.js → chunk-CHzhUS1N2.js} +1 -1
- package/dist/cli/chunk-CUMlq7Jw2.js +263 -0
- package/dist/cli/chunk-CXi9LU9e2.js +110 -0
- package/dist/cli/chunk-ChefnX-r.js +110 -0
- package/dist/cli/{chunk-zvi71-77.js → chunk-D3JxbzjI2.js} +15 -15
- package/dist/cli/chunk-D7VYMl092.js +1 -0
- package/dist/cli/chunk-DNIduiJ82.js +91 -0
- package/dist/cli/{chunk-C4UfzPK4.js → chunk-DTbrldk_.js} +1 -1
- package/dist/cli/chunk-DZ8YBXax.js +969 -0
- package/dist/cli/chunk-DduRvw8B2.js +1 -0
- package/dist/cli/chunk-DnYxGjdu2.js +1 -0
- package/dist/cli/chunk-Ea7nXmgb2.js +1 -0
- package/dist/cli/{chunk-BRiGkTIi.js → chunk-EohNY8vW.js} +1 -1
- package/dist/cli/chunk-LIIpZlwP2.js +1 -0
- package/dist/cli/chunk-LIJZHJml2.js +1 -0
- package/dist/cli/chunk-MHBh2BgF2.js +91 -0
- package/dist/cli/{chunk-BQ7lHA7c.js → chunk-SKgLGyTY.js} +1 -1
- package/dist/cli/chunk-kcJSXcbq2.js +1 -0
- package/dist/cli/cli.js +12 -11
- package/dist/headless-agent.js +191 -187
- 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-DSRcNp3v.js → configurePeerJs-CdPzmpyI.js} +2 -2
- package/dist/lib/{configurePeerJs-DSRcNp3v.js.map → configurePeerJs-CdPzmpyI.js.map} +1 -1
- package/dist/lib/index.js +21 -21
- package/dist/lib/{initControlPlane-CWfE_Oan.js → initControlPlane-BLymRW34.js} +7 -7
- package/dist/lib/{initControlPlane-CWfE_Oan.js.map → initControlPlane-BLymRW34.js.map} +1 -1
- package/dist/lib/{orchestrator-BEUug1TW.js → orchestrator-DZkhJj7f.js} +13 -2
- package/dist/lib/{orchestrator-BEUug1TW.js.map → orchestrator-DZkhJj7f.js.map} +1 -1
- package/dist/lib/{orchestrator-CGUzfGbE.js → orchestrator-ZsQTRknI.js} +5 -5
- package/dist/lib/{orchestrator-CGUzfGbE.js.map → orchestrator-ZsQTRknI.js.map} +1 -1
- package/dist/lib/{peerjs-BSD88rT3.js → peerjs-CJYfnR5V.js} +3 -3
- package/dist/lib/{peerjs-BSD88rT3.js.map → peerjs-CJYfnR5V.js.map} +1 -1
- package/dist/lib/{push-client-CC3qifgc.js → push-client-C9hIPqLZ.js} +2 -2
- package/dist/lib/{push-client-CC3qifgc.js.map → push-client-C9hIPqLZ.js.map} +1 -1
- package/dist/lib/{shadow-claw-BWS-UVnE.js → shadow-claw-8qL2-QoK.js} +4 -4
- package/dist/lib/{shadow-claw-BWS-UVnE.js.map → shadow-claw-8qL2-QoK.js.map} +1 -1
- package/dist/lib/{shadow-claw-channel-config-DwMn3nFJ.js → shadow-claw-channel-config-CvnbqGBy.js} +3 -3
- package/dist/lib/{shadow-claw-channel-config-DwMn3nFJ.js.map → shadow-claw-channel-config-CvnbqGBy.js.map} +1 -1
- package/dist/lib/{shadow-claw-channels-BdE4cUlx.js → shadow-claw-channels-CkCvjWn1.js} +2 -2
- package/dist/lib/{shadow-claw-channels-BdE4cUlx.js.map → shadow-claw-channels-CkCvjWn1.js.map} +1 -1
- package/dist/lib/{shadow-claw-chat-DqaMoE9C.js → shadow-claw-chat-B1YEHKN3.js} +3 -3
- package/dist/lib/{shadow-claw-chat-DqaMoE9C.js.map → shadow-claw-chat-B1YEHKN3.js.map} +1 -1
- package/dist/lib/{shadow-claw-control-plane-D3DUDO29.js → shadow-claw-control-plane-jjo789IE.js} +6 -6
- package/dist/lib/{shadow-claw-control-plane-D3DUDO29.js.map → shadow-claw-control-plane-jjo789IE.js.map} +1 -1
- package/dist/lib/{shadow-claw-conversations-XT-OXogj.js → shadow-claw-conversations-MMT7wYH3.js} +2 -2
- package/dist/lib/{shadow-claw-conversations-XT-OXogj.js.map → shadow-claw-conversations-MMT7wYH3.js.map} +1 -1
- package/dist/lib/{shadow-claw-file-viewer-DJqxyd97.js → shadow-claw-file-viewer-qSkD1RQK.js} +2 -2
- package/dist/lib/{shadow-claw-file-viewer-DJqxyd97.js.map → shadow-claw-file-viewer-qSkD1RQK.js.map} +1 -1
- package/dist/lib/{shadow-claw-files-CUEJlA1o.js → shadow-claw-files-Cg8ycQ_N.js} +2 -2
- package/dist/lib/{shadow-claw-files-CUEJlA1o.js.map → shadow-claw-files-Cg8ycQ_N.js.map} +1 -1
- package/dist/lib/{shadow-claw-git-D_iVcb86.js → shadow-claw-git-gaClz-ZC.js} +3 -3
- package/dist/lib/{shadow-claw-git-D_iVcb86.js.map → shadow-claw-git-gaClz-ZC.js.map} +1 -1
- package/dist/lib/{shadow-claw-llm-C2msAsyU.js → shadow-claw-llm-DyOz0qzT.js} +2 -2
- package/dist/lib/{shadow-claw-llm-C2msAsyU.js.map → shadow-claw-llm-DyOz0qzT.js.map} +1 -1
- package/dist/lib/{shadow-claw-networking-D2NvodC-.js → shadow-claw-networking-B2xx0UUR.js} +2 -2
- package/dist/lib/{shadow-claw-networking-D2NvodC-.js.map → shadow-claw-networking-B2xx0UUR.js.map} +1 -1
- package/dist/lib/{shadow-claw-notifications-BcvVn_vu.js → shadow-claw-notifications-BjKfZy0k.js} +2 -2
- package/dist/lib/{shadow-claw-notifications-BcvVn_vu.js.map → shadow-claw-notifications-BjKfZy0k.js.map} +1 -1
- package/dist/lib/{shadow-claw-pages-CTMXRhEX.js → shadow-claw-pages-CJ2tsMtL.js} +2 -2
- package/dist/lib/{shadow-claw-pages-CTMXRhEX.js.map → shadow-claw-pages-CJ2tsMtL.js.map} +1 -1
- package/dist/lib/{shadow-claw-peerjs-C2YvypqM.js → shadow-claw-peerjs-CazCkXQ1.js} +3 -3
- package/dist/lib/{shadow-claw-peerjs-C2YvypqM.js.map → shadow-claw-peerjs-CazCkXQ1.js.map} +1 -1
- package/dist/lib/{shadow-claw-settings-B0hiDwEt.js → shadow-claw-settings-qro6pO9I.js} +2 -2
- package/dist/lib/{shadow-claw-settings-B0hiDwEt.js.map → shadow-claw-settings-qro6pO9I.js.map} +1 -1
- package/dist/lib/{shadow-claw-storage-Dt4yg4Q4.js → shadow-claw-storage-ewDdvCGa.js} +2 -2
- package/dist/lib/{shadow-claw-storage-Dt4yg4Q4.js.map → shadow-claw-storage-ewDdvCGa.js.map} +1 -1
- package/dist/lib/{shadow-claw-task-server-B2gbZaz4.js → shadow-claw-task-server-DpqQcNIs.js} +2 -2
- package/dist/lib/{shadow-claw-task-server-B2gbZaz4.js.map → shadow-claw-task-server-DpqQcNIs.js.map} +1 -1
- package/dist/lib/{shadow-claw-tasks-Bxq-niuM.js → shadow-claw-tasks-B2fMF4qE.js} +2 -2
- package/dist/lib/{shadow-claw-tasks-Bxq-niuM.js.map → shadow-claw-tasks-B2fMF4qE.js.map} +1 -1
- package/dist/lib/{shadow-claw-terminal-BfbW3xtg.js → shadow-claw-terminal-B25kQJC3.js} +2 -2
- package/dist/lib/{shadow-claw-terminal-BfbW3xtg.js.map → shadow-claw-terminal-B25kQJC3.js.map} +1 -1
- package/dist/lib/{shadow-claw-tools-BNSAaK0Y.js → shadow-claw-tools-B0y8JzoA.js} +10 -3
- package/dist/lib/{shadow-claw-tools-BNSAaK0Y.js.map → shadow-claw-tools-B0y8JzoA.js.map} +1 -1
- package/dist/lib/{shadow-claw-webvm-Dc2KmEXq.js → shadow-claw-webvm-CoCedIza.js} +2 -2
- package/dist/lib/{shadow-claw-webvm-Dc2KmEXq.js.map → shadow-claw-webvm-CoCedIza.js.map} +1 -1
- package/dist/lib/{syncWebMcpRegistration-BIL83P0Q.js → syncWebMcpRegistration-JKLALq4e.js} +2 -2
- package/dist/lib/{syncWebMcpRegistration-BIL83P0Q.js.map → syncWebMcpRegistration-JKLALq4e.js.map} +1 -1
- package/dist/lib/worker/utils/sandboxedEval.d.ts +8 -0
- package/dist/public/.well-known/mcp/server-card.json +1 -1
- package/dist/public/.well-known/mcp.json +1 -1
- package/dist/public/AGENTS.md +1 -1
- package/dist/public/README.md +5 -1
- package/dist/public/agent.worker.js +1 -1
- package/dist/public/components/shadow-claw-tools/shadow-claw-tools.html +1 -1
- package/dist/public/{configurePeerJs-B925t9C7.js → configurePeerJs-BrHeJGw1.js} +1 -1
- package/dist/public/docs/decisions/headless-cli-agent-participant.md +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/docs/subsystems/cli.md +33 -23
- package/dist/public/docs/subsystems/skills.md +17 -0
- package/dist/public/docs/subsystems/tools.md +1 -1
- package/dist/public/e2e/README.md +2 -2
- package/dist/public/{e2e-bridge-CE1xleGn.js → e2e-bridge-D_lyH__p.js} +1 -1
- package/dist/public/{executeTool-DtTrsZHV.js → executeTool-b6DnRhcv.js} +2 -1
- package/dist/public/{file-viewer-LEEStSq-.js → file-viewer-CKrQoxZi.js} +1 -1
- package/dist/public/index.html +1 -1
- package/dist/public/index.js +1 -1
- package/dist/public/{initControlPlane-e2JgxXEb.js → initControlPlane-Dn-XFuxg.js} +1 -1
- package/dist/public/llms.txt +2 -0
- package/dist/public/main/index.html +1 -1
- package/dist/public/main/memory/index.html +1 -1
- package/dist/public/{orchestrator-Baif6kmu.js → orchestrator-0BnBtxHO.js} +3 -2
- package/dist/public/{orchestrator-TndREZPL.js → orchestrator-C3GKZriH.js} +1 -1
- package/dist/public/{peerjs-DE6WF3h2.js → peerjs-CgfLEp2N.js} +1 -1
- package/dist/public/{push-client-B_IkTpNm.js → push-client-D6DLiY1s.js} +1 -1
- package/dist/public/service-worker.js +1 -1
- package/dist/public/{shadow-claw-channels-BCGz36Zl.js → shadow-claw-channels-DSijinZ9.js} +1 -1
- package/dist/public/{shadow-claw-chat-H9U9jbqD.js → shadow-claw-chat-BeHlAjnA.js} +1 -1
- package/dist/public/{shadow-claw-control-plane-CeKh64s2.js → shadow-claw-control-plane-BfF_AZSg.js} +2 -2
- package/dist/public/{shadow-claw-conversations-C26t1HXN.js → shadow-claw-conversations-Bb_2bVLJ.js} +1 -1
- package/dist/public/{shadow-claw-DBeXILmk.js → shadow-claw-f71DlRdV.js} +2 -2
- package/dist/public/{shadow-claw-file-viewer-DWUoTjkr.js → shadow-claw-file-viewer-B67000Mm.js} +1 -1
- package/dist/public/{shadow-claw-files-BQ8DSX-z.js → shadow-claw-files-DeZZYt01.js} +1 -1
- package/dist/public/{shadow-claw-git-CIXyISw-.js → shadow-claw-git-Ccy25LuW.js} +2 -2
- package/dist/public/{shadow-claw-llm-D_GpOSZE.js → shadow-claw-llm-XjYcTlXT.js} +1 -1
- package/dist/public/{shadow-claw-networking-BYp5K3B7.js → shadow-claw-networking-efXQtydQ.js} +1 -1
- package/dist/public/{shadow-claw-notifications-ZiXmPweY.js → shadow-claw-notifications-Cq2ZSeJa.js} +1 -1
- package/dist/public/{shadow-claw-pages-BHXwf3BD.js → shadow-claw-pages-BVFNSSb1.js} +1 -1
- package/dist/public/{shadow-claw-settings-BfvDvt9c.js → shadow-claw-settings-B3sHxPh9.js} +2 -2
- package/dist/public/{shadow-claw-storage-Bvn85DII.js → shadow-claw-storage-DNdlzCgC.js} +1 -1
- package/dist/public/{shadow-claw-task-server-DZL_d8FC.js → shadow-claw-task-server-BJq0rpju.js} +1 -1
- package/dist/public/{shadow-claw-tasks-Cy8jzd8q.js → shadow-claw-tasks-CkF1uMeZ.js} +1 -1
- package/dist/public/{shadow-claw-terminal-BgEXr82T.js → shadow-claw-terminal-CnHhcpA-.js} +1 -1
- package/dist/public/{shadow-claw-tools-BjnssRSi.js → shadow-claw-tools-iw0fljud.js} +8 -1
- package/dist/public/{shadow-claw-webvm-tZ1VDoVA.js → shadow-claw-webvm-Bliu4V__.js} +1 -1
- package/dist/public/{syncWebMcpRegistration-CLMvJ4kV.js → syncWebMcpRegistration-D91usEMu.js} +1 -1
- package/package.json +1 -1
- package/src/cli/cli.ts +26 -2
- package/src/cli/commands/agent.test.ts +421 -0
- package/src/cli/commands/agent.ts +270 -20
- package/src/components/shadow-claw-tools/shadow-claw-tools.html +7 -0
- package/src/worker/headless-agent.ts +14 -0
- package/src/worker/headless-types.ts +39 -0
- package/src/worker/utils/native-eval-executor.test.ts +36 -0
- package/src/worker/utils/native-eval-executor.ts +58 -0
- package/src/worker/utils/sandboxedEval.ts +36 -0
- package/dist/cli/chunk-1BmpU7jO2.js +0 -1
- package/dist/cli/chunk-54Euq8Ji2.js +0 -1
- package/dist/cli/chunk-BTitwCgT2.js +0 -88
- package/dist/cli/chunk-Bjh76Dai.js +0 -1081
- package/dist/cli/chunk-C2HeZQ6K.js +0 -1
- package/dist/cli/chunk-CxdpafWg.js +0 -1
- package/dist/cli/chunk-DEy72ZNV2.js +0 -88
- package/dist/cli/chunk-Da1BZyqf.js +0 -1
- package/dist/cli/chunk-FHsJD-Sf2.js +0 -27
- package/dist/cli/chunk-aWgoVB7x2.js +0 -1
- package/dist/cli/chunk-hOceZVB92.js +0 -371
- package/dist/cli/chunk-pwNc6VtC2.js +0 -1
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./chunk-DxIsgrAF.js";import{_ as t,b as n,g as r,l as i,r as a,s as o,y as s}from"./chunk-BkKN8FNP.js";import{a as c,i as l,n as u,o as d,r as f}from"./chunk-DFLqhyP_.js";import{t as p}from"./chunk-Dhh0lHO62.js";import{A as m,C as h,D as g,E as _,O as v,S as y,a as b,i as x,k as S,n as C,o as w,r as T,s as E,v as D,w as O,y as k}from"./chunk-FHsJD-Sf2.js";import{A,C as j,D as M,E as N,F as ee,I as te,L as ne,M as P,N as re,O as ie,P as ae,R as oe,S as F,T as se,_ as ce,a as le,b as I,c as L,d as ue,f as de,g as fe,h as R,i as z,j as pe,k as me,l as he,m as ge,o as _e,p as ve,s as ye,u as be,v as xe,w as B,x as Se,y as Ce}from"./chunk-hOceZVB92.js";import{createRequire as we}from"node:module";import{constants as Te,existsSync as Ee}from"node:fs";import V from"node:path";import{fileURLToPath as De}from"node:url";import{env as Oe}from"node:process";import{exec as ke,spawn as Ae}from"node:child_process";import{access as je,mkdir as Me,readFile as Ne,readdir as Pe,rm as Fe,stat as Ie,unlink as Le,writeFile as H}from"node:fs/promises";import{EventEmitter as Re}from"node:events";import{isIP as ze}from"node:net";import{DatabaseSync as Be}from"node:sqlite";const Ve=({command:e,stdin:t,timeoutSec:n})=>new Promise(r=>{let i=ke(e,{timeout:n*1e3,maxBuffer:10*1024*1024},(e,t,n)=>{let i=t||``;n&&(i+=(i?`
|
|
2
|
-
`:``)+n),e&&!i&&(i=e.message),r(i)});t&&i.stdin&&(i.stdin.write(t),i.stdin.end())});Se(Ve),globalThis.__headlessBashExecutor=Ve;function He(e,t,n){let r=t.input_tokens||0,i=t.output_tokens||0,a=t.cache_read_input_tokens||0,o=t.cache_creation_input_tokens||0;return{type:`token-usage`,payload:{groupId:e,inputTokens:r,outputTokens:i,cacheReadTokens:a,cacheCreationTokens:o,totalTokens:r+i+a+o,contextLimit:n}}}function U(e,t,n,r){F(M(e,t,n,r))}async function*Ue(e,t){let n=e.getReader(),r=new TextDecoder,i=``;try{for(;!t?.aborted;){let{done:e,value:t}=await n.read();if(e)break;i+=r.decode(t,{stream:!0});let a=i.split(`
|
|
3
|
-
|
|
4
|
-
`);i=a.pop()||``;for(let e of a){let t=e.split(`
|
|
5
|
-
`);for(let e of t)if(!(!e||e.startsWith(`:`))&&e.startsWith(`data: `)){let t=e.slice(6).trim();if(t===`[DONE]`)continue;try{yield JSON.parse(t)}catch{}}}}}finally{n.releaseLock()}}const We=6e4,Ge=new Map;function Ke(e){let t=Ge.get(e);if(t)return t;let n={recentCalls:[],nextAllowedAt:0,remoteLimit:null,remoteRemaining:null,remoteResetAt:null};return Ge.set(e,n),n}function W(){return Date.now()}function qe(e){if(!e)return null;let t=Number(e.trim());return Number.isFinite(t)?t:null}function Je(e){if(!e)return null;let t=e.trim(),n=Number(t);if(Number.isFinite(n))return n<=0?null:Math.round(n*1e3);let r=Date.parse(t);if(!Number.isFinite(r))return null;let i=r-W();return i>0?i:null}function Ye(e){let t=qe(e);return t===null||t<=0?null:t>=0xe8d4a51000?Math.round(t):t>=1e9?Math.round(t*1e3):W()+Math.round(t*1e3)}async function Xe(e,t){e<=0||await new Promise((n,r)=>{let i=setTimeout(()=>{o(),n()},e),a=()=>{o(),r(new DOMException(`Aborted`,`AbortError`))},o=()=>{i&&=(clearTimeout(i),null),t?.removeEventListener(`abort`,a)};if(t?.aborted){a();return}t?.addEventListener(`abort`,a)})}function Ze(e,t){if(!Number.isFinite(t)||t<=0)return 0;let n=W();if(e.recentCalls=e.recentCalls.filter(e=>n-e<We),e.recentCalls.length<t)return 0;let r=e.recentCalls[0]||n;return Math.max(0,We-(n-r))}function Qe(e){let t=W(),n=0;return e.nextAllowedAt>t&&(n=Math.max(n,e.nextAllowedAt-t)),e.remoteRemaining!==null&&e.remoteRemaining<=0&&e.remoteResetAt!==null&&e.remoteResetAt>t&&(n=Math.max(n,e.remoteResetAt-t)),n}async function $e(e,t,n,r){let i=Ke(e);for(;;){let e=Ze(i,n.callsPerMinute),a=n.autoAdapt?Qe(i):0,o=Math.max(e,a);if(o<=0){let e=W();if(n.callsPerMinute>0&&i.recentCalls.push(e),n.autoAdapt&&i.remoteRemaining!==null&&i.remoteRemaining>0&&i.remoteResetAt!==null&&i.remoteResetAt>e){let t=i.remoteResetAt-e,n=Math.max(1,i.remoteRemaining),r=Math.ceil(t/n);i.nextAllowedAt=Math.max(i.nextAllowedAt,e+r)}return}o>=1e3&&F({type:`thinking-log`,payload:{groupId:t,level:`info`,label:`Rate limiter`,message:`Waiting ${Math.ceil(o/1e3)}s before next provider call to avoid 429s.`,timestamp:Date.now()}}),await Xe(o,r)}}function et(e,t,n){if(!n.autoAdapt||!t||typeof t.get!=`function`)return;let r=Ke(e),i=W(),a=qe(t.get(`x-ratelimit-limit`)),o=qe(t.get(`x-ratelimit-remaining`)),s=Ye(t.get(`x-ratelimit-reset`));a!==null&&(r.remoteLimit=Math.max(0,Math.floor(a))),o!==null&&(r.remoteRemaining=Math.max(0,Math.floor(o))),s!==null&&(r.remoteResetAt=s);let c=Je(t.get(`retry-after`));c!==null&&(r.nextAllowedAt=Math.max(r.nextAllowedAt,i+c)),r.remoteRemaining!==null&&r.remoteRemaining<=0&&r.remoteResetAt!==null&&r.remoteResetAt>i&&(r.nextAllowedAt=Math.max(r.nextAllowedAt,r.remoteResetAt))}const tt={"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`},nt=Object.keys(tt);function rt(){return typeof navigator<`u`&&`gpu`in navigator&&typeof WebAssembly<`u`&&`Suspending`in WebAssembly}let G=null,it=null,K=null,at=null;const ot=h;async function st(e,t,n){return y(e,t,n,{cacheName:`shadow-claw-litertlm-models`,chunkSize:ot})}async function ct(e,t,n){if(it===e&&G)return G;if(K&&at===e)return K;at=e,K=(async()=>{if(G){try{await G.delete?.()}catch{}G=null,it=null}let r=tt[e];if(!r)throw Error(`LiteRT-LM: Model '${e} is not supported. Supported models: ${nt.join(`, `)}`);let i=await import(`./chunk-Y7LGPJy7.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 st(r,t??(()=>{}),n),s=await a.create({model:o,mainExecutorSettings:{maxNumTokens:8192}});return G=s,it=e,s})();try{return await K}finally{K=null,at=null}}function lt(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 ut(e){let t=O(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=lt(t);return o?{type:`tool_use`,format:`model_specific`,tool_calls:[{id:`litert_${Date.now()}`,name:o.name,input:o.input}]}:null}function dt(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(`
|
|
6
|
-
`)].join(`
|
|
7
|
-
`);i=i?i+e:e}i&&r.push({role:`system`,content:i});let a=[];for(let e of t)if(e.role===`user`){let t=Array.isArray(e.content)?e.content.map(e=>e?.type===`text`?e.text:e?.type===`tool_result`?`[TOOL_RESULT ${e.tool_use_id}] ${String(e.content||``)}`:``).filter(Boolean).join(`
|
|
8
|
-
`):String(e.content||``);t&&a.push(t)}else e.role;return{preface:r,turns:a}}async function ft(e,t,n,r,i,a,o,s,c,l){if(!rt()){await a({type:`response`,payload:{groupId:t,text:`⚠️ LiteRT-LM requires WebGPU and WebAssembly.Suspending. These are not both available in this browser.`}});return}await a(M(t,`info`,`Starting`,`Provider: LiteRT-LM (Browser · WebGPU) · Model: ${s}`)),await a({type:`model-download-progress`,payload:{groupId:t,status:`running`,progress:0,message:`Loading LiteRT-LM model: ${s}…`}});let u=e=>(e/(1024*1024)).toFixed(0),d=-1,f=(e,n,r)=>{let i=n?e/n:null,o=i==null?-1:Math.floor(i*100);o===d&&!r||(d=o,a({type:`model-download-progress`,payload:{groupId:t,status:`running`,progress:i,message:r?`Loaded ${s} from cache (${u(e)} MB )`:n?`Downloading ${s}: ${u(e)} / ${u(n)} MB`:`Downloading ${s}: ${u(e)} MB`}}))},p;try{p=await ct(s,f,o)}catch(e){if(o?.aborted||e?.name===`AbortError`){await a({type:`model-download-progress`,payload:{groupId:t,status:`error`,progress:null,message:`LiteRT-LM model download cancelled.`}});return}await a({type:`model-download-progress`,payload:{groupId:t,status:`error`,progress:null,message:`LiteRT-LM model failed to load: ${e?.message??String(e)}`}}),await a({type:`response`,payload:{groupId:t,text:`⚠️ LiteRT-LM failed to initialize: ${e?.message??String(e)}`}});return}await a({type:`model-download-progress`,payload:{groupId:t,status:`done`,progress:1,message:`LiteRT-LM model ready.`}});let m=c??[],{preface:h,turns:g}=dt(n,r,m),_;try{_=await p.createConversation({preface:{messages:h}})}catch(e){await a({type:`response`,payload:{groupId:t,text:`⚠️ LiteRT-LM failed to create conversation: ${e?.message??String(e)}`}});return}let v=g.slice(0,-1),y=g[g.length-1]??`Hello.`;for(let e of v){if(o?.aborted)return;try{await _.sendMessage(e)}catch{}}if(o?.aborted)return;let b=y;for(let n=0;n<10;n++){if(o?.aborted)return;await a({type:`streaming-start`,payload:{groupId:t}});let n=``;try{let e=_.sendMessageStreaming(b);for await(let r of e){if(o?.aborted)break;let e=r?.content?.[0]?.text??``;if(e){let r=O(e,`litert_lm`);r&&(n+=r,await a({type:`streaming-chunk`,payload:{groupId:t,text:r}}))}}}catch(e){if(o?.aborted)return;await a({type:`response`,payload:{groupId:t,text:`⚠️ LiteRT-LM generation error: ${e?.message??String(e)}`}});return}let r=m.length>0?ut(n):null;if(r?.type===`tool_use`){await a({type:`streaming-end`,payload:{groupId:t}});let n=Array.isArray(r.tool_calls)?r.tool_calls:[];if(n.length===0){await a({type:`streaming-done`,payload:{groupId:t,text:`(no response)`}}),await a({type:`response`,payload:{groupId:t,text:`(no response)`}});return}let i=[],o=r.format===`model_specific`;for(let r of n){await a(N(t,r.name,`running`)),B(e=>{a(e)});let n;try{n=await L(e,r.name,r.input||{},t,{allowedTools:m,invokeContext:l})}catch(e){n=`Error: ${e?.message??String(e)}`}finally{B(null)}await a(N(t,r.name,`done`));let s=typeof n==`string`?n:JSON.stringify(n);o?i.push(`<|tool_response>${s}<|tool_response|>`):i.push(`[TOOL_RESULT ${r.id??r.name}] ${s}`)}if(o)b=i.join(`
|
|
9
|
-
`);else{let e=g[g.length-1]??``;b=[...i,``,`Based on the above tool results, please respond to the original request.`,e?`Original request: "${e}"`:``].filter(Boolean).join(`
|
|
10
|
-
`)}continue}let i;i=r?.type===`response`&&r.response?O(r.response,`litert_lm`):O(n,`litert_lm`),await a({type:`streaming-done`,payload:{groupId:t,text:i}}),await a({type:`response`,payload:{groupId:t,text:i}});return}await a({type:`response`,payload:{groupId:t,text:`⚠️ LiteRT-LM reached the maximum number of tool-calling iterations without producing a final response.`}})}const pt=new class{chunkCallbacks=new Map;loadRejects=new Map;loadResolves=new Map;pendingRejects=new Map;pendingResolves=new Map;progressCallbacks=new Map;thinkingCallbacks=new Map;worker=null;async generate(e,t,n,r,i,a){let o=this.getWorker();return new Promise((s,c)=>{this.pendingResolves.set(n,s),this.pendingRejects.set(n,c),this.chunkCallbacks.set(n,e=>r(e.text)),i&&this.thinkingCallbacks.set(n,i),o.postMessage({type:`generate`,payload:{messages:e,maxTokens:t,groupId:n,tools:a}})})}async load(e,t,n,r,i){let a=this.getWorker();return new Promise((o,s)=>{this.loadResolves.set(r,o),this.loadRejects.set(r,s),this.progressCallbacks.set(r,i),a.postMessage({type:`load`,payload:{modelId:e,device:t,dtypeStrategy:n,groupId:r}})})}cleanup(e){this.pendingResolves.delete(e),this.pendingRejects.delete(e),this.progressCallbacks.delete(e),this.chunkCallbacks.delete(e),this.thinkingCallbacks.delete(e)}getWorker(){return this.worker||(this.worker=new Worker(ie(new URL(`./transformers-js.worker.js`,import.meta.url).href),{type:`module`}),this.worker.onmessage=e=>{let{type:t,payload:n}=e.data,r=n?.groupId;switch(t){case`progress`:this.progressCallbacks.get(r)?.(n),n.status===`done`&&(this.loadResolves.get(r)?.(),this.loadResolves.delete(r),this.loadRejects.delete(r));break;case`chunk`:this.chunkCallbacks.get(r)?.(n);break;case`thinking-chunk`:this.thinkingCallbacks.get(r)?.(n.text);break;case`done`:this.pendingResolves.get(r)?.(n.text),this.cleanup(r);break;case`error`:this.pendingRejects.get(r)?.(n.error),this.loadRejects.get(r)?.(n.error),this.cleanup(r),this.loadResolves.delete(r),this.loadRejects.delete(r);break}}),this.worker}};function mt(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(`
|
|
11
|
-
`):``}function ht(e){let t=O(String(e||``),`transformers_js`).trim();if(!t)return null;let n=t.match(/<tool_call>([\s\S]*?)<\/tool_call>/);if(n)try{let e=JSON.parse(n[1]);if(e.name)return{type:`tool_use`,tool_calls:[{name:e.name,input:e.arguments||e.parameters||{}}]}}catch{}try{return JSON.parse(t)}catch{let e=t.indexOf(`{`),n=t.lastIndexOf(`}`);if(e>=0&&n>e)try{return JSON.parse(t.slice(e,n+1))}catch{return null}return null}}async function gt(e,t,n,r,i,o,s,c,l,u){let d=c||[],f=await p(e,a.TRANSFORMERS_JS_BACKEND)||`auto`,m=await p(e,a.TRANSFORMERS_JS_DTYPE_STRATEGY)||`auto`;await o(M(t,`info`,`Starting`,`Provider: Transformers.js (Local Worker) · Model: ${l} · Backend: ${f} · Dtype: ${m}`)),await pt.load(l,f,m,t,e=>{o({type:`model-download-progress`,payload:e})});let h=[...r];for(let r=0;r<10;r++){let r=[{role:`system`,content:n},...h.map(e=>({role:e.role===`assistant`?`assistant`:`user`,content:mt(e)}))];await o({type:`streaming-start`,payload:{groupId:t}});let a=``,s=``,c=await pt.generate(r,i,t,e=>{s+=e,o({type:`streaming-chunk`,payload:{groupId:t,text:e}})},e=>{a+=e,o(M(t,`text`,`Thinking`,a))},d);await o({type:`typing`,payload:{groupId:t}});let l=ht(c);if(l?.type===`tool_use`?await o({type:`streaming-end`,payload:{groupId:t}}):await o({type:`streaming-done`,payload:{groupId:t,text:l?.response?O(l.response,`transformers_js`):O(c,`transformers_js`)}}),!l||l.type===`response`){await o({type:`response`,payload:{groupId:t,text:l?.response?O(l.response,`transformers_js`):O(c,`transformers_js`)}});return}let f=Array.isArray(l.tool_calls)?l.tool_calls:[];if(f.length===0){await o({type:`response`,payload:{groupId:t,text:O(l.response||c,`transformers_js`)}});return}let p=[];for(let n of f){await o(N(t,n.name,`running`)),B(e=>{o(e)});let r;try{r=await L(e,n.name,n.input||{},t,{allowedTools:d,invokeContext:u})}finally{B(null)}await o(N(t,n.name,`done`)),p.push({type:`tool_result`,tool_use_id:n.id||`call_${Date.now()}`,content:typeof r==`string`?r:JSON.stringify(r)})}h.push({role:`assistant`,content:[...l.response?[{type:`text`,text:l.response}]:[],...f.map(e=>({type:`tool_use`,id:e.id||`call_${Date.now()}_${Math.random()}`,name:e.name,input:e.input||{}}))]}),h.push({role:`user`,content:p})}}async function _t(e,t,n){let r=t.provider,i=async e=>{F(e)};if(r===`transformers_js_browser`){await gt(e,t.groupId,t.systemPrompt,t.messages,t.maxTokens,i,n,t.enabledTools,t.model);return}if(r===`prompt_api`){if(!ye())throw Error(`Prompt API provider is not supported in this environment.`);await _e(e,t.groupId,t.systemPrompt,t.messages,t.maxTokens,i,n,t.enabledTools);return}if(r===`litert_lm_browser`){if(!rt())throw Error(`Litert LM Browser provider is not supported in this environment.`);await ft(e,t.groupId,t.systemPrompt,t.messages,t.maxTokens,i,n,t.model,t.enabledTools);return}await At(e,t,n)}var vt=class{callbacks;contentBlocks=[];format;stopReason=`end_turn`;usage={input_tokens:0,output_tokens:0};#e=new Map;#t=``;#n=``;#r=new Map;constructor(e,t={}){this.format=e,this.callbacks=t}finalize(){return this.format===`openai`||this.format===`mesh-llm`?this.#a():this.#i()}push(e){this.format===`openai`||this.format===`mesh-llm`?this.#s(e):this.#o(e)}#i(){let e=[];for(let[,t]of[...this.#e.entries()].sort((e,t)=>e[0]-t[0]))if(t.type===`text`){let n=this.#c(t.text||``);n&&e.push({type:`text`,text:n})}else if(t.type===`tool_use`){let n;try{n=t.partialJson?JSON.parse(t.partialJson):{}}catch{n={}}e.push({type:`tool_use`,id:t.id||`call_${Date.now()}_${Math.random()}`,name:t.name,input:n})}else t.type===`thinking`?typeof t.text==`string`&&t.text.length>0&&e.push({type:`thinking`,thinking:t.text,...typeof t.id==`string`?{signature:t.id}:{}}):t.type===`redacted_thinking`&&typeof t.text==`string`&&t.text.length>0&&e.push({type:`redacted_thinking`,data:t.text});return{content:e,stop_reason:this.stopReason,usage:{...this.usage}}}#a(){let e=[];if(this.#n){let t=this.#c(this.#n);t&&e.push({type:`text`,text:t})}if(this.#t&&e.unshift({type:`thinking`,thinking:this.#t}),this.#r.size>0){this.stopReason=`tool_use`;for(let[,t]of[...this.#r.entries()].sort((e,t)=>e[0]-t[0])){let n;try{n=t.args?JSON.parse(t.args):{}}catch{n={}}e.push({type:`tool_use`,id:t.id||`call_${Date.now()}_${Math.random()}`,name:t.name,input:n})}}return{content:e,stop_reason:this.stopReason,usage:{...this.usage}}}#o(e){switch(e.type){case`message_start`:e.message?.usage&&(this.usage.input_tokens=e.message.usage.input_tokens||0,this.usage.cache_read_input_tokens=e.message.usage.cache_read_input_tokens||0,this.usage.cache_creation_input_tokens=e.message.usage.cache_creation_input_tokens||0);break;case`content_block_start`:{let t=e.index??this.#e.size,n=e.content_block||{};this.#e.set(t,{type:n.type||`text`,id:n.type===`thinking`?n.signature:n.id,name:n.name,text:n.text||n.thinking||n.data||``,partialJson:n.type===`tool_use`?``:void 0}),n.type===`tool_use`&&n.name&&this.callbacks.onToolStart?.(n.name);break}case`content_block_delta`:{let t=e.index??0,n=this.#e.get(t);if(!n){let r=e.delta?.type===`input_json_delta`?`tool_use`:`text`;n={type:r,text:r===`text`?``:void 0,partialJson:r===`tool_use`?``:void 0},this.#e.set(t,n)}let r=e.delta;if(!r)break;if(r.type===`text_delta`&&typeof r.text==`string`){let e=this.#c(r.text);if(!e)break;n.text=(n.text||``)+e,this.callbacks.onText?.(e)}r.type===`thinking_delta`&&typeof r.thinking==`string`&&(n.type=`thinking`,n.text=(n.text||``)+r.thinking,this.callbacks.onThinking?.(r.thinking)),r.type===`signature_delta`&&typeof r.signature==`string`&&(n.type=`thinking`,n.id=r.signature),r.type===`redacted_thinking_delta`&&typeof r.data==`string`&&(n.type=`redacted_thinking`,n.text=(n.text||``)+r.data),r.type===`input_json_delta`&&typeof r.partial_json==`string`&&(n.partialJson=(n.partialJson||``)+r.partial_json);break}case`content_block_stop`:break;case`message_delta`:e.delta?.stop_reason&&(this.stopReason=e.delta.stop_reason),e.usage&&(this.usage.output_tokens=e.usage.output_tokens||0,this.callbacks.onUsage?.(this.usage));break;case`message_stop`:break;default:break}}#s(e){e.usage&&(this.usage.input_tokens=e.usage.prompt_tokens||0,this.usage.output_tokens=e.usage.completion_tokens||0,this.usage.cache_read_input_tokens=e.usage.prompt_tokens_details?.cached_tokens||0,this.callbacks.onUsage?.(this.usage));let t=e.choices?.[0];if(!t)return;let n=t.delta;if(n){if(typeof n.content==`string`){let e=this.#c(n.content);e&&(this.#n+=e,this.callbacks.onText?.(e))}if(typeof n.reasoning==`string`)this.#t+=n.reasoning,this.callbacks.onThinking?.(n.reasoning);else if(n.reasoning&&typeof n.reasoning==`object`){let e=n.reasoning;typeof e.content==`string`?(this.#t+=e.content,this.callbacks.onThinking?.(e.content)):typeof e.text==`string`&&(this.#t+=e.text,this.callbacks.onThinking?.(e.text))}if(Array.isArray(n.tool_calls))for(let e of n.tool_calls){let t=e.index??0;this.#r.has(t)||(this.#r.set(t,{id:e.id||``,name:e.function?.name||``,args:``}),e.function?.name&&this.callbacks.onToolStart?.(e.function.name));let n=this.#r.get(t);n&&(e.id&&(n.id=e.id),e.function?.name&&(n.name=e.function.name),e.function?.arguments&&(n.args+=e.function.arguments))}t.finish_reason&&(t.finish_reason===`tool_calls`?this.stopReason=`tool_use`:t.finish_reason===`stop`?this.stopReason=`end_turn`:this.stopReason=t.finish_reason)}}#c(e){return O(e,this.callbacks.source??this.format)}};const yt=new Map;function bt(e){return yt.get(e)}function xt(e){yt.delete(e)}function St(e,t){let n=e.trim().match(/^\[tool_code\]([\s\S]*?)\[\/tool_code\]$/i);if(!n?.[1])return{toolBlocks:[],residualText:e};let r=n[1].trim(),i=r.match(/^print\s*\(\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*\(\s*(.*?)\s*\)\s*\)$/s),a=r.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\s*\(\s*(.*?)\s*\)$/s),o=i||a;if(!o?.[1])return{toolBlocks:[],residualText:e};let s=o[1];if(!t.has(s))return{toolBlocks:[],residualText:e};let c=(o[2]||``).trim(),l={};if(c){if(!c.startsWith(`{`)||!c.endsWith(`}`))return{toolBlocks:[],residualText:e};try{let t=JSON.parse(c);if(!t||typeof t!=`object`||Array.isArray(t))return{toolBlocks:[],residualText:e};l=t}catch{return{toolBlocks:[],residualText:e}}}return{toolBlocks:[{type:`tool_use`,id:`tool_code_${Date.now()}_${Math.random()}`,name:s,input:l}],residualText:``}}function Ct(e,t){if(!e||e.stop_reason===`tool_use`||!Array.isArray(e.content))return e;let n=new Set((t||[]).map(e=>typeof e?.name==`string`?e.name:``).filter(Boolean));if(n.size===0)return e;let r=[],i=!1;for(let t of e.content){if(t?.type!==`text`||typeof t.text!=`string`){r.push(t);continue}let e=St(t.text,n);if(e.toolBlocks.length>0){i=!0,e.residualText.trim()&&r.push({type:`text`,text:e.residualText}),r.push(...e.toolBlocks);continue}r.push(t)}return i?{...e,content:r,stop_reason:`tool_use`}:e}function wt(e){let t=e.filter(e=>e?.type===`tool_result`).map(e=>typeof e.content==`string`?e.content.trim():Array.isArray(e.content)?e.content.filter(e=>e.type===`text`).map(e=>e.text).join(`
|
|
12
|
-
`).trim():JSON.stringify(e.content).trim()).filter(Boolean);return t.length===0?``:t.join(`
|
|
13
|
-
|
|
14
|
-
`).slice(0,1e4)}function Tt(e){let t=e.trim();return t?`Tool result:\n${t}`:``}let Et=null;function Dt(e){Et=e}let Ot=null;function kt(e){Ot=e}async function At(t,r,i){let{apiKey:a,assistantName:o,contextCompression:s=!1,contextLimit:c,enabledTools:l,groupId:u,isScheduledTask:d=!1,maxIterations:f,maxTokens:p,memory:m,messages:h,model:_,provider:y,providerHeaders:S={},providerRuntimeOverrides:C,reasoning:w,rateLimitAutoAdapt:D=!0,rateLimitCallsPerMinute:O=0,storageHandle:k,streaming:A=!1,subagentModelSelectionMode:M,subagentMaxTokens:te,subagentPinnedModel:ne,subagentPinnedProvider:P,systemPrompt:re,workspaceGroupId:ie}=r,ce=!!r.subagentTask,I=ce?u.startsWith(`subagent:`)?u:`subagent:${e()}`:u,ue=ie||u;ce&&j(I,[]);let de={autoAdapt:D!==!1,callsPerMinute:Number.isFinite(O)?Math.max(0,Math.floor(O)):0};k&&oe(k);let fe=n(y);if(!fe){F({payload:{groupId:I,error:`Unknown provider: ${y}`},type:`error`});return}let R=fe,z=A&&R.supportsStreaming===!0&&R.format!==`prompt_api`;F({type:`typing`,payload:{groupId:I}}),U(I,`info`,`Starting`,`Provider: ${R.name} · Model: ${_} · Max tokens: ${p} · Streaming: ${z?`on`:`off`}${A&&!z?` (provider does not support streaming)`:``}`);try{let e=[...h],n=0,u=typeof f==`number`&&f>0?f:50,D=Array.isArray(l)?l:pe;v()&&(D=g(D));let O=re,A=``,j={apiKey:a,assistantName:o??``,db:t,enabledTools:D,invokeSubagent:e=>_t(t,e,i),maxTokens:p,memory:m??``,model:_,provider:y,subagentModelSelectionMode:M,subagentMaxTokens:te,subagentPinnedProvider:P,subagentPinnedModel:ne,providerHeaders:S,providerRuntimeOverrides:C,storageHandle:k,streaming:!1,systemPrompt:O??``},ie=[];for(;n<u;){n++;let l=bt(I);l&&(D=l.enabledTools,O=le(o,m,D,l.systemPromptOverride,void 0,void 0,{groupId:I}));let u=c??b(_),f=ee(O),{messages:h,estimatedTokens:g}=ae(e,{contextLimit:u,maxOutputTokens:p,skimTop:s,systemPromptTokens:f}),C=g+f,k=Math.max(100,Math.min(p,u-C-500)),M=x(R,h,D,{contextCompression:s,maxTokens:k,model:_,reasoning:w,system:O});U(I,`api-call`,`API call #${n}`,`${h.length} messages in context`);let te={...T(R,a),...S},ne=R.baseUrl,P;v()&&y===`transformers_js_local`&&Et?(z&&F({payload:{groupId:I},type:`streaming-start`}),P=E(R,await Et({modelId:_,messages:h,tools:D,maxTokens:k,abortSignal:i,verbose:!!r.verbose,onToken:e=>{z&&e&&F({payload:{groupId:I,text:e},type:`streaming-chunk`})},onProgress:e=>{if(e?.status===`progress`||e?.status===`progress_total`){let t=null;if(typeof e.progress==`number`){let n=e.progress<=1&&e.progress>0&&!e.total?e.progress*100:typeof e.loaded==`number`&&typeof e.total==`number`&&e.total>0?e.loaded/e.total*100:e.progress;t=Math.max(0,Math.min(100,Math.round(n)))}F({payload:{groupId:I,label:`Model Progress`,message:`${e.file||_}: ${t===null?`loading...`:`${t}%`}`},type:`status`})}}}))):v()&&y===`llamafile`&&Ot?(z&&F({payload:{groupId:I},type:`streaming-start`}),P=E(R,await Ot({model:_,messages:h,maxTokens:k,abortSignal:i,verbose:!!r.verbose,onToken:e=>{z&&e&&F({payload:{groupId:I,text:e},type:`streaming-chunk`})}}))):P=z?await Mt(y,R,ne,te,M,I,_,de,i):await jt(y,R,ne,te,M,I,de,i),P=Ct(P,D),P.usage&&F(He(I,P.usage,b(_)));for(let e of P.content)e.type===`text`&&e.text&&U(I,`text`,`Response text`,e.text.length>200?e.text.slice(0,200)+`…`:e.text);if(P.stop_reason===`tool_use`){let n=new Set(D.map(e=>typeof e?.name==`string`?e.name:``).filter(Boolean)),r=P.content.filter(e=>e.type===`text`).map(e=>e.text).join(``).replace(/<internal>[\s\S]*?<\/internal>/g,``).trim();r&&F({payload:{groupId:I,text:r},type:`intermediate-response`}),z&&F({payload:{groupId:I},type:`streaming-end`});let i=[];for(let e of P.content)if(e.type===`tool_use`){let r=n.has(e.name),a=`${e.name}:${JSON.stringify(e.input)}`,o=ie.filter(e=>e===a).length;if(ie.push(a),!r){let t=`SYSTEM ERROR: Tool '${e.name}' is disabled or unavailable for this request. Do not call it again. Try a different approach or ask the user for help.`;U(I,`warning`,`Tool blocked`,t),i.push({content:t,tool_use_id:e.id,type:`tool_result`});continue}let s=JSON.stringify(e.input),c=s.length>300?s.slice(0,300)+`…`:s;U(I,`tool-call`,`Tool: ${e.name}`,c),F(N(I,e.name,`running`));let l;o>=3?(l=`SYSTEM ERROR: You have repeatedly called this tool with the exact same input (${o+1} times). This is a rigid loop. STOP calling this tool with these arguments. Try a different approach, fix the underlying issue, or ask the user for help.`,console.warn(`[Worker] Blocked repetitive tool call:`,a)):l=await L(t,e.name,e.input,ue,{allowedTools:D,isScheduledTask:d,invokeContext:j});let u=typeof l==`string`?l:JSON.stringify(l),f=u.length>500?u.slice(0,500)+`…`:u;U(I,`tool-result`,`Result: ${e.name}`,f),F(N(I,e.name,`done`)),Array.isArray(l)?i.push({content:l,tool_use_id:e.id,type:`tool_result`}):i.push({content:typeof l==`string`?l.slice(0,1e5):JSON.stringify(l).slice(0,1e5),tool_use_id:e.id,type:`tool_result`})}A=wt(i),e.push({role:`assistant`,content:P.content}),e.push({role:`user`,content:i}),F({type:`typing`,payload:{groupId:I}})}else{let e=P.content.filter(e=>e.type===`text`).map(e=>e.text).join(``).replace(/<internal>[\s\S]*?<\/internal>/g,``).trim(),t=(e.toLowerCase()===`(no response)`?``:e)||(A?Tt(A):`(no response)`);z&&F({payload:{groupId:I,text:t},type:`streaming-done`}),F({payload:{groupId:I,text:t},type:`response`});return}}F({payload:{text:`⚠️ Reached maximum tool-use iterations (${u}). Stopping to avoid excessive API usage.`,groupId:I},type:`response`})}catch(e){if(e instanceof Error&&e.name===`AbortError`)return;let t=e instanceof Error?e.message:String(e);z&&F({payload:{groupId:I,error:t},type:`streaming-error`}),F({type:`error`,payload:{groupId:I,error:t}})}finally{xt(I),ce&&se(I)}}async function jt(e,t,n,r,i,a,o,s){return be(async()=>{await $e(e,a,o,s);let c=await fetch(n,{body:JSON.stringify(i),headers:r,method:`POST`,signal:s});if(et(e,c.headers,o),!c.ok){let e=await c.text(),n=Error(`${t.name} API error ${c.status}: ${e}`);throw n.status=c.status,n}return E(t,await c.json())},{baseDelayMs:2e3,jitterFactor:.5,maxDelayMs:3e4,maxRetries:3,onRetry:(e,t,n,r)=>{let i=r instanceof Error?r.message:String(r);U(a,`warning`,`Retrying API call (${e}/${t})`,i),F({type:`show-toast`,payload:{message:`LLM API: Retrying (${e}/${t})… ${i.slice(0,120)}`,type:`warning`,duration:5e3}})},shouldRetry:e=>he(e),signal:s})}async function Mt(e,t,n,r,i,a,o,s,c){let l={...i,stream:!0,...(t.format===`openai`||t.format===`mesh-llm`)&&{stream_options:{include_usage:!0}}};await $e(e,a,s,c);let u=await fetch(n,{body:JSON.stringify(l),headers:r,method:`POST`,signal:c});if(et(e,u.headers,s),!u.ok){let e=await u.text(),n=Error(`${t.name} API error ${u.status}: ${e}`);throw n.status=u.status,n}if(!u.body)throw Error(`Streaming response has no body`);F({payload:{groupId:a},type:`streaming-start`});let d=0,f=``,p=0,m=``,h=(e=!1)=>{let t=Date.now();m&&(!e&&t-p<50||(U(a,`info`,`Reasoning`,m.length>400?`${m.slice(0,400)}…`:m),m=``,p=t))},g=new vt(t.format,{source:t.id,onText:e=>{let t=Date.now();f+=e,t-d>=50&&(F({payload:{groupId:a,text:f},type:`streaming-chunk`}),f=``,d=t)},onToolStart:e=>{F(N(a,e,`running`))},onUsage:e=>{F(He(a,e,b(o)))},onThinking:e=>{m+=e,h(!1)}});for await(let e of Ue(u.body,c))g.push(e);f&&F({payload:{groupId:a,text:f},type:`streaming-chunk`}),h(!0);let _=g.finalize();return t.format===`mesh-llm`&&(_=w(_)),_}process.env.SHADOWCLAW_USER_AGENT;function Nt(e){return Array.isArray(e)?e[0]||``:typeof e==`string`?e:``}function Pt(e,t){let n=Number.parseInt(e??``,10);return!Number.isFinite(n)||n<=0?t:n}function Ft(e){let t=e.trim();if(!t)return{};let n=[],r=``,i=null;for(let e=0;e<t.length;e+=1){let a=t[e];if((a===`"`||a===`'`)&&t[e-1]!==`\\`){i===a?i=null:i||=a,r+=a;continue}if(a===`,`&&!i){r.trim()&&n.push(r.trim()),r=``;continue}r+=a}r.trim()&&n.push(r.trim());let a={};for(let e of n){let t=e.indexOf(`:`),n=e.indexOf(`=`),r=t>0?t:n;if(r<=0)continue;let i=e.slice(0,r).trim().replace(/^['"]|['"]$/g,``),o=e.slice(r+1).trim();if(i){if(o.startsWith(`"`)&&o.endsWith(`"`)||o.startsWith(`'`)&&o.endsWith(`'`)){o=o.slice(1,-1),a[i]=o.replace(/\\(["'\\])/g,`$1`);continue}if(o===`true`){a[i]=!0;continue}if(o===`false`){a[i]=!1;continue}if(o===`null`){a[i]=null;continue}if(/^-?\d+(\.\d+)?$/.test(o)){a[i]=Number(o);continue}a[i]=o}}return a}function It(e){let t=e.trim();if(!t)return{};let n=[],r=``,i=null,a=0;for(let e=0;e<t.length;e+=1){let o=t[e];if((o===`"`||o===`'`)&&t[e-1]!==`\\`){i===o?i=null:i||=o,r+=o;continue}if(!i){if(o===`(`||o===`{`||o===`[`)a+=1;else if((o===`)`||o===`}`||o===`]`)&&a>0)--a;else if(o===`,`&&a===0){r.trim()&&n.push(r.trim()),r=``;continue}}r+=o}r.trim()&&n.push(r.trim());let o={};for(let e of n){if(e=e.trim(),!e)continue;let t=e.indexOf(`=`),n=e.indexOf(`:`),r=t>0?t:n;if(r<=0)continue;let i=e.slice(0,r).trim().replace(/^['"]|['"]$/g,``),a=e.slice(r+1).trim();if(!i)continue;if(a.startsWith(`"`)&&a.endsWith(`"`)||a.startsWith(`'`)&&a.endsWith(`'`)){a=a.slice(1,-1),o[i]=a.replace(/\\(["'\\])/g,`$1`);continue}if(a===`true`){o[i]=!0;continue}if(a===`false`){o[i]=!1;continue}if(a===`null`){o[i]=null;continue}let s=Number(a);if(!Number.isNaN(s)&&a!==``){o[i]=s;continue}o[i]=a}return o}const Lt=process.env.SHADOWCLAW_USER_AGENT||`ShadowClaw/1.0`,Rt=`onnx-community/Qwen3-0.6B-ONNX`,q=V.resolve(process.cwd(),`assets/cache/transformers.js/models.json`),J=V.resolve(process.cwd(),`assets/cache/transformers.js`),Y=V.resolve(process.cwd(),`assets/cache/transformers.js/models-discovery.json.part`),zt=[{id:Rt,name:`Qwen 3 0.6B (ONNX)`,context_length:32768,max_completion_tokens:8192,supports_tools:!0},{id:`onnx-community/gemma-4-E2B-it-ONNX`,name:`Gemma 4 E2B (ONNX)`,context_length:128e3,max_completion_tokens:8192,supports_tools:!0},{id:`onnx-community/gemma-4-E4B-it-ONNX`,name:`Gemma 4 E4B (ONNX)`,context_length:128e3,max_completion_tokens:8192,supports_tools:!0},{id:`onnx-community/gemma-4-E9B-it-ONNX`,name:`Gemma 4 E9B (ONNX)`,context_length:256e3,max_completion_tokens:8192,supports_tools:!0},{id:`onnx-community/gemma-4-E27B-it-ONNX`,name:`Gemma 4 E27B (ONNX)`,context_length:256e3,max_completion_tokens:8192,supports_tools:!0},{id:`onnx-community/gemma-4-12B-it-ONNX`,name:`Gemma 4 12B (ONNX)`,context_length:256e3,max_completion_tokens:8192,supports_tools:!0},{id:`onnx-community/gemma-4-E2B-it-qat-mobile-ONNX`,name:`Gemma 4 E2B QAT Mobile (ONNX)`,context_length:128e3,max_completion_tokens:8192,supports_tools:!0},{id:`onnx-community/gemma-4-E4B-it-qat-mobile-ONNX`,name:`Gemma 4 E4B QAT Mobile (ONNX)`,context_length:128e3,max_completion_tokens:8192,supports_tools:!0},{id:`onnx-community/gemma-4-12B-it-qat-mobile-ONNX`,name:`Gemma 4 12B QAT Mobile (ONNX)`,context_length:256e3,max_completion_tokens:8192,supports_tools:!0},{id:`onnx-community/gemma-3-1b-it-ONNX`,name:`Gemma 3 1B (ONNX)`,context_length:32e3,max_completion_tokens:4096,supports_tools:!0},{id:`onnx-community/gemma-3-1b-it-ONNX-GQA`,name:`Gemma 3 1B GQA (ONNX)`,context_length:32e3,max_completion_tokens:4096,supports_tools:!0}];function Bt(){let e=new Map,t=new Map,n=new Map,r=null,i={status:`idle`,progress:null,message:`Idle`,modelId:null,updatedAt:Date.now()};function a(e){Object.assign(i,e,{updatedAt:Date.now()})}function o(e){let t=n.get(e);t&&(clearTimeout(t),n.delete(e))}function s(e){o(e);let n=t.get(e)||0;t.set(e,n+1)}function c(e){let n=t.get(e)||0;if(n<=1){t.delete(e),l(e);return}t.set(e,n-1)}function l(e){o(e);let r=setTimeout(()=>{(t.get(e)||0)>0||u(e)},1e4);r.unref?.(),n.set(e,r)}async function u(n){o(n);let r=e.get(n);if(e.delete(n),t.delete(n),r)try{let e=await r;await Promise.resolve(e.model?.dispose?.()).catch(()=>{}),await Promise.resolve(e.processor?.dispose?.()).catch(()=>{})}catch{}}function d(e){let t=Error(e);return t.name=`AbortError`,t}function f(e){return(e instanceof DOMException||e instanceof Error)&&e.name===`AbortError`}async function p(e,t){let{modelId:n,phase:r,timeoutMs:o,abortSignal:s}=t;return!o||o<=0?e:await new Promise((t,c)=>{let l=!1,f=Math.max(25,Math.min(1e3,Math.floor(o/10))),p=null,m=r===`model load`&&i.modelId===n&&typeof i.progress==`number`?i.progress:null,h=Date.now(),g=()=>{let e=`Transformers.js ${r} timed out after ${o}ms for model '${n}'.`;a({status:`error`,progress:null,message:e,modelId:n}),r===`model load`&&u(n),c(Error(e))},_=()=>{l=!0,p!==null&&(r===`model load`?clearInterval(p):clearTimeout(p)),s?.removeEventListener(`abort`,v)},v=()=>{l||(_(),c(d(`Transformers.js request was aborted`)))};p=r===`model load`?setInterval(()=>{if(l)return;let e=i.modelId===n,t=i.progress;e&&typeof t==`number`&&(m===null||t>m)&&(m=t,h=Date.now()),Date.now()-h>=o&&(_(),g())},f):setTimeout(()=>{l||(_(),g())},o),s?.addEventListener(`abort`,v,{once:!0}),e.then(e=>{l||(_(),t(e))},e=>{l||(_(),c(e))})})}function m(){return Pt(Oe.TRANSFORMERS_JS_REQUEST_TIMEOUT_MS,3e5)}async function h(e){let t=Reflect.get(e,`env`);!t||typeof t!=`object`||(await Me(J,{recursive:!0}),Reflect.set(t,`useFSCache`,!0),Reflect.set(t,`useBrowserCache`,!1),Reflect.set(t,`cacheDir`,J))}async function g(e){try{return await Ie(e),!0}catch{return!1}}function _(e){return Math.max(1,Math.ceil(e.length/4))}function v(e){return e.replace(/<\s*turn\|>\s*|<\|end_of_turn\|>|<\|eot_id\|>/gi,``)}async function y(t,n,r){if(!zt.map(e=>e.id).includes(t)){let e=`Model '${t}' is not supported by Transformers.js. This provider only supports ONNX-converted models. Supported models: ${zt.map(e=>`${e.id} (${e.name})`).join(`, `)}`;throw a({status:`error`,progress:null,message:e,modelId:t}),Error(e)}let i=e.get(t);if(i)return i;let o=(async()=>{let e=await import(`@huggingface/transformers`);await h(e);let i=Reflect.get(e,`AutoProcessor`),o=Reflect.get(e,`AutoTokenizer`),s=Reflect.get(e,`Gemma4Processor`),c=Reflect.get(e,`Gemma4ForConditionalGeneration`),l=Reflect.get(e,`AutoModelForImageTextToText`),u=Reflect.get(e,`AutoModelForCausalLM`),d=Reflect.get(e,`TextStreamer`),f=t.toLowerCase().includes(`gemma-4`),p=[];if(f&&typeof c?.from_pretrained==`function`&&p.push({name:`Gemma4ForConditionalGeneration`,from_pretrained:(e,t)=>c.from_pretrained(e,t)}),!f&&typeof l?.from_pretrained==`function`&&p.push({name:`AutoModelForImageTextToText`,from_pretrained:(e,t)=>l.from_pretrained(e,t)}),!f&&typeof u?.from_pretrained==`function`&&p.push({name:`AutoModelForCausalLM`,from_pretrained:(e,t)=>u.from_pretrained(e,t)}),typeof i?.from_pretrained!=`function`&&typeof o?.from_pretrained!=`function`||p.length===0||typeof d!=`function`)throw Error(f?`Transformers.js runtime is unavailable for Gemma 4. Ensure @huggingface/transformers exports Gemma4Processor and Gemma4ForConditionalGeneration, then restart the server.`:`Transformers.js runtime is unavailable. Ensure @huggingface/transformers exports AutoProcessor or AutoTokenizer and at least one model loader.`);n&&console.log(`[Proxy] Loading Transformers.js model: ${t}`),a({status:`running`,progress:0,message:`Preparing model ${t}...`,modelId:t});let m=(e,n)=>{if(e?.status===`progress_total`){let r=Number(e.progress);a({status:`running`,progress:Number.isFinite(r)?Math.max(0,Math.min(1,r/100)):null,message:`Downloading ${t} (${n})...`,modelId:t})}try{r?.(e)}catch{}},g=null;if(f){let e=typeof s?.from_pretrained==`function`?s:i;if(typeof e?.from_pretrained==`function`)try{g=await e.from_pretrained(t,{progress_callback:e=>m(e,`processor`)})}catch(e){if(typeof o?.from_pretrained==`function`)n&&console.warn(`[Transformers.js] Processor failed for ${t}, falling back to AutoTokenizer:`,e),g=await o.from_pretrained(t,{progress_callback:e=>m(e,`tokenizer`)});else throw e}else typeof o?.from_pretrained==`function`&&(g=await o.from_pretrained(t,{progress_callback:e=>m(e,`tokenizer`)}))}else if(typeof i?.from_pretrained==`function`)try{g=await i.from_pretrained(t,{progress_callback:e=>m(e,`processor`)})}catch(e){if(typeof o?.from_pretrained==`function`)n&&console.warn(`[Transformers.js] AutoProcessor failed for ${t}, falling back to AutoTokenizer:`,e),g=await o.from_pretrained(t,{progress_callback:e=>m(e,`tokenizer`)});else throw e}else typeof o?.from_pretrained==`function`&&(g=await o.from_pretrained(t,{progress_callback:e=>m(e,`tokenizer`)}));let _=null,v=``,y=null;if(f)for(let e of[`q4`,`q4f16`,`fp16`])try{_=await c.from_pretrained(t,{dtype:e,device:`cpu`,progress_callback:t=>m(t,e)}),v=`Gemma4ForConditionalGeneration/${e}`;break}catch(e){y=e}else{let e=[`q4`,`q4f16`,`q8`,`fp16`];for(let n of p){for(let r of e)try{_=await n.from_pretrained?.(t,{dtype:r,device:`cpu`,progress_callback:e=>m(e,`${n.name}/${r}`)}),v=`${n.name}/${r}`;break}catch(e){y=e}if(_)break}}if(!_){let e=y instanceof Error?y.message:String(y||`unknown error`);throw a({status:`error`,progress:null,message:e,modelId:t}),Error(`No supported Transformers.js model loader could initialize '${t}'. Last error: ${e}`)}return a({status:`done`,progress:1,message:`Model ready: ${t}`,modelId:t}),{processor:g,model:_,TextStreamer:d,modelLoaderName:v}})().catch(n=>{throw e.delete(t),n});return e.set(t,o),o}function b(e){let t=e.replace(/^onnx-community\//,``),n=t.match(/gemma-4-([^-]+)-it-onnx/i),r=n?.[1]?`Gemma 4 ${n[1].toUpperCase()} (ONNX)`:t,i=e.toLowerCase(),a=32e3;return i.includes(`gemma-4-12b`)||i.includes(`gemma-4-26b`)||i.includes(`gemma-4-31b`)||i.includes(`gemma-4-e9b`)||i.includes(`gemma-4-e27b`)?a=256e3:i.includes(`gemma-4`)&&(a=128e3),{id:e,name:r,context_length:a,max_completion_tokens:8192,supports_tools:!0}}async function x(e){for(let t=0;t<2;t+=1){let n=t===0,r=0;if(n)try{let e=await Ie(Y);e.isFile()&&(r=e.size)}catch{r=0}let i={"User-Agent":Lt,Accept:`application/json`,"Accept-Encoding":`identity`};r>0&&(i.Range=`bytes=${r}-`);let a=await fetch(e,{headers:i});if(a.status===416&&n){await Le(Y).catch(()=>{});continue}if(!a.ok)throw Error(`Failed to discover Transformers.js models (${a.status})`);if(r>0&&a.status===206||await H(Y,``,`utf8`),a.body){let e=a.body.getReader();try{for(;;){let{done:t,value:n}=await e.read();if(t)break;n&&n.length>0&&await H(Y,n,{flag:`a`})}}finally{e.releaseLock()}}else{let e=await a.text();await H(Y,e,{encoding:`utf8`,flag:`a`})}try{let e=await Ne(Y,`utf8`),t=JSON.parse(e);return Array.isArray(t)?t:[]}catch(e){if(n&&r>0){await Le(Y).catch(()=>{});continue}throw e}}throw Error(`Failed to download Transformers.js discovery catalog`)}return{async runChatCompletion(e){let{modelId:t,messages:n,tools:r,maxCompletionTokens:i,verbose:a,onToken:o,onProgress:l,abortSignal:u}=e,d=m();s(t);let h;try{h=await p(y(t,a,l),{modelId:t,phase:`model load`,timeoutMs:d,abortSignal:u})}catch(e){throw c(t),e}try{let e=D(n),a;if(typeof h.processor?.apply_chat_template==`function`)try{a=h.processor.apply_chat_template(e,{enable_thinking:!1,add_generation_prompt:!0,tokenize:!1,...r&&r.length>0&&{tools:r}})}catch{a=await k({modelName:t,messages:e,addGenerationPrompt:!0})}else if(typeof h.processor?.tokenizer?.apply_chat_template==`function`)try{a=h.processor.tokenizer.apply_chat_template(e,{enable_thinking:!1,add_generation_prompt:!0,tokenize:!1,...r&&r.length>0&&{tools:r}})}catch{a=await k({modelName:t,messages:e,addGenerationPrompt:!0})}else a=await k({modelName:t,messages:e,addGenerationPrompt:!0});let s=h.processor?.tokenizer||h.processor,c=h.processor?.tokenizer?await h.processor(a,null,null,{add_special_tokens:!1}):await h.processor(a,{add_special_tokens:!1}),l=[],f=await p(h.model.generate({...c,...u?{signal:u}:{},max_new_tokens:i,do_sample:!1,streamer:new h.TextStreamer(s,{skip_prompt:!0,skip_special_tokens:!0,callback_function:e=>{if(u?.aborted)return;let t=v(e);t&&(l.push(t),o?.(t))}})}),{modelId:t,phase:`generation`,timeoutMs:d,abortSignal:u}),m=v(l.join(``)).trim();if(!m){let e=typeof s?.batch_decode==`function`?s.batch_decode.bind(s):typeof h.processor?.batch_decode==`function`?h.processor.batch_decode.bind(h.processor):null,t=e?e(f.slice(null,[c.input_ids.dims.at(-1),null]),{skip_special_tokens:!0}):null;m=v(String(t?.[0]||``)).trim()}return{text:m,promptTokens:_(a),completionTokens:_(m)}}catch(e){throw f(e)&&u?.aborted,e}finally{c(t)}},async fetchDynamicModels(){if(r)return r.models;try{let e=await Ne(q,`utf8`),t=JSON.parse(e);if(Array.isArray(t?.models))return r={models:t.models},t.models}catch{}let e=(await x(Oe.TRANSFORMERS_JS_MODELS_DISCOVERY_URL||`https://huggingface.co/api/models?author=onnx-community&limit=100`).catch(()=>[])).map(e=>typeof e?.id==`string`?e.id:``).filter(e=>e.toLowerCase().includes(`onnx`)),t=[...new Set(e)],n=zt.map(e=>e.id),i=[...new Set([...n,...t])];i.includes(`onnx-community/Qwen3-0.6B-ONNX`)||i.unshift(Rt);let a=new Map(zt.map(e=>[e.id,e])),o=i.sort((e,t)=>e.localeCompare(t)).map(e=>a.get(e)||b(e));r={models:o};try{await Me(V.dirname(q),{recursive:!0}),await H(q,JSON.stringify({models:o},null,2),`utf8`)}catch{}return o},getDownloadStatus(){return{...i}},async getDiskCacheStatus(){let[t,n]=await Promise.all([g(q),g(J)]),r=n?await Pe(J).catch(()=>[]):[];return{modelsCatalogPath:q,modelsCatalogExists:t,runtimeCacheDir:J,runtimeCacheDirExists:n,runtimeCacheEntryCount:r.length,runtimeCacheEntries:r,loadedRuntimeModels:[...e.keys()]}},async prewarmModel(e){let{modelId:t,verbose:n,onProgress:r}=e;return{modelId:t,loader:(await y(t,n,r)).modelLoaderName,cacheDir:J}},disposeRuntime:u,__setRuntimeForTests(t,n){o(t),e.set(t,Promise.resolve(n))},__setDownloadStatusForTests(e){a(e)},async __resetRuntimeForTests(){let r=new Set([...e.keys(),...n.keys(),...t.keys()]);await Promise.all([...r].map(e=>u(e)))}}}function Vt(e){let t=e.trim();if(!t)return{};let n=[],r=``,i=null,a=0;for(let e=0;e<t.length;e++){let o=t[e];if((o===`"`||o===`'`)&&t[e-1]!==`\\`){i===o?i=null:i||=o,r+=o;continue}if(!i){if(o===`(`||o===`{`||o===`[`)a++;else if((o===`)`||o===`}`||o===`]`)&&a>0)a--;else if(o===`,`&&a===0){r.trim()&&n.push(r.trim()),r=``;continue}}r+=o}r.trim()&&n.push(r.trim());let o={};for(let e of n){if(e=e.trim(),!e)continue;let t=e.indexOf(`:`),n=e.indexOf(`=`),r=t>0&&(n<=0||t<=n)?t:n;if(r<=0)continue;let i=e.slice(0,r).trim().replace(/^['"<|"|\>]|['"<|"|\>]$/g,``).trim(),a=e.slice(r+1).trim();if(!i)continue;if(a=a.replace(/^\s*<\|"\|\>\s*/,``).replace(/\s*<\|"\|\>\s*$/,``),a.startsWith(`"`)&&a.endsWith(`"`)||a.startsWith(`'`)&&a.endsWith(`'`)){o[i]=a.slice(1,-1).replace(/\\(["'\\])/g,`$1`);continue}if(a===`true`){o[i]=!0;continue}if(a===`false`){o[i]=!1;continue}if(a===`null`){o[i]=null;continue}let s=Number(a);if(!Number.isNaN(s)&&a!==``){o[i]=s;continue}o[i]=a}return o}function Ht(e){let t=e.trim();if(t.startsWith(`{`)&&t.endsWith(`}`)){try{let e=JSON.parse(t);if(e&&typeof e==`object`&&!Array.isArray(e))return e}catch{}return Vt(t.slice(1,-1))}return Vt(t)}function Ut(e){let t=e.replace(/<\s*turn\|>\s*|<\|end_of_turn\|>|<\|eot_id\|>/gi,``).replace(/<\|tool_call\|?>/gi,``).trim();if(!t)return null;let n=t.match(/^call\s*:\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*\{([\s\S]*)\}\s*$/);if(n?.[1])return{name:n[1],input:Ht(`{${n[2]}}`)};let r=t.match(/^<\s*execute_tool\s*>\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*\(([^)]*)\)\s*<\s*\/\s*execute_tool\s*>\s*$/i);if(r?.[1])return{name:r[1],input:Vt(r[2]??``)};let i=t.match(/^\[tool_code\]([\s\S]*?)\[\/tool_code\]$/i);if(i?.[1]){let e=i[1].trim(),t=e.match(/^print\s*\(\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*\(\s*(.*?)\s*\)\s*\)$/s),n=e.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\s*\(\s*(.*?)\s*\)$/s),r=t??n;if(r?.[1]){let e=(r[2]??``).trim();if(!e.startsWith(`{`)||!e.endsWith(`}`))return null;try{let t=JSON.parse(e);if(t&&typeof t==`object`&&!Array.isArray(t))return{name:r[1],input:t}}catch{return null}}}return null}function Wt(e){return!Array.isArray(e)||e.length===0?[]:e.map(e=>({type:`function`,function:{name:e.name,description:e.description,parameters:e.input_schema??{}}}))}let Gt=null;function Kt(){return Gt||=Bt(),Gt}async function qt(t){let{modelId:n,messages:r,tools:i,maxTokens:a=8192,verbose:o=!1,onToken:s,onProgress:c,abortSignal:l,service:u}=t,d=u||Kt(),f=Wt(i??[]),p=await d.runChatCompletion({modelId:n,messages:r,tools:f.length>0?f:void 0,maxCompletionTokens:a,verbose:o,onToken:s,onProgress:c,abortSignal:l}),m=Ut(p.text);return m?{id:`chatcmpl-${e()}`,object:`chat.completion`,created:Math.floor(Date.now()/1e3),model:n,choices:[{index:0,message:{role:`assistant`,content:null,tool_calls:[{id:`call_${e()}`,type:`function`,function:{name:m.name,arguments:JSON.stringify(m.input)}}]},finish_reason:`tool_calls`}],usage:{prompt_tokens:p.promptTokens,completion_tokens:p.completionTokens,total_tokens:p.promptTokens+p.completionTokens}}:{id:`chatcmpl-${e()}`,object:`chat.completion`,created:Math.floor(Date.now()/1e3),model:n,choices:[{index:0,message:{role:`assistant`,content:p.text},finish_reason:`stop`}],usage:{prompt_tokens:p.promptTokens,completion_tokens:p.completionTokens,total_tokens:p.promptTokens+p.completionTokens}}}Dt(qt);function Jt(e,t,n){let r={id:`chatcmpl-${Date.now()}`,object:`chat.completion.chunk`,created:Math.floor(Date.now()/1e3),model:t,choices:[{index:0,delta:{content:n},finish_reason:null}]};e.write(`data: ${JSON.stringify(r)}\n\n`)}function Yt(e,t,n){let r={id:`chatcmpl-${Date.now()}`,object:`chat.completion.chunk`,created:Math.floor(Date.now()/1e3),model:t,choices:[{index:0,delta:{tool_calls:[{index:0,id:`call_${Date.now()}_${Math.random()}`,type:`function`,function:{name:n.name,arguments:JSON.stringify(n.input||{})}}]},finish_reason:null}]};e.write(`data: ${JSON.stringify(r)}\n\n`)}function Xt(e,t,n=`stop`){let r={id:`chatcmpl-${Date.now()}`,object:`chat.completion.chunk`,created:Math.floor(Date.now()/1e3),model:t,choices:[{index:0,delta:{},finish_reason:n}]};e.write(`data: ${JSON.stringify(r)}\n\n`),e.write(`data: [DONE]
|
|
15
|
-
|
|
16
|
-
`)}const Zt=De(import.meta.url),Qt=V.dirname(Zt),$t=we(import.meta.url),en=`.llamafile`,tn=parseInt(process.env.LLAMAFILE_CTX_SIZE||`8192`,10),nn=new Set([`localhost`,`127.0.0.1`,`::1`]),X=new Set;function rn(e,t){if(!(e.exitCode!==null||e.signalCode!==null||e.killed)){if(process.platform===`win32`){if(typeof e.pid==`number`)try{let t=$t("node:child_process");typeof t.execFileSync==`function`&&t.execFileSync(`taskkill`,[`/PID`,String(e.pid),`/T`,`/F`],{stdio:`ignore`,windowsHide:!0})}catch{}return}try{if(typeof e.pid==`number`){if(t)try{process.kill(-e.pid,`SIGKILL`)}catch{}try{process.kill(e.pid,`SIGKILL`)}catch{}}}catch{}}}function Z(){for(let e of X)try{e.killSync()}catch{}X.clear()}let an=!1;function on(){an||(an=!0,process.on(`exit`,()=>{Z()}),process.on(`SIGINT`,()=>{Z()}),process.on(`SIGTERM`,()=>{Z()}),process.platform!==`win32`&&process.on(`SIGHUP`,()=>{Z()}))}on();function sn(e){return e===`server`?`server`:`cli`}function cn(e){let t=e.trim().toLowerCase();return nn.has(t)?!0:ze(t)===4?t.startsWith(`127.`):ze(t)===6&&t===`::1`}function ln(e){let t=(typeof e==`string`?e.trim():``)||`127.0.0.1`;if(process.env.LLAMAFILE_ALLOW_NON_LOOPBACK!==`true`&&!cn(t))throw Error(`Unsafe host '${t}'. Only loopback hosts are allowed unless LLAMAFILE_ALLOW_NON_LOOPBACK=true.`);return t}function un(e){let t=typeof e==`number`?e:Number.parseInt(typeof e==`string`?e:``,10);return!Number.isFinite(t)||t<1||t>65535?8080:t}function dn(e){return typeof e==`boolean`?e:typeof e!=`string`||e!==`false`}function fn(e){let t={...e};return delete t.llamafile,t}function pn(e){let t=fn(e);return delete t.stream,delete t.stream_options,t}function mn(e){if(typeof e==`string`)return e;if(!Array.isArray(e))return``;let t=[];for(let n of e){if(typeof n==`string`){t.push(n);continue}if(!n||typeof n!=`object`)continue;let e=n;if(e.type===`text`&&typeof e.text==`string`){t.push(e.text);continue}if(e.type===`tool_result`&&typeof e.content==`string`){t.push(e.content);continue}if(e.type===`tool_use`&&e.name){let n=String(e.name),r=e.input&&typeof e.input==`object`?JSON.stringify(e.input):`{}`;t.push(`[tool_use:${n}] ${r}`)}}return t.join(`
|
|
17
|
-
`)}function hn(e){let t=Array.isArray(e.messages)?e.messages:[];if(t.length===0)return``;let n=[];for(let e of t){if(!e||typeof e!=`object`)continue;let t=e,r=typeof t.role==`string`&&t.role.trim()?t.role.trim().toUpperCase():`USER`,i=mn(t.content).trim();i&&n.push(`${r}: ${i}`)}return n.length===0?``:(n.push(`ASSISTANT:`),n.join(`
|
|
18
|
-
|
|
19
|
-
`))}function gn(e){let t=String(e||``).replace(/\r\n/g,`
|
|
20
|
-
`).trim(),n=``,r=t.length===0,i=!1,a=e=>{if(i||!e)return e;let t=e.replace(/^\s*ASSISTANT:\s*/i,``);return t!==e&&(i=!0),t};return{push(e){let i=String(e||``).replace(/\r\n/g,`
|
|
21
|
-
`);if(r)return a(i);n+=i;let o=n.trimStart();if(t.startsWith(o)&&o.length<t.length)return``;r=!0;let s=n,c=n.trimStart();return c.startsWith(t)&&(s=c.slice(t.length)),n=``,a(s)},flush(){if(r)return``;r=!0;let e=a(n);return n=``,e}}}function _n(e){let t=e.replace(/<\s*turn\|>\s*|<\|end_of_turn\|>|<\|eot_id\|>/gi,``).trim(),n=t.match(/^call\s*:\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*\{([\s\S]*)\}\s*$/);if(n?.[1])return{name:n[1],input:Ft(n[2]?.trim()||``)};let r=t.match(/^<\s*execute_tool\s*>\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*\(([^)]*)\)\s*<\s*\/\s*execute_tool\s*>\s*$/i);return r?.[1]?{name:r[1],input:It(r[2]?.trim()||``)}:null}function vn(){let e=new Map,t=new Map;function n(e,t){let n={child:e,runDetached:t,killSync:()=>rn(e,t)};X.add(n);let r=()=>{X.delete(n)};return e.once(`close`,r),e.once(`error`,r),e.once(`exit`,r),r}async function r(){let e=[V.resolve(Qt,`../../../assets/cache/llamafile`),V.resolve(Qt,`../../../../assets/cache/llamafile`),V.resolve(process.cwd(),`assets/cache/llamafile`)],t=``;for(let n of e)try{if((await Ie(n)).isDirectory()){t=n;break}}catch{}if(!t)throw Error(`Could not locate assets/cache/llamafile directory. Tried: ${e.join(`, `)}`);return(await Pe(t,{withFileTypes:!0})).filter(e=>e.isFile()&&e.name.endsWith(en)).map(e=>{let n=e.name;return{fileName:n,id:n.slice(0,-10),absolutePath:V.resolve(t,n)}}).sort((e,t)=>e.fileName.localeCompare(t.fileName))}async function i(e){let t=await r(),n=e.trim(),i=t.find(e=>e.id===n||e.fileName===n||e.absolutePath===n);if(i)return i;let a=V.basename(n),o=a.endsWith(en)?a.slice(0,-10):a,s=t.find(e=>e.id===n||e.fileName===n||e.fileName===a||e.id===o||e.fileName===`${o}${en}`);if(!s)throw Error(`Model '${n}' not found under assets/cache/llamafile (*.llamafile).`);return s}function a(e,t){return Nt(e.headers[`x-shadowclaw-request-id`]).trim()||(typeof t?.requestId==`string`&&t.requestId.trim()?t.requestId.trim():(t?.llamafile&&typeof t.llamafile==`object`?String(t.llamafile.requestId||``).trim():``)||Nt(e.headers[`x-request-id`]).trim()||`req_${Date.now()}_${Math.random().toString(36).slice(2,8)}`)}function o(t,n){return e.set(t,n),()=>{e.get(t)===n&&e.delete(t)}}function s(t){let n=e.get(t);return n?(e.delete(t),n(),!0):!1}function c(e){let t=e.headers[`x-llamafile-mode`],n=e.headers[`x-llamafile-host`],r=e.headers[`x-llamafile-port`],i=e.headers[`x-llamafile-offline`],a=e.body&&typeof e.body==`object`&&e.body.llamafile&&typeof e.body.llamafile==`object`?e.body.llamafile:{};return{mode:sn(a.mode??t),host:ln(a.host??n),port:un(a.port??r),offline:dn(a.offline??i)}}function l(e){let t=e&&typeof e==`object`?String(e.code??``):``,n=String(e&&typeof e==`object`?e.message??``:e??``);return t===`ENOEXEC`||n.includes(`ENOEXEC`)}async function u(e,t,n,r){let i=i=>i?(r&&console.log(`[Proxy] Shell fallback: /bin/sh -c 'exec "\$0" "\$@"' ${e} [${t.length} args]`),Ae(`/bin/sh`,[`-c`,`exec "$0" "$@"`,e,...t],{cwd:n.cwd,env:n.env,stdio:[`ignore`,`pipe`,`pipe`],detached:n.detached})):Ae(e,t,{cwd:n.cwd,env:n.env,stdio:[`ignore`,`pipe`,`pipe`],detached:n.detached}),a=async e=>{await new Promise((t,n)=>{let r=()=>{e.off(`error`,i),t()},i=t=>{e.off(`spawn`,r),n(t)};e.once(`spawn`,r),e.once(`error`,i)})},o;try{return o=i(!1),await a(o),o}catch(t){if(process.platform===`win32`||!l(t))throw t;return r&&console.warn(`[Proxy] Direct exec failed with ENOEXEC for ${V.basename(e)}. Retrying via /bin/sh.`),o=i(!0),await a(o),o}}async function d(e,r){let i=t.get(e);if(typeof i==`boolean`)return i;try{let r=process.platform!==`win32`,i=await u(e,[`--help`],{cwd:V.dirname(e),env:{...process.env},detached:r},!1);n(i,r);let a=``;i.stdout?.on(`data`,e=>{a+=e.toString(`utf8`)}),i.stderr?.on(`data`,e=>{a+=e.toString(`utf8`)}),await new Promise((e,t)=>{i.on(`error`,t),i.on(`close`,()=>e())});let o=/(^|\s)--offline(\s|[,.)]|$)/m.test(a);return t.size>=100&&t.clear(),t.set(e,o),o}catch(n){if(r){let t=n instanceof Error?n.message:String(n);console.warn(`[Proxy] Could not probe --offline support for ${V.basename(e)}: ${t}. Continuing without --offline.`)}return t.size>=100&&t.clear(),t.set(e,!1),!1}}return{listBinaries:r,resolveBinary:i,getLlamafileRequestId:a,cancelRequest:s,getLlamafileRuntimeOptions:c,async invokeCli(e,t,r,s,c){if(e.destroyed||e.aborted||e.socket?.destroyed)throw Error(`Request already closed or aborted`);let{absolutePath:l}=await i(s.model),f=a(e,r);try{await je(l,Te.X_OK)}catch(e){let t=`Binary not executable or not found: ${l} (${e instanceof Error?e.message:String(e)})`;throw Error(t)}if(e.destroyed||e.aborted||e.socket?.destroyed)throw Error(`Request already closed or aborted`);let p=r.stream===!0,m=hn(pn(r));if(!m)throw Error(`Llamafile CLI requires at least one text message in request payload.`);let h=typeof r.max_tokens==`number`&&Number.isFinite(r.max_tokens)?Math.floor(r.max_tokens):512,g=[`--n-predict`,String(Math.max(1,h)),`--ctx-size`,String(tn),`--cli`,`-p`,m];s.offline&&await d(l,c)?g.unshift(`--offline`):s.offline&&c&&console.log(`[Proxy] Skipping unsupported --offline flag for ${V.basename(l)}.`);let _,v=process.platform!==`win32`;try{_=await u(l,g,{cwd:V.dirname(l),env:{...process.env},detached:v},c)}catch(e){throw Error(`Failed to spawn llamafile: ${e instanceof Error?e.message:String(e)}`)}if(n(_,v),e.destroyed||e.aborted||e.socket?.destroyed)throw rn(_,v),Error(`Request already closed or aborted`);if(!_.stdout||!_.stderr)throw rn(_,v),Error(`Failed to setup child process streams`);let y=``,b=``,x=``,S=!1,C=!1,w=null,T=gn(m),E=()=>{w&&=(clearTimeout(w),null)},D=(e=`SIGTERM`)=>{if(!(_.exitCode!==null||_.signalCode!==null||_.killed)){if(e===`SIGKILL`){rn(_,v);return}if(process.platform===`win32`){if(typeof _.pid!=`number`)return;try{let e=$t("node:child_process");if(typeof e.execFileSync==`function`){e.execFileSync(`taskkill`,[`/PID`,String(_.pid),`/T`,`/F`],{stdio:`ignore`,windowsHide:!0});return}}catch{}try{Ae(`taskkill`,[`/PID`,String(_.pid),`/T`,`/F`],{stdio:`ignore`,windowsHide:!0}).unref()}catch{}return}try{if(v&&typeof _.pid==`number`)try{process.kill(-_.pid,e)}catch{}if(typeof _.pid==`number`)try{process.kill(_.pid,e)}catch{}}catch{}}},O=()=>{if(!(_.exitCode!==null||_.signalCode!==null||_.killed)){if(process.platform===`win32`){D(`SIGKILL`);return}D(`SIGTERM`),!w&&(w=setTimeout(()=>{_.exitCode!==null||_.signalCode!==null||_.killed||D(`SIGKILL`)},500))}},k=()=>{e.off(`aborted`,A),e.off(`close`,A),e.socket.off(`close`,A),t.off(`close`,A)},A=()=>{C||(C=!0,O())};e.once(`aborted`,A),e.once(`close`,A),e.socket.once(`close`,A),t.once(`close`,A);let j=o(f,A);return new Promise((e,n)=>{if(p){t.status(200),t.setHeader(`Content-Type`,`text/event-stream`),t.setHeader(`Cache-Control`,`no-cache`),t.setHeader(`Connection`,`keep-alive`),t.setHeader(`Access-Control-Allow-Origin`,`*`),t.flushHeaders(),_.stdout.on(`data`,e=>{if(C||t.writableEnded)return;let n=e.toString(`utf8`);b+=n;let r=T.push(n);r&&!C&&!t.writableEnded&&Jt(t,s.model,r),x+=r}),_.stderr.on(`data`,e=>{y+=e.toString(`utf8`)}),_.on(`close`,n=>{if(k(),j(),E(),C||S){e();return}if(n!==0){let r=y.trim()||`llamafile exited with status ${n}`;t.write(`data: ${JSON.stringify({error:{type:`server_error`,message:r}})}\n\n`),t.write(`data: [DONE]
|
|
22
|
-
|
|
23
|
-
`),t.end(),e();return}let r=T.flush();x+=r;let i=_n(x.trim());if(i){Yt(t,s.model,i),Xt(t,s.model,`tool_calls`),t.end(),e();return}r&&!C&&!t.writableEnded&&Jt(t,s.model,r),Xt(t,s.model),t.end(),e()}),_.on(`error`,n=>{if(S=!0,k(),j(),E(),C){e();return}let r=`Child process error: ${n instanceof Error?n.message:String(n)}`;if(!t.headersSent){t.status(500).json({error:`Failed to execute llamafile: ${r}`}),e();return}t.write(`data: ${JSON.stringify({error:{type:`server_error`,message:r}})}\n\n`),t.write(`data: [DONE]
|
|
24
|
-
|
|
25
|
-
`),t.end(),e()});return}_.stdout.on(`data`,e=>{b+=e.toString(`utf8`),x+=T.push(e.toString(`utf8`))}),_.stderr.on(`data`,e=>{y+=e.toString(`utf8`)}),_.on(`close`,n=>{if(k(),j(),E(),C){e();return}if(n!==0){let r=y.trim()||`llamafile exited with status ${n}`;t.status(500).json({error:r}),e();return}x+=T.flush();let r=x.trim(),i=_n(r);t.json({id:`chatcmpl-llamafile-${Date.now()}`,object:`chat.completion`,created:Math.floor(Date.now()/1e3),model:s.model,choices:[{index:0,message:i?{role:`assistant`,content:null,tool_calls:[{id:`call_${Date.now()}_${Math.random()}`,type:`function`,function:{name:i.name,arguments:JSON.stringify(i.input||{})}}]}:{role:`assistant`,content:r||`(no response)`},finish_reason:i?`tool_calls`:`stop`}]}),e()}),_.on(`error`,n=>{if(S=!0,k(),j(),E(),C){e();return}t.status(500).json({error:`Child process error: ${n instanceof Error?n.message:String(n)}`}),e()})})},terminateAll(){for(let t of e.values())try{t()}catch{}Z()},__getOfflineSupportCache(){return t},__getActiveRequests(){return e},__getActiveProcesses(){return X}}}let yn=null;function bn(){return yn||=vn(),yn}async function xn(t){let{model:n,messages:r,maxTokens:i=8192,verbose:a=!1,onToken:o,abortSignal:s,service:c}=t,l=c||bn(),u=new Re,d=new Re,f=s?.aborted??!1,p=Object.assign(u,{headers:{},socket:d,destroyed:f,aborted:f,body:{model:n,messages:r,max_tokens:i,stream:!0}}),m=()=>{f=!0,p.destroyed=!0,p.aborted=!0,d.destroyed=!0,u.emit(`close`),u.emit(`aborted`),d.emit(`close`)};s&&(s.aborted?m():s.addEventListener(`abort`,m,{once:!0}));let h=``,g=null,_=[],v=`stop`,y=new Re,b=!1;return new Promise((t,r)=>{let i=Object.assign(y,{headersSent:!1,writableEnded:!1,status(e){return this},setHeader(e,t){return this},flushHeaders(){},write(e){let t=(typeof e==`string`?e:e.toString(`utf8`)).split(`
|
|
26
|
-
`);for(let e of t){let t=e.trim();if(!t||!t.startsWith(`data:`))continue;let n=t.slice(5).trim();if(n!==`[DONE]`)try{let e=JSON.parse(n);e.error?.message&&(g=e.error.message);let t=e.choices?.[0]?.delta;t?.content&&(h+=t.content,o?.(t.content)),Array.isArray(t?.tool_calls)&&_.push(...t.tool_calls);let r=e.choices?.[0]?.finish_reason;r&&(v=r)}catch{}}return!0},end(){if(b)return;if(b=!0,this.writableEnded=!0,g){r(Error(g));return}let i={role:`assistant`,content:h};_.length>0&&(i.tool_calls=_),t({id:`chatcmpl-${e()}`,object:`chat.completion`,created:Math.floor(Date.now()/1e3),model:n,choices:[{index:0,message:i,finish_reason:v}],usage:{prompt_tokens:0,completion_tokens:0,total_tokens:0}})}});l.invokeCli(p,i,p.body,{model:n,offline:!1},a).catch(e=>{b||(b=!0,r(e))})})}kt(xn);async function Sn(e,t,n,r={}){let i=[],a=[];for(let o of n)try{r.onStep?.(o);let s=Cn(o.input||{},a,n),c=await L(e,o.name,s,t,{isScheduledTask:!r.isManual,isTaskExecution:r.isTaskExecution});a.push(c),o.suppressOutput||i.push(`**Tool \`${o.name}\`**: ${c}`)}catch(e){let t=e.message||String(e);a.push(t),o.suppressOutput||i.push(`**Tool \`${o.name}\` failed**: ${t}`)}return{rawOutputs:a,results:i}}function Cn(e,t,n){if(e&&typeof e==`object`){if(Array.isArray(e))return e.map(e=>Cn(e,t,n));if(`$pipe`in e){let r=e.$pipe,i=``;if(r===`prev`)i=t[t.length-1]??``;else if(typeof r==`number`)i=t[r]??``;else if(typeof r==`string`){for(let e=t.length-1;e>=0;e--)if(n[e]?.name===r){i=t[e];break}}return wn(i)}let r={};for(let[i,a]of Object.entries(e))r[i]=Cn(a,t,n);return r}return e}function wn(e){return typeof e==`string`?e:Array.isArray(e)?e.map(e=>e&&typeof e==`object`?`text`in e?String(e.text):`data`in e?String(e.data):JSON.stringify(e):String(e??``)).join(`
|
|
27
|
-
`):e&&typeof e==`object`?e:e??``}let Q=null;const $=(e,t,n,r)=>{try{e.exec(`ALTER TABLE ${t} ADD COLUMN ${n} ${r}`)}catch{}};function Tn(e=`database/agent.db`){if(Q)return Q;let t=new Be(e);return t.exec(`
|
|
28
|
-
CREATE TABLE IF NOT EXISTS messages (
|
|
29
|
-
id TEXT PRIMARY KEY,
|
|
30
|
-
groupId TEXT NOT NULL,
|
|
31
|
-
timestamp INTEGER NOT NULL,
|
|
32
|
-
content TEXT NOT NULL,
|
|
33
|
-
sender TEXT NOT NULL,
|
|
34
|
-
channel TEXT NOT NULL DEFAULT 'chat',
|
|
35
|
-
isFromMe INTEGER NOT NULL DEFAULT 0,
|
|
36
|
-
isTrigger INTEGER NOT NULL DEFAULT 0,
|
|
37
|
-
attachments TEXT,
|
|
38
|
-
a2uiAction TEXT,
|
|
39
|
-
a2uiEnvelopes TEXT,
|
|
40
|
-
freshContext INTEGER,
|
|
41
|
-
subagent INTEGER
|
|
42
|
-
)
|
|
43
|
-
`),t.exec(`
|
|
44
|
-
CREATE INDEX IF NOT EXISTS messages_by_group_time
|
|
45
|
-
ON messages (groupId, timestamp)
|
|
46
|
-
`),t.exec(`
|
|
47
|
-
CREATE INDEX IF NOT EXISTS messages_by_group
|
|
48
|
-
ON messages (groupId)
|
|
49
|
-
`),t.exec(`
|
|
50
|
-
CREATE TABLE IF NOT EXISTS sessions (
|
|
51
|
-
groupId TEXT PRIMARY KEY,
|
|
52
|
-
messages TEXT NOT NULL DEFAULT '[]',
|
|
53
|
-
updatedAt INTEGER NOT NULL DEFAULT 0
|
|
54
|
-
)
|
|
55
|
-
`),t.exec(`
|
|
56
|
-
CREATE TABLE IF NOT EXISTS tasks (
|
|
57
|
-
id TEXT PRIMARY KEY,
|
|
58
|
-
groupId TEXT NOT NULL,
|
|
59
|
-
enabled INTEGER NOT NULL DEFAULT 1,
|
|
60
|
-
schedule TEXT,
|
|
61
|
-
prompt TEXT NOT NULL DEFAULT '',
|
|
62
|
-
tools TEXT,
|
|
63
|
-
lastRun INTEGER,
|
|
64
|
-
createdAt INTEGER NOT NULL,
|
|
65
|
-
type TEXT,
|
|
66
|
-
freshContext INTEGER,
|
|
67
|
-
subagent INTEGER,
|
|
68
|
-
name TEXT,
|
|
69
|
-
task_order INTEGER
|
|
70
|
-
)
|
|
71
|
-
`),t.exec(`
|
|
72
|
-
CREATE INDEX IF NOT EXISTS tasks_by_group
|
|
73
|
-
ON tasks (groupId)
|
|
74
|
-
`),t.exec(`
|
|
75
|
-
CREATE INDEX IF NOT EXISTS tasks_by_enabled
|
|
76
|
-
ON tasks (enabled)
|
|
77
|
-
`),t.exec(`
|
|
78
|
-
CREATE TABLE IF NOT EXISTS config (
|
|
79
|
-
key TEXT PRIMARY KEY,
|
|
80
|
-
value TEXT NOT NULL
|
|
81
|
-
)
|
|
82
|
-
`),t.exec(`
|
|
83
|
-
CREATE TABLE IF NOT EXISTS pendingShares (
|
|
84
|
-
id TEXT PRIMARY KEY,
|
|
85
|
-
createdAt INTEGER NOT NULL,
|
|
86
|
-
data TEXT
|
|
87
|
-
)
|
|
88
|
-
`),$(t,`tasks`,`type`,`TEXT`),$(t,`tasks`,`freshContext`,`INTEGER`),$(t,`tasks`,`subagent`,`INTEGER`),$(t,`tasks`,`name`,`TEXT`),$(t,`tasks`,`task_order`,`INTEGER`),$(t,`messages`,`freshContext`,`INTEGER`),$(t,`messages`,`subagent`,`INTEGER`),Q=f(t),Q}function En(){Q&&=(Q.db.close(),null)}var Dn=class{kind=`file`;name;_path;constructor(e){this._path=e,this.name=V.basename(e)}async getFile(){let e=await Ne(this._path);return{size:e.length,type:`application/octet-stream`,async text(){return e.toString(`utf8`)},async arrayBuffer(){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}}}async createWritable(){let e=[],t=this._path;return{async write(t){typeof t==`string`?e.push(Buffer.from(t,`utf8`)):t instanceof Uint8Array?e.push(Buffer.from(t)):e.push(Buffer.from(new Uint8Array(t)))},async close(){let n=Buffer.concat(e);await H(t,n)}}}},On=class e{kind=`directory`;name;_path;constructor(e){this._path=e,this.name=V.basename(e)||e}async getDirectoryHandle(t,n){let r=V.join(this._path,t);if(n?.create)await Me(r,{recursive:!0});else if(!Ee(r)){let e=Error(`NotFoundError: ${r} does not exist`);throw e.name=`NotFoundError`,e}return new e(r)}async getFileHandle(e,t){let n=V.join(this._path,e);if(t?.create)Ee(n)||await H(n,``);else if(!Ee(n)){let e=Error(`NotFoundError: ${n} does not exist`);throw e.name=`NotFoundError`,e}return new Dn(n)}async*entries(){let t;try{t=await Pe(this._path)}catch{return}for(let n of t){let t=V.join(this._path,n);try{(await Ie(t)).isDirectory()?yield[n,new e(t)]:yield[n,new Dn(t)]}catch{}}}async removeEntry(e,t){await Fe(V.join(this._path,e),{recursive:t?.recursive??!1,force:!0})}};function kn(e){oe(new On(e))}globalThis.__setStorageRootFromPath=kn,Se(Ve),Dt(qt),kt(xn);export{_ as BROWSER_ONLY_TOOLS,a as CONFIG_KEYS,A as DEFAULT_BUILTIN_PROFILE,o as DEFAULT_MAX_TOKENS,i as DEFAULT_SERVER_GROUP_ID,On as NodeFsDirectoryHandle,Dn as NodeFsFileHandle,pe as TOOL_DEFINITIONS,Z as cleanupAllLlamafileProcesses,En as closeSqliteDatabase,Bt as createTransformersRuntimeService,Ce as discoverSkills,ue as executeDetectLanguage,de as executeEmbedText,C as executeNativeAiTask,qt as executeNodeTransformersCompletion,ve as executeProofreadText,ge as executeRewriteText,R as executeSummarizeText,L as executeTool,Sn as executeToolChain,fe as executeTranslateText,ce as executeWriteText,g as filterHeadlessTools,r as getAvailableProviders,p as getConfig,b as getContextLimit,l as getDb,t as getDefaultProvider,s as getModelMaxTokens,n as getProvider,re as getRecentMessages,te as getStorageRoot,At as handleInvoke,ne as invalidateStorageRoot,v as isHeadlessMode,u as isSqliteDatabase,S as isToolHeadlessSafe,me as loadDeclarativeTools,I as loadSkill,Ve as nativeBashExecutor,Tn as openSqliteDatabase,F as post,c as resetDB,z as saveMessage,P as setConfig,d as setDB,Se as setHeadlessBashExecutor,m as setHeadlessMode,xe as setNativeAiTaskHandler,B as setPostHandler,oe as setStorageRoot,kn as setStorageRootFromPath,f as wrapSqliteDatabase};
|