Browse Source

refactor: user curd

Jacky 4 months ago
parent
commit
465eae9858

+ 0 - 9
api/user/router.go

@@ -17,15 +17,6 @@ func InitAuthRouter(r *gin.RouterGroup) {
 	r.GET("/passkeys/config", GetPasskeyConfigStatus)
 	r.GET("/passkeys/config", GetPasskeyConfigStatus)
 }
 }
 
 
-func InitManageUserRouter(r *gin.RouterGroup) {
-	r.GET("users", GetUsers)
-	r.GET("users/:id", GetUser)
-	r.POST("users", AddUser)
-	r.POST("users/:id", EditUser)
-	r.DELETE("users/:id", DeleteUser)
-	r.PATCH("users/:id", RecoverUser)
-}
-
 func InitUserRouter(r *gin.RouterGroup) {
 func InitUserRouter(r *gin.RouterGroup) {
 	r.GET("/2fa_status", Get2FAStatus)
 	r.GET("/2fa_status", Get2FAStatus)
 	r.GET("/2fa_secure_session/status", SecureSessionStatus)
 	r.GET("/2fa_secure_session/status", SecureSessionStatus)

+ 32 - 119
api/user/user.go

@@ -1,140 +1,53 @@
 package user
 package user
 
 
 import (
 import (
-	"github.com/0xJacky/Nginx-UI/api"
+	"github.com/0xJacky/Nginx-UI/internal/user"
 	"github.com/0xJacky/Nginx-UI/model"
 	"github.com/0xJacky/Nginx-UI/model"
-	"github.com/0xJacky/Nginx-UI/query"
-	"github.com/0xJacky/Nginx-UI/settings"
 	"github.com/gin-gonic/gin"
 	"github.com/gin-gonic/gin"
-	"github.com/spf13/cast"
 	"github.com/uozi-tech/cosy"
 	"github.com/uozi-tech/cosy"
 	"golang.org/x/crypto/bcrypt"
 	"golang.org/x/crypto/bcrypt"
-	"net/http"
 )
 )
 
 
-func GetUsers(c *gin.Context) {
-	cosy.Core[model.User](c).SetFussy("name").PagingList()
-}
-
-func GetUser(c *gin.Context) {
-	id := cast.ToUint64(c.Param("id"))
-
-	u := query.User
-
-	user, err := u.FirstByID(id)
-
-	if err != nil {
-		api.ErrHandler(c, err)
-		return
-	}
-
-	c.JSON(http.StatusOK, user)
-}
-
-type UserJson struct {
-	Name     string `json:"name" binding:"required,max=255"`
-	Password string `json:"password" binding:"max=255"`
-}
-
-func AddUser(c *gin.Context) {
-	var json UserJson
-	ok := cosy.BindAndValid(c, &json)
-	if !ok {
-		return
-	}
-
-	u := query.User
-
-	pwd, err := bcrypt.GenerateFromPassword([]byte(json.Password), bcrypt.DefaultCost)
-	if err != nil {
-		api.ErrHandler(c, err)
+func encryptPassword(ctx *cosy.Ctx[model.User]) {
+	if ctx.Payload["password"] == nil {
 		return
 		return
 	}
 	}
-	json.Password = string(pwd)
-
-	user := model.User{
-		Name:     json.Name,
-		Password: json.Password,
-	}
-
-	// duplicate name
-	_, err = u.Where(u.Name.Eq(json.Name)).First()
-	if !(err != nil && err.Error() == "record not found") {
-		c.JSON(http.StatusConflict, gin.H{
-			"message": "name already exists",
-		})
-	}
-
-	err = u.Create(&user)
-
-	if err != nil {
-		api.ErrHandler(c, err)
-		return
-	}
-
-	c.JSON(http.StatusOK, user)
-
-}
-
-func EditUser(c *gin.Context) {
-	userId := cast.ToUint64(c.Param("id"))
-
-	if settings.NodeSettings.Demo && userId == 1 {
-		c.JSON(http.StatusNotAcceptable, gin.H{
-			"message": "Changing user password is forbidden in demo mode",
-		})
-		return
-	}
-
-	var json UserJson
-	ok := cosy.BindAndValid(c, &json)
-	if !ok {
-		return
-	}
-
-	u := query.User
-	user, err := u.FirstByID(userId)
-
-	if err != nil {
-		api.ErrHandler(c, err)
-		return
-	}
-	edit := &model.User{
-		Name: json.Name,
-	}
-
-	// encrypt password
-	if json.Password != "" {
-		var pwd []byte
-		pwd, err = bcrypt.GenerateFromPassword([]byte(json.Password), bcrypt.DefaultCost)
+	pwd := ctx.Payload["password"].(string)
+	if pwd != "" {
+		pwdBytes, err := bcrypt.GenerateFromPassword([]byte(pwd), bcrypt.DefaultCost)
 		if err != nil {
 		if err != nil {
-			api.ErrHandler(c, err)
+			ctx.AbortWithError(err)
 			return
 			return
 		}
 		}
-		edit.Password = string(pwd)
+		ctx.Model.Password = string(pwdBytes)
+	} else {
+		delete(ctx.Payload, "password")
 	}
 	}
+}
 
 
-	_, err = u.Where(u.ID.Eq(userId)).Updates(&edit)
-
-	if err != nil {
-		api.ErrHandler(c, err)
-		return
-	}
+func InitManageUserRouter(g *gin.RouterGroup) {
+	c := cosy.Api[model.User]("users")
 
 
-	c.JSON(http.StatusOK, user)
-}
+	c.CreateHook(func(c *cosy.Ctx[model.User]) {
+		c.BeforeDecodeHook(encryptPassword)
+	})
 
 
-func DeleteUser(c *gin.Context) {
-	id := cast.ToInt(c.Param("id"))
-	if cast.ToInt(id) == 1 {
-		c.JSON(http.StatusNotAcceptable, gin.H{
-			"message": "Prohibit deleting the default user",
+	c.ModifyHook(func(c *cosy.Ctx[model.User]) {
+		c.BeforeDecodeHook(func(ctx *cosy.Ctx[model.User]) {
+			if ctx.ID == 1 {
+				ctx.AbortWithError(user.ErrChangeInitUserPwdInDemo)
+			}
 		})
 		})
-		return
-	}
-	cosy.Core[model.User](c).Destroy()
-}
+		c.BeforeDecodeHook(encryptPassword)
+	})
+
+	c.DestroyHook(func(c *cosy.Ctx[model.User]) {
+		c.BeforeExecuteHook(func(ctx *cosy.Ctx[model.User]) {
+			if ctx.ID == 1 {
+				ctx.AbortWithError(user.ErrCannotRemoveInitUser)
+			}
+		})
+	})
 
 
-func RecoverUser(c *gin.Context) {
-	cosy.Core[model.User](c).Recover()
+	c.InitRouter(g)
 }
 }

+ 2 - 0
app/src/constants/errors/user.ts

@@ -6,5 +6,7 @@ export default {
   50000: () => $gettext('WebAuthn settings are not configured'),
   50000: () => $gettext('WebAuthn settings are not configured'),
   50001: () => $gettext('User not enabled otp as 2fa'),
   50001: () => $gettext('User not enabled otp as 2fa'),
   50002: () => $gettext('Otp or recovery code empty'),
   50002: () => $gettext('Otp or recovery code empty'),
+  50003: () => $gettext('Cannot remove initial user'),
+  50004: () => $gettext('Cannot change initial user password in demo mode'),
   40401: () => $gettext('Session not found'),
   40401: () => $gettext('Session not found'),
 }
 }

+ 130 - 123
app/src/language/ar/app.po

@@ -29,7 +29,7 @@ msgstr "عن"
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr "سجلات الدخول"
 msgstr "سجلات الدخول"
 
 
-#: src/routes/index.ts:148 src/views/certificate/ACMEUser.vue:112
+#: src/routes/index.ts:148 src/views/certificate/ACMEUser.vue:113
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
 msgid "ACME User"
 msgid "ACME User"
 msgstr "مستخدم ACME"
 msgstr "مستخدم ACME"
@@ -37,12 +37,12 @@ msgstr "مستخدم ACME"
 #: src/views/certificate/ACMEUser.vue:95
 #: src/views/certificate/ACMEUser.vue:95
 #: src/views/certificate/CertificateList/certColumns.tsx:97
 #: src/views/certificate/CertificateList/certColumns.tsx:97
 #: src/views/certificate/DNSCredential.vue:33
 #: src/views/certificate/DNSCredential.vue:33
-#: src/views/config/configColumns.ts:38
-#: src/views/environment/envColumns.tsx:125
-#: src/views/notification/notificationColumns.tsx:62
+#: src/views/config/configColumns.tsx:42
+#: src/views/environment/envColumns.tsx:97
+#: src/views/notification/notificationColumns.tsx:65
 #: src/views/preference/AuthSettings.vue:26
 #: src/views/preference/AuthSettings.vue:26
-#: src/views/site/site_category/columns.ts:26
-#: src/views/site/site_list/columns.tsx:74 src/views/stream/StreamList.vue:47
+#: src/views/site/site_category/columns.ts:29
+#: src/views/site/site_list/columns.tsx:76 src/views/stream/StreamList.vue:49
 #: src/views/user/userColumns.tsx:60
 #: src/views/user/userColumns.tsx:60
 msgid "Action"
 msgid "Action"
 msgstr "إجراء"
 msgstr "إجراء"
@@ -53,7 +53,7 @@ msgstr "إجراء"
 #: src/views/site/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/site/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/site/ngx_conf/NgxServer.vue:162
 #: src/views/site/ngx_conf/NgxServer.vue:162
 #: src/views/site/ngx_conf/NgxUpstream.vue:154
 #: src/views/site/ngx_conf/NgxUpstream.vue:154
-#: src/views/stream/StreamList.vue:117
+#: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr "إضافة"
 msgstr "إضافة"
 
 
@@ -80,11 +80,11 @@ msgstr "أضف مكان"
 msgid "Add Site"
 msgid "Add Site"
 msgstr "أضف موقع"
 msgstr "أضف موقع"
 
 
-#: src/views/stream/StreamList.vue:176
+#: src/views/stream/StreamList.vue:181
 msgid "Add Stream"
 msgid "Add Stream"
 msgstr "أضف Stream"
 msgstr "أضف Stream"
 
 
-#: src/views/stream/StreamList.vue:109
+#: src/views/stream/StreamList.vue:113
 msgid "Added successfully"
 msgid "Added successfully"
 msgstr "تمت الإضافة بنجاح"
 msgstr "تمت الإضافة بنجاح"
 
 
@@ -154,11 +154,11 @@ msgid "Are you sure you want to apply to all selected?"
 msgstr "هل أنت متأكد أنك تريد الحذف؟"
 msgstr "هل أنت متأكد أنك تريد الحذف؟"
 
 
 #: src/components/Notification/Notification.vue:130
 #: src/components/Notification/Notification.vue:130
-#: src/views/notification/Notification.vue:38
+#: src/views/notification/Notification.vue:39
 msgid "Are you sure you want to clear all notifications?"
 msgid "Are you sure you want to clear all notifications?"
 msgstr "هل أنت متأكد أنك تريد مسح كافة التنبيهات؟"
 msgstr "هل أنت متأكد أنك تريد مسح كافة التنبيهات؟"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:279
+#: src/components/ChatGPT/ChatGPT.vue:376
 msgid "Are you sure you want to clear the record of chat?"
 msgid "Are you sure you want to clear the record of chat?"
 msgstr "هل أنت متأكد أنك تريد مسح سجل المحادثة؟"
 msgstr "هل أنت متأكد أنك تريد مسح سجل المحادثة؟"
 
 
@@ -170,8 +170,8 @@ msgstr "هل أنت متأكد أنك تريد حذف هذا العنصر نها
 msgid "Are you sure you want to delete this item?"
 msgid "Are you sure you want to delete this item?"
 msgstr "هل أنت متأكد أنك تريد حذف هذا العنصر؟"
 msgstr "هل أنت متأكد أنك تريد حذف هذا العنصر؟"
 
 
-#: src/views/site/site_list/SiteList.vue:144
-#: src/views/stream/StreamList.vue:160
+#: src/views/site/site_list/SiteList.vue:145
+#: src/views/stream/StreamList.vue:165
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr "هل أنت متأكد أنك تريد الحذف؟"
 msgstr "هل أنت متأكد أنك تريد الحذف؟"
 
 
@@ -191,11 +191,11 @@ msgstr "هل أنت متأكد أنك تريد إزالة هذا العنصر؟"
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "هل أنت متأكد أنك تريد إزالة هذا المكان؟"
 msgstr "هل أنت متأكد أنك تريد إزالة هذا المكان؟"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:223
+#: src/components/ChatGPT/ChatGPT.vue:318
 msgid "Ask ChatGPT for Help"
 msgid "Ask ChatGPT for Help"
 msgstr "اطلب المساعدة من ChatGPT"
 msgstr "اطلب المساعدة من ChatGPT"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:237
+#: src/components/ChatGPT/ChatGPT.vue:333
 msgid "Assistant"
 msgid "Assistant"
 msgstr "المساعد"
 msgstr "المساعد"
 
 
@@ -239,7 +239,7 @@ msgstr "تم تمكين التجديد التلقائي لـ‏%{name}"
 
 
 #: src/views/certificate/CertificateEditor.vue:255
 #: src/views/certificate/CertificateEditor.vue:255
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:106
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:106
-#: src/views/config/ConfigList.vue:179 src/views/nginx_log/NginxLog.vue:173
+#: src/views/config/ConfigList.vue:180 src/views/nginx_log/NginxLog.vue:173
 #: src/views/site/site_edit/SiteEdit.vue:264
 #: src/views/site/site_edit/SiteEdit.vue:264
 #: src/views/stream/StreamEdit.vue:245
 #: src/views/stream/StreamEdit.vue:245
 msgid "Back"
 msgid "Back"
@@ -291,7 +291,7 @@ msgstr "إجراء"
 msgid "Batch Modify"
 msgid "Batch Modify"
 msgstr "تعديل متعدد"
 msgstr "تعديل متعدد"
 
 
-#: src/views/environment/BatchUpgrader.vue:153
+#: src/views/environment/BatchUpgrader.vue:152
 msgid "Batch Upgrade"
 msgid "Batch Upgrade"
 msgstr "ترقية متعددة"
 msgstr "ترقية متعددة"
 
 
@@ -319,9 +319,9 @@ msgstr "مجلد سلطة التصديق"
 msgid "Can't scan? Use text key binding"
 msgid "Can't scan? Use text key binding"
 msgstr "لا يمكن المسح؟ استخدم ربط مفتاح النص"
 msgstr "لا يمكن المسح؟ استخدم ربط مفتاح النص"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:260
+#: src/components/ChatGPT/ChatGPT.vue:356
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:180
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:187
 #: src/components/StdDesign/StdDetail/StdDetail.vue:101
 #: src/components/StdDesign/StdDetail/StdDetail.vue:101
 #: src/views/preference/components/Passkey.vue:141
 #: src/views/preference/components/Passkey.vue:141
 #: src/views/site/cert/components/ObtainCert.vue:140
 #: src/views/site/cert/components/ObtainCert.vue:140
@@ -334,8 +334,18 @@ msgstr "لا يمكن المسح؟ استخدم ربط مفتاح النص"
 msgid "Cancel"
 msgid "Cancel"
 msgstr "إلغاء"
 msgstr "إلغاء"
 
 
+#: src/constants/errors/user.ts:10
+#, fuzzy
+msgid "Cannot change initial user password in demo mode"
+msgstr "حظر تغيير كلمة مرور root في العرض التوضيحي"
+
+#: src/constants/errors/user.ts:9
+#, fuzzy
+msgid "Cannot remove initial user"
+msgstr "مستخدم النظام الأولي"
+
 #: src/views/site/site_edit/RightSettings.vue:91
 #: src/views/site/site_edit/RightSettings.vue:91
-#: src/views/site/site_list/columns.tsx:23
+#: src/views/site/site_list/columns.tsx:25
 msgid "Category"
 msgid "Category"
 msgstr "فئة"
 msgstr "فئة"
 
 
@@ -404,7 +414,7 @@ msgstr[5] "الشهادات المعدلة"
 msgid "Changed Path"
 msgid "Changed Path"
 msgstr "المسار المتغير"
 msgstr "المسار المتغير"
 
 
-#: src/views/environment/BatchUpgrader.vue:160 src/views/system/Upgrade.vue:188
+#: src/views/environment/BatchUpgrader.vue:159 src/views/system/Upgrade.vue:188
 msgid "Channel"
 msgid "Channel"
 msgstr "قناة"
 msgstr "قناة"
 
 
@@ -440,9 +450,9 @@ msgstr ""
 msgid "Cleaning environment variables"
 msgid "Cleaning environment variables"
 msgstr "تنظيف متغيرات البيئة"
 msgstr "تنظيف متغيرات البيئة"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:283
+#: src/components/ChatGPT/ChatGPT.vue:380
 #: src/components/Notification/Notification.vue:135
 #: src/components/Notification/Notification.vue:135
-#: src/views/notification/Notification.vue:43
+#: src/views/notification/Notification.vue:44
 msgid "Clear"
 msgid "Clear"
 msgstr "مسح"
 msgstr "مسح"
 
 
@@ -533,9 +543,9 @@ msgstr "إنشاء ملف"
 msgid "Create Folder"
 msgid "Create Folder"
 msgstr "إنشاء مجلد"
 msgstr "إنشاء مجلد"
 
 
-#: src/views/notification/notificationColumns.tsx:56
+#: src/views/notification/notificationColumns.tsx:58
 #: src/views/preference/components/Passkey.vue:95
 #: src/views/preference/components/Passkey.vue:95
-#: src/views/site/site_category/columns.ts:14 src/views/user/userColumns.tsx:48
+#: src/views/site/site_category/columns.ts:15 src/views/user/userColumns.tsx:48
 msgid "Created at"
 msgid "Created at"
 msgstr "تم الإنشاء في"
 msgstr "تم الإنشاء في"
 
 
@@ -595,8 +605,8 @@ msgstr "أيام"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/views/site/ngx_conf/NgxServer.vue:110
 #: src/views/site/ngx_conf/NgxServer.vue:110
 #: src/views/site/ngx_conf/NgxUpstream.vue:128
 #: src/views/site/ngx_conf/NgxUpstream.vue:128
-#: src/views/site/site_list/SiteList.vue:153
-#: src/views/stream/StreamList.vue:169
+#: src/views/site/site_list/SiteList.vue:154
+#: src/views/stream/StreamList.vue:174
 msgid "Delete"
 msgid "Delete"
 msgstr "حذف"
 msgstr "حذف"
 
 
@@ -617,7 +627,7 @@ msgstr "نجح حذف الموقع البعيد"
 msgid "Delete site: %{site_name}"
 msgid "Delete site: %{site_name}"
 msgstr "حذف الموقع: ‎%{site_name}"
 msgstr "حذف الموقع: ‎%{site_name}"
 
 
-#: src/views/stream/StreamList.vue:78
+#: src/views/stream/StreamList.vue:82
 msgid "Delete stream: %{stream_name}"
 msgid "Delete stream: %{stream_name}"
 msgstr "حذف البث: ‎%{stream_name}"
 msgstr "حذف البث: ‎%{stream_name}"
 
 
@@ -652,7 +662,7 @@ msgstr "وصف"
 msgid "Destination file already exists"
 msgid "Destination file already exists"
 msgstr ""
 msgstr ""
 
 
-#: src/views/notification/notificationColumns.tsx:51
+#: src/views/notification/notificationColumns.tsx:52
 msgid "Details"
 msgid "Details"
 msgstr "تفاصيل"
 msgstr "تفاصيل"
 
 
@@ -680,12 +690,8 @@ msgstr ""
 msgid "Directives"
 msgid "Directives"
 msgstr "توجيهات"
 msgstr "توجيهات"
 
 
-#: src/views/config/configColumns.ts:22
-msgid "Directory"
-msgstr "مجلد"
-
-#: src/views/site/site_list/SiteList.vue:124
-#: src/views/stream/StreamList.vue:140
+#: src/views/site/site_list/SiteList.vue:125
+#: src/views/stream/StreamList.vue:145
 msgid "Disable"
 msgid "Disable"
 msgstr "تعطيل"
 msgstr "تعطيل"
 
 
@@ -709,19 +715,19 @@ msgstr "حدث خطأ في تعطيل الموقع %{site} على %{node}، ال
 msgid "Disable Site %{site} on %{node} successfully"
 msgid "Disable Site %{site} on %{node} successfully"
 msgstr "تم تعطيل الموقع %{site} على %{node} بنجاح"
 msgstr "تم تعطيل الموقع %{site} على %{node} بنجاح"
 
 
-#: src/views/environment/envColumns.tsx:109
-#: src/views/environment/envColumns.tsx:92
+#: src/views/environment/envColumns.tsx:61
+#: src/views/environment/envColumns.tsx:79
 #: src/views/site/site_edit/SiteEdit.vue:190
 #: src/views/site/site_edit/SiteEdit.vue:190
-#: src/views/site/site_list/columns.tsx:51
-#: src/views/site/site_list/columns.tsx:60 src/views/stream/StreamEdit.vue:175
-#: src/views/stream/StreamList.vue:33 src/views/user/userColumns.tsx:41
+#: src/views/site/site_list/columns.tsx:53
+#: src/views/site/site_list/columns.tsx:62 src/views/stream/StreamEdit.vue:175
+#: src/views/stream/StreamList.vue:34 src/views/user/userColumns.tsx:41
 msgid "Disabled"
 msgid "Disabled"
 msgstr "معطل"
 msgstr "معطل"
 
 
 #: src/views/site/site_edit/RightSettings.vue:42
 #: src/views/site/site_edit/RightSettings.vue:42
 #: src/views/site/site_list/SiteList.vue:56
 #: src/views/site/site_list/SiteList.vue:56
 #: src/views/stream/components/RightSettings.vue:38
 #: src/views/stream/components/RightSettings.vue:38
-#: src/views/stream/StreamList.vue:67
+#: src/views/stream/StreamList.vue:71
 msgid "Disabled successfully"
 msgid "Disabled successfully"
 msgstr "تم التعطيل بنجاح"
 msgstr "تم التعطيل بنجاح"
 
 
@@ -820,7 +826,7 @@ msgstr "خطأ في تنزيل الإصدار الأخير"
 msgid "Downloading latest release"
 msgid "Downloading latest release"
 msgstr "تنزيل الإصدار الأحدث"
 msgstr "تنزيل الإصدار الأحدث"
 
 
-#: src/views/environment/BatchUpgrader.vue:189 src/views/system/Upgrade.vue:215
+#: src/views/environment/BatchUpgrader.vue:188 src/views/system/Upgrade.vue:215
 msgid "Dry run mode enabled"
 msgid "Dry run mode enabled"
 msgstr "تمكين وضع التشغيل التجريبي"
 msgstr "تمكين وضع التشغيل التجريبي"
 
 
@@ -833,9 +839,9 @@ msgstr ""
 "الويب غير HTTPS، إلا عند التشغيل على localhost."
 "الويب غير HTTPS، إلا عند التشغيل على localhost."
 
 
 #: src/views/site/site_list/SiteDuplicate.vue:72
 #: src/views/site/site_list/SiteDuplicate.vue:72
-#: src/views/site/site_list/SiteList.vue:139
+#: src/views/site/site_list/SiteList.vue:140
 #: src/views/stream/components/StreamDuplicate.vue:121
 #: src/views/stream/components/StreamDuplicate.vue:121
-#: src/views/stream/StreamList.vue:155
+#: src/views/stream/StreamList.vue:160
 msgid "Duplicate"
 msgid "Duplicate"
 msgstr "مكرر"
 msgstr "مكرر"
 
 
@@ -886,9 +892,9 @@ msgstr "بريد إلكتروني"
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "البريد الإلكتروني (*)"
 msgstr "البريد الإلكتروني (*)"
 
 
-#: src/views/site/site_list/SiteList.vue:132
+#: src/views/site/site_list/SiteList.vue:133
 #: src/views/stream/components/Deploy.vue:80
 #: src/views/stream/components/Deploy.vue:80
-#: src/views/stream/StreamList.vue:148
+#: src/views/stream/StreamList.vue:153
 msgid "Enable"
 msgid "Enable"
 msgstr "تفعيل"
 msgstr "تفعيل"
 
 
@@ -940,15 +946,15 @@ msgstr "تفعيل TLS"
 msgid "Enable TOTP"
 msgid "Enable TOTP"
 msgstr "تفعيل TOTP"
 msgstr "تفعيل TOTP"
 
 
-#: src/views/environment/envColumns.tsx:100
-#: src/views/environment/envColumns.tsx:106
+#: src/views/environment/envColumns.tsx:70
+#: src/views/environment/envColumns.tsx:76
 #: src/views/preference/LogrotateSettings.vue:19
 #: src/views/preference/LogrotateSettings.vue:19
 #: src/views/site/site_edit/RightSettings.vue:82
 #: src/views/site/site_edit/RightSettings.vue:82
 #: src/views/site/site_edit/SiteEdit.vue:184
 #: src/views/site/site_edit/SiteEdit.vue:184
-#: src/views/site/site_list/columns.tsx:47
-#: src/views/site/site_list/columns.tsx:59
+#: src/views/site/site_list/columns.tsx:49
+#: src/views/site/site_list/columns.tsx:61
 #: src/views/stream/components/RightSettings.vue:76
 #: src/views/stream/components/RightSettings.vue:76
-#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:29
+#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:30
 #: src/views/user/userColumns.tsx:38
 #: src/views/user/userColumns.tsx:38
 msgid "Enabled"
 msgid "Enabled"
 msgstr "مفعل"
 msgstr "مفعل"
@@ -957,7 +963,7 @@ msgstr "مفعل"
 #: src/views/site/site_list/SiteList.vue:46 src/views/site/SiteAdd.vue:40
 #: src/views/site/site_list/SiteList.vue:46 src/views/site/SiteAdd.vue:40
 #: src/views/stream/components/RightSettings.vue:29
 #: src/views/stream/components/RightSettings.vue:29
 #: src/views/stream/components/StreamDuplicate.vue:93
 #: src/views/stream/components/StreamDuplicate.vue:93
-#: src/views/stream/StreamList.vue:57
+#: src/views/stream/StreamList.vue:61
 msgid "Enabled successfully"
 msgid "Enabled successfully"
 msgstr "تم التفعيل بنجاح"
 msgstr "تم التفعيل بنجاح"
 
 
@@ -965,15 +971,12 @@ msgstr "تم التفعيل بنجاح"
 msgid "Encrypt website with Let's Encrypt"
 msgid "Encrypt website with Let's Encrypt"
 msgstr "تشفير الموقع باستخدام Let's Encrypt"
 msgstr "تشفير الموقع باستخدام Let's Encrypt"
 
 
-#: src/routes/index.ts:234 src/views/environment/Environment.vue:32
-msgid "Environment"
-msgstr "بيئة"
-
 #: src/language/constants.ts:21
 #: src/language/constants.ts:21
 msgid "Environment variables cleaned"
 msgid "Environment variables cleaned"
 msgstr "تم تنظيف متغيرات البيئة"
 msgstr "تم تنظيف متغيرات البيئة"
 
 
-#: src/views/dashboard/Environments.vue:83
+#: src/routes/index.ts:234 src/views/dashboard/Environments.vue:83
+#: src/views/environment/Environment.vue:33
 msgid "Environments"
 msgid "Environments"
 msgstr "البيئات"
 msgstr "البيئات"
 
 
@@ -1015,14 +1018,14 @@ msgstr "فشل في التفعيل %{msg}"
 #: src/views/site/site_edit/RightSettings.vue:45
 #: src/views/site/site_edit/RightSettings.vue:45
 #: src/views/site/site_list/SiteList.vue:60
 #: src/views/site/site_list/SiteList.vue:60
 #: src/views/stream/components/RightSettings.vue:41
 #: src/views/stream/components/RightSettings.vue:41
-#: src/views/stream/StreamList.vue:71
+#: src/views/stream/StreamList.vue:75
 msgid "Failed to disable %{msg}"
 msgid "Failed to disable %{msg}"
 msgstr "فشل في تعطيل %{msg}"
 msgstr "فشل في تعطيل %{msg}"
 
 
 #: src/views/site/site_edit/RightSettings.vue:36
 #: src/views/site/site_edit/RightSettings.vue:36
 #: src/views/site/site_list/SiteList.vue:50
 #: src/views/site/site_list/SiteList.vue:50
 #: src/views/stream/components/RightSettings.vue:32
 #: src/views/stream/components/RightSettings.vue:32
-#: src/views/stream/StreamList.vue:61
+#: src/views/stream/StreamList.vue:65
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "فشل في التفعيل %{msg}"
 msgstr "فشل في التفعيل %{msg}"
 
 
@@ -1043,10 +1046,6 @@ msgstr ""
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgstr "فشل في الحفظ، تم اكتشاف خطأ(أخطاء) في بناء الجملة في التكوين."
 msgstr "فشل في الحفظ، تم اكتشاف خطأ(أخطاء) في بناء الجملة في التكوين."
 
 
-#: src/views/config/configColumns.ts:24
-msgid "File"
-msgstr "ملف"
-
 #: src/language/constants.ts:31
 #: src/language/constants.ts:31
 msgid "File exists"
 msgid "File exists"
 msgstr "الملف موجود"
 msgstr "الملف موجود"
@@ -1106,7 +1105,7 @@ msgstr "توليد"
 msgid "Generating private key for registering account"
 msgid "Generating private key for registering account"
 msgstr "توليد مفتاح خاص لتسجيل الحساب"
 msgstr "توليد مفتاح خاص لتسجيل الحساب"
 
 
-#: src/views/environment/BatchUpgrader.vue:178 src/views/system/Upgrade.vue:169
+#: src/views/environment/BatchUpgrader.vue:177 src/views/system/Upgrade.vue:169
 msgid "Get release information error"
 msgid "Get release information error"
 msgstr "خطأ في الحصول على معلومات الإصدار"
 msgstr "خطأ في الحصول على معلومات الإصدار"
 
 
@@ -1220,7 +1219,7 @@ msgstr "تم التثبيت بنجاح"
 msgid "Interval"
 msgid "Interval"
 msgstr "فترة"
 msgstr "فترة"
 
 
-#: src/views/certificate/ACMEUser.vue:128
+#: src/views/certificate/ACMEUser.vue:129
 msgid "Invalid"
 msgid "Invalid"
 msgstr "غير صالح"
 msgstr "غير صالح"
 
 
@@ -1326,7 +1325,7 @@ msgstr "قائمة"
 msgid "Load Average:"
 msgid "Load Average:"
 msgstr "متوسط التحميل:"
 msgstr "متوسط التحميل:"
 
 
-#: src/views/environment/Environment.vue:37
+#: src/views/environment/Environment.vue:39
 msgid "Load from settings"
 msgid "Load from settings"
 msgstr "تحميل من الإعدادات"
 msgstr "تحميل من الإعدادات"
 
 
@@ -1400,11 +1399,11 @@ msgstr "إدارة التكوينات"
 msgid "Manage Sites"
 msgid "Manage Sites"
 msgstr "إدارة المواقع"
 msgstr "إدارة المواقع"
 
 
-#: src/routes/index.ts:89 src/views/stream/StreamList.vue:115
+#: src/routes/index.ts:89 src/views/stream/StreamList.vue:119
 msgid "Manage Streams"
 msgid "Manage Streams"
 msgstr "إدارة التدفقات"
 msgstr "إدارة التدفقات"
 
 
-#: src/routes/index.ts:257 src/views/user/User.vue:9
+#: src/routes/index.ts:257 src/views/user/User.vue:10
 msgid "Manage Users"
 msgid "Manage Users"
 msgstr "إدارة المستخدمين"
 msgstr "إدارة المستخدمين"
 
 
@@ -1433,10 +1432,10 @@ msgstr "دقائق"
 msgid "Model"
 msgid "Model"
 msgstr "نموذج"
 msgstr "نموذج"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:256
+#: src/components/ChatGPT/ChatGPT.vue:352
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:151
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:151
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:498
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:498
-#: src/views/config/ConfigList.vue:158
+#: src/views/config/ConfigList.vue:159
 msgid "Modify"
 msgid "Modify"
 msgstr "تعديل"
 msgstr "تعديل"
 
 
@@ -1460,17 +1459,18 @@ msgstr "توجيه متعدد الأسطر"
 #: src/views/certificate/CertificateEditor.vue:160
 #: src/views/certificate/CertificateEditor.vue:160
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/certificate/DNSCredential.vue:11
-#: src/views/config/components/Mkdir.vue:64 src/views/config/configColumns.ts:8
-#: src/views/config/ConfigEditor.vue:256 src/views/environment/envColumns.tsx:9
+#: src/views/config/components/Mkdir.vue:64
+#: src/views/config/configColumns.tsx:7 src/views/config/ConfigEditor.vue:256
+#: src/views/environment/envColumns.tsx:9
 #: src/views/preference/components/AddPasskey.vue:75
 #: src/views/preference/components/AddPasskey.vue:75
 #: src/views/site/ngx_conf/NgxUpstream.vue:177
 #: src/views/site/ngx_conf/NgxUpstream.vue:177
 #: src/views/site/site_category/columns.ts:7
 #: src/views/site/site_category/columns.ts:7
 #: src/views/site/site_edit/RightSettings.vue:88
 #: src/views/site/site_edit/RightSettings.vue:88
-#: src/views/site/site_list/columns.tsx:13
+#: src/views/site/site_list/columns.tsx:15
 #: src/views/site/site_list/SiteDuplicate.vue:79
 #: src/views/site/site_list/SiteDuplicate.vue:79
 #: src/views/stream/components/RightSettings.vue:82
 #: src/views/stream/components/RightSettings.vue:82
 #: src/views/stream/components/StreamDuplicate.vue:128
 #: src/views/stream/components/StreamDuplicate.vue:128
-#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:181
+#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:186
 msgid "Name"
 msgid "Name"
 msgstr "اسم"
 msgstr "اسم"
 
 
@@ -1589,20 +1589,20 @@ msgstr "أمر إعادة تشغيل Nginx"
 msgid "Nginx restarted successfully"
 msgid "Nginx restarted successfully"
 msgstr "تم إعادة تشغيل Nginx بنجاح"
 msgstr "تم إعادة تشغيل Nginx بنجاح"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:277
+#: src/components/ChatGPT/ChatGPT.vue:374
 #: src/components/Notification/Notification.vue:128
 #: src/components/Notification/Notification.vue:128
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:510
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:510
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:524
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:524
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:538
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:538
-#: src/views/notification/Notification.vue:36
+#: src/views/notification/Notification.vue:37
 #: src/views/preference/AuthSettings.vue:136
 #: src/views/preference/AuthSettings.vue:136
 #: src/views/preference/CertSettings.vue:70
 #: src/views/preference/CertSettings.vue:70
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97
 #: src/views/site/ngx_conf/LocationEditor.vue:90
 #: src/views/site/ngx_conf/LocationEditor.vue:90
-#: src/views/site/site_list/SiteList.vue:142
-#: src/views/stream/StreamList.vue:158
+#: src/views/site/site_list/SiteList.vue:143
+#: src/views/stream/StreamList.vue:163
 msgid "No"
 msgid "No"
 msgstr "لا"
 msgstr "لا"
 
 
@@ -1639,7 +1639,7 @@ msgstr ""
 "يرجى ملاحظة أنه إذا كان ملف التكوين يتضمن تكوينات أو شهادات أخرى، فيرجى "
 "يرجى ملاحظة أنه إذا كان ملف التكوين يتضمن تكوينات أو شهادات أخرى، فيرجى "
 "مزامنتها مع العقد البعيدة مسبقًا."
 "مزامنتها مع العقد البعيدة مسبقًا."
 
 
-#: src/views/notification/Notification.vue:27
+#: src/views/notification/Notification.vue:28
 msgid "Notification"
 msgid "Notification"
 msgstr "إشعار"
 msgstr "إشعار"
 
 
@@ -1669,7 +1669,7 @@ msgstr ""
 
 
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/views/dashboard/Environments.vue:107
 #: src/views/dashboard/Environments.vue:107
-#: src/views/environment/envColumns.tsx:87
+#: src/views/environment/envColumns.tsx:56
 msgid "Offline"
 msgid "Offline"
 msgstr "غير متصل"
 msgstr "غير متصل"
 
 
@@ -1677,23 +1677,23 @@ msgstr "غير متصل"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:511
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:511
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:525
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:525
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:539
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:539
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:181
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:188
 msgid "Ok"
 msgid "Ok"
 msgstr "حسنًا"
 msgstr "حسنًا"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:278
+#: src/components/ChatGPT/ChatGPT.vue:375
 #: src/components/Notification/Notification.vue:129
 #: src/components/Notification/Notification.vue:129
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:95
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:95
-#: src/views/notification/Notification.vue:37
+#: src/views/notification/Notification.vue:38
 #: src/views/site/cert/components/ObtainCert.vue:139
 #: src/views/site/cert/components/ObtainCert.vue:139
 #: src/views/site/ngx_conf/NgxConfigEditor.vue:50
 #: src/views/site/ngx_conf/NgxConfigEditor.vue:50
 #: src/views/site/ngx_conf/NgxServer.vue:79
 #: src/views/site/ngx_conf/NgxServer.vue:79
 #: src/views/site/ngx_conf/NgxUpstream.vue:33
 #: src/views/site/ngx_conf/NgxUpstream.vue:33
 #: src/views/site/site_edit/RightSettings.vue:54
 #: src/views/site/site_edit/RightSettings.vue:54
-#: src/views/site/site_list/SiteList.vue:143
+#: src/views/site/site_list/SiteList.vue:144
 #: src/views/stream/components/Deploy.vue:19
 #: src/views/stream/components/Deploy.vue:19
 #: src/views/stream/components/RightSettings.vue:50
 #: src/views/stream/components/RightSettings.vue:50
-#: src/views/stream/StreamList.vue:159
+#: src/views/stream/StreamList.vue:164
 msgid "OK"
 msgid "OK"
 msgstr "حسنًا"
 msgstr "حسنًا"
 
 
@@ -1704,7 +1704,7 @@ msgstr "بمجرد اكتمال التحقق، سيتم إزالة السجلا
 #: src/components/NodeSelector/NodeSelector.vue:83
 #: src/components/NodeSelector/NodeSelector.vue:83
 #: src/components/NodeSelector/NodeSelector.vue:97
 #: src/components/NodeSelector/NodeSelector.vue:97
 #: src/views/dashboard/Environments.vue:100
 #: src/views/dashboard/Environments.vue:100
-#: src/views/environment/envColumns.tsx:83
+#: src/views/environment/envColumns.tsx:52
 msgid "Online"
 msgid "Online"
 msgstr "متصل"
 msgstr "متصل"
 
 
@@ -1792,7 +1792,7 @@ msgstr ""
 msgid "Payload resource is nil"
 msgid "Payload resource is nil"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/BatchUpgrader.vue:233
+#: src/views/environment/BatchUpgrader.vue:232
 msgid "Perform"
 msgid "Perform"
 msgstr "نفذ"
 msgstr "نفذ"
 
 
@@ -1875,7 +1875,7 @@ msgid ""
 "Please note that the unit of time configurations below are all in seconds."
 "Please note that the unit of time configurations below are all in seconds."
 msgstr "يرجى ملاحظة أن تكوين وحدات الوقت أدناه كلها بالثواني."
 msgstr "يرجى ملاحظة أن تكوين وحدات الوقت أدناه كلها بالثواني."
 
 
-#: src/views/environment/Environment.vue:45
+#: src/views/environment/Environment.vue:48
 msgid "Please select at least one node to upgrade"
 msgid "Please select at least one node to upgrade"
 msgstr "يرجى اختيار عقدة واحدة على الأقل للترقية"
 msgstr "يرجى اختيار عقدة واحدة على الأقل للترقية"
 
 
@@ -1893,8 +1893,8 @@ msgstr "يرجى اختيار عقدة واحدة على الأقل!"
 msgid "Please upgrade the remote Nginx UI to the latest version"
 msgid "Please upgrade the remote Nginx UI to the latest version"
 msgstr "يرجى ترقية واجهة Nginx البعيدة إلى أحدث إصدار"
 msgstr "يرجى ترقية واجهة Nginx البعيدة إلى أحدث إصدار"
 
 
-#: src/views/environment/BatchUpgrader.vue:168
-#: src/views/environment/BatchUpgrader.vue:221 src/views/system/Upgrade.vue:194
+#: src/views/environment/BatchUpgrader.vue:167
+#: src/views/environment/BatchUpgrader.vue:220 src/views/system/Upgrade.vue:194
 #: src/views/system/Upgrade.vue:245
 #: src/views/system/Upgrade.vue:245
 msgid "Pre-release"
 msgid "Pre-release"
 msgstr "ما قبل الإصدار"
 msgstr "ما قبل الإصدار"
@@ -1971,11 +1971,11 @@ msgstr "رمز الاسترداد:"
 msgid "Recursive Nameservers"
 msgid "Recursive Nameservers"
 msgstr "خوادم الأسماء التكرارية"
 msgstr "خوادم الأسماء التكرارية"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:290
+#: src/components/ChatGPT/ChatGPT.vue:387
 msgid "Regenerate response"
 msgid "Regenerate response"
 msgstr "إعادة توليد الاستجابة"
 msgstr "إعادة توليد الاستجابة"
 
 
-#: src/views/certificate/ACMEUser.vue:136
+#: src/views/certificate/ACMEUser.vue:137
 msgid "Register"
 msgid "Register"
 msgstr "تسجيل"
 msgstr "تسجيل"
 
 
@@ -1985,7 +1985,7 @@ msgid ""
 "proxy."
 "proxy."
 msgstr "تسجيل مستخدم أو استخدام هذا الحساب لإصدار شهادة عبر وكيل HTTP."
 msgstr "تسجيل مستخدم أو استخدام هذا الحساب لإصدار شهادة عبر وكيل HTTP."
 
 
-#: src/views/certificate/ACMEUser.vue:105
+#: src/views/certificate/ACMEUser.vue:106
 msgid "Register failed"
 msgid "Register failed"
 msgstr "فشل التسجيل"
 msgstr "فشل التسجيل"
 
 
@@ -1997,7 +1997,7 @@ msgstr "التسجيل عند بدء التشغيل"
 msgid "Register passkey successfully"
 msgid "Register passkey successfully"
 msgstr "تم تسجيل مفتاح المرور بنجاح"
 msgstr "تم تسجيل مفتاح المرور بنجاح"
 
 
-#: src/views/certificate/ACMEUser.vue:103
+#: src/views/certificate/ACMEUser.vue:104
 msgid "Register successfully"
 msgid "Register successfully"
 msgstr "تم التسجيل بنجاح"
 msgstr "تم التسجيل بنجاح"
 
 
@@ -2005,7 +2005,7 @@ msgstr "تم التسجيل بنجاح"
 msgid "Registering user"
 msgid "Registering user"
 msgstr "تسجيل المستخدم"
 msgstr "تسجيل المستخدم"
 
 
-#: src/views/certificate/ACMEUser.vue:119
+#: src/views/certificate/ACMEUser.vue:120
 msgid "Registration Status"
 msgid "Registration Status"
 msgstr "حالة التسجيل"
 msgstr "حالة التسجيل"
 
 
@@ -2017,7 +2017,7 @@ msgstr "إعادة التثبيت"
 msgid "Release Note"
 msgid "Release Note"
 msgstr "ملاحظة الإصدار"
 msgstr "ملاحظة الإصدار"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:266
+#: src/components/ChatGPT/ChatGPT.vue:362
 #: src/components/NginxControl/NginxControl.vue:99
 #: src/components/NginxControl/NginxControl.vue:99
 msgid "Reload"
 msgid "Reload"
 msgstr "إعادة تحميل"
 msgstr "إعادة تحميل"
@@ -2053,7 +2053,7 @@ msgstr "تمت الإزالة بنجاح"
 
 
 #: src/views/config/components/ConfigName.vue:48
 #: src/views/config/components/ConfigName.vue:48
 #: src/views/config/components/Rename.vue:54
 #: src/views/config/components/Rename.vue:54
-#: src/views/config/ConfigList.vue:165
+#: src/views/config/ConfigList.vue:166
 #: src/views/site/ngx_conf/NgxUpstream.vue:125
 #: src/views/site/ngx_conf/NgxUpstream.vue:125
 #: src/views/site/site_edit/components/ConfigName.vue:44
 #: src/views/site/site_edit/components/ConfigName.vue:44
 msgid "Rename"
 msgid "Rename"
@@ -2163,7 +2163,7 @@ msgstr "وضع التشغيل"
 msgid "Running"
 msgid "Running"
 msgstr "يعمل"
 msgstr "يعمل"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:259
+#: src/components/ChatGPT/ChatGPT.vue:355
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:64
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:64
 #: src/components/StdDesign/StdDetail/StdDetail.vue:93
 #: src/components/StdDesign/StdDetail/StdDetail.vue:93
 #: src/views/certificate/CertificateEditor.vue:262
 #: src/views/certificate/CertificateEditor.vue:262
@@ -2230,7 +2230,7 @@ msgstr "حزمة تطوير البرمجيات SDK"
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr "تم نسخ السر"
 msgstr "تم نسخ السر"
 
 
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:182
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:189
 msgid "Selector"
 msgid "Selector"
 msgstr "المحدد"
 msgstr "المحدد"
 
 
@@ -2243,10 +2243,6 @@ msgstr ""
 msgid "Send"
 msgid "Send"
 msgstr "إرسال"
 msgstr "إرسال"
 
 
-#: src/lib/http/index.ts:128
-msgid "Server error"
-msgstr "خطأ في الخادم"
-
 #: src/views/dashboard/ServerAnalytic.vue:179
 #: src/views/dashboard/ServerAnalytic.vue:179
 msgid "Server Info"
 msgid "Server Info"
 msgstr "معلومات الخادم"
 msgstr "معلومات الخادم"
@@ -2263,7 +2259,7 @@ msgstr "عامل server_name مطلوب"
 msgid "ServerIdx out of range"
 msgid "ServerIdx out of range"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/user.ts:9
+#: src/constants/errors/user.ts:11
 msgid "Session not found"
 msgid "Session not found"
 msgstr ""
 msgstr ""
 
 
@@ -2366,16 +2362,16 @@ msgstr "مسار شهادة SSL"
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "تسجيل الدخول عبر SSO"
 msgstr "تسجيل الدخول عبر SSO"
 
 
-#: src/views/environment/BatchUpgrader.vue:165
-#: src/views/environment/BatchUpgrader.vue:215 src/views/system/Upgrade.vue:191
+#: src/views/environment/BatchUpgrader.vue:164
+#: src/views/environment/BatchUpgrader.vue:214 src/views/system/Upgrade.vue:191
 #: src/views/system/Upgrade.vue:239
 #: src/views/system/Upgrade.vue:239
 msgid "Stable"
 msgid "Stable"
 msgstr "مستقر"
 msgstr "مستقر"
 
 
 #: src/views/certificate/ACMEUser.vue:65
 #: src/views/certificate/ACMEUser.vue:65
 #: src/views/certificate/CertificateList/certColumns.tsx:68
 #: src/views/certificate/CertificateList/certColumns.tsx:68
-#: src/views/environment/envColumns.tsx:75
-#: src/views/site/site_list/columns.tsx:40 src/views/stream/StreamList.vue:22
+#: src/views/environment/envColumns.tsx:44
+#: src/views/site/site_list/columns.tsx:42 src/views/stream/StreamList.vue:23
 msgid "Status"
 msgid "Status"
 msgstr "الحالة"
 msgstr "الحالة"
 
 
@@ -2475,7 +2471,7 @@ msgstr "خطأ في تزامن التكوين"
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "تمت مزامنة التكوين بنجاح"
 msgstr "تمت مزامنة التكوين بنجاح"
 
 
-#: src/views/site/site_category/SiteCategory.vue:16
+#: src/views/site/site_category/SiteCategory.vue:17
 msgid "Sync Nodes"
 msgid "Sync Nodes"
 msgstr "مزامنة العقد"
 msgstr "مزامنة العقد"
 
 
@@ -2657,7 +2653,7 @@ msgstr "يجب أن يحتوي هذا الحقل على حروف وأحرف يو
 msgid "This value is already taken"
 msgid "This value is already taken"
 msgstr "هذه القيمة مستخدمة مسبقا"
 msgstr "هذه القيمة مستخدمة مسبقا"
 
 
-#: src/views/environment/BatchUpgrader.vue:183
+#: src/views/environment/BatchUpgrader.vue:182
 msgid ""
 msgid ""
 "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgstr "سيتم ترقية أو إعادة تثبيت Nginx UI على %{nodeNames} إلى %{version}."
 msgstr "سيتم ترقية أو إعادة تثبيت Nginx UI على %{nodeNames} إلى %{version}."
@@ -2750,7 +2746,6 @@ msgid "Two-factor authentication required"
 msgstr "يتطلب المصادقة الثنائية"
 msgstr "يتطلب المصادقة الثنائية"
 
 
 #: src/views/certificate/CertificateList/certColumns.tsx:25
 #: src/views/certificate/CertificateList/certColumns.tsx:25
-#: src/views/config/configColumns.ts:16
 #: src/views/notification/notificationColumns.tsx:9
 #: src/views/notification/notificationColumns.tsx:9
 msgid "Type"
 msgid "Type"
 msgstr "نوع"
 msgstr "نوع"
@@ -2761,13 +2756,13 @@ msgstr "تم التحديث بنجاح"
 
 
 #: src/views/certificate/ACMEUser.vue:88
 #: src/views/certificate/ACMEUser.vue:88
 #: src/views/certificate/DNSCredential.vue:27
 #: src/views/certificate/DNSCredential.vue:27
-#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:276
-#: src/views/environment/envColumns.tsx:119
-#: src/views/site/site_category/columns.ts:20
+#: src/views/config/configColumns.tsx:34 src/views/config/ConfigEditor.vue:276
+#: src/views/environment/envColumns.tsx:90
+#: src/views/site/site_category/columns.ts:22
 #: src/views/site/site_edit/RightSettings.vue:100
 #: src/views/site/site_edit/RightSettings.vue:100
-#: src/views/site/site_list/columns.tsx:67
+#: src/views/site/site_list/columns.tsx:69
 #: src/views/stream/components/RightSettings.vue:85
 #: src/views/stream/components/RightSettings.vue:85
-#: src/views/stream/StreamList.vue:41 src/views/user/userColumns.tsx:54
+#: src/views/stream/StreamList.vue:43 src/views/user/userColumns.tsx:54
 msgid "Updated at"
 msgid "Updated at"
 msgstr "محدث في"
 msgstr "محدث في"
 
 
@@ -2775,12 +2770,12 @@ msgstr "محدث في"
 msgid "Updated successfully"
 msgid "Updated successfully"
 msgstr "تم التحديث بنجاح"
 msgstr "تم التحديث بنجاح"
 
 
-#: src/routes/index.ts:297 src/views/environment/Environment.vue:53
+#: src/routes/index.ts:297 src/views/environment/Environment.vue:56
 #: src/views/system/Upgrade.vue:143 src/views/system/Upgrade.vue:226
 #: src/views/system/Upgrade.vue:143 src/views/system/Upgrade.vue:226
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr "ترقية"
 msgstr "ترقية"
 
 
-#: src/views/environment/BatchUpgrader.vue:138
+#: src/views/environment/BatchUpgrader.vue:137
 msgid "Upgraded Nginx UI on %{node} successfully 🎉"
 msgid "Upgraded Nginx UI on %{node} successfully 🎉"
 msgstr "تمت ترقية Nginx UI على %{node} بنجاح 🎉"
 msgstr "تمت ترقية Nginx UI على %{node} بنجاح 🎉"
 
 
@@ -2788,7 +2783,7 @@ msgstr "تمت ترقية Nginx UI على %{node} بنجاح 🎉"
 msgid "Upgraded successfully"
 msgid "Upgraded successfully"
 msgstr "تم الترقية بنجاح"
 msgstr "تم الترقية بنجاح"
 
 
-#: src/views/environment/BatchUpgrader.vue:89 src/views/system/Upgrade.vue:77
+#: src/views/environment/BatchUpgrader.vue:88 src/views/system/Upgrade.vue:77
 msgid "Upgrading Nginx UI, please wait..."
 msgid "Upgrading Nginx UI, please wait..."
 msgstr "جارٍ ترقية Nginx UI، يرجى الانتظار..."
 msgstr "جارٍ ترقية Nginx UI، يرجى الانتظار..."
 
 
@@ -2800,7 +2795,7 @@ msgstr "اسم المنبع"
 msgid "Uptime:"
 msgid "Uptime:"
 msgstr "مدة التشغيل:"
 msgstr "مدة التشغيل:"
 
 
-#: src/views/environment/envColumns.tsx:18
+#: src/views/environment/envColumns.tsx:19
 msgid "URL"
 msgid "URL"
 msgstr "عنوان URL"
 msgstr "عنوان URL"
 
 
@@ -2812,7 +2807,7 @@ msgstr "استخدم كلمة المرور لمرة واحدة"
 msgid "Use recovery code"
 msgid "Use recovery code"
 msgstr "استخدم رمز الاسترداد"
 msgstr "استخدم رمز الاسترداد"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:237
+#: src/components/ChatGPT/ChatGPT.vue:333
 msgid "User"
 msgid "User"
 msgstr "مستخدم"
 msgstr "مستخدم"
 
 
@@ -2833,13 +2828,13 @@ msgstr "اسم المستخدم"
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr "اسم المستخدم (*)"
 msgstr "اسم المستخدم (*)"
 
 
-#: src/views/certificate/ACMEUser.vue:123
+#: src/views/certificate/ACMEUser.vue:124
 #: src/views/certificate/CertificateList/certColumns.tsx:81
 #: src/views/certificate/CertificateList/certColumns.tsx:81
 #: src/views/site/cert/CertInfo.vue:24
 #: src/views/site/cert/CertInfo.vue:24
 msgid "Valid"
 msgid "Valid"
 msgstr "صالح"
 msgstr "صالح"
 
 
-#: src/views/environment/envColumns.tsx:29
+#: src/views/environment/envColumns.tsx:31
 msgid "Version"
 msgid "Version"
 msgstr "إصدار"
 msgstr "إصدار"
 
 
@@ -2945,6 +2940,18 @@ msgstr "لم تقم بتكوين إعدادات Webauthn، لذا لا يمكن
 msgid "Your passkeys"
 msgid "Your passkeys"
 msgstr "مفاتيح المرور الخاصة بك"
 msgstr "مفاتيح المرور الخاصة بك"
 
 
+#~ msgid "Directory"
+#~ msgstr "مجلد"
+
+#~ msgid "Environment"
+#~ msgstr "بيئة"
+
+#~ msgid "File"
+#~ msgstr "ملف"
+
+#~ msgid "Server error"
+#~ msgstr "خطأ في الخادم"
+
 #~ msgid "Incorrect username or password"
 #~ msgid "Incorrect username or password"
 #~ msgstr "اسم المستخدم أو كلمة المرور غير صحيحة"
 #~ msgstr "اسم المستخدم أو كلمة المرور غير صحيحة"
 
 

+ 123 - 124
app/src/language/en/app.po

@@ -25,7 +25,7 @@ msgstr "About"
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr ""
 msgstr ""
 
 
-#: src/routes/index.ts:148 src/views/certificate/ACMEUser.vue:112
+#: src/routes/index.ts:148 src/views/certificate/ACMEUser.vue:113
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
 #, fuzzy
 #, fuzzy
 msgid "ACME User"
 msgid "ACME User"
@@ -34,12 +34,12 @@ msgstr "Username"
 #: src/views/certificate/ACMEUser.vue:95
 #: src/views/certificate/ACMEUser.vue:95
 #: src/views/certificate/CertificateList/certColumns.tsx:97
 #: src/views/certificate/CertificateList/certColumns.tsx:97
 #: src/views/certificate/DNSCredential.vue:33
 #: src/views/certificate/DNSCredential.vue:33
-#: src/views/config/configColumns.ts:38
-#: src/views/environment/envColumns.tsx:125
-#: src/views/notification/notificationColumns.tsx:62
+#: src/views/config/configColumns.tsx:42
+#: src/views/environment/envColumns.tsx:97
+#: src/views/notification/notificationColumns.tsx:65
 #: src/views/preference/AuthSettings.vue:26
 #: src/views/preference/AuthSettings.vue:26
-#: src/views/site/site_category/columns.ts:26
-#: src/views/site/site_list/columns.tsx:74 src/views/stream/StreamList.vue:47
+#: src/views/site/site_category/columns.ts:29
+#: src/views/site/site_list/columns.tsx:76 src/views/stream/StreamList.vue:49
 #: src/views/user/userColumns.tsx:60
 #: src/views/user/userColumns.tsx:60
 msgid "Action"
 msgid "Action"
 msgstr "Action"
 msgstr "Action"
@@ -50,7 +50,7 @@ msgstr "Action"
 #: src/views/site/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/site/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/site/ngx_conf/NgxServer.vue:162
 #: src/views/site/ngx_conf/NgxServer.vue:162
 #: src/views/site/ngx_conf/NgxUpstream.vue:154
 #: src/views/site/ngx_conf/NgxUpstream.vue:154
-#: src/views/stream/StreamList.vue:117
+#: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr ""
 msgstr ""
 
 
@@ -78,12 +78,12 @@ msgstr "Add Location"
 msgid "Add Site"
 msgid "Add Site"
 msgstr "Add Site"
 msgstr "Add Site"
 
 
-#: src/views/stream/StreamList.vue:176
+#: src/views/stream/StreamList.vue:181
 #, fuzzy
 #, fuzzy
 msgid "Add Stream"
 msgid "Add Stream"
 msgstr "Add Site"
 msgstr "Add Site"
 
 
-#: src/views/stream/StreamList.vue:109
+#: src/views/stream/StreamList.vue:113
 #, fuzzy
 #, fuzzy
 msgid "Added successfully"
 msgid "Added successfully"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
@@ -156,12 +156,12 @@ msgid "Are you sure you want to apply to all selected?"
 msgstr "Are you sure you want to remove this directive?"
 msgstr "Are you sure you want to remove this directive?"
 
 
 #: src/components/Notification/Notification.vue:130
 #: src/components/Notification/Notification.vue:130
-#: src/views/notification/Notification.vue:38
+#: src/views/notification/Notification.vue:39
 #, fuzzy
 #, fuzzy
 msgid "Are you sure you want to clear all notifications?"
 msgid "Are you sure you want to clear all notifications?"
 msgstr "Are you sure you want to remove this directive?"
 msgstr "Are you sure you want to remove this directive?"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:279
+#: src/components/ChatGPT/ChatGPT.vue:376
 #, fuzzy
 #, fuzzy
 msgid "Are you sure you want to clear the record of chat?"
 msgid "Are you sure you want to clear the record of chat?"
 msgstr "Are you sure you want to remove this directive?"
 msgstr "Are you sure you want to remove this directive?"
@@ -176,8 +176,8 @@ msgstr "Are you sure you want to remove this directive?"
 msgid "Are you sure you want to delete this item?"
 msgid "Are you sure you want to delete this item?"
 msgstr "Are you sure you want to remove this directive?"
 msgstr "Are you sure you want to remove this directive?"
 
 
-#: src/views/site/site_list/SiteList.vue:144
-#: src/views/stream/StreamList.vue:160
+#: src/views/site/site_list/SiteList.vue:145
+#: src/views/stream/StreamList.vue:165
 #, fuzzy
 #, fuzzy
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr "Are you sure you want to remove this directive?"
 msgstr "Are you sure you want to remove this directive?"
@@ -201,11 +201,11 @@ msgstr "Are you sure you want to remove this directive?"
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "Are you sure you want to remove this directive?"
 msgstr "Are you sure you want to remove this directive?"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:223
+#: src/components/ChatGPT/ChatGPT.vue:318
 msgid "Ask ChatGPT for Help"
 msgid "Ask ChatGPT for Help"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:237
+#: src/components/ChatGPT/ChatGPT.vue:333
 msgid "Assistant"
 msgid "Assistant"
 msgstr ""
 msgstr ""
 
 
@@ -248,7 +248,7 @@ msgstr "Auto-renewal enabled for %{name}"
 
 
 #: src/views/certificate/CertificateEditor.vue:255
 #: src/views/certificate/CertificateEditor.vue:255
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:106
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:106
-#: src/views/config/ConfigList.vue:179 src/views/nginx_log/NginxLog.vue:173
+#: src/views/config/ConfigList.vue:180 src/views/nginx_log/NginxLog.vue:173
 #: src/views/site/site_edit/SiteEdit.vue:264
 #: src/views/site/site_edit/SiteEdit.vue:264
 #: src/views/stream/StreamEdit.vue:245
 #: src/views/stream/StreamEdit.vue:245
 msgid "Back"
 msgid "Back"
@@ -303,7 +303,7 @@ msgstr "Action"
 msgid "Batch Modify"
 msgid "Batch Modify"
 msgstr "Modify Config"
 msgstr "Modify Config"
 
 
-#: src/views/environment/BatchUpgrader.vue:153
+#: src/views/environment/BatchUpgrader.vue:152
 msgid "Batch Upgrade"
 msgid "Batch Upgrade"
 msgstr ""
 msgstr ""
 
 
@@ -331,9 +331,9 @@ msgstr ""
 msgid "Can't scan? Use text key binding"
 msgid "Can't scan? Use text key binding"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:260
+#: src/components/ChatGPT/ChatGPT.vue:356
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:180
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:187
 #: src/components/StdDesign/StdDetail/StdDetail.vue:101
 #: src/components/StdDesign/StdDetail/StdDetail.vue:101
 #: src/views/preference/components/Passkey.vue:141
 #: src/views/preference/components/Passkey.vue:141
 #: src/views/site/cert/components/ObtainCert.vue:140
 #: src/views/site/cert/components/ObtainCert.vue:140
@@ -346,8 +346,16 @@ msgstr ""
 msgid "Cancel"
 msgid "Cancel"
 msgstr "Cancel"
 msgstr "Cancel"
 
 
+#: src/constants/errors/user.ts:10
+msgid "Cannot change initial user password in demo mode"
+msgstr ""
+
+#: src/constants/errors/user.ts:9
+msgid "Cannot remove initial user"
+msgstr ""
+
 #: src/views/site/site_edit/RightSettings.vue:91
 #: src/views/site/site_edit/RightSettings.vue:91
-#: src/views/site/site_list/columns.tsx:23
+#: src/views/site/site_list/columns.tsx:25
 msgid "Category"
 msgid "Category"
 msgstr ""
 msgstr ""
 
 
@@ -415,7 +423,7 @@ msgstr[1] "Certificate is valid"
 msgid "Changed Path"
 msgid "Changed Path"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/views/environment/BatchUpgrader.vue:160 src/views/system/Upgrade.vue:188
+#: src/views/environment/BatchUpgrader.vue:159 src/views/system/Upgrade.vue:188
 msgid "Channel"
 msgid "Channel"
 msgstr ""
 msgstr ""
 
 
@@ -451,9 +459,9 @@ msgstr ""
 msgid "Cleaning environment variables"
 msgid "Cleaning environment variables"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:283
+#: src/components/ChatGPT/ChatGPT.vue:380
 #: src/components/Notification/Notification.vue:135
 #: src/components/Notification/Notification.vue:135
-#: src/views/notification/Notification.vue:43
+#: src/views/notification/Notification.vue:44
 msgid "Clear"
 msgid "Clear"
 msgstr ""
 msgstr ""
 
 
@@ -550,9 +558,9 @@ msgstr "Created at"
 msgid "Create Folder"
 msgid "Create Folder"
 msgstr "Create Another"
 msgstr "Create Another"
 
 
-#: src/views/notification/notificationColumns.tsx:56
+#: src/views/notification/notificationColumns.tsx:58
 #: src/views/preference/components/Passkey.vue:95
 #: src/views/preference/components/Passkey.vue:95
-#: src/views/site/site_category/columns.ts:14 src/views/user/userColumns.tsx:48
+#: src/views/site/site_category/columns.ts:15 src/views/user/userColumns.tsx:48
 msgid "Created at"
 msgid "Created at"
 msgstr "Created at"
 msgstr "Created at"
 
 
@@ -613,8 +621,8 @@ msgstr ""
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/views/site/ngx_conf/NgxServer.vue:110
 #: src/views/site/ngx_conf/NgxServer.vue:110
 #: src/views/site/ngx_conf/NgxUpstream.vue:128
 #: src/views/site/ngx_conf/NgxUpstream.vue:128
-#: src/views/site/site_list/SiteList.vue:153
-#: src/views/stream/StreamList.vue:169
+#: src/views/site/site_list/SiteList.vue:154
+#: src/views/stream/StreamList.vue:174
 msgid "Delete"
 msgid "Delete"
 msgstr ""
 msgstr ""
 
 
@@ -637,7 +645,7 @@ msgstr "Certificate is valid"
 msgid "Delete site: %{site_name}"
 msgid "Delete site: %{site_name}"
 msgstr ""
 msgstr ""
 
 
-#: src/views/stream/StreamList.vue:78
+#: src/views/stream/StreamList.vue:82
 msgid "Delete stream: %{stream_name}"
 msgid "Delete stream: %{stream_name}"
 msgstr ""
 msgstr ""
 
 
@@ -674,7 +682,7 @@ msgstr ""
 msgid "Destination file already exists"
 msgid "Destination file already exists"
 msgstr ""
 msgstr ""
 
 
-#: src/views/notification/notificationColumns.tsx:51
+#: src/views/notification/notificationColumns.tsx:52
 msgid "Details"
 msgid "Details"
 msgstr ""
 msgstr ""
 
 
@@ -702,13 +710,8 @@ msgstr ""
 msgid "Directives"
 msgid "Directives"
 msgstr "Directives"
 msgstr "Directives"
 
 
-#: src/views/config/configColumns.ts:22
-#, fuzzy
-msgid "Directory"
-msgstr "Directive"
-
-#: src/views/site/site_list/SiteList.vue:124
-#: src/views/stream/StreamList.vue:140
+#: src/views/site/site_list/SiteList.vue:125
+#: src/views/stream/StreamList.vue:145
 #, fuzzy
 #, fuzzy
 msgid "Disable"
 msgid "Disable"
 msgstr "Disabled"
 msgstr "Disabled"
@@ -737,19 +740,19 @@ msgstr "Saved successfully"
 msgid "Disable Site %{site} on %{node} successfully"
 msgid "Disable Site %{site} on %{node} successfully"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/views/environment/envColumns.tsx:109
-#: src/views/environment/envColumns.tsx:92
+#: src/views/environment/envColumns.tsx:61
+#: src/views/environment/envColumns.tsx:79
 #: src/views/site/site_edit/SiteEdit.vue:190
 #: src/views/site/site_edit/SiteEdit.vue:190
-#: src/views/site/site_list/columns.tsx:51
-#: src/views/site/site_list/columns.tsx:60 src/views/stream/StreamEdit.vue:175
-#: src/views/stream/StreamList.vue:33 src/views/user/userColumns.tsx:41
+#: src/views/site/site_list/columns.tsx:53
+#: src/views/site/site_list/columns.tsx:62 src/views/stream/StreamEdit.vue:175
+#: src/views/stream/StreamList.vue:34 src/views/user/userColumns.tsx:41
 msgid "Disabled"
 msgid "Disabled"
 msgstr "Disabled"
 msgstr "Disabled"
 
 
 #: src/views/site/site_edit/RightSettings.vue:42
 #: src/views/site/site_edit/RightSettings.vue:42
 #: src/views/site/site_list/SiteList.vue:56
 #: src/views/site/site_list/SiteList.vue:56
 #: src/views/stream/components/RightSettings.vue:38
 #: src/views/stream/components/RightSettings.vue:38
-#: src/views/stream/StreamList.vue:67
+#: src/views/stream/StreamList.vue:71
 msgid "Disabled successfully"
 msgid "Disabled successfully"
 msgstr "Disabled successfully"
 msgstr "Disabled successfully"
 
 
@@ -848,7 +851,7 @@ msgstr ""
 msgid "Downloading latest release"
 msgid "Downloading latest release"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/BatchUpgrader.vue:189 src/views/system/Upgrade.vue:215
+#: src/views/environment/BatchUpgrader.vue:188 src/views/system/Upgrade.vue:215
 msgid "Dry run mode enabled"
 msgid "Dry run mode enabled"
 msgstr ""
 msgstr ""
 
 
@@ -859,9 +862,9 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #: src/views/site/site_list/SiteDuplicate.vue:72
 #: src/views/site/site_list/SiteDuplicate.vue:72
-#: src/views/site/site_list/SiteList.vue:139
+#: src/views/site/site_list/SiteList.vue:140
 #: src/views/stream/components/StreamDuplicate.vue:121
 #: src/views/stream/components/StreamDuplicate.vue:121
-#: src/views/stream/StreamList.vue:155
+#: src/views/stream/StreamList.vue:160
 msgid "Duplicate"
 msgid "Duplicate"
 msgstr ""
 msgstr ""
 
 
@@ -918,9 +921,9 @@ msgstr "Email (*)"
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "Email (*)"
 msgstr "Email (*)"
 
 
-#: src/views/site/site_list/SiteList.vue:132
+#: src/views/site/site_list/SiteList.vue:133
 #: src/views/stream/components/Deploy.vue:80
 #: src/views/stream/components/Deploy.vue:80
-#: src/views/stream/StreamList.vue:148
+#: src/views/stream/StreamList.vue:153
 #, fuzzy
 #, fuzzy
 msgid "Enable"
 msgid "Enable"
 msgstr "Enabled"
 msgstr "Enabled"
@@ -980,15 +983,15 @@ msgstr "Enable TLS"
 msgid "Enable TOTP"
 msgid "Enable TOTP"
 msgstr "Enable TLS"
 msgstr "Enable TLS"
 
 
-#: src/views/environment/envColumns.tsx:100
-#: src/views/environment/envColumns.tsx:106
+#: src/views/environment/envColumns.tsx:70
+#: src/views/environment/envColumns.tsx:76
 #: src/views/preference/LogrotateSettings.vue:19
 #: src/views/preference/LogrotateSettings.vue:19
 #: src/views/site/site_edit/RightSettings.vue:82
 #: src/views/site/site_edit/RightSettings.vue:82
 #: src/views/site/site_edit/SiteEdit.vue:184
 #: src/views/site/site_edit/SiteEdit.vue:184
-#: src/views/site/site_list/columns.tsx:47
-#: src/views/site/site_list/columns.tsx:59
+#: src/views/site/site_list/columns.tsx:49
+#: src/views/site/site_list/columns.tsx:61
 #: src/views/stream/components/RightSettings.vue:76
 #: src/views/stream/components/RightSettings.vue:76
-#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:29
+#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:30
 #: src/views/user/userColumns.tsx:38
 #: src/views/user/userColumns.tsx:38
 msgid "Enabled"
 msgid "Enabled"
 msgstr "Enabled"
 msgstr "Enabled"
@@ -997,7 +1000,7 @@ msgstr "Enabled"
 #: src/views/site/site_list/SiteList.vue:46 src/views/site/SiteAdd.vue:40
 #: src/views/site/site_list/SiteList.vue:46 src/views/site/SiteAdd.vue:40
 #: src/views/stream/components/RightSettings.vue:29
 #: src/views/stream/components/RightSettings.vue:29
 #: src/views/stream/components/StreamDuplicate.vue:93
 #: src/views/stream/components/StreamDuplicate.vue:93
-#: src/views/stream/StreamList.vue:57
+#: src/views/stream/StreamList.vue:61
 msgid "Enabled successfully"
 msgid "Enabled successfully"
 msgstr "Enabled successfully"
 msgstr "Enabled successfully"
 
 
@@ -1005,15 +1008,12 @@ msgstr "Enabled successfully"
 msgid "Encrypt website with Let's Encrypt"
 msgid "Encrypt website with Let's Encrypt"
 msgstr "Encrypt website with Let's Encrypt"
 msgstr "Encrypt website with Let's Encrypt"
 
 
-#: src/routes/index.ts:234 src/views/environment/Environment.vue:32
-msgid "Environment"
-msgstr ""
-
 #: src/language/constants.ts:21
 #: src/language/constants.ts:21
 msgid "Environment variables cleaned"
 msgid "Environment variables cleaned"
 msgstr ""
 msgstr ""
 
 
-#: src/views/dashboard/Environments.vue:83
+#: src/routes/index.ts:234 src/views/dashboard/Environments.vue:83
+#: src/views/environment/Environment.vue:33
 #, fuzzy
 #, fuzzy
 msgid "Environments"
 msgid "Environments"
 msgstr "Comments"
 msgstr "Comments"
@@ -1058,14 +1058,14 @@ msgstr "Failed to enable %{msg}"
 #: src/views/site/site_edit/RightSettings.vue:45
 #: src/views/site/site_edit/RightSettings.vue:45
 #: src/views/site/site_list/SiteList.vue:60
 #: src/views/site/site_list/SiteList.vue:60
 #: src/views/stream/components/RightSettings.vue:41
 #: src/views/stream/components/RightSettings.vue:41
-#: src/views/stream/StreamList.vue:71
+#: src/views/stream/StreamList.vue:75
 msgid "Failed to disable %{msg}"
 msgid "Failed to disable %{msg}"
 msgstr "Failed to disable %{msg}"
 msgstr "Failed to disable %{msg}"
 
 
 #: src/views/site/site_edit/RightSettings.vue:36
 #: src/views/site/site_edit/RightSettings.vue:36
 #: src/views/site/site_list/SiteList.vue:50
 #: src/views/site/site_list/SiteList.vue:50
 #: src/views/stream/components/RightSettings.vue:32
 #: src/views/stream/components/RightSettings.vue:32
-#: src/views/stream/StreamList.vue:61
+#: src/views/stream/StreamList.vue:65
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
 msgstr "Failed to enable %{msg}"
 
 
@@ -1086,10 +1086,6 @@ msgstr ""
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgstr ""
 msgstr ""
 
 
-#: src/views/config/configColumns.ts:24
-msgid "File"
-msgstr ""
-
 #: src/language/constants.ts:31
 #: src/language/constants.ts:31
 msgid "File exists"
 msgid "File exists"
 msgstr ""
 msgstr ""
@@ -1152,7 +1148,7 @@ msgstr ""
 msgid "Generating private key for registering account"
 msgid "Generating private key for registering account"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/BatchUpgrader.vue:178 src/views/system/Upgrade.vue:169
+#: src/views/environment/BatchUpgrader.vue:177 src/views/system/Upgrade.vue:169
 #, fuzzy
 #, fuzzy
 msgid "Get release information error"
 msgid "Get release information error"
 msgstr "Base information"
 msgstr "Base information"
@@ -1263,7 +1259,7 @@ msgstr "Enabled successfully"
 msgid "Interval"
 msgid "Interval"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:128
+#: src/views/certificate/ACMEUser.vue:129
 #, fuzzy
 #, fuzzy
 msgid "Invalid"
 msgid "Invalid"
 msgstr "Invalid E-mail!"
 msgstr "Invalid E-mail!"
@@ -1379,7 +1375,7 @@ msgstr ""
 msgid "Load Average:"
 msgid "Load Average:"
 msgstr "Load Averages:"
 msgstr "Load Averages:"
 
 
-#: src/views/environment/Environment.vue:37
+#: src/views/environment/Environment.vue:39
 msgid "Load from settings"
 msgid "Load from settings"
 msgstr ""
 msgstr ""
 
 
@@ -1451,12 +1447,12 @@ msgstr "Manage Configs"
 msgid "Manage Sites"
 msgid "Manage Sites"
 msgstr "Manage Sites"
 msgstr "Manage Sites"
 
 
-#: src/routes/index.ts:89 src/views/stream/StreamList.vue:115
+#: src/routes/index.ts:89 src/views/stream/StreamList.vue:119
 #, fuzzy
 #, fuzzy
 msgid "Manage Streams"
 msgid "Manage Streams"
 msgstr "Manage Sites"
 msgstr "Manage Sites"
 
 
-#: src/routes/index.ts:257 src/views/user/User.vue:9
+#: src/routes/index.ts:257 src/views/user/User.vue:10
 msgid "Manage Users"
 msgid "Manage Users"
 msgstr "Manage Users"
 msgstr "Manage Users"
 
 
@@ -1487,10 +1483,10 @@ msgstr ""
 msgid "Model"
 msgid "Model"
 msgstr "Advance Mode"
 msgstr "Advance Mode"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:256
+#: src/components/ChatGPT/ChatGPT.vue:352
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:151
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:151
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:498
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:498
-#: src/views/config/ConfigList.vue:158
+#: src/views/config/ConfigList.vue:159
 #, fuzzy
 #, fuzzy
 msgid "Modify"
 msgid "Modify"
 msgstr "Modify Config"
 msgstr "Modify Config"
@@ -1518,17 +1514,18 @@ msgstr "Single Directive"
 #: src/views/certificate/CertificateEditor.vue:160
 #: src/views/certificate/CertificateEditor.vue:160
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/certificate/DNSCredential.vue:11
-#: src/views/config/components/Mkdir.vue:64 src/views/config/configColumns.ts:8
-#: src/views/config/ConfigEditor.vue:256 src/views/environment/envColumns.tsx:9
+#: src/views/config/components/Mkdir.vue:64
+#: src/views/config/configColumns.tsx:7 src/views/config/ConfigEditor.vue:256
+#: src/views/environment/envColumns.tsx:9
 #: src/views/preference/components/AddPasskey.vue:75
 #: src/views/preference/components/AddPasskey.vue:75
 #: src/views/site/ngx_conf/NgxUpstream.vue:177
 #: src/views/site/ngx_conf/NgxUpstream.vue:177
 #: src/views/site/site_category/columns.ts:7
 #: src/views/site/site_category/columns.ts:7
 #: src/views/site/site_edit/RightSettings.vue:88
 #: src/views/site/site_edit/RightSettings.vue:88
-#: src/views/site/site_list/columns.tsx:13
+#: src/views/site/site_list/columns.tsx:15
 #: src/views/site/site_list/SiteDuplicate.vue:79
 #: src/views/site/site_list/SiteDuplicate.vue:79
 #: src/views/stream/components/RightSettings.vue:82
 #: src/views/stream/components/RightSettings.vue:82
 #: src/views/stream/components/StreamDuplicate.vue:128
 #: src/views/stream/components/StreamDuplicate.vue:128
-#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:181
+#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:186
 msgid "Name"
 msgid "Name"
 msgstr "Name"
 msgstr "Name"
 
 
@@ -1653,20 +1650,20 @@ msgstr ""
 msgid "Nginx restarted successfully"
 msgid "Nginx restarted successfully"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:277
+#: src/components/ChatGPT/ChatGPT.vue:374
 #: src/components/Notification/Notification.vue:128
 #: src/components/Notification/Notification.vue:128
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:510
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:510
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:524
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:524
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:538
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:538
-#: src/views/notification/Notification.vue:36
+#: src/views/notification/Notification.vue:37
 #: src/views/preference/AuthSettings.vue:136
 #: src/views/preference/AuthSettings.vue:136
 #: src/views/preference/CertSettings.vue:70
 #: src/views/preference/CertSettings.vue:70
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97
 #: src/views/site/ngx_conf/LocationEditor.vue:90
 #: src/views/site/ngx_conf/LocationEditor.vue:90
-#: src/views/site/site_list/SiteList.vue:142
-#: src/views/stream/StreamList.vue:158
+#: src/views/site/site_list/SiteList.vue:143
+#: src/views/stream/StreamList.vue:163
 msgid "No"
 msgid "No"
 msgstr "No"
 msgstr "No"
 
 
@@ -1702,7 +1699,7 @@ msgid ""
 "certificates, please synchronize them to the remote nodes in advance."
 "certificates, please synchronize them to the remote nodes in advance."
 msgstr ""
 msgstr ""
 
 
-#: src/views/notification/Notification.vue:27
+#: src/views/notification/Notification.vue:28
 #, fuzzy
 #, fuzzy
 msgid "Notification"
 msgid "Notification"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
@@ -1733,7 +1730,7 @@ msgstr ""
 
 
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/views/dashboard/Environments.vue:107
 #: src/views/dashboard/Environments.vue:107
-#: src/views/environment/envColumns.tsx:87
+#: src/views/environment/envColumns.tsx:56
 msgid "Offline"
 msgid "Offline"
 msgstr ""
 msgstr ""
 
 
@@ -1741,23 +1738,23 @@ msgstr ""
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:511
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:511
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:525
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:525
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:539
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:539
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:181
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:188
 msgid "Ok"
 msgid "Ok"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:278
+#: src/components/ChatGPT/ChatGPT.vue:375
 #: src/components/Notification/Notification.vue:129
 #: src/components/Notification/Notification.vue:129
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:95
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:95
-#: src/views/notification/Notification.vue:37
+#: src/views/notification/Notification.vue:38
 #: src/views/site/cert/components/ObtainCert.vue:139
 #: src/views/site/cert/components/ObtainCert.vue:139
 #: src/views/site/ngx_conf/NgxConfigEditor.vue:50
 #: src/views/site/ngx_conf/NgxConfigEditor.vue:50
 #: src/views/site/ngx_conf/NgxServer.vue:79
 #: src/views/site/ngx_conf/NgxServer.vue:79
 #: src/views/site/ngx_conf/NgxUpstream.vue:33
 #: src/views/site/ngx_conf/NgxUpstream.vue:33
 #: src/views/site/site_edit/RightSettings.vue:54
 #: src/views/site/site_edit/RightSettings.vue:54
-#: src/views/site/site_list/SiteList.vue:143
+#: src/views/site/site_list/SiteList.vue:144
 #: src/views/stream/components/Deploy.vue:19
 #: src/views/stream/components/Deploy.vue:19
 #: src/views/stream/components/RightSettings.vue:50
 #: src/views/stream/components/RightSettings.vue:50
-#: src/views/stream/StreamList.vue:159
+#: src/views/stream/StreamList.vue:164
 msgid "OK"
 msgid "OK"
 msgstr ""
 msgstr ""
 
 
@@ -1768,7 +1765,7 @@ msgstr ""
 #: src/components/NodeSelector/NodeSelector.vue:83
 #: src/components/NodeSelector/NodeSelector.vue:83
 #: src/components/NodeSelector/NodeSelector.vue:97
 #: src/components/NodeSelector/NodeSelector.vue:97
 #: src/views/dashboard/Environments.vue:100
 #: src/views/dashboard/Environments.vue:100
-#: src/views/environment/envColumns.tsx:83
+#: src/views/environment/envColumns.tsx:52
 msgid "Online"
 msgid "Online"
 msgstr ""
 msgstr ""
 
 
@@ -1853,7 +1850,7 @@ msgstr ""
 msgid "Payload resource is nil"
 msgid "Payload resource is nil"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/BatchUpgrader.vue:233
+#: src/views/environment/BatchUpgrader.vue:232
 msgid "Perform"
 msgid "Perform"
 msgstr ""
 msgstr ""
 
 
@@ -1935,7 +1932,7 @@ msgid ""
 "Please note that the unit of time configurations below are all in seconds."
 "Please note that the unit of time configurations below are all in seconds."
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/Environment.vue:45
+#: src/views/environment/Environment.vue:48
 msgid "Please select at least one node to upgrade"
 msgid "Please select at least one node to upgrade"
 msgstr ""
 msgstr ""
 
 
@@ -1954,8 +1951,8 @@ msgstr ""
 msgid "Please upgrade the remote Nginx UI to the latest version"
 msgid "Please upgrade the remote Nginx UI to the latest version"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/views/environment/BatchUpgrader.vue:168
-#: src/views/environment/BatchUpgrader.vue:221 src/views/system/Upgrade.vue:194
+#: src/views/environment/BatchUpgrader.vue:167
+#: src/views/environment/BatchUpgrader.vue:220 src/views/system/Upgrade.vue:194
 #: src/views/system/Upgrade.vue:245
 #: src/views/system/Upgrade.vue:245
 msgid "Pre-release"
 msgid "Pre-release"
 msgstr ""
 msgstr ""
@@ -2034,11 +2031,11 @@ msgstr ""
 msgid "Recursive Nameservers"
 msgid "Recursive Nameservers"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:290
+#: src/components/ChatGPT/ChatGPT.vue:387
 msgid "Regenerate response"
 msgid "Regenerate response"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:136
+#: src/views/certificate/ACMEUser.vue:137
 msgid "Register"
 msgid "Register"
 msgstr ""
 msgstr ""
 
 
@@ -2048,7 +2045,7 @@ msgid ""
 "proxy."
 "proxy."
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:105
+#: src/views/certificate/ACMEUser.vue:106
 #, fuzzy
 #, fuzzy
 msgid "Register failed"
 msgid "Register failed"
 msgstr "Enable failed"
 msgstr "Enable failed"
@@ -2062,7 +2059,7 @@ msgstr ""
 msgid "Register passkey successfully"
 msgid "Register passkey successfully"
 msgstr "Enabled successfully"
 msgstr "Enabled successfully"
 
 
-#: src/views/certificate/ACMEUser.vue:103
+#: src/views/certificate/ACMEUser.vue:104
 #, fuzzy
 #, fuzzy
 msgid "Register successfully"
 msgid "Register successfully"
 msgstr "Enabled successfully"
 msgstr "Enabled successfully"
@@ -2071,7 +2068,7 @@ msgstr "Enabled successfully"
 msgid "Registering user"
 msgid "Registering user"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:119
+#: src/views/certificate/ACMEUser.vue:120
 msgid "Registration Status"
 msgid "Registration Status"
 msgstr ""
 msgstr ""
 
 
@@ -2084,7 +2081,7 @@ msgstr "Install"
 msgid "Release Note"
 msgid "Release Note"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:266
+#: src/components/ChatGPT/ChatGPT.vue:362
 #: src/components/NginxControl/NginxControl.vue:99
 #: src/components/NginxControl/NginxControl.vue:99
 msgid "Reload"
 msgid "Reload"
 msgstr ""
 msgstr ""
@@ -2124,7 +2121,7 @@ msgstr "Saved successfully"
 
 
 #: src/views/config/components/ConfigName.vue:48
 #: src/views/config/components/ConfigName.vue:48
 #: src/views/config/components/Rename.vue:54
 #: src/views/config/components/Rename.vue:54
-#: src/views/config/ConfigList.vue:165
+#: src/views/config/ConfigList.vue:166
 #: src/views/site/ngx_conf/NgxUpstream.vue:125
 #: src/views/site/ngx_conf/NgxUpstream.vue:125
 #: src/views/site/site_edit/components/ConfigName.vue:44
 #: src/views/site/site_edit/components/ConfigName.vue:44
 #, fuzzy
 #, fuzzy
@@ -2246,7 +2243,7 @@ msgstr "Advance Mode"
 msgid "Running"
 msgid "Running"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:259
+#: src/components/ChatGPT/ChatGPT.vue:355
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:64
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:64
 #: src/components/StdDesign/StdDetail/StdDetail.vue:93
 #: src/components/StdDesign/StdDetail/StdDetail.vue:93
 #: src/views/certificate/CertificateEditor.vue:262
 #: src/views/certificate/CertificateEditor.vue:262
@@ -2318,7 +2315,7 @@ msgstr ""
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:182
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:189
 msgid "Selector"
 msgid "Selector"
 msgstr ""
 msgstr ""
 
 
@@ -2331,10 +2328,6 @@ msgstr ""
 msgid "Send"
 msgid "Send"
 msgstr "Send"
 msgstr "Send"
 
 
-#: src/lib/http/index.ts:128
-msgid "Server error"
-msgstr "Server error"
-
 #: src/views/dashboard/ServerAnalytic.vue:179
 #: src/views/dashboard/ServerAnalytic.vue:179
 msgid "Server Info"
 msgid "Server Info"
 msgstr "Server Info"
 msgstr "Server Info"
@@ -2351,7 +2344,7 @@ msgstr "server_name parameter is required"
 msgid "ServerIdx out of range"
 msgid "ServerIdx out of range"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/user.ts:9
+#: src/constants/errors/user.ts:11
 #, fuzzy
 #, fuzzy
 msgid "Session not found"
 msgid "Session not found"
 msgstr "File Not Found"
 msgstr "File Not Found"
@@ -2459,8 +2452,8 @@ msgstr "Certificate Status"
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "Login"
 msgstr "Login"
 
 
-#: src/views/environment/BatchUpgrader.vue:165
-#: src/views/environment/BatchUpgrader.vue:215 src/views/system/Upgrade.vue:191
+#: src/views/environment/BatchUpgrader.vue:164
+#: src/views/environment/BatchUpgrader.vue:214 src/views/system/Upgrade.vue:191
 #: src/views/system/Upgrade.vue:239
 #: src/views/system/Upgrade.vue:239
 #, fuzzy
 #, fuzzy
 msgid "Stable"
 msgid "Stable"
@@ -2468,8 +2461,8 @@ msgstr "Enabled"
 
 
 #: src/views/certificate/ACMEUser.vue:65
 #: src/views/certificate/ACMEUser.vue:65
 #: src/views/certificate/CertificateList/certColumns.tsx:68
 #: src/views/certificate/CertificateList/certColumns.tsx:68
-#: src/views/environment/envColumns.tsx:75
-#: src/views/site/site_list/columns.tsx:40 src/views/stream/StreamList.vue:22
+#: src/views/environment/envColumns.tsx:44
+#: src/views/site/site_list/columns.tsx:42 src/views/stream/StreamList.vue:23
 msgid "Status"
 msgid "Status"
 msgstr "Status"
 msgstr "Status"
 
 
@@ -2577,7 +2570,7 @@ msgstr "Certificate is valid"
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "Certificate is valid"
 msgstr "Certificate is valid"
 
 
-#: src/views/site/site_category/SiteCategory.vue:16
+#: src/views/site/site_category/SiteCategory.vue:17
 msgid "Sync Nodes"
 msgid "Sync Nodes"
 msgstr ""
 msgstr ""
 
 
@@ -2752,7 +2745,7 @@ msgstr ""
 msgid "This value is already taken"
 msgid "This value is already taken"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/BatchUpgrader.vue:183
+#: src/views/environment/BatchUpgrader.vue:182
 msgid ""
 msgid ""
 "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgstr ""
 msgstr ""
@@ -2828,7 +2821,6 @@ msgid "Two-factor authentication required"
 msgstr ""
 msgstr ""
 
 
 #: src/views/certificate/CertificateList/certColumns.tsx:25
 #: src/views/certificate/CertificateList/certColumns.tsx:25
-#: src/views/config/configColumns.ts:16
 #: src/views/notification/notificationColumns.tsx:9
 #: src/views/notification/notificationColumns.tsx:9
 msgid "Type"
 msgid "Type"
 msgstr ""
 msgstr ""
@@ -2840,13 +2832,13 @@ msgstr "Saved successfully"
 
 
 #: src/views/certificate/ACMEUser.vue:88
 #: src/views/certificate/ACMEUser.vue:88
 #: src/views/certificate/DNSCredential.vue:27
 #: src/views/certificate/DNSCredential.vue:27
-#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:276
-#: src/views/environment/envColumns.tsx:119
-#: src/views/site/site_category/columns.ts:20
+#: src/views/config/configColumns.tsx:34 src/views/config/ConfigEditor.vue:276
+#: src/views/environment/envColumns.tsx:90
+#: src/views/site/site_category/columns.ts:22
 #: src/views/site/site_edit/RightSettings.vue:100
 #: src/views/site/site_edit/RightSettings.vue:100
-#: src/views/site/site_list/columns.tsx:67
+#: src/views/site/site_list/columns.tsx:69
 #: src/views/stream/components/RightSettings.vue:85
 #: src/views/stream/components/RightSettings.vue:85
-#: src/views/stream/StreamList.vue:41 src/views/user/userColumns.tsx:54
+#: src/views/stream/StreamList.vue:43 src/views/user/userColumns.tsx:54
 msgid "Updated at"
 msgid "Updated at"
 msgstr "Updated at"
 msgstr "Updated at"
 
 
@@ -2855,12 +2847,12 @@ msgstr "Updated at"
 msgid "Updated successfully"
 msgid "Updated successfully"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/routes/index.ts:297 src/views/environment/Environment.vue:53
+#: src/routes/index.ts:297 src/views/environment/Environment.vue:56
 #: src/views/system/Upgrade.vue:143 src/views/system/Upgrade.vue:226
 #: src/views/system/Upgrade.vue:143 src/views/system/Upgrade.vue:226
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/BatchUpgrader.vue:138
+#: src/views/environment/BatchUpgrader.vue:137
 #, fuzzy
 #, fuzzy
 msgid "Upgraded Nginx UI on %{node} successfully 🎉"
 msgid "Upgraded Nginx UI on %{node} successfully 🎉"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
@@ -2870,7 +2862,7 @@ msgstr "Saved successfully"
 msgid "Upgraded successfully"
 msgid "Upgraded successfully"
 msgstr "Saved successfully"
 msgstr "Saved successfully"
 
 
-#: src/views/environment/BatchUpgrader.vue:89 src/views/system/Upgrade.vue:77
+#: src/views/environment/BatchUpgrader.vue:88 src/views/system/Upgrade.vue:77
 msgid "Upgrading Nginx UI, please wait..."
 msgid "Upgrading Nginx UI, please wait..."
 msgstr ""
 msgstr ""
 
 
@@ -2882,7 +2874,7 @@ msgstr ""
 msgid "Uptime:"
 msgid "Uptime:"
 msgstr "Uptime:"
 msgstr "Uptime:"
 
 
-#: src/views/environment/envColumns.tsx:18
+#: src/views/environment/envColumns.tsx:19
 msgid "URL"
 msgid "URL"
 msgstr ""
 msgstr ""
 
 
@@ -2894,7 +2886,7 @@ msgstr ""
 msgid "Use recovery code"
 msgid "Use recovery code"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:237
+#: src/components/ChatGPT/ChatGPT.vue:333
 #, fuzzy
 #, fuzzy
 msgid "User"
 msgid "User"
 msgstr "Username"
 msgstr "Username"
@@ -2916,13 +2908,13 @@ msgstr "Username"
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr "Username (*)"
 msgstr "Username (*)"
 
 
-#: src/views/certificate/ACMEUser.vue:123
+#: src/views/certificate/ACMEUser.vue:124
 #: src/views/certificate/CertificateList/certColumns.tsx:81
 #: src/views/certificate/CertificateList/certColumns.tsx:81
 #: src/views/site/cert/CertInfo.vue:24
 #: src/views/site/cert/CertInfo.vue:24
 msgid "Valid"
 msgid "Valid"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/envColumns.tsx:29
+#: src/views/environment/envColumns.tsx:31
 msgid "Version"
 msgid "Version"
 msgstr ""
 msgstr ""
 
 
@@ -3023,6 +3015,13 @@ msgstr ""
 msgid "Your passkeys"
 msgid "Your passkeys"
 msgstr ""
 msgstr ""
 
 
+#, fuzzy
+#~ msgid "Directory"
+#~ msgstr "Directive"
+
+#~ msgid "Server error"
+#~ msgstr "Server error"
+
 #, fuzzy
 #, fuzzy
 #~ msgid ""
 #~ msgid ""
 #~ "Rename %{orig_path} to %{new_path} on %{env_name} failed, please upgrade "
 #~ "Rename %{orig_path} to %{new_path} on %{env_name} failed, please upgrade "

+ 130 - 123
app/src/language/es/app.po

@@ -32,7 +32,7 @@ msgstr "Acerca de"
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr "Logs de acceso"
 msgstr "Logs de acceso"
 
 
-#: src/routes/index.ts:148 src/views/certificate/ACMEUser.vue:112
+#: src/routes/index.ts:148 src/views/certificate/ACMEUser.vue:113
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
 msgid "ACME User"
 msgid "ACME User"
 msgstr "Usuario ACME"
 msgstr "Usuario ACME"
@@ -40,12 +40,12 @@ msgstr "Usuario ACME"
 #: src/views/certificate/ACMEUser.vue:95
 #: src/views/certificate/ACMEUser.vue:95
 #: src/views/certificate/CertificateList/certColumns.tsx:97
 #: src/views/certificate/CertificateList/certColumns.tsx:97
 #: src/views/certificate/DNSCredential.vue:33
 #: src/views/certificate/DNSCredential.vue:33
-#: src/views/config/configColumns.ts:38
-#: src/views/environment/envColumns.tsx:125
-#: src/views/notification/notificationColumns.tsx:62
+#: src/views/config/configColumns.tsx:42
+#: src/views/environment/envColumns.tsx:97
+#: src/views/notification/notificationColumns.tsx:65
 #: src/views/preference/AuthSettings.vue:26
 #: src/views/preference/AuthSettings.vue:26
-#: src/views/site/site_category/columns.ts:26
-#: src/views/site/site_list/columns.tsx:74 src/views/stream/StreamList.vue:47
+#: src/views/site/site_category/columns.ts:29
+#: src/views/site/site_list/columns.tsx:76 src/views/stream/StreamList.vue:49
 #: src/views/user/userColumns.tsx:60
 #: src/views/user/userColumns.tsx:60
 msgid "Action"
 msgid "Action"
 msgstr "Acción"
 msgstr "Acción"
@@ -56,7 +56,7 @@ msgstr "Acción"
 #: src/views/site/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/site/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/site/ngx_conf/NgxServer.vue:162
 #: src/views/site/ngx_conf/NgxServer.vue:162
 #: src/views/site/ngx_conf/NgxUpstream.vue:154
 #: src/views/site/ngx_conf/NgxUpstream.vue:154
-#: src/views/stream/StreamList.vue:117
+#: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr "Agregar"
 msgstr "Agregar"
 
 
@@ -83,11 +83,11 @@ msgstr "Agregar Ubicación"
 msgid "Add Site"
 msgid "Add Site"
 msgstr "Agregar Sitio"
 msgstr "Agregar Sitio"
 
 
-#: src/views/stream/StreamList.vue:176
+#: src/views/stream/StreamList.vue:181
 msgid "Add Stream"
 msgid "Add Stream"
 msgstr "Agregar Stream"
 msgstr "Agregar Stream"
 
 
-#: src/views/stream/StreamList.vue:109
+#: src/views/stream/StreamList.vue:113
 msgid "Added successfully"
 msgid "Added successfully"
 msgstr "Agregado exitoso"
 msgstr "Agregado exitoso"
 
 
@@ -159,11 +159,11 @@ msgid "Are you sure you want to apply to all selected?"
 msgstr "¿Está seguro de que quiere borrar?"
 msgstr "¿Está seguro de que quiere borrar?"
 
 
 #: src/components/Notification/Notification.vue:130
 #: src/components/Notification/Notification.vue:130
-#: src/views/notification/Notification.vue:38
+#: src/views/notification/Notification.vue:39
 msgid "Are you sure you want to clear all notifications?"
 msgid "Are you sure you want to clear all notifications?"
 msgstr "¿Está seguro de que desea borrar todas las notificaciones?"
 msgstr "¿Está seguro de que desea borrar todas las notificaciones?"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:279
+#: src/components/ChatGPT/ChatGPT.vue:376
 msgid "Are you sure you want to clear the record of chat?"
 msgid "Are you sure you want to clear the record of chat?"
 msgstr "¿Está seguro de que desea borrar el registro del chat?"
 msgstr "¿Está seguro de que desea borrar el registro del chat?"
 
 
@@ -175,8 +175,8 @@ msgstr "¿Está seguro de que desea eliminar este elemento de forma permanente?"
 msgid "Are you sure you want to delete this item?"
 msgid "Are you sure you want to delete this item?"
 msgstr "¿Está seguro de que quiere borrar este elemento?"
 msgstr "¿Está seguro de que quiere borrar este elemento?"
 
 
-#: src/views/site/site_list/SiteList.vue:144
-#: src/views/stream/StreamList.vue:160
+#: src/views/site/site_list/SiteList.vue:145
+#: src/views/stream/StreamList.vue:165
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr "¿Está seguro de que quiere borrar?"
 msgstr "¿Está seguro de que quiere borrar?"
 
 
@@ -196,11 +196,11 @@ msgstr "¿Está seguro de que desea eliminar este elemento?"
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "¿Está seguro de que quiere borrar esta ubicación?"
 msgstr "¿Está seguro de que quiere borrar esta ubicación?"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:223
+#: src/components/ChatGPT/ChatGPT.vue:318
 msgid "Ask ChatGPT for Help"
 msgid "Ask ChatGPT for Help"
 msgstr "Preguntar por ayuda a ChatGPT"
 msgstr "Preguntar por ayuda a ChatGPT"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:237
+#: src/components/ChatGPT/ChatGPT.vue:333
 msgid "Assistant"
 msgid "Assistant"
 msgstr "Asistente"
 msgstr "Asistente"
 
 
@@ -244,7 +244,7 @@ msgstr "Renovación automática habilitada por %{name}"
 
 
 #: src/views/certificate/CertificateEditor.vue:255
 #: src/views/certificate/CertificateEditor.vue:255
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:106
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:106
-#: src/views/config/ConfigList.vue:179 src/views/nginx_log/NginxLog.vue:173
+#: src/views/config/ConfigList.vue:180 src/views/nginx_log/NginxLog.vue:173
 #: src/views/site/site_edit/SiteEdit.vue:264
 #: src/views/site/site_edit/SiteEdit.vue:264
 #: src/views/stream/StreamEdit.vue:245
 #: src/views/stream/StreamEdit.vue:245
 msgid "Back"
 msgid "Back"
@@ -296,7 +296,7 @@ msgstr "Acción"
 msgid "Batch Modify"
 msgid "Batch Modify"
 msgstr "Modificar por lotes"
 msgstr "Modificar por lotes"
 
 
-#: src/views/environment/BatchUpgrader.vue:153
+#: src/views/environment/BatchUpgrader.vue:152
 msgid "Batch Upgrade"
 msgid "Batch Upgrade"
 msgstr "Actualización por lotes"
 msgstr "Actualización por lotes"
 
 
@@ -326,9 +326,9 @@ msgstr "Directorio CA"
 msgid "Can't scan? Use text key binding"
 msgid "Can't scan? Use text key binding"
 msgstr "¿No puede escanear? Utilice la vinculación con una llave de texto"
 msgstr "¿No puede escanear? Utilice la vinculación con una llave de texto"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:260
+#: src/components/ChatGPT/ChatGPT.vue:356
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:180
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:187
 #: src/components/StdDesign/StdDetail/StdDetail.vue:101
 #: src/components/StdDesign/StdDetail/StdDetail.vue:101
 #: src/views/preference/components/Passkey.vue:141
 #: src/views/preference/components/Passkey.vue:141
 #: src/views/site/cert/components/ObtainCert.vue:140
 #: src/views/site/cert/components/ObtainCert.vue:140
@@ -341,8 +341,18 @@ msgstr "¿No puede escanear? Utilice la vinculación con una llave de texto"
 msgid "Cancel"
 msgid "Cancel"
 msgstr "Cancelar"
 msgstr "Cancelar"
 
 
+#: src/constants/errors/user.ts:10
+#, fuzzy
+msgid "Cannot change initial user password in demo mode"
+msgstr "Prohibir cambiar la contraseña de root en la demostración"
+
+#: src/constants/errors/user.ts:9
+#, fuzzy
+msgid "Cannot remove initial user"
+msgstr "Usuario inicial del sistema"
+
 #: src/views/site/site_edit/RightSettings.vue:91
 #: src/views/site/site_edit/RightSettings.vue:91
-#: src/views/site/site_list/columns.tsx:23
+#: src/views/site/site_list/columns.tsx:25
 msgid "Category"
 msgid "Category"
 msgstr "Categoría"
 msgstr "Categoría"
 
 
@@ -403,7 +413,7 @@ msgstr[1] "Cambiar Certificados"
 msgid "Changed Path"
 msgid "Changed Path"
 msgstr "Ruta cambiada"
 msgstr "Ruta cambiada"
 
 
-#: src/views/environment/BatchUpgrader.vue:160 src/views/system/Upgrade.vue:188
+#: src/views/environment/BatchUpgrader.vue:159 src/views/system/Upgrade.vue:188
 msgid "Channel"
 msgid "Channel"
 msgstr "Canal"
 msgstr "Canal"
 
 
@@ -439,9 +449,9 @@ msgstr ""
 msgid "Cleaning environment variables"
 msgid "Cleaning environment variables"
 msgstr "Borrar las variables de entorno"
 msgstr "Borrar las variables de entorno"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:283
+#: src/components/ChatGPT/ChatGPT.vue:380
 #: src/components/Notification/Notification.vue:135
 #: src/components/Notification/Notification.vue:135
-#: src/views/notification/Notification.vue:43
+#: src/views/notification/Notification.vue:44
 msgid "Clear"
 msgid "Clear"
 msgstr "Borrar"
 msgstr "Borrar"
 
 
@@ -532,9 +542,9 @@ msgstr "Crear Archivo"
 msgid "Create Folder"
 msgid "Create Folder"
 msgstr "Crear carpeta"
 msgstr "Crear carpeta"
 
 
-#: src/views/notification/notificationColumns.tsx:56
+#: src/views/notification/notificationColumns.tsx:58
 #: src/views/preference/components/Passkey.vue:95
 #: src/views/preference/components/Passkey.vue:95
-#: src/views/site/site_category/columns.ts:14 src/views/user/userColumns.tsx:48
+#: src/views/site/site_category/columns.ts:15 src/views/user/userColumns.tsx:48
 msgid "Created at"
 msgid "Created at"
 msgstr "Creado el"
 msgstr "Creado el"
 
 
@@ -596,8 +606,8 @@ msgstr "Días"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/views/site/ngx_conf/NgxServer.vue:110
 #: src/views/site/ngx_conf/NgxServer.vue:110
 #: src/views/site/ngx_conf/NgxUpstream.vue:128
 #: src/views/site/ngx_conf/NgxUpstream.vue:128
-#: src/views/site/site_list/SiteList.vue:153
-#: src/views/stream/StreamList.vue:169
+#: src/views/site/site_list/SiteList.vue:154
+#: src/views/stream/StreamList.vue:174
 msgid "Delete"
 msgid "Delete"
 msgstr "Eliminar"
 msgstr "Eliminar"
 
 
@@ -618,7 +628,7 @@ msgstr "Borrado del sitio remoto correcto"
 msgid "Delete site: %{site_name}"
 msgid "Delete site: %{site_name}"
 msgstr "Eliminar sitio: %{site_name}"
 msgstr "Eliminar sitio: %{site_name}"
 
 
-#: src/views/stream/StreamList.vue:78
+#: src/views/stream/StreamList.vue:82
 msgid "Delete stream: %{stream_name}"
 msgid "Delete stream: %{stream_name}"
 msgstr "Eliminar stream: %{site_name}"
 msgstr "Eliminar stream: %{site_name}"
 
 
@@ -653,7 +663,7 @@ msgstr "Descripción"
 msgid "Destination file already exists"
 msgid "Destination file already exists"
 msgstr ""
 msgstr ""
 
 
-#: src/views/notification/notificationColumns.tsx:51
+#: src/views/notification/notificationColumns.tsx:52
 msgid "Details"
 msgid "Details"
 msgstr "Detalles"
 msgstr "Detalles"
 
 
@@ -681,12 +691,8 @@ msgstr ""
 msgid "Directives"
 msgid "Directives"
 msgstr "Directivas"
 msgstr "Directivas"
 
 
-#: src/views/config/configColumns.ts:22
-msgid "Directory"
-msgstr "Directorio"
-
-#: src/views/site/site_list/SiteList.vue:124
-#: src/views/stream/StreamList.vue:140
+#: src/views/site/site_list/SiteList.vue:125
+#: src/views/stream/StreamList.vue:145
 msgid "Disable"
 msgid "Disable"
 msgstr "Desactivar"
 msgstr "Desactivar"
 
 
@@ -711,19 +717,19 @@ msgstr "Error al deshabilitar el sitio %{site} en %{node}, respuesta: %{resp}"
 msgid "Disable Site %{site} on %{node} successfully"
 msgid "Disable Site %{site} on %{node} successfully"
 msgstr "Habilitado exitoso de %{conf_name} en %{node_name}"
 msgstr "Habilitado exitoso de %{conf_name} en %{node_name}"
 
 
-#: src/views/environment/envColumns.tsx:109
-#: src/views/environment/envColumns.tsx:92
+#: src/views/environment/envColumns.tsx:61
+#: src/views/environment/envColumns.tsx:79
 #: src/views/site/site_edit/SiteEdit.vue:190
 #: src/views/site/site_edit/SiteEdit.vue:190
-#: src/views/site/site_list/columns.tsx:51
-#: src/views/site/site_list/columns.tsx:60 src/views/stream/StreamEdit.vue:175
-#: src/views/stream/StreamList.vue:33 src/views/user/userColumns.tsx:41
+#: src/views/site/site_list/columns.tsx:53
+#: src/views/site/site_list/columns.tsx:62 src/views/stream/StreamEdit.vue:175
+#: src/views/stream/StreamList.vue:34 src/views/user/userColumns.tsx:41
 msgid "Disabled"
 msgid "Disabled"
 msgstr "Desactivado"
 msgstr "Desactivado"
 
 
 #: src/views/site/site_edit/RightSettings.vue:42
 #: src/views/site/site_edit/RightSettings.vue:42
 #: src/views/site/site_list/SiteList.vue:56
 #: src/views/site/site_list/SiteList.vue:56
 #: src/views/stream/components/RightSettings.vue:38
 #: src/views/stream/components/RightSettings.vue:38
-#: src/views/stream/StreamList.vue:67
+#: src/views/stream/StreamList.vue:71
 msgid "Disabled successfully"
 msgid "Disabled successfully"
 msgstr "Desactivado con éxito"
 msgstr "Desactivado con éxito"
 
 
@@ -816,7 +822,7 @@ msgstr "Error al descargar la última versión"
 msgid "Downloading latest release"
 msgid "Downloading latest release"
 msgstr "Descargando la última versión"
 msgstr "Descargando la última versión"
 
 
-#: src/views/environment/BatchUpgrader.vue:189 src/views/system/Upgrade.vue:215
+#: src/views/environment/BatchUpgrader.vue:188 src/views/system/Upgrade.vue:215
 msgid "Dry run mode enabled"
 msgid "Dry run mode enabled"
 msgstr "Modo de ejecución de prueba habilitado"
 msgstr "Modo de ejecución de prueba habilitado"
 
 
@@ -830,9 +836,9 @@ msgstr ""
 "ejecutan en el host local."
 "ejecutan en el host local."
 
 
 #: src/views/site/site_list/SiteDuplicate.vue:72
 #: src/views/site/site_list/SiteDuplicate.vue:72
-#: src/views/site/site_list/SiteList.vue:139
+#: src/views/site/site_list/SiteList.vue:140
 #: src/views/stream/components/StreamDuplicate.vue:121
 #: src/views/stream/components/StreamDuplicate.vue:121
-#: src/views/stream/StreamList.vue:155
+#: src/views/stream/StreamList.vue:160
 msgid "Duplicate"
 msgid "Duplicate"
 msgstr "Duplicar"
 msgstr "Duplicar"
 
 
@@ -883,9 +889,9 @@ msgstr "Correo"
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "Correo (*)"
 msgstr "Correo (*)"
 
 
-#: src/views/site/site_list/SiteList.vue:132
+#: src/views/site/site_list/SiteList.vue:133
 #: src/views/stream/components/Deploy.vue:80
 #: src/views/stream/components/Deploy.vue:80
-#: src/views/stream/StreamList.vue:148
+#: src/views/stream/StreamList.vue:153
 msgid "Enable"
 msgid "Enable"
 msgstr "Habilitar"
 msgstr "Habilitar"
 
 
@@ -942,15 +948,15 @@ msgstr "Habilitar TLS"
 msgid "Enable TOTP"
 msgid "Enable TOTP"
 msgstr "Habilitar TLS"
 msgstr "Habilitar TLS"
 
 
-#: src/views/environment/envColumns.tsx:100
-#: src/views/environment/envColumns.tsx:106
+#: src/views/environment/envColumns.tsx:70
+#: src/views/environment/envColumns.tsx:76
 #: src/views/preference/LogrotateSettings.vue:19
 #: src/views/preference/LogrotateSettings.vue:19
 #: src/views/site/site_edit/RightSettings.vue:82
 #: src/views/site/site_edit/RightSettings.vue:82
 #: src/views/site/site_edit/SiteEdit.vue:184
 #: src/views/site/site_edit/SiteEdit.vue:184
-#: src/views/site/site_list/columns.tsx:47
-#: src/views/site/site_list/columns.tsx:59
+#: src/views/site/site_list/columns.tsx:49
+#: src/views/site/site_list/columns.tsx:61
 #: src/views/stream/components/RightSettings.vue:76
 #: src/views/stream/components/RightSettings.vue:76
-#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:29
+#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:30
 #: src/views/user/userColumns.tsx:38
 #: src/views/user/userColumns.tsx:38
 msgid "Enabled"
 msgid "Enabled"
 msgstr "Habilitado"
 msgstr "Habilitado"
@@ -959,7 +965,7 @@ msgstr "Habilitado"
 #: src/views/site/site_list/SiteList.vue:46 src/views/site/SiteAdd.vue:40
 #: src/views/site/site_list/SiteList.vue:46 src/views/site/SiteAdd.vue:40
 #: src/views/stream/components/RightSettings.vue:29
 #: src/views/stream/components/RightSettings.vue:29
 #: src/views/stream/components/StreamDuplicate.vue:93
 #: src/views/stream/components/StreamDuplicate.vue:93
-#: src/views/stream/StreamList.vue:57
+#: src/views/stream/StreamList.vue:61
 msgid "Enabled successfully"
 msgid "Enabled successfully"
 msgstr "Habilitado con éxito"
 msgstr "Habilitado con éxito"
 
 
@@ -967,15 +973,12 @@ msgstr "Habilitado con éxito"
 msgid "Encrypt website with Let's Encrypt"
 msgid "Encrypt website with Let's Encrypt"
 msgstr "Encriptar sitio web con Let's Encrypt"
 msgstr "Encriptar sitio web con Let's Encrypt"
 
 
-#: src/routes/index.ts:234 src/views/environment/Environment.vue:32
-msgid "Environment"
-msgstr "Entorno"
-
 #: src/language/constants.ts:21
 #: src/language/constants.ts:21
 msgid "Environment variables cleaned"
 msgid "Environment variables cleaned"
 msgstr "Variables de entorno limpiadas"
 msgstr "Variables de entorno limpiadas"
 
 
-#: src/views/dashboard/Environments.vue:83
+#: src/routes/index.ts:234 src/views/dashboard/Environments.vue:83
+#: src/views/environment/Environment.vue:33
 msgid "Environments"
 msgid "Environments"
 msgstr "Entornos"
 msgstr "Entornos"
 
 
@@ -1017,14 +1020,14 @@ msgstr "Error al habilitar %{msg}"
 #: src/views/site/site_edit/RightSettings.vue:45
 #: src/views/site/site_edit/RightSettings.vue:45
 #: src/views/site/site_list/SiteList.vue:60
 #: src/views/site/site_list/SiteList.vue:60
 #: src/views/stream/components/RightSettings.vue:41
 #: src/views/stream/components/RightSettings.vue:41
-#: src/views/stream/StreamList.vue:71
+#: src/views/stream/StreamList.vue:75
 msgid "Failed to disable %{msg}"
 msgid "Failed to disable %{msg}"
 msgstr "Error al deshabilitar %{msg}"
 msgstr "Error al deshabilitar %{msg}"
 
 
 #: src/views/site/site_edit/RightSettings.vue:36
 #: src/views/site/site_edit/RightSettings.vue:36
 #: src/views/site/site_list/SiteList.vue:50
 #: src/views/site/site_list/SiteList.vue:50
 #: src/views/stream/components/RightSettings.vue:32
 #: src/views/stream/components/RightSettings.vue:32
-#: src/views/stream/StreamList.vue:61
+#: src/views/stream/StreamList.vue:65
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "Error al habilitar %{msg}"
 msgstr "Error al habilitar %{msg}"
 
 
@@ -1046,10 +1049,6 @@ msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgstr ""
 msgstr ""
 "No se pudo guardar, se detectó un error(es) de sintaxis en la configuración."
 "No se pudo guardar, se detectó un error(es) de sintaxis en la configuración."
 
 
-#: src/views/config/configColumns.ts:24
-msgid "File"
-msgstr "Archivo"
-
 #: src/language/constants.ts:31
 #: src/language/constants.ts:31
 msgid "File exists"
 msgid "File exists"
 msgstr "El archivo existe"
 msgstr "El archivo existe"
@@ -1111,7 +1110,7 @@ msgstr "Generar"
 msgid "Generating private key for registering account"
 msgid "Generating private key for registering account"
 msgstr "Generando clave privada para registrar cuenta"
 msgstr "Generando clave privada para registrar cuenta"
 
 
-#: src/views/environment/BatchUpgrader.vue:178 src/views/system/Upgrade.vue:169
+#: src/views/environment/BatchUpgrader.vue:177 src/views/system/Upgrade.vue:169
 msgid "Get release information error"
 msgid "Get release information error"
 msgstr "Obtener error de información de versión"
 msgstr "Obtener error de información de versión"
 
 
@@ -1227,7 +1226,7 @@ msgstr "Instalación exitosa"
 msgid "Interval"
 msgid "Interval"
 msgstr "Intervalo"
 msgstr "Intervalo"
 
 
-#: src/views/certificate/ACMEUser.vue:128
+#: src/views/certificate/ACMEUser.vue:129
 msgid "Invalid"
 msgid "Invalid"
 msgstr "Inválido"
 msgstr "Inválido"
 
 
@@ -1335,7 +1334,7 @@ msgstr "Lista"
 msgid "Load Average:"
 msgid "Load Average:"
 msgstr "Promedios de carga:"
 msgstr "Promedios de carga:"
 
 
-#: src/views/environment/Environment.vue:37
+#: src/views/environment/Environment.vue:39
 msgid "Load from settings"
 msgid "Load from settings"
 msgstr "Cargar desde configuraciones"
 msgstr "Cargar desde configuraciones"
 
 
@@ -1410,11 +1409,11 @@ msgstr "Administrar configuraciones"
 msgid "Manage Sites"
 msgid "Manage Sites"
 msgstr "Administrar sitios"
 msgstr "Administrar sitios"
 
 
-#: src/routes/index.ts:89 src/views/stream/StreamList.vue:115
+#: src/routes/index.ts:89 src/views/stream/StreamList.vue:119
 msgid "Manage Streams"
 msgid "Manage Streams"
 msgstr "Administrar Transmisiones"
 msgstr "Administrar Transmisiones"
 
 
-#: src/routes/index.ts:257 src/views/user/User.vue:9
+#: src/routes/index.ts:257 src/views/user/User.vue:10
 msgid "Manage Users"
 msgid "Manage Users"
 msgstr "Administrar usuarios"
 msgstr "Administrar usuarios"
 
 
@@ -1443,10 +1442,10 @@ msgstr "Minutos"
 msgid "Model"
 msgid "Model"
 msgstr "Modelo"
 msgstr "Modelo"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:256
+#: src/components/ChatGPT/ChatGPT.vue:352
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:151
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:151
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:498
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:498
-#: src/views/config/ConfigList.vue:158
+#: src/views/config/ConfigList.vue:159
 msgid "Modify"
 msgid "Modify"
 msgstr "Modificar"
 msgstr "Modificar"
 
 
@@ -1470,17 +1469,18 @@ msgstr "Directiva multilínea"
 #: src/views/certificate/CertificateEditor.vue:160
 #: src/views/certificate/CertificateEditor.vue:160
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/certificate/DNSCredential.vue:11
-#: src/views/config/components/Mkdir.vue:64 src/views/config/configColumns.ts:8
-#: src/views/config/ConfigEditor.vue:256 src/views/environment/envColumns.tsx:9
+#: src/views/config/components/Mkdir.vue:64
+#: src/views/config/configColumns.tsx:7 src/views/config/ConfigEditor.vue:256
+#: src/views/environment/envColumns.tsx:9
 #: src/views/preference/components/AddPasskey.vue:75
 #: src/views/preference/components/AddPasskey.vue:75
 #: src/views/site/ngx_conf/NgxUpstream.vue:177
 #: src/views/site/ngx_conf/NgxUpstream.vue:177
 #: src/views/site/site_category/columns.ts:7
 #: src/views/site/site_category/columns.ts:7
 #: src/views/site/site_edit/RightSettings.vue:88
 #: src/views/site/site_edit/RightSettings.vue:88
-#: src/views/site/site_list/columns.tsx:13
+#: src/views/site/site_list/columns.tsx:15
 #: src/views/site/site_list/SiteDuplicate.vue:79
 #: src/views/site/site_list/SiteDuplicate.vue:79
 #: src/views/stream/components/RightSettings.vue:82
 #: src/views/stream/components/RightSettings.vue:82
 #: src/views/stream/components/StreamDuplicate.vue:128
 #: src/views/stream/components/StreamDuplicate.vue:128
-#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:181
+#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:186
 msgid "Name"
 msgid "Name"
 msgstr "Nombre"
 msgstr "Nombre"
 
 
@@ -1602,20 +1602,20 @@ msgstr "Comando de inicio de terminal"
 msgid "Nginx restarted successfully"
 msgid "Nginx restarted successfully"
 msgstr "Nginx reiniciado con éxito"
 msgstr "Nginx reiniciado con éxito"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:277
+#: src/components/ChatGPT/ChatGPT.vue:374
 #: src/components/Notification/Notification.vue:128
 #: src/components/Notification/Notification.vue:128
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:510
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:510
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:524
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:524
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:538
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:538
-#: src/views/notification/Notification.vue:36
+#: src/views/notification/Notification.vue:37
 #: src/views/preference/AuthSettings.vue:136
 #: src/views/preference/AuthSettings.vue:136
 #: src/views/preference/CertSettings.vue:70
 #: src/views/preference/CertSettings.vue:70
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97
 #: src/views/site/ngx_conf/LocationEditor.vue:90
 #: src/views/site/ngx_conf/LocationEditor.vue:90
-#: src/views/site/site_list/SiteList.vue:142
-#: src/views/stream/StreamList.vue:158
+#: src/views/site/site_list/SiteList.vue:143
+#: src/views/stream/StreamList.vue:163
 msgid "No"
 msgid "No"
 msgstr "No"
 msgstr "No"
 
 
@@ -1654,7 +1654,7 @@ msgstr ""
 "configuraciones o certificados, sincronícelos con anticipación a los nodos "
 "configuraciones o certificados, sincronícelos con anticipación a los nodos "
 "remotos."
 "remotos."
 
 
-#: src/views/notification/Notification.vue:27
+#: src/views/notification/Notification.vue:28
 msgid "Notification"
 msgid "Notification"
 msgstr "Notificación"
 msgstr "Notificación"
 
 
@@ -1684,7 +1684,7 @@ msgstr ""
 
 
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/views/dashboard/Environments.vue:107
 #: src/views/dashboard/Environments.vue:107
-#: src/views/environment/envColumns.tsx:87
+#: src/views/environment/envColumns.tsx:56
 msgid "Offline"
 msgid "Offline"
 msgstr "Desconectado"
 msgstr "Desconectado"
 
 
@@ -1692,23 +1692,23 @@ msgstr "Desconectado"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:511
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:511
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:525
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:525
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:539
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:539
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:181
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:188
 msgid "Ok"
 msgid "Ok"
 msgstr "Ok"
 msgstr "Ok"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:278
+#: src/components/ChatGPT/ChatGPT.vue:375
 #: src/components/Notification/Notification.vue:129
 #: src/components/Notification/Notification.vue:129
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:95
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:95
-#: src/views/notification/Notification.vue:37
+#: src/views/notification/Notification.vue:38
 #: src/views/site/cert/components/ObtainCert.vue:139
 #: src/views/site/cert/components/ObtainCert.vue:139
 #: src/views/site/ngx_conf/NgxConfigEditor.vue:50
 #: src/views/site/ngx_conf/NgxConfigEditor.vue:50
 #: src/views/site/ngx_conf/NgxServer.vue:79
 #: src/views/site/ngx_conf/NgxServer.vue:79
 #: src/views/site/ngx_conf/NgxUpstream.vue:33
 #: src/views/site/ngx_conf/NgxUpstream.vue:33
 #: src/views/site/site_edit/RightSettings.vue:54
 #: src/views/site/site_edit/RightSettings.vue:54
-#: src/views/site/site_list/SiteList.vue:143
+#: src/views/site/site_list/SiteList.vue:144
 #: src/views/stream/components/Deploy.vue:19
 #: src/views/stream/components/Deploy.vue:19
 #: src/views/stream/components/RightSettings.vue:50
 #: src/views/stream/components/RightSettings.vue:50
-#: src/views/stream/StreamList.vue:159
+#: src/views/stream/StreamList.vue:164
 msgid "OK"
 msgid "OK"
 msgstr "OK"
 msgstr "OK"
 
 
@@ -1719,7 +1719,7 @@ msgstr "Una vez que se complete la verificación, los registros se eliminarán."
 #: src/components/NodeSelector/NodeSelector.vue:83
 #: src/components/NodeSelector/NodeSelector.vue:83
 #: src/components/NodeSelector/NodeSelector.vue:97
 #: src/components/NodeSelector/NodeSelector.vue:97
 #: src/views/dashboard/Environments.vue:100
 #: src/views/dashboard/Environments.vue:100
-#: src/views/environment/envColumns.tsx:83
+#: src/views/environment/envColumns.tsx:52
 msgid "Online"
 msgid "Online"
 msgstr "En línea"
 msgstr "En línea"
 
 
@@ -1808,7 +1808,7 @@ msgstr ""
 msgid "Payload resource is nil"
 msgid "Payload resource is nil"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/BatchUpgrader.vue:233
+#: src/views/environment/BatchUpgrader.vue:232
 msgid "Perform"
 msgid "Perform"
 msgstr "Realizar"
 msgstr "Realizar"
 
 
@@ -1902,7 +1902,7 @@ msgstr ""
 "Tenga en cuenta que las siguientes configuraciones de unidades de tiempo "
 "Tenga en cuenta que las siguientes configuraciones de unidades de tiempo "
 "están todas en segundos."
 "están todas en segundos."
 
 
-#: src/views/environment/Environment.vue:45
+#: src/views/environment/Environment.vue:48
 msgid "Please select at least one node to upgrade"
 msgid "Please select at least one node to upgrade"
 msgstr "Seleccione al menos un nodo para actualizar"
 msgstr "Seleccione al menos un nodo para actualizar"
 
 
@@ -1924,8 +1924,8 @@ msgstr ""
 "favor actualiza la interfaz de usuario de Nginx en el servidor remoto a la "
 "favor actualiza la interfaz de usuario de Nginx en el servidor remoto a la "
 "última versión"
 "última versión"
 
 
-#: src/views/environment/BatchUpgrader.vue:168
-#: src/views/environment/BatchUpgrader.vue:221 src/views/system/Upgrade.vue:194
+#: src/views/environment/BatchUpgrader.vue:167
+#: src/views/environment/BatchUpgrader.vue:220 src/views/system/Upgrade.vue:194
 #: src/views/system/Upgrade.vue:245
 #: src/views/system/Upgrade.vue:245
 msgid "Pre-release"
 msgid "Pre-release"
 msgstr "Prelanzamiento"
 msgstr "Prelanzamiento"
@@ -2003,11 +2003,11 @@ msgstr "Código de Recuperación:"
 msgid "Recursive Nameservers"
 msgid "Recursive Nameservers"
 msgstr "Servidores de nombres recursivos"
 msgstr "Servidores de nombres recursivos"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:290
+#: src/components/ChatGPT/ChatGPT.vue:387
 msgid "Regenerate response"
 msgid "Regenerate response"
 msgstr "Regenerar respuesta"
 msgstr "Regenerar respuesta"
 
 
-#: src/views/certificate/ACMEUser.vue:136
+#: src/views/certificate/ACMEUser.vue:137
 msgid "Register"
 msgid "Register"
 msgstr "Registrar"
 msgstr "Registrar"
 
 
@@ -2019,7 +2019,7 @@ msgstr ""
 "Registre un usuario o utilice esta cuenta para emitir un certificado a "
 "Registre un usuario o utilice esta cuenta para emitir un certificado a "
 "través de un proxy HTTP."
 "través de un proxy HTTP."
 
 
-#: src/views/certificate/ACMEUser.vue:105
+#: src/views/certificate/ACMEUser.vue:106
 msgid "Register failed"
 msgid "Register failed"
 msgstr "Fallo en el registro"
 msgstr "Fallo en el registro"
 
 
@@ -2033,7 +2033,7 @@ msgstr "Esto de registración"
 msgid "Register passkey successfully"
 msgid "Register passkey successfully"
 msgstr "Registrado con éxito"
 msgstr "Registrado con éxito"
 
 
-#: src/views/certificate/ACMEUser.vue:103
+#: src/views/certificate/ACMEUser.vue:104
 msgid "Register successfully"
 msgid "Register successfully"
 msgstr "Registrado con éxito"
 msgstr "Registrado con éxito"
 
 
@@ -2041,7 +2041,7 @@ msgstr "Registrado con éxito"
 msgid "Registering user"
 msgid "Registering user"
 msgstr "Registrando Usuario"
 msgstr "Registrando Usuario"
 
 
-#: src/views/certificate/ACMEUser.vue:119
+#: src/views/certificate/ACMEUser.vue:120
 msgid "Registration Status"
 msgid "Registration Status"
 msgstr "Esto de registración"
 msgstr "Esto de registración"
 
 
@@ -2053,7 +2053,7 @@ msgstr "Reinstalar"
 msgid "Release Note"
 msgid "Release Note"
 msgstr "Nota de versión"
 msgstr "Nota de versión"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:266
+#: src/components/ChatGPT/ChatGPT.vue:362
 #: src/components/NginxControl/NginxControl.vue:99
 #: src/components/NginxControl/NginxControl.vue:99
 msgid "Reload"
 msgid "Reload"
 msgstr "Recargar"
 msgstr "Recargar"
@@ -2091,7 +2091,7 @@ msgstr "Eliminado con éxito"
 
 
 #: src/views/config/components/ConfigName.vue:48
 #: src/views/config/components/ConfigName.vue:48
 #: src/views/config/components/Rename.vue:54
 #: src/views/config/components/Rename.vue:54
-#: src/views/config/ConfigList.vue:165
+#: src/views/config/ConfigList.vue:166
 #: src/views/site/ngx_conf/NgxUpstream.vue:125
 #: src/views/site/ngx_conf/NgxUpstream.vue:125
 #: src/views/site/site_edit/components/ConfigName.vue:44
 #: src/views/site/site_edit/components/ConfigName.vue:44
 msgid "Rename"
 msgid "Rename"
@@ -2203,7 +2203,7 @@ msgstr "Modo de ejecución"
 msgid "Running"
 msgid "Running"
 msgstr "Corriendo"
 msgstr "Corriendo"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:259
+#: src/components/ChatGPT/ChatGPT.vue:355
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:64
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:64
 #: src/components/StdDesign/StdDetail/StdDetail.vue:93
 #: src/components/StdDesign/StdDetail/StdDetail.vue:93
 #: src/views/certificate/CertificateEditor.vue:262
 #: src/views/certificate/CertificateEditor.vue:262
@@ -2278,7 +2278,7 @@ msgstr "SDK"
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr "El secreto ha sido copiado"
 msgstr "El secreto ha sido copiado"
 
 
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:182
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:189
 msgid "Selector"
 msgid "Selector"
 msgstr "Seleccionador"
 msgstr "Seleccionador"
 
 
@@ -2291,10 +2291,6 @@ msgstr ""
 msgid "Send"
 msgid "Send"
 msgstr "Enviado"
 msgstr "Enviado"
 
 
-#: src/lib/http/index.ts:128
-msgid "Server error"
-msgstr "Error del servidor"
-
 #: src/views/dashboard/ServerAnalytic.vue:179
 #: src/views/dashboard/ServerAnalytic.vue:179
 msgid "Server Info"
 msgid "Server Info"
 msgstr "Información del servidor"
 msgstr "Información del servidor"
@@ -2311,7 +2307,7 @@ msgstr "Se requiere el parámetro server_name"
 msgid "ServerIdx out of range"
 msgid "ServerIdx out of range"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/user.ts:9
+#: src/constants/errors/user.ts:11
 #, fuzzy
 #, fuzzy
 msgid "Session not found"
 msgid "Session not found"
 msgstr "Archivo no Encontrado"
 msgstr "Archivo no Encontrado"
@@ -2415,16 +2411,16 @@ msgstr "Ruta del certificado SSL"
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "Acceso SSO"
 msgstr "Acceso SSO"
 
 
-#: src/views/environment/BatchUpgrader.vue:165
-#: src/views/environment/BatchUpgrader.vue:215 src/views/system/Upgrade.vue:191
+#: src/views/environment/BatchUpgrader.vue:164
+#: src/views/environment/BatchUpgrader.vue:214 src/views/system/Upgrade.vue:191
 #: src/views/system/Upgrade.vue:239
 #: src/views/system/Upgrade.vue:239
 msgid "Stable"
 msgid "Stable"
 msgstr "Estable"
 msgstr "Estable"
 
 
 #: src/views/certificate/ACMEUser.vue:65
 #: src/views/certificate/ACMEUser.vue:65
 #: src/views/certificate/CertificateList/certColumns.tsx:68
 #: src/views/certificate/CertificateList/certColumns.tsx:68
-#: src/views/environment/envColumns.tsx:75
-#: src/views/site/site_list/columns.tsx:40 src/views/stream/StreamList.vue:22
+#: src/views/environment/envColumns.tsx:44
+#: src/views/site/site_list/columns.tsx:42 src/views/stream/StreamList.vue:23
 msgid "Status"
 msgid "Status"
 msgstr "Estado"
 msgstr "Estado"
 
 
@@ -2528,7 +2524,7 @@ msgstr "Error de Configuración de Sincronización"
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "Configuración de sincronización exitosa"
 msgstr "Configuración de sincronización exitosa"
 
 
-#: src/views/site/site_category/SiteCategory.vue:16
+#: src/views/site/site_category/SiteCategory.vue:17
 #, fuzzy
 #, fuzzy
 msgid "Sync Nodes"
 msgid "Sync Nodes"
 msgstr "Sincronizar con"
 msgstr "Sincronizar con"
@@ -2724,7 +2720,7 @@ msgstr ""
 msgid "This value is already taken"
 msgid "This value is already taken"
 msgstr "Este valor ya está elegido"
 msgstr "Este valor ya está elegido"
 
 
-#: src/views/environment/BatchUpgrader.vue:183
+#: src/views/environment/BatchUpgrader.vue:182
 msgid ""
 msgid ""
 "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgstr ""
 msgstr ""
@@ -2817,7 +2813,6 @@ msgid "Two-factor authentication required"
 msgstr "Se requiere autenticación de dos factores"
 msgstr "Se requiere autenticación de dos factores"
 
 
 #: src/views/certificate/CertificateList/certColumns.tsx:25
 #: src/views/certificate/CertificateList/certColumns.tsx:25
-#: src/views/config/configColumns.ts:16
 #: src/views/notification/notificationColumns.tsx:9
 #: src/views/notification/notificationColumns.tsx:9
 msgid "Type"
 msgid "Type"
 msgstr "Tipo"
 msgstr "Tipo"
@@ -2829,13 +2824,13 @@ msgstr "Actualización exitosa"
 
 
 #: src/views/certificate/ACMEUser.vue:88
 #: src/views/certificate/ACMEUser.vue:88
 #: src/views/certificate/DNSCredential.vue:27
 #: src/views/certificate/DNSCredential.vue:27
-#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:276
-#: src/views/environment/envColumns.tsx:119
-#: src/views/site/site_category/columns.ts:20
+#: src/views/config/configColumns.tsx:34 src/views/config/ConfigEditor.vue:276
+#: src/views/environment/envColumns.tsx:90
+#: src/views/site/site_category/columns.ts:22
 #: src/views/site/site_edit/RightSettings.vue:100
 #: src/views/site/site_edit/RightSettings.vue:100
-#: src/views/site/site_list/columns.tsx:67
+#: src/views/site/site_list/columns.tsx:69
 #: src/views/stream/components/RightSettings.vue:85
 #: src/views/stream/components/RightSettings.vue:85
-#: src/views/stream/StreamList.vue:41 src/views/user/userColumns.tsx:54
+#: src/views/stream/StreamList.vue:43 src/views/user/userColumns.tsx:54
 msgid "Updated at"
 msgid "Updated at"
 msgstr "Actualizado a"
 msgstr "Actualizado a"
 
 
@@ -2843,12 +2838,12 @@ msgstr "Actualizado a"
 msgid "Updated successfully"
 msgid "Updated successfully"
 msgstr "Actualización exitosa"
 msgstr "Actualización exitosa"
 
 
-#: src/routes/index.ts:297 src/views/environment/Environment.vue:53
+#: src/routes/index.ts:297 src/views/environment/Environment.vue:56
 #: src/views/system/Upgrade.vue:143 src/views/system/Upgrade.vue:226
 #: src/views/system/Upgrade.vue:143 src/views/system/Upgrade.vue:226
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr "Actualizar"
 msgstr "Actualizar"
 
 
-#: src/views/environment/BatchUpgrader.vue:138
+#: src/views/environment/BatchUpgrader.vue:137
 msgid "Upgraded Nginx UI on %{node} successfully 🎉"
 msgid "Upgraded Nginx UI on %{node} successfully 🎉"
 msgstr "Interfaz de usuario de Nginx actualizada en %{node} con éxito 🎉"
 msgstr "Interfaz de usuario de Nginx actualizada en %{node} con éxito 🎉"
 
 
@@ -2856,7 +2851,7 @@ msgstr "Interfaz de usuario de Nginx actualizada en %{node} con éxito 🎉"
 msgid "Upgraded successfully"
 msgid "Upgraded successfully"
 msgstr "Actualización exitosa"
 msgstr "Actualización exitosa"
 
 
-#: src/views/environment/BatchUpgrader.vue:89 src/views/system/Upgrade.vue:77
+#: src/views/environment/BatchUpgrader.vue:88 src/views/system/Upgrade.vue:77
 msgid "Upgrading Nginx UI, please wait..."
 msgid "Upgrading Nginx UI, please wait..."
 msgstr "Actualizando Nginx UI, por favor espere..."
 msgstr "Actualizando Nginx UI, por favor espere..."
 
 
@@ -2868,7 +2863,7 @@ msgstr "Nombre de la Transmisión"
 msgid "Uptime:"
 msgid "Uptime:"
 msgstr "Tiempo encendido:"
 msgstr "Tiempo encendido:"
 
 
-#: src/views/environment/envColumns.tsx:18
+#: src/views/environment/envColumns.tsx:19
 msgid "URL"
 msgid "URL"
 msgstr "URL"
 msgstr "URL"
 
 
@@ -2880,7 +2875,7 @@ msgstr "Usar OTP"
 msgid "Use recovery code"
 msgid "Use recovery code"
 msgstr "Usar código de recuperación"
 msgstr "Usar código de recuperación"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:237
+#: src/components/ChatGPT/ChatGPT.vue:333
 msgid "User"
 msgid "User"
 msgstr "Usuario"
 msgstr "Usuario"
 
 
@@ -2901,13 +2896,13 @@ msgstr "Nombre de usuario"
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr "Nombre de usuario (*)"
 msgstr "Nombre de usuario (*)"
 
 
-#: src/views/certificate/ACMEUser.vue:123
+#: src/views/certificate/ACMEUser.vue:124
 #: src/views/certificate/CertificateList/certColumns.tsx:81
 #: src/views/certificate/CertificateList/certColumns.tsx:81
 #: src/views/site/cert/CertInfo.vue:24
 #: src/views/site/cert/CertInfo.vue:24
 msgid "Valid"
 msgid "Valid"
 msgstr "Válido"
 msgstr "Válido"
 
 
-#: src/views/environment/envColumns.tsx:29
+#: src/views/environment/envColumns.tsx:31
 msgid "Version"
 msgid "Version"
 msgstr "Versión"
 msgstr "Versión"
 
 
@@ -3018,6 +3013,18 @@ msgstr ""
 msgid "Your passkeys"
 msgid "Your passkeys"
 msgstr "Sus llaves de acceso"
 msgstr "Sus llaves de acceso"
 
 
+#~ msgid "Directory"
+#~ msgstr "Directorio"
+
+#~ msgid "Environment"
+#~ msgstr "Entorno"
+
+#~ msgid "File"
+#~ msgstr "Archivo"
+
+#~ msgid "Server error"
+#~ msgstr "Error del servidor"
+
 #~ msgid "Incorrect username or password"
 #~ msgid "Incorrect username or password"
 #~ msgstr "Nombre de usuario o contraseña incorrectos"
 #~ msgstr "Nombre de usuario o contraseña incorrectos"
 
 

+ 127 - 124
app/src/language/fr_FR/app.po

@@ -27,7 +27,7 @@ msgstr "À propos"
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr "Journaux d'accès"
 msgstr "Journaux d'accès"
 
 
-#: src/routes/index.ts:148 src/views/certificate/ACMEUser.vue:112
+#: src/routes/index.ts:148 src/views/certificate/ACMEUser.vue:113
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
 #, fuzzy
 #, fuzzy
 msgid "ACME User"
 msgid "ACME User"
@@ -36,12 +36,12 @@ msgstr "Nom d'utilisateur"
 #: src/views/certificate/ACMEUser.vue:95
 #: src/views/certificate/ACMEUser.vue:95
 #: src/views/certificate/CertificateList/certColumns.tsx:97
 #: src/views/certificate/CertificateList/certColumns.tsx:97
 #: src/views/certificate/DNSCredential.vue:33
 #: src/views/certificate/DNSCredential.vue:33
-#: src/views/config/configColumns.ts:38
-#: src/views/environment/envColumns.tsx:125
-#: src/views/notification/notificationColumns.tsx:62
+#: src/views/config/configColumns.tsx:42
+#: src/views/environment/envColumns.tsx:97
+#: src/views/notification/notificationColumns.tsx:65
 #: src/views/preference/AuthSettings.vue:26
 #: src/views/preference/AuthSettings.vue:26
-#: src/views/site/site_category/columns.ts:26
-#: src/views/site/site_list/columns.tsx:74 src/views/stream/StreamList.vue:47
+#: src/views/site/site_category/columns.ts:29
+#: src/views/site/site_list/columns.tsx:76 src/views/stream/StreamList.vue:49
 #: src/views/user/userColumns.tsx:60
 #: src/views/user/userColumns.tsx:60
 msgid "Action"
 msgid "Action"
 msgstr "Action"
 msgstr "Action"
@@ -52,7 +52,7 @@ msgstr "Action"
 #: src/views/site/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/site/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/site/ngx_conf/NgxServer.vue:162
 #: src/views/site/ngx_conf/NgxServer.vue:162
 #: src/views/site/ngx_conf/NgxUpstream.vue:154
 #: src/views/site/ngx_conf/NgxUpstream.vue:154
-#: src/views/stream/StreamList.vue:117
+#: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr "Ajouter"
 msgstr "Ajouter"
 
 
@@ -80,12 +80,12 @@ msgstr "Ajouter une localisation"
 msgid "Add Site"
 msgid "Add Site"
 msgstr "Ajouter un site"
 msgstr "Ajouter un site"
 
 
-#: src/views/stream/StreamList.vue:176
+#: src/views/stream/StreamList.vue:181
 #, fuzzy
 #, fuzzy
 msgid "Add Stream"
 msgid "Add Stream"
 msgstr "Ajouter un site"
 msgstr "Ajouter un site"
 
 
-#: src/views/stream/StreamList.vue:109
+#: src/views/stream/StreamList.vue:113
 #, fuzzy
 #, fuzzy
 msgid "Added successfully"
 msgid "Added successfully"
 msgstr "Mis à jour avec succés"
 msgstr "Mis à jour avec succés"
@@ -161,12 +161,12 @@ msgid "Are you sure you want to apply to all selected?"
 msgstr "Etes-vous sûr que vous voulez supprimer ?"
 msgstr "Etes-vous sûr que vous voulez supprimer ?"
 
 
 #: src/components/Notification/Notification.vue:130
 #: src/components/Notification/Notification.vue:130
-#: src/views/notification/Notification.vue:38
+#: src/views/notification/Notification.vue:39
 #, fuzzy
 #, fuzzy
 msgid "Are you sure you want to clear all notifications?"
 msgid "Are you sure you want to clear all notifications?"
 msgstr "Voulez-vous vraiment effacer l'historique du chat ?"
 msgstr "Voulez-vous vraiment effacer l'historique du chat ?"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:279
+#: src/components/ChatGPT/ChatGPT.vue:376
 msgid "Are you sure you want to clear the record of chat?"
 msgid "Are you sure you want to clear the record of chat?"
 msgstr "Voulez-vous vraiment effacer l'historique du chat ?"
 msgstr "Voulez-vous vraiment effacer l'historique du chat ?"
 
 
@@ -180,8 +180,8 @@ msgstr "Etes-vous sûr que vous voulez supprimer ?"
 msgid "Are you sure you want to delete this item?"
 msgid "Are you sure you want to delete this item?"
 msgstr "Etes-vous sûr que vous voulez supprimer ?"
 msgstr "Etes-vous sûr que vous voulez supprimer ?"
 
 
-#: src/views/site/site_list/SiteList.vue:144
-#: src/views/stream/StreamList.vue:160
+#: src/views/site/site_list/SiteList.vue:145
+#: src/views/stream/StreamList.vue:165
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr "Etes-vous sûr que vous voulez supprimer ?"
 msgstr "Etes-vous sûr que vous voulez supprimer ?"
 
 
@@ -203,12 +203,12 @@ msgstr "Voulez-vous vraiment supprimer cette directive ?"
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "Voulez-vous vraiment supprimer cette localisation ?"
 msgstr "Voulez-vous vraiment supprimer cette localisation ?"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:223
+#: src/components/ChatGPT/ChatGPT.vue:318
 #, fuzzy
 #, fuzzy
 msgid "Ask ChatGPT for Help"
 msgid "Ask ChatGPT for Help"
 msgstr "Modèle ChatGPT"
 msgstr "Modèle ChatGPT"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:237
+#: src/components/ChatGPT/ChatGPT.vue:333
 msgid "Assistant"
 msgid "Assistant"
 msgstr ""
 msgstr ""
 
 
@@ -252,7 +252,7 @@ msgstr "Renouvellement automatique activé pour %{name}"
 
 
 #: src/views/certificate/CertificateEditor.vue:255
 #: src/views/certificate/CertificateEditor.vue:255
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:106
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:106
-#: src/views/config/ConfigList.vue:179 src/views/nginx_log/NginxLog.vue:173
+#: src/views/config/ConfigList.vue:180 src/views/nginx_log/NginxLog.vue:173
 #: src/views/site/site_edit/SiteEdit.vue:264
 #: src/views/site/site_edit/SiteEdit.vue:264
 #: src/views/stream/StreamEdit.vue:245
 #: src/views/stream/StreamEdit.vue:245
 msgid "Back"
 msgid "Back"
@@ -305,7 +305,7 @@ msgstr "Action"
 msgid "Batch Modify"
 msgid "Batch Modify"
 msgstr "Batch Modify"
 msgstr "Batch Modify"
 
 
-#: src/views/environment/BatchUpgrader.vue:153
+#: src/views/environment/BatchUpgrader.vue:152
 #, fuzzy
 #, fuzzy
 msgid "Batch Upgrade"
 msgid "Batch Upgrade"
 msgstr "Mettre à niveau"
 msgstr "Mettre à niveau"
@@ -334,9 +334,9 @@ msgstr ""
 msgid "Can't scan? Use text key binding"
 msgid "Can't scan? Use text key binding"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:260
+#: src/components/ChatGPT/ChatGPT.vue:356
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:180
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:187
 #: src/components/StdDesign/StdDetail/StdDetail.vue:101
 #: src/components/StdDesign/StdDetail/StdDetail.vue:101
 #: src/views/preference/components/Passkey.vue:141
 #: src/views/preference/components/Passkey.vue:141
 #: src/views/site/cert/components/ObtainCert.vue:140
 #: src/views/site/cert/components/ObtainCert.vue:140
@@ -349,8 +349,17 @@ msgstr ""
 msgid "Cancel"
 msgid "Cancel"
 msgstr "Annuler"
 msgstr "Annuler"
 
 
+#: src/constants/errors/user.ts:10
+#, fuzzy
+msgid "Cannot change initial user password in demo mode"
+msgstr "Interdire la modification du mot de passe root dans la démo"
+
+#: src/constants/errors/user.ts:9
+msgid "Cannot remove initial user"
+msgstr ""
+
 #: src/views/site/site_edit/RightSettings.vue:91
 #: src/views/site/site_edit/RightSettings.vue:91
-#: src/views/site/site_list/columns.tsx:23
+#: src/views/site/site_list/columns.tsx:25
 msgid "Category"
 msgid "Category"
 msgstr ""
 msgstr ""
 
 
@@ -418,7 +427,7 @@ msgstr[1] "Changer de certificat"
 msgid "Changed Path"
 msgid "Changed Path"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/views/environment/BatchUpgrader.vue:160 src/views/system/Upgrade.vue:188
+#: src/views/environment/BatchUpgrader.vue:159 src/views/system/Upgrade.vue:188
 msgid "Channel"
 msgid "Channel"
 msgstr ""
 msgstr ""
 
 
@@ -454,9 +463,9 @@ msgstr ""
 msgid "Cleaning environment variables"
 msgid "Cleaning environment variables"
 msgstr "Nettoyage des variables d'environnement"
 msgstr "Nettoyage des variables d'environnement"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:283
+#: src/components/ChatGPT/ChatGPT.vue:380
 #: src/components/Notification/Notification.vue:135
 #: src/components/Notification/Notification.vue:135
-#: src/views/notification/Notification.vue:43
+#: src/views/notification/Notification.vue:44
 msgid "Clear"
 msgid "Clear"
 msgstr "Effacer"
 msgstr "Effacer"
 
 
@@ -552,9 +561,9 @@ msgstr "Créé le"
 msgid "Create Folder"
 msgid "Create Folder"
 msgstr "Créer un autre"
 msgstr "Créer un autre"
 
 
-#: src/views/notification/notificationColumns.tsx:56
+#: src/views/notification/notificationColumns.tsx:58
 #: src/views/preference/components/Passkey.vue:95
 #: src/views/preference/components/Passkey.vue:95
-#: src/views/site/site_category/columns.ts:14 src/views/user/userColumns.tsx:48
+#: src/views/site/site_category/columns.ts:15 src/views/user/userColumns.tsx:48
 msgid "Created at"
 msgid "Created at"
 msgstr "Créé le"
 msgstr "Créé le"
 
 
@@ -615,8 +624,8 @@ msgstr ""
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/views/site/ngx_conf/NgxServer.vue:110
 #: src/views/site/ngx_conf/NgxServer.vue:110
 #: src/views/site/ngx_conf/NgxUpstream.vue:128
 #: src/views/site/ngx_conf/NgxUpstream.vue:128
-#: src/views/site/site_list/SiteList.vue:153
-#: src/views/stream/StreamList.vue:169
+#: src/views/site/site_list/SiteList.vue:154
+#: src/views/stream/StreamList.vue:174
 msgid "Delete"
 msgid "Delete"
 msgstr "Supprimer"
 msgstr "Supprimer"
 
 
@@ -639,7 +648,7 @@ msgstr "Changer de certificat"
 msgid "Delete site: %{site_name}"
 msgid "Delete site: %{site_name}"
 msgstr "Supprimer le site : %{site_name}"
 msgstr "Supprimer le site : %{site_name}"
 
 
-#: src/views/stream/StreamList.vue:78
+#: src/views/stream/StreamList.vue:82
 #, fuzzy
 #, fuzzy
 msgid "Delete stream: %{stream_name}"
 msgid "Delete stream: %{stream_name}"
 msgstr "Supprimer le site : %{site_name}"
 msgstr "Supprimer le site : %{site_name}"
@@ -677,7 +686,7 @@ msgstr "Description"
 msgid "Destination file already exists"
 msgid "Destination file already exists"
 msgstr ""
 msgstr ""
 
 
-#: src/views/notification/notificationColumns.tsx:51
+#: src/views/notification/notificationColumns.tsx:52
 msgid "Details"
 msgid "Details"
 msgstr ""
 msgstr ""
 
 
@@ -705,13 +714,8 @@ msgstr ""
 msgid "Directives"
 msgid "Directives"
 msgstr "Directives"
 msgstr "Directives"
 
 
-#: src/views/config/configColumns.ts:22
-#, fuzzy
-msgid "Directory"
-msgstr "Directive"
-
-#: src/views/site/site_list/SiteList.vue:124
-#: src/views/stream/StreamList.vue:140
+#: src/views/site/site_list/SiteList.vue:125
+#: src/views/stream/StreamList.vue:145
 #, fuzzy
 #, fuzzy
 msgid "Disable"
 msgid "Disable"
 msgstr "Désactivé"
 msgstr "Désactivé"
@@ -740,19 +744,19 @@ msgstr "Dupliqué avec succès"
 msgid "Disable Site %{site} on %{node} successfully"
 msgid "Disable Site %{site} on %{node} successfully"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
 
 
-#: src/views/environment/envColumns.tsx:109
-#: src/views/environment/envColumns.tsx:92
+#: src/views/environment/envColumns.tsx:61
+#: src/views/environment/envColumns.tsx:79
 #: src/views/site/site_edit/SiteEdit.vue:190
 #: src/views/site/site_edit/SiteEdit.vue:190
-#: src/views/site/site_list/columns.tsx:51
-#: src/views/site/site_list/columns.tsx:60 src/views/stream/StreamEdit.vue:175
-#: src/views/stream/StreamList.vue:33 src/views/user/userColumns.tsx:41
+#: src/views/site/site_list/columns.tsx:53
+#: src/views/site/site_list/columns.tsx:62 src/views/stream/StreamEdit.vue:175
+#: src/views/stream/StreamList.vue:34 src/views/user/userColumns.tsx:41
 msgid "Disabled"
 msgid "Disabled"
 msgstr "Désactivé"
 msgstr "Désactivé"
 
 
 #: src/views/site/site_edit/RightSettings.vue:42
 #: src/views/site/site_edit/RightSettings.vue:42
 #: src/views/site/site_list/SiteList.vue:56
 #: src/views/site/site_list/SiteList.vue:56
 #: src/views/stream/components/RightSettings.vue:38
 #: src/views/stream/components/RightSettings.vue:38
-#: src/views/stream/StreamList.vue:67
+#: src/views/stream/StreamList.vue:71
 msgid "Disabled successfully"
 msgid "Disabled successfully"
 msgstr "Désactivé avec succès"
 msgstr "Désactivé avec succès"
 
 
@@ -850,7 +854,7 @@ msgstr "Erreur de téléchargement de la dernière version"
 msgid "Downloading latest release"
 msgid "Downloading latest release"
 msgstr "Téléchargement de la dernière version"
 msgstr "Téléchargement de la dernière version"
 
 
-#: src/views/environment/BatchUpgrader.vue:189 src/views/system/Upgrade.vue:215
+#: src/views/environment/BatchUpgrader.vue:188 src/views/system/Upgrade.vue:215
 msgid "Dry run mode enabled"
 msgid "Dry run mode enabled"
 msgstr ""
 msgstr ""
 
 
@@ -861,9 +865,9 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #: src/views/site/site_list/SiteDuplicate.vue:72
 #: src/views/site/site_list/SiteDuplicate.vue:72
-#: src/views/site/site_list/SiteList.vue:139
+#: src/views/site/site_list/SiteList.vue:140
 #: src/views/stream/components/StreamDuplicate.vue:121
 #: src/views/stream/components/StreamDuplicate.vue:121
-#: src/views/stream/StreamList.vue:155
+#: src/views/stream/StreamList.vue:160
 msgid "Duplicate"
 msgid "Duplicate"
 msgstr "Dupliquer"
 msgstr "Dupliquer"
 
 
@@ -920,9 +924,9 @@ msgstr "Email (*)"
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "Email (*)"
 msgstr "Email (*)"
 
 
-#: src/views/site/site_list/SiteList.vue:132
+#: src/views/site/site_list/SiteList.vue:133
 #: src/views/stream/components/Deploy.vue:80
 #: src/views/stream/components/Deploy.vue:80
-#: src/views/stream/StreamList.vue:148
+#: src/views/stream/StreamList.vue:153
 #, fuzzy
 #, fuzzy
 msgid "Enable"
 msgid "Enable"
 msgstr "Activé"
 msgstr "Activé"
@@ -982,15 +986,15 @@ msgstr "Activer TLS"
 msgid "Enable TOTP"
 msgid "Enable TOTP"
 msgstr "Activer TLS"
 msgstr "Activer TLS"
 
 
-#: src/views/environment/envColumns.tsx:100
-#: src/views/environment/envColumns.tsx:106
+#: src/views/environment/envColumns.tsx:70
+#: src/views/environment/envColumns.tsx:76
 #: src/views/preference/LogrotateSettings.vue:19
 #: src/views/preference/LogrotateSettings.vue:19
 #: src/views/site/site_edit/RightSettings.vue:82
 #: src/views/site/site_edit/RightSettings.vue:82
 #: src/views/site/site_edit/SiteEdit.vue:184
 #: src/views/site/site_edit/SiteEdit.vue:184
-#: src/views/site/site_list/columns.tsx:47
-#: src/views/site/site_list/columns.tsx:59
+#: src/views/site/site_list/columns.tsx:49
+#: src/views/site/site_list/columns.tsx:61
 #: src/views/stream/components/RightSettings.vue:76
 #: src/views/stream/components/RightSettings.vue:76
-#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:29
+#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:30
 #: src/views/user/userColumns.tsx:38
 #: src/views/user/userColumns.tsx:38
 msgid "Enabled"
 msgid "Enabled"
 msgstr "Activé"
 msgstr "Activé"
@@ -999,7 +1003,7 @@ msgstr "Activé"
 #: src/views/site/site_list/SiteList.vue:46 src/views/site/SiteAdd.vue:40
 #: src/views/site/site_list/SiteList.vue:46 src/views/site/SiteAdd.vue:40
 #: src/views/stream/components/RightSettings.vue:29
 #: src/views/stream/components/RightSettings.vue:29
 #: src/views/stream/components/StreamDuplicate.vue:93
 #: src/views/stream/components/StreamDuplicate.vue:93
-#: src/views/stream/StreamList.vue:57
+#: src/views/stream/StreamList.vue:61
 msgid "Enabled successfully"
 msgid "Enabled successfully"
 msgstr "Activé avec succès"
 msgstr "Activé avec succès"
 
 
@@ -1007,16 +1011,13 @@ msgstr "Activé avec succès"
 msgid "Encrypt website with Let's Encrypt"
 msgid "Encrypt website with Let's Encrypt"
 msgstr "Crypter le site Web avec Let's Encrypt"
 msgstr "Crypter le site Web avec Let's Encrypt"
 
 
-#: src/routes/index.ts:234 src/views/environment/Environment.vue:32
-msgid "Environment"
-msgstr ""
-
 #: src/language/constants.ts:21
 #: src/language/constants.ts:21
 #, fuzzy
 #, fuzzy
 msgid "Environment variables cleaned"
 msgid "Environment variables cleaned"
 msgstr "Définition des variables d'environnement"
 msgstr "Définition des variables d'environnement"
 
 
-#: src/views/dashboard/Environments.vue:83
+#: src/routes/index.ts:234 src/views/dashboard/Environments.vue:83
+#: src/views/environment/Environment.vue:33
 #, fuzzy
 #, fuzzy
 msgid "Environments"
 msgid "Environments"
 msgstr "Commentaires"
 msgstr "Commentaires"
@@ -1061,14 +1062,14 @@ msgstr "Impossible d'activer %{msg}"
 #: src/views/site/site_edit/RightSettings.vue:45
 #: src/views/site/site_edit/RightSettings.vue:45
 #: src/views/site/site_list/SiteList.vue:60
 #: src/views/site/site_list/SiteList.vue:60
 #: src/views/stream/components/RightSettings.vue:41
 #: src/views/stream/components/RightSettings.vue:41
-#: src/views/stream/StreamList.vue:71
+#: src/views/stream/StreamList.vue:75
 msgid "Failed to disable %{msg}"
 msgid "Failed to disable %{msg}"
 msgstr "Impossible de désactiver %{msg}"
 msgstr "Impossible de désactiver %{msg}"
 
 
 #: src/views/site/site_edit/RightSettings.vue:36
 #: src/views/site/site_edit/RightSettings.vue:36
 #: src/views/site/site_list/SiteList.vue:50
 #: src/views/site/site_list/SiteList.vue:50
 #: src/views/stream/components/RightSettings.vue:32
 #: src/views/stream/components/RightSettings.vue:32
-#: src/views/stream/StreamList.vue:61
+#: src/views/stream/StreamList.vue:65
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "Impossible d'activer %{msg}"
 msgstr "Impossible d'activer %{msg}"
 
 
@@ -1091,10 +1092,6 @@ msgstr ""
 "Échec de l'enregistrement, une ou plusieurs erreurs de syntaxe ont été "
 "Échec de l'enregistrement, une ou plusieurs erreurs de syntaxe ont été "
 "détectées dans la configuration."
 "détectées dans la configuration."
 
 
-#: src/views/config/configColumns.ts:24
-msgid "File"
-msgstr "Fichier"
-
 #: src/language/constants.ts:31
 #: src/language/constants.ts:31
 msgid "File exists"
 msgid "File exists"
 msgstr "Le fichier existe"
 msgstr "Le fichier existe"
@@ -1156,7 +1153,7 @@ msgstr "Générer"
 msgid "Generating private key for registering account"
 msgid "Generating private key for registering account"
 msgstr "Génération de clé privée pour l'enregistrement du compte"
 msgstr "Génération de clé privée pour l'enregistrement du compte"
 
 
-#: src/views/environment/BatchUpgrader.vue:178 src/views/system/Upgrade.vue:169
+#: src/views/environment/BatchUpgrader.vue:177 src/views/system/Upgrade.vue:169
 msgid "Get release information error"
 msgid "Get release information error"
 msgstr "Erreur d'obtention des informations sur la version"
 msgstr "Erreur d'obtention des informations sur la version"
 
 
@@ -1266,7 +1263,7 @@ msgstr "Installé avec succès"
 msgid "Interval"
 msgid "Interval"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:128
+#: src/views/certificate/ACMEUser.vue:129
 msgid "Invalid"
 msgid "Invalid"
 msgstr ""
 msgstr ""
 
 
@@ -1379,7 +1376,7 @@ msgstr ""
 msgid "Load Average:"
 msgid "Load Average:"
 msgstr "Charges moyennes :"
 msgstr "Charges moyennes :"
 
 
-#: src/views/environment/Environment.vue:37
+#: src/views/environment/Environment.vue:39
 msgid "Load from settings"
 msgid "Load from settings"
 msgstr ""
 msgstr ""
 
 
@@ -1453,12 +1450,12 @@ msgstr "Gérer les configurations"
 msgid "Manage Sites"
 msgid "Manage Sites"
 msgstr "Gérer les sites"
 msgstr "Gérer les sites"
 
 
-#: src/routes/index.ts:89 src/views/stream/StreamList.vue:115
+#: src/routes/index.ts:89 src/views/stream/StreamList.vue:119
 #, fuzzy
 #, fuzzy
 msgid "Manage Streams"
 msgid "Manage Streams"
 msgstr "Gérer les sites"
 msgstr "Gérer les sites"
 
 
-#: src/routes/index.ts:257 src/views/user/User.vue:9
+#: src/routes/index.ts:257 src/views/user/User.vue:10
 msgid "Manage Users"
 msgid "Manage Users"
 msgstr "Gérer les utilisateurs"
 msgstr "Gérer les utilisateurs"
 
 
@@ -1489,10 +1486,10 @@ msgstr ""
 msgid "Model"
 msgid "Model"
 msgstr "Mode d'exécution"
 msgstr "Mode d'exécution"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:256
+#: src/components/ChatGPT/ChatGPT.vue:352
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:151
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:151
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:498
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:498
-#: src/views/config/ConfigList.vue:158
+#: src/views/config/ConfigList.vue:159
 msgid "Modify"
 msgid "Modify"
 msgstr "Modifier"
 msgstr "Modifier"
 
 
@@ -1518,17 +1515,18 @@ msgstr "Directive multiligne"
 #: src/views/certificate/CertificateEditor.vue:160
 #: src/views/certificate/CertificateEditor.vue:160
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/certificate/DNSCredential.vue:11
-#: src/views/config/components/Mkdir.vue:64 src/views/config/configColumns.ts:8
-#: src/views/config/ConfigEditor.vue:256 src/views/environment/envColumns.tsx:9
+#: src/views/config/components/Mkdir.vue:64
+#: src/views/config/configColumns.tsx:7 src/views/config/ConfigEditor.vue:256
+#: src/views/environment/envColumns.tsx:9
 #: src/views/preference/components/AddPasskey.vue:75
 #: src/views/preference/components/AddPasskey.vue:75
 #: src/views/site/ngx_conf/NgxUpstream.vue:177
 #: src/views/site/ngx_conf/NgxUpstream.vue:177
 #: src/views/site/site_category/columns.ts:7
 #: src/views/site/site_category/columns.ts:7
 #: src/views/site/site_edit/RightSettings.vue:88
 #: src/views/site/site_edit/RightSettings.vue:88
-#: src/views/site/site_list/columns.tsx:13
+#: src/views/site/site_list/columns.tsx:15
 #: src/views/site/site_list/SiteDuplicate.vue:79
 #: src/views/site/site_list/SiteDuplicate.vue:79
 #: src/views/stream/components/RightSettings.vue:82
 #: src/views/stream/components/RightSettings.vue:82
 #: src/views/stream/components/StreamDuplicate.vue:128
 #: src/views/stream/components/StreamDuplicate.vue:128
-#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:181
+#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:186
 msgid "Name"
 msgid "Name"
 msgstr "Nom"
 msgstr "Nom"
 
 
@@ -1653,20 +1651,20 @@ msgstr "Commande de démarrage du terminal"
 msgid "Nginx restarted successfully"
 msgid "Nginx restarted successfully"
 msgstr "Nginx a redémarré avec succès"
 msgstr "Nginx a redémarré avec succès"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:277
+#: src/components/ChatGPT/ChatGPT.vue:374
 #: src/components/Notification/Notification.vue:128
 #: src/components/Notification/Notification.vue:128
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:510
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:510
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:524
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:524
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:538
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:538
-#: src/views/notification/Notification.vue:36
+#: src/views/notification/Notification.vue:37
 #: src/views/preference/AuthSettings.vue:136
 #: src/views/preference/AuthSettings.vue:136
 #: src/views/preference/CertSettings.vue:70
 #: src/views/preference/CertSettings.vue:70
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97
 #: src/views/site/ngx_conf/LocationEditor.vue:90
 #: src/views/site/ngx_conf/LocationEditor.vue:90
-#: src/views/site/site_list/SiteList.vue:142
-#: src/views/stream/StreamList.vue:158
+#: src/views/site/site_list/SiteList.vue:143
+#: src/views/stream/StreamList.vue:163
 msgid "No"
 msgid "No"
 msgstr "Non"
 msgstr "Non"
 
 
@@ -1703,7 +1701,7 @@ msgid ""
 "certificates, please synchronize them to the remote nodes in advance."
 "certificates, please synchronize them to the remote nodes in advance."
 msgstr ""
 msgstr ""
 
 
-#: src/views/notification/Notification.vue:27
+#: src/views/notification/Notification.vue:28
 #, fuzzy
 #, fuzzy
 msgid "Notification"
 msgid "Notification"
 msgstr "Certification"
 msgstr "Certification"
@@ -1733,7 +1731,7 @@ msgstr ""
 
 
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/views/dashboard/Environments.vue:107
 #: src/views/dashboard/Environments.vue:107
-#: src/views/environment/envColumns.tsx:87
+#: src/views/environment/envColumns.tsx:56
 msgid "Offline"
 msgid "Offline"
 msgstr ""
 msgstr ""
 
 
@@ -1741,23 +1739,23 @@ msgstr ""
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:511
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:511
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:525
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:525
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:539
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:539
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:181
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:188
 msgid "Ok"
 msgid "Ok"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:278
+#: src/components/ChatGPT/ChatGPT.vue:375
 #: src/components/Notification/Notification.vue:129
 #: src/components/Notification/Notification.vue:129
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:95
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:95
-#: src/views/notification/Notification.vue:37
+#: src/views/notification/Notification.vue:38
 #: src/views/site/cert/components/ObtainCert.vue:139
 #: src/views/site/cert/components/ObtainCert.vue:139
 #: src/views/site/ngx_conf/NgxConfigEditor.vue:50
 #: src/views/site/ngx_conf/NgxConfigEditor.vue:50
 #: src/views/site/ngx_conf/NgxServer.vue:79
 #: src/views/site/ngx_conf/NgxServer.vue:79
 #: src/views/site/ngx_conf/NgxUpstream.vue:33
 #: src/views/site/ngx_conf/NgxUpstream.vue:33
 #: src/views/site/site_edit/RightSettings.vue:54
 #: src/views/site/site_edit/RightSettings.vue:54
-#: src/views/site/site_list/SiteList.vue:143
+#: src/views/site/site_list/SiteList.vue:144
 #: src/views/stream/components/Deploy.vue:19
 #: src/views/stream/components/Deploy.vue:19
 #: src/views/stream/components/RightSettings.vue:50
 #: src/views/stream/components/RightSettings.vue:50
-#: src/views/stream/StreamList.vue:159
+#: src/views/stream/StreamList.vue:164
 msgid "OK"
 msgid "OK"
 msgstr "OK"
 msgstr "OK"
 
 
@@ -1768,7 +1766,7 @@ msgstr ""
 #: src/components/NodeSelector/NodeSelector.vue:83
 #: src/components/NodeSelector/NodeSelector.vue:83
 #: src/components/NodeSelector/NodeSelector.vue:97
 #: src/components/NodeSelector/NodeSelector.vue:97
 #: src/views/dashboard/Environments.vue:100
 #: src/views/dashboard/Environments.vue:100
-#: src/views/environment/envColumns.tsx:83
+#: src/views/environment/envColumns.tsx:52
 msgid "Online"
 msgid "Online"
 msgstr ""
 msgstr ""
 
 
@@ -1852,7 +1850,7 @@ msgstr ""
 msgid "Payload resource is nil"
 msgid "Payload resource is nil"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/BatchUpgrader.vue:233
+#: src/views/environment/BatchUpgrader.vue:232
 msgid "Perform"
 msgid "Perform"
 msgstr ""
 msgstr ""
 
 
@@ -1944,7 +1942,7 @@ msgid ""
 "Please note that the unit of time configurations below are all in seconds."
 "Please note that the unit of time configurations below are all in seconds."
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/Environment.vue:45
+#: src/views/environment/Environment.vue:48
 msgid "Please select at least one node to upgrade"
 msgid "Please select at least one node to upgrade"
 msgstr ""
 msgstr ""
 
 
@@ -1963,8 +1961,8 @@ msgstr ""
 msgid "Please upgrade the remote Nginx UI to the latest version"
 msgid "Please upgrade the remote Nginx UI to the latest version"
 msgstr "Dupliqué avec succès"
 msgstr "Dupliqué avec succès"
 
 
-#: src/views/environment/BatchUpgrader.vue:168
-#: src/views/environment/BatchUpgrader.vue:221 src/views/system/Upgrade.vue:194
+#: src/views/environment/BatchUpgrader.vue:167
+#: src/views/environment/BatchUpgrader.vue:220 src/views/system/Upgrade.vue:194
 #: src/views/system/Upgrade.vue:245
 #: src/views/system/Upgrade.vue:245
 msgid "Pre-release"
 msgid "Pre-release"
 msgstr ""
 msgstr ""
@@ -2046,11 +2044,11 @@ msgstr ""
 msgid "Recursive Nameservers"
 msgid "Recursive Nameservers"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:290
+#: src/components/ChatGPT/ChatGPT.vue:387
 msgid "Regenerate response"
 msgid "Regenerate response"
 msgstr "Régénérer la réponse"
 msgstr "Régénérer la réponse"
 
 
-#: src/views/certificate/ACMEUser.vue:136
+#: src/views/certificate/ACMEUser.vue:137
 #, fuzzy
 #, fuzzy
 msgid "Register"
 msgid "Register"
 msgstr "Enregistrement de l'utilisateur"
 msgstr "Enregistrement de l'utilisateur"
@@ -2061,7 +2059,7 @@ msgid ""
 "proxy."
 "proxy."
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:105
+#: src/views/certificate/ACMEUser.vue:106
 #, fuzzy
 #, fuzzy
 msgid "Register failed"
 msgid "Register failed"
 msgstr "Enregistrement de l'utilisateur"
 msgstr "Enregistrement de l'utilisateur"
@@ -2076,7 +2074,7 @@ msgstr "Enregistrement de l'utilisateur"
 msgid "Register passkey successfully"
 msgid "Register passkey successfully"
 msgstr "Activé avec succès"
 msgstr "Activé avec succès"
 
 
-#: src/views/certificate/ACMEUser.vue:103
+#: src/views/certificate/ACMEUser.vue:104
 #, fuzzy
 #, fuzzy
 msgid "Register successfully"
 msgid "Register successfully"
 msgstr "Activé avec succès"
 msgstr "Activé avec succès"
@@ -2085,7 +2083,7 @@ msgstr "Activé avec succès"
 msgid "Registering user"
 msgid "Registering user"
 msgstr "Enregistrement de l'utilisateur"
 msgstr "Enregistrement de l'utilisateur"
 
 
-#: src/views/certificate/ACMEUser.vue:119
+#: src/views/certificate/ACMEUser.vue:120
 #, fuzzy
 #, fuzzy
 msgid "Registration Status"
 msgid "Registration Status"
 msgstr "Enregistrement de l'utilisateur"
 msgstr "Enregistrement de l'utilisateur"
@@ -2098,7 +2096,7 @@ msgstr "Réinstaller"
 msgid "Release Note"
 msgid "Release Note"
 msgstr "Note de version"
 msgstr "Note de version"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:266
+#: src/components/ChatGPT/ChatGPT.vue:362
 #: src/components/NginxControl/NginxControl.vue:99
 #: src/components/NginxControl/NginxControl.vue:99
 msgid "Reload"
 msgid "Reload"
 msgstr "Recharger"
 msgstr "Recharger"
@@ -2138,7 +2136,7 @@ msgstr "Enregistré avec succès"
 
 
 #: src/views/config/components/ConfigName.vue:48
 #: src/views/config/components/ConfigName.vue:48
 #: src/views/config/components/Rename.vue:54
 #: src/views/config/components/Rename.vue:54
-#: src/views/config/ConfigList.vue:165
+#: src/views/config/ConfigList.vue:166
 #: src/views/site/ngx_conf/NgxUpstream.vue:125
 #: src/views/site/ngx_conf/NgxUpstream.vue:125
 #: src/views/site/site_edit/components/ConfigName.vue:44
 #: src/views/site/site_edit/components/ConfigName.vue:44
 #, fuzzy
 #, fuzzy
@@ -2260,7 +2258,7 @@ msgstr "Mode d'exécution"
 msgid "Running"
 msgid "Running"
 msgstr "En cours d'éxécution"
 msgstr "En cours d'éxécution"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:259
+#: src/components/ChatGPT/ChatGPT.vue:355
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:64
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:64
 #: src/components/StdDesign/StdDetail/StdDetail.vue:93
 #: src/components/StdDesign/StdDetail/StdDetail.vue:93
 #: src/views/certificate/CertificateEditor.vue:262
 #: src/views/certificate/CertificateEditor.vue:262
@@ -2331,7 +2329,7 @@ msgstr ""
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:182
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:189
 msgid "Selector"
 msgid "Selector"
 msgstr "Sélecteur"
 msgstr "Sélecteur"
 
 
@@ -2344,10 +2342,6 @@ msgstr ""
 msgid "Send"
 msgid "Send"
 msgstr "Envoyer"
 msgstr "Envoyer"
 
 
-#: src/lib/http/index.ts:128
-msgid "Server error"
-msgstr "Erreur du serveur"
-
 #: src/views/dashboard/ServerAnalytic.vue:179
 #: src/views/dashboard/ServerAnalytic.vue:179
 msgid "Server Info"
 msgid "Server Info"
 msgstr "Informations sur le serveur"
 msgstr "Informations sur le serveur"
@@ -2364,7 +2358,7 @@ msgstr "Le paramètre server_name est obligatoire"
 msgid "ServerIdx out of range"
 msgid "ServerIdx out of range"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/user.ts:9
+#: src/constants/errors/user.ts:11
 #, fuzzy
 #, fuzzy
 msgid "Session not found"
 msgid "Session not found"
 msgstr "Fichier introuvable"
 msgstr "Fichier introuvable"
@@ -2471,8 +2465,8 @@ msgstr "Chemin du certificat SSL"
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "Connexion"
 msgstr "Connexion"
 
 
-#: src/views/environment/BatchUpgrader.vue:165
-#: src/views/environment/BatchUpgrader.vue:215 src/views/system/Upgrade.vue:191
+#: src/views/environment/BatchUpgrader.vue:164
+#: src/views/environment/BatchUpgrader.vue:214 src/views/system/Upgrade.vue:191
 #: src/views/system/Upgrade.vue:239
 #: src/views/system/Upgrade.vue:239
 #, fuzzy
 #, fuzzy
 msgid "Stable"
 msgid "Stable"
@@ -2480,8 +2474,8 @@ msgstr "Tableau"
 
 
 #: src/views/certificate/ACMEUser.vue:65
 #: src/views/certificate/ACMEUser.vue:65
 #: src/views/certificate/CertificateList/certColumns.tsx:68
 #: src/views/certificate/CertificateList/certColumns.tsx:68
-#: src/views/environment/envColumns.tsx:75
-#: src/views/site/site_list/columns.tsx:40 src/views/stream/StreamList.vue:22
+#: src/views/environment/envColumns.tsx:44
+#: src/views/site/site_list/columns.tsx:42 src/views/stream/StreamList.vue:23
 msgid "Status"
 msgid "Status"
 msgstr "Statut"
 msgstr "Statut"
 
 
@@ -2590,7 +2584,7 @@ msgstr "Changer de certificat"
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "Changer de certificat"
 msgstr "Changer de certificat"
 
 
-#: src/views/site/site_category/SiteCategory.vue:16
+#: src/views/site/site_category/SiteCategory.vue:17
 msgid "Sync Nodes"
 msgid "Sync Nodes"
 msgstr ""
 msgstr ""
 
 
@@ -2769,7 +2763,7 @@ msgstr ""
 msgid "This value is already taken"
 msgid "This value is already taken"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/BatchUpgrader.vue:183
+#: src/views/environment/BatchUpgrader.vue:182
 msgid ""
 msgid ""
 "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgstr ""
 msgstr ""
@@ -2849,7 +2843,6 @@ msgid "Two-factor authentication required"
 msgstr ""
 msgstr ""
 
 
 #: src/views/certificate/CertificateList/certColumns.tsx:25
 #: src/views/certificate/CertificateList/certColumns.tsx:25
-#: src/views/config/configColumns.ts:16
 #: src/views/notification/notificationColumns.tsx:9
 #: src/views/notification/notificationColumns.tsx:9
 msgid "Type"
 msgid "Type"
 msgstr "Type"
 msgstr "Type"
@@ -2861,13 +2854,13 @@ msgstr "Mis à jour avec succés"
 
 
 #: src/views/certificate/ACMEUser.vue:88
 #: src/views/certificate/ACMEUser.vue:88
 #: src/views/certificate/DNSCredential.vue:27
 #: src/views/certificate/DNSCredential.vue:27
-#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:276
-#: src/views/environment/envColumns.tsx:119
-#: src/views/site/site_category/columns.ts:20
+#: src/views/config/configColumns.tsx:34 src/views/config/ConfigEditor.vue:276
+#: src/views/environment/envColumns.tsx:90
+#: src/views/site/site_category/columns.ts:22
 #: src/views/site/site_edit/RightSettings.vue:100
 #: src/views/site/site_edit/RightSettings.vue:100
-#: src/views/site/site_list/columns.tsx:67
+#: src/views/site/site_list/columns.tsx:69
 #: src/views/stream/components/RightSettings.vue:85
 #: src/views/stream/components/RightSettings.vue:85
-#: src/views/stream/StreamList.vue:41 src/views/user/userColumns.tsx:54
+#: src/views/stream/StreamList.vue:43 src/views/user/userColumns.tsx:54
 msgid "Updated at"
 msgid "Updated at"
 msgstr "Mis à jour le"
 msgstr "Mis à jour le"
 
 
@@ -2875,12 +2868,12 @@ msgstr "Mis à jour le"
 msgid "Updated successfully"
 msgid "Updated successfully"
 msgstr "Mis à jour avec succés"
 msgstr "Mis à jour avec succés"
 
 
-#: src/routes/index.ts:297 src/views/environment/Environment.vue:53
+#: src/routes/index.ts:297 src/views/environment/Environment.vue:56
 #: src/views/system/Upgrade.vue:143 src/views/system/Upgrade.vue:226
 #: src/views/system/Upgrade.vue:143 src/views/system/Upgrade.vue:226
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr "Mettre à niveau"
 msgstr "Mettre à niveau"
 
 
-#: src/views/environment/BatchUpgrader.vue:138
+#: src/views/environment/BatchUpgrader.vue:137
 #, fuzzy
 #, fuzzy
 msgid "Upgraded Nginx UI on %{node} successfully 🎉"
 msgid "Upgraded Nginx UI on %{node} successfully 🎉"
 msgstr "Mise à niveau réussie"
 msgstr "Mise à niveau réussie"
@@ -2889,7 +2882,7 @@ msgstr "Mise à niveau réussie"
 msgid "Upgraded successfully"
 msgid "Upgraded successfully"
 msgstr "Mise à niveau réussie"
 msgstr "Mise à niveau réussie"
 
 
-#: src/views/environment/BatchUpgrader.vue:89 src/views/system/Upgrade.vue:77
+#: src/views/environment/BatchUpgrader.vue:88 src/views/system/Upgrade.vue:77
 msgid "Upgrading Nginx UI, please wait..."
 msgid "Upgrading Nginx UI, please wait..."
 msgstr "Mise à jour de Nginx UI, veuillez patienter..."
 msgstr "Mise à jour de Nginx UI, veuillez patienter..."
 
 
@@ -2901,7 +2894,7 @@ msgstr ""
 msgid "Uptime:"
 msgid "Uptime:"
 msgstr "Disponibilité :"
 msgstr "Disponibilité :"
 
 
-#: src/views/environment/envColumns.tsx:18
+#: src/views/environment/envColumns.tsx:19
 msgid "URL"
 msgid "URL"
 msgstr ""
 msgstr ""
 
 
@@ -2913,7 +2906,7 @@ msgstr ""
 msgid "Use recovery code"
 msgid "Use recovery code"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:237
+#: src/components/ChatGPT/ChatGPT.vue:333
 #, fuzzy
 #, fuzzy
 msgid "User"
 msgid "User"
 msgstr "Nom d'utilisateur"
 msgstr "Nom d'utilisateur"
@@ -2935,13 +2928,13 @@ msgstr "Nom d'utilisateur"
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr "Nom d'utilisateur (*)"
 msgstr "Nom d'utilisateur (*)"
 
 
-#: src/views/certificate/ACMEUser.vue:123
+#: src/views/certificate/ACMEUser.vue:124
 #: src/views/certificate/CertificateList/certColumns.tsx:81
 #: src/views/certificate/CertificateList/certColumns.tsx:81
 #: src/views/site/cert/CertInfo.vue:24
 #: src/views/site/cert/CertInfo.vue:24
 msgid "Valid"
 msgid "Valid"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/envColumns.tsx:29
+#: src/views/environment/envColumns.tsx:31
 #, fuzzy
 #, fuzzy
 msgid "Version"
 msgid "Version"
 msgstr "Version actuelle"
 msgstr "Version actuelle"
@@ -3045,6 +3038,16 @@ msgstr ""
 msgid "Your passkeys"
 msgid "Your passkeys"
 msgstr ""
 msgstr ""
 
 
+#, fuzzy
+#~ msgid "Directory"
+#~ msgstr "Directive"
+
+#~ msgid "File"
+#~ msgstr "Fichier"
+
+#~ msgid "Server error"
+#~ msgstr "Erreur du serveur"
+
 #, fuzzy
 #, fuzzy
 #~ msgid "Incorrect username or password"
 #~ msgid "Incorrect username or password"
 #~ msgstr "Le pseudo ou mot de passe est incorect"
 #~ msgstr "Le pseudo ou mot de passe est incorect"

+ 129 - 123
app/src/language/ko_KR/app.po

@@ -30,7 +30,7 @@ msgstr "대하여"
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr "접근 로그"
 msgstr "접근 로그"
 
 
-#: src/routes/index.ts:148 src/views/certificate/ACMEUser.vue:112
+#: src/routes/index.ts:148 src/views/certificate/ACMEUser.vue:113
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
 msgid "ACME User"
 msgid "ACME User"
 msgstr "ACME 사용자"
 msgstr "ACME 사용자"
@@ -38,12 +38,12 @@ msgstr "ACME 사용자"
 #: src/views/certificate/ACMEUser.vue:95
 #: src/views/certificate/ACMEUser.vue:95
 #: src/views/certificate/CertificateList/certColumns.tsx:97
 #: src/views/certificate/CertificateList/certColumns.tsx:97
 #: src/views/certificate/DNSCredential.vue:33
 #: src/views/certificate/DNSCredential.vue:33
-#: src/views/config/configColumns.ts:38
-#: src/views/environment/envColumns.tsx:125
-#: src/views/notification/notificationColumns.tsx:62
+#: src/views/config/configColumns.tsx:42
+#: src/views/environment/envColumns.tsx:97
+#: src/views/notification/notificationColumns.tsx:65
 #: src/views/preference/AuthSettings.vue:26
 #: src/views/preference/AuthSettings.vue:26
-#: src/views/site/site_category/columns.ts:26
-#: src/views/site/site_list/columns.tsx:74 src/views/stream/StreamList.vue:47
+#: src/views/site/site_category/columns.ts:29
+#: src/views/site/site_list/columns.tsx:76 src/views/stream/StreamList.vue:49
 #: src/views/user/userColumns.tsx:60
 #: src/views/user/userColumns.tsx:60
 msgid "Action"
 msgid "Action"
 msgstr "작업"
 msgstr "작업"
@@ -54,7 +54,7 @@ msgstr "작업"
 #: src/views/site/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/site/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/site/ngx_conf/NgxServer.vue:162
 #: src/views/site/ngx_conf/NgxServer.vue:162
 #: src/views/site/ngx_conf/NgxUpstream.vue:154
 #: src/views/site/ngx_conf/NgxUpstream.vue:154
-#: src/views/stream/StreamList.vue:117
+#: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr "추가"
 msgstr "추가"
 
 
@@ -81,11 +81,11 @@ msgstr "위치 추가"
 msgid "Add Site"
 msgid "Add Site"
 msgstr "사이트 추가"
 msgstr "사이트 추가"
 
 
-#: src/views/stream/StreamList.vue:176
+#: src/views/stream/StreamList.vue:181
 msgid "Add Stream"
 msgid "Add Stream"
 msgstr "스트림 추가"
 msgstr "스트림 추가"
 
 
-#: src/views/stream/StreamList.vue:109
+#: src/views/stream/StreamList.vue:113
 msgid "Added successfully"
 msgid "Added successfully"
 msgstr "성공적으로 추가됨"
 msgstr "성공적으로 추가됨"
 
 
@@ -156,11 +156,11 @@ msgid "Are you sure you want to apply to all selected?"
 msgstr "정말 삭제하시겠습니까?"
 msgstr "정말 삭제하시겠습니까?"
 
 
 #: src/components/Notification/Notification.vue:130
 #: src/components/Notification/Notification.vue:130
-#: src/views/notification/Notification.vue:38
+#: src/views/notification/Notification.vue:39
 msgid "Are you sure you want to clear all notifications?"
 msgid "Are you sure you want to clear all notifications?"
 msgstr "모든 알림을 지우시겠습니까?"
 msgstr "모든 알림을 지우시겠습니까?"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:279
+#: src/components/ChatGPT/ChatGPT.vue:376
 msgid "Are you sure you want to clear the record of chat?"
 msgid "Are you sure you want to clear the record of chat?"
 msgstr "기록을 지우시겠습니까?"
 msgstr "기록을 지우시겠습니까?"
 
 
@@ -172,8 +172,8 @@ msgstr "이 항목을 영구적으로 삭제하시겠습니까?"
 msgid "Are you sure you want to delete this item?"
 msgid "Are you sure you want to delete this item?"
 msgstr "이 항목을 삭제하시겠습니까?"
 msgstr "이 항목을 삭제하시겠습니까?"
 
 
-#: src/views/site/site_list/SiteList.vue:144
-#: src/views/stream/StreamList.vue:160
+#: src/views/site/site_list/SiteList.vue:145
+#: src/views/stream/StreamList.vue:165
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr "정말 삭제하시겠습니까?"
 msgstr "정말 삭제하시겠습니까?"
 
 
@@ -193,11 +193,11 @@ msgstr "이 항목을 제거하시겠습니까?"
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "이 위치를 제거하시겠습니까?"
 msgstr "이 위치를 제거하시겠습니까?"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:223
+#: src/components/ChatGPT/ChatGPT.vue:318
 msgid "Ask ChatGPT for Help"
 msgid "Ask ChatGPT for Help"
 msgstr "ChatGPT에게 도움 요청"
 msgstr "ChatGPT에게 도움 요청"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:237
+#: src/components/ChatGPT/ChatGPT.vue:333
 msgid "Assistant"
 msgid "Assistant"
 msgstr "조수"
 msgstr "조수"
 
 
@@ -241,7 +241,7 @@ msgstr "%{name}에 대한 자동 갱신 활성화됨"
 
 
 #: src/views/certificate/CertificateEditor.vue:255
 #: src/views/certificate/CertificateEditor.vue:255
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:106
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:106
-#: src/views/config/ConfigList.vue:179 src/views/nginx_log/NginxLog.vue:173
+#: src/views/config/ConfigList.vue:180 src/views/nginx_log/NginxLog.vue:173
 #: src/views/site/site_edit/SiteEdit.vue:264
 #: src/views/site/site_edit/SiteEdit.vue:264
 #: src/views/stream/StreamEdit.vue:245
 #: src/views/stream/StreamEdit.vue:245
 msgid "Back"
 msgid "Back"
@@ -293,7 +293,7 @@ msgstr "작업"
 msgid "Batch Modify"
 msgid "Batch Modify"
 msgstr "일괄 수정"
 msgstr "일괄 수정"
 
 
-#: src/views/environment/BatchUpgrader.vue:153
+#: src/views/environment/BatchUpgrader.vue:152
 msgid "Batch Upgrade"
 msgid "Batch Upgrade"
 msgstr "배치 업그레이드"
 msgstr "배치 업그레이드"
 
 
@@ -321,9 +321,9 @@ msgstr "CA 디렉토리"
 msgid "Can't scan? Use text key binding"
 msgid "Can't scan? Use text key binding"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:260
+#: src/components/ChatGPT/ChatGPT.vue:356
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:180
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:187
 #: src/components/StdDesign/StdDetail/StdDetail.vue:101
 #: src/components/StdDesign/StdDetail/StdDetail.vue:101
 #: src/views/preference/components/Passkey.vue:141
 #: src/views/preference/components/Passkey.vue:141
 #: src/views/site/cert/components/ObtainCert.vue:140
 #: src/views/site/cert/components/ObtainCert.vue:140
@@ -336,8 +336,17 @@ msgstr ""
 msgid "Cancel"
 msgid "Cancel"
 msgstr "취소"
 msgstr "취소"
 
 
+#: src/constants/errors/user.ts:10
+#, fuzzy
+msgid "Cannot change initial user password in demo mode"
+msgstr "데모에서 루트 비밀번호 변경 금지"
+
+#: src/constants/errors/user.ts:9
+msgid "Cannot remove initial user"
+msgstr ""
+
 #: src/views/site/site_edit/RightSettings.vue:91
 #: src/views/site/site_edit/RightSettings.vue:91
-#: src/views/site/site_list/columns.tsx:23
+#: src/views/site/site_list/columns.tsx:25
 msgid "Category"
 msgid "Category"
 msgstr ""
 msgstr ""
 
 
@@ -401,7 +410,7 @@ msgstr[1] "인증서 변경"
 msgid "Changed Path"
 msgid "Changed Path"
 msgstr "인증서 변경"
 msgstr "인증서 변경"
 
 
-#: src/views/environment/BatchUpgrader.vue:160 src/views/system/Upgrade.vue:188
+#: src/views/environment/BatchUpgrader.vue:159 src/views/system/Upgrade.vue:188
 msgid "Channel"
 msgid "Channel"
 msgstr "채널"
 msgstr "채널"
 
 
@@ -437,9 +446,9 @@ msgstr ""
 msgid "Cleaning environment variables"
 msgid "Cleaning environment variables"
 msgstr "환경 변수 정리"
 msgstr "환경 변수 정리"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:283
+#: src/components/ChatGPT/ChatGPT.vue:380
 #: src/components/Notification/Notification.vue:135
 #: src/components/Notification/Notification.vue:135
-#: src/views/notification/Notification.vue:43
+#: src/views/notification/Notification.vue:44
 msgid "Clear"
 msgid "Clear"
 msgstr "클리어"
 msgstr "클리어"
 
 
@@ -532,9 +541,9 @@ msgstr "생성"
 msgid "Create Folder"
 msgid "Create Folder"
 msgstr "다른 것 생성하기"
 msgstr "다른 것 생성하기"
 
 
-#: src/views/notification/notificationColumns.tsx:56
+#: src/views/notification/notificationColumns.tsx:58
 #: src/views/preference/components/Passkey.vue:95
 #: src/views/preference/components/Passkey.vue:95
-#: src/views/site/site_category/columns.ts:14 src/views/user/userColumns.tsx:48
+#: src/views/site/site_category/columns.ts:15 src/views/user/userColumns.tsx:48
 msgid "Created at"
 msgid "Created at"
 msgstr "생성 시간"
 msgstr "생성 시간"
 
 
@@ -595,8 +604,8 @@ msgstr ""
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/views/site/ngx_conf/NgxServer.vue:110
 #: src/views/site/ngx_conf/NgxServer.vue:110
 #: src/views/site/ngx_conf/NgxUpstream.vue:128
 #: src/views/site/ngx_conf/NgxUpstream.vue:128
-#: src/views/site/site_list/SiteList.vue:153
-#: src/views/stream/StreamList.vue:169
+#: src/views/site/site_list/SiteList.vue:154
+#: src/views/stream/StreamList.vue:174
 msgid "Delete"
 msgid "Delete"
 msgstr "삭제"
 msgstr "삭제"
 
 
@@ -619,7 +628,7 @@ msgstr "인증서 갱신 성공"
 msgid "Delete site: %{site_name}"
 msgid "Delete site: %{site_name}"
 msgstr "사이트 삭제: %{site_name}"
 msgstr "사이트 삭제: %{site_name}"
 
 
-#: src/views/stream/StreamList.vue:78
+#: src/views/stream/StreamList.vue:82
 msgid "Delete stream: %{stream_name}"
 msgid "Delete stream: %{stream_name}"
 msgstr "스트림 삭제: %{stream_name}"
 msgstr "스트림 삭제: %{stream_name}"
 
 
@@ -654,7 +663,7 @@ msgstr "설명"
 msgid "Destination file already exists"
 msgid "Destination file already exists"
 msgstr ""
 msgstr ""
 
 
-#: src/views/notification/notificationColumns.tsx:51
+#: src/views/notification/notificationColumns.tsx:52
 msgid "Details"
 msgid "Details"
 msgstr "세부 사항"
 msgstr "세부 사항"
 
 
@@ -682,12 +691,8 @@ msgstr ""
 msgid "Directives"
 msgid "Directives"
 msgstr "지시문들"
 msgstr "지시문들"
 
 
-#: src/views/config/configColumns.ts:22
-msgid "Directory"
-msgstr "디렉토리"
-
-#: src/views/site/site_list/SiteList.vue:124
-#: src/views/stream/StreamList.vue:140
+#: src/views/site/site_list/SiteList.vue:125
+#: src/views/stream/StreamList.vue:145
 msgid "Disable"
 msgid "Disable"
 msgstr "비활성화"
 msgstr "비활성화"
 
 
@@ -715,19 +720,19 @@ msgstr "%{node_name}에서 %{conf_name} 성공적으로 활성화됨"
 msgid "Disable Site %{site} on %{node} successfully"
 msgid "Disable Site %{site} on %{node} successfully"
 msgstr "%{node_name}에서 %{conf_name} 성공적으로 활성화됨"
 msgstr "%{node_name}에서 %{conf_name} 성공적으로 활성화됨"
 
 
-#: src/views/environment/envColumns.tsx:109
-#: src/views/environment/envColumns.tsx:92
+#: src/views/environment/envColumns.tsx:61
+#: src/views/environment/envColumns.tsx:79
 #: src/views/site/site_edit/SiteEdit.vue:190
 #: src/views/site/site_edit/SiteEdit.vue:190
-#: src/views/site/site_list/columns.tsx:51
-#: src/views/site/site_list/columns.tsx:60 src/views/stream/StreamEdit.vue:175
-#: src/views/stream/StreamList.vue:33 src/views/user/userColumns.tsx:41
+#: src/views/site/site_list/columns.tsx:53
+#: src/views/site/site_list/columns.tsx:62 src/views/stream/StreamEdit.vue:175
+#: src/views/stream/StreamList.vue:34 src/views/user/userColumns.tsx:41
 msgid "Disabled"
 msgid "Disabled"
 msgstr "비활성화됨"
 msgstr "비활성화됨"
 
 
 #: src/views/site/site_edit/RightSettings.vue:42
 #: src/views/site/site_edit/RightSettings.vue:42
 #: src/views/site/site_list/SiteList.vue:56
 #: src/views/site/site_list/SiteList.vue:56
 #: src/views/stream/components/RightSettings.vue:38
 #: src/views/stream/components/RightSettings.vue:38
-#: src/views/stream/StreamList.vue:67
+#: src/views/stream/StreamList.vue:71
 msgid "Disabled successfully"
 msgid "Disabled successfully"
 msgstr "성공적으로 비활성화됨"
 msgstr "성공적으로 비활성화됨"
 
 
@@ -819,7 +824,7 @@ msgstr "최신 릴리스 다운로드 오류"
 msgid "Downloading latest release"
 msgid "Downloading latest release"
 msgstr "최신 릴리스 다운로드 중"
 msgstr "최신 릴리스 다운로드 중"
 
 
-#: src/views/environment/BatchUpgrader.vue:189 src/views/system/Upgrade.vue:215
+#: src/views/environment/BatchUpgrader.vue:188 src/views/system/Upgrade.vue:215
 msgid "Dry run mode enabled"
 msgid "Dry run mode enabled"
 msgstr "드라이런 모드 활성화됨"
 msgstr "드라이런 모드 활성화됨"
 
 
@@ -830,9 +835,9 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #: src/views/site/site_list/SiteDuplicate.vue:72
 #: src/views/site/site_list/SiteDuplicate.vue:72
-#: src/views/site/site_list/SiteList.vue:139
+#: src/views/site/site_list/SiteList.vue:140
 #: src/views/stream/components/StreamDuplicate.vue:121
 #: src/views/stream/components/StreamDuplicate.vue:121
-#: src/views/stream/StreamList.vue:155
+#: src/views/stream/StreamList.vue:160
 msgid "Duplicate"
 msgid "Duplicate"
 msgstr "복제"
 msgstr "복제"
 
 
@@ -885,9 +890,9 @@ msgstr "이메일 (*)"
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "이메일 (*)"
 msgstr "이메일 (*)"
 
 
-#: src/views/site/site_list/SiteList.vue:132
+#: src/views/site/site_list/SiteList.vue:133
 #: src/views/stream/components/Deploy.vue:80
 #: src/views/stream/components/Deploy.vue:80
-#: src/views/stream/StreamList.vue:148
+#: src/views/stream/StreamList.vue:153
 msgid "Enable"
 msgid "Enable"
 msgstr "활성화"
 msgstr "활성화"
 
 
@@ -945,15 +950,15 @@ msgstr "TLS 활성화"
 msgid "Enable TOTP"
 msgid "Enable TOTP"
 msgstr "TLS 활성화"
 msgstr "TLS 활성화"
 
 
-#: src/views/environment/envColumns.tsx:100
-#: src/views/environment/envColumns.tsx:106
+#: src/views/environment/envColumns.tsx:70
+#: src/views/environment/envColumns.tsx:76
 #: src/views/preference/LogrotateSettings.vue:19
 #: src/views/preference/LogrotateSettings.vue:19
 #: src/views/site/site_edit/RightSettings.vue:82
 #: src/views/site/site_edit/RightSettings.vue:82
 #: src/views/site/site_edit/SiteEdit.vue:184
 #: src/views/site/site_edit/SiteEdit.vue:184
-#: src/views/site/site_list/columns.tsx:47
-#: src/views/site/site_list/columns.tsx:59
+#: src/views/site/site_list/columns.tsx:49
+#: src/views/site/site_list/columns.tsx:61
 #: src/views/stream/components/RightSettings.vue:76
 #: src/views/stream/components/RightSettings.vue:76
-#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:29
+#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:30
 #: src/views/user/userColumns.tsx:38
 #: src/views/user/userColumns.tsx:38
 msgid "Enabled"
 msgid "Enabled"
 msgstr "활성화됨"
 msgstr "활성화됨"
@@ -962,7 +967,7 @@ msgstr "활성화됨"
 #: src/views/site/site_list/SiteList.vue:46 src/views/site/SiteAdd.vue:40
 #: src/views/site/site_list/SiteList.vue:46 src/views/site/SiteAdd.vue:40
 #: src/views/stream/components/RightSettings.vue:29
 #: src/views/stream/components/RightSettings.vue:29
 #: src/views/stream/components/StreamDuplicate.vue:93
 #: src/views/stream/components/StreamDuplicate.vue:93
-#: src/views/stream/StreamList.vue:57
+#: src/views/stream/StreamList.vue:61
 msgid "Enabled successfully"
 msgid "Enabled successfully"
 msgstr "성공적으로 활성화됨"
 msgstr "성공적으로 활성화됨"
 
 
@@ -970,16 +975,13 @@ msgstr "성공적으로 활성화됨"
 msgid "Encrypt website with Let's Encrypt"
 msgid "Encrypt website with Let's Encrypt"
 msgstr "Let's Encrypt로 웹사이트 암호화"
 msgstr "Let's Encrypt로 웹사이트 암호화"
 
 
-#: src/routes/index.ts:234 src/views/environment/Environment.vue:32
-msgid "Environment"
-msgstr "환경"
-
 #: src/language/constants.ts:21
 #: src/language/constants.ts:21
 #, fuzzy
 #, fuzzy
 msgid "Environment variables cleaned"
 msgid "Environment variables cleaned"
 msgstr "환경 변수 설정"
 msgstr "환경 변수 설정"
 
 
-#: src/views/dashboard/Environments.vue:83
+#: src/routes/index.ts:234 src/views/dashboard/Environments.vue:83
+#: src/views/environment/Environment.vue:33
 msgid "Environments"
 msgid "Environments"
 msgstr "환경"
 msgstr "환경"
 
 
@@ -1023,14 +1025,14 @@ msgstr "%{msg} 활성화 실패"
 #: src/views/site/site_edit/RightSettings.vue:45
 #: src/views/site/site_edit/RightSettings.vue:45
 #: src/views/site/site_list/SiteList.vue:60
 #: src/views/site/site_list/SiteList.vue:60
 #: src/views/stream/components/RightSettings.vue:41
 #: src/views/stream/components/RightSettings.vue:41
-#: src/views/stream/StreamList.vue:71
+#: src/views/stream/StreamList.vue:75
 msgid "Failed to disable %{msg}"
 msgid "Failed to disable %{msg}"
 msgstr "%{msg} 비활성화 실패"
 msgstr "%{msg} 비활성화 실패"
 
 
 #: src/views/site/site_edit/RightSettings.vue:36
 #: src/views/site/site_edit/RightSettings.vue:36
 #: src/views/site/site_list/SiteList.vue:50
 #: src/views/site/site_list/SiteList.vue:50
 #: src/views/stream/components/RightSettings.vue:32
 #: src/views/stream/components/RightSettings.vue:32
-#: src/views/stream/StreamList.vue:61
+#: src/views/stream/StreamList.vue:65
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "%{msg} 활성화 실패"
 msgstr "%{msg} 활성화 실패"
 
 
@@ -1051,10 +1053,6 @@ msgstr ""
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgstr "저장 실패, 구성에서 구문 오류가 감지되었습니다."
 msgstr "저장 실패, 구성에서 구문 오류가 감지되었습니다."
 
 
-#: src/views/config/configColumns.ts:24
-msgid "File"
-msgstr "파일"
-
 #: src/language/constants.ts:31
 #: src/language/constants.ts:31
 msgid "File exists"
 msgid "File exists"
 msgstr "파일이 존재함"
 msgstr "파일이 존재함"
@@ -1117,7 +1115,7 @@ msgstr "생성"
 msgid "Generating private key for registering account"
 msgid "Generating private key for registering account"
 msgstr "계정 등록을 위한 개인 키 생성 중"
 msgstr "계정 등록을 위한 개인 키 생성 중"
 
 
-#: src/views/environment/BatchUpgrader.vue:178 src/views/system/Upgrade.vue:169
+#: src/views/environment/BatchUpgrader.vue:177 src/views/system/Upgrade.vue:169
 #, fuzzy
 #, fuzzy
 msgid "Get release information error"
 msgid "Get release information error"
 msgstr "릴리스 정보 가져오기 오류"
 msgstr "릴리스 정보 가져오기 오류"
@@ -1228,7 +1226,7 @@ msgstr "성공적으로 활성화됨"
 msgid "Interval"
 msgid "Interval"
 msgstr "간격"
 msgstr "간격"
 
 
-#: src/views/certificate/ACMEUser.vue:128
+#: src/views/certificate/ACMEUser.vue:129
 #, fuzzy
 #, fuzzy
 msgid "Invalid"
 msgid "Invalid"
 msgstr "유효함"
 msgstr "유효함"
@@ -1344,7 +1342,7 @@ msgstr ""
 msgid "Load Average:"
 msgid "Load Average:"
 msgstr "부하 평균:"
 msgstr "부하 평균:"
 
 
-#: src/views/environment/Environment.vue:37
+#: src/views/environment/Environment.vue:39
 msgid "Load from settings"
 msgid "Load from settings"
 msgstr ""
 msgstr ""
 
 
@@ -1421,12 +1419,12 @@ msgstr "구성 관리"
 msgid "Manage Sites"
 msgid "Manage Sites"
 msgstr "사이트 관리"
 msgstr "사이트 관리"
 
 
-#: src/routes/index.ts:89 src/views/stream/StreamList.vue:115
+#: src/routes/index.ts:89 src/views/stream/StreamList.vue:119
 #, fuzzy
 #, fuzzy
 msgid "Manage Streams"
 msgid "Manage Streams"
 msgstr "스트림 관리"
 msgstr "스트림 관리"
 
 
-#: src/routes/index.ts:257 src/views/user/User.vue:9
+#: src/routes/index.ts:257 src/views/user/User.vue:10
 msgid "Manage Users"
 msgid "Manage Users"
 msgstr "사용자 관리"
 msgstr "사용자 관리"
 
 
@@ -1457,10 +1455,10 @@ msgstr "분"
 msgid "Model"
 msgid "Model"
 msgstr "실행 모드"
 msgstr "실행 모드"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:256
+#: src/components/ChatGPT/ChatGPT.vue:352
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:151
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:151
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:498
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:498
-#: src/views/config/ConfigList.vue:158
+#: src/views/config/ConfigList.vue:159
 #, fuzzy
 #, fuzzy
 msgid "Modify"
 msgid "Modify"
 msgstr "설정 수정"
 msgstr "설정 수정"
@@ -1488,17 +1486,18 @@ msgstr "단일 지시문"
 #: src/views/certificate/CertificateEditor.vue:160
 #: src/views/certificate/CertificateEditor.vue:160
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/certificate/DNSCredential.vue:11
-#: src/views/config/components/Mkdir.vue:64 src/views/config/configColumns.ts:8
-#: src/views/config/ConfigEditor.vue:256 src/views/environment/envColumns.tsx:9
+#: src/views/config/components/Mkdir.vue:64
+#: src/views/config/configColumns.tsx:7 src/views/config/ConfigEditor.vue:256
+#: src/views/environment/envColumns.tsx:9
 #: src/views/preference/components/AddPasskey.vue:75
 #: src/views/preference/components/AddPasskey.vue:75
 #: src/views/site/ngx_conf/NgxUpstream.vue:177
 #: src/views/site/ngx_conf/NgxUpstream.vue:177
 #: src/views/site/site_category/columns.ts:7
 #: src/views/site/site_category/columns.ts:7
 #: src/views/site/site_edit/RightSettings.vue:88
 #: src/views/site/site_edit/RightSettings.vue:88
-#: src/views/site/site_list/columns.tsx:13
+#: src/views/site/site_list/columns.tsx:15
 #: src/views/site/site_list/SiteDuplicate.vue:79
 #: src/views/site/site_list/SiteDuplicate.vue:79
 #: src/views/stream/components/RightSettings.vue:82
 #: src/views/stream/components/RightSettings.vue:82
 #: src/views/stream/components/StreamDuplicate.vue:128
 #: src/views/stream/components/StreamDuplicate.vue:128
-#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:181
+#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:186
 msgid "Name"
 msgid "Name"
 msgstr "이름"
 msgstr "이름"
 
 
@@ -1625,20 +1624,20 @@ msgstr "터미널 시작 명령"
 msgid "Nginx restarted successfully"
 msgid "Nginx restarted successfully"
 msgstr "Nginx가 성공적으로 재시작됨"
 msgstr "Nginx가 성공적으로 재시작됨"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:277
+#: src/components/ChatGPT/ChatGPT.vue:374
 #: src/components/Notification/Notification.vue:128
 #: src/components/Notification/Notification.vue:128
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:510
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:510
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:524
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:524
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:538
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:538
-#: src/views/notification/Notification.vue:36
+#: src/views/notification/Notification.vue:37
 #: src/views/preference/AuthSettings.vue:136
 #: src/views/preference/AuthSettings.vue:136
 #: src/views/preference/CertSettings.vue:70
 #: src/views/preference/CertSettings.vue:70
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97
 #: src/views/site/ngx_conf/LocationEditor.vue:90
 #: src/views/site/ngx_conf/LocationEditor.vue:90
-#: src/views/site/site_list/SiteList.vue:142
-#: src/views/stream/StreamList.vue:158
+#: src/views/site/site_list/SiteList.vue:143
+#: src/views/stream/StreamList.vue:163
 msgid "No"
 msgid "No"
 msgstr "아니요"
 msgstr "아니요"
 
 
@@ -1674,7 +1673,7 @@ msgid ""
 "certificates, please synchronize them to the remote nodes in advance."
 "certificates, please synchronize them to the remote nodes in advance."
 msgstr ""
 msgstr ""
 
 
-#: src/views/notification/Notification.vue:27
+#: src/views/notification/Notification.vue:28
 #, fuzzy
 #, fuzzy
 msgid "Notification"
 msgid "Notification"
 msgstr "알림"
 msgstr "알림"
@@ -1705,7 +1704,7 @@ msgstr ""
 
 
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/views/dashboard/Environments.vue:107
 #: src/views/dashboard/Environments.vue:107
-#: src/views/environment/envColumns.tsx:87
+#: src/views/environment/envColumns.tsx:56
 msgid "Offline"
 msgid "Offline"
 msgstr "오프라인"
 msgstr "오프라인"
 
 
@@ -1713,23 +1712,23 @@ msgstr "오프라인"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:511
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:511
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:525
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:525
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:539
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:539
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:181
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:188
 msgid "Ok"
 msgid "Ok"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:278
+#: src/components/ChatGPT/ChatGPT.vue:375
 #: src/components/Notification/Notification.vue:129
 #: src/components/Notification/Notification.vue:129
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:95
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:95
-#: src/views/notification/Notification.vue:37
+#: src/views/notification/Notification.vue:38
 #: src/views/site/cert/components/ObtainCert.vue:139
 #: src/views/site/cert/components/ObtainCert.vue:139
 #: src/views/site/ngx_conf/NgxConfigEditor.vue:50
 #: src/views/site/ngx_conf/NgxConfigEditor.vue:50
 #: src/views/site/ngx_conf/NgxServer.vue:79
 #: src/views/site/ngx_conf/NgxServer.vue:79
 #: src/views/site/ngx_conf/NgxUpstream.vue:33
 #: src/views/site/ngx_conf/NgxUpstream.vue:33
 #: src/views/site/site_edit/RightSettings.vue:54
 #: src/views/site/site_edit/RightSettings.vue:54
-#: src/views/site/site_list/SiteList.vue:143
+#: src/views/site/site_list/SiteList.vue:144
 #: src/views/stream/components/Deploy.vue:19
 #: src/views/stream/components/Deploy.vue:19
 #: src/views/stream/components/RightSettings.vue:50
 #: src/views/stream/components/RightSettings.vue:50
-#: src/views/stream/StreamList.vue:159
+#: src/views/stream/StreamList.vue:164
 msgid "OK"
 msgid "OK"
 msgstr "확인"
 msgstr "확인"
 
 
@@ -1740,7 +1739,7 @@ msgstr "검증이 완료되면, 레코드는 제거됩니다."
 #: src/components/NodeSelector/NodeSelector.vue:83
 #: src/components/NodeSelector/NodeSelector.vue:83
 #: src/components/NodeSelector/NodeSelector.vue:97
 #: src/components/NodeSelector/NodeSelector.vue:97
 #: src/views/dashboard/Environments.vue:100
 #: src/views/dashboard/Environments.vue:100
-#: src/views/environment/envColumns.tsx:83
+#: src/views/environment/envColumns.tsx:52
 msgid "Online"
 msgid "Online"
 msgstr "온라인"
 msgstr "온라인"
 
 
@@ -1825,7 +1824,7 @@ msgstr ""
 msgid "Payload resource is nil"
 msgid "Payload resource is nil"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/BatchUpgrader.vue:233
+#: src/views/environment/BatchUpgrader.vue:232
 msgid "Perform"
 msgid "Perform"
 msgstr ""
 msgstr ""
 
 
@@ -1910,7 +1909,7 @@ msgid ""
 "Please note that the unit of time configurations below are all in seconds."
 "Please note that the unit of time configurations below are all in seconds."
 msgstr "아래의 시간 설정 단위는 모두 초 단위임을 유의해주세요."
 msgstr "아래의 시간 설정 단위는 모두 초 단위임을 유의해주세요."
 
 
-#: src/views/environment/Environment.vue:45
+#: src/views/environment/Environment.vue:48
 #, fuzzy
 #, fuzzy
 msgid "Please select at least one node to upgrade"
 msgid "Please select at least one node to upgrade"
 msgstr "적어도 하나의 노드를 선택해주세요!"
 msgstr "적어도 하나의 노드를 선택해주세요!"
@@ -1930,8 +1929,8 @@ msgstr "적어도 하나의 노드를 선택해주세요!"
 msgid "Please upgrade the remote Nginx UI to the latest version"
 msgid "Please upgrade the remote Nginx UI to the latest version"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 msgstr "%{conf_name}을(를) %{node_name}(으)로 성공적으로 복제함"
 
 
-#: src/views/environment/BatchUpgrader.vue:168
-#: src/views/environment/BatchUpgrader.vue:221 src/views/system/Upgrade.vue:194
+#: src/views/environment/BatchUpgrader.vue:167
+#: src/views/environment/BatchUpgrader.vue:220 src/views/system/Upgrade.vue:194
 #: src/views/system/Upgrade.vue:245
 #: src/views/system/Upgrade.vue:245
 msgid "Pre-release"
 msgid "Pre-release"
 msgstr "사전 출시"
 msgstr "사전 출시"
@@ -2011,11 +2010,11 @@ msgstr ""
 msgid "Recursive Nameservers"
 msgid "Recursive Nameservers"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:290
+#: src/components/ChatGPT/ChatGPT.vue:387
 msgid "Regenerate response"
 msgid "Regenerate response"
 msgstr "응답 재생성"
 msgstr "응답 재생성"
 
 
-#: src/views/certificate/ACMEUser.vue:136
+#: src/views/certificate/ACMEUser.vue:137
 #, fuzzy
 #, fuzzy
 msgid "Register"
 msgid "Register"
 msgstr "사용자 등록 중"
 msgstr "사용자 등록 중"
@@ -2026,7 +2025,7 @@ msgid ""
 "proxy."
 "proxy."
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:105
+#: src/views/certificate/ACMEUser.vue:106
 #, fuzzy
 #, fuzzy
 msgid "Register failed"
 msgid "Register failed"
 msgstr "사용자 등록 중"
 msgstr "사용자 등록 중"
@@ -2041,7 +2040,7 @@ msgstr "사용자 등록 중"
 msgid "Register passkey successfully"
 msgid "Register passkey successfully"
 msgstr "성공적으로 갱신됨"
 msgstr "성공적으로 갱신됨"
 
 
-#: src/views/certificate/ACMEUser.vue:103
+#: src/views/certificate/ACMEUser.vue:104
 #, fuzzy
 #, fuzzy
 msgid "Register successfully"
 msgid "Register successfully"
 msgstr "성공적으로 갱신됨"
 msgstr "성공적으로 갱신됨"
@@ -2050,7 +2049,7 @@ msgstr "성공적으로 갱신됨"
 msgid "Registering user"
 msgid "Registering user"
 msgstr "사용자 등록 중"
 msgstr "사용자 등록 중"
 
 
-#: src/views/certificate/ACMEUser.vue:119
+#: src/views/certificate/ACMEUser.vue:120
 #, fuzzy
 #, fuzzy
 msgid "Registration Status"
 msgid "Registration Status"
 msgstr "사용자 등록 중"
 msgstr "사용자 등록 중"
@@ -2064,7 +2063,7 @@ msgstr "재설치"
 msgid "Release Note"
 msgid "Release Note"
 msgstr "릴리스 노트"
 msgstr "릴리스 노트"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:266
+#: src/components/ChatGPT/ChatGPT.vue:362
 #: src/components/NginxControl/NginxControl.vue:99
 #: src/components/NginxControl/NginxControl.vue:99
 msgid "Reload"
 msgid "Reload"
 msgstr "리로드"
 msgstr "리로드"
@@ -2104,7 +2103,7 @@ msgstr "성공적으로 제거됨"
 
 
 #: src/views/config/components/ConfigName.vue:48
 #: src/views/config/components/ConfigName.vue:48
 #: src/views/config/components/Rename.vue:54
 #: src/views/config/components/Rename.vue:54
-#: src/views/config/ConfigList.vue:165
+#: src/views/config/ConfigList.vue:166
 #: src/views/site/ngx_conf/NgxUpstream.vue:125
 #: src/views/site/ngx_conf/NgxUpstream.vue:125
 #: src/views/site/site_edit/components/ConfigName.vue:44
 #: src/views/site/site_edit/components/ConfigName.vue:44
 #, fuzzy
 #, fuzzy
@@ -2227,7 +2226,7 @@ msgstr "실행 모드"
 msgid "Running"
 msgid "Running"
 msgstr "실행 중"
 msgstr "실행 중"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:259
+#: src/components/ChatGPT/ChatGPT.vue:355
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:64
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:64
 #: src/components/StdDesign/StdDetail/StdDetail.vue:93
 #: src/components/StdDesign/StdDetail/StdDetail.vue:93
 #: src/views/certificate/CertificateEditor.vue:262
 #: src/views/certificate/CertificateEditor.vue:262
@@ -2299,7 +2298,7 @@ msgstr ""
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:182
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:189
 msgid "Selector"
 msgid "Selector"
 msgstr "선택"
 msgstr "선택"
 
 
@@ -2312,10 +2311,6 @@ msgstr ""
 msgid "Send"
 msgid "Send"
 msgstr "보내기"
 msgstr "보내기"
 
 
-#: src/lib/http/index.ts:128
-msgid "Server error"
-msgstr "서버 오류"
-
 #: src/views/dashboard/ServerAnalytic.vue:179
 #: src/views/dashboard/ServerAnalytic.vue:179
 msgid "Server Info"
 msgid "Server Info"
 msgstr "서버 정보"
 msgstr "서버 정보"
@@ -2332,7 +2327,7 @@ msgstr "server_name 매개변수가 필요합니다"
 msgid "ServerIdx out of range"
 msgid "ServerIdx out of range"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/user.ts:9
+#: src/constants/errors/user.ts:11
 #, fuzzy
 #, fuzzy
 msgid "Session not found"
 msgid "Session not found"
 msgstr "파일을 찾을 수 없음"
 msgstr "파일을 찾을 수 없음"
@@ -2439,8 +2434,8 @@ msgstr "SSL 인증서 경로"
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "SSO 로그인"
 msgstr "SSO 로그인"
 
 
-#: src/views/environment/BatchUpgrader.vue:165
-#: src/views/environment/BatchUpgrader.vue:215 src/views/system/Upgrade.vue:191
+#: src/views/environment/BatchUpgrader.vue:164
+#: src/views/environment/BatchUpgrader.vue:214 src/views/system/Upgrade.vue:191
 #: src/views/system/Upgrade.vue:239
 #: src/views/system/Upgrade.vue:239
 #, fuzzy
 #, fuzzy
 msgid "Stable"
 msgid "Stable"
@@ -2448,8 +2443,8 @@ msgstr "활성화됨"
 
 
 #: src/views/certificate/ACMEUser.vue:65
 #: src/views/certificate/ACMEUser.vue:65
 #: src/views/certificate/CertificateList/certColumns.tsx:68
 #: src/views/certificate/CertificateList/certColumns.tsx:68
-#: src/views/environment/envColumns.tsx:75
-#: src/views/site/site_list/columns.tsx:40 src/views/stream/StreamList.vue:22
+#: src/views/environment/envColumns.tsx:44
+#: src/views/site/site_list/columns.tsx:42 src/views/stream/StreamList.vue:23
 msgid "Status"
 msgid "Status"
 msgstr "상태"
 msgstr "상태"
 
 
@@ -2557,7 +2552,7 @@ msgstr "인증서 갱신 오류"
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "인증서 갱신 성공"
 msgstr "인증서 갱신 성공"
 
 
-#: src/views/site/site_category/SiteCategory.vue:16
+#: src/views/site/site_category/SiteCategory.vue:17
 msgid "Sync Nodes"
 msgid "Sync Nodes"
 msgstr ""
 msgstr ""
 
 
@@ -2736,7 +2731,7 @@ msgstr ""
 msgid "This value is already taken"
 msgid "This value is already taken"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/BatchUpgrader.vue:183
+#: src/views/environment/BatchUpgrader.vue:182
 msgid ""
 msgid ""
 "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgstr ""
 msgstr ""
@@ -2815,7 +2810,6 @@ msgid "Two-factor authentication required"
 msgstr ""
 msgstr ""
 
 
 #: src/views/certificate/CertificateList/certColumns.tsx:25
 #: src/views/certificate/CertificateList/certColumns.tsx:25
-#: src/views/config/configColumns.ts:16
 #: src/views/notification/notificationColumns.tsx:9
 #: src/views/notification/notificationColumns.tsx:9
 msgid "Type"
 msgid "Type"
 msgstr "유형"
 msgstr "유형"
@@ -2827,13 +2821,13 @@ msgstr "성공적으로 저장되었습니다"
 
 
 #: src/views/certificate/ACMEUser.vue:88
 #: src/views/certificate/ACMEUser.vue:88
 #: src/views/certificate/DNSCredential.vue:27
 #: src/views/certificate/DNSCredential.vue:27
-#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:276
-#: src/views/environment/envColumns.tsx:119
-#: src/views/site/site_category/columns.ts:20
+#: src/views/config/configColumns.tsx:34 src/views/config/ConfigEditor.vue:276
+#: src/views/environment/envColumns.tsx:90
+#: src/views/site/site_category/columns.ts:22
 #: src/views/site/site_edit/RightSettings.vue:100
 #: src/views/site/site_edit/RightSettings.vue:100
-#: src/views/site/site_list/columns.tsx:67
+#: src/views/site/site_list/columns.tsx:69
 #: src/views/stream/components/RightSettings.vue:85
 #: src/views/stream/components/RightSettings.vue:85
-#: src/views/stream/StreamList.vue:41 src/views/user/userColumns.tsx:54
+#: src/views/stream/StreamList.vue:43 src/views/user/userColumns.tsx:54
 msgid "Updated at"
 msgid "Updated at"
 msgstr "업데이트됨"
 msgstr "업데이트됨"
 
 
@@ -2842,12 +2836,12 @@ msgstr "업데이트됨"
 msgid "Updated successfully"
 msgid "Updated successfully"
 msgstr "성공적으로 저장되었습니다"
 msgstr "성공적으로 저장되었습니다"
 
 
-#: src/routes/index.ts:297 src/views/environment/Environment.vue:53
+#: src/routes/index.ts:297 src/views/environment/Environment.vue:56
 #: src/views/system/Upgrade.vue:143 src/views/system/Upgrade.vue:226
 #: src/views/system/Upgrade.vue:143 src/views/system/Upgrade.vue:226
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr "업그레이드"
 msgstr "업그레이드"
 
 
-#: src/views/environment/BatchUpgrader.vue:138
+#: src/views/environment/BatchUpgrader.vue:137
 #, fuzzy
 #, fuzzy
 msgid "Upgraded Nginx UI on %{node} successfully 🎉"
 msgid "Upgraded Nginx UI on %{node} successfully 🎉"
 msgstr "성공적으로 저장되었습니다"
 msgstr "성공적으로 저장되었습니다"
@@ -2857,7 +2851,7 @@ msgstr "성공적으로 저장되었습니다"
 msgid "Upgraded successfully"
 msgid "Upgraded successfully"
 msgstr "성공적으로 저장되었습니다"
 msgstr "성공적으로 저장되었습니다"
 
 
-#: src/views/environment/BatchUpgrader.vue:89 src/views/system/Upgrade.vue:77
+#: src/views/environment/BatchUpgrader.vue:88 src/views/system/Upgrade.vue:77
 msgid "Upgrading Nginx UI, please wait..."
 msgid "Upgrading Nginx UI, please wait..."
 msgstr "Nginx UI를 업그레이드하는 중입니다. 잠시 기다려주세요..."
 msgstr "Nginx UI를 업그레이드하는 중입니다. 잠시 기다려주세요..."
 
 
@@ -2869,7 +2863,7 @@ msgstr "업스트림 이름"
 msgid "Uptime:"
 msgid "Uptime:"
 msgstr "가동 시간:"
 msgstr "가동 시간:"
 
 
-#: src/views/environment/envColumns.tsx:18
+#: src/views/environment/envColumns.tsx:19
 msgid "URL"
 msgid "URL"
 msgstr "URL"
 msgstr "URL"
 
 
@@ -2881,7 +2875,7 @@ msgstr ""
 msgid "Use recovery code"
 msgid "Use recovery code"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:237
+#: src/components/ChatGPT/ChatGPT.vue:333
 #, fuzzy
 #, fuzzy
 msgid "User"
 msgid "User"
 msgstr "사용자 이름"
 msgstr "사용자 이름"
@@ -2903,13 +2897,13 @@ msgstr "사용자 이름"
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr "사용자 이름 (*)"
 msgstr "사용자 이름 (*)"
 
 
-#: src/views/certificate/ACMEUser.vue:123
+#: src/views/certificate/ACMEUser.vue:124
 #: src/views/certificate/CertificateList/certColumns.tsx:81
 #: src/views/certificate/CertificateList/certColumns.tsx:81
 #: src/views/site/cert/CertInfo.vue:24
 #: src/views/site/cert/CertInfo.vue:24
 msgid "Valid"
 msgid "Valid"
 msgstr "유효함"
 msgstr "유효함"
 
 
-#: src/views/environment/envColumns.tsx:29
+#: src/views/environment/envColumns.tsx:31
 #, fuzzy
 #, fuzzy
 msgid "Version"
 msgid "Version"
 msgstr "현재 버전"
 msgstr "현재 버전"
@@ -3016,6 +3010,18 @@ msgstr ""
 msgid "Your passkeys"
 msgid "Your passkeys"
 msgstr ""
 msgstr ""
 
 
+#~ msgid "Directory"
+#~ msgstr "디렉토리"
+
+#~ msgid "Environment"
+#~ msgstr "환경"
+
+#~ msgid "File"
+#~ msgstr "파일"
+
+#~ msgid "Server error"
+#~ msgstr "서버 오류"
+
 #, fuzzy
 #, fuzzy
 #~ msgid "Incorrect username or password"
 #~ msgid "Incorrect username or password"
 #~ msgstr "사용자 이름 또는 비밀번호가 올바르지 않습니다"
 #~ msgstr "사용자 이름 또는 비밀번호가 올바르지 않습니다"

+ 116 - 124
app/src/language/messages.pot

@@ -20,7 +20,7 @@ msgid "Access Logs"
 msgstr ""
 msgstr ""
 
 
 #: src/routes/index.ts:148
 #: src/routes/index.ts:148
-#: src/views/certificate/ACMEUser.vue:112
+#: src/views/certificate/ACMEUser.vue:113
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
 msgid "ACME User"
 msgid "ACME User"
 msgstr ""
 msgstr ""
@@ -28,13 +28,13 @@ msgstr ""
 #: src/views/certificate/ACMEUser.vue:95
 #: src/views/certificate/ACMEUser.vue:95
 #: src/views/certificate/CertificateList/certColumns.tsx:97
 #: src/views/certificate/CertificateList/certColumns.tsx:97
 #: src/views/certificate/DNSCredential.vue:33
 #: src/views/certificate/DNSCredential.vue:33
-#: src/views/config/configColumns.ts:38
-#: src/views/environment/envColumns.tsx:125
-#: src/views/notification/notificationColumns.tsx:62
+#: src/views/config/configColumns.tsx:42
+#: src/views/environment/envColumns.tsx:97
+#: src/views/notification/notificationColumns.tsx:65
 #: src/views/preference/AuthSettings.vue:26
 #: src/views/preference/AuthSettings.vue:26
-#: src/views/site/site_category/columns.ts:26
-#: src/views/site/site_list/columns.tsx:74
-#: src/views/stream/StreamList.vue:47
+#: src/views/site/site_category/columns.ts:29
+#: src/views/site/site_list/columns.tsx:76
+#: src/views/stream/StreamList.vue:49
 #: src/views/user/userColumns.tsx:60
 #: src/views/user/userColumns.tsx:60
 msgid "Action"
 msgid "Action"
 msgstr ""
 msgstr ""
@@ -45,7 +45,7 @@ msgstr ""
 #: src/views/site/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/site/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/site/ngx_conf/NgxServer.vue:162
 #: src/views/site/ngx_conf/NgxServer.vue:162
 #: src/views/site/ngx_conf/NgxUpstream.vue:154
 #: src/views/site/ngx_conf/NgxUpstream.vue:154
-#: src/views/stream/StreamList.vue:117
+#: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr ""
 msgstr ""
 
 
@@ -74,11 +74,11 @@ msgstr ""
 msgid "Add Site"
 msgid "Add Site"
 msgstr ""
 msgstr ""
 
 
-#: src/views/stream/StreamList.vue:176
+#: src/views/stream/StreamList.vue:181
 msgid "Add Stream"
 msgid "Add Stream"
 msgstr ""
 msgstr ""
 
 
-#: src/views/stream/StreamList.vue:109
+#: src/views/stream/StreamList.vue:113
 msgid "Added successfully"
 msgid "Added successfully"
 msgstr ""
 msgstr ""
 
 
@@ -145,11 +145,11 @@ msgid "Are you sure you want to apply to all selected?"
 msgstr ""
 msgstr ""
 
 
 #: src/components/Notification/Notification.vue:130
 #: src/components/Notification/Notification.vue:130
-#: src/views/notification/Notification.vue:38
+#: src/views/notification/Notification.vue:39
 msgid "Are you sure you want to clear all notifications?"
 msgid "Are you sure you want to clear all notifications?"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:279
+#: src/components/ChatGPT/ChatGPT.vue:376
 msgid "Are you sure you want to clear the record of chat?"
 msgid "Are you sure you want to clear the record of chat?"
 msgstr ""
 msgstr ""
 
 
@@ -161,8 +161,8 @@ msgstr ""
 msgid "Are you sure you want to delete this item?"
 msgid "Are you sure you want to delete this item?"
 msgstr ""
 msgstr ""
 
 
-#: src/views/site/site_list/SiteList.vue:144
-#: src/views/stream/StreamList.vue:160
+#: src/views/site/site_list/SiteList.vue:145
+#: src/views/stream/StreamList.vue:165
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr ""
 msgstr ""
 
 
@@ -182,11 +182,11 @@ msgstr ""
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:223
+#: src/components/ChatGPT/ChatGPT.vue:318
 msgid "Ask ChatGPT for Help"
 msgid "Ask ChatGPT for Help"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:237
+#: src/components/ChatGPT/ChatGPT.vue:333
 msgid "Assistant"
 msgid "Assistant"
 msgstr ""
 msgstr ""
 
 
@@ -230,7 +230,7 @@ msgstr ""
 #: src/views/certificate/CertificateEditor.vue:255
 #: src/views/certificate/CertificateEditor.vue:255
 #: src/views/config/ConfigEditor.vue:213
 #: src/views/config/ConfigEditor.vue:213
 #: src/views/config/ConfigList.vue:106
 #: src/views/config/ConfigList.vue:106
-#: src/views/config/ConfigList.vue:179
+#: src/views/config/ConfigList.vue:180
 #: src/views/nginx_log/NginxLog.vue:173
 #: src/views/nginx_log/NginxLog.vue:173
 #: src/views/site/site_edit/SiteEdit.vue:264
 #: src/views/site/site_edit/SiteEdit.vue:264
 #: src/views/stream/StreamEdit.vue:245
 #: src/views/stream/StreamEdit.vue:245
@@ -282,7 +282,7 @@ msgstr ""
 msgid "Batch Modify"
 msgid "Batch Modify"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/BatchUpgrader.vue:153
+#: src/views/environment/BatchUpgrader.vue:152
 msgid "Batch Upgrade"
 msgid "Batch Upgrade"
 msgstr ""
 msgstr ""
 
 
@@ -310,9 +310,9 @@ msgstr ""
 msgid "Can't scan? Use text key binding"
 msgid "Can't scan? Use text key binding"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:260
+#: src/components/ChatGPT/ChatGPT.vue:356
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:180
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:187
 #: src/components/StdDesign/StdDetail/StdDetail.vue:101
 #: src/components/StdDesign/StdDetail/StdDetail.vue:101
 #: src/views/preference/components/Passkey.vue:141
 #: src/views/preference/components/Passkey.vue:141
 #: src/views/site/cert/components/ObtainCert.vue:140
 #: src/views/site/cert/components/ObtainCert.vue:140
@@ -325,8 +325,16 @@ msgstr ""
 msgid "Cancel"
 msgid "Cancel"
 msgstr ""
 msgstr ""
 
 
+#: src/constants/errors/user.ts:10
+msgid "Cannot change initial user password in demo mode"
+msgstr ""
+
+#: src/constants/errors/user.ts:9
+msgid "Cannot remove initial user"
+msgstr ""
+
 #: src/views/site/site_edit/RightSettings.vue:91
 #: src/views/site/site_edit/RightSettings.vue:91
-#: src/views/site/site_list/columns.tsx:23
+#: src/views/site/site_list/columns.tsx:25
 msgid "Category"
 msgid "Category"
 msgstr ""
 msgstr ""
 
 
@@ -385,7 +393,7 @@ msgstr[1] ""
 msgid "Changed Path"
 msgid "Changed Path"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/BatchUpgrader.vue:160
+#: src/views/environment/BatchUpgrader.vue:159
 #: src/views/system/Upgrade.vue:188
 #: src/views/system/Upgrade.vue:188
 msgid "Channel"
 msgid "Channel"
 msgstr ""
 msgstr ""
@@ -418,9 +426,9 @@ msgstr ""
 msgid "Cleaning environment variables"
 msgid "Cleaning environment variables"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:283
+#: src/components/ChatGPT/ChatGPT.vue:380
 #: src/components/Notification/Notification.vue:135
 #: src/components/Notification/Notification.vue:135
-#: src/views/notification/Notification.vue:43
+#: src/views/notification/Notification.vue:44
 msgid "Clear"
 msgid "Clear"
 msgstr ""
 msgstr ""
 
 
@@ -512,9 +520,9 @@ msgstr ""
 msgid "Create Folder"
 msgid "Create Folder"
 msgstr ""
 msgstr ""
 
 
-#: src/views/notification/notificationColumns.tsx:56
+#: src/views/notification/notificationColumns.tsx:58
 #: src/views/preference/components/Passkey.vue:95
 #: src/views/preference/components/Passkey.vue:95
-#: src/views/site/site_category/columns.ts:14
+#: src/views/site/site_category/columns.ts:15
 #: src/views/user/userColumns.tsx:48
 #: src/views/user/userColumns.tsx:48
 msgid "Created at"
 msgid "Created at"
 msgstr ""
 msgstr ""
@@ -575,8 +583,8 @@ msgstr ""
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/views/site/ngx_conf/NgxServer.vue:110
 #: src/views/site/ngx_conf/NgxServer.vue:110
 #: src/views/site/ngx_conf/NgxUpstream.vue:128
 #: src/views/site/ngx_conf/NgxUpstream.vue:128
-#: src/views/site/site_list/SiteList.vue:153
-#: src/views/stream/StreamList.vue:169
+#: src/views/site/site_list/SiteList.vue:154
+#: src/views/stream/StreamList.vue:174
 msgid "Delete"
 msgid "Delete"
 msgstr ""
 msgstr ""
 
 
@@ -597,7 +605,7 @@ msgstr ""
 msgid "Delete site: %{site_name}"
 msgid "Delete site: %{site_name}"
 msgstr ""
 msgstr ""
 
 
-#: src/views/stream/StreamList.vue:78
+#: src/views/stream/StreamList.vue:82
 msgid "Delete stream: %{stream_name}"
 msgid "Delete stream: %{stream_name}"
 msgstr ""
 msgstr ""
 
 
@@ -632,7 +640,7 @@ msgstr ""
 msgid "Destination file already exists"
 msgid "Destination file already exists"
 msgstr ""
 msgstr ""
 
 
-#: src/views/notification/notificationColumns.tsx:51
+#: src/views/notification/notificationColumns.tsx:52
 msgid "Details"
 msgid "Details"
 msgstr ""
 msgstr ""
 
 
@@ -660,12 +668,8 @@ msgstr ""
 msgid "Directives"
 msgid "Directives"
 msgstr ""
 msgstr ""
 
 
-#: src/views/config/configColumns.ts:22
-msgid "Directory"
-msgstr ""
-
-#: src/views/site/site_list/SiteList.vue:124
-#: src/views/stream/StreamList.vue:140
+#: src/views/site/site_list/SiteList.vue:125
+#: src/views/stream/StreamList.vue:145
 msgid "Disable"
 msgid "Disable"
 msgstr ""
 msgstr ""
 
 
@@ -689,13 +693,13 @@ msgstr ""
 msgid "Disable Site %{site} on %{node} successfully"
 msgid "Disable Site %{site} on %{node} successfully"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/envColumns.tsx:109
-#: src/views/environment/envColumns.tsx:92
+#: src/views/environment/envColumns.tsx:61
+#: src/views/environment/envColumns.tsx:79
 #: src/views/site/site_edit/SiteEdit.vue:190
 #: src/views/site/site_edit/SiteEdit.vue:190
-#: src/views/site/site_list/columns.tsx:51
-#: src/views/site/site_list/columns.tsx:60
+#: src/views/site/site_list/columns.tsx:53
+#: src/views/site/site_list/columns.tsx:62
 #: src/views/stream/StreamEdit.vue:175
 #: src/views/stream/StreamEdit.vue:175
-#: src/views/stream/StreamList.vue:33
+#: src/views/stream/StreamList.vue:34
 #: src/views/user/userColumns.tsx:41
 #: src/views/user/userColumns.tsx:41
 msgid "Disabled"
 msgid "Disabled"
 msgstr ""
 msgstr ""
@@ -703,7 +707,7 @@ msgstr ""
 #: src/views/site/site_edit/RightSettings.vue:42
 #: src/views/site/site_edit/RightSettings.vue:42
 #: src/views/site/site_list/SiteList.vue:56
 #: src/views/site/site_list/SiteList.vue:56
 #: src/views/stream/components/RightSettings.vue:38
 #: src/views/stream/components/RightSettings.vue:38
-#: src/views/stream/StreamList.vue:67
+#: src/views/stream/StreamList.vue:71
 msgid "Disabled successfully"
 msgid "Disabled successfully"
 msgstr ""
 msgstr ""
 
 
@@ -794,7 +798,7 @@ msgstr ""
 msgid "Downloading latest release"
 msgid "Downloading latest release"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/BatchUpgrader.vue:189
+#: src/views/environment/BatchUpgrader.vue:188
 #: src/views/system/Upgrade.vue:215
 #: src/views/system/Upgrade.vue:215
 msgid "Dry run mode enabled"
 msgid "Dry run mode enabled"
 msgstr ""
 msgstr ""
@@ -804,9 +808,9 @@ msgid "Due to the security policies of some browsers, you cannot use passkeys on
 msgstr ""
 msgstr ""
 
 
 #: src/views/site/site_list/SiteDuplicate.vue:72
 #: src/views/site/site_list/SiteDuplicate.vue:72
-#: src/views/site/site_list/SiteList.vue:139
+#: src/views/site/site_list/SiteList.vue:140
 #: src/views/stream/components/StreamDuplicate.vue:121
 #: src/views/stream/components/StreamDuplicate.vue:121
-#: src/views/stream/StreamList.vue:155
+#: src/views/stream/StreamList.vue:160
 msgid "Duplicate"
 msgid "Duplicate"
 msgstr ""
 msgstr ""
 
 
@@ -857,9 +861,9 @@ msgstr ""
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr ""
 msgstr ""
 
 
-#: src/views/site/site_list/SiteList.vue:132
+#: src/views/site/site_list/SiteList.vue:133
 #: src/views/stream/components/Deploy.vue:80
 #: src/views/stream/components/Deploy.vue:80
-#: src/views/stream/StreamList.vue:148
+#: src/views/stream/StreamList.vue:153
 msgid "Enable"
 msgid "Enable"
 msgstr ""
 msgstr ""
 
 
@@ -911,16 +915,16 @@ msgstr ""
 msgid "Enable TOTP"
 msgid "Enable TOTP"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/envColumns.tsx:100
-#: src/views/environment/envColumns.tsx:106
+#: src/views/environment/envColumns.tsx:70
+#: src/views/environment/envColumns.tsx:76
 #: src/views/preference/LogrotateSettings.vue:19
 #: src/views/preference/LogrotateSettings.vue:19
 #: src/views/site/site_edit/RightSettings.vue:82
 #: src/views/site/site_edit/RightSettings.vue:82
 #: src/views/site/site_edit/SiteEdit.vue:184
 #: src/views/site/site_edit/SiteEdit.vue:184
-#: src/views/site/site_list/columns.tsx:47
-#: src/views/site/site_list/columns.tsx:59
+#: src/views/site/site_list/columns.tsx:49
+#: src/views/site/site_list/columns.tsx:61
 #: src/views/stream/components/RightSettings.vue:76
 #: src/views/stream/components/RightSettings.vue:76
 #: src/views/stream/StreamEdit.vue:169
 #: src/views/stream/StreamEdit.vue:169
-#: src/views/stream/StreamList.vue:29
+#: src/views/stream/StreamList.vue:30
 #: src/views/user/userColumns.tsx:38
 #: src/views/user/userColumns.tsx:38
 msgid "Enabled"
 msgid "Enabled"
 msgstr ""
 msgstr ""
@@ -930,7 +934,7 @@ msgstr ""
 #: src/views/site/SiteAdd.vue:40
 #: src/views/site/SiteAdd.vue:40
 #: src/views/stream/components/RightSettings.vue:29
 #: src/views/stream/components/RightSettings.vue:29
 #: src/views/stream/components/StreamDuplicate.vue:93
 #: src/views/stream/components/StreamDuplicate.vue:93
-#: src/views/stream/StreamList.vue:57
+#: src/views/stream/StreamList.vue:61
 msgid "Enabled successfully"
 msgid "Enabled successfully"
 msgstr ""
 msgstr ""
 
 
@@ -938,16 +942,13 @@ msgstr ""
 msgid "Encrypt website with Let's Encrypt"
 msgid "Encrypt website with Let's Encrypt"
 msgstr ""
 msgstr ""
 
 
-#: src/routes/index.ts:234
-#: src/views/environment/Environment.vue:32
-msgid "Environment"
-msgstr ""
-
 #: src/language/constants.ts:21
 #: src/language/constants.ts:21
 msgid "Environment variables cleaned"
 msgid "Environment variables cleaned"
 msgstr ""
 msgstr ""
 
 
+#: src/routes/index.ts:234
 #: src/views/dashboard/Environments.vue:83
 #: src/views/dashboard/Environments.vue:83
+#: src/views/environment/Environment.vue:33
 msgid "Environments"
 msgid "Environments"
 msgstr ""
 msgstr ""
 
 
@@ -990,14 +991,14 @@ msgstr ""
 #: src/views/site/site_edit/RightSettings.vue:45
 #: src/views/site/site_edit/RightSettings.vue:45
 #: src/views/site/site_list/SiteList.vue:60
 #: src/views/site/site_list/SiteList.vue:60
 #: src/views/stream/components/RightSettings.vue:41
 #: src/views/stream/components/RightSettings.vue:41
-#: src/views/stream/StreamList.vue:71
+#: src/views/stream/StreamList.vue:75
 msgid "Failed to disable %{msg}"
 msgid "Failed to disable %{msg}"
 msgstr ""
 msgstr ""
 
 
 #: src/views/site/site_edit/RightSettings.vue:36
 #: src/views/site/site_edit/RightSettings.vue:36
 #: src/views/site/site_list/SiteList.vue:50
 #: src/views/site/site_list/SiteList.vue:50
 #: src/views/stream/components/RightSettings.vue:32
 #: src/views/stream/components/RightSettings.vue:32
-#: src/views/stream/StreamList.vue:61
+#: src/views/stream/StreamList.vue:65
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr ""
 msgstr ""
 
 
@@ -1018,10 +1019,6 @@ msgstr ""
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgstr ""
 msgstr ""
 
 
-#: src/views/config/configColumns.ts:24
-msgid "File"
-msgstr ""
-
 #: src/language/constants.ts:31
 #: src/language/constants.ts:31
 msgid "File exists"
 msgid "File exists"
 msgstr ""
 msgstr ""
@@ -1080,7 +1077,7 @@ msgstr ""
 msgid "Generating private key for registering account"
 msgid "Generating private key for registering account"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/BatchUpgrader.vue:178
+#: src/views/environment/BatchUpgrader.vue:177
 #: src/views/system/Upgrade.vue:169
 #: src/views/system/Upgrade.vue:169
 msgid "Get release information error"
 msgid "Get release information error"
 msgstr ""
 msgstr ""
@@ -1186,7 +1183,7 @@ msgstr ""
 msgid "Interval"
 msgid "Interval"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:128
+#: src/views/certificate/ACMEUser.vue:129
 msgid "Invalid"
 msgid "Invalid"
 msgstr ""
 msgstr ""
 
 
@@ -1290,7 +1287,7 @@ msgstr ""
 msgid "Load Average:"
 msgid "Load Average:"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/Environment.vue:37
+#: src/views/environment/Environment.vue:39
 msgid "Load from settings"
 msgid "Load from settings"
 msgstr ""
 msgstr ""
 
 
@@ -1354,12 +1351,12 @@ msgid "Manage Sites"
 msgstr ""
 msgstr ""
 
 
 #: src/routes/index.ts:89
 #: src/routes/index.ts:89
-#: src/views/stream/StreamList.vue:115
+#: src/views/stream/StreamList.vue:119
 msgid "Manage Streams"
 msgid "Manage Streams"
 msgstr ""
 msgstr ""
 
 
 #: src/routes/index.ts:257
 #: src/routes/index.ts:257
-#: src/views/user/User.vue:9
+#: src/views/user/User.vue:10
 msgid "Manage Users"
 msgid "Manage Users"
 msgstr ""
 msgstr ""
 
 
@@ -1388,10 +1385,10 @@ msgstr ""
 msgid "Model"
 msgid "Model"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:256
+#: src/components/ChatGPT/ChatGPT.vue:352
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:151
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:151
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:498
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:498
-#: src/views/config/ConfigList.vue:158
+#: src/views/config/ConfigList.vue:159
 msgid "Modify"
 msgid "Modify"
 msgstr ""
 msgstr ""
 
 
@@ -1417,19 +1414,19 @@ msgstr ""
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/config/components/Mkdir.vue:64
 #: src/views/config/components/Mkdir.vue:64
-#: src/views/config/configColumns.ts:8
+#: src/views/config/configColumns.tsx:7
 #: src/views/config/ConfigEditor.vue:256
 #: src/views/config/ConfigEditor.vue:256
 #: src/views/environment/envColumns.tsx:9
 #: src/views/environment/envColumns.tsx:9
 #: src/views/preference/components/AddPasskey.vue:75
 #: src/views/preference/components/AddPasskey.vue:75
 #: src/views/site/ngx_conf/NgxUpstream.vue:177
 #: src/views/site/ngx_conf/NgxUpstream.vue:177
 #: src/views/site/site_category/columns.ts:7
 #: src/views/site/site_category/columns.ts:7
 #: src/views/site/site_edit/RightSettings.vue:88
 #: src/views/site/site_edit/RightSettings.vue:88
-#: src/views/site/site_list/columns.tsx:13
+#: src/views/site/site_list/columns.tsx:15
 #: src/views/site/site_list/SiteDuplicate.vue:79
 #: src/views/site/site_list/SiteDuplicate.vue:79
 #: src/views/stream/components/RightSettings.vue:82
 #: src/views/stream/components/RightSettings.vue:82
 #: src/views/stream/components/StreamDuplicate.vue:128
 #: src/views/stream/components/StreamDuplicate.vue:128
 #: src/views/stream/StreamList.vue:13
 #: src/views/stream/StreamList.vue:13
-#: src/views/stream/StreamList.vue:181
+#: src/views/stream/StreamList.vue:186
 msgid "Name"
 msgid "Name"
 msgstr ""
 msgstr ""
 
 
@@ -1549,20 +1546,20 @@ msgstr ""
 msgid "Nginx restarted successfully"
 msgid "Nginx restarted successfully"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:277
+#: src/components/ChatGPT/ChatGPT.vue:374
 #: src/components/Notification/Notification.vue:128
 #: src/components/Notification/Notification.vue:128
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:510
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:510
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:524
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:524
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:538
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:538
-#: src/views/notification/Notification.vue:36
+#: src/views/notification/Notification.vue:37
 #: src/views/preference/AuthSettings.vue:136
 #: src/views/preference/AuthSettings.vue:136
 #: src/views/preference/CertSettings.vue:70
 #: src/views/preference/CertSettings.vue:70
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97
 #: src/views/site/ngx_conf/LocationEditor.vue:90
 #: src/views/site/ngx_conf/LocationEditor.vue:90
-#: src/views/site/site_list/SiteList.vue:142
-#: src/views/stream/StreamList.vue:158
+#: src/views/site/site_list/SiteList.vue:143
+#: src/views/stream/StreamList.vue:163
 msgid "No"
 msgid "No"
 msgstr ""
 msgstr ""
 
 
@@ -1595,7 +1592,7 @@ msgstr ""
 msgid "Note, if the configuration file include other configurations or certificates, please synchronize them to the remote nodes in advance."
 msgid "Note, if the configuration file include other configurations or certificates, please synchronize them to the remote nodes in advance."
 msgstr ""
 msgstr ""
 
 
-#: src/views/notification/Notification.vue:27
+#: src/views/notification/Notification.vue:28
 msgid "Notification"
 msgid "Notification"
 msgstr ""
 msgstr ""
 
 
@@ -1622,7 +1619,7 @@ msgstr ""
 
 
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/views/dashboard/Environments.vue:107
 #: src/views/dashboard/Environments.vue:107
-#: src/views/environment/envColumns.tsx:87
+#: src/views/environment/envColumns.tsx:56
 msgid "Offline"
 msgid "Offline"
 msgstr ""
 msgstr ""
 
 
@@ -1630,23 +1627,23 @@ msgstr ""
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:511
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:511
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:525
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:525
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:539
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:539
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:181
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:188
 msgid "Ok"
 msgid "Ok"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:278
+#: src/components/ChatGPT/ChatGPT.vue:375
 #: src/components/Notification/Notification.vue:129
 #: src/components/Notification/Notification.vue:129
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:95
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:95
-#: src/views/notification/Notification.vue:37
+#: src/views/notification/Notification.vue:38
 #: src/views/site/cert/components/ObtainCert.vue:139
 #: src/views/site/cert/components/ObtainCert.vue:139
 #: src/views/site/ngx_conf/NgxConfigEditor.vue:50
 #: src/views/site/ngx_conf/NgxConfigEditor.vue:50
 #: src/views/site/ngx_conf/NgxServer.vue:79
 #: src/views/site/ngx_conf/NgxServer.vue:79
 #: src/views/site/ngx_conf/NgxUpstream.vue:33
 #: src/views/site/ngx_conf/NgxUpstream.vue:33
 #: src/views/site/site_edit/RightSettings.vue:54
 #: src/views/site/site_edit/RightSettings.vue:54
-#: src/views/site/site_list/SiteList.vue:143
+#: src/views/site/site_list/SiteList.vue:144
 #: src/views/stream/components/Deploy.vue:19
 #: src/views/stream/components/Deploy.vue:19
 #: src/views/stream/components/RightSettings.vue:50
 #: src/views/stream/components/RightSettings.vue:50
-#: src/views/stream/StreamList.vue:159
+#: src/views/stream/StreamList.vue:164
 msgid "OK"
 msgid "OK"
 msgstr ""
 msgstr ""
 
 
@@ -1657,7 +1654,7 @@ msgstr ""
 #: src/components/NodeSelector/NodeSelector.vue:83
 #: src/components/NodeSelector/NodeSelector.vue:83
 #: src/components/NodeSelector/NodeSelector.vue:97
 #: src/components/NodeSelector/NodeSelector.vue:97
 #: src/views/dashboard/Environments.vue:100
 #: src/views/dashboard/Environments.vue:100
-#: src/views/environment/envColumns.tsx:83
+#: src/views/environment/envColumns.tsx:52
 msgid "Online"
 msgid "Online"
 msgstr ""
 msgstr ""
 
 
@@ -1740,7 +1737,7 @@ msgstr ""
 msgid "Payload resource is nil"
 msgid "Payload resource is nil"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/BatchUpgrader.vue:233
+#: src/views/environment/BatchUpgrader.vue:232
 msgid "Perform"
 msgid "Perform"
 msgstr ""
 msgstr ""
 
 
@@ -1811,7 +1808,7 @@ msgstr ""
 msgid "Please note that the unit of time configurations below are all in seconds."
 msgid "Please note that the unit of time configurations below are all in seconds."
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/Environment.vue:45
+#: src/views/environment/Environment.vue:48
 msgid "Please select at least one node to upgrade"
 msgid "Please select at least one node to upgrade"
 msgstr ""
 msgstr ""
 
 
@@ -1829,8 +1826,8 @@ msgstr ""
 msgid "Please upgrade the remote Nginx UI to the latest version"
 msgid "Please upgrade the remote Nginx UI to the latest version"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/BatchUpgrader.vue:168
-#: src/views/environment/BatchUpgrader.vue:221
+#: src/views/environment/BatchUpgrader.vue:167
+#: src/views/environment/BatchUpgrader.vue:220
 #: src/views/system/Upgrade.vue:194
 #: src/views/system/Upgrade.vue:194
 #: src/views/system/Upgrade.vue:245
 #: src/views/system/Upgrade.vue:245
 msgid "Pre-release"
 msgid "Pre-release"
@@ -1909,11 +1906,11 @@ msgstr ""
 msgid "Recursive Nameservers"
 msgid "Recursive Nameservers"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:290
+#: src/components/ChatGPT/ChatGPT.vue:387
 msgid "Regenerate response"
 msgid "Regenerate response"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:136
+#: src/views/certificate/ACMEUser.vue:137
 msgid "Register"
 msgid "Register"
 msgstr ""
 msgstr ""
 
 
@@ -1921,7 +1918,7 @@ msgstr ""
 msgid "Register a user or use this account to issue a certificate through an HTTP proxy."
 msgid "Register a user or use this account to issue a certificate through an HTTP proxy."
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:105
+#: src/views/certificate/ACMEUser.vue:106
 msgid "Register failed"
 msgid "Register failed"
 msgstr ""
 msgstr ""
 
 
@@ -1933,7 +1930,7 @@ msgstr ""
 msgid "Register passkey successfully"
 msgid "Register passkey successfully"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:103
+#: src/views/certificate/ACMEUser.vue:104
 msgid "Register successfully"
 msgid "Register successfully"
 msgstr ""
 msgstr ""
 
 
@@ -1941,7 +1938,7 @@ msgstr ""
 msgid "Registering user"
 msgid "Registering user"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:119
+#: src/views/certificate/ACMEUser.vue:120
 msgid "Registration Status"
 msgid "Registration Status"
 msgstr ""
 msgstr ""
 
 
@@ -1953,7 +1950,7 @@ msgstr ""
 msgid "Release Note"
 msgid "Release Note"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:266
+#: src/components/ChatGPT/ChatGPT.vue:362
 #: src/components/NginxControl/NginxControl.vue:99
 #: src/components/NginxControl/NginxControl.vue:99
 msgid "Reload"
 msgid "Reload"
 msgstr ""
 msgstr ""
@@ -1989,7 +1986,7 @@ msgstr ""
 
 
 #: src/views/config/components/ConfigName.vue:48
 #: src/views/config/components/ConfigName.vue:48
 #: src/views/config/components/Rename.vue:54
 #: src/views/config/components/Rename.vue:54
-#: src/views/config/ConfigList.vue:165
+#: src/views/config/ConfigList.vue:166
 #: src/views/site/ngx_conf/NgxUpstream.vue:125
 #: src/views/site/ngx_conf/NgxUpstream.vue:125
 #: src/views/site/site_edit/components/ConfigName.vue:44
 #: src/views/site/site_edit/components/ConfigName.vue:44
 msgid "Rename"
 msgid "Rename"
@@ -2094,7 +2091,7 @@ msgstr ""
 msgid "Running"
 msgid "Running"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:259
+#: src/components/ChatGPT/ChatGPT.vue:355
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:64
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:64
 #: src/components/StdDesign/StdDetail/StdDetail.vue:93
 #: src/components/StdDesign/StdDetail/StdDetail.vue:93
 #: src/views/certificate/CertificateEditor.vue:262
 #: src/views/certificate/CertificateEditor.vue:262
@@ -2162,7 +2159,7 @@ msgstr ""
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:182
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:189
 msgid "Selector"
 msgid "Selector"
 msgstr ""
 msgstr ""
 
 
@@ -2176,10 +2173,6 @@ msgstr ""
 msgid "Send"
 msgid "Send"
 msgstr ""
 msgstr ""
 
 
-#: src/lib/http/index.ts:128
-msgid "Server error"
-msgstr ""
-
 #: src/views/dashboard/ServerAnalytic.vue:179
 #: src/views/dashboard/ServerAnalytic.vue:179
 msgid "Server Info"
 msgid "Server Info"
 msgstr ""
 msgstr ""
@@ -2196,7 +2189,7 @@ msgstr ""
 msgid "ServerIdx out of range"
 msgid "ServerIdx out of range"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/user.ts:9
+#: src/constants/errors/user.ts:11
 msgid "Session not found"
 msgid "Session not found"
 msgstr ""
 msgstr ""
 
 
@@ -2289,8 +2282,8 @@ msgstr ""
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/BatchUpgrader.vue:165
-#: src/views/environment/BatchUpgrader.vue:215
+#: src/views/environment/BatchUpgrader.vue:164
+#: src/views/environment/BatchUpgrader.vue:214
 #: src/views/system/Upgrade.vue:191
 #: src/views/system/Upgrade.vue:191
 #: src/views/system/Upgrade.vue:239
 #: src/views/system/Upgrade.vue:239
 msgid "Stable"
 msgid "Stable"
@@ -2298,9 +2291,9 @@ msgstr ""
 
 
 #: src/views/certificate/ACMEUser.vue:65
 #: src/views/certificate/ACMEUser.vue:65
 #: src/views/certificate/CertificateList/certColumns.tsx:68
 #: src/views/certificate/CertificateList/certColumns.tsx:68
-#: src/views/environment/envColumns.tsx:75
-#: src/views/site/site_list/columns.tsx:40
-#: src/views/stream/StreamList.vue:22
+#: src/views/environment/envColumns.tsx:44
+#: src/views/site/site_list/columns.tsx:42
+#: src/views/stream/StreamList.vue:23
 msgid "Status"
 msgid "Status"
 msgstr ""
 msgstr ""
 
 
@@ -2391,7 +2384,7 @@ msgstr ""
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr ""
 msgstr ""
 
 
-#: src/views/site/site_category/SiteCategory.vue:16
+#: src/views/site/site_category/SiteCategory.vue:17
 msgid "Sync Nodes"
 msgid "Sync Nodes"
 msgstr ""
 msgstr ""
 
 
@@ -2538,7 +2531,7 @@ msgstr ""
 msgid "This value is already taken"
 msgid "This value is already taken"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/BatchUpgrader.vue:183
+#: src/views/environment/BatchUpgrader.vue:182
 msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgid "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgstr ""
 msgstr ""
 
 
@@ -2599,7 +2592,6 @@ msgid "Two-factor authentication required"
 msgstr ""
 msgstr ""
 
 
 #: src/views/certificate/CertificateList/certColumns.tsx:25
 #: src/views/certificate/CertificateList/certColumns.tsx:25
-#: src/views/config/configColumns.ts:16
 #: src/views/notification/notificationColumns.tsx:9
 #: src/views/notification/notificationColumns.tsx:9
 msgid "Type"
 msgid "Type"
 msgstr ""
 msgstr ""
@@ -2610,14 +2602,14 @@ msgstr ""
 
 
 #: src/views/certificate/ACMEUser.vue:88
 #: src/views/certificate/ACMEUser.vue:88
 #: src/views/certificate/DNSCredential.vue:27
 #: src/views/certificate/DNSCredential.vue:27
-#: src/views/config/configColumns.ts:31
+#: src/views/config/configColumns.tsx:34
 #: src/views/config/ConfigEditor.vue:276
 #: src/views/config/ConfigEditor.vue:276
-#: src/views/environment/envColumns.tsx:119
-#: src/views/site/site_category/columns.ts:20
+#: src/views/environment/envColumns.tsx:90
+#: src/views/site/site_category/columns.ts:22
 #: src/views/site/site_edit/RightSettings.vue:100
 #: src/views/site/site_edit/RightSettings.vue:100
-#: src/views/site/site_list/columns.tsx:67
+#: src/views/site/site_list/columns.tsx:69
 #: src/views/stream/components/RightSettings.vue:85
 #: src/views/stream/components/RightSettings.vue:85
-#: src/views/stream/StreamList.vue:41
+#: src/views/stream/StreamList.vue:43
 #: src/views/user/userColumns.tsx:54
 #: src/views/user/userColumns.tsx:54
 msgid "Updated at"
 msgid "Updated at"
 msgstr ""
 msgstr ""
@@ -2627,13 +2619,13 @@ msgid "Updated successfully"
 msgstr ""
 msgstr ""
 
 
 #: src/routes/index.ts:297
 #: src/routes/index.ts:297
-#: src/views/environment/Environment.vue:53
+#: src/views/environment/Environment.vue:56
 #: src/views/system/Upgrade.vue:143
 #: src/views/system/Upgrade.vue:143
 #: src/views/system/Upgrade.vue:226
 #: src/views/system/Upgrade.vue:226
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/BatchUpgrader.vue:138
+#: src/views/environment/BatchUpgrader.vue:137
 msgid "Upgraded Nginx UI on %{node} successfully 🎉"
 msgid "Upgraded Nginx UI on %{node} successfully 🎉"
 msgstr ""
 msgstr ""
 
 
@@ -2641,7 +2633,7 @@ msgstr ""
 msgid "Upgraded successfully"
 msgid "Upgraded successfully"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/BatchUpgrader.vue:89
+#: src/views/environment/BatchUpgrader.vue:88
 #: src/views/system/Upgrade.vue:77
 #: src/views/system/Upgrade.vue:77
 msgid "Upgrading Nginx UI, please wait..."
 msgid "Upgrading Nginx UI, please wait..."
 msgstr ""
 msgstr ""
@@ -2654,7 +2646,7 @@ msgstr ""
 msgid "Uptime:"
 msgid "Uptime:"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/envColumns.tsx:18
+#: src/views/environment/envColumns.tsx:19
 msgid "URL"
 msgid "URL"
 msgstr ""
 msgstr ""
 
 
@@ -2666,7 +2658,7 @@ msgstr ""
 msgid "Use recovery code"
 msgid "Use recovery code"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:237
+#: src/components/ChatGPT/ChatGPT.vue:333
 msgid "User"
 msgid "User"
 msgstr ""
 msgstr ""
 
 
@@ -2687,13 +2679,13 @@ msgstr ""
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:123
+#: src/views/certificate/ACMEUser.vue:124
 #: src/views/certificate/CertificateList/certColumns.tsx:81
 #: src/views/certificate/CertificateList/certColumns.tsx:81
 #: src/views/site/cert/CertInfo.vue:24
 #: src/views/site/cert/CertInfo.vue:24
 msgid "Valid"
 msgid "Valid"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/envColumns.tsx:29
+#: src/views/environment/envColumns.tsx:31
 msgid "Version"
 msgid "Version"
 msgstr ""
 msgstr ""
 
 

+ 130 - 123
app/src/language/ru_RU/app.po

@@ -31,7 +31,7 @@ msgstr "О проекте"
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr "Журнал доступа"
 msgstr "Журнал доступа"
 
 
-#: src/routes/index.ts:148 src/views/certificate/ACMEUser.vue:112
+#: src/routes/index.ts:148 src/views/certificate/ACMEUser.vue:113
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
 msgid "ACME User"
 msgid "ACME User"
 msgstr "Пользователь ACME"
 msgstr "Пользователь ACME"
@@ -39,12 +39,12 @@ msgstr "Пользователь ACME"
 #: src/views/certificate/ACMEUser.vue:95
 #: src/views/certificate/ACMEUser.vue:95
 #: src/views/certificate/CertificateList/certColumns.tsx:97
 #: src/views/certificate/CertificateList/certColumns.tsx:97
 #: src/views/certificate/DNSCredential.vue:33
 #: src/views/certificate/DNSCredential.vue:33
-#: src/views/config/configColumns.ts:38
-#: src/views/environment/envColumns.tsx:125
-#: src/views/notification/notificationColumns.tsx:62
+#: src/views/config/configColumns.tsx:42
+#: src/views/environment/envColumns.tsx:97
+#: src/views/notification/notificationColumns.tsx:65
 #: src/views/preference/AuthSettings.vue:26
 #: src/views/preference/AuthSettings.vue:26
-#: src/views/site/site_category/columns.ts:26
-#: src/views/site/site_list/columns.tsx:74 src/views/stream/StreamList.vue:47
+#: src/views/site/site_category/columns.ts:29
+#: src/views/site/site_list/columns.tsx:76 src/views/stream/StreamList.vue:49
 #: src/views/user/userColumns.tsx:60
 #: src/views/user/userColumns.tsx:60
 msgid "Action"
 msgid "Action"
 msgstr "Действие"
 msgstr "Действие"
@@ -55,7 +55,7 @@ msgstr "Действие"
 #: src/views/site/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/site/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/site/ngx_conf/NgxServer.vue:162
 #: src/views/site/ngx_conf/NgxServer.vue:162
 #: src/views/site/ngx_conf/NgxUpstream.vue:154
 #: src/views/site/ngx_conf/NgxUpstream.vue:154
-#: src/views/stream/StreamList.vue:117
+#: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr "Добавить"
 msgstr "Добавить"
 
 
@@ -82,11 +82,11 @@ msgstr "Добавить Location"
 msgid "Add Site"
 msgid "Add Site"
 msgstr "Добавть Сайт"
 msgstr "Добавть Сайт"
 
 
-#: src/views/stream/StreamList.vue:176
+#: src/views/stream/StreamList.vue:181
 msgid "Add Stream"
 msgid "Add Stream"
 msgstr "Добавить поток"
 msgstr "Добавить поток"
 
 
-#: src/views/stream/StreamList.vue:109
+#: src/views/stream/StreamList.vue:113
 msgid "Added successfully"
 msgid "Added successfully"
 msgstr "Добавлено успешно"
 msgstr "Добавлено успешно"
 
 
@@ -157,11 +157,11 @@ msgid "Are you sure you want to apply to all selected?"
 msgstr "Вы уверены, что хотите удалить?"
 msgstr "Вы уверены, что хотите удалить?"
 
 
 #: src/components/Notification/Notification.vue:130
 #: src/components/Notification/Notification.vue:130
-#: src/views/notification/Notification.vue:38
+#: src/views/notification/Notification.vue:39
 msgid "Are you sure you want to clear all notifications?"
 msgid "Are you sure you want to clear all notifications?"
 msgstr "Вы уверены, что хотите очистить все уведомления?"
 msgstr "Вы уверены, что хотите очистить все уведомления?"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:279
+#: src/components/ChatGPT/ChatGPT.vue:376
 #, fuzzy
 #, fuzzy
 msgid "Are you sure you want to clear the record of chat?"
 msgid "Are you sure you want to clear the record of chat?"
 msgstr "Вы уверены, что хотите очистить сообщения чата?"
 msgstr "Вы уверены, что хотите очистить сообщения чата?"
@@ -174,8 +174,8 @@ msgstr "Вы уверены, что хотите удалить этот эле
 msgid "Are you sure you want to delete this item?"
 msgid "Are you sure you want to delete this item?"
 msgstr "Вы уверены, что хотите удалить этот элемент?"
 msgstr "Вы уверены, что хотите удалить этот элемент?"
 
 
-#: src/views/site/site_list/SiteList.vue:144
-#: src/views/stream/StreamList.vue:160
+#: src/views/site/site_list/SiteList.vue:145
+#: src/views/stream/StreamList.vue:165
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr "Вы уверены, что хотите удалить?"
 msgstr "Вы уверены, что хотите удалить?"
 
 
@@ -195,11 +195,11 @@ msgstr "Вы уверены, что хотите удалить этот эле
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "Вы уверены, что хотите удалить location?"
 msgstr "Вы уверены, что хотите удалить location?"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:223
+#: src/components/ChatGPT/ChatGPT.vue:318
 msgid "Ask ChatGPT for Help"
 msgid "Ask ChatGPT for Help"
 msgstr "Обратитесь за помощью к ChatGPT"
 msgstr "Обратитесь за помощью к ChatGPT"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:237
+#: src/components/ChatGPT/ChatGPT.vue:333
 msgid "Assistant"
 msgid "Assistant"
 msgstr "Ассистент"
 msgstr "Ассистент"
 
 
@@ -243,7 +243,7 @@ msgstr "Автообновление включено для %{name}"
 
 
 #: src/views/certificate/CertificateEditor.vue:255
 #: src/views/certificate/CertificateEditor.vue:255
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:106
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:106
-#: src/views/config/ConfigList.vue:179 src/views/nginx_log/NginxLog.vue:173
+#: src/views/config/ConfigList.vue:180 src/views/nginx_log/NginxLog.vue:173
 #: src/views/site/site_edit/SiteEdit.vue:264
 #: src/views/site/site_edit/SiteEdit.vue:264
 #: src/views/stream/StreamEdit.vue:245
 #: src/views/stream/StreamEdit.vue:245
 msgid "Back"
 msgid "Back"
@@ -296,7 +296,7 @@ msgstr "Действие"
 msgid "Batch Modify"
 msgid "Batch Modify"
 msgstr "Массовое изменение"
 msgstr "Массовое изменение"
 
 
-#: src/views/environment/BatchUpgrader.vue:153
+#: src/views/environment/BatchUpgrader.vue:152
 msgid "Batch Upgrade"
 msgid "Batch Upgrade"
 msgstr "Пакетное обновление"
 msgstr "Пакетное обновление"
 
 
@@ -324,9 +324,9 @@ msgstr ""
 msgid "Can't scan? Use text key binding"
 msgid "Can't scan? Use text key binding"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:260
+#: src/components/ChatGPT/ChatGPT.vue:356
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:180
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:187
 #: src/components/StdDesign/StdDetail/StdDetail.vue:101
 #: src/components/StdDesign/StdDetail/StdDetail.vue:101
 #: src/views/preference/components/Passkey.vue:141
 #: src/views/preference/components/Passkey.vue:141
 #: src/views/site/cert/components/ObtainCert.vue:140
 #: src/views/site/cert/components/ObtainCert.vue:140
@@ -339,8 +339,18 @@ msgstr ""
 msgid "Cancel"
 msgid "Cancel"
 msgstr "Отмена"
 msgstr "Отмена"
 
 
+#: src/constants/errors/user.ts:10
+#, fuzzy
+msgid "Cannot change initial user password in demo mode"
+msgstr "Запретить изменение пароля root в демо"
+
+#: src/constants/errors/user.ts:9
+#, fuzzy
+msgid "Cannot remove initial user"
+msgstr "Первоначальный пользователь системы"
+
 #: src/views/site/site_edit/RightSettings.vue:91
 #: src/views/site/site_edit/RightSettings.vue:91
-#: src/views/site/site_list/columns.tsx:23
+#: src/views/site/site_list/columns.tsx:25
 msgid "Category"
 msgid "Category"
 msgstr "Категория"
 msgstr "Категория"
 
 
@@ -402,7 +412,7 @@ msgstr[1] "Сертификаты изменены"
 msgid "Changed Path"
 msgid "Changed Path"
 msgstr "Путь изменён"
 msgstr "Путь изменён"
 
 
-#: src/views/environment/BatchUpgrader.vue:160 src/views/system/Upgrade.vue:188
+#: src/views/environment/BatchUpgrader.vue:159 src/views/system/Upgrade.vue:188
 msgid "Channel"
 msgid "Channel"
 msgstr "Канал"
 msgstr "Канал"
 
 
@@ -438,9 +448,9 @@ msgstr ""
 msgid "Cleaning environment variables"
 msgid "Cleaning environment variables"
 msgstr "Очистка переменных среды"
 msgstr "Очистка переменных среды"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:283
+#: src/components/ChatGPT/ChatGPT.vue:380
 #: src/components/Notification/Notification.vue:135
 #: src/components/Notification/Notification.vue:135
-#: src/views/notification/Notification.vue:43
+#: src/views/notification/Notification.vue:44
 msgid "Clear"
 msgid "Clear"
 msgstr "Очистить"
 msgstr "Очистить"
 
 
@@ -531,9 +541,9 @@ msgstr "Создать файл"
 msgid "Create Folder"
 msgid "Create Folder"
 msgstr "Создать папку"
 msgstr "Создать папку"
 
 
-#: src/views/notification/notificationColumns.tsx:56
+#: src/views/notification/notificationColumns.tsx:58
 #: src/views/preference/components/Passkey.vue:95
 #: src/views/preference/components/Passkey.vue:95
-#: src/views/site/site_category/columns.ts:14 src/views/user/userColumns.tsx:48
+#: src/views/site/site_category/columns.ts:15 src/views/user/userColumns.tsx:48
 msgid "Created at"
 msgid "Created at"
 msgstr "Создан в"
 msgstr "Создан в"
 
 
@@ -597,8 +607,8 @@ msgstr "Дни"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/views/site/ngx_conf/NgxServer.vue:110
 #: src/views/site/ngx_conf/NgxServer.vue:110
 #: src/views/site/ngx_conf/NgxUpstream.vue:128
 #: src/views/site/ngx_conf/NgxUpstream.vue:128
-#: src/views/site/site_list/SiteList.vue:153
-#: src/views/stream/StreamList.vue:169
+#: src/views/site/site_list/SiteList.vue:154
+#: src/views/stream/StreamList.vue:174
 msgid "Delete"
 msgid "Delete"
 msgstr "Удалить"
 msgstr "Удалить"
 
 
@@ -621,7 +631,7 @@ msgstr "Переименование удаленной конфигурации
 msgid "Delete site: %{site_name}"
 msgid "Delete site: %{site_name}"
 msgstr "Удалить сайт: %{site_name}"
 msgstr "Удалить сайт: %{site_name}"
 
 
-#: src/views/stream/StreamList.vue:78
+#: src/views/stream/StreamList.vue:82
 msgid "Delete stream: %{stream_name}"
 msgid "Delete stream: %{stream_name}"
 msgstr "Удалить поток: %{stream_name}"
 msgstr "Удалить поток: %{stream_name}"
 
 
@@ -656,7 +666,7 @@ msgstr "Описание"
 msgid "Destination file already exists"
 msgid "Destination file already exists"
 msgstr ""
 msgstr ""
 
 
-#: src/views/notification/notificationColumns.tsx:51
+#: src/views/notification/notificationColumns.tsx:52
 msgid "Details"
 msgid "Details"
 msgstr "Детали"
 msgstr "Детали"
 
 
@@ -684,12 +694,8 @@ msgstr ""
 msgid "Directives"
 msgid "Directives"
 msgstr "Дерективы"
 msgstr "Дерективы"
 
 
-#: src/views/config/configColumns.ts:22
-msgid "Directory"
-msgstr "Каталог"
-
-#: src/views/site/site_list/SiteList.vue:124
-#: src/views/stream/StreamList.vue:140
+#: src/views/site/site_list/SiteList.vue:125
+#: src/views/stream/StreamList.vue:145
 msgid "Disable"
 msgid "Disable"
 msgstr "Отключить"
 msgstr "Отключить"
 
 
@@ -717,19 +723,19 @@ msgstr "Включение %{conf_name} in %{node_name} успешно"
 msgid "Disable Site %{site} on %{node} successfully"
 msgid "Disable Site %{site} on %{node} successfully"
 msgstr "Включение %{conf_name} in %{node_name} успешно"
 msgstr "Включение %{conf_name} in %{node_name} успешно"
 
 
-#: src/views/environment/envColumns.tsx:109
-#: src/views/environment/envColumns.tsx:92
+#: src/views/environment/envColumns.tsx:61
+#: src/views/environment/envColumns.tsx:79
 #: src/views/site/site_edit/SiteEdit.vue:190
 #: src/views/site/site_edit/SiteEdit.vue:190
-#: src/views/site/site_list/columns.tsx:51
-#: src/views/site/site_list/columns.tsx:60 src/views/stream/StreamEdit.vue:175
-#: src/views/stream/StreamList.vue:33 src/views/user/userColumns.tsx:41
+#: src/views/site/site_list/columns.tsx:53
+#: src/views/site/site_list/columns.tsx:62 src/views/stream/StreamEdit.vue:175
+#: src/views/stream/StreamList.vue:34 src/views/user/userColumns.tsx:41
 msgid "Disabled"
 msgid "Disabled"
 msgstr "Отключено"
 msgstr "Отключено"
 
 
 #: src/views/site/site_edit/RightSettings.vue:42
 #: src/views/site/site_edit/RightSettings.vue:42
 #: src/views/site/site_list/SiteList.vue:56
 #: src/views/site/site_list/SiteList.vue:56
 #: src/views/stream/components/RightSettings.vue:38
 #: src/views/stream/components/RightSettings.vue:38
-#: src/views/stream/StreamList.vue:67
+#: src/views/stream/StreamList.vue:71
 msgid "Disabled successfully"
 msgid "Disabled successfully"
 msgstr "Отключено успешно"
 msgstr "Отключено успешно"
 
 
@@ -822,7 +828,7 @@ msgstr "Ошибка загрузки последней версии"
 msgid "Downloading latest release"
 msgid "Downloading latest release"
 msgstr "Загрузка последней версии"
 msgstr "Загрузка последней версии"
 
 
-#: src/views/environment/BatchUpgrader.vue:189 src/views/system/Upgrade.vue:215
+#: src/views/environment/BatchUpgrader.vue:188 src/views/system/Upgrade.vue:215
 msgid "Dry run mode enabled"
 msgid "Dry run mode enabled"
 msgstr "Включен пробный режим"
 msgstr "Включен пробный режим"
 
 
@@ -836,9 +842,9 @@ msgstr ""
 "запускаются на localhost."
 "запускаются на localhost."
 
 
 #: src/views/site/site_list/SiteDuplicate.vue:72
 #: src/views/site/site_list/SiteDuplicate.vue:72
-#: src/views/site/site_list/SiteList.vue:139
+#: src/views/site/site_list/SiteList.vue:140
 #: src/views/stream/components/StreamDuplicate.vue:121
 #: src/views/stream/components/StreamDuplicate.vue:121
-#: src/views/stream/StreamList.vue:155
+#: src/views/stream/StreamList.vue:160
 msgid "Duplicate"
 msgid "Duplicate"
 msgstr "Дублировать"
 msgstr "Дублировать"
 
 
@@ -891,9 +897,9 @@ msgstr "Электронная почта"
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "Email (*)"
 msgstr "Email (*)"
 
 
-#: src/views/site/site_list/SiteList.vue:132
+#: src/views/site/site_list/SiteList.vue:133
 #: src/views/stream/components/Deploy.vue:80
 #: src/views/stream/components/Deploy.vue:80
-#: src/views/stream/StreamList.vue:148
+#: src/views/stream/StreamList.vue:153
 msgid "Enable"
 msgid "Enable"
 msgstr "Включить"
 msgstr "Включить"
 
 
@@ -950,15 +956,15 @@ msgstr "Включить TLS"
 msgid "Enable TOTP"
 msgid "Enable TOTP"
 msgstr "Включить TLS"
 msgstr "Включить TLS"
 
 
-#: src/views/environment/envColumns.tsx:100
-#: src/views/environment/envColumns.tsx:106
+#: src/views/environment/envColumns.tsx:70
+#: src/views/environment/envColumns.tsx:76
 #: src/views/preference/LogrotateSettings.vue:19
 #: src/views/preference/LogrotateSettings.vue:19
 #: src/views/site/site_edit/RightSettings.vue:82
 #: src/views/site/site_edit/RightSettings.vue:82
 #: src/views/site/site_edit/SiteEdit.vue:184
 #: src/views/site/site_edit/SiteEdit.vue:184
-#: src/views/site/site_list/columns.tsx:47
-#: src/views/site/site_list/columns.tsx:59
+#: src/views/site/site_list/columns.tsx:49
+#: src/views/site/site_list/columns.tsx:61
 #: src/views/stream/components/RightSettings.vue:76
 #: src/views/stream/components/RightSettings.vue:76
-#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:29
+#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:30
 #: src/views/user/userColumns.tsx:38
 #: src/views/user/userColumns.tsx:38
 msgid "Enabled"
 msgid "Enabled"
 msgstr "Включено"
 msgstr "Включено"
@@ -967,7 +973,7 @@ msgstr "Включено"
 #: src/views/site/site_list/SiteList.vue:46 src/views/site/SiteAdd.vue:40
 #: src/views/site/site_list/SiteList.vue:46 src/views/site/SiteAdd.vue:40
 #: src/views/stream/components/RightSettings.vue:29
 #: src/views/stream/components/RightSettings.vue:29
 #: src/views/stream/components/StreamDuplicate.vue:93
 #: src/views/stream/components/StreamDuplicate.vue:93
-#: src/views/stream/StreamList.vue:57
+#: src/views/stream/StreamList.vue:61
 msgid "Enabled successfully"
 msgid "Enabled successfully"
 msgstr "Активировано успешно"
 msgstr "Активировано успешно"
 
 
@@ -975,15 +981,12 @@ msgstr "Активировано успешно"
 msgid "Encrypt website with Let's Encrypt"
 msgid "Encrypt website with Let's Encrypt"
 msgstr "Использовать для сайта Let's Encrypt"
 msgstr "Использовать для сайта Let's Encrypt"
 
 
-#: src/routes/index.ts:234 src/views/environment/Environment.vue:32
-msgid "Environment"
-msgstr "Окружение"
-
 #: src/language/constants.ts:21
 #: src/language/constants.ts:21
 msgid "Environment variables cleaned"
 msgid "Environment variables cleaned"
 msgstr "Переменные окружения очищены"
 msgstr "Переменные окружения очищены"
 
 
-#: src/views/dashboard/Environments.vue:83
+#: src/routes/index.ts:234 src/views/dashboard/Environments.vue:83
+#: src/views/environment/Environment.vue:33
 msgid "Environments"
 msgid "Environments"
 msgstr "Окружения"
 msgstr "Окружения"
 
 
@@ -1025,14 +1028,14 @@ msgstr "Не удалось включить %{msg}"
 #: src/views/site/site_edit/RightSettings.vue:45
 #: src/views/site/site_edit/RightSettings.vue:45
 #: src/views/site/site_list/SiteList.vue:60
 #: src/views/site/site_list/SiteList.vue:60
 #: src/views/stream/components/RightSettings.vue:41
 #: src/views/stream/components/RightSettings.vue:41
-#: src/views/stream/StreamList.vue:71
+#: src/views/stream/StreamList.vue:75
 msgid "Failed to disable %{msg}"
 msgid "Failed to disable %{msg}"
 msgstr "Не удалось отключить %{msg}"
 msgstr "Не удалось отключить %{msg}"
 
 
 #: src/views/site/site_edit/RightSettings.vue:36
 #: src/views/site/site_edit/RightSettings.vue:36
 #: src/views/site/site_list/SiteList.vue:50
 #: src/views/site/site_list/SiteList.vue:50
 #: src/views/stream/components/RightSettings.vue:32
 #: src/views/stream/components/RightSettings.vue:32
-#: src/views/stream/StreamList.vue:61
+#: src/views/stream/StreamList.vue:65
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "Не удалось включить %{msg}"
 msgstr "Не удалось включить %{msg}"
 
 
@@ -1053,10 +1056,6 @@ msgstr ""
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgstr "Не удалось сохранить, обнаружены синтаксические ошибки в конфигурации."
 msgstr "Не удалось сохранить, обнаружены синтаксические ошибки в конфигурации."
 
 
-#: src/views/config/configColumns.ts:24
-msgid "File"
-msgstr "Файл"
-
 #: src/language/constants.ts:31
 #: src/language/constants.ts:31
 msgid "File exists"
 msgid "File exists"
 msgstr "Файл существует"
 msgstr "Файл существует"
@@ -1118,7 +1117,7 @@ msgstr "Сгенерировать"
 msgid "Generating private key for registering account"
 msgid "Generating private key for registering account"
 msgstr "Генерация приватного ключа для регистрации учетной записи"
 msgstr "Генерация приватного ключа для регистрации учетной записи"
 
 
-#: src/views/environment/BatchUpgrader.vue:178 src/views/system/Upgrade.vue:169
+#: src/views/environment/BatchUpgrader.vue:177 src/views/system/Upgrade.vue:169
 msgid "Get release information error"
 msgid "Get release information error"
 msgstr "Ошибка получения информации о выпуске"
 msgstr "Ошибка получения информации о выпуске"
 
 
@@ -1234,7 +1233,7 @@ msgstr "Установка прошла успешно"
 msgid "Interval"
 msgid "Interval"
 msgstr "Интервал"
 msgstr "Интервал"
 
 
-#: src/views/certificate/ACMEUser.vue:128
+#: src/views/certificate/ACMEUser.vue:129
 msgid "Invalid"
 msgid "Invalid"
 msgstr "Недействительно"
 msgstr "Недействительно"
 
 
@@ -1342,7 +1341,7 @@ msgstr "Список"
 msgid "Load Average:"
 msgid "Load Average:"
 msgstr "Средняя нагрузка:"
 msgstr "Средняя нагрузка:"
 
 
-#: src/views/environment/Environment.vue:37
+#: src/views/environment/Environment.vue:39
 msgid "Load from settings"
 msgid "Load from settings"
 msgstr "Загрузить из настроек"
 msgstr "Загрузить из настроек"
 
 
@@ -1416,11 +1415,11 @@ msgstr "Конфигурации"
 msgid "Manage Sites"
 msgid "Manage Sites"
 msgstr "Сайты"
 msgstr "Сайты"
 
 
-#: src/routes/index.ts:89 src/views/stream/StreamList.vue:115
+#: src/routes/index.ts:89 src/views/stream/StreamList.vue:119
 msgid "Manage Streams"
 msgid "Manage Streams"
 msgstr "Управление потоками"
 msgstr "Управление потоками"
 
 
-#: src/routes/index.ts:257 src/views/user/User.vue:9
+#: src/routes/index.ts:257 src/views/user/User.vue:10
 msgid "Manage Users"
 msgid "Manage Users"
 msgstr "Пользователи"
 msgstr "Пользователи"
 
 
@@ -1449,10 +1448,10 @@ msgstr "Минуты"
 msgid "Model"
 msgid "Model"
 msgstr "Модель"
 msgstr "Модель"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:256
+#: src/components/ChatGPT/ChatGPT.vue:352
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:151
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:151
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:498
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:498
-#: src/views/config/ConfigList.vue:158
+#: src/views/config/ConfigList.vue:159
 msgid "Modify"
 msgid "Modify"
 msgstr "Изменить"
 msgstr "Изменить"
 
 
@@ -1476,17 +1475,18 @@ msgstr "Многострочная директива"
 #: src/views/certificate/CertificateEditor.vue:160
 #: src/views/certificate/CertificateEditor.vue:160
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/certificate/DNSCredential.vue:11
-#: src/views/config/components/Mkdir.vue:64 src/views/config/configColumns.ts:8
-#: src/views/config/ConfigEditor.vue:256 src/views/environment/envColumns.tsx:9
+#: src/views/config/components/Mkdir.vue:64
+#: src/views/config/configColumns.tsx:7 src/views/config/ConfigEditor.vue:256
+#: src/views/environment/envColumns.tsx:9
 #: src/views/preference/components/AddPasskey.vue:75
 #: src/views/preference/components/AddPasskey.vue:75
 #: src/views/site/ngx_conf/NgxUpstream.vue:177
 #: src/views/site/ngx_conf/NgxUpstream.vue:177
 #: src/views/site/site_category/columns.ts:7
 #: src/views/site/site_category/columns.ts:7
 #: src/views/site/site_edit/RightSettings.vue:88
 #: src/views/site/site_edit/RightSettings.vue:88
-#: src/views/site/site_list/columns.tsx:13
+#: src/views/site/site_list/columns.tsx:15
 #: src/views/site/site_list/SiteDuplicate.vue:79
 #: src/views/site/site_list/SiteDuplicate.vue:79
 #: src/views/stream/components/RightSettings.vue:82
 #: src/views/stream/components/RightSettings.vue:82
 #: src/views/stream/components/StreamDuplicate.vue:128
 #: src/views/stream/components/StreamDuplicate.vue:128
-#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:181
+#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:186
 msgid "Name"
 msgid "Name"
 msgstr "Имя"
 msgstr "Имя"
 
 
@@ -1608,20 +1608,20 @@ msgstr "Терминальная команда запуска"
 msgid "Nginx restarted successfully"
 msgid "Nginx restarted successfully"
 msgstr "Nginx успешно перезапущен"
 msgstr "Nginx успешно перезапущен"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:277
+#: src/components/ChatGPT/ChatGPT.vue:374
 #: src/components/Notification/Notification.vue:128
 #: src/components/Notification/Notification.vue:128
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:510
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:510
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:524
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:524
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:538
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:538
-#: src/views/notification/Notification.vue:36
+#: src/views/notification/Notification.vue:37
 #: src/views/preference/AuthSettings.vue:136
 #: src/views/preference/AuthSettings.vue:136
 #: src/views/preference/CertSettings.vue:70
 #: src/views/preference/CertSettings.vue:70
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97
 #: src/views/site/ngx_conf/LocationEditor.vue:90
 #: src/views/site/ngx_conf/LocationEditor.vue:90
-#: src/views/site/site_list/SiteList.vue:142
-#: src/views/stream/StreamList.vue:158
+#: src/views/site/site_list/SiteList.vue:143
+#: src/views/stream/StreamList.vue:163
 msgid "No"
 msgid "No"
 msgstr "Нет"
 msgstr "Нет"
 
 
@@ -1657,7 +1657,7 @@ msgid ""
 "certificates, please synchronize them to the remote nodes in advance."
 "certificates, please synchronize them to the remote nodes in advance."
 msgstr ""
 msgstr ""
 
 
-#: src/views/notification/Notification.vue:27
+#: src/views/notification/Notification.vue:28
 msgid "Notification"
 msgid "Notification"
 msgstr "Уведомление"
 msgstr "Уведомление"
 
 
@@ -1687,7 +1687,7 @@ msgstr ""
 
 
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/views/dashboard/Environments.vue:107
 #: src/views/dashboard/Environments.vue:107
-#: src/views/environment/envColumns.tsx:87
+#: src/views/environment/envColumns.tsx:56
 msgid "Offline"
 msgid "Offline"
 msgstr "Оффлайн"
 msgstr "Оффлайн"
 
 
@@ -1695,23 +1695,23 @@ msgstr "Оффлайн"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:511
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:511
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:525
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:525
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:539
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:539
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:181
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:188
 msgid "Ok"
 msgid "Ok"
 msgstr "Ок"
 msgstr "Ок"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:278
+#: src/components/ChatGPT/ChatGPT.vue:375
 #: src/components/Notification/Notification.vue:129
 #: src/components/Notification/Notification.vue:129
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:95
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:95
-#: src/views/notification/Notification.vue:37
+#: src/views/notification/Notification.vue:38
 #: src/views/site/cert/components/ObtainCert.vue:139
 #: src/views/site/cert/components/ObtainCert.vue:139
 #: src/views/site/ngx_conf/NgxConfigEditor.vue:50
 #: src/views/site/ngx_conf/NgxConfigEditor.vue:50
 #: src/views/site/ngx_conf/NgxServer.vue:79
 #: src/views/site/ngx_conf/NgxServer.vue:79
 #: src/views/site/ngx_conf/NgxUpstream.vue:33
 #: src/views/site/ngx_conf/NgxUpstream.vue:33
 #: src/views/site/site_edit/RightSettings.vue:54
 #: src/views/site/site_edit/RightSettings.vue:54
-#: src/views/site/site_list/SiteList.vue:143
+#: src/views/site/site_list/SiteList.vue:144
 #: src/views/stream/components/Deploy.vue:19
 #: src/views/stream/components/Deploy.vue:19
 #: src/views/stream/components/RightSettings.vue:50
 #: src/views/stream/components/RightSettings.vue:50
-#: src/views/stream/StreamList.vue:159
+#: src/views/stream/StreamList.vue:164
 msgid "OK"
 msgid "OK"
 msgstr "ОК"
 msgstr "ОК"
 
 
@@ -1722,7 +1722,7 @@ msgstr "После завершения проверки записи будут
 #: src/components/NodeSelector/NodeSelector.vue:83
 #: src/components/NodeSelector/NodeSelector.vue:83
 #: src/components/NodeSelector/NodeSelector.vue:97
 #: src/components/NodeSelector/NodeSelector.vue:97
 #: src/views/dashboard/Environments.vue:100
 #: src/views/dashboard/Environments.vue:100
-#: src/views/environment/envColumns.tsx:83
+#: src/views/environment/envColumns.tsx:52
 msgid "Online"
 msgid "Online"
 msgstr "Онлайн"
 msgstr "Онлайн"
 
 
@@ -1807,7 +1807,7 @@ msgstr ""
 msgid "Payload resource is nil"
 msgid "Payload resource is nil"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/BatchUpgrader.vue:233
+#: src/views/environment/BatchUpgrader.vue:232
 msgid "Perform"
 msgid "Perform"
 msgstr "Выполнить"
 msgstr "Выполнить"
 
 
@@ -1899,7 +1899,7 @@ msgstr ""
 "Обратите внимание, что единица измерения времени в конфигурациях ниже "
 "Обратите внимание, что единица измерения времени в конфигурациях ниже "
 "указана в секундах."
 "указана в секундах."
 
 
-#: src/views/environment/Environment.vue:45
+#: src/views/environment/Environment.vue:48
 msgid "Please select at least one node to upgrade"
 msgid "Please select at least one node to upgrade"
 msgstr "Пожалуйста, выберите хотя бы один узел"
 msgstr "Пожалуйста, выберите хотя бы один узел"
 
 
@@ -1920,8 +1920,8 @@ msgstr ""
 "Синхронизация конфигурации %{cert_name} с %{env_name} не удалась, "
 "Синхронизация конфигурации %{cert_name} с %{env_name} не удалась, "
 "пожалуйста, обновите удаленный Nginx UI до последней версии"
 "пожалуйста, обновите удаленный Nginx UI до последней версии"
 
 
-#: src/views/environment/BatchUpgrader.vue:168
-#: src/views/environment/BatchUpgrader.vue:221 src/views/system/Upgrade.vue:194
+#: src/views/environment/BatchUpgrader.vue:167
+#: src/views/environment/BatchUpgrader.vue:220 src/views/system/Upgrade.vue:194
 #: src/views/system/Upgrade.vue:245
 #: src/views/system/Upgrade.vue:245
 msgid "Pre-release"
 msgid "Pre-release"
 msgstr "Предварительный выпуск"
 msgstr "Предварительный выпуск"
@@ -1998,11 +1998,11 @@ msgstr "Код восстановления:"
 msgid "Recursive Nameservers"
 msgid "Recursive Nameservers"
 msgstr "Рекурсивные DNS"
 msgstr "Рекурсивные DNS"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:290
+#: src/components/ChatGPT/ChatGPT.vue:387
 msgid "Regenerate response"
 msgid "Regenerate response"
 msgstr "Восстановить ответ"
 msgstr "Восстановить ответ"
 
 
-#: src/views/certificate/ACMEUser.vue:136
+#: src/views/certificate/ACMEUser.vue:137
 msgid "Register"
 msgid "Register"
 msgstr "Регистрация"
 msgstr "Регистрация"
 
 
@@ -2012,7 +2012,7 @@ msgid ""
 "proxy."
 "proxy."
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:105
+#: src/views/certificate/ACMEUser.vue:106
 msgid "Register failed"
 msgid "Register failed"
 msgstr "Регистрация не удалась"
 msgstr "Регистрация не удалась"
 
 
@@ -2026,7 +2026,7 @@ msgstr "Статус регистрации"
 msgid "Register passkey successfully"
 msgid "Register passkey successfully"
 msgstr "Зарегистрировано успешно"
 msgstr "Зарегистрировано успешно"
 
 
-#: src/views/certificate/ACMEUser.vue:103
+#: src/views/certificate/ACMEUser.vue:104
 msgid "Register successfully"
 msgid "Register successfully"
 msgstr "Зарегистрировано успешно"
 msgstr "Зарегистрировано успешно"
 
 
@@ -2034,7 +2034,7 @@ msgstr "Зарегистрировано успешно"
 msgid "Registering user"
 msgid "Registering user"
 msgstr "Регистрация пользователя"
 msgstr "Регистрация пользователя"
 
 
-#: src/views/certificate/ACMEUser.vue:119
+#: src/views/certificate/ACMEUser.vue:120
 msgid "Registration Status"
 msgid "Registration Status"
 msgstr "Статус регистрации"
 msgstr "Статус регистрации"
 
 
@@ -2046,7 +2046,7 @@ msgstr "Переустановить"
 msgid "Release Note"
 msgid "Release Note"
 msgstr "Что нового"
 msgstr "Что нового"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:266
+#: src/components/ChatGPT/ChatGPT.vue:362
 #: src/components/NginxControl/NginxControl.vue:99
 #: src/components/NginxControl/NginxControl.vue:99
 msgid "Reload"
 msgid "Reload"
 msgstr "Перегрузить"
 msgstr "Перегрузить"
@@ -2084,7 +2084,7 @@ msgstr "Успешно удалено"
 
 
 #: src/views/config/components/ConfigName.vue:48
 #: src/views/config/components/ConfigName.vue:48
 #: src/views/config/components/Rename.vue:54
 #: src/views/config/components/Rename.vue:54
-#: src/views/config/ConfigList.vue:165
+#: src/views/config/ConfigList.vue:166
 #: src/views/site/ngx_conf/NgxUpstream.vue:125
 #: src/views/site/ngx_conf/NgxUpstream.vue:125
 #: src/views/site/site_edit/components/ConfigName.vue:44
 #: src/views/site/site_edit/components/ConfigName.vue:44
 msgid "Rename"
 msgid "Rename"
@@ -2197,7 +2197,7 @@ msgstr "Режим работы"
 msgid "Running"
 msgid "Running"
 msgstr "Выполняется"
 msgstr "Выполняется"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:259
+#: src/components/ChatGPT/ChatGPT.vue:355
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:64
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:64
 #: src/components/StdDesign/StdDetail/StdDetail.vue:93
 #: src/components/StdDesign/StdDetail/StdDetail.vue:93
 #: src/views/certificate/CertificateEditor.vue:262
 #: src/views/certificate/CertificateEditor.vue:262
@@ -2272,7 +2272,7 @@ msgstr "SDK"
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:182
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:189
 msgid "Selector"
 msgid "Selector"
 msgstr "Выбор"
 msgstr "Выбор"
 
 
@@ -2285,10 +2285,6 @@ msgstr ""
 msgid "Send"
 msgid "Send"
 msgstr "Отправлено"
 msgstr "Отправлено"
 
 
-#: src/lib/http/index.ts:128
-msgid "Server error"
-msgstr "Ошибка сервера"
-
 #: src/views/dashboard/ServerAnalytic.vue:179
 #: src/views/dashboard/ServerAnalytic.vue:179
 msgid "Server Info"
 msgid "Server Info"
 msgstr "Информация о сервере"
 msgstr "Информация о сервере"
@@ -2305,7 +2301,7 @@ msgstr "server_name параметр обязателен"
 msgid "ServerIdx out of range"
 msgid "ServerIdx out of range"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/user.ts:9
+#: src/constants/errors/user.ts:11
 #, fuzzy
 #, fuzzy
 msgid "Session not found"
 msgid "Session not found"
 msgstr "Файл не найден"
 msgstr "Файл не найден"
@@ -2409,16 +2405,16 @@ msgstr "Путь к SSL сертификату"
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "SSO Вход"
 msgstr "SSO Вход"
 
 
-#: src/views/environment/BatchUpgrader.vue:165
-#: src/views/environment/BatchUpgrader.vue:215 src/views/system/Upgrade.vue:191
+#: src/views/environment/BatchUpgrader.vue:164
+#: src/views/environment/BatchUpgrader.vue:214 src/views/system/Upgrade.vue:191
 #: src/views/system/Upgrade.vue:239
 #: src/views/system/Upgrade.vue:239
 msgid "Stable"
 msgid "Stable"
 msgstr "Стабильный"
 msgstr "Стабильный"
 
 
 #: src/views/certificate/ACMEUser.vue:65
 #: src/views/certificate/ACMEUser.vue:65
 #: src/views/certificate/CertificateList/certColumns.tsx:68
 #: src/views/certificate/CertificateList/certColumns.tsx:68
-#: src/views/environment/envColumns.tsx:75
-#: src/views/site/site_list/columns.tsx:40 src/views/stream/StreamList.vue:22
+#: src/views/environment/envColumns.tsx:44
+#: src/views/site/site_list/columns.tsx:42 src/views/stream/StreamList.vue:23
 msgid "Status"
 msgid "Status"
 msgstr "Статус"
 msgstr "Статус"
 
 
@@ -2522,7 +2518,7 @@ msgstr "Ошибка синхронизации конфигурации"
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "Синхронизация конфигурации успешна"
 msgstr "Синхронизация конфигурации успешна"
 
 
-#: src/views/site/site_category/SiteCategory.vue:16
+#: src/views/site/site_category/SiteCategory.vue:17
 #, fuzzy
 #, fuzzy
 msgid "Sync Nodes"
 msgid "Sync Nodes"
 msgstr "Синхронизировать с"
 msgstr "Синхронизировать с"
@@ -2717,7 +2713,7 @@ msgstr ""
 msgid "This value is already taken"
 msgid "This value is already taken"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/BatchUpgrader.vue:183
+#: src/views/environment/BatchUpgrader.vue:182
 msgid ""
 msgid ""
 "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgstr ""
 msgstr ""
@@ -2803,7 +2799,6 @@ msgid "Two-factor authentication required"
 msgstr "Требуется двухфакторная аутентификация"
 msgstr "Требуется двухфакторная аутентификация"
 
 
 #: src/views/certificate/CertificateList/certColumns.tsx:25
 #: src/views/certificate/CertificateList/certColumns.tsx:25
-#: src/views/config/configColumns.ts:16
 #: src/views/notification/notificationColumns.tsx:9
 #: src/views/notification/notificationColumns.tsx:9
 msgid "Type"
 msgid "Type"
 msgstr "Тип"
 msgstr "Тип"
@@ -2815,13 +2810,13 @@ msgstr "Успешно обновлено"
 
 
 #: src/views/certificate/ACMEUser.vue:88
 #: src/views/certificate/ACMEUser.vue:88
 #: src/views/certificate/DNSCredential.vue:27
 #: src/views/certificate/DNSCredential.vue:27
-#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:276
-#: src/views/environment/envColumns.tsx:119
-#: src/views/site/site_category/columns.ts:20
+#: src/views/config/configColumns.tsx:34 src/views/config/ConfigEditor.vue:276
+#: src/views/environment/envColumns.tsx:90
+#: src/views/site/site_category/columns.ts:22
 #: src/views/site/site_edit/RightSettings.vue:100
 #: src/views/site/site_edit/RightSettings.vue:100
-#: src/views/site/site_list/columns.tsx:67
+#: src/views/site/site_list/columns.tsx:69
 #: src/views/stream/components/RightSettings.vue:85
 #: src/views/stream/components/RightSettings.vue:85
-#: src/views/stream/StreamList.vue:41 src/views/user/userColumns.tsx:54
+#: src/views/stream/StreamList.vue:43 src/views/user/userColumns.tsx:54
 msgid "Updated at"
 msgid "Updated at"
 msgstr "Обновлено в"
 msgstr "Обновлено в"
 
 
@@ -2829,12 +2824,12 @@ msgstr "Обновлено в"
 msgid "Updated successfully"
 msgid "Updated successfully"
 msgstr "Успешно обновлено"
 msgstr "Успешно обновлено"
 
 
-#: src/routes/index.ts:297 src/views/environment/Environment.vue:53
+#: src/routes/index.ts:297 src/views/environment/Environment.vue:56
 #: src/views/system/Upgrade.vue:143 src/views/system/Upgrade.vue:226
 #: src/views/system/Upgrade.vue:143 src/views/system/Upgrade.vue:226
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr "Обновление"
 msgstr "Обновление"
 
 
-#: src/views/environment/BatchUpgrader.vue:138
+#: src/views/environment/BatchUpgrader.vue:137
 msgid "Upgraded Nginx UI on %{node} successfully 🎉"
 msgid "Upgraded Nginx UI on %{node} successfully 🎉"
 msgstr "Интерфейс Nginx на %{node} успешно обновлен 🎉"
 msgstr "Интерфейс Nginx на %{node} успешно обновлен 🎉"
 
 
@@ -2842,7 +2837,7 @@ msgstr "Интерфейс Nginx на %{node} успешно обновлен 
 msgid "Upgraded successfully"
 msgid "Upgraded successfully"
 msgstr "Обновлено успешно"
 msgstr "Обновлено успешно"
 
 
-#: src/views/environment/BatchUpgrader.vue:89 src/views/system/Upgrade.vue:77
+#: src/views/environment/BatchUpgrader.vue:88 src/views/system/Upgrade.vue:77
 msgid "Upgrading Nginx UI, please wait..."
 msgid "Upgrading Nginx UI, please wait..."
 msgstr "Обновление Nginx UI, подождите..."
 msgstr "Обновление Nginx UI, подождите..."
 
 
@@ -2854,7 +2849,7 @@ msgstr "Имя Upstream"
 msgid "Uptime:"
 msgid "Uptime:"
 msgstr "Аптайм:"
 msgstr "Аптайм:"
 
 
-#: src/views/environment/envColumns.tsx:18
+#: src/views/environment/envColumns.tsx:19
 msgid "URL"
 msgid "URL"
 msgstr "URL"
 msgstr "URL"
 
 
@@ -2866,7 +2861,7 @@ msgstr "Использовать OTP"
 msgid "Use recovery code"
 msgid "Use recovery code"
 msgstr "Использовать код восстановления"
 msgstr "Использовать код восстановления"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:237
+#: src/components/ChatGPT/ChatGPT.vue:333
 msgid "User"
 msgid "User"
 msgstr "Пользователь"
 msgstr "Пользователь"
 
 
@@ -2887,13 +2882,13 @@ msgstr "Имя пользователя"
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr "Имя пользователя (*)"
 msgstr "Имя пользователя (*)"
 
 
-#: src/views/certificate/ACMEUser.vue:123
+#: src/views/certificate/ACMEUser.vue:124
 #: src/views/certificate/CertificateList/certColumns.tsx:81
 #: src/views/certificate/CertificateList/certColumns.tsx:81
 #: src/views/site/cert/CertInfo.vue:24
 #: src/views/site/cert/CertInfo.vue:24
 msgid "Valid"
 msgid "Valid"
 msgstr "Действительный"
 msgstr "Действительный"
 
 
-#: src/views/environment/envColumns.tsx:29
+#: src/views/environment/envColumns.tsx:31
 msgid "Version"
 msgid "Version"
 msgstr "Версия"
 msgstr "Версия"
 
 
@@ -2997,6 +2992,18 @@ msgstr ""
 msgid "Your passkeys"
 msgid "Your passkeys"
 msgstr ""
 msgstr ""
 
 
+#~ msgid "Directory"
+#~ msgstr "Каталог"
+
+#~ msgid "Environment"
+#~ msgstr "Окружение"
+
+#~ msgid "File"
+#~ msgstr "Файл"
+
+#~ msgid "Server error"
+#~ msgstr "Ошибка сервера"
+
 #~ msgid "Incorrect username or password"
 #~ msgid "Incorrect username or password"
 #~ msgstr "Неверное имя пользователя или пароль"
 #~ msgstr "Неверное имя пользователя или пароль"
 
 

+ 131 - 124
app/src/language/tr_TR/app.po

@@ -28,7 +28,7 @@ msgstr "Hakkında"
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr "Erişim Günlükleri"
 msgstr "Erişim Günlükleri"
 
 
-#: src/routes/index.ts:148 src/views/certificate/ACMEUser.vue:112
+#: src/routes/index.ts:148 src/views/certificate/ACMEUser.vue:113
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
 msgid "ACME User"
 msgid "ACME User"
 msgstr "ACME Kullanıcısı"
 msgstr "ACME Kullanıcısı"
@@ -36,12 +36,12 @@ msgstr "ACME Kullanıcısı"
 #: src/views/certificate/ACMEUser.vue:95
 #: src/views/certificate/ACMEUser.vue:95
 #: src/views/certificate/CertificateList/certColumns.tsx:97
 #: src/views/certificate/CertificateList/certColumns.tsx:97
 #: src/views/certificate/DNSCredential.vue:33
 #: src/views/certificate/DNSCredential.vue:33
-#: src/views/config/configColumns.ts:38
-#: src/views/environment/envColumns.tsx:125
-#: src/views/notification/notificationColumns.tsx:62
+#: src/views/config/configColumns.tsx:42
+#: src/views/environment/envColumns.tsx:97
+#: src/views/notification/notificationColumns.tsx:65
 #: src/views/preference/AuthSettings.vue:26
 #: src/views/preference/AuthSettings.vue:26
-#: src/views/site/site_category/columns.ts:26
-#: src/views/site/site_list/columns.tsx:74 src/views/stream/StreamList.vue:47
+#: src/views/site/site_category/columns.ts:29
+#: src/views/site/site_list/columns.tsx:76 src/views/stream/StreamList.vue:49
 #: src/views/user/userColumns.tsx:60
 #: src/views/user/userColumns.tsx:60
 msgid "Action"
 msgid "Action"
 msgstr "Eylem"
 msgstr "Eylem"
@@ -52,7 +52,7 @@ msgstr "Eylem"
 #: src/views/site/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/site/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/site/ngx_conf/NgxServer.vue:162
 #: src/views/site/ngx_conf/NgxServer.vue:162
 #: src/views/site/ngx_conf/NgxUpstream.vue:154
 #: src/views/site/ngx_conf/NgxUpstream.vue:154
-#: src/views/stream/StreamList.vue:117
+#: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr "Ekle"
 msgstr "Ekle"
 
 
@@ -79,11 +79,11 @@ msgstr "Konum ekle"
 msgid "Add Site"
 msgid "Add Site"
 msgstr "Site Ekle"
 msgstr "Site Ekle"
 
 
-#: src/views/stream/StreamList.vue:176
+#: src/views/stream/StreamList.vue:181
 msgid "Add Stream"
 msgid "Add Stream"
 msgstr "Akış Ekle"
 msgstr "Akış Ekle"
 
 
-#: src/views/stream/StreamList.vue:109
+#: src/views/stream/StreamList.vue:113
 msgid "Added successfully"
 msgid "Added successfully"
 msgstr "Başarıyla eklendi"
 msgstr "Başarıyla eklendi"
 
 
@@ -154,11 +154,11 @@ msgid "Are you sure you want to apply to all selected?"
 msgstr "Silmek istediğine emin misin?"
 msgstr "Silmek istediğine emin misin?"
 
 
 #: src/components/Notification/Notification.vue:130
 #: src/components/Notification/Notification.vue:130
-#: src/views/notification/Notification.vue:38
+#: src/views/notification/Notification.vue:39
 msgid "Are you sure you want to clear all notifications?"
 msgid "Are you sure you want to clear all notifications?"
 msgstr "Tüm bildirimleri temizlemek istediğinizden emin misiniz?"
 msgstr "Tüm bildirimleri temizlemek istediğinizden emin misiniz?"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:279
+#: src/components/ChatGPT/ChatGPT.vue:376
 msgid "Are you sure you want to clear the record of chat?"
 msgid "Are you sure you want to clear the record of chat?"
 msgstr "Sohbet kaydını silmek istediğinizden emin misiniz?"
 msgstr "Sohbet kaydını silmek istediğinizden emin misiniz?"
 
 
@@ -170,8 +170,8 @@ msgstr "Bu öğeyi kalıcı olarak silmek istediğinizden emin misiniz?"
 msgid "Are you sure you want to delete this item?"
 msgid "Are you sure you want to delete this item?"
 msgstr "Bu öğeyi silmek istediğinizden emin misiniz?"
 msgstr "Bu öğeyi silmek istediğinizden emin misiniz?"
 
 
-#: src/views/site/site_list/SiteList.vue:144
-#: src/views/stream/StreamList.vue:160
+#: src/views/site/site_list/SiteList.vue:145
+#: src/views/stream/StreamList.vue:165
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr "Silmek istediğine emin misin?"
 msgstr "Silmek istediğine emin misin?"
 
 
@@ -191,11 +191,11 @@ msgstr "Bu öğeyi kaldırmak istediğinizden emin misiniz?"
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "Bu konumu kaldırmak istediğinizden emin misiniz?"
 msgstr "Bu konumu kaldırmak istediğinizden emin misiniz?"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:223
+#: src/components/ChatGPT/ChatGPT.vue:318
 msgid "Ask ChatGPT for Help"
 msgid "Ask ChatGPT for Help"
 msgstr "ChatGPT'den Yardım İsteyin"
 msgstr "ChatGPT'den Yardım İsteyin"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:237
+#: src/components/ChatGPT/ChatGPT.vue:333
 msgid "Assistant"
 msgid "Assistant"
 msgstr "Asistan"
 msgstr "Asistan"
 
 
@@ -239,7 +239,7 @@ msgstr "Otomatik yenileme %{name} için etkinleştirildi"
 
 
 #: src/views/certificate/CertificateEditor.vue:255
 #: src/views/certificate/CertificateEditor.vue:255
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:106
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:106
-#: src/views/config/ConfigList.vue:179 src/views/nginx_log/NginxLog.vue:173
+#: src/views/config/ConfigList.vue:180 src/views/nginx_log/NginxLog.vue:173
 #: src/views/site/site_edit/SiteEdit.vue:264
 #: src/views/site/site_edit/SiteEdit.vue:264
 #: src/views/stream/StreamEdit.vue:245
 #: src/views/stream/StreamEdit.vue:245
 msgid "Back"
 msgid "Back"
@@ -291,7 +291,7 @@ msgstr "Eylem"
 msgid "Batch Modify"
 msgid "Batch Modify"
 msgstr "Toplu Değiştirme"
 msgstr "Toplu Değiştirme"
 
 
-#: src/views/environment/BatchUpgrader.vue:153
+#: src/views/environment/BatchUpgrader.vue:152
 msgid "Batch Upgrade"
 msgid "Batch Upgrade"
 msgstr "Toplu Yükseltme"
 msgstr "Toplu Yükseltme"
 
 
@@ -319,9 +319,9 @@ msgstr "CADizini"
 msgid "Can't scan? Use text key binding"
 msgid "Can't scan? Use text key binding"
 msgstr "Tarayamıyor musunuz? Metin anahtar bağlamasını kullanın"
 msgstr "Tarayamıyor musunuz? Metin anahtar bağlamasını kullanın"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:260
+#: src/components/ChatGPT/ChatGPT.vue:356
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:180
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:187
 #: src/components/StdDesign/StdDetail/StdDetail.vue:101
 #: src/components/StdDesign/StdDetail/StdDetail.vue:101
 #: src/views/preference/components/Passkey.vue:141
 #: src/views/preference/components/Passkey.vue:141
 #: src/views/site/cert/components/ObtainCert.vue:140
 #: src/views/site/cert/components/ObtainCert.vue:140
@@ -334,8 +334,18 @@ msgstr "Tarayamıyor musunuz? Metin anahtar bağlamasını kullanın"
 msgid "Cancel"
 msgid "Cancel"
 msgstr "İptal"
 msgstr "İptal"
 
 
+#: src/constants/errors/user.ts:10
+#, fuzzy
+msgid "Cannot change initial user password in demo mode"
+msgstr "Demoda kök parolasını değiştirmeyi yasakla"
+
+#: src/constants/errors/user.ts:9
+#, fuzzy
+msgid "Cannot remove initial user"
+msgstr "Sistem İlk Kullanıcısı"
+
 #: src/views/site/site_edit/RightSettings.vue:91
 #: src/views/site/site_edit/RightSettings.vue:91
-#: src/views/site/site_list/columns.tsx:23
+#: src/views/site/site_list/columns.tsx:25
 msgid "Category"
 msgid "Category"
 msgstr ""
 msgstr ""
 
 
@@ -396,7 +406,7 @@ msgstr[1] "Değişen Sertifikalar"
 msgid "Changed Path"
 msgid "Changed Path"
 msgstr "Değişen Dosya Yolu"
 msgstr "Değişen Dosya Yolu"
 
 
-#: src/views/environment/BatchUpgrader.vue:160 src/views/system/Upgrade.vue:188
+#: src/views/environment/BatchUpgrader.vue:159 src/views/system/Upgrade.vue:188
 msgid "Channel"
 msgid "Channel"
 msgstr "Kanal"
 msgstr "Kanal"
 
 
@@ -432,9 +442,9 @@ msgstr ""
 msgid "Cleaning environment variables"
 msgid "Cleaning environment variables"
 msgstr "Ortam değişkenlerini temizleme"
 msgstr "Ortam değişkenlerini temizleme"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:283
+#: src/components/ChatGPT/ChatGPT.vue:380
 #: src/components/Notification/Notification.vue:135
 #: src/components/Notification/Notification.vue:135
-#: src/views/notification/Notification.vue:43
+#: src/views/notification/Notification.vue:44
 msgid "Clear"
 msgid "Clear"
 msgstr "Temizle"
 msgstr "Temizle"
 
 
@@ -525,9 +535,9 @@ msgstr "Dosya Oluştur"
 msgid "Create Folder"
 msgid "Create Folder"
 msgstr "Klasör Ekle"
 msgstr "Klasör Ekle"
 
 
-#: src/views/notification/notificationColumns.tsx:56
+#: src/views/notification/notificationColumns.tsx:58
 #: src/views/preference/components/Passkey.vue:95
 #: src/views/preference/components/Passkey.vue:95
-#: src/views/site/site_category/columns.ts:14 src/views/user/userColumns.tsx:48
+#: src/views/site/site_category/columns.ts:15 src/views/user/userColumns.tsx:48
 msgid "Created at"
 msgid "Created at"
 msgstr "Oluşturulma Tarihi"
 msgstr "Oluşturulma Tarihi"
 
 
@@ -588,8 +598,8 @@ msgstr "Günler"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/views/site/ngx_conf/NgxServer.vue:110
 #: src/views/site/ngx_conf/NgxServer.vue:110
 #: src/views/site/ngx_conf/NgxUpstream.vue:128
 #: src/views/site/ngx_conf/NgxUpstream.vue:128
-#: src/views/site/site_list/SiteList.vue:153
-#: src/views/stream/StreamList.vue:169
+#: src/views/site/site_list/SiteList.vue:154
+#: src/views/stream/StreamList.vue:174
 msgid "Delete"
 msgid "Delete"
 msgstr "Sil"
 msgstr "Sil"
 
 
@@ -612,7 +622,7 @@ msgstr "Uzak Yapılandırmayı Yeniden Adlandırma Başarılı"
 msgid "Delete site: %{site_name}"
 msgid "Delete site: %{site_name}"
 msgstr "Siteyi sil: %{site_name}"
 msgstr "Siteyi sil: %{site_name}"
 
 
-#: src/views/stream/StreamList.vue:78
+#: src/views/stream/StreamList.vue:82
 msgid "Delete stream: %{stream_name}"
 msgid "Delete stream: %{stream_name}"
 msgstr "Akışı sil: %{stream_name}"
 msgstr "Akışı sil: %{stream_name}"
 
 
@@ -648,7 +658,7 @@ msgstr "Açıklama"
 msgid "Destination file already exists"
 msgid "Destination file already exists"
 msgstr ""
 msgstr ""
 
 
-#: src/views/notification/notificationColumns.tsx:51
+#: src/views/notification/notificationColumns.tsx:52
 msgid "Details"
 msgid "Details"
 msgstr "Detaylar"
 msgstr "Detaylar"
 
 
@@ -676,12 +686,8 @@ msgstr ""
 msgid "Directives"
 msgid "Directives"
 msgstr "Yönergeler"
 msgstr "Yönergeler"
 
 
-#: src/views/config/configColumns.ts:22
-msgid "Directory"
-msgstr "Dizin"
-
-#: src/views/site/site_list/SiteList.vue:124
-#: src/views/stream/StreamList.vue:140
+#: src/views/site/site_list/SiteList.vue:125
+#: src/views/stream/StreamList.vue:145
 msgid "Disable"
 msgid "Disable"
 msgstr "Devre Dışı"
 msgstr "Devre Dışı"
 
 
@@ -713,19 +719,19 @@ msgstr ""
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarılı "
 "%{conf_name} yapılandırmasını %{node_name} düğümünde etkinleştirme başarılı "
 "oldu"
 "oldu"
 
 
-#: src/views/environment/envColumns.tsx:109
-#: src/views/environment/envColumns.tsx:92
+#: src/views/environment/envColumns.tsx:61
+#: src/views/environment/envColumns.tsx:79
 #: src/views/site/site_edit/SiteEdit.vue:190
 #: src/views/site/site_edit/SiteEdit.vue:190
-#: src/views/site/site_list/columns.tsx:51
-#: src/views/site/site_list/columns.tsx:60 src/views/stream/StreamEdit.vue:175
-#: src/views/stream/StreamList.vue:33 src/views/user/userColumns.tsx:41
+#: src/views/site/site_list/columns.tsx:53
+#: src/views/site/site_list/columns.tsx:62 src/views/stream/StreamEdit.vue:175
+#: src/views/stream/StreamList.vue:34 src/views/user/userColumns.tsx:41
 msgid "Disabled"
 msgid "Disabled"
 msgstr "Devre dışı"
 msgstr "Devre dışı"
 
 
 #: src/views/site/site_edit/RightSettings.vue:42
 #: src/views/site/site_edit/RightSettings.vue:42
 #: src/views/site/site_list/SiteList.vue:56
 #: src/views/site/site_list/SiteList.vue:56
 #: src/views/stream/components/RightSettings.vue:38
 #: src/views/stream/components/RightSettings.vue:38
-#: src/views/stream/StreamList.vue:67
+#: src/views/stream/StreamList.vue:71
 msgid "Disabled successfully"
 msgid "Disabled successfully"
 msgstr "Başarıyla devre dışı bırakıldı"
 msgstr "Başarıyla devre dışı bırakıldı"
 
 
@@ -818,7 +824,7 @@ msgstr "En son sürümü indirme hatası"
 msgid "Downloading latest release"
 msgid "Downloading latest release"
 msgstr "En son sürüm indiriliyor"
 msgstr "En son sürüm indiriliyor"
 
 
-#: src/views/environment/BatchUpgrader.vue:189 src/views/system/Upgrade.vue:215
+#: src/views/environment/BatchUpgrader.vue:188 src/views/system/Upgrade.vue:215
 msgid "Dry run mode enabled"
 msgid "Dry run mode enabled"
 msgstr "Deneme modu etkinleştirildi(Dry-run)"
 msgstr "Deneme modu etkinleştirildi(Dry-run)"
 
 
@@ -832,9 +838,9 @@ msgstr ""
 "kullanamazsınız."
 "kullanamazsınız."
 
 
 #: src/views/site/site_list/SiteDuplicate.vue:72
 #: src/views/site/site_list/SiteDuplicate.vue:72
-#: src/views/site/site_list/SiteList.vue:139
+#: src/views/site/site_list/SiteList.vue:140
 #: src/views/stream/components/StreamDuplicate.vue:121
 #: src/views/stream/components/StreamDuplicate.vue:121
-#: src/views/stream/StreamList.vue:155
+#: src/views/stream/StreamList.vue:160
 msgid "Duplicate"
 msgid "Duplicate"
 msgstr "Kopyala"
 msgstr "Kopyala"
 
 
@@ -885,9 +891,9 @@ msgstr "E-posta"
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "E-posta(*)"
 msgstr "E-posta(*)"
 
 
-#: src/views/site/site_list/SiteList.vue:132
+#: src/views/site/site_list/SiteList.vue:133
 #: src/views/stream/components/Deploy.vue:80
 #: src/views/stream/components/Deploy.vue:80
-#: src/views/stream/StreamList.vue:148
+#: src/views/stream/StreamList.vue:153
 msgid "Enable"
 msgid "Enable"
 msgstr "Etkinleştir"
 msgstr "Etkinleştir"
 
 
@@ -951,15 +957,15 @@ msgstr "TLS'yi Etkinleştir"
 msgid "Enable TOTP"
 msgid "Enable TOTP"
 msgstr "TOTP'yi Etkinleştir"
 msgstr "TOTP'yi Etkinleştir"
 
 
-#: src/views/environment/envColumns.tsx:100
-#: src/views/environment/envColumns.tsx:106
+#: src/views/environment/envColumns.tsx:70
+#: src/views/environment/envColumns.tsx:76
 #: src/views/preference/LogrotateSettings.vue:19
 #: src/views/preference/LogrotateSettings.vue:19
 #: src/views/site/site_edit/RightSettings.vue:82
 #: src/views/site/site_edit/RightSettings.vue:82
 #: src/views/site/site_edit/SiteEdit.vue:184
 #: src/views/site/site_edit/SiteEdit.vue:184
-#: src/views/site/site_list/columns.tsx:47
-#: src/views/site/site_list/columns.tsx:59
+#: src/views/site/site_list/columns.tsx:49
+#: src/views/site/site_list/columns.tsx:61
 #: src/views/stream/components/RightSettings.vue:76
 #: src/views/stream/components/RightSettings.vue:76
-#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:29
+#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:30
 #: src/views/user/userColumns.tsx:38
 #: src/views/user/userColumns.tsx:38
 msgid "Enabled"
 msgid "Enabled"
 msgstr "Etkin"
 msgstr "Etkin"
@@ -968,7 +974,7 @@ msgstr "Etkin"
 #: src/views/site/site_list/SiteList.vue:46 src/views/site/SiteAdd.vue:40
 #: src/views/site/site_list/SiteList.vue:46 src/views/site/SiteAdd.vue:40
 #: src/views/stream/components/RightSettings.vue:29
 #: src/views/stream/components/RightSettings.vue:29
 #: src/views/stream/components/StreamDuplicate.vue:93
 #: src/views/stream/components/StreamDuplicate.vue:93
-#: src/views/stream/StreamList.vue:57
+#: src/views/stream/StreamList.vue:61
 msgid "Enabled successfully"
 msgid "Enabled successfully"
 msgstr "Başarıyla etkinleştirildi"
 msgstr "Başarıyla etkinleştirildi"
 
 
@@ -976,15 +982,12 @@ msgstr "Başarıyla etkinleştirildi"
 msgid "Encrypt website with Let's Encrypt"
 msgid "Encrypt website with Let's Encrypt"
 msgstr "Let's Encrypt ile web sitesini şifreleyin"
 msgstr "Let's Encrypt ile web sitesini şifreleyin"
 
 
-#: src/routes/index.ts:234 src/views/environment/Environment.vue:32
-msgid "Environment"
-msgstr "Ortam"
-
 #: src/language/constants.ts:21
 #: src/language/constants.ts:21
 msgid "Environment variables cleaned"
 msgid "Environment variables cleaned"
 msgstr "Ortam değişkenleri temizlendi"
 msgstr "Ortam değişkenleri temizlendi"
 
 
-#: src/views/dashboard/Environments.vue:83
+#: src/routes/index.ts:234 src/views/dashboard/Environments.vue:83
+#: src/views/environment/Environment.vue:33
 msgid "Environments"
 msgid "Environments"
 msgstr "Ortamlar"
 msgstr "Ortamlar"
 
 
@@ -1026,14 +1029,14 @@ msgstr "Etkinleştirilemedi %{msg}"
 #: src/views/site/site_edit/RightSettings.vue:45
 #: src/views/site/site_edit/RightSettings.vue:45
 #: src/views/site/site_list/SiteList.vue:60
 #: src/views/site/site_list/SiteList.vue:60
 #: src/views/stream/components/RightSettings.vue:41
 #: src/views/stream/components/RightSettings.vue:41
-#: src/views/stream/StreamList.vue:71
+#: src/views/stream/StreamList.vue:75
 msgid "Failed to disable %{msg}"
 msgid "Failed to disable %{msg}"
 msgstr "Devre dışı bırakılamadı %{msg}"
 msgstr "Devre dışı bırakılamadı %{msg}"
 
 
 #: src/views/site/site_edit/RightSettings.vue:36
 #: src/views/site/site_edit/RightSettings.vue:36
 #: src/views/site/site_list/SiteList.vue:50
 #: src/views/site/site_list/SiteList.vue:50
 #: src/views/stream/components/RightSettings.vue:32
 #: src/views/stream/components/RightSettings.vue:32
-#: src/views/stream/StreamList.vue:61
+#: src/views/stream/StreamList.vue:65
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "Etkinleştirilemedi %{msg}"
 msgstr "Etkinleştirilemedi %{msg}"
 
 
@@ -1054,10 +1057,6 @@ msgstr ""
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgstr "Kaydedilemedi, yapılandırmada sözdizimi hatası(ları) tespit edildi."
 msgstr "Kaydedilemedi, yapılandırmada sözdizimi hatası(ları) tespit edildi."
 
 
-#: src/views/config/configColumns.ts:24
-msgid "File"
-msgstr "Dosya"
-
 #: src/language/constants.ts:31
 #: src/language/constants.ts:31
 msgid "File exists"
 msgid "File exists"
 msgstr "Dosya zaten var"
 msgstr "Dosya zaten var"
@@ -1119,7 +1118,7 @@ msgstr "Oluştur"
 msgid "Generating private key for registering account"
 msgid "Generating private key for registering account"
 msgstr "Hesap kaydı için özel anahtar oluşturuluyor"
 msgstr "Hesap kaydı için özel anahtar oluşturuluyor"
 
 
-#: src/views/environment/BatchUpgrader.vue:178 src/views/system/Upgrade.vue:169
+#: src/views/environment/BatchUpgrader.vue:177 src/views/system/Upgrade.vue:169
 msgid "Get release information error"
 msgid "Get release information error"
 msgstr "Sürüm bilgilerini alma hatası"
 msgstr "Sürüm bilgilerini alma hatası"
 
 
@@ -1236,7 +1235,7 @@ msgstr "Başarıyla yüklendi"
 msgid "Interval"
 msgid "Interval"
 msgstr "Aralık"
 msgstr "Aralık"
 
 
-#: src/views/certificate/ACMEUser.vue:128
+#: src/views/certificate/ACMEUser.vue:129
 msgid "Invalid"
 msgid "Invalid"
 msgstr "Geçersiz"
 msgstr "Geçersiz"
 
 
@@ -1343,7 +1342,7 @@ msgstr "Liste"
 msgid "Load Average:"
 msgid "Load Average:"
 msgstr "Yük Ortalaması:"
 msgstr "Yük Ortalaması:"
 
 
-#: src/views/environment/Environment.vue:37
+#: src/views/environment/Environment.vue:39
 msgid "Load from settings"
 msgid "Load from settings"
 msgstr "Ayarlar'dan yükle"
 msgstr "Ayarlar'dan yükle"
 
 
@@ -1420,12 +1419,12 @@ msgstr "Yapılandırmaları Yönet"
 msgid "Manage Sites"
 msgid "Manage Sites"
 msgstr "Siteleri Yönet"
 msgstr "Siteleri Yönet"
 
 
-#: src/routes/index.ts:89 src/views/stream/StreamList.vue:115
+#: src/routes/index.ts:89 src/views/stream/StreamList.vue:119
 #, fuzzy
 #, fuzzy
 msgid "Manage Streams"
 msgid "Manage Streams"
 msgstr "Akışları Yönet"
 msgstr "Akışları Yönet"
 
 
-#: src/routes/index.ts:257 src/views/user/User.vue:9
+#: src/routes/index.ts:257 src/views/user/User.vue:10
 #, fuzzy
 #, fuzzy
 msgid "Manage Users"
 msgid "Manage Users"
 msgstr "Kullanıcıları Yönet"
 msgstr "Kullanıcıları Yönet"
@@ -1461,10 +1460,10 @@ msgstr "Dakika"
 msgid "Model"
 msgid "Model"
 msgstr "Model"
 msgstr "Model"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:256
+#: src/components/ChatGPT/ChatGPT.vue:352
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:151
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:151
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:498
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:498
-#: src/views/config/ConfigList.vue:158
+#: src/views/config/ConfigList.vue:159
 #, fuzzy
 #, fuzzy
 msgid "Modify"
 msgid "Modify"
 msgstr "Değiştir"
 msgstr "Değiştir"
@@ -1493,17 +1492,18 @@ msgstr "Çok Hatlı Direktif"
 #: src/views/certificate/CertificateEditor.vue:160
 #: src/views/certificate/CertificateEditor.vue:160
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/certificate/DNSCredential.vue:11
-#: src/views/config/components/Mkdir.vue:64 src/views/config/configColumns.ts:8
-#: src/views/config/ConfigEditor.vue:256 src/views/environment/envColumns.tsx:9
+#: src/views/config/components/Mkdir.vue:64
+#: src/views/config/configColumns.tsx:7 src/views/config/ConfigEditor.vue:256
+#: src/views/environment/envColumns.tsx:9
 #: src/views/preference/components/AddPasskey.vue:75
 #: src/views/preference/components/AddPasskey.vue:75
 #: src/views/site/ngx_conf/NgxUpstream.vue:177
 #: src/views/site/ngx_conf/NgxUpstream.vue:177
 #: src/views/site/site_category/columns.ts:7
 #: src/views/site/site_category/columns.ts:7
 #: src/views/site/site_edit/RightSettings.vue:88
 #: src/views/site/site_edit/RightSettings.vue:88
-#: src/views/site/site_list/columns.tsx:13
+#: src/views/site/site_list/columns.tsx:15
 #: src/views/site/site_list/SiteDuplicate.vue:79
 #: src/views/site/site_list/SiteDuplicate.vue:79
 #: src/views/stream/components/RightSettings.vue:82
 #: src/views/stream/components/RightSettings.vue:82
 #: src/views/stream/components/StreamDuplicate.vue:128
 #: src/views/stream/components/StreamDuplicate.vue:128
-#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:181
+#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:186
 #, fuzzy
 #, fuzzy
 msgid "Name"
 msgid "Name"
 msgstr "İsim"
 msgstr "İsim"
@@ -1643,20 +1643,20 @@ msgstr "Terminal Başlatma Komutu"
 msgid "Nginx restarted successfully"
 msgid "Nginx restarted successfully"
 msgstr "Nginx başarıyla yeniden başlatıldı"
 msgstr "Nginx başarıyla yeniden başlatıldı"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:277
+#: src/components/ChatGPT/ChatGPT.vue:374
 #: src/components/Notification/Notification.vue:128
 #: src/components/Notification/Notification.vue:128
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:510
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:510
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:524
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:524
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:538
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:538
-#: src/views/notification/Notification.vue:36
+#: src/views/notification/Notification.vue:37
 #: src/views/preference/AuthSettings.vue:136
 #: src/views/preference/AuthSettings.vue:136
 #: src/views/preference/CertSettings.vue:70
 #: src/views/preference/CertSettings.vue:70
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97
 #: src/views/site/ngx_conf/LocationEditor.vue:90
 #: src/views/site/ngx_conf/LocationEditor.vue:90
-#: src/views/site/site_list/SiteList.vue:142
-#: src/views/stream/StreamList.vue:158
+#: src/views/site/site_list/SiteList.vue:143
+#: src/views/stream/StreamList.vue:163
 #, fuzzy
 #, fuzzy
 msgid "No"
 msgid "No"
 msgstr "Hayır"
 msgstr "Hayır"
@@ -1698,7 +1698,7 @@ msgid ""
 "certificates, please synchronize them to the remote nodes in advance."
 "certificates, please synchronize them to the remote nodes in advance."
 msgstr ""
 msgstr ""
 
 
-#: src/views/notification/Notification.vue:27
+#: src/views/notification/Notification.vue:28
 #, fuzzy
 #, fuzzy
 msgid "Notification"
 msgid "Notification"
 msgstr "Bildirim"
 msgstr "Bildirim"
@@ -1734,7 +1734,7 @@ msgstr ""
 
 
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/views/dashboard/Environments.vue:107
 #: src/views/dashboard/Environments.vue:107
-#: src/views/environment/envColumns.tsx:87
+#: src/views/environment/envColumns.tsx:56
 #, fuzzy
 #, fuzzy
 msgid "Offline"
 msgid "Offline"
 msgstr "Çevrimdışı"
 msgstr "Çevrimdışı"
@@ -1743,24 +1743,24 @@ msgstr "Çevrimdışı"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:511
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:511
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:525
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:525
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:539
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:539
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:181
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:188
 #, fuzzy
 #, fuzzy
 msgid "Ok"
 msgid "Ok"
 msgstr "Tamam"
 msgstr "Tamam"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:278
+#: src/components/ChatGPT/ChatGPT.vue:375
 #: src/components/Notification/Notification.vue:129
 #: src/components/Notification/Notification.vue:129
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:95
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:95
-#: src/views/notification/Notification.vue:37
+#: src/views/notification/Notification.vue:38
 #: src/views/site/cert/components/ObtainCert.vue:139
 #: src/views/site/cert/components/ObtainCert.vue:139
 #: src/views/site/ngx_conf/NgxConfigEditor.vue:50
 #: src/views/site/ngx_conf/NgxConfigEditor.vue:50
 #: src/views/site/ngx_conf/NgxServer.vue:79
 #: src/views/site/ngx_conf/NgxServer.vue:79
 #: src/views/site/ngx_conf/NgxUpstream.vue:33
 #: src/views/site/ngx_conf/NgxUpstream.vue:33
 #: src/views/site/site_edit/RightSettings.vue:54
 #: src/views/site/site_edit/RightSettings.vue:54
-#: src/views/site/site_list/SiteList.vue:143
+#: src/views/site/site_list/SiteList.vue:144
 #: src/views/stream/components/Deploy.vue:19
 #: src/views/stream/components/Deploy.vue:19
 #: src/views/stream/components/RightSettings.vue:50
 #: src/views/stream/components/RightSettings.vue:50
-#: src/views/stream/StreamList.vue:159
+#: src/views/stream/StreamList.vue:164
 #, fuzzy
 #, fuzzy
 msgid "OK"
 msgid "OK"
 msgstr "Tamam"
 msgstr "Tamam"
@@ -1773,7 +1773,7 @@ msgstr "Doğrulama tamamlandıktan sonra kayıtlar kaldırılacaktır."
 #: src/components/NodeSelector/NodeSelector.vue:83
 #: src/components/NodeSelector/NodeSelector.vue:83
 #: src/components/NodeSelector/NodeSelector.vue:97
 #: src/components/NodeSelector/NodeSelector.vue:97
 #: src/views/dashboard/Environments.vue:100
 #: src/views/dashboard/Environments.vue:100
-#: src/views/environment/envColumns.tsx:83
+#: src/views/environment/envColumns.tsx:52
 #, fuzzy
 #, fuzzy
 msgid "Online"
 msgid "Online"
 msgstr "Çevrimiçi"
 msgstr "Çevrimiçi"
@@ -1875,7 +1875,7 @@ msgstr ""
 msgid "Payload resource is nil"
 msgid "Payload resource is nil"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/BatchUpgrader.vue:233
+#: src/views/environment/BatchUpgrader.vue:232
 #, fuzzy
 #, fuzzy
 msgid "Perform"
 msgid "Perform"
 msgstr "Uygula"
 msgstr "Uygula"
@@ -1982,7 +1982,7 @@ msgstr ""
 "Lütfen aşağıdaki zaman birimi konfigürasyonlarının tümünün saniye cinsinden "
 "Lütfen aşağıdaki zaman birimi konfigürasyonlarının tümünün saniye cinsinden "
 "olduğunu unutmayın."
 "olduğunu unutmayın."
 
 
-#: src/views/environment/Environment.vue:45
+#: src/views/environment/Environment.vue:48
 #, fuzzy
 #, fuzzy
 msgid "Please select at least one node to upgrade"
 msgid "Please select at least one node to upgrade"
 msgstr "Lütfen yükseltmek için en az bir düğüm seçin"
 msgstr "Lütfen yükseltmek için en az bir düğüm seçin"
@@ -2005,8 +2005,8 @@ msgstr ""
 "0] yapılandırmasını %{env_name} ile eşitleme başarısız oldu, lütfen uzak "
 "0] yapılandırmasını %{env_name} ile eşitleme başarısız oldu, lütfen uzak "
 "Nginx kullanıcı arayüzünü en son sürüme yükseltin"
 "Nginx kullanıcı arayüzünü en son sürüme yükseltin"
 
 
-#: src/views/environment/BatchUpgrader.vue:168
-#: src/views/environment/BatchUpgrader.vue:221 src/views/system/Upgrade.vue:194
+#: src/views/environment/BatchUpgrader.vue:167
+#: src/views/environment/BatchUpgrader.vue:220 src/views/system/Upgrade.vue:194
 #: src/views/system/Upgrade.vue:245
 #: src/views/system/Upgrade.vue:245
 #, fuzzy
 #, fuzzy
 msgid "Pre-release"
 msgid "Pre-release"
@@ -2099,12 +2099,12 @@ msgstr "Kurtarma Kodu:"
 msgid "Recursive Nameservers"
 msgid "Recursive Nameservers"
 msgstr "Yinelemeli Ad Sunucuları"
 msgstr "Yinelemeli Ad Sunucuları"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:290
+#: src/components/ChatGPT/ChatGPT.vue:387
 #, fuzzy
 #, fuzzy
 msgid "Regenerate response"
 msgid "Regenerate response"
 msgstr "Yeniden üretme yanıtı"
 msgstr "Yeniden üretme yanıtı"
 
 
-#: src/views/certificate/ACMEUser.vue:136
+#: src/views/certificate/ACMEUser.vue:137
 #, fuzzy
 #, fuzzy
 msgid "Register"
 msgid "Register"
 msgstr "Kayıt Ol"
 msgstr "Kayıt Ol"
@@ -2118,7 +2118,7 @@ msgstr ""
 "Bir HTTP proxy'si aracılığıyla sertifika vermek için bir kullanıcı kaydedin "
 "Bir HTTP proxy'si aracılığıyla sertifika vermek için bir kullanıcı kaydedin "
 "veya bu hesabı kullanın."
 "veya bu hesabı kullanın."
 
 
-#: src/views/certificate/ACMEUser.vue:105
+#: src/views/certificate/ACMEUser.vue:106
 #, fuzzy
 #, fuzzy
 msgid "Register failed"
 msgid "Register failed"
 msgstr "Kayıt başarısız"
 msgstr "Kayıt başarısız"
@@ -2133,7 +2133,7 @@ msgstr "Başlangıçta Kaydolun"
 msgid "Register passkey successfully"
 msgid "Register passkey successfully"
 msgstr "Geçiş anahtarını başarıyla kaydet"
 msgstr "Geçiş anahtarını başarıyla kaydet"
 
 
-#: src/views/certificate/ACMEUser.vue:103
+#: src/views/certificate/ACMEUser.vue:104
 #, fuzzy
 #, fuzzy
 msgid "Register successfully"
 msgid "Register successfully"
 msgstr "Başarıyla kaydolun"
 msgstr "Başarıyla kaydolun"
@@ -2143,7 +2143,7 @@ msgstr "Başarıyla kaydolun"
 msgid "Registering user"
 msgid "Registering user"
 msgstr "Kullanıcı kaydetme"
 msgstr "Kullanıcı kaydetme"
 
 
-#: src/views/certificate/ACMEUser.vue:119
+#: src/views/certificate/ACMEUser.vue:120
 #, fuzzy
 #, fuzzy
 msgid "Registration Status"
 msgid "Registration Status"
 msgstr "Kayıt durumu"
 msgstr "Kayıt durumu"
@@ -2158,7 +2158,7 @@ msgstr "Tekrar Yükle"
 msgid "Release Note"
 msgid "Release Note"
 msgstr "Yayın Notu"
 msgstr "Yayın Notu"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:266
+#: src/components/ChatGPT/ChatGPT.vue:362
 #: src/components/NginxControl/NginxControl.vue:99
 #: src/components/NginxControl/NginxControl.vue:99
 #, fuzzy
 #, fuzzy
 msgid "Reload"
 msgid "Reload"
@@ -2202,7 +2202,7 @@ msgstr "Başarıyla kaldırıldı"
 
 
 #: src/views/config/components/ConfigName.vue:48
 #: src/views/config/components/ConfigName.vue:48
 #: src/views/config/components/Rename.vue:54
 #: src/views/config/components/Rename.vue:54
-#: src/views/config/ConfigList.vue:165
+#: src/views/config/ConfigList.vue:166
 #: src/views/site/ngx_conf/NgxUpstream.vue:125
 #: src/views/site/ngx_conf/NgxUpstream.vue:125
 #: src/views/site/site_edit/components/ConfigName.vue:44
 #: src/views/site/site_edit/components/ConfigName.vue:44
 #, fuzzy
 #, fuzzy
@@ -2335,7 +2335,7 @@ msgstr "Çalışma Modu"
 msgid "Running"
 msgid "Running"
 msgstr "Çalışıyor"
 msgstr "Çalışıyor"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:259
+#: src/components/ChatGPT/ChatGPT.vue:355
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:64
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:64
 #: src/components/StdDesign/StdDetail/StdDetail.vue:93
 #: src/components/StdDesign/StdDetail/StdDetail.vue:93
 #: src/views/certificate/CertificateEditor.vue:262
 #: src/views/certificate/CertificateEditor.vue:262
@@ -2416,7 +2416,7 @@ msgstr "SDK"
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr "Sır kopyalandı"
 msgstr "Sır kopyalandı"
 
 
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:182
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:189
 #, fuzzy
 #, fuzzy
 msgid "Selector"
 msgid "Selector"
 msgstr "Selektör"
 msgstr "Selektör"
@@ -2431,11 +2431,6 @@ msgstr ""
 msgid "Send"
 msgid "Send"
 msgstr "Gönder"
 msgstr "Gönder"
 
 
-#: src/lib/http/index.ts:128
-#, fuzzy
-msgid "Server error"
-msgstr "Server hatası"
-
 #: src/views/dashboard/ServerAnalytic.vue:179
 #: src/views/dashboard/ServerAnalytic.vue:179
 #, fuzzy
 #, fuzzy
 msgid "Server Info"
 msgid "Server Info"
@@ -2455,7 +2450,7 @@ msgstr "server_name parametresi gereklidir"
 msgid "ServerIdx out of range"
 msgid "ServerIdx out of range"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/user.ts:9
+#: src/constants/errors/user.ts:11
 #, fuzzy
 #, fuzzy
 msgid "Session not found"
 msgid "Session not found"
 msgstr "Dosya bulunamadı"
 msgstr "Dosya bulunamadı"
@@ -2573,8 +2568,8 @@ msgstr "SSL Sertifika Yolu"
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "SSO Girişi"
 msgstr "SSO Girişi"
 
 
-#: src/views/environment/BatchUpgrader.vue:165
-#: src/views/environment/BatchUpgrader.vue:215 src/views/system/Upgrade.vue:191
+#: src/views/environment/BatchUpgrader.vue:164
+#: src/views/environment/BatchUpgrader.vue:214 src/views/system/Upgrade.vue:191
 #: src/views/system/Upgrade.vue:239
 #: src/views/system/Upgrade.vue:239
 #, fuzzy
 #, fuzzy
 msgid "Stable"
 msgid "Stable"
@@ -2582,8 +2577,8 @@ msgstr "Stabil"
 
 
 #: src/views/certificate/ACMEUser.vue:65
 #: src/views/certificate/ACMEUser.vue:65
 #: src/views/certificate/CertificateList/certColumns.tsx:68
 #: src/views/certificate/CertificateList/certColumns.tsx:68
-#: src/views/environment/envColumns.tsx:75
-#: src/views/site/site_list/columns.tsx:40 src/views/stream/StreamList.vue:22
+#: src/views/environment/envColumns.tsx:44
+#: src/views/site/site_list/columns.tsx:42 src/views/stream/StreamList.vue:23
 #, fuzzy
 #, fuzzy
 msgid "Status"
 msgid "Status"
 msgstr "Durum"
 msgstr "Durum"
@@ -2705,7 +2700,7 @@ msgstr "Senkronizasyon Yapılandırma Hatası"
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "Senkronizasyon Yapılandırması Başarılı"
 msgstr "Senkronizasyon Yapılandırması Başarılı"
 
 
-#: src/views/site/site_category/SiteCategory.vue:16
+#: src/views/site/site_category/SiteCategory.vue:17
 #, fuzzy
 #, fuzzy
 msgid "Sync Nodes"
 msgid "Sync Nodes"
 msgstr "Şununla senkronize et"
 msgstr "Şununla senkronize et"
@@ -2918,7 +2913,7 @@ msgstr ""
 msgid "This value is already taken"
 msgid "This value is already taken"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/BatchUpgrader.vue:183
+#: src/views/environment/BatchUpgrader.vue:182
 #, fuzzy
 #, fuzzy
 msgid ""
 msgid ""
 "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
@@ -3022,7 +3017,6 @@ msgid "Two-factor authentication required"
 msgstr "İki faktörlü kimlik doğrulama gerekiyor"
 msgstr "İki faktörlü kimlik doğrulama gerekiyor"
 
 
 #: src/views/certificate/CertificateList/certColumns.tsx:25
 #: src/views/certificate/CertificateList/certColumns.tsx:25
-#: src/views/config/configColumns.ts:16
 #: src/views/notification/notificationColumns.tsx:9
 #: src/views/notification/notificationColumns.tsx:9
 #, fuzzy
 #, fuzzy
 msgid "Type"
 msgid "Type"
@@ -3035,13 +3029,13 @@ msgstr "Güncellendi"
 
 
 #: src/views/certificate/ACMEUser.vue:88
 #: src/views/certificate/ACMEUser.vue:88
 #: src/views/certificate/DNSCredential.vue:27
 #: src/views/certificate/DNSCredential.vue:27
-#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:276
-#: src/views/environment/envColumns.tsx:119
-#: src/views/site/site_category/columns.ts:20
+#: src/views/config/configColumns.tsx:34 src/views/config/ConfigEditor.vue:276
+#: src/views/environment/envColumns.tsx:90
+#: src/views/site/site_category/columns.ts:22
 #: src/views/site/site_edit/RightSettings.vue:100
 #: src/views/site/site_edit/RightSettings.vue:100
-#: src/views/site/site_list/columns.tsx:67
+#: src/views/site/site_list/columns.tsx:69
 #: src/views/stream/components/RightSettings.vue:85
 #: src/views/stream/components/RightSettings.vue:85
-#: src/views/stream/StreamList.vue:41 src/views/user/userColumns.tsx:54
+#: src/views/stream/StreamList.vue:43 src/views/user/userColumns.tsx:54
 #, fuzzy
 #, fuzzy
 msgid "Updated at"
 msgid "Updated at"
 msgstr "Güncelleme"
 msgstr "Güncelleme"
@@ -3051,13 +3045,13 @@ msgstr "Güncelleme"
 msgid "Updated successfully"
 msgid "Updated successfully"
 msgstr "Başarıyla güncellendi"
 msgstr "Başarıyla güncellendi"
 
 
-#: src/routes/index.ts:297 src/views/environment/Environment.vue:53
+#: src/routes/index.ts:297 src/views/environment/Environment.vue:56
 #: src/views/system/Upgrade.vue:143 src/views/system/Upgrade.vue:226
 #: src/views/system/Upgrade.vue:143 src/views/system/Upgrade.vue:226
 #, fuzzy
 #, fuzzy
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr "Yükselt"
 msgstr "Yükselt"
 
 
-#: src/views/environment/BatchUpgrader.vue:138
+#: src/views/environment/BatchUpgrader.vue:137
 #, fuzzy
 #, fuzzy
 msgid "Upgraded Nginx UI on %{node} successfully 🎉"
 msgid "Upgraded Nginx UI on %{node} successfully 🎉"
 msgstr "Nginx kullanıcı arayüzü %{node} üzerinde başarıyla yükseltildi 🎉"
 msgstr "Nginx kullanıcı arayüzü %{node} üzerinde başarıyla yükseltildi 🎉"
@@ -3067,7 +3061,7 @@ msgstr "Nginx kullanıcı arayüzü %{node} üzerinde başarıyla yükseltildi 
 msgid "Upgraded successfully"
 msgid "Upgraded successfully"
 msgstr "Başarıyla yükseltildi"
 msgstr "Başarıyla yükseltildi"
 
 
-#: src/views/environment/BatchUpgrader.vue:89 src/views/system/Upgrade.vue:77
+#: src/views/environment/BatchUpgrader.vue:88 src/views/system/Upgrade.vue:77
 #, fuzzy
 #, fuzzy
 msgid "Upgrading Nginx UI, please wait..."
 msgid "Upgrading Nginx UI, please wait..."
 msgstr "Nginx kullanıcı arayüzü yükseltiliyor, lütfen bekleyin..."
 msgstr "Nginx kullanıcı arayüzü yükseltiliyor, lütfen bekleyin..."
@@ -3082,7 +3076,7 @@ msgstr "Yukarı Akış Adı"
 msgid "Uptime:"
 msgid "Uptime:"
 msgstr "Çalışma süresi:"
 msgstr "Çalışma süresi:"
 
 
-#: src/views/environment/envColumns.tsx:18
+#: src/views/environment/envColumns.tsx:19
 #, fuzzy
 #, fuzzy
 msgid "URL"
 msgid "URL"
 msgstr "URL"
 msgstr "URL"
@@ -3097,7 +3091,7 @@ msgstr "OTP kullanın"
 msgid "Use recovery code"
 msgid "Use recovery code"
 msgstr "Kurtarma kodunu kullanın"
 msgstr "Kurtarma kodunu kullanın"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:237
+#: src/components/ChatGPT/ChatGPT.vue:333
 #, fuzzy
 #, fuzzy
 msgid "User"
 msgid "User"
 msgstr "Kullanıcı"
 msgstr "Kullanıcı"
@@ -3121,14 +3115,14 @@ msgstr "Kullanıcı Adı"
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr "Kullanıcı adı (*)"
 msgstr "Kullanıcı adı (*)"
 
 
-#: src/views/certificate/ACMEUser.vue:123
+#: src/views/certificate/ACMEUser.vue:124
 #: src/views/certificate/CertificateList/certColumns.tsx:81
 #: src/views/certificate/CertificateList/certColumns.tsx:81
 #: src/views/site/cert/CertInfo.vue:24
 #: src/views/site/cert/CertInfo.vue:24
 #, fuzzy
 #, fuzzy
 msgid "Valid"
 msgid "Valid"
 msgstr "Geçerli"
 msgstr "Geçerli"
 
 
-#: src/views/environment/envColumns.tsx:29
+#: src/views/environment/envColumns.tsx:31
 #, fuzzy
 #, fuzzy
 msgid "Version"
 msgid "Version"
 msgstr "Versiyon"
 msgstr "Versiyon"
@@ -3253,6 +3247,19 @@ msgstr ""
 msgid "Your passkeys"
 msgid "Your passkeys"
 msgstr "Geçiş anahtarlarınız"
 msgstr "Geçiş anahtarlarınız"
 
 
+#~ msgid "Directory"
+#~ msgstr "Dizin"
+
+#~ msgid "Environment"
+#~ msgstr "Ortam"
+
+#~ msgid "File"
+#~ msgstr "Dosya"
+
+#, fuzzy
+#~ msgid "Server error"
+#~ msgstr "Server hatası"
+
 #~ msgid "Incorrect username or password"
 #~ msgid "Incorrect username or password"
 #~ msgstr "Kullanıcı adı veya şifre yanlış"
 #~ msgstr "Kullanıcı adı veya şifre yanlış"
 
 

+ 130 - 124
app/src/language/vi_VN/app.po

@@ -25,7 +25,7 @@ msgstr "Tác giả"
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr "Log truy cập"
 msgstr "Log truy cập"
 
 
-#: src/routes/index.ts:148 src/views/certificate/ACMEUser.vue:112
+#: src/routes/index.ts:148 src/views/certificate/ACMEUser.vue:113
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
 #, fuzzy
 #, fuzzy
 msgid "ACME User"
 msgid "ACME User"
@@ -34,12 +34,12 @@ msgstr "Người dùng"
 #: src/views/certificate/ACMEUser.vue:95
 #: src/views/certificate/ACMEUser.vue:95
 #: src/views/certificate/CertificateList/certColumns.tsx:97
 #: src/views/certificate/CertificateList/certColumns.tsx:97
 #: src/views/certificate/DNSCredential.vue:33
 #: src/views/certificate/DNSCredential.vue:33
-#: src/views/config/configColumns.ts:38
-#: src/views/environment/envColumns.tsx:125
-#: src/views/notification/notificationColumns.tsx:62
+#: src/views/config/configColumns.tsx:42
+#: src/views/environment/envColumns.tsx:97
+#: src/views/notification/notificationColumns.tsx:65
 #: src/views/preference/AuthSettings.vue:26
 #: src/views/preference/AuthSettings.vue:26
-#: src/views/site/site_category/columns.ts:26
-#: src/views/site/site_list/columns.tsx:74 src/views/stream/StreamList.vue:47
+#: src/views/site/site_category/columns.ts:29
+#: src/views/site/site_list/columns.tsx:76 src/views/stream/StreamList.vue:49
 #: src/views/user/userColumns.tsx:60
 #: src/views/user/userColumns.tsx:60
 msgid "Action"
 msgid "Action"
 msgstr "Hành động"
 msgstr "Hành động"
@@ -50,7 +50,7 @@ msgstr "Hành động"
 #: src/views/site/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/site/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/site/ngx_conf/NgxServer.vue:162
 #: src/views/site/ngx_conf/NgxServer.vue:162
 #: src/views/site/ngx_conf/NgxUpstream.vue:154
 #: src/views/site/ngx_conf/NgxUpstream.vue:154
-#: src/views/stream/StreamList.vue:117
+#: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr "Thêm"
 msgstr "Thêm"
 
 
@@ -78,12 +78,12 @@ msgstr "Thêm Location"
 msgid "Add Site"
 msgid "Add Site"
 msgstr "Thêm Website"
 msgstr "Thêm Website"
 
 
-#: src/views/stream/StreamList.vue:176
+#: src/views/stream/StreamList.vue:181
 #, fuzzy
 #, fuzzy
 msgid "Add Stream"
 msgid "Add Stream"
 msgstr "Thêm Website"
 msgstr "Thêm Website"
 
 
-#: src/views/stream/StreamList.vue:109
+#: src/views/stream/StreamList.vue:113
 #, fuzzy
 #, fuzzy
 msgid "Added successfully"
 msgid "Added successfully"
 msgstr "Cập nhật thành công"
 msgstr "Cập nhật thành công"
@@ -157,12 +157,12 @@ msgid "Are you sure you want to apply to all selected?"
 msgstr "Bạn chắc chắn muốn xóa nó "
 msgstr "Bạn chắc chắn muốn xóa nó "
 
 
 #: src/components/Notification/Notification.vue:130
 #: src/components/Notification/Notification.vue:130
-#: src/views/notification/Notification.vue:38
+#: src/views/notification/Notification.vue:39
 #, fuzzy
 #, fuzzy
 msgid "Are you sure you want to clear all notifications?"
 msgid "Are you sure you want to clear all notifications?"
 msgstr "Bạn có chắc chắn muốn xóa tất cả thông báo không ?"
 msgstr "Bạn có chắc chắn muốn xóa tất cả thông báo không ?"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:279
+#: src/components/ChatGPT/ChatGPT.vue:376
 #, fuzzy
 #, fuzzy
 msgid "Are you sure you want to clear the record of chat?"
 msgid "Are you sure you want to clear the record of chat?"
 msgstr "Bạn có chắc chắn muốn xóa lịch sử trò chuyện không ?"
 msgstr "Bạn có chắc chắn muốn xóa lịch sử trò chuyện không ?"
@@ -177,8 +177,8 @@ msgstr "Bạn chắc chắn muốn xóa nó "
 msgid "Are you sure you want to delete this item?"
 msgid "Are you sure you want to delete this item?"
 msgstr "Bạn chắc chắn muốn xóa nó "
 msgstr "Bạn chắc chắn muốn xóa nó "
 
 
-#: src/views/site/site_list/SiteList.vue:144
-#: src/views/stream/StreamList.vue:160
+#: src/views/site/site_list/SiteList.vue:145
+#: src/views/stream/StreamList.vue:165
 #, fuzzy
 #, fuzzy
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr "Bạn chắc chắn muốn xóa nó "
 msgstr "Bạn chắc chắn muốn xóa nó "
@@ -202,11 +202,11 @@ msgstr "Bạn chắc chắn muốn xoá directive này ?"
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "Bạn chắc chắn muốn xoá location này ?"
 msgstr "Bạn chắc chắn muốn xoá location này ?"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:223
+#: src/components/ChatGPT/ChatGPT.vue:318
 msgid "Ask ChatGPT for Help"
 msgid "Ask ChatGPT for Help"
 msgstr "Hỏi ChatGPT"
 msgstr "Hỏi ChatGPT"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:237
+#: src/components/ChatGPT/ChatGPT.vue:333
 msgid "Assistant"
 msgid "Assistant"
 msgstr "Trợ lý"
 msgstr "Trợ lý"
 
 
@@ -250,7 +250,7 @@ msgstr "Đã bật tự động gia hạn SSL cho %{name}"
 
 
 #: src/views/certificate/CertificateEditor.vue:255
 #: src/views/certificate/CertificateEditor.vue:255
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:106
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:106
-#: src/views/config/ConfigList.vue:179 src/views/nginx_log/NginxLog.vue:173
+#: src/views/config/ConfigList.vue:180 src/views/nginx_log/NginxLog.vue:173
 #: src/views/site/site_edit/SiteEdit.vue:264
 #: src/views/site/site_edit/SiteEdit.vue:264
 #: src/views/stream/StreamEdit.vue:245
 #: src/views/stream/StreamEdit.vue:245
 msgid "Back"
 msgid "Back"
@@ -305,7 +305,7 @@ msgstr "Hành động"
 msgid "Batch Modify"
 msgid "Batch Modify"
 msgstr "Sửa đổi cấu hình"
 msgstr "Sửa đổi cấu hình"
 
 
-#: src/views/environment/BatchUpgrader.vue:153
+#: src/views/environment/BatchUpgrader.vue:152
 #, fuzzy
 #, fuzzy
 msgid "Batch Upgrade"
 msgid "Batch Upgrade"
 msgstr "Cập nhật"
 msgstr "Cập nhật"
@@ -334,9 +334,9 @@ msgstr ""
 msgid "Can't scan? Use text key binding"
 msgid "Can't scan? Use text key binding"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:260
+#: src/components/ChatGPT/ChatGPT.vue:356
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:180
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:187
 #: src/components/StdDesign/StdDetail/StdDetail.vue:101
 #: src/components/StdDesign/StdDetail/StdDetail.vue:101
 #: src/views/preference/components/Passkey.vue:141
 #: src/views/preference/components/Passkey.vue:141
 #: src/views/site/cert/components/ObtainCert.vue:140
 #: src/views/site/cert/components/ObtainCert.vue:140
@@ -349,8 +349,17 @@ msgstr ""
 msgid "Cancel"
 msgid "Cancel"
 msgstr "Huỷ"
 msgstr "Huỷ"
 
 
+#: src/constants/errors/user.ts:10
+#, fuzzy
+msgid "Cannot change initial user password in demo mode"
+msgstr "Cấm thay đổi mật khẩu root trong demo"
+
+#: src/constants/errors/user.ts:9
+msgid "Cannot remove initial user"
+msgstr ""
+
 #: src/views/site/site_edit/RightSettings.vue:91
 #: src/views/site/site_edit/RightSettings.vue:91
-#: src/views/site/site_list/columns.tsx:23
+#: src/views/site/site_list/columns.tsx:25
 msgid "Category"
 msgid "Category"
 msgstr ""
 msgstr ""
 
 
@@ -419,7 +428,7 @@ msgstr[1] "Thay đổi chứng chỉ"
 msgid "Changed Path"
 msgid "Changed Path"
 msgstr "Thay đổi chứng chỉ"
 msgstr "Thay đổi chứng chỉ"
 
 
-#: src/views/environment/BatchUpgrader.vue:160 src/views/system/Upgrade.vue:188
+#: src/views/environment/BatchUpgrader.vue:159 src/views/system/Upgrade.vue:188
 msgid "Channel"
 msgid "Channel"
 msgstr "Kênh"
 msgstr "Kênh"
 
 
@@ -455,9 +464,9 @@ msgstr ""
 msgid "Cleaning environment variables"
 msgid "Cleaning environment variables"
 msgstr "Xoá các biến môi trường"
 msgstr "Xoá các biến môi trường"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:283
+#: src/components/ChatGPT/ChatGPT.vue:380
 #: src/components/Notification/Notification.vue:135
 #: src/components/Notification/Notification.vue:135
-#: src/views/notification/Notification.vue:43
+#: src/views/notification/Notification.vue:44
 msgid "Clear"
 msgid "Clear"
 msgstr "Xoá"
 msgstr "Xoá"
 
 
@@ -554,9 +563,9 @@ msgstr "Ngày tạo"
 msgid "Create Folder"
 msgid "Create Folder"
 msgstr "Tạo thêm"
 msgstr "Tạo thêm"
 
 
-#: src/views/notification/notificationColumns.tsx:56
+#: src/views/notification/notificationColumns.tsx:58
 #: src/views/preference/components/Passkey.vue:95
 #: src/views/preference/components/Passkey.vue:95
-#: src/views/site/site_category/columns.ts:14 src/views/user/userColumns.tsx:48
+#: src/views/site/site_category/columns.ts:15 src/views/user/userColumns.tsx:48
 msgid "Created at"
 msgid "Created at"
 msgstr "Ngày tạo"
 msgstr "Ngày tạo"
 
 
@@ -617,8 +626,8 @@ msgstr ""
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/views/site/ngx_conf/NgxServer.vue:110
 #: src/views/site/ngx_conf/NgxServer.vue:110
 #: src/views/site/ngx_conf/NgxUpstream.vue:128
 #: src/views/site/ngx_conf/NgxUpstream.vue:128
-#: src/views/site/site_list/SiteList.vue:153
-#: src/views/stream/StreamList.vue:169
+#: src/views/site/site_list/SiteList.vue:154
+#: src/views/stream/StreamList.vue:174
 msgid "Delete"
 msgid "Delete"
 msgstr "Xoá"
 msgstr "Xoá"
 
 
@@ -641,7 +650,7 @@ msgstr "Gia hạn chứng chỉ SSL thành công"
 msgid "Delete site: %{site_name}"
 msgid "Delete site: %{site_name}"
 msgstr "Xoá trang web: %{site_name}"
 msgstr "Xoá trang web: %{site_name}"
 
 
-#: src/views/stream/StreamList.vue:78
+#: src/views/stream/StreamList.vue:82
 #, fuzzy
 #, fuzzy
 msgid "Delete stream: %{stream_name}"
 msgid "Delete stream: %{stream_name}"
 msgstr "Xoá trang web: %{site_name}"
 msgstr "Xoá trang web: %{site_name}"
@@ -679,7 +688,7 @@ msgstr "Mô tả"
 msgid "Destination file already exists"
 msgid "Destination file already exists"
 msgstr ""
 msgstr ""
 
 
-#: src/views/notification/notificationColumns.tsx:51
+#: src/views/notification/notificationColumns.tsx:52
 msgid "Details"
 msgid "Details"
 msgstr "Chi tiết"
 msgstr "Chi tiết"
 
 
@@ -707,13 +716,8 @@ msgstr ""
 msgid "Directives"
 msgid "Directives"
 msgstr "Directives"
 msgstr "Directives"
 
 
-#: src/views/config/configColumns.ts:22
-#, fuzzy
-msgid "Directory"
-msgstr "Thư mục"
-
-#: src/views/site/site_list/SiteList.vue:124
-#: src/views/stream/StreamList.vue:140
+#: src/views/site/site_list/SiteList.vue:125
+#: src/views/stream/StreamList.vue:145
 #, fuzzy
 #, fuzzy
 msgid "Disable"
 msgid "Disable"
 msgstr "Tắt"
 msgstr "Tắt"
@@ -742,19 +746,19 @@ msgstr "Đã bật %{conf_name} trên %{node_name}"
 msgid "Disable Site %{site} on %{node} successfully"
 msgid "Disable Site %{site} on %{node} successfully"
 msgstr "Đã bật %{conf_name} trên %{node_name}"
 msgstr "Đã bật %{conf_name} trên %{node_name}"
 
 
-#: src/views/environment/envColumns.tsx:109
-#: src/views/environment/envColumns.tsx:92
+#: src/views/environment/envColumns.tsx:61
+#: src/views/environment/envColumns.tsx:79
 #: src/views/site/site_edit/SiteEdit.vue:190
 #: src/views/site/site_edit/SiteEdit.vue:190
-#: src/views/site/site_list/columns.tsx:51
-#: src/views/site/site_list/columns.tsx:60 src/views/stream/StreamEdit.vue:175
-#: src/views/stream/StreamList.vue:33 src/views/user/userColumns.tsx:41
+#: src/views/site/site_list/columns.tsx:53
+#: src/views/site/site_list/columns.tsx:62 src/views/stream/StreamEdit.vue:175
+#: src/views/stream/StreamList.vue:34 src/views/user/userColumns.tsx:41
 msgid "Disabled"
 msgid "Disabled"
 msgstr "Đã tắt"
 msgstr "Đã tắt"
 
 
 #: src/views/site/site_edit/RightSettings.vue:42
 #: src/views/site/site_edit/RightSettings.vue:42
 #: src/views/site/site_list/SiteList.vue:56
 #: src/views/site/site_list/SiteList.vue:56
 #: src/views/stream/components/RightSettings.vue:38
 #: src/views/stream/components/RightSettings.vue:38
-#: src/views/stream/StreamList.vue:67
+#: src/views/stream/StreamList.vue:71
 msgid "Disabled successfully"
 msgid "Disabled successfully"
 msgstr "Đã tắt thành công"
 msgstr "Đã tắt thành công"
 
 
@@ -855,7 +859,7 @@ msgstr "Đã có lỗi xảy ra khi tải về phiên bản mới nhất"
 msgid "Downloading latest release"
 msgid "Downloading latest release"
 msgstr "Đang tải phiên bản mới nhất"
 msgstr "Đang tải phiên bản mới nhất"
 
 
-#: src/views/environment/BatchUpgrader.vue:189 src/views/system/Upgrade.vue:215
+#: src/views/environment/BatchUpgrader.vue:188 src/views/system/Upgrade.vue:215
 msgid "Dry run mode enabled"
 msgid "Dry run mode enabled"
 msgstr "Đã bật chế độ Dry run"
 msgstr "Đã bật chế độ Dry run"
 
 
@@ -866,9 +870,9 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #: src/views/site/site_list/SiteDuplicate.vue:72
 #: src/views/site/site_list/SiteDuplicate.vue:72
-#: src/views/site/site_list/SiteList.vue:139
+#: src/views/site/site_list/SiteList.vue:140
 #: src/views/stream/components/StreamDuplicate.vue:121
 #: src/views/stream/components/StreamDuplicate.vue:121
-#: src/views/stream/StreamList.vue:155
+#: src/views/stream/StreamList.vue:160
 msgid "Duplicate"
 msgid "Duplicate"
 msgstr "Nhân bản"
 msgstr "Nhân bản"
 
 
@@ -925,9 +929,9 @@ msgstr "Email (*)"
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "Email (*)"
 msgstr "Email (*)"
 
 
-#: src/views/site/site_list/SiteList.vue:132
+#: src/views/site/site_list/SiteList.vue:133
 #: src/views/stream/components/Deploy.vue:80
 #: src/views/stream/components/Deploy.vue:80
-#: src/views/stream/StreamList.vue:148
+#: src/views/stream/StreamList.vue:153
 #, fuzzy
 #, fuzzy
 msgid "Enable"
 msgid "Enable"
 msgstr "Đã bật"
 msgstr "Đã bật"
@@ -987,15 +991,15 @@ msgstr "Bật TLS"
 msgid "Enable TOTP"
 msgid "Enable TOTP"
 msgstr "Bật TLS"
 msgstr "Bật TLS"
 
 
-#: src/views/environment/envColumns.tsx:100
-#: src/views/environment/envColumns.tsx:106
+#: src/views/environment/envColumns.tsx:70
+#: src/views/environment/envColumns.tsx:76
 #: src/views/preference/LogrotateSettings.vue:19
 #: src/views/preference/LogrotateSettings.vue:19
 #: src/views/site/site_edit/RightSettings.vue:82
 #: src/views/site/site_edit/RightSettings.vue:82
 #: src/views/site/site_edit/SiteEdit.vue:184
 #: src/views/site/site_edit/SiteEdit.vue:184
-#: src/views/site/site_list/columns.tsx:47
-#: src/views/site/site_list/columns.tsx:59
+#: src/views/site/site_list/columns.tsx:49
+#: src/views/site/site_list/columns.tsx:61
 #: src/views/stream/components/RightSettings.vue:76
 #: src/views/stream/components/RightSettings.vue:76
-#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:29
+#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:30
 #: src/views/user/userColumns.tsx:38
 #: src/views/user/userColumns.tsx:38
 msgid "Enabled"
 msgid "Enabled"
 msgstr "Đã bật"
 msgstr "Đã bật"
@@ -1004,7 +1008,7 @@ msgstr "Đã bật"
 #: src/views/site/site_list/SiteList.vue:46 src/views/site/SiteAdd.vue:40
 #: src/views/site/site_list/SiteList.vue:46 src/views/site/SiteAdd.vue:40
 #: src/views/stream/components/RightSettings.vue:29
 #: src/views/stream/components/RightSettings.vue:29
 #: src/views/stream/components/StreamDuplicate.vue:93
 #: src/views/stream/components/StreamDuplicate.vue:93
-#: src/views/stream/StreamList.vue:57
+#: src/views/stream/StreamList.vue:61
 msgid "Enabled successfully"
 msgid "Enabled successfully"
 msgstr "Đã bật"
 msgstr "Đã bật"
 
 
@@ -1012,16 +1016,13 @@ msgstr "Đã bật"
 msgid "Encrypt website with Let's Encrypt"
 msgid "Encrypt website with Let's Encrypt"
 msgstr "Bảo mật trang web với Let's Encrypt"
 msgstr "Bảo mật trang web với Let's Encrypt"
 
 
-#: src/routes/index.ts:234 src/views/environment/Environment.vue:32
-msgid "Environment"
-msgstr "Environment"
-
 #: src/language/constants.ts:21
 #: src/language/constants.ts:21
 #, fuzzy
 #, fuzzy
 msgid "Environment variables cleaned"
 msgid "Environment variables cleaned"
 msgstr "Đặt biến môi trường"
 msgstr "Đặt biến môi trường"
 
 
-#: src/views/dashboard/Environments.vue:83
+#: src/routes/index.ts:234 src/views/dashboard/Environments.vue:83
+#: src/views/environment/Environment.vue:33
 #, fuzzy
 #, fuzzy
 msgid "Environments"
 msgid "Environments"
 msgstr "Environments"
 msgstr "Environments"
@@ -1066,14 +1067,14 @@ msgstr "Không thể bật %{msg}"
 #: src/views/site/site_edit/RightSettings.vue:45
 #: src/views/site/site_edit/RightSettings.vue:45
 #: src/views/site/site_list/SiteList.vue:60
 #: src/views/site/site_list/SiteList.vue:60
 #: src/views/stream/components/RightSettings.vue:41
 #: src/views/stream/components/RightSettings.vue:41
-#: src/views/stream/StreamList.vue:71
+#: src/views/stream/StreamList.vue:75
 msgid "Failed to disable %{msg}"
 msgid "Failed to disable %{msg}"
 msgstr "Không thể tắt %{msg}"
 msgstr "Không thể tắt %{msg}"
 
 
 #: src/views/site/site_edit/RightSettings.vue:36
 #: src/views/site/site_edit/RightSettings.vue:36
 #: src/views/site/site_list/SiteList.vue:50
 #: src/views/site/site_list/SiteList.vue:50
 #: src/views/stream/components/RightSettings.vue:32
 #: src/views/stream/components/RightSettings.vue:32
-#: src/views/stream/StreamList.vue:61
+#: src/views/stream/StreamList.vue:65
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "Không thể bật %{msg}"
 msgstr "Không thể bật %{msg}"
 
 
@@ -1094,10 +1095,6 @@ msgstr ""
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgstr "Không lưu được, đã phát hiện thấy (các) lỗi cú pháp trong cấu hình."
 msgstr "Không lưu được, đã phát hiện thấy (các) lỗi cú pháp trong cấu hình."
 
 
-#: src/views/config/configColumns.ts:24
-msgid "File"
-msgstr "Tệp tin"
-
 #: src/language/constants.ts:31
 #: src/language/constants.ts:31
 msgid "File exists"
 msgid "File exists"
 msgstr "Tệp tin đã tồn tại"
 msgstr "Tệp tin đã tồn tại"
@@ -1161,7 +1158,7 @@ msgstr "Tạo"
 msgid "Generating private key for registering account"
 msgid "Generating private key for registering account"
 msgstr "Tạo khóa riêng để đăng ký tài khoản"
 msgstr "Tạo khóa riêng để đăng ký tài khoản"
 
 
-#: src/views/environment/BatchUpgrader.vue:178 src/views/system/Upgrade.vue:169
+#: src/views/environment/BatchUpgrader.vue:177 src/views/system/Upgrade.vue:169
 #, fuzzy
 #, fuzzy
 msgid "Get release information error"
 msgid "Get release information error"
 msgstr "Nhận lỗi thông tin phát hành"
 msgstr "Nhận lỗi thông tin phát hành"
@@ -1273,7 +1270,7 @@ msgstr "Cài đặt thành công"
 msgid "Interval"
 msgid "Interval"
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:128
+#: src/views/certificate/ACMEUser.vue:129
 #, fuzzy
 #, fuzzy
 msgid "Invalid"
 msgid "Invalid"
 msgstr "Hợp lệ"
 msgstr "Hợp lệ"
@@ -1390,7 +1387,7 @@ msgstr ""
 msgid "Load Average:"
 msgid "Load Average:"
 msgstr "Tải trung bình:"
 msgstr "Tải trung bình:"
 
 
-#: src/views/environment/Environment.vue:37
+#: src/views/environment/Environment.vue:39
 msgid "Load from settings"
 msgid "Load from settings"
 msgstr ""
 msgstr ""
 
 
@@ -1462,12 +1459,12 @@ msgstr "Quản lý cấu hình"
 msgid "Manage Sites"
 msgid "Manage Sites"
 msgstr "Quản lý Website"
 msgstr "Quản lý Website"
 
 
-#: src/routes/index.ts:89 src/views/stream/StreamList.vue:115
+#: src/routes/index.ts:89 src/views/stream/StreamList.vue:119
 #, fuzzy
 #, fuzzy
 msgid "Manage Streams"
 msgid "Manage Streams"
 msgstr "Quản lý Website"
 msgstr "Quản lý Website"
 
 
-#: src/routes/index.ts:257 src/views/user/User.vue:9
+#: src/routes/index.ts:257 src/views/user/User.vue:10
 msgid "Manage Users"
 msgid "Manage Users"
 msgstr "Người dùng"
 msgstr "Người dùng"
 
 
@@ -1497,10 +1494,10 @@ msgstr ""
 msgid "Model"
 msgid "Model"
 msgstr "Run Mode"
 msgstr "Run Mode"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:256
+#: src/components/ChatGPT/ChatGPT.vue:352
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:151
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:151
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:498
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:498
-#: src/views/config/ConfigList.vue:158
+#: src/views/config/ConfigList.vue:159
 #, fuzzy
 #, fuzzy
 msgid "Modify"
 msgid "Modify"
 msgstr "Sửa"
 msgstr "Sửa"
@@ -1528,17 +1525,18 @@ msgstr "Single Directive"
 #: src/views/certificate/CertificateEditor.vue:160
 #: src/views/certificate/CertificateEditor.vue:160
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/certificate/DNSCredential.vue:11
-#: src/views/config/components/Mkdir.vue:64 src/views/config/configColumns.ts:8
-#: src/views/config/ConfigEditor.vue:256 src/views/environment/envColumns.tsx:9
+#: src/views/config/components/Mkdir.vue:64
+#: src/views/config/configColumns.tsx:7 src/views/config/ConfigEditor.vue:256
+#: src/views/environment/envColumns.tsx:9
 #: src/views/preference/components/AddPasskey.vue:75
 #: src/views/preference/components/AddPasskey.vue:75
 #: src/views/site/ngx_conf/NgxUpstream.vue:177
 #: src/views/site/ngx_conf/NgxUpstream.vue:177
 #: src/views/site/site_category/columns.ts:7
 #: src/views/site/site_category/columns.ts:7
 #: src/views/site/site_edit/RightSettings.vue:88
 #: src/views/site/site_edit/RightSettings.vue:88
-#: src/views/site/site_list/columns.tsx:13
+#: src/views/site/site_list/columns.tsx:15
 #: src/views/site/site_list/SiteDuplicate.vue:79
 #: src/views/site/site_list/SiteDuplicate.vue:79
 #: src/views/stream/components/RightSettings.vue:82
 #: src/views/stream/components/RightSettings.vue:82
 #: src/views/stream/components/StreamDuplicate.vue:128
 #: src/views/stream/components/StreamDuplicate.vue:128
-#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:181
+#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:186
 msgid "Name"
 msgid "Name"
 msgstr "Tên"
 msgstr "Tên"
 
 
@@ -1664,20 +1662,20 @@ msgstr ""
 msgid "Nginx restarted successfully"
 msgid "Nginx restarted successfully"
 msgstr "Restart Nginx thành công"
 msgstr "Restart Nginx thành công"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:277
+#: src/components/ChatGPT/ChatGPT.vue:374
 #: src/components/Notification/Notification.vue:128
 #: src/components/Notification/Notification.vue:128
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:510
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:510
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:524
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:524
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:538
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:538
-#: src/views/notification/Notification.vue:36
+#: src/views/notification/Notification.vue:37
 #: src/views/preference/AuthSettings.vue:136
 #: src/views/preference/AuthSettings.vue:136
 #: src/views/preference/CertSettings.vue:70
 #: src/views/preference/CertSettings.vue:70
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97
 #: src/views/site/ngx_conf/LocationEditor.vue:90
 #: src/views/site/ngx_conf/LocationEditor.vue:90
-#: src/views/site/site_list/SiteList.vue:142
-#: src/views/stream/StreamList.vue:158
+#: src/views/site/site_list/SiteList.vue:143
+#: src/views/stream/StreamList.vue:163
 msgid "No"
 msgid "No"
 msgstr "Không"
 msgstr "Không"
 
 
@@ -1713,7 +1711,7 @@ msgid ""
 "certificates, please synchronize them to the remote nodes in advance."
 "certificates, please synchronize them to the remote nodes in advance."
 msgstr ""
 msgstr ""
 
 
-#: src/views/notification/Notification.vue:27
+#: src/views/notification/Notification.vue:28
 #, fuzzy
 #, fuzzy
 msgid "Notification"
 msgid "Notification"
 msgstr "Thông báo"
 msgstr "Thông báo"
@@ -1744,7 +1742,7 @@ msgstr ""
 
 
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/views/dashboard/Environments.vue:107
 #: src/views/dashboard/Environments.vue:107
-#: src/views/environment/envColumns.tsx:87
+#: src/views/environment/envColumns.tsx:56
 msgid "Offline"
 msgid "Offline"
 msgstr "Ngoại tuyến"
 msgstr "Ngoại tuyến"
 
 
@@ -1752,23 +1750,23 @@ msgstr "Ngoại tuyến"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:511
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:511
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:525
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:525
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:539
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:539
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:181
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:188
 msgid "Ok"
 msgid "Ok"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:278
+#: src/components/ChatGPT/ChatGPT.vue:375
 #: src/components/Notification/Notification.vue:129
 #: src/components/Notification/Notification.vue:129
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:95
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:95
-#: src/views/notification/Notification.vue:37
+#: src/views/notification/Notification.vue:38
 #: src/views/site/cert/components/ObtainCert.vue:139
 #: src/views/site/cert/components/ObtainCert.vue:139
 #: src/views/site/ngx_conf/NgxConfigEditor.vue:50
 #: src/views/site/ngx_conf/NgxConfigEditor.vue:50
 #: src/views/site/ngx_conf/NgxServer.vue:79
 #: src/views/site/ngx_conf/NgxServer.vue:79
 #: src/views/site/ngx_conf/NgxUpstream.vue:33
 #: src/views/site/ngx_conf/NgxUpstream.vue:33
 #: src/views/site/site_edit/RightSettings.vue:54
 #: src/views/site/site_edit/RightSettings.vue:54
-#: src/views/site/site_list/SiteList.vue:143
+#: src/views/site/site_list/SiteList.vue:144
 #: src/views/stream/components/Deploy.vue:19
 #: src/views/stream/components/Deploy.vue:19
 #: src/views/stream/components/RightSettings.vue:50
 #: src/views/stream/components/RightSettings.vue:50
-#: src/views/stream/StreamList.vue:159
+#: src/views/stream/StreamList.vue:164
 msgid "OK"
 msgid "OK"
 msgstr ""
 msgstr ""
 
 
@@ -1779,7 +1777,7 @@ msgstr "Sau khi quá trình xác minh hoàn tất, bản ghi sẽ bị xóa."
 #: src/components/NodeSelector/NodeSelector.vue:83
 #: src/components/NodeSelector/NodeSelector.vue:83
 #: src/components/NodeSelector/NodeSelector.vue:97
 #: src/components/NodeSelector/NodeSelector.vue:97
 #: src/views/dashboard/Environments.vue:100
 #: src/views/dashboard/Environments.vue:100
-#: src/views/environment/envColumns.tsx:83
+#: src/views/environment/envColumns.tsx:52
 msgid "Online"
 msgid "Online"
 msgstr "Trực tuyến"
 msgstr "Trực tuyến"
 
 
@@ -1864,7 +1862,7 @@ msgstr ""
 msgid "Payload resource is nil"
 msgid "Payload resource is nil"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/BatchUpgrader.vue:233
+#: src/views/environment/BatchUpgrader.vue:232
 msgid "Perform"
 msgid "Perform"
 msgstr ""
 msgstr ""
 
 
@@ -1952,7 +1950,7 @@ msgid ""
 "Please note that the unit of time configurations below are all in seconds."
 "Please note that the unit of time configurations below are all in seconds."
 msgstr "Lưu ý đơn vị cấu hình thời gian bên dưới được tính bằng giây."
 msgstr "Lưu ý đơn vị cấu hình thời gian bên dưới được tính bằng giây."
 
 
-#: src/views/environment/Environment.vue:45
+#: src/views/environment/Environment.vue:48
 msgid "Please select at least one node to upgrade"
 msgid "Please select at least one node to upgrade"
 msgstr ""
 msgstr ""
 
 
@@ -1971,8 +1969,8 @@ msgstr ""
 msgid "Please upgrade the remote Nginx UI to the latest version"
 msgid "Please upgrade the remote Nginx UI to the latest version"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 msgstr "Nhân bản %{conf_name} thành %{node_name} thành công"
 
 
-#: src/views/environment/BatchUpgrader.vue:168
-#: src/views/environment/BatchUpgrader.vue:221 src/views/system/Upgrade.vue:194
+#: src/views/environment/BatchUpgrader.vue:167
+#: src/views/environment/BatchUpgrader.vue:220 src/views/system/Upgrade.vue:194
 #: src/views/system/Upgrade.vue:245
 #: src/views/system/Upgrade.vue:245
 msgid "Pre-release"
 msgid "Pre-release"
 msgstr ""
 msgstr ""
@@ -2051,11 +2049,11 @@ msgstr ""
 msgid "Recursive Nameservers"
 msgid "Recursive Nameservers"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:290
+#: src/components/ChatGPT/ChatGPT.vue:387
 msgid "Regenerate response"
 msgid "Regenerate response"
 msgstr "Tạo lại câu trả lời"
 msgstr "Tạo lại câu trả lời"
 
 
-#: src/views/certificate/ACMEUser.vue:136
+#: src/views/certificate/ACMEUser.vue:137
 #, fuzzy
 #, fuzzy
 msgid "Register"
 msgid "Register"
 msgstr "Đăng ký người dùng"
 msgstr "Đăng ký người dùng"
@@ -2066,7 +2064,7 @@ msgid ""
 "proxy."
 "proxy."
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:105
+#: src/views/certificate/ACMEUser.vue:106
 #, fuzzy
 #, fuzzy
 msgid "Register failed"
 msgid "Register failed"
 msgstr "Đăng ký người dùng"
 msgstr "Đăng ký người dùng"
@@ -2081,7 +2079,7 @@ msgstr "Đăng ký người dùng"
 msgid "Register passkey successfully"
 msgid "Register passkey successfully"
 msgstr "Gia hạn chứng chỉ SSL"
 msgstr "Gia hạn chứng chỉ SSL"
 
 
-#: src/views/certificate/ACMEUser.vue:103
+#: src/views/certificate/ACMEUser.vue:104
 #, fuzzy
 #, fuzzy
 msgid "Register successfully"
 msgid "Register successfully"
 msgstr "Gia hạn chứng chỉ SSL"
 msgstr "Gia hạn chứng chỉ SSL"
@@ -2090,7 +2088,7 @@ msgstr "Gia hạn chứng chỉ SSL"
 msgid "Registering user"
 msgid "Registering user"
 msgstr "Đăng ký người dùng"
 msgstr "Đăng ký người dùng"
 
 
-#: src/views/certificate/ACMEUser.vue:119
+#: src/views/certificate/ACMEUser.vue:120
 #, fuzzy
 #, fuzzy
 msgid "Registration Status"
 msgid "Registration Status"
 msgstr "Đăng ký người dùng"
 msgstr "Đăng ký người dùng"
@@ -2104,7 +2102,7 @@ msgstr "Cài lại"
 msgid "Release Note"
 msgid "Release Note"
 msgstr "Ghi chú phát hành"
 msgstr "Ghi chú phát hành"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:266
+#: src/components/ChatGPT/ChatGPT.vue:362
 #: src/components/NginxControl/NginxControl.vue:99
 #: src/components/NginxControl/NginxControl.vue:99
 msgid "Reload"
 msgid "Reload"
 msgstr "Tải lại"
 msgstr "Tải lại"
@@ -2144,7 +2142,7 @@ msgstr "Xoá thành công"
 
 
 #: src/views/config/components/ConfigName.vue:48
 #: src/views/config/components/ConfigName.vue:48
 #: src/views/config/components/Rename.vue:54
 #: src/views/config/components/Rename.vue:54
-#: src/views/config/ConfigList.vue:165
+#: src/views/config/ConfigList.vue:166
 #: src/views/site/ngx_conf/NgxUpstream.vue:125
 #: src/views/site/ngx_conf/NgxUpstream.vue:125
 #: src/views/site/site_edit/components/ConfigName.vue:44
 #: src/views/site/site_edit/components/ConfigName.vue:44
 #, fuzzy
 #, fuzzy
@@ -2267,7 +2265,7 @@ msgstr "Run Mode"
 msgid "Running"
 msgid "Running"
 msgstr "Running"
 msgstr "Running"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:259
+#: src/components/ChatGPT/ChatGPT.vue:355
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:64
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:64
 #: src/components/StdDesign/StdDetail/StdDetail.vue:93
 #: src/components/StdDesign/StdDetail/StdDetail.vue:93
 #: src/views/certificate/CertificateEditor.vue:262
 #: src/views/certificate/CertificateEditor.vue:262
@@ -2339,7 +2337,7 @@ msgstr ""
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:182
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:189
 msgid "Selector"
 msgid "Selector"
 msgstr "Bộ chọn"
 msgstr "Bộ chọn"
 
 
@@ -2352,10 +2350,6 @@ msgstr ""
 msgid "Send"
 msgid "Send"
 msgstr "Gửi"
 msgstr "Gửi"
 
 
-#: src/lib/http/index.ts:128
-msgid "Server error"
-msgstr "Lỗi máy chủ"
-
 #: src/views/dashboard/ServerAnalytic.vue:179
 #: src/views/dashboard/ServerAnalytic.vue:179
 msgid "Server Info"
 msgid "Server Info"
 msgstr "Thông tin máy chủ"
 msgstr "Thông tin máy chủ"
@@ -2372,7 +2366,7 @@ msgstr "Tham số server_name là bắt buộc"
 msgid "ServerIdx out of range"
 msgid "ServerIdx out of range"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/user.ts:9
+#: src/constants/errors/user.ts:11
 #, fuzzy
 #, fuzzy
 msgid "Session not found"
 msgid "Session not found"
 msgstr "Không tìm thấy tệp tin"
 msgstr "Không tìm thấy tệp tin"
@@ -2476,8 +2470,8 @@ msgstr ""
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/BatchUpgrader.vue:165
-#: src/views/environment/BatchUpgrader.vue:215 src/views/system/Upgrade.vue:191
+#: src/views/environment/BatchUpgrader.vue:164
+#: src/views/environment/BatchUpgrader.vue:214 src/views/system/Upgrade.vue:191
 #: src/views/system/Upgrade.vue:239
 #: src/views/system/Upgrade.vue:239
 #, fuzzy
 #, fuzzy
 msgid "Stable"
 msgid "Stable"
@@ -2485,8 +2479,8 @@ msgstr "Ổn định"
 
 
 #: src/views/certificate/ACMEUser.vue:65
 #: src/views/certificate/ACMEUser.vue:65
 #: src/views/certificate/CertificateList/certColumns.tsx:68
 #: src/views/certificate/CertificateList/certColumns.tsx:68
-#: src/views/environment/envColumns.tsx:75
-#: src/views/site/site_list/columns.tsx:40 src/views/stream/StreamList.vue:22
+#: src/views/environment/envColumns.tsx:44
+#: src/views/site/site_list/columns.tsx:42 src/views/stream/StreamList.vue:23
 msgid "Status"
 msgid "Status"
 msgstr "Trạng thái"
 msgstr "Trạng thái"
 
 
@@ -2594,7 +2588,7 @@ msgstr "Gia hạn chứng chỉ SSL thất bại"
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 msgstr "Gia hạn chứng chỉ SSL thành công"
 
 
-#: src/views/site/site_category/SiteCategory.vue:16
+#: src/views/site/site_category/SiteCategory.vue:17
 msgid "Sync Nodes"
 msgid "Sync Nodes"
 msgstr ""
 msgstr ""
 
 
@@ -2768,7 +2762,7 @@ msgstr ""
 msgid "This value is already taken"
 msgid "This value is already taken"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/BatchUpgrader.vue:183
+#: src/views/environment/BatchUpgrader.vue:182
 msgid ""
 msgid ""
 "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgstr ""
 msgstr ""
@@ -2848,7 +2842,6 @@ msgid "Two-factor authentication required"
 msgstr ""
 msgstr ""
 
 
 #: src/views/certificate/CertificateList/certColumns.tsx:25
 #: src/views/certificate/CertificateList/certColumns.tsx:25
-#: src/views/config/configColumns.ts:16
 #: src/views/notification/notificationColumns.tsx:9
 #: src/views/notification/notificationColumns.tsx:9
 msgid "Type"
 msgid "Type"
 msgstr "Loại"
 msgstr "Loại"
@@ -2860,13 +2853,13 @@ msgstr "Cập nhật thành công"
 
 
 #: src/views/certificate/ACMEUser.vue:88
 #: src/views/certificate/ACMEUser.vue:88
 #: src/views/certificate/DNSCredential.vue:27
 #: src/views/certificate/DNSCredential.vue:27
-#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:276
-#: src/views/environment/envColumns.tsx:119
-#: src/views/site/site_category/columns.ts:20
+#: src/views/config/configColumns.tsx:34 src/views/config/ConfigEditor.vue:276
+#: src/views/environment/envColumns.tsx:90
+#: src/views/site/site_category/columns.ts:22
 #: src/views/site/site_edit/RightSettings.vue:100
 #: src/views/site/site_edit/RightSettings.vue:100
-#: src/views/site/site_list/columns.tsx:67
+#: src/views/site/site_list/columns.tsx:69
 #: src/views/stream/components/RightSettings.vue:85
 #: src/views/stream/components/RightSettings.vue:85
-#: src/views/stream/StreamList.vue:41 src/views/user/userColumns.tsx:54
+#: src/views/stream/StreamList.vue:43 src/views/user/userColumns.tsx:54
 msgid "Updated at"
 msgid "Updated at"
 msgstr "Ngày cập nhật"
 msgstr "Ngày cập nhật"
 
 
@@ -2875,12 +2868,12 @@ msgstr "Ngày cập nhật"
 msgid "Updated successfully"
 msgid "Updated successfully"
 msgstr "Cập nhật thành công"
 msgstr "Cập nhật thành công"
 
 
-#: src/routes/index.ts:297 src/views/environment/Environment.vue:53
+#: src/routes/index.ts:297 src/views/environment/Environment.vue:56
 #: src/views/system/Upgrade.vue:143 src/views/system/Upgrade.vue:226
 #: src/views/system/Upgrade.vue:143 src/views/system/Upgrade.vue:226
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr "Cập nhật"
 msgstr "Cập nhật"
 
 
-#: src/views/environment/BatchUpgrader.vue:138
+#: src/views/environment/BatchUpgrader.vue:137
 #, fuzzy
 #, fuzzy
 msgid "Upgraded Nginx UI on %{node} successfully 🎉"
 msgid "Upgraded Nginx UI on %{node} successfully 🎉"
 msgstr "Cập nhật thành công"
 msgstr "Cập nhật thành công"
@@ -2890,7 +2883,7 @@ msgstr "Cập nhật thành công"
 msgid "Upgraded successfully"
 msgid "Upgraded successfully"
 msgstr "Cập nhật thành công"
 msgstr "Cập nhật thành công"
 
 
-#: src/views/environment/BatchUpgrader.vue:89 src/views/system/Upgrade.vue:77
+#: src/views/environment/BatchUpgrader.vue:88 src/views/system/Upgrade.vue:77
 msgid "Upgrading Nginx UI, please wait..."
 msgid "Upgrading Nginx UI, please wait..."
 msgstr "Đang cập nhật Nginx UI, vui lòng đợi..."
 msgstr "Đang cập nhật Nginx UI, vui lòng đợi..."
 
 
@@ -2902,7 +2895,7 @@ msgstr ""
 msgid "Uptime:"
 msgid "Uptime:"
 msgstr "Thời gian hoạt động:"
 msgstr "Thời gian hoạt động:"
 
 
-#: src/views/environment/envColumns.tsx:18
+#: src/views/environment/envColumns.tsx:19
 msgid "URL"
 msgid "URL"
 msgstr ""
 msgstr ""
 
 
@@ -2914,7 +2907,7 @@ msgstr ""
 msgid "Use recovery code"
 msgid "Use recovery code"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:237
+#: src/components/ChatGPT/ChatGPT.vue:333
 #, fuzzy
 #, fuzzy
 msgid "User"
 msgid "User"
 msgstr "Người dùng"
 msgstr "Người dùng"
@@ -2936,13 +2929,13 @@ msgstr "Username"
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr "Username (*)"
 msgstr "Username (*)"
 
 
-#: src/views/certificate/ACMEUser.vue:123
+#: src/views/certificate/ACMEUser.vue:124
 #: src/views/certificate/CertificateList/certColumns.tsx:81
 #: src/views/certificate/CertificateList/certColumns.tsx:81
 #: src/views/site/cert/CertInfo.vue:24
 #: src/views/site/cert/CertInfo.vue:24
 msgid "Valid"
 msgid "Valid"
 msgstr "Hợp lệ"
 msgstr "Hợp lệ"
 
 
-#: src/views/environment/envColumns.tsx:29
+#: src/views/environment/envColumns.tsx:31
 #, fuzzy
 #, fuzzy
 msgid "Version"
 msgid "Version"
 msgstr "Phiên bản hiện tại"
 msgstr "Phiên bản hiện tại"
@@ -3049,6 +3042,19 @@ msgstr ""
 msgid "Your passkeys"
 msgid "Your passkeys"
 msgstr ""
 msgstr ""
 
 
+#, fuzzy
+#~ msgid "Directory"
+#~ msgstr "Thư mục"
+
+#~ msgid "Environment"
+#~ msgstr "Environment"
+
+#~ msgid "File"
+#~ msgstr "Tệp tin"
+
+#~ msgid "Server error"
+#~ msgstr "Lỗi máy chủ"
+
 #, fuzzy
 #, fuzzy
 #~ msgid "Incorrect username or password"
 #~ msgid "Incorrect username or password"
 #~ msgstr "Tên người dùng hoặc mật khẩu không chính xác"
 #~ msgstr "Tên người dùng hoặc mật khẩu không chính xác"

+ 128 - 123
app/src/language/zh_CN/app.po

@@ -29,7 +29,7 @@ msgstr "关于"
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr "访问日志"
 msgstr "访问日志"
 
 
-#: src/routes/index.ts:148 src/views/certificate/ACMEUser.vue:112
+#: src/routes/index.ts:148 src/views/certificate/ACMEUser.vue:113
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
 msgid "ACME User"
 msgid "ACME User"
 msgstr "ACME 用户"
 msgstr "ACME 用户"
@@ -37,12 +37,12 @@ msgstr "ACME 用户"
 #: src/views/certificate/ACMEUser.vue:95
 #: src/views/certificate/ACMEUser.vue:95
 #: src/views/certificate/CertificateList/certColumns.tsx:97
 #: src/views/certificate/CertificateList/certColumns.tsx:97
 #: src/views/certificate/DNSCredential.vue:33
 #: src/views/certificate/DNSCredential.vue:33
-#: src/views/config/configColumns.ts:38
-#: src/views/environment/envColumns.tsx:125
-#: src/views/notification/notificationColumns.tsx:62
+#: src/views/config/configColumns.tsx:42
+#: src/views/environment/envColumns.tsx:97
+#: src/views/notification/notificationColumns.tsx:65
 #: src/views/preference/AuthSettings.vue:26
 #: src/views/preference/AuthSettings.vue:26
-#: src/views/site/site_category/columns.ts:26
-#: src/views/site/site_list/columns.tsx:74 src/views/stream/StreamList.vue:47
+#: src/views/site/site_category/columns.ts:29
+#: src/views/site/site_list/columns.tsx:76 src/views/stream/StreamList.vue:49
 #: src/views/user/userColumns.tsx:60
 #: src/views/user/userColumns.tsx:60
 msgid "Action"
 msgid "Action"
 msgstr "操作"
 msgstr "操作"
@@ -53,7 +53,7 @@ msgstr "操作"
 #: src/views/site/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/site/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/site/ngx_conf/NgxServer.vue:162
 #: src/views/site/ngx_conf/NgxServer.vue:162
 #: src/views/site/ngx_conf/NgxUpstream.vue:154
 #: src/views/site/ngx_conf/NgxUpstream.vue:154
-#: src/views/stream/StreamList.vue:117
+#: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr "添加"
 msgstr "添加"
 
 
@@ -80,11 +80,11 @@ msgstr "添加 Location"
 msgid "Add Site"
 msgid "Add Site"
 msgstr "添加站点"
 msgstr "添加站点"
 
 
-#: src/views/stream/StreamList.vue:176
+#: src/views/stream/StreamList.vue:181
 msgid "Add Stream"
 msgid "Add Stream"
 msgstr "添加 Stream"
 msgstr "添加 Stream"
 
 
-#: src/views/stream/StreamList.vue:109
+#: src/views/stream/StreamList.vue:113
 msgid "Added successfully"
 msgid "Added successfully"
 msgstr "添加成功"
 msgstr "添加成功"
 
 
@@ -151,11 +151,11 @@ msgid "Are you sure you want to apply to all selected?"
 msgstr "您确定要应用于所有选定的对象吗?"
 msgstr "您确定要应用于所有选定的对象吗?"
 
 
 #: src/components/Notification/Notification.vue:130
 #: src/components/Notification/Notification.vue:130
-#: src/views/notification/Notification.vue:38
+#: src/views/notification/Notification.vue:39
 msgid "Are you sure you want to clear all notifications?"
 msgid "Are you sure you want to clear all notifications?"
 msgstr "您确定要清除所有通知吗?"
 msgstr "您确定要清除所有通知吗?"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:279
+#: src/components/ChatGPT/ChatGPT.vue:376
 msgid "Are you sure you want to clear the record of chat?"
 msgid "Are you sure you want to clear the record of chat?"
 msgstr "你确定你要清除聊天记录吗?"
 msgstr "你确定你要清除聊天记录吗?"
 
 
@@ -167,8 +167,8 @@ msgstr "您确定要永久删除此项目吗?"
 msgid "Are you sure you want to delete this item?"
 msgid "Are you sure you want to delete this item?"
 msgstr "你确定要删除这个项目吗?"
 msgstr "你确定要删除这个项目吗?"
 
 
-#: src/views/site/site_list/SiteList.vue:144
-#: src/views/stream/StreamList.vue:160
+#: src/views/site/site_list/SiteList.vue:145
+#: src/views/stream/StreamList.vue:165
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr "您确定要删除吗?"
 msgstr "您确定要删除吗?"
 
 
@@ -188,11 +188,11 @@ msgstr "您确定要删除这个项目吗?"
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "您确定要删除这个 Location?"
 msgstr "您确定要删除这个 Location?"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:223
+#: src/components/ChatGPT/ChatGPT.vue:318
 msgid "Ask ChatGPT for Help"
 msgid "Ask ChatGPT for Help"
 msgstr "与ChatGPT聊天"
 msgstr "与ChatGPT聊天"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:237
+#: src/components/ChatGPT/ChatGPT.vue:333
 msgid "Assistant"
 msgid "Assistant"
 msgstr "助手"
 msgstr "助手"
 
 
@@ -235,7 +235,7 @@ msgstr "成功启用 %{name} 自动续签"
 
 
 #: src/views/certificate/CertificateEditor.vue:255
 #: src/views/certificate/CertificateEditor.vue:255
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:106
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:106
-#: src/views/config/ConfigList.vue:179 src/views/nginx_log/NginxLog.vue:173
+#: src/views/config/ConfigList.vue:180 src/views/nginx_log/NginxLog.vue:173
 #: src/views/site/site_edit/SiteEdit.vue:264
 #: src/views/site/site_edit/SiteEdit.vue:264
 #: src/views/stream/StreamEdit.vue:245
 #: src/views/stream/StreamEdit.vue:245
 msgid "Back"
 msgid "Back"
@@ -286,7 +286,7 @@ msgstr "批量操作"
 msgid "Batch Modify"
 msgid "Batch Modify"
 msgstr "批量修改"
 msgstr "批量修改"
 
 
-#: src/views/environment/BatchUpgrader.vue:153
+#: src/views/environment/BatchUpgrader.vue:152
 msgid "Batch Upgrade"
 msgid "Batch Upgrade"
 msgstr "批量升级"
 msgstr "批量升级"
 
 
@@ -314,9 +314,9 @@ msgstr "CADir"
 msgid "Can't scan? Use text key binding"
 msgid "Can't scan? Use text key binding"
 msgstr "无法扫描?使用文本密钥绑定"
 msgstr "无法扫描?使用文本密钥绑定"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:260
+#: src/components/ChatGPT/ChatGPT.vue:356
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:180
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:187
 #: src/components/StdDesign/StdDetail/StdDetail.vue:101
 #: src/components/StdDesign/StdDetail/StdDetail.vue:101
 #: src/views/preference/components/Passkey.vue:141
 #: src/views/preference/components/Passkey.vue:141
 #: src/views/site/cert/components/ObtainCert.vue:140
 #: src/views/site/cert/components/ObtainCert.vue:140
@@ -329,8 +329,16 @@ msgstr "无法扫描?使用文本密钥绑定"
 msgid "Cancel"
 msgid "Cancel"
 msgstr "取消"
 msgstr "取消"
 
 
+#: src/constants/errors/user.ts:10
+msgid "Cannot change initial user password in demo mode"
+msgstr "不可在 Demo 中修改初始用户的密码"
+
+#: src/constants/errors/user.ts:9
+msgid "Cannot remove initial user"
+msgstr "不可删除初始用户"
+
 #: src/views/site/site_edit/RightSettings.vue:91
 #: src/views/site/site_edit/RightSettings.vue:91
-#: src/views/site/site_list/columns.tsx:23
+#: src/views/site/site_list/columns.tsx:25
 msgid "Category"
 msgid "Category"
 msgstr "分类"
 msgstr "分类"
 
 
@@ -387,7 +395,7 @@ msgstr[0] "变更证书"
 msgid "Changed Path"
 msgid "Changed Path"
 msgstr "变更后的路径"
 msgstr "变更后的路径"
 
 
-#: src/views/environment/BatchUpgrader.vue:160 src/views/system/Upgrade.vue:188
+#: src/views/environment/BatchUpgrader.vue:159 src/views/system/Upgrade.vue:188
 msgid "Channel"
 msgid "Channel"
 msgstr "通道"
 msgstr "通道"
 
 
@@ -424,9 +432,9 @@ msgstr "密码文本太短"
 msgid "Cleaning environment variables"
 msgid "Cleaning environment variables"
 msgstr "正在清理环境变量"
 msgstr "正在清理环境变量"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:283
+#: src/components/ChatGPT/ChatGPT.vue:380
 #: src/components/Notification/Notification.vue:135
 #: src/components/Notification/Notification.vue:135
-#: src/views/notification/Notification.vue:43
+#: src/views/notification/Notification.vue:44
 msgid "Clear"
 msgid "Clear"
 msgstr "清空"
 msgstr "清空"
 
 
@@ -517,9 +525,9 @@ msgstr "创建文件"
 msgid "Create Folder"
 msgid "Create Folder"
 msgstr "创建文件夹"
 msgstr "创建文件夹"
 
 
-#: src/views/notification/notificationColumns.tsx:56
+#: src/views/notification/notificationColumns.tsx:58
 #: src/views/preference/components/Passkey.vue:95
 #: src/views/preference/components/Passkey.vue:95
-#: src/views/site/site_category/columns.ts:14 src/views/user/userColumns.tsx:48
+#: src/views/site/site_category/columns.ts:15 src/views/user/userColumns.tsx:48
 msgid "Created at"
 msgid "Created at"
 msgstr "创建时间"
 msgstr "创建时间"
 
 
@@ -579,8 +587,8 @@ msgstr "天"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/views/site/ngx_conf/NgxServer.vue:110
 #: src/views/site/ngx_conf/NgxServer.vue:110
 #: src/views/site/ngx_conf/NgxUpstream.vue:128
 #: src/views/site/ngx_conf/NgxUpstream.vue:128
-#: src/views/site/site_list/SiteList.vue:153
-#: src/views/stream/StreamList.vue:169
+#: src/views/site/site_list/SiteList.vue:154
+#: src/views/stream/StreamList.vue:174
 msgid "Delete"
 msgid "Delete"
 msgstr "删除"
 msgstr "删除"
 
 
@@ -601,7 +609,7 @@ msgstr "删除远程站点成功"
 msgid "Delete site: %{site_name}"
 msgid "Delete site: %{site_name}"
 msgstr "删除站点: %{site_name}"
 msgstr "删除站点: %{site_name}"
 
 
-#: src/views/stream/StreamList.vue:78
+#: src/views/stream/StreamList.vue:82
 msgid "Delete stream: %{stream_name}"
 msgid "Delete stream: %{stream_name}"
 msgstr "删除 Stream: %{stream_name}"
 msgstr "删除 Stream: %{stream_name}"
 
 
@@ -636,7 +644,7 @@ msgstr "描述"
 msgid "Destination file already exists"
 msgid "Destination file already exists"
 msgstr "目标文件已存在"
 msgstr "目标文件已存在"
 
 
-#: src/views/notification/notificationColumns.tsx:51
+#: src/views/notification/notificationColumns.tsx:52
 msgid "Details"
 msgid "Details"
 msgstr "详情"
 msgstr "详情"
 
 
@@ -664,12 +672,8 @@ msgstr "指令 index 超出范围"
 msgid "Directives"
 msgid "Directives"
 msgstr "指令"
 msgstr "指令"
 
 
-#: src/views/config/configColumns.ts:22
-msgid "Directory"
-msgstr "目录"
-
-#: src/views/site/site_list/SiteList.vue:124
-#: src/views/stream/StreamList.vue:140
+#: src/views/site/site_list/SiteList.vue:125
+#: src/views/stream/StreamList.vue:145
 msgid "Disable"
 msgid "Disable"
 msgstr "禁用"
 msgstr "禁用"
 
 
@@ -693,19 +697,19 @@ msgstr "在 %{node} 上禁用 %{site} 失败, 响应: %{resp}"
 msgid "Disable Site %{site} on %{node} successfully"
 msgid "Disable Site %{site} on %{node} successfully"
 msgstr "在 %{node} 上禁用 %{site} 成功"
 msgstr "在 %{node} 上禁用 %{site} 成功"
 
 
-#: src/views/environment/envColumns.tsx:109
-#: src/views/environment/envColumns.tsx:92
+#: src/views/environment/envColumns.tsx:61
+#: src/views/environment/envColumns.tsx:79
 #: src/views/site/site_edit/SiteEdit.vue:190
 #: src/views/site/site_edit/SiteEdit.vue:190
-#: src/views/site/site_list/columns.tsx:51
-#: src/views/site/site_list/columns.tsx:60 src/views/stream/StreamEdit.vue:175
-#: src/views/stream/StreamList.vue:33 src/views/user/userColumns.tsx:41
+#: src/views/site/site_list/columns.tsx:53
+#: src/views/site/site_list/columns.tsx:62 src/views/stream/StreamEdit.vue:175
+#: src/views/stream/StreamList.vue:34 src/views/user/userColumns.tsx:41
 msgid "Disabled"
 msgid "Disabled"
 msgstr "禁用"
 msgstr "禁用"
 
 
 #: src/views/site/site_edit/RightSettings.vue:42
 #: src/views/site/site_edit/RightSettings.vue:42
 #: src/views/site/site_list/SiteList.vue:56
 #: src/views/site/site_list/SiteList.vue:56
 #: src/views/stream/components/RightSettings.vue:38
 #: src/views/stream/components/RightSettings.vue:38
-#: src/views/stream/StreamList.vue:67
+#: src/views/stream/StreamList.vue:71
 msgid "Disabled successfully"
 msgid "Disabled successfully"
 msgstr "禁用成功"
 msgstr "禁用成功"
 
 
@@ -793,7 +797,7 @@ msgstr "下载最新版本错误"
 msgid "Downloading latest release"
 msgid "Downloading latest release"
 msgstr "下载最新版本"
 msgstr "下载最新版本"
 
 
-#: src/views/environment/BatchUpgrader.vue:189 src/views/system/Upgrade.vue:215
+#: src/views/environment/BatchUpgrader.vue:188 src/views/system/Upgrade.vue:215
 msgid "Dry run mode enabled"
 msgid "Dry run mode enabled"
 msgstr "试运行模式已启动"
 msgstr "试运行模式已启动"
 
 
@@ -806,9 +810,9 @@ msgstr ""
 "使用 Passkey。"
 "使用 Passkey。"
 
 
 #: src/views/site/site_list/SiteDuplicate.vue:72
 #: src/views/site/site_list/SiteDuplicate.vue:72
-#: src/views/site/site_list/SiteList.vue:139
+#: src/views/site/site_list/SiteList.vue:140
 #: src/views/stream/components/StreamDuplicate.vue:121
 #: src/views/stream/components/StreamDuplicate.vue:121
-#: src/views/stream/StreamList.vue:155
+#: src/views/stream/StreamList.vue:160
 msgid "Duplicate"
 msgid "Duplicate"
 msgstr "复制"
 msgstr "复制"
 
 
@@ -858,9 +862,9 @@ msgstr "邮箱"
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "邮箱 (*)"
 msgstr "邮箱 (*)"
 
 
-#: src/views/site/site_list/SiteList.vue:132
+#: src/views/site/site_list/SiteList.vue:133
 #: src/views/stream/components/Deploy.vue:80
 #: src/views/stream/components/Deploy.vue:80
-#: src/views/stream/StreamList.vue:148
+#: src/views/stream/StreamList.vue:153
 msgid "Enable"
 msgid "Enable"
 msgstr "启用"
 msgstr "启用"
 
 
@@ -912,15 +916,15 @@ msgstr "启用 TLS"
 msgid "Enable TOTP"
 msgid "Enable TOTP"
 msgstr "启用 TOTP"
 msgstr "启用 TOTP"
 
 
-#: src/views/environment/envColumns.tsx:100
-#: src/views/environment/envColumns.tsx:106
+#: src/views/environment/envColumns.tsx:70
+#: src/views/environment/envColumns.tsx:76
 #: src/views/preference/LogrotateSettings.vue:19
 #: src/views/preference/LogrotateSettings.vue:19
 #: src/views/site/site_edit/RightSettings.vue:82
 #: src/views/site/site_edit/RightSettings.vue:82
 #: src/views/site/site_edit/SiteEdit.vue:184
 #: src/views/site/site_edit/SiteEdit.vue:184
-#: src/views/site/site_list/columns.tsx:47
-#: src/views/site/site_list/columns.tsx:59
+#: src/views/site/site_list/columns.tsx:49
+#: src/views/site/site_list/columns.tsx:61
 #: src/views/stream/components/RightSettings.vue:76
 #: src/views/stream/components/RightSettings.vue:76
-#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:29
+#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:30
 #: src/views/user/userColumns.tsx:38
 #: src/views/user/userColumns.tsx:38
 msgid "Enabled"
 msgid "Enabled"
 msgstr "启用"
 msgstr "启用"
@@ -929,7 +933,7 @@ msgstr "启用"
 #: src/views/site/site_list/SiteList.vue:46 src/views/site/SiteAdd.vue:40
 #: src/views/site/site_list/SiteList.vue:46 src/views/site/SiteAdd.vue:40
 #: src/views/stream/components/RightSettings.vue:29
 #: src/views/stream/components/RightSettings.vue:29
 #: src/views/stream/components/StreamDuplicate.vue:93
 #: src/views/stream/components/StreamDuplicate.vue:93
-#: src/views/stream/StreamList.vue:57
+#: src/views/stream/StreamList.vue:61
 msgid "Enabled successfully"
 msgid "Enabled successfully"
 msgstr "启用成功"
 msgstr "启用成功"
 
 
@@ -937,15 +941,12 @@ msgstr "启用成功"
 msgid "Encrypt website with Let's Encrypt"
 msgid "Encrypt website with Let's Encrypt"
 msgstr "用 Let's Encrypt 对网站进行加密"
 msgstr "用 Let's Encrypt 对网站进行加密"
 
 
-#: src/routes/index.ts:234 src/views/environment/Environment.vue:32
-msgid "Environment"
-msgstr "环境"
-
 #: src/language/constants.ts:21
 #: src/language/constants.ts:21
 msgid "Environment variables cleaned"
 msgid "Environment variables cleaned"
 msgstr "环境变量已清理"
 msgstr "环境变量已清理"
 
 
-#: src/views/dashboard/Environments.vue:83
+#: src/routes/index.ts:234 src/views/dashboard/Environments.vue:83
+#: src/views/environment/Environment.vue:33
 msgid "Environments"
 msgid "Environments"
 msgstr "环境"
 msgstr "环境"
 
 
@@ -986,14 +987,14 @@ msgstr "创建备份失败"
 #: src/views/site/site_edit/RightSettings.vue:45
 #: src/views/site/site_edit/RightSettings.vue:45
 #: src/views/site/site_list/SiteList.vue:60
 #: src/views/site/site_list/SiteList.vue:60
 #: src/views/stream/components/RightSettings.vue:41
 #: src/views/stream/components/RightSettings.vue:41
-#: src/views/stream/StreamList.vue:71
+#: src/views/stream/StreamList.vue:75
 msgid "Failed to disable %{msg}"
 msgid "Failed to disable %{msg}"
 msgstr "禁用失败 %{msg}"
 msgstr "禁用失败 %{msg}"
 
 
 #: src/views/site/site_edit/RightSettings.vue:36
 #: src/views/site/site_edit/RightSettings.vue:36
 #: src/views/site/site_list/SiteList.vue:50
 #: src/views/site/site_list/SiteList.vue:50
 #: src/views/stream/components/RightSettings.vue:32
 #: src/views/stream/components/RightSettings.vue:32
-#: src/views/stream/StreamList.vue:61
+#: src/views/stream/StreamList.vue:65
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "启用失败 %{msg}"
 msgstr "启用失败 %{msg}"
 
 
@@ -1014,10 +1015,6 @@ msgstr "读取 nginx.conf 失败"
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgstr "保存失败,在配置中检测到语法错误。"
 msgstr "保存失败,在配置中检测到语法错误。"
 
 
-#: src/views/config/configColumns.ts:24
-msgid "File"
-msgstr "文件"
-
 #: src/language/constants.ts:31
 #: src/language/constants.ts:31
 msgid "File exists"
 msgid "File exists"
 msgstr "文件已存在"
 msgstr "文件已存在"
@@ -1077,7 +1074,7 @@ msgstr "生成"
 msgid "Generating private key for registering account"
 msgid "Generating private key for registering account"
 msgstr "正在生成私钥用于注册账户"
 msgstr "正在生成私钥用于注册账户"
 
 
-#: src/views/environment/BatchUpgrader.vue:178 src/views/system/Upgrade.vue:169
+#: src/views/environment/BatchUpgrader.vue:177 src/views/system/Upgrade.vue:169
 msgid "Get release information error"
 msgid "Get release information error"
 msgstr "获取发布信息错误"
 msgstr "获取发布信息错误"
 
 
@@ -1187,7 +1184,7 @@ msgstr "安装成功"
 msgid "Interval"
 msgid "Interval"
 msgstr "间隔"
 msgstr "间隔"
 
 
-#: src/views/certificate/ACMEUser.vue:128
+#: src/views/certificate/ACMEUser.vue:129
 msgid "Invalid"
 msgid "Invalid"
 msgstr "无效的"
 msgstr "无效的"
 
 
@@ -1291,7 +1288,7 @@ msgstr "列表"
 msgid "Load Average:"
 msgid "Load Average:"
 msgstr "系统负载:"
 msgstr "系统负载:"
 
 
-#: src/views/environment/Environment.vue:37
+#: src/views/environment/Environment.vue:39
 msgid "Load from settings"
 msgid "Load from settings"
 msgstr "从设置中加载"
 msgstr "从设置中加载"
 
 
@@ -1363,11 +1360,11 @@ msgstr "配置管理"
 msgid "Manage Sites"
 msgid "Manage Sites"
 msgstr "网站管理"
 msgstr "网站管理"
 
 
-#: src/routes/index.ts:89 src/views/stream/StreamList.vue:115
+#: src/routes/index.ts:89 src/views/stream/StreamList.vue:119
 msgid "Manage Streams"
 msgid "Manage Streams"
 msgstr "管理 Stream"
 msgstr "管理 Stream"
 
 
-#: src/routes/index.ts:257 src/views/user/User.vue:9
+#: src/routes/index.ts:257 src/views/user/User.vue:10
 msgid "Manage Users"
 msgid "Manage Users"
 msgstr "用户管理"
 msgstr "用户管理"
 
 
@@ -1396,10 +1393,10 @@ msgstr "分钟"
 msgid "Model"
 msgid "Model"
 msgstr "模型"
 msgstr "模型"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:256
+#: src/components/ChatGPT/ChatGPT.vue:352
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:151
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:151
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:498
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:498
-#: src/views/config/ConfigList.vue:158
+#: src/views/config/ConfigList.vue:159
 msgid "Modify"
 msgid "Modify"
 msgstr "修改"
 msgstr "修改"
 
 
@@ -1423,17 +1420,18 @@ msgstr "多行指令"
 #: src/views/certificate/CertificateEditor.vue:160
 #: src/views/certificate/CertificateEditor.vue:160
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/certificate/DNSCredential.vue:11
-#: src/views/config/components/Mkdir.vue:64 src/views/config/configColumns.ts:8
-#: src/views/config/ConfigEditor.vue:256 src/views/environment/envColumns.tsx:9
+#: src/views/config/components/Mkdir.vue:64
+#: src/views/config/configColumns.tsx:7 src/views/config/ConfigEditor.vue:256
+#: src/views/environment/envColumns.tsx:9
 #: src/views/preference/components/AddPasskey.vue:75
 #: src/views/preference/components/AddPasskey.vue:75
 #: src/views/site/ngx_conf/NgxUpstream.vue:177
 #: src/views/site/ngx_conf/NgxUpstream.vue:177
 #: src/views/site/site_category/columns.ts:7
 #: src/views/site/site_category/columns.ts:7
 #: src/views/site/site_edit/RightSettings.vue:88
 #: src/views/site/site_edit/RightSettings.vue:88
-#: src/views/site/site_list/columns.tsx:13
+#: src/views/site/site_list/columns.tsx:15
 #: src/views/site/site_list/SiteDuplicate.vue:79
 #: src/views/site/site_list/SiteDuplicate.vue:79
 #: src/views/stream/components/RightSettings.vue:82
 #: src/views/stream/components/RightSettings.vue:82
 #: src/views/stream/components/StreamDuplicate.vue:128
 #: src/views/stream/components/StreamDuplicate.vue:128
-#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:181
+#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:186
 msgid "Name"
 msgid "Name"
 msgstr "名称"
 msgstr "名称"
 
 
@@ -1552,20 +1550,20 @@ msgstr "Nginx 重启命令"
 msgid "Nginx restarted successfully"
 msgid "Nginx restarted successfully"
 msgstr "Nginx 重启成功"
 msgstr "Nginx 重启成功"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:277
+#: src/components/ChatGPT/ChatGPT.vue:374
 #: src/components/Notification/Notification.vue:128
 #: src/components/Notification/Notification.vue:128
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:510
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:510
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:524
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:524
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:538
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:538
-#: src/views/notification/Notification.vue:36
+#: src/views/notification/Notification.vue:37
 #: src/views/preference/AuthSettings.vue:136
 #: src/views/preference/AuthSettings.vue:136
 #: src/views/preference/CertSettings.vue:70
 #: src/views/preference/CertSettings.vue:70
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97
 #: src/views/site/ngx_conf/LocationEditor.vue:90
 #: src/views/site/ngx_conf/LocationEditor.vue:90
-#: src/views/site/site_list/SiteList.vue:142
-#: src/views/stream/StreamList.vue:158
+#: src/views/site/site_list/SiteList.vue:143
+#: src/views/stream/StreamList.vue:163
 msgid "No"
 msgid "No"
 msgstr "取消"
 msgstr "取消"
 
 
@@ -1600,7 +1598,7 @@ msgid ""
 "certificates, please synchronize them to the remote nodes in advance."
 "certificates, please synchronize them to the remote nodes in advance."
 msgstr "注意,如果配置文件中包含其他配置或证书,请提前将它们同步到远程节点。"
 msgstr "注意,如果配置文件中包含其他配置或证书,请提前将它们同步到远程节点。"
 
 
-#: src/views/notification/Notification.vue:27
+#: src/views/notification/Notification.vue:28
 msgid "Notification"
 msgid "Notification"
 msgstr "通知"
 msgstr "通知"
 
 
@@ -1628,7 +1626,7 @@ msgstr "某些用户在使用 Firefox 首次访问时,OCSP Must Staple 可能
 
 
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/views/dashboard/Environments.vue:107
 #: src/views/dashboard/Environments.vue:107
-#: src/views/environment/envColumns.tsx:87
+#: src/views/environment/envColumns.tsx:56
 msgid "Offline"
 msgid "Offline"
 msgstr "离线"
 msgstr "离线"
 
 
@@ -1636,23 +1634,23 @@ msgstr "离线"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:511
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:511
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:525
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:525
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:539
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:539
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:181
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:188
 msgid "Ok"
 msgid "Ok"
 msgstr "确定"
 msgstr "确定"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:278
+#: src/components/ChatGPT/ChatGPT.vue:375
 #: src/components/Notification/Notification.vue:129
 #: src/components/Notification/Notification.vue:129
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:95
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:95
-#: src/views/notification/Notification.vue:37
+#: src/views/notification/Notification.vue:38
 #: src/views/site/cert/components/ObtainCert.vue:139
 #: src/views/site/cert/components/ObtainCert.vue:139
 #: src/views/site/ngx_conf/NgxConfigEditor.vue:50
 #: src/views/site/ngx_conf/NgxConfigEditor.vue:50
 #: src/views/site/ngx_conf/NgxServer.vue:79
 #: src/views/site/ngx_conf/NgxServer.vue:79
 #: src/views/site/ngx_conf/NgxUpstream.vue:33
 #: src/views/site/ngx_conf/NgxUpstream.vue:33
 #: src/views/site/site_edit/RightSettings.vue:54
 #: src/views/site/site_edit/RightSettings.vue:54
-#: src/views/site/site_list/SiteList.vue:143
+#: src/views/site/site_list/SiteList.vue:144
 #: src/views/stream/components/Deploy.vue:19
 #: src/views/stream/components/Deploy.vue:19
 #: src/views/stream/components/RightSettings.vue:50
 #: src/views/stream/components/RightSettings.vue:50
-#: src/views/stream/StreamList.vue:159
+#: src/views/stream/StreamList.vue:164
 msgid "OK"
 msgid "OK"
 msgstr "确定"
 msgstr "确定"
 
 
@@ -1663,7 +1661,7 @@ msgstr "一旦验证完成,这些记录将被删除。"
 #: src/components/NodeSelector/NodeSelector.vue:83
 #: src/components/NodeSelector/NodeSelector.vue:83
 #: src/components/NodeSelector/NodeSelector.vue:97
 #: src/components/NodeSelector/NodeSelector.vue:97
 #: src/views/dashboard/Environments.vue:100
 #: src/views/dashboard/Environments.vue:100
-#: src/views/environment/envColumns.tsx:83
+#: src/views/environment/envColumns.tsx:52
 msgid "Online"
 msgid "Online"
 msgstr "在线"
 msgstr "在线"
 
 
@@ -1748,7 +1746,7 @@ msgstr "路径:{0} 不在 nginx 配置目录下:{1}"
 msgid "Payload resource is nil"
 msgid "Payload resource is nil"
 msgstr "有效载荷资源为空"
 msgstr "有效载荷资源为空"
 
 
-#: src/views/environment/BatchUpgrader.vue:233
+#: src/views/environment/BatchUpgrader.vue:232
 msgid "Perform"
 msgid "Perform"
 msgstr "执行"
 msgstr "执行"
 
 
@@ -1830,7 +1828,7 @@ msgid ""
 "Please note that the unit of time configurations below are all in seconds."
 "Please note that the unit of time configurations below are all in seconds."
 msgstr "请注意,下面的时间单位配置均以秒为单位。"
 msgstr "请注意,下面的时间单位配置均以秒为单位。"
 
 
-#: src/views/environment/Environment.vue:45
+#: src/views/environment/Environment.vue:48
 msgid "Please select at least one node to upgrade"
 msgid "Please select at least one node to upgrade"
 msgstr "请至少选择一个节点进行升级"
 msgstr "请至少选择一个节点进行升级"
 
 
@@ -1848,8 +1846,8 @@ msgstr "请至少选择一个节点!"
 msgid "Please upgrade the remote Nginx UI to the latest version"
 msgid "Please upgrade the remote Nginx UI to the latest version"
 msgstr "请将远程 Nginx UI 升级到最新版本"
 msgstr "请将远程 Nginx UI 升级到最新版本"
 
 
-#: src/views/environment/BatchUpgrader.vue:168
-#: src/views/environment/BatchUpgrader.vue:221 src/views/system/Upgrade.vue:194
+#: src/views/environment/BatchUpgrader.vue:167
+#: src/views/environment/BatchUpgrader.vue:220 src/views/system/Upgrade.vue:194
 #: src/views/system/Upgrade.vue:245
 #: src/views/system/Upgrade.vue:245
 msgid "Pre-release"
 msgid "Pre-release"
 msgstr "预发布"
 msgstr "预发布"
@@ -1926,11 +1924,11 @@ msgstr "恢复代码:"
 msgid "Recursive Nameservers"
 msgid "Recursive Nameservers"
 msgstr "递归域名服务器"
 msgstr "递归域名服务器"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:290
+#: src/components/ChatGPT/ChatGPT.vue:387
 msgid "Regenerate response"
 msgid "Regenerate response"
 msgstr "重新生成响应"
 msgstr "重新生成响应"
 
 
-#: src/views/certificate/ACMEUser.vue:136
+#: src/views/certificate/ACMEUser.vue:137
 msgid "Register"
 msgid "Register"
 msgstr "注册"
 msgstr "注册"
 
 
@@ -1940,7 +1938,7 @@ msgid ""
 "proxy."
 "proxy."
 msgstr "注册用户或使用此账户申请证书时通过 HTTP 代理。"
 msgstr "注册用户或使用此账户申请证书时通过 HTTP 代理。"
 
 
-#: src/views/certificate/ACMEUser.vue:105
+#: src/views/certificate/ACMEUser.vue:106
 msgid "Register failed"
 msgid "Register failed"
 msgstr "注册失败"
 msgstr "注册失败"
 
 
@@ -1952,7 +1950,7 @@ msgstr "启动时注册"
 msgid "Register passkey successfully"
 msgid "Register passkey successfully"
 msgstr "Passkey 注册成功"
 msgstr "Passkey 注册成功"
 
 
-#: src/views/certificate/ACMEUser.vue:103
+#: src/views/certificate/ACMEUser.vue:104
 msgid "Register successfully"
 msgid "Register successfully"
 msgstr "注册成功"
 msgstr "注册成功"
 
 
@@ -1960,7 +1958,7 @@ msgstr "注册成功"
 msgid "Registering user"
 msgid "Registering user"
 msgstr "正在注册用户"
 msgstr "正在注册用户"
 
 
-#: src/views/certificate/ACMEUser.vue:119
+#: src/views/certificate/ACMEUser.vue:120
 msgid "Registration Status"
 msgid "Registration Status"
 msgstr "注册状态"
 msgstr "注册状态"
 
 
@@ -1972,7 +1970,7 @@ msgstr "重新安装"
 msgid "Release Note"
 msgid "Release Note"
 msgstr "发行日志"
 msgstr "发行日志"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:266
+#: src/components/ChatGPT/ChatGPT.vue:362
 #: src/components/NginxControl/NginxControl.vue:99
 #: src/components/NginxControl/NginxControl.vue:99
 msgid "Reload"
 msgid "Reload"
 msgstr "重载"
 msgstr "重载"
@@ -2008,7 +2006,7 @@ msgstr "删除成功"
 
 
 #: src/views/config/components/ConfigName.vue:48
 #: src/views/config/components/ConfigName.vue:48
 #: src/views/config/components/Rename.vue:54
 #: src/views/config/components/Rename.vue:54
-#: src/views/config/ConfigList.vue:165
+#: src/views/config/ConfigList.vue:166
 #: src/views/site/ngx_conf/NgxUpstream.vue:125
 #: src/views/site/ngx_conf/NgxUpstream.vue:125
 #: src/views/site/site_edit/components/ConfigName.vue:44
 #: src/views/site/site_edit/components/ConfigName.vue:44
 msgid "Rename"
 msgid "Rename"
@@ -2115,7 +2113,7 @@ msgstr "运行模式"
 msgid "Running"
 msgid "Running"
 msgstr "运行中"
 msgstr "运行中"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:259
+#: src/components/ChatGPT/ChatGPT.vue:355
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:64
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:64
 #: src/components/StdDesign/StdDetail/StdDetail.vue:93
 #: src/components/StdDesign/StdDetail/StdDetail.vue:93
 #: src/views/certificate/CertificateEditor.vue:262
 #: src/views/certificate/CertificateEditor.vue:262
@@ -2182,7 +2180,7 @@ msgstr "SDK"
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr "密钥已复制"
 msgstr "密钥已复制"
 
 
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:182
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:189
 msgid "Selector"
 msgid "Selector"
 msgstr "选择器"
 msgstr "选择器"
 
 
@@ -2195,10 +2193,6 @@ msgstr "自我检查"
 msgid "Send"
 msgid "Send"
 msgstr "上传"
 msgstr "上传"
 
 
-#: src/lib/http/index.ts:128
-msgid "Server error"
-msgstr "服务器错误"
-
 #: src/views/dashboard/ServerAnalytic.vue:179
 #: src/views/dashboard/ServerAnalytic.vue:179
 msgid "Server Info"
 msgid "Server Info"
 msgstr "服务器信息"
 msgstr "服务器信息"
@@ -2215,7 +2209,7 @@ msgstr "必须为 server_name 指令指明参数"
 msgid "ServerIdx out of range"
 msgid "ServerIdx out of range"
 msgstr "Server Index 超出范围"
 msgstr "Server Index 超出范围"
 
 
-#: src/constants/errors/user.ts:9
+#: src/constants/errors/user.ts:11
 msgid "Session not found"
 msgid "Session not found"
 msgstr "未找到会话"
 msgstr "未找到会话"
 
 
@@ -2317,16 +2311,16 @@ msgstr "SSL证书路径"
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "SSO 登录"
 msgstr "SSO 登录"
 
 
-#: src/views/environment/BatchUpgrader.vue:165
-#: src/views/environment/BatchUpgrader.vue:215 src/views/system/Upgrade.vue:191
+#: src/views/environment/BatchUpgrader.vue:164
+#: src/views/environment/BatchUpgrader.vue:214 src/views/system/Upgrade.vue:191
 #: src/views/system/Upgrade.vue:239
 #: src/views/system/Upgrade.vue:239
 msgid "Stable"
 msgid "Stable"
 msgstr "稳定"
 msgstr "稳定"
 
 
 #: src/views/certificate/ACMEUser.vue:65
 #: src/views/certificate/ACMEUser.vue:65
 #: src/views/certificate/CertificateList/certColumns.tsx:68
 #: src/views/certificate/CertificateList/certColumns.tsx:68
-#: src/views/environment/envColumns.tsx:75
-#: src/views/site/site_list/columns.tsx:40 src/views/stream/StreamList.vue:22
+#: src/views/environment/envColumns.tsx:44
+#: src/views/site/site_list/columns.tsx:42 src/views/stream/StreamList.vue:23
 msgid "Status"
 msgid "Status"
 msgstr "状态"
 msgstr "状态"
 
 
@@ -2426,7 +2420,7 @@ msgstr "同步配置错误"
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "同步配置成功"
 msgstr "同步配置成功"
 
 
-#: src/views/site/site_category/SiteCategory.vue:16
+#: src/views/site/site_category/SiteCategory.vue:17
 msgid "Sync Nodes"
 msgid "Sync Nodes"
 msgstr "同步节点"
 msgstr "同步节点"
 
 
@@ -2595,7 +2589,7 @@ msgstr "该字段只能包含字母、unicode 字符、数字和 -_。"
 msgid "This value is already taken"
 msgid "This value is already taken"
 msgstr "该字段的值已经存在"
 msgstr "该字段的值已经存在"
 
 
-#: src/views/environment/BatchUpgrader.vue:183
+#: src/views/environment/BatchUpgrader.vue:182
 msgid ""
 msgid ""
 "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgstr "将 %{nodeNames} 上的 Nginx UI 升级或重新安装到 %{version} 版本。"
 msgstr "将 %{nodeNames} 上的 Nginx UI 升级或重新安装到 %{version} 版本。"
@@ -2677,7 +2671,6 @@ msgid "Two-factor authentication required"
 msgstr "需要两步验证"
 msgstr "需要两步验证"
 
 
 #: src/views/certificate/CertificateList/certColumns.tsx:25
 #: src/views/certificate/CertificateList/certColumns.tsx:25
-#: src/views/config/configColumns.ts:16
 #: src/views/notification/notificationColumns.tsx:9
 #: src/views/notification/notificationColumns.tsx:9
 msgid "Type"
 msgid "Type"
 msgstr "类型"
 msgstr "类型"
@@ -2688,13 +2681,13 @@ msgstr "更新成功"
 
 
 #: src/views/certificate/ACMEUser.vue:88
 #: src/views/certificate/ACMEUser.vue:88
 #: src/views/certificate/DNSCredential.vue:27
 #: src/views/certificate/DNSCredential.vue:27
-#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:276
-#: src/views/environment/envColumns.tsx:119
-#: src/views/site/site_category/columns.ts:20
+#: src/views/config/configColumns.tsx:34 src/views/config/ConfigEditor.vue:276
+#: src/views/environment/envColumns.tsx:90
+#: src/views/site/site_category/columns.ts:22
 #: src/views/site/site_edit/RightSettings.vue:100
 #: src/views/site/site_edit/RightSettings.vue:100
-#: src/views/site/site_list/columns.tsx:67
+#: src/views/site/site_list/columns.tsx:69
 #: src/views/stream/components/RightSettings.vue:85
 #: src/views/stream/components/RightSettings.vue:85
-#: src/views/stream/StreamList.vue:41 src/views/user/userColumns.tsx:54
+#: src/views/stream/StreamList.vue:43 src/views/user/userColumns.tsx:54
 msgid "Updated at"
 msgid "Updated at"
 msgstr "修改时间"
 msgstr "修改时间"
 
 
@@ -2702,12 +2695,12 @@ msgstr "修改时间"
 msgid "Updated successfully"
 msgid "Updated successfully"
 msgstr "更新成功"
 msgstr "更新成功"
 
 
-#: src/routes/index.ts:297 src/views/environment/Environment.vue:53
+#: src/routes/index.ts:297 src/views/environment/Environment.vue:56
 #: src/views/system/Upgrade.vue:143 src/views/system/Upgrade.vue:226
 #: src/views/system/Upgrade.vue:143 src/views/system/Upgrade.vue:226
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr "升级"
 msgstr "升级"
 
 
-#: src/views/environment/BatchUpgrader.vue:138
+#: src/views/environment/BatchUpgrader.vue:137
 msgid "Upgraded Nginx UI on %{node} successfully 🎉"
 msgid "Upgraded Nginx UI on %{node} successfully 🎉"
 msgstr "成功升级 %{node} 上的 Nginx UI 🎉"
 msgstr "成功升级 %{node} 上的 Nginx UI 🎉"
 
 
@@ -2715,7 +2708,7 @@ msgstr "成功升级 %{node} 上的 Nginx UI 🎉"
 msgid "Upgraded successfully"
 msgid "Upgraded successfully"
 msgstr "升级成功"
 msgstr "升级成功"
 
 
-#: src/views/environment/BatchUpgrader.vue:89 src/views/system/Upgrade.vue:77
+#: src/views/environment/BatchUpgrader.vue:88 src/views/system/Upgrade.vue:77
 msgid "Upgrading Nginx UI, please wait..."
 msgid "Upgrading Nginx UI, please wait..."
 msgstr "正在升级 Nginx UI,请等待..."
 msgstr "正在升级 Nginx UI,请等待..."
 
 
@@ -2727,7 +2720,7 @@ msgstr "Upstream 名称"
 msgid "Uptime:"
 msgid "Uptime:"
 msgstr "运行时间:"
 msgstr "运行时间:"
 
 
-#: src/views/environment/envColumns.tsx:18
+#: src/views/environment/envColumns.tsx:19
 msgid "URL"
 msgid "URL"
 msgstr "URL"
 msgstr "URL"
 
 
@@ -2739,7 +2732,7 @@ msgstr "使用二步验证码"
 msgid "Use recovery code"
 msgid "Use recovery code"
 msgstr "使用恢复代码"
 msgstr "使用恢复代码"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:237
+#: src/components/ChatGPT/ChatGPT.vue:333
 msgid "User"
 msgid "User"
 msgstr "用户"
 msgstr "用户"
 
 
@@ -2759,13 +2752,13 @@ msgstr "用户名"
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr "用户名 (*)"
 msgstr "用户名 (*)"
 
 
-#: src/views/certificate/ACMEUser.vue:123
+#: src/views/certificate/ACMEUser.vue:124
 #: src/views/certificate/CertificateList/certColumns.tsx:81
 #: src/views/certificate/CertificateList/certColumns.tsx:81
 #: src/views/site/cert/CertInfo.vue:24
 #: src/views/site/cert/CertInfo.vue:24
 msgid "Valid"
 msgid "Valid"
 msgstr "有效的"
 msgstr "有效的"
 
 
-#: src/views/environment/envColumns.tsx:29
+#: src/views/environment/envColumns.tsx:31
 msgid "Version"
 msgid "Version"
 msgstr "版本"
 msgstr "版本"
 
 
@@ -2869,6 +2862,18 @@ msgstr "您尚未配置 Webauthn 的设置,因此无法添加 Passkey。"
 msgid "Your passkeys"
 msgid "Your passkeys"
 msgstr "你的 Passkeys"
 msgstr "你的 Passkeys"
 
 
+#~ msgid "Directory"
+#~ msgstr "目录"
+
+#~ msgid "Environment"
+#~ msgstr "环境"
+
+#~ msgid "File"
+#~ msgstr "文件"
+
+#~ msgid "Server error"
+#~ msgstr "服务器错误"
+
 #~ msgid "Incorrect username or password"
 #~ msgid "Incorrect username or password"
 #~ msgstr "用户名或密码错误"
 #~ msgstr "用户名或密码错误"
 
 

+ 130 - 123
app/src/language/zh_TW/app.po

@@ -33,7 +33,7 @@ msgstr "關於"
 msgid "Access Logs"
 msgid "Access Logs"
 msgstr "存取日誌"
 msgstr "存取日誌"
 
 
-#: src/routes/index.ts:148 src/views/certificate/ACMEUser.vue:112
+#: src/routes/index.ts:148 src/views/certificate/ACMEUser.vue:113
 #: src/views/certificate/ACMEUserSelector.vue:85
 #: src/views/certificate/ACMEUserSelector.vue:85
 msgid "ACME User"
 msgid "ACME User"
 msgstr "ACME 用戶"
 msgstr "ACME 用戶"
@@ -41,12 +41,12 @@ msgstr "ACME 用戶"
 #: src/views/certificate/ACMEUser.vue:95
 #: src/views/certificate/ACMEUser.vue:95
 #: src/views/certificate/CertificateList/certColumns.tsx:97
 #: src/views/certificate/CertificateList/certColumns.tsx:97
 #: src/views/certificate/DNSCredential.vue:33
 #: src/views/certificate/DNSCredential.vue:33
-#: src/views/config/configColumns.ts:38
-#: src/views/environment/envColumns.tsx:125
-#: src/views/notification/notificationColumns.tsx:62
+#: src/views/config/configColumns.tsx:42
+#: src/views/environment/envColumns.tsx:97
+#: src/views/notification/notificationColumns.tsx:65
 #: src/views/preference/AuthSettings.vue:26
 #: src/views/preference/AuthSettings.vue:26
-#: src/views/site/site_category/columns.ts:26
-#: src/views/site/site_list/columns.tsx:74 src/views/stream/StreamList.vue:47
+#: src/views/site/site_category/columns.ts:29
+#: src/views/site/site_list/columns.tsx:76 src/views/stream/StreamList.vue:49
 #: src/views/user/userColumns.tsx:60
 #: src/views/user/userColumns.tsx:60
 msgid "Action"
 msgid "Action"
 msgstr "操作"
 msgstr "操作"
@@ -57,7 +57,7 @@ msgstr "操作"
 #: src/views/site/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/site/ngx_conf/config_template/ConfigTemplate.vue:117
 #: src/views/site/ngx_conf/NgxServer.vue:162
 #: src/views/site/ngx_conf/NgxServer.vue:162
 #: src/views/site/ngx_conf/NgxUpstream.vue:154
 #: src/views/site/ngx_conf/NgxUpstream.vue:154
-#: src/views/stream/StreamList.vue:117
+#: src/views/stream/StreamList.vue:121
 msgid "Add"
 msgid "Add"
 msgstr "新增"
 msgstr "新增"
 
 
@@ -84,11 +84,11 @@ msgstr "新增 Location"
 msgid "Add Site"
 msgid "Add Site"
 msgstr "新增網站"
 msgstr "新增網站"
 
 
-#: src/views/stream/StreamList.vue:176
+#: src/views/stream/StreamList.vue:181
 msgid "Add Stream"
 msgid "Add Stream"
 msgstr "新增 Stream"
 msgstr "新增 Stream"
 
 
-#: src/views/stream/StreamList.vue:109
+#: src/views/stream/StreamList.vue:113
 msgid "Added successfully"
 msgid "Added successfully"
 msgstr "添加成功"
 msgstr "添加成功"
 
 
@@ -159,11 +159,11 @@ msgid "Are you sure you want to apply to all selected?"
 msgstr "您確定要刪除嗎?"
 msgstr "您確定要刪除嗎?"
 
 
 #: src/components/Notification/Notification.vue:130
 #: src/components/Notification/Notification.vue:130
-#: src/views/notification/Notification.vue:38
+#: src/views/notification/Notification.vue:39
 msgid "Are you sure you want to clear all notifications?"
 msgid "Are you sure you want to clear all notifications?"
 msgstr "您確定要清除所有通知嗎?"
 msgstr "您確定要清除所有通知嗎?"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:279
+#: src/components/ChatGPT/ChatGPT.vue:376
 msgid "Are you sure you want to clear the record of chat?"
 msgid "Are you sure you want to clear the record of chat?"
 msgstr "您確定要清除聊天記錄嗎?"
 msgstr "您確定要清除聊天記錄嗎?"
 
 
@@ -175,8 +175,8 @@ msgstr "您確定要永久刪除此項目嗎?"
 msgid "Are you sure you want to delete this item?"
 msgid "Are you sure you want to delete this item?"
 msgstr "您確定要刪除此項目嗎?"
 msgstr "您確定要刪除此項目嗎?"
 
 
-#: src/views/site/site_list/SiteList.vue:144
-#: src/views/stream/StreamList.vue:160
+#: src/views/site/site_list/SiteList.vue:145
+#: src/views/stream/StreamList.vue:165
 msgid "Are you sure you want to delete?"
 msgid "Are you sure you want to delete?"
 msgstr "您確定要刪除嗎?"
 msgstr "您確定要刪除嗎?"
 
 
@@ -196,11 +196,11 @@ msgstr "您確定要刪除此項目嗎?"
 msgid "Are you sure you want to remove this location?"
 msgid "Are you sure you want to remove this location?"
 msgstr "您確定要刪除此 Location 嗎?"
 msgstr "您確定要刪除此 Location 嗎?"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:223
+#: src/components/ChatGPT/ChatGPT.vue:318
 msgid "Ask ChatGPT for Help"
 msgid "Ask ChatGPT for Help"
 msgstr "向 ChatGPT 尋求幫助"
 msgstr "向 ChatGPT 尋求幫助"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:237
+#: src/components/ChatGPT/ChatGPT.vue:333
 msgid "Assistant"
 msgid "Assistant"
 msgstr "助理"
 msgstr "助理"
 
 
@@ -244,7 +244,7 @@ msgstr "已啟用 %{name} 的自動續簽"
 
 
 #: src/views/certificate/CertificateEditor.vue:255
 #: src/views/certificate/CertificateEditor.vue:255
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:106
 #: src/views/config/ConfigEditor.vue:213 src/views/config/ConfigList.vue:106
-#: src/views/config/ConfigList.vue:179 src/views/nginx_log/NginxLog.vue:173
+#: src/views/config/ConfigList.vue:180 src/views/nginx_log/NginxLog.vue:173
 #: src/views/site/site_edit/SiteEdit.vue:264
 #: src/views/site/site_edit/SiteEdit.vue:264
 #: src/views/stream/StreamEdit.vue:245
 #: src/views/stream/StreamEdit.vue:245
 msgid "Back"
 msgid "Back"
@@ -296,7 +296,7 @@ msgstr "操作"
 msgid "Batch Modify"
 msgid "Batch Modify"
 msgstr "批次修改"
 msgstr "批次修改"
 
 
-#: src/views/environment/BatchUpgrader.vue:153
+#: src/views/environment/BatchUpgrader.vue:152
 msgid "Batch Upgrade"
 msgid "Batch Upgrade"
 msgstr "批次升級"
 msgstr "批次升級"
 
 
@@ -324,9 +324,9 @@ msgstr "CADir"
 msgid "Can't scan? Use text key binding"
 msgid "Can't scan? Use text key binding"
 msgstr ""
 msgstr ""
 
 
-#: src/components/ChatGPT/ChatGPT.vue:260
+#: src/components/ChatGPT/ChatGPT.vue:356
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:246
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:180
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:187
 #: src/components/StdDesign/StdDetail/StdDetail.vue:101
 #: src/components/StdDesign/StdDetail/StdDetail.vue:101
 #: src/views/preference/components/Passkey.vue:141
 #: src/views/preference/components/Passkey.vue:141
 #: src/views/site/cert/components/ObtainCert.vue:140
 #: src/views/site/cert/components/ObtainCert.vue:140
@@ -339,8 +339,18 @@ msgstr ""
 msgid "Cancel"
 msgid "Cancel"
 msgstr "取消"
 msgstr "取消"
 
 
+#: src/constants/errors/user.ts:10
+#, fuzzy
+msgid "Cannot change initial user password in demo mode"
+msgstr "在示範模式中禁止更改 root 密碼"
+
+#: src/constants/errors/user.ts:9
+#, fuzzy
+msgid "Cannot remove initial user"
+msgstr "系統初始使用者"
+
 #: src/views/site/site_edit/RightSettings.vue:91
 #: src/views/site/site_edit/RightSettings.vue:91
-#: src/views/site/site_list/columns.tsx:23
+#: src/views/site/site_list/columns.tsx:25
 msgid "Category"
 msgid "Category"
 msgstr ""
 msgstr ""
 
 
@@ -400,7 +410,7 @@ msgstr[0] "變更後憑證"
 msgid "Changed Path"
 msgid "Changed Path"
 msgstr "變更後路徑"
 msgstr "變更後路徑"
 
 
-#: src/views/environment/BatchUpgrader.vue:160 src/views/system/Upgrade.vue:188
+#: src/views/environment/BatchUpgrader.vue:159 src/views/system/Upgrade.vue:188
 msgid "Channel"
 msgid "Channel"
 msgstr "通道"
 msgstr "通道"
 
 
@@ -436,9 +446,9 @@ msgstr ""
 msgid "Cleaning environment variables"
 msgid "Cleaning environment variables"
 msgstr "清理環境變數"
 msgstr "清理環境變數"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:283
+#: src/components/ChatGPT/ChatGPT.vue:380
 #: src/components/Notification/Notification.vue:135
 #: src/components/Notification/Notification.vue:135
-#: src/views/notification/Notification.vue:43
+#: src/views/notification/Notification.vue:44
 msgid "Clear"
 msgid "Clear"
 msgstr "清除"
 msgstr "清除"
 
 
@@ -529,9 +539,9 @@ msgstr "創建檔案"
 msgid "Create Folder"
 msgid "Create Folder"
 msgstr "創建資料夾"
 msgstr "創建資料夾"
 
 
-#: src/views/notification/notificationColumns.tsx:56
+#: src/views/notification/notificationColumns.tsx:58
 #: src/views/preference/components/Passkey.vue:95
 #: src/views/preference/components/Passkey.vue:95
-#: src/views/site/site_category/columns.ts:14 src/views/user/userColumns.tsx:48
+#: src/views/site/site_category/columns.ts:15 src/views/user/userColumns.tsx:48
 msgid "Created at"
 msgid "Created at"
 msgstr "建立時間"
 msgstr "建立時間"
 
 
@@ -594,8 +604,8 @@ msgstr "天"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:519
 #: src/views/site/ngx_conf/NgxServer.vue:110
 #: src/views/site/ngx_conf/NgxServer.vue:110
 #: src/views/site/ngx_conf/NgxUpstream.vue:128
 #: src/views/site/ngx_conf/NgxUpstream.vue:128
-#: src/views/site/site_list/SiteList.vue:153
-#: src/views/stream/StreamList.vue:169
+#: src/views/site/site_list/SiteList.vue:154
+#: src/views/stream/StreamList.vue:174
 msgid "Delete"
 msgid "Delete"
 msgstr "刪除"
 msgstr "刪除"
 
 
@@ -618,7 +628,7 @@ msgstr "重新命名遠端配置成功"
 msgid "Delete site: %{site_name}"
 msgid "Delete site: %{site_name}"
 msgstr "刪除網站:%{site_name}"
 msgstr "刪除網站:%{site_name}"
 
 
-#: src/views/stream/StreamList.vue:78
+#: src/views/stream/StreamList.vue:82
 msgid "Delete stream: %{stream_name}"
 msgid "Delete stream: %{stream_name}"
 msgstr "刪除 Stream:%{stream_name}"
 msgstr "刪除 Stream:%{stream_name}"
 
 
@@ -653,7 +663,7 @@ msgstr "描述"
 msgid "Destination file already exists"
 msgid "Destination file already exists"
 msgstr ""
 msgstr ""
 
 
-#: src/views/notification/notificationColumns.tsx:51
+#: src/views/notification/notificationColumns.tsx:52
 msgid "Details"
 msgid "Details"
 msgstr "詳細資料"
 msgstr "詳細資料"
 
 
@@ -681,12 +691,8 @@ msgstr ""
 msgid "Directives"
 msgid "Directives"
 msgstr "指令"
 msgstr "指令"
 
 
-#: src/views/config/configColumns.ts:22
-msgid "Directory"
-msgstr "目錄"
-
-#: src/views/site/site_list/SiteList.vue:124
-#: src/views/stream/StreamList.vue:140
+#: src/views/site/site_list/SiteList.vue:125
+#: src/views/stream/StreamList.vue:145
 msgid "Disable"
 msgid "Disable"
 msgstr "停用"
 msgstr "停用"
 
 
@@ -714,19 +720,19 @@ msgstr "成功在 %{node_name} 啟用 %{conf_name}"
 msgid "Disable Site %{site} on %{node} successfully"
 msgid "Disable Site %{site} on %{node} successfully"
 msgstr "成功在 %{node_name} 啟用 %{conf_name}"
 msgstr "成功在 %{node_name} 啟用 %{conf_name}"
 
 
-#: src/views/environment/envColumns.tsx:109
-#: src/views/environment/envColumns.tsx:92
+#: src/views/environment/envColumns.tsx:61
+#: src/views/environment/envColumns.tsx:79
 #: src/views/site/site_edit/SiteEdit.vue:190
 #: src/views/site/site_edit/SiteEdit.vue:190
-#: src/views/site/site_list/columns.tsx:51
-#: src/views/site/site_list/columns.tsx:60 src/views/stream/StreamEdit.vue:175
-#: src/views/stream/StreamList.vue:33 src/views/user/userColumns.tsx:41
+#: src/views/site/site_list/columns.tsx:53
+#: src/views/site/site_list/columns.tsx:62 src/views/stream/StreamEdit.vue:175
+#: src/views/stream/StreamList.vue:34 src/views/user/userColumns.tsx:41
 msgid "Disabled"
 msgid "Disabled"
 msgstr "停用"
 msgstr "停用"
 
 
 #: src/views/site/site_edit/RightSettings.vue:42
 #: src/views/site/site_edit/RightSettings.vue:42
 #: src/views/site/site_list/SiteList.vue:56
 #: src/views/site/site_list/SiteList.vue:56
 #: src/views/stream/components/RightSettings.vue:38
 #: src/views/stream/components/RightSettings.vue:38
-#: src/views/stream/StreamList.vue:67
+#: src/views/stream/StreamList.vue:71
 msgid "Disabled successfully"
 msgid "Disabled successfully"
 msgstr "成功停用"
 msgstr "成功停用"
 
 
@@ -815,7 +821,7 @@ msgstr "下載最新版本錯誤"
 msgid "Downloading latest release"
 msgid "Downloading latest release"
 msgstr "正在下載最新版本"
 msgstr "正在下載最新版本"
 
 
-#: src/views/environment/BatchUpgrader.vue:189 src/views/system/Upgrade.vue:215
+#: src/views/environment/BatchUpgrader.vue:188 src/views/system/Upgrade.vue:215
 msgid "Dry run mode enabled"
 msgid "Dry run mode enabled"
 msgstr "試運轉模式已啟用"
 msgstr "試運轉模式已啟用"
 
 
@@ -826,9 +832,9 @@ msgid ""
 msgstr ""
 msgstr ""
 
 
 #: src/views/site/site_list/SiteDuplicate.vue:72
 #: src/views/site/site_list/SiteDuplicate.vue:72
-#: src/views/site/site_list/SiteList.vue:139
+#: src/views/site/site_list/SiteList.vue:140
 #: src/views/stream/components/StreamDuplicate.vue:121
 #: src/views/stream/components/StreamDuplicate.vue:121
-#: src/views/stream/StreamList.vue:155
+#: src/views/stream/StreamList.vue:160
 msgid "Duplicate"
 msgid "Duplicate"
 msgstr "複製"
 msgstr "複製"
 
 
@@ -878,9 +884,9 @@ msgstr "電子郵件"
 msgid "Email (*)"
 msgid "Email (*)"
 msgstr "電子郵件 (*)"
 msgstr "電子郵件 (*)"
 
 
-#: src/views/site/site_list/SiteList.vue:132
+#: src/views/site/site_list/SiteList.vue:133
 #: src/views/stream/components/Deploy.vue:80
 #: src/views/stream/components/Deploy.vue:80
-#: src/views/stream/StreamList.vue:148
+#: src/views/stream/StreamList.vue:153
 msgid "Enable"
 msgid "Enable"
 msgstr "啟用"
 msgstr "啟用"
 
 
@@ -937,15 +943,15 @@ msgstr "啟用 TLS"
 msgid "Enable TOTP"
 msgid "Enable TOTP"
 msgstr "啟用 TLS"
 msgstr "啟用 TLS"
 
 
-#: src/views/environment/envColumns.tsx:100
-#: src/views/environment/envColumns.tsx:106
+#: src/views/environment/envColumns.tsx:70
+#: src/views/environment/envColumns.tsx:76
 #: src/views/preference/LogrotateSettings.vue:19
 #: src/views/preference/LogrotateSettings.vue:19
 #: src/views/site/site_edit/RightSettings.vue:82
 #: src/views/site/site_edit/RightSettings.vue:82
 #: src/views/site/site_edit/SiteEdit.vue:184
 #: src/views/site/site_edit/SiteEdit.vue:184
-#: src/views/site/site_list/columns.tsx:47
-#: src/views/site/site_list/columns.tsx:59
+#: src/views/site/site_list/columns.tsx:49
+#: src/views/site/site_list/columns.tsx:61
 #: src/views/stream/components/RightSettings.vue:76
 #: src/views/stream/components/RightSettings.vue:76
-#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:29
+#: src/views/stream/StreamEdit.vue:169 src/views/stream/StreamList.vue:30
 #: src/views/user/userColumns.tsx:38
 #: src/views/user/userColumns.tsx:38
 msgid "Enabled"
 msgid "Enabled"
 msgstr "已啟用"
 msgstr "已啟用"
@@ -954,7 +960,7 @@ msgstr "已啟用"
 #: src/views/site/site_list/SiteList.vue:46 src/views/site/SiteAdd.vue:40
 #: src/views/site/site_list/SiteList.vue:46 src/views/site/SiteAdd.vue:40
 #: src/views/stream/components/RightSettings.vue:29
 #: src/views/stream/components/RightSettings.vue:29
 #: src/views/stream/components/StreamDuplicate.vue:93
 #: src/views/stream/components/StreamDuplicate.vue:93
-#: src/views/stream/StreamList.vue:57
+#: src/views/stream/StreamList.vue:61
 msgid "Enabled successfully"
 msgid "Enabled successfully"
 msgstr "成功啟用"
 msgstr "成功啟用"
 
 
@@ -962,15 +968,12 @@ msgstr "成功啟用"
 msgid "Encrypt website with Let's Encrypt"
 msgid "Encrypt website with Let's Encrypt"
 msgstr "用 Let's Encrypt 對網站進行加密"
 msgstr "用 Let's Encrypt 對網站進行加密"
 
 
-#: src/routes/index.ts:234 src/views/environment/Environment.vue:32
-msgid "Environment"
-msgstr "環境"
-
 #: src/language/constants.ts:21
 #: src/language/constants.ts:21
 msgid "Environment variables cleaned"
 msgid "Environment variables cleaned"
 msgstr "環境變數已清理"
 msgstr "環境變數已清理"
 
 
-#: src/views/dashboard/Environments.vue:83
+#: src/routes/index.ts:234 src/views/dashboard/Environments.vue:83
+#: src/views/environment/Environment.vue:33
 msgid "Environments"
 msgid "Environments"
 msgstr "環境"
 msgstr "環境"
 
 
@@ -1012,14 +1015,14 @@ msgstr "啟用 %{msg} 失敗"
 #: src/views/site/site_edit/RightSettings.vue:45
 #: src/views/site/site_edit/RightSettings.vue:45
 #: src/views/site/site_list/SiteList.vue:60
 #: src/views/site/site_list/SiteList.vue:60
 #: src/views/stream/components/RightSettings.vue:41
 #: src/views/stream/components/RightSettings.vue:41
-#: src/views/stream/StreamList.vue:71
+#: src/views/stream/StreamList.vue:75
 msgid "Failed to disable %{msg}"
 msgid "Failed to disable %{msg}"
 msgstr "停用 %{msg} 失敗"
 msgstr "停用 %{msg} 失敗"
 
 
 #: src/views/site/site_edit/RightSettings.vue:36
 #: src/views/site/site_edit/RightSettings.vue:36
 #: src/views/site/site_list/SiteList.vue:50
 #: src/views/site/site_list/SiteList.vue:50
 #: src/views/stream/components/RightSettings.vue:32
 #: src/views/stream/components/RightSettings.vue:32
-#: src/views/stream/StreamList.vue:61
+#: src/views/stream/StreamList.vue:65
 msgid "Failed to enable %{msg}"
 msgid "Failed to enable %{msg}"
 msgstr "啟用 %{msg} 失敗"
 msgstr "啟用 %{msg} 失敗"
 
 
@@ -1040,10 +1043,6 @@ msgstr ""
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgid "Failed to save, syntax error(s) was detected in the configuration."
 msgstr "儲存失敗,在設定中檢測到語法錯誤。"
 msgstr "儲存失敗,在設定中檢測到語法錯誤。"
 
 
-#: src/views/config/configColumns.ts:24
-msgid "File"
-msgstr "檔案"
-
 #: src/language/constants.ts:31
 #: src/language/constants.ts:31
 msgid "File exists"
 msgid "File exists"
 msgstr "檔案已存在"
 msgstr "檔案已存在"
@@ -1103,7 +1102,7 @@ msgstr "產生"
 msgid "Generating private key for registering account"
 msgid "Generating private key for registering account"
 msgstr "產生註冊帳號的私鑰"
 msgstr "產生註冊帳號的私鑰"
 
 
-#: src/views/environment/BatchUpgrader.vue:178 src/views/system/Upgrade.vue:169
+#: src/views/environment/BatchUpgrader.vue:177 src/views/system/Upgrade.vue:169
 msgid "Get release information error"
 msgid "Get release information error"
 msgstr "取得發布資訊錯誤"
 msgstr "取得發布資訊錯誤"
 
 
@@ -1213,7 +1212,7 @@ msgstr "安裝成功"
 msgid "Interval"
 msgid "Interval"
 msgstr "間隔"
 msgstr "間隔"
 
 
-#: src/views/certificate/ACMEUser.vue:128
+#: src/views/certificate/ACMEUser.vue:129
 msgid "Invalid"
 msgid "Invalid"
 msgstr "無效"
 msgstr "無效"
 
 
@@ -1322,7 +1321,7 @@ msgstr "列表"
 msgid "Load Average:"
 msgid "Load Average:"
 msgstr "負載平均值:"
 msgstr "負載平均值:"
 
 
-#: src/views/environment/Environment.vue:37
+#: src/views/environment/Environment.vue:39
 msgid "Load from settings"
 msgid "Load from settings"
 msgstr "從設置加載"
 msgstr "從設置加載"
 
 
@@ -1393,11 +1392,11 @@ msgstr "管理設定"
 msgid "Manage Sites"
 msgid "Manage Sites"
 msgstr "管理網站"
 msgstr "管理網站"
 
 
-#: src/routes/index.ts:89 src/views/stream/StreamList.vue:115
+#: src/routes/index.ts:89 src/views/stream/StreamList.vue:119
 msgid "Manage Streams"
 msgid "Manage Streams"
 msgstr "管理 Stream"
 msgstr "管理 Stream"
 
 
-#: src/routes/index.ts:257 src/views/user/User.vue:9
+#: src/routes/index.ts:257 src/views/user/User.vue:10
 msgid "Manage Users"
 msgid "Manage Users"
 msgstr "管理使用者"
 msgstr "管理使用者"
 
 
@@ -1426,10 +1425,10 @@ msgstr "分鐘"
 msgid "Model"
 msgid "Model"
 msgstr "模型"
 msgstr "模型"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:256
+#: src/components/ChatGPT/ChatGPT.vue:352
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:151
 #: src/components/StdDesign/StdDataDisplay/StdCurd.vue:151
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:498
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:498
-#: src/views/config/ConfigList.vue:158
+#: src/views/config/ConfigList.vue:159
 msgid "Modify"
 msgid "Modify"
 msgstr "修改"
 msgstr "修改"
 
 
@@ -1453,17 +1452,18 @@ msgstr "多行指令"
 #: src/views/certificate/CertificateEditor.vue:160
 #: src/views/certificate/CertificateEditor.vue:160
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/CertificateList/certColumns.tsx:10
 #: src/views/certificate/DNSCredential.vue:11
 #: src/views/certificate/DNSCredential.vue:11
-#: src/views/config/components/Mkdir.vue:64 src/views/config/configColumns.ts:8
-#: src/views/config/ConfigEditor.vue:256 src/views/environment/envColumns.tsx:9
+#: src/views/config/components/Mkdir.vue:64
+#: src/views/config/configColumns.tsx:7 src/views/config/ConfigEditor.vue:256
+#: src/views/environment/envColumns.tsx:9
 #: src/views/preference/components/AddPasskey.vue:75
 #: src/views/preference/components/AddPasskey.vue:75
 #: src/views/site/ngx_conf/NgxUpstream.vue:177
 #: src/views/site/ngx_conf/NgxUpstream.vue:177
 #: src/views/site/site_category/columns.ts:7
 #: src/views/site/site_category/columns.ts:7
 #: src/views/site/site_edit/RightSettings.vue:88
 #: src/views/site/site_edit/RightSettings.vue:88
-#: src/views/site/site_list/columns.tsx:13
+#: src/views/site/site_list/columns.tsx:15
 #: src/views/site/site_list/SiteDuplicate.vue:79
 #: src/views/site/site_list/SiteDuplicate.vue:79
 #: src/views/stream/components/RightSettings.vue:82
 #: src/views/stream/components/RightSettings.vue:82
 #: src/views/stream/components/StreamDuplicate.vue:128
 #: src/views/stream/components/StreamDuplicate.vue:128
-#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:181
+#: src/views/stream/StreamList.vue:13 src/views/stream/StreamList.vue:186
 msgid "Name"
 msgid "Name"
 msgstr "名稱"
 msgstr "名稱"
 
 
@@ -1585,20 +1585,20 @@ msgstr "終端機啟動指令"
 msgid "Nginx restarted successfully"
 msgid "Nginx restarted successfully"
 msgstr "Nginx 重啟成功"
 msgstr "Nginx 重啟成功"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:277
+#: src/components/ChatGPT/ChatGPT.vue:374
 #: src/components/Notification/Notification.vue:128
 #: src/components/Notification/Notification.vue:128
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:63
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:94
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:510
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:510
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:524
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:524
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:538
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:538
-#: src/views/notification/Notification.vue:36
+#: src/views/notification/Notification.vue:37
 #: src/views/preference/AuthSettings.vue:136
 #: src/views/preference/AuthSettings.vue:136
 #: src/views/preference/CertSettings.vue:70
 #: src/views/preference/CertSettings.vue:70
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97
 #: src/views/site/ngx_conf/directive/DirectiveEditorItem.vue:97
 #: src/views/site/ngx_conf/LocationEditor.vue:90
 #: src/views/site/ngx_conf/LocationEditor.vue:90
-#: src/views/site/site_list/SiteList.vue:142
-#: src/views/stream/StreamList.vue:158
+#: src/views/site/site_list/SiteList.vue:143
+#: src/views/stream/StreamList.vue:163
 msgid "No"
 msgid "No"
 msgstr "取消"
 msgstr "取消"
 
 
@@ -1634,7 +1634,7 @@ msgid ""
 "certificates, please synchronize them to the remote nodes in advance."
 "certificates, please synchronize them to the remote nodes in advance."
 msgstr ""
 msgstr ""
 
 
-#: src/views/notification/Notification.vue:27
+#: src/views/notification/Notification.vue:28
 msgid "Notification"
 msgid "Notification"
 msgstr "通知"
 msgstr "通知"
 
 
@@ -1662,7 +1662,7 @@ msgstr "OCSP 必須裝訂可能會導致某些用戶在首次使用 Firefox 訪
 
 
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/components/NodeSelector/NodeSelector.vue:103
 #: src/views/dashboard/Environments.vue:107
 #: src/views/dashboard/Environments.vue:107
-#: src/views/environment/envColumns.tsx:87
+#: src/views/environment/envColumns.tsx:56
 msgid "Offline"
 msgid "Offline"
 msgstr "離線"
 msgstr "離線"
 
 
@@ -1670,23 +1670,23 @@ msgstr "離線"
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:511
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:511
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:525
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:525
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:539
 #: src/components/StdDesign/StdDataDisplay/StdTable.vue:539
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:181
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:188
 msgid "Ok"
 msgid "Ok"
 msgstr "確定"
 msgstr "確定"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:278
+#: src/components/ChatGPT/ChatGPT.vue:375
 #: src/components/Notification/Notification.vue:129
 #: src/components/Notification/Notification.vue:129
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:95
 #: src/components/StdDesign/StdDataDisplay/StdBulkActions.vue:95
-#: src/views/notification/Notification.vue:37
+#: src/views/notification/Notification.vue:38
 #: src/views/site/cert/components/ObtainCert.vue:139
 #: src/views/site/cert/components/ObtainCert.vue:139
 #: src/views/site/ngx_conf/NgxConfigEditor.vue:50
 #: src/views/site/ngx_conf/NgxConfigEditor.vue:50
 #: src/views/site/ngx_conf/NgxServer.vue:79
 #: src/views/site/ngx_conf/NgxServer.vue:79
 #: src/views/site/ngx_conf/NgxUpstream.vue:33
 #: src/views/site/ngx_conf/NgxUpstream.vue:33
 #: src/views/site/site_edit/RightSettings.vue:54
 #: src/views/site/site_edit/RightSettings.vue:54
-#: src/views/site/site_list/SiteList.vue:143
+#: src/views/site/site_list/SiteList.vue:144
 #: src/views/stream/components/Deploy.vue:19
 #: src/views/stream/components/Deploy.vue:19
 #: src/views/stream/components/RightSettings.vue:50
 #: src/views/stream/components/RightSettings.vue:50
-#: src/views/stream/StreamList.vue:159
+#: src/views/stream/StreamList.vue:164
 msgid "OK"
 msgid "OK"
 msgstr "確定"
 msgstr "確定"
 
 
@@ -1697,7 +1697,7 @@ msgstr "驗證完成後,記錄將被刪除。"
 #: src/components/NodeSelector/NodeSelector.vue:83
 #: src/components/NodeSelector/NodeSelector.vue:83
 #: src/components/NodeSelector/NodeSelector.vue:97
 #: src/components/NodeSelector/NodeSelector.vue:97
 #: src/views/dashboard/Environments.vue:100
 #: src/views/dashboard/Environments.vue:100
-#: src/views/environment/envColumns.tsx:83
+#: src/views/environment/envColumns.tsx:52
 msgid "Online"
 msgid "Online"
 msgstr "線上"
 msgstr "線上"
 
 
@@ -1782,7 +1782,7 @@ msgstr ""
 msgid "Payload resource is nil"
 msgid "Payload resource is nil"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/BatchUpgrader.vue:233
+#: src/views/environment/BatchUpgrader.vue:232
 msgid "Perform"
 msgid "Perform"
 msgstr "執行"
 msgstr "執行"
 
 
@@ -1866,7 +1866,7 @@ msgid ""
 "Please note that the unit of time configurations below are all in seconds."
 "Please note that the unit of time configurations below are all in seconds."
 msgstr "請注意,以下時間配置單位均為秒。"
 msgstr "請注意,以下時間配置單位均為秒。"
 
 
-#: src/views/environment/Environment.vue:45
+#: src/views/environment/Environment.vue:48
 #, fuzzy
 #, fuzzy
 msgid "Please select at least one node to upgrade"
 msgid "Please select at least one node to upgrade"
 msgstr "請至少選擇一個節點!"
 msgstr "請至少選擇一個節點!"
@@ -1887,8 +1887,8 @@ msgid "Please upgrade the remote Nginx UI to the latest version"
 msgstr ""
 msgstr ""
 "同步配置 %{cert_name} 到 %{env_name} 失敗,請將遠程 Nginx UI 升級到最新版本"
 "同步配置 %{cert_name} 到 %{env_name} 失敗,請將遠程 Nginx UI 升級到最新版本"
 
 
-#: src/views/environment/BatchUpgrader.vue:168
-#: src/views/environment/BatchUpgrader.vue:221 src/views/system/Upgrade.vue:194
+#: src/views/environment/BatchUpgrader.vue:167
+#: src/views/environment/BatchUpgrader.vue:220 src/views/system/Upgrade.vue:194
 #: src/views/system/Upgrade.vue:245
 #: src/views/system/Upgrade.vue:245
 msgid "Pre-release"
 msgid "Pre-release"
 msgstr "預先發布"
 msgstr "預先發布"
@@ -1966,11 +1966,11 @@ msgstr "恢復碼:"
 msgid "Recursive Nameservers"
 msgid "Recursive Nameservers"
 msgstr "遞迴名稱伺服器"
 msgstr "遞迴名稱伺服器"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:290
+#: src/components/ChatGPT/ChatGPT.vue:387
 msgid "Regenerate response"
 msgid "Regenerate response"
 msgstr "重新產生回應"
 msgstr "重新產生回應"
 
 
-#: src/views/certificate/ACMEUser.vue:136
+#: src/views/certificate/ACMEUser.vue:137
 msgid "Register"
 msgid "Register"
 msgstr "註冊"
 msgstr "註冊"
 
 
@@ -1980,7 +1980,7 @@ msgid ""
 "proxy."
 "proxy."
 msgstr ""
 msgstr ""
 
 
-#: src/views/certificate/ACMEUser.vue:105
+#: src/views/certificate/ACMEUser.vue:106
 msgid "Register failed"
 msgid "Register failed"
 msgstr "註冊失敗"
 msgstr "註冊失敗"
 
 
@@ -1994,7 +1994,7 @@ msgstr "註冊狀態"
 msgid "Register passkey successfully"
 msgid "Register passkey successfully"
 msgstr "註冊成功"
 msgstr "註冊成功"
 
 
-#: src/views/certificate/ACMEUser.vue:103
+#: src/views/certificate/ACMEUser.vue:104
 msgid "Register successfully"
 msgid "Register successfully"
 msgstr "註冊成功"
 msgstr "註冊成功"
 
 
@@ -2002,7 +2002,7 @@ msgstr "註冊成功"
 msgid "Registering user"
 msgid "Registering user"
 msgstr "註冊使用者中"
 msgstr "註冊使用者中"
 
 
-#: src/views/certificate/ACMEUser.vue:119
+#: src/views/certificate/ACMEUser.vue:120
 msgid "Registration Status"
 msgid "Registration Status"
 msgstr "註冊狀態"
 msgstr "註冊狀態"
 
 
@@ -2014,7 +2014,7 @@ msgstr "重新安裝"
 msgid "Release Note"
 msgid "Release Note"
 msgstr "發行公告"
 msgstr "發行公告"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:266
+#: src/components/ChatGPT/ChatGPT.vue:362
 #: src/components/NginxControl/NginxControl.vue:99
 #: src/components/NginxControl/NginxControl.vue:99
 msgid "Reload"
 msgid "Reload"
 msgstr "重新載入"
 msgstr "重新載入"
@@ -2052,7 +2052,7 @@ msgstr "移除成功"
 
 
 #: src/views/config/components/ConfigName.vue:48
 #: src/views/config/components/ConfigName.vue:48
 #: src/views/config/components/Rename.vue:54
 #: src/views/config/components/Rename.vue:54
-#: src/views/config/ConfigList.vue:165
+#: src/views/config/ConfigList.vue:166
 #: src/views/site/ngx_conf/NgxUpstream.vue:125
 #: src/views/site/ngx_conf/NgxUpstream.vue:125
 #: src/views/site/site_edit/components/ConfigName.vue:44
 #: src/views/site/site_edit/components/ConfigName.vue:44
 msgid "Rename"
 msgid "Rename"
@@ -2164,7 +2164,7 @@ msgstr "執行模式"
 msgid "Running"
 msgid "Running"
 msgstr "執行中"
 msgstr "執行中"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:259
+#: src/components/ChatGPT/ChatGPT.vue:355
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:64
 #: src/components/StdDesign/StdDataDisplay/StdBatchEdit.vue:64
 #: src/components/StdDesign/StdDetail/StdDetail.vue:93
 #: src/components/StdDesign/StdDetail/StdDetail.vue:93
 #: src/views/certificate/CertificateEditor.vue:262
 #: src/views/certificate/CertificateEditor.vue:262
@@ -2235,7 +2235,7 @@ msgstr "SDK"
 msgid "Secret has been copied"
 msgid "Secret has been copied"
 msgstr ""
 msgstr ""
 
 
-#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:182
+#: src/components/StdDesign/StdDataEntry/components/StdSelector.vue:189
 msgid "Selector"
 msgid "Selector"
 msgstr "選擇器"
 msgstr "選擇器"
 
 
@@ -2248,10 +2248,6 @@ msgstr ""
 msgid "Send"
 msgid "Send"
 msgstr "傳送"
 msgstr "傳送"
 
 
-#: src/lib/http/index.ts:128
-msgid "Server error"
-msgstr "伺服器錯誤"
-
 #: src/views/dashboard/ServerAnalytic.vue:179
 #: src/views/dashboard/ServerAnalytic.vue:179
 msgid "Server Info"
 msgid "Server Info"
 msgstr "伺服器資訊"
 msgstr "伺服器資訊"
@@ -2268,7 +2264,7 @@ msgstr "必須提供 server_name 參數"
 msgid "ServerIdx out of range"
 msgid "ServerIdx out of range"
 msgstr ""
 msgstr ""
 
 
-#: src/constants/errors/user.ts:9
+#: src/constants/errors/user.ts:11
 #, fuzzy
 #, fuzzy
 msgid "Session not found"
 msgid "Session not found"
 msgstr "找不到檔案"
 msgstr "找不到檔案"
@@ -2370,16 +2366,16 @@ msgstr "SSL 憑證路徑"
 msgid "SSO Login"
 msgid "SSO Login"
 msgstr "SSO 登錄"
 msgstr "SSO 登錄"
 
 
-#: src/views/environment/BatchUpgrader.vue:165
-#: src/views/environment/BatchUpgrader.vue:215 src/views/system/Upgrade.vue:191
+#: src/views/environment/BatchUpgrader.vue:164
+#: src/views/environment/BatchUpgrader.vue:214 src/views/system/Upgrade.vue:191
 #: src/views/system/Upgrade.vue:239
 #: src/views/system/Upgrade.vue:239
 msgid "Stable"
 msgid "Stable"
 msgstr "穩定"
 msgstr "穩定"
 
 
 #: src/views/certificate/ACMEUser.vue:65
 #: src/views/certificate/ACMEUser.vue:65
 #: src/views/certificate/CertificateList/certColumns.tsx:68
 #: src/views/certificate/CertificateList/certColumns.tsx:68
-#: src/views/environment/envColumns.tsx:75
-#: src/views/site/site_list/columns.tsx:40 src/views/stream/StreamList.vue:22
+#: src/views/environment/envColumns.tsx:44
+#: src/views/site/site_list/columns.tsx:42 src/views/stream/StreamList.vue:23
 msgid "Status"
 msgid "Status"
 msgstr "狀態"
 msgstr "狀態"
 
 
@@ -2478,7 +2474,7 @@ msgstr "同步配置錯誤"
 msgid "Sync Config Success"
 msgid "Sync Config Success"
 msgstr "同步配置成功"
 msgstr "同步配置成功"
 
 
-#: src/views/site/site_category/SiteCategory.vue:16
+#: src/views/site/site_category/SiteCategory.vue:17
 #, fuzzy
 #, fuzzy
 msgid "Sync Nodes"
 msgid "Sync Nodes"
 msgstr "同步到"
 msgstr "同步到"
@@ -2657,7 +2653,7 @@ msgstr "模型名稱應僅包含字母、Unicode、數字、連字號、破折
 msgid "This value is already taken"
 msgid "This value is already taken"
 msgstr ""
 msgstr ""
 
 
-#: src/views/environment/BatchUpgrader.vue:183
+#: src/views/environment/BatchUpgrader.vue:182
 msgid ""
 msgid ""
 "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 "This will upgrade or reinstall the Nginx UI on %{nodeNames} to %{version}."
 msgstr "這將在 %{nodeNames} 上升級或重新安裝 Nginx UI 到 %{version}。"
 msgstr "這將在 %{nodeNames} 上升級或重新安裝 Nginx UI 到 %{version}。"
@@ -2735,7 +2731,6 @@ msgid "Two-factor authentication required"
 msgstr "需要多重因素驗證"
 msgstr "需要多重因素驗證"
 
 
 #: src/views/certificate/CertificateList/certColumns.tsx:25
 #: src/views/certificate/CertificateList/certColumns.tsx:25
-#: src/views/config/configColumns.ts:16
 #: src/views/notification/notificationColumns.tsx:9
 #: src/views/notification/notificationColumns.tsx:9
 msgid "Type"
 msgid "Type"
 msgstr "類型"
 msgstr "類型"
@@ -2747,13 +2742,13 @@ msgstr "更新成功"
 
 
 #: src/views/certificate/ACMEUser.vue:88
 #: src/views/certificate/ACMEUser.vue:88
 #: src/views/certificate/DNSCredential.vue:27
 #: src/views/certificate/DNSCredential.vue:27
-#: src/views/config/configColumns.ts:31 src/views/config/ConfigEditor.vue:276
-#: src/views/environment/envColumns.tsx:119
-#: src/views/site/site_category/columns.ts:20
+#: src/views/config/configColumns.tsx:34 src/views/config/ConfigEditor.vue:276
+#: src/views/environment/envColumns.tsx:90
+#: src/views/site/site_category/columns.ts:22
 #: src/views/site/site_edit/RightSettings.vue:100
 #: src/views/site/site_edit/RightSettings.vue:100
-#: src/views/site/site_list/columns.tsx:67
+#: src/views/site/site_list/columns.tsx:69
 #: src/views/stream/components/RightSettings.vue:85
 #: src/views/stream/components/RightSettings.vue:85
-#: src/views/stream/StreamList.vue:41 src/views/user/userColumns.tsx:54
+#: src/views/stream/StreamList.vue:43 src/views/user/userColumns.tsx:54
 msgid "Updated at"
 msgid "Updated at"
 msgstr "更新時間"
 msgstr "更新時間"
 
 
@@ -2761,12 +2756,12 @@ msgstr "更新時間"
 msgid "Updated successfully"
 msgid "Updated successfully"
 msgstr "更新成功"
 msgstr "更新成功"
 
 
-#: src/routes/index.ts:297 src/views/environment/Environment.vue:53
+#: src/routes/index.ts:297 src/views/environment/Environment.vue:56
 #: src/views/system/Upgrade.vue:143 src/views/system/Upgrade.vue:226
 #: src/views/system/Upgrade.vue:143 src/views/system/Upgrade.vue:226
 msgid "Upgrade"
 msgid "Upgrade"
 msgstr "升級"
 msgstr "升級"
 
 
-#: src/views/environment/BatchUpgrader.vue:138
+#: src/views/environment/BatchUpgrader.vue:137
 msgid "Upgraded Nginx UI on %{node} successfully 🎉"
 msgid "Upgraded Nginx UI on %{node} successfully 🎉"
 msgstr "成功升級 %{node} 上的 Nginx UI 🎉"
 msgstr "成功升級 %{node} 上的 Nginx UI 🎉"
 
 
@@ -2774,7 +2769,7 @@ msgstr "成功升級 %{node} 上的 Nginx UI 🎉"
 msgid "Upgraded successfully"
 msgid "Upgraded successfully"
 msgstr "升級成功"
 msgstr "升級成功"
 
 
-#: src/views/environment/BatchUpgrader.vue:89 src/views/system/Upgrade.vue:77
+#: src/views/environment/BatchUpgrader.vue:88 src/views/system/Upgrade.vue:77
 msgid "Upgrading Nginx UI, please wait..."
 msgid "Upgrading Nginx UI, please wait..."
 msgstr "正在升級 Nginx UI,請稍候..."
 msgstr "正在升級 Nginx UI,請稍候..."
 
 
@@ -2786,7 +2781,7 @@ msgstr "Upstream 名稱"
 msgid "Uptime:"
 msgid "Uptime:"
 msgstr "運作時間:"
 msgstr "運作時間:"
 
 
-#: src/views/environment/envColumns.tsx:18
+#: src/views/environment/envColumns.tsx:19
 msgid "URL"
 msgid "URL"
 msgstr "URL"
 msgstr "URL"
 
 
@@ -2798,7 +2793,7 @@ msgstr "使用一次性密碼"
 msgid "Use recovery code"
 msgid "Use recovery code"
 msgstr "使用恢復碼"
 msgstr "使用恢復碼"
 
 
-#: src/components/ChatGPT/ChatGPT.vue:237
+#: src/components/ChatGPT/ChatGPT.vue:333
 msgid "User"
 msgid "User"
 msgstr "使用者名稱"
 msgstr "使用者名稱"
 
 
@@ -2819,13 +2814,13 @@ msgstr "使用者名稱"
 msgid "Username (*)"
 msgid "Username (*)"
 msgstr "使用者名稱 (*)"
 msgstr "使用者名稱 (*)"
 
 
-#: src/views/certificate/ACMEUser.vue:123
+#: src/views/certificate/ACMEUser.vue:124
 #: src/views/certificate/CertificateList/certColumns.tsx:81
 #: src/views/certificate/CertificateList/certColumns.tsx:81
 #: src/views/site/cert/CertInfo.vue:24
 #: src/views/site/cert/CertInfo.vue:24
 msgid "Valid"
 msgid "Valid"
 msgstr "有效"
 msgstr "有效"
 
 
-#: src/views/environment/envColumns.tsx:29
+#: src/views/environment/envColumns.tsx:31
 msgid "Version"
 msgid "Version"
 msgstr "版本"
 msgstr "版本"
 
 
@@ -2926,6 +2921,18 @@ msgstr ""
 msgid "Your passkeys"
 msgid "Your passkeys"
 msgstr ""
 msgstr ""
 
 
+#~ msgid "Directory"
+#~ msgstr "目錄"
+
+#~ msgid "Environment"
+#~ msgstr "環境"
+
+#~ msgid "File"
+#~ msgstr "檔案"
+
+#~ msgid "Server error"
+#~ msgstr "伺服器錯誤"
+
 #~ msgid "Incorrect username or password"
 #~ msgid "Incorrect username or password"
 #~ msgstr "使用者名稱或密碼不正確"
 #~ msgstr "使用者名稱或密碼不正確"
 
 

+ 1 - 1
app/src/lib/http/index.ts

@@ -125,7 +125,7 @@ instance.interceptors.response.use(
         }
         }
       }
       }
       else {
       else {
-        message.error($gettext('Server error'))
+        message.error($gettext(err?.message ?? 'Server error'))
       }
       }
     }
     }
     else {
     else {

+ 47 - 48
go.mod

@@ -17,7 +17,7 @@ require (
 	github.com/go-acme/lego/v4 v4.21.0
 	github.com/go-acme/lego/v4 v4.21.0
 	github.com/go-co-op/gocron/v2 v2.15.0
 	github.com/go-co-op/gocron/v2 v2.15.0
 	github.com/go-playground/validator/v10 v10.24.0
 	github.com/go-playground/validator/v10 v10.24.0
-	github.com/go-resty/resty/v2 v2.16.4
+	github.com/go-resty/resty/v2 v2.16.5
 	github.com/go-webauthn/webauthn v0.11.2
 	github.com/go-webauthn/webauthn v0.11.2
 	github.com/golang-jwt/jwt/v5 v5.2.1
 	github.com/golang-jwt/jwt/v5 v5.2.1
 	github.com/google/uuid v1.6.0
 	github.com/google/uuid v1.6.0
@@ -29,13 +29,13 @@ require (
 	github.com/pkg/errors v0.9.1
 	github.com/pkg/errors v0.9.1
 	github.com/pquerna/otp v1.4.0
 	github.com/pquerna/otp v1.4.0
 	github.com/pretty66/websocketproxy v0.0.0-20220507015215-930b3a686308
 	github.com/pretty66/websocketproxy v0.0.0-20220507015215-930b3a686308
-	github.com/samber/lo v1.47.0
+	github.com/samber/lo v1.49.1
 	github.com/sashabaranov/go-openai v1.36.1
 	github.com/sashabaranov/go-openai v1.36.1
 	github.com/shirou/gopsutil/v4 v4.24.12
 	github.com/shirou/gopsutil/v4 v4.24.12
 	github.com/spf13/cast v1.7.1
 	github.com/spf13/cast v1.7.1
 	github.com/stretchr/testify v1.10.0
 	github.com/stretchr/testify v1.10.0
 	github.com/tufanbarisyildirim/gonginx v0.0.0-20250120210832-12a9c7ae0c8a
 	github.com/tufanbarisyildirim/gonginx v0.0.0-20250120210832-12a9c7ae0c8a
-	github.com/uozi-tech/cosy v1.14.2
+	github.com/uozi-tech/cosy v1.14.3
 	github.com/uozi-tech/cosy-driver-sqlite v0.2.0
 	github.com/uozi-tech/cosy-driver-sqlite v0.2.0
 	go.uber.org/zap v1.27.0
 	go.uber.org/zap v1.27.0
 	golang.org/x/crypto v0.32.0
 	golang.org/x/crypto v0.32.0
@@ -49,7 +49,7 @@ require (
 
 
 require (
 require (
 	aead.dev/minisign v0.3.0 // indirect
 	aead.dev/minisign v0.3.0 // indirect
-	cloud.google.com/go/auth v0.14.0 // indirect
+	cloud.google.com/go/auth v0.14.1 // indirect
 	cloud.google.com/go/auth/oauth2adapt v0.2.7 // indirect
 	cloud.google.com/go/auth/oauth2adapt v0.2.7 // indirect
 	cloud.google.com/go/compute/metadata v0.6.0 // indirect
 	cloud.google.com/go/compute/metadata v0.6.0 // indirect
 	filippo.io/edwards25519 v1.1.0 // indirect
 	filippo.io/edwards25519 v1.1.0 // indirect
@@ -62,52 +62,51 @@ require (
 	github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/privatedns/armprivatedns v1.3.0 // indirect
 	github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/privatedns/armprivatedns v1.3.0 // indirect
 	github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resourcegraph/armresourcegraph v0.9.0 // indirect
 	github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resourcegraph/armresourcegraph v0.9.0 // indirect
 	github.com/Azure/go-autorest v14.2.0+incompatible // indirect
 	github.com/Azure/go-autorest v14.2.0+incompatible // indirect
-	github.com/Azure/go-autorest/autorest v0.11.29 // indirect
+	github.com/Azure/go-autorest/autorest v0.11.30 // indirect
 	github.com/Azure/go-autorest/autorest/adal v0.9.24 // indirect
 	github.com/Azure/go-autorest/autorest/adal v0.9.24 // indirect
 	github.com/Azure/go-autorest/autorest/azure/auth v0.5.13 // indirect
 	github.com/Azure/go-autorest/autorest/azure/auth v0.5.13 // indirect
-	github.com/Azure/go-autorest/autorest/azure/cli v0.4.6 // indirect
-	github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect
-	github.com/Azure/go-autorest/autorest/to v0.4.0 // indirect
-	github.com/Azure/go-autorest/logger v0.2.1 // indirect
-	github.com/Azure/go-autorest/tracing v0.6.0 // indirect
-	github.com/AzureAD/microsoft-authentication-library-for-go v1.3.2 // indirect
+	github.com/Azure/go-autorest/autorest/azure/cli v0.4.7 // indirect
+	github.com/Azure/go-autorest/autorest/date v0.3.1 // indirect
+	github.com/Azure/go-autorest/autorest/to v0.4.1 // indirect
+	github.com/Azure/go-autorest/logger v0.2.2 // indirect
+	github.com/Azure/go-autorest/tracing v0.6.1 // indirect
+	github.com/AzureAD/microsoft-authentication-library-for-go v1.3.3 // indirect
 	github.com/OpenDNS/vegadns2client v0.0.0-20180418235048-a3fa4a771d87 // indirect
 	github.com/OpenDNS/vegadns2client v0.0.0-20180418235048-a3fa4a771d87 // indirect
 	github.com/StackExchange/wmi v1.2.1 // indirect
 	github.com/StackExchange/wmi v1.2.1 // indirect
 	github.com/akamai/AkamaiOPEN-edgegrid-golang v1.2.2 // indirect
 	github.com/akamai/AkamaiOPEN-edgegrid-golang v1.2.2 // indirect
 	github.com/aliyun/alibaba-cloud-sdk-go v1.63.84 // indirect
 	github.com/aliyun/alibaba-cloud-sdk-go v1.63.84 // indirect
-	github.com/aws/aws-sdk-go-v2 v1.33.0 // indirect
-	github.com/aws/aws-sdk-go-v2/config v1.29.1 // indirect
-	github.com/aws/aws-sdk-go-v2/credentials v1.17.54 // indirect
-	github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.24 // indirect
-	github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.28 // indirect
-	github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.28 // indirect
-	github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect
-	github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 // indirect
-	github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.9 // indirect
-	github.com/aws/aws-sdk-go-v2/service/lightsail v1.42.11 // indirect
-	github.com/aws/aws-sdk-go-v2/service/route53 v1.48.2 // indirect
-	github.com/aws/aws-sdk-go-v2/service/sso v1.24.11 // indirect
-	github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.10 // indirect
-	github.com/aws/aws-sdk-go-v2/service/sts v1.33.9 // indirect
+	github.com/aws/aws-sdk-go-v2 v1.35.0 // indirect
+	github.com/aws/aws-sdk-go-v2/config v1.29.3 // indirect
+	github.com/aws/aws-sdk-go-v2/credentials v1.17.56 // indirect
+	github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.26 // indirect
+	github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.30 // indirect
+	github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.30 // indirect
+	github.com/aws/aws-sdk-go-v2/internal/ini v1.8.2 // indirect
+	github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.2 // indirect
+	github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.11 // indirect
+	github.com/aws/aws-sdk-go-v2/service/lightsail v1.42.13 // indirect
+	github.com/aws/aws-sdk-go-v2/service/route53 v1.48.4 // indirect
+	github.com/aws/aws-sdk-go-v2/service/sso v1.24.13 // indirect
+	github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.12 // indirect
+	github.com/aws/aws-sdk-go-v2/service/sts v1.33.11 // indirect
 	github.com/aws/smithy-go v1.22.2 // indirect
 	github.com/aws/smithy-go v1.22.2 // indirect
 	github.com/benbjohnson/clock v1.3.5 // indirect
 	github.com/benbjohnson/clock v1.3.5 // indirect
 	github.com/boombuler/barcode v1.0.2 // indirect
 	github.com/boombuler/barcode v1.0.2 // indirect
 	github.com/bsm/redislock v0.9.4 // indirect
 	github.com/bsm/redislock v0.9.4 // indirect
-	github.com/bytedance/sonic v1.12.7 // indirect
+	github.com/bytedance/sonic v1.12.8 // indirect
 	github.com/bytedance/sonic/loader v0.2.3 // indirect
 	github.com/bytedance/sonic/loader v0.2.3 // indirect
 	github.com/cenkalti/backoff/v4 v4.3.0 // indirect
 	github.com/cenkalti/backoff/v4 v4.3.0 // indirect
 	github.com/cespare/xxhash/v2 v2.3.0 // indirect
 	github.com/cespare/xxhash/v2 v2.3.0 // indirect
 	github.com/civo/civogo v0.3.93 // indirect
 	github.com/civo/civogo v0.3.93 // indirect
-	github.com/cloudflare/cloudflare-go v0.114.0 // indirect
+	github.com/cloudflare/cloudflare-go v0.115.0 // indirect
 	github.com/cloudwego/base64x v0.1.5 // indirect
 	github.com/cloudwego/base64x v0.1.5 // indirect
-	github.com/cloudwego/iasm v0.2.0 // indirect
 	github.com/cpu/goacmedns v0.1.1 // indirect
 	github.com/cpu/goacmedns v0.1.1 // indirect
 	github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
 	github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
 	github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
 	github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
 	github.com/dimchansky/utfbom v1.1.1 // indirect
 	github.com/dimchansky/utfbom v1.1.1 // indirect
 	github.com/dnsimple/dnsimple-go v1.7.0 // indirect
 	github.com/dnsimple/dnsimple-go v1.7.0 // indirect
 	github.com/ebitengine/purego v0.8.2 // indirect
 	github.com/ebitengine/purego v0.8.2 // indirect
-	github.com/exoscale/egoscale/v3 v3.1.8 // indirect
+	github.com/exoscale/egoscale/v3 v3.1.9 // indirect
 	github.com/fatih/structs v1.1.0 // indirect
 	github.com/fatih/structs v1.1.0 // indirect
 	github.com/felixge/httpsnoop v1.0.4 // indirect
 	github.com/felixge/httpsnoop v1.0.4 // indirect
 	github.com/fsnotify/fsnotify v1.8.0 // indirect
 	github.com/fsnotify/fsnotify v1.8.0 // indirect
@@ -126,7 +125,7 @@ require (
 	github.com/go-sql-driver/mysql v1.8.1 // indirect
 	github.com/go-sql-driver/mysql v1.8.1 // indirect
 	github.com/go-viper/mapstructure/v2 v2.2.1 // indirect
 	github.com/go-viper/mapstructure/v2 v2.2.1 // indirect
 	github.com/go-webauthn/x v0.1.16 // indirect
 	github.com/go-webauthn/x v0.1.16 // indirect
-	github.com/goccy/go-json v0.10.4 // indirect
+	github.com/goccy/go-json v0.10.5 // indirect
 	github.com/gofrs/flock v0.12.1 // indirect
 	github.com/gofrs/flock v0.12.1 // indirect
 	github.com/gogo/protobuf v1.3.2 // indirect
 	github.com/gogo/protobuf v1.3.2 // indirect
 	github.com/golang-jwt/jwt/v4 v4.5.1 // indirect
 	github.com/golang-jwt/jwt/v4 v4.5.1 // indirect
@@ -144,7 +143,7 @@ require (
 	github.com/hashicorp/go-retryablehttp v0.7.7 // indirect
 	github.com/hashicorp/go-retryablehttp v0.7.7 // indirect
 	github.com/hashicorp/go-uuid v1.0.3 // indirect
 	github.com/hashicorp/go-uuid v1.0.3 // indirect
 	github.com/hashicorp/hcl v1.0.0 // indirect
 	github.com/hashicorp/hcl v1.0.0 // indirect
-	github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.132 // indirect
+	github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.134 // indirect
 	github.com/iij/doapi v0.0.0-20190504054126-0bbf12d6d7df // indirect
 	github.com/iij/doapi v0.0.0-20190504054126-0bbf12d6d7df // indirect
 	github.com/infobloxopen/infoblox-go-client v1.1.1 // indirect
 	github.com/infobloxopen/infoblox-go-client v1.1.1 // indirect
 	github.com/itchyny/timefmt-go v0.1.6 // indirect
 	github.com/itchyny/timefmt-go v0.1.6 // indirect
@@ -167,7 +166,7 @@ require (
 	github.com/labbsr0x/bindman-dns-webhook v1.0.2 // indirect
 	github.com/labbsr0x/bindman-dns-webhook v1.0.2 // indirect
 	github.com/labbsr0x/goh v1.0.1 // indirect
 	github.com/labbsr0x/goh v1.0.1 // indirect
 	github.com/leodido/go-urn v1.4.0 // indirect
 	github.com/leodido/go-urn v1.4.0 // indirect
-	github.com/linode/linodego v1.46.0 // indirect
+	github.com/linode/linodego v1.47.0 // indirect
 	github.com/liquidweb/liquidweb-cli v0.7.0 // indirect
 	github.com/liquidweb/liquidweb-cli v0.7.0 // indirect
 	github.com/liquidweb/liquidweb-go v1.6.4 // indirect
 	github.com/liquidweb/liquidweb-go v1.6.4 // indirect
 	github.com/lufia/plan9stats v0.0.0-20240909124753-873cd0166683 // indirect
 	github.com/lufia/plan9stats v0.0.0-20240909124753-873cd0166683 // indirect
@@ -175,7 +174,7 @@ require (
 	github.com/mattn/go-colorable v0.1.14 // indirect
 	github.com/mattn/go-colorable v0.1.14 // indirect
 	github.com/mattn/go-isatty v0.0.20 // indirect
 	github.com/mattn/go-isatty v0.0.20 // indirect
 	github.com/mattn/go-sqlite3 v1.14.24 // indirect
 	github.com/mattn/go-sqlite3 v1.14.24 // indirect
-	github.com/miekg/dns v1.1.62 // indirect
+	github.com/miekg/dns v1.1.63 // indirect
 	github.com/mimuret/golang-iij-dpf v0.9.1 // indirect
 	github.com/mimuret/golang-iij-dpf v0.9.1 // indirect
 	github.com/mitchellh/go-homedir v1.1.0 // indirect
 	github.com/mitchellh/go-homedir v1.1.0 // indirect
 	github.com/mitchellh/mapstructure v1.5.0 // indirect
 	github.com/mitchellh/mapstructure v1.5.0 // indirect
@@ -195,7 +194,7 @@ require (
 	github.com/nxadm/tail v1.4.11 // indirect
 	github.com/nxadm/tail v1.4.11 // indirect
 	github.com/nzdjb/go-metaname v1.0.0 // indirect
 	github.com/nzdjb/go-metaname v1.0.0 // indirect
 	github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b // indirect
 	github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b // indirect
-	github.com/oracle/oci-go-sdk/v65 v65.81.3 // indirect
+	github.com/oracle/oci-go-sdk/v65 v65.82.0 // indirect
 	github.com/ovh/go-ovh v1.6.0 // indirect
 	github.com/ovh/go-ovh v1.6.0 // indirect
 	github.com/patrickmn/go-cache v2.1.0+incompatible // indirect
 	github.com/patrickmn/go-cache v2.1.0+incompatible // indirect
 	github.com/pelletier/go-toml/v2 v2.2.3 // indirect
 	github.com/pelletier/go-toml/v2 v2.2.3 // indirect
@@ -212,7 +211,7 @@ require (
 	github.com/sacloud/packages-go v0.0.11 // indirect
 	github.com/sacloud/packages-go v0.0.11 // indirect
 	github.com/sagikazarmark/locafero v0.7.0 // indirect
 	github.com/sagikazarmark/locafero v0.7.0 // indirect
 	github.com/sagikazarmark/slog-shim v0.1.0 // indirect
 	github.com/sagikazarmark/slog-shim v0.1.0 // indirect
-	github.com/scaleway/scaleway-sdk-go v1.0.0-beta.30 // indirect
+	github.com/scaleway/scaleway-sdk-go v1.0.0-beta.31 // indirect
 	github.com/selectel/domains-go v1.1.0 // indirect
 	github.com/selectel/domains-go v1.1.0 // indirect
 	github.com/selectel/go-selvpcclient/v3 v3.2.1 // indirect
 	github.com/selectel/go-selvpcclient/v3 v3.2.1 // indirect
 	github.com/shopspring/decimal v1.4.0 // indirect
 	github.com/shopspring/decimal v1.4.0 // indirect
@@ -224,11 +223,11 @@ require (
 	github.com/sony/sonyflake v1.2.0 // indirect
 	github.com/sony/sonyflake v1.2.0 // indirect
 	github.com/sourcegraph/conc v0.3.0 // indirect
 	github.com/sourcegraph/conc v0.3.0 // indirect
 	github.com/spf13/afero v1.12.0 // indirect
 	github.com/spf13/afero v1.12.0 // indirect
-	github.com/spf13/pflag v1.0.5 // indirect
+	github.com/spf13/pflag v1.0.6 // indirect
 	github.com/spf13/viper v1.19.0 // indirect
 	github.com/spf13/viper v1.19.0 // indirect
 	github.com/subosito/gotenv v1.6.0 // indirect
 	github.com/subosito/gotenv v1.6.0 // indirect
-	github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1088 // indirect
-	github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.1088 // indirect
+	github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1090 // indirect
+	github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.1090 // indirect
 	github.com/tjfoc/gmsm v1.4.1 // indirect
 	github.com/tjfoc/gmsm v1.4.1 // indirect
 	github.com/tklauser/go-sysconf v0.3.14 // indirect
 	github.com/tklauser/go-sysconf v0.3.14 // indirect
 	github.com/tklauser/numcpus v0.9.0 // indirect
 	github.com/tklauser/numcpus v0.9.0 // indirect
@@ -239,11 +238,11 @@ require (
 	github.com/uozi-tech/cosy-driver-mysql v0.2.2 // indirect
 	github.com/uozi-tech/cosy-driver-mysql v0.2.2 // indirect
 	github.com/uozi-tech/cosy-driver-postgres v0.2.1 // indirect
 	github.com/uozi-tech/cosy-driver-postgres v0.2.1 // indirect
 	github.com/vinyldns/go-vinyldns v0.9.16 // indirect
 	github.com/vinyldns/go-vinyldns v0.9.16 // indirect
-	github.com/volcengine/volc-sdk-golang v1.0.193 // indirect
+	github.com/volcengine/volc-sdk-golang v1.0.194 // indirect
 	github.com/vultr/govultr/v3 v3.14.1 // indirect
 	github.com/vultr/govultr/v3 v3.14.1 // indirect
 	github.com/x448/float16 v0.8.4 // indirect
 	github.com/x448/float16 v0.8.4 // indirect
-	github.com/yandex-cloud/go-genproto v0.0.0-20241220122821-aeb3b05efd1c // indirect
-	github.com/yandex-cloud/go-sdk v0.0.0-20241220131134-2393e243c134 // indirect
+	github.com/yandex-cloud/go-genproto v0.0.0-20250127124313-5be1a2cc06d4 // indirect
+	github.com/yandex-cloud/go-sdk v0.0.0-20250127132311-016f84adc072 // indirect
 	github.com/yusufpapurcu/wmi v1.2.4 // indirect
 	github.com/yusufpapurcu/wmi v1.2.4 // indirect
 	go.mongodb.org/mongo-driver v1.17.2 // indirect
 	go.mongodb.org/mongo-driver v1.17.2 // indirect
 	go.opentelemetry.io/auto/sdk v1.1.0 // indirect
 	go.opentelemetry.io/auto/sdk v1.1.0 // indirect
@@ -255,7 +254,7 @@ require (
 	go.uber.org/multierr v1.11.0 // indirect
 	go.uber.org/multierr v1.11.0 // indirect
 	go.uber.org/ratelimit v0.3.1 // indirect
 	go.uber.org/ratelimit v0.3.1 // indirect
 	golang.org/x/arch v0.13.0 // indirect
 	golang.org/x/arch v0.13.0 // indirect
-	golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8 // indirect
+	golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c // indirect
 	golang.org/x/mod v0.22.0 // indirect
 	golang.org/x/mod v0.22.0 // indirect
 	golang.org/x/oauth2 v0.25.0 // indirect
 	golang.org/x/oauth2 v0.25.0 // indirect
 	golang.org/x/sync v0.10.0 // indirect
 	golang.org/x/sync v0.10.0 // indirect
@@ -263,12 +262,12 @@ require (
 	golang.org/x/text v0.21.0 // indirect
 	golang.org/x/text v0.21.0 // indirect
 	golang.org/x/time v0.9.0 // indirect
 	golang.org/x/time v0.9.0 // indirect
 	golang.org/x/tools v0.29.0 // indirect
 	golang.org/x/tools v0.29.0 // indirect
-	google.golang.org/api v0.218.0 // indirect
-	google.golang.org/genproto v0.0.0-20250122153221-138b5a5a4fd4 // indirect
-	google.golang.org/genproto/googleapis/api v0.0.0-20250122153221-138b5a5a4fd4 // indirect
-	google.golang.org/genproto/googleapis/rpc v0.0.0-20250122153221-138b5a5a4fd4 // indirect
-	google.golang.org/grpc v1.69.4 // indirect
-	google.golang.org/protobuf v1.36.3 // indirect
+	google.golang.org/api v0.219.0 // indirect
+	google.golang.org/genproto v0.0.0-20250127172529-29210b9bc287 // indirect
+	google.golang.org/genproto/googleapis/api v0.0.0-20250127172529-29210b9bc287 // indirect
+	google.golang.org/genproto/googleapis/rpc v0.0.0-20250127172529-29210b9bc287 // indirect
+	google.golang.org/grpc v1.70.0 // indirect
+	google.golang.org/protobuf v1.36.4 // indirect
 	gopkg.in/fsnotify.v1 v1.4.7 // indirect
 	gopkg.in/fsnotify.v1 v1.4.7 // indirect
 	gopkg.in/guregu/null.v4 v4.0.0 // indirect
 	gopkg.in/guregu/null.v4 v4.0.0 // indirect
 	gopkg.in/inf.v0 v0.9.1 // indirect
 	gopkg.in/inf.v0 v0.9.1 // indirect

+ 101 - 334
go.sum

@@ -39,8 +39,6 @@ cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRY
 cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM=
 cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM=
 cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I=
 cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I=
 cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY=
 cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY=
-cloud.google.com/go v0.118.0 h1:tvZe1mgqRxpiVa3XlIGMiPcEUbP1gNXELgD4y/IXmeQ=
-cloud.google.com/go v0.118.0/go.mod h1:zIt2pkedt/mo+DQjcT4/L3NDxzHPR29j5HcclNH+9PM=
 cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4=
 cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4=
 cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw=
 cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw=
 cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E=
 cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E=
@@ -102,14 +100,8 @@ cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVo
 cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo=
 cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo=
 cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0=
 cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0=
 cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E=
 cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E=
-cloud.google.com/go/auth v0.12.1 h1:n2Bj25BUMM0nvE9D2XLTiImanwZhO3DkfWSYS/SAJP4=
-cloud.google.com/go/auth v0.12.1/go.mod h1:BFMu+TNpF3DmvfBO9ClqTR/SiqVIm7LukKF9mbendF4=
-cloud.google.com/go/auth v0.13.0 h1:8Fu8TZy167JkW8Tj3q7dIkr2v4cndv41ouecJx0PAHs=
-cloud.google.com/go/auth v0.13.0/go.mod h1:COOjD9gwfKNKz+IIduatIhYJQIc0mG3H102r/EMxX6Q=
-cloud.google.com/go/auth v0.14.0 h1:A5C4dKV/Spdvxcl0ggWwWEzzP7AZMJSEIgrkngwhGYM=
-cloud.google.com/go/auth v0.14.0/go.mod h1:CYsoRL1PdiDuqeQpZE0bP2pnPrGqFcOkI0nldEQis+A=
-cloud.google.com/go/auth/oauth2adapt v0.2.6 h1:V6a6XDu2lTwPZWOawrAa9HUK+DB2zfJyTuciBG5hFkU=
-cloud.google.com/go/auth/oauth2adapt v0.2.6/go.mod h1:AlmsELtlEBnaNTL7jCj8VQFLy6mbZv0s4Q7NGBeQ5E8=
+cloud.google.com/go/auth v0.14.1 h1:AwoJbzUdxA/whv1qj3TLKwh3XX5sikny2fc40wUl+h0=
+cloud.google.com/go/auth v0.14.1/go.mod h1:4JHUxlGXisL0AW8kXPtUF6ztuOksyfUQNFjfsOCXkPM=
 cloud.google.com/go/auth/oauth2adapt v0.2.7 h1:/Lc7xODdqcEw8IrZ9SvwnlLX6j9FHQM74z6cBk9Rw6M=
 cloud.google.com/go/auth/oauth2adapt v0.2.7 h1:/Lc7xODdqcEw8IrZ9SvwnlLX6j9FHQM74z6cBk9Rw6M=
 cloud.google.com/go/auth/oauth2adapt v0.2.7/go.mod h1:NTbTTzfvPl1Y3V1nPpOgl2w6d/FjO7NNUQaWSox6ZMc=
 cloud.google.com/go/auth/oauth2adapt v0.2.7/go.mod h1:NTbTTzfvPl1Y3V1nPpOgl2w6d/FjO7NNUQaWSox6ZMc=
 cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0=
 cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0=
@@ -186,8 +178,6 @@ cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvj
 cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA=
 cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA=
 cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs=
 cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs=
 cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU=
 cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU=
-cloud.google.com/go/compute v1.31.1 h1:SObuy8Fs6woazArpXp1fsHCw+ZH4iJ/8dGGTxUhHZQA=
-cloud.google.com/go/compute v1.31.1/go.mod h1:hyOponWhXviDptJCJSoEh89XO1cfv616wbwbkde1/+8=
 cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU=
 cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU=
 cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k=
 cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k=
 cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM=
 cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM=
@@ -622,17 +612,12 @@ github.com/AdamSLevy/jsonrpc2/v14 v14.1.0 h1:Dy3M9aegiI7d7PF1LUdjbVigJReo+QOceYs
 github.com/AdamSLevy/jsonrpc2/v14 v14.1.0/go.mod h1:ZakZtbCXxCz82NJvq7MoREtiQesnDfrtF6RFUGzQfLo=
 github.com/AdamSLevy/jsonrpc2/v14 v14.1.0/go.mod h1:ZakZtbCXxCz82NJvq7MoREtiQesnDfrtF6RFUGzQfLo=
 github.com/Azure/azure-sdk-for-go v68.0.0+incompatible h1:fcYLmCpyNYRnvJbPerq7U0hS+6+I79yEDJBqVNcqUzU=
 github.com/Azure/azure-sdk-for-go v68.0.0+incompatible h1:fcYLmCpyNYRnvJbPerq7U0hS+6+I79yEDJBqVNcqUzU=
 github.com/Azure/azure-sdk-for-go v68.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
 github.com/Azure/azure-sdk-for-go v68.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
-github.com/Azure/azure-sdk-for-go/sdk/azcore v1.16.0 h1:JZg6HRh6W6U4OLl6lk7BZ7BLisIzM9dG1R50zUk9C/M=
-github.com/Azure/azure-sdk-for-go/sdk/azcore v1.16.0/go.mod h1:YL1xnZ6QejvQHWJrX/AvhFl4WW4rqHVoKspWNVwFk0M=
 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 h1:g0EZJwz7xkXQiZAI5xi9f3WWFYBlX1CPTrR+NDToRkQ=
 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 h1:g0EZJwz7xkXQiZAI5xi9f3WWFYBlX1CPTrR+NDToRkQ=
 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0/go.mod h1:XCW7KnZet0Opnr7HccfUw1PLc4CjHqpcaxW8DHklNkQ=
 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0/go.mod h1:XCW7KnZet0Opnr7HccfUw1PLc4CjHqpcaxW8DHklNkQ=
-github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.0 h1:B/dfvscEQtew9dVuoxqxrUKKv8Ih2f55PydknDamU+g=
-github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.0/go.mod h1:fiPSssYvltE08HJchL04dOy+RD4hgrjph0cwGGMntdI=
 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.1 h1:1mvYtZfWQAnwNah/C+Z+Jb9rQH95LPE2vlmMuWAHJk8=
 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.1 h1:1mvYtZfWQAnwNah/C+Z+Jb9rQH95LPE2vlmMuWAHJk8=
 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.1/go.mod h1:75I/mXtme1JyWFtz8GocPHVFyH421IBoZErnO16dd0k=
 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.1/go.mod h1:75I/mXtme1JyWFtz8GocPHVFyH421IBoZErnO16dd0k=
-github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.0 h1:+m0M/LFxN43KvULkDNfdXOgrjtg6UYJPFBJyuEcRCAw=
-github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.0/go.mod h1:PwOyop78lveYMRs6oCxjiVyBdyCgIYH6XHIVZO9/SFQ=
 github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.1 h1:Bk5uOhSAenHyR5P61D/NzeQCv+4fEVV8mOkJ82NqpWw=
 github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.1 h1:Bk5uOhSAenHyR5P61D/NzeQCv+4fEVV8mOkJ82NqpWw=
+github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.1/go.mod h1:QZ4pw3or1WPmRBxf0cHd1tknzrT54WPBOQoGutCPvSU=
 github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 h1:ywEEhmNahHBihViHepv3xPBn1663uRv2t2q/ESv9seY=
 github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 h1:ywEEhmNahHBihViHepv3xPBn1663uRv2t2q/ESv9seY=
 github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0/go.mod h1:iZDifYGJTIgIIkYRNWPENUnqx6bJ2xnSDFI2tjwZNuY=
 github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0/go.mod h1:iZDifYGJTIgIIkYRNWPENUnqx6bJ2xnSDFI2tjwZNuY=
 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/dns/armdns v1.2.0 h1:lpOxwrQ919lCZoNCd69rVt8u1eLZuMORrGXqy8sNf3c=
 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/dns/armdns v1.2.0 h1:lpOxwrQ919lCZoNCd69rVt8u1eLZuMORrGXqy8sNf3c=
@@ -648,31 +633,35 @@ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.
 github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs=
 github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs=
 github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
 github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
 github.com/Azure/go-autorest/autorest v0.11.28/go.mod h1:MrkzG3Y3AH668QyF9KRk5neJnGgmhQ6krbhR8Q5eMvA=
 github.com/Azure/go-autorest/autorest v0.11.28/go.mod h1:MrkzG3Y3AH668QyF9KRk5neJnGgmhQ6krbhR8Q5eMvA=
-github.com/Azure/go-autorest/autorest v0.11.29 h1:I4+HL/JDvErx2LjyzaVxllw2lRDB5/BT2Bm4g20iqYw=
-github.com/Azure/go-autorest/autorest v0.11.29/go.mod h1:ZtEzC4Jy2JDrZLxvWs8LrBWEBycl1hbT1eknI8MtfAs=
+github.com/Azure/go-autorest/autorest v0.11.30 h1:iaZ1RGz/ALZtN5eq4Nr1SOFSlf2E4pDI3Tcsl+dZPVE=
+github.com/Azure/go-autorest/autorest v0.11.30/go.mod h1:t1kpPIOpIVX7annvothKvb0stsrXa37i7b+xpmBW8Fs=
 github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ=
 github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ=
 github.com/Azure/go-autorest/autorest/adal v0.9.22/go.mod h1:XuAbAEUv2Tta//+voMI038TrJBqjKam0me7qR+L8Cmk=
 github.com/Azure/go-autorest/autorest/adal v0.9.22/go.mod h1:XuAbAEUv2Tta//+voMI038TrJBqjKam0me7qR+L8Cmk=
 github.com/Azure/go-autorest/autorest/adal v0.9.24 h1:BHZfgGsGwdkHDyZdtQRQk1WeUdW0m2WPAwuHZwUi5i4=
 github.com/Azure/go-autorest/autorest/adal v0.9.24 h1:BHZfgGsGwdkHDyZdtQRQk1WeUdW0m2WPAwuHZwUi5i4=
 github.com/Azure/go-autorest/autorest/adal v0.9.24/go.mod h1:7T1+g0PYFmACYW5LlG2fcoPiPlFHjClyRGL7dRlP5c8=
 github.com/Azure/go-autorest/autorest/adal v0.9.24/go.mod h1:7T1+g0PYFmACYW5LlG2fcoPiPlFHjClyRGL7dRlP5c8=
 github.com/Azure/go-autorest/autorest/azure/auth v0.5.13 h1:Ov8avRZi2vmrE2JcXw+tu5K/yB41r7xK9GZDiBF7NdM=
 github.com/Azure/go-autorest/autorest/azure/auth v0.5.13 h1:Ov8avRZi2vmrE2JcXw+tu5K/yB41r7xK9GZDiBF7NdM=
 github.com/Azure/go-autorest/autorest/azure/auth v0.5.13/go.mod h1:5BAVfWLWXihP47vYrPuBKKf4cS0bXI+KM9Qx6ETDJYo=
 github.com/Azure/go-autorest/autorest/azure/auth v0.5.13/go.mod h1:5BAVfWLWXihP47vYrPuBKKf4cS0bXI+KM9Qx6ETDJYo=
-github.com/Azure/go-autorest/autorest/azure/cli v0.4.6 h1:w77/uPk80ZET2F+AfQExZyEWtn+0Rk/uw17m9fv5Ajc=
 github.com/Azure/go-autorest/autorest/azure/cli v0.4.6/go.mod h1:piCfgPho7BiIDdEQ1+g4VmKyD5y+p/XtSNqE6Hc4QD0=
 github.com/Azure/go-autorest/autorest/azure/cli v0.4.6/go.mod h1:piCfgPho7BiIDdEQ1+g4VmKyD5y+p/XtSNqE6Hc4QD0=
-github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw=
+github.com/Azure/go-autorest/autorest/azure/cli v0.4.7 h1:Q9R3utmFg9K1B4OYtAZ7ZUUvIUdzQt7G2MN5Hi/d670=
+github.com/Azure/go-autorest/autorest/azure/cli v0.4.7/go.mod h1:bVrAueELJ0CKLBpUHDIvD516TwmHmzqwCpvONWRsw3s=
 github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74=
 github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74=
+github.com/Azure/go-autorest/autorest/date v0.3.1 h1:o9Z8Jyt+VJJTCZ/UORishuHOusBwolhjokt9s5k8I4w=
+github.com/Azure/go-autorest/autorest/date v0.3.1/go.mod h1:Dz/RDmXlfiFFS/eW+b/xMUSFs1tboPVy6UjgADToWDM=
 github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
 github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
 github.com/Azure/go-autorest/autorest/mocks v0.4.2 h1:PGN4EDXnuQbojHbU0UWoNvmu9AGVwYHG9/fkDYhtAfw=
 github.com/Azure/go-autorest/autorest/mocks v0.4.2 h1:PGN4EDXnuQbojHbU0UWoNvmu9AGVwYHG9/fkDYhtAfw=
 github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU=
 github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU=
-github.com/Azure/go-autorest/autorest/to v0.4.0 h1:oXVqrxakqqV1UZdSazDOPOLvOIz+XA683u8EctwboHk=
-github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcPR4o9jEImooCeWJcYV/zLE=
-github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg=
+github.com/Azure/go-autorest/autorest/to v0.4.1 h1:CxNHBqdzTr7rLtdrtb5CMjJcDut+WNGCVv7OmS5+lTc=
+github.com/Azure/go-autorest/autorest/to v0.4.1/go.mod h1:EtaofgU4zmtvn1zT2ARsjRFdq9vXx0YWtmElwL+GZ9M=
 github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8=
 github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8=
-github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo=
+github.com/Azure/go-autorest/logger v0.2.2 h1:hYqBsEBywrrOSW24kkOCXRcKfKhK76OzLTfF+MYDE2o=
+github.com/Azure/go-autorest/logger v0.2.2/go.mod h1:I5fg9K52o+iuydlWfa9T5K6WFos9XYr9dYTFzpqgibw=
 github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
 github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
+github.com/Azure/go-autorest/tracing v0.6.1 h1:YUMSrC/CeD1ZnnXcNYU4a/fzsO35u2Fsful9L/2nyR0=
+github.com/Azure/go-autorest/tracing v0.6.1/go.mod h1:/3EgjbsjraOqiicERAeu3m7/z0x1TzjQGAwDrJrXGkc=
 github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1 h1:WJTmL004Abzc5wDB5VtZG2PJk5ndYDgVacGqfirKxjM=
 github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1 h1:WJTmL004Abzc5wDB5VtZG2PJk5ndYDgVacGqfirKxjM=
 github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1/go.mod h1:tCcJZ0uHAmvjsVYzEFivsRTN00oz5BEsRgQHu5JZ9WE=
 github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1/go.mod h1:tCcJZ0uHAmvjsVYzEFivsRTN00oz5BEsRgQHu5JZ9WE=
-github.com/AzureAD/microsoft-authentication-library-for-go v1.3.2 h1:kYRSnvJju5gYVyhkij+RTJ/VR6QIUaCfWeaFm2ycsjQ=
-github.com/AzureAD/microsoft-authentication-library-for-go v1.3.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
+github.com/AzureAD/microsoft-authentication-library-for-go v1.3.3 h1:H5xDQaE3XowWfhZRUpnfC+rGZMEVoSiji+b+/HFAPU4=
+github.com/AzureAD/microsoft-authentication-library-for-go v1.3.3/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
 github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
 github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0=
 github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0=
@@ -707,10 +696,6 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy
 github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
 github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
-github.com/aliyun/alibaba-cloud-sdk-go v1.63.68 h1:sH/iUpPkYJ2Wba6GyJQH8yd6P7qGcbK4N/o9Gl7Ep24=
-github.com/aliyun/alibaba-cloud-sdk-go v1.63.68/go.mod h1:SOSDHfe1kX91v3W5QiBsWSLqeLxImobbMX1mxrFHsVQ=
-github.com/aliyun/alibaba-cloud-sdk-go v1.63.72 h1:HvFZUzEbNvfe8F2Mg0wBGv90bPhWDxgVtDHR5zoBOU0=
-github.com/aliyun/alibaba-cloud-sdk-go v1.63.72/go.mod h1:SOSDHfe1kX91v3W5QiBsWSLqeLxImobbMX1mxrFHsVQ=
 github.com/aliyun/alibaba-cloud-sdk-go v1.63.84 h1:8IpC2i1mtsuUt13cbZtVCtQRSjzuMvLiDrbOJcaS+Z4=
 github.com/aliyun/alibaba-cloud-sdk-go v1.63.84 h1:8IpC2i1mtsuUt13cbZtVCtQRSjzuMvLiDrbOJcaS+Z4=
 github.com/aliyun/alibaba-cloud-sdk-go v1.63.84/go.mod h1:SOSDHfe1kX91v3W5QiBsWSLqeLxImobbMX1mxrFHsVQ=
 github.com/aliyun/alibaba-cloud-sdk-go v1.63.84/go.mod h1:SOSDHfe1kX91v3W5QiBsWSLqeLxImobbMX1mxrFHsVQ=
 github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
 github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
@@ -727,86 +712,36 @@ github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgI
 github.com/avast/retry-go v3.0.0+incompatible/go.mod h1:XtSnn+n/sHqQIpZ10K1qAevBhOOCWBLXXy3hyiqqBrY=
 github.com/avast/retry-go v3.0.0+incompatible/go.mod h1:XtSnn+n/sHqQIpZ10K1qAevBhOOCWBLXXy3hyiqqBrY=
 github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q=
 github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q=
 github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4=
 github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4=
-github.com/aws/aws-sdk-go-v2 v1.32.6 h1:7BokKRgRPuGmKkFMhEg/jSul+tB9VvXhcViILtfG8b4=
-github.com/aws/aws-sdk-go-v2 v1.32.6/go.mod h1:P5WJBrYqqbWVaOxgH0X/FYYD47/nooaPOZPlQdmiN2U=
-github.com/aws/aws-sdk-go-v2 v1.32.7 h1:ky5o35oENWi0JYWUZkB7WYvVPP+bcRF5/Iq7JWSb5Rw=
-github.com/aws/aws-sdk-go-v2 v1.32.7/go.mod h1:P5WJBrYqqbWVaOxgH0X/FYYD47/nooaPOZPlQdmiN2U=
-github.com/aws/aws-sdk-go-v2 v1.33.0 h1:Evgm4DI9imD81V0WwD+TN4DCwjUMdc94TrduMLbgZJs=
-github.com/aws/aws-sdk-go-v2 v1.33.0/go.mod h1:P5WJBrYqqbWVaOxgH0X/FYYD47/nooaPOZPlQdmiN2U=
-github.com/aws/aws-sdk-go-v2/config v1.28.6 h1:D89IKtGrs/I3QXOLNTH93NJYtDhm8SYa9Q5CsPShmyo=
-github.com/aws/aws-sdk-go-v2/config v1.28.6/go.mod h1:GDzxJ5wyyFSCoLkS+UhGB0dArhb9mI+Co4dHtoTxbko=
-github.com/aws/aws-sdk-go-v2/config v1.28.7 h1:GduUnoTXlhkgnxTD93g1nv4tVPILbdNQOzav+Wpg7AE=
-github.com/aws/aws-sdk-go-v2/config v1.28.7/go.mod h1:vZGX6GVkIE8uECSUHB6MWAUsd4ZcG2Yq/dMa4refR3M=
-github.com/aws/aws-sdk-go-v2/config v1.29.1 h1:JZhGawAyZ/EuJeBtbQYnaoftczcb2drR2Iq36Wgz4sQ=
-github.com/aws/aws-sdk-go-v2/config v1.29.1/go.mod h1:7bR2YD5euaxBhzt2y/oDkt3uNRb6tjFp98GlTFueRwk=
-github.com/aws/aws-sdk-go-v2/credentials v1.17.47 h1:48bA+3/fCdi2yAwVt+3COvmatZ6jUDNkDTIsqDiMUdw=
-github.com/aws/aws-sdk-go-v2/credentials v1.17.47/go.mod h1:+KdckOejLW3Ks3b0E3b5rHsr2f9yuORBum0WPnE5o5w=
-github.com/aws/aws-sdk-go-v2/credentials v1.17.48 h1:IYdLD1qTJ0zanRavulofmqut4afs45mOWEI+MzZtTfQ=
-github.com/aws/aws-sdk-go-v2/credentials v1.17.48/go.mod h1:tOscxHN3CGmuX9idQ3+qbkzrjVIx32lqDSU1/0d/qXs=
-github.com/aws/aws-sdk-go-v2/credentials v1.17.54 h1:4UmqeOqJPvdvASZWrKlhzpRahAulBfyTJQUaYy4+hEI=
-github.com/aws/aws-sdk-go-v2/credentials v1.17.54/go.mod h1:RTdfo0P0hbbTxIhmQrOsC/PquBZGabEPnCaxxKRPSnI=
-github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.21 h1:AmoU1pziydclFT/xRV+xXE/Vb8fttJCLRPv8oAkprc0=
-github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.21/go.mod h1:AjUdLYe4Tgs6kpH4Bv7uMZo7pottoyHMn4eTcIcneaY=
-github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.22 h1:kqOrpojG71DxJm/KDPO+Z/y1phm1JlC8/iT+5XRmAn8=
-github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.22/go.mod h1:NtSFajXVVL8TA2QNngagVZmUtXciyrHOt7xgz4faS/M=
-github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.24 h1:5grmdTdMsovn9kPZPI23Hhvp0ZyNm5cRO+IZFIYiAfw=
-github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.24/go.mod h1:zqi7TVKTswH3Ozq28PkmBmgzG1tona7mo9G2IJg4Cis=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.25 h1:s/fF4+yDQDoElYhfIVvSNyeCydfbuTKzhxSXDXCPasU=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.25/go.mod h1:IgPfDv5jqFIzQSNbUEMoitNooSMXjRSDkhXv8jiROvU=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.26 h1:I/5wmGMffY4happ8NOCuIUEWGUvvFp5NSeQcXl9RHcI=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.26/go.mod h1:FR8f4turZtNy6baO0KJ5FJUmXH/cSkI9fOngs0yl6mA=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.28 h1:igORFSiH3bfq4lxKFkTSYDhJEUCYo6C8VKiWJjYwQuQ=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.28/go.mod h1:3So8EA/aAYm36L7XIvCVwLa0s5N0P7o2b1oqnx/2R4g=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.25 h1:ZntTCl5EsYnhN/IygQEUugpdwbhdkom9uHcbCftiGgA=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.25/go.mod h1:DBdPrgeocww+CSl1C8cEV8PN1mHMBhuCDLpXezyvWkE=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.26 h1:zXFLuEuMMUOvEARXFUVJdfqZ4bvvSgdGRq/ATcrQxzM=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.26/go.mod h1:3o2Wpy0bogG1kyOPrgkXA8pgIfEEv0+m19O9D5+W8y8=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.28 h1:1mOW9zAUMhTSrMDssEHS/ajx8JcAj/IcftzcmNlmVLI=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.28/go.mod h1:kGlXVIWDfvt2Ox5zEaNglmq0hXPHgQFNMix33Tw22jA=
-github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ=
-github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc=
+github.com/aws/aws-sdk-go-v2 v1.35.0 h1:jTPxEJyzjSuuz0wB+302hr8Eu9KUI+Zv8zlujMGJpVI=
+github.com/aws/aws-sdk-go-v2 v1.35.0/go.mod h1:JgstGg0JjWU1KpVJjD5H0y0yyAIpSdKEq556EI6yOOM=
+github.com/aws/aws-sdk-go-v2/config v1.29.3 h1:a5Ucjxe6iV+LHEBmYA9w40rT5aGxWybx/4l/O/fvJlE=
+github.com/aws/aws-sdk-go-v2/config v1.29.3/go.mod h1:pt9z1x12zDiDb4iFLrxoeAKLVCU/Gp9DL/5BnwlY77o=
+github.com/aws/aws-sdk-go-v2/credentials v1.17.56 h1:JKMBreKudV+ozx6rZJLvEtiexv48aEdhdC7mXUw9MLs=
+github.com/aws/aws-sdk-go-v2/credentials v1.17.56/go.mod h1:S3xRjIHD8HHFgMTz4L56q/7IldfNtGL9JjH/vP3U6DA=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.26 h1:XMBqBEuZLf8yxtH+mU/uUDyQbN4iD/xv9h6he2+lzhw=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.26/go.mod h1:d0+wQ/3CYGPuHEfBTPpQdfUX7gjk0/Lxs5Q6KzdEGY8=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.30 h1:+7AzSGNhHoY53di13lvztf9Dyd/9ofzoYGBllkWp3a0=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.30/go.mod h1:Jxd/FrCny99yURiQiMywgXvBhd7tmgdv6KdlUTNzMSo=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.30 h1:Ex06eY6I5rO7IX0HalGfa5nGjpBoOsS1Qm3xfjkuszs=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.30/go.mod h1:AvyEMA9QcX59kFhVizBpIBpEMThUTXssuJe+emBdcGM=
+github.com/aws/aws-sdk-go-v2/internal/ini v1.8.2 h1:Pg9URiobXy85kgFev3og2CuOZ8JZUBENF+dcgWBaYNk=
+github.com/aws/aws-sdk-go-v2/internal/ini v1.8.2/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc=
 github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o=
 github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o=
-github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 h1:iXtILhvDxB6kPvEXgsDhGaZCSC6LQET5ZHSdJozeI0Y=
-github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1/go.mod h1:9nu0fVANtYiAePIBh2/pFUSwtJ402hLnp854CNoDOeE=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.6 h1:50+XsN70RS7dwJ2CkVNXzj7U2L1HKP8nqTd3XWEXBN4=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.6/go.mod h1:WqgLmwY7so32kG01zD8CPTJWVWM+TzJoOVHwTg4aPug=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.7 h1:8eUsivBQzZHqe/3FE+cqwfH+0p5Jo8PFM/QYQSmeZ+M=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.7/go.mod h1:kLPQvGUmxn/fqiCrDeohwG33bq2pQpGeY62yRO6Nrh0=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.9 h1:TQmKDyETFGiXVhZfQ/I0cCFziqqX58pi4tKJGYGFSz0=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.9/go.mod h1:HVLPK2iHQBUx7HfZeOQSEu3v2ubZaAY2YPbAm5/WUyY=
-github.com/aws/aws-sdk-go-v2/service/lightsail v1.42.7 h1:pVO3tnwny+c+XIfNkmrReAkNd4Gyy7TVvro1ZTfzY4g=
-github.com/aws/aws-sdk-go-v2/service/lightsail v1.42.7/go.mod h1:yveTbfkp9hhabgl3aXbd2/AvWCgJRi0O+mhm3REyvE8=
-github.com/aws/aws-sdk-go-v2/service/lightsail v1.42.8 h1:+lmJoqxuUoPlSfGk5JYQQivd9YFjUvRZR6RPY+Wcx48=
-github.com/aws/aws-sdk-go-v2/service/lightsail v1.42.8/go.mod h1:Gg8/myP4+rgRi4+j9gQdbOEnMtwMAUUIeXo+nKCFVj8=
-github.com/aws/aws-sdk-go-v2/service/lightsail v1.42.11 h1:pDuq54cxK34VSVWdK4RNbyWn/AB78sUqXFpuwKp8BCM=
-github.com/aws/aws-sdk-go-v2/service/lightsail v1.42.11/go.mod h1:UIgmS/dicuAwwgEbzEbpyXiPxMW5bU3yvxtZJmNuxFQ=
-github.com/aws/aws-sdk-go-v2/service/route53 v1.46.3 h1:pDBrvz7CMK381q5U+nPqtSQZZid5z1XH8lsI6kHNcSY=
-github.com/aws/aws-sdk-go-v2/service/route53 v1.46.3/go.mod h1:rDMeB13C/RS0/zw68RQD4LLiWChf5tZBKjEQmjtHa/c=
-github.com/aws/aws-sdk-go-v2/service/route53 v1.46.4 h1:0jMtawybbfpFEIMy4wvfyW2Z4YLr7mnuzT0fhR67Nrc=
-github.com/aws/aws-sdk-go-v2/service/route53 v1.46.4/go.mod h1:xlMODgumb0Pp8bzfpojqelDrf8SL9rb5ovwmwKJl+oU=
-github.com/aws/aws-sdk-go-v2/service/route53 v1.48.2 h1:Rxg1R0CHxVb9ggQLufOkr4an3yFEkTDN+N5+LFU4aEg=
-github.com/aws/aws-sdk-go-v2/service/route53 v1.48.2/go.mod h1:TN4PcCL0lvqmYcv+AV8iZFC4Sd0FM06QDaoBXrFEftU=
-github.com/aws/aws-sdk-go-v2/service/sso v1.24.7 h1:rLnYAfXQ3YAccocshIH5mzNNwZBkBo+bP6EhIxak6Hw=
-github.com/aws/aws-sdk-go-v2/service/sso v1.24.7/go.mod h1:ZHtuQJ6t9A/+YDuxOLnbryAmITtr8UysSny3qcyvJTc=
-github.com/aws/aws-sdk-go-v2/service/sso v1.24.8 h1:CvuUmnXI7ebaUAhbJcDy9YQx8wHR69eZ9I7q5hszt/g=
-github.com/aws/aws-sdk-go-v2/service/sso v1.24.8/go.mod h1:XDeGv1opzwm8ubxddF0cgqkZWsyOtw4lr6dxwmb6YQg=
-github.com/aws/aws-sdk-go-v2/service/sso v1.24.11 h1:kuIyu4fTT38Kj7YCC7ouNbVZSSpqkZ+LzIfhCr6Dg+I=
-github.com/aws/aws-sdk-go-v2/service/sso v1.24.11/go.mod h1:Ro744S4fKiCCuZECXgOi760TiYylUM8ZBf6OGiZzJtY=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.6 h1:JnhTZR3PiYDNKlXy50/pNeix9aGMo6lLpXwJ1mw8MD4=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.6/go.mod h1:URronUEGfXZN1VpdktPSD1EkAL9mfrV+2F4sjH38qOY=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.7 h1:F2rBfNAL5UyswqoeWv9zs74N/NanhK16ydHW1pahX6E=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.7/go.mod h1:JfyQ0g2JG8+Krq0EuZNnRwX0mU0HrwY/tG6JNfcqh4k=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.10 h1:l+dgv/64iVlQ3WsBbnn+JSbkj01jIi+SM0wYsj3y/hY=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.10/go.mod h1:Fzsj6lZEb8AkTE5S68OhcbBqeWPsR8RnGuKPr8Todl8=
-github.com/aws/aws-sdk-go-v2/service/sts v1.33.2 h1:s4074ZO1Hk8qv65GqNXqDjmkf4HSQqJukaLuuW0TpDA=
-github.com/aws/aws-sdk-go-v2/service/sts v1.33.2/go.mod h1:mVggCnIWoM09jP71Wh+ea7+5gAp53q+49wDFs1SW5z8=
-github.com/aws/aws-sdk-go-v2/service/sts v1.33.3 h1:Xgv/hyNgvLda/M9l9qxXc4UFSgppnRczLxlMs5Ae/QY=
-github.com/aws/aws-sdk-go-v2/service/sts v1.33.3/go.mod h1:5Gn+d+VaaRgsjewpMvGazt0WfcFO+Md4wLOuBfGR9Bc=
-github.com/aws/aws-sdk-go-v2/service/sts v1.33.9 h1:BRVDbewN6VZcwr+FBOszDKvYeXY1kJ+GGMCcpghlw0U=
-github.com/aws/aws-sdk-go-v2/service/sts v1.33.9/go.mod h1:f6vjfZER1M17Fokn0IzssOTMT2N8ZSq+7jnNF0tArvw=
+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.2 h1:D4oz8/CzT9bAEYtVhSBmFj2dNOtaHOtMKc2vHBwYizA=
+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.2/go.mod h1:Za3IHqTQ+yNcRHxu1OFucBh0ACZT4j4VQFF0BqpZcLY=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.11 h1:5JKQ2J3BBW4ovy6A/5Lwx9SpA6IzgH8jB3bquGZ1NUw=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.11/go.mod h1:VShCk7rfCzK/b9U1aSkzLwcOoaDlYna16482QqEavis=
+github.com/aws/aws-sdk-go-v2/service/lightsail v1.42.13 h1:yukUijkcclShNo3QXry+udZDyDQOy8siCjqNfpRKuf8=
+github.com/aws/aws-sdk-go-v2/service/lightsail v1.42.13/go.mod h1:Ka+a4bm2nmtvk+Ql1K2Bmr7MrJCs8qz4UDmaLQs1daY=
+github.com/aws/aws-sdk-go-v2/service/route53 v1.48.4 h1:qajhoD/ElVskbXAJfgljClGj7DGME0uoDGUMVjFTkNs=
+github.com/aws/aws-sdk-go-v2/service/route53 v1.48.4/go.mod h1:kDfNqSNtcqB8aNUJClykJ+xLILNoYAaUIo72A2uR73Y=
+github.com/aws/aws-sdk-go-v2/service/sso v1.24.13 h1:q4pOAKxypbFoUJzOpgo939bF50qb4DgYshiDfcsdN0M=
+github.com/aws/aws-sdk-go-v2/service/sso v1.24.13/go.mod h1:G/0PTg7+vQT42ictQGjJhixzTcVZtHFvrN/OeTXrRfQ=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.12 h1:4sGSGshSSfO1vrcXruPick3ioSf8nhhD6nuB2ni37P4=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.12/go.mod h1:NHpu/pLOelViA4qxkAFH10VLqh+XeLhZfXDaFyMVgSs=
+github.com/aws/aws-sdk-go-v2/service/sts v1.33.11 h1:RIXOjp7Dp4siCYJRwBHUcBdVgOWflSJGlq4ZhMI5Ta0=
+github.com/aws/aws-sdk-go-v2/service/sts v1.33.11/go.mod h1:ZR17k9bPKPR8u0IkyA6xVsjr56doNQ4ZB1fs7abYBfE=
 github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E=
 github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E=
-github.com/aws/smithy-go v1.22.1 h1:/HPHZQ0g7f4eUeK6HKglFz8uwVfZKgoI25rb/J+dnro=
-github.com/aws/smithy-go v1.22.1/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg=
 github.com/aws/smithy-go v1.22.2 h1:6D9hW43xKFrRx/tXXfAlIZc4JI+yQe6snnWcQyxSyLQ=
 github.com/aws/smithy-go v1.22.2 h1:6D9hW43xKFrRx/tXXfAlIZc4JI+yQe6snnWcQyxSyLQ=
 github.com/aws/smithy-go v1.22.2/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg=
 github.com/aws/smithy-go v1.22.2/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg=
 github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
 github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
@@ -828,23 +763,13 @@ github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA=
 github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0=
 github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0=
 github.com/bsm/redislock v0.9.4 h1:X/Wse1DPpiQgHbVYRE9zv6m070UcKoOGekgvpNhiSvw=
 github.com/bsm/redislock v0.9.4 h1:X/Wse1DPpiQgHbVYRE9zv6m070UcKoOGekgvpNhiSvw=
 github.com/bsm/redislock v0.9.4/go.mod h1:Epf7AJLiSFwLCiZcfi6pWFO/8eAYrYpQXFxEDPoDeAk=
 github.com/bsm/redislock v0.9.4/go.mod h1:Epf7AJLiSFwLCiZcfi6pWFO/8eAYrYpQXFxEDPoDeAk=
-github.com/bytedance/sonic v1.12.5 h1:hoZxY8uW+mT+OpkcUWw4k0fDINtOcVavEsGfzwzFU/w=
-github.com/bytedance/sonic v1.12.5/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk=
-github.com/bytedance/sonic v1.12.6 h1:/isNmCUF2x3Sh8RAp/4mh4ZGkcFAX/hLrzrK3AvpRzk=
-github.com/bytedance/sonic v1.12.6/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk=
-github.com/bytedance/sonic v1.12.7 h1:CQU8pxOy9HToxhndH0Kx/S1qU/CuS9GnKYrGioDcU1Q=
-github.com/bytedance/sonic v1.12.7/go.mod h1:tnbal4mxOMju17EGfknm2XyYcpyCnIROYOEYuemj13I=
+github.com/bytedance/sonic v1.12.8 h1:4xYRVRlXIgvSZ4e8iVTlMF5szgpXd4AfvuWgA8I8lgs=
+github.com/bytedance/sonic v1.12.8/go.mod h1:uVvFidNmlt9+wa31S1urfwwthTWteBgG0hWuoKAXTx8=
 github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
 github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
-github.com/bytedance/sonic/loader v0.2.1 h1:1GgorWTqf12TA8mma4DDSbaQigE2wOgQo7iCjjJv3+E=
-github.com/bytedance/sonic/loader v0.2.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
 github.com/bytedance/sonic/loader v0.2.3 h1:yctD0Q3v2NOGfSWPLPvG2ggA2kV6TS6s4wioyEqssH0=
 github.com/bytedance/sonic/loader v0.2.3 h1:yctD0Q3v2NOGfSWPLPvG2ggA2kV6TS6s4wioyEqssH0=
 github.com/bytedance/sonic/loader v0.2.3/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI=
 github.com/bytedance/sonic/loader v0.2.3/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI=
 github.com/c-bata/go-prompt v0.2.5/go.mod h1:vFnjEGDIIA/Lib7giyE4E9c50Lvl8j0S+7FVlAwDAVw=
 github.com/c-bata/go-prompt v0.2.5/go.mod h1:vFnjEGDIIA/Lib7giyE4E9c50Lvl8j0S+7FVlAwDAVw=
 github.com/c-bata/go-prompt v0.2.6/go.mod h1:/LMAke8wD2FsNu9EXNdHxNLbd9MedkPnCdfpU9wwHfY=
 github.com/c-bata/go-prompt v0.2.6/go.mod h1:/LMAke8wD2FsNu9EXNdHxNLbd9MedkPnCdfpU9wwHfY=
-github.com/caarlos0/env/v11 v11.2.2 h1:95fApNrUyueipoZN/EhA8mMxiNxrBwDa+oAZrMWl3Kg=
-github.com/caarlos0/env/v11 v11.2.2/go.mod h1:JBfcdeQiBoI3Zh1QRAWfe+tpiNTmDtcCj/hHHHMx0vc=
-github.com/caarlos0/env/v11 v11.3.0 h1:CVTN6W6+twFC1jHKUwsw9eOTEiFpzyJOSA2AyHa8uvw=
-github.com/caarlos0/env/v11 v11.3.0/go.mod h1:Q5lYHeOsgY20CCV/R+b50Jwg2MnjySid7+3FUBz2BJw=
 github.com/caarlos0/env/v11 v11.3.1 h1:cArPWC15hWmEt+gWk7YBi7lEXTXCvpaSdCiZE2X5mCA=
 github.com/caarlos0/env/v11 v11.3.1 h1:cArPWC15hWmEt+gWk7YBi7lEXTXCvpaSdCiZE2X5mCA=
 github.com/caarlos0/env/v11 v11.3.1/go.mod h1:qupehSf/Y0TUTsxKywqRt/vJjN5nz6vauiYEUUr8P4U=
 github.com/caarlos0/env/v11 v11.3.1/go.mod h1:qupehSf/Y0TUTsxKywqRt/vJjN5nz6vauiYEUUr8P4U=
 github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg=
 github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg=
@@ -857,7 +782,6 @@ github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyY
 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
 github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
 github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
 github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw=
 github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw=
-github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
 github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
 github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
 github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
 github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
 github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
 github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
@@ -869,23 +793,14 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P
 github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
 github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
 github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag=
 github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag=
 github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
 github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
-github.com/civo/civogo v0.3.89 h1:g+I4NGVa5t0L2Z9+QbnEAqxE/3OCDUYvepje3oUkKVo=
-github.com/civo/civogo v0.3.89/go.mod h1:7UCYX+qeeJbrG55E1huv+0ySxcHTqq/26FcHLVelQJM=
 github.com/civo/civogo v0.3.93 h1:wxzMamDKYu2lszObvx92tTFDpi0sCJbDO+CL3cR/P28=
 github.com/civo/civogo v0.3.93 h1:wxzMamDKYu2lszObvx92tTFDpi0sCJbDO+CL3cR/P28=
 github.com/civo/civogo v0.3.93/go.mod h1:7UCYX+qeeJbrG55E1huv+0ySxcHTqq/26FcHLVelQJM=
 github.com/civo/civogo v0.3.93/go.mod h1:7UCYX+qeeJbrG55E1huv+0ySxcHTqq/26FcHLVelQJM=
 github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng=
 github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cloudflare/cloudflare-go v0.111.0 h1:bFgl5OyR7iaV9DkTaoI2jU8X4rXDzEaFDaPfMTp+Ewo=
-github.com/cloudflare/cloudflare-go v0.111.0/go.mod h1:w5c4Vm00JjZM+W0mPi6QOC+eWLncGQPURtgDck3z5xU=
-github.com/cloudflare/cloudflare-go v0.112.0 h1:caFwqXdGJCl3rjVMgbPEn8iCYAg9JsRYV3dIVQE5d7g=
-github.com/cloudflare/cloudflare-go v0.112.0/go.mod h1:QB55kuJ5ZTeLNFcLJePfMuBilhu/LDKpLBmKFQIoSZ0=
-github.com/cloudflare/cloudflare-go v0.114.0 h1:ucoti4/7Exo0XQ+rzpn1H+IfVVe++zgiM+tyKtf0HUA=
-github.com/cloudflare/cloudflare-go v0.114.0/go.mod h1:O7fYfFfA6wKqKFn2QIR9lhj7FDw6VQCGOY6hd2TBtd0=
-github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y=
-github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
+github.com/cloudflare/cloudflare-go v0.115.0 h1:84/dxeeXweCc0PN5Cto44iTA8AkG1fyT11yPO5ZB7sM=
+github.com/cloudflare/cloudflare-go v0.115.0/go.mod h1:Ds6urDwn/TF2uIU24mu7H91xkKP8gSAHxQ44DSZgVmU=
 github.com/cloudwego/base64x v0.1.5 h1:XPciSp1xaq2VCSt6lF0phncD4koWyULpl5bUxbfCyP4=
 github.com/cloudwego/base64x v0.1.5 h1:XPciSp1xaq2VCSt6lF0phncD4koWyULpl5bUxbfCyP4=
 github.com/cloudwego/base64x v0.1.5/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
 github.com/cloudwego/base64x v0.1.5/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
-github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg=
 github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
 github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
 github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
 github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
 github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
 github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
@@ -921,8 +836,6 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/dgraph-io/ristretto/v2 v2.0.1 h1:7W0LfEP+USCmtrUjJsk+Jv2jbhJmb72N4yRI7GrLdMI=
-github.com/dgraph-io/ristretto/v2 v2.0.1/go.mod h1:K7caLeufSdxm+ITp1n/73U+VbFVAHrexfLbz4n14hpo=
 github.com/dgraph-io/ristretto/v2 v2.1.0 h1:59LjpOJLNDULHh8MC4UaegN52lC4JnO2dITsie/Pa8I=
 github.com/dgraph-io/ristretto/v2 v2.1.0 h1:59LjpOJLNDULHh8MC4UaegN52lC4JnO2dITsie/Pa8I=
 github.com/dgraph-io/ristretto/v2 v2.1.0/go.mod h1:uejeqfYXpUomfse0+lO+13ATz4TypQYLJZzBSAemuB4=
 github.com/dgraph-io/ristretto/v2 v2.1.0/go.mod h1:uejeqfYXpUomfse0+lO+13ATz4TypQYLJZzBSAemuB4=
 github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
 github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
@@ -943,13 +856,9 @@ github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5m
 github.com/eapache/go-resiliency v1.2.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
 github.com/eapache/go-resiliency v1.2.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
 github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
 github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
 github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
 github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
-github.com/ebitengine/purego v0.8.1 h1:sdRKd6plj7KYW33EH5As6YKfe8m9zbN9JMrOjNVF/BE=
-github.com/ebitengine/purego v0.8.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
 github.com/ebitengine/purego v0.8.2 h1:jPPGWs2sZ1UgOSgD2bClL0MJIqu58nOmIcBuXr62z1I=
 github.com/ebitengine/purego v0.8.2 h1:jPPGWs2sZ1UgOSgD2bClL0MJIqu58nOmIcBuXr62z1I=
 github.com/ebitengine/purego v0.8.2/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
 github.com/ebitengine/purego v0.8.2/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ=
 github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
 github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
-github.com/elliotchance/orderedmap/v3 v3.0.0 h1:Yay/tDjX+vzza+Drcoo8VEbuBnOYGpgenCXWcpQSFDg=
-github.com/elliotchance/orderedmap/v3 v3.0.0/go.mod h1:G+Hc2RwaZvJMcS4JpGCOyViCnGeKf0bTYCGTO4uhjSo=
 github.com/elliotchance/orderedmap/v3 v3.1.0 h1:j4DJ5ObEmMBt/lcwIecKcoRxIQUEnw0L804lXYDt/pg=
 github.com/elliotchance/orderedmap/v3 v3.1.0 h1:j4DJ5ObEmMBt/lcwIecKcoRxIQUEnw0L804lXYDt/pg=
 github.com/elliotchance/orderedmap/v3 v3.1.0/go.mod h1:G+Hc2RwaZvJMcS4JpGCOyViCnGeKf0bTYCGTO4uhjSo=
 github.com/elliotchance/orderedmap/v3 v3.1.0/go.mod h1:G+Hc2RwaZvJMcS4JpGCOyViCnGeKf0bTYCGTO4uhjSo=
 github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
@@ -967,10 +876,8 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7
 github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo=
 github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo=
 github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w=
 github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w=
 github.com/envoyproxy/protoc-gen-validate v0.10.0/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss=
 github.com/envoyproxy/protoc-gen-validate v0.10.0/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss=
-github.com/exoscale/egoscale/v3 v3.1.7 h1:Q6p9tOVY0IiOW0fUpaPQWY7ggGEuSPZLAGxFgDd2sCE=
-github.com/exoscale/egoscale/v3 v3.1.7/go.mod h1:GHKucK/J26v8PGWztGdhxWNMjrjG9PbelxKCJ4YI11Q=
-github.com/exoscale/egoscale/v3 v3.1.8 h1:LrZ7cAk3Wum9ZncKR1gRPpXsdvCoQb7KoUi3+ZxSTvY=
-github.com/exoscale/egoscale/v3 v3.1.8/go.mod h1:t9+MpSEam94na48O/xgvvPFpQPRiwZ3kBN4/UuQtKco=
+github.com/exoscale/egoscale/v3 v3.1.9 h1:kC876X4GKsojoqzJtq/MxNG91ebrDVEM9Ro+XOL7Yts=
+github.com/exoscale/egoscale/v3 v3.1.9/go.mod h1:t9+MpSEam94na48O/xgvvPFpQPRiwZ3kBN4/UuQtKco=
 github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
 github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
 github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
 github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
 github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM=
 github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM=
@@ -998,35 +905,19 @@ github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/
 github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
 github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
 github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
 github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
 github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
 github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
-github.com/gabriel-vasile/mimetype v1.4.7 h1:SKFKl7kD0RiPdbht0s7hFtjl489WcQ1VyPW8ZzUMYCA=
-github.com/gabriel-vasile/mimetype v1.4.7/go.mod h1:GDlAgAyIRT27BhFl53XNAFtfjzOkLaF35JdEG0P7LtU=
 github.com/gabriel-vasile/mimetype v1.4.8 h1:FfZ3gj38NjllZIeJAmMhr+qKL8Wu+nOoI3GqacKw1NM=
 github.com/gabriel-vasile/mimetype v1.4.8 h1:FfZ3gj38NjllZIeJAmMhr+qKL8Wu+nOoI3GqacKw1NM=
 github.com/gabriel-vasile/mimetype v1.4.8/go.mod h1:ByKUIKGjh1ODkGM1asKUbQZOLGrPjydw3hYPU2YU9t8=
 github.com/gabriel-vasile/mimetype v1.4.8/go.mod h1:ByKUIKGjh1ODkGM1asKUbQZOLGrPjydw3hYPU2YU9t8=
 github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
 github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
 github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
 github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
-github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
-github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
 github.com/gin-contrib/sse v1.0.0 h1:y3bT1mUWUxDpW4JLQg/HnTqV4rozuW4tC9eFKTxYI9E=
 github.com/gin-contrib/sse v1.0.0 h1:y3bT1mUWUxDpW4JLQg/HnTqV4rozuW4tC9eFKTxYI9E=
 github.com/gin-contrib/sse v1.0.0/go.mod h1:zNuFdwarAygJBht0NTKiSi3jRf6RbqeILZ9Sp6Slhe0=
 github.com/gin-contrib/sse v1.0.0/go.mod h1:zNuFdwarAygJBht0NTKiSi3jRf6RbqeILZ9Sp6Slhe0=
-github.com/gin-contrib/static v1.1.2 h1:c3kT4bFkUJn2aoRU3s6XnMjJT8J6nNWJkR0NglqmlZ4=
-github.com/gin-contrib/static v1.1.2/go.mod h1:Fw90ozjHCmZBWbgrsqrDvO28YbhKEKzKp8GixhR4yLw=
 github.com/gin-contrib/static v1.1.3 h1:WLOpkBtMDJ3gATFZgNJyVibFMio/UHonnueqJsQ0w4U=
 github.com/gin-contrib/static v1.1.3 h1:WLOpkBtMDJ3gATFZgNJyVibFMio/UHonnueqJsQ0w4U=
 github.com/gin-contrib/static v1.1.3/go.mod h1:zejpJ/YWp8cZj/6EpiL5f/+skv5daQTNwRx1E8Pci30=
 github.com/gin-contrib/static v1.1.3/go.mod h1:zejpJ/YWp8cZj/6EpiL5f/+skv5daQTNwRx1E8Pci30=
 github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU=
 github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU=
 github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y=
 github.com/gin-gonic/gin v1.10.0/go.mod h1:4PMNQiOhvDRa013RKVbsiNwoyezlm2rm0uX/T7kzp5Y=
-github.com/go-acme/lego/v4 v4.20.4 h1:yCQGBX9jOfMbriEQUocdYm7EBapdTp8nLXYG8k6SqSU=
-github.com/go-acme/lego/v4 v4.20.4/go.mod h1:foauPlhnhoq8WUphaWx5U04uDc+JGhk4ZZtPz/Vqsjg=
 github.com/go-acme/lego/v4 v4.21.0 h1:arEW+8o5p7VI8Bk1kr/PDlgD1DrxtTH1gJ4b7mehL8o=
 github.com/go-acme/lego/v4 v4.21.0 h1:arEW+8o5p7VI8Bk1kr/PDlgD1DrxtTH1gJ4b7mehL8o=
 github.com/go-acme/lego/v4 v4.21.0/go.mod h1:HrSWzm3Ckj45Ie3i+p1zKVobbQoMOaGu9m4up0dUeDI=
 github.com/go-acme/lego/v4 v4.21.0/go.mod h1:HrSWzm3Ckj45Ie3i+p1zKVobbQoMOaGu9m4up0dUeDI=
 github.com/go-cmd/cmd v1.0.5/go.mod h1:y8q8qlK5wQibcw63djSl/ntiHUHXHGdCkPk0j4QeW4s=
 github.com/go-cmd/cmd v1.0.5/go.mod h1:y8q8qlK5wQibcw63djSl/ntiHUHXHGdCkPk0j4QeW4s=
-github.com/go-co-op/gocron/v2 v2.13.0 h1:iGU/RoZvf4GF5hIZUkDSFvvajk9K3W4YgocarBol/ME=
-github.com/go-co-op/gocron/v2 v2.13.0/go.mod h1:ZF70ZwEqz0OO4RBXE1sNxnANy/zvwLcattWEFsqpKig=
-github.com/go-co-op/gocron/v2 v2.14.0 h1:bWPJeIdd4ioqiEpLLD1BVSTrtae7WABhX/WaVJbKVqg=
-github.com/go-co-op/gocron/v2 v2.14.0/go.mod h1:ZF70ZwEqz0OO4RBXE1sNxnANy/zvwLcattWEFsqpKig=
-github.com/go-co-op/gocron/v2 v2.14.1 h1:bwWMkX2rNfS6RqBmUAfkDuOPKl/BRCRCrmuAv8flrOQ=
-github.com/go-co-op/gocron/v2 v2.14.1/go.mod h1:ZF70ZwEqz0OO4RBXE1sNxnANy/zvwLcattWEFsqpKig=
-github.com/go-co-op/gocron/v2 v2.14.2 h1:S6CbI7MVfD3S/aPJNLoSg2YcGyEqzEMwUopDejuT4Oc=
-github.com/go-co-op/gocron/v2 v2.14.2/go.mod h1:ZF70ZwEqz0OO4RBXE1sNxnANy/zvwLcattWEFsqpKig=
 github.com/go-co-op/gocron/v2 v2.15.0 h1:Kpvo71VSihE+RImmpA+3ta5CcMhoRzMGw4dJawrj4zo=
 github.com/go-co-op/gocron/v2 v2.15.0 h1:Kpvo71VSihE+RImmpA+3ta5CcMhoRzMGw4dJawrj4zo=
 github.com/go-co-op/gocron/v2 v2.15.0/go.mod h1:ZF70ZwEqz0OO4RBXE1sNxnANy/zvwLcattWEFsqpKig=
 github.com/go-co-op/gocron/v2 v2.15.0/go.mod h1:ZF70ZwEqz0OO4RBXE1sNxnANy/zvwLcattWEFsqpKig=
 github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
 github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
@@ -1073,16 +964,10 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o
 github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
 github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
 github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
 github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
 github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
 github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
-github.com/go-playground/validator/v10 v10.23.0 h1:/PwmTwZhS0dPkav3cdK9kV1FsAmrL8sThn8IHr/sO+o=
-github.com/go-playground/validator/v10 v10.23.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM=
 github.com/go-playground/validator/v10 v10.24.0 h1:KHQckvo8G6hlWnrPX4NJJ+aBfWNAE/HH+qdL2cBpCmg=
 github.com/go-playground/validator/v10 v10.24.0 h1:KHQckvo8G6hlWnrPX4NJJ+aBfWNAE/HH+qdL2cBpCmg=
 github.com/go-playground/validator/v10 v10.24.0/go.mod h1:GGzBIJMuE98Ic/kJsBXbz1x/7cByt++cQ+YOuDM5wus=
 github.com/go-playground/validator/v10 v10.24.0/go.mod h1:GGzBIJMuE98Ic/kJsBXbz1x/7cByt++cQ+YOuDM5wus=
-github.com/go-resty/resty/v2 v2.16.2 h1:CpRqTjIzq/rweXUt9+GxzzQdlkqMdt8Lm/fuK/CAbAg=
-github.com/go-resty/resty/v2 v2.16.2/go.mod h1:0fHAoK7JoBy/Ch36N8VFeMsK7xQOHhvWaC3iOktwmIU=
-github.com/go-resty/resty/v2 v2.16.3 h1:zacNT7lt4b8M/io2Ahj6yPypL7bqx9n1iprfQuodV+E=
-github.com/go-resty/resty/v2 v2.16.3/go.mod h1:hkJtXbA2iKHzJheXYvQ8snQES5ZLGKMwQ07xAwp/fiA=
-github.com/go-resty/resty/v2 v2.16.4 h1:81IjtszQKwbz7dot4LLYGwhJNUsNwECD2O7nru5q60E=
-github.com/go-resty/resty/v2 v2.16.4/go.mod h1:hkJtXbA2iKHzJheXYvQ8snQES5ZLGKMwQ07xAwp/fiA=
+github.com/go-resty/resty/v2 v2.16.5 h1:hBKqmWrr7uRc3euHVqmh1HTHcKn99Smr7o5spptdhTM=
+github.com/go-resty/resty/v2 v2.16.5/go.mod h1:hkJtXbA2iKHzJheXYvQ8snQES5ZLGKMwQ07xAwp/fiA=
 github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
 github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
 github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
 github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
 github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
 github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
@@ -1095,16 +980,14 @@ github.com/go-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIx
 github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
 github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
 github.com/go-webauthn/webauthn v0.11.2 h1:Fgx0/wlmkClTKlnOsdOQ+K5HcHDsDcYIvtYmfhEOSUc=
 github.com/go-webauthn/webauthn v0.11.2 h1:Fgx0/wlmkClTKlnOsdOQ+K5HcHDsDcYIvtYmfhEOSUc=
 github.com/go-webauthn/webauthn v0.11.2/go.mod h1:aOtudaF94pM71g3jRwTYYwQTG1KyTILTcZqN1srkmD0=
 github.com/go-webauthn/webauthn v0.11.2/go.mod h1:aOtudaF94pM71g3jRwTYYwQTG1KyTILTcZqN1srkmD0=
-github.com/go-webauthn/x v0.1.15 h1:eG1OhggBJTkDE8gUeOlGRbRe8E/PSVG26YG4AyFbwkU=
-github.com/go-webauthn/x v0.1.15/go.mod h1:pf7VI23raFLHPO9VVIs9/u1etqwAOP0S2KoHGL6WbZ8=
 github.com/go-webauthn/x v0.1.16 h1:EaVXZntpyHviN9ykjdRBQIw9B0Ed3LO5FW7mDiMQEa8=
 github.com/go-webauthn/x v0.1.16 h1:EaVXZntpyHviN9ykjdRBQIw9B0Ed3LO5FW7mDiMQEa8=
 github.com/go-webauthn/x v0.1.16/go.mod h1:jhYjfwe/AVYaUs2mUXArj7vvZj+SpooQPyyQGNab+Us=
 github.com/go-webauthn/x v0.1.16/go.mod h1:jhYjfwe/AVYaUs2mUXArj7vvZj+SpooQPyyQGNab+Us=
 github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw=
 github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw=
 github.com/gobs/pretty v0.0.0-20180724170744-09732c25a95b h1:/vQ+oYKu+JoyaMPDsv5FzwuL2wwWBgBbtj/YLCi4LuA=
 github.com/gobs/pretty v0.0.0-20180724170744-09732c25a95b h1:/vQ+oYKu+JoyaMPDsv5FzwuL2wwWBgBbtj/YLCi4LuA=
 github.com/gobs/pretty v0.0.0-20180724170744-09732c25a95b/go.mod h1:Xo4aNUOrJnVruqWQJBtW6+bTBDTniY8yZum5rF3b5jw=
 github.com/gobs/pretty v0.0.0-20180724170744-09732c25a95b/go.mod h1:Xo4aNUOrJnVruqWQJBtW6+bTBDTniY8yZum5rF3b5jw=
 github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
 github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
-github.com/goccy/go-json v0.10.4 h1:JSwxQzIqKfmFX1swYPpUThQZp/Ka4wzJdK0LWVytLPM=
-github.com/goccy/go-json v0.10.4/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
+github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4=
+github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
 github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
 github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
 github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU=
 github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU=
 github.com/gofrs/flock v0.12.1 h1:MTLVXXHf8ekldpJk3AKicLij9MdwOWkZ+a/jHHZby9E=
 github.com/gofrs/flock v0.12.1 h1:MTLVXXHf8ekldpJk3AKicLij9MdwOWkZ+a/jHHZby9E=
@@ -1192,8 +1075,6 @@ github.com/google/go-github/v32 v32.1.0/go.mod h1:rIEpZD9CTDQwDK9GDrtMTycQNA4JU3
 github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
 github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
 github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
 github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
 github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
 github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
-github.com/google/go-tpm v0.9.1 h1:0pGc4X//bAlmZzMKf8iz6IsDo1nYTbYJ6FZN/rg4zdM=
-github.com/google/go-tpm v0.9.1/go.mod h1:h9jEsEECg7gtLis0upRBQU+GhYVH6jMjrFxI8u6bVUY=
 github.com/google/go-tpm v0.9.3 h1:+yx0/anQuGzi+ssRqeD6WpXjW2L/V0dItUayO0i9sRc=
 github.com/google/go-tpm v0.9.3 h1:+yx0/anQuGzi+ssRqeD6WpXjW2L/V0dItUayO0i9sRc=
 github.com/google/go-tpm v0.9.3/go.mod h1:h9jEsEECg7gtLis0upRBQU+GhYVH6jMjrFxI8u6bVUY=
 github.com/google/go-tpm v0.9.3/go.mod h1:h9jEsEECg7gtLis0upRBQU+GhYVH6jMjrFxI8u6bVUY=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
@@ -1224,8 +1105,6 @@ github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db h1:097atOisP2aRj7vFgY
 github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
 github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
 github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
 github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
 github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A=
 github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A=
-github.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM=
-github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA=
 github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0=
 github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0=
 github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM=
 github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM=
 github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
@@ -1252,8 +1131,6 @@ github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMd
 github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8=
 github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8=
 github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI=
 github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI=
 github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI=
 github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI=
-github.com/googleapis/gax-go/v2 v2.14.0 h1:f+jMrjBPl+DL9nI4IQzLUxMq7XrAqFYB7hBPqMNIe8o=
-github.com/googleapis/gax-go/v2 v2.14.0/go.mod h1:lhBCnjdLrWRaPvLWhmc8IS24m9mr07qSYnHncrgo+zk=
 github.com/googleapis/gax-go/v2 v2.14.1 h1:hb0FFeiPaQskmvakKu5EbCbpntQn48jyHuvrkurSS/Q=
 github.com/googleapis/gax-go/v2 v2.14.1 h1:hb0FFeiPaQskmvakKu5EbCbpntQn48jyHuvrkurSS/Q=
 github.com/googleapis/gax-go/v2 v2.14.1/go.mod h1:Hb/NubMaVM88SrNkvl8X/o8XWwDJEPqouaLeN2IUxoA=
 github.com/googleapis/gax-go/v2 v2.14.1/go.mod h1:Hb/NubMaVM88SrNkvl8X/o8XWwDJEPqouaLeN2IUxoA=
 github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4=
 github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4=
@@ -1338,12 +1215,8 @@ github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKEN
 github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4=
 github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4=
 github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
 github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
-github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.127 h1:TOGDOGmY7YOzTSkFDIx0nxEF7fxpqiFNYvSxuSPGaC4=
-github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.127/go.mod h1:JWz2ujO9X3oU5wb6kXp+DpR2UuDj2SldDbX8T0FSuhI=
-github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.128 h1:kQ2Agpfy7Ze1ajn9xCQG9G6T7XIbqv+FBDS/U98W9Mk=
-github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.128/go.mod h1:JWz2ujO9X3oU5wb6kXp+DpR2UuDj2SldDbX8T0FSuhI=
-github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.132 h1:5LqzrJa8LADcY0sDEdV35e8nbwI7RoUQEt+KXWvWoY0=
-github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.132/go.mod h1:JWz2ujO9X3oU5wb6kXp+DpR2UuDj2SldDbX8T0FSuhI=
+github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.134 h1:s0IUKcV6UCu84UZMKejNiUnJ4l2Jw9HM0IxHvdJCg9A=
+github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.134/go.mod h1:JWz2ujO9X3oU5wb6kXp+DpR2UuDj2SldDbX8T0FSuhI=
 github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo=
 github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo=
 github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
 github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
 github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
 github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
@@ -1432,8 +1305,6 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfC
 github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
 github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
 github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
 github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
 github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
 github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
-github.com/jonboulle/clockwork v0.4.0 h1:p4Cf1aMWXnXAUh8lVfewRBx1zaTSYKrKMF2g3ST4RZ4=
-github.com/jonboulle/clockwork v0.4.0/go.mod h1:xgRqUGwRcjKCO1vbZUEtSLrqKoPSsUpK7fnezOII0kc=
 github.com/jonboulle/clockwork v0.5.0 h1:Hyh9A8u51kptdkR+cqRpT1EebBwTn1oK9YfGYbdFz6I=
 github.com/jonboulle/clockwork v0.5.0 h1:Hyh9A8u51kptdkR+cqRpT1EebBwTn1oK9YfGYbdFz6I=
 github.com/jonboulle/clockwork v0.5.0/go.mod h1:3mZlmanh0g2NDKO5TWZVJAfofYk64M7XN3SzBPjZF60=
 github.com/jonboulle/clockwork v0.5.0/go.mod h1:3mZlmanh0g2NDKO5TWZVJAfofYk64M7XN3SzBPjZF60=
 github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
 github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
@@ -1503,12 +1374,8 @@ github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
 github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
 github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
 github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
 github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
 github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
 github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
-github.com/linode/linodego v1.43.0 h1:sGeBB3caZt7vKBoPS5p4AVzmlG4JoqQOdigIibx3egk=
-github.com/linode/linodego v1.43.0/go.mod h1:n4TMFu1UVNala+icHqrTEFFaicYSF74cSAUG5zkTwfA=
-github.com/linode/linodego v1.44.0 h1:JZLLWzCAx3CmHSV9NmCoXisuqKtrmPhfY9MrgvaHMUY=
-github.com/linode/linodego v1.44.0/go.mod h1:umdoNOmtbqAdGQbmQnPFZ2YS4US+/mU/1bA7MjoKAvg=
-github.com/linode/linodego v1.46.0 h1:+uOG4SD2MIrhbrLrvOD5HrbdLN3D19Wgn3MgdUNQjeU=
-github.com/linode/linodego v1.46.0/go.mod h1:vyklQRzZUWhFVBZdYx4dcYJU/gG9yKB9VUcUs6ub0Lk=
+github.com/linode/linodego v1.47.0 h1:6MFNCyzWbr8Rhl4r7d5DwZLwxvFIsM4ARH6W0KS/R0U=
+github.com/linode/linodego v1.47.0/go.mod h1:vyklQRzZUWhFVBZdYx4dcYJU/gG9yKB9VUcUs6ub0Lk=
 github.com/liquidweb/go-lwApi v0.0.0-20190605172801-52a4864d2738/go.mod h1:0sYF9rMXb0vlG+4SzdiGMXHheCZxjguMq+Zb4S2BfBs=
 github.com/liquidweb/go-lwApi v0.0.0-20190605172801-52a4864d2738/go.mod h1:0sYF9rMXb0vlG+4SzdiGMXHheCZxjguMq+Zb4S2BfBs=
 github.com/liquidweb/go-lwApi v0.0.5/go.mod h1:0sYF9rMXb0vlG+4SzdiGMXHheCZxjguMq+Zb4S2BfBs=
 github.com/liquidweb/go-lwApi v0.0.5/go.mod h1:0sYF9rMXb0vlG+4SzdiGMXHheCZxjguMq+Zb4S2BfBs=
 github.com/liquidweb/liquidweb-cli v0.6.9/go.mod h1:cE1uvQ+x24NGUL75D0QagOFCG8Wdvmwu8aL9TLmA/eQ=
 github.com/liquidweb/liquidweb-cli v0.6.9/go.mod h1:cE1uvQ+x24NGUL75D0QagOFCG8Wdvmwu8aL9TLmA/eQ=
@@ -1534,8 +1401,6 @@ github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope
 github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
 github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
 github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
 github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
 github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
 github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
-github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
-github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
 github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
 github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
 github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
 github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
 github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
 github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
@@ -1567,8 +1432,8 @@ github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKju
 github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI=
 github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI=
 github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4=
 github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4=
 github.com/miekg/dns v1.1.47/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME=
 github.com/miekg/dns v1.1.47/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME=
-github.com/miekg/dns v1.1.62 h1:cN8OuEF1/x5Rq6Np+h1epln8OiyPWV+lROx9LxcGgIQ=
-github.com/miekg/dns v1.1.62/go.mod h1:mvDlcItzm+br7MToIKqkglaGhlFMHJ9DTNNWONWXbNQ=
+github.com/miekg/dns v1.1.63 h1:8M5aAw6OMZfFXTT7K5V0Eu5YiiL8l7nUAkyN6C9YwaY=
+github.com/miekg/dns v1.1.63/go.mod h1:6NGHfjhpmr5lt3XPLuyfDJi5AXbNIPM9PY6H6sF1Nfs=
 github.com/mimuret/golang-iij-dpf v0.9.1 h1:Gj6EhHJkOhr+q2RnvRPJsPMcjuVnWPSccEHyoEehU34=
 github.com/mimuret/golang-iij-dpf v0.9.1 h1:Gj6EhHJkOhr+q2RnvRPJsPMcjuVnWPSccEHyoEehU34=
 github.com/mimuret/golang-iij-dpf v0.9.1/go.mod h1:sl9KyOkESib9+KRD3HaGpgi1xk7eoN2+d96LCLsME2M=
 github.com/mimuret/golang-iij-dpf v0.9.1/go.mod h1:sl9KyOkESib9+KRD3HaGpgi1xk7eoN2+d96LCLsME2M=
 github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY=
 github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY=
@@ -1666,12 +1531,8 @@ github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYr
 github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b h1:FfH+VrHHk6Lxt9HdVS0PXzSXFyS2NbZKXv33FYPol0A=
 github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b h1:FfH+VrHHk6Lxt9HdVS0PXzSXFyS2NbZKXv33FYPol0A=
 github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b/go.mod h1:AC62GU6hc0BrNm+9RK9VSiwa/EUe1bkIeFORAMcHvJU=
 github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b/go.mod h1:AC62GU6hc0BrNm+9RK9VSiwa/EUe1bkIeFORAMcHvJU=
 github.com/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE=
 github.com/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE=
-github.com/oracle/oci-go-sdk/v65 v65.80.0 h1:Rr7QLMozd2DfDBKo6AB3DzLYQxAwuOG118+K5AAD5E8=
-github.com/oracle/oci-go-sdk/v65 v65.80.0/go.mod h1:IBEV9l1qBzUpo7zgGaRUhbB05BVfcDGYRFBCPlTcPp0=
-github.com/oracle/oci-go-sdk/v65 v65.81.1 h1:JYc47bk8n/MUchA2KHu1ggsCQzlJZQLJ+tTKfOho00E=
-github.com/oracle/oci-go-sdk/v65 v65.81.1/go.mod h1:IBEV9l1qBzUpo7zgGaRUhbB05BVfcDGYRFBCPlTcPp0=
-github.com/oracle/oci-go-sdk/v65 v65.81.3 h1:L4JcHSV4xLxySfZOQumUazlRN/2u/7r7Muw0Apg7UYI=
-github.com/oracle/oci-go-sdk/v65 v65.81.3/go.mod h1:IBEV9l1qBzUpo7zgGaRUhbB05BVfcDGYRFBCPlTcPp0=
+github.com/oracle/oci-go-sdk/v65 v65.82.0 h1:42fSqE847E95ICfVPcKhRmzkvM6tucwbPdUMQydfWGc=
+github.com/oracle/oci-go-sdk/v65 v65.82.0/go.mod h1:IBEV9l1qBzUpo7zgGaRUhbB05BVfcDGYRFBCPlTcPp0=
 github.com/ovh/go-ovh v1.6.0 h1:ixLOwxQdzYDx296sXcgS35TOPEahJkpjMGtzPadCjQI=
 github.com/ovh/go-ovh v1.6.0 h1:ixLOwxQdzYDx296sXcgS35TOPEahJkpjMGtzPadCjQI=
 github.com/ovh/go-ovh v1.6.0/go.mod h1:cTVDnl94z4tl8pP1uZ/8jlVxntjSIf09bNcQ5TJSC7c=
 github.com/ovh/go-ovh v1.6.0/go.mod h1:cTVDnl94z4tl8pP1uZ/8jlVxntjSIf09bNcQ5TJSC7c=
 github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
 github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
@@ -1772,41 +1633,29 @@ github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb
 github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
 github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
 github.com/sacloud/api-client-go v0.2.10 h1:+rv3jDohD+pkdYwOTBiB+jZsM0xK3AxadXRzhp3q66c=
 github.com/sacloud/api-client-go v0.2.10 h1:+rv3jDohD+pkdYwOTBiB+jZsM0xK3AxadXRzhp3q66c=
 github.com/sacloud/api-client-go v0.2.10/go.mod h1:Jj3CTy2+O4bcMedVDXlbHuqqche85HEPuVXoQFhLaRc=
 github.com/sacloud/api-client-go v0.2.10/go.mod h1:Jj3CTy2+O4bcMedVDXlbHuqqche85HEPuVXoQFhLaRc=
-github.com/sacloud/go-http v0.1.8 h1:ynreWA/vnM8G2ksbMlmefBHsXURKPz49qlPRqQ9IQdw=
-github.com/sacloud/go-http v0.1.8/go.mod h1:7TL7TN1fnPKHsMifIqURDkGujnKViCgEz5Ei/LQdFK8=
 github.com/sacloud/go-http v0.1.9 h1:Xa5PY8/pb7XWhwG9nAeXSrYXPbtfBWqawgzxD5co3VE=
 github.com/sacloud/go-http v0.1.9 h1:Xa5PY8/pb7XWhwG9nAeXSrYXPbtfBWqawgzxD5co3VE=
 github.com/sacloud/go-http v0.1.9/go.mod h1:DpDG+MSyxYaBwPJ7l3aKLMzwYdTVtC5Bo63HActcgoE=
 github.com/sacloud/go-http v0.1.9/go.mod h1:DpDG+MSyxYaBwPJ7l3aKLMzwYdTVtC5Bo63HActcgoE=
-github.com/sacloud/iaas-api-go v1.12.0 h1:kqXFn3HzCiawlX6hVJb1GVqcSJqcmiGHB4Zp14sxiI8=
-github.com/sacloud/iaas-api-go v1.12.0/go.mod h1:SZLXeWOdXk3WReIS557sbU1gkOgrE4rseIBQV1B3b7o=
 github.com/sacloud/iaas-api-go v1.14.0 h1:xjkFWqdo4ilTrKPNNYBNWR/CZ/kVRsJrdAHAad6J/AQ=
 github.com/sacloud/iaas-api-go v1.14.0 h1:xjkFWqdo4ilTrKPNNYBNWR/CZ/kVRsJrdAHAad6J/AQ=
 github.com/sacloud/iaas-api-go v1.14.0/go.mod h1:C8os2Mnj0TOmMdSllwhaDWKMVG2ysFnpe69kyA4M3V0=
 github.com/sacloud/iaas-api-go v1.14.0/go.mod h1:C8os2Mnj0TOmMdSllwhaDWKMVG2ysFnpe69kyA4M3V0=
-github.com/sacloud/packages-go v0.0.10 h1:UiQGjy8LretewkRhsuna1TBM9Vz/l9FoYpQx+D+AOck=
-github.com/sacloud/packages-go v0.0.10/go.mod h1:f8QITBh9z4IZc4yE9j21Q8b0sXEMwRlRmhhjWeDVTYs=
 github.com/sacloud/packages-go v0.0.11 h1:hrRWLmfPM9w7GBs6xb5/ue6pEMl8t1UuDKyR/KfteHo=
 github.com/sacloud/packages-go v0.0.11 h1:hrRWLmfPM9w7GBs6xb5/ue6pEMl8t1UuDKyR/KfteHo=
 github.com/sacloud/packages-go v0.0.11/go.mod h1:XNF5MCTWcHo9NiqWnYctVbASSSZR3ZOmmQORIzcurJ8=
 github.com/sacloud/packages-go v0.0.11/go.mod h1:XNF5MCTWcHo9NiqWnYctVbASSSZR3ZOmmQORIzcurJ8=
 github.com/sagikazarmark/crypt v0.10.0/go.mod h1:gwTNHQVoOS3xp9Xvz5LLR+1AauC5M6880z5NWzdhOyQ=
 github.com/sagikazarmark/crypt v0.10.0/go.mod h1:gwTNHQVoOS3xp9Xvz5LLR+1AauC5M6880z5NWzdhOyQ=
-github.com/sagikazarmark/locafero v0.6.0 h1:ON7AQg37yzcRPU69mt7gwhFEBwxI6P9T4Qu3N51bwOk=
-github.com/sagikazarmark/locafero v0.6.0/go.mod h1:77OmuIc6VTraTXKXIs/uvUxKGUXjE1GbemJYHqdNjX0=
 github.com/sagikazarmark/locafero v0.7.0 h1:5MqpDsTGNDhY8sGp0Aowyf0qKsPrhewaLSsFaodPcyo=
 github.com/sagikazarmark/locafero v0.7.0 h1:5MqpDsTGNDhY8sGp0Aowyf0qKsPrhewaLSsFaodPcyo=
 github.com/sagikazarmark/locafero v0.7.0/go.mod h1:2za3Cg5rMaTMoG/2Ulr9AwtFaIppKXTRYnozin4aB5k=
 github.com/sagikazarmark/locafero v0.7.0/go.mod h1:2za3Cg5rMaTMoG/2Ulr9AwtFaIppKXTRYnozin4aB5k=
 github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
 github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
 github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
 github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
-github.com/samber/lo v1.47.0 h1:z7RynLwP5nbyRscyvcD043DWYoOcYRv3mV8lBeqOCLc=
-github.com/samber/lo v1.47.0/go.mod h1:RmDH9Ct32Qy3gduHQuKJ3gW1fMHAnE/fAzQuf6He5cU=
-github.com/sashabaranov/go-openai v1.36.0 h1:fcSrn8uGuorzPWCBp8L0aCR95Zjb/Dd+ZSML0YZy9EI=
-github.com/sashabaranov/go-openai v1.36.0/go.mod h1:lj5b/K+zjTSFxVLijLSTDZuP7adOgerWeFyZLUhAKRg=
+github.com/samber/lo v1.49.1 h1:4BIFyVfuQSEpluc7Fua+j1NolZHiEHEpaSEKdsH0tew=
+github.com/samber/lo v1.49.1/go.mod h1:dO6KHFzUKXgP8LDhU0oI8d2hekjXnGOu0DB8Jecxd6o=
 github.com/sashabaranov/go-openai v1.36.1 h1:EVfRXwIlW2rUzpx6vR+aeIKCK/xylSrVYAx1TMTSX3g=
 github.com/sashabaranov/go-openai v1.36.1 h1:EVfRXwIlW2rUzpx6vR+aeIKCK/xylSrVYAx1TMTSX3g=
 github.com/sashabaranov/go-openai v1.36.1/go.mod h1:lj5b/K+zjTSFxVLijLSTDZuP7adOgerWeFyZLUhAKRg=
 github.com/sashabaranov/go-openai v1.36.1/go.mod h1:lj5b/K+zjTSFxVLijLSTDZuP7adOgerWeFyZLUhAKRg=
 github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
 github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
-github.com/scaleway/scaleway-sdk-go v1.0.0-beta.30 h1:yoKAVkEVwAqbGbR8n87rHQ1dulL25rKloGadb3vm770=
-github.com/scaleway/scaleway-sdk-go v1.0.0-beta.30/go.mod h1:sH0u6fq6x4R5M7WxkoQFY/o7UaiItec0o1LinLCJNq8=
+github.com/scaleway/scaleway-sdk-go v1.0.0-beta.31 h1:Fj7jPyu9TQjqfXcLylINK5PANSzOWXIX4QtGmfp67AY=
+github.com/scaleway/scaleway-sdk-go v1.0.0-beta.31/go.mod h1:kzh+BSAvpoyHHdHBCDhmSWtBc1NbLMZ2lWHqnBoxFks=
 github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
 github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
 github.com/selectel/domains-go v1.1.0 h1:futG50J43ALLKQAnZk9H9yOtLGnSUh7c5hSvuC5gSHo=
 github.com/selectel/domains-go v1.1.0 h1:futG50J43ALLKQAnZk9H9yOtLGnSUh7c5hSvuC5gSHo=
 github.com/selectel/domains-go v1.1.0/go.mod h1:SugRKfq4sTpnOHquslCpzda72wV8u0cMBHx0C0l+bzA=
 github.com/selectel/domains-go v1.1.0/go.mod h1:SugRKfq4sTpnOHquslCpzda72wV8u0cMBHx0C0l+bzA=
 github.com/selectel/go-selvpcclient/v3 v3.2.1 h1:ny6WIAMiHzKxOgOEnwcWE79wIQij1AHHylzPA41MXCw=
 github.com/selectel/go-selvpcclient/v3 v3.2.1 h1:ny6WIAMiHzKxOgOEnwcWE79wIQij1AHHylzPA41MXCw=
 github.com/selectel/go-selvpcclient/v3 v3.2.1/go.mod h1:3EfSf8aEWyhspOGbvZ6mvnFg7JN5uckxNyBFPGWsXNQ=
 github.com/selectel/go-selvpcclient/v3 v3.2.1/go.mod h1:3EfSf8aEWyhspOGbvZ6mvnFg7JN5uckxNyBFPGWsXNQ=
-github.com/shirou/gopsutil/v4 v4.24.11 h1:WaU9xqGFKvFfsUv94SXcUPD7rCkU0vr/asVdQOBZNj8=
-github.com/shirou/gopsutil/v4 v4.24.11/go.mod h1:s4D/wg+ag4rG0WO7AiTj2BeYCRhym0vM7DHbZRxnIT8=
 github.com/shirou/gopsutil/v4 v4.24.12 h1:qvePBOk20e0IKA1QXrIIU+jmk+zEiYVVx06WjBRlZo4=
 github.com/shirou/gopsutil/v4 v4.24.12 h1:qvePBOk20e0IKA1QXrIIU+jmk+zEiYVVx06WjBRlZo4=
 github.com/shirou/gopsutil/v4 v4.24.12/go.mod h1:DCtMPAad2XceTeIAbGyVfycbYQNBGk2P8cvDi7/VN9o=
 github.com/shirou/gopsutil/v4 v4.24.12/go.mod h1:DCtMPAad2XceTeIAbGyVfycbYQNBGk2P8cvDi7/VN9o=
 github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4=
 github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4=
@@ -1849,15 +1698,11 @@ github.com/spf13/afero v1.4.1/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z
 github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
 github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
 github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y=
 github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y=
 github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ=
 github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ=
-github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=
-github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY=
 github.com/spf13/afero v1.12.0 h1:UcOPyRBYczmFn6yvphxkn9ZEOY65cpwGKb5mL36mrqs=
 github.com/spf13/afero v1.12.0 h1:UcOPyRBYczmFn6yvphxkn9ZEOY65cpwGKb5mL36mrqs=
 github.com/spf13/afero v1.12.0/go.mod h1:ZTlWwG4/ahT8W7T0WQ5uYmjI9duaLQGy3Q2OAl4sk/4=
 github.com/spf13/afero v1.12.0/go.mod h1:ZTlWwG4/ahT8W7T0WQ5uYmjI9duaLQGy3Q2OAl4sk/4=
 github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
 github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
 github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
 github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
 github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48=
 github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48=
-github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w=
-github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
 github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y=
 github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y=
 github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
 github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
 github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI=
 github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI=
@@ -1865,8 +1710,9 @@ github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRM
 github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
 github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
 github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
 github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
 github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
-github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
 github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
 github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
+github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
 github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
 github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
 github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
 github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
 github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg=
 github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg=
@@ -1901,18 +1747,10 @@ github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69
 github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
 github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
 github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
 github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
 github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
 github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
-github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1060 h1:0FEYKm73CROpZGfRWqyyhNkk5ndBUDqNNb5SP0BL5jg=
-github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1060/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
-github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1065 h1:krcqtAmexnHHBm/4ge4tr2b1cn/a7JGBESVGoZYXQAE=
-github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1065/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
-github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1088 h1:og5PIqoaXDaa5VhvLJIkzlvRzxzjt3jEA0Hk2TF0sRc=
-github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1088/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
-github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.1060 h1:WoxoP5opI5Ln7W7UggUuFwb2KO+ZzaZuNE4E+IigqKU=
-github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.1060/go.mod h1:zFNM09qD4OsKfFTGJ1yAPpYdCvQQXRl1HmeOVSzukBA=
-github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.1065 h1:aEFtLD1ceyeljQXB1S2BjN0zjTkf0X3XmpuxFIiC29w=
-github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.1065/go.mod h1:HWvwy09hFSMXrj9SMvVRWV4U7rZO3l+WuogyNuxiT3M=
-github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.1088 h1:PeTx/Ewy4z5dAX5I5UIO1ZdyChlJPOD/WDKjYATTC7o=
-github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.1088/go.mod h1:UktrT5uxoCv7/2mMCFu98ZhZ037PX0oLmy0lMBt5FI0=
+github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1090 h1:0fZ+FZE7ZvqxGdYbtQW8OyPXGD1qGPmg4wT+Tjkv+1s=
+github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1090/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
+github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.1090 h1:8AXFluT9RV4EeWC7kfJUWjnFQlIJ4pBVC/+Qtqgg0hM=
+github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.1090/go.mod h1:/XMAs17Sih+pqp/Pxy0WpmdZE/CychzXEnW/tTrCujk=
 github.com/tjfoc/gmsm v1.4.1 h1:aMe1GlZb+0bLjn+cKTPEvvn9oUEBlJitaZiiBwsbgho=
 github.com/tjfoc/gmsm v1.4.1 h1:aMe1GlZb+0bLjn+cKTPEvvn9oUEBlJitaZiiBwsbgho=
 github.com/tjfoc/gmsm v1.4.1/go.mod h1:j4INPkHWMrhJb38G+J6W4Tw0AbuN8Thu3PbdVYhVcTE=
 github.com/tjfoc/gmsm v1.4.1/go.mod h1:j4INPkHWMrhJb38G+J6W4Tw0AbuN8Thu3PbdVYhVcTE=
 github.com/tklauser/go-sysconf v0.3.14 h1:g5vzr9iPFFz24v2KZXs/pvpvh8/V9Fw6vQK5ZZb78yU=
 github.com/tklauser/go-sysconf v0.3.14 h1:g5vzr9iPFFz24v2KZXs/pvpvh8/V9Fw6vQK5ZZb78yU=
@@ -1922,8 +1760,6 @@ github.com/tklauser/numcpus v0.9.0/go.mod h1:SN6Nq1O3VychhC1npsWostA+oW+VOQTxZrS
 github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
 github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
 github.com/transip/gotransip/v6 v6.26.0 h1:Aejfvh8rSp8Mj2GX/RpdBjMCv+Iy/DmgfNgczPDP550=
 github.com/transip/gotransip/v6 v6.26.0 h1:Aejfvh8rSp8Mj2GX/RpdBjMCv+Iy/DmgfNgczPDP550=
 github.com/transip/gotransip/v6 v6.26.0/go.mod h1:x0/RWGRK/zob817O3tfO2xhFoP1vu8YOHORx6Jpk80s=
 github.com/transip/gotransip/v6 v6.26.0/go.mod h1:x0/RWGRK/zob817O3tfO2xhFoP1vu8YOHORx6Jpk80s=
-github.com/tufanbarisyildirim/gonginx v0.0.0-20241205102811-323481085fb4 h1:p5dIzO7hwJf/qZQaG0zXMReuoN2QWrizUBMLkg+oSic=
-github.com/tufanbarisyildirim/gonginx v0.0.0-20241205102811-323481085fb4/go.mod h1:hdMWBc1+TyB6G5ZZBBgPWQ8cjRZ6zpYdhal0uu6E9QM=
 github.com/tufanbarisyildirim/gonginx v0.0.0-20250120210832-12a9c7ae0c8a h1:bFMBmB409YhHd+B4yfM7JPYTCgxnQjqzIfFOiN4Tpsc=
 github.com/tufanbarisyildirim/gonginx v0.0.0-20250120210832-12a9c7ae0c8a h1:bFMBmB409YhHd+B4yfM7JPYTCgxnQjqzIfFOiN4Tpsc=
 github.com/tufanbarisyildirim/gonginx v0.0.0-20250120210832-12a9c7ae0c8a/go.mod h1:hdMWBc1+TyB6G5ZZBBgPWQ8cjRZ6zpYdhal0uu6E9QM=
 github.com/tufanbarisyildirim/gonginx v0.0.0-20250120210832-12a9c7ae0c8a/go.mod h1:hdMWBc1+TyB6G5ZZBBgPWQ8cjRZ6zpYdhal0uu6E9QM=
 github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
 github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
@@ -1937,14 +1773,8 @@ github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65E
 github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
 github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
 github.com/ultradns/ultradns-go-sdk v1.8.0-20241010134910-243eeec h1:2s/ghQ8wKE+UzD/hf3P4Gd1j0JI9ncbxv+nsypPoUYI=
 github.com/ultradns/ultradns-go-sdk v1.8.0-20241010134910-243eeec h1:2s/ghQ8wKE+UzD/hf3P4Gd1j0JI9ncbxv+nsypPoUYI=
 github.com/ultradns/ultradns-go-sdk v1.8.0-20241010134910-243eeec/go.mod h1:BZr7Qs3ku1ckpqed8tCRSqTlp8NAeZfAVpfx4OzXMss=
 github.com/ultradns/ultradns-go-sdk v1.8.0-20241010134910-243eeec/go.mod h1:BZr7Qs3ku1ckpqed8tCRSqTlp8NAeZfAVpfx4OzXMss=
-github.com/uozi-tech/cosy v1.12.5 h1:rX7mVj4KKuI+xnpNor3BuFsnX6f8nUzeEFgA//gjywo=
-github.com/uozi-tech/cosy v1.12.5/go.mod h1:Q597nSDM8yAnW8yKfcWBcPU+fRfEpxXA0ZjsSse88Tc=
-github.com/uozi-tech/cosy v1.13.0 h1:dDnU8f3z3AA2KamqEcpa0ObqY4YVXXsNbdxR9Hv7f0A=
-github.com/uozi-tech/cosy v1.13.0/go.mod h1:DSKLtoVaGLUlJ8KiQ1vWEsnv85epRrAAMXSijuq+asM=
-github.com/uozi-tech/cosy v1.14.1 h1:Qat6Av9XhYMypeBCcagl3Pfp6LWgDRK0+lHBN/1jFY0=
-github.com/uozi-tech/cosy v1.14.1/go.mod h1:DSKLtoVaGLUlJ8KiQ1vWEsnv85epRrAAMXSijuq+asM=
-github.com/uozi-tech/cosy v1.14.2 h1:nWTiBSAYn1yTtQeTZluK/G2OjERGs/SRaK4yVjq1IQ8=
-github.com/uozi-tech/cosy v1.14.2/go.mod h1:DSKLtoVaGLUlJ8KiQ1vWEsnv85epRrAAMXSijuq+asM=
+github.com/uozi-tech/cosy v1.14.3 h1:YDleGHghw5Dtd8H7Fy0Iq0caXfxmhk7Zt6tJBONjq5Q=
+github.com/uozi-tech/cosy v1.14.3/go.mod h1:DSKLtoVaGLUlJ8KiQ1vWEsnv85epRrAAMXSijuq+asM=
 github.com/uozi-tech/cosy-driver-mysql v0.2.2 h1:22S/XNIvuaKGqxQPsYPXN8TZ8hHjCQdcJKVQ83Vzxoo=
 github.com/uozi-tech/cosy-driver-mysql v0.2.2 h1:22S/XNIvuaKGqxQPsYPXN8TZ8hHjCQdcJKVQ83Vzxoo=
 github.com/uozi-tech/cosy-driver-mysql v0.2.2/go.mod h1:EZnRIbSj1V5U0gEeTobrXai/d1SV11lkl4zP9NFEmyE=
 github.com/uozi-tech/cosy-driver-mysql v0.2.2/go.mod h1:EZnRIbSj1V5U0gEeTobrXai/d1SV11lkl4zP9NFEmyE=
 github.com/uozi-tech/cosy-driver-postgres v0.2.1 h1:OICakGuT+omva6QOJCxTJ5Lfr7CGXLmk/zD+aS51Z2o=
 github.com/uozi-tech/cosy-driver-postgres v0.2.1 h1:OICakGuT+omva6QOJCxTJ5Lfr7CGXLmk/zD+aS51Z2o=
@@ -1954,14 +1784,8 @@ github.com/uozi-tech/cosy-driver-sqlite v0.2.0/go.mod h1:87a6mzn5IuEtIR4z7U4Ey8e
 github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
 github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
 github.com/vinyldns/go-vinyldns v0.9.16 h1:GZJStDkcCk1F1AcRc64LuuMh+ENL8pHA0CVd4ulRMcQ=
 github.com/vinyldns/go-vinyldns v0.9.16 h1:GZJStDkcCk1F1AcRc64LuuMh+ENL8pHA0CVd4ulRMcQ=
 github.com/vinyldns/go-vinyldns v0.9.16/go.mod h1:5qIJOdmzAnatKjurI+Tl4uTus7GJKJxb+zitufjHs3Q=
 github.com/vinyldns/go-vinyldns v0.9.16/go.mod h1:5qIJOdmzAnatKjurI+Tl4uTus7GJKJxb+zitufjHs3Q=
-github.com/volcengine/volc-sdk-golang v1.0.188 h1:s90SUVGPUX2oAVeM/FgzQeSCXZ80XCXsuXliT3s0CtI=
-github.com/volcengine/volc-sdk-golang v1.0.188/go.mod h1:u0VtPvlXWpXDTmc9IHkaW1q+5Jjwus4oAqRhNMDRInE=
-github.com/volcengine/volc-sdk-golang v1.0.189 h1:VMDTHWYXakXJtZqPYn0As/h4eB0c4imvyru6mIp+o60=
-github.com/volcengine/volc-sdk-golang v1.0.189/go.mod h1:u0VtPvlXWpXDTmc9IHkaW1q+5Jjwus4oAqRhNMDRInE=
-github.com/volcengine/volc-sdk-golang v1.0.193 h1:mL1rlk+m9SaqF2MSGFWfigEaz10ZVJiYDnFuWfj65Ww=
-github.com/volcengine/volc-sdk-golang v1.0.193/go.mod h1:u0VtPvlXWpXDTmc9IHkaW1q+5Jjwus4oAqRhNMDRInE=
-github.com/vultr/govultr/v3 v3.12.0 h1:nRIm5G8Rr0FA/xWtZ2rT+iV3rSHecS4lXEWMRUXoTpw=
-github.com/vultr/govultr/v3 v3.12.0/go.mod h1:q34Wd76upKmf+vxFMgaNMH3A8BbsPBmSYZUGC8oZa5w=
+github.com/volcengine/volc-sdk-golang v1.0.194 h1:3o0INQzdtYJWvdGrtX02booCqPL5TsWSq2W1Ur7Bzlo=
+github.com/volcengine/volc-sdk-golang v1.0.194/go.mod h1:u0VtPvlXWpXDTmc9IHkaW1q+5Jjwus4oAqRhNMDRInE=
 github.com/vultr/govultr/v3 v3.14.1 h1:9BpyZgsWasuNoR39YVMcq44MSaF576Z4D+U3ro58eJQ=
 github.com/vultr/govultr/v3 v3.14.1 h1:9BpyZgsWasuNoR39YVMcq44MSaF576Z4D+U3ro58eJQ=
 github.com/vultr/govultr/v3 v3.14.1/go.mod h1:q34Wd76upKmf+vxFMgaNMH3A8BbsPBmSYZUGC8oZa5w=
 github.com/vultr/govultr/v3 v3.14.1/go.mod h1:q34Wd76upKmf+vxFMgaNMH3A8BbsPBmSYZUGC8oZa5w=
 github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
 github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
@@ -1975,14 +1799,10 @@ github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2
 github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
 github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
 github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
 github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
 github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
 github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
-github.com/yandex-cloud/go-genproto v0.0.0-20241206133605-07e4a676108b h1:+xsB23dmxN3hBSGZLAiyLsUADnqr6ASOiZJmLd8++nk=
-github.com/yandex-cloud/go-genproto v0.0.0-20241206133605-07e4a676108b/go.mod h1:0LDD/IZLIUIV4iPH+YcF+jysO3jkSvADFGm4dCAuwQo=
-github.com/yandex-cloud/go-genproto v0.0.0-20241220122821-aeb3b05efd1c h1:Rnr+lDYXVkP+3eT8/d68iq4G/UeIhyCQk+HKa8toTvg=
-github.com/yandex-cloud/go-genproto v0.0.0-20241220122821-aeb3b05efd1c/go.mod h1:0LDD/IZLIUIV4iPH+YcF+jysO3jkSvADFGm4dCAuwQo=
-github.com/yandex-cloud/go-sdk v0.0.0-20241206142255-6c3760d17eea h1:XvnMWpD249l3rhJjDWEAGOQmYZ3Rw0XjEwREDzm9wDs=
-github.com/yandex-cloud/go-sdk v0.0.0-20241206142255-6c3760d17eea/go.mod h1:6JH4ZTrHlyTtKwf1VoEGfbHl+or8NFdOyxwYzID0UdI=
-github.com/yandex-cloud/go-sdk v0.0.0-20241220131134-2393e243c134 h1:qmpz0Kvr9GAng8LAhRcKIpY71CEAcL3EBkftVlsP5Cw=
-github.com/yandex-cloud/go-sdk v0.0.0-20241220131134-2393e243c134/go.mod h1:KgZCJrxdhdw/sKhTQ/M3S9WOLri2PCnBlc4C3s+PfKY=
+github.com/yandex-cloud/go-genproto v0.0.0-20250127124313-5be1a2cc06d4 h1:3N8k0k2YikzqQUUAFqPhbhiLEodQrRKIvlsUuJ09DYo=
+github.com/yandex-cloud/go-genproto v0.0.0-20250127124313-5be1a2cc06d4/go.mod h1:0LDD/IZLIUIV4iPH+YcF+jysO3jkSvADFGm4dCAuwQo=
+github.com/yandex-cloud/go-sdk v0.0.0-20250127132311-016f84adc072 h1:s2wfllm5Z32Sl1TktCxHXMKJ9yQXpdFUuN5CFA/8qJY=
+github.com/yandex-cloud/go-sdk v0.0.0-20250127132311-016f84adc072/go.mod h1:/7UdvQNU5/ISIOPHcj0S4lUcp/KejW2LJQhZGt9tdMU=
 github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
 github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
 github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@@ -2008,8 +1828,6 @@ go.etcd.io/etcd/client/v2 v2.305.7/go.mod h1:GQGT5Z3TBuAQGvgPfhR7VPySu/SudxmEkRq
 go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0=
 go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0=
 go.etcd.io/etcd/client/v3 v3.5.9/go.mod h1:i/Eo5LrZ5IKqpbtpPDuaUnDOUv471oDg8cjQaUr2MbA=
 go.etcd.io/etcd/client/v3 v3.5.9/go.mod h1:i/Eo5LrZ5IKqpbtpPDuaUnDOUv471oDg8cjQaUr2MbA=
 go.mongodb.org/mongo-driver v1.12.0/go.mod h1:AZkxhPnFJUoH7kZlFkVKucV20K387miPfm7oimrSmK0=
 go.mongodb.org/mongo-driver v1.12.0/go.mod h1:AZkxhPnFJUoH7kZlFkVKucV20K387miPfm7oimrSmK0=
-go.mongodb.org/mongo-driver v1.17.1 h1:Wic5cJIwJgSpBhe3lx3+/RybR5PiYRMpVFgO7cOHyIM=
-go.mongodb.org/mongo-driver v1.17.1/go.mod h1:wwWm/+BuOddhcq3n68LKRmgk2wXzmF6s0SFOa0GINL4=
 go.mongodb.org/mongo-driver v1.17.2 h1:gvZyk8352qSfzyZ2UMWcpDpMSGEr1eqE4T793SqyhzM=
 go.mongodb.org/mongo-driver v1.17.2 h1:gvZyk8352qSfzyZ2UMWcpDpMSGEr1eqE4T793SqyhzM=
 go.mongodb.org/mongo-driver v1.17.2/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ=
 go.mongodb.org/mongo-driver v1.17.2/go.mod h1:Hy04i7O2kC4RS06ZrhPRqj/u4DTYkFDAAccj+rVKqgQ=
 go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
 go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
@@ -2022,24 +1840,16 @@ go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
 go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
 go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
 go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
 go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
 go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
 go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0 h1:yd02MEjBdJkG3uabWP9apV+OuWRIXGDuJEUJbOHmCFU=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0/go.mod h1:umTcuxiv1n/s/S6/c2AT/g2CQ7u5C59sHDNmfSwgz7Q=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 h1:CV7UdSGJt/Ao6Gp4CXckLxVRRsRgDHoI8XjbL3PDl8s=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 h1:CV7UdSGJt/Ao6Gp4CXckLxVRRsRgDHoI8XjbL3PDl8s=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0/go.mod h1:FRmFuRJfag1IZ2dPkHnEoSFVgTVPUd2qf5Vi69hLb8I=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0/go.mod h1:FRmFuRJfag1IZ2dPkHnEoSFVgTVPUd2qf5Vi69hLb8I=
-go.opentelemetry.io/otel v1.33.0 h1:/FerN9bax5LoK51X/sI0SVYrjSE0/yUL7DpxW4K3FWw=
-go.opentelemetry.io/otel v1.33.0/go.mod h1:SUUkR6csvUQl+yjReHu5uM3EtVV7MBm5FHKRlNx4I8I=
 go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY=
 go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY=
 go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI=
 go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI=
-go.opentelemetry.io/otel/metric v1.33.0 h1:r+JOocAyeRVXD8lZpjdQjzMadVZp2M4WmQ+5WtEnklQ=
-go.opentelemetry.io/otel/metric v1.33.0/go.mod h1:L9+Fyctbp6HFTddIxClbQkjtubW6O9QS3Ann/M82u6M=
 go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ=
 go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ=
 go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE=
 go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE=
-go.opentelemetry.io/otel/sdk v1.31.0 h1:xLY3abVHYZ5HSfOg3l2E5LUj2Cwva5Y7yGxnSW9H5Gk=
-go.opentelemetry.io/otel/sdk v1.31.0/go.mod h1:TfRbMdhvxIIr/B2N2LQW2S5v9m3gOQ/08KsbbO5BPT0=
-go.opentelemetry.io/otel/sdk/metric v1.31.0 h1:i9hxxLJF/9kkvfHppyLL55aW7iIJz4JjxTeYusH7zMc=
-go.opentelemetry.io/otel/sdk/metric v1.31.0/go.mod h1:CRInTMVvNhUKgSAMbKyTMxqOBC0zgyxzW55lZzX43Y8=
-go.opentelemetry.io/otel/trace v1.33.0 h1:cCJuF7LRjUFso9LPnEAHJDB2pqzp+hbO8eu1qqW2d/s=
-go.opentelemetry.io/otel/trace v1.33.0/go.mod h1:uIcdVUZMpTAmz0tI1z04GoVSezK37CbGV4fr1f2nBck=
+go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A=
+go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU=
+go.opentelemetry.io/otel/sdk/metric v1.32.0 h1:rZvFnvmvawYb0alrYkjraqJq0Z4ZUJAiyYCU9snn1CU=
+go.opentelemetry.io/otel/sdk/metric v1.32.0/go.mod h1:PWeZlq0zt9YkYAp3gjKZ0eicRYvOh1Gd+X99x6GHpCQ=
 go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k=
 go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k=
 go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE=
 go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE=
 go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
 go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
@@ -2076,8 +1886,6 @@ go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI=
 go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw=
 go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw=
 go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
 go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
 go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
 go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
-golang.org/x/arch v0.12.0 h1:UsYJhbzPYGsT0HbEdmYcqtCv8UNGvnaL561NnIUvaKg=
-golang.org/x/arch v0.12.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
 golang.org/x/arch v0.13.0 h1:KCkqVVV1kGg0X87TFysjCJ8MxtZEIU4Ja/yXGeoECdA=
 golang.org/x/arch v0.13.0 h1:KCkqVVV1kGg0X87TFysjCJ8MxtZEIU4Ja/yXGeoECdA=
 golang.org/x/arch v0.13.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
 golang.org/x/arch v0.13.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
@@ -2110,7 +1918,6 @@ golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0
 golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
 golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
 golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
 golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
 golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
 golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
-golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
 golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0=
 golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0=
 golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio=
 golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio=
 golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
 golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
@@ -2118,8 +1925,6 @@ golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq
 golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
 golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
 golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ=
 golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ=
 golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
 golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
-golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
-golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
 golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc=
 golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc=
 golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc=
 golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc=
 golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@@ -2137,12 +1942,8 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0
 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
 golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
 golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
 golang.org/x/exp v0.0.0-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE=
 golang.org/x/exp v0.0.0-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE=
-golang.org/x/exp v0.0.0-20241210194714-1829a127f884 h1:Y/Mj/94zIQQGHVSv1tTtQBDaQaJe62U9bkDZKKyhPCU=
-golang.org/x/exp v0.0.0-20241210194714-1829a127f884/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c=
-golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67 h1:1UoZQm6f0P/ZO0w1Ri+f+ifG/gXhegadRdwBIXEFWDo=
-golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c=
-golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8 h1:yqrTHse8TCMW1M1ZCP+VAR/l0kKxwaAIqN/il7x4voA=
-golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8/go.mod h1:tujkw807nyEEAamNbDrEGzRav+ilXA7PCRAd6xsmwiU=
+golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c h1:KL/ZBHXgKGVmuZBZ01Lt57yE5ws8ZPSkkihmEyq7FXc=
+golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c/go.mod h1:tujkw807nyEEAamNbDrEGzRav+ilXA7PCRAd6xsmwiU=
 golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
 golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
 golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
 golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
 golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
 golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
@@ -2266,10 +2067,6 @@ golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
 golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
 golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
 golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA=
 golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA=
 golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
 golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
-golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI=
-golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs=
-golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
-golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
 golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0=
 golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0=
 golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k=
 golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
@@ -2301,8 +2098,6 @@ golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec
 golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I=
 golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I=
 golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw=
 golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw=
 golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4=
 golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4=
-golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE=
-golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
 golang.org/x/oauth2 v0.25.0 h1:CY4y7XT9v0cRI9oupztF8AgiIu99L/ksR/Xp/6jrZ70=
 golang.org/x/oauth2 v0.25.0 h1:CY4y7XT9v0cRI9oupztF8AgiIu99L/ksR/Xp/6jrZ70=
 golang.org/x/oauth2 v0.25.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
 golang.org/x/oauth2 v0.25.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -2445,8 +2240,6 @@ golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
-golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
 golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
 golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
 golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
@@ -2465,8 +2258,8 @@ golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
 golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
 golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
 golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
 golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
 golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
 golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
-golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q=
-golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
+golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg=
+golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek=
 golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -2497,8 +2290,6 @@ golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxb
 golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg=
-golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
 golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
 golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
 golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
 golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
 golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -2575,8 +2366,6 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc
 golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k=
 golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k=
 golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
 golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
 golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s=
 golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s=
-golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8=
-golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw=
 golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE=
 golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE=
 golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588=
 golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588=
 golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -2655,12 +2444,8 @@ google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60c
 google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0=
 google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0=
 google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg=
 google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg=
 google.golang.org/api v0.122.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms=
 google.golang.org/api v0.122.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms=
-google.golang.org/api v0.211.0 h1:IUpLjq09jxBSV1lACO33CGY3jsRcbctfGzhj+ZSE/Bg=
-google.golang.org/api v0.211.0/go.mod h1:XOloB4MXFH4UTlQSGuNUxw0UT74qdENK8d6JNsXKLi0=
-google.golang.org/api v0.214.0 h1:h2Gkq07OYi6kusGOaT/9rnNljuXmqPnaig7WGPmKbwA=
-google.golang.org/api v0.214.0/go.mod h1:bYPpLG8AyeMWwDU6NXoB00xC0DFkikVvd5MfwoxjLqE=
-google.golang.org/api v0.218.0 h1:x6JCjEWeZ9PFCRe9z0FBrNwj7pB7DOAqT35N+IPnAUA=
-google.golang.org/api v0.218.0/go.mod h1:5VGHBAkxrA/8EFjLVEYmMUJ8/8+gWWQ3s4cFH0FxG2M=
+google.golang.org/api v0.219.0 h1:nnKIvxKs/06jWawp2liznTBnMRQBEPpGo7I+oEypTX0=
+google.golang.org/api v0.219.0/go.mod h1:K6OmjGm+NtLrIkHxv1U3a0qIf/0JOvAHd5O/6AoyKYE=
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -2801,18 +2586,12 @@ google.golang.org/genproto v0.0.0-20230323212658-478b75c54725/go.mod h1:UUQDJDOl
 google.golang.org/genproto v0.0.0-20230330154414-c0448cd141ea/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak=
 google.golang.org/genproto v0.0.0-20230330154414-c0448cd141ea/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak=
 google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak=
 google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak=
 google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU=
 google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU=
-google.golang.org/genproto v0.0.0-20241209162323-e6fa225c2576 h1:k48HcZ4FE6in0o8IflZCkc1lTc2u37nhGd8P+fo4r24=
-google.golang.org/genproto v0.0.0-20241209162323-e6fa225c2576/go.mod h1:DV2u3tCn/AcVjjmGYZKt6HyvY4w4y3ipAdHkMbe/0i4=
-google.golang.org/genproto v0.0.0-20250122153221-138b5a5a4fd4 h1:Pw6WnI9W/LIdRxqK7T6XGugGbHIRl5Q7q3BssH6xk4s=
-google.golang.org/genproto v0.0.0-20250122153221-138b5a5a4fd4/go.mod h1:qbZzneIOXSq+KFAFut9krLfRLZiFLzZL5u2t8SV83EE=
-google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 h1:CkkIfIt50+lT6NHAVoRYEyAvQGFM7xEwXUUywFvEb3Q=
-google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576/go.mod h1:1R3kvZ1dtP3+4p4d3G8uJ8rFk/fWlScl38vanWACI08=
-google.golang.org/genproto/googleapis/api v0.0.0-20250122153221-138b5a5a4fd4 h1://y4MHaM7tNLqTeWKyfBIeoAMxwKwRm/nODb5IKA3BE=
-google.golang.org/genproto/googleapis/api v0.0.0-20250122153221-138b5a5a4fd4/go.mod h1:AfA77qWLcidQWywD0YgqfpJzf50w2VjzBml3TybHeJU=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20241209162323-e6fa225c2576 h1:8ZmaLZE4XWrtU3MyClkYqqtl6Oegr3235h7jxsDyqCY=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20241209162323-e6fa225c2576/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250122153221-138b5a5a4fd4 h1:yrTuav+chrF0zF/joFGICKTzYv7mh/gr9AgEXrVU8ao=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250122153221-138b5a5a4fd4/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50=
+google.golang.org/genproto v0.0.0-20250127172529-29210b9bc287 h1:WoUI1G0DQ648FKvSl756SKxHQR/bI+y4HyyIQfxMWI8=
+google.golang.org/genproto v0.0.0-20250127172529-29210b9bc287/go.mod h1:wkQ2Aj/xvshAUDtO/JHvu9y+AaN9cqs28QuSVSHtZSY=
+google.golang.org/genproto/googleapis/api v0.0.0-20250127172529-29210b9bc287 h1:A2ni10G3UlplFrWdCDJTl7D7mJ7GSRm37S+PDimaKRw=
+google.golang.org/genproto/googleapis/api v0.0.0-20250127172529-29210b9bc287/go.mod h1:iYONQfRdizDB8JJBybql13nArx91jcUk7zCXEsOofM4=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250127172529-29210b9bc287 h1:J1H9f+LEdWAfHcez/4cvaVBox7cOYT+IU6rgqj5x++8=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250127172529-29210b9bc287/go.mod h1:8BS3B93F/U1juMFq9+EDk+qOT5CO1R9IzXxG3PTqiRk=
 google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
 google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
 google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
 google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
 google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
 google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
@@ -2855,10 +2634,8 @@ google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5v
 google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw=
 google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw=
 google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g=
 google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g=
 google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8=
 google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8=
-google.golang.org/grpc v1.69.0 h1:quSiOM1GJPmPH5XtU+BCoVXcDVJJAzNcoyfC2cCjGkI=
-google.golang.org/grpc v1.69.0/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4=
-google.golang.org/grpc v1.69.4 h1:MF5TftSMkd8GLw/m0KM6V8CMOCY6NZ1NQDPGFgbTt4A=
-google.golang.org/grpc v1.69.4/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4=
+google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ=
+google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw=
 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
 google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
 google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
@@ -2877,14 +2654,8 @@ google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqw
 google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
 google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
 google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
 google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
 google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
 google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.35.2 h1:8Ar7bF+apOIoThw1EdZl0p1oWvMqTHmpA2fRTyZO8io=
-google.golang.org/protobuf v1.35.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
-google.golang.org/protobuf v1.36.0 h1:mjIs9gYtt56AzC4ZaffQuh88TZurBGhIJMBZGSxNerQ=
-google.golang.org/protobuf v1.36.0/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
-google.golang.org/protobuf v1.36.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk=
-google.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
-google.golang.org/protobuf v1.36.3 h1:82DV7MYdb8anAVi3qge1wSnMDrnKK7ebr+I0hHRN1BU=
-google.golang.org/protobuf v1.36.3/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
+google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM=
+google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -2962,12 +2733,8 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt
 honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
 honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
 honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las=
 honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las=
-k8s.io/api v0.32.0 h1:OL9JpbvAU5ny9ga2fb24X8H6xQlVp+aJMFlgtQjR9CE=
-k8s.io/api v0.32.0/go.mod h1:4LEwHZEf6Q/cG96F3dqR965sYOfmPM7rq81BLgsE0p0=
 k8s.io/api v0.32.1 h1:f562zw9cy+GvXzXf0CKlVQ7yHJVYzLfL6JAS4kOAaOc=
 k8s.io/api v0.32.1 h1:f562zw9cy+GvXzXf0CKlVQ7yHJVYzLfL6JAS4kOAaOc=
 k8s.io/api v0.32.1/go.mod h1:/Yi/BqkuueW1BgpoePYBRdDYfjPF5sgTr5+YqDZra5k=
 k8s.io/api v0.32.1/go.mod h1:/Yi/BqkuueW1BgpoePYBRdDYfjPF5sgTr5+YqDZra5k=
-k8s.io/apimachinery v0.32.0 h1:cFSE7N3rmEEtv4ei5X6DaJPHHX0C+upp+v5lVPiEwpg=
-k8s.io/apimachinery v0.32.0/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE=
 k8s.io/apimachinery v0.32.1 h1:683ENpaCBjma4CYqsmZyhEzrGz6cjn1MY/X2jB2hkZs=
 k8s.io/apimachinery v0.32.1 h1:683ENpaCBjma4CYqsmZyhEzrGz6cjn1MY/X2jB2hkZs=
 k8s.io/apimachinery v0.32.1/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE=
 k8s.io/apimachinery v0.32.1/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE=
 k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
 k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=

+ 11 - 9
internal/user/errors.go

@@ -3,13 +3,15 @@ package user
 import "github.com/uozi-tech/cosy"
 import "github.com/uozi-tech/cosy"
 
 
 var (
 var (
-	e                         = cosy.NewErrorScope("user")
-	ErrPasswordIncorrect      = e.New(40301, "password incorrect")
-	ErrUserBanned             = e.New(40303, "user banned")
-	ErrOTPCode                = e.New(40304, "invalid otp code")
-	ErrRecoveryCode           = e.New(40305, "invalid recovery code")
-	ErrWebAuthnNotConfigured  = e.New(50000, "WebAuthn settings are not configured")
-	ErrUserNotEnabledOTPAs2FA = e.New(50001, "user not enabled otp as 2fa")
-	ErrOTPOrRecoveryCodeEmpty = e.New(50002, "otp or recovery code empty")
-	ErrSessionNotFound        = e.New(40401, "session not found")
+	e                          = cosy.NewErrorScope("user")
+	ErrPasswordIncorrect       = e.New(40301, "password incorrect")
+	ErrUserBanned              = e.New(40303, "user banned")
+	ErrOTPCode                 = e.New(40304, "invalid otp code")
+	ErrRecoveryCode            = e.New(40305, "invalid recovery code")
+	ErrWebAuthnNotConfigured   = e.New(50000, "WebAuthn settings are not configured")
+	ErrUserNotEnabledOTPAs2FA  = e.New(50001, "user not enabled otp as 2fa")
+	ErrOTPOrRecoveryCodeEmpty  = e.New(50002, "otp or recovery code empty")
+	ErrCannotRemoveInitUser    = e.New(50003, "cannot remove initial user")
+	ErrChangeInitUserPwdInDemo = e.New(50004, "cannot change initial user password in demo mode")
+	ErrSessionNotFound         = e.New(40401, "session not found")
 )
 )

+ 2 - 2
model/user.go

@@ -9,8 +9,8 @@ import (
 type User struct {
 type User struct {
 	Model
 	Model
 
 
-	Name         string `json:"name"`
-	Password     string `json:"-"`
+	Name         string `json:"name" cosy:"add:max=20;update:omitempty,max=20;list:fussy;db_unique"`
+	Password     string `json:"-" cosy:"add:required,max=20;update:omitempty,max=20"`
 	Status       bool   `json:"status" gorm:"default:1"`
 	Status       bool   `json:"status" gorm:"default:1"`
 	OTPSecret    []byte `json:"-" gorm:"type:blob"`
 	OTPSecret    []byte `json:"-" gorm:"type:blob"`
 	EnabledTwoFA bool   `json:"enabled_2fa" gorm:"-"`
 	EnabledTwoFA bool   `json:"enabled_2fa" gorm:"-"`