From 74542be96f8fe25c79014f8daae277869f09b2e9 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 23 Sep 2026 17:25:14 -0700 Subject: [PATCH 1/4] feat(methods): add agents.conversations.* method examples Add nine agents.conversations.* code-channel method examples, the java counterpart to the python bolt-python-examples #194 set. Each example mirrors the merged agents.sessions template: reads SLACK_TOKEN, builds a *Request via the builder, calls the matching methods.agentsConversations* method, and prints the response. The setProperties code_channel object and setCommands commands array are passed as JSON-encoded strings (codeChannelAsString / commandsAsString), matching how the java SDK models these not-yet-stabilized arguments. Co-Authored-By: Claude Co-Authored-By: Claude Opus 4.8 (1M context) --- methods/README.md | 9 +++++ .../AgentsConversationsArchive.java | 29 ++++++++++++++ .../AgentsConversationsCreate.java | 30 +++++++++++++++ .../AgentsConversationsGetCanvas.java | 29 ++++++++++++++ .../AgentsConversationsListViews.java | 28 ++++++++++++++ .../AgentsConversationsRemoveView.java | 29 ++++++++++++++ .../AgentsConversationsSetCanvasContent.java | 30 +++++++++++++++ .../AgentsConversationsSetCommands.java | 34 +++++++++++++++++ .../AgentsConversationsSetProperties.java | 38 +++++++++++++++++++ .../AgentsConversationsSetView.java | 32 ++++++++++++++++ .../java/agents/conversations/manifest.json | 25 ++++++++++++ 11 files changed, 313 insertions(+) create mode 100644 methods/src/main/java/agents/conversations/AgentsConversationsArchive.java create mode 100644 methods/src/main/java/agents/conversations/AgentsConversationsCreate.java create mode 100644 methods/src/main/java/agents/conversations/AgentsConversationsGetCanvas.java create mode 100644 methods/src/main/java/agents/conversations/AgentsConversationsListViews.java create mode 100644 methods/src/main/java/agents/conversations/AgentsConversationsRemoveView.java create mode 100644 methods/src/main/java/agents/conversations/AgentsConversationsSetCanvasContent.java create mode 100644 methods/src/main/java/agents/conversations/AgentsConversationsSetCommands.java create mode 100644 methods/src/main/java/agents/conversations/AgentsConversationsSetProperties.java create mode 100644 methods/src/main/java/agents/conversations/AgentsConversationsSetView.java create mode 100644 methods/src/main/java/agents/conversations/manifest.json diff --git a/methods/README.md b/methods/README.md index 9a0a981..3bb3062 100644 --- a/methods/README.md +++ b/methods/README.md @@ -18,6 +18,15 @@ $ mvn compile exec:java -Dexec.mainClass=chat.ChatPostMessage # Make the reques ### agents +- **[agents.conversations.create](https://docs.slack.dev/reference/methods/agents.conversations.create)**: Create a dedicated code channel for an agent session. [Implementation](./src/main/java/agents/conversations/AgentsConversationsCreate.java). +- **[agents.conversations.archive](https://docs.slack.dev/reference/methods/agents.conversations.archive)**: Archive a code channel. [Implementation](./src/main/java/agents/conversations/AgentsConversationsArchive.java). +- **[agents.conversations.setProperties](https://docs.slack.dev/reference/methods/agents.conversations.setProperties)**: Set properties on a code channel. [Implementation](./src/main/java/agents/conversations/AgentsConversationsSetProperties.java). +- **[agents.conversations.setView](https://docs.slack.dev/reference/methods/agents.conversations.setView)**: Create or update a view in a code channel. [Implementation](./src/main/java/agents/conversations/AgentsConversationsSetView.java). +- **[agents.conversations.setCommands](https://docs.slack.dev/reference/methods/agents.conversations.setCommands)**: Register the set of agent-defined slash commands in a code channel. [Implementation](./src/main/java/agents/conversations/AgentsConversationsSetCommands.java). +- **[agents.conversations.listViews](https://docs.slack.dev/reference/methods/agents.conversations.listViews)**: List the views currently attached to a code channel. [Implementation](./src/main/java/agents/conversations/AgentsConversationsListViews.java). +- **[agents.conversations.removeView](https://docs.slack.dev/reference/methods/agents.conversations.removeView)**: Remove a view from a code channel. [Implementation](./src/main/java/agents/conversations/AgentsConversationsRemoveView.java). +- **[agents.conversations.getCanvas](https://docs.slack.dev/reference/methods/agents.conversations.getCanvas)**: Fetch a canvas attached to a code channel. [Implementation](./src/main/java/agents/conversations/AgentsConversationsGetCanvas.java). +- **[agents.conversations.setCanvasContent](https://docs.slack.dev/reference/methods/agents.conversations.setCanvasContent)**: Replace the full markdown content of a plan canvas attached to a code channel. [Implementation](./src/main/java/agents/conversations/AgentsConversationsSetCanvasContent.java). - **[agents.sessions.rename](https://docs.slack.dev/reference/methods/agents.sessions.rename)**: Rename an agent session. [Implementation](./src/main/java/agents/sessions/AgentsSessionsRename.java). - **[agents.sessions.setStatus](https://docs.slack.dev/reference/methods/agents.sessions.setStatus)**: Set an agent session's lifecycle status, creating the session if needed. [Implementation](./src/main/java/agents/sessions/AgentsSessionsSetStatus.java). diff --git a/methods/src/main/java/agents/conversations/AgentsConversationsArchive.java b/methods/src/main/java/agents/conversations/AgentsConversationsArchive.java new file mode 100644 index 0000000..6255740 --- /dev/null +++ b/methods/src/main/java/agents/conversations/AgentsConversationsArchive.java @@ -0,0 +1,29 @@ +package agents.conversations; + +import com.slack.api.Slack; +import com.slack.api.methods.MethodsClient; +import com.slack.api.methods.SlackApiException; +import com.slack.api.methods.request.agents.conversations.AgentsConversationsArchiveRequest; +import com.slack.api.methods.response.agents.conversations.AgentsConversationsArchiveResponse; +import java.io.IOException; + +public class AgentsConversationsArchive { + + public static void main(String[] args) throws IOException, SlackApiException { + // Read a token from an environment variable + String token = System.getenv("SLACK_TOKEN"); + + // Initialize + MethodsClient methods = Slack.getInstance().methods(token); + + // Call the agents.conversations.archive method + AgentsConversationsArchiveRequest request = AgentsConversationsArchiveRequest.builder() + .channelId("C123ABC456") + .summaryMessageTs("1717171717.123456") + .build(); + AgentsConversationsArchiveResponse response = methods.agentsConversationsArchive(request); + + // Inspect the response + System.out.println(response); + } +} diff --git a/methods/src/main/java/agents/conversations/AgentsConversationsCreate.java b/methods/src/main/java/agents/conversations/AgentsConversationsCreate.java new file mode 100644 index 0000000..ac738fc --- /dev/null +++ b/methods/src/main/java/agents/conversations/AgentsConversationsCreate.java @@ -0,0 +1,30 @@ +package agents.conversations; + +import com.slack.api.Slack; +import com.slack.api.methods.MethodsClient; +import com.slack.api.methods.SlackApiException; +import com.slack.api.methods.request.agents.conversations.AgentsConversationsCreateRequest; +import com.slack.api.methods.response.agents.conversations.AgentsConversationsCreateResponse; +import java.io.IOException; + +public class AgentsConversationsCreate { + + public static void main(String[] args) throws IOException, SlackApiException { + // Read a token from an environment variable + String token = System.getenv("SLACK_TOKEN"); + + // Initialize + MethodsClient methods = Slack.getInstance().methods(token); + + // Call the agents.conversations.create method + AgentsConversationsCreateRequest request = AgentsConversationsCreateRequest.builder() + .name("Fix flaky login test") + .originChannelId("C123ABC456") + .originMessageTs("1717171717.123456") + .build(); + AgentsConversationsCreateResponse response = methods.agentsConversationsCreate(request); + + // Inspect the response + System.out.println(response); + } +} diff --git a/methods/src/main/java/agents/conversations/AgentsConversationsGetCanvas.java b/methods/src/main/java/agents/conversations/AgentsConversationsGetCanvas.java new file mode 100644 index 0000000..6770d4d --- /dev/null +++ b/methods/src/main/java/agents/conversations/AgentsConversationsGetCanvas.java @@ -0,0 +1,29 @@ +package agents.conversations; + +import com.slack.api.Slack; +import com.slack.api.methods.MethodsClient; +import com.slack.api.methods.SlackApiException; +import com.slack.api.methods.request.agents.conversations.AgentsConversationsGetCanvasRequest; +import com.slack.api.methods.response.agents.conversations.AgentsConversationsGetCanvasResponse; +import java.io.IOException; + +public class AgentsConversationsGetCanvas { + + public static void main(String[] args) throws IOException, SlackApiException { + // Read a token from an environment variable + String token = System.getenv("SLACK_TOKEN"); + + // Initialize + MethodsClient methods = Slack.getInstance().methods(token); + + // Call the agents.conversations.getCanvas method + AgentsConversationsGetCanvasRequest request = AgentsConversationsGetCanvasRequest.builder() + .channel("C123ABC456") + .canvasId("F123ABC456") + .build(); + AgentsConversationsGetCanvasResponse response = methods.agentsConversationsGetCanvas(request); + + // Inspect the response + System.out.println(response); + } +} diff --git a/methods/src/main/java/agents/conversations/AgentsConversationsListViews.java b/methods/src/main/java/agents/conversations/AgentsConversationsListViews.java new file mode 100644 index 0000000..78470bf --- /dev/null +++ b/methods/src/main/java/agents/conversations/AgentsConversationsListViews.java @@ -0,0 +1,28 @@ +package agents.conversations; + +import com.slack.api.Slack; +import com.slack.api.methods.MethodsClient; +import com.slack.api.methods.SlackApiException; +import com.slack.api.methods.request.agents.conversations.AgentsConversationsListViewsRequest; +import com.slack.api.methods.response.agents.conversations.AgentsConversationsListViewsResponse; +import java.io.IOException; + +public class AgentsConversationsListViews { + + public static void main(String[] args) throws IOException, SlackApiException { + // Read a token from an environment variable + String token = System.getenv("SLACK_TOKEN"); + + // Initialize + MethodsClient methods = Slack.getInstance().methods(token); + + // Call the agents.conversations.listViews method + AgentsConversationsListViewsRequest request = AgentsConversationsListViewsRequest.builder() + .channelId("C123ABC456") + .build(); + AgentsConversationsListViewsResponse response = methods.agentsConversationsListViews(request); + + // Inspect the response + System.out.println(response); + } +} diff --git a/methods/src/main/java/agents/conversations/AgentsConversationsRemoveView.java b/methods/src/main/java/agents/conversations/AgentsConversationsRemoveView.java new file mode 100644 index 0000000..f3d5cdd --- /dev/null +++ b/methods/src/main/java/agents/conversations/AgentsConversationsRemoveView.java @@ -0,0 +1,29 @@ +package agents.conversations; + +import com.slack.api.Slack; +import com.slack.api.methods.MethodsClient; +import com.slack.api.methods.SlackApiException; +import com.slack.api.methods.request.agents.conversations.AgentsConversationsRemoveViewRequest; +import com.slack.api.methods.response.agents.conversations.AgentsConversationsRemoveViewResponse; +import java.io.IOException; + +public class AgentsConversationsRemoveView { + + public static void main(String[] args) throws IOException, SlackApiException { + // Read a token from an environment variable + String token = System.getenv("SLACK_TOKEN"); + + // Initialize + MethodsClient methods = Slack.getInstance().methods(token); + + // Call the agents.conversations.removeView method + AgentsConversationsRemoveViewRequest request = AgentsConversationsRemoveViewRequest.builder() + .channelId("C123ABC456") + .viewId("V123ABC456") + .build(); + AgentsConversationsRemoveViewResponse response = methods.agentsConversationsRemoveView(request); + + // Inspect the response + System.out.println(response); + } +} diff --git a/methods/src/main/java/agents/conversations/AgentsConversationsSetCanvasContent.java b/methods/src/main/java/agents/conversations/AgentsConversationsSetCanvasContent.java new file mode 100644 index 0000000..0de4d41 --- /dev/null +++ b/methods/src/main/java/agents/conversations/AgentsConversationsSetCanvasContent.java @@ -0,0 +1,30 @@ +package agents.conversations; + +import com.slack.api.Slack; +import com.slack.api.methods.MethodsClient; +import com.slack.api.methods.SlackApiException; +import com.slack.api.methods.request.agents.conversations.AgentsConversationsSetCanvasContentRequest; +import com.slack.api.methods.response.agents.conversations.AgentsConversationsSetCanvasContentResponse; +import java.io.IOException; + +public class AgentsConversationsSetCanvasContent { + + public static void main(String[] args) throws IOException, SlackApiException { + // Read a token from an environment variable + String token = System.getenv("SLACK_TOKEN"); + + // Initialize + MethodsClient methods = Slack.getInstance().methods(token); + + // Call the agents.conversations.setCanvasContent method + AgentsConversationsSetCanvasContentRequest request = AgentsConversationsSetCanvasContentRequest.builder() + .channel("C123ABC456") + .canvasId("F123ABC456") + .content("# Plan\n\n1. Reproduce the flaky test\n2. Fix the race\n3. Verify") + .build(); + AgentsConversationsSetCanvasContentResponse response = methods.agentsConversationsSetCanvasContent(request); + + // Inspect the response + System.out.println(response); + } +} diff --git a/methods/src/main/java/agents/conversations/AgentsConversationsSetCommands.java b/methods/src/main/java/agents/conversations/AgentsConversationsSetCommands.java new file mode 100644 index 0000000..44b3fb3 --- /dev/null +++ b/methods/src/main/java/agents/conversations/AgentsConversationsSetCommands.java @@ -0,0 +1,34 @@ +package agents.conversations; + +import com.slack.api.Slack; +import com.slack.api.methods.MethodsClient; +import com.slack.api.methods.SlackApiException; +import com.slack.api.methods.request.agents.conversations.AgentsConversationsSetCommandsRequest; +import com.slack.api.methods.response.agents.conversations.AgentsConversationsSetCommandsResponse; +import java.io.IOException; + +public class AgentsConversationsSetCommands { + + public static void main(String[] args) throws IOException, SlackApiException { + // Read a token from an environment variable + String token = System.getenv("SLACK_TOKEN"); + + // Initialize + MethodsClient methods = Slack.getInstance().methods(token); + + // Call the agents.conversations.setCommands method + // The commands array is passed as a JSON-encoded string until the command item shape stabilizes + String commands = "[" + + "{\"name\":\"test\",\"description\":\"Run the test suite\"}," + + "{\"name\":\"diff\",\"description\":\"Show the current diff\"}" + + "]"; + AgentsConversationsSetCommandsRequest request = AgentsConversationsSetCommandsRequest.builder() + .channelId("C123ABC456") + .commandsAsString(commands) + .build(); + AgentsConversationsSetCommandsResponse response = methods.agentsConversationsSetCommands(request); + + // Inspect the response + System.out.println(response); + } +} diff --git a/methods/src/main/java/agents/conversations/AgentsConversationsSetProperties.java b/methods/src/main/java/agents/conversations/AgentsConversationsSetProperties.java new file mode 100644 index 0000000..4f39753 --- /dev/null +++ b/methods/src/main/java/agents/conversations/AgentsConversationsSetProperties.java @@ -0,0 +1,38 @@ +package agents.conversations; + +import com.slack.api.Slack; +import com.slack.api.methods.MethodsClient; +import com.slack.api.methods.SlackApiException; +import com.slack.api.methods.request.agents.conversations.AgentsConversationsSetPropertiesRequest; +import com.slack.api.methods.response.agents.conversations.AgentsConversationsSetPropertiesResponse; +import java.io.IOException; + +public class AgentsConversationsSetProperties { + + public static void main(String[] args) throws IOException, SlackApiException { + // Read a token from an environment variable + String token = System.getenv("SLACK_TOKEN"); + + // Initialize + MethodsClient methods = Slack.getInstance().methods(token); + + // Call the agents.conversations.setProperties method + // The code_channel object is passed as a JSON-encoded string until its shape stabilizes + String codeChannel = "{" + + "\"context_bar_items\":[{" + + "\"key\":\"repo\"," + + "\"label\":\"acme/billing\"," + + "\"icon\":\"folder\"," + + "\"url\":\"https://github.com/acme/billing\"" + + "}]" + + "}"; + AgentsConversationsSetPropertiesRequest request = AgentsConversationsSetPropertiesRequest.builder() + .channelId("C123ABC456") + .codeChannelAsString(codeChannel) + .build(); + AgentsConversationsSetPropertiesResponse response = methods.agentsConversationsSetProperties(request); + + // Inspect the response + System.out.println(response); + } +} diff --git a/methods/src/main/java/agents/conversations/AgentsConversationsSetView.java b/methods/src/main/java/agents/conversations/AgentsConversationsSetView.java new file mode 100644 index 0000000..d1933d2 --- /dev/null +++ b/methods/src/main/java/agents/conversations/AgentsConversationsSetView.java @@ -0,0 +1,32 @@ +package agents.conversations; + +import com.slack.api.Slack; +import com.slack.api.methods.MethodsClient; +import com.slack.api.methods.SlackApiException; +import com.slack.api.methods.request.agents.conversations.AgentsConversationsSetViewRequest; +import com.slack.api.methods.response.agents.conversations.AgentsConversationsSetViewResponse; +import java.io.IOException; + +public class AgentsConversationsSetView { + + public static void main(String[] args) throws IOException, SlackApiException { + // Read a token from an environment variable + String token = System.getenv("SLACK_TOKEN"); + + // Initialize + MethodsClient methods = Slack.getInstance().methods(token); + + // Call the agents.conversations.setView method + AgentsConversationsSetViewRequest request = AgentsConversationsSetViewRequest.builder() + .channelId("C123ABC456") + .type("diff") + .content("diff --git a/cron.py b/cron.py\n--- a/cron.py\n+++ b/cron.py\n@@ ...") + .baseBranch("main") + .headBranch("agent/migrate-cron") + .build(); + AgentsConversationsSetViewResponse response = methods.agentsConversationsSetView(request); + + // Inspect the response + System.out.println(response); + } +} diff --git a/methods/src/main/java/agents/conversations/manifest.json b/methods/src/main/java/agents/conversations/manifest.json new file mode 100644 index 0000000..76c53c1 --- /dev/null +++ b/methods/src/main/java/agents/conversations/manifest.json @@ -0,0 +1,25 @@ +{ + "display_information": { + "name": "Slack API Methods", + "description": "Example implementations to call \"agents.conversations\" methods" + }, + "features": { + "bot_user": { + "display_name": "Slack API Methods", + "always_online": true + }, + "code_channels": { + "enabled": true + } + }, + "oauth_config": { + "scopes": { + "bot": ["code_channels:manage"] + } + }, + "settings": { + "org_deploy_enabled": true, + "socket_mode_enabled": false, + "token_rotation_enabled": false + } +} From 8113b4f2a5a4140df1dc3ff2a114d2096961ed76 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Thu, 24 Sep 2026 15:35:46 -0700 Subject: [PATCH 2/4] feat(methods): enable Socket Mode in agents.conversations manifest Set socket_mode_enabled: true so the example app can register agent slash commands. agents.conversations.setCommands returns no_actions_url unless the app has either a code_channels.slash_command_url or Socket Mode; Socket Mode routes command invocations automatically with no public URL to stand up. Co-Authored-By: Claude Co-Authored-By: Claude Opus 4.8 (1M context) --- methods/src/main/java/agents/conversations/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/methods/src/main/java/agents/conversations/manifest.json b/methods/src/main/java/agents/conversations/manifest.json index 76c53c1..8e6a0c1 100644 --- a/methods/src/main/java/agents/conversations/manifest.json +++ b/methods/src/main/java/agents/conversations/manifest.json @@ -19,7 +19,7 @@ }, "settings": { "org_deploy_enabled": true, - "socket_mode_enabled": false, + "socket_mode_enabled": true, "token_rotation_enabled": false } } From f84870e712c367f03cb3fb58ef962f7c1a242022 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Fri, 25 Sep 2026 13:37:52 -0700 Subject: [PATCH 3/4] docs(methods): match agents.conversations examples to docs #816 verbatim Align each example payload with the request example on its docs.slack.dev reference page: - create: sessionId + 'Migrate billing cron to Temporal' - archive: summaryMessageTs - setProperties: full 4-item context_bar_items (repo/branch/pr/ci) - setView: html view with viewKey/name/csp - setCommands: create-pr (argument_hint) / run-tests / summarize - removeView: identify by viewKey - getCanvas: includeResolved - setCanvasContent: migration-plan content Duplicates the canonical examples rather than inventing variants. Co-Authored-By: Claude Co-Authored-By: Claude Opus 4.8 (1M context) --- .../conversations/AgentsConversationsArchive.java | 4 ++-- .../conversations/AgentsConversationsCreate.java | 5 +++-- .../AgentsConversationsGetCanvas.java | 5 +++-- .../AgentsConversationsListViews.java | 2 +- .../AgentsConversationsRemoveView.java | 4 ++-- .../AgentsConversationsSetCanvasContent.java | 6 +++--- .../AgentsConversationsSetCommands.java | 7 ++++--- .../AgentsConversationsSetProperties.java | 14 +++++++------- .../conversations/AgentsConversationsSetView.java | 12 +++++++----- 9 files changed, 32 insertions(+), 27 deletions(-) diff --git a/methods/src/main/java/agents/conversations/AgentsConversationsArchive.java b/methods/src/main/java/agents/conversations/AgentsConversationsArchive.java index 6255740..d4b5619 100644 --- a/methods/src/main/java/agents/conversations/AgentsConversationsArchive.java +++ b/methods/src/main/java/agents/conversations/AgentsConversationsArchive.java @@ -18,8 +18,8 @@ public static void main(String[] args) throws IOException, SlackApiException { // Call the agents.conversations.archive method AgentsConversationsArchiveRequest request = AgentsConversationsArchiveRequest.builder() - .channelId("C123ABC456") - .summaryMessageTs("1717171717.123456") + .channelId("C9876543210") + .summaryMessageTs("1717182000.456789") .build(); AgentsConversationsArchiveResponse response = methods.agentsConversationsArchive(request); diff --git a/methods/src/main/java/agents/conversations/AgentsConversationsCreate.java b/methods/src/main/java/agents/conversations/AgentsConversationsCreate.java index ac738fc..91796ae 100644 --- a/methods/src/main/java/agents/conversations/AgentsConversationsCreate.java +++ b/methods/src/main/java/agents/conversations/AgentsConversationsCreate.java @@ -18,8 +18,9 @@ public static void main(String[] args) throws IOException, SlackApiException { // Call the agents.conversations.create method AgentsConversationsCreateRequest request = AgentsConversationsCreateRequest.builder() - .name("Fix flaky login test") - .originChannelId("C123ABC456") + .name("Migrate billing cron to Temporal") + .sessionId("ses_8675309") + .originChannelId("C0123456789") .originMessageTs("1717171717.123456") .build(); AgentsConversationsCreateResponse response = methods.agentsConversationsCreate(request); diff --git a/methods/src/main/java/agents/conversations/AgentsConversationsGetCanvas.java b/methods/src/main/java/agents/conversations/AgentsConversationsGetCanvas.java index 6770d4d..94884a2 100644 --- a/methods/src/main/java/agents/conversations/AgentsConversationsGetCanvas.java +++ b/methods/src/main/java/agents/conversations/AgentsConversationsGetCanvas.java @@ -18,8 +18,9 @@ public static void main(String[] args) throws IOException, SlackApiException { // Call the agents.conversations.getCanvas method AgentsConversationsGetCanvasRequest request = AgentsConversationsGetCanvasRequest.builder() - .channel("C123ABC456") - .canvasId("F123ABC456") + .channel("C9876543210") + .canvasId("F1234567890") + .includeResolved(false) .build(); AgentsConversationsGetCanvasResponse response = methods.agentsConversationsGetCanvas(request); diff --git a/methods/src/main/java/agents/conversations/AgentsConversationsListViews.java b/methods/src/main/java/agents/conversations/AgentsConversationsListViews.java index 78470bf..8148f8b 100644 --- a/methods/src/main/java/agents/conversations/AgentsConversationsListViews.java +++ b/methods/src/main/java/agents/conversations/AgentsConversationsListViews.java @@ -18,7 +18,7 @@ public static void main(String[] args) throws IOException, SlackApiException { // Call the agents.conversations.listViews method AgentsConversationsListViewsRequest request = AgentsConversationsListViewsRequest.builder() - .channelId("C123ABC456") + .channelId("C9876543210") .build(); AgentsConversationsListViewsResponse response = methods.agentsConversationsListViews(request); diff --git a/methods/src/main/java/agents/conversations/AgentsConversationsRemoveView.java b/methods/src/main/java/agents/conversations/AgentsConversationsRemoveView.java index f3d5cdd..7ef38cd 100644 --- a/methods/src/main/java/agents/conversations/AgentsConversationsRemoveView.java +++ b/methods/src/main/java/agents/conversations/AgentsConversationsRemoveView.java @@ -18,8 +18,8 @@ public static void main(String[] args) throws IOException, SlackApiException { // Call the agents.conversations.removeView method AgentsConversationsRemoveViewRequest request = AgentsConversationsRemoveViewRequest.builder() - .channelId("C123ABC456") - .viewId("V123ABC456") + .channelId("C9876543210") + .viewKey("reports/coverage.html") .build(); AgentsConversationsRemoveViewResponse response = methods.agentsConversationsRemoveView(request); diff --git a/methods/src/main/java/agents/conversations/AgentsConversationsSetCanvasContent.java b/methods/src/main/java/agents/conversations/AgentsConversationsSetCanvasContent.java index 0de4d41..10146e4 100644 --- a/methods/src/main/java/agents/conversations/AgentsConversationsSetCanvasContent.java +++ b/methods/src/main/java/agents/conversations/AgentsConversationsSetCanvasContent.java @@ -18,9 +18,9 @@ public static void main(String[] args) throws IOException, SlackApiException { // Call the agents.conversations.setCanvasContent method AgentsConversationsSetCanvasContentRequest request = AgentsConversationsSetCanvasContentRequest.builder() - .channel("C123ABC456") - .canvasId("F123ABC456") - .content("# Plan\n\n1. Reproduce the flaky test\n2. Fix the race\n3. Verify") + .channel("C9876543210") + .canvasId("F1234567890") + .content("# Migration plan\n\n1. Inventory cron jobs\n2. Port billing jobs last\n") .build(); AgentsConversationsSetCanvasContentResponse response = methods.agentsConversationsSetCanvasContent(request); diff --git a/methods/src/main/java/agents/conversations/AgentsConversationsSetCommands.java b/methods/src/main/java/agents/conversations/AgentsConversationsSetCommands.java index 44b3fb3..a858c01 100644 --- a/methods/src/main/java/agents/conversations/AgentsConversationsSetCommands.java +++ b/methods/src/main/java/agents/conversations/AgentsConversationsSetCommands.java @@ -19,11 +19,12 @@ public static void main(String[] args) throws IOException, SlackApiException { // Call the agents.conversations.setCommands method // The commands array is passed as a JSON-encoded string until the command item shape stabilizes String commands = "[" - + "{\"name\":\"test\",\"description\":\"Run the test suite\"}," - + "{\"name\":\"diff\",\"description\":\"Show the current diff\"}" + + "{\"name\":\"create-pr\",\"description\":\"Open a pull request for the current branch\",\"argument_hint\":\"[title]\"}," + + "{\"name\":\"run-tests\",\"description\":\"Run the test suite and report back\"}," + + "{\"name\":\"summarize\",\"description\":\"Post a summary of the work so far\"}" + "]"; AgentsConversationsSetCommandsRequest request = AgentsConversationsSetCommandsRequest.builder() - .channelId("C123ABC456") + .channelId("C9876543210") .commandsAsString(commands) .build(); AgentsConversationsSetCommandsResponse response = methods.agentsConversationsSetCommands(request); diff --git a/methods/src/main/java/agents/conversations/AgentsConversationsSetProperties.java b/methods/src/main/java/agents/conversations/AgentsConversationsSetProperties.java index 4f39753..7069353 100644 --- a/methods/src/main/java/agents/conversations/AgentsConversationsSetProperties.java +++ b/methods/src/main/java/agents/conversations/AgentsConversationsSetProperties.java @@ -19,15 +19,15 @@ public static void main(String[] args) throws IOException, SlackApiException { // Call the agents.conversations.setProperties method // The code_channel object is passed as a JSON-encoded string until its shape stabilizes String codeChannel = "{" - + "\"context_bar_items\":[{" - + "\"key\":\"repo\"," - + "\"label\":\"acme/billing\"," - + "\"icon\":\"folder\"," - + "\"url\":\"https://github.com/acme/billing\"" - + "}]" + + "\"context_bar_items\":[" + + "{\"key\":\"repo\",\"label\":\"borant/billing\",\"icon\":\"folder\",\"url\":\"https://github.com/borant/billing\"}," + + "{\"key\":\"branch\",\"label\":\"agent/migrate-cron\",\"icon\":\"branch\",\"url\":\"https://github.com/borant/billing/tree/agent/migrate-cron\"}," + + "{\"key\":\"pr\",\"label\":\"PR #42 is open\",\"icon\":\"hierarchy\",\"url\":\"https://github.com/borant/billing/pull/42\"}," + + "{\"key\":\"ci\",\"label\":\"Tests pending\",\"icon\":\"terminal\"}" + + "]" + "}"; AgentsConversationsSetPropertiesRequest request = AgentsConversationsSetPropertiesRequest.builder() - .channelId("C123ABC456") + .channelId("C9876543210") .codeChannelAsString(codeChannel) .build(); AgentsConversationsSetPropertiesResponse response = methods.agentsConversationsSetProperties(request); diff --git a/methods/src/main/java/agents/conversations/AgentsConversationsSetView.java b/methods/src/main/java/agents/conversations/AgentsConversationsSetView.java index d1933d2..6c45bfe 100644 --- a/methods/src/main/java/agents/conversations/AgentsConversationsSetView.java +++ b/methods/src/main/java/agents/conversations/AgentsConversationsSetView.java @@ -17,12 +17,14 @@ public static void main(String[] args) throws IOException, SlackApiException { MethodsClient methods = Slack.getInstance().methods(token); // Call the agents.conversations.setView method + // The csp object is passed as a JSON-encoded string until its shape stabilizes + String csp = "{\"resource_domains\":[\"https://cdn.jsdelivr.net\"]}"; AgentsConversationsSetViewRequest request = AgentsConversationsSetViewRequest.builder() - .channelId("C123ABC456") - .type("diff") - .content("diff --git a/cron.py b/cron.py\n--- a/cron.py\n+++ b/cron.py\n@@ ...") - .baseBranch("main") - .headBranch("agent/migrate-cron") + .channelId("C9876543210") + .viewKey("reports/coverage.html") + .name("Coverage") + .content("……") + .cspAsString(csp) .build(); AgentsConversationsSetViewResponse response = methods.agentsConversationsSetView(request); From bc03f671c20ad39e406bd1824158ae40d0041d8b Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Fri, 25 Sep 2026 16:51:43 -0700 Subject: [PATCH 4/4] feat(methods): use typed builders for agents.conversations complex args Replace the JSON-string (*AsString) passthrough in the setCommands, setProperties, and setView examples with the typed builders the SDK now provides: Command, CodeChannel/ContextBarItem, and Csp. No more hand-written JSON strings. Co-Authored-By: Claude Co-Authored-By: Claude Opus 4.8 (1M context) --- .../AgentsConversationsSetCommands.java | 23 +++++++---- .../AgentsConversationsSetProperties.java | 39 ++++++++++++++----- .../AgentsConversationsSetView.java | 8 ++-- 3 files changed, 50 insertions(+), 20 deletions(-) diff --git a/methods/src/main/java/agents/conversations/AgentsConversationsSetCommands.java b/methods/src/main/java/agents/conversations/AgentsConversationsSetCommands.java index a858c01..6d84479 100644 --- a/methods/src/main/java/agents/conversations/AgentsConversationsSetCommands.java +++ b/methods/src/main/java/agents/conversations/AgentsConversationsSetCommands.java @@ -4,8 +4,10 @@ import com.slack.api.methods.MethodsClient; import com.slack.api.methods.SlackApiException; import com.slack.api.methods.request.agents.conversations.AgentsConversationsSetCommandsRequest; +import com.slack.api.methods.request.agents.conversations.AgentsConversationsSetCommandsRequest.Command; import com.slack.api.methods.response.agents.conversations.AgentsConversationsSetCommandsResponse; import java.io.IOException; +import java.util.List; public class AgentsConversationsSetCommands { @@ -17,15 +19,22 @@ public static void main(String[] args) throws IOException, SlackApiException { MethodsClient methods = Slack.getInstance().methods(token); // Call the agents.conversations.setCommands method - // The commands array is passed as a JSON-encoded string until the command item shape stabilizes - String commands = "[" - + "{\"name\":\"create-pr\",\"description\":\"Open a pull request for the current branch\",\"argument_hint\":\"[title]\"}," - + "{\"name\":\"run-tests\",\"description\":\"Run the test suite and report back\"}," - + "{\"name\":\"summarize\",\"description\":\"Post a summary of the work so far\"}" - + "]"; AgentsConversationsSetCommandsRequest request = AgentsConversationsSetCommandsRequest.builder() .channelId("C9876543210") - .commandsAsString(commands) + .commands(List.of( + Command.builder() + .name("create-pr") + .description("Open a pull request for the current branch") + .argumentHint("[title]") + .build(), + Command.builder() + .name("run-tests") + .description("Run the test suite and report back") + .build(), + Command.builder() + .name("summarize") + .description("Post a summary of the work so far") + .build())) .build(); AgentsConversationsSetCommandsResponse response = methods.agentsConversationsSetCommands(request); diff --git a/methods/src/main/java/agents/conversations/AgentsConversationsSetProperties.java b/methods/src/main/java/agents/conversations/AgentsConversationsSetProperties.java index 7069353..4dc9530 100644 --- a/methods/src/main/java/agents/conversations/AgentsConversationsSetProperties.java +++ b/methods/src/main/java/agents/conversations/AgentsConversationsSetProperties.java @@ -4,8 +4,11 @@ import com.slack.api.methods.MethodsClient; import com.slack.api.methods.SlackApiException; import com.slack.api.methods.request.agents.conversations.AgentsConversationsSetPropertiesRequest; +import com.slack.api.methods.request.agents.conversations.AgentsConversationsSetPropertiesRequest.CodeChannel; +import com.slack.api.methods.request.agents.conversations.AgentsConversationsSetPropertiesRequest.ContextBarItem; import com.slack.api.methods.response.agents.conversations.AgentsConversationsSetPropertiesResponse; import java.io.IOException; +import java.util.List; public class AgentsConversationsSetProperties { @@ -17,18 +20,34 @@ public static void main(String[] args) throws IOException, SlackApiException { MethodsClient methods = Slack.getInstance().methods(token); // Call the agents.conversations.setProperties method - // The code_channel object is passed as a JSON-encoded string until its shape stabilizes - String codeChannel = "{" - + "\"context_bar_items\":[" - + "{\"key\":\"repo\",\"label\":\"borant/billing\",\"icon\":\"folder\",\"url\":\"https://github.com/borant/billing\"}," - + "{\"key\":\"branch\",\"label\":\"agent/migrate-cron\",\"icon\":\"branch\",\"url\":\"https://github.com/borant/billing/tree/agent/migrate-cron\"}," - + "{\"key\":\"pr\",\"label\":\"PR #42 is open\",\"icon\":\"hierarchy\",\"url\":\"https://github.com/borant/billing/pull/42\"}," - + "{\"key\":\"ci\",\"label\":\"Tests pending\",\"icon\":\"terminal\"}" - + "]" - + "}"; AgentsConversationsSetPropertiesRequest request = AgentsConversationsSetPropertiesRequest.builder() .channelId("C9876543210") - .codeChannelAsString(codeChannel) + .codeChannel(CodeChannel.builder() + .contextBarItems(List.of( + ContextBarItem.builder() + .key("repo") + .label("borant/billing") + .icon("folder") + .url("https://github.com/borant/billing") + .build(), + ContextBarItem.builder() + .key("branch") + .label("agent/migrate-cron") + .icon("branch") + .url("https://github.com/borant/billing/tree/agent/migrate-cron") + .build(), + ContextBarItem.builder() + .key("pr") + .label("PR #42 is open") + .icon("hierarchy") + .url("https://github.com/borant/billing/pull/42") + .build(), + ContextBarItem.builder() + .key("ci") + .label("Tests pending") + .icon("terminal") + .build())) + .build()) .build(); AgentsConversationsSetPropertiesResponse response = methods.agentsConversationsSetProperties(request); diff --git a/methods/src/main/java/agents/conversations/AgentsConversationsSetView.java b/methods/src/main/java/agents/conversations/AgentsConversationsSetView.java index 6c45bfe..86fdd5e 100644 --- a/methods/src/main/java/agents/conversations/AgentsConversationsSetView.java +++ b/methods/src/main/java/agents/conversations/AgentsConversationsSetView.java @@ -4,8 +4,10 @@ import com.slack.api.methods.MethodsClient; import com.slack.api.methods.SlackApiException; import com.slack.api.methods.request.agents.conversations.AgentsConversationsSetViewRequest; +import com.slack.api.methods.request.agents.conversations.AgentsConversationsSetViewRequest.Csp; import com.slack.api.methods.response.agents.conversations.AgentsConversationsSetViewResponse; import java.io.IOException; +import java.util.List; public class AgentsConversationsSetView { @@ -17,14 +19,14 @@ public static void main(String[] args) throws IOException, SlackApiException { MethodsClient methods = Slack.getInstance().methods(token); // Call the agents.conversations.setView method - // The csp object is passed as a JSON-encoded string until its shape stabilizes - String csp = "{\"resource_domains\":[\"https://cdn.jsdelivr.net\"]}"; AgentsConversationsSetViewRequest request = AgentsConversationsSetViewRequest.builder() .channelId("C9876543210") .viewKey("reports/coverage.html") .name("Coverage") .content("……") - .cspAsString(csp) + .csp(Csp.builder() + .resourceDomains(List.of("https://cdn.jsdelivr.net")) + .build()) .build(); AgentsConversationsSetViewResponse response = methods.agentsConversationsSetView(request);