package routes import ( "context" "git.x2erp.com/qdy/go-base/authbase" "git.x2erp.com/qdy/go-base/ctx" "git.x2erp.com/qdy/go-base/model/response" "git.x2erp.com/qdy/go-base/webx/router" "git.x2erp.com/qdy/go-svc-code/internal/opencode" ) // PromptSyncRequest 同步对话请求 type PromptSyncRequest struct { SessionID string `json:"sessionID" binding:"required"` Parts []opencode.TextPart `json:"parts" binding:"required"` Agent string `json:"agent,omitempty"` Model *opencode.ModelInfo `json:"model,omitempty"` } // PromptSyncResponse 同步对话响应 type PromptSyncResponse struct { Info opencode.AssistantMessage `json:"info"` Parts []interface{} `json:"parts"` } // RegisterPromptSyncRoutes 注册同步对话路由 func RegisterPromptSyncRoutes(ws *router.RouterService, client opencode.OpenCodeClient) { // 同步对话(需要Token认证) ws.POST("/api/prompt/sync", func(req *PromptSyncRequest, ctx context.Context, reqCtx *ctx.RequestContext) (*response.QueryResult[PromptSyncResponse], error) { prompt := &opencode.PromptRequest{ Parts: req.Parts, Agent: req.Agent, Model: req.Model, } resp, err := client.SendPrompt(ctx, req.SessionID, prompt) if err != nil { return &response.QueryResult[PromptSyncResponse]{ Success: false, Message: err.Error(), }, nil } return &response.QueryResult[PromptSyncResponse]{ Success: true, Data: PromptSyncResponse{ Info: resp.Info, Parts: resp.Parts, }, }, nil }, ).Use(authbase.TokenAuth).Desc("同步对话(阻塞等待完整响应)").Register() }