shadow-claw 1.34.5 → 1.36.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/build/build.js +1 -1
- package/dist/cli/{chunk-B4a6SyOL.js → chunk-6dsqmo6-.js} +3 -3
- 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-BT2f5jvi.js +1 -0
- package/dist/cli/chunk-BdJUjMuz.js +1 -0
- package/dist/cli/{chunk-DoHbMaWn.js → chunk-BwtEsB9s.js} +6 -6
- package/dist/cli/chunk-C47WdxKx2.js +1 -0
- package/dist/cli/{chunk-BRiGkTIi.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-DMRbWmO2.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-Du5qiUIk.js +2 -0
- package/dist/cli/chunk-Ea7nXmgb2.js +1 -0
- package/dist/cli/{chunk-D9dku_3t.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/chunk-rJtMBaNB.js +2 -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 +43 -32
- 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/build/build.test.ts +11 -0
- package/src/cli/build/build.ts +10 -9
- package/src/cli/cli.ts +31 -2
- package/src/cli/commands/agent.test.ts +421 -0
- package/src/cli/commands/agent.ts +270 -20
- package/src/cli/commands/skills-index.test.ts +84 -2
- package/src/cli/commands/skills-index.ts +20 -2
- 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-Cdq9DIrc.js +0 -1
- package/dist/cli/chunk-CxdpafWg.js +0 -1
- package/dist/cli/chunk-DBk6e4N-.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-JBAAPRpe.js +0 -2
- package/dist/cli/chunk-aWgoVB7x2.js +0 -1
- package/dist/cli/chunk-hOceZVB92.js +0 -371
- package/dist/cli/chunk-pwNc6VtC2.js +0 -1
- package/dist/cli/chunk-uOnw3tuc.js +0 -2
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./chunk-BRiGkTIi.js";export{e as getAgentCore};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./chunk-JBAAPRpe.js";export{e as generateSkillsIndex};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./chunk-D9dku_3t.js";export{e as getAgentCore};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./chunk-uOnw3tuc.js";export{e as generateSkillsIndex};
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./chunk-DxIsgrAF.js";import{A as t,C as n,D as r,E as i,F as a,I as o,L as s,M as c,N as l,O as u,P as d,R as f,S as p,T as m,_ as h,a as g,b as _,c as v,d as y,f as b,g as x,h as S,i as C,j as w,k as T,l as E,m as D,o as ee,p as O,s as k,u as A,v as j,w as M,x as N,y as te}from"./chunk-Bjh76Dai.js";import{_ as ne,b as P,g as re,l as ie,r as ae,s as oe,y as F}from"./chunk-BkKN8FNP.js";import{a as se,i as ce,n as le,o as I,r as L}from"./chunk-DFLqhyP_.js";import{t as ue}from"./chunk-Dhh0lHO6.js";import{A as de,C as fe,D as pe,E as me,O as he,S as ge,a as R,i as _e,k as ve,n as ye,o as be,r as xe,s as Se,v as Ce,w as z,y as we}from"./chunk-zvi71-77.js";import{createRequire as Te}from"node:module";import{constants as Ee,existsSync as De}from"node:fs";import B from"node:path";import{fileURLToPath as Oe}from"node:url";import{env as ke}from"node:process";import{exec as Ae,spawn as je}from"node:child_process";import{access as Me,mkdir as Ne,readFile as Pe,readdir as Fe,rm as Ie,stat as Le,unlink as Re,writeFile as V}from"node:fs/promises";import H from"process";import{Buffer as ze}from"buffer";import{EventEmitter as Be}from"node:events";import{isIP as Ve}from"node:net";import{DatabaseSync as He}from"node:sqlite";const Ue=({command:e,stdin:t,timeoutSec:n})=>new Promise(r=>{let i=Ae(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())});N(Ue),globalThis.__headlessBashExecutor=Ue;function We(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,i){p(r(e,t,n,i))}async function*Ge(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 Ke=6e4,qe=new Map;function Je(e){let t=qe.get(e);if(t)return t;let n={recentCalls:[],nextAllowedAt:0,remoteLimit:null,remoteRemaining:null,remoteResetAt:null};return qe.set(e,n),n}function W(){return Date.now()}function Ye(e){if(!e)return null;let t=Number(e.trim());return Number.isFinite(t)?t:null}function Xe(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 Ze(e){let t=Ye(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 Qe(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 $e(e,t){if(!Number.isFinite(t)||t<=0)return 0;let n=W();if(e.recentCalls=e.recentCalls.filter(e=>n-e<Ke),e.recentCalls.length<t)return 0;let r=e.recentCalls[0]||n;return Math.max(0,Ke-(n-r))}function et(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 tt(e,t,n,r){let i=Je(e);for(;;){let e=$e(i,n.callsPerMinute),a=n.autoAdapt?et(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&&p({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 Qe(o,r)}}function nt(e,t,n){if(!n.autoAdapt||!t||typeof t.get!=`function`)return;let r=Je(e),i=W(),a=Ye(t.get(`x-ratelimit-limit`)),o=Ye(t.get(`x-ratelimit-remaining`)),s=Ze(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=Xe(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 rt={"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`},it=Object.keys(rt);function at(){return typeof navigator<`u`&&`gpu`in navigator&&typeof WebAssembly<`u`&&`Suspending`in WebAssembly}let G=null,ot=null,K=null,st=null;const ct=fe;async function lt(e,t,n){return ge(e,t,n,{cacheName:`shadow-claw-litertlm-models`,chunkSize:ct})}async function ut(e,t,n){if(ot===e&&G)return G;if(K&&st===e)return K;st=e,K=(async()=>{if(G){try{await G.delete?.()}catch{}G=null,ot=null}let r=rt[e];if(!r)throw Error(`LiteRT-LM: Model '${e} is not supported. Supported models: ${it.join(`, `)}`);let i=await import(`./chunk-DTTnpKBm.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 lt(r,t??(()=>{}),n),s=await a.create({model:o,mainExecutorSettings:{maxNumTokens:8192}});return G=s,ot=e,s})();try{return await K}finally{K=null,st=null}}function dt(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 ft(e){let t=z(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=dt(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(`
|
|
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 mt(e,t,n,a,o,s,c,l,u,d){if(!at()){await s({type:`response`,payload:{groupId:t,text:`⚠️ LiteRT-LM requires WebGPU and WebAssembly.Suspending. These are not both available in this browser.`}});return}await s(r(t,`info`,`Starting`,`Provider: LiteRT-LM (Browser · WebGPU) · Model: ${l}`)),await s({type:`model-download-progress`,payload:{groupId:t,status:`running`,progress:0,message:`Loading LiteRT-LM model: ${l}…`}});let f=e=>(e/(1024*1024)).toFixed(0),p=-1,m=(e,n,r)=>{let i=n?e/n:null,a=i==null?-1:Math.floor(i*100);a===p&&!r||(p=a,s({type:`model-download-progress`,payload:{groupId:t,status:`running`,progress:i,message:r?`Loaded ${l} from cache (${f(e)} MB )`:n?`Downloading ${l}: ${f(e)} / ${f(n)} MB`:`Downloading ${l}: ${f(e)} MB`}}))},h;try{h=await ut(l,m,c)}catch(e){if(c?.aborted||e?.name===`AbortError`){await s({type:`model-download-progress`,payload:{groupId:t,status:`error`,progress:null,message:`LiteRT-LM model download cancelled.`}});return}await s({type:`model-download-progress`,payload:{groupId:t,status:`error`,progress:null,message:`LiteRT-LM model failed to load: ${e?.message??String(e)}`}}),await s({type:`response`,payload:{groupId:t,text:`⚠️ LiteRT-LM failed to initialize: ${e?.message??String(e)}`}});return}await s({type:`model-download-progress`,payload:{groupId:t,status:`done`,progress:1,message:`LiteRT-LM model ready.`}});let g=u??[],{preface:_,turns:y}=pt(n,a,g),b;try{b=await h.createConversation({preface:{messages:_}})}catch(e){await s({type:`response`,payload:{groupId:t,text:`⚠️ LiteRT-LM failed to create conversation: ${e?.message??String(e)}`}});return}let x=y.slice(0,-1),S=y[y.length-1]??`Hello.`;for(let e of x){if(c?.aborted)return;try{await b.sendMessage(e)}catch{}}if(c?.aborted)return;let C=S;for(let n=0;n<10;n++){if(c?.aborted)return;await s({type:`streaming-start`,payload:{groupId:t}});let n=``;try{let e=b.sendMessageStreaming(C);for await(let r of e){if(c?.aborted)break;let e=r?.content?.[0]?.text??``;if(e){let r=z(e,`litert_lm`);r&&(n+=r,await s({type:`streaming-chunk`,payload:{groupId:t,text:r}}))}}}catch(e){if(c?.aborted)return;await s({type:`response`,payload:{groupId:t,text:`⚠️ LiteRT-LM generation error: ${e?.message??String(e)}`}});return}let r=g.length>0?ft(n):null;if(r?.type===`tool_use`){await s({type:`streaming-end`,payload:{groupId:t}});let n=Array.isArray(r.tool_calls)?r.tool_calls:[];if(n.length===0){await s({type:`streaming-done`,payload:{groupId:t,text:`(no response)`}}),await s({type:`response`,payload:{groupId:t,text:`(no response)`}});return}let a=[],o=r.format===`model_specific`;for(let r of n){await s(i(t,r.name,`running`)),M(e=>{s(e)});let n;try{n=await v(e,r.name,r.input||{},t,{allowedTools:g,invokeContext:d})}catch(e){n=`Error: ${e?.message??String(e)}`}finally{M(null)}await s(i(t,r.name,`done`));let c=typeof n==`string`?n:JSON.stringify(n);o?a.push(`<|tool_response>${c}<|tool_response|>`):a.push(`[TOOL_RESULT ${r.id??r.name}] ${c}`)}if(o)C=a.join(`
|
|
9
|
-
`);else{let e=y[y.length-1]??``;C=[...a,``,`Based on the above tool results, please respond to the original request.`,e?`Original request: "${e}"`:``].filter(Boolean).join(`
|
|
10
|
-
`)}continue}let a;a=r?.type===`response`&&r.response?z(r.response,`litert_lm`):z(n,`litert_lm`),await s({type:`streaming-done`,payload:{groupId:t,text:a}}),await s({type:`response`,payload:{groupId:t,text:a}});return}await s({type:`response`,payload:{groupId:t,text:`⚠️ LiteRT-LM reached the maximum number of tool-calling iterations without producing a final response.`}})}const ht=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(u(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 gt(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 _t(e){let t=z(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 vt(e,t,n,a,o,s,c,l,u,d){let f=l||[],p=await ue(e,ae.TRANSFORMERS_JS_BACKEND)||`auto`,m=await ue(e,ae.TRANSFORMERS_JS_DTYPE_STRATEGY)||`auto`;await s(r(t,`info`,`Starting`,`Provider: Transformers.js (Local Worker) · Model: ${u} · Backend: ${p} · Dtype: ${m}`)),await ht.load(u,p,m,t,e=>{s({type:`model-download-progress`,payload:e})});let h=[...a];for(let a=0;a<10;a++){let a=[{role:`system`,content:n},...h.map(e=>({role:e.role===`assistant`?`assistant`:`user`,content:gt(e)}))];await s({type:`streaming-start`,payload:{groupId:t}});let c=``,l=``,u=await ht.generate(a,o,t,e=>{l+=e,s({type:`streaming-chunk`,payload:{groupId:t,text:e}})},e=>{c+=e,s(r(t,`text`,`Thinking`,c))},f);await s({type:`typing`,payload:{groupId:t}});let p=_t(u);if(p?.type===`tool_use`?await s({type:`streaming-end`,payload:{groupId:t}}):await s({type:`streaming-done`,payload:{groupId:t,text:p?.response?z(p.response,`transformers_js`):z(u,`transformers_js`)}}),!p||p.type===`response`){await s({type:`response`,payload:{groupId:t,text:p?.response?z(p.response,`transformers_js`):z(u,`transformers_js`)}});return}let m=Array.isArray(p.tool_calls)?p.tool_calls:[];if(m.length===0){await s({type:`response`,payload:{groupId:t,text:z(p.response||u,`transformers_js`)}});return}let g=[];for(let n of m){await s(i(t,n.name,`running`)),M(e=>{s(e)});let r;try{r=await v(e,n.name,n.input||{},t,{allowedTools:f,invokeContext:d})}finally{M(null)}await s(i(t,n.name,`done`)),g.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:[...p.response?[{type:`text`,text:p.response}]:[],...m.map(e=>({type:`tool_use`,id:e.id||`call_${Date.now()}_${Math.random()}`,name:e.name,input:e.input||{}}))]}),h.push({role:`user`,content:g})}}async function yt(e,t,n){let r=t.provider,i=async e=>{p(e)};if(r===`transformers_js_browser`){await vt(e,t.groupId,t.systemPrompt,t.messages,t.maxTokens,i,n,t.enabledTools,t.model);return}if(r===`prompt_api`){if(!k())throw Error(`Prompt API provider is not supported in this environment.`);await ee(e,t.groupId,t.systemPrompt,t.messages,t.maxTokens,i,n,t.enabledTools);return}if(r===`litert_lm_browser`){if(!at())throw Error(`Litert LM Browser provider is not supported in this environment.`);await mt(e,t.groupId,t.systemPrompt,t.messages,t.maxTokens,i,n,t.model,t.enabledTools);return}await Mt(e,t,n)}var bt=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 z(e,this.callbacks.source??this.format)}};const xt=new Map;function St(e){return xt.get(e)}function Ct(e){xt.delete(e)}function wt(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 Tt(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=wt(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 Et(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 Dt(e){let t=e.trim();return t?`Tool result:\n${t}`:``}let Ot=null;function kt(e){Ot=e}let At=null;function jt(e){At=e}async function Mt(t,r,o){let{apiKey:s,assistantName:c,contextCompression:l=!1,contextLimit:u,enabledTools:h,groupId:_,isScheduledTask:y=!1,maxIterations:b,maxTokens:x,memory:S,messages:C,model:T,provider:E,providerHeaders:D={},providerRuntimeOverrides:ee,reasoning:O,rateLimitAutoAdapt:k=!0,rateLimitCallsPerMinute:A=0,storageHandle:j,streaming:M=!1,subagentModelSelectionMode:N,subagentMaxTokens:te,subagentPinnedModel:ne,subagentPinnedProvider:re,systemPrompt:ie,workspaceGroupId:ae}=r,oe=!!r.subagentTask,F=oe?_.startsWith(`subagent:`)?_:`subagent:${e()}`:_,se=ae||_;oe&&n(F,[]);let ce={autoAdapt:k!==!1,callsPerMinute:Number.isFinite(A)?Math.max(0,Math.floor(A)):0};j&&f(j);let le=P(E);if(!le){p({payload:{groupId:F,error:`Unknown provider: ${E}`},type:`error`});return}let I=le,L=M&&I.supportsStreaming===!0&&I.format!==`prompt_api`;p({type:`typing`,payload:{groupId:F}}),U(F,`info`,`Starting`,`Provider: ${I.name} · Model: ${T} · Max tokens: ${x} · Streaming: ${L?`on`:`off`}${M&&!L?` (provider does not support streaming)`:``}`);try{let e=[...C],n=0,f=typeof b==`number`&&b>0?b:50,m=Array.isArray(h)?h:w;he()&&(m=pe(m));let _=ie,k=``,A={apiKey:s,assistantName:c??``,db:t,enabledTools:m,invokeSubagent:e=>yt(t,e,o),maxTokens:x,memory:S??``,model:T,provider:E,subagentModelSelectionMode:N,subagentMaxTokens:te,subagentPinnedProvider:re,subagentPinnedModel:ne,providerHeaders:D,providerRuntimeOverrides:ee,storageHandle:j,streaming:!1,systemPrompt:_??``},M=[];for(;n<f;){n++;let f=St(F);f&&(m=f.enabledTools,_=g(c,S,m,f.systemPromptOverride,void 0,void 0,{groupId:F}));let h=u??R(T),b=a(_),{messages:C,estimatedTokens:w}=d(e,{contextLimit:h,maxOutputTokens:x,skimTop:l,systemPromptTokens:b}),ee=w+b,j=Math.max(100,Math.min(x,h-ee-500)),N=_e(I,C,m,{contextCompression:l,maxTokens:j,model:T,reasoning:O,system:_});U(F,`api-call`,`API call #${n}`,`${C.length} messages in context`);let te={...xe(I,s),...D},ne=I.baseUrl,P;he()&&E===`transformers_js_local`&&Ot?(L&&p({payload:{groupId:F},type:`streaming-start`}),P=Se(I,await Ot({modelId:T,messages:C,tools:m,maxTokens:j,abortSignal:o,verbose:!!r.verbose,onToken:e=>{L&&e&&p({payload:{groupId:F,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)))}p({payload:{groupId:F,label:`Model Progress`,message:`${e.file||T}: ${t===null?`loading...`:`${t}%`}`},type:`status`})}}}))):he()&&E===`llamafile`&&At?(L&&p({payload:{groupId:F},type:`streaming-start`}),P=Se(I,await At({model:T,messages:C,maxTokens:j,abortSignal:o,verbose:!!r.verbose,onToken:e=>{L&&e&&p({payload:{groupId:F,text:e},type:`streaming-chunk`})}}))):P=L?await Pt(E,I,ne,te,N,F,T,ce,o):await Nt(E,I,ne,te,N,F,ce,o),P=Tt(P,m),P.usage&&p(We(F,P.usage,R(T)));for(let e of P.content)e.type===`text`&&e.text&&U(F,`text`,`Response text`,e.text.length>200?e.text.slice(0,200)+`…`:e.text);if(P.stop_reason===`tool_use`){let n=new Set(m.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&&p({payload:{groupId:F,text:r},type:`intermediate-response`}),L&&p({payload:{groupId:F},type:`streaming-end`});let a=[];for(let e of P.content)if(e.type===`tool_use`){let r=n.has(e.name),o=`${e.name}:${JSON.stringify(e.input)}`,s=M.filter(e=>e===o).length;if(M.push(o),!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(F,`warning`,`Tool blocked`,t),a.push({content:t,tool_use_id:e.id,type:`tool_result`});continue}let c=JSON.stringify(e.input),l=c.length>300?c.slice(0,300)+`…`:c;U(F,`tool-call`,`Tool: ${e.name}`,l),p(i(F,e.name,`running`));let u;s>=3?(u=`SYSTEM ERROR: You have repeatedly called this tool with the exact same input (${s+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:`,o)):u=await v(t,e.name,e.input,se,{allowedTools:m,isScheduledTask:y,invokeContext:A});let d=typeof u==`string`?u:JSON.stringify(u),f=d.length>500?d.slice(0,500)+`…`:d;U(F,`tool-result`,`Result: ${e.name}`,f),p(i(F,e.name,`done`)),Array.isArray(u)?a.push({content:u,tool_use_id:e.id,type:`tool_result`}):a.push({content:typeof u==`string`?u.slice(0,1e5):JSON.stringify(u).slice(0,1e5),tool_use_id:e.id,type:`tool_result`})}k=Et(a),e.push({role:`assistant`,content:P.content}),e.push({role:`user`,content:a}),p({type:`typing`,payload:{groupId:F}})}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)||(k?Dt(k):`(no response)`);L&&p({payload:{groupId:F,text:t},type:`streaming-done`}),p({payload:{groupId:F,text:t},type:`response`});return}}p({payload:{text:`⚠️ Reached maximum tool-use iterations (${f}). Stopping to avoid excessive API usage.`,groupId:F},type:`response`})}catch(e){if(e instanceof Error&&e.name===`AbortError`)return;let t=e instanceof Error?e.message:String(e);L&&p({payload:{groupId:F,error:t},type:`streaming-error`}),p({type:`error`,payload:{groupId:F,error:t}})}finally{Ct(F),oe&&m(F)}}async function Nt(e,t,n,r,i,a,o,s){return A(async()=>{await tt(e,a,o,s);let c=await fetch(n,{body:JSON.stringify(i),headers:r,method:`POST`,signal:s});if(nt(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 Se(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),p({type:`show-toast`,payload:{message:`LLM API: Retrying (${e}/${t})… ${i.slice(0,120)}`,type:`warning`,duration:5e3}})},shouldRetry:e=>E(e),signal:s})}async function Pt(e,t,n,r,a,o,s,c,l){let u={...a,stream:!0,...(t.format===`openai`||t.format===`mesh-llm`)&&{stream_options:{include_usage:!0}}};await tt(e,o,c,l);let d=await fetch(n,{body:JSON.stringify(u),headers:r,method:`POST`,signal:l});if(nt(e,d.headers,c),!d.ok){let e=await d.text(),n=Error(`${t.name} API error ${d.status}: ${e}`);throw n.status=d.status,n}if(!d.body)throw Error(`Streaming response has no body`);p({payload:{groupId:o},type:`streaming-start`});let f=0,m=``,h=0,g=``,_=(e=!1)=>{let t=Date.now();g&&(!e&&t-h<50||(U(o,`info`,`Reasoning`,g.length>400?`${g.slice(0,400)}…`:g),g=``,h=t))},v=new bt(t.format,{source:t.id,onText:e=>{let t=Date.now();m+=e,t-f>=50&&(p({payload:{groupId:o,text:m},type:`streaming-chunk`}),m=``,f=t)},onToolStart:e=>{p(i(o,e,`running`))},onUsage:e=>{p(We(o,e,R(s)))},onThinking:e=>{g+=e,_(!1)}});for await(let e of Ge(d.body,l))v.push(e);m&&p({payload:{groupId:o,text:m},type:`streaming-chunk`}),_(!0);let y=v.finalize();return t.format===`mesh-llm`&&(y=be(y)),y}H.env.SHADOWCLAW_USER_AGENT;function Ft(e){return Array.isArray(e)?e[0]||``:typeof e==`string`?e:``}function It(e,t){let n=Number.parseInt(e??``,10);return!Number.isFinite(n)||n<=0?t:n}function Lt(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 Rt(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 zt=H.env.SHADOWCLAW_USER_AGENT||`ShadowClaw/1.0`,Bt=`onnx-community/Qwen3-0.6B-ONNX`,q=B.resolve(H.cwd(),`assets/cache/transformers.js/models.json`),J=B.resolve(H.cwd(),`assets/cache/transformers.js`),Y=B.resolve(H.cwd(),`assets/cache/transformers.js/models-discovery.json.part`),Vt=[{id:Bt,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 Ht(){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 It(ke.TRANSFORMERS_JS_REQUEST_TIMEOUT_MS,3e5)}async function h(e){let t=Reflect.get(e,`env`);!t||typeof t!=`object`||(await Ne(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 Le(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(!Vt.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: ${Vt.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 Le(Y);e.isFile()&&(r=e.size)}catch{r=0}let i={"User-Agent":zt,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 Re(Y).catch(()=>{});continue}if(!a.ok)throw Error(`Failed to discover Transformers.js models (${a.status})`);if(r>0&&a.status===206||await V(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 V(Y,n,{flag:`a`})}}finally{e.releaseLock()}}else{let e=await a.text();await V(Y,e,{encoding:`utf8`,flag:`a`})}try{let e=await Pe(Y,`utf8`),t=JSON.parse(e);return Array.isArray(t)?t:[]}catch(e){if(n&&r>0){await Re(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=Ce(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 we({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 we({modelName:t,messages:e,addGenerationPrompt:!0})}else a=await we({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 Pe(q,`utf8`),t=JSON.parse(e);if(Array.isArray(t?.models))return r={models:t.models},t.models}catch{}let e=(await x(ke.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=Vt.map(e=>e.id),i=[...new Set([...n,...t])];i.includes(`onnx-community/Qwen3-0.6B-ONNX`)||i.unshift(Bt);let a=new Map(Vt.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 Ne(B.dirname(q),{recursive:!0}),await V(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 Fe(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 Ut(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 Wt(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 Ut(t.slice(1,-1))}return Ut(t)}function Gt(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:Wt(`{${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:Ut(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 Kt(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 qt=null;function Jt(){return qt||=Ht(),qt}async function Yt(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||Jt(),f=Kt(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=Gt(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}}}kt(Yt);function Xt(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 Zt(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 Qt(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 $t=Oe(import.meta.url),en=B.dirname($t),tn=Te(import.meta.url),nn=`.llamafile`,rn=parseInt(H.env.LLAMAFILE_CTX_SIZE||`8192`,10),an=new Set([`localhost`,`127.0.0.1`,`::1`]),X=new Set;function on(e,t){if(!(e.exitCode!==null||e.signalCode!==null||e.killed)){if(H.platform===`win32`){if(typeof e.pid==`number`)try{let t=tn("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{H.kill(-e.pid,`SIGKILL`)}catch{}try{H.kill(e.pid,`SIGKILL`)}catch{}}}catch{}}}function Z(){for(let e of X)try{e.killSync()}catch{}X.clear()}let sn=!1;function cn(){sn||(sn=!0,H.on(`exit`,()=>{Z()}),H.on(`SIGINT`,()=>{Z()}),H.on(`SIGTERM`,()=>{Z()}),H.platform!==`win32`&&H.on(`SIGHUP`,()=>{Z()}))}cn();function ln(e){return e===`server`?`server`:`cli`}function un(e){let t=e.trim().toLowerCase();return an.has(t)?!0:Ve(t)===4?t.startsWith(`127.`):Ve(t)===6&&t===`::1`}function dn(e){let t=(typeof e==`string`?e.trim():``)||`127.0.0.1`;if(H.env.LLAMAFILE_ALLOW_NON_LOOPBACK!==`true`&&!un(t))throw Error(`Unsafe host '${t}'. Only loopback hosts are allowed unless LLAMAFILE_ALLOW_NON_LOOPBACK=true.`);return t}function fn(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 pn(e){return typeof e==`boolean`?e:typeof e!=`string`||e!==`false`}function mn(e){let t={...e};return delete t.llamafile,t}function hn(e){let t=mn(e);return delete t.stream,delete t.stream_options,t}function gn(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 _n(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=gn(t.content).trim();i&&n.push(`${r}: ${i}`)}return n.length===0?``:(n.push(`ASSISTANT:`),n.join(`
|
|
18
|
-
|
|
19
|
-
`))}function vn(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 yn(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:Lt(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:Rt(r[2]?.trim()||``)}:null}function bn(){let e=new Map,t=new Map;function n(e,t){let n={child:e,runDetached:t,killSync:()=>on(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=[B.resolve(en,`../../../assets/cache/llamafile`),B.resolve(en,`../../../../assets/cache/llamafile`),B.resolve(H.cwd(),`assets/cache/llamafile`)],t=``;for(let n of e)try{if((await Le(n)).isDirectory()){t=n;break}}catch{}if(!t)throw Error(`Could not locate assets/cache/llamafile directory. Tried: ${e.join(`, `)}`);return(await Fe(t,{withFileTypes:!0})).filter(e=>e.isFile()&&e.name.endsWith(nn)).map(e=>{let n=e.name;return{fileName:n,id:n.slice(0,-10),absolutePath:B.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=B.basename(n),o=a.endsWith(nn)?a.slice(0,-10):a,s=t.find(e=>e.id===n||e.fileName===n||e.fileName===a||e.id===o||e.fileName===`${o}${nn}`);if(!s)throw Error(`Model '${n}' not found under assets/cache/llamafile (*.llamafile).`);return s}function a(e,t){return Ft(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():``)||Ft(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:ln(a.mode??t),host:dn(a.host??n),port:fn(a.port??r),offline:pn(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]`),je(`/bin/sh`,[`-c`,`exec "$0" "$@"`,e,...t],{cwd:n.cwd,env:n.env,stdio:[`ignore`,`pipe`,`pipe`],detached:n.detached})):je(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(H.platform===`win32`||!l(t))throw t;return r&&console.warn(`[Proxy] Direct exec failed with ENOEXEC for ${B.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=H.platform!==`win32`,i=await u(e,[`--help`],{cwd:B.dirname(e),env:{...H.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 ${B.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 Me(l,Ee.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=_n(hn(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(rn),`--cli`,`-p`,m];s.offline&&await d(l,c)?g.unshift(`--offline`):s.offline&&c&&console.log(`[Proxy] Skipping unsupported --offline flag for ${B.basename(l)}.`);let _,v=H.platform!==`win32`;try{_=await u(l,g,{cwd:B.dirname(l),env:{...H.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 on(_,v),Error(`Request already closed or aborted`);if(!_.stdout||!_.stderr)throw on(_,v),Error(`Failed to setup child process streams`);let y=``,b=``,x=``,S=!1,C=!1,w=null,T=vn(m),E=()=>{w&&=(clearTimeout(w),null)},D=(e=`SIGTERM`)=>{if(!(_.exitCode!==null||_.signalCode!==null||_.killed)){if(e===`SIGKILL`){on(_,v);return}if(H.platform===`win32`){if(typeof _.pid!=`number`)return;try{let e=tn("node:child_process");if(typeof e.execFileSync==`function`){e.execFileSync(`taskkill`,[`/PID`,String(_.pid),`/T`,`/F`],{stdio:`ignore`,windowsHide:!0});return}}catch{}try{je(`taskkill`,[`/PID`,String(_.pid),`/T`,`/F`],{stdio:`ignore`,windowsHide:!0}).unref()}catch{}return}try{if(v&&typeof _.pid==`number`)try{H.kill(-_.pid,e)}catch{}if(typeof _.pid==`number`)try{H.kill(_.pid,e)}catch{}}catch{}}},ee=()=>{if(!(_.exitCode!==null||_.signalCode!==null||_.killed)){if(H.platform===`win32`){D(`SIGKILL`);return}D(`SIGTERM`),!w&&(w=setTimeout(()=>{_.exitCode!==null||_.signalCode!==null||_.killed||D(`SIGKILL`)},500))}},O=()=>{e.off(`aborted`,k),e.off(`close`,k),e.socket.off(`close`,k),t.off(`close`,k)},k=()=>{C||(C=!0,ee())};e.once(`aborted`,k),e.once(`close`,k),e.socket.once(`close`,k),t.once(`close`,k);let A=o(f,k);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&&Xt(t,s.model,r),x+=r}),_.stderr.on(`data`,e=>{y+=e.toString(`utf8`)}),_.on(`close`,n=>{if(O(),A(),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=yn(x.trim());if(i){Zt(t,s.model,i),Qt(t,s.model,`tool_calls`),t.end(),e();return}r&&!C&&!t.writableEnded&&Xt(t,s.model,r),Qt(t,s.model),t.end(),e()}),_.on(`error`,n=>{if(S=!0,O(),A(),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(O(),A(),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=yn(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,O(),A(),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 xn=null;function Sn(){return xn||=bn(),xn}async function Cn(t){let{model:n,messages:r,maxTokens:i=8192,verbose:a=!1,onToken:o,abortSignal:s,service:c}=t,l=c||Sn(),u=new Be,d=new Be,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 Be,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))})})}jt(Cn);async function wn(e,t,n,r={}){let i=[],a=[];for(let o of n)try{r.onStep?.(o);let s=Tn(o.input||{},a,n),c=await v(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 Tn(e,t,n){if(e&&typeof e==`object`){if(Array.isArray(e))return e.map(e=>Tn(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 En(i)}let r={};for(let[i,a]of Object.entries(e))r[i]=Tn(a,t,n);return r}return e}function En(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 Dn(e=`database/agent.db`){if(Q)return Q;let t=new He(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=L(t),Q}function On(){Q&&=(Q.db.close(),null)}var kn=class{kind=`file`;name;_path;constructor(e){this._path=e,this.name=B.basename(e)}async getFile(){let e=await Pe(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(ze.from(t,`utf8`)):t instanceof Uint8Array?e.push(ze.from(t)):e.push(ze.from(new Uint8Array(t)))},async close(){let n=ze.concat(e);await V(t,n)}}}},An=class e{kind=`directory`;name;_path;constructor(e){this._path=e,this.name=B.basename(e)||e}async getDirectoryHandle(t,n){let r=B.join(this._path,t);if(n?.create)await Ne(r,{recursive:!0});else if(!De(r)){let e=Error(`NotFoundError: ${r} does not exist`);throw e.name=`NotFoundError`,e}return new e(r)}async getFileHandle(e,t){let n=B.join(this._path,e);if(t?.create)De(n)||await V(n,``);else if(!De(n)){let e=Error(`NotFoundError: ${n} does not exist`);throw e.name=`NotFoundError`,e}return new kn(n)}async*entries(){let t;try{t=await Fe(this._path)}catch{return}for(let n of t){let t=B.join(this._path,n);try{(await Le(t)).isDirectory()?yield[n,new e(t)]:yield[n,new kn(t)]}catch{}}}async removeEntry(e,t){await Ie(B.join(this._path,e),{recursive:t?.recursive??!1,force:!0})}};function jn(e){f(new An(e))}globalThis.__setStorageRootFromPath=jn,N(Ue),kt(Yt),jt(Cn);export{me as BROWSER_ONLY_TOOLS,ae as CONFIG_KEYS,t as DEFAULT_BUILTIN_PROFILE,oe as DEFAULT_MAX_TOKENS,ie as DEFAULT_SERVER_GROUP_ID,An as NodeFsDirectoryHandle,kn as NodeFsFileHandle,w as TOOL_DEFINITIONS,Z as cleanupAllLlamafileProcesses,On as closeSqliteDatabase,Ht as createTransformersRuntimeService,te as discoverSkills,y as executeDetectLanguage,b as executeEmbedText,ye as executeNativeAiTask,Yt as executeNodeTransformersCompletion,O as executeProofreadText,D as executeRewriteText,S as executeSummarizeText,v as executeTool,wn as executeToolChain,x as executeTranslateText,h as executeWriteText,pe as filterHeadlessTools,re as getAvailableProviders,ue as getConfig,R as getContextLimit,ce as getDb,ne as getDefaultProvider,F as getModelMaxTokens,P as getProvider,l as getRecentMessages,o as getStorageRoot,Mt as handleInvoke,s as invalidateStorageRoot,he as isHeadlessMode,le as isSqliteDatabase,ve as isToolHeadlessSafe,T as loadDeclarativeTools,_ as loadSkill,Ue as nativeBashExecutor,Dn as openSqliteDatabase,p as post,se as resetDB,C as saveMessage,c as setConfig,I as setDB,N as setHeadlessBashExecutor,de as setHeadlessMode,j as setNativeAiTaskHandler,M as setPostHandler,f as setStorageRoot,jn as setStorageRootFromPath,L as wrapSqliteDatabase};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e}from"./chunk-Cx0FUKuw2.js";export{e as getMemoryOpfsRoot};
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import{C as e,b as t,c as n,r}from"./chunk-BkKN8FNP.js";import{i}from"./chunk-DFLqhyP_.js";import{t as a}from"./chunk-Dhh0lHO62.js";let o=!1;const s=new Set([`ask_user`,`attach_file_to_chat`,`clear_chat`,`create_room`,`invite_to_room`,`leave_room`,`list_components`,`list_room_members`,`open_file`,`render_component`,`send_file`,`send_notification`,`show_toast`,`spawn_subagent`]);function c(e){return!s.has(e)}function l(e){return e.filter(e=>!s.has(e.name))}function u(){return o}function d(e){o=e}function f(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 p(t){let n=(t||``).toLowerCase(),r=e.getModelInfo(n);if(r){let e=r.supportsImageInput===!0||r.routesByRequestFeatures===!0,t=r.supportsAudioInput===!0||r.routesByRequestFeatures===!0,n=r.supportsVideoInput===!0||r.routesByRequestFeatures===!0,i=r.supportsDocumentInput===!0||r.routesByRequestFeatures===!0;if(r.supportsImageInput!==void 0||r.supportsAudioInput!==void 0||r.supportsVideoInput!==void 0||r.supportsDocumentInput!==void 0||r.routesByRequestFeatures)return{images:e,audio:t,video:n,documents:i,routerByFeatures:!!r.routesByRequestFeatures,source:`metadata`}}let i=[`gpt-4o`,`gpt-4.1`,`claude-3`,`claude-4`,`claude-sonnet`,`claude-haiku`,`claude-opus`,`gemini`,`llava`,`qwen-vl`,`pixtral`].some(e=>n.includes(e)),a=n.includes(`claude-3-5`)||n.includes(`claude-3.5`)||n.includes(`claude-3-7`)||n.includes(`claude-3.7`)||n.includes(`claude-4`)||n.includes(`gemini`)||/claude-(?:sonnet|haiku|opus)-\d/.test(n);return i?{images:!0,audio:n.includes(`omni`)||n.includes(`audio`),video:n.includes(`omni`)||n.includes(`video`),documents:a,routerByFeatures:n===`openrouter/free`,source:`heuristic`}:{images:!1,audio:!1,video:!1,documents:!1,routerByFeatures:n===`openrouter/free`,source:`unknown`}}const m=[/<\|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 h(e){for(let t of m)if(t.test(e))return!0;return!1}function g(e){let t=String(e||``),n=t;for(let e of m)t=t.replace(e,``);return t!==n&&(t=t.replace(/^[ \t]+$/gm,``),t=t.replace(/\n{3,}/g,`
|
|
2
|
-
|
|
3
|
-
`)),t}function _(e,t){let n=g(e);return n!==e&&h(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}const v=`shadow-claw-browser-models`,ee=16*1024*1024;function y(){return typeof caches<`u`&&typeof caches.open==`function`}function b(e){return`${e}?__sc_meta=1`}function te(e,t){return`${e}?__sc_chunk=${t}`}async function x(e,t=v){if(!y())return null;try{let n=await(await caches.open(t)).match(b(e));if(!n?.body)return null;let r=await n.text();return JSON.parse(r)}catch{return null}}async function ne(e,t,n=v){if(y())try{await(await caches.open(n)).put(b(e),new Response(JSON.stringify(t),{headers:{"Content-Type":`application/json`}}))}catch(e){console.error(`writePartialMeta error:`,e)}}async function S(e,t,n,r=v){if(y())try{await(await caches.open(r)).put(te(e,t),new Response(new Blob([n]),{headers:{"Content-Type":`application/octet-stream`,"Content-Length":String(n.byteLength)}}))}catch(e){console.error(`flushChunkToCache error:`,e)}}function C(e,t,n=v){let r=0,i=null;return new ReadableStream({async pull(a){if(i){let{done:e,value:t}=await i.read();if(!e){a.enqueue(t);return}i=null,r++}if(r>=t.chunks){a.close();return}try{let t=await(await caches.open(n)).match(te(e,r));if(!t?.body){a.error(Error(`ModelCache: missing cache chunk ${r} for ${e}`));return}i=t.body.getReader();let{done:o,value:s}=await i.read();o?(i=null,r++):a.enqueue(s)}catch(e){a.error(e)}},cancel(){i&&=(i.cancel(),null)}})}function re(e,t){return new Promise((n,r)=>{if(t?.aborted){r(new DOMException(`Aborted`,`AbortError`));return}let i=setTimeout(()=>{t?.removeEventListener(`abort`,a),n()},e),a=()=>{clearTimeout(i),r(new DOMException(`Aborted`,`AbortError`))};t?.addEventListener(`abort`,a,{once:!0})})}function ie(e){return Math.min(15e3,1e3*2**(Math.max(1,e)-1))}async function ae(e,t,n,r,i=globalThis.fetch?globalThis.fetch.bind(globalThis):fetch){let a=r?.cacheName??`shadow-claw-browser-models`,o=r?.chunkSize??16777216,s=r?.maxAttempts??6,c=r?.headers??{},l=y(),u=0,d=0,f=null,p=!1,m=e;if(l){let t=await x(e,a);t&&!t.complete&&(u=t.chunks,d=t.received,f=t.total,p=t.acceptsRanges,t.resolvedUrl&&(m=t.resolvedUrl))}let h=null,g=null;for(let e=1;e<=s;e++){if(n?.aborted)throw new DOMException(`Aborted`,`AbortError`);let t={...c};d>0&&p&&(t.Range=`bytes=${d}-`);try{g=await i(m,{signal:n,headers:t})}catch(t){if(n?.aborted||t?.name===`AbortError`)throw t;if(h=t,e<s){await re(ie(e),n);continue}break}if(g.url&&(m=g.url),t.Range&&g.status===200&&(u=0,d=0),g.status!==200&&g.status!==206){if(h=Error(`ModelCache: Failed to fetch model from '${m}': ${g.status} ${g.statusText}`),g.status>=500&&e<s){await re(ie(e),n);continue}throw h}if(!g.body)throw Error(`ModelCache: Failed to fetch model from '${m}': No response body`);h=null;break}if(h||!g||!g.body)throw Error(`ModelCache: failed to download model from '${e}' after ${s} attempts: ${h?.message??String(h)}`);if(f==null)if(p=g.status===206||g.headers.get(`accept-ranges`)===`bytes`,g.status===206){let e=g.headers.get(`content-range`)?.match(/\/\s*(\d+)\s*$/);e&&(f=Number(e[1]))}else{let e=g.headers.get(`content-length`),t=e?Number(e):NaN;f=Number.isFinite(t)&&t>0?t:null}l&&await ne(e,{chunks:u,received:d,total:f,acceptsRanges:p,complete:!1,resolvedUrl:m},a);let _=g.body;return new ReadableStream({async start(r){try{if(l&&u>0){let i=await caches.open(a),o=0;for(let a=0;a<u;a++){if(n?.aborted)throw new DOMException(`Aborted`,`AbortError`);let s=await i.match(te(e,a));if(s?.body){let e=s.body.getReader();for(;;){let{done:n,value:i}=await e.read();if(n)break;r.enqueue(i),o+=i.byteLength,t?.(o,f)}}else if(s&&typeof s.arrayBuffer==`function`){let e=await s.arrayBuffer(),n=new Uint8Array(e);r.enqueue(n),o+=n.byteLength,t?.(o,f)}}}let i=[],s=0,c=d;async function h(){if(s===0)return;let t=new Uint8Array(s),n=0;for(let e of i)t.set(e,n),n+=e.byteLength;i=[],s=0,l?(await S(e,u,t,a),u++,d+=t.byteLength,await ne(e,{chunks:u,received:d,total:f,acceptsRanges:p,complete:!1,resolvedUrl:m},a)):(u++,d+=t.byteLength)}let g=_.getReader();try{for(;;){if(n?.aborted)throw await g.cancel(),new DOMException(`Aborted`,`AbortError`);let{done:e,value:a}=await g.read();if(e)break;r.enqueue(a),i.push(a),s+=a.byteLength,c+=a.byteLength,t?.(c,f),s>=o&&await h()}await h(),l&&await ne(e,{chunks:u,received:d,total:f,acceptsRanges:p,complete:!0,resolvedUrl:m},a),t?.(c,f,!0),r.close()}catch(e){try{await g.cancel()}catch{}throw e}}catch(e){r.error(e)}}})}async function oe(e,t,n,r,i=globalThis.fetch?globalThis.fetch.bind(globalThis):fetch){let a=r?.cacheName??`shadow-claw-browser-models`;try{let n=await x(e,a);if(n?.complete)return t?.(n.received,n.received,!0),C(e,n,a)}catch(e){console.warn(`loadModelStream cache check failed, falling back to download:`,e)}return ae(e,t,n,r,i)}let w=null;function se(e){w=e}function T(){w=null}function ce(e=globalThis.fetch?globalThis.fetch.bind(globalThis):fetch,t,n){let r=t?.cacheName??`shadow-claw-browser-models`;return async function(i,a){let o=typeof i==`string`?i:i instanceof URL?i.toString():i.url,s=(a?.method||(typeof i==`object`&&`method`in i?i.method:`GET`)||`GET`).toUpperCase(),c=a?.headers||(typeof i==`object`&&`headers`in i?i.headers:void 0);if(c instanceof Headers?c.has(`Range`)||c.has(`range`):c&&typeof c==`object`&&(`Range`in c||`range`in c))return e(i,{...a||{},cache:`no-store`});if(s!==`GET`||!y())return e(i,a);try{let i=await x(o,r);if(i?.complete){n?.(o,i.received,i.received,!0),w?.(o,i.received,i.received,!0);let e=C(o,i,r);return new Response(e,{status:200,statusText:`OK`,headers:{"Content-Type":`application/octet-stream`,...i.total!=null&&i.total>0?{"Content-Length":String(i.total)}:{}}})}let s=await oe(o,(e,t,r)=>{n?.(o,e,t,!!r),w?.(o,e,t,!!r)},a?.signal??void 0,{cacheName:r,...t||{}},e),c=(await x(o,r))?.total;return new Response(s,{status:200,statusText:`OK`,headers:{"Content-Type":`application/octet-stream`,...c!=null&&c>0?{"Content-Length":String(c)}:{}}})}catch(t){return console.warn(`[ModelCacheFetch] Cache stream failed for ${o}, falling back to native fetch:`,t),e(i,a)}}}var le=Object.defineProperty,ue=(e,t,n)=>t in e?le(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,de=(e,t,n)=>(ue(e,typeof t==`symbol`?t:t+``,n),n),E=Object.freeze({Text:`Text`,NumericLiteral:`NumericLiteral`,StringLiteral:`StringLiteral`,Identifier:`Identifier`,Equals:`Equals`,OpenParen:`OpenParen`,CloseParen:`CloseParen`,OpenStatement:`OpenStatement`,CloseStatement:`CloseStatement`,OpenExpression:`OpenExpression`,CloseExpression:`CloseExpression`,OpenSquareBracket:`OpenSquareBracket`,CloseSquareBracket:`CloseSquareBracket`,OpenCurlyBracket:`OpenCurlyBracket`,CloseCurlyBracket:`CloseCurlyBracket`,Comma:`Comma`,Dot:`Dot`,Colon:`Colon`,Pipe:`Pipe`,CallOperator:`CallOperator`,AdditiveBinaryOperator:`AdditiveBinaryOperator`,MultiplicativeBinaryOperator:`MultiplicativeBinaryOperator`,ComparisonBinaryOperator:`ComparisonBinaryOperator`,UnaryOperator:`UnaryOperator`,Comment:`Comment`}),D=class{constructor(e,t){this.value=e,this.type=t}};function fe(e){return/\w/.test(e)}function O(e){return/[0-9]/.test(e)}function pe(e){return/\s/.test(e)}var me=[[`{%`,E.OpenStatement],[`%}`,E.CloseStatement],[`{{`,E.OpenExpression],[`}}`,E.CloseExpression],[`(`,E.OpenParen],[`)`,E.CloseParen],[`{`,E.OpenCurlyBracket],[`}`,E.CloseCurlyBracket],[`[`,E.OpenSquareBracket],[`]`,E.CloseSquareBracket],[`,`,E.Comma],[`.`,E.Dot],[`:`,E.Colon],[`|`,E.Pipe],[`<=`,E.ComparisonBinaryOperator],[`>=`,E.ComparisonBinaryOperator],[`==`,E.ComparisonBinaryOperator],[`!=`,E.ComparisonBinaryOperator],[`<`,E.ComparisonBinaryOperator],[`>`,E.ComparisonBinaryOperator],[`+`,E.AdditiveBinaryOperator],[`-`,E.AdditiveBinaryOperator],[`~`,E.AdditiveBinaryOperator],[`*`,E.MultiplicativeBinaryOperator],[`/`,E.MultiplicativeBinaryOperator],[`%`,E.MultiplicativeBinaryOperator],[`=`,E.Equals]],he=new Map([[`n`,`
|
|
4
|
-
`],[`t`,` `],[`r`,`\r`],[`b`,`\b`],[`f`,`\f`],[`v`,`\v`],[`'`,`'`],[`"`,`"`],[`\\`,`\\`]]);function ge(e,t={}){return e.endsWith(`
|
|
5
|
-
`)&&(e=e.slice(0,-1)),t.lstrip_blocks&&(e=e.replace(/^[ \t]*({[#%-])/gm,`$1`)),t.trim_blocks&&(e=e.replace(/([#%-]})\n/g,`$1`)),e.replace(/(\s*){%(-?)\s*(?:end)?generation\s*(-?)%}(\s*)/gs,(e,t,n,r,i)=>(n?``:t)+(r?``:i))}function _e(e,t={}){let n=[],r=ge(e,t),i=0,a=0,o=e=>{let t=``;for(;e(r[i]);){if(r[i]===`\\`){if(++i,i>=r.length)throw SyntaxError(`Unexpected end of input`);let e=r[i++],n=he.get(e);if(n===void 0)throw SyntaxError(`Unexpected escaped character: ${e}`);t+=n;continue}if(t+=r[i++],i>=r.length)throw SyntaxError(`Unexpected end of input`)}return t},s=()=>{let e=n.at(-1);e&&e.type===E.Text&&(e.value=e.value.trimEnd(),e.value===``&&n.pop())},c=()=>{for(;i<r.length&&pe(r[i]);)++i};main:for(;i<r.length;){let e=n.at(-1)?.type;if(e===void 0||e===E.CloseStatement||e===E.CloseExpression||e===E.Comment){let e=``;for(;i<r.length&&!(r[i]===`{`&&(r[i+1]===`%`||r[i+1]===`{`||r[i+1]===`#`));)e+=r[i++];if(e.length>0){n.push(new D(e,E.Text));continue}}if(r[i]===`{`&&r[i+1]===`#`){i+=2;let e=r[i]===`-`;e&&++i;let t=``;for(;r[i]!==`#`||r[i+1]!==`}`;){if(i+2>=r.length)throw SyntaxError(`Missing end of comment tag`);t+=r[i++]}let a=t.endsWith(`-`);a&&(t=t.slice(0,-1)),e&&s(),n.push(new D(t,E.Comment)),i+=2,a&&c();continue}if(r.slice(i,i+3)===`{%-`){s(),n.push(new D(`{%`,E.OpenStatement)),i+=3;continue}if(r.slice(i,i+3)===`{{-`){s(),n.push(new D(`{{`,E.OpenExpression)),a=0,i+=3;continue}if(o(pe),r.slice(i,i+3)===`-%}`){n.push(new D(`%}`,E.CloseStatement)),i+=3,c();continue}if(r.slice(i,i+3)===`-}}`){n.push(new D(`}}`,E.CloseExpression)),i+=3,c();continue}let t=r[i];if(t===`-`||t===`+`){let e=n.at(-1)?.type;if(e===E.Text||e===void 0)throw SyntaxError(`Unexpected character: ${t}`);switch(e){case E.Identifier:case E.NumericLiteral:case E.StringLiteral:case E.CloseParen:case E.CloseSquareBracket:break;default:{++i;let e=o(O);n.push(new D(`${t}${e}`,e.length>0?E.NumericLiteral:E.UnaryOperator));continue}}}for(let[e,t]of me)if(!(e===`}}`&&a>0)&&r.slice(i,i+e.length)===e){n.push(new D(e,t)),t===E.OpenExpression?a=0:t===E.OpenCurlyBracket?++a:t===E.CloseCurlyBracket&&--a,i+=e.length;continue main}if(t===`'`||t===`"`){++i;let e=o(e=>e!==t);n.push(new D(e,E.StringLiteral)),++i;continue}if(O(t)){let e=o(O);if(r[i]===`.`&&O(r[i+1])){++i;let t=o(O);e=`${e}.${t}`}n.push(new D(e,E.NumericLiteral));continue}if(fe(t)){let e=o(fe);n.push(new D(e,E.Identifier));continue}throw SyntaxError(`Unexpected character: ${t}`)}return n}var k=class{type=`Statement`},ve=class extends k{constructor(e){super(),this.body=e}type=`Program`},ye=class extends k{constructor(e,t,n){super(),this.test=e,this.body=t,this.alternate=n}type=`If`},be=class extends k{constructor(e,t,n,r){super(),this.loopvar=e,this.iterable=t,this.body=n,this.defaultBlock=r}type=`For`},xe=class extends k{type=`Break`},Se=class extends k{type=`Continue`},Ce=class extends k{constructor(e,t,n){super(),this.assignee=e,this.value=t,this.body=n}type=`Set`},we=class extends k{constructor(e,t,n){super(),this.name=e,this.args=t,this.body=n}type=`Macro`},Te=class extends k{constructor(e){super(),this.value=e}type=`Comment`},A=class extends k{type=`Expression`},Ee=class extends A{constructor(e,t,n){super(),this.object=e,this.property=t,this.computed=n}type=`MemberExpression`},De=class extends A{constructor(e,t){super(),this.callee=e,this.args=t}type=`CallExpression`},j=class extends A{constructor(e){super(),this.value=e}type=`Identifier`},M=class extends A{constructor(e){super(),this.value=e}type=`Literal`},Oe=class extends M{type=`IntegerLiteral`},ke=class extends M{type=`FloatLiteral`},Ae=class extends M{type=`StringLiteral`},je=class extends M{type=`ArrayLiteral`},Me=class extends M{type=`TupleLiteral`},Ne=class extends M{type=`ObjectLiteral`},N=class extends A{constructor(e,t,n){super(),this.operator=e,this.left=t,this.right=n}type=`BinaryExpression`},Pe=class extends A{constructor(e,t){super(),this.operand=e,this.filter=t}type=`FilterExpression`},Fe=class extends k{constructor(e,t){super(),this.filter=e,this.body=t}type=`FilterStatement`},Ie=class extends A{constructor(e,t){super(),this.lhs=e,this.test=t}type=`SelectExpression`},Le=class extends A{constructor(e,t,n){super(),this.operand=e,this.negate=t,this.test=n}type=`TestExpression`},Re=class extends A{constructor(e,t){super(),this.operator=e,this.argument=t}type=`UnaryExpression`},ze=class extends A{constructor(e=void 0,t=void 0,n=void 0){super(),this.start=e,this.stop=t,this.step=n}type=`SliceExpression`},Be=class extends A{constructor(e,t){super(),this.key=e,this.value=t}type=`KeywordArgumentExpression`},Ve=class extends A{constructor(e){super(),this.argument=e}type=`SpreadExpression`},He=class extends k{constructor(e,t,n){super(),this.call=e,this.callerArgs=t,this.body=n}type=`CallStatement`},Ue=class extends A{constructor(e,t,n){super(),this.condition=e,this.trueExpr=t,this.falseExpr=n}type=`Ternary`};function We(e){let t=new ve([]),n=0;function r(t,r){let i=e[n++];if(!i||i.type!==t)throw Error(`Parser Error: ${r}. ${i.type} !== ${t}.`);return i}function i(e){if(!c(e))throw SyntaxError(`Expected ${e}`);++n}function a(){switch(e[n].type){case E.Comment:return new Te(e[n++].value);case E.Text:return l();case E.OpenStatement:return u();case E.OpenExpression:return d();default:throw SyntaxError(`Unexpected token type: ${e[n].type}`)}}function o(...t){return n+t.length<=e.length&&t.every((t,r)=>t===e[n+r].type)}function s(...t){return e[n]?.type===E.OpenStatement&&e[n+1]?.type===E.Identifier&&t.includes(e[n+1]?.value)}function c(...t){return n+t.length<=e.length&&t.every((t,r)=>e[n+r].type===`Identifier`&&t===e[n+r].value)}function l(){return new Ae(r(E.Text,`Expected text token`).value)}function u(){if(r(E.OpenStatement,`Expected opening statement token`),e[n].type!==E.Identifier)throw SyntaxError(`Unknown statement, got ${e[n].type}`);let t=e[n].value,c;switch(t){case`set`:++n,c=f();break;case`if`:++n,c=p(),r(E.OpenStatement,`Expected {% token`),i(`endif`),r(E.CloseStatement,`Expected %} token`);break;case`macro`:++n,c=m(),r(E.OpenStatement,`Expected {% token`),i(`endmacro`),r(E.CloseStatement,`Expected %} token`);break;case`for`:++n,c=g(),r(E.OpenStatement,`Expected {% token`),i(`endfor`),r(E.CloseStatement,`Expected %} token`);break;case`call`:{++n;let e=null;o(E.OpenParen)&&(e=C());let t=T();if(t.type!==`Identifier`)throw SyntaxError(`Expected identifier following call statement`);let l=C();r(E.CloseStatement,`Expected closing statement token`);let u=[];for(;!s(`endcall`);)u.push(a());r(E.OpenStatement,`Expected '{%'`),i(`endcall`),r(E.CloseStatement,`Expected closing statement token`),c=new He(new De(t,l),e,u);break}case`break`:++n,r(E.CloseStatement,`Expected closing statement token`),c=new xe;break;case`continue`:++n,r(E.CloseStatement,`Expected closing statement token`),c=new Se;break;case`filter`:{++n;let e=T();e instanceof j&&o(E.OpenParen)&&(e=S(e)),r(E.CloseStatement,`Expected closing statement token`);let t=[];for(;!s(`endfilter`);)t.push(a());r(E.OpenStatement,`Expected '{%'`),i(`endfilter`),r(E.CloseStatement,`Expected '%}'`),c=new Fe(e,t);break}default:throw SyntaxError(`Unknown statement type: ${t}`)}return c}function d(){r(E.OpenExpression,`Expected opening expression token`);let e=_();return r(E.CloseExpression,`Expected closing expression token`),e}function f(){let e=h(),t=null,c=[];if(o(E.Equals))++n,t=h();else{for(r(E.CloseStatement,`Expected %} token`);!s(`endset`);)c.push(a());r(E.OpenStatement,`Expected {% token`),i(`endset`)}return r(E.CloseStatement,`Expected closing statement token`),new Ce(e,t,c)}function p(){let e=_();r(E.CloseStatement,`Expected closing statement token`);let t=[],i=[];for(;!s(`elif`,`else`,`endif`);)t.push(a());if(s(`elif`)){++n,++n;let e=p();i.push(e)}else if(s(`else`))for(++n,++n,r(E.CloseStatement,`Expected closing statement token`);!s(`endif`);)i.push(a());return new ye(e,t,i)}function m(){let e=T();if(e.type!==`Identifier`)throw SyntaxError(`Expected identifier following macro statement`);let t=C();r(E.CloseStatement,`Expected closing statement token`);let n=[];for(;!s(`endmacro`);)n.push(a());return new we(e,t,n)}function h(e=!1){let t=e?T:_,r=[t()],i=o(E.Comma);for(;i&&(++n,r.push(t()),o(E.Comma)););return i?new Me(r):r[0]}function g(){let e=h(!0);if(!(e instanceof j||e instanceof Me))throw SyntaxError(`Expected identifier/tuple for the loop variable, got ${e.type} instead`);if(!c(`in`))throw SyntaxError("Expected `in` keyword following loop variable");++n;let t=_();r(E.CloseStatement,`Expected closing statement token`);let i=[];for(;!s(`endfor`,`else`);)i.push(a());let o=[];if(s(`else`))for(++n,++n,r(E.CloseStatement,`Expected closing statement token`);!s(`endfor`);)o.push(a());return new be(e,t,i,o)}function _(){return v()}function v(){let e=ee();if(c(`if`)){++n;let t=ee();return c(`else`)?(++n,new Ue(t,e,v())):new Ie(e,t)}return e}function ee(){let t=y();for(;c(`or`);){let r=e[n];++n;let i=y();t=new N(r,t,i)}return t}function y(){let t=b();for(;c(`and`);){let r=e[n];++n;let i=b();t=new N(r,t,i)}return t}function b(){let t;for(;c(`not`);){let r=e[n];++n,t=new Re(r,b())}return t??te()}function te(){let t=x();for(;;){let r;if(c(`not`,`in`))r=new D(`not in`,E.Identifier),n+=2;else if(c(`in`))r=e[n++];else if(o(E.ComparisonBinaryOperator))r=e[n++];else break;let i=x();t=new N(r,t,i)}return t}function x(){let t=oe();for(;o(E.AdditiveBinaryOperator);){let r=e[n];++n;let i=oe();t=new N(r,t,i)}return t}function ne(){let e=ae(T());return o(E.OpenParen)?S(e):e}function S(e){let t=new De(e,C());return t=ae(t),o(E.OpenParen)&&(t=S(t)),t}function C(){r(E.OpenParen,`Expected opening parenthesis for arguments list`);let e=re();return r(E.CloseParen,`Expected closing parenthesis for arguments list`),e}function re(){let t=[];for(;!o(E.CloseParen);){let r;if(e[n].type===E.MultiplicativeBinaryOperator&&e[n].value===`*`)++n,r=new Ve(_());else if(r=_(),o(E.Equals)){if(++n,!(r instanceof j))throw SyntaxError(`Expected identifier for keyword argument`);let e=_();r=new Be(r,e)}t.push(r),o(E.Comma)&&++n}return t}function ie(){let e=[],t=!1;for(;!o(E.CloseSquareBracket);)o(E.Colon)?(e.push(void 0),++n,t=!0):(e.push(_()),o(E.Colon)&&(++n,t=!0));if(e.length===0)throw SyntaxError(`Expected at least one argument for member/slice expression`);if(t){if(e.length>3)throw SyntaxError(`Expected 0-3 arguments for slice expression`);return new ze(...e)}return e[0]}function ae(t){for(;o(E.Dot)||o(E.OpenSquareBracket);){let i=e[n];++n;let a,o=i.type===E.OpenSquareBracket;if(o)a=ie(),r(E.CloseSquareBracket,`Expected closing square bracket`);else if(a=T(),a.type!==`Identifier`)throw SyntaxError(`Expected identifier following dot operator`);t=new Ee(t,a,o)}return t}function oe(){let t=w();for(;o(E.MultiplicativeBinaryOperator);){let r=e[n++],i=w();t=new N(r,t,i)}return t}function w(){let e=se();for(;c(`is`);){++n;let t=c(`not`);t&&++n;let r=T();if(!(r instanceof j))throw SyntaxError(`Expected identifier for the test`);e=new Le(e,t,r)}return e}function se(){let e=ne();for(;o(E.Pipe);){++n;let t=T();if(!(t instanceof j))throw SyntaxError(`Expected identifier for the filter`);o(E.OpenParen)&&(t=S(t)),e=new Pe(e,t)}return e}function T(){let t=e[n++];switch(t.type){case E.NumericLiteral:{let e=t.value;return e.includes(`.`)?new ke(Number(e)):new Oe(Number(e))}case E.StringLiteral:{let r=t.value;for(;o(E.StringLiteral);)r+=e[n++].value;return new Ae(r)}case E.Identifier:return new j(t.value);case E.OpenParen:{let e=h();return r(E.CloseParen,"Expected closing parenthesis, got ${tokens[current].type} instead."),e}case E.OpenSquareBracket:{let e=[];for(;!o(E.CloseSquareBracket);)e.push(_()),o(E.Comma)&&++n;return++n,new je(e)}case E.OpenCurlyBracket:{let e=new Map;for(;!o(E.CloseCurlyBracket);){let t=_();r(E.Colon,`Expected colon between key and value in object literal`);let i=_();e.set(t,i),o(E.Comma)&&++n}return++n,new Ne(e)}default:throw SyntaxError(`Unexpected token: ${t.type}`)}}for(;n<e.length;)t.body.push(a());return t}function Ge(e,t,n=1){if(t===void 0&&(t=e,e=0),n===0)throw Error(`range() step must not be zero`);let r=[];if(n>0)for(let i=e;i<t;i+=n)r.push(i);else for(let i=e;i>t;i+=n)r.push(i);return r}function Ke(e,t,n,r=1){let i=Math.sign(r);i>=0?(t=(t??=0)<0?Math.max(e.length+t,0):Math.min(t,e.length),n=(n??=e.length)<0?Math.max(e.length+n,0):Math.min(n,e.length)):(t=(t??=e.length-1)<0?Math.max(e.length+t,-1):Math.min(t,e.length-1),n=(n??=-1)<-1?Math.max(e.length+n,-1):Math.min(n,e.length-1));let a=[];for(let o=t;i*o<i*n;o+=r)a.push(e[o]);return a}function qe(e){return e.replace(/\b\w/g,e=>e.toUpperCase())}function Je(e){return Ye(new Date,e)}function Ye(e,t){let n=new Intl.DateTimeFormat(void 0,{month:`long`}),r=new Intl.DateTimeFormat(void 0,{month:`short`}),i=e=>e<10?`0`+e:e.toString();return t.replace(/%[YmdbBHM%]/g,t=>{switch(t){case`%Y`:return e.getFullYear().toString();case`%m`:return i(e.getMonth()+1);case`%d`:return i(e.getDate());case`%b`:return r.format(e);case`%B`:return n.format(e);case`%H`:return i(e.getHours());case`%M`:return i(e.getMinutes());case`%%`:return`%`;default:return t}})}function Xe(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function Ze(e,t,n,r){if(r===0)return e;let i=r==null||r<0?1/0:r,a=t.length===0?RegExp(`(?=)`,`gu`):new RegExp(Xe(t),`gu`);return e.replaceAll(a,e=>i>0?(--i,n):e)}var Qe=class extends Error{},$e=class extends Error{},et=new Map,P=class{type=`RuntimeValue`;value;get builtins(){return et}constructor(e=void 0){this.value=e}__bool__(){return new R(!!this.value)}toString(){return String(this.value)}},F=class extends P{type=`IntegerValue`},I=class extends P{type=`FloatValue`;toString(){return this.value%1==0?this.value.toFixed(1):this.value.toString()}},L=class extends P{type=`StringValue`;_builtins;get builtins(){return this._builtins??=new Map([[`upper`,new U(()=>new L(this.value.toUpperCase()))],[`lower`,new U(()=>new L(this.value.toLowerCase()))],[`strip`,new U(()=>new L(this.value.trim()))],[`title`,new U(()=>new L(qe(this.value)))],[`capitalize`,new U(()=>new L(this.value.charAt(0).toUpperCase()+this.value.slice(1)))],[`length`,new F(this.value.length)],[`rstrip`,new U(()=>new L(this.value.trimEnd()))],[`lstrip`,new U(()=>new L(this.value.trimStart()))],[`startswith`,new U(e=>{if(e.length===0)throw Error(`startswith() requires at least one argument`);let t=e[0];if(t instanceof L)return new R(this.value.startsWith(t.value));if(t instanceof H){for(let e of t.value){if(!(e instanceof L))throw Error(`startswith() tuple elements must be strings`);if(this.value.startsWith(e.value))return new R(!0)}return new R(!1)}throw Error(`startswith() argument must be a string or tuple of strings`)})],[`endswith`,new U(e=>{if(e.length===0)throw Error(`endswith() requires at least one argument`);let t=e[0];if(t instanceof L)return new R(this.value.endsWith(t.value));if(t instanceof H){for(let e of t.value){if(!(e instanceof L))throw Error(`endswith() tuple elements must be strings`);if(this.value.endsWith(e.value))return new R(!0)}return new R(!1)}throw Error(`endswith() argument must be a string or tuple of strings`)})],[`split`,new U(e=>{let t=e[0]??new W;if(!(t instanceof L||t instanceof W))throw Error(`sep argument must be a string or null`);let n=e[1]??new F(-1);if(!(n instanceof F))throw Error(`maxsplit argument must be a number`);let r=[];if(t instanceof W){let e=this.value.trimStart();for(let{0:t,index:i}of e.matchAll(/\S+/g)){if(n.value!==-1&&r.length>=n.value&&i!==void 0){r.push(t+e.slice(i+t.length));break}r.push(t)}}else{if(t.value===``)throw Error(`empty separator`);r=this.value.split(t.value),n.value!==-1&&r.length>n.value&&r.push(r.splice(n.value).join(t.value))}return new H(r.map(e=>new L(e)))})],[`replace`,new U(e=>{if(e.length<2)throw Error(`replace() requires at least two arguments`);let t=e[0],n=e[1];if(!(t instanceof L&&n instanceof L))throw Error(`replace() arguments must be strings`);let r;if(r=e.length>2?e[2].type===`KeywordArgumentsValue`?e[2].value.get(`count`)??new W:e[2]:new W,!(r instanceof F||r instanceof W))throw Error(`replace() count argument must be a number or null`);return new L(Ze(this.value,t.value,n.value,r.value))})]])}},R=class extends P{type=`BooleanValue`},tt=/[\x7f-\uffff]/g;function nt(e){return e.replace(tt,e=>`\\u`+e.charCodeAt(0).toString(16).padStart(4,`0`))}function z(e,t={},n=0,r=!0){let{indent:i=null,ensureAscii:a=!1,separators:o=null,sortKeys:s=!1}=t,c,l;switch(o?[c,l]=o:i?(c=`,`,l=`: `):(c=`, `,l=`: `),e.type){case`NullValue`:return`null`;case`UndefinedValue`:return r?`null`:`undefined`;case`IntegerValue`:case`FloatValue`:case`BooleanValue`:return JSON.stringify(e.value);case`StringValue`:{let t=JSON.stringify(e.value);return a&&(t=nt(t)),t}case`ArrayValue`:case`ObjectValue`:{let o=i?` `.repeat(i):``,u=`
|
|
6
|
-
`+o.repeat(n),d=u+o;if(e.type===`ArrayValue`){let a=e.value.map(e=>z(e,t,n+1,r));return i?`[${d}${a.join(`${c}${d}`)}${u}]`:`[${a.join(c)}]`}else{let o=Array.from(e.value.entries());s&&(o=o.sort(([e],[t])=>e.localeCompare(t)));let f=o.map(([e,o])=>{let s=JSON.stringify(e);a&&(s=nt(s));let c=`${s}${l}${z(o,t,n+1,r)}`;return i?`${d}${c}`:c});return i?`{${f.join(c)}${u}}`:`{${f.join(c)}}`}}default:throw Error(`Cannot convert to JSON: ${e.type}`)}}var B=class extends P{type=`ObjectValue`;_builtins;__bool__(){return new R(this.value.size>0)}get builtins(){return this._builtins??=new Map([[`get`,new U(([e,t])=>{if(!(e instanceof L))throw Error(`Object key must be a string: got ${e.type}`);return this.value.get(e.value)??t??new W})],[`items`,new U(()=>this.items())],[`keys`,new U(()=>this.keys())],[`values`,new U(()=>this.values())],[`dictsort`,new U(e=>{let t=new Map,n=e.filter(e=>e instanceof V?(t=e.value,!1):!0),r=n.at(0)??t.get(`case_sensitive`)??new R(!1);if(!(r instanceof R))throw Error(`case_sensitive must be a boolean`);let i=n.at(1)??t.get(`by`)??new L(`key`);if(!(i instanceof L))throw Error(`by must be a string`);if(![`key`,`value`].includes(i.value))throw Error(`by must be either 'key' or 'value'`);let a=n.at(2)??t.get(`reverse`)??new R(!1);if(!(a instanceof R))throw Error(`reverse must be a boolean`);return new H(Array.from(this.value.entries()).map(([e,t])=>new H([new L(e),t])).sort((e,t)=>{let n=i.value===`key`?0:1,o=e.value[n],s=t.value[n],c=st(o,s,r.value);return a.value?-c:c}))})]])}items(){return new H(Array.from(this.value.entries()).map(([e,t])=>new H([new L(e),t])))}keys(){return new H(Array.from(this.value.keys()).map(e=>new L(e)))}values(){return new H(Array.from(this.value.values()))}toString(){return z(this,{},0,!1)}},V=class extends B{type=`KeywordArgumentsValue`},H=class extends P{type=`ArrayValue`;_builtins;get builtins(){return this._builtins??=new Map([[`length`,new F(this.value.length)]])}__bool__(){return new R(this.value.length>0)}toString(){return z(this,{},0,!1)}},rt=class extends H{type=`TupleValue`},U=class extends P{type=`FunctionValue`},W=class extends P{type=`NullValue`},G=class extends P{type=`UndefinedValue`},it=class{constructor(e){this.parent=e}variables=new Map([[`namespace`,new U(e=>{if(e.length===0)return new B(new Map);if(e.length!==1||!(e[0]instanceof B))throw Error("`namespace` expects either zero arguments or a single object argument");return e[0]})]]);tests=it.TESTS;set(e,t){return this.declareVariable(e,lt(t))}declareVariable(e,t){if(this.variables.has(e))throw SyntaxError(`Variable already declared: ${e}`);return this.variables.set(e,t),t}setVariable(e,t){return this.variables.set(e,t),t}resolve(e){if(this.variables.has(e))return this;if(this.parent)return this.parent.resolve(e);throw Error(`Unknown variable: ${e}`)}lookupVariable(e){try{return this.resolve(e).variables.get(e)??new G}catch{return new G}}},K=it;de(K,`TESTS`,new Map([[`boolean`,e=>e.type===`BooleanValue`],[`callable`,e=>e instanceof U],[`odd`,e=>{if(!(e instanceof F))throw Error(`cannot odd on ${e.type}`);return e.value%2!=0}],[`even`,e=>{if(!(e instanceof F))throw Error(`cannot even on ${e.type}`);return e.value%2==0}],[`false`,e=>e.type===`BooleanValue`&&!e.value],[`true`,e=>e.type===`BooleanValue`&&e.value],[`none`,e=>e.type===`NullValue`],[`string`,e=>e.type===`StringValue`],[`number`,e=>e instanceof F||e instanceof I],[`integer`,e=>e instanceof F],[`iterable`,e=>e.type===`ArrayValue`||e.type===`StringValue`],[`mapping`,e=>e instanceof B],[`sequence`,e=>e instanceof H||e instanceof B||e instanceof L],[`lower`,e=>{let t=e.value;return e.type===`StringValue`&&t===t.toLowerCase()}],[`upper`,e=>{let t=e.value;return e.type===`StringValue`&&t===t.toUpperCase()}],[`none`,e=>e.type===`NullValue`],[`defined`,e=>e.type!==`UndefinedValue`],[`undefined`,e=>e.type===`UndefinedValue`],[`equalto`,(e,t)=>e.value===t.value],[`eq`,(e,t)=>e.value===t.value]]));function at(e){e.set(`false`,!1),e.set(`true`,!0),e.set(`none`,null),e.set(`raise_exception`,e=>{throw Error(e)}),e.set(`range`,Ge),e.set(`strftime_now`,Je),e.set(`True`,!0),e.set(`False`,!1),e.set(`None`,null)}function ot(e,t){let n=t.split(`.`),r=e;for(let e of n)if(r instanceof B)r=r.value.get(e)??new G;else if(r instanceof H){let t=parseInt(e,10);if(!isNaN(t)&&t>=0&&t<r.value.length)r=r.value[t];else return new G}else return new G;return r}function st(e,t,n=!1){if(e instanceof W&&t instanceof W)return 0;if(e instanceof W||t instanceof W)throw Error(`Cannot compare ${e.type} with ${t.type}`);if(e instanceof G&&t instanceof G)return 0;if(e instanceof G||t instanceof G)throw Error(`Cannot compare ${e.type} with ${t.type}`);let r=e=>e instanceof F||e instanceof I||e instanceof R,i=e=>e instanceof R?+!!e.value:e.value;if(r(e)&&r(t)){let n=i(e),r=i(t);return n<r?-1:+(n>r)}if(e.type!==t.type)throw Error(`Cannot compare different types: ${e.type} and ${t.type}`);switch(e.type){case`StringValue`:{let r=e.value,i=t.value;return n||(r=r.toLowerCase(),i=i.toLowerCase()),r<i?-1:+(r>i)}default:throw Error(`Cannot compare type: ${e.type}`)}}var ct=class{global;constructor(e){this.global=e??new K}run(e){return this.evaluate(e,this.global)}evaluateBinaryExpression(e,t){let n=this.evaluate(e.left,t);switch(e.operator.value){case`and`:return n.__bool__().value?this.evaluate(e.right,t):n;case`or`:return n.__bool__().value?n:this.evaluate(e.right,t)}let r=this.evaluate(e.right,t);switch(e.operator.value){case`==`:return new R(n.value==r.value);case`!=`:return new R(n.value!=r.value)}if(n instanceof G||r instanceof G){if(r instanceof G&&[`in`,`not in`].includes(e.operator.value))return new R(e.operator.value===`not in`);throw Error(`Cannot perform operation ${e.operator.value} on undefined values`)}else if(n instanceof W||r instanceof W)throw Error(`Cannot perform operation on null values`);else if(e.operator.value===`~`)return new L(n.value.toString()+r.value.toString());else if((n instanceof F||n instanceof I)&&(r instanceof F||r instanceof I)){let t=n.value,i=r.value;switch(e.operator.value){case`+`:case`-`:case`*`:{let a=e.operator.value===`+`?t+i:e.operator.value===`-`?t-i:t*i;return n instanceof I||r instanceof I?new I(a):new F(a)}case`/`:return new I(t/i);case`%`:{let e=t%i;return n instanceof I||r instanceof I?new I(e):new F(e)}case`<`:return new R(t<i);case`>`:return new R(t>i);case`>=`:return new R(t>=i);case`<=`:return new R(t<=i)}}else if(n instanceof H&&r instanceof H)switch(e.operator.value){case`+`:return new H(n.value.concat(r.value))}else if(r instanceof H){let t=r.value.find(e=>e.value===n.value)!==void 0;switch(e.operator.value){case`in`:return new R(t);case`not in`:return new R(!t)}}if(n instanceof L||r instanceof L)switch(e.operator.value){case`+`:return new L(n.value.toString()+r.value.toString())}if(n instanceof L&&r instanceof L)switch(e.operator.value){case`in`:return new R(r.value.includes(n.value));case`not in`:return new R(!r.value.includes(n.value))}if(n instanceof L&&r instanceof B)switch(e.operator.value){case`in`:return new R(r.value.has(n.value));case`not in`:return new R(!r.value.has(n.value))}throw SyntaxError(`Unknown operator "${e.operator.value}" between ${n.type} and ${r.type}`)}evaluateArguments(e,t){let n=[],r=new Map;for(let i of e)if(i.type===`SpreadExpression`){let e=i,r=this.evaluate(e.argument,t);if(!(r instanceof H))throw Error(`Cannot unpack non-iterable type: ${r.type}`);for(let e of r.value)n.push(e)}else if(i.type===`KeywordArgumentExpression`){let e=i;r.set(e.key.value,this.evaluate(e.value,t))}else{if(r.size>0)throw Error(`Positional arguments must come before keyword arguments`);n.push(this.evaluate(i,t))}return[n,r]}applyFilter(e,t,n){if(t.type===`Identifier`){let r=t;if(r.value===`safe`)return e;if(r.value===`tojson`)return new L(z(e,{}));if(e instanceof H)switch(r.value){case`list`:return e;case`first`:return e.value[0];case`last`:return e.value[e.value.length-1];case`length`:return new F(e.value.length);case`reverse`:return new H(e.value.slice().reverse());case`sort`:return new H(e.value.slice().sort((e,t)=>st(e,t,!1)));case`join`:return new L(e.value.map(e=>e.value).join(``));case`string`:return new L(z(e,{},0,!1));case`unique`:{let t=new Set,n=[];for(let r of e.value)t.has(r.value)||(t.add(r.value),n.push(r));return new H(n)}default:throw Error(`Unknown ArrayValue filter: ${r.value}`)}else if(e instanceof L)switch(r.value){case`length`:case`upper`:case`lower`:case`title`:case`capitalize`:{let t=e.builtins.get(r.value);if(t instanceof U)return t.value([],n);if(t instanceof F)return t;throw Error(`Unknown StringValue filter: ${r.value}`)}case`trim`:return new L(e.value.trim());case`indent`:return new L(e.value.split(`
|
|
7
|
-
`).map((e,t)=>t===0||e.length===0?e:` `+e).join(`
|
|
8
|
-
`));case`join`:case`string`:return e;case`int`:{let t=parseInt(e.value,10);return new F(isNaN(t)?0:t)}case`float`:{let t=parseFloat(e.value);return new I(isNaN(t)?0:t)}default:throw Error(`Unknown StringValue filter: ${r.value}`)}else if(e instanceof F||e instanceof I)switch(r.value){case`abs`:return e instanceof F?new F(Math.abs(e.value)):new I(Math.abs(e.value));case`int`:return new F(Math.floor(e.value));case`float`:return new I(e.value);case`string`:return new L(e.toString());default:throw Error(`Unknown NumericValue filter: ${r.value}`)}else if(e instanceof B)switch(r.value){case`items`:return new H(Array.from(e.value.entries()).map(([e,t])=>new H([new L(e),t])));case`length`:return new F(e.value.size);default:{let t=e.builtins.get(r.value);if(t)return t instanceof U?t.value([],n):t;throw Error(`Unknown ObjectValue filter: ${r.value}`)}}else if(e instanceof R)switch(r.value){case`bool`:return new R(e.value);case`int`:return new F(+!!e.value);case`float`:return new I(+!!e.value);case`string`:return new L(e.value?`true`:`false`);default:throw Error(`Unknown BooleanValue filter: ${r.value}`)}throw Error(`Cannot apply filter "${r.value}" to type: ${e.type}`)}else if(t.type===`CallExpression`){let r=t;if(r.callee.type!==`Identifier`)throw Error(`Unknown filter: ${r.callee.type}`);let i=r.callee.value;if(i===`tojson`){let[,t]=this.evaluateArguments(r.args,n),i=t.get(`indent`)??new W;if(!(i instanceof F||i instanceof W))throw Error(`If set, indent must be a number`);let a=t.get(`ensure_ascii`)??new R(!1);if(!(a instanceof R))throw Error(`If set, ensure_ascii must be a boolean`);let o=t.get(`sort_keys`)??new R(!1);if(!(o instanceof R))throw Error(`If set, sort_keys must be a boolean`);let s=t.get(`separators`)??new W,c=null;if(s instanceof H||s instanceof rt){if(s.value.length!==2)throw Error(`separators must be a tuple of two strings`);let[e,t]=s.value;if(!(e instanceof L)||!(t instanceof L))throw Error(`separators must be a tuple of two strings`);c=[e.value,t.value]}else if(!(s instanceof W))throw Error(`If set, separators must be a tuple of two strings`);return new L(z(e,{indent:i.value,ensureAscii:a.value,sortKeys:o.value,separators:c}))}else if(i===`join`){let t;if(e instanceof L)t=Array.from(e.value);else if(e instanceof H)t=e.value.map(e=>e.value);else throw Error(`Cannot apply filter "${i}" to type: ${e.type}`);let[a,o]=this.evaluateArguments(r.args,n),s=a.at(0)??o.get(`separator`)??new L(``);if(!(s instanceof L))throw Error(`separator must be a string`);return new L(t.join(s.value))}else if(i===`int`||i===`float`){let[t,a]=this.evaluateArguments(r.args,n),o=t.at(0)??a.get(`default`)??(i===`int`?new F(0):new I(0));if(e instanceof L){let t=i===`int`?parseInt(e.value,10):parseFloat(e.value);return isNaN(t)?o:i===`int`?new F(t):new I(t)}else if(e instanceof F||e instanceof I)return e;else if(e instanceof R)return i===`int`?new F(+!!e.value):new I(+!!e.value);else throw Error(`Cannot apply filter "${i}" to type: ${e.type}`)}else if(i==="default"){let[t,i]=this.evaluateArguments(r.args,n),a=t[0]??new L(``),o=t[1]??i.get(`boolean`)??new R(!1);if(!(o instanceof R))throw Error("`default` filter flag must be a boolean");return e instanceof G||o.value&&!e.__bool__().value?a:e}if(e instanceof H){switch(i){case`sort`:{let[t,i]=this.evaluateArguments(r.args,n),a=t.at(0)??i.get(`reverse`)??new R(!1);if(!(a instanceof R))throw Error(`reverse must be a boolean`);let o=t.at(1)??i.get(`case_sensitive`)??new R(!1);if(!(o instanceof R))throw Error(`case_sensitive must be a boolean`);let s=t.at(2)??i.get(`attribute`)??new W;if(!(s instanceof L||s instanceof F||s instanceof W))throw Error(`attribute must be a string, integer, or null`);let c=e=>s instanceof W?e:ot(e,s instanceof F?String(s.value):s.value);return new H(e.value.slice().sort((e,t)=>{let n=st(c(e),c(t),o.value);return a.value?-n:n}))}case`selectattr`:case`rejectattr`:{let t=i===`selectattr`;if(e.value.some(e=>!(e instanceof B)))throw Error(`\`${i}\` can only be applied to array of objects`);if(r.args.some(e=>e.type!==`StringLiteral`))throw Error(`arguments of \`${i}\` must be strings`);let[a,o,s]=r.args.map(e=>this.evaluate(e,n)),c;if(o){let e=n.tests.get(o.value);if(!e)throw Error(`Unknown test: ${o.value}`);c=e}else c=(...e)=>e[0].__bool__().value;return new H(e.value.filter(e=>{let n=e.value.get(a.value),r=n?c(n,s):!1;return t?r:!r}))}case`map`:{let[,t]=this.evaluateArguments(r.args,n);if(t.has(`attribute`)){let n=t.get(`attribute`);if(!(n instanceof L))throw Error(`attribute must be a string`);let r=t.get(`default`);return new H(e.value.map(e=>{if(!(e instanceof B))throw Error(`items in map must be an object`);let t=ot(e,n.value);return t instanceof G?r??new G:t}))}else throw Error("`map` expressions without `attribute` set are not currently supported.")}}throw Error(`Unknown ArrayValue filter: ${i}`)}else if(e instanceof L){switch(i){case`indent`:{let[t,i]=this.evaluateArguments(r.args,n),a=t.at(0)??i.get(`width`)??new F(4);if(!(a instanceof F))throw Error(`width must be a number`);let o=t.at(1)??i.get(`first`)??new R(!1),s=t.at(2)??i.get(`blank`)??new R(!1),c=e.value.split(`
|
|
9
|
-
`),l=` `.repeat(a.value);return new L(c.map((e,t)=>!o.value&&t===0||!s.value&&e.length===0?e:l+e).join(`
|
|
10
|
-
`))}case`replace`:{let t=e.builtins.get(`replace`);if(!(t instanceof U))throw Error(`replace filter not available`);let[i,a]=this.evaluateArguments(r.args,n);return t.value([...i,new V(a)],n)}}throw Error(`Unknown StringValue filter: ${i}`)}else if(e instanceof B){let t=e.builtins.get(i);if(t&&t instanceof U){let[e,i]=this.evaluateArguments(r.args,n);return i.size>0&&e.push(new V(i)),t.value(e,n)}throw Error(`Unknown ObjectValue filter: ${i}`)}else throw Error(`Cannot apply filter "${i}" to type: ${e.type}`)}throw Error(`Unknown filter: ${t.type}`)}evaluateFilterExpression(e,t){let n=this.evaluate(e.operand,t);return this.applyFilter(n,e.filter,t)}evaluateTestExpression(e,t){let n=this.evaluate(e.operand,t),r=t.tests.get(e.test.value);if(!r)throw Error(`Unknown test: ${e.test.value}`);let i=r(n);return new R(e.negate?!i:i)}evaluateSelectExpression(e,t){return this.evaluate(e.test,t).__bool__().value?this.evaluate(e.lhs,t):new G}evaluateUnaryExpression(e,t){let n=this.evaluate(e.argument,t);switch(e.operator.value){case`not`:return new R(!n.value);default:throw SyntaxError(`Unknown operator: ${e.operator.value}`)}}evaluateTernaryExpression(e,t){return this.evaluate(e.condition,t).__bool__().value?this.evaluate(e.trueExpr,t):this.evaluate(e.falseExpr,t)}evalProgram(e,t){return this.evaluateBlock(e.body,t)}evaluateBlock(e,t){let n=``;for(let r of e){let e=this.evaluate(r,t);e.type!==`NullValue`&&e.type!==`UndefinedValue`&&(n+=e.toString())}return new L(n)}evaluateIdentifier(e,t){return t.lookupVariable(e.value)}evaluateCallExpression(e,t){let[n,r]=this.evaluateArguments(e.args,t);r.size>0&&n.push(new V(r));let i=this.evaluate(e.callee,t);if(i.type!==`FunctionValue`)throw Error(`Cannot call something that is not a function: got ${i.type}`);return i.value(n,t)}evaluateSliceExpression(e,t,n){if(!(e instanceof H||e instanceof L))throw Error(`Slice object must be an array or string`);let r=this.evaluate(t.start,n),i=this.evaluate(t.stop,n),a=this.evaluate(t.step,n);if(!(r instanceof F||r instanceof G))throw Error(`Slice start must be numeric or undefined`);if(!(i instanceof F||i instanceof G))throw Error(`Slice stop must be numeric or undefined`);if(!(a instanceof F||a instanceof G))throw Error(`Slice step must be numeric or undefined`);return e instanceof H?new H(Ke(e.value,r.value,i.value,a.value)):new L(Ke(Array.from(e.value),r.value,i.value,a.value).join(``))}evaluateMemberExpression(e,t){let n=this.evaluate(e.object,t),r;if(e.computed){if(e.property.type===`SliceExpression`)return this.evaluateSliceExpression(n,e.property,t);r=this.evaluate(e.property,t)}else r=new L(e.property.value);let i;if(n instanceof B){if(!(r instanceof L))throw Error(`Cannot access property with non-string: got ${r.type}`);i=n.value.get(r.value)??n.builtins.get(r.value)}else if(n instanceof H||n instanceof L)if(r instanceof F)i=n.value.at(r.value),n instanceof L&&(i=new L(n.value.at(r.value)));else if(r instanceof L)i=n.builtins.get(r.value);else throw Error(`Cannot access property with non-string/non-number: got ${r.type}`);else{if(!(r instanceof L))throw Error(`Cannot access property with non-string: got ${r.type}`);i=n.builtins.get(r.value)}return i instanceof P?i:new G}evaluateSet(e,t){let n=e.value?this.evaluate(e.value,t):this.evaluateBlock(e.body,t);if(e.assignee.type===`Identifier`){let r=e.assignee.value;t.setVariable(r,n)}else if(e.assignee.type===`TupleLiteral`){let r=e.assignee;if(!(n instanceof H))throw Error(`Cannot unpack non-iterable type in set: ${n.type}`);let i=n.value;if(i.length!==r.value.length)throw Error(`Too ${r.value.length>i.length?`few`:`many`} items to unpack in set`);for(let e=0;e<r.value.length;++e){let n=r.value[e];if(n.type!==`Identifier`)throw Error(`Cannot unpack to non-identifier in set: ${n.type}`);t.setVariable(n.value,i[e])}}else if(e.assignee.type===`MemberExpression`){let r=e.assignee,i=this.evaluate(r.object,t);if(!(i instanceof B))throw Error(`Cannot assign to member of non-object`);if(r.property.type!==`Identifier`)throw Error(`Cannot assign to member with non-identifier property`);i.value.set(r.property.value,n)}else throw Error(`Invalid LHS inside assignment expression: ${JSON.stringify(e.assignee)}`);return new W}evaluateIf(e,t){let n=this.evaluate(e.test,t);return this.evaluateBlock(n.__bool__().value?e.body:e.alternate,t)}evaluateFor(e,t){let n=new K(t),r,i;if(e.iterable.type===`SelectExpression`){let t=e.iterable;i=this.evaluate(t.lhs,n),r=t.test}else i=this.evaluate(e.iterable,n);if(!(i instanceof H||i instanceof B))throw Error(`Expected iterable or object type in for loop: got ${i.type}`);i instanceof B&&(i=i.keys());let a=[],o=[];for(let t=0;t<i.value.length;++t){let s=new K(n),c=i.value[t],l;if(e.loopvar.type===`Identifier`)l=t=>t.setVariable(e.loopvar.value,c);else if(e.loopvar.type===`TupleLiteral`){let t=e.loopvar;if(c.type!==`ArrayValue`)throw Error(`Cannot unpack non-iterable type: ${c.type}`);let n=c;if(t.value.length!==n.value.length)throw Error(`Too ${t.value.length>n.value.length?`few`:`many`} items to unpack`);l=e=>{for(let r=0;r<t.value.length;++r){if(t.value[r].type!==`Identifier`)throw Error(`Cannot unpack non-identifier type: ${t.value[r].type}`);e.setVariable(t.value[r].value,n.value[r])}}}else throw Error(`Invalid loop variable(s): ${e.loopvar.type}`);r&&(l(s),!this.evaluate(r,s).__bool__().value)||(a.push(c),o.push(l))}let s=``,c=!0;for(let t=0;t<a.length;++t){let r=new Map([[`index`,new F(t+1)],[`index0`,new F(t)],[`revindex`,new F(a.length-t)],[`revindex0`,new F(a.length-t-1)],[`first`,new R(t===0)],[`last`,new R(t===a.length-1)],[`length`,new F(a.length)],[`previtem`,t>0?a[t-1]:new G],[`nextitem`,t<a.length-1?a[t+1]:new G]]);n.setVariable(`loop`,new B(r)),o[t](n);try{let t=this.evaluateBlock(e.body,n);s+=t.value}catch(e){if(e instanceof $e)continue;if(e instanceof Qe)break;throw e}c=!1}if(c){let t=this.evaluateBlock(e.defaultBlock,n);s+=t.value}return new L(s)}evaluateMacro(e,t){return t.setVariable(e.name.value,new U((t,n)=>{let r=new K(n);t=t.slice();let i;t.at(-1)?.type===`KeywordArgumentsValue`&&(i=t.pop());for(let n=0;n<e.args.length;++n){let a=e.args[n],o=t[n];if(a.type===`Identifier`){let e=a;if(!o)throw Error(`Missing positional argument: ${e.value}`);r.setVariable(e.value,o)}else if(a.type===`KeywordArgumentExpression`){let e=a,t=o??i?.value.get(e.key.value)??this.evaluate(e.value,r);r.setVariable(e.key.value,t)}else throw Error(`Unknown argument type: ${a.type}`)}return this.evaluateBlock(e.body,r)})),new W}evaluateCallStatement(e,t){let n=new U((t,n)=>{let r=new K(n);if(e.callerArgs)for(let n=0;n<e.callerArgs.length;++n){let i=e.callerArgs[n];if(i.type!==`Identifier`)throw Error(`Caller parameter must be an identifier, got ${i.type}`);r.setVariable(i.value,t[n]??new G)}return this.evaluateBlock(e.body,r)}),[r,i]=this.evaluateArguments(e.call.args,t);r.push(new V(i));let a=this.evaluate(e.call.callee,t);if(a.type!==`FunctionValue`)throw Error(`Cannot call something that is not a function: got ${a.type}`);let o=new K(t);return o.setVariable(`caller`,n),a.value(r,o)}evaluateFilterStatement(e,t){let n=this.evaluateBlock(e.body,t);return this.applyFilter(n,e.filter,t)}evaluate(e,t){if(!e)return new G;switch(e.type){case`Program`:return this.evalProgram(e,t);case`Set`:return this.evaluateSet(e,t);case`If`:return this.evaluateIf(e,t);case`For`:return this.evaluateFor(e,t);case`Macro`:return this.evaluateMacro(e,t);case`CallStatement`:return this.evaluateCallStatement(e,t);case`Break`:throw new Qe;case`Continue`:throw new $e;case`IntegerLiteral`:return new F(e.value);case`FloatLiteral`:return new I(e.value);case`StringLiteral`:return new L(e.value);case`ArrayLiteral`:return new H(e.value.map(e=>this.evaluate(e,t)));case`TupleLiteral`:return new rt(e.value.map(e=>this.evaluate(e,t)));case`ObjectLiteral`:{let n=new Map;for(let[r,i]of e.value){let e=this.evaluate(r,t);if(!(e instanceof L))throw Error(`Object keys must be strings: got ${e.type}`);n.set(e.value,this.evaluate(i,t))}return new B(n)}case`Identifier`:return this.evaluateIdentifier(e,t);case`CallExpression`:return this.evaluateCallExpression(e,t);case`MemberExpression`:return this.evaluateMemberExpression(e,t);case`UnaryExpression`:return this.evaluateUnaryExpression(e,t);case`BinaryExpression`:return this.evaluateBinaryExpression(e,t);case`FilterExpression`:return this.evaluateFilterExpression(e,t);case`FilterStatement`:return this.evaluateFilterStatement(e,t);case`TestExpression`:return this.evaluateTestExpression(e,t);case`SelectExpression`:return this.evaluateSelectExpression(e,t);case`Ternary`:return this.evaluateTernaryExpression(e,t);case`Comment`:return new W;default:throw SyntaxError(`Unknown node type: ${e.type}`)}}};function lt(e){switch(typeof e){case`number`:return Number.isInteger(e)?new F(e):new I(e);case`string`:return new L(e);case`boolean`:return new R(e);case`undefined`:return new G;case`object`:return e===null?new W:Array.isArray(e)?new H(e.map(lt)):new B(new Map(Object.entries(e).map(([e,t])=>[e,lt(t)])));case`function`:return new U((t,n)=>lt(e(...t.map(e=>e.value))??null));default:throw Error(`Cannot convert to runtime value: ${e}`)}}var q=`
|
|
11
|
-
`,ut=`{%- `,dt=` -%}`;function ft(e){switch(e.operator.type){case`MultiplicativeBinaryOperator`:return 4;case`AdditiveBinaryOperator`:return 3;case`ComparisonBinaryOperator`:return 2;case`Identifier`:return e.operator.value===`and`?1:e.operator.value===`in`||e.operator.value===`not in`?2:0}return 0}function pt(e,t=` `){let n=typeof t==`number`?` `.repeat(t):t;return Y(e.body,0,n).replace(/\n$/,``)}function J(...e){return ut+e.join(` `)+dt}function Y(e,t,n){return e.map(e=>mt(e,t,n)).join(q)}function mt(e,t,n){let r=n.repeat(t);switch(e.type){case`Program`:return Y(e.body,t,n);case`If`:return ht(e,t,n);case`For`:return gt(e,t,n);case`Set`:return _t(e,t,n);case`Macro`:return vt(e,t,n);case`Break`:return r+J(`break`);case`Continue`:return r+J(`continue`);case`CallStatement`:return yt(e,t,n);case`FilterStatement`:return bt(e,t,n);case`Comment`:return r+`{# `+e.value+` #}`;default:return r+`{{- `+X(e)+` -}}`}}function ht(e,t,n){let r=n.repeat(t),i=[],a=e;for(;a&&(i.push({test:a.test,body:a.body}),a.alternate.length===1&&a.alternate[0].type===`If`);)a=a.alternate[0];let o=r+J(`if`,X(i[0].test))+q+Y(i[0].body,t+1,n);for(let e=1;e<i.length;++e)o+=q+r+J(`elif`,X(i[e].test))+q+Y(i[e].body,t+1,n);return a&&a.alternate.length>0&&(o+=q+r+J(`else`)+q+Y(a.alternate,t+1,n)),o+=q+r+J(`endif`),o}function gt(e,t,n){let r=n.repeat(t),i=``;if(e.iterable.type===`SelectExpression`){let t=e.iterable;i=`${X(t.lhs)} if ${X(t.test)}`}else i=X(e.iterable);let a=r+J(`for`,X(e.loopvar),`in`,i)+q+Y(e.body,t+1,n);return e.defaultBlock.length>0&&(a+=q+r+J(`else`)+q+Y(e.defaultBlock,t+1,n)),a+=q+r+J(`endfor`),a}function _t(e,t,n){let r=n.repeat(t),i=X(e.assignee),a=e.value?X(e.value):``,o=r+J(`set`,`${i}${e.value?` = `+a:``}`);return e.body.length===0?o:o+q+Y(e.body,t+1,n)+q+r+J(`endset`)}function vt(e,t,n){let r=n.repeat(t),i=e.args.map(X).join(`, `);return r+J(`macro`,`${e.name.value}(${i})`)+q+Y(e.body,t+1,n)+q+r+J(`endmacro`)}function yt(e,t,n){let r=n.repeat(t),i=e.callerArgs&&e.callerArgs.length>0?`(${e.callerArgs.map(X).join(`, `)})`:``,a=X(e.call),o=r+J(`call${i}`,a)+q;return o+=Y(e.body,t+1,n)+q,o+=r+J(`endcall`),o}function bt(e,t,n){let r=n.repeat(t),i=r+J(`filter`,e.filter.type===`Identifier`?e.filter.value:X(e.filter))+q;return i+=Y(e.body,t+1,n)+q,i+=r+J(`endfilter`),i}function X(e,t=-1){switch(e.type){case`SpreadExpression`:return`*${X(e.argument)}`;case`Identifier`:return e.value;case`IntegerLiteral`:return`${e.value}`;case`FloatLiteral`:return`${e.value}`;case`StringLiteral`:return JSON.stringify(e.value);case`BinaryExpression`:{let n=e,r=ft(n),i=X(n.left,r),a=X(n.right,r+1),o=`${i} ${n.operator.value} ${a}`;return r<t?`(${o})`:o}case`UnaryExpression`:{let t=e;return t.operator.value+(t.operator.value===`not`?` `:``)+X(t.argument,1/0)}case`CallExpression`:{let t=e,n=t.args.map(X).join(`, `);return`${X(t.callee)}(${n})`}case`MemberExpression`:{let t=e,n=X(t.object);[`Identifier`,`MemberExpression`,`CallExpression`,`StringLiteral`,`IntegerLiteral`,`FloatLiteral`,`ArrayLiteral`,`TupleLiteral`,`ObjectLiteral`].includes(t.object.type)||(n=`(${n})`);let r=X(t.property);return!t.computed&&t.property.type!==`Identifier`&&(r=`(${r})`),t.computed?`${n}[${r}]`:`${n}.${r}`}case`FilterExpression`:{let t=e,n=X(t.operand,1/0);return t.filter.type===`CallExpression`?`${n} | ${X(t.filter)}`:`${n} | ${t.filter.value}`}case`SelectExpression`:{let t=e;return`${X(t.lhs)} if ${X(t.test)}`}case`TestExpression`:{let t=e;return`${X(t.operand)} is${t.negate?` not`:``} ${t.test.value}`}case`ArrayLiteral`:case`TupleLiteral`:{let t=e.value.map(X),n=e.type===`ArrayLiteral`?`[]`:`()`;return`${n[0]}${t.join(`, `)}${n[1]}`}case`ObjectLiteral`:return`{${Array.from(e.value.entries()).map(([e,t])=>`${X(e)}: ${X(t)}`).join(`, `)}}`;case`SliceExpression`:{let t=e;return`${t.start?X(t.start):``}:${t.stop?X(t.stop):``}${t.step?`:${X(t.step)}`:``}`}case`KeywordArgumentExpression`:{let t=e;return`${t.key.value}=${X(t.value)}`}case`Ternary`:{let n=e,r=`${X(n.trueExpr)} if ${X(n.condition,0)} else ${X(n.falseExpr)}`;return t>-1?`(${r})`:r}default:throw Error(`Unknown expression type: ${e.type}`)}}var xt=class{parsed;constructor(e){let t=_e(e,{lstrip_blocks:!0,trim_blocks:!0});this.parsed=We(t)}render(e){let t=new K;if(at(t),e)for(let[n,r]of Object.entries(e))t.set(n,r);return new ct(t).run(this.parsed).value}format(e){return pt(this.parsed,e?.indent||` `)}};const St=new Map,Ct=new Map;function wt(e){return typeof e==`string`?e:e?Array.isArray(e)?e.map(e=>{if(!e)return``;if(typeof e==`string`)return e;if(e.type===`text`)return e.text||e.value||``;if(e.type===`tool_use`)return`[TOOL_CALL ${e.name}] ${JSON.stringify(e.input||{})}`;if(e.type===`tool_result`){let t=typeof e.content==`string`?e.content:JSON.stringify(e.content||``);return`[TOOL_RESULT ${e.tool_use_id||``}] ${t}`}return e.type===`attachment`?`[ATTACHMENT ${e.mediaType||`file`}] ${e.fileName||`attachment`}`:``}).filter(Boolean).join(`
|
|
12
|
-
`):typeof e==`object`?JSON.stringify(e):String(e):``}async function Tt(t,n){let r=String(t||``).trim();if(!r)return null;if(St.has(r))return St.get(r);let i=n||(typeof globalThis.fetch==`function`?globalThis.fetch.bind(globalThis):void 0);if(!i)return null;let a=n||ce(i),o=`https://huggingface.co/${encodeURI(r)}/resolve/main/tokenizer_config.json`;try{let t=await a(o);if(t.ok){let n=await t.json();if(n&&typeof n==`object`){if(!n.chat_template)try{let e=await a(`https://huggingface.co/${encodeURI(r)}/resolve/main/chat_template.jinja`);if(e.ok){let t=await e.text();t&&t.trim()&&(n.chat_template=t.trim())}}catch{}if(typeof n.model_max_length==`number`&&Number.isFinite(n.model_max_length)&&n.model_max_length>0&&n.model_max_length<=2097152){let t=e.getModelInfo(r);e.registerModelInfo(r,{contextWindow:n.model_max_length,maxOutput:t?.maxOutput??null,...t||{}})}return St.set(r,n),n}}}catch{}return null}function Et(e){if(!(!e||!Array.isArray(e)||e.length===0))return e.map(e=>e.type===`function`&&e.function?e:{type:`function`,function:{name:e.name,description:e.description||``,parameters:e.input_schema||e.parameters||{type:`object`,properties:{}}}})}function Dt(e,t){let n=String(t||``).trim(),r=[];for(let t of e){if(!t)continue;let e=String(t.role||`user`).toLowerCase(),i=wt(t.content);e===`system`?n=n?`${n}\n\n${i}`:i:e===`tool`?r.push({role:`tool`,content:i}):e===`assistant`||e===`model`?r.push({role:`assistant`,content:i,...t.tool_calls?{tool_calls:t.tool_calls}:{}}):r.push({role:`user`,content:i})}let i=[];for(let e of r)if(i.length>0&&i[i.length-1].role===e.role&&e.role!==`tool`){let t=i[i.length-1];t.content=t.content?`${t.content}\n\n${e.content}`:e.content,e.tool_calls&&(t.tool_calls=[...t.tool_calls||[],...e.tool_calls])}else i.push({...e});i.length>0&&i[0].role===`assistant`&&i.unshift({role:`user`,content:`Hello`}),i.length===0&&!n&&i.push({role:`user`,content:`Hello`});let a=[];return n&&a.push({role:`system`,content:n}),a.push(...i),a}async function Ot(e){let{modelName:t=``,messages:n,systemPrompt:r,tools:i,documents:a,addGenerationPrompt:o=!0,customFetch:s}=e,c=null;typeof e.template==`string`?c=e.template:e.template&&typeof e.template==`object`&&(i&&i.length>0&&`tool_use`in e.template?c=e.template.tool_use:`default`in e.template&&(c=e.template.default));let l=e.bosToken,u=e.eosToken;if(!c&&t){let e=await Tt(t,s);e&&(typeof e.chat_template==`string`?c=e.chat_template:e.chat_template&&typeof e.chat_template==`object`&&(i&&i.length>0&&`tool_use`in e.chat_template?c=e.chat_template.tool_use:`default`in e.chat_template&&(c=e.chat_template.default)),!l&&e.bos_token&&(l=typeof e.bos_token==`string`?e.bos_token:e.bos_token.content),!u&&e.eos_token&&(u=typeof e.eos_token==`string`?e.eos_token:e.eos_token.content))}c||=`{%- for message in messages -%}
|
|
13
|
-
{{- '<|im_start|>' + message.role + '
|
|
14
|
-
' + message.content + '<|im_end|>
|
|
15
|
-
' -}}
|
|
16
|
-
{%- endfor -%}
|
|
17
|
-
{%- if add_generation_prompt -%}
|
|
18
|
-
{{- '<|im_start|>assistant
|
|
19
|
-
' -}}
|
|
20
|
-
{%- endif -%}`;let d=Dt(n,r),f=Et(i),p=Ct.get(c);return p||(p=new xt(c),Ct.set(c,p)),p.render({messages:d,tools:f,documents:a||null,add_generation_prompt:o,bos_token:l||``,eos_token:u||``,pad_token:e.padToken||``,unk_token:e.unkToken||``})}function kt(){let e=globalThis;return e.Summarizer||e.ai?.summarizer}function At(){let e=globalThis;return e.Writer||e.ai?.writer}function jt(){let e=globalThis;return e.Rewriter||e.ai?.rewriter}function Mt(){let e=globalThis;return e.LanguageDetector||e.ai?.languageDetector||e.translation?.languageDetector}function Nt(){let e=globalThis;return e.Translator||e.ai?.translator||e.translation?.translator}function Pt(){let e=globalThis;return e.Proofreader||e.ai?.proofreader}function Ft(){let e=globalThis;return e.SemanticEmbedder||e.TextEmbedder||e.ai?.semanticEmbedder||e.ai?.textEmbedder}async function It(){if(typeof navigator>`u`||!(`gpu`in navigator))return!1;try{let e=await navigator.gpu.requestAdapter({powerPreference:`high-performance`});if(!e||e.isFallbackAdapter===!0||e.features&&!e.features.has(`shader-f16`))return!1;let t=e.info||(typeof e.requestAdapterInfo==`function`?await e.requestAdapterInfo():null);if(t){let e=(t.vendor||``).toLowerCase(),n=(t.architecture||``).toLowerCase(),r=(t.description||``).toLowerCase(),i=(t.device||``).toLowerCase(),a=(t.adapterType||t.deviceType||t.type||``).toLowerCase();if(a===`cpu`||a===`software`||n===`swiftshader`||n===`llvmpipe`||n===`softpipe`||n===`lavapipe`||n===`cpu`||e.includes(`swiftshader`)||r.includes(`llvmpipe`)||r.includes(`softpipe`)||r.includes(`lavapipe`)||r.includes(`software`)||r.includes(`basic render`)||i.includes(`llvmpipe`)||i.includes(`softpipe`)||i.includes(`lavapipe`)||i.includes(`swiftshader`)||i.includes(`basic render`))return!1}let n=await e.requestDevice();return n?(typeof n.destroy==`function`&&n.destroy(),!0):!1}catch{return!1}}function Lt(e){let t=e.toLowerCase();return t.includes(`webgpu`)||t.includes(`webgpuinit`)||t.includes(`no available backend`)||t.includes(`webnn`)||t.includes(`error_code: 9`)||t.includes(`could not find an implementation`)||t.includes(`gatherblockquantized`)||t.includes(`ort_not_implemented`)||t.includes(`error_code: 6`)||t.includes(`bad_alloc`)||t.includes(`out of memory`)||t.includes(`allocation failed`)}let Rt=n;async function zt(){try{let e=await i();if(e){let t=await a(e,r.PROMPT_API_FALLBACK_MODEL);if(t&&typeof t==`string`)return t}}catch{}return Rt}async function Z(e,t){try{return await e.create(t)}catch(n){let r=String(n?.message||n),i=globalThis,a=i.TRANSFORMERS_CONFIG?.device??``;if((a===`webgpu`||a.startsWith(`webnn`))&&Lt(r)){let o=await zt();return console.warn(`Built-in AI Polyfill: ${a} backend failed (${r.slice(0,120)}). Retrying with WASM/q4 CPU fallback (${o})...`,n),i.TRANSFORMERS_CONFIG||={apiKey:`dummy`},i.TRANSFORMERS_CONFIG.device=`wasm`,i.TRANSFORMERS_CONFIG.dtype=`q4`,i.TRANSFORMERS_CONFIG.modelName=o,i.TRANSFORMERS_CONFIG.env||(i.TRANSFORMERS_CONFIG.env={useBrowserCache:!1,useWasmCache:!0,fetch:ce()}),await e.create(t)}throw n}}async function Q(){let e=globalThis,t=[];`document`in e||(e.document={defaultView:e,documentElement:null,querySelector:()=>null,querySelectorAll:()=>[],createElement:e=>typeof OffscreenCanvas<`u`&&e===`canvas`?new OffscreenCanvas(300,150):{}}),`MutationObserver`in e||(e.MutationObserver=class{observe(){}disconnect(){}takeRecords(){return[]}});let n;if(!(`LanguageModel`in e)&&!e.ai?.languageModel){if(n=await zt(),e.TRANSFORMERS_CONFIG)e.TRANSFORMERS_CONFIG.env||(e.TRANSFORMERS_CONFIG.env={useBrowserCache:!1,useWasmCache:!0,fetch:ce()});else{let t=`wasm`,o=`q4f16`,s=null,c=null;try{let e=await i();e&&(s=await a(e,r.PROMPT_API_BACKEND)||await a(e,r.TRANSFORMERS_JS_BACKEND)||null,c=await a(e,r.PROMPT_API_DTYPE_STRATEGY)||await a(e,r.TRANSFORMERS_JS_DTYPE_STRATEGY)||null)}catch{}s===`wasm`?t=`wasm`:s===`webgpu`?t=`webgpu`:s&&s.startsWith(`webnn`)?t=`webnn`:typeof navigator<`u`&&(`ml`in navigator?t=`webnn`:`gpu`in navigator&&await It()&&(t=`webgpu`)),o=c&&c!==`auto`?c:`q4f16`,e.TRANSFORMERS_CONFIG={apiKey:`dummy`,device:t,dtype:o,...n?{modelName:n}:{},env:{useBrowserCache:!1,useWasmCache:!0,fetch:ce()}}}t.push(import(`./chunk-Bf_B14Ld.js`).then(t=>{t?.LanguageModel&&!e.LanguageModel&&(e.LanguageModel=t.LanguageModel)}).catch(()=>{}))}e.TRANSFORMERS_CONFIG&&(n||=await zt(),n&&(e.TRANSFORMERS_CONFIG.modelName=n)),kt()||t.push(import(`./chunk-kjHBRdMr.js`).then(t=>{t?.Summarizer&&!e.Summarizer&&(e.Summarizer=t.Summarizer)}).catch(()=>{})),At()||t.push(import(`./chunk-B7CJ25uq.js`).then(t=>{t?.Writer&&!e.Writer&&(e.Writer=t.Writer)}).catch(()=>{})),jt()||t.push(import(`./chunk-BHb9fxp0.js`).then(t=>{t?.Rewriter&&!e.Rewriter&&(e.Rewriter=t.Rewriter)}).catch(()=>{})),Mt()||t.push(import(`./chunk-Pbp3Q16z.js`).then(t=>{t?.LanguageDetector&&!e.LanguageDetector&&(e.LanguageDetector=t.LanguageDetector)}).catch(()=>{})),Nt()||t.push(import(`./chunk-C1wx9MzX.js`).then(t=>{t?.Translator&&!e.Translator&&(e.Translator=t.Translator)}).catch(()=>{})),t.length>0&&await Promise.all(t)}function $(e,t){if(t)return n=>{!n||typeof n.addEventListener!=`function`||(t({status:`running`,progress:0,message:`Downloading ${e} model... 0%`}),n.addEventListener(`downloadprogress`,n=>{let r=Number(n?.loaded),i=Number(n?.total),a=null,o=``;Number.isFinite(r)&&Number.isFinite(i)&&i>0?(a=Math.max(0,Math.min(1,r/i)),o=` ${Math.round(a*100)}%`):Number.isFinite(r)&&r>=0&&r<=1?(a=Math.max(0,Math.min(1,r)),o=` ${Math.round(a*100)}%`):Number.isFinite(r)&&r>1&&(o=` (${(r/1024/1024).toFixed(1)} MB downloaded)`),t({status:`running`,progress:a,message:`Downloading ${e} model...${o}`})}))}}async function Bt(e,t){await Q();let n=kt();if(!n)throw Error(`Summarizer API is not supported or polyfilled`);let r=$(`Summarizer`,t?.onProgress),i=await Z(n,{...t||{},...r?{monitor:r}:{}});try{return await i.summarize(e,t?.context?{context:t.context}:void 0)}finally{typeof i.destroy==`function`&&i.destroy()}}async function Vt(e,t){await Q();let n=At();if(!n)throw Error(`Writer API is not supported or polyfilled`);let r=$(`Writer`,t?.onProgress),i=await Z(n,{...t||{},...r?{monitor:r}:{}});try{return await i.write(e,t?.context?{context:t.context}:void 0)}finally{typeof i.destroy==`function`&&i.destroy()}}async function Ht(e,t){await Q();let n=jt();if(!n)throw Error(`Rewriter API is not supported or polyfilled`);let r=$(`Rewriter`,t?.onProgress),i=await Z(n,{...t||{},...r?{monitor:r}:{}});try{return await i.rewrite(e,t?.context?{context:t.context}:void 0)}finally{typeof i.destroy==`function`&&i.destroy()}}async function Ut(e,t){await Q();let n=Mt();if(!n)throw Error(`Language Detector API is not supported or polyfilled`);let r=$(`LanguageDetector`,t?.onProgress),i=await Z(n,{...t||{},...r?{monitor:r}:{}});try{return await i.detect(e)}finally{typeof i.destroy==`function`&&i.destroy()}}async function Wt(e,t){await Q();let n=Nt();if(!n)throw Error(`Translator API is not supported or polyfilled`);let r=$(`Translator`,t?.onProgress),i=await Z(n,{...t,...r?{monitor:r}:{}});try{return await i.translate(e)}finally{typeof i.destroy==`function`&&i.destroy()}}async function Gt(e,t){await Q();let n=Pt();if(n){let r=$(`Proofreader`,t?.onProgress),i=await Z(n,{...t||{},...r?{monitor:r}:{}});try{if(typeof i.proofread==`function`)return await i.proofread(e,t?.context?{context:t.context}:void 0)}finally{typeof i.destroy==`function`&&i.destroy()}}return await Ht(e,{context:t?.context?`Proofread and correct grammar, spelling, and style errors. ${t.context}`:`Proofread and correct grammar, spelling, and style errors.`,onProgress:t?.onProgress})}async function Kt(e,t){await Q();let n=Ft();if(!n)throw Error(`Semantic Embedder API is not supported in this browser environment. Enable #semantic-embedder-api in chrome://flags or Edge Canary.`);let r=$(`SemanticEmbedder`,t?.onProgress),i=await Z(n,{...t?.taskType?{taskType:t.taskType}:{},...r?{monitor:r}:{}});try{return await i.embed(e)}finally{typeof i.destroy==`function`&&i.destroy()}}function qt(e){return`[Attachment: ${e.fileName} (${e.mimeType}) is available in chat history${e.path?` at ${e.path}`:``}]`}function Jt(e){return e.map(e=>e.type===`text`?e.text:e.type===`image`?`[Image: ${e.media_type}, ${Math.ceil(e.data.length*3/4)} bytes base64-encoded]`:``).filter(Boolean).join(`
|
|
21
|
-
`)}function Yt(e,t){if(!Zt(t))return Jt(e);let n=[];for(let t of e)t.type===`text`?n.push({type:`text`,text:t.text}):t.type===`image`&&n.push({type:`image_url`,image_url:{url:`data:${t.media_type};base64,${t.data}`}});return n}function Xt(e,t){if(!Zt(t))return Jt(e);let n=[];for(let t of e)t.type===`text`?n.push({type:`text`,text:t.text}):t.type===`image`&&n.push({type:`image`,source:{type:`base64`,media_type:t.media_type,data:t.data}});return n}function Zt(e){let t=p(e);return t.images||t.routerByFeatures}function Qt(e){let t=p(e);return t.audio||t.routerByFeatures}function $t(e){let t=p(e);return t.documents||t.routerByFeatures}function en(e){let t=e.toLowerCase();return t.includes(`wav`)?`wav`:t.includes(`flac`)?`flac`:t.includes(`ogg`)?`ogg`:t.includes(`aac`)?`aac`:t.includes(`webm`)?`webm`:t.includes(`mp4`)?`mp4`:`mp3`}function tn(e,t){let n=[],r=Zt(t);for(let i of e){if(i?.type===`text`){n.push({type:`text`,text:i.text||``});continue}i?.type===`attachment`&&(i.mediaType===`image`&&typeof i.data==`string`&&i.data&&r?n.push({type:`image_url`,image_url:{url:`data:${i.mimeType};base64,${i.data}`}}):i.mediaType===`audio`&&typeof i.data==`string`&&i.data&&Qt(t)?n.push({type:`input_audio`,input_audio:{data:i.data,format:en(i.mimeType)}}):n.push({type:`text`,text:qt(i)}))}return n}function nn(e){return typeof e!=`string`||e.trim().length===0?``:e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/-+/g,`-`).replace(/^-|-$/g,``)}function rn(e){let t=nn(e);return t?t.includes(`claude-1`)||t.includes(`claude-2`)||t.includes(`claude-v1`)||t.includes(`claude-v2`)||t.includes(`claude-instant`):!1}function an(t){if(typeof t!=`string`||t.trim().length===0)return!1;let n=e.getModelInfo(t);if(typeof n?.supportsPromptCaching==`boolean`)return n.supportsPromptCaching;let r=nn(t);return!rn(r)&&!!(r.includes(`claude-3-5-sonnet`)||r.includes(`claude-3-5-haiku`)||r.includes(`claude-3-7-sonnet`)||r.includes(`claude-3-haiku`)||r.includes(`claude-3-opus`)||/claude-(?:sonnet|opus|haiku)-[4-9]/.test(r)||/claude-[4-9]-(?:sonnet|opus|haiku)/.test(r))}function on(e,t){let n=[],r=Zt(t);for(let i of e){if(i?.type===`text`){let e=typeof i.text==`string`?i.text:``;if(e.trim().length===0)continue;n.push({type:`text`,text:e,...i.cache_control&&{cache_control:i.cache_control}});continue}if(i?.type===`tool_use`){n.push(i);continue}if(i?.type===`thinking`){n.push({type:`thinking`,thinking:i.thinking||``,...typeof i.signature==`string`&&{signature:i.signature}});continue}if(i?.type===`redacted_thinking`){n.push({type:`redacted_thinking`,data:i.data||``});continue}if(i?.type===`tool_result`){Array.isArray(i.content)?n.push({...i,content:Xt(i.content,t)}):n.push(i);continue}i?.type===`attachment`&&(i.mediaType===`image`&&typeof i.data==`string`&&i.data&&r?n.push({type:`image`,source:{type:`base64`,media_type:i.mimeType,data:i.data},...i.cache_control&&{cache_control:i.cache_control}}):i.mediaType===`document`&&typeof i.data==`string`&&i.data&&$t(t)?n.push({type:`document`,source:{type:`base64`,media_type:`application/pdf`,data:i.data},...i.cache_control&&{cache_control:i.cache_control}}):n.push({type:`text`,text:qt(i),...i.cache_control&&{cache_control:i.cache_control}}))}return n}function sn(e,t){let n={"Content-Type":`application/json`,...e.headers};return e.apiKeyHeaderFormat?n[e.apiKeyHeader]=e.apiKeyHeaderFormat.replace(`{key}`,t):n[e.apiKeyHeader]=t,n}var cn=class{provider;constructor(e){this.provider=e}formatRequest(e,t,n){throw Error(`Not implemented`)}parseResponse(e){throw Error(`Not implemented`)}},ln=class extends cn{formatRequest(t,n,r){let{model:i,maxTokens:a,system:o,contextCompression:s,reasoning:c}=r,l=[];o&&l.push({role:`system`,content:o});for(let e of t){if(e.role===`system`){if(o)continue;l.push(e);continue}if(e.role===`assistant`&&Array.isArray(e.content)){let t=e.content.filter(e=>e.type===`text`).map(e=>e.text).join(`
|
|
22
|
-
`),n=e.content.filter(e=>e.type===`tool_use`),r={role:`assistant`,content:t||null};n.length>0&&(r.tool_calls=n.map(e=>({id:e.id,type:`function`,function:{name:e.name,arguments:JSON.stringify(e.input)}}))),l.push(r);continue}if(e.role===`user`&&Array.isArray(e.content)){let t=e.content.filter(e=>e.type===`tool_result`),n=tn(e.content,i),r=n.filter(e=>e.type===`text`).map(e=>e.text).join(`
|
|
23
|
-
`);if(t.length===0){n.length>0&&l.push({role:`user`,content:n});continue}r&&l.push({role:`user`,content:r});for(let e of t){let t;t=typeof e.content==`string`?e.content:Array.isArray(e.content)?Yt(e.content,i):JSON.stringify(e.content),l.push({role:`tool`,tool_call_id:e.tool_use_id,content:t})}continue}l.push(e)}let u=e.getModelInfo(i),d=(this.provider.id!==`ollama`||u?.supportsTools!==!1)&&n?.map(e=>({type:`function`,function:{name:e.name,description:e.description,parameters:e.input_schema}}))||[],f={model:i,max_tokens:a,messages:l,...d.length>0&&{tools:d}};return this.provider.id===`ollama`&&u?.contextWindow&&u.contextWindow>0&&(f.options={...f.options||{},num_ctx:u.contextWindow}),this.provider.id===`openrouter`&&s&&(f.plugins=[{id:`context-compression`,enabled:!0}]),(this.provider.reasoningParam===`reasoning`||this.provider.reasoningParam===`thinkingConfig`)&&c&&(f.reasoning=c),f}parseResponse(e){let t=e.choices?.[0];if(!t)throw Error(`No choices in OpenAI response`);let{message:n,finish_reason:r}=t,i=[],a=`end_turn`;if(typeof n.content==`string`&&n.content){let e=_(n.content,`openai`);e&&i.push({type:`text`,text:e})}if(n.tool_calls&&Array.isArray(n.tool_calls)){a=`tool_use`;for(let e of n.tool_calls){let t;try{t=typeof e.function.arguments==`string`?JSON.parse(e.function.arguments):e.function.arguments}catch(e){console.error(`Failed to parse tool arguments:`,e),t={}}i.push({type:`tool_use`,id:e.id||`call_${Date.now()}_${Math.random()}`,name:e.function.name,input:t})}}return r===`tool_calls`&&(a=`tool_use`),{content:i,stop_reason:a,usage:{input_tokens:e.usage?.prompt_tokens||0,output_tokens:e.usage?.completion_tokens||0}}}},un=class extends cn{formatRequest(t,n,r){let{model:i,maxTokens:a,system:o,reasoning:s}=r,c=e.getModelInfo(i),l=!(rn(i)||c?.supportsPromptCaching===!1)&&(r.promptCaching===!0||r.promptCaching!==!1&&an(i)),u=t.filter(e=>e.role!==`system`).map(e=>Array.isArray(e.content)?{...e,content:on(e.content,i)}:{...e}),d=n?.map(e=>({name:e.name,description:e.description,input_schema:e.input_schema}))||[];if(l&&d.length>0){let e=d[d.length-1];e.cache_control={type:`ephemeral`}}let f=l&&typeof o==`string`&&o.trim().length>0?[{type:`text`,text:o,cache_control:{type:`ephemeral`}}]:o;if(l&&u.length>1)for(let e=u.length-1;e>=0;e--){let t=u[e];if(t.role===`user`){if(typeof t.content==`string`)u[e]={...t,content:[{type:`text`,text:t.content,cache_control:{type:`ephemeral`}}]};else if(Array.isArray(t.content)&&t.content.length>0){let n=[...t.content],r=n.length-1,i=n[r];i&&typeof i==`object`&&!i.cache_control&&(n[r]={...i,cache_control:{type:`ephemeral`}},u[e]={...t,content:n})}break}}let p={model:i,max_tokens:a,...o&&{system:f},messages:u,...d.length>0&&{tools:d}};if(this.provider.reasoningParam===`thinking`&&s?.max_tokens&&Number.isFinite(s.max_tokens))p.thinking={type:`enabled`,budget_tokens:Math.max(1024,Math.floor(s.max_tokens))};else if(this.provider.reasoningParam===`thinking`&&typeof s?.effort==`string`){let e=yn(s.effort);e>0&&(p.thinking={type:`enabled`,budget_tokens:Math.max(1024,Math.floor(a*e))})}return p}parseResponse(e){return{content:Array.isArray(e.content)?e.content.map(e=>e?.type!==`text`||typeof e?.text!=`string`?e:{...e,text:_(e.text,`anthropic`)}).filter(e=>e?.type!==`text`||typeof e.text==`string`&&e.text.length>0):[],stop_reason:e.stop_reason||`end_turn`,usage:{input_tokens:e.usage?.input_tokens||0,output_tokens:e.usage?.output_tokens||0,cache_read_input_tokens:e.usage?.cache_read_input_tokens||0,cache_creation_input_tokens:e.usage?.cache_creation_input_tokens||0}}}};function dn(e,t){return e.map(e=>{if(e.type===`text`)return{text:e.text};if(e.type===`image_url`){let t=e.image_url.url;if(t.startsWith(`data:`)){let e=t.match(/^data:([^;]+);base64,(.+)$/);if(e)return{inlineData:{mimeType:e[1],data:e[2]}}}}if(e.type===`document_url`||e.type===`audio_url`||e.type===`video_url`){let t=e[e.type]?.url;if(t?.startsWith(`data:`)){let e=t.match(/^data:([^;]+);base64,(.+)$/);if(e)return{inlineData:{mimeType:e[1],data:e[2]}}}}if(e.type===`tool_use`)return{functionCall:{name:e.name,args:e.input||{}}};if(e.type===`tool_result`){let t;return t=typeof e.content==`string`?e.content:Array.isArray(e.content)?Jt(e.content):typeof e.output==`string`?e.output:JSON.stringify(e.output??e.content??``),{functionResponse:{name:e.name,response:{result:t}}}}return{text:``}}).filter(Boolean)}var fn=class extends cn{formatRequest(e,t,n){let{model:r,maxTokens:i,system:a}=n,o=e.filter(e=>e.role!==`system`).map(e=>({role:e.role===`assistant`?`model`:e.role===`tool`?`function`:`user`,parts:Array.isArray(e.content)?dn(e.content,r):[{text:e.content||``}]})),s=t?.map(e=>({name:e.name,description:e.description,parameters:e.input_schema}))||[];return{contents:o,...a&&{system_instruction:{parts:[{text:a}]}},generationConfig:{maxOutputTokens:i},...s.length>0&&{tools:[{function_declarations:s}]}}}parseResponse(e){let t=e.candidates?.[0];if(!t)throw Error(`No candidates in Gemini response`);let n=[],r=`end_turn`;if(t.content?.parts)for(let e of t.content.parts){if(e.text){let t=_(e.text,`openai`);t&&n.push({type:`text`,text:t})}e.functionCall&&(r=`tool_use`,n.push({type:`tool_use`,id:`call_${Date.now()}_${Math.random()}`,name:e.functionCall.name,input:e.functionCall.args||{}}))}if(t.finishReason===`SAFETY`)throw Error(`Gemini response blocked by safety filters`);return{content:n,stop_reason:r,usage:{input_tokens:e.usageMetadata?.promptTokenCount||0,output_tokens:e.usageMetadata?.candidatesTokenCount||0}}}};function pn(e){return e.replace(/<\|channel>[\s\S]*?<channel\|>/g,``).replace(/^[ \t]+$/gm,``).replace(/\n{3,}/g,`
|
|
24
|
-
|
|
25
|
-
`).trim()}function mn(e){let t=/<\|tool_call>call:([a-zA-Z_][a-zA-Z0-9_]*)(\{[\s\S]*?\})?<tool_call\|>/g,n=[];return{toolBlocks:n,residualText:e.replace(t,(e,t,r)=>{let i={};if(r)try{let e=JSON.parse(r);e&&typeof e==`object`&&!Array.isArray(e)&&(i=e)}catch{}return n.push({type:`tool_use`,id:`mesh_llm_call_${Date.now()}_${Math.random().toString(36).slice(2)}`,name:t,input:i}),``}).replace(/^[ \t]+$/gm,``).replace(/\n{3,}/g,`
|
|
26
|
-
|
|
27
|
-
`).trim()}}function hn(e){if(!e||!Array.isArray(e.content))return e;let t=[],n=!1;for(let r of e.content){if(r.type!==`text`){t.push(r);continue}let{toolBlocks:e,residualText:i}=mn(pn(r.text));i&&t.push({type:`text`,text:i}),e.length>0&&(n=!0,t.push(...e))}return{...e,content:t,stop_reason:n||e.stop_reason===`tool_use`?`tool_use`:e.stop_reason}}const gn={openai:ln,anthropic:un,google:fn,"mesh-llm":class extends ln{parseResponse(e){return hn(super.parseResponse(e))}}};function _n(e){let t=gn[e.format];if(!t)throw Error(`Unsupported provider format: ${e.format}`);return new t(e)}function vn(e,t,n,r){return _n(e).formatRequest(t,n,r)}function yn(e){let t=e.toLowerCase();return t===`none`?0:t===`max`||t===`xhigh`?.95:t===`high`?.8:t===`medium`?.5:t===`low`?.2:t===`minimal`?.1:0}function bn(e,t){return _n(e).parseResponse(t)}function xn(t){let n=e.getModelInfo(t);if(n?.contextWindow)return n.contextWindow;let r=t.toLowerCase();return r.includes(`gpt-4.1`)?1047576:r.includes(`gpt-5`)?4e5:r.includes(`gpt-4o`)||r.includes(`gpt-4-turbo`)?128e3:r===`gpt-4`||r.startsWith(`gpt-4-`)?8192:r.includes(`gpt-3.5-turbo`)?16385:r.includes(`gpt-3.5`)?4096:r.includes(`o1`)||r.includes(`o3`)||r.includes(`o4`)?2e5:r.includes(`claude-opus-4`)||r.includes(`claude-sonnet-4`)?1e6:r.includes(`claude`)?2e5:r.includes(`gemini-nano`)?4096:r.includes(`gemini-1.5-pro`)?2097152:r.includes(`gemini-2.5`)||r.includes(`gemini-2.0`)||r.includes(`gemini-1.5`)?1048576:r.includes(`gemini-1.0`)||r.includes(`gemini-pro`)?32768:r.includes(`gemini`)?1048576:r.includes(`llama-3.1`)||r.includes(`llama-3-1`)?128e3:r.includes(`llama-3`)?8192:r.includes(`llama`)?4096:r.includes(`gemma-4-12b`)||r.includes(`gemma-4-26b`)||r.includes(`gemma-4-31b`)||r.includes(`gemma-4-e9b`)||r.includes(`gemma-4-e27b`)?256e3:r.includes(`gemma-4`)||r.includes(`gemma 4`)||r.includes(`gemma-3-4b`)||r.includes(`gemma-3-12b`)||r.includes(`gemma-3-27b`)?128e3:r.includes(`gemma-3`)||r.includes(`gemma 3`)?32e3:r.includes(`gemma-2`)||r.includes(`gemma-7b`)||r.includes(`gemma-2b`)||r.includes(`gemma`)?8192:r.includes(`mistral-large`)?128e3:r.includes(`mistral`)?32e3:r.includes(`amazon.titan`)?8192:r.includes(`amazon.nova-micro`)||r.includes(`nova-micro`)?128e3:r.includes(`amazon.nova`)||r.includes(`nova-pro`)||r.includes(`nova-lite`)?3e5:r.includes(`ai21`)?8192:r.includes(`cohere`)||r.includes(`phi-4-mini`)?128e3:r.includes(`phi-4`)?16384:r.includes(`phi-3.5`)||r.includes(`128k`)?128e3:r.includes(`phi-3`)?4096:r.includes(`qwen3.5`)?262144:r.includes(`qwen3-0.6b`)||r.includes(`qwen3-1.7b`)?40960:r.includes(`qwen3`)?128e3:r===`mesh`?242144:4096}function Sn(e,t){if(e===`translate`)return`Translate the following text from ${t.sourceLanguage||`auto`} to ${t.targetLanguage}. Provide ONLY the raw translated text without commentary or quotation marks:\n\n${t.text}`;if(e===`summarize`)return`Summarize the following text (type: ${t.type||`tldr`}, format: ${t.format||`plain-text`}, length: ${t.length||`medium`}). Provide ONLY the summary:\n\n${t.text}`;if(e===`write`)return`Draft content for the following request (context: ${t.context||`none`}):\n\n${t.prompt}`;if(e===`rewrite`)return`Rewrite the following text (tone: ${t.tone||`standard`}, length: ${t.length||`as-is`}):\n\n${t.text}`;if(e===`proofread`)return`Proofread and correct grammar, spelling, and style in the following text. Provide ONLY the corrected text:\n\n${t.text}`;if(e===`detect-language`)return`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${t.text}`;if(e===`semantic-embedder`)return`Provide a concise semantic description/representation for the following content:\n\n${JSON.stringify(t.text)}`;throw Error(`Unknown native AI task type: ${e}`)}async function Cn(e){if(e.toolsBackendPref)return e.toolsBackendPref;if(e.db)try{let{getConfig:t}=await import(`./chunk-C-J89fsv.js`),n=await t(e.db,r.BUILTIN_AI_TOOLS_BACKEND);if(n)return n}catch{}return`active_provider`}async function wn(e,t,n){if(n.apiKey!==void 0)return n.apiKey;if(typeof process<`u`&&process.env){let e=process.env.SHADOW_CLAW_API_KEY;if(e)return e;switch(t){case`openrouter`:if(process.env.OPENROUTER_API_KEY)return process.env.OPENROUTER_API_KEY;break;case`huggingface`:if(process.env.HUGGINGFACE_API_KEY||process.env.HF_TOKEN)return process.env.HUGGINGFACE_API_KEY||process.env.HF_TOKEN||``;break;case`gemini_proxy`:if(process.env.GEMINI_API_KEY)return process.env.GEMINI_API_KEY;break}let n=`${t.toUpperCase()}_API_KEY`;if(process.env[n])return process.env[n]}if(n.db)try{let{getConfig:e}=await import(`./chunk-C-J89fsv.js`),r=await e(n.db,`api_key:${t}`)||await e(n.db,`apiKey`);if(r)return r}catch{}return``}async function Tn(e){let{taskType:n,input:i,onProgress:a}=e;if(await Cn(e)===`local`){if(n===`summarize`)return await Bt(i.text,{...i,onProgress:a});if(n===`write`)return await Vt(i.prompt,{...i,onProgress:a});if(n===`rewrite`)return await Ht(i.text,{...i,onProgress:a});if(n===`proofread`)return await Gt(i.text,{...i,onProgress:a});if(n===`detect-language`)return await Ut(i.text,{onProgress:a});if(n===`translate`)return await Wt(i.text,{sourceLanguage:i.sourceLanguage||`auto`,targetLanguage:i.targetLanguage||`en`,...i,onProgress:a});if(n===`semantic-embedder`)return await Kt(i.text,{...i,onProgress:a});throw Error(`Unknown native AI task: ${n}`)}let o=u()?`openrouter`:`prompt_api`,s=e.providerId;if(!s&&e.db)try{let{getConfig:t}=await import(`./chunk-C-J89fsv.js`);s=await t(e.db,r.PROVIDER)||o}catch{}s||=typeof process<`u`&&(process.env.SHADOW_CLAW_PROVIDER||process.env.SHADOW_CLAW_DEFAULT_PROVIDER)||o;let c=Sn(n,i);if(s===`prompt_api`){await Q();let e=globalThis,t=e.LanguageModel||e.ai?.languageModel;if(t&&typeof t.create==`function`){let e;try{e=await t.create()}catch(e){console.warn(`Prompt API session creation failed in active provider task:`,e)}if(e)try{let t=await e.prompt(c),r=String(t||``).trim();if(n===`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=t(s);if(!l||!l.baseUrl||l.baseUrl.startsWith(`builtin://`)||l.baseUrl.startsWith(`local://`)||l.format===`prompt_api`||l.format===`transformers_js`){if(n===`summarize`)return await Bt(i.text,i);if(n===`write`)return await Vt(i.prompt,i);if(n===`rewrite`)return await Ht(i.text,i);if(n===`proofread`)return await Gt(i.text,i);if(n===`detect-language`)return await Ut(i.text);if(n===`translate`)return await Wt(i.text,{sourceLanguage:i.sourceLanguage||`auto`,targetLanguage:i.targetLanguage||`en`,...i});if(n===`semantic-embedder`)return await Kt(i.text,i);throw Error(`Provider ${s} not found and no local fallback available`)}let d=await wn(l,s,e);if(l.requiresApiKey!==!1&&!d)throw Error(`Provider "${l.name||s}" requires an API key for task "${n}". Please provide an API key or configure tools backend.`);let f=e.model||l.defaultModel||`default`,p={...sn(l,d),...e.headers||{}},m=vn(l,[{role:`user`,content:c}],[],{maxTokens:e.maxTokens||2048,model:f,system:`You are a specialized text task assistant. Fulfill the user request directly and accurately without conversational filler.`}),h=await fetch(l.baseUrl,{body:JSON.stringify(m),headers:p,method:`POST`});if(!h.ok){let e=await h.text();throw Error(`Active provider task API error ${h.status}: ${e}`)}let g=bn(l,await h.json()).content?.filter(e=>e.type===`text`)?.map(e=>e.text)?.join(``)?.trim()||``;if(n===`detect-language`)try{let e=JSON.parse(g);return Array.isArray(e)?e:[e]}catch{return[{detectedLanguage:`en`,confidence:.8}]}return g}export{d as A,ee as C,l as D,s as E,u as O,oe as S,f as T,Vt as _,xn as a,T as b,Z as c,Q as d,zt as f,Wt as g,Bt as h,vn as i,c as k,Ut as l,Ht as m,Tn as n,hn as o,Gt as p,sn as r,bn as s,Sn as t,Kt as u,Dt as v,_ as w,se as x,Ot as y};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as e}from"./chunk-8V8biNmG.js";import{t}from"./chunk-uAI_Zi6n.js";import{t as n}from"./chunk-B4TVZApP.js";import r from"node:path";import i from"node:process";import{mkdir as a,readFile as o,readdir as s,stat as c,writeFile as l}from"node:fs/promises";import u from"node:crypto";var d=e(n(),1);function f(e){return`sha256:${u.createHash(`sha256`).update(e).digest(`hex`).toLowerCase()}`}async function p(e){try{return await c(e),!0}catch{return!1}}async function m(e,t){let n=[];if(!await p(e))return n;async function i(e){let a=await s(e,{withFileTypes:!0});for(let o of a){let a=r.join(e,o.name);o.isDirectory()?await i(a):o.isFile()&&(!t||t(o.name,a))&&n.push(a)}}return await i(e),n.sort()}async function h(e=i.cwd(),n={}){let s=r.resolve(e),c=n.outDir||`.well-known/agent-skills`,u=n.metadataRoot?r.resolve(n.metadataRoot):s,h=n.siteName,g=n.siteDescription,_=r.dirname(u),v=r.dirname(_),y=[n.configPath,r.join(u,`shadow-claw.config.json`),r.join(u,`shadow-claw-config.json`),r.join(u,`site-config.json`),r.join(_,`shadow-claw.config.json`),r.join(_,`shadow-claw-config.json`),r.join(_,`site-config.json`),r.join(v,`shadow-claw.config.json`),r.join(v,`shadow-claw-config.json`),r.join(v,`site-config.json`)].filter(e=>!!e),b=null;for(let e of y)if(await p(e))try{let t=await o(e,`utf8`);b=JSON.parse(t);break}catch{}if(b&&(!h&&b.site?.title&&(h=b.site.title),!g&&b.site?.description&&(g=b.site.description)),!h||!g){let e=[r.join(u,`package.json`),r.join(_,`package.json`),r.join(v,`package.json`)];for(let t of e)if(await p(t))try{let e=JSON.parse(await o(t,`utf8`));!h&&e.name&&(h=e.name),!g&&e.description&&(g=e.description);break}catch{}}h||(h=r.basename(u),(h===`public`||h===`dist`)&&(h=r.basename(_),(h===`public`||h===`dist`)&&r.basename(v)&&(h=r.basename(v)))),g||=`Agent skills and tools collection, powered by ShadowClaw.`;let x=await m(r.join(s,`.agents`,`tools`),e=>e.endsWith(`.json`)),S=[];for(let e of x){let t=r.relative(s,e),n=r.posix.normalize(r.posix.relative(c,t.split(r.sep).join(r.posix.sep))),i=await o(e),a=f(i),l=r.basename(e,`.json`),u=``;try{let e=JSON.parse(i.toString(`utf8`));e.name&&(l=e.name),e.description&&(u=e.description)}catch{}S.push({name:l,description:u,url:n,digest:a,relFromRoot:t})}let C=await m(r.join(s,`.agents`,`scripts`),e=>e.endsWith(`.js`)||e.endsWith(`.mjs`)),w=[];for(let e of C){let t=r.relative(s,e),n=r.posix.normalize(r.posix.relative(c,t.split(r.sep).join(r.posix.sep))),i=f(await o(e)),a=r.basename(e,r.extname(e));w.push({name:a,description:`Portable ESM engine logic and tool execution handler for ${a}.`,url:n,digest:i,relFromRoot:t})}let T=r.join(s,`.agents`,`skills`),E=await m(T,e=>e===`SKILL.md`),D=[];for(let e of E){let t=r.relative(s,e),n=r.posix.normalize(r.posix.relative(c,t.split(r.sep).join(r.posix.sep))),i=await o(e),a=f(i),l={};try{l=(0,d.default)(i.toString(`utf8`)).data||{}}catch{}let u=r.basename(r.dirname(e)),p=l.name||u,m=l.description||``,h=new Set,g=!1;if(Array.isArray(l.metadata?.execution?.tools))for(let e of l.metadata.execution.tools)e?.name&&(h.add(e.name),g=!0);let _=l.metadata?.[`allowed-tools`]||l.metadata?.allowedTools||l[`allowed-tools`];if(typeof _==`string`&&_.split(/[,\s]+/).filter(Boolean).forEach(e=>{h.add(e),g=!0}),!g)for(let e of S)e.name.replace(/[-_]/g,``)===p.replace(/[-_]/g,``)&&h.add(e.name);let v=S.filter(e=>h.has(e.name)).map(({name:e,url:t,digest:n})=>({name:e,url:t,digest:n})),y=w.filter(e=>{let t=e.name.toLowerCase().replace(/[-_]/g,``),n=p.toLowerCase().replace(/[-_]/g,``);return n.startsWith(t)||t.startsWith(n)||h.has(e.name)}).map(({name:e,url:t,digest:n})=>({name:e,url:t,digest:n}));D.push({name:p,type:`skill-md`,description:m,url:n,digest:a,...v.length?{tools:v}:{},...y.length?{scripts:y}:{}})}let O=t(import.meta.url),k=n.bundledSkillsDir?r.resolve(n.bundledSkillsDir):n.toolchainRoot?r.join(r.resolve(n.toolchainRoot),`.agents`,`skills`):n.includeBundled?r.join(O,`.agents`,`skills`):null;if(k&&await p(k)&&k!==T){let e=await m(k,e=>e===`SKILL.md`);for(let t of e){let e=r.relative(k,t),n=r.join(`.agents`,`skills`,e),i=r.posix.normalize(r.posix.relative(c,n.split(r.sep).join(r.posix.sep))),a=await o(t),s=f(a),l={};try{l=(0,d.default)(a.toString(`utf8`)).data||{}}catch{}let u=r.basename(r.dirname(t)),p=l.name||u,m=l.description||``;D.some(e=>e.name===p)||D.push({name:p,type:`skill-md`,description:m,url:i,digest:s})}}let A={$schema:`https://schemas.agentskills.io/discovery/0.2.0/schema.json`,name:h,description:g,skills:D,...S.length?{tools:S.map(({name:e,description:t,url:n,digest:r})=>({name:e,...t?{description:t}:{},url:n,digest:r}))}:{},...w.length?{scripts:w.map(({name:e,description:t,url:n,digest:r})=>({name:e,...t?{description:t}:{},url:n,digest:r}))}:{},...S.length||w.length?{dependencies:{...S.length?{tools:S.map(e=>e.url)}:{},...w.length?{scripts:w.map(e=>e.url)}:{}}}:{}};if(n.stdout&&console.log(JSON.stringify(A,null,2)),n.write!==!1){let e=n.outFile?r.resolve(n.outFile):r.join(s,c,`index.json`);await a(r.dirname(e),{recursive:!0}),await l(e,JSON.stringify(A,null,2)+`
|
|
2
|
-
`,`utf8`)}return A}async function g(e,t={}){let n=e?r.resolve(e):i.cwd();console.log(`Generating Agent Skills Discovery index for ${n}...`);let a=await h(n,{includeBundled:t.bundled!==!1,...t,configPath:t.config||t.configPath}),o=a.skills?a.skills.length:0;return console.log(`Indexed ${o} skill(s) into .well-known/agent-skills/index.json`),a}export{h as n,g as r,f as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./chunk-Bjh76Dai.js";export{e as orchestratorStore};
|