Skip to content

Commit 77c9869

Browse files
committed
feat: 增加MCP启动能力,增加AI工作流需求整理能力。
1 parent 14f937f commit 77c9869

36 files changed

+5602
-568
lines changed
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
package system
2+
3+
import (
4+
"github.com/flipped-aurora/gin-vue-admin/server/global"
5+
commonReq "github.com/flipped-aurora/gin-vue-admin/server/model/common/request"
6+
"github.com/flipped-aurora/gin-vue-admin/server/model/common/response"
7+
systemReq "github.com/flipped-aurora/gin-vue-admin/server/model/system/request"
8+
"github.com/flipped-aurora/gin-vue-admin/server/utils"
9+
"github.com/gin-gonic/gin"
10+
"go.uber.org/zap"
11+
)
12+
13+
type AIWorkflowSessionApi struct{}
14+
15+
func (a *AIWorkflowSessionApi) Save(c *gin.Context) {
16+
var info systemReq.SysAIWorkflowSessionUpsert
17+
if err := c.ShouldBindJSON(&info); err != nil {
18+
response.FailWithMessage(err.Error(), c)
19+
return
20+
}
21+
22+
session, err := aiWorkflowSessionService.Save(c.Request.Context(), utils.GetUserID(c), info)
23+
if err != nil {
24+
global.GVA_LOG.Error("保存 AI 工作流会话失败", zap.Error(err))
25+
response.FailWithMessage("保存会话失败", c)
26+
return
27+
}
28+
29+
response.OkWithDetailed(gin.H{"session": session}, "保存成功", c)
30+
}
31+
32+
func (a *AIWorkflowSessionApi) GetList(c *gin.Context) {
33+
var info systemReq.SysAIWorkflowSessionSearch
34+
if err := c.ShouldBindJSON(&info); err != nil {
35+
response.FailWithMessage(err.Error(), c)
36+
return
37+
}
38+
39+
list, total, err := aiWorkflowSessionService.GetList(c.Request.Context(), utils.GetUserID(c), info)
40+
if err != nil {
41+
global.GVA_LOG.Error("获取 AI 工作流会话列表失败", zap.Error(err))
42+
response.FailWithMessage("获取会话列表失败", c)
43+
return
44+
}
45+
46+
response.OkWithDetailed(response.PageResult{
47+
List: list,
48+
Total: total,
49+
Page: info.Page,
50+
PageSize: info.PageSize,
51+
}, "获取成功", c)
52+
}
53+
54+
func (a *AIWorkflowSessionApi) GetDetail(c *gin.Context) {
55+
var info commonReq.GetById
56+
if err := c.ShouldBindJSON(&info); err != nil {
57+
response.FailWithMessage(err.Error(), c)
58+
return
59+
}
60+
61+
session, err := aiWorkflowSessionService.GetDetail(c.Request.Context(), utils.GetUserID(c), info.Uint())
62+
if err != nil {
63+
global.GVA_LOG.Error("获取 AI 工作流会话详情失败", zap.Error(err))
64+
response.FailWithMessage("获取会话详情失败", c)
65+
return
66+
}
67+
68+
response.OkWithDetailed(gin.H{"session": session}, "获取成功", c)
69+
}
70+
71+
func (a *AIWorkflowSessionApi) Delete(c *gin.Context) {
72+
var info commonReq.GetById
73+
if err := c.ShouldBindJSON(&info); err != nil {
74+
response.FailWithMessage(err.Error(), c)
75+
return
76+
}
77+
78+
if err := aiWorkflowSessionService.Delete(c.Request.Context(), utils.GetUserID(c), info.Uint()); err != nil {
79+
global.GVA_LOG.Error("删除 AI 工作流会话失败", zap.Error(err))
80+
response.FailWithMessage("删除会话失败", c)
81+
return
82+
}
83+
84+
response.OkWithMessage("删除成功", c)
85+
}
86+
87+
func (a *AIWorkflowSessionApi) DumpMarkdown(c *gin.Context) {
88+
var info systemReq.SysAIWorkflowMarkdownDump
89+
if err := c.ShouldBindJSON(&info); err != nil {
90+
response.FailWithMessage(err.Error(), c)
91+
return
92+
}
93+
94+
result, err := aiWorkflowSessionService.DumpMarkdown(c.Request.Context(), utils.GetUserID(c), info)
95+
if err != nil {
96+
global.GVA_LOG.Error("AI 工作流 Markdown 落盘失败", zap.Error(err))
97+
response.FailWithMessage(err.Error(), c)
98+
return
99+
}
100+
101+
response.OkWithDetailed(gin.H{"result": result}, "落盘成功", c)
102+
}

server/api/v1/system/auto_code_mcp.go

Lines changed: 77 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package system
22

33
import (
4+
"strings"
5+
46
"github.com/flipped-aurora/gin-vue-admin/server/global"
57
mcpTool "github.com/flipped-aurora/gin-vue-admin/server/mcp"
68
"github.com/flipped-aurora/gin-vue-admin/server/mcp/client"
@@ -26,35 +28,69 @@ func (a *AutoCodeTemplateApi) MCP(c *gin.Context) {
2628
response.OkWithMessage("创建成功,MCP Tool路径:"+toolFilePath, c)
2729
}
2830

31+
func (a *AutoCodeTemplateApi) MCPStatus(c *gin.Context) {
32+
response.OkWithData(gin.H{
33+
"status": mcpTool.GetManagedStandaloneStatus(c.Request.Context()),
34+
"mcpServerConfig": buildMCPServerConfig(),
35+
}, c)
36+
}
37+
38+
func (a *AutoCodeTemplateApi) MCPStart(c *gin.Context) {
39+
status, err := mcpTool.StartManagedStandalone(c.Request.Context())
40+
if err != nil {
41+
response.FailWithDetailed(gin.H{
42+
"status": status,
43+
"mcpServerConfig": buildMCPServerConfig(),
44+
}, err.Error(), c)
45+
return
46+
}
47+
48+
response.OkWithDetailed(gin.H{
49+
"status": status,
50+
"mcpServerConfig": buildMCPServerConfig(),
51+
}, "MCP独立服务已启动", c)
52+
}
53+
54+
func (a *AutoCodeTemplateApi) MCPStop(c *gin.Context) {
55+
status, err := mcpTool.StopManagedStandalone(c.Request.Context())
56+
if err != nil {
57+
response.FailWithDetailed(gin.H{
58+
"status": status,
59+
"mcpServerConfig": buildMCPServerConfig(),
60+
}, err.Error(), c)
61+
return
62+
}
63+
64+
response.OkWithDetailed(gin.H{
65+
"status": status,
66+
"mcpServerConfig": buildMCPServerConfig(),
67+
}, "MCP独立服务已停用", c)
68+
}
69+
2970
func (a *AutoCodeTemplateApi) MCPList(c *gin.Context) {
3071
baseURL := mcpTool.ResolveMCPServiceURL()
31-
testClient, err := client.NewClient(baseURL, "testClient", "v1.0.0", global.GVA_CONFIG.MCP.Name, incomingMCPHeaders(c))
72+
testClient, err := client.NewClient(baseURL, "testClient", "v1.0.0", mcpServerName(), incomingMCPHeaders(c))
3273
if err != nil {
33-
response.FailWithMessage("连接MCP服务失败:"+err.Error(), c)
74+
response.FailWithDetailed(gin.H{
75+
"status": mcpTool.GetManagedStandaloneStatus(c.Request.Context()),
76+
"mcpServerConfig": buildMCPServerConfig(),
77+
}, "连接MCP服务失败:"+err.Error(), c)
3478
return
3579
}
3680
defer testClient.Close()
3781

3882
list, err := testClient.ListTools(c.Request.Context(), mcp.ListToolsRequest{})
3983
if err != nil {
40-
response.FailWithMessage("获取工具列表失败:"+err.Error(), c)
84+
response.FailWithDetailed(gin.H{
85+
"status": mcpTool.GetManagedStandaloneStatus(c.Request.Context()),
86+
"mcpServerConfig": buildMCPServerConfig(),
87+
}, "获取工具列表失败:"+err.Error(), c)
4188
return
4289
}
4390

44-
authHeader := mcpTool.ConfiguredAuthHeader()
45-
mcpServerConfig := map[string]interface{}{
46-
"mcpServers": map[string]interface{}{
47-
global.GVA_CONFIG.MCP.Name: map[string]interface{}{
48-
"url": baseURL,
49-
"headers": map[string]string{
50-
authHeader: "${YOUR_GVA_TOKEN}",
51-
},
52-
},
53-
},
54-
}
55-
5691
response.OkWithData(gin.H{
57-
"mcpServerConfig": mcpServerConfig,
92+
"status": mcpTool.GetManagedStandaloneStatus(c.Request.Context()),
93+
"mcpServerConfig": buildMCPServerConfig(),
5894
"list": list,
5995
}, c)
6096
}
@@ -76,7 +112,7 @@ func (a *AutoCodeTemplateApi) MCPTest(c *gin.Context) {
76112
}
77113

78114
baseURL := mcpTool.ResolveMCPServiceURL()
79-
testClient, err := client.NewClient(baseURL, "testClient", "v1.0.0", global.GVA_CONFIG.MCP.Name, incomingMCPHeaders(c))
115+
testClient, err := client.NewClient(baseURL, "testClient", "v1.0.0", mcpServerName(), incomingMCPHeaders(c))
80116
if err != nil {
81117
response.FailWithMessage("连接MCP服务失败:"+err.Error(), c)
82118
return
@@ -111,3 +147,27 @@ func incomingMCPHeaders(c *gin.Context) map[string]string {
111147
headerName: headerValue,
112148
}
113149
}
150+
151+
func buildMCPServerConfig() map[string]interface{} {
152+
baseURL := mcpTool.ResolveMCPServiceURL()
153+
authHeader := mcpTool.ConfiguredAuthHeader()
154+
serverName := mcpServerName()
155+
156+
return map[string]interface{}{
157+
"mcpServers": map[string]interface{}{
158+
serverName: map[string]interface{}{
159+
"url": baseURL,
160+
"headers": map[string]string{
161+
authHeader: "${YOUR_GVA_TOKEN}",
162+
},
163+
},
164+
},
165+
}
166+
}
167+
168+
func mcpServerName() string {
169+
if name := strings.TrimSpace(global.GVA_CONFIG.MCP.Name); name != "" {
170+
return name
171+
}
172+
return "gva"
173+
}

server/api/v1/system/enter.go

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -27,31 +27,33 @@ type ApiGroup struct {
2727
LoginLogApi
2828
ApiTokenApi
2929
SkillsApi
30+
AIWorkflowSessionApi
3031
}
3132

3233
var (
33-
apiService = service.ServiceGroupApp.SystemServiceGroup.ApiService
34-
jwtService = service.ServiceGroupApp.SystemServiceGroup.JwtService
35-
menuService = service.ServiceGroupApp.SystemServiceGroup.MenuService
36-
userService = service.ServiceGroupApp.SystemServiceGroup.UserService
37-
initDBService = service.ServiceGroupApp.SystemServiceGroup.InitDBService
38-
casbinService = service.ServiceGroupApp.SystemServiceGroup.CasbinService
39-
baseMenuService = service.ServiceGroupApp.SystemServiceGroup.BaseMenuService
40-
authorityService = service.ServiceGroupApp.SystemServiceGroup.AuthorityService
41-
dictionaryService = service.ServiceGroupApp.SystemServiceGroup.DictionaryService
42-
authorityBtnService = service.ServiceGroupApp.SystemServiceGroup.AuthorityBtnService
43-
systemConfigService = service.ServiceGroupApp.SystemServiceGroup.SystemConfigService
44-
sysParamsService = service.ServiceGroupApp.SystemServiceGroup.SysParamsService
45-
operationRecordService = service.ServiceGroupApp.SystemServiceGroup.OperationRecordService
46-
dictionaryDetailService = service.ServiceGroupApp.SystemServiceGroup.DictionaryDetailService
47-
autoCodeService = service.ServiceGroupApp.SystemServiceGroup.AutoCodeService
48-
autoCodePluginService = service.ServiceGroupApp.SystemServiceGroup.AutoCodePlugin
49-
autoCodePackageService = service.ServiceGroupApp.SystemServiceGroup.AutoCodePackage
50-
autoCodeHistoryService = service.ServiceGroupApp.SystemServiceGroup.AutoCodeHistory
51-
autoCodeTemplateService = service.ServiceGroupApp.SystemServiceGroup.AutoCodeTemplate
52-
sysVersionService = service.ServiceGroupApp.SystemServiceGroup.SysVersionService
53-
sysErrorService = service.ServiceGroupApp.SystemServiceGroup.SysErrorService
54-
loginLogService = service.ServiceGroupApp.SystemServiceGroup.LoginLogService
55-
apiTokenService = service.ServiceGroupApp.SystemServiceGroup.ApiTokenService
56-
skillsService = service.ServiceGroupApp.SystemServiceGroup.SkillsService
34+
apiService = service.ServiceGroupApp.SystemServiceGroup.ApiService
35+
jwtService = service.ServiceGroupApp.SystemServiceGroup.JwtService
36+
menuService = service.ServiceGroupApp.SystemServiceGroup.MenuService
37+
userService = service.ServiceGroupApp.SystemServiceGroup.UserService
38+
initDBService = service.ServiceGroupApp.SystemServiceGroup.InitDBService
39+
casbinService = service.ServiceGroupApp.SystemServiceGroup.CasbinService
40+
baseMenuService = service.ServiceGroupApp.SystemServiceGroup.BaseMenuService
41+
authorityService = service.ServiceGroupApp.SystemServiceGroup.AuthorityService
42+
dictionaryService = service.ServiceGroupApp.SystemServiceGroup.DictionaryService
43+
authorityBtnService = service.ServiceGroupApp.SystemServiceGroup.AuthorityBtnService
44+
systemConfigService = service.ServiceGroupApp.SystemServiceGroup.SystemConfigService
45+
sysParamsService = service.ServiceGroupApp.SystemServiceGroup.SysParamsService
46+
operationRecordService = service.ServiceGroupApp.SystemServiceGroup.OperationRecordService
47+
dictionaryDetailService = service.ServiceGroupApp.SystemServiceGroup.DictionaryDetailService
48+
autoCodeService = service.ServiceGroupApp.SystemServiceGroup.AutoCodeService
49+
aiWorkflowSessionService = service.ServiceGroupApp.SystemServiceGroup.AIWorkflowSession
50+
autoCodePluginService = service.ServiceGroupApp.SystemServiceGroup.AutoCodePlugin
51+
autoCodePackageService = service.ServiceGroupApp.SystemServiceGroup.AutoCodePackage
52+
autoCodeHistoryService = service.ServiceGroupApp.SystemServiceGroup.AutoCodeHistory
53+
autoCodeTemplateService = service.ServiceGroupApp.SystemServiceGroup.AutoCodeTemplate
54+
sysVersionService = service.ServiceGroupApp.SystemServiceGroup.SysVersionService
55+
sysErrorService = service.ServiceGroupApp.SystemServiceGroup.SysErrorService
56+
loginLogService = service.ServiceGroupApp.SystemServiceGroup.LoginLogService
57+
apiTokenService = service.ServiceGroupApp.SystemServiceGroup.ApiTokenService
58+
skillsService = service.ServiceGroupApp.SystemServiceGroup.SkillsService
5759
)

0 commit comments

Comments
 (0)