From 0f06f346be6e8321a52b3373a8c78f0aa43db9e1 Mon Sep 17 00:00:00 2001 From: Bruno Borges Date: Mon, 6 Apr 2026 14:12:08 -0400 Subject: [PATCH] Address review feedback MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Replace Thread.sleep with sendAndWait in PRVisualization - Fix top-level statements in multiple-sessions.md (wrap in class) - Fix .getMessage() → .getData().content() in MultipleSessions.java - Guard against null readLine() in AccessibilityReport.java - Add null-safe getCause() + InterruptedException handling in ErrorHandling.java - Fix paths: jbang commands now include recipe/ prefix - Fix root README path: cd java/recipe (not java/cookbook/recipe) - Fix recipe/README.md ralph-loop CLI example --- .../copilot-sdk/java/multiple-sessions.md | 50 +++++++++---------- cookbook/copilot-sdk/java/pr-visualization.md | 8 +-- .../java/recipe/PRVisualization.java | 8 +-- cookbook/copilot-sdk/java/recipe/README.md | 4 +- 4 files changed, 32 insertions(+), 38 deletions(-) diff --git a/cookbook/copilot-sdk/java/multiple-sessions.md b/cookbook/copilot-sdk/java/multiple-sessions.md index 3ac0d785..b44a4d76 100644 --- a/cookbook/copilot-sdk/java/multiple-sessions.md +++ b/cookbook/copilot-sdk/java/multiple-sessions.md @@ -23,35 +23,35 @@ import com.github.copilot.sdk.json.*; public class MultipleSessions { public static void main(String[] args) throws Exception { - var client = new CopilotClient(); - client.start().get(); + try (var client = new CopilotClient()) { + client.start().get(); - // Create multiple independent sessions - var session1 = client.createSession(new SessionConfig() - .setModel("gpt-5") - .setOnPermissionRequest(PermissionHandler.APPROVE_ALL)).get(); - var session2 = client.createSession(new SessionConfig() - .setModel("gpt-5") - .setOnPermissionRequest(PermissionHandler.APPROVE_ALL)).get(); - var session3 = client.createSession(new SessionConfig() - .setModel("claude-sonnet-4.5") - .setOnPermissionRequest(PermissionHandler.APPROVE_ALL)).get(); + // Create multiple independent sessions + var session1 = client.createSession(new SessionConfig() + .setModel("gpt-5") + .setOnPermissionRequest(PermissionHandler.APPROVE_ALL)).get(); + var session2 = client.createSession(new SessionConfig() + .setModel("gpt-5") + .setOnPermissionRequest(PermissionHandler.APPROVE_ALL)).get(); + var session3 = client.createSession(new SessionConfig() + .setModel("claude-sonnet-4.5") + .setOnPermissionRequest(PermissionHandler.APPROVE_ALL)).get(); - // Each session maintains its own conversation history - session1.sendAndWait(new MessageOptions().setPrompt("You are helping with a Python project")).get(); - session2.sendAndWait(new MessageOptions().setPrompt("You are helping with a TypeScript project")).get(); - session3.sendAndWait(new MessageOptions().setPrompt("You are helping with a Go project")).get(); + // Each session maintains its own conversation history + session1.sendAndWait(new MessageOptions().setPrompt("You are helping with a Python project")).get(); + session2.sendAndWait(new MessageOptions().setPrompt("You are helping with a TypeScript project")).get(); + session3.sendAndWait(new MessageOptions().setPrompt("You are helping with a Go project")).get(); - // Follow-up messages stay in their respective contexts - session1.sendAndWait(new MessageOptions().setPrompt("How do I create a virtual environment?")).get(); - session2.sendAndWait(new MessageOptions().setPrompt("How do I set up tsconfig?")).get(); - session3.sendAndWait(new MessageOptions().setPrompt("How do I initialize a module?")).get(); + // Follow-up messages stay in their respective contexts + session1.sendAndWait(new MessageOptions().setPrompt("How do I create a virtual environment?")).get(); + session2.sendAndWait(new MessageOptions().setPrompt("How do I set up tsconfig?")).get(); + session3.sendAndWait(new MessageOptions().setPrompt("How do I initialize a module?")).get(); - // Clean up all sessions - session1.destroy().get(); - session2.destroy().get(); - session3.destroy().get(); - client.stop().get(); + // Clean up all sessions + session1.destroy().get(); + session2.destroy().get(); + session3.destroy().get(); + } } } ``` diff --git a/cookbook/copilot-sdk/java/pr-visualization.md b/cookbook/copilot-sdk/java/pr-visualization.md index 564a0c43..87f9976c 100644 --- a/cookbook/copilot-sdk/java/pr-visualization.md +++ b/cookbook/copilot-sdk/java/pr-visualization.md @@ -118,10 +118,7 @@ public class PRVisualization { Finally, summarize the PR health - average age, oldest PR, and how many might be considered stale. """, owner, repoName); - session.send(new MessageOptions().setPrompt(prompt)); - - // Wait a bit for initial processing - Thread.sleep(10000); + session.sendAndWait(new MessageOptions().setPrompt(prompt)).get(); // Interactive loop System.out.println("\nšŸ’” Ask follow-up questions or type \"exit\" to quit.\n"); @@ -145,8 +142,7 @@ public class PRVisualization { break; } - session.send(new MessageOptions().setPrompt(input)); - Thread.sleep(2000); // Give time for response + session.sendAndWait(new MessageOptions().setPrompt(input)).get(); } } diff --git a/cookbook/copilot-sdk/java/recipe/PRVisualization.java b/cookbook/copilot-sdk/java/recipe/PRVisualization.java index 4d46d0dc..0ac79527 100644 --- a/cookbook/copilot-sdk/java/recipe/PRVisualization.java +++ b/cookbook/copilot-sdk/java/recipe/PRVisualization.java @@ -93,10 +93,7 @@ public class PRVisualization { Finally, summarize the PR health - average age, oldest PR, and how many might be considered stale. """, owner, repoName); - session.send(new MessageOptions().setPrompt(prompt)); - - // Wait a bit for initial processing - Thread.sleep(10000); + session.sendAndWait(new MessageOptions().setPrompt(prompt)).get(); // Interactive loop System.out.println("\nšŸ’” Ask follow-up questions or type \"exit\" to quit.\n"); @@ -120,8 +117,7 @@ public class PRVisualization { break; } - session.send(new MessageOptions().setPrompt(input)); - Thread.sleep(2000); // Give time for response + session.sendAndWait(new MessageOptions().setPrompt(input)).get(); } } diff --git a/cookbook/copilot-sdk/java/recipe/README.md b/cookbook/copilot-sdk/java/recipe/README.md index 5726a67b..38201fb7 100644 --- a/cookbook/copilot-sdk/java/recipe/README.md +++ b/cookbook/copilot-sdk/java/recipe/README.md @@ -54,8 +54,10 @@ jbang PRVisualization.java github/copilot-sdk jbang ManagingLocalFiles.java /path/to/your/folder ``` -**Ralph Loop with a prompt file:** +**Ralph Loop with a custom prompt file:** +```bash +jbang RalphLoop.java PROMPT_build.md 20 ``` ## Why JBang?