(ctx context.Context, input map[string]any, tc *tools.ToolContext)
| 127 | } |
| 128 | |
| 129 | func (t *CodeExecuteTool) Execute(ctx context.Context, input map[string]any, tc *tools.ToolContext) (any, error) { |
| 130 | // 确保 HTTP 桥接服务器已启动 (PTC 支持) |
| 131 | if err := t.ensureBridgeServer(tc); err != nil { |
| 132 | return map[string]any{ |
| 133 | "success": false, |
| 134 | "error": fmt.Sprintf("failed to start bridge server: %v", err), |
| 135 | }, nil |
| 136 | } |
| 137 | |
| 138 | // 解析参数 |
| 139 | langStr, ok := input["language"].(string) |
| 140 | if !ok { |
| 141 | return nil, errors.New("language must be a string") |
| 142 | } |
| 143 | |
| 144 | code, ok := input["code"].(string) |
| 145 | if !ok || code == "" { |
| 146 | return nil, errors.New("code must be a non-empty string") |
| 147 | } |
| 148 | |
| 149 | // 转换语言类型 |
| 150 | var lang bridge.Language |
| 151 | switch langStr { |
| 152 | case "python": |
| 153 | lang = bridge.LangPython |
| 154 | case "nodejs": |
| 155 | lang = bridge.LangNodeJS |
| 156 | case "bash": |
| 157 | lang = bridge.LangBash |
| 158 | default: |
| 159 | return map[string]any{ |
| 160 | "success": false, |
| 161 | "error": "unsupported language: " + langStr, |
| 162 | }, nil |
| 163 | } |
| 164 | |
| 165 | // 获取输入数据 |
| 166 | codeInput := make(map[string]any) |
| 167 | if inputData, ok := input["input"].(map[string]any); ok { |
| 168 | codeInput = inputData |
| 169 | } |
| 170 | |
| 171 | // 执行代码 |
| 172 | result, err := t.runtimeManager.Execute(ctx, lang, code, codeInput) |
| 173 | if err != nil { |
| 174 | return map[string]any{ |
| 175 | "success": false, |
| 176 | "error": err.Error(), |
| 177 | }, nil |
| 178 | } |
| 179 | |
| 180 | return map[string]any{ |
| 181 | "success": result.Success, |
| 182 | "output": result.Output, |
| 183 | "stdout": result.Stdout, |
| 184 | "stderr": result.Stderr, |
| 185 | "error": result.Error, |
| 186 | "exit_code": result.ExitCode, |
nothing calls this directly
no test coverage detected