package workflow import ( "ai_scheduler/internal/config" "ai_scheduler/internal/domain/component" "ai_scheduler/internal/domain/repo" "ai_scheduler/internal/domain/workflow/runtime" "ai_scheduler/internal/pkg/utils_ollama" toolManager "ai_scheduler/internal/domain/tools" "github.com/google/wire" ) var ProviderSetWorkflow = wire.NewSet(NewRegistry) // NewRegistry 注入共享依赖并注册默认 Registry,确保自注册工作流可被发现 func NewRegistry(conf *config.Config, llm *utils_ollama.Client, repos *repo.Repos, components *component.Components) *runtime.Registry { // 步骤1:设置运行时依赖(配置与LLM客户端),供工作流工厂在首次实例化时使用;必须在任何调用 Invoke 之前完成,否则会触发 "deps not set" runtime.SetDeps(&runtime.Deps{ Conf: conf, LLM: llm, ToolManager: toolManager.NewManager(conf), Repos: repos, Component: components, }) // 步骤2:创建新的工作流注册表;注册表负责按工作流ID惰性实例化并缓存单例实例,保障并发访问下的安全 r := runtime.NewRegistry() // 步骤3:将该注册表设置为全局默认,便于通过 runtime.Default() 获取;自注册的工作流可通过默认注册表被发现并调用 runtime.SetDefault(r) return r }