🎨 优化扩展模块,完成ai接入和对话功能

This commit is contained in:
2026-02-12 23:12:28 +08:00
parent 4e611d3a5e
commit 572f3aa15b
779 changed files with 194400 additions and 3136 deletions

29
server/router/app/chat.go Normal file
View File

@@ -0,0 +1,29 @@
package app
import (
v1 "git.echol.cn/loser/st/server/api/v1"
"git.echol.cn/loser/st/server/middleware"
"github.com/gin-gonic/gin"
)
type ChatRouter struct{}
func (cr *ChatRouter) InitChatRouter(Router *gin.RouterGroup) {
chatApi := v1.ApiGroupApp.AppApiGroup.ChatApi
// 所有对话接口都需要登录
chatRouter := Router.Group("chat").Use(middleware.AppJWTAuth())
{
// 对话管理
chatRouter.POST("", chatApi.CreateChat) // 创建对话
chatRouter.GET("/list", chatApi.GetChatList) // 对话列表
chatRouter.GET("/:id", chatApi.GetChatDetail) // 对话详情
chatRouter.GET("/:id/messages", chatApi.GetChatMessages) // 获取消息
chatRouter.DELETE("/:id", chatApi.DeleteChat) // 删除对话
// 消息操作
chatRouter.POST("/send", chatApi.SendMessage) // 发送消息SSE 流式)
chatRouter.POST("/message/edit", chatApi.EditMessage) // 编辑消息
chatRouter.POST("/message/delete", chatApi.DeleteMessage) // 删除消息
}
}

View File

@@ -6,4 +6,6 @@ type RouterGroup struct {
WorldInfoRouter
ExtensionRouter
RegexScriptRouter
ProviderRouter
ChatRouter
}

View File

@@ -43,4 +43,13 @@ func (r *ExtensionRouter) InitExtensionRouter(Router *gin.RouterGroup) {
// 统计
extensionRouter.POST("/stats", extensionApi.UpdateExtensionStats) // 更新扩展统计
}
// 扩展资源文件 - 公开路由(不需要鉴权)
// 原因:<script type="module"> 标签无法携带 JWT header
// 且 ES module 的 import 语句也无法携带认证信息。
// 与原版 SillyTavern 一致:扩展文件作为公开静态资源提供。
extensionPublicRouter := Router.Group("extension")
{
extensionPublicRouter.GET("/:id/asset/*path", extensionApi.ProxyExtensionAsset)
}
}

View File

@@ -0,0 +1,49 @@
package app
import (
v1 "git.echol.cn/loser/st/server/api/v1"
"git.echol.cn/loser/st/server/middleware"
"github.com/gin-gonic/gin"
)
type ProviderRouter struct{}
func (pr *ProviderRouter) InitProviderRouter(Router *gin.RouterGroup) {
providerApi := v1.ApiGroupApp.AppApiGroup.ProviderApi
// 公开接口(不需要登录)
providerPublicRouter := Router.Group("provider")
{
providerPublicRouter.GET("/types", providerApi.GetProviderTypes) // 获取支持的提供商类型
providerPublicRouter.GET("/presetModels", providerApi.GetPresetModels) // 获取预设模型列表
}
// 需要登录的接口
providerAuthRouter := Router.Group("provider").Use(middleware.AppJWTAuth())
{
// 提供商 CRUD
providerAuthRouter.POST("", providerApi.CreateProvider) // 创建提供商
providerAuthRouter.GET("/list", providerApi.GetProviderList) // 获取列表
providerAuthRouter.GET("/:id", providerApi.GetProviderDetail) // 获取详情
providerAuthRouter.PUT("", providerApi.UpdateProvider) // 更新提供商
providerAuthRouter.DELETE("/:id", providerApi.DeleteProvider) // 删除提供商
providerAuthRouter.POST("/setDefault", providerApi.SetDefaultProvider) // 设置默认
// 连通性测试
providerAuthRouter.POST("/test", providerApi.TestProvider) // 测试连接(不需要先保存)
providerAuthRouter.GET("/test/:id", providerApi.TestExistingProvider) // 测试已保存的连接
// 远程模型获取
providerAuthRouter.POST("/fetchModels", providerApi.FetchRemoteModels) // 获取远程模型列表
providerAuthRouter.GET("/fetchModels/:id", providerApi.FetchRemoteModelsExisting) // 获取已保存提供商的远程模型
// 测试消息
providerAuthRouter.POST("/testMessage", providerApi.SendTestMessage) // 发送测试消息
providerAuthRouter.POST("/testMessage/:id", providerApi.SendTestMessageExisting) // 已保存提供商发测试消息
// 模型管理
providerAuthRouter.POST("/model", providerApi.AddModel) // 添加模型
providerAuthRouter.PUT("/model", providerApi.UpdateModel) // 更新模型
providerAuthRouter.DELETE("/model/:id", providerApi.DeleteModel) // 删除模型
}
}