import AppKitimport CodexBarCoreimport CodexBarMacroSupportimport SwiftUI @ProviderImplementationRegistrationstruct CopilotProviderImplementation: ProviderImplementation { let id: UsageProvider = .copilot let supportsLoginFlow: Bool = true @MainActor func presentation(context _: ProviderPresentationContext) -> ProviderPresentation { ProviderPresentation { _ in "github api" } } @MainActor func observeSettings(_ settings: SettingsStore) { _ = settings.copilotAPIToken _ = settings.copilotEnterpriseHost } @MainActor func settingsSnapshot(context: ProviderSettingsSnapshotContext) -> ProviderSettingsSnapshotContribution? { .copilot(context.settings.copilotSettingsSnapshot(tokenOverride: context.tokenOverride)) } @MainActor func loginMenuAction(context _: ProviderMenuLoginContext) -> (label: String, action: MenuDescriptor.MenuAction)? { ("Add Account...", .addProviderAccount(.copilot)) } @MainActor func settingsFields(context: ProviderSettingsContext) -> [ProviderSettingsFieldDescriptor] { [ ProviderSettingsFieldDescriptor( id: "copilot-enterprise-host", title: "Enterprise host", subtitle: "Optional. Enter your GitHub Enterprise host, for example octocorp.ghe.com. Leave blank for github.com.", kind: .plain, placeholder: "github.com", binding: context.stringBinding(\.copilotEnterpriseHost), actions: [], isVisible: nil, onActivate: nil), ProviderSettingsFieldDescriptor( id: "copilot-add-account", title: "GitHub Login", subtitle: "Add accounts via GitHub OAuth Device Flow on the selected host.", kind: .plain, placeholder: nil, binding: .constant(""), actions: [ ProviderSettingsActionDescriptor( id: "copilot-add-account-action", title: "Add Account", style: .bordered, isVisible: { true }, perform: { await CopilotLoginFlow.run(settings: context.settings) }), ], isVisible: nil, onActivate: nil), ] } @MainActor func runLoginFlow(context: ProviderLoginContext) async -> Bool { await CopilotLoginFlow.run(settings: context.controller.settings) return true }}
import AppKit
import CodexBarCore
import CodexBarMacroSupport
import SwiftUI
@ProviderImplementationRegistration
struct CopilotProviderImplementation: ProviderImplementation {
let id: UsageProvider = .copilot
let supportsLoginFlow: Bool = true
@MainActor
func presentation(context _: ProviderPresentationContext) -> ProviderPresentation {
ProviderPresentation { _ in "github api" }
}
@MainActor
func observeSettings(_ settings: SettingsStore) {
_ = settings.copilotAPIToken
_ = settings.copilotEnterpriseHost
}
@MainActor
func settingsSnapshot(context: ProviderSettingsSnapshotContext) -> ProviderSettingsSnapshotContribution? {
.copilot(context.settings.copilotSettingsSnapshot(tokenOverride: context.tokenOverride))
}
@MainActor
func loginMenuAction(context _: ProviderMenuLoginContext)
-> (label: String, action: MenuDescriptor.MenuAction)?
{
("Add Account...", .addProviderAccount(.copilot))
}
@MainActor
func settingsFields(context: ProviderSettingsContext) -> [ProviderSettingsFieldDescriptor] {
[
ProviderSettingsFieldDescriptor(
id: "copilot-enterprise-host",
title: "Enterprise host",
subtitle: "Optional. Enter your GitHub Enterprise host, for example octocorp.ghe.com. Leave blank for github.com.",
kind: .plain,
placeholder: "github.com",
binding: context.stringBinding(\.copilotEnterpriseHost),
actions: [],
isVisible: nil,
onActivate: nil),
ProviderSettingsFieldDescriptor(
id: "copilot-add-account",
title: "GitHub Login",
subtitle: "Add accounts via GitHub OAuth Device Flow on the selected host.",
kind: .plain,
placeholder: nil,
binding: .constant(""),
actions: [
ProviderSettingsActionDescriptor(
id: "copilot-add-account-action",
title: "Add Account",
style: .bordered,
isVisible: { true },
perform: {
await CopilotLoginFlow.run(settings: context.settings)
}),
],
isVisible: nil,
onActivate: nil),
]
}
@MainActor
func runLoginFlow(context: ProviderLoginContext) async -> Bool {
await CopilotLoginFlow.run(settings: context.controller.settings)
return true
}
}