From 2e03ae7914282658599b6648099c987442f551d7 Mon Sep 17 00:00:00 2001 From: mlogclub Date: Mon, 13 Apr 2026 21:15:56 +0800 Subject: [PATCH] feat: refactor request types and service integration for improved runtime handling --- internal/ai/application/runtime/types.go | 61 ++++++++++++++++++++--- internal/ai/runtime/app/service.go | 63 ++++-------------------- internal/ai/runtime/app/types.go | 60 ++-------------------- 3 files changed, 69 insertions(+), 115 deletions(-) diff --git a/internal/ai/application/runtime/types.go b/internal/ai/application/runtime/types.go index 1c15011..faff57a 100644 --- a/internal/ai/application/runtime/types.go +++ b/internal/ai/application/runtime/types.go @@ -1,9 +1,58 @@ package runtime -import runtimeapp "cs-agent/internal/ai/runtime/app" +import ( + "cs-agent/internal/ai/runtime/registry" + "cs-agent/internal/models" +) -// TODO 为什么要定义类型别名? -type Request = runtimeapp.Request -type ResumeRequest = runtimeapp.ResumeRequest -type InterruptContextSummary = runtimeapp.InterruptContextSummary -type Summary = runtimeapp.Summary +type Request struct { + Conversation *models.Conversation + UserMessage *models.Message + AIAgent *models.AIAgent + AIConfig *models.AIConfig + ManualSkillCode string + SelectedSkill *models.SkillDefinition + SkillRouteReason string + SkillRouteTrace string + CheckPointID string + ToolSet *registry.ToolSet +} + +type ResumeRequest struct { + Conversation *models.Conversation + AIAgent *models.AIAgent + AIConfig *models.AIConfig + CheckPointID string + ResumeData map[string]any + ToolSet *registry.ToolSet +} + +type InterruptContextSummary struct { + Type string `json:"type,omitempty"` + ID string `json:"id"` + InfoPreview string `json:"infoPreview,omitempty"` +} + +type Summary struct { + RunID string + Status string + ReplyText string + PlannedSkillCode string + PlannedSkillName string + PlanReason string + SkillRouteTrace string + SkillAllowedToolCodes []string + ModelName string + PromptTokens int + CompletionTokens int + HistoryMessageCount int + RetrieverCount int + ToolCallCount int + ToolCodes []string + InvokedToolCodes []string + CheckPointID string + Interrupted bool + Interrupts []InterruptContextSummary + TraceData string + ErrorMessage string +} diff --git a/internal/ai/runtime/app/service.go b/internal/ai/runtime/app/service.go index 25c2873..22a8099 100644 --- a/internal/ai/runtime/app/service.go +++ b/internal/ai/runtime/app/service.go @@ -3,74 +3,29 @@ package app import ( "context" - "cs-agent/internal/ai/runtime/internal/executor" + applicationruntime "cs-agent/internal/ai/application/runtime" ) type Service struct { - runtime *executor.Service - catalog *toolCatalog - prepare *prepareService + app *applicationruntime.Service } func NewService() *Service { - catalog := newToolCatalog() return &Service{ - runtime: executor.NewService(), - catalog: catalog, - prepare: newPrepareService(catalog), + app: applicationruntime.NewService(), } } func (s *Service) Run(ctx context.Context, req Request) (*Summary, error) { - selectedSkill, skillReason, skillTrace, skillErr := s.prepare.selectSkill(ctx, req) - req.SelectedSkill = selectedSkill - req.SkillRouteReason = skillReason - req.SkillRouteTrace = skillTrace - if req.SelectedSkill != nil { - req.SelectedSkill = cloneSkillDefinition(req.SelectedSkill) + if s == nil || s.app == nil { + return nil, nil } - if err := s.prepare.prepareToolsForRun(&req); err != nil { - return nil, err - } - summary, err := s.runtime.ExecuteRun(ctx, executor.RunInput{ - Conversation: req.Conversation, - UserMessage: req.UserMessage, - AIAgent: req.AIAgent, - AIConfig: req.AIConfig, - SelectedSkill: req.SelectedSkill, - SkillRouteReason: req.SkillRouteReason, - SkillRouteTrace: req.SkillRouteTrace, - CheckPointID: req.CheckPointID, - ToolSet: req.ToolSet, - }) - if err != nil { - ret := toSummary(summary) - if ret != nil && skillErr != nil && ret.PlanReason == "" { - ret.PlanReason = "skill_failed_fallback_runtime" - } - return ret, err - } - ret := toSummary(summary) - if ret != nil && skillErr != nil && ret.PlanReason == "" { - ret.PlanReason = "skill_failed_fallback_runtime" - } - return ret, nil + return s.app.Run(ctx, req) } func (s *Service) Resume(ctx context.Context, req ResumeRequest) (*Summary, error) { - if err := s.prepare.prepareToolsForResume(&req); err != nil { - return nil, err + if s == nil || s.app == nil { + return nil, nil } - summary, err := s.runtime.ExecuteResume(ctx, executor.ResumeInput{ - Conversation: req.Conversation, - AIAgent: req.AIAgent, - AIConfig: req.AIConfig, - CheckPointID: req.CheckPointID, - ResumeData: req.ResumeData, - ToolSet: req.ToolSet, - }) - if err != nil { - return toSummary(summary), err - } - return toSummary(summary), nil + return s.app.Resume(ctx, req) } diff --git a/internal/ai/runtime/app/types.go b/internal/ai/runtime/app/types.go index 86b0d05..1184930 100644 --- a/internal/ai/runtime/app/types.go +++ b/internal/ai/runtime/app/types.go @@ -1,58 +1,8 @@ package app -import ( - "cs-agent/internal/ai/runtime/registry" - "cs-agent/internal/models" -) +import applicationruntime "cs-agent/internal/ai/application/runtime" -type Request struct { - Conversation *models.Conversation - UserMessage *models.Message - AIAgent *models.AIAgent - AIConfig *models.AIConfig - ManualSkillCode string - SelectedSkill *models.SkillDefinition - SkillRouteReason string - SkillRouteTrace string - CheckPointID string - ToolSet *registry.ToolSet -} - -type ResumeRequest struct { - Conversation *models.Conversation - AIAgent *models.AIAgent - AIConfig *models.AIConfig - CheckPointID string - ResumeData map[string]any - ToolSet *registry.ToolSet -} - -type InterruptContextSummary struct { - Type string `json:"type,omitempty"` - ID string `json:"id"` - InfoPreview string `json:"infoPreview,omitempty"` -} - -type Summary struct { - RunID string - Status string - ReplyText string - PlannedSkillCode string - PlannedSkillName string - PlanReason string - SkillRouteTrace string - SkillAllowedToolCodes []string - ModelName string - PromptTokens int - CompletionTokens int - HistoryMessageCount int - RetrieverCount int - ToolCallCount int - ToolCodes []string - InvokedToolCodes []string - CheckPointID string - Interrupted bool - Interrupts []InterruptContextSummary - TraceData string - ErrorMessage string -} +type Request = applicationruntime.Request +type ResumeRequest = applicationruntime.ResumeRequest +type InterruptContextSummary = applicationruntime.InterruptContextSummary +type Summary = applicationruntime.Summary