import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.nio.charset.StandardCharsets; import java.time.Duration; /** * HTTP probe for POST /workflow/simulate (needs Bearer token). * Usage: * javac java/scripts/ProbeSimulateApi.java * java -cp java/scripts ProbeSimulateApi * java -cp java/scripts ProbeSimulateApi "custom message" */ public class ProbeSimulateApi { private static final String DEFAULT_MSG = "\u4f60\u597d\uff0c\u82b9\u83dc\u80fd\u6cbb\u7597\u7cd6\u5c3f\u75c5\u5417\uff1f" + "\u5bf9\u7cd6\u5c3f\u75c5\u6709\u597d\u5904\u5417\uff1f"; public static void main(String[] args) throws Exception { if (args.length < 2) { System.out.println("Usage: ProbeSimulateApi [content]"); System.out.println(" token: JWT from browser (Admin-Token) or login API"); System.exit(1); } String token = args[0].startsWith("Bearer ") ? args[0] : "Bearer " + args[0]; long templateId = Long.parseLong(args[1]); String content = args.length > 2 ? args[2] : DEFAULT_MSG; String base = System.getenv().getOrDefault("LOBSTER_API_BASE", "http://127.0.0.1:8004"); String body = "{\"templateId\":" + templateId + ",\"content\":" + jsonEscape(content) + "}"; HttpClient client = HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(15)).build(); HttpRequest req = HttpRequest.newBuilder() .uri(URI.create(base + "/workflow/simulate")) .timeout(Duration.ofSeconds(120)) .header("Authorization", token) .header("Content-Type", "application/json; charset=utf-8") .POST(HttpRequest.BodyPublishers.ofString(body, StandardCharsets.UTF_8)) .build(); System.out.println("POST " + base + "/workflow/simulate"); System.out.println("templateId=" + templateId); HttpResponse resp = client.send(req, HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8)); System.out.println("HTTP " + resp.statusCode()); System.out.println(resp.body()); if (resp.statusCode() != 200) { System.exit(1); } String bodyText = resp.body(); if (bodyText.contains("\"mode\":\"legacy\"")) { System.out.println("\n[ROOT CAUSE] mode=legacy -> FastGPT path, no intent/UDD probe"); System.exit(3); } if (bodyText.contains("\"shouldProbe\":true")) { System.out.println("\n[OK] shouldProbe=true"); } else { System.out.println("\n[WARN] shouldProbe not true"); } } private static String jsonEscape(String s) { return "\"" + s.replace("\\", "\\\\").replace("\"", "\\\"") .replace("\n", "\\n").replace("\r", "\\r") + "\""; } }