diff --git a/packages/opencode/src/account/index.ts b/packages/opencode/src/account/index.ts index e9942b1e1d..991ba29a94 100644 --- a/packages/opencode/src/account/index.ts +++ b/packages/opencode/src/account/index.ts @@ -438,6 +438,10 @@ export namespace Account { return Option.getOrUndefined(await runPromise((service) => service.active())) } + export async function list(): Promise { + return runPromise((service) => service.list()) + } + export async function activeOrg(): Promise { return Option.getOrUndefined(await runPromise((service) => service.activeOrg())) } @@ -446,6 +450,10 @@ export namespace Account { return runPromise((service) => service.orgsByAccount()) } + export async function orgs(accountID: AccountID): Promise { + return runPromise((service) => service.orgs(accountID)) + } + export async function switchOrg(accountID: AccountID, orgID: OrgID) { return runPromise((service) => service.use(accountID, Option.some(orgID))) } diff --git a/packages/opencode/src/server/routes/experimental.ts b/packages/opencode/src/server/routes/experimental.ts index 4686354915..91350b24c7 100644 --- a/packages/opencode/src/server/routes/experimental.ts +++ b/packages/opencode/src/server/routes/experimental.ts @@ -75,7 +75,18 @@ export const ExperimentalRoutes = lazy(() => }, }), async (c) => { - const [groups, active] = await Promise.all([Account.orgsByAccount(), Account.active()]) + const [accounts, active] = await Promise.all([Account.list(), Account.active()]) + const groups = await Promise.all( + accounts.map(async (account) => { + try { + const orgs = await Account.orgs(account.id) + return { account, orgs } + } catch { + return { account, orgs: [] } + } + }), + ) + const orgs = groups.flatMap((group) => group.orgs.map((org) => ({ accountID: group.account.id,