Skip to content

Commit f1da653

Browse files
committed
fix: hide Slack modal model for non-opencode providers
1 parent 7f91c45 commit f1da653

File tree

2 files changed

+22
-10
lines changed

2 files changed

+22
-10
lines changed

packages/ims/slack/client.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ async function postSettingsLauncher(
242242
type: "section",
243243
text: {
244244
type: "mrkdwn",
245-
text: "Open channel settings for agent, model (OpenCode), and working directory.",
245+
text: "Open channel settings for agent and working directory (model appears only for OpenCode).",
246246
},
247247
},
248248
{

packages/ims/slack/commands.ts

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ const MODEL_ACTION = "model_select";
3131
const WORKING_DIR_BLOCK = "working_dir";
3232
const WORKING_DIR_ACTION = "working_dir_input";
3333

34-
type AgentProvider = "opencode" | "claudecode";
34+
type AgentProvider = "opencode" | "claudecode" | "codex";
3535

3636
function normalizeModel(value: string): string {
3737
return value.trim().toLowerCase();
@@ -45,14 +45,17 @@ function findMatchingModel(models: string[], value: string | null | undefined):
4545

4646
function getSelectableProviders(): AgentProvider[] {
4747
const enabled = getEnabledAgentProviders().filter(
48-
(provider): provider is AgentProvider => provider === "opencode" || provider === "claudecode"
48+
(provider): provider is AgentProvider =>
49+
provider === "opencode" || provider === "claudecode" || provider === "codex"
4950
);
5051
if (enabled.length > 0) return enabled;
51-
return ["opencode", "claudecode"];
52+
return ["opencode", "claudecode", "codex"];
5253
}
5354

5455
function toSelectableProvider(provider: "opencode" | "claudecode" | "codex"): AgentProvider {
55-
return provider === "claudecode" ? "claudecode" : "opencode";
56+
if (provider === "claudecode") return "claudecode";
57+
if (provider === "codex") return "codex";
58+
return "opencode";
5659
}
5760

5861
function buildSettingsModal(params: {
@@ -74,6 +77,7 @@ function buildSettingsModal(params: {
7477
const providerLabels: Record<AgentProvider, string> = {
7578
opencode: "OpenCode",
7679
claudecode: "Claude Code",
80+
codex: "Codex",
7781
};
7882
const providerOptions = enabledProviders.map((provider) => ({
7983
text: { type: "plain_text" as const, text: providerLabels[provider] },
@@ -90,13 +94,16 @@ function buildSettingsModal(params: {
9094
const initialModel = matchedSelectedModel
9195
? matchedSelectedModel
9296
: (opencodeModels[0] ?? "__none__");
97+
const introText = selectedProvider === "opencode"
98+
? "Configure agent, model (OpenCode), and working directory for this channel."
99+
: "Configure agent and working directory for this channel.";
93100

94101
const blocks: any[] = [
95102
{
96103
type: "section" as const,
97104
text: {
98105
type: "mrkdwn" as const,
99-
text: "Configure agent, model (OpenCode), and working directory for this channel.",
106+
text: introText,
100107
},
101108
},
102109
{
@@ -279,9 +286,12 @@ export function setupInteractiveHandlers(): void {
279286
if (!view) return;
280287

281288
const channelId = view.private_metadata;
282-
const selectedProvider = (body as any).actions?.[0]?.selected_option?.value === "claudecode"
289+
const selectedOption = (body as any).actions?.[0]?.selected_option?.value;
290+
const selectedProvider = selectedOption === "claudecode"
283291
? "claudecode"
284-
: "opencode";
292+
: selectedOption === "codex"
293+
? "codex"
294+
: "opencode";
285295
if (selectedProvider === "opencode") {
286296
try {
287297
await startOpenCodeServer();
@@ -316,7 +326,9 @@ export function setupInteractiveHandlers(): void {
316326
const selectedProvider =
317327
values?.[PROVIDER_BLOCK]?.[PROVIDER_ACTION]?.selected_option?.value === "claudecode"
318328
? "claudecode"
319-
: "opencode";
329+
: values?.[PROVIDER_BLOCK]?.[PROVIDER_ACTION]?.selected_option?.value === "codex"
330+
? "codex"
331+
: "opencode";
320332
const selectedModel = values?.[MODEL_BLOCK]?.[MODEL_ACTION]?.selected_option?.value;
321333
const workingDirectory = values?.[WORKING_DIR_BLOCK]?.[WORKING_DIR_ACTION]?.value || "";
322334

@@ -349,7 +361,7 @@ export function setupInteractiveHandlers(): void {
349361
const normalizedSelectedModel = findMatchingModel(getOpenCodeModels(), selectedModel) ?? selectedModel;
350362
setChannelModel(channelId, normalizedSelectedModel);
351363
}
352-
if (selectedProvider === "claudecode") {
364+
if (selectedProvider !== "opencode") {
353365
setChannelModel(channelId, "");
354366
}
355367

0 commit comments

Comments
 (0)