import AppKitimport CodexBarCoreimport Foundationimport 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), ] }}
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),
]
}
}