Files
2026-07-13 12:22:33 +08:00

99 lines
3.9 KiB
Swift

import AppKit
import CodexBarCore
import Foundation
import SwiftUI
struct BedrockProviderImplementation: ProviderImplementation {
let id: UsageProvider = .bedrock
@MainActor
func presentation(context _: ProviderPresentationContext) -> ProviderPresentation {
ProviderPresentation { _ in "api" }
}
@MainActor
func observeSettings(_ settings: SettingsStore) {
_ = settings.bedrockAuthMode
_ = settings.bedrockProfile
_ = settings.bedrockAccessKeyID
_ = settings.bedrockSecretAccessKey
_ = settings.bedrockRegion
}
@MainActor
func isAvailable(context: ProviderAvailabilityContext) -> Bool {
BedrockSettingsReader.hasCredentials(environment: context.environment)
}
@MainActor
func settingsPickers(context: ProviderSettingsContext) -> [ProviderSettingsPickerDescriptor] {
let binding = Binding(
get: { context.settings.bedrockAuthMode },
set: { context.settings.bedrockAuthMode = $0 })
let options = [
ProviderSettingsPickerOption(id: BedrockAuthMode.keys.rawValue, title: "Access keys"),
ProviderSettingsPickerOption(id: BedrockAuthMode.profile.rawValue, title: "AWS profile"),
]
return [
ProviderSettingsPickerDescriptor(
id: "bedrock-auth-mode",
title: "Authentication",
subtitle: "Use static access keys, or resolve credentials from a named AWS profile "
+ "(supports SSO and assume-role via the AWS CLI).",
binding: binding,
options: options,
isVisible: nil,
onChange: nil),
]
}
@MainActor
func settingsFields(context: ProviderSettingsContext) -> [ProviderSettingsFieldDescriptor] {
let isKeysMode = { context.settings.bedrockAuthMode != BedrockAuthMode.profile.rawValue }
let isProfileMode = { context.settings.bedrockAuthMode == BedrockAuthMode.profile.rawValue }
return [
ProviderSettingsFieldDescriptor(
id: "bedrock-profile",
title: "Profile name",
subtitle: "Named AWS profile from ~/.aws/config. Can also be set with AWS_PROFILE.",
kind: .plain,
placeholder: "default",
binding: context.stringBinding(\.bedrockProfile),
actions: [],
isVisible: isProfileMode,
onActivate: nil),
ProviderSettingsFieldDescriptor(
id: "bedrock-access-key-id",
title: "Access key ID",
subtitle: "AWS access key ID. Can also be set with AWS_ACCESS_KEY_ID.",
kind: .secure,
placeholder: "AKIA...",
binding: context.stringBinding(\.bedrockAccessKeyID),
actions: [],
isVisible: isKeysMode,
onActivate: nil),
ProviderSettingsFieldDescriptor(
id: "bedrock-secret-access-key",
title: "Secret access key",
subtitle: "AWS secret access key. Can also be set with AWS_SECRET_ACCESS_KEY.",
kind: .secure,
placeholder: "",
binding: context.stringBinding(\.bedrockSecretAccessKey),
actions: [],
isVisible: isKeysMode,
onActivate: nil),
ProviderSettingsFieldDescriptor(
id: "bedrock-region",
title: "Region",
subtitle: "AWS region. Can also be set with AWS_REGION. "
+ "In profile mode, leave blank to use the profile's region.",
kind: .plain,
placeholder: "us-east-1",
binding: context.stringBinding(\.bedrockRegion),
actions: [],
isVisible: nil,
onActivate: nil),
]
}
}