From 5b88ff1049343e3c2fe9eed49d61a86e3a7f3fb6 Mon Sep 17 00:00:00 2001 From: zhengkunwang223 <1paneldev@sina.com> Date: Fri, 31 Jul 2026 10:51:47 +0800 Subject: [PATCH 1/2] feat: Keep Website List Order Stable After Editing --- agent/app/service/website.go | 7 +- agent/go.mod | 6 +- agent/go.sum | 12 +- agent/init/migration/migrations/init.go | 3 + core/go.mod | 6 +- core/go.sum | 28 +- frontend/package-lock.json | 434 ++++++++++++++---- frontend/package.json | 8 +- frontend/src/api/modules/website.ts | 6 +- .../components/v-charts/components/Line.vue | 4 +- frontend/src/lang/modules/en.ts | 14 + frontend/src/lang/modules/es-es.ts | 14 + frontend/src/lang/modules/fa.ts | 14 + frontend/src/lang/modules/ja.ts | 14 + frontend/src/lang/modules/ko.ts | 14 + frontend/src/lang/modules/lo.ts | 14 + frontend/src/lang/modules/ms.ts | 14 + frontend/src/lang/modules/pt-br.ts | 14 + frontend/src/lang/modules/ru.ts | 14 + frontend/src/lang/modules/tr.ts | 14 + frontend/src/lang/modules/zh-Hant.ts | 14 + frontend/src/lang/modules/zh.ts | 14 + frontend/src/utils/monaco.ts | 52 ++- .../installed/upgrade/diff/index.vue | 13 +- .../code-editor/history/index.vue | 7 +- .../file-management/code-editor/index.vue | 7 +- frontend/src/views/website/template/index.vue | 15 +- .../views/website/template/operate/index.vue | 32 +- .../views/website/template/output/create.vue | 5 +- .../views/website/template/output/index.vue | 8 +- 30 files changed, 650 insertions(+), 171 deletions(-) diff --git a/agent/app/service/website.go b/agent/app/service/website.go index 2911711deb8f..5b88b2fd63fe 100644 --- a/agent/app/service/website.go +++ b/agent/app/service/website.go @@ -165,7 +165,12 @@ func (w WebsiteService) PageWebsite(req request.WebsiteSearch) (int64, []respons websiteDTOs []response.WebsiteRes opts []repo.DBOption ) - opts = append(opts, repo.WithOrderRuleBy(req.OrderBy, req.Order), repo.WithOrderRuleBy("updated_at", "descending")) + opts = append( + opts, + repo.WithOrderRuleBy(req.OrderBy, req.Order), + repo.WithOrderRuleBy("created_at", "descending"), + repo.WithOrderRuleBy("id", "descending"), + ) if req.Name != "" { domains, _ := websiteDomainRepo.GetBy(websiteDomainRepo.WithDomainLike(req.Name)) var websiteIds []uint diff --git a/agent/go.mod b/agent/go.mod index b6f0e6577bc7..daccf3477b5d 100644 --- a/agent/go.mod +++ b/agent/go.mod @@ -12,7 +12,7 @@ require ( github.com/creack/pty v1.1.24 github.com/docker/cli v29.6.2+incompatible github.com/docker/docker v28.5.2+incompatible - github.com/docker/go-connections v0.7.0 + github.com/docker/go-connections v0.8.1 github.com/fsnotify/fsnotify v1.10.1 github.com/gin-gonic/gin v1.12.0 github.com/glebarez/sqlite v1.11.0 @@ -39,7 +39,7 @@ require ( github.com/patrickmn/go-cache v2.1.0+incompatible github.com/pkg/errors v0.9.1 github.com/pkg/sftp v1.13.11 - github.com/qiniu/go-sdk/v7 v7.26.17 + github.com/qiniu/go-sdk/v7 v7.27.0 github.com/robfig/cron/v3 v3.0.1 github.com/shirou/gopsutil/v4 v4.26.6 github.com/sirupsen/logrus v1.9.4 @@ -48,7 +48,7 @@ require ( github.com/spf13/cobra v1.10.2 github.com/spf13/viper v1.21.0 github.com/subosito/gotenv v1.6.0 - github.com/tencentyun/cos-go-sdk-v5 v0.7.74 + github.com/tencentyun/cos-go-sdk-v5 v0.7.75 github.com/tomasen/fcgi_client v0.0.0-20180423082037-2bb3d819fd19 github.com/upyun/go-sdk v2.1.0+incompatible go.mongodb.org/mongo-driver/v2 v2.8.0 diff --git a/agent/go.sum b/agent/go.sum index 895912d307ff..8e47f6c2dddb 100644 --- a/agent/go.sum +++ b/agent/go.sum @@ -234,8 +234,8 @@ github.com/docker/docker v28.5.2+incompatible h1:DBX0Y0zAjZbSrm1uzOkdr1onVghKaft github.com/docker/docker v28.5.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.9.5 h1:EFNN8DHvaiK8zVqFA2DT6BjXE0GzfLOZ38ggPTKePkY= github.com/docker/docker-credential-helpers v0.9.5/go.mod h1:v1S+hepowrQXITkEfw6o4+BMbGot02wiKpzWhGUZK6c= -github.com/docker/go-connections v0.7.0 h1:6SsRfJddP22WMrCkj19x9WKjEDTB+ahsdiGYf0mN39c= -github.com/docker/go-connections v0.7.0/go.mod h1:no1qkHdjq7kLMGUXYAduOhYPSJxxvgWBh7ogVvptn3Q= +github.com/docker/go-connections v0.8.1 h1:JibmG5hULs5qXSr/cp/w3Pw5fZuStt4MOHMUExb29/M= +github.com/docker/go-connections v0.8.1/go.mod h1:no1qkHdjq7kLMGUXYAduOhYPSJxxvgWBh7ogVvptn3Q= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/dsnet/compress v0.0.2-0.20230904184137-39efe44ab707 h1:2tV76y6Q9BB+NEBasnqvs7e49aEBFI8ejC89PSnWH+4= @@ -724,8 +724,8 @@ github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+Gx github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/qiniu/go-sdk/v7 v7.26.17 h1:SMjjdKak2j1eedAHreMiS6sObDOLuUrvRqPtlV4KPQo= -github.com/qiniu/go-sdk/v7 v7.26.17/go.mod h1:pTwVR1B+8SXcPLhDzBUasiKFTD9F7jRglRDR553BW3k= +github.com/qiniu/go-sdk/v7 v7.27.0 h1:n+2U0S5fhbmG/lN/agO8KcYJaQDqROUVShtnp56Mkw8= +github.com/qiniu/go-sdk/v7 v7.27.0/go.mod h1:pTwVR1B+8SXcPLhDzBUasiKFTD9F7jRglRDR553BW3k= github.com/quic-go/qpack v0.6.0 h1:g7W+BMYynC1LbYLSqRt8PBg5Tgwxn214ZZR34VIOjz8= github.com/quic-go/qpack v0.6.0/go.mod h1:lUpLKChi8njB4ty2bFLX2x4gzDqXwUpaO1DP9qMDZII= github.com/quic-go/quic-go v0.59.0 h1:OLJkp1Mlm/aS7dpKgTc6cnpynnD2Xg7C1pwL6vy/SAw= @@ -813,8 +813,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.3.133/go.mod github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.3.131 h1:YfzhVkH30GipMEOGIx6nkaJv2E/mWN+G6Vvg+M7SqGg= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.3.131/go.mod h1:Eejvn572HmciFhWFMg6a+eZvkegnEzJrPSnJYKYZX2s= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms v1.0.563/go.mod h1:uom4Nvi9W+Qkom0exYiJ9VWJjXwyxtPYTkKkaLMlfE0= -github.com/tencentyun/cos-go-sdk-v5 v0.7.74 h1:YCsGhIK+Q5vMcmAiQqPuMyhSQ3zN1p7U+dhlHQD++6c= -github.com/tencentyun/cos-go-sdk-v5 v0.7.74/go.mod h1:STbTNaNKq03u+gscPEGOahKzLcGSYOj6Dzc5zNay7Pg= +github.com/tencentyun/cos-go-sdk-v5 v0.7.75 h1:eRCGP5chujSYGFnsCPxlhQcN9wtlSO/4eXrxKtLVAIw= +github.com/tencentyun/cos-go-sdk-v5 v0.7.75/go.mod h1:STbTNaNKq03u+gscPEGOahKzLcGSYOj6Dzc5zNay7Pg= github.com/tencentyun/qcloud-cos-sts-sdk v0.0.0-20250515025012-e0eec8a5d123/go.mod h1:b18KQa4IxHbxeseW1GcZox53d7J0z39VNONTxvvlkXw= github.com/therootcompany/xz v1.0.1 h1:CmOtsn1CbtmyYiusbfmhmkpAAETj0wBIH6kCYaX+xzw= github.com/therootcompany/xz v1.0.1/go.mod h1:3K3UH1yCKgBneZYhuQUvJ9HPD19UEXEI0BWbMn8qNMY= diff --git a/agent/init/migration/migrations/init.go b/agent/init/migration/migrations/init.go index a1d105a50e79..07e438e1b126 100644 --- a/agent/init/migration/migrations/init.go +++ b/agent/init/migration/migrations/init.go @@ -1708,6 +1708,9 @@ var AddWebsiteTemplateTable = &gormigrate.Migration{ &model.WebsiteTemplate{}, &model.WebsiteTemplateOutput{}, ) + }, +} + var AddComposePinned = &gormigrate.Migration{ ID: "20260729-add-compose-pinned", Migrate: func(tx *gorm.DB) error { diff --git a/core/go.mod b/core/go.mod index 4d31627c3596..0a29b76327bf 100644 --- a/core/go.mod +++ b/core/go.mod @@ -10,7 +10,7 @@ require ( github.com/gin-gonic/gin v1.12.0 github.com/glebarez/sqlite v1.11.0 github.com/go-gormigrate/gormigrate/v2 v2.1.6 - github.com/go-ldap/ldap/v3 v3.4.13 + github.com/go-ldap/ldap/v3 v3.4.14 github.com/go-playground/validator/v10 v10.30.3 github.com/go-resty/resty/v2 v2.17.2 github.com/go-webauthn/webauthn v0.17.4 @@ -44,7 +44,7 @@ require ( ) require ( - github.com/Azure/go-ntlmssp v0.1.0 // indirect + github.com/Azure/go-ntlmssp v0.1.1 // indirect github.com/KyleBanks/depth v1.2.1 // indirect github.com/boombuler/barcode v1.1.0 // indirect github.com/bytedance/gopkg v0.1.4 // indirect @@ -59,7 +59,7 @@ require ( github.com/gabriel-vasile/mimetype v1.4.13 // indirect github.com/gin-contrib/sse v1.1.1 // indirect github.com/glebarez/go-sqlite v1.22.0 // indirect - github.com/go-asn1-ber/asn1-ber v1.5.8-0.20250403174932-29230038a667 // indirect + github.com/go-asn1-ber/asn1-ber v1.5.8 // indirect github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-openapi/jsonpointer v0.23.0 // indirect github.com/go-openapi/jsonreference v0.21.5 // indirect diff --git a/core/go.sum b/core/go.sum index 9a318bb2065f..4ad72525daaf 100644 --- a/core/go.sum +++ b/core/go.sum @@ -1,11 +1,13 @@ github.com/1panel-dev/base64Captcha v1.3.8 h1:GbQ2IuGMp4ai4erpwf4BMjm5eLC8Efb+dATVwgpPIII= github.com/1panel-dev/base64Captcha v1.3.8/go.mod h1:gVpwyGm9+g4rg3pXdYnsFAouP73qMOSBfnT3bxCFzco= -github.com/Azure/go-ntlmssp v0.1.0 h1:DjFo6YtWzNqNvQdrwEyr/e4nhU3vRiwenz5QX7sFz+A= -github.com/Azure/go-ntlmssp v0.1.0/go.mod h1:NYqdhxd/8aAct/s4qSYZEerdPuH1liG2/X9DiVTbhpk= +github.com/Azure/go-ntlmssp v0.1.1 h1:l+FM/EEMb0U9QZE7mKNEDw5Mu3mFiaa2GKOoTSsNDPw= +github.com/Azure/go-ntlmssp v0.1.1/go.mod h1:NYqdhxd/8aAct/s4qSYZEerdPuH1liG2/X9DiVTbhpk= github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk= github.com/BurntSushi/toml v1.6.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= +github.com/alexbrainman/sspi v0.0.0-20250919150558-7d374ff0d59e h1:4dAU9FXIyQktpoUAgOJK3OTFc/xug0PCXYCqU0FgDKI= +github.com/alexbrainman/sspi v0.0.0-20250919150558-7d374ff0d59e/go.mod h1:cEWa1LVoE5KvSD9ONXsZrj0z6KqySlCCNKHlLzbqAt4= github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/boombuler/barcode v1.1.0 h1:ChaYjBR63fr4LFyGn8E8nt7dBSt3MiU3zMOZqFvVkHo= github.com/boombuler/barcode v1.1.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= @@ -49,12 +51,12 @@ github.com/glebarez/go-sqlite v1.22.0 h1:uAcMJhaA6r3LHMTFgP0SifzgXg46yJkgxqyuyec github.com/glebarez/go-sqlite v1.22.0/go.mod h1:PlBIdHe0+aUEFn+r2/uthrWq4FxbzugL0L8Li6yQJbc= github.com/glebarez/sqlite v1.11.0 h1:wSG0irqzP6VurnMEpFGer5Li19RpIRi2qvQz++w0GMw= github.com/glebarez/sqlite v1.11.0/go.mod h1:h8/o8j5wiAsqSPoWELDUdJXhjAhsVliSn7bWZjOhrgQ= -github.com/go-asn1-ber/asn1-ber v1.5.8-0.20250403174932-29230038a667 h1:BP4M0CvQ4S3TGls2FvczZtj5Re/2ZzkV9VwqPHH/3Bo= -github.com/go-asn1-ber/asn1-ber v1.5.8-0.20250403174932-29230038a667/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= +github.com/go-asn1-ber/asn1-ber v1.5.8 h1:H9AZkK22UOmfX8J84ubyaZxKJZ3FMHVwn8swoMML7iQ= +github.com/go-asn1-ber/asn1-ber v1.5.8/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= github.com/go-gormigrate/gormigrate/v2 v2.1.6 h1:VtX+l1Stj2v5RGubVQk0LS/8EPGXR+ldcOyCmlmKoyg= github.com/go-gormigrate/gormigrate/v2 v2.1.6/go.mod h1:PZpedQc4tWaxn6kvXicwhinh3L0seLpMc5ReKRX5id4= -github.com/go-ldap/ldap/v3 v3.4.13 h1:+x1nG9h+MZN7h/lUi5Q3UZ0fJ1GyDQYbPvbuH38baDQ= -github.com/go-ldap/ldap/v3 v3.4.13/go.mod h1:LxsGZV6vbaK0sIvYfsv47rfh4ca0JXokCoKjZxsszv0= +github.com/go-ldap/ldap/v3 v3.4.14 h1:D6PYdEgsaVzsXyr6w/yDC06Ria4uUhWm+Rb+er8lfAs= +github.com/go-ldap/ldap/v3 v3.4.14/go.mod h1:S4eJUMUNjDkE0ZJtIZdybwyb03sGGLW6gxXT1Hs8VKA= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-openapi/jsonpointer v0.23.0 h1:c25HFTJ6uWGmoe5BQI6p72p4o7KnlWYsy1MeFlAumsw= @@ -122,6 +124,8 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= +github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/hhrutter/lzw v1.0.0 h1:laL89Llp86W3rRs83LvKbwYRx6INE8gDn0XNb1oXtm0= @@ -132,6 +136,18 @@ github.com/hhrutter/tiff v1.0.2 h1:7H3FQQpKu/i5WaSChoD1nnJbGx4MxU5TlNqqpxw55z8= github.com/hhrutter/tiff v1.0.2/go.mod h1:pcOeuK5loFUE7Y/WnzGw20YxUdnqjY1P0Jlcieb/cCw= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8= +github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs= +github.com/jcmturner/dnsutils/v2 v2.0.0 h1:lltnkeZGL0wILNvrNiVCR6Ro5PGU/SeBvVO/8c/iPbo= +github.com/jcmturner/dnsutils/v2 v2.0.0/go.mod h1:b0TnjGOvI/n42bZa+hmXL+kFJZsFT7G4t3HTlQ184QM= +github.com/jcmturner/gofork v1.7.6 h1:QH0l3hzAU1tfT3rZCnW5zXl+orbkNMMRGJfdJjHVETg= +github.com/jcmturner/gofork v1.7.6/go.mod h1:1622LH6i/EZqLloHfE7IeZ0uEJwMSUyQ/nDd82IeqRo= +github.com/jcmturner/goidentity/v6 v6.0.1 h1:VKnZd2oEIMorCTsFBnJWbExfNN7yZr3EhJAxwOkZg6o= +github.com/jcmturner/goidentity/v6 v6.0.1/go.mod h1:X1YW3bgtvwAXju7V3LCIMpY0Gbxyjn/mY9zx4tFonSg= +github.com/jcmturner/gokrb5/v8 v8.4.4 h1:x1Sv4HaTpepFkXbt2IkL29DXRf8sOfZXo8eRKh687T8= +github.com/jcmturner/gokrb5/v8 v8.4.4/go.mod h1:1btQEpgT6k+unzCwX1KdWMEwPPkkgBtP+F6aCACiMrs= +github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZY= +github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc= github.com/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8= github.com/jinzhu/copier v0.4.0/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg= github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 2b1692d5bea5..1a1bc9cc82df 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -32,7 +32,7 @@ "jsencrypt": "^3.3.2", "lodash-es": "^4.18.1", "md-editor-v3": "^6.5.4", - "monaco-editor": "^0.53.0", + "monaco-editor": "^0.56.0", "nprogress": "^0.2.0", "pinia": "^3.0.4", "pinia-plugin-persistedstate": "^4.7.1", @@ -59,15 +59,15 @@ "@vue/compiler-sfc": "^3.5.35", "autoprefixer": "^10.5.4", "esbuild": "^0.28.1", - "eslint": "^10.6.0", + "eslint": "^10.7.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-prettier": "^5.5.6", "eslint-plugin-vue": "^10.10.0", "lint-staged": "^17.0.7", "postcss": "^8.5.14", "postcss-html": "^1.8.1", "prettier": "^3.9.6", - "rollup-plugin-visualizer": "^5.5.4", + "rollup-plugin-visualizer": "^7.0.1", "sass": "^1.101.3", "standard-version": "^9.5.0", "tailwindcss": "^4.3.3", @@ -2339,13 +2339,13 @@ } }, "node_modules/@pkgr/core": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", - "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.3.6.tgz", + "integrity": "sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==", "dev": true, "license": "MIT", "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + "node": "^14.18.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/pkgr" @@ -3043,10 +3043,11 @@ "license": "MIT" }, "node_modules/@types/trusted-types": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-1.0.6.tgz", - "integrity": "sha512-230RC8sFeHoT6sSUlRO6a8cAnclO06eeiq1QDfiv2FGCLWFvvERWgwIQD4FWqD9A69BN7Lzee4OXwoMVnnsWDw==", - "license": "MIT" + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT", + "optional": true }, "node_modules/@types/uuid": { "version": "11.0.0", @@ -4259,6 +4260,22 @@ "dev": true, "license": "MIT" }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", @@ -4458,18 +4475,103 @@ } }, "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", "dev": true, "license": "ISC", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" }, "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/codemirror": { @@ -5084,14 +5186,47 @@ "dev": true, "license": "MIT" }, + "node_modules/default-browser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/defu": { @@ -5202,13 +5337,6 @@ "@types/trusted-types": "^2.0.7" } }, - "node_modules/dompurify/node_modules/@types/trusted-types": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", - "license": "MIT", - "optional": true - }, "node_modules/domutils": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", @@ -5548,9 +5676,9 @@ } }, "node_modules/eslint": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.6.0.tgz", - "integrity": "sha512-6lVbcqSodALYo+4ELD0heG6lFiFxnLMuLkiMi2qV8LMp54N8tE8FT1GMH+ev4Ti00nFjNze2+Su6DsV5OQW3Dg==", + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.7.0.tgz", + "integrity": "sha512-GVTD7s1vdIl6UYvAfriOPeY1Df8LIZjfofLvHwde+erDHGGuHyuM6xoxRxmHiebhYuD2p1vN4wWh0XzPARSGDQ==", "dev": true, "license": "MIT", "peer": true, @@ -5625,14 +5753,14 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.5.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.5.tgz", - "integrity": "sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==", + "version": "5.5.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.6.tgz", + "integrity": "sha512-ifetmTcxWfz+4qRW3pH/ujdTq2jQIj59AxJMIN26K5avYgU8dxycUETQonWiW+wPrYXA0j3Try0l1CnwVQtDqQ==", "dev": true, "license": "MIT", "dependencies": { "prettier-linter-helpers": "^1.0.1", - "synckit": "^0.11.12" + "synckit": "^0.11.13" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -6601,16 +6729,16 @@ } }, "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", "dev": true, "license": "MIT", "bin": { "is-docker": "cli.js" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -6655,6 +6783,38 @@ "node": ">=0.10.0" } }, + "node_modules/is-in-ssh": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-in-ssh/-/is-in-ssh-1.0.0.tgz", + "integrity": "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -6712,16 +6872,19 @@ } }, "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", "dev": true, "license": "MIT", "dependencies": { - "is-docker": "^2.0.0" + "is-inside-container": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/isarray": { @@ -7662,6 +7825,18 @@ "integrity": "sha512-5VgmdKlkBd8sgXuoDoxMpiU+BiEt3I49GItBzzw7Mxq9CxvnhE/k09HFli09zgfFDRixDQDfDxi0mgBCXtaTvA==", "license": "MIT" }, + "node_modules/marked": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-14.0.0.tgz", + "integrity": "sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -8033,12 +8208,22 @@ } }, "node_modules/monaco-editor": { - "version": "0.53.0", - "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.53.0.tgz", - "integrity": "sha512-0WNThgC6CMWNXXBxTbaYYcunj08iB5rnx4/G56UOPeL9UVIUGGHA1GR0EWIh9Ebabj7NpCRawQ5b0hfN1jQmYQ==", + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.56.0.tgz", + "integrity": "sha512-sXboRm3BeBeLm938eaiyLMe0OxzfXIlZvbv4ir/jVgQy1zDhWjgmny0WoN45fuDKhCCQsYMbBJrv/A6jd8aCUg==", "license": "MIT", "dependencies": { - "@types/trusted-types": "^1.0.6" + "dompurify": "3.4.8", + "marked": "14.0.0" + } + }, + "node_modules/monaco-editor/node_modules/dompurify": { + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.8.tgz", + "integrity": "sha512-yb1cEmaOum7wFvOCSQxyfgVlv5D47Rc30iZWoMpbDIWTnJ6grDDQyu2KFJzB2k7u0pMuJcQ1zphH//fFnw2tjQ==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" } }, "node_modules/ms": { @@ -8190,18 +8375,21 @@ } }, "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/open/-/open-11.0.0.tgz", + "integrity": "sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==", "dev": true, "license": "MIT", "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" + "default-browser": "^5.4.0", + "define-lazy-prop": "^3.0.0", + "is-in-ssh": "^1.0.0", + "is-inside-container": "^1.0.0", + "powershell-utils": "^0.1.0", + "wsl-utils": "^0.3.0" }, "engines": { - "node": ">=12" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -8519,6 +8707,19 @@ "dev": true, "license": "MIT" }, + "node_modules/powershell-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.1.0.tgz", + "integrity": "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -8934,25 +9135,25 @@ } }, "node_modules/rollup-plugin-visualizer": { - "version": "5.14.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.14.0.tgz", - "integrity": "sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-7.0.1.tgz", + "integrity": "sha512-UJUT4+1Ho4OcWmPYU3sYXgUqI8B8Ayfe06MX7y0qCJ1K8aGoKtR/NDd/2nZqM7ADkrzny+I99Ul7GgyoiVNAgg==", "dev": true, "license": "MIT", "dependencies": { - "open": "^8.4.0", + "open": "^11.0.0", "picomatch": "^4.0.2", "source-map": "^0.7.4", - "yargs": "^17.5.1" + "yargs": "^18.0.0" }, "bin": { "rollup-plugin-visualizer": "dist/bin/cli.js" }, "engines": { - "node": ">=18" + "node": ">=22" }, "peerDependencies": { - "rolldown": "1.x", + "rolldown": "1.x || ^1.0.0-beta || ^1.0.0-rc", "rollup": "2.x || 3.x || 4.x" }, "peerDependenciesMeta": { @@ -8977,6 +9178,19 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -9561,13 +9775,13 @@ } }, "node_modules/synckit": { - "version": "0.11.12", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", - "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==", + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.13.tgz", + "integrity": "sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==", "dev": true, "license": "MIT", "dependencies": { - "@pkgr/core": "^0.2.9" + "@pkgr/core": "^0.3.6" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -10873,6 +11087,23 @@ "dev": true, "license": "MIT" }, + "node_modules/wsl-utils": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.3.1.tgz", + "integrity": "sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0", + "powershell-utils": "^0.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/xml-name-validator": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", @@ -10948,22 +11179,21 @@ } }, "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.1.0.tgz", + "integrity": "sha512-2rAgRKu54VsHkqI0/tYkmluGXHD4KW7yZoycuqDQ15QOTnc2VVfy0nN/1eMhnQLO00A+dwtK20xuCnc1YGeUyg==", "dev": true, "license": "MIT", "dependencies": { - "cliui": "^8.0.1", + "cliui": "^9.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", + "string-width": "^8.2.1", "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "yargs-parser": "^22.0.0" }, "engines": { - "node": ">=12" + "node": "^20.19.0 || ^22.12.0 || >=23" } }, "node_modules/yargs-parser": { @@ -10976,14 +11206,60 @@ "node": ">=10" } }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz", + "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/yargs/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", "dev": true, "license": "ISC", "engines": { - "node": ">=12" + "node": "^20.19.0 || ^22.12.0 || >=23" } }, "node_modules/yocto-queue": { diff --git a/frontend/package.json b/frontend/package.json index de120e78d131..2e3ae7f530de 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -43,7 +43,7 @@ "jsencrypt": "^3.3.2", "lodash-es": "^4.18.1", "md-editor-v3": "^6.5.4", - "monaco-editor": "^0.53.0", + "monaco-editor": "^0.56.0", "nprogress": "^0.2.0", "pinia": "^3.0.4", "pinia-plugin-persistedstate": "^4.7.1", @@ -70,15 +70,15 @@ "@vue/compiler-sfc": "^3.5.35", "autoprefixer": "^10.5.4", "esbuild": "^0.28.1", - "eslint": "^10.6.0", + "eslint": "^10.7.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-prettier": "^5.5.6", "eslint-plugin-vue": "^10.10.0", "lint-staged": "^17.0.7", "postcss": "^8.5.14", "postcss-html": "^1.8.1", "prettier": "^3.9.6", - "rollup-plugin-visualizer": "^5.5.4", + "rollup-plugin-visualizer": "^7.0.1", "sass": "^1.101.3", "standard-version": "^9.5.0", "tailwindcss": "^4.3.3", diff --git a/frontend/src/api/modules/website.ts b/frontend/src/api/modules/website.ts index bd3155207f2f..81742b657898 100644 --- a/frontend/src/api/modules/website.ts +++ b/frontend/src/api/modules/website.ts @@ -425,7 +425,11 @@ export const getTemplate = (id: number) => { export const uploadTemplateZip = (file: globalThis.File) => { const formData = new FormData(); formData.append('file', file); - return http.post<{ filePath: string; variables: string[] }>(`/websites/templates/upload`, formData, TimeoutEnum.T_5M); + return http.post<{ filePath: string; variables: string[] }>( + `/websites/templates/upload`, + formData, + TimeoutEnum.T_5M, + ); }; export const previewTemplate = (req: Website.PreviewReq) => { diff --git a/frontend/src/components/v-charts/components/Line.vue b/frontend/src/components/v-charts/components/Line.vue index 58082d38f32b..ab11b60440ef 100644 --- a/frontend/src/components/v-charts/components/Line.vue +++ b/frontend/src/components/v-charts/components/Line.vue @@ -254,11 +254,13 @@ function initChart() { ...itemSelect, right: grid.right || 10, itemWidth: 8, + icon: 'circle', + ...props.option.legend, textStyle: { ...itemSelect?.textStyle, + ...props.option.legend?.textStyle, color: regularTextColor, }, - icon: 'circle', }, xAxis: { ...props.option.xAxis, diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index 160789362da5..71f1b00c1b42 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -1011,6 +1011,17 @@ const message = { unlimitedWithAuto: 'Unlimited, includes auto', apiKeyCount: 'API Keys', lastUsedAt: 'Last Used', + validityPeriod: 'Validity Period', + keepCurrentValidity: 'Keep current validity', + neverExpires: 'Never expires', + validForDays: 'Valid for {0} days', + customDays: 'Custom days', + enterValidityDays: 'Enter the validity period in days', + currentExpiresAt: 'Current expiration: {0}', + currentNeverExpires: 'Currently never expires', + expiresAt: 'Expiration Time', + expired: 'Expired', + reactivate: 'Reactivate', settingTitle: 'AI Gateway Settings', basicSetting: 'Basic Settings', performanceSetting: 'Performance Settings', @@ -1019,6 +1030,8 @@ const message = { protocolConversion: 'Protocol Conversion', protocolConversionDesc: 'Allow supported direct conversion between Chat Completions, Responses, and Anthropic Messages. Native protocols always take priority.', + protocolConversionRisk: + 'Protocol conversion is not lossless. Protocol-specific fields, tool calls, reasoning, or multimodal content may be degraded or lost. Use it after weighing the trade-offs.', lbPolicyRoundRobin: 'Round Robin', lbPolicyRoundRobinDesc: 'Select available model accounts in order. Use this when backends have similar capacity.', @@ -1072,6 +1085,7 @@ const message = { userFallback: 'Deleted user (ID: {0})', requestModel: 'Request Model', upstreamModel: 'Upstream Model', + upstreamDuration: 'Upstream Time', requestModelPlaceholder: 'e.g. qwen2.5-coder', upstreamModelPlaceholder: 'e.g. Qwen/Qwen2.5-Coder-32B-Instruct', addMapping: 'Add Mapping', diff --git a/frontend/src/lang/modules/es-es.ts b/frontend/src/lang/modules/es-es.ts index da7e1348c43d..fdca59822ef3 100644 --- a/frontend/src/lang/modules/es-es.ts +++ b/frontend/src/lang/modules/es-es.ts @@ -1021,6 +1021,17 @@ const message = { unlimited: 'Ilimitado', unlimitedWithAuto: 'Ilimitado, incluye auto', lastUsedAt: 'Último uso', + validityPeriod: 'Periodo de validez', + keepCurrentValidity: 'Mantener la validez actual', + neverExpires: 'Nunca caduca', + validForDays: 'Válido durante {0} días', + customDays: 'Días personalizados', + enterValidityDays: 'Introduzca el periodo de validez en días', + currentExpiresAt: 'Caducidad actual: {0}', + currentNeverExpires: 'Actualmente no caduca', + expiresAt: 'Fecha de caducidad', + expired: 'Caducado', + reactivate: 'Reactivar', settingTitle: 'Configuración del gateway de IA', basicSetting: 'Configuración básica', performanceSetting: 'Configuración de rendimiento', @@ -1029,6 +1040,8 @@ const message = { protocolConversion: 'Conversión de protocolo', protocolConversionDesc: 'Permite la conversión directa compatible entre Chat Completions, Responses y Anthropic Messages. Los protocolos nativos siempre tienen prioridad.', + protocolConversionRisk: + 'La conversión de protocolos no es sin pérdidas. Los campos específicos, las llamadas a herramientas, el razonamiento o el contenido multimodal pueden degradarse o perderse. Úsela después de evaluar los riesgos.', lbPolicyRoundRobin: 'Round Robin', lbPolicyRoundRobinDesc: 'Selecciona las cuentas de modelo disponibles en orden. Úselo cuando los backends tengan capacidad similar.', @@ -1082,6 +1095,7 @@ const message = { userFallback: 'Usuario eliminado (ID: {0})', requestModel: 'Modelo solicitado', upstreamModel: 'Modelo upstream', + upstreamDuration: 'Tiempo upstream', requestModelPlaceholder: 'p. ej. qwen2.5-coder', upstreamModelPlaceholder: 'p. ej. Qwen/Qwen2.5-Coder-32B-Instruct', addMapping: 'Agregar mapeo', diff --git a/frontend/src/lang/modules/fa.ts b/frontend/src/lang/modules/fa.ts index d2ad6a5397f1..6106c9ea48df 100644 --- a/frontend/src/lang/modules/fa.ts +++ b/frontend/src/lang/modules/fa.ts @@ -995,6 +995,17 @@ const message = { unlimitedWithAuto: 'نامحدود، شامل auto', apiKeyCount: 'کلیدهای API', lastUsedAt: 'آخرین استفاده', + validityPeriod: 'دوره اعتبار', + keepCurrentValidity: 'حفظ اعتبار فعلی', + neverExpires: 'بدون انقضا', + validForDays: 'معتبر برای {0} روز', + customDays: 'تعداد روز سفارشی', + enterValidityDays: 'مدت اعتبار را به روز وارد کنید', + currentExpiresAt: 'زمان انقضای فعلی: {0}', + currentNeverExpires: 'در حال حاضر بدون انقضا', + expiresAt: 'زمان انقضا', + expired: 'منقضی شده', + reactivate: 'فعال‌سازی مجدد', settingTitle: 'تنظیمات دروازه AI', basicSetting: 'تنظیمات پایه', performanceSetting: 'تنظیمات عملکرد', @@ -1003,6 +1014,8 @@ const message = { protocolConversion: 'تبدیل پروتکل', protocolConversionDesc: 'تبدیل مستقیم پشتیبانی‌شده بین Chat Completions، Responses و Anthropic Messages را فعال می‌کند. پروتکل بومی همیشه اولویت دارد.', + protocolConversionRisk: + 'تبدیل پروتکل بدون اتلاف تضمین نمی‌شود. فیلدهای اختصاصی، فراخوانی ابزارها، استدلال یا محتوای چندوجهی ممکن است ساده‌سازی یا حذف شوند. پس از سنجیدن ریسک‌ها استفاده کنید.', lbPolicyRoundRobin: 'چرخه‌ای', lbPolicyRoundRobinDesc: 'حساب‌های مدل موجود را به ترتیب انتخاب کنید. زمانی استفاده شود که بک‌اندها ظرفیت مشابهی دارند.', @@ -1056,6 +1069,7 @@ const message = { userFallback: 'کاربر حذف شده (شناسه: {0})', requestModel: 'مدل درخواست', upstreamModel: 'مدل بالادست', + upstreamDuration: 'زمان بالادست', requestModelPlaceholder: 'مثلاً qwen2.5-coder', upstreamModelPlaceholder: 'مثلاً Qwen/Qwen2.5-Coder-32B-Instruct', addMapping: 'افزودن نگاشت', diff --git a/frontend/src/lang/modules/ja.ts b/frontend/src/lang/modules/ja.ts index c57292414ebe..507d7b911d1d 100644 --- a/frontend/src/lang/modules/ja.ts +++ b/frontend/src/lang/modules/ja.ts @@ -1008,6 +1008,17 @@ const message = { unlimited: '無制限', unlimitedWithAuto: '無制限、auto を含む', lastUsedAt: '最終使用日時', + validityPeriod: '有効期間', + keepCurrentValidity: '現在の有効期間を維持', + neverExpires: '無期限', + validForDays: '{0} 日間有効', + customDays: '日数を指定', + enterValidityDays: '有効日数を入力してください', + currentExpiresAt: '現在の有効期限:{0}', + currentNeverExpires: '現在は無期限です', + expiresAt: '有効期限', + expired: '期限切れ', + reactivate: '再有効化', settingTitle: 'AI ゲートウェイ設定', basicSetting: '基本設定', performanceSetting: 'パフォーマンス設定', @@ -1016,6 +1027,8 @@ const message = { protocolConversion: 'プロトコル変換', protocolConversionDesc: 'Chat Completions、Responses、Anthropic Messages 間でサポートされる直接変換を有効にします。ネイティブプロトコルが常に優先されます。', + protocolConversionRisk: + 'プロトコル変換は完全に可逆ではありません。プロトコル固有のフィールド、ツール呼び出し、推論、マルチモーダルコンテンツが劣化または失われる可能性があります。リスクを考慮したうえで使用してください。', lbPolicyRoundRobin: 'ラウンドロビン', lbPolicyRoundRobinDesc: '利用可能なモデルアカウントを順番に選択します。バックエンドの性能が近い場合に適しています。', @@ -1069,6 +1082,7 @@ const message = { userFallback: '削除済みユーザー (ID: {0})', requestModel: 'リクエストモデル', upstreamModel: '上流モデル', + upstreamDuration: 'アップストリーム時間', requestModelPlaceholder: '例: qwen2.5-coder', upstreamModelPlaceholder: '例: Qwen/Qwen2.5-Coder-32B-Instruct', addMapping: 'マッピングを追加', diff --git a/frontend/src/lang/modules/ko.ts b/frontend/src/lang/modules/ko.ts index 9c11ecd6134f..4644b43ffeec 100644 --- a/frontend/src/lang/modules/ko.ts +++ b/frontend/src/lang/modules/ko.ts @@ -992,6 +992,17 @@ const message = { unlimited: '무제한', unlimitedWithAuto: '무제한, auto 포함', lastUsedAt: '최근 사용 시간', + validityPeriod: '유효 기간', + keepCurrentValidity: '현재 유효 기간 유지', + neverExpires: '만료 없음', + validForDays: '{0}일 동안 유효', + customDays: '사용자 지정 일수', + enterValidityDays: '유효 일수를 입력하세요', + currentExpiresAt: '현재 만료 시간: {0}', + currentNeverExpires: '현재 만료되지 않음', + expiresAt: '만료 시간', + expired: '만료됨', + reactivate: '다시 활성화', settingTitle: 'AI 게이트웨이 설정', basicSetting: '기본 설정', performanceSetting: '성능 설정', @@ -1000,6 +1011,8 @@ const message = { protocolConversion: '프로토콜 변환', protocolConversionDesc: 'Chat Completions, Responses 및 Anthropic Messages 간에 지원되는 직접 변환을 허용합니다. 네이티브 프로토콜이 항상 우선합니다.', + protocolConversionRisk: + '프로토콜 변환은 무손실을 보장하지 않습니다. 프로토콜 전용 필드, 도구 호출, 추론 또는 멀티모달 콘텐츠가 축소되거나 손실될 수 있으므로 위험을 고려한 후 사용하세요.', lbPolicyRoundRobin: '라운드 로빈', lbPolicyRoundRobinDesc: '사용 가능한 모델 계정을 순서대로 선택합니다. 백엔드 성능이 비슷한 경우에 적합합니다.', @@ -1053,6 +1066,7 @@ const message = { userFallback: '삭제된 사용자 (ID: {0})', requestModel: '요청 모델', upstreamModel: '업스트림 모델', + upstreamDuration: '업스트림 시간', requestModelPlaceholder: '예: qwen2.5-coder', upstreamModelPlaceholder: '예: Qwen/Qwen2.5-Coder-32B-Instruct', addMapping: '매핑 추가', diff --git a/frontend/src/lang/modules/lo.ts b/frontend/src/lang/modules/lo.ts index c2bfdb68909f..1d31962a4c0a 100644 --- a/frontend/src/lang/modules/lo.ts +++ b/frontend/src/lang/modules/lo.ts @@ -1002,6 +1002,17 @@ const message = { unlimitedWithAuto: 'ບໍ່ຈຳກັດ, ລວມ auto', apiKeyCount: 'API Keys', lastUsedAt: 'ໃຊ້ງານລ່າສຸດ', + validityPeriod: 'ໄລຍະເວລາໃຊ້ງານ', + keepCurrentValidity: 'ຮັກສາໄລຍະເວລາປັດຈຸບັນ', + neverExpires: 'ບໍ່ມີວັນໝົດອາຍຸ', + validForDays: 'ໃຊ້ໄດ້ {0} ມື້', + customDays: 'ກຳນົດຈຳນວນມື້', + enterValidityDays: 'ກະລຸນາປ້ອນຈຳນວນມື້', + currentExpiresAt: 'ເວລາໝົດອາຍຸປັດຈຸບັນ: {0}', + currentNeverExpires: 'ປັດຈຸບັນບໍ່ມີວັນໝົດອາຍຸ', + expiresAt: 'ເວລາໝົດອາຍຸ', + expired: 'ໝົດອາຍຸແລ້ວ', + reactivate: 'ເປີດໃຊ້ຄືນໃໝ່', settingTitle: 'ຕັ້ງຄ່າ AI Gateway', basicSetting: 'ຕັ້ງຄ່າພື້ນຖານ', performanceSetting: 'ຕັ້ງຄ່າປະສິດທິພາບ', @@ -1010,6 +1021,8 @@ const message = { protocolConversion: 'ການປ່ຽນໂປຣໂຕຄອນ', protocolConversionDesc: 'ອະນຸຍາດການປ່ຽນໂດຍກົງທີ່ຮອງຮັບລະຫວ່າງ Chat Completions, Responses ແລະ Anthropic Messages. ໂປຣໂຕຄອນເດີມຈະຖືກໃຫ້ສິດກ່ອນສະເໝີ.', + protocolConversionRisk: + 'ການປ່ຽນໂປຣໂຕຄອນບໍ່ຮັບປະກັນວ່າຈະບໍ່ສູນເສຍຂໍ້ມູນ. ຟິວສະເພາະ, ການເອີ້ນໃຊ້ເຄື່ອງມື, ການໃຫ້ເຫດຜົນ ຫຼືເນື້ອຫາຫຼາຍຮູບແບບອາດຖືກຫຼຸດຄຸນນະພາບ ຫຼືສູນເສຍ. ກະລຸນາພິຈາລະນາຄວາມສ່ຽງກ່ອນນຳໃຊ້.', lbPolicyRoundRobin: 'Round Robin', lbPolicyRoundRobinDesc: 'ເລືອກບັນຊີໂມເດວຕາມລຳດັບ. ໃຊ້ເມື່ອລະບົບຫຼັງບ້ານມີຄວາມສາມາດໃກ້ຄຽງກັນ.', lbPolicyWeightedRoundRobin: 'Weighted Round Robin', @@ -1062,6 +1075,7 @@ const message = { userFallback: 'ຜູ້ໃຊ້ທີ່ຖືກລຶບ (ID: {0})', requestModel: 'ໂມເດວທີ່ຮ້ອງຂໍ', upstreamModel: 'ໂມເດວຕົ້ນທາງ (Upstream)', + upstreamDuration: 'ເວລາຕົ້ນທາງ', requestModelPlaceholder: 'ຕົວຢ່າງ: qwen2.5-coder', upstreamModelPlaceholder: 'ຕົວຢ່າງ: Qwen/Qwen2.5-Coder-32B-Instruct', addMapping: 'ເພີ່ມການຈັບຄູ່', diff --git a/frontend/src/lang/modules/ms.ts b/frontend/src/lang/modules/ms.ts index 0886c2ed839d..afafed14846f 100644 --- a/frontend/src/lang/modules/ms.ts +++ b/frontend/src/lang/modules/ms.ts @@ -1018,6 +1018,17 @@ const message = { unlimited: 'Tanpa had', unlimitedWithAuto: 'Tanpa had, termasuk auto', lastUsedAt: 'Terakhir digunakan', + validityPeriod: 'Tempoh sah', + keepCurrentValidity: 'Kekalkan tempoh sah semasa', + neverExpires: 'Tidak luput', + validForDays: 'Sah selama {0} hari', + customDays: 'Hari tersuai', + enterValidityDays: 'Masukkan tempoh sah dalam hari', + currentExpiresAt: 'Tarikh luput semasa: {0}', + currentNeverExpires: 'Pada masa ini tidak luput', + expiresAt: 'Tarikh luput', + expired: 'Telah luput', + reactivate: 'Aktifkan semula', settingTitle: 'Tetapan gateway AI', basicSetting: 'Tetapan Asas', performanceSetting: 'Tetapan Prestasi', @@ -1026,6 +1037,8 @@ const message = { protocolConversion: 'Penukaran protokol', protocolConversionDesc: 'Benarkan penukaran terus yang disokong antara Chat Completions, Responses dan Anthropic Messages. Protokol asli sentiasa diutamakan.', + protocolConversionRisk: + 'Penukaran protokol tidak menjamin tanpa kehilangan. Medan khusus protokol, panggilan alat, penaakulan atau kandungan multimodal mungkin diturunkan atau hilang. Gunakan selepas mempertimbangkan risikonya.', lbPolicyRoundRobin: 'Round Robin', lbPolicyRoundRobinDesc: 'Pilih akaun model tersedia mengikut turutan. Sesuai apabila kapasiti backend hampir sama.', @@ -1079,6 +1092,7 @@ const message = { userFallback: 'Pengguna dipadam (ID: {0})', requestModel: 'Model permintaan', upstreamModel: 'Model upstream', + upstreamDuration: 'Masa upstream', requestModelPlaceholder: 'cth. qwen2.5-coder', upstreamModelPlaceholder: 'cth. Qwen/Qwen2.5-Coder-32B-Instruct', addMapping: 'Tambah pemetaan', diff --git a/frontend/src/lang/modules/pt-br.ts b/frontend/src/lang/modules/pt-br.ts index 05c547dd19e4..36113a188d7b 100644 --- a/frontend/src/lang/modules/pt-br.ts +++ b/frontend/src/lang/modules/pt-br.ts @@ -1014,6 +1014,17 @@ const message = { unlimited: 'Ilimitado', unlimitedWithAuto: 'Ilimitado, inclui auto', lastUsedAt: 'Último uso', + validityPeriod: 'Período de validade', + keepCurrentValidity: 'Manter validade atual', + neverExpires: 'Nunca expira', + validForDays: 'Válido por {0} dias', + customDays: 'Dias personalizados', + enterValidityDays: 'Informe o período de validade em dias', + currentExpiresAt: 'Expiração atual: {0}', + currentNeverExpires: 'Atualmente não expira', + expiresAt: 'Data de expiração', + expired: 'Expirado', + reactivate: 'Reativar', settingTitle: 'Configurações do gateway de IA', basicSetting: 'Configurações básicas', performanceSetting: 'Configurações de desempenho', @@ -1022,6 +1033,8 @@ const message = { protocolConversion: 'Conversão de protocolo', protocolConversionDesc: 'Permite conversão direta compatível entre Chat Completions, Responses e Anthropic Messages. Protocolos nativos sempre têm prioridade.', + protocolConversionRisk: + 'A conversão de protocolo não é sem perdas. Campos específicos, chamadas de ferramentas, raciocínio ou conteúdo multimodal podem ser degradados ou perdidos. Use após avaliar os riscos.', lbPolicyRoundRobin: 'Round Robin', lbPolicyRoundRobinDesc: 'Seleciona contas de modelo disponíveis em ordem. Use quando os backends tiverem capacidade semelhante.', @@ -1075,6 +1088,7 @@ const message = { userFallback: 'Usuário excluído (ID: {0})', requestModel: 'Modelo solicitado', upstreamModel: 'Modelo upstream', + upstreamDuration: 'Tempo do upstream', requestModelPlaceholder: 'ex.: qwen2.5-coder', upstreamModelPlaceholder: 'ex.: Qwen/Qwen2.5-Coder-32B-Instruct', addMapping: 'Adicionar mapeamento', diff --git a/frontend/src/lang/modules/ru.ts b/frontend/src/lang/modules/ru.ts index 6d7360b42d2d..941be3926731 100644 --- a/frontend/src/lang/modules/ru.ts +++ b/frontend/src/lang/modules/ru.ts @@ -1007,6 +1007,17 @@ const message = { unlimited: 'Без ограничений', unlimitedWithAuto: 'Без ограничений, включая auto', lastUsedAt: 'Последнее использование', + validityPeriod: 'Срок действия', + keepCurrentValidity: 'Сохранить текущий срок', + neverExpires: 'Без срока действия', + validForDays: 'Действителен {0} дней', + customDays: 'Указать дни', + enterValidityDays: 'Введите срок действия в днях', + currentExpiresAt: 'Текущий срок действия: {0}', + currentNeverExpires: 'Срок действия не ограничен', + expiresAt: 'Истекает', + expired: 'Истёк', + reactivate: 'Повторно активировать', settingTitle: 'Настройки AI-шлюза', basicSetting: 'Основные настройки', performanceSetting: 'Настройки производительности', @@ -1015,6 +1026,8 @@ const message = { protocolConversion: 'Преобразование протокола', protocolConversionDesc: 'Разрешает поддерживаемое прямое преобразование между Chat Completions, Responses и Anthropic Messages. Нативный протокол всегда имеет приоритет.', + protocolConversionRisk: + 'Преобразование протоколов не гарантирует отсутствие потерь. Специфичные поля, вызовы инструментов, рассуждения или мультимодальные данные могут быть упрощены или потеряны. Используйте после оценки рисков.', lbPolicyRoundRobin: 'Round Robin', lbPolicyRoundRobinDesc: 'Выбирает доступные аккаунты моделей по очереди. Подходит, когда бэкенды имеют схожую производительность.', @@ -1068,6 +1081,7 @@ const message = { userFallback: 'Удаленный пользователь (ID: {0})', requestModel: 'Запрошенная модель', upstreamModel: 'Upstream-модель', + upstreamDuration: 'Время upstream', requestModelPlaceholder: 'например: qwen2.5-coder', upstreamModelPlaceholder: 'например: Qwen/Qwen2.5-Coder-32B-Instruct', addMapping: 'Добавить сопоставление', diff --git a/frontend/src/lang/modules/tr.ts b/frontend/src/lang/modules/tr.ts index eee8d3faebef..a1ef711f63c1 100644 --- a/frontend/src/lang/modules/tr.ts +++ b/frontend/src/lang/modules/tr.ts @@ -1017,6 +1017,17 @@ const message = { unlimited: 'Sınırsız', unlimitedWithAuto: 'Sınırsız, auto dahil', lastUsedAt: 'Son kullanım', + validityPeriod: 'Geçerlilik süresi', + keepCurrentValidity: 'Mevcut süreyi koru', + neverExpires: 'Süresiz', + validForDays: '{0} gün geçerli', + customDays: 'Özel gün sayısı', + enterValidityDays: 'Geçerlilik süresini gün olarak girin', + currentExpiresAt: 'Mevcut sona erme: {0}', + currentNeverExpires: 'Şu anda süresiz', + expiresAt: 'Sona erme zamanı', + expired: 'Süresi doldu', + reactivate: 'Yeniden etkinleştir', settingTitle: 'AI Ağ Geçidi ayarları', basicSetting: 'Temel Ayarlar', performanceSetting: 'Performans Ayarları', @@ -1025,6 +1036,8 @@ const message = { protocolConversion: 'Protokol dönüştürme', protocolConversionDesc: 'Chat Completions, Responses ve Anthropic Messages arasında desteklenen doğrudan dönüşüme izin verir. Yerel protokol her zaman önceliklidir.', + protocolConversionRisk: + 'Protokol dönüşümü kayıpsız değildir. Protokole özgü alanlar, araç çağrıları, akıl yürütme veya çok modlu içerik azaltılabilir ya da kaybolabilir. Riskleri değerlendirdikten sonra kullanın.', lbPolicyRoundRobin: 'Round Robin', lbPolicyRoundRobinDesc: 'Kullanılabilir model hesaplarını sırayla seçer. Backend kapasiteleri benzer olduğunda kullanın.', @@ -1078,6 +1091,7 @@ const message = { userFallback: 'Silinen kullanıcı (ID: {0})', requestModel: 'İstek modeli', upstreamModel: 'Upstream model', + upstreamDuration: 'Upstream süresi', requestModelPlaceholder: 'örn. qwen2.5-coder', upstreamModelPlaceholder: 'örn. Qwen/Qwen2.5-Coder-32B-Instruct', addMapping: 'Eşleme ekle', diff --git a/frontend/src/lang/modules/zh-Hant.ts b/frontend/src/lang/modules/zh-Hant.ts index c42be2ae40a9..ad8b21ffa830 100644 --- a/frontend/src/lang/modules/zh-Hant.ts +++ b/frontend/src/lang/modules/zh-Hant.ts @@ -953,6 +953,17 @@ const message = { unlimited: '不限', unlimitedWithAuto: '不限,包含 auto', lastUsedAt: '最近使用時間', + validityPeriod: '有效期', + keepCurrentValidity: '保留目前有效期', + neverExpires: '永不過期', + validForDays: '有效 {0} 天', + customDays: '自訂天數', + enterValidityDays: '請輸入有效天數', + currentExpiresAt: '目前到期時間:{0}', + currentNeverExpires: '目前為永不過期', + expiresAt: '到期時間', + expired: '已過期', + reactivate: '重新啟用', settingTitle: 'AI 閘道設定', basicSetting: '基礎設定', performanceSetting: '效能設定', @@ -961,6 +972,8 @@ const message = { protocolConversion: '協議轉換', protocolConversionDesc: '啟用後,文字請求可在 Chat Completions、Responses 和 Anthropic Messages 的支援協議間直接轉換,原生協議始終優先。', + protocolConversionRisk: + '協議轉換無法保證無損,協議專屬欄位、工具呼叫、思考內容或多模態內容可能被降級或遺失,請權衡後使用。', lbPolicyRoundRobin: '輪詢', lbPolicyRoundRobinDesc: '按順序依次選擇可用模型帳號,適合後端能力接近的場景。', lbPolicyWeightedRoundRobin: '加權輪詢', @@ -1010,6 +1023,7 @@ const message = { userFallback: '已刪除使用者 (ID: {0})', requestModel: '請求模型', upstreamModel: '上游模型', + upstreamDuration: '上游耗時', requestModelPlaceholder: '如 qwen2.5-coder', upstreamModelPlaceholder: '如 Qwen/Qwen2.5-Coder-32B-Instruct', addMapping: '新增映射', diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index c04851517a34..7801edbc7812 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -950,6 +950,17 @@ const message = { unlimitedWithAuto: '不限,包含 auto', apiKeyCount: 'API Key 数', lastUsedAt: '最近使用时间', + validityPeriod: '有效期', + keepCurrentValidity: '保持当前有效期', + neverExpires: '永不过期', + validForDays: '有效 {0} 天', + customDays: '自定义天数', + enterValidityDays: '请输入有效天数', + currentExpiresAt: '当前到期时间:{0}', + currentNeverExpires: '当前为永不过期', + expiresAt: '到期时间', + expired: '已过期', + reactivate: '重新激活', settingTitle: 'AI 网关设置', basicSetting: '基础设置', performanceSetting: '性能设置', @@ -958,6 +969,8 @@ const message = { protocolConversion: '协议转换', protocolConversionDesc: '开启后,文本请求可在 Chat Completions、Responses 和 Anthropic Messages 的受支持协议间直接转换,原生协议始终优先。', + protocolConversionRisk: + '协议转换无法保证无损,协议专属字段、工具调用、思考内容或多模态内容可能被降级或丢失,请权衡之后使用。', lbPolicyRoundRobin: '轮询', lbPolicyRoundRobinDesc: '按顺序依次选择可用模型账号,适合后端能力接近的场景。', lbPolicyWeightedRoundRobin: '加权轮询', @@ -1007,6 +1020,7 @@ const message = { userFallback: '已删除用户 (ID: {0})', requestModel: '请求模型', upstreamModel: '上游模型', + upstreamDuration: '上游耗时', requestModelPlaceholder: '如 qwen2.5-coder', upstreamModelPlaceholder: '如 Qwen/Qwen2.5-Coder-32B-Instruct', addMapping: '添加映射', diff --git a/frontend/src/utils/monaco.ts b/frontend/src/utils/monaco.ts index c05c3e82cde3..92c4da056804 100644 --- a/frontend/src/utils/monaco.ts +++ b/frontend/src/utils/monaco.ts @@ -1,16 +1,20 @@ -import jsonWorker from 'monaco-editor/esm/vs/language/json/json.worker?worker'; -import cssWorker from 'monaco-editor/esm/vs/language/css/css.worker?worker'; -import htmlWorker from 'monaco-editor/esm/vs/language/html/html.worker?worker'; -import tsWorker from 'monaco-editor/esm/vs/language/typescript/ts.worker?worker'; -import EditorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker'; +import type { languages } from 'monaco-editor/editor'; +import jsonWorker from 'monaco-editor/languages/features/json/json.worker?worker'; +import cssWorker from 'monaco-editor/languages/features/css/css.worker?worker'; +import htmlWorker from 'monaco-editor/languages/features/html/html.worker?worker'; +import tsWorker from 'monaco-editor/languages/features/typescript/ts.worker?worker'; +import EditorWorker from 'monaco-editor/editor/editor.worker?worker'; let initialized = false; let languageSupportPromise: Promise | null = null; -type MonacoEditorApi = typeof import('monaco-editor/esm/vs/editor/editor.api'); -type PythonLanguageModule = typeof import('monaco-editor/esm/vs/basic-languages/python/python.js'); +type MonacoEditorApi = typeof import('monaco-editor/editor'); +type PythonLanguageModule = { + conf: languages.LanguageConfiguration; + language: languages.IMonarchLanguage; +}; -export const buildPatchedPythonLanguage = (language: PythonLanguageModule['language']) => ({ +export const buildPatchedPythonLanguage = (language: PythonLanguageModule['language']): languages.IMonarchLanguage => ({ ...language, tokenizer: { ...language.tokenizer, @@ -40,8 +44,8 @@ export const buildPatchedPythonLanguage = (language: PythonLanguageModule['langu const patchPythonLanguageSupport = async () => { const [monaco, python] = await Promise.all([ - import('monaco-editor/esm/vs/editor/editor.api'), - import('monaco-editor/esm/vs/basic-languages/python/python.js'), + import('monaco-editor/editor'), + import('monaco-editor/languages/definitions/python/python.js'), ]); const monacoApi = monaco as MonacoEditorApi; const pythonModule = python as PythonLanguageModule; @@ -88,20 +92,20 @@ export function setupMonacoEnvironment() { export async function loadMonacoLanguageSupport() { if (!languageSupportPromise) { languageSupportPromise = Promise.all([ - import('monaco-editor/esm/vs/base/browser/ui/codicons/codiconStyles.js'), - import('monaco-editor/esm/vs/editor/contrib/folding/browser/folding.js'), - import('monaco-editor/esm/vs/editor/contrib/contextmenu/browser/contextmenu.js'), - import('monaco-editor/esm/vs/editor/contrib/clipboard/browser/clipboard.js'), - import('monaco-editor/esm/vs/editor/contrib/comment/browser/comment.js'), - import('monaco-editor/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution.js'), - import('monaco-editor/esm/vs/editor/contrib/find/browser/findController.js'), - import('monaco-editor/esm/vs/editor/contrib/multicursor/browser/multicursor.js'), - import('monaco-editor/esm/vs/editor/standalone/browser/quickAccess/standaloneCommandsQuickAccess.js'), - import('monaco-editor/esm/vs/basic-languages/monaco.contribution'), - import('monaco-editor/esm/vs/language/json/monaco.contribution'), - import('monaco-editor/esm/vs/language/css/monaco.contribution'), - import('monaco-editor/esm/vs/language/html/monaco.contribution'), - import('monaco-editor/esm/vs/language/typescript/monaco.contribution'), + import('monaco-editor/features/codicon/register'), + import('monaco-editor/features/folding/register'), + import('monaco-editor/features/contextmenu/register'), + import('monaco-editor/features/clipboard/register'), + import('monaco-editor/features/comment/register'), + import('monaco-editor/features/dropOrPasteInto/register'), + import('monaco-editor/features/find/register'), + import('monaco-editor/features/multicursor/register'), + import('monaco-editor/features/quickCommand/register'), + import('monaco-editor/languages/definitions/register.all'), + import('monaco-editor/languages/features/json/register'), + import('monaco-editor/languages/features/css/register'), + import('monaco-editor/languages/features/html/register'), + import('monaco-editor/languages/features/typescript/register'), ]) .then(() => patchPythonLanguageSupportSafely()) .then(() => undefined); diff --git a/frontend/src/views/app-store/installed/upgrade/diff/index.vue b/frontend/src/views/app-store/installed/upgrade/diff/index.vue index d126429e9421..ca3382fedb1b 100644 --- a/frontend/src/views/app-store/installed/upgrade/diff/index.vue +++ b/frontend/src/views/app-store/installed/upgrade/diff/index.vue @@ -22,7 +22,7 @@ import { nextTick, ref } from 'vue'; import { loadMonacoLanguageSupport, setupMonacoEnvironment } from '@/utils/monaco'; -type MonacoEditorApi = typeof import('monaco-editor/esm/vs/editor/editor.api'); +type MonacoEditorApi = typeof import('monaco-editor/editor'); const open = ref(false); const newContent = ref(''); @@ -30,9 +30,9 @@ const oldContent = ref(''); const em = defineEmits(['confirm']); let monaco: MonacoEditorApi | null = null; -let originalModel: MonacoEditorApi['editor']['ITextModel'] | null = null; -let modifiedModel: MonacoEditorApi['editor']['ITextModel'] | null = null; -let editor: MonacoEditorApi['editor']['IStandaloneDiffEditor'] | null = null; +let originalModel: ReturnType | null = null; +let modifiedModel: ReturnType | null = null; +let editor: ReturnType | null = null; const container = ref(); @@ -41,10 +41,7 @@ const ensureMonaco = async () => { return monaco; } setupMonacoEnvironment(); - const [monacoModule] = await Promise.all([ - import('monaco-editor/esm/vs/editor/editor.api'), - loadMonacoLanguageSupport(), - ]); + const [monacoModule] = await Promise.all([import('monaco-editor/editor'), loadMonacoLanguageSupport()]); monaco = monacoModule; return monaco; }; diff --git a/frontend/src/views/host/file-management/code-editor/history/index.vue b/frontend/src/views/host/file-management/code-editor/history/index.vue index f38da1d47e79..7b32b7e026b8 100644 --- a/frontend/src/views/host/file-management/code-editor/history/index.vue +++ b/frontend/src/views/host/file-management/code-editor/history/index.vue @@ -237,7 +237,7 @@ import { Languages } from '@/global/mimetype'; import i18n from '@/lang'; import ComplexTable from '@/components/table/complex/ComplexTable.vue'; -type MonacoEditorApi = typeof import('monaco-editor/esm/vs/editor/editor.api'); +type MonacoEditorApi = typeof import('monaco-editor/editor'); interface HistoryDrawerProps { path: string; @@ -414,10 +414,7 @@ const ensureMonaco = async () => { return monacoApi; } setupMonacoEnvironment(); - const [monacoModule] = await Promise.all([ - import('monaco-editor/esm/vs/editor/editor.api'), - loadMonacoLanguageSupport(), - ]); + const [monacoModule] = await Promise.all([import('monaco-editor/editor'), loadMonacoLanguageSupport()]); monacoApi = monacoModule; return monacoApi; }; diff --git a/frontend/src/views/host/file-management/code-editor/index.vue b/frontend/src/views/host/file-management/code-editor/index.vue index 1971908bed59..35e2797b5b94 100644 --- a/frontend/src/views/host/file-management/code-editor/index.vue +++ b/frontend/src/views/host/file-management/code-editor/index.vue @@ -481,7 +481,7 @@ import { const { isDarkTheme, isMobile } = useGlobalStore(); -type MonacoEditorApi = typeof import('monaco-editor/esm/vs/editor/editor.api'); +type MonacoEditorApi = typeof import('monaco-editor/editor'); let monacoApi: MonacoEditorApi | null = null; let monacoThemeInitialized = false; @@ -496,10 +496,7 @@ const ensureMonaco = async () => { } setupMonacoEnvironment(); - const [monacoModule] = await Promise.all([ - import('monaco-editor/esm/vs/editor/editor.api'), - loadMonacoLanguageSupport(), - ]); + const [monacoModule] = await Promise.all([import('monaco-editor/editor'), loadMonacoLanguageSupport()]); monacoApi = monacoModule; eolLf.value = monacoApi.editor.EndOfLineSequence.LF; eolCrlf.value = monacoApi.editor.EndOfLineSequence.CRLF; diff --git a/frontend/src/views/website/template/index.vue b/frontend/src/views/website/template/index.vue index 932cbd4fe67b..76bac5066404 100644 --- a/frontend/src/views/website/template/index.vue +++ b/frontend/src/views/website/template/index.vue @@ -1,5 +1,6 @@