llm-simple-router 0.8.2 → 0.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +319 -0
- package/README.md +2 -0
- package/config/recommended-providers.json +33 -9
- package/config/recommended-retry-rules.json +9 -8
- package/dist/admin/providers.js +11 -9
- package/dist/admin/quick-setup.d.ts +13 -0
- package/dist/admin/quick-setup.js +169 -0
- package/dist/admin/recommended.js +5 -1
- package/dist/admin/routes.js +2 -0
- package/dist/config/model-context.d.ts +8 -2
- package/dist/config/model-context.js +17 -5
- package/dist/config/recommended.d.ts +2 -1
- package/dist/config/recommended.js +5 -9
- package/dist/core/constants.js +2 -0
- package/dist/db/index.js +5 -0
- package/dist/db/migrations/033_add_adaptive_concurrency.sql +3 -0
- package/dist/db/migrations/036_add_openai_responses_api_type.sql +68 -0
- package/dist/db/migrations/037_fix_035_data_corruption.sql +54 -0
- package/dist/db/providers.d.ts +3 -3
- package/dist/index.js +7 -3
- package/dist/metrics/metrics-extractor.d.ts +3 -2
- package/dist/metrics/metrics-extractor.js +45 -0
- package/dist/metrics/sse-metrics-transform.d.ts +1 -1
- package/dist/metrics/sse-metrics-transform.js +10 -0
- package/dist/monitor/request-tracker.d.ts +1 -1
- package/dist/monitor/stream-content-accumulator.d.ts +1 -1
- package/dist/monitor/stream-extractor.d.ts +1 -1
- package/dist/monitor/stream-extractor.js +21 -0
- package/dist/monitor/types.d.ts +1 -1
- package/dist/proxy/handler/proxy-handler-utils.d.ts +1 -1
- package/dist/proxy/handler/proxy-handler.d.ts +1 -1
- package/dist/proxy/handler/proxy-handler.js +8 -2
- package/dist/proxy/handler/responses.d.ts +7 -0
- package/dist/proxy/handler/responses.js +48 -0
- package/dist/proxy/loop-prevention/tool-loop-guard.d.ts +1 -1
- package/dist/proxy/loop-prevention/tool-loop-guard.js +10 -0
- package/dist/proxy/orchestration/orchestrator.d.ts +1 -1
- package/dist/proxy/orchestration/semaphore.js +6 -0
- package/dist/proxy/patch/deepseek/index.d.ts +1 -1
- package/dist/proxy/patch/deepseek/patch-thinking-param.d.ts +1 -1
- package/dist/proxy/patch/index.d.ts +3 -0
- package/dist/proxy/patch/index.js +28 -0
- package/dist/proxy/patch/tool-round-limiter.d.ts +1 -1
- package/dist/proxy/patch/tool-round-limiter.js +16 -0
- package/dist/proxy/proxy-core.d.ts +1 -1
- package/dist/proxy/proxy-logging.d.ts +3 -3
- package/dist/proxy/response-transform.js +13 -0
- package/dist/proxy/transform/id-utils.d.ts +1 -0
- package/dist/proxy/transform/id-utils.js +3 -0
- package/dist/proxy/transform/plugin-types.d.ts +5 -5
- package/dist/proxy/transform/request-bridge-responses.d.ts +19 -0
- package/dist/proxy/transform/request-bridge-responses.js +311 -0
- package/dist/proxy/transform/request-transform-responses.d.ts +2 -0
- package/dist/proxy/transform/request-transform-responses.js +350 -0
- package/dist/proxy/transform/response-bridge-responses.d.ts +23 -0
- package/dist/proxy/transform/response-bridge-responses.js +173 -0
- package/dist/proxy/transform/response-transform-responses.d.ts +2 -0
- package/dist/proxy/transform/response-transform-responses.js +137 -0
- package/dist/proxy/transform/stream-ant2resp.d.ts +26 -0
- package/dist/proxy/transform/stream-ant2resp.js +322 -0
- package/dist/proxy/transform/stream-bridge-chat2resp.d.ts +40 -0
- package/dist/proxy/transform/stream-bridge-chat2resp.js +382 -0
- package/dist/proxy/transform/stream-bridge-resp2chat.d.ts +24 -0
- package/dist/proxy/transform/stream-bridge-resp2chat.js +237 -0
- package/dist/proxy/transform/stream-resp2ant.d.ts +21 -0
- package/dist/proxy/transform/stream-resp2ant.js +238 -0
- package/dist/proxy/transform/stream-transform-base.d.ts +1 -0
- package/dist/proxy/transform/stream-transform-base.js +3 -0
- package/dist/proxy/transform/transform-coordinator.d.ts +1 -0
- package/dist/proxy/transform/transform-coordinator.js +127 -8
- package/dist/proxy/transform/types-responses.d.ts +177 -0
- package/dist/proxy/transform/types-responses.js +27 -0
- package/dist/proxy/transform/types.d.ts +3 -1
- package/dist/proxy/transport/transport-fn.d.ts +1 -1
- package/frontend-dist/assets/CardContent-BhMXx-JD.js +1 -0
- package/frontend-dist/assets/CardTitle-DQDjTee3.js +1 -0
- package/frontend-dist/assets/CascadingModelSelect-JBQq3JJt.js +1 -0
- package/frontend-dist/assets/Checkbox-ByxbKP_C.js +1 -0
- package/frontend-dist/assets/CollapsibleContent-GecW2Jk_.js +1 -0
- package/frontend-dist/assets/CollapsibleTrigger-Cib3-OsK.js +1 -0
- package/frontend-dist/assets/Collection-Dbvdpa0m.js +1 -0
- package/frontend-dist/assets/Dashboard-3MJPLflT.js +3 -0
- package/frontend-dist/assets/DialogTitle-Ej_rtfV1.js +1 -0
- package/frontend-dist/assets/{Input-CAnKUBBK.js → Input-tcnrMp1v.js} +1 -1
- package/frontend-dist/assets/Label-BwzPFyL-.js +1 -0
- package/frontend-dist/assets/Login-Cdsw2pWC.js +1 -0
- package/frontend-dist/assets/Logs-5_CWiws5.js +1 -0
- package/frontend-dist/assets/MappingList-D8HRph05.js +1 -0
- package/frontend-dist/assets/ModelCard-CZbQcYNn.js +1 -0
- package/frontend-dist/assets/ModelMappings-CJqgl7O8.js +1 -0
- package/frontend-dist/assets/Monitor-B8v5a8fB.js +1 -0
- package/frontend-dist/assets/PopoverTrigger-C88SpJNZ.js +1 -0
- package/frontend-dist/assets/PopperContent-6BXua_FZ.js +1 -0
- package/frontend-dist/assets/Providers-DH0nvlGn.js +1 -0
- package/frontend-dist/assets/ProxyEnhancement-CAH-44W-.js +5 -0
- package/frontend-dist/assets/QuickSetup-CsDO-ZGP.js +1 -0
- package/frontend-dist/assets/RetryRules-8iT9fLsH.js +1 -0
- package/frontend-dist/assets/RouterKeys-BFoEmWgj.js +1 -0
- package/frontend-dist/assets/RovingFocusItem-DdPUFQHC.js +1 -0
- package/frontend-dist/assets/Schedules-B8Se31u4.js +1 -0
- package/frontend-dist/assets/SelectValue-CT2z_-6j.js +1 -0
- package/frontend-dist/assets/Settings-BHvtsJKD.js +6 -0
- package/frontend-dist/assets/Setup-k-l9KDC0.js +1 -0
- package/frontend-dist/assets/Switch-D1NdA4ax.js +1 -0
- package/frontend-dist/assets/TableHeader-CcMyOsUB.js +1 -0
- package/frontend-dist/assets/Teleport-Bmeh33lB.js +3 -0
- package/frontend-dist/assets/TooltipTrigger-LegC_Uvp.js +1 -0
- package/frontend-dist/assets/UnifiedRequestDialog-BVw6W2pk.js +3 -0
- package/frontend-dist/assets/UnifiedRequestDialog-C4MTxb25.css +1 -0
- package/frontend-dist/assets/VisuallyHidden-ogESfc9X.js +1 -0
- package/frontend-dist/assets/VisuallyHiddenInput-BQemVGau.js +1 -0
- package/frontend-dist/assets/alert-dialog-DzKCAoYJ.js +1 -0
- package/frontend-dist/assets/badge-C-9zPTgw.js +1 -0
- package/frontend-dist/assets/button-D27ClX8J.js +14 -0
- package/frontend-dist/assets/check-yTAivq1h.js +1 -0
- package/frontend-dist/assets/common-CWCbKHOK.js +1 -0
- package/frontend-dist/assets/common-D4xnnaqi.js +1 -0
- package/frontend-dist/assets/constants-B-VELBjk.js +1 -0
- package/frontend-dist/assets/copy-DWG9cQPR.js +1 -0
- package/frontend-dist/assets/dashboard-B8eI-t8c.js +1 -0
- package/frontend-dist/assets/dashboard-Dbe6A2lu.js +1 -0
- package/frontend-dist/assets/dialog-BnYR6_dh.js +1 -0
- package/frontend-dist/assets/file-text-D33FJAPX.js +1 -0
- package/frontend-dist/assets/format-BhxQSgt6.js +1 -0
- package/frontend-dist/assets/i18n-CwUfS0tE.js +1 -0
- package/frontend-dist/assets/index-B348nt-T.css +1 -0
- package/frontend-dist/assets/index-DPRxBo3N.js +1 -0
- package/frontend-dist/assets/lib-D0Ek2pPZ.js +1 -0
- package/frontend-dist/assets/loader-circle-EpKC006I.js +1 -0
- package/frontend-dist/assets/login-BTolYxVI.js +1 -0
- package/frontend-dist/assets/login-w_ICpiU5.js +1 -0
- package/frontend-dist/assets/logs-7dT2uyMa.js +1 -0
- package/frontend-dist/assets/logs-_3w8tDQa.js +1 -0
- package/frontend-dist/assets/mappings-Bbn3r2uJ.js +1 -0
- package/frontend-dist/assets/mappings-CTZ-zb1x.js +1 -0
- package/frontend-dist/assets/monitor-DN5m5n_x.js +1 -0
- package/frontend-dist/assets/monitor-DysWEOtt.js +1 -0
- package/frontend-dist/assets/providers-C1gQGzwa.js +1 -0
- package/frontend-dist/assets/providers-CCfko___.js +1 -0
- package/frontend-dist/assets/proxyEnhancement-BItabyLo.js +1 -0
- package/frontend-dist/assets/proxyEnhancement-DeMb7wIE.js +1 -0
- package/frontend-dist/assets/quickSetup-C75HMC_z.js +1 -0
- package/frontend-dist/assets/quickSetup-DStZWiuf.js +1 -0
- package/frontend-dist/assets/requestDetail-BoaPEQs-.js +1 -0
- package/frontend-dist/assets/requestDetail-CM5kFgy6.js +1 -0
- package/frontend-dist/assets/retryRules-CIF37gOl.js +1 -0
- package/frontend-dist/assets/retryRules-o_D8S5gy.js +1 -0
- package/frontend-dist/assets/routerKeys-BAvjW0V8.js +1 -0
- package/frontend-dist/assets/routerKeys-mQt2YPuE.js +1 -0
- package/frontend-dist/assets/schedules-BCV2rxK-.js +1 -0
- package/frontend-dist/assets/schedules-Qte9b7b_.js +1 -0
- package/frontend-dist/assets/settings-Bgu2lJfy.js +1 -0
- package/frontend-dist/assets/settings-UCmMSq_F.js +1 -0
- package/frontend-dist/assets/setup-B_fAfMoV.js +1 -0
- package/frontend-dist/assets/setup-Chc246Zi.js +1 -0
- package/frontend-dist/assets/sidebar-B7rejnZA.js +1 -0
- package/frontend-dist/assets/sidebar-CBMItLst.js +1 -0
- package/frontend-dist/assets/sun-BylRZIWt.js +1 -0
- package/frontend-dist/assets/trash-2-QNFff7V4.js +1 -0
- package/frontend-dist/assets/{useClipboard-BmmsNSGV.js → useClipboard-BFt5f-_-.js} +1 -1
- package/frontend-dist/assets/{useFocusGuards-A-9V2Y-b.js → useFocusGuards-DQBZKWnu.js} +1 -1
- package/frontend-dist/assets/useFormControl-T2RQNBqs.js +1 -0
- package/frontend-dist/assets/useLogRetention-NrrZrpPE.js +1 -0
- package/frontend-dist/assets/useNonce-DR38uny5.js +1 -0
- package/frontend-dist/assets/useTheme-CpTI547G.js +1 -0
- package/frontend-dist/assets/x-DSgLgKC_.js +1 -0
- package/frontend-dist/index.html +25 -22
- package/package.json +1 -1
- package/dist/db/migrations/033_add_pipeline_snapshot.sql +0 -1
- package/frontend-dist/assets/CardContent-BVMQ2_pg.js +0 -1
- package/frontend-dist/assets/CardTitle-GLv7QyIY.js +0 -1
- package/frontend-dist/assets/CascadingModelSelect-CBhqKFDX.js +0 -1
- package/frontend-dist/assets/Checkbox-HPVDmEdV.js +0 -1
- package/frontend-dist/assets/CollapsibleTrigger-DhxD9tpM.js +0 -1
- package/frontend-dist/assets/Collection-BRt7YxN8.js +0 -1
- package/frontend-dist/assets/Dashboard-D1Ys8Zog.js +0 -3
- package/frontend-dist/assets/DialogTitle-23q73lwF.js +0 -1
- package/frontend-dist/assets/Label-DWdYtVMI.js +0 -1
- package/frontend-dist/assets/Login-w5WFOinP.js +0 -1
- package/frontend-dist/assets/Logs-C1F1ZmWF.js +0 -1
- package/frontend-dist/assets/ModelMappings-BzmecWEH.js +0 -1
- package/frontend-dist/assets/Monitor-DrAZFTKR.js +0 -1
- package/frontend-dist/assets/PopoverTrigger-Bj65uUbv.js +0 -1
- package/frontend-dist/assets/PopperContent-gzzf1XHe.js +0 -1
- package/frontend-dist/assets/Providers-DSgf4mb6.js +0 -1
- package/frontend-dist/assets/ProxyEnhancement-Bb1cCP6d.js +0 -5
- package/frontend-dist/assets/RetryRules-BwPfEZtm.js +0 -1
- package/frontend-dist/assets/RouterKeys-CzTSq1Mx.js +0 -1
- package/frontend-dist/assets/RovingFocusItem-CXM_Yfkm.js +0 -1
- package/frontend-dist/assets/Schedules-DVilCXrC.js +0 -1
- package/frontend-dist/assets/SelectValue-C0-LzGQY.js +0 -1
- package/frontend-dist/assets/Settings-Bpk53zVX.js +0 -6
- package/frontend-dist/assets/Setup-Dn7EgC49.js +0 -1
- package/frontend-dist/assets/Switch-BO8Ooae6.js +0 -1
- package/frontend-dist/assets/TableHeader-Bded9VTC.js +0 -1
- package/frontend-dist/assets/TabsTrigger-BzKMi9AF.js +0 -1
- package/frontend-dist/assets/Teleport-DizRK5O3.js +0 -3
- package/frontend-dist/assets/TooltipTrigger-EiIy2zn8.js +0 -1
- package/frontend-dist/assets/UnifiedRequestDialog-BABsTaGb.js +0 -3
- package/frontend-dist/assets/UnifiedRequestDialog-BjEigSaR.css +0 -1
- package/frontend-dist/assets/VisuallyHidden-5AozJQza.js +0 -1
- package/frontend-dist/assets/VisuallyHiddenInput-DdiZrV2i.js +0 -1
- package/frontend-dist/assets/alert-dialog-DlKUuTPe.js +0 -1
- package/frontend-dist/assets/arrow-down-CxWKmZ2I.js +0 -1
- package/frontend-dist/assets/badge-9KJEMa53.js +0 -1
- package/frontend-dist/assets/button-Ul8WlrM5.js +0 -12
- package/frontend-dist/assets/check-7ahK--N4.js +0 -1
- package/frontend-dist/assets/constants-D_0jiLjw.js +0 -1
- package/frontend-dist/assets/copy-DzU2pAMG.js +0 -1
- package/frontend-dist/assets/dialog-B9j-FMrd.js +0 -1
- package/frontend-dist/assets/file-text-Bj3ZIo-E.js +0 -1
- package/frontend-dist/assets/format-Dln15Luw.js +0 -1
- package/frontend-dist/assets/index-Bz_ZaXNn.css +0 -1
- package/frontend-dist/assets/index-MedWZMHB.js +0 -1
- package/frontend-dist/assets/lib-Hhs3NqfD.js +0 -1
- package/frontend-dist/assets/loader-circle-5TJUukEe.js +0 -1
- package/frontend-dist/assets/useFormControl-DEO19lRe.js +0 -1
- package/frontend-dist/assets/useLogRetention-BfnBFZ5K.js +0 -1
- package/frontend-dist/assets/useNonce-BfwUJ1Ci.js +0 -1
- package/frontend-dist/assets/x-Cfopt3QL.js +0 -1
- /package/dist/db/migrations/{034_drop_redundant_log_columns.sql → 035_drop_redundant_log_columns.sql} +0 -0
- /package/frontend-dist/assets/{ohash.D__AXeF1-D5e5Wyzx.js → ohash.D__AXeF1-CTo5WcIm.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{M as e}from"./button-D27ClX8J.js";var t=e(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`Confirm`,t=`Cancel`,n=`Save`,r=`Edit`,i=`Add`,a=`Close`,o=`Loading...`,s=`Search`,c=`Enabled`,l=`Disabled`,u=`Yes`,d=`No`,f=`All`,p=`All Models`,m=`All Keys`,h=`Success`,g=`Failed`,_=`No data`,v=`Copy`,y=`Copied`,b=`Name`,x=`Status`,S=`Actions`,C=`Created At`,w=`Saving...`,T=`Saved successfully`,E=`Deleted successfully`,D=`Confirm Delete`,O=`This action cannot be undone`,k=`Please input`,A=`Please select`,j=`No data available`,M=`Type`,N=`Models`,P=`Concurrency`,F=`Mode`,I=`Auto`,L=`Manual`,R=`None`,z=`Adaptive`,B=`Active`,V=`Inactive`,H=`Save Thresholds`,U=`Last checked`,W=`{count} items`,G=`Enable`,K=`Disable`,q=`In Progress`,J=`Failed`,Y=`Completed`,X=`Save failed`,Z=`Please select...`,Q=`No options`,$={confirm:e,cancel:t,save:n,delete:`Delete`,edit:r,add:`Add`,close:a,loading:o,search:s,enabled:c,disabled:l,yes:`Yes`,no:`No`,all:`All`,allModels:p,allKeys:m,success:h,failed:g,noData:_,copy:v,copied:y,name:b,status:x,actions:S,createdAt:C,saving:w,saveSuccess:T,deleteSuccess:E,confirmDelete:D,irreversible:O,pleaseInput:k,pleaseSelect:A,noDataAvailable:j,type:M,models:N,concurrency:P,mode:F,auto:I,manual:L,none:R,adaptive:z,active:B,inactive:V,saveThresholds:H,lastChecked:U,count:W,enable:G,disable:K,statusPending:q,statusFailed:J,statusCompleted:Y,new:`New`,saveFailed:X,cascadingSelect:Z,cascadingNoOptions:Q};export{S as actions,B as active,z as adaptive,i as add,f as all,m as allKeys,p as allModels,I as auto,t as cancel,Q as cascadingNoOptions,Z as cascadingSelect,a as close,P as concurrency,e as confirm,D as confirmDelete,y as copied,v as copy,W as count,C as createdAt,$ as default,E as deleteSuccess,K as disable,l as disabled,r as edit,G as enable,c as enabled,g as failed,V as inactive,O as irreversible,U as lastChecked,o as loading,L as manual,F as mode,N as models,b as name,d as no,_ as noData,j as noDataAvailable,R as none,k as pleaseInput,A as pleaseSelect,n as save,X as saveFailed,T as saveSuccess,H as saveThresholds,w as saving,s as search,x as status,Y as statusCompleted,J as statusFailed,q as statusPending,h as success,M as type,u as yes};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`确认`,t=`取消`,n=`保存`,r=`编辑`,i=`添加`,a=`关闭`,o=`加载中...`,s=`搜索`,c=`启用`,l=`禁用`,u=`是`,d=`否`,f=`全部`,p=`全部模型`,m=`全部密钥`,h=`操作成功`,g=`操作失败`,_=`暂无数据`,v=`复制`,y=`已复制`,b=`名称`,x=`状态`,S=`操作`,C=`创建时间`,w=`保存中...`,T=`保存成功`,E=`删除成功`,D=`确认删除`,O=`此操作不可撤销`,k=`请输入`,A=`请选择`,j=`暂无可用数据`,M=`类型`,N=`模型`,P=`并发`,F=`模式`,I=`自动`,L=`手动`,R=`无`,z=`自适应`,B=`启用`,V=`禁用`,H=`保存阈值`,U=`上次检查`,W=`{count} 条`,G=`启用`,K=`禁用`,q=`进行中`,J=`失败`,Y=`完成`,X=`保存失败`,Z=`请选择...`,Q=`暂无选项`,$={confirm:e,cancel:t,save:n,delete:`删除`,edit:r,add:i,close:a,loading:o,search:s,enabled:c,disabled:l,yes:`是`,no:`否`,all:f,allModels:p,allKeys:m,success:h,failed:g,noData:_,copy:v,copied:y,name:b,status:x,actions:S,createdAt:C,saving:w,saveSuccess:T,deleteSuccess:E,confirmDelete:D,irreversible:O,pleaseInput:k,pleaseSelect:A,noDataAvailable:j,type:M,models:N,concurrency:P,mode:F,auto:I,manual:L,none:`无`,adaptive:z,active:B,inactive:V,saveThresholds:H,lastChecked:U,count:W,enable:G,disable:K,statusPending:q,statusFailed:J,statusCompleted:Y,new:`新`,saveFailed:X,cascadingSelect:Z,cascadingNoOptions:Q};export{S as actions,B as active,z as adaptive,i as add,f as all,m as allKeys,p as allModels,I as auto,t as cancel,Q as cascadingNoOptions,Z as cascadingSelect,a as close,P as concurrency,e as confirm,D as confirmDelete,y as copied,v as copy,W as count,C as createdAt,$ as default,E as deleteSuccess,K as disable,l as disabled,r as edit,G as enable,c as enabled,g as failed,V as inactive,O as irreversible,U as lastChecked,o as loading,L as manual,F as mode,N as models,b as name,d as no,_ as noData,j as noDataAvailable,R as none,k as pleaseInput,A as pleaseSelect,n as save,X as saveFailed,T as saveSuccess,H as saveThresholds,w as saving,s as search,x as status,Y as statusCompleted,J as statusFailed,q as statusPending,h as success,M as type,u as yes};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=2e5;export{e as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{M as e}from"./button-D27ClX8J.js";var t=e(`copy`,[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`,key:`17jyea`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`,key:`zix9uf`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`Dashboard`,t={totalRequests:`Total Requests`,successRate:`Success Rate`,tokenOutputSpeed:`Token Output Speed`,tokenInputTotal:`Token Input Total`,tokenOutputTotal:`Token Output Total`},n={tokenOutputSpeed:`Token Output Speed (t/s)`,tokenInputTotal:`Token Input Total`,tokenOutputTotal:`Token Output Total`},r={last5Hours:`Last 5 Hours`,weekly:`This Week`,monthly:`This Month`,custom:`Custom`},i=`Failed to load providers`,a=`Failed to load dashboard data`,o={title:e,stats:t,charts:n,period:r,loadProvidersFailed:i,loadDashboardFailed:a};export{n as charts,o as default,a as loadDashboardFailed,i as loadProvidersFailed,r as period,t as stats,e as title};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`仪表盘`,t={totalRequests:`总请求数`,successRate:`成功率`,tokenOutputSpeed:`Token 输出速度`,tokenInputTotal:`Token 输入总量`,tokenOutputTotal:`Token 输出总量`},n={tokenOutputSpeed:`Token 输出速度 (t/s)`,tokenInputTotal:`Token 输入总量`,tokenOutputTotal:`Token 输出总量`},r={last5Hours:`最近5小时`,weekly:`本周`,monthly:`本月`,custom:`自定义`},i=`加载供应商列表失败`,a=`加载仪表盘数据失败`,o={title:e,stats:t,charts:n,period:r,loadProvidersFailed:i,loadDashboardFailed:a};export{n as charts,o as default,a as loadDashboardFailed,i as loadProvidersFailed,r as period,t as stats,e as title};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Bt as e,Ct as t,J as n,K as r,Q as i,Rt as a,Vt as o,X as s,Y as c,Z as l,at as u,et as d,n as f,pt as p,q as m,r as h,ut as g,x as _}from"./button-D27ClX8J.js";import{t as v}from"./x-DSgLgKC_.js";import{d as y,t as b,u as x}from"./Teleport-Bmeh33lB.js";import{a as S,i as C,n as w,o as T,r as E,t as D}from"./DialogTitle-Ej_rtfV1.js";var O=i({__name:`DialogPortal`,props:{to:{type:null,required:!1},disabled:{type:Boolean,required:!1},defer:{type:Boolean,required:!1},forceMount:{type:Boolean,required:!1}},setup(e){let n=e;return(e,r)=>(g(),m(a(b),o(d(n)),{default:t(()=>[p(e.$slots,`default`)]),_:3},16))}}),k=i({__name:`Dialog`,props:{open:{type:Boolean},defaultOpen:{type:Boolean},modal:{type:Boolean}},emits:[`update:open`],setup(e,{emit:n}){let r=x(e,n);return(e,n)=>(g(),m(a(T),u({"data-slot":`dialog`},a(r)),{default:t(t=>[p(e.$slots,`default`,o(d(t)))]),_:3},16))}}),A=i({__name:`DialogOverlay`,props:{forceMount:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let n=e,r=_(n,`class`);return(e,i)=>(g(),m(a(w),u({"data-slot":`dialog-overlay`},a(r),{class:a(h)(`data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-overlay-light duration-fast supports-backdrop-filter:backdrop-blur-xs fixed inset-0 isolate z-modal`,n.class)}),{default:t(()=>[p(e.$slots,`default`)]),_:3},16,[`class`]))}}),j=i({inheritAttrs:!1,__name:`DialogContent`,props:{forceMount:{type:Boolean},disableOutsidePointerEvents:{type:Boolean},asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]},showCloseButton:{type:Boolean,default:!0}},emits:[`escapeKeyDown`,`pointerDownOutside`,`focusOutside`,`interactOutside`,`openAutoFocus`,`closeAutoFocus`],setup(e,{emit:i}){let o=e,s=i,c=x(_(o,`class`),s);return(i,s)=>(g(),m(a(O),null,{default:t(()=>[l(A),l(a(C),u({"data-slot":`dialog-content`},{...i.$attrs,...a(c)},{class:a(h)(`bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 ring-foreground/10 grid max-w-[calc(100%-2rem)] max-h-[90vh] overflow-y-auto gap-4 rounded-xl p-4 text-sm ring-1 duration-fast sm:max-w-sm fixed top-1/2 left-1/2 z-modal w-full -translate-x-1/2 -translate-y-1/2 outline-none`,o.class)}),{default:t(()=>[p(i.$slots,`default`),e.showCloseButton?(g(),m(a(S),{key:0,"data-slot":`dialog-close`,"as-child":``},{default:t(()=>[l(a(f),{variant:`ghost`,class:`absolute top-2 right-2`,size:`icon-sm`},{default:t(()=>[l(a(v)),s[0]||=r(`span`,{class:`sr-only`},`Close`,-1)]),_:1})]),_:1})):n(``,!0)]),_:3},16,[`class`])]),_:3}))}}),M=i({__name:`DialogDescription`,props:{asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let n=e,r=y(_(n,`class`));return(e,i)=>(g(),m(a(E),u({"data-slot":`dialog-description`},a(r),{class:a(h)(`text-muted-foreground *:[a]:hover:text-foreground text-sm *:[a]:underline *:[a]:underline-offset-3`,n.class)}),{default:t(()=>[p(e.$slots,`default`)]),_:3},16,[`class`]))}}),N=i({__name:`DialogFooter`,props:{class:{type:[Boolean,null,String,Object,Array]},showCloseButton:{type:Boolean,default:!1}},setup(r){let i=r;return(o,u)=>(g(),c(`div`,{"data-slot":`dialog-footer`,class:e(a(h)(`bg-muted/50 -mx-4 -mb-4 rounded-b-xl border-t p-4 flex flex-col-reverse gap-2 sm:flex-row sm:justify-end`,i.class))},[p(o.$slots,`default`),r.showCloseButton?(g(),m(a(S),{key:0,"as-child":``},{default:t(()=>[l(a(f),{variant:`outline`},{default:t(()=>[...u[0]||=[s(` Close `,-1)]]),_:1})]),_:1})):n(``,!0)],2))}}),P=i({__name:`DialogHeader`,props:{class:{type:[Boolean,null,String,Object,Array]}},setup(t){let n=t;return(t,r)=>(g(),c(`div`,{"data-slot":`dialog-header`,class:e(a(h)(`gap-2 flex flex-col`,n.class))},[p(t.$slots,`default`)],2))}}),F=i({__name:`DialogTitle`,props:{asChild:{type:Boolean},as:{},class:{type:[Boolean,null,String,Object,Array]}},setup(e){let n=e,r=y(_(n,`class`));return(e,i)=>(g(),m(a(D),u({"data-slot":`dialog-title`},a(r),{class:a(h)(`text-base leading-none font-medium cn-font-heading`,n.class)}),{default:t(()=>[p(e.$slots,`default`)]),_:3},16,[`class`]))}});export{j as a,M as i,P as n,k as o,N as r,F as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{M as e}from"./button-D27ClX8J.js";var t=e(`file-text`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 9H8`,key:`b1mrlr`}],[`path`,{d:`M16 13H8`,key:`t4e002`}],[`path`,{d:`M16 17H8`,key:`z1uh3a`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e}from"./i18n-CwUfS0tE.js";function t(){return e.global.locale.value}var n={timeZone:`Asia/Shanghai`};function r(e){return new Date(e.endsWith(`Z`)||e.includes(`+`)?e:e.replace(` `,`T`)+`Z`)}function i(e){return r(e).toLocaleString(t(),n)}function a(e){return r(e).toLocaleString(t(),{...n,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`})}function o(e){return e.toLocaleTimeString(t(),{...n,hour:`2-digit`,minute:`2-digit`})}function s(e){return e.toLocaleString(t(),{...n,month:`numeric`,day:`numeric`,hour:`2-digit`,minute:`2-digit`})}export{r as a,a as i,o as n,s as r,i as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{N as e,P as t}from"./button-D27ClX8J.js";var n=[`zh-CN`,`en`],r=`llm-router-locale`,i=`zh-CN`;function a(){let e=localStorage.getItem(r);return e&&n.includes(e)?e:i}var o=t({legacy:!1,locale:a(),fallbackLocale:`zh-CN`,messages:{}});async function s(t){let n=Object.assign({"./locales/en/common.json":()=>e(()=>import(`./common-CWCbKHOK.js`),[]),"./locales/en/dashboard.json":()=>e(()=>import(`./dashboard-B8eI-t8c.js`),[]),"./locales/en/login.json":()=>e(()=>import(`./login-BTolYxVI.js`),[]),"./locales/en/logs.json":()=>e(()=>import(`./logs-_3w8tDQa.js`),[]),"./locales/en/mappings.json":()=>e(()=>import(`./mappings-CTZ-zb1x.js`),[]),"./locales/en/monitor.json":()=>e(()=>import(`./monitor-DN5m5n_x.js`),[]),"./locales/en/providers.json":()=>e(()=>import(`./providers-CCfko___.js`),[]),"./locales/en/proxyEnhancement.json":()=>e(()=>import(`./proxyEnhancement-BItabyLo.js`),[]),"./locales/en/quickSetup.json":()=>e(()=>import(`./quickSetup-DStZWiuf.js`),[]),"./locales/en/requestDetail.json":()=>e(()=>import(`./requestDetail-CM5kFgy6.js`),[]),"./locales/en/retryRules.json":()=>e(()=>import(`./retryRules-CIF37gOl.js`),[]),"./locales/en/routerKeys.json":()=>e(()=>import(`./routerKeys-mQt2YPuE.js`),[]),"./locales/en/schedules.json":()=>e(()=>import(`./schedules-BCV2rxK-.js`),[]),"./locales/en/settings.json":()=>e(()=>import(`./settings-UCmMSq_F.js`),[]),"./locales/en/setup.json":()=>e(()=>import(`./setup-Chc246Zi.js`),[]),"./locales/en/sidebar.json":()=>e(()=>import(`./sidebar-B7rejnZA.js`),[]),"./locales/zh-CN/common.json":()=>e(()=>import(`./common-D4xnnaqi.js`),[]),"./locales/zh-CN/dashboard.json":()=>e(()=>import(`./dashboard-Dbe6A2lu.js`),[]),"./locales/zh-CN/login.json":()=>e(()=>import(`./login-w_ICpiU5.js`),[]),"./locales/zh-CN/logs.json":()=>e(()=>import(`./logs-7dT2uyMa.js`),[]),"./locales/zh-CN/mappings.json":()=>e(()=>import(`./mappings-Bbn3r2uJ.js`),[]),"./locales/zh-CN/monitor.json":()=>e(()=>import(`./monitor-DysWEOtt.js`),[]),"./locales/zh-CN/providers.json":()=>e(()=>import(`./providers-C1gQGzwa.js`),[]),"./locales/zh-CN/proxyEnhancement.json":()=>e(()=>import(`./proxyEnhancement-DeMb7wIE.js`),[]),"./locales/zh-CN/quickSetup.json":()=>e(()=>import(`./quickSetup-C75HMC_z.js`),[]),"./locales/zh-CN/requestDetail.json":()=>e(()=>import(`./requestDetail-BoaPEQs-.js`),[]),"./locales/zh-CN/retryRules.json":()=>e(()=>import(`./retryRules-o_D8S5gy.js`),[]),"./locales/zh-CN/routerKeys.json":()=>e(()=>import(`./routerKeys-BAvjW0V8.js`),[]),"./locales/zh-CN/schedules.json":()=>e(()=>import(`./schedules-Qte9b7b_.js`),[]),"./locales/zh-CN/settings.json":()=>e(()=>import(`./settings-Bgu2lJfy.js`),[]),"./locales/zh-CN/setup.json":()=>e(()=>import(`./setup-B_fAfMoV.js`),[]),"./locales/zh-CN/sidebar.json":()=>e(()=>import(`./sidebar-CBMItLst.js`),[])}),r=`./locales/${t}/`,i=Object.entries(n).filter(([e])=>e.startsWith(r)).map(async([e,t])=>{let n=await t();return{fileName:e.split(`/`).pop().replace(`.json`,``),messages:n.default}}),a=await Promise.all(i);for(let{fileName:e,messages:n}of a)o.global.mergeLocaleMessage(t,{[e]:n})}export{o as n,s as r,r as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import "https://fonts.googleapis.com/css2?family=Geist:wght@400;500;600;700&display=swap";html[dir=ltr],[data-sonner-toaster][dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0}html[dir=rtl],[data-sonner-toaster][dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto}[data-sonner-toaster]{width:var(--width);--gray1:#fcfcfc;--gray2:#f8f8f8;--gray3:#f3f3f3;--gray4:#ededed;--gray5:#e8e8e8;--gray6:#e2e2e2;--gray7:#dbdbdb;--gray8:#c7c7c7;--gray9:#8f8f8f;--gray10:#858585;--gray11:#6f6f6f;--gray12:#171717;--border-radius:8px;box-sizing:border-box;z-index:999999999;outline:none;margin:0;padding:0;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;list-style:none;transition:transform .4s;position:fixed}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);opacity:0;transform:var(--y);touch-action:none;box-sizing:border-box;overflow-wrap:anywhere;outline:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;position:absolute}[data-sonner-toast][data-styled=true]{background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);width:var(--width);align-items:center;gap:6px;padding:16px;font-size:13px;display:flex;box-shadow:0 4px 12px #0000001a}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap));top:0}[data-sonner-toast][data-y-position=bottom]{--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap));bottom:0}[data-sonner-toast][data-styled=true] [data-description]{color:#3f3f3f;font-weight:400;line-height:1.4}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{color:inherit;font-weight:500;line-height:1.5}[data-sonner-toast][data-styled=true] [data-icon]{width:16px;height:16px;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end);flex-shrink:0;justify-content:flex-start;align-items:center;display:flex;position:relative}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform-origin:50%;animation:.3s forwards sonner-fade-in;transform:scale(.8)}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{flex-direction:column;gap:2px;display:flex}[data-sonner-toast][data-styled=true] [data-button]{height:24px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);cursor:pointer;border:none;border-radius:4px;outline:none;flex-shrink:0;align-items:center;padding-left:8px;padding-right:8px;font-size:12px;font-weight:500;transition:opacity .4s,box-shadow .2s;display:flex}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:#00000014}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:#ffffff4d}[data-sonner-toaster] [data-close-button-position=top-left]{--toast-close-button-left:0;--toast-close-button-right:unset;--toast-close-button-top:0;--toast-close-button-bottom:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster] [data-close-button-position=top-right]{--toast-close-button-left:unset;--toast-close-button-right:0;--toast-close-button-top:0;--toast-close-button-bottom:unset;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster] [data-close-button-position=bottom-left]{--toast-close-button-left:0;--toast-close-button-right:unset;--toast-close-button-top:unset;--toast-close-button-bottom:0;--toast-close-button-transform:translate(-35%, 35%)}[data-sonner-toaster] [data-close-button-position=bottom-right]{--toast-close-button-left:unset;--toast-close-button-right:0;--toast-close-button-top:unset;--toast-close-button-bottom:0;--toast-close-button-transform:translate(35%, 35%)}[data-sonner-toast][data-styled=true] [data-close-button]{left:var(--toast-close-button-left);right:var(--toast-close-button-right);top:var(--toast-close-button-top);bottom:var(--toast-close-button-bottom);width:20px;height:20px;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);cursor:pointer;z-index:1;border-radius:50%;justify-content:center;align-items:center;padding:0;transition:opacity .1s,background .2s,border-color .2s;display:flex;position:absolute}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]:before{content:"";z-index:-1;height:100%;position:absolute;left:-100%;right:-100%}[data-sonner-toast][data-y-position=top][data-swiping=true]:before{bottom:50%;transform:scaleY(3)translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]:before{top:50%;transform:scaleY(3)translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]:before{content:"";position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]:after{content:"";height:calc(var(--gap) + 1px);width:100%;position:absolute;bottom:100%;left:0}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * .05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--toasts-before) * .05 + 1));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]:before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0px)) translateX(var(--swipe-amount-x,0px));transition:none}[data-sonner-toast][data-swiped=true]{-webkit-user-select:none;user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{0%{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{0%{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (width<=600px){[data-sonner-toaster]{right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%;position:fixed}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{width:calc(100% - var(--mobile-offset-left) * 2);left:0;right:0}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:calc(var(--mobile-offset-bottom) + max(env(safe-area-inset-bottom), 0px))}[data-sonner-toaster][data-y-position=top]{top:calc(var(--mobile-offset-top) + max(env(safe-area-inset-top), 0px))}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:#ecfdf3;--success-border:#bffcd9;--success-text:#008a2e;--info-bg:#f0f8ff;--info-border:#dde7fd;--info-text:#0973dc;--warning-bg:#fffcf0;--warning-border:#fbeeb1;--warning-text:#dc7609;--error-bg:#fff0f0;--error-border:#ffe0e1;--error-text:#e60000}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:#333;--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:#1f1f1f;--normal-border:#333;--normal-border-hover:#404040;--normal-text:var(--gray1);--success-bg:#001f0f;--success-border:#003d1c;--success-text:#59f3a6;--info-bg:#000d1f;--info-border:#19233e;--info-text:#5896f3;--warning-bg:#1d1f00;--warning-border:#2e2e00;--warning-text:#f3cf58;--error-bg:#2d0607;--error-border:#4d0408;--error-text:#ff9ea1}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success],[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info],[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning],[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error],[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);z-index:10;position:absolute;inset:0}.sonner-loading-wrapper[data-visible=false]{transform-origin:50%;animation:.2s forwards sonner-fade-out}.sonner-spinner{height:var(--size);width:var(--size);position:relative;top:50%;left:50%}.sonner-loading-bar{background:var(--gray11);border-radius:6px;width:24%;height:8%;animation:1.2s linear infinite sonner-spin;position:absolute;top:-3.9%;left:-10%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg)translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg)translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg)translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg)translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg)translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg)translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg)translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg)translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg)translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg)translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg)translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg)translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{transform-origin:50%;transition:opacity .2s,transform .2s;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8)translate(-50%,-50%)}:root{--color-teal-50:oklch(97% .02 175);--color-teal-100:oklch(93% .04 175);--color-teal-200:oklch(87% .07 175);--color-teal-300:oklch(78% .1 175);--color-teal-400:oklch(68% .13 175);--color-teal-500:oklch(58% .14 175);--color-teal-600:oklch(48% .12 175);--color-teal-700:oklch(40% .1 175);--color-teal-800:oklch(32% .08 175);--color-teal-900:oklch(25% .06 175);--color-success:oklch(65% .17 150);--color-success-light:oklch(92% .05 150);--color-success-dark:oklch(45% .15 150);--color-warning:oklch(78% .16 80);--color-warning-light:oklch(94% .06 80);--color-warning-dark:oklch(55% .14 80);--color-danger:oklch(58% .22 25);--color-danger-light:oklch(90% .08 25);--color-danger-dark:oklch(40% .18 25);--color-info:oklch(62% .18 250);--color-info-light:oklch(91% .06 250);--color-info-dark:oklch(43% .16 250);--color-bg-page:var(--background);--color-bg-card:var(--card);--color-bg-sidebar:oklch(20.5% 0 0);--color-text-primary:var(--foreground);--color-text-secondary:var(--muted-foreground);--color-text-tertiary:oklch(65% 0 0);--color-role-user:oklch(78% .1 175);--color-role-user-bg:oklch(97% .02 175);--color-role-assistant:oklch(65% .14 260);--color-role-assistant-bg:oklch(93% .04 260);--color-role-tool:oklch(60% .08 30);--color-role-tool-bg:oklch(96% .02 30);--color-role-thinking:oklch(58% .12 290);--color-role-thinking-bg:oklch(91% .03 290);--color-sse-message-start:oklch(68% .13 175);--color-sse-content-block-start:oklch(58% .14 175);--color-sse-content-block-delta:oklch(48% .12 175);--color-sse-message-delta:oklch(40% .1 175);--color-sse-message-stop:oklch(65% .17 150);--spacing-dense-xs:.25rem;--spacing-dense-sm:.375rem;--spacing-dense-md:.5rem;--spacing-page:1.5rem;--spacing-section:1.25rem;--spacing-card:1rem;--spacing-tight:.5rem;--gap-icon-text:.375rem;--radius-pill:9999px;--color-overlay-light:oklch(0% 0 0/.1);--color-overlay:oklch(0% 0 0/.8);--shadow-card:0 1px 3px oklch(0% 0 0/.1);--shadow-elevated:0 4px 12px oklch(0% 0 0/.12);--shadow-focus:0 0 0 2px oklch(58% .14 175);--duration-fast:.15s;--duration-normal:.2s;--ease-default:cubic-bezier(.4, 0, .2, 1);--z-modal:100;--z-dropdown:150;--z-toast:200}.dark{--color-success-light:oklch(32% .05 150);--color-warning-light:oklch(35% .06 80);--color-danger-light:oklch(30% .08 25);--color-info-light:oklch(30% .06 250);--color-bg-sidebar:oklch(14.5% 0 0);--color-text-tertiary:oklch(55.6% 0 0);--color-role-user-bg:oklch(32% .05 175);--color-role-user:oklch(72% .08 175);--color-role-assistant-bg:oklch(30% .06 260);--color-role-assistant:oklch(60% .1 260);--color-role-tool-bg:oklch(28% .04 30);--color-role-tool:oklch(65% .06 30);--color-role-thinking-bg:oklch(28% .05 290);--color-role-thinking:oklch(55% .09 290)}*,:before,:after,::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border:0 solid #e5e7eb}:before,:after{--tw-content:""}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--font-sans);font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--font-mono);font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:#0000;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{margin:0;padding:0;list-style:none}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder{opacity:1;color:#9ca3af}textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background:oklch(100% 0 0);--foreground:oklch(14.5% 0 0);--card:oklch(100% 0 0);--card-foreground:oklch(14.5% 0 0);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.5% 0 0);--primary:oklch(48% .12 175);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(97% 0 0);--secondary-foreground:oklch(20.5% 0 0);--muted:oklch(97% 0 0);--muted-foreground:oklch(55.6% 0 0);--accent:oklch(97% 0 0);--accent-foreground:oklch(20.5% 0 0);--destructive:oklch(57.7% .245 27.325);--border:oklch(92.2% 0 0);--input:oklch(92.2% 0 0);--ring:oklch(58% .14 175);--chart-1:oklch(87% 0 0);--chart-2:oklch(55.6% 0 0);--chart-3:oklch(43.9% 0 0);--chart-4:oklch(37.1% 0 0);--chart-5:oklch(26.9% 0 0);--radius:.375rem;--radius-sm:calc(var(--radius) - 4px);--radius-md:calc(var(--radius) - 2px);--radius-lg:var(--radius);--radius-xl:calc(var(--radius) + 2px);--sidebar:oklch(98.5% 0 0);--sidebar-foreground:oklch(14.5% 0 0);--sidebar-primary:oklch(20.5% 0 0);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(97% 0 0);--sidebar-accent-foreground:oklch(20.5% 0 0);--sidebar-border:oklch(92.2% 0 0);--sidebar-ring:oklch(70.8% 0 0);--font-sans:"Geist Variable", sans-serif;--font-heading:var(--font-sans);--font-mono:"JetBrains Mono", "Fira Code", ui-monospace, monospace}.dark{--background:oklch(14.5% 0 0);--foreground:oklch(98.5% 0 0);--card:oklch(20.5% 0 0);--card-foreground:oklch(98.5% 0 0);--popover:oklch(20.5% 0 0);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(68% .13 175);--primary-foreground:oklch(20.5% 0 0);--secondary:oklch(26.9% 0 0);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(26.9% 0 0);--muted-foreground:oklch(70.8% 0 0);--accent:oklch(26.9% 0 0);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(70.4% .191 22.216);--border:oklch(100% 0 0/.1);--input:oklch(100% 0 0/.15);--ring:oklch(78% .1 175);--chart-1:oklch(87% 0 0);--chart-2:oklch(55.6% 0 0);--chart-3:oklch(43.9% 0 0);--chart-4:oklch(37.1% 0 0);--chart-5:oklch(26.9% 0 0);--sidebar:oklch(20.5% 0 0);--sidebar-foreground:oklch(98.5% 0 0);--sidebar-primary:oklch(68% .13 175);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(26.9% 0 0);--sidebar-accent-foreground:oklch(98.5% 0 0);--sidebar-border:oklch(100% 0 0/.1);--sidebar-ring:oklch(55.6% 0 0)}*{border-color:var(--border)}body{background-color:var(--background);color:var(--foreground);font-family:var(--font-sans)}.theme{--font-heading:var(--font-sans)}.dot-success{background-color:var(--color-success)}.block-thinking{background-color:var(--color-role-thinking-bg)}.block-tool-use{background-color:var(--color-role-tool-bg)}.block-tool-result{background-color:var(--color-role-user-bg)}.block-thinking-content{background-color:oklch(from var(--color-role-thinking-bg) l c h / .7);color:var(--muted-foreground)}.block-tool-use-content{background-color:oklch(from var(--color-role-tool-bg) l c h / .7)}.block-tool-result-content{background-color:oklch(from var(--color-role-user-bg) l c h / .7)}.diff-modified{background-color:var(--color-warning-light);border-color:var(--color-warning)}.diff-removed{color:var(--color-danger)}.diff-added{color:var(--color-success)}.progress-active{background-color:var(--color-success)}.progress-failed{background-color:var(--color-danger)}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.bottom-0{bottom:0}.bottom-2{bottom:.5rem}.left-1\/2{left:50%}.left-56{left:14rem}.left-full{left:100%}.right-0{right:0}.right-2{right:.5rem}.right-4{right:1rem}.top-0{top:0}.top-1\/2{top:50%}.top-2{top:.5rem}.top-4{top:1rem}.isolate{isolation:isolate}.z-10{z-index:10}.z-50{z-index:50}.z-\[200\]{z-index:200}.z-dropdown{z-index:var(--z-dropdown)}.z-modal{z-index:var(--z-modal)}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2/span 2}.row-start-1{grid-row-start:1}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.-mx-4{margin-left:-1rem;margin-right:-1rem}.mx-0\.5{margin-left:.125rem;margin-right:.125rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-1\.5{margin-top:.375rem;margin-bottom:.375rem}.my-8{margin-top:2rem;margin-bottom:2rem}.-mb-4{margin-bottom:-1rem}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.ml-0\.5{margin-left:.125rem}.ml-1{margin-left:.25rem}.ml-4{margin-left:1rem}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-row{display:table-row}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1}.size-1\.5{width:.375rem;height:.375rem}.size-10{width:2.5rem;height:2.5rem}.size-2\.5{width:.625rem;height:.625rem}.size-3{width:.75rem;height:.75rem}.size-3\.5{width:.875rem;height:.875rem}.size-4{width:1rem;height:1rem}.size-6{width:1.5rem;height:1.5rem}.size-7{width:1.75rem;height:1.75rem}.size-8{width:2rem;height:2rem}.size-9{width:2.25rem;height:2.25rem}.size-full{width:100%;height:100%}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-2{height:.5rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-56{height:14rem}.h-6{height:1.5rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[3px\]{height:3px}.h-\[calc\(100\%-1px\)\]{height:calc(100% - 1px)}.h-\[calc\(85vh-80px\)\]{height:calc(85vh - 80px)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-40{max-height:10rem}.max-h-48{max-height:12rem}.max-h-\[320px\]{max-height:320px}.max-h-\[40vh\]{max-height:40vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.min-h-0{min-height:0}.min-h-16{min-height:4rem}.min-h-screen{min-height:100vh}.w-1\.5{width:.375rem}.w-1\/3{width:33.3333%}.w-10{width:2.5rem}.w-12{width:3rem}.w-20{width:5rem}.w-28{width:7rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-32{width:8rem}.w-36{width:9rem}.w-4{width:1rem}.w-40{width:10rem}.w-44{width:11rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-80{width:20rem}.w-\[140px\]{width:140px}.w-\[280px\]{width:280px}.w-\[40\%\]{width:40%}.w-\[72px\]{width:72px}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.min-w-0{min-width:0}.min-w-36{min-width:9rem}.min-w-48{min-width:12rem}.min-w-56{min-width:14rem}.min-w-8{min-width:2rem}.min-w-\[180px\]{min-width:180px}.max-w-2xl{max-width:42rem}.max-w-40{max-width:10rem}.max-w-\[160px\]{max-width:160px}.max-w-\[200px\]{max-width:200px}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-lg{max-width:32rem}.max-w-sm{max-width:24rem}.max-w-xs{max-width:20rem}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.caption-bottom{caption-side:bottom}.-translate-x-1\/2{--tw-translate-x:-50%;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y:-50%;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0\.5{--tw-translate-x:.125rem;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-3\.5{--tw-translate-x:.875rem;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[calc\(-50\%_-_2px\)\]{--tw-translate-y:calc(-50% - 2px);transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-90{--tw-rotate:-90deg;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-0{--tw-rotate:0deg;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate:180deg;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-45{--tw-rotate:45deg;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-75{--tw-scale-x:.75;--tw-scale-y:.75;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:2s cubic-bezier(.4,0,.6,1) infinite pulse}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:1s linear infinite spin}.cursor-default{cursor:default}.cursor-help{cursor:help}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;user-select:none}.scroll-my-1{scroll-margin-top:.25rem;scroll-margin-bottom:.25rem}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-rows-\[auto_1fr\]{grid-template-rows:auto 1fr}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.place-items-center{place-items:center}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(-.5rem * var(--tw-space-x-reverse));margin-left:calc(-.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.self-start{align-self:flex-start}.justify-self-end{justify-self:end}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-\[2px\]{border-radius:2px}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-b-xl{border-bottom-right-radius:var(--radius-xl);border-bottom-left-radius:var(--radius-xl)}.rounded-t-md{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.rounded-t-xl{border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-\[var\(--border\)\]{border-color:var(--border)}.border-\[var\(--ring\)\]{border-color:var(--ring)}.border-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity,1))}.border-border{border-color:var(--border)}.border-danger{border-color:var(--color-danger)}.border-destructive{border-color:var(--destructive)}.border-info{border-color:var(--color-info)}.border-input{border-color:var(--input)}.border-muted{border-color:var(--muted)}.border-orange-400{--tw-border-opacity:1;border-color:rgb(251 146 60/var(--tw-border-opacity,1))}.border-primary{border-color:var(--primary)}.border-role-tool{border-color:var(--color-role-tool)}.border-sidebar-border{border-color:var(--sidebar-border)}.border-success{border-color:var(--color-success)}.border-teal-200{border-color:var(--color-teal-200)}.border-transparent{border-color:#0000}.border-warning{border-color:var(--color-warning)}.bg-\[var\(--border\)\]{background-color:var(--border)}.bg-\[var\(--primary\)\]{background-color:var(--primary)}.bg-accent{background-color:var(--accent)}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-background{background-color:var(--background)}.bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.bg-border{background-color:var(--border)}.bg-card{background-color:var(--card)}.bg-danger-light{background-color:var(--color-danger-light)}.bg-destructive{background-color:var(--destructive)}.bg-emerald-500\/15{background-color:#10b98126}.bg-emerald-600{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity,1))}.bg-foreground{background-color:var(--foreground)}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.bg-info-light{background-color:var(--color-info-light)}.bg-input{background-color:var(--input)}.bg-muted{background-color:var(--muted)}.bg-orange-100{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity,1))}.bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity,1))}.bg-orange-600{--tw-bg-opacity:1;background-color:rgb(234 88 12/var(--tw-bg-opacity,1))}.bg-overlay{background-color:var(--color-overlay)}.bg-overlay-light{background-color:var(--color-overlay-light)}.bg-popover{background-color:var(--popover)}.bg-primary{background-color:var(--primary)}.bg-purple-600{--tw-bg-opacity:1;background-color:rgb(147 51 234/var(--tw-bg-opacity,1))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.bg-role-assistant-bg{background-color:var(--color-role-assistant-bg)}.bg-role-thinking-bg{background-color:var(--color-role-thinking-bg)}.bg-role-tool-bg{background-color:var(--color-role-tool-bg)}.bg-role-user-bg{background-color:var(--color-role-user-bg)}.bg-secondary{background-color:var(--secondary)}.bg-sidebar{background-color:var(--sidebar)}.bg-sidebar-accent{background-color:var(--sidebar-accent)}.bg-sidebar-primary{background-color:var(--sidebar-primary)}.bg-success{background-color:var(--color-success)}.bg-success-light{background-color:var(--color-success-light)}.bg-teal-200{background-color:var(--color-teal-200)}.bg-teal-300{background-color:var(--color-teal-300)}.bg-teal-50{background-color:var(--color-teal-50)}.bg-teal-500{background-color:var(--color-teal-500)}.bg-teal-600{background-color:var(--color-teal-600)}.bg-transparent{background-color:#0000}.bg-warning{background-color:var(--color-warning)}.bg-warning-light{background-color:var(--color-warning-light)}.bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity,1))}.bg-clip-padding{background-clip:padding-box}.fill-foreground{fill:var(--foreground)}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-\[3px\]{padding:3px}.p-px{padding:1px}.px-0{padding-left:0;padding-right:0}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0{padding-top:0;padding-bottom:0}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-px{padding-top:1px;padding-bottom:1px}.pb-0{padding-bottom:0}.pb-2{padding-bottom:.5rem}.pb-20{padding-bottom:5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-1\.5{padding-left:.375rem}.pl-10{padding-left:2.5rem}.pl-2\.5{padding-left:.625rem}.pl-3{padding-left:.75rem}.pl-8{padding-left:2rem}.pr-2{padding-right:.5rem}.pr-3{padding-right:.75rem}.pr-8{padding-right:2rem}.pt-1{padding-top:.25rem}.pt-1\.5{padding-top:.375rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.align-text-bottom{vertical-align:text-bottom}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:1.5rem;line-height:2rem}.text-\[0\.8rem\]{font-size:.8rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-wider{letter-spacing:.05em}.text-\[var\(--color-role-thinking\)\]{color:var(--color-role-thinking)}.text-\[var\(--color-role-tool\)\]{color:var(--color-role-tool)}.text-\[var\(--color-role-user\)\]{color:var(--color-role-user)}.text-\[var\(--muted-foreground\)\]{color:var(--muted-foreground)}.text-\[var\(--primary\)\]{color:var(--primary)}.text-accent-foreground{color:var(--accent-foreground)}.text-amber-400{--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity,1))}.text-background{color:var(--background)}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.text-card-foreground{color:var(--card-foreground)}.text-current{color:currentColor}.text-danger-dark{color:var(--color-danger-dark)}.text-destructive{color:var(--destructive)}.text-destructive-foreground{color:var(--destructive-foreground)}.text-emerald-400{--tw-text-opacity:1;color:rgb(52 211 153/var(--tw-text-opacity,1))}.text-foreground{color:var(--foreground)}.text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.text-info-dark{color:var(--color-info-dark)}.text-muted-foreground{color:var(--muted-foreground)}.text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity,1))}.text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity,1))}.text-orange-700{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity,1))}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.text-role-assistant{color:var(--color-role-assistant)}.text-role-thinking{color:var(--color-role-thinking)}.text-role-tool{color:var(--color-role-tool)}.text-role-user{color:var(--color-role-user)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-sidebar-foreground{color:var(--sidebar-foreground)}.text-sidebar-primary{color:var(--sidebar-primary)}.text-sidebar-primary-foreground{color:var(--sidebar-primary-foreground)}.text-success{color:var(--color-success)}.text-success-dark{color:var(--color-success-dark)}.text-teal-200{color:var(--color-teal-200)}.text-teal-300{color:var(--color-teal-300)}.text-teal-700{color:var(--color-teal-700)}.text-teal-900{color:var(--color-teal-900)}.text-warning{color:var(--color-warning)}.text-warning-dark{color:var(--color-warning-dark)}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-yellow-600{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity,1))}.line-through{text-decoration-line:line-through}.underline-offset-4{text-underline-offset:4px}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.bg-blend-color{background-blend-mode:color}.shadow-elevated{--tw-shadow:var(--shadow-elevated);--tw-shadow-colored:var(--shadow-elevated);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.outline-none{outline-offset:2px;outline:2px solid #0000}.outline{outline-style:solid}.ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow,0 0 #0000)}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow,0 0 #0000)}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow,0 0 #0000)}.ring-background{--tw-ring-color:var(--background)}.ring-ring{--tw-ring-color:var(--ring)}.ring-offset-2{--tw-ring-offset-width:2px}.ring-offset-background{--tw-ring-offset-color:var(--background)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-property:all;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-none{transition-property:none}.transition-transform{transition-property:transform;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-100{transition-duration:.1s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-fast{transition-duration:var(--duration-fast)}.duration-normal{transition-duration:var(--duration-normal)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0), var(--tw-enter-translate-y,0), 0) scale3d(var(--tw-enter-scale,1), var(--tw-enter-scale,1), var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0), var(--tw-exit-translate-y,0), 0) scale3d(var(--tw-exit-scale,1), var(--tw-exit-scale,1), var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}.duration-100{animation-duration:.1s}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.duration-fast{animation-duration:var(--duration-fast)}.duration-normal{animation-duration:var(--duration-normal)}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.\[appearance\:textfield\]{appearance:textfield}.file\:inline-flex::file-selector-button{display:inline-flex}.file\:h-6::file-selector-button{height:1.5rem}.file\:border-0::file-selector-button{border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:var(--foreground)}.placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:inset-0:after{content:var(--tw-content);inset:0}.after\:-inset-x-3:after{content:var(--tw-content);left:-.75rem;right:-.75rem}.after\:-inset-y-2:after{content:var(--tw-content);top:-.5rem;bottom:-.5rem}.after\:rounded-full:after{content:var(--tw-content);border-radius:9999px}.after\:border:after{content:var(--tw-content);border-width:1px}.after\:border-border:after{content:var(--tw-content);border-color:var(--border)}.after\:bg-foreground:after{content:var(--tw-content);background-color:var(--foreground)}.after\:opacity-0:after{content:var(--tw-content);opacity:0}.after\:mix-blend-darken:after{content:var(--tw-content);mix-blend-mode:darken}.after\:transition-opacity:after{content:var(--tw-content);transition-property:opacity;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.last\:border-b-0:last-child{border-bottom-width:0}.hover\:border-\[var\(--muted-foreground\)\]:hover{border-color:var(--muted-foreground)}.hover\:bg-accent:hover{background-color:var(--accent)}.hover\:bg-green-600:hover{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.hover\:bg-muted:hover{background-color:var(--muted)}.hover\:bg-secondary:hover{background-color:var(--secondary)}.hover\:bg-sidebar-accent:hover{background-color:var(--sidebar-accent)}.hover\:bg-transparent:hover{background-color:#0000}.hover\:text-\[var\(--foreground\)\]:hover{color:var(--foreground)}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:text-destructive:hover{color:var(--destructive)}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:text-muted-foreground:hover{color:var(--muted-foreground)}.hover\:text-primary:hover{color:var(--primary)}.hover\:text-sidebar-foreground:hover{color:var(--sidebar-foreground)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:opacity-80:hover{opacity:.8}.hover\:brightness-95:hover{--tw-brightness:brightness(.95);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.focus\:bg-accent:focus{background-color:var(--accent)}.focus\:text-accent-foreground:focus{color:var(--accent-foreground)}.focus-visible\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\:outline-1:focus-visible{outline-width:1px}.focus-visible\:outline-ring:focus-visible{outline-color:var(--ring)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow,0 0 #0000)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-50{opacity:.5}.has-\[\>img\:first-child\]\:pt-0:has(>img:first-child){padding-top:0}.aria-expanded\:bg-muted[aria-expanded=true]{background-color:var(--muted)}.aria-expanded\:bg-secondary[aria-expanded=true]{background-color:var(--secondary)}.aria-expanded\:text-foreground[aria-expanded=true]{color:var(--foreground)}.aria-expanded\:text-secondary-foreground[aria-expanded=true]{color:var(--secondary-foreground)}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[size\=lg\]\:size-10[data-size=lg]{width:2.5rem;height:2.5rem}.data-\[size\=sm\]\:size-6[data-size=sm]{width:1.5rem;height:1.5rem}.data-\[orientation\=horizontal\]\:h-2\.5[data-orientation=horizontal]{height:.625rem}.data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.data-\[position\=popper\]\:h-\[var\(--reka-select-trigger-height\)\][data-position=popper]{height:var(--reka-select-trigger-height)}.data-\[size\=default\]\:h-8[data-size=default]{height:2rem}.data-\[size\=default\]\:h-\[18\.4px\][data-size=default]{height:18.4px}.data-\[size\=sm\]\:h-7[data-size=sm]{height:1.75rem}.data-\[size\=sm\]\:h-\[14px\][data-size=sm]{height:14px}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=vertical\]\:w-2\.5[data-orientation=vertical]{width:.625rem}.data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.data-\[position\=popper\]\:w-full[data-position=popper]{width:100%}.data-\[size\=default\]\:w-\[32px\][data-size=default]{width:32px}.data-\[size\=sm\]\:w-\[24px\][data-size=sm]{width:24px}.data-\[position\=popper\]\:min-w-\[var\(--reka-select-trigger-width\)\][data-position=popper]{min-width:var(--reka-select-trigger-width)}.data-\[size\=default\]\:max-w-xs[data-size=default],.data-\[size\=sm\]\:max-w-xs[data-size=sm]{max-width:20rem}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:.25rem;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:-.25rem;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:.25rem;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:-.25rem;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[align-trigger\=true\]\:animate-none[data-align-trigger=true]{animation:none}.data-\[disabled\]\:cursor-not-allowed[data-disabled]{cursor:not-allowed}.data-\[orientation\=horizontal\]\:flex-col[data-orientation=horizontal]{flex-direction:column}.data-\[size\=sm\]\:gap-3[data-size=sm]{gap:.75rem}.data-\[orientation\=vertical\]\:self-stretch[data-orientation=vertical]{align-self:stretch}.data-\[size\=sm\]\:rounded-md[data-size=sm]{border-radius:var(--radius-md)}.data-\[variant\=line\]\:rounded-none[data-variant=line]{border-radius:0}.data-\[orientation\=horizontal\]\:border-t[data-orientation=horizontal]{border-top-width:1px}.data-\[orientation\=vertical\]\:border-l[data-orientation=vertical]{border-left-width:1px}.data-\[state\=checked\]\:border-primary[data-state=checked]{border-color:var(--primary)}.data-\[orientation\=horizontal\]\:border-t-transparent[data-orientation=horizontal]{border-top-color:#0000}.data-\[orientation\=vertical\]\:border-l-transparent[data-orientation=vertical]{border-left-color:#0000}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:var(--background)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--primary)}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--muted)}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:var(--input)}.data-\[size\=sm\]\:py-3[data-size=sm]{padding-top:.75rem;padding-bottom:.75rem}.data-\[error\=true\]\:text-destructive[data-error=true]{color:var(--destructive)}.data-\[state\=active\]\:text-foreground[data-state=active]{color:var(--foreground)}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:var(--primary-foreground)}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=delayed-open\]\:animate-in[data-state=delayed-open],.data-\[state\=open\]\:animate-in[data-state=open]{--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial;animation-name:enter;animation-duration:.15s}.data-\[state\=closed\]\:animate-out[data-state=closed]{--tw-exit-opacity:initial;--tw-exit-scale:initial;--tw-exit-rotate:initial;--tw-exit-translate-x:initial;--tw-exit-translate-y:initial;animation-name:exit;animation-duration:.15s}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=delayed-open\]\:fade-in-0[data-state=delayed-open],.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=delayed-open\]\:zoom-in-95[data-state=delayed-open]{--tw-enter-scale:.95}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:-.5rem}.data-\[side\=inline-end\]\:slide-in-from-left-2[data-side=inline-end]{--tw-enter-translate-x:-.5rem}.data-\[side\=inline-start\]\:slide-in-from-right-2[data-side=inline-start],.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:.5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:-.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:.5rem}.\*\:data-\[slot\=select-value\]\:line-clamp-1[data-slot=select-value]>*{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\*\:data-\[slot\=select-value\]\:flex[data-slot=select-value]>*{display:flex}.\*\:data-\[slot\=select-value\]\:items-center[data-slot=select-value]>*{align-items:center}.\*\:data-\[slot\=select-value\]\:gap-1\.5[data-slot=select-value]>*{gap:.375rem}.\*\:data-\[slot\=avatar\]\:ring-2[data-slot=avatar]>*{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow,0 0 #0000)}.\*\:data-\[slot\=avatar\]\:ring-background[data-slot=avatar]>*{--tw-ring-color:var(--background)}.group[data-disabled=true] .group-data-\[disabled\=true\]\:pointer-events-none{pointer-events:none}.group\/alert-dialog-content[data-size=sm] .group-data-\[size\=sm\]\/alert-dialog-content\:grid{display:grid}.group\/avatar[data-size=default] .group-data-\[size\=default\]\/avatar\:size-2\.5{width:.625rem;height:.625rem}.group\/switch[data-size=default] .group-data-\[size\=default\]\/switch\:size-4{width:1rem;height:1rem}.group\/avatar[data-size=lg] .group-data-\[size\=lg\]\/avatar\:size-3{width:.75rem;height:.75rem}.group\/avatar[data-size=sm] .group-data-\[size\=sm\]\/avatar\:size-2{width:.5rem;height:.5rem}.group\/switch[data-size=sm] .group-data-\[size\=sm\]\/switch\:size-3{width:.75rem;height:.75rem}.group\/tabs[data-orientation=horizontal] .group-data-\[orientation\=horizontal\]\/tabs\:h-8{height:2rem}.group\/tabs[data-orientation=vertical] .group-data-\[orientation\=vertical\]\/tabs\:h-fit{height:fit-content}.group\/tabs[data-orientation=vertical] .group-data-\[orientation\=vertical\]\/tabs\:w-full{width:100%}.group\/alert-dialog-content[data-size=sm] .group-data-\[size\=sm\]\/alert-dialog-content\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.group\/tabs[data-orientation=vertical] .group-data-\[orientation\=vertical\]\/tabs\:flex-col{flex-direction:column}.group\/tabs[data-orientation=vertical] .group-data-\[orientation\=vertical\]\/tabs\:justify-start{justify-content:flex-start}.group\/tabs-list[data-variant=line] .group-data-\[variant\=line\]\/tabs-list\:bg-transparent{background-color:#0000}.group\/card[data-size=sm] .group-data-\[size\=sm\]\/card\:p-3{padding:.75rem}.group\/card[data-size=sm] .group-data-\[size\=sm\]\/card\:px-3{padding-left:.75rem;padding-right:.75rem}.group\/avatar[data-size=sm] .group-data-\[size\=sm\]\/avatar\:text-xs{font-size:.75rem;line-height:1rem}.group\/card[data-size=sm] .group-data-\[size\=sm\]\/card\:text-sm{font-size:.875rem;line-height:1.25rem}.group[data-disabled=true] .group-data-\[disabled\=true\]\:opacity-50{opacity:.5}.group\/tabs[data-orientation=horizontal] .group-data-\[orientation\=horizontal\]\/tabs\:after\:inset-x-0:after{content:var(--tw-content);left:0;right:0}.group\/tabs[data-orientation=vertical] .group-data-\[orientation\=vertical\]\/tabs\:after\:inset-y-0:after{content:var(--tw-content);top:0;bottom:0}.group\/tabs[data-orientation=horizontal] .group-data-\[orientation\=horizontal\]\/tabs\:after\:bottom-\[-5px\]:after{content:var(--tw-content);bottom:-5px}.group\/tabs[data-orientation=vertical] .group-data-\[orientation\=vertical\]\/tabs\:after\:-right-1:after{content:var(--tw-content);right:-.25rem}.group\/tabs[data-orientation=horizontal] .group-data-\[orientation\=horizontal\]\/tabs\:after\:h-0\.5:after{content:var(--tw-content);height:.125rem}.group\/tabs[data-orientation=vertical] .group-data-\[orientation\=vertical\]\/tabs\:after\:w-0\.5:after{content:var(--tw-content);width:.125rem}.group\/switch[data-size=default] .group-data-\[size\=default\]\/switch\:data-\[state\=checked\]\:translate-x-\[calc\(100\%-2px\)\][data-state=checked]{--tw-translate-x:calc(100% - 2px);transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group\/switch[data-size=default] .group-data-\[size\=default\]\/switch\:data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x:0px;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group\/switch[data-size=sm] .group-data-\[size\=sm\]\/switch\:data-\[state\=checked\]\:translate-x-\[calc\(100\%-2px\)\][data-state=checked]{--tw-translate-x:calc(100% - 2px);transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group\/switch[data-size=sm] .group-data-\[size\=sm\]\/switch\:data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x:0px;transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group\/tabs-list[data-variant=line] .group-data-\[variant\=line\]\/tabs-list\:data-\[state\=active\]\:bg-transparent[data-state=active]{background-color:#0000}.group\/tabs-list[data-variant=default] .group-data-\[variant\=default\]\/tabs-list\:data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.group\/tabs-list[data-variant=line] .group-data-\[variant\=line\]\/tabs-list\:data-\[state\=active\]\:shadow-none[data-state=active]{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000), var(--tw-ring-shadow,0 0 #0000), var(--tw-shadow)}.group\/tabs-list[data-variant=line] .group-data-\[variant\=line\]\/tabs-list\:data-\[state\=active\]\:after\:opacity-100[data-state=active]:after{content:var(--tw-content);opacity:1}.dark\:border-input:is(.dark *){border-color:var(--input)}.dark\:border-teal-800:is(.dark *){border-color:var(--color-teal-800)}.dark\:bg-orange-900\/30:is(.dark *){background-color:#7c2d124d}.dark\:bg-teal-600:is(.dark *){background-color:var(--color-teal-600)}.dark\:bg-teal-700:is(.dark *){background-color:var(--color-teal-700)}.dark\:bg-teal-800:is(.dark *){background-color:var(--color-teal-800)}.dark\:bg-teal-900:is(.dark *){background-color:var(--color-teal-900)}.dark\:text-danger:is(.dark *){color:var(--color-danger)}.dark\:text-green-400:is(.dark *){--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity,1))}.dark\:text-info:is(.dark *){color:var(--color-info)}.dark\:text-muted-foreground:is(.dark *){color:var(--muted-foreground)}.dark\:text-orange-300:is(.dark *){--tw-text-opacity:1;color:rgb(253 186 116/var(--tw-text-opacity,1))}.dark\:text-orange-400:is(.dark *){--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity,1))}.dark\:text-red-400:is(.dark *){--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.dark\:text-success:is(.dark *){color:var(--color-success)}.dark\:text-teal-100:is(.dark *){color:var(--color-teal-100)}.dark\:text-teal-200:is(.dark *){color:var(--color-teal-200)}.dark\:text-teal-300:is(.dark *){color:var(--color-teal-300)}.dark\:text-warning:is(.dark *){color:var(--color-warning)}.dark\:text-yellow-400:is(.dark *){--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity,1))}.dark\:after\:mix-blend-lighten:is(.dark *):after{content:var(--tw-content);mix-blend-mode:lighten}.dark\:hover\:text-foreground:hover:is(.dark *){color:var(--foreground)}.dark\:data-\[state\=active\]\:border-input[data-state=active]:is(.dark *){border-color:var(--input)}.dark\:data-\[state\=checked\]\:bg-primary[data-state=checked]:is(.dark *){background-color:var(--primary)}.dark\:data-\[state\=checked\]\:bg-primary-foreground[data-state=checked]:is(.dark *){background-color:var(--primary-foreground)}.dark\:data-\[state\=unchecked\]\:bg-foreground[data-state=unchecked]:is(.dark *){background-color:var(--foreground)}.dark\:data-\[state\=active\]\:text-foreground[data-state=active]:is(.dark *){color:var(--foreground)}.group\/tabs-list[data-variant=line] .dark\:group-data-\[variant\=line\]\/tabs-list\:data-\[state\=active\]\:border-transparent[data-state=active]:is(.dark *){border-color:#0000}.group\/tabs-list[data-variant=line] .dark\:group-data-\[variant\=line\]\/tabs-list\:data-\[state\=active\]\:bg-transparent[data-state=active]:is(.dark *){background-color:#0000}@media (width>=640px){.sm\:max-w-4xl{max-width:56rem}.sm\:max-w-6xl{max-width:72rem}.sm\:max-w-lg{max-width:32rem}.sm\:max-w-sm{max-width:24rem}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:rounded-lg{border-radius:var(--radius-lg)}.data-\[size\=default\]\:sm\:max-w-sm[data-size=default]{max-width:24rem}.group\/alert-dialog-content[data-size=default] .sm\:group-data-\[size\=default\]\/alert-dialog-content\:row-span-2{grid-row:span 2/span 2}.group\/alert-dialog-content[data-size=default] .sm\:group-data-\[size\=default\]\/alert-dialog-content\:place-items-start{place-items:start}.group\/alert-dialog-content[data-size=default] .sm\:group-data-\[size\=default\]\/alert-dialog-content\:text-left{text-align:left}}@media (width>=768px){.md\:w-full{width:100%}.md\:text-pretty{text-wrap:pretty}.md\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (width>=1024px){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.\[\&\:\:-webkit-inner-spin-button\]\:appearance-none::-webkit-inner-spin-button{appearance:none}.\[\&\:\:-webkit-outer-spin-button\]\:appearance-none::-webkit-outer-spin-button{appearance:none}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\&\>svg\]\:pointer-events-none>svg{pointer-events:none}.\[\&\>svg\]\:size-3\.5>svg{width:.875rem;height:.875rem}.\[\&\>svg\]\:size-4>svg{width:1rem;height:1rem}.group\/avatar[data-size=sm] .group-data-\[size\=sm\]\/avatar\:\[\&\>svg\]\:hidden>svg{display:none}.group\/avatar[data-size=default] .group-data-\[size\=default\]\/avatar\:\[\&\>svg\]\:size-2>svg,.group\/avatar[data-size=lg] .group-data-\[size\=lg\]\/avatar\:\[\&\>svg\]\:size-2>svg{width:.5rem;height:.5rem}.\[\&\>tr\]\:last\:border-b-0:last-child>tr{border-bottom-width:0}.\[\&_svg\:not\(\[class\*\=size-\]\)\]\:size-3 svg:not([class*=size-]){width:.75rem;height:.75rem}.\[\&_svg\:not\(\[class\*\=size-\]\)\]\:size-3\.5 svg:not([class*=size-]){width:.875rem;height:.875rem}.\[\&_svg\:not\(\[class\*\=size-\]\)\]\:size-4 svg:not([class*=size-]){width:1rem;height:1rem}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-width:0}.\[\&_tr\]\:border-b tr{border-bottom-width:1px}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{A as e,Bt as t,Ct as n,F as r,G as i,Ht as a,I as ee,J as o,K as s,L as c,M as l,Q as u,Rt as d,U as f,Ut as p,W as te,X as m,Y as h,Z as g,at as _,bt as ne,ct as re,ft as v,ht as y,j as b,jt as x,k as S,lt as ie,mt as C,n as w,q as T,r as ae,ut as E,z as oe}from"./button-D27ClX8J.js";import{n as D,r as O,t as k}from"./i18n-CwUfS0tE.js";import{a as se}from"./format-BhxQSgt6.js";import{a as ce}from"./PopperContent-6BXua_FZ.js";import{a as le,i as ue,n as de,r as A,t as fe}from"./SelectValue-CT2z_-6j.js";import{t as pe}from"./file-text-D33FJAPX.js";import{t as j}from"./loader-circle-EpKC006I.js";import{n as me,t as he}from"./sun-BylRZIWt.js";import{t as M}from"./x-DSgLgKC_.js";import{a as N,c as P,i as F,n as I,o as L,r as R,s as z,t as B}from"./alert-dialog-DzKCAoYJ.js";import{n as ge,r as _e,t as ve}from"./PopoverTrigger-C88SpJNZ.js";import{t as V}from"./badge-C-9zPTgw.js";import{n as H,t as U}from"./lib-D0Ek2pPZ.js";import{n as W,r as ye,t as G}from"./useTheme-CpTI547G.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();function be(){let{locale:e}=r();async function t(t){e.value=t,localStorage.setItem(k,t),document.documentElement.setAttribute(`lang`,t),await O(t)}return{locale:e,setLocale:t,localeLabel:i(()=>e.value===`zh-CN`?`中文`:`EN`),toggleTarget:i(()=>e.value===`zh-CN`?`en`:`zh-CN`)}}var xe=l(`activity`,[[`path`,{d:`M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2`,key:`169zse`}]]),Se=l(`arrow-left-right`,[[`path`,{d:`M8 3 4 7l4 4`,key:`9rb6wj`}],[`path`,{d:`M4 7h16`,key:`6tx8e3`}],[`path`,{d:`m16 21 4-4-4-4`,key:`siv7j2`}],[`path`,{d:`M20 17H4`,key:`h6l3hr`}]]),Ce=l(`arrow-up-right`,[[`path`,{d:`M7 7h10v10`,key:`1tivn9`}],[`path`,{d:`M7 17 17 7`,key:`1vkiza`}]]),we=l(`calendar-clock`,[[`path`,{d:`M16 14v2.2l1.6 1`,key:`fo4ql5`}],[`path`,{d:`M16 2v4`,key:`4m81vk`}],[`path`,{d:`M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5`,key:`1osxxc`}],[`path`,{d:`M3 10h5`,key:`r794hk`}],[`path`,{d:`M8 2v4`,key:`1cmpym`}],[`circle`,{cx:`16`,cy:`16`,r:`6`,key:`qoo3c4`}]]),K=l(`circle-check`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),Te=l(`globe`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20`,key:`13o1zl`}],[`path`,{d:`M2 12h20`,key:`9i4pu4`}]]),Ee=l(`info`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]),De=l(`key-round`,[[`path`,{d:`M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z`,key:`1s6t7t`}],[`circle`,{cx:`16.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`w0ekpg`}]]),Oe=l(`layout-dashboard`,[[`rect`,{width:`7`,height:`9`,x:`3`,y:`3`,rx:`1`,key:`10lvy0`}],[`rect`,{width:`7`,height:`5`,x:`14`,y:`3`,rx:`1`,key:`16une8`}],[`rect`,{width:`7`,height:`9`,x:`14`,y:`12`,rx:`1`,key:`1hutg5`}],[`rect`,{width:`7`,height:`5`,x:`3`,y:`16`,rx:`1`,key:`ldoo1y`}]]),ke=l(`log-out`,[[`path`,{d:`m16 17 5-5-5-5`,key:`1bji2h`}],[`path`,{d:`M21 12H9`,key:`dn1m92`}],[`path`,{d:`M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4`,key:`1uf3rs`}]]),Ae=l(`octagon-x`,[[`path`,{d:`m15 9-6 6`,key:`1uzhvr`}],[`path`,{d:`M2.586 16.726A2 2 0 0 1 2 15.312V8.688a2 2 0 0 1 .586-1.414l4.688-4.688A2 2 0 0 1 8.688 2h6.624a2 2 0 0 1 1.414.586l4.688 4.688A2 2 0 0 1 22 8.688v6.624a2 2 0 0 1-.586 1.414l-4.688 4.688a2 2 0 0 1-1.414.586H8.688a2 2 0 0 1-1.414-.586z`,key:`2d38gg`}],[`path`,{d:`m9 9 6 6`,key:`z0biqf`}]]),je=l(`refresh-ccw`,[[`path`,{d:`M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`14sxne`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}],[`path`,{d:`M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16`,key:`1hlbsb`}],[`path`,{d:`M16 16h5v5`,key:`ccwih5`}]]),Me=l(`refresh-cw`,[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]),Ne=l(`server`,[[`rect`,{width:`20`,height:`8`,x:`2`,y:`2`,rx:`2`,ry:`2`,key:`ngkwjq`}],[`rect`,{width:`20`,height:`8`,x:`2`,y:`14`,rx:`2`,ry:`2`,key:`iecqi9`}],[`line`,{x1:`6`,x2:`6.01`,y1:`6`,y2:`6`,key:`16zg32`}],[`line`,{x1:`6`,x2:`6.01`,y1:`18`,y2:`18`,key:`nzw8ys`}]]),Pe=l(`settings`,[[`path`,{d:`M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915`,key:`1i5ecw`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),Fe=l(`triangle-alert`,[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),Ie=l(`zap`,[[`path`,{d:`M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z`,key:`1xq2db`}]]),Le={class:`w-56 h-full bg-sidebar text-sidebar-foreground flex-shrink-0 flex flex-col overflow-hidden`},Re={class:`p-4 border-b border-sidebar-border`},ze={class:`flex items-center gap-2`},Be={key:0,class:`p-3 border-b border-border`},Ve={class:`flex items-center gap-2 mb-2`},He={class:`w-4 h-4 rounded-full bg-primary flex items-center justify-center text-primary-foreground`},Ue={class:`text-sm font-medium`},We={class:`text-xs text-muted-foreground mb-2`},Ge={class:`text-primary font-medium`},Ke={key:1,class:`text-xs text-warning bg-warning-light p-2 rounded`},qe={key:1,class:`p-3 border-b border-border`},Je={class:`flex items-center gap-2 mb-2`},Ye={class:`w-4 h-4 rounded-full bg-primary flex items-center justify-center text-primary-foreground`},Xe={class:`text-sm font-medium`},Ze={class:`text-xs text-muted-foreground mb-2`},Qe={class:`flex items-center gap-2 mb-2`},$e={class:`text-xs text-muted-foreground`},et={key:2,class:`p-3`},tt={class:`text-xs text-muted-foreground`},nt={class:`px-3 py-2 flex justify-between items-center text-xs text-muted-foreground`},rt={class:`flex-1 p-2 space-y-0.5 overflow-y-auto`},it={key:0,class:`my-1.5 border-t border-sidebar-border`},at={key:1,class:`flex items-center justify-between px-3 py-1.5`},ot={class:`text-[11px] font-medium text-sidebar-foreground/50 uppercase tracking-wider`},st=[`onClick`],ct={class:`p-3 border-t border-sidebar-border space-y-1`},lt={class:`bg-muted px-1 py-0.5 rounded text-xs`},ut=300*1e3,dt=u({__name:`Sidebar`,setup(l){let{isDark:u,toggleTheme:te}=ye(),{t:_}=r(),{locale:b,setLocale:ae,toggleTarget:oe}=be();async function D(){await ae(oe.value)}let O=x(null),k=x(!1),j=x(!1),M=x(!1),U=x(!1),W=x(!1),G=null;async function K(){try{O.value=await S.getUpgradeStatus()}catch{O.value=null}}async function Ee(){try{await S.triggerUpgradeCheck(),await K()}catch(t){H.error(e(t,_(`sidebar.upgrade.checkFailed`)))}}async function Ae(){if(O.value?.npm.latestVersion){M.value=!0;try{await S.executeUpgrade(O.value.npm.latestVersion),H.success(_(`sidebar.upgrade.upgradeSuccess`)),k.value=!1,j.value=!0,await K()}catch(t){H.error(e(t,_(`sidebar.upgrade.upgradeFailed`)))}finally{M.value=!1}}}async function Fe(){let t=O.value?.syncSource??`github`;U.value=!0;try{await S.syncConfig(t),H.success(_(`sidebar.upgrade.configSyncSuccess`)),await K()}catch(t){H.error(e(t,_(`sidebar.upgrade.syncFailed`)))}finally{U.value=!1}}async function dt(t){if(typeof t==`string`)try{await S.setSyncSource(t),await K()}catch(t){H.error(e(t,_(`sidebar.upgrade.saveFailed`)))}}let q=i(()=>{if(!O.value)return 0;let e=0;return O.value.npm.hasUpdate&&e++,O.value.config.hasUpdate&&e++,e});re(()=>{K(),G=setInterval(K,ut)}),ie(()=>{G&&clearInterval(G)});let J=i(()=>[{items:[{path:`/`,label:_(`sidebar.nav.dashboard`),icon:Oe}]},{label:_(`sidebar.nav.agentConfig`),expandable:!0,items:[{path:`/quick-setup`,label:_(`sidebar.nav.quickSetup`),icon:Ie},{path:`/providers`,label:_(`sidebar.nav.providers`),icon:Ne},{path:`/mappings`,label:_(`sidebar.nav.modelMappings`),icon:Se},{path:`/router-keys`,label:_(`sidebar.nav.routerKeys`),icon:De},{path:`/retry-rules`,label:_(`sidebar.nav.retryRules`),icon:je},{path:`/schedules`,label:_(`sidebar.nav.schedules`),icon:we}]},{label:_(`sidebar.nav.monitoring`),items:[{path:`/monitor`,label:_(`sidebar.nav.monitor`),icon:xe},{path:`/logs`,label:_(`sidebar.nav.logs`),icon:pe}]},{items:[{path:`/settings`,label:_(`sidebar.nav.settings`),icon:Pe}]}]),Y=x(new Set([1]));function X(e){return Y.value.has(e)}function Z(e){let t=new Set(Y.value);t.has(e)?t.delete(e):t.add(e),Y.value=t}let Q=ee(),ft=c();function $(e){return e===`/`?Q.path===`/`:Q.path.startsWith(e)}ne(()=>Q.path,()=>{J.value.forEach((e,t)=>{e.expandable&&e.items.some(e=>$(e.path))&&Y.value.add(t)})},{immediate:!0});async function pt(){try{await S.restartServer(),H.success(_(`sidebar.upgrade.restartSent`)),j.value=!1,setTimeout(()=>{window.location.reload()},5e3)}catch(t){H.error(e(t,_(`sidebar.upgrade.restartFailed`)))}}async function mt(){try{await S.logout()}finally{ft.push(`/login`)}}return(e,r)=>{let i=C(`router-link`);return E(),h(`aside`,Le,[s(`div`,Re,[s(`div`,ze,[r[9]||=s(`div`,{class:`w-8 h-8 bg-sidebar-primary rounded-lg flex items-center justify-center`},[s(`svg`,{class:`w-5 h-5 text-sidebar-primary-foreground`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`},[s(`path`,{"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`2`,d:`M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z`})])],-1),g(d(_e),{open:W.value,"onUpdate:open":r[1]||=e=>W.value=e},{default:n(()=>[g(d(ve),{"as-child":``},{default:n(()=>[g(d(w),{variant:`ghost`,class:`flex items-center gap-2 px-0 h-auto`},{default:n(()=>[r[5]||=s(`span`,{class:`font-semibold text-sm`},`LLM Router`,-1),g(d(V),{variant:`secondary`,class:`text-[10px] px-1.5 py-0 h-4 leading-none`},{default:n(()=>[m(`v`+p(d(`0.9.4`)),1)]),_:1}),q.value>0?(E(),T(d(V),{key:0,variant:`destructive`,class:`text-[10px] px-1.5 h-4 leading-none bg-destructive text-destructive-foreground font-semibold`},{default:n(()=>[m(p(q.value),1)]),_:1})):o(``,!0)]),_:1})]),_:1}),g(d(ge),{side:`right`,align:`start`,class:`w-80 p-0`},{default:n(()=>[O.value?.npm.hasUpdate?(E(),h(`div`,Be,[s(`div`,Ve,[s(`div`,He,[g(d(Ce),{class:`w-3 h-3`})]),s(`span`,Ue,p(d(_)(`sidebar.upgrade.newVersion`)),1)]),s(`p`,We,[m(p(O.value.npm.currentVersion)+` → `,1),s(`span`,Ge,p(O.value.npm.latestVersion),1)]),O.value.deployment===`npm`?(E(),T(d(w),{key:0,size:`sm`,class:`w-full text-xs`,disabled:M.value,onClick:r[0]||=e=>k.value=!0},{default:n(()=>[m(p(M.value?d(_)(`sidebar.upgrade.upgrading`):d(_)(`sidebar.upgrade.oneClickUpgrade`)),1)]),_:1},8,[`disabled`])):(E(),h(`div`,Ke,[m(p(d(_)(`sidebar.upgrade.dockerDeploy`,{type:O.value.deployment===`docker`?`Docker`:`Unknown`}))+` `,1),r[6]||=s(`code`,{class:`block mt-1 text-warning bg-warning-dark/10 p-1 rounded`},`docker pull ghcr.io/zhushanwen321/llm-simple-router:latest`,-1)]))])):o(``,!0),O.value?.config.hasUpdate?(E(),h(`div`,qe,[s(`div`,Je,[s(`div`,Ye,[g(d(Me),{class:`w-3 h-3`})]),s(`span`,Xe,p(d(_)(`sidebar.upgrade.configUpdated`)),1)]),s(`p`,Ze,p(d(_)(`sidebar.upgrade.configUpdatedDesc`)),1),s(`div`,Qe,[s(`span`,$e,p(d(_)(`sidebar.upgrade.source`)),1),g(d(le),{"model-value":O.value?.syncSource,"onUpdate:modelValue":dt},{default:n(()=>[g(d(de),{class:`h-7 text-xs flex-1`},{default:n(()=>[g(d(fe))]),_:1}),g(d(ue),null,{default:n(()=>[g(d(A),{value:`github`},{default:n(()=>[...r[7]||=[m(`GitHub`,-1)]]),_:1}),g(d(A),{value:`gitee`},{default:n(()=>[...r[8]||=[m(`Gitee`,-1)]]),_:1})]),_:1})]),_:1},8,[`model-value`])]),g(d(w),{size:`sm`,variant:`secondary`,class:`w-full text-xs`,disabled:U.value,onClick:Fe},{default:n(()=>[m(p(U.value?d(_)(`sidebar.upgrade.syncing`):d(_)(`sidebar.upgrade.syncConfig`)),1)]),_:1},8,[`disabled`])])):o(``,!0),!O.value?.npm.hasUpdate&&!O.value?.config.hasUpdate?(E(),h(`div`,et,[s(`p`,tt,p(d(_)(`sidebar.upgrade.upToDate`)),1)])):o(``,!0),s(`div`,nt,[s(`span`,null,p(O.value?.lastCheckedAt?d(_)(`sidebar.upgrade.checkedAt`,{time:d(se)(O.value.lastCheckedAt).toLocaleTimeString(d(b)===`zh-CN`?`zh-CN`:`en`,{timeZone:`Asia/Shanghai`})}):d(_)(`sidebar.upgrade.notChecked`)),1),g(d(w),{variant:`link`,class:`text-primary h-auto p-0`,onClick:Ee},{default:n(()=>[m(p(d(_)(`sidebar.upgrade.checkNow`)),1)]),_:1})])]),_:1})]),_:1},8,[`open`])])]),s(`nav`,rt,[(E(!0),h(f,null,v(J.value,(e,r)=>(E(),h(f,{key:r},[r>0?(E(),h(`div`,it)):o(``,!0),e.label?(E(),h(`div`,at,[s(`span`,ot,p(e.label),1),e.expandable?(E(),h(`button`,{key:0,type:`button`,class:`flex items-center justify-center w-5 h-5 rounded hover:bg-sidebar-accent text-sidebar-foreground/50 hover:text-sidebar-foreground transition-colors cursor-pointer select-none`,onClick:e=>Z(r)},[g(d(ce),{class:t([`w-3.5 h-3.5 transition-transform duration-200`,X(r)?`rotate-0`:`-rotate-90`])},null,8,[`class`])],8,st)):o(``,!0)])):o(``,!0),e.expandable?(E(),h(`div`,{key:2,class:`overflow-hidden transition-all duration-200 ease-in-out`,style:a({maxHeight:X(r)?e.items.length*44+`px`:`0px`,opacity:+!!X(r)})},[(E(!0),h(f,null,v(e.items,e=>(E(),T(i,{key:e.path,to:e.path,class:t([`flex items-center gap-3 px-3 py-2 ml-1 rounded-lg text-sm transition-colors`,$(e.path)?`bg-sidebar-accent text-sidebar-primary`:`text-sidebar-foreground hover:bg-sidebar-accent`])},{default:n(()=>[(E(),T(y(e.icon),{class:`w-4 h-4`})),m(` `+p(e.label),1)]),_:2},1032,[`to`,`class`]))),128))],4)):o(``,!0),e.expandable?o(``,!0):(E(!0),h(f,{key:3},v(e.items,e=>(E(),T(i,{key:e.path,to:e.path,class:t([`flex items-center gap-3 px-3 py-2 rounded-lg text-sm transition-colors`,$(e.path)?`bg-sidebar-accent text-sidebar-primary`:`text-sidebar-foreground hover:bg-sidebar-accent`])},{default:n(()=>[(E(),T(y(e.icon),{class:`w-4 h-4`})),m(` `+p(e.label),1)]),_:2},1032,[`to`,`class`]))),128))],64))),128))]),s(`div`,ct,[g(d(w),{variant:`ghost`,class:`w-full justify-start text-sidebar-foreground hover:text-sidebar-foreground hover:bg-sidebar-accent`,onClick:d(te)},{default:n(()=>[d(u)?(E(),T(d(he),{key:1,class:`w-4 h-4`})):(E(),T(d(me),{key:0,class:`w-4 h-4`})),m(` `+p(d(u)?d(_)(`sidebar.theme.light`):d(_)(`sidebar.theme.dark`)),1)]),_:1},8,[`onClick`]),g(d(w),{variant:`ghost`,class:`w-full justify-start text-sidebar-foreground hover:text-sidebar-foreground hover:bg-sidebar-accent`,onClick:D},{default:n(()=>[g(d(Te),{class:`w-4 h-4`}),m(` `+p(d(b)===`zh-CN`?d(_)(`sidebar.language.switchToEn`):d(_)(`sidebar.language.switchToZh`)),1)]),_:1}),g(d(w),{variant:`ghost`,class:`w-full justify-start text-sidebar-foreground hover:text-sidebar-foreground hover:bg-sidebar-accent`,onClick:mt},{default:n(()=>[g(d(ke),{class:`w-4 h-4`}),m(` `+p(d(_)(`sidebar.logout`)),1)]),_:1})]),g(d(P),{open:k.value,"onUpdate:open":r[2]||=e=>k.value=e},{default:n(()=>[g(d(N),null,{default:n(()=>[g(d(I),null,{default:n(()=>[g(d(B),null,{default:n(()=>[m(p(d(_)(`sidebar.upgrade.confirmUpgrade`,{version:O.value?.npm.latestVersion})),1)]),_:1}),g(d(F),null,{default:n(()=>[m(p(d(_)(`sidebar.upgrade.upgradeDescBefore`))+` `,1),s(`code`,lt,`npm install -g llm-simple-router@`+p(O.value?.npm.latestVersion),1),m(p(d(_)(`sidebar.upgrade.upgradeDescAfter`)),1)]),_:1})]),_:1}),g(d(R),null,{default:n(()=>[g(d(L),null,{default:n(()=>[m(p(d(_)(`common.cancel`)),1)]),_:1}),g(d(z),{onClick:Ae,disabled:M.value},{default:n(()=>[m(p(M.value?d(_)(`sidebar.upgrade.upgrading`):d(_)(`common.confirm`)),1)]),_:1},8,[`disabled`])]),_:1})]),_:1})]),_:1},8,[`open`]),g(d(P),{open:j.value,"onUpdate:open":r[4]||=e=>j.value=e},{default:n(()=>[g(d(N),null,{default:n(()=>[g(d(I),null,{default:n(()=>[g(d(B),null,{default:n(()=>[m(p(d(_)(`sidebar.upgrade.upgradeSuccess`)),1)]),_:1}),g(d(F),null,{default:n(()=>[m(p(d(_)(`sidebar.upgrade.restartNeeded`,{version:O.value?.npm.latestVersion})),1)]),_:1})]),_:1}),g(d(R),null,{default:n(()=>[g(d(L),{onClick:r[3]||=e=>j.value=!1},{default:n(()=>[m(p(d(_)(`sidebar.upgrade.laterRestart`)),1)]),_:1}),g(d(z),{onClick:pt},{default:n(()=>[m(p(d(_)(`sidebar.upgrade.restartNow`)),1)]),_:1})]),_:1})]),_:1})]),_:1},8,[`open`])])}}}),q=u({__name:`Sonner`,props:{id:{},invert:{type:Boolean},theme:{},position:{},closeButtonPosition:{},hotkey:{},richColors:{type:Boolean},expand:{type:Boolean},duration:{},gap:{},visibleToasts:{},closeButton:{type:Boolean},toastOptions:{},class:{},style:{},offset:{},mobileOffset:{},dir:{},swipeDirections:{},icons:{},containerAriaLabel:{}},setup(e){let t=e;return(e,r)=>(E(),T(d(U),_({class:d(ae)(`toaster group`,t.class),style:{"--normal-bg":`var(--popover)`,"--normal-text":`var(--popover-foreground)`,"--normal-border":`var(--border)`,"--border-radius":`var(--radius)`}},t),{"success-icon":n(()=>[g(d(K),{class:`size-4`})]),"info-icon":n(()=>[g(d(Ee),{class:`size-4`})]),"warning-icon":n(()=>[g(d(Fe),{class:`size-4`})]),"error-icon":n(()=>[g(d(Ae),{class:`size-4`})]),"loading-icon":n(()=>[s(`div`,null,[g(d(j),{class:`size-4 animate-spin`})])]),"close-icon":n(()=>[g(d(M),{class:`size-4`})]),_:1},16,[`class`]))}}),J={key:0,class:`h-screen flex overflow-hidden`},Y={class:`flex-1 overflow-auto bg-muted`},X=u({__name:`App`,setup(e){let t=c(),n=ee(),r=x(!1),a=i(()=>W.value?`dark`:`light`),o=[`/login`,`/setup`];async function l(){if(o.includes(n.path)){r.value=!1;return}try{await S.getStats(),r.value=!0}catch{r.value=!1,t.push(`/login`)}}return l(),ne(()=>n.path,l),(e,t)=>{let n=C(`router-view`);return E(),h(f,null,[r.value?(E(),h(`div`,J,[g(dt),s(`main`,Y,[g(n)])])):(E(),T(n,{key:1})),(E(),T(te,{to:`body`},[g(d(q),{theme:a.value,richColors:``,position:`top-center`,toastOptions:{duration:4e3}},null,8,[`theme`])]))],64)}}});G();var Z=oe(X);Z.use(b),Z.use(D);var Q=D.global.locale.value;document.documentElement.setAttribute(`lang`,Q),O(Q).then(()=>{Z.mount(`#app`)});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Bt as e,Ct as t,G as n,Ht as r,J as i,K as a,Q as o,Rt as s,U as c,Ut as l,Vt as u,X as d,Y as f,Z as p,_t as m,at as h,bt as g,ct as _,ft as v,ht as y,jt as b,ot as ee,pt as x,q as S,rt as C,st as w,ut as T,xt as E}from"./button-D27ClX8J.js";var D=1,O=new class{subscribers;toasts;dismissedToasts;constructor(){this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}subscribe=e=>(this.subscribers.push(e),()=>{let t=this.subscribers.indexOf(e);this.subscribers.splice(t,1)});publish=e=>{this.subscribers.forEach(t=>t(e))};addToast=e=>{this.publish(e),this.toasts=[...this.toasts,e]};create=e=>{let{message:t,...n}=e,r=typeof e.id==`number`||e.id&&e.id?.length>0?e.id:D++,i=this.toasts.find(e=>e.id===r),a=e.dismissible===void 0?!0:e.dismissible;return this.dismissedToasts.has(r)&&this.dismissedToasts.delete(r),i?this.toasts=this.toasts.map(n=>n.id===r?(this.publish({...n,...e,id:r,title:t}),{...n,...e,id:r,dismissible:a,title:t}):n):this.addToast({title:t,...n,dismissible:a,id:r}),r};dismiss=e=>(e?(this.dismissedToasts.add(e),requestAnimationFrame(()=>this.subscribers.forEach(t=>t({id:e,dismiss:!0})))):this.toasts.forEach(e=>{this.subscribers.forEach(t=>t({id:e.id,dismiss:!0}))}),e);message=(e,t)=>this.create({...t,message:e,type:`default`});error=(e,t)=>this.create({...t,type:`error`,message:e});success=(e,t)=>this.create({...t,type:`success`,message:e});info=(e,t)=>this.create({...t,type:`info`,message:e});warning=(e,t)=>this.create({...t,type:`warning`,message:e});loading=(e,t)=>this.create({...t,type:`loading`,message:e});promise=(e,t)=>{if(!t)return;let n;t.loading!==void 0&&(n=this.create({...t,promise:e,type:`loading`,message:t.loading,description:typeof t.description==`function`?void 0:t.description}));let r=Promise.resolve(e instanceof Function?e():e),i=n!==void 0,a,o=r.then(async e=>{if(a=[`resolve`,e],C(e))i=!1,this.create({id:n,type:`default`,message:e});else if(A(e)&&!e.ok){i=!1;let r=typeof t.error==`function`?await t.error(`HTTP error! status: ${e.status}`):t.error,a=typeof t.description==`function`?await t.description(`HTTP error! status: ${e.status}`):t.description,o=typeof r==`object`&&!C(r)?r:{message:r||``,id:n||``};this.create({id:n,type:`error`,description:a,...o})}else if(e instanceof Error){i=!1;let r=typeof t.error==`function`?await t.error(e):t.error,a=typeof t.description==`function`?await t.description(e):t.description,o=typeof r==`object`&&!C(r)?r:{message:r||``,id:n||``};this.create({id:n,type:`error`,description:a,...o})}else if(t.success!==void 0){i=!1;let r=typeof t.success==`function`?await t.success(e):t.success,a=typeof t.description==`function`?await t.description(e):t.description,o=typeof r==`object`&&!C(r)?r:{message:r||``,id:n||``};this.create({id:n,type:`success`,description:a,...o})}}).catch(async e=>{if(a=[`reject`,e],t.error!==void 0){i=!1;let r=typeof t.error==`function`?await t.error(e):t.error,a=typeof t.description==`function`?await t.description(e):t.description,o=typeof r==`object`&&!C(r)?r:{message:r||``,id:n||``};this.create({id:n,type:`error`,description:a,...o})}}).finally(()=>{i&&(this.dismiss(n),n=void 0),t.finally?.()}),s=()=>new Promise((e,t)=>o.then(()=>a[0]===`reject`?t(a[1]):e(a[1])).catch(t));return typeof n!=`string`&&typeof n!=`number`?{unwrap:s}:Object.assign(n,{unwrap:s})};custom=(e,t)=>{let n=t?.id||D++,r=this.toasts.find(e=>e.id===n),i=t?.dismissible===void 0?!0:t.dismissible;return this.dismissedToasts.has(n)&&this.dismissedToasts.delete(n),r?this.toasts=this.toasts.map(r=>r.id===n?(this.publish({...r,component:e,dismissible:i,id:n,...t}),{...r,component:e,dismissible:i,id:n,...t}):r):this.addToast({component:e,dismissible:i,id:n,...t}),n};getActiveToasts=()=>this.toasts.filter(e=>!this.dismissedToasts.has(e.id))};function k(e,t){let n=t?.id||D++;return O.create({message:e,id:n,type:`default`,...t}),n}var A=e=>e&&typeof e==`object`&&`ok`in e&&typeof e.ok==`boolean`&&`status`in e&&typeof e.status==`number`,j=Object.assign(k,{success:O.success,info:O.info,warning:O.warning,error:O.error,custom:O.custom,message:O.message,promise:O.promise,dismiss:O.dismiss,loading:O.loading},{getHistory:()=>O.toasts,getToasts:()=>O.getActiveToasts()});function M(e){return e.label!==void 0}var N=3,P=`24px`,F=`16px`,I=4e3,L=356,R=14,te=45,ne=200;function z(){let e=b(!1);return E(()=>{let t=()=>{e.value=document.hidden};return document.addEventListener(`visibilitychange`,t),()=>window.removeEventListener(`visibilitychange`,t)}),{isDocumentHidden:e}}function B(...e){return e.filter(Boolean).join(` `)}function V(e){let[t,n]=e.split(`-`),r=[];return t&&r.push(t),n&&r.push(n),r}function re(e,t){let n={};return[e,t].forEach((e,t)=>{let r=t===1,i=r?`--mobile-offset`:`--offset`,a=r?F:P;function o(e){[`top`,`right`,`bottom`,`left`].forEach(t=>{n[`${i}-${t}`]=typeof e==`number`?`${e}px`:e})}typeof e==`number`||typeof e==`string`?o(e):typeof e==`object`?[`top`,`right`,`bottom`,`left`].forEach(t=>{e[t]===void 0?n[`${i}-${t}`]=a:n[`${i}-${t}`]=typeof e[t]==`number`?`${e[t]}px`:e[t]}):o(a)}),n}var ie=[`data-rich-colors`,`data-styled`,`data-mounted`,`data-promise`,`data-swiped`,`data-removed`,`data-visible`,`data-y-position`,`data-x-position`,`data-index`,`data-front`,`data-swiping`,`data-dismissible`,`data-type`,`data-invert`,`data-swipe-out`,`data-swipe-direction`,`data-expanded`,`data-testid`],ae=[`aria-label`,`data-disabled`,`data-close-button-position`],oe=o({__name:`Toast`,props:{toast:{},toasts:{},index:{},swipeDirections:{},expanded:{type:Boolean},invert:{type:Boolean},heights:{},gap:{},position:{},closeButtonPosition:{},visibleToasts:{},expandByDefault:{type:Boolean},closeButton:{type:Boolean},interacting:{type:Boolean},style:{},cancelButtonStyle:{},actionButtonStyle:{},duration:{},class:{},unstyled:{type:Boolean},descriptionClass:{},loadingIcon:{},classes:{},icons:{},closeButtonAriaLabel:{},defaultRichColors:{type:Boolean}},emits:[`update:heights`,`update:height`,`removeToast`],setup(t,{emit:o}){let p=t,m=o,v=b(null),C=b(null),D=b(!1),O=b(!1),k=b(!1),A=b(!1),j=b(!1),N=b(0),P=b(0),F=b(p.toast.duration||p.duration||I),L=b(null),R=b(null),re=n(()=>p.index===0),oe=n(()=>p.index+1<=p.visibleToasts),H=n(()=>p.toast.type),U=n(()=>p.toast.dismissible!==!1),se=n(()=>p.toast.class||``),ce=n(()=>p.descriptionClass||``),W=n(()=>{let e=p.toast.position||p.position,t=p.heights.filter(t=>t.position===e).findIndex(e=>e.toastId===p.toast.id);return t>=0?t:0}),le=n(()=>{let e=p.toast.position||p.position;return p.heights.filter(t=>t.position===e).reduce((e,t,n)=>n>=W.value?e:e+t.height,0)}),G=n(()=>W.value*p.gap+le.value||0),ue=n(()=>p.toast.closeButton??p.closeButton),de=n(()=>p.toast.duration||p.duration||I),K=b(0),q=b(0),J=b(null),Y=n(()=>p.position.split(`-`)),fe=n(()=>Y.value[0]),pe=n(()=>Y.value[1]),me=n(()=>typeof p.toast.title!=`string`),he=n(()=>typeof p.toast.description!=`string`),{isDocumentHidden:X}=z(),Z=n(()=>H.value&&H.value===`loading`);_(()=>{D.value=!0,F.value=de.value}),E(async()=>{if(!D.value||!R.value)return;await ee();let e=R.value,t=e.style.height;e.style.height=`auto`;let n=e.getBoundingClientRect().height;e.style.height=t,P.value=n,m(`update:height`,{toastId:p.toast.id,height:n,position:p.toast.position||p.position})});function Q(){O.value=!0,N.value=G.value,setTimeout(()=>{m(`removeToast`,p.toast)},ne)}function $(){if(Z.value||!U.value)return{};Q(),p.toast.onDismiss?.(p.toast)}function ge(e){e.button!==2&&(Z.value||!U.value||(L.value=new Date,N.value=G.value,e.target.setPointerCapture(e.pointerId),e.target.tagName!==`BUTTON`&&(k.value=!0,J.value={x:e.clientX,y:e.clientY})))}function _e(){if(A.value||!U.value)return;J.value=null;let e=Number(R.value?.style.getPropertyValue(`--swipe-amount-x`).replace(`px`,``)||0),t=Number(R.value?.style.getPropertyValue(`--swipe-amount-y`).replace(`px`,``)||0),n=new Date().getTime()-(L.value?.getTime()||0),r=v.value===`x`?e:t,i=Math.abs(r)/n;if(Math.abs(r)>=te||i>.11){N.value=G.value,p.toast.onDismiss?.(p.toast),v.value===`x`?C.value=e>0?`right`:`left`:C.value=t>0?`down`:`up`,Q(),A.value=!0;return}else R.value?.style.setProperty(`--swipe-amount-x`,`0px`),R.value?.style.setProperty(`--swipe-amount-y`,`0px`);j.value=!1,k.value=!1,v.value=null}function ve(e){if(!J.value||!U.value||(window?.getSelection()?.toString()?.length??!1))return;let t=e.clientY-J.value.y,n=e.clientX-J.value.x,r=p.swipeDirections??V(p.position);!v.value&&(Math.abs(n)>1||Math.abs(t)>1)&&(v.value=Math.abs(n)>Math.abs(t)?`x`:`y`);let i={x:0,y:0},a=e=>1/(1.5+Math.abs(e)/20);if(v.value===`y`){if(r.includes(`top`)||r.includes(`bottom`))if(r.includes(`top`)&&t<0||r.includes(`bottom`)&&t>0)i.y=t;else{let e=t*a(t);i.y=Math.abs(e)<Math.abs(t)?e:t}}else if(v.value===`x`&&(r.includes(`left`)||r.includes(`right`)))if(r.includes(`left`)&&n<0||r.includes(`right`)&&n>0)i.x=n;else{let e=n*a(n);i.x=Math.abs(e)<Math.abs(n)?e:n}(Math.abs(i.x)>0||Math.abs(i.y)>0)&&(j.value=!0),R.value?.style.setProperty(`--swipe-amount-x`,`${i.x}px`),R.value?.style.setProperty(`--swipe-amount-y`,`${i.y}px`)}_(()=>{if(D.value=!0,!R.value)return;let e=R.value.getBoundingClientRect().height;P.value=e,m(`update:heights`,[{toastId:p.toast.id,height:e,position:p.toast.position},...p.heights])}),w(()=>{R.value&&m(`removeToast`,p.toast)}),E(e=>{if(p.toast.promise&&H.value===`loading`||p.toast.duration===1/0||p.toast.type===`loading`)return;let t;p.expanded||p.interacting||X.value?(()=>{if(q.value<K.value){let e=new Date().getTime()-K.value;F.value-=e}q.value=new Date().getTime()})():F.value!==1/0&&(K.value=new Date().getTime(),t=setTimeout(()=>{p.toast.onAutoClose?.(p.toast),Q()},F.value)),e(()=>{clearTimeout(t)})}),g(()=>p.toast.delete,e=>{e!==void 0&&e&&(Q(),p.toast.onDismiss?.(p.toast))},{deep:!0});function ye(){k.value=!1,v.value=null,J.value=null}return(t,n)=>(T(),f(`li`,{tabindex:`0`,ref_key:`toastRef`,ref:R,class:e(s(B)(p.class,se.value,t.classes?.toast,t.toast.classes?.toast,t.classes?.[H.value],t.toast?.classes?.[H.value])),"data-sonner-toast":``,"data-rich-colors":t.toast.richColors??t.defaultRichColors,"data-styled":!(t.toast.component||t.toast?.unstyled||t.unstyled),"data-mounted":D.value,"data-promise":!!t.toast.promise,"data-swiped":j.value,"data-removed":O.value,"data-visible":oe.value,"data-y-position":fe.value,"data-x-position":pe.value,"data-index":t.index,"data-front":re.value,"data-swiping":k.value,"data-dismissible":U.value,"data-type":H.value,"data-invert":t.toast.invert||t.invert,"data-swipe-out":A.value,"data-swipe-direction":C.value,"data-expanded":!!(t.expanded||t.expandByDefault&&D.value),"data-testid":t.toast.testId,style:r({"--index":t.index,"--toasts-before":t.index,"--z-index":t.toasts.length-t.index,"--offset":`${O.value?N.value:G.value}px`,"--initial-height":t.expandByDefault?`auto`:`${P.value}px`,...t.style,...p.toast.style}),onDragend:ye,onPointerdown:ge,onPointerup:_e,onPointermove:ve},[ue.value&&!t.toast.component&&H.value!==`loading`?(T(),f(`button`,{key:0,"aria-label":t.closeButtonAriaLabel||`Close toast`,"data-disabled":Z.value,"data-close-button":`true`,"data-close-button-position":t.closeButtonPosition,class:e(s(B)(t.classes?.closeButton,t.toast?.classes?.closeButton)),onClick:$},[t.icons?.close?(T(),S(y(t.icons?.close),{key:0})):x(t.$slots,`close-icon`,{key:1})],10,ae)):i(`v-if`,!0),t.toast.component?(T(),S(y(t.toast.component),h({key:1},t.toast.componentProps,{onCloseToast:$,isPaused:t.$props.expanded||t.$props.interacting||s(X)}),null,16,[`isPaused`])):(T(),f(c,{key:2},[H.value!==`default`||t.toast.icon||t.toast.promise?(T(),f(`div`,{key:0,"data-icon":``,class:e(s(B)(t.classes?.icon,t.toast?.classes?.icon))},[t.toast.icon?(T(),S(y(t.toast.icon),{key:0})):(T(),f(c,{key:1},[H.value===`loading`?x(t.$slots,`loading-icon`,{key:0}):H.value===`success`?x(t.$slots,`success-icon`,{key:1}):H.value===`error`?x(t.$slots,`error-icon`,{key:2}):H.value===`warning`?x(t.$slots,`warning-icon`,{key:3}):H.value===`info`?x(t.$slots,`info-icon`,{key:4}):i(`v-if`,!0)],64))],2)):i(`v-if`,!0),a(`div`,{"data-content":``,class:e(s(B)(t.classes?.content,t.toast?.classes?.content))},[a(`div`,{"data-title":``,class:e(s(B)(t.classes?.title,t.toast.classes?.title))},[me.value?(T(),S(y(t.toast.title),u(h({key:0},t.toast.componentProps)),null,16)):(T(),f(c,{key:1},[d(l(t.toast.title),1)],64))],2),t.toast.description?(T(),f(`div`,{key:0,"data-description":``,class:e(s(B)(t.descriptionClass,ce.value,t.classes?.description,t.toast.classes?.description))},[he.value?(T(),S(y(t.toast.description),u(h({key:0},t.toast.componentProps)),null,16)):(T(),f(c,{key:1},[d(l(t.toast.description),1)],64))],2)):i(`v-if`,!0)],2),t.toast.cancel?(T(),f(`button`,{key:1,style:r(t.toast.cancelButtonStyle||t.cancelButtonStyle),class:e(s(B)(t.classes?.cancelButton,t.toast.classes?.cancelButton)),"data-button":``,"data-cancel":``,onClick:n[0]||=e=>{s(M)(t.toast.cancel)&&U.value&&(t.toast.cancel.onClick?.(e),Q())}},l(s(M)(t.toast.cancel)?t.toast.cancel?.label:t.toast.cancel),7)):i(`v-if`,!0),t.toast.action?(T(),f(`button`,{key:2,style:r(t.toast.actionButtonStyle||t.actionButtonStyle),class:e(s(B)(t.classes?.actionButton,t.toast.classes?.actionButton)),"data-button":``,"data-action":``,onClick:n[1]||=e=>{s(M)(t.toast.action)&&(t.toast.action.onClick?.(e),!e.defaultPrevented&&Q())}},l(s(M)(t.toast.action)?t.toast.action?.label:t.toast.action),7)):i(`v-if`,!0)],64))],46,ie))}}),H=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},U={},se={xmlns:`http://www.w3.org/2000/svg`,width:`12`,height:`12`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stoke-width":`1.5`,"stroke-linecap":`round`,"stroke-linejoin":`round`};function ce(e,t){return T(),f(`svg`,se,t[0]||=[a(`line`,{x1:`18`,y1:`6`,x2:`6`,y2:`18`},null,-1),a(`line`,{x1:`6`,y1:`6`,x2:`18`,y2:`18`},null,-1)])}var W=H(U,[[`render`,ce]]),le=[`data-visible`],G={class:`sonner-spinner`},ue=o({__name:`Loader`,props:{visible:{type:Boolean}},setup(e){let t=Array(12).fill(0);return(e,n)=>(T(),f(`div`,{class:`sonner-loading-wrapper`,"data-visible":e.visible},[a(`div`,G,[(T(!0),f(c,null,v(s(t),e=>(T(),f(`div`,{key:`spinner-bar-${e}`,class:`sonner-loading-bar`}))),128))])],8,le))}}),de={},K={xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 20 20`,fill:`currentColor`,height:`20`,width:`20`};function q(e,t){return T(),f(`svg`,K,t[0]||=[a(`path`,{"fill-rule":`evenodd`,d:`M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z`,"clip-rule":`evenodd`},null,-1)])}var J=H(de,[[`render`,q]]),Y={},fe={xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 20 20`,fill:`currentColor`,height:`20`,width:`20`};function pe(e,t){return T(),f(`svg`,fe,t[0]||=[a(`path`,{"fill-rule":`evenodd`,d:`M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z`,"clip-rule":`evenodd`},null,-1)])}var me=H(Y,[[`render`,pe]]),he={},X={xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,fill:`currentColor`,height:`20`,width:`20`};function Z(e,t){return T(),f(`svg`,X,t[0]||=[a(`path`,{"fill-rule":`evenodd`,d:`M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z`,"clip-rule":`evenodd`},null,-1)])}var Q=H(he,[[`render`,Z]]),$={},ge={xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 20 20`,fill:`currentColor`,height:`20`,width:`20`};function _e(e,t){return T(),f(`svg`,ge,t[0]||=[a(`path`,{"fill-rule":`evenodd`,d:`M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z`,"clip-rule":`evenodd`},null,-1)])}var ve=H($,[[`render`,_e]]),ye=[`aria-label`],be=[`data-sonner-theme`,`dir`,`data-theme`,`data-rich-colors`,`data-y-position`,`data-x-position`],xe=typeof window<`u`&&typeof document<`u`;function Se(){if(typeof window>`u`||typeof document>`u`)return`ltr`;let e=document.documentElement.getAttribute(`dir`);return e===`auto`||!e?window.getComputedStyle(document.documentElement).direction:e}var Ce=o({name:`Toaster`,inheritAttrs:!1,__name:`Toaster`,props:{id:{},invert:{type:Boolean,default:!1},theme:{default:`light`},position:{default:`bottom-right`},closeButtonPosition:{default:`top-left`},hotkey:{default:()=>[`altKey`,`KeyT`]},richColors:{type:Boolean,default:!1},expand:{type:Boolean,default:!1},duration:{},gap:{default:R},visibleToasts:{default:N},closeButton:{type:Boolean,default:!1},toastOptions:{default:()=>({})},class:{default:``},style:{},offset:{default:P},mobileOffset:{default:F},dir:{default:`auto`},swipeDirections:{},icons:{},containerAriaLabel:{default:`Notifications`}},setup(o){let l=o,u=m(),d=b([]),g=n(()=>l.id?d.value.filter(e=>e.toasterId===l.id):d.value.filter(e=>!e.toasterId));function _(e,t){return g.value.filter(n=>!n.position&&t===0||n.position===e)}let y=n(()=>{let e=g.value.filter(e=>e.position).map(e=>e.position);return e.length>0?Array.from(new Set([l.position].concat(e))):[l.position]}),C=n(()=>{let e={};return y.value.forEach(t=>{e[t]=d.value.filter(e=>e.position===t)}),e}),w=b([]),D=b({}),k=b(!1);E(()=>{y.value.forEach(e=>{e in D.value||(D.value[e]=!1)})});let A=b(l.theme===`system`?typeof window<`u`&&window.matchMedia&&window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`:l.theme),j=b(null),M=b(null),N=b(!1),P=l.hotkey.join(`+`).replace(/Key/g,``).replace(/Digit/g,``);function F(e){d.value.find(t=>t.id===e.id)?.delete||O.dismiss(e.id),d.value=d.value.filter(({id:t})=>t!==e.id),setTimeout(()=>{d.value.find(t=>t.id===e.id)||(w.value=w.value.filter(t=>t.toastId!==e.id))},ne+50)}function I(e){N.value&&!e.currentTarget?.contains?.(e.relatedTarget)&&(N.value=!1,M.value&&=(M.value.focus({preventScroll:!0}),null))}function R(e){e.target instanceof HTMLElement&&e.target.dataset.dismissible===`false`||N.value||(N.value=!0,M.value=e.relatedTarget)}function te(e){e.target&&e.target instanceof HTMLElement&&e.target.dataset.dismissible===`false`||(k.value=!0)}E(e=>{e(O.subscribe(e=>{if(e.dismiss){requestAnimationFrame(()=>{d.value=d.value.map(t=>t.id===e.id?{...t,delete:!0}:t)});return}ee(()=>{let t=d.value.findIndex(t=>t.id===e.id);t===-1?d.value=[e,...d.value]:d.value=[...d.value.slice(0,t),{...d.value[t],...e},...d.value.slice(t+1)]})}))}),E(e=>{if(typeof window>`u`)return;if(l.theme!==`system`){A.value=l.theme;return}let t=window.matchMedia(`(prefers-color-scheme: dark)`),n=e=>{A.value=e?`dark`:`light`};n(t.matches);let r=e=>{n(e.matches)};try{t.addEventListener(`change`,r)}catch{t.addListener(r)}e(()=>{try{t.removeEventListener(`change`,r)}catch{t.removeListener(r)}})}),E(()=>{j.value&&M.value&&(M.value.focus({preventScroll:!0}),M.value=null,N.value=!1)}),E(()=>{d.value.length<=1&&Object.keys(D.value).forEach(e=>{D.value[e]=!1})}),E(e=>{function t(e){let t=l.hotkey.every(t=>e[t]||e.code===t),n=Array.isArray(j.value)?j.value[0]:j.value;t&&(y.value.forEach(e=>{D.value[e]=!0}),n?.focus());let r=document.activeElement===j.value||n?.contains(document.activeElement);e.code===`Escape`&&r&&y.value.forEach(e=>{D.value[e]=!1})}xe&&(document.addEventListener(`keydown`,t),e(()=>{document.removeEventListener(`keydown`,t)}))});function z(e){let t=e.currentTarget,n=t.getAttribute(`data-y-position`)+`-`+t.getAttribute(`data-x-position`);D.value[n]=!0}function B(e){if(!k.value){let t=e.currentTarget,n=t.getAttribute(`data-y-position`)+`-`+t.getAttribute(`data-x-position`);D.value[n]=!1}}function V(){Object.keys(D.value).forEach(e=>{D.value[e]=!1})}function ie(){k.value=!1}function ae(e){w.value=e}function H(e){let t=w.value.findIndex(t=>t.toastId===e.toastId);if(t!==-1)w.value[t]=e;else{let t=w.value.findIndex(t=>t.position===e.position);t===-1?w.value.unshift(e):w.value.splice(t,0,e)}}return(n,o)=>(T(),f(c,null,[i(` Remove item from normal navigation flow, only available via hotkey `),a(`section`,{"aria-label":`${n.containerAriaLabel} ${s(P)}`,tabIndex:-1,"aria-live":`polite`,"aria-relevant":`additions text`,"aria-atomic":`false`},[(T(!0),f(c,null,v(y.value,(i,a)=>(T(),f(`ol`,h({key:i,ref_for:!0,ref_key:`listRef`,ref:j,"data-sonner-toaster":``,"data-sonner-theme":A.value,class:l.class,dir:n.dir===`auto`?Se():n.dir,tabIndex:-1,"data-theme":n.theme,"data-rich-colors":n.richColors,"data-y-position":i.split(`-`)[0],"data-x-position":i.split(`-`)[1],style:{"--front-toast-height":`${w.value[0]?.height||0}px`,"--width":`${s(L)}px`,"--gap":`${n.gap}px`,...n.style,...s(u).style,...s(re)(n.offset,n.mobileOffset)}},{ref_for:!0},n.$attrs,{onBlur:I,onFocus:R,onMouseenter:z,onMousemove:z,onMouseleave:B,onDragend:V,onPointerdown:te,onPointerup:ie}),[(T(!0),f(c,null,v(_(i,a),(a,o)=>(T(),S(oe,{key:a.id,heights:w.value,icons:n.icons,index:o,toast:a,defaultRichColors:n.richColors,duration:n.toastOptions?.duration??n.duration,class:e(n.toastOptions?.class??``),descriptionClass:n.toastOptions?.descriptionClass,invert:n.invert,visibleToasts:n.visibleToasts,closeButton:n.toastOptions?.closeButton??n.closeButton,interacting:k.value,position:i,closeButtonPosition:n.toastOptions?.closeButtonPosition??n.closeButtonPosition,style:r(n.toastOptions?.style),unstyled:n.toastOptions?.unstyled,classes:n.toastOptions?.classes,cancelButtonStyle:n.toastOptions?.cancelButtonStyle,actionButtonStyle:n.toastOptions?.actionButtonStyle,"close-button-aria-label":n.toastOptions?.closeButtonAriaLabel,toasts:C.value[i],expandByDefault:n.expand,gap:n.gap,expanded:D.value[i]||!1,swipeDirections:l.swipeDirections,"onUpdate:heights":ae,"onUpdate:height":H,onRemoveToast:F},{"close-icon":t(()=>[x(n.$slots,`close-icon`,{},()=>[p(W)])]),"loading-icon":t(()=>[x(n.$slots,`loading-icon`,{},()=>[p(ue,{visible:a.type===`loading`},null,8,[`visible`])])]),"success-icon":t(()=>[x(n.$slots,`success-icon`,{},()=>[p(J)])]),"error-icon":t(()=>[x(n.$slots,`error-icon`,{},()=>[p(ve)])]),"warning-icon":t(()=>[x(n.$slots,`warning-icon`,{},()=>[p(Q)])]),"info-icon":t(()=>[x(n.$slots,`info-icon`,{},()=>[p(me)])]),_:2},1032,[`heights`,`icons`,`index`,`toast`,`defaultRichColors`,`duration`,`class`,`descriptionClass`,`invert`,`visibleToasts`,`closeButton`,`interacting`,`position`,`closeButtonPosition`,`style`,`unstyled`,`classes`,`cancelButtonStyle`,`actionButtonStyle`,`close-button-aria-label`,`toasts`,`expandByDefault`,`gap`,`expanded`,`swipeDirections`]))),128))],16,be))),128))],8,ye)],2112))}});export{j as n,Ce as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{M as e}from"./button-D27ClX8J.js";var t=e(`loader-circle`,[[`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`,key:`13zald`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`LLM Simple Router`,t=`Admin Dashboard Login`,n=`Password`,r=`Enter admin password`,i=`Login`,a=`Logging in...`,o=`Login failed`,s={title:e,subtitle:t,password:n,passwordPlaceholder:r,loginButton:i,loggingIn:a,loginFailed:o};export{s as default,a as loggingIn,i as loginButton,o as loginFailed,n as password,r as passwordPlaceholder,t as subtitle,e as title};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`LLM Simple Router`,t=`管理后台登录`,n=`密码`,r=`输入管理员密码`,i=`登 录`,a=`登录中...`,o=`登录失败`,s={title:e,subtitle:t,password:n,passwordPlaceholder:r,loginButton:i,loggingIn:a,loginFailed:o};export{s as default,a as loggingIn,i as loginButton,o as loginFailed,n as password,r as passwordPlaceholder,t as subtitle,e as title};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`请求日志`,t=`清理日志`,n=`清除`,r=`全部供应商`,i=`全部模型`,a=`全部密钥`,o=`全部状态`,s=`非 200`,c=`暂无日志`,l=`共 {total} 条,第 {page} / {totalPages} 页`,u=`首页`,d=`上一页`,f=`下一页`,p=`末页`,m={title:`清理日志`,description:`删除指定天数之前的日志`,keepRecentDays:`保留最近天数`,autoCleanup:`自动清理设置`,retentionDays:`保留天数`,noAutoCleanup:`0 = 不自动清理`,saveSettings:`保存设置`,confirmCleanup:`确认清理`},h={title:`清理完成`,description:`已删除 {count} 条日志。`,ok:`确定`},g={id:`ID`,time:`时间`,type:`类型`,model:`模型`,actualForward:`实际转发`,statusCode:`状态码`,latency:`延迟`,streaming:`流式`,retry:`重试`,failover:`故障转移`,error:`错误`,actions:`操作`},_={copyFullId:`复制完整 ID`,replaced:`已替换`,proxyEnhancement:`代理增强:{label}`,unknown:`未知`,detail:`详情`},v={loadFailed:`加载日志失败`,cleanupFailed:`清理日志失败`,loadSubRequestsFailed:`加载子请求失败`,loadDetailFailed:`加载日志详情失败`,loadProvidersFailed:`加载供应商列表失败`,loadKeysFailed:`加载密钥列表失败`},y={endTimeAfterStart:`结束时间须晚于开始时间`},b={saved:`日志保留天数已更新`,updateFailed:`更新保留天数失败`,loadFailed:`加载保留天数失败,使用默认值`},x={structured:`结构化`,rawData:`原始数据`,rawJson:`原始 JSON`,rawSse:`原始 SSE`,copied:`已复制`,copyJson:`复制 JSON`,copy:`复制`,parseError:`解析失败,请切换到原始 JSON 查看`,claudeCodeRequest:`Claude Code 请求`,headers:`Headers ({count} 个)`,key:`Key`,expand:`展开`,expandAll:`展开全部`,collapse:`收起`,moreTools:`+{count}`,otherFields:`其他字段`,deltaEvents:`{count} 个 delta 事件`,completeResponse:`完整响应`,rawEvents:`原始事件流`,streamEnd:`流结束`,content:`内容`,deltaGroupSummary:`{deltaType} · keep {kept} 个`,deltaFoldedInfo:` +{folded} 个已折叠 ({chars} 字符)`,collapsedEvents:`已折叠事件`,rawSseText:`原始 SSE 文本`,thinkingTokens:`思考 Token`,toolsCount:`工具 ({count})`,value:`值`},S={title:e,cleanupLogs:t,clear:n,allProviders:r,allModels:i,allKeys:a,allStatus:o,non200:s,noLogs:c,pagination:l,firstPage:u,prevPage:d,nextPage:f,lastPage:p,cleanup:m,cleanupResult:h,table:g,row:_,messages:v,validation:y,retention:b,viewer:x};export{a as allKeys,i as allModels,r as allProviders,o as allStatus,m as cleanup,t as cleanupLogs,h as cleanupResult,n as clear,S as default,u as firstPage,p as lastPage,v as messages,f as nextPage,c as noLogs,s as non200,l as pagination,d as prevPage,b as retention,_ as row,g as table,e as title,y as validation,x as viewer};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`Request Logs`,t=`Cleanup Logs`,n=`Clear`,r=`All Providers`,i=`All Models`,a=`All Keys`,o=`All Status`,s=`Non-200`,c=`No logs`,l=`Total {total}, Page {page} / {totalPages}`,u=`First`,d=`Previous`,f=`Next`,p=`Last`,m={title:`Cleanup Logs`,description:`Delete logs older than specified days`,keepRecentDays:`Keep recent days`,autoCleanup:`Auto cleanup settings`,retentionDays:`Retention days`,noAutoCleanup:`0 = No auto cleanup`,saveSettings:`Save Settings`,confirmCleanup:`Confirm Cleanup`},h={title:`Cleanup Complete`,description:`Deleted {count} log entries.`,ok:`OK`},g={id:`ID`,time:`Time`,type:`Type`,model:`Model`,actualForward:`Actual Forward`,statusCode:`Status Code`,latency:`Latency`,streaming:`Streaming`,retry:`Retry`,failover:`Failover`,error:`Error`,actions:`Actions`},_={copyFullId:`Copy full ID`,replaced:`Replaced`,proxyEnhancement:`Enhancement: {label}`,unknown:`Unknown`,detail:`Detail`},v={loadFailed:`Failed to load logs`,cleanupFailed:`Failed to cleanup logs`,loadSubRequestsFailed:`Failed to load sub-requests`,loadDetailFailed:`Failed to load log details`,loadProvidersFailed:`Failed to load providers`,loadKeysFailed:`Failed to load router keys`},y={endTimeAfterStart:`End time must be after start time`},b={saved:`Log retention days updated`,updateFailed:`Failed to update retention days`,loadFailed:`Failed to load retention days, using default`},x={structured:`Structured`,rawData:`Raw Data`,rawJson:`Raw JSON`,rawSse:`Raw SSE`,copied:`Copied`,copyJson:`Copy JSON`,copy:`Copy`,parseError:`Parse failed, switch to Raw JSON to view`,claudeCodeRequest:`Claude Code Request`,headers:`Headers ({count})`,key:`Key`,expand:`Expand`,expandAll:`Expand All`,collapse:`Collapse`,moreTools:`+{count}`,otherFields:`Other Fields`,deltaEvents:`{count} delta events`,completeResponse:`Complete Response`,rawEvents:`Raw Events`,streamEnd:`Stream End`,content:`Content`,deltaGroupSummary:`{deltaType} · keep {kept}`,deltaFoldedInfo:` +{folded} collapsed ({chars} chars)`,collapsedEvents:`Collapsed Events`,rawSseText:`Raw SSE Text`,thinkingTokens:`Thinking Tokens`,toolsCount:`Tools ({count})`,value:`Value`},S={title:e,cleanupLogs:t,clear:n,allProviders:r,allModels:i,allKeys:a,allStatus:o,non200:s,noLogs:c,pagination:l,firstPage:u,prevPage:d,nextPage:f,lastPage:p,cleanup:m,cleanupResult:h,table:g,row:_,messages:v,validation:y,retention:b,viewer:x};export{a as allKeys,i as allModels,r as allProviders,o as allStatus,m as cleanup,t as cleanupLogs,h as cleanupResult,n as clear,S as default,u as firstPage,p as lastPage,v as messages,f as nextPage,c as noLogs,s as non200,l as pagination,d as prevPage,b as retention,_ as row,g as table,e as title,y as validation,x as viewer};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`模型映射`,t=`添加分组`,n=`编辑分组`,r=`故障转移`,i=`故障转移 · {count} 级`,a=`首选`,o=`备{n}`,s=`无目标`,c=`暂无映射分组`,l=`失败时切换`,u=`失败时自动切换`,d=`故障转移链`,f=`已启用`,p=`添加多个目标启用故障转移`,m=`添加备选`,h=`请求按顺序依次尝试,当前一个目标失败时自动切换到下一个`,g=`备选 {idx}`,_=`模型`,v=`溢出模型(可选)`,y=`上下文超过目标模型限制时自动切换到此模型`,b=`当前模型上下文 >= 1M,无需配置溢出模型`,x=`上下文超过 {model} 限制 ({context}) 时自动切换到 {overflowModel}`,S=`选择模型...`,C=`点击选择模型...`,w=`选择供应商 / 模型`,T=`配置客户端模型到后端供应商模型的映射规则`,E=`客户端模型`,D=`确认{action}`,O=`确定要{action}映射「{model}」吗?`,k=`禁用`,A=`启用`,j=`确认删除`,M=`确定要删除映射「{model}」吗?`,N=`请输入客户端模型名称`,P=`至少添加一个目标`,F=`请选择模型`,I=`加载供应商失败`,L=`保存分组失败`,R=`删除分组失败`,z=`切换状态失败`,B=`{count} 条映射`,V=`{count} 启用`,H=`有未保存的修改`,U={deleteFailed:`删除 {model} 失败`,createFailed:`创建 {model} 失败`,updateFailed:`更新 {model} 失败`,toggleFailed:`切换 {model} 状态失败`,partialFail:`{count} 个操作失败`,saveFailed:`保存失败`},W=`选择供应商 / 模型`,G={title:e,addGroup:t,editGroup:n,failover:r,failoverLevel:i,primary:a,backup:o,noTarget:s,noGroups:c,switchOnFail:l,switchOnFailAuto:u,failoverChain:d,enabled:f,addMoreToEnableFailover:p,addBackup:m,failoverChainHint:h,backupLabel:g,model:_,overflowModel:v,overflowTooltip:y,overflowHintNoNeed:b,overflowHint:x,selectModel:S,clickToSelectModel:C,selectProviderOrModel:w,configureMappingRule:T,clientModel:E,confirmToggleTitle:D,confirmToggleDesc:O,disableAction:k,enableAction:A,confirmDeleteTitle:j,confirmDeleteDesc:M,errorClientModelRequired:N,errorAtLeastOneTarget:P,errorSelectModel:F,errorLoadProviders:I,errorSaveGroup:L,errorDeleteGroup:R,errorToggleStatus:z,totalMappings:B,enabledCount:V,unsavedChanges:H,messages:U,selectProviderModel:W};export{m as addBackup,t as addGroup,p as addMoreToEnableFailover,o as backup,g as backupLabel,C as clickToSelectModel,E as clientModel,T as configureMappingRule,M as confirmDeleteDesc,j as confirmDeleteTitle,O as confirmToggleDesc,D as confirmToggleTitle,G as default,k as disableAction,n as editGroup,A as enableAction,f as enabled,V as enabledCount,P as errorAtLeastOneTarget,N as errorClientModelRequired,R as errorDeleteGroup,I as errorLoadProviders,L as errorSaveGroup,F as errorSelectModel,z as errorToggleStatus,r as failover,d as failoverChain,h as failoverChainHint,i as failoverLevel,U as messages,_ as model,c as noGroups,s as noTarget,x as overflowHint,b as overflowHintNoNeed,v as overflowModel,y as overflowTooltip,a as primary,S as selectModel,W as selectProviderModel,w as selectProviderOrModel,l as switchOnFail,u as switchOnFailAuto,e as title,B as totalMappings,H as unsavedChanges};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`Model Mappings`,t=`Add Group`,n=`Edit Group`,r=`Failover`,i=`Failover · {count} levels`,a=`Primary`,o=`Backup {n}`,s=`No targets`,c=`No mapping groups yet`,l=`Switch on failure`,u=`Auto-switch on failure`,d=`Failover Chain`,f=`Enabled`,p=`Add multiple targets to enable failover`,m=`Add Backup`,h=`Requests are tried in order; automatically switches to the next target when the current one fails`,g=`Backup {idx}`,_=`Model`,v=`Overflow Model (optional)`,y=`Automatically switch to this model when context exceeds the target model limit`,b=`Current model context >= 1M, no overflow model needed`,x=`Auto-switch to {overflowModel} when context exceeds {model} limit ({context})`,S=`Select model...`,C=`Click to select model...`,w=`Select provider / model`,T=`Configure mapping rules from client models to backend provider models`,E=`Client Model`,D=`Confirm {action}`,O=`Are you sure you want to {action} mapping "{model}"?`,k=`disable`,A=`enable`,j=`Confirm Delete`,M=`Are you sure you want to delete mapping "{model}"?`,N=`Please enter a client model name`,P=`Add at least one target`,F=`Please select a model`,I=`Failed to load providers`,L=`Failed to save group`,R=`Failed to delete group`,z=`Failed to toggle status`,B=`{count} mappings`,V=`{count} enabled`,H=`Unsaved changes`,U={deleteFailed:`Failed to delete {model}`,createFailed:`Failed to create {model}`,updateFailed:`Failed to update {model}`,toggleFailed:`Failed to toggle {model} status`,partialFail:`{count} operations failed`,saveFailed:`Failed to save`},W=`Select Provider / Model`,G={title:e,addGroup:t,editGroup:n,failover:r,failoverLevel:i,primary:a,backup:o,noTarget:s,noGroups:c,switchOnFail:l,switchOnFailAuto:u,failoverChain:d,enabled:f,addMoreToEnableFailover:p,addBackup:m,failoverChainHint:h,backupLabel:g,model:_,overflowModel:v,overflowTooltip:y,overflowHintNoNeed:b,overflowHint:x,selectModel:S,clickToSelectModel:C,selectProviderOrModel:w,configureMappingRule:T,clientModel:E,confirmToggleTitle:D,confirmToggleDesc:O,disableAction:k,enableAction:A,confirmDeleteTitle:j,confirmDeleteDesc:M,errorClientModelRequired:N,errorAtLeastOneTarget:P,errorSelectModel:F,errorLoadProviders:I,errorSaveGroup:L,errorDeleteGroup:R,errorToggleStatus:z,totalMappings:B,enabledCount:V,unsavedChanges:H,messages:U,selectProviderModel:W};export{m as addBackup,t as addGroup,p as addMoreToEnableFailover,o as backup,g as backupLabel,C as clickToSelectModel,E as clientModel,T as configureMappingRule,M as confirmDeleteDesc,j as confirmDeleteTitle,O as confirmToggleDesc,D as confirmToggleTitle,G as default,k as disableAction,n as editGroup,A as enableAction,f as enabled,V as enabledCount,P as errorAtLeastOneTarget,N as errorClientModelRequired,R as errorDeleteGroup,I as errorLoadProviders,L as errorSaveGroup,F as errorSelectModel,z as errorToggleStatus,r as failover,d as failoverChain,h as failoverChainHint,i as failoverLevel,U as messages,_ as model,c as noGroups,s as noTarget,x as overflowHint,b as overflowHintNoNeed,v as overflowModel,y as overflowTooltip,a as primary,S as selectModel,W as selectProviderModel,w as selectProviderOrModel,l as switchOnFail,u as switchOnFailAuto,e as title,B as totalMappings,H as unsavedChanges};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`Realtime Monitor`,t=`Connected`,n=`Disconnected`,r=`Active Requests`,i=`Queued Requests`,a=`Completed`,o=`No active requests`,s=`No queued requests`,c=`No completed requests`,l=`Queued`,u=`Copy ID`,d=`Provider Stats`,f=`Concurrency`,p=`Status Code Distribution`,m=`Runtime`,h={activeRequests:`Active Requests`,streamNonStream:`{stream} streaming / {nonStream} non-streaming`,errorRate:`Error Rate`,p50Latency:`P50 Latency`,avgLatency:`Avg {value}ms`,retryRate:`Retry Rate`},g={noData:`No concurrency data`,adaptive:`Adaptive`,unlimited:`Unlimited`,queued:`Queued: {count}`,queueLimit:`Queue limit: {limit}`},_={noData:`No data`,noProviders:`No provider stats`,requests:`Requests`,successRate:`Success Rate`,avgLatency:`Avg Latency`,retryRate:`Retry Rate`,topErrors:`Top Errors`},v={noData:`No runtime data`,uptime:`Uptime`,memoryRss:`Memory RSS`,heapUsage:`Heap Usage`,activeHandles:`Active Handles`,activeRequests:`Active Requests`,eventLoopDelay:`Event Loop Delay`},y={noData:`No status code data`,success:`2xx Success`,clientError:`4xx Client Error`,rateLimited:`429 Rate Limited`,serverError:`5xx Server Error`},b={title:e,connected:t,disconnected:n,activeRequests:r,queuedRequests:i,completed:a,noActiveRequests:o,noQueuedRequests:s,noCompletedRequests:c,queued:l,copyId:u,providerStats:d,concurrency:f,statusCodeDistribution:p,runtime:m,header:h,concurrencyPanel:g,providerTable:_,runtimePanel:v,statusCodes:y};export{r as activeRequests,a as completed,f as concurrency,g as concurrencyPanel,t as connected,u as copyId,b as default,n as disconnected,h as header,o as noActiveRequests,c as noCompletedRequests,s as noQueuedRequests,d as providerStats,_ as providerTable,l as queued,i as queuedRequests,m as runtime,v as runtimePanel,p as statusCodeDistribution,y as statusCodes,e as title};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`实时监控`,t=`已连接`,n=`未连接`,r=`活跃请求`,i=`队列请求`,a=`已完成`,o=`暂无活跃请求`,s=`暂无排队请求`,c=`暂无已完成请求`,l=`排队`,u=`复制 ID`,d=`Provider 统计`,f=`并发度`,p=`状态码分布`,m=`运行时`,h={activeRequests:`活跃请求`,streamNonStream:`{stream} 流式 / {nonStream} 非流式`,errorRate:`错误率`,p50Latency:`P50 延迟`,avgLatency:`平均 {value}ms`,retryRate:`重试率`},g={noData:`暂无并发数据`,adaptive:`自适应`,unlimited:`未限制`,queued:`排队: {count}`,queueLimit:`队列上限: {limit}`},_={noData:`暂无数据`,noProviders:`暂无 Provider 统计`,requests:`请求数`,successRate:`成功率`,avgLatency:`平均延迟`,retryRate:`重试率`,topErrors:`Top Errors`},v={noData:`暂无运行时数据`,uptime:`运行时间`,memoryRss:`内存 RSS`,heapUsage:`Heap 使用`,activeHandles:`Active Handles`,activeRequests:`Active Requests`,eventLoopDelay:`Event Loop 延迟`},y={noData:`暂无状态码数据`,success:`2xx 成功`,clientError:`4xx 客户端错误`,rateLimited:`429 限流`,serverError:`5xx 服务端错误`},b={title:e,connected:t,disconnected:n,activeRequests:r,queuedRequests:i,completed:a,noActiveRequests:o,noQueuedRequests:s,noCompletedRequests:c,queued:l,copyId:u,providerStats:d,concurrency:f,statusCodeDistribution:p,runtime:m,header:h,concurrencyPanel:g,providerTable:_,runtimePanel:v,statusCodes:y};export{r as activeRequests,a as completed,f as concurrency,g as concurrencyPanel,t as connected,u as copyId,b as default,n as disconnected,h as header,o as noActiveRequests,c as noCompletedRequests,s as noQueuedRequests,d as providerStats,_ as providerTable,l as queued,i as queuedRequests,m as runtime,v as runtimePanel,p as statusCodeDistribution,y as statusCodes,e as title};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`供应商`,t=`添加供应商`,n=`编辑供应商`,r=`重载插件`,i=`暂无供应商`,a={name:`名称`,type:`类型`,baseUrl:`Base URL`,apiKey:`API Key`,models:`模型`,concurrency:`并发`,status:`状态`,actions:`操作`},o={title:`快速配置`,selectProvider:`选择供应商`,selectPlan:`选择套餐`,selectApiType:`选择 API 类型`},s={title:`模板选择`,selectProvider:`选择供应商模板`,selectPlan:`选择套餐`,custom:`自定义`,selectFirst:`请先选择模板,或使用自定义模式`},c={name:`名称`,apiType:`API 类型`,baseUrl:`Base URL`,apiKey:`API Key`,apiKeyPlaceholder:`留空则保持原密钥不变`,availableModels:`可用模型`,modelInputPlaceholder:`输入模型名称,多个用逗号分隔`,context:`上下文`,addModel:`添加`},l={title:`并发控制`,mode:`模式`,selectMode:`选择模式`,autoAdaptive:`自动(自适应)`,manual:`手动`,none:`无限制`,maxConcurrency:`最大并发度`,queueTimeout:`队列超时 (ms)`,queueTimeoutPlaceholder:`0 = 无限等待`,maxQueueSize:`最大队列长度`},u={title:`转换规则`,injectHeaders:`注入 Headers (JSON)`,dropFields:`丢弃字段(逗号分隔)`,requestDefaults:`请求默认值 (JSON)`,saveRules:`保存规则`,deleteRules:`删除规则`,loadFailed:`加载转换规则失败`,requestDefaultsJsonError:`请求默认值 JSON 格式错误`,injectHeadersJsonError:`注入 Headers JSON 格式错误`,saved:`转换规则已保存`,deleteFailed:`删除规则失败`,deleted:`转换规则已删除`},d={nameRequired:`请输入名称`,namePattern:`仅允许英文、数字、横线和下划线`,baseUrlRequired:`请输入 Base URL`,baseUrlInvalid:`请输入合法的 URL`,apiKeyRequired:`请输入 API Key`,concurrencyRange:`范围 {min}-{max}`,negativeNotAllowed:`不能为负数`,queueSizeRange:`范围 {min}-{max}`},f={title:`确认删除`,message:`确定要删除供应商「{name}」吗?此操作不可撤销。`},p={titleDisable:`确认禁用`,titleEnable:`确认启用`,messageDisable:`确定要禁用供应商「{name}」吗?`,messageEnable:`确定要启用供应商「{name}」吗?`,dependencyWarning:`以下映射分组正在使用此供应商:`},m={clientModel:`客户端模型`,targetModel:`目标模型`,targetChain:`目标链`,actions:`操作`,enabled:`启用`,disabled:`已禁用`,level:`{count}级`,overflow:`溢出`,primary:`首选`,backup:`备{n}`,switchOnFail:`失败时切换`,overflowPlaceholder:`可选,上下文超限时切换...`,addFailover:`添加故障转移`,noMappings:`暂无映射`,add:`添加`,autoHint:`自适应模式会根据错误率自动调整并发度`,queueTimeoutPlaceholder:`0=无限`,tagDefault:`默认`,tagAuto:`自动`,tagCustom:`自定义`,tagExisting:`已有`,selectModel:`选择模型...`,unlimited:`无限制`},h={loadFailed:`加载供应商失败`,saveFailed:`保存供应商失败`,toggleFailed:`切换状态失败`,deleteFailed:`删除供应商失败`,reloadFailed:`重载失败`,reloadSuccess:`插件重载完成:{pluginCount} 个插件,{rulesCount} 条规则`,cascadeClean:`清理 {count} 个分组的引用`,cascadeDisable:`禁用 {count} 个分组`,cascadeAuto:`已自动{actions}`},g={title:e,addProvider:t,editProvider:n,reloadPlugin:r,noProviders:i,tableHeaders:a,quickConfig:o,template:s,fields:c,concurrency:l,transform:u,validation:d,confirmDelete:f,confirmToggle:p,shared:m,toast:h};export{t as addProvider,l as concurrency,f as confirmDelete,p as confirmToggle,g as default,n as editProvider,c as fields,i as noProviders,o as quickConfig,r as reloadPlugin,m as shared,a as tableHeaders,s as template,e as title,h as toast,u as transform,d as validation};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`Providers`,t=`Add Provider`,n=`Edit Provider`,r=`Reload Plugins`,i=`No providers yet`,a={name:`Name`,type:`Type`,baseUrl:`Base URL`,apiKey:`API Key`,models:`Models`,concurrency:`Concurrency`,status:`Status`,actions:`Actions`},o={title:`Template Selection`,selectProvider:`Select provider template`,selectPlan:`Select plan`,custom:`Custom`,selectFirst:`Select a template first, or use custom mode`},s={title:`Quick Config`,selectProvider:`Select Provider`,selectPlan:`Select Plan`,selectApiType:`Select API Type`},c={name:`Name`,apiType:`API Type`,baseUrl:`Base URL`,apiKey:`API Key`,apiKeyPlaceholder:`Leave empty to keep the original key`,availableModels:`Available Models`,modelInputPlaceholder:`Enter model names, separated by commas`,context:`Context`,addModel:`Add`},l={title:`Concurrency Control`,mode:`Mode`,selectMode:`Select Mode`,autoAdaptive:`Auto (Adaptive)`,manual:`Manual`,none:`Unlimited`,maxConcurrency:`Max Concurrency`,queueTimeout:`Queue Timeout (ms)`,queueTimeoutPlaceholder:`0 = unlimited wait`,maxQueueSize:`Max Queue Size`},u={title:`Transform Rules`,injectHeaders:`Inject Headers (JSON)`,dropFields:`Drop Fields (comma-separated)`,requestDefaults:`Request Defaults (JSON)`,saveRules:`Save Rules`,deleteRules:`Delete Rules`,loadFailed:`Failed to load transform rules`,requestDefaultsJsonError:`Invalid JSON format for request defaults`,injectHeadersJsonError:`Invalid JSON format for inject headers`,saved:`Transform rules saved`,deleteFailed:`Failed to delete rules`,deleted:`Transform rules deleted`},d={nameRequired:`Please enter a name`,namePattern:`Only letters, numbers, hyphens and underscores allowed`,baseUrlRequired:`Please enter Base URL`,baseUrlInvalid:`Please enter a valid URL`,apiKeyRequired:`Please enter API Key`,concurrencyRange:`Range {min}-{max}`,negativeNotAllowed:`Cannot be negative`,queueSizeRange:`Range {min}-{max}`},f={title:`Confirm Delete`,message:`Are you sure you want to delete provider "{name}"? This action cannot be undone.`},p={titleDisable:`Confirm Disable`,titleEnable:`Confirm Enable`,messageDisable:`Are you sure you want to disable provider "{name}"?`,messageEnable:`Are you sure you want to enable provider "{name}"?`,dependencyWarning:`The following mapping groups are using this provider:`},m={clientModel:`Client Model`,targetModel:`Target Model`,targetChain:`Target Chain`,actions:`Actions`,enabled:`Enabled`,disabled:`Disabled`,level:`{count} levels`,overflow:`Overflow`,primary:`Primary`,backup:`Backup {n}`,switchOnFail:`Switch on failure`,overflowPlaceholder:`Optional, switch when context exceeds limit...`,addFailover:`Add Failover`,noMappings:`No mappings yet`,add:`Add`,autoHint:`Adaptive mode auto-adjusts concurrency based on error rate`,queueTimeoutPlaceholder:`0=unlimited`,tagDefault:`Default`,tagAuto:`Auto`,tagCustom:`Custom`,tagExisting:`Existing`,selectModel:`Select model...`,unlimited:`Unlimited`},h={loadFailed:`Failed to load providers`,saveFailed:`Failed to save provider`,toggleFailed:`Failed to toggle status`,deleteFailed:`Failed to delete provider`,reloadFailed:`Reload failed`,reloadSuccess:`Plugin reload complete: {pluginCount} plugins, {rulesCount} rules`,cascadeClean:`cleaned {count} group references`,cascadeDisable:`disabled {count} groups`,cascadeAuto:`Auto-{actions}`},g={title:e,addProvider:t,editProvider:n,reloadPlugin:r,noProviders:i,tableHeaders:a,template:o,quickConfig:s,fields:c,concurrency:l,transform:u,validation:d,confirmDelete:f,confirmToggle:p,shared:m,toast:h};export{t as addProvider,l as concurrency,f as confirmDelete,p as confirmToggle,g as default,n as editProvider,c as fields,i as noProviders,s as quickConfig,r as reloadPlugin,m as shared,a as tableHeaders,o as template,e as title,h as toast,u as transform,d as validation};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`Proxy Enhancement (Experimental)`,t={dynamicModel:`Dynamic Model Switching`,loopDetection:`Loop Detection`},n={title:`Claude Code Dynamic Model Switching`,description:`Dynamically switch backend models via the /select-model command in Claude Code conversations. Model selection is valid within the current session (24h) and does not affect routing configuration.`,enabled:`Enabled`,disabled:`Disabled`,saving:`Saving...`},r={title:`Instructions`,config:{title:`Configuration`,description:`Create a Command file in the Claude Code project or global directory:`,contentLabel:`File content:`,pathProject:`# Project-level .claude/commands/select-model.md`,pathGlobal:`# Global ~/.claude/commands/select-model.md`},usage:{title:`Usage`,viewModels:`View available models (format: provider_name/backend_model):`,selectModel:`Select a model and remember it for the current session:`,verify:`After switching, confirm the status in the Active Sessions table below. Check request logs to verify routing.`}},i={title:`Active Sessions`,description:`View and manage sessions with configured models`,refresh:`Refresh`,noSessions:`No active sessions`,confirmClearTitle:`Confirm Clear Session`,confirmClearDescription:`After clearing, this session will revert to the default model mapping. This action cannot be undone.`,confirmClear:`Confirm Clear`,clearSuccess:`Session cleared`,clearFailed:`Failed to clear session`,loadFailed:`Failed to load session list`,loadHistoryFailed:`Failed to load history`,keyName:`Key Name`,sessionId:`Session ID`,currentModel:`Current Model`,originalModel:`Original Model`,lastActive:`Last Active`,actions:`Actions`,history:`History`,collapse:`Collapse`,clear:`Clear`,switchHistory:`Switch History`,default:`Default`,justNow:`Just now`,minutesAgo:`{minutes} min ago`,hoursAgo:`{hours} hr ago`,daysAgo:`{days} days ago`},a={toolRoundLimit:{title:`Tool Call Round Limit`,description:`Detect consecutive AI tool call rounds (assistant → tool_use → user → tool_result counts as one round). Automatically injects a prompt after 5 rounds to prevent infinite loops.`},toolCallLoop:{title:`Tool Call Loop Detection`,description:`Detect repeated calls to the same tool by the model. Automatically interrupts the request or injects a prompt when the threshold is exceeded.`},streamLoop:{title:`SSE Output Loop Detection`,description:`Detect content repetition loops in streaming output (N-gram pattern). Automatically interrupts the stream when the threshold is exceeded.`}},o=`Failed to load configuration`,s=`Failed to save`,c={title:e,tabs:t,dynamicModel:n,instructions:r,sessions:i,loopDetection:a,loadFailed:o,saveFailed:s};export{c as default,n as dynamicModel,r as instructions,o as loadFailed,a as loopDetection,s as saveFailed,i as sessions,t as tabs,e as title};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`代理增强(实验性)`,t={dynamicModel:`动态模型切换`,loopDetection:`循环输出检测`},n={title:`Claude Code 动态模型切换`,description:`在 Claude Code 对话中通过 /select-model 命令动态切换后端模型。模型选择在当前会话内有效(24h),不影响路由配置。`,enabled:`已启用`,disabled:`已禁用`,saving:`保存中...`},r={title:`使用说明`,config:{title:`配置方法`,description:`在 Claude Code 项目级或全局级目录下创建 Command 文件:`,contentLabel:`文件内容:`,pathProject:`# 项目级 .claude/commands/select-model.md`,pathGlobal:`# 全局级 ~/.claude/commands/select-model.md`},usage:{title:`使用方法`,viewModels:`查看可用模型列表(格式为 provider_name/backend_model):`,selectModel:`选择模型并记住到当前会话:`,verify:`切换后在下方活跃 Session 表中确认状态,请求日志中可验证路由是否生效。`}},i={title:`活跃 Session`,description:`查看和管理当前已配置模型的 session`,refresh:`刷新`,noSessions:`暂无活跃 Session`,confirmClearTitle:`确认清除 Session`,confirmClearDescription:`清除后,该 Session 将恢复使用默认模型映射。此操作不可撤销。`,confirmClear:`确认清除`,clearSuccess:`Session 已清除`,clearFailed:`清除 Session 失败`,loadFailed:`加载 Session 列表失败`,loadHistoryFailed:`加载历史记录失败`,keyName:`密钥名称`,sessionId:`Session ID`,currentModel:`当前模型`,originalModel:`原始模型`,lastActive:`最后活跃`,actions:`操作`,history:`历史`,collapse:`收起`,clear:`清除`,switchHistory:`切换历史`,default:`默认`,justNow:`刚刚`,minutesAgo:`{minutes} 分钟前`,hoursAgo:`{hours} 小时前`,daysAgo:`{days} 天前`},a={toolRoundLimit:{title:`工具调用轮数限制`,description:`检测 AI 连续进行工具调用的轮数(assistant → tool_use → user → tool_result 算一轮),超过 5 轮时自动注入提示词提醒 AI 不要陷入无限循环。`},toolCallLoop:{title:`工具调用循环检测`,description:`检测模型重复调用同一工具的行为,超过阈值时自动中断请求或注入提示词。`},streamLoop:{title:`SSE 输出内容循环检测`,description:`检测流式输出中内容重复循环(N-gram 模式),超过阈值时自动中断流。`}},o=`加载配置失败`,s=`保存失败`,c={title:e,tabs:t,dynamicModel:n,instructions:r,sessions:i,loopDetection:a,loadFailed:o,saveFailed:s};export{c as default,n as dynamicModel,r as instructions,o as loadFailed,a as loopDetection,s as saveFailed,i as sessions,t as tabs,e as title};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`快速配置`,t={selectClient:`选择客户端`,claudeCode:`Claude Code`,claudeCodeDesc:`Anthropic 官方 CLI 编程助手`,pi:`Pi`,piDesc:`通用编程 Agent 框架`,openaiSdk:`OpenAI SDK`,openaiSdkDesc:`OpenAI API 直接调用`,anthropicSdk:`Anthropic SDK`,anthropicSdkDesc:`Anthropic API 直接调用`},n={config:`供应商配置`,label:`供应商`,select:`选择`,custom:`自定义`,customProvider:`自定义供应商`,format:`格式`,plan:`套餐`,apiKey:`API Key`,apiKeyPlaceholder:`输入 API Key`,connect:`连接`,testing:`测试中`,connected:`已连接`,test:`测试`},r={config:`模型配置`,selectProviderFirst:`请先选择供应商与套餐`,namePlaceholder:`输入模型名称`,contextCustom:`自定义`},i={deepseekAnthropic:`DeepSeek 兼容 (Anthropic)`,thinkingParam:`Thinking 参数`,thinkingParamDesc:`自动补 thinking 参数`,cacheControl:`Cache Control`,cacheControlDesc:`剥离 cache_control`,thinkingBlocks:`Thinking Blocks`,thinkingBlocksDesc:`补缺失的 thinking block`,orphanToolResult:`孤儿 Tool Result`,orphanToolResultDesc:`清理孤儿 tool_result`,deepseekOpenai:`DeepSeek 兼容 (OpenAI)`,nonDsTools:`非DS Tool 降级`,nonDsToolsDesc:`将非DS生成的 tool_calls 降级为 text`,orphanToolResultOa:`孤儿 Tool Result`,orphanToolResultOaDesc:`OpenAI 格式孤儿处理`,general:`通用兼容`,developerRole:`Developer Role`,developerRoleDesc:`developer role 转 system`},a={control:`并发控制`},o={title:`模型映射`,count:`{count} 条`},s={title:`重试规则`,selectedCount:`{count} 条已选`,allCreated:`所有推荐规则已创建,无需重复添加`,selectProviderFirst:`选择供应商后显示推荐规则`,configured:`已配置`,general:`通用`,fixed:`固定`,exponential:`指数退避`,times:`次`},c={title:`转换规则`},l={models:`{count} 模型`,mappings:`{count} 映射`,rules:`{count} 规则`,validate:`验证`,saving:`保存中`,saveConfig:`保存配置`},u={selectProvider:`请选择供应商`,fillApiKey:`请填写 API Key`,enableOneModel:`至少启用一个模型`,validationPassed:`配置验证通过`,existingMappingDelete:`已有映射请到"模型映射"页面删除`,fillApiKeyFirst:`请先填写 API Key`,injectHeadersJsonError:`注入 Headers JSON 格式错误`,requestDefaultsJsonError:`请求默认值 JSON 格式错误`,selectProviderAndPlan:`请选择供应商和套餐`,setupCompleteWithErrors:`快速配置完成!{count} 个映射状态切换失败`,setupComplete:`快速配置完成!`,setupFailed:`快速配置失败`,loadFailed:`加载推荐配置失败`},d={title:e,client:t,provider:n,model:r,patch:i,concurrency:a,mapping:o,retry:s,transform:c,footer:l,messages:u};export{t as client,a as concurrency,d as default,l as footer,o as mapping,u as messages,r as model,i as patch,n as provider,s as retry,e as title,c as transform};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`Quick Setup`,t={selectClient:`Select Client`,claudeCode:`Claude Code`,claudeCodeDesc:`Official Anthropic CLI coding assistant`,pi:`Pi`,piDesc:`Universal coding Agent framework`,openaiSdk:`OpenAI SDK`,openaiSdkDesc:`Direct OpenAI API calls`,anthropicSdk:`Anthropic SDK`,anthropicSdkDesc:`Direct Anthropic API calls`},n={config:`Provider Configuration`,label:`Provider`,select:`Select`,custom:`Custom`,customProvider:`Custom Provider`,format:`Format`,plan:`Plan`,apiKey:`API Key`,apiKeyPlaceholder:`Enter API Key`,connect:`Connect`,testing:`Testing`,connected:`Connected`,test:`Test`},r={config:`Model Configuration`,selectProviderFirst:`Please select a provider and plan first`,namePlaceholder:`Enter model name`,contextCustom:`Custom`},i={deepseekAnthropic:`DeepSeek Compatible (Anthropic)`,thinkingParam:`Thinking Param`,thinkingParamDesc:`Auto-fill thinking parameter`,cacheControl:`Cache Control`,cacheControlDesc:`Strip cache_control`,thinkingBlocks:`Thinking Blocks`,thinkingBlocksDesc:`Fill missing thinking blocks`,orphanToolResult:`Orphan Tool Result`,orphanToolResultDesc:`Clean up orphan tool_result`,deepseekOpenai:`DeepSeek Compatible (OpenAI)`,nonDsTools:`Non-DS Tool Downgrade`,nonDsToolsDesc:`Downgrade non-DS tool_calls to text`,orphanToolResultOa:`Orphan Tool Result`,orphanToolResultOaDesc:`OpenAI format orphan handling`,general:`General Compatibility`,developerRole:`Developer Role`,developerRoleDesc:`Convert developer role to system`},a={control:`Concurrency Control`},o={title:`Model Mappings`,count:`{count} items`},s={title:`Retry Rules`,selectedCount:`{count} selected`,allCreated:`All recommended rules have been created`,selectProviderFirst:`Select a provider to see recommended rules`,configured:`Configured`,general:`General`,fixed:`Fixed`,exponential:`Exponential`,times:`times`},c={title:`Transform Rules`},l={models:`{count} models`,mappings:`{count} mappings`,rules:`{count} rules`,validate:`Validate`,saving:`Saving`,saveConfig:`Save Config`},u={selectProvider:`Please select a provider`,fillApiKey:`Please enter API Key`,enableOneModel:`Please enable at least one model`,validationPassed:`Configuration validated`,existingMappingDelete:`Existing mappings can only be deleted from the Model Mappings page`,fillApiKeyFirst:`Please enter API Key first`,injectHeadersJsonError:`Invalid inject headers JSON format`,requestDefaultsJsonError:`Invalid request defaults JSON format`,selectProviderAndPlan:`Please select a provider and plan`,setupCompleteWithErrors:`Quick setup complete! {count} mapping toggle(s) failed`,setupComplete:`Quick setup complete!`,setupFailed:`Quick setup failed`,loadFailed:`Failed to load recommended configuration`},d={title:e,client:t,provider:n,model:r,patch:i,concurrency:a,mapping:o,retry:s,transform:c,footer:l,messages:u};export{t as client,a as concurrency,d as default,l as footer,o as mapping,u as messages,r as model,i as patch,n as provider,s as retry,e as title,c as transform};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`客户端请求`,t=`上游请求`,n=`无请求数据`,r=`请求进行中,上游请求内容将在映射完成后显示`,i=`模型映射`,a=`系统`,o=`消息 ({count})`,s=`已修改`,c=`{count} 个工具结果`,l=`tools: {count} 个`,u=`流选项`,d=`已注入`,f=`认证替换`,p=`请求概览`,m=`进行中`,h=`失败`,g=`已完成`,_=`非流式`,v=`耗时`,y=`TTFT`,b=`估算输入 Token`,x=`输入 Token`,S=`输出 Token`,C=`速度 (tok/s)`,w=`缓存读取`,T=`尝试历史`,E=`无重试`,D=`状态码`,O=`Client IP`,k=`回复`,A=`思考`,j=`工具调用`,M=`工具结果`,N=`{count} 字符`,P=`(等待数据...)`,F=`(无返回数据)`,I=`请求详情`,L=`查看请求的响应内容和请求内容`,R=`响应内容`,z=`请求内容`,B=`加载中...`,V=`无选中请求`,H=`响应内容`,U=`等待响应数据...`,W=`流式响应内容未持久化存储`,G=`无响应内容`,K=`unknown`,q=`原始 SSE 文本`,J=`Value`,Y=`+{count} 个 delta 事件已折叠`,X=`thinking: {count} tokens`,Z=`原始数据`,Q=`原始 JSON`,$=`原始 SSE`,ee=`结构化`,te={clientRequest:e,upstreamRequest:t,noRequestData:n,requestInProgress:r,modelMapping:i,system:a,messagesCount:o,modified:s,toolResultCount:c,toolsCount:l,streamOptions:u,injected:d,authReplacement:f,overviewTitle:p,pending:m,failed:h,completed:g,nonStream:_,latency:v,ttft:y,estInputTokens:b,inputTokens:x,outputTokens:S,speed:C,cacheRead:w,attemptHistory:T,noRetry:E,statusCodeLabel:D,clientIp:O,reply:k,thinking:A,toolUse:j,toolResultLabel:M,charCount:N,waitingData:P,noReturnData:F,dialogTitle:I,dialogDescription:L,responseTab:R,requestTab:z,loading:B,noSelectedRequest:V,responseTitle:H,waitingResponse:U,streamNotPersisted:W,noResponseContent:G,unknownProvider:K,rawSseText:q,value:J,collapsedEvents:Y,thinkingTokens:X,rawData:Z,rawJson:Q,rawSse:$,structured:ee};export{T as attemptHistory,f as authReplacement,w as cacheRead,N as charCount,O as clientIp,e as clientRequest,Y as collapsedEvents,g as completed,te as default,L as dialogDescription,I as dialogTitle,b as estInputTokens,h as failed,d as injected,x as inputTokens,v as latency,B as loading,o as messagesCount,i as modelMapping,s as modified,n as noRequestData,G as noResponseContent,E as noRetry,F as noReturnData,V as noSelectedRequest,_ as nonStream,S as outputTokens,p as overviewTitle,m as pending,Z as rawData,Q as rawJson,$ as rawSse,q as rawSseText,k as reply,r as requestInProgress,z as requestTab,R as responseTab,H as responseTitle,C as speed,D as statusCodeLabel,W as streamNotPersisted,u as streamOptions,ee as structured,a as system,A as thinking,X as thinkingTokens,c as toolResultCount,M as toolResultLabel,j as toolUse,l as toolsCount,y as ttft,K as unknownProvider,t as upstreamRequest,J as value,P as waitingData,U as waitingResponse};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`Client Request`,t=`Upstream Request`,n=`No request data available`,r=`Request in progress, upstream content will be shown after mapping completes`,i=`Model Mapping`,a=`System`,o=`Messages ({count})`,s=`Modified`,c=`{count} tool result(s)`,l=`tools: {count}`,u=`Stream Options`,d=`Injected`,f=`Auth Replacement`,p=`Request Overview`,m=`In Progress`,h=`Failed`,g=`Completed`,_=`Non-streaming`,v=`Latency`,y=`TTFT`,b=`Est Input Tokens`,x=`Input Tokens`,S=`Output Tokens`,C=`Speed (tok/s)`,w=`Cache Read`,T=`Attempt History`,E=`No retries`,D=`Status Code`,O=`Client IP`,k=`Reply`,A=`Thinking`,j=`Tool Use`,M=`Tool Result`,N=`{count} characters`,P=`(Waiting for data...)`,F=`(No return data)`,I=`Request Details`,L=`View response content and request content`,R=`Response`,z=`Request`,B=`Loading...`,V=`No request selected`,H=`Response Content`,U=`Waiting for response...`,W=`Stream response content not persisted`,G=`No response content`,K=`unknown`,q=`Raw SSE Text`,J=`Value`,Y=`+{count} delta events collapsed`,X=`thinking: {count} tokens`,Z=`Raw Data`,Q=`Raw JSON`,$=`Raw SSE`,ee=`Structured`,te={clientRequest:e,upstreamRequest:t,noRequestData:n,requestInProgress:r,modelMapping:i,system:a,messagesCount:o,modified:s,toolResultCount:c,toolsCount:l,streamOptions:u,injected:d,authReplacement:f,overviewTitle:p,pending:m,failed:h,completed:g,nonStream:_,latency:v,ttft:y,estInputTokens:b,inputTokens:x,outputTokens:S,speed:C,cacheRead:w,attemptHistory:T,noRetry:E,statusCodeLabel:D,clientIp:O,reply:k,thinking:A,toolUse:j,toolResultLabel:M,charCount:N,waitingData:P,noReturnData:F,dialogTitle:I,dialogDescription:L,responseTab:R,requestTab:z,loading:B,noSelectedRequest:V,responseTitle:H,waitingResponse:U,streamNotPersisted:W,noResponseContent:G,unknownProvider:K,rawSseText:q,value:J,collapsedEvents:Y,thinkingTokens:X,rawData:Z,rawJson:Q,rawSse:$,structured:ee};export{T as attemptHistory,f as authReplacement,w as cacheRead,N as charCount,O as clientIp,e as clientRequest,Y as collapsedEvents,g as completed,te as default,L as dialogDescription,I as dialogTitle,b as estInputTokens,h as failed,d as injected,x as inputTokens,v as latency,B as loading,o as messagesCount,i as modelMapping,s as modified,n as noRequestData,G as noResponseContent,E as noRetry,F as noReturnData,V as noSelectedRequest,_ as nonStream,S as outputTokens,p as overviewTitle,m as pending,Z as rawData,Q as rawJson,$ as rawSse,q as rawSseText,k as reply,r as requestInProgress,z as requestTab,R as responseTab,H as responseTitle,C as speed,D as statusCodeLabel,W as streamNotPersisted,u as streamOptions,ee as structured,a as system,A as thinking,X as thinkingTokens,c as toolResultCount,M as toolResultLabel,j as toolUse,l as toolsCount,y as ttft,K as unknownProvider,t as upstreamRequest,J as value,P as waitingData,U as waitingResponse};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`Retry Rules`,t=`Add Rule`,n={name:`Name`,statusCode:`HTTP Status Code`,bodyPattern:`Body Pattern`,retryStrategy:`Retry Strategy`,status:`Status`,actions:`Actions`},r={fixed:`Fixed Interval`,exponential:`Exponential Backoff`},i=`{count} times`,a=`max {value}s`,o=`No rules yet`,s={editRule:`Edit Rule`,addRule:`Add Rule`,name:`Name`,statusCode:`HTTP Status Code`,bodyPattern:`Body Pattern`,bodyPatternPlaceholder:`Regex pattern, e.g. .*rate_limit.*`,retryStrategy:`Retry Strategy`,selectStrategy:`Select strategy`,intervalMs:`Interval (ms)`,initialDelayMs:`Initial Delay (ms)`,maxRetries:`Max Retries`,maxDelayMs:`Max Delay (ms)`,enable:`Enable`},c={title:`Confirm Delete`,description:`Are you sure you want to delete rule "{name}"?`},l={title:`Recommended Retry Rules ({count})`,selectAll:`Select All`,addSelected:`Add Selected ({count})`,headers:{name:`Name`,statusCode:`Status Code`,pattern:`Pattern`,strategy:`Strategy`}},u={loadFailed:`Failed to load data`,saveFailed:`Failed to save rule`,deleteFailed:`Failed to delete rule`,addedCount:`Added {count} rules`},d={nameRequired:`Please enter a name`,statusCodeRange:`Range {min}-{max}`,bodyPatternRequired:`Please enter a pattern`,bodyPatternInvalid:`Invalid regex pattern`,delayMin:`Cannot be less than {min}ms`,retriesRange:`Range 0-{max}`},f={title:e,addRule:t,tableHeaders:n,strategy:r,times:i,upperLimit:a,noRules:o,dialog:s,deleteConfirm:c,recommended:l,messages:u,validation:d};export{t as addRule,f as default,c as deleteConfirm,s as dialog,u as messages,o as noRules,l as recommended,r as strategy,n as tableHeaders,i as times,e as title,a as upperLimit,d as validation};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`重试规则`,t=`添加规则`,n={name:`名称`,statusCode:`HTTP 状态码`,bodyPattern:`响应体匹配`,retryStrategy:`重试策略`,status:`状态`,actions:`操作`},r={fixed:`固定间隔`,exponential:`指数退避`},i=`{count}次`,a=`上限{value}s`,o=`暂无规则`,s={editRule:`编辑规则`,addRule:`添加规则`,name:`名称`,statusCode:`HTTP 状态码`,bodyPattern:`响应体匹配`,bodyPatternPlaceholder:`正则表达式,例如 .*rate_limit.*`,retryStrategy:`重试策略`,selectStrategy:`选择策略`,intervalMs:`间隔时间 (ms)`,initialDelayMs:`初始延迟 (ms)`,maxRetries:`最大重试次数`,maxDelayMs:`延迟上限 (ms)`,enable:`启用`},c={title:`确认删除`,description:`确定要删除规则「{name}」吗?`},l={title:`推荐重试规则 ({count})`,selectAll:`全选`,addSelected:`添加选中 ({count})`,headers:{name:`名称`,statusCode:`状态码`,pattern:`匹配模式`,strategy:`策略`}},u={loadFailed:`加载数据失败`,saveFailed:`保存规则失败`,deleteFailed:`删除规则失败`,addedCount:`已添加 {count} 条规则`},d={nameRequired:`请输入名称`,statusCodeRange:`范围 {min}-{max}`,bodyPatternRequired:`请输入匹配规则`,bodyPatternInvalid:`不是合法的正则表达式`,delayMin:`不能小于 {min}ms`,retriesRange:`范围 0-{max}`},f={title:e,addRule:t,tableHeaders:n,strategy:r,times:i,upperLimit:a,noRules:o,dialog:s,deleteConfirm:c,recommended:l,messages:u,validation:d};export{t as addRule,f as default,c as deleteConfirm,s as dialog,u as messages,o as noRules,l as recommended,r as strategy,n as tableHeaders,i as times,e as title,a as upperLimit,d as validation};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`API 密钥`,t=`创建密钥`,n=`编辑密钥`,r={name:`名称`,key:`密钥`,whitelist:`白名单模型`,status:`状态`,createdAt:`创建时间`,actions:`操作`},i=`暂无密钥`,a=`确认删除`,o=`确定要删除密钥「{name}」吗?使用此密钥的所有请求将被拒绝,此操作不可撤销。`,s=`白名单模型`,c=`不选择 = 允许所有模型`,l=`暂无可用模型,请先配置模型映射`,u={name:`例如:生产环境`},d=`加载数据失败`,f=`保存密钥失败`,p=`删除密钥失败`,m=`请输入名称`,h={title:e,createKey:t,editKey:n,tableHeaders:r,noKeys:i,confirmDeleteTitle:a,confirmDeleteDesc:o,whitelistLabel:s,whitelistHint:c,noModels:l,placeholder:u,loadFailed:d,saveFailed:f,deleteFailed:p,nameRequired:m};export{o as confirmDeleteDesc,a as confirmDeleteTitle,t as createKey,h as default,p as deleteFailed,n as editKey,d as loadFailed,m as nameRequired,i as noKeys,l as noModels,u as placeholder,f as saveFailed,r as tableHeaders,e as title,c as whitelistHint,s as whitelistLabel};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`API Keys`,t=`Create Key`,n=`Edit Key`,r={name:`Name`,key:`Key`,whitelist:`Whitelist Models`,status:`Status`,createdAt:`Created At`,actions:`Actions`},i=`No API keys`,a=`Confirm Delete`,o=`Are you sure you want to delete key "{name}"? All requests using this key will be rejected. This action cannot be undone.`,s=`Whitelist Models`,c=`Leave empty to allow all models`,l=`No models available. Please configure model mappings first`,u={name:`e.g. Production`},d=`Failed to load data`,f=`Failed to save key`,p=`Failed to delete key`,m=`Please enter a name`,h={title:e,createKey:t,editKey:n,tableHeaders:r,noKeys:i,confirmDeleteTitle:a,confirmDeleteDesc:o,whitelistLabel:s,whitelistHint:c,noModels:l,placeholder:u,loadFailed:d,saveFailed:f,deleteFailed:p,nameRequired:m};export{o as confirmDeleteDesc,a as confirmDeleteTitle,t as createKey,h as default,p as deleteFailed,n as editKey,d as loadFailed,m as nameRequired,i as noKeys,l as noModels,u as placeholder,f as saveFailed,r as tableHeaders,e as title,c as whitelistHint,s as whitelistLabel};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`Schedule Management`,t=`Configure time-based scheduling rules for mapping groups to use different models and concurrency settings in different time periods`,n=`Select Mapping Group`,r=`Please select a mapping group`,i=`Schedule Rules`,a=`New Schedule`,o=`Edit Schedule`,s={name:`Name`,status:`Status`,week:`Day of Week`,timeRange:`Time Range`,actions:`Actions`},c=`Enabled`,l=`Disabled`,u=`No schedule rules yet. Click "New Schedule" to add one`,d=`Please select a mapping group first`,f={name:`Name`,namePlaceholder:`e.g., Weekday Daytime`,nameRequired:`Please enter a name`,week:`Applicable Days`,weekRequired:`Please select at least one day`,startTime:`Start Time`,endTime:`End Time`,selectHour:`Select hour`,timeInvalid:`Start time must be earlier than end time`,targets:`Mapping Targets`,selectModel:`Select model...`,targetRequired:`Each target must have a model selected`,addTarget:`Add Target`,concurrencyTitle:`Concurrency Settings (Optional)`,maxConcurrency:`Max Concurrency`,maxConcurrencyPlaceholder:`Unlimited`,queueTimeout:`Queue Timeout (ms)`,queueTimeoutPlaceholder:`Default`,maxQueue:`Max Queue Size`,maxQueuePlaceholder:`Default`},p={sun:`Sun`,mon:`Mon`,tue:`Tue`,wed:`Wed`,thu:`Thu`,fri:`Fri`,sat:`Sat`},m=`Confirm Delete`,h=`Are you sure you want to delete schedule "{name}"? This action cannot be undone.`,g=`Failed to load mapping groups`,_=`Failed to load providers`,v=`Failed to load schedules`,y=`Failed to save schedule`,b=`Failed to toggle status`,x=`Failed to delete schedule`,S={title:e,description:t,selectGroup:n,selectGroupPlaceholder:r,scheduleRules:i,createSchedule:a,editSchedule:o,tableHeaders:s,enabled:c,disabled:l,emptyRules:u,pleaseSelectGroup:d,form:f,weekDays:p,confirmDeleteTitle:m,confirmDeleteMessage:h,loadGroupsFailed:g,loadProvidersFailed:_,loadSchedulesFailed:v,saveFailed:y,toggleFailed:b,deleteFailed:x};export{h as confirmDeleteMessage,m as confirmDeleteTitle,a as createSchedule,S as default,x as deleteFailed,t as description,l as disabled,o as editSchedule,u as emptyRules,c as enabled,f as form,g as loadGroupsFailed,_ as loadProvidersFailed,v as loadSchedulesFailed,d as pleaseSelectGroup,y as saveFailed,i as scheduleRules,n as selectGroup,r as selectGroupPlaceholder,s as tableHeaders,e as title,b as toggleFailed,p as weekDays};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`调度管理`,t=`为映射组配置分时段调度规则,在不同时间段使用不同的模型和并发配置`,n=`选择映射组`,r=`请选择映射组`,i=`调度规则`,a=`新建调度`,o=`编辑调度`,s={name:`名称`,status:`状态`,week:`星期`,timeRange:`时间段`,actions:`操作`},c=`启用`,l=`禁用`,u=`暂无调度规则,点击「新建调度」添加`,d=`请先选择一个映射组`,f={name:`名称`,namePlaceholder:`例如:工作日白天`,nameRequired:`请输入名称`,week:`适用星期`,weekRequired:`至少选择一天`,startTime:`开始时间`,endTime:`结束时间`,selectHour:`选择小时`,timeInvalid:`开始时间必须小于结束时间`,targets:`映射目标`,selectModel:`选择模型...`,targetRequired:`每个目标必须选择模型`,addTarget:`添加目标`,concurrencyTitle:`并发配置(可选)`,maxConcurrency:`最大并发`,maxConcurrencyPlaceholder:`不限`,queueTimeout:`队列超时 (ms)`,queueTimeoutPlaceholder:`默认`,maxQueue:`最大队列`,maxQueuePlaceholder:`默认`},p={sun:`周日`,mon:`周一`,tue:`周二`,wed:`周三`,thu:`周四`,fri:`周五`,sat:`周六`},m=`确认删除`,h=`确定要删除调度「{name}」吗?此操作不可撤销。`,g=`加载映射组失败`,_=`加载供应商失败`,v=`加载调度失败`,y=`保存调度失败`,b=`切换状态失败`,x=`删除调度失败`,S={title:e,description:t,selectGroup:n,selectGroupPlaceholder:r,scheduleRules:i,createSchedule:a,editSchedule:o,tableHeaders:s,enabled:c,disabled:l,emptyRules:u,pleaseSelectGroup:d,form:f,weekDays:p,confirmDeleteTitle:m,confirmDeleteMessage:h,loadGroupsFailed:g,loadProvidersFailed:_,loadSchedulesFailed:v,saveFailed:y,toggleFailed:b,deleteFailed:x};export{h as confirmDeleteMessage,m as confirmDeleteTitle,a as createSchedule,S as default,x as deleteFailed,t as description,l as disabled,o as editSchedule,u as emptyRules,c as enabled,f as form,g as loadGroupsFailed,_ as loadProvidersFailed,v as loadSchedulesFailed,d as pleaseSelectGroup,y as saveFailed,i as scheduleRules,n as selectGroup,r as selectGroupPlaceholder,s as tableHeaders,e as title,b as toggleFailed,p as weekDays};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`系统设置`,t={title:`日志保留策略`,desc:`超过保留天数的日志将被自动清理`,daysLabel:`保留天数`,integerRequired:`请输入整数`,rangeError:`请输入 {min}-{max} 之间的整数`},n={title:`存储管理`,desc:`监控数据库大小并配置自动清理阈值`,dbTotalSize:`数据库总大小`,logSize:`请求日志大小`,logFileSize:`日志文件大小`,dbMaxSizeLabel:`数据库大小上限 (MB)`,logMaxSizeLabel:`日志表大小上限 (MB)`,minValueError:`请输入不小于 {min} 的数值`,logExceedsDbError:`日志表上限不应超过数据库上限`,thresholdsUpdated:`存储阈值已更新`,updateFailed:`更新失败`},r={title:`配置导入导出`,desc:`导出当前配置或从文件恢复`,export:`导出配置`,import:`导入配置`,exportSuccess:`配置已导出`,exportFailed:`导出失败`,unsupportedVersion:`不支持的配置文件版本`,invalidJson:`无效的 JSON 文件`,importSuccess:`配置已导入`,importFailed:`导入失败`,confirmImport:`确认导入配置`,importWarning:`导入将覆盖当前的供应商、映射、密钥等配置。安全设置(密码、JWT)将保留不变。`,confirmButton:`确认导入`,importing:`导入中...`,importComplete:`导入完成:`},i={title:e,retention:t,storage:n,importExport:r};export{i as default,r as importExport,t as retention,n as storage,e as title};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`Settings`,t={title:`Log Retention Policy`,desc:`Logs older than the retention period will be automatically cleaned up`,daysLabel:`Retention Days`,integerRequired:`Please enter an integer`,rangeError:`Please enter an integer between {min} and {max}`},n={title:`Storage Management`,desc:`Monitor database size and configure auto-cleanup thresholds`,dbTotalSize:`Database Total Size`,logSize:`Request Log Size`,logFileSize:`Log File Size`,dbMaxSizeLabel:`Database Size Limit (MB)`,logMaxSizeLabel:`Log Table Size Limit (MB)`,minValueError:`Please enter a value no less than {min}`,logExceedsDbError:`Log table limit should not exceed database limit`,thresholdsUpdated:`Storage thresholds updated`,updateFailed:`Update failed`},r={title:`Config Import/Export`,desc:`Export current config or restore from file`,export:`Export Config`,import:`Import Config`,exportSuccess:`Config exported`,exportFailed:`Export failed`,unsupportedVersion:`Unsupported config file version`,invalidJson:`Invalid JSON file`,importSuccess:`Config imported`,importFailed:`Import failed`,confirmImport:`Confirm Config Import`,importWarning:`Import will overwrite current providers, mappings, keys and other config. Security settings (password, JWT) will be preserved.`,confirmButton:`Confirm Import`,importing:`Importing...`,importComplete:`Import complete:`},i={title:e,retention:t,storage:n,importExport:r};export{i as default,r as importExport,t as retention,n as storage,e as title};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`LLM Simple Router`,t=`初始设置 — 设置管理员密码`,n=`密码`,r=`至少 6 位`,i=`确认密码`,a=`再次输入密码`,o=`完成设置`,s=`设置中...`,c=`设置失败`,l=`请输入密码`,u=`两次密码不一致`,d=`密码至少 6 位`,f={title:e,subtitle:t,password:n,passwordPlaceholder:r,confirmPassword:i,confirmPasswordPlaceholder:a,setupButton:o,settingUp:s,setupFailed:c,pleaseInputPassword:l,passwordMismatch:u,passwordTooShort:d};export{i as confirmPassword,a as confirmPasswordPlaceholder,f as default,n as password,u as passwordMismatch,r as passwordPlaceholder,d as passwordTooShort,l as pleaseInputPassword,s as settingUp,o as setupButton,c as setupFailed,t as subtitle,e as title};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=`LLM Simple Router`,t=`Initial Setup — Set Admin Password`,n=`Password`,r=`At least 6 characters`,i=`Confirm Password`,a=`Re-enter password`,o=`Complete Setup`,s=`Setting up...`,c=`Setup failed`,l=`Please enter password`,u=`Passwords do not match`,d=`Password must be at least 6 characters`,f={title:e,subtitle:t,password:n,passwordPlaceholder:r,confirmPassword:i,confirmPasswordPlaceholder:a,setupButton:o,settingUp:s,setupFailed:c,pleaseInputPassword:l,passwordMismatch:u,passwordTooShort:d};export{i as confirmPassword,a as confirmPasswordPlaceholder,f as default,n as password,u as passwordMismatch,r as passwordPlaceholder,d as passwordTooShort,l as pleaseInputPassword,s as settingUp,o as setupButton,c as setupFailed,t as subtitle,e as title};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={dashboard:`Dashboard`,providers:`Providers`,modelMappings:`Model Mappings`,schedules:`Schedule Management`,routerKeys:`API Keys`,retryRules:`Retry Rules`,proxyEnhancement:`Proxy Enhancement (Experimental)`,monitor:`Realtime Monitor`,logs:`Request Logs`,settings:`Settings`,agentConfig:`Agent Config`,quickSetup:`Quick Setup`,monitoring:`Monitoring`},t={light:`Light Mode`,dark:`Dark Mode`},n={switchToEn:`English`,switchToZh:`中文`},r=`Logout`,i={newVersion:`New version available`,oneClickUpgrade:`One-click Upgrade`,upgrading:`Upgrading...`,configUpdated:`Recommended config updated`,configUpdatedDesc:`Provider or retry rules have new versions`,source:`Source`,syncConfig:`Sync Config`,syncing:`Syncing...`,upToDate:`You're on the latest version with up-to-date config`,notChecked:`Not checked`,checkedAt:`Checked at {time}`,checkNow:`Check Now`,confirmUpgrade:`Confirm upgrade to {version}?`,upgradeSuccess:`Upgrade successful`,restartNeeded:`Upgraded to {version}. Service restart required.`,laterRestart:`Restart Later`,restartNow:`Restart Now`,dockerDeploy:`Detected {type} deployment, please update manually:`,checkFailed:`Check failed`,upgradeFailed:`Upgrade failed`,syncFailed:`Sync failed`,saveFailed:`Failed to save`,configSyncSuccess:`Config synced successfully`,restartSent:`Restart command sent, waiting for service to recover...`,restartFailed:`Restart failed`,upgradeDescBefore:`Will execute`,upgradeDescAfter:`. Service restart is required after upgrade.`},a={nav:e,theme:t,language:n,logout:r,upgrade:i};export{a as default,n as language,r as logout,e as nav,t as theme,i as upgrade};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={dashboard:`仪表盘`,providers:`供应商`,modelMappings:`模型映射`,schedules:`调度管理`,routerKeys:`API 密钥`,retryRules:`重试规则`,proxyEnhancement:`代理增强(实验性)`,monitor:`实时监控`,logs:`请求日志`,settings:`系统设置`,agentConfig:`智能体配置`,quickSetup:`快速配置`,monitoring:`监控`},t={light:`浅色模式`,dark:`深色模式`},n={switchToEn:`English`,switchToZh:`中文`},r=`登出`,i={newVersion:`新版本可用`,oneClickUpgrade:`一键升级`,upgrading:`升级中...`,configUpdated:`推荐配置已更新`,configUpdatedDesc:`供应商或重试规则有新版本`,source:`来源`,syncConfig:`同步配置`,syncing:`同步中...`,upToDate:`当前已是最新版本,配置也是最新的`,notChecked:`未检查`,checkedAt:`检查于 {time}`,checkNow:`立即检查`,confirmUpgrade:`确认升级到 {version}?`,upgradeSuccess:`升级成功`,restartNeeded:`已升级到 {version}。需要重启服务才能生效。`,laterRestart:`稍后重启`,restartNow:`立即重启`,dockerDeploy:`检测到 {type} 部署,请手动更新:`,checkFailed:`检查失败`,upgradeFailed:`升级失败`,syncFailed:`同步失败`,saveFailed:`保存失败`,configSyncSuccess:`配置同步成功`,restartSent:`重启指令已发送,等待服务恢复...`,restartFailed:`重启失败`,upgradeDescBefore:`将执行`,upgradeDescAfter:`,升级完成后需要重启服务才能生效。`},a={nav:e,theme:t,language:n,logout:r,upgrade:i};export{a as default,n as language,r as logout,e as nav,t as theme,i as upgrade};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{M as e}from"./button-D27ClX8J.js";var t=e(`moon`,[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]),n=e(`sun`,[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m17.66 17.66 1.41 1.41`,key:`ptbguv`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}],[`path`,{d:`m19.07 4.93-1.41 1.41`,key:`1shlcs`}]]);export{t as n,n as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{M as e}from"./button-D27ClX8J.js";var t=e(`trash-2`,[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]]);export{t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{jt as e}from"./button-D27ClX8J.js";var t=2e3;function n(){let n=e(!1);async function i(e){try{return navigator.clipboard?.writeText?await navigator.clipboard.writeText(e):r(e),n.value=!0,setTimeout(()=>{n.value=!1},t),!0}catch{try{return r(e),n.value=!0,setTimeout(()=>{n.value=!1},t),!0}catch{return!1}}}return{copied:n,copy:i}}function r(e){let t=document.createElement(`textarea`);if(t.value=e,t.style.cssText=`position:fixed;left:-9999px;opacity:0`,document.body.appendChild(t),t.select(),!document.execCommand(`copy`))throw Error(`execCommand copy failed`);document.body.removeChild(t)}export{n as t};
|