From f96b91963ab940cdc6b1568599a0d64f53e54518 Mon Sep 17 00:00:00 2001 From: Riza Ega Satyabudhi Date: Wed, 8 Apr 2026 18:19:38 +0700 Subject: [PATCH 1/2] Fix OpenCode Go Usage Dashboard link to open workspace-specific URL --- .../Providers/OpenCodeGo/OpenCodeGoSettingsStore.swift | 8 ++++++++ Sources/CodexBar/StatusItemController+Actions.swift | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/Sources/CodexBar/Providers/OpenCodeGo/OpenCodeGoSettingsStore.swift b/Sources/CodexBar/Providers/OpenCodeGo/OpenCodeGoSettingsStore.swift index 30b645e86..169f3345a 100644 --- a/Sources/CodexBar/Providers/OpenCodeGo/OpenCodeGoSettingsStore.swift +++ b/Sources/CodexBar/Providers/OpenCodeGo/OpenCodeGoSettingsStore.swift @@ -33,6 +33,14 @@ extension SettingsStore { } } + var opencodegoDashboardURL: URL? { + let workspaceID = self.opencodegoWorkspaceID + if !workspaceID.isEmpty { + return URL(string: "https://opencode.ai/workspace/\(workspaceID)/go") + } + return URL(string: "https://opencode.ai") + } + func ensureOpenCodeGoCookieLoaded() {} } diff --git a/Sources/CodexBar/StatusItemController+Actions.swift b/Sources/CodexBar/StatusItemController+Actions.swift index b470e049c..ef592ae6d 100644 --- a/Sources/CodexBar/StatusItemController+Actions.swift +++ b/Sources/CodexBar/StatusItemController+Actions.swift @@ -44,6 +44,10 @@ extension StatusItemController { return self.settings.alibabaCodingPlanAPIRegion.dashboardURL } + if provider == .opencodego { + return self.settings.opencodegoDashboardURL + } + let meta = self.store.metadata(for: provider) let urlString: String? = if provider == .claude, self.store.isClaudeSubscription() { meta.subscriptionDashboardURL ?? meta.dashboardURL From b17752dbf98d6645210e047ae798daf8256865ad Mon Sep 17 00:00:00 2001 From: Riza Ega Satyabudhi Date: Wed, 8 Apr 2026 19:13:43 +0700 Subject: [PATCH 2/2] Normalize workspace ID before building OpenCode Go dashboard URL --- .../Providers/OpenCodeGo/OpenCodeGoSettingsStore.swift | 4 ++-- .../Providers/OpenCodeGo/OpenCodeGoUsageFetcher.swift | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Sources/CodexBar/Providers/OpenCodeGo/OpenCodeGoSettingsStore.swift b/Sources/CodexBar/Providers/OpenCodeGo/OpenCodeGoSettingsStore.swift index 169f3345a..aa6bcef8b 100644 --- a/Sources/CodexBar/Providers/OpenCodeGo/OpenCodeGoSettingsStore.swift +++ b/Sources/CodexBar/Providers/OpenCodeGo/OpenCodeGoSettingsStore.swift @@ -34,8 +34,8 @@ extension SettingsStore { } var opencodegoDashboardURL: URL? { - let workspaceID = self.opencodegoWorkspaceID - if !workspaceID.isEmpty { + let workspaceID = OpenCodeGoUsageFetcher.normalizeWorkspaceID(self.opencodegoWorkspaceID) + if let workspaceID { return URL(string: "https://opencode.ai/workspace/\(workspaceID)/go") } return URL(string: "https://opencode.ai") diff --git a/Sources/CodexBarCore/Providers/OpenCodeGo/OpenCodeGoUsageFetcher.swift b/Sources/CodexBarCore/Providers/OpenCodeGo/OpenCodeGoUsageFetcher.swift index 4183eb853..d42e4b2a7 100644 --- a/Sources/CodexBarCore/Providers/OpenCodeGo/OpenCodeGoUsageFetcher.swift +++ b/Sources/CodexBarCore/Providers/OpenCodeGo/OpenCodeGoUsageFetcher.swift @@ -147,7 +147,7 @@ public struct OpenCodeGoUsageFetcher: Sendable { return ids[0] } - private static func normalizeWorkspaceID(_ raw: String?) -> String? { + static func normalizeWorkspaceID(_ raw: String?) -> String? { guard let raw else { return nil } let trimmed = raw.trimmingCharacters(in: .whitespacesAndNewlines) if trimmed.hasPrefix("wrk_"), trimmed.count > 4 {