From dc20eaa816239c2674ac54556dc0e77fd19f5516 Mon Sep 17 00:00:00 2001 From: "lilong.129" Date: Thu, 29 May 2025 19:22:23 +0800 Subject: [PATCH] fix: resolve global AntiRisk configuration not taking effect --- internal/version/VERSION | 2 +- runner.go | 4 +--- uixt/mcp_server.go | 40 +++++++++++++++++++++++++++------------- 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/internal/version/VERSION b/internal/version/VERSION index daaee069..a4d05701 100644 --- a/internal/version/VERSION +++ b/internal/version/VERSION @@ -1 +1 @@ -v5.0.0-beta-2505290059 +v5.0.0-beta-2505291922 diff --git a/runner.go b/runner.go index bdaa7237..249ce9b5 100644 --- a/runner.go +++ b/runner.go @@ -374,9 +374,7 @@ func NewCaseRunner(testcase TestCase, hrpRunner *HRPRunner) (*CaseRunner, error) if mcpConfigPath != "" { mcpHost, err := mcphost.NewMCPHost(mcpConfigPath, false) if err != nil { - log.Error().Err(err). - Str("mcpConfigPath", mcpConfigPath).Msg("init MCP hub failed") - return nil, err + return nil, errors.Wrapf(err, "init mcp config %s failed", mcpConfigPath) } caseRunner.parser.MCPHost = mcpHost log.Info().Str("mcpConfigPath", mcpConfigPath).Msg("mcp server loaded") diff --git a/uixt/mcp_server.go b/uixt/mcp_server.go index 3929f9a4..1f039607 100644 --- a/uixt/mcp_server.go +++ b/uixt/mcp_server.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "slices" "time" "github.com/danielpaulus/go-ios/ios" @@ -967,21 +968,16 @@ func (t *ToolSwipeDirection) Implement() server.ToolHandlerFunc { if err := mapToStruct(request.Params.Arguments, &unifiedReq); err != nil { return nil, fmt.Errorf("parse parameters error: %w", err) } + swipeDirection := unifiedReq.Direction.(string) // Swipe action logic - log.Info().Interface("direction", unifiedReq.Direction).Msg("performing swipe") + log.Info().Str("direction", swipeDirection).Msg("performing swipe") // Validate direction validDirections := []string{"up", "down", "left", "right"} - isValid := false - for _, validDir := range validDirections { - if unifiedReq.Direction == validDir { - isValid = true - break - } - } - if !isValid { - return nil, fmt.Errorf("invalid swipe direction: %s, expected one of: %v", unifiedReq.Direction, validDirections) + if !slices.Contains(validDirections, swipeDirection) { + return nil, fmt.Errorf("invalid swipe direction: %s, expected one of: %v", + swipeDirection, validDirections) } opts := []option.ActionOption{ @@ -989,9 +985,12 @@ func (t *ToolSwipeDirection) Implement() server.ToolHandlerFunc { option.WithDuration(getFloat64ValueOrDefault(unifiedReq.Duration, 0.5)), option.WithPressDuration(getFloat64ValueOrDefault(unifiedReq.PressDuration, 0.1)), } + if unifiedReq.AntiRisk { + opts = append(opts, option.WithAntiRisk(true)) + } // Convert direction to coordinates and perform swipe - switch unifiedReq.Direction { + switch swipeDirection { case "up": err = driverExt.Swipe(0.5, 0.5, 0.5, 0.1, opts...) case "down": @@ -1001,14 +1000,15 @@ func (t *ToolSwipeDirection) Implement() server.ToolHandlerFunc { case "right": err = driverExt.Swipe(0.5, 0.5, 0.9, 0.5, opts...) default: - return mcp.NewToolResultError(fmt.Sprintf("Unexpected swipe direction: %s", unifiedReq.Direction)), nil + return mcp.NewToolResultError( + fmt.Sprintf("Unexpected swipe direction: %s", swipeDirection)), nil } if err != nil { return mcp.NewToolResultError(fmt.Sprintf("Swipe failed: %s", err.Error())), nil } - return mcp.NewToolResultText(fmt.Sprintf("Successfully swiped %s", unifiedReq.Direction)), nil + return mcp.NewToolResultText(fmt.Sprintf("Successfully swiped %s", swipeDirection)), nil } } @@ -1025,6 +1025,10 @@ func (t *ToolSwipeDirection) ConvertActionToCallToolRequest(action MobileAction) if pressDuration := action.ActionOptions.PressDuration; pressDuration > 0 { arguments["pressDuration"] = pressDuration } + + // Extract all action options + extractActionOptionsToArguments(action.GetOptions(), arguments) + return buildMCPCallToolRequest(t.Name(), arguments), nil } return mcp.CallToolRequest{}, fmt.Errorf("invalid swipe params: %v", action.Params) @@ -1070,6 +1074,8 @@ func (t *ToolSwipeCoordinate) Implement() server.ToolHandlerFunc { Msg("performing advanced swipe") params := []float64{unifiedReq.FromX, unifiedReq.FromY, unifiedReq.ToX, unifiedReq.ToY} + + // Build action options from the unified request opts := []option.ActionOption{} if unifiedReq.Duration > 0 { opts = append(opts, option.WithDuration(unifiedReq.Duration)) @@ -1077,6 +1083,9 @@ func (t *ToolSwipeCoordinate) Implement() server.ToolHandlerFunc { if unifiedReq.PressDuration > 0 { opts = append(opts, option.WithPressDuration(unifiedReq.PressDuration)) } + if unifiedReq.AntiRisk { + opts = append(opts, option.WithAntiRisk(true)) + } swipeAction := prepareSwipeAction(driverExt, params, opts...) err = swipeAction(driverExt) @@ -1104,6 +1113,10 @@ func (t *ToolSwipeCoordinate) ConvertActionToCallToolRequest(action MobileAction if pressDuration := action.ActionOptions.PressDuration; pressDuration > 0 { arguments["pressDuration"] = pressDuration } + + // Extract all action options + extractActionOptionsToArguments(action.GetOptions(), arguments) + return buildMCPCallToolRequest(t.Name(), arguments), nil } return mcp.CallToolRequest{}, fmt.Errorf("invalid swipe advanced params: %v", action.Params) @@ -1425,6 +1438,7 @@ func extractActionOptionsToArguments(actionOptions []option.ActionOption, argume "ignore_NotFoundError": tempOptions.IgnoreNotFoundError, "regex": tempOptions.Regex, "tap_random_rect": tempOptions.TapRandomRect, + "anti_risk": tempOptions.AntiRisk, } // Add boolean options only if they are true