package application import ( "context" "git.cin.su/m/Assistant/contracts/work" "git.cin.su/m/Assistant/modules/work/domain" "git.cin.su/m/Assistant/modules/work/ports" "time" ) func DecideSolutionSearch(input work.SolutionSearchInput) (work.SolutionSearchDecision, error) { return domain.DecideSolutionSearch(input) } func OrchestrateSolutionSearch(ctx context.Context, store ports.GraphStore, request work.SolutionSearchWaveRequest) (work.SolutionSearchWaveResult, error) { decision, err := domain.DecideSolutionSearch(request.Input) if err != nil { return work.SolutionSearchWaveResult{}, err } result := work.SolutionSearchWaveResult{Decision: decision} if !decision.ContinueSearching || decision.State == work.OrchestrationExecuting { return result, nil } graph, intents, err := domain.BuildSolutionSearchWave(decision, request) if err != nil { return work.SolutionSearchWaveResult{}, err } if request.NowUnixMillis < 1 { request.NowUnixMillis = time.Now().UnixMilli() } graph, ready, err := AdmitAndSchedule(ctx, store, GraphScheduleRequest{Graph: graph, Intents: intents, Now: request.NowUnixMillis}) if err != nil { return work.SolutionSearchWaveResult{}, err } result.Graph = graph result.ScheduledNodeIDs = ready result.GraphMaterialized = true return result, nil }