summaryrefslogtreecommitdiffhomepage
path: root/packages
diff options
context:
space:
mode:
authorKit Langton <[email protected]>2026-04-04 19:25:37 -0400
committerGitHub <[email protected]>2026-04-04 19:25:37 -0400
commitc6ebc7ff7c8e2dcbc8d09406e764d31f80d40943 (patch)
tree5be49b2feb0e88be77d2257db1b0f69f528b53e7 /packages
parent985663620f3068d07ebd4dda44cb365cc3db4dd7 (diff)
downloadopencode-c6ebc7ff7c8e2dcbc8d09406e764d31f80d40943.tar.gz
opencode-c6ebc7ff7c8e2dcbc8d09406e764d31f80d40943.zip
fix(tui): only show org switch affordances when useful (#21054)
Diffstat (limited to 'packages')
-rw-r--r--packages/opencode/src/cli/cmd/tui/app.tsx30
-rw-r--r--packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx9
-rw-r--r--packages/opencode/src/config/config.ts1
-rw-r--r--packages/opencode/src/config/console-state.ts2
-rw-r--r--packages/opencode/src/server/routes/experimental.ts6
5 files changed, 33 insertions, 15 deletions
diff --git a/packages/opencode/src/cli/cmd/tui/app.tsx b/packages/opencode/src/cli/cmd/tui/app.tsx
index 8ce738292..6b2633c37 100644
--- a/packages/opencode/src/cli/cmd/tui/app.tsx
+++ b/packages/opencode/src/cli/cmd/tui/app.tsx
@@ -630,19 +630,23 @@ function App(props: { onSnapshot?: () => Promise<string[]> }) {
},
category: "Provider",
},
- {
- title: "Switch org",
- value: "console.org.switch",
- suggested: Boolean(sync.data.console_state.activeOrgName),
- slash: {
- name: "org",
- aliases: ["orgs", "switch-org"],
- },
- onSelect: () => {
- dialog.replace(() => <DialogConsoleOrg />)
- },
- category: "Provider",
- },
+ ...(sync.data.console_state.switchableOrgCount > 1
+ ? [
+ {
+ title: "Switch org",
+ value: "console.org.switch",
+ suggested: Boolean(sync.data.console_state.activeOrgName),
+ slash: {
+ name: "org",
+ aliases: ["orgs", "switch-org"],
+ },
+ onSelect: () => {
+ dialog.replace(() => <DialogConsoleOrg />)
+ },
+ category: "Provider",
+ },
+ ]
+ : []),
{
title: "View status",
keybind: "status_view",
diff --git a/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx b/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx
index 55bf1d563..5123cea56 100644
--- a/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx
+++ b/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx
@@ -96,6 +96,7 @@ export function Prompt(props: PromptProps) {
const shell = createMemo(() => props.placeholders?.shell ?? [])
const [auto, setAuto] = createSignal<AutocompleteRef>()
const activeOrgName = createMemo(() => sync.data.console_state.activeOrgName)
+ const canSwitchOrgs = createMemo(() => sync.data.console_state.switchableOrgCount > 1)
const currentProviderLabel = createMemo(() => {
const current = local.model.current()
const provider = local.model.parsed().provider
@@ -1118,7 +1119,13 @@ export function Prompt(props: PromptProps) {
<box flexDirection="row" gap={1} alignItems="center">
{props.right}
<Show when={activeOrgName()}>
- <text fg={theme.textMuted} onMouseUp={() => command.trigger("console.org.switch")}>
+ <text
+ fg={theme.textMuted}
+ onMouseUp={() => {
+ if (!canSwitchOrgs()) return
+ command.trigger("console.org.switch")
+ }}
+ >
{`${CONSOLE_MANAGED_ICON} ${activeOrgName()}`}
</text>
</Show>
diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts
index 83e677bcb..b11ae8319 100644
--- a/packages/opencode/src/config/config.ts
+++ b/packages/opencode/src/config/config.ts
@@ -1469,6 +1469,7 @@ export namespace Config {
consoleState: {
consoleManagedProviders: Array.from(consoleManagedProviders),
activeOrgName,
+ switchableOrgCount: 0,
},
}
})
diff --git a/packages/opencode/src/config/console-state.ts b/packages/opencode/src/config/console-state.ts
index a5d1f6d26..cf96a4e30 100644
--- a/packages/opencode/src/config/console-state.ts
+++ b/packages/opencode/src/config/console-state.ts
@@ -3,6 +3,7 @@ import z from "zod"
export const ConsoleState = z.object({
consoleManagedProviders: z.array(z.string()),
activeOrgName: z.string().optional(),
+ switchableOrgCount: z.number().int().nonnegative(),
})
export type ConsoleState = z.infer<typeof ConsoleState>
@@ -10,4 +11,5 @@ export type ConsoleState = z.infer<typeof ConsoleState>
export const emptyConsoleState: ConsoleState = {
consoleManagedProviders: [],
activeOrgName: undefined,
+ switchableOrgCount: 0,
}
diff --git a/packages/opencode/src/server/routes/experimental.ts b/packages/opencode/src/server/routes/experimental.ts
index a4b1f4d08..c673393d0 100644
--- a/packages/opencode/src/server/routes/experimental.ts
+++ b/packages/opencode/src/server/routes/experimental.ts
@@ -54,7 +54,11 @@ export const ExperimentalRoutes = lazy(() =>
},
}),
async (c) => {
- return c.json(await Config.getConsoleState())
+ const [consoleState, groups] = await Promise.all([Config.getConsoleState(), Account.orgsByAccount()])
+ return c.json({
+ ...consoleState,
+ switchableOrgCount: groups.reduce((count, group) => count + group.orgs.length, 0),
+ })
},
)
.get(