Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
2dbbed6
feat: add Antigravity OAuth support with manual token and local import
validatedev Jan 27, 2026
fdc1aef
feat: enhance Antigravity provider with improved token management and…
validatedev Jan 28, 2026
54e3e10
feat: add SQLite3 installation step to CI workflow
validatedev Jan 28, 2026
48cc9e7
feat: add conditional compilation for macOS in AntigravityLocalImporter
validatedev Jan 28, 2026
6f7c481
feat: add documentation comments for AntigravityOAuthConfig client cr…
validatedev Jan 28, 2026
efc1f2b
feat: add GitGuardian configuration for Antigravity OAuth client cred…
validatedev Jan 28, 2026
8853c75
fix: correct socket type casting in CallbackServer
validatedev Jan 28, 2026
6efd605
fix: correct socket type casting in CallbackServer
validatedev Jan 28, 2026
a968642
fix: adjust socket creation for Linux compatibility in CallbackServer
validatedev Jan 28, 2026
e35005a
chore: clean up unused parameter pattern
validatedev Jan 28, 2026
9c7ec4d
feat: enhance presentation method to handle unrecognized source labels
validatedev Jan 28, 2026
4f76db3
fix: simplify success alert message in AntigravityLoginFlow
validatedev Jan 28, 2026
44a9652
style: remove unnecessary blank line in ProvidersPane view
validatedev Jan 28, 2026
e3f86ac
feat: integrate Swift Protobuf for Antigravity OAuth state management…
validatedev Jan 28, 2026
0b724af
refactor: streamline Antigravity login flow and settings management b…
validatedev Jan 29, 2026
accb330
feat: enhance Antigravity OAuth credentials management by adding expi…
validatedev Jan 29, 2026
3372d8d
fix: correct label text by removing redundant "language" from local s…
validatedev Jan 29, 2026
5dad68b
fix: update local server description in AntigravityProviderImplementa…
validatedev Jan 29, 2026
20a64ed
Merge branch 'steipete:main' into feat/antigravity-oauth-extras
validatedev Feb 3, 2026
3a75c69
chore: linting
validatedev Feb 3, 2026
209010f
Merge branch 'steipete:main' into feat/antigravity-oauth-extras
validatedev Feb 4, 2026
8384722
Merge branch 'steipete:main' into feat/antigravity-oauth-extras
validatedev Feb 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions .gitguardian.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
version: 2

# GitGuardian configuration
# See: https://docs.gitguardian.com/ggshield-docs/configuration

secret:
ignored_matches:
# Antigravity Google OAuth public client credentials
# These are public OAuth client IDs meant to be embedded in the app
# They are distributed with the client and visible in OAuth flows
- match: 1071006060591-tmhssin2h21lcre235vtolojh4g403ep.apps.googleusercontent.com
name: Antigravity OAuth Client ID
- match: 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
name: Antigravity OAuth Client Secret
3 changes: 3 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,9 @@ jobs:
uname -a
uname -m

- name: Install SQLite3
run: sudo apt-get update && sudo apt-get install -y libsqlite3-dev

- name: Setup Swift 6.2.1
uses: swift-actions/setup-swift@v3
with:
Expand Down
2 changes: 1 addition & 1 deletion .swiftformat
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,4 @@
--allman false

# Exclusions
--exclude .build,.swiftpm,DerivedData,node_modules,dist,coverage,xcuserdata,Core/PeekabooCore/Sources/PeekabooCore/Extensions/NSArray+Extensions.swift
--exclude .build,.swiftpm,DerivedData,node_modules,dist,coverage,xcuserdata,Core/PeekabooCore/Sources/PeekabooCore/Extensions/NSArray+Extensions.swift,Sources/CodexBarCore/Providers/Antigravity/AntigravityOAuth/antigravity_state.pb.swift
2 changes: 2 additions & 0 deletions .swiftlint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ excluded:
- "*.playground"
# Exclude specific files that should not be linted/formatted
- "Core/PeekabooCore/Sources/PeekabooCore/Extensions/NSArray+Extensions.swift"
# Protobuf generated file
- "Sources/CodexBarCore/Providers/Antigravity/AntigravityOAuth/antigravity_state.pb.swift"

# Analyzer rules (require compilation)
analyzer_rules:
Expand Down
11 changes: 10 additions & 1 deletion Package.resolved

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ let package = Package(
.package(url: "https://github.com/apple/swift-log", from: "1.9.1"),
.package(url: "https://github.com/apple/swift-syntax", from: "600.0.1"),
.package(url: "https://github.com/sindresorhus/KeyboardShortcuts", from: "2.4.0"),
.package(url: "https://github.com/apple/swift-protobuf.git", from: "1.21.0"),
sweetCookieKitDependency,
],
targets: {
Expand All @@ -32,7 +33,9 @@ let package = Package(
"CodexBarMacroSupport",
.product(name: "Logging", package: "swift-log"),
.product(name: "SweetCookieKit", package: "SweetCookieKit"),
.product(name: "SwiftProtobuf", package: "swift-protobuf"),
],
exclude: ["Providers/Antigravity/AntigravityOAuth/antigravity_state.proto"],
swiftSettings: [
.enableUpcomingFeature("StrictConcurrency"),
]),
Expand Down
21 changes: 13 additions & 8 deletions Sources/CodexBar/PreferencesDebugPane.swift
Original file line number Diff line number Diff line change
Expand Up @@ -100,15 +100,20 @@ struct DebugPane: View {
title: "Probe logs",
caption: "Fetch the latest probe output for debugging; Copy keeps the full text.")
{
Picker("Provider", selection: self.$currentLogProvider) {
Text("Codex").tag(UsageProvider.codex)
Text("Claude").tag(UsageProvider.claude)
Text("Cursor").tag(UsageProvider.cursor)
Text("Augment").tag(UsageProvider.augment)
Text("Amp").tag(UsageProvider.amp)
ScrollView(.horizontal, showsIndicators: false) {
Picker("Provider", selection: self.$currentLogProvider) {
Text("Codex").tag(UsageProvider.codex)
Text("Claude").tag(UsageProvider.claude)
Text("Cursor").tag(UsageProvider.cursor)
Text("Augment").tag(UsageProvider.augment)
Text("Amp").tag(UsageProvider.amp)
Text("Antigravity").tag(UsageProvider.antigravity)
}
.pickerStyle(.segmented)
.controlSize(.small)
.fixedSize()
}
.pickerStyle(.segmented)
.frame(width: 460)
.frame(maxWidth: .infinity, alignment: .leading)

HStack(spacing: 12) {
Button { self.loadLog(self.currentLogProvider) } label: {
Expand Down
98 changes: 73 additions & 25 deletions Sources/CodexBar/PreferencesProviderSettingsRows.swift
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,7 @@ struct ProviderSettingsTokenAccountsRowView: View {
let descriptor: ProviderSettingsTokenAccountsDescriptor
@State private var newLabel: String = ""
@State private var newToken: String = ""
@State private var newToken2: String = ""

var body: some View {
VStack(alignment: .leading, spacing: 8) {
Expand Down Expand Up @@ -243,39 +244,86 @@ struct ProviderSettingsTokenAccountsRowView: View {
.controlSize(.small)
}

HStack(spacing: 8) {
TextField("Label", text: self.$newLabel)
.textFieldStyle(.roundedBorder)
.font(.footnote)
SecureField(self.descriptor.placeholder, text: self.$newToken)
.textFieldStyle(.roundedBorder)
.font(.footnote)
Button("Add") {
let label = self.newLabel.trimmingCharacters(in: .whitespacesAndNewlines)
let token = self.newToken.trimmingCharacters(in: .whitespacesAndNewlines)
guard !label.isEmpty, !token.isEmpty else { return }
self.descriptor.addAccount(label, token)
self.newLabel = ""
self.newToken = ""
if self.descriptor.supportsManualEntry {
let trimmedLabel = self.newLabel.trimmingCharacters(in: .whitespacesAndNewlines)
let trimmedToken = self.newToken.trimmingCharacters(in: .whitespacesAndNewlines)
let trimmedToken2 = self.newToken2.trimmingCharacters(in: .whitespacesAndNewlines)
let addDisabled = trimmedLabel.isEmpty || trimmedToken.isEmpty

if self.descriptor.supportsTwoFieldEntry {
VStack(alignment: .leading, spacing: 8) {
HStack(spacing: 8) {
TextField("Label", text: self.$newLabel)
.textFieldStyle(.roundedBorder)
.font(.footnote)
.frame(maxWidth: .infinity)
}
HStack(spacing: 8) {
SecureField("Access Token (ya29...)", text: self.$newToken)
.textFieldStyle(.roundedBorder)
.font(.footnote)
SecureField("Refresh Token - optional (1//...)", text: self.$newToken2)
.textFieldStyle(.roundedBorder)
.font(.footnote)
}
Button("Add") {
guard !addDisabled else { return }
self.descriptor.addAccount(trimmedLabel, trimmedToken, trimmedToken2)
self.newLabel = ""
self.newToken = ""
self.newToken2 = ""
}
.buttonStyle(.bordered)
.controlSize(.small)
.disabled(addDisabled)
}
} else {
HStack(spacing: 8) {
TextField("Label", text: self.$newLabel)
.textFieldStyle(.roundedBorder)
.font(.footnote)
SecureField(self.descriptor.placeholder, text: self.$newToken)
.textFieldStyle(.roundedBorder)
.font(.footnote)
Button("Add") {
guard !addDisabled else { return }
self.descriptor.addAccount(trimmedLabel, trimmedToken, "")
self.newLabel = ""
self.newToken = ""
self.newToken2 = ""
}
.buttonStyle(.bordered)
.controlSize(.small)
.disabled(addDisabled)
}
}
.buttonStyle(.bordered)
.controlSize(.small)
.disabled(self.newLabel.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty ||
self.newToken.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty)
}

HStack(spacing: 10) {
Button("Open token file") {
self.descriptor.openConfigFile()
if let addAction = self.descriptor.addAction {
Button(self.descriptor.addActionTitle ?? "Add account") {
Task { @MainActor in
await addAction()
}
}
.buttonStyle(.link)
.buttonStyle(.bordered)
.controlSize(.small)
Button("Reload") {
self.descriptor.reloadFromDisk()
}

if let importAction = self.descriptor.importAction {
Button(importAction.title) {
Task { @MainActor in
await importAction.action()
}
}
.buttonStyle(.link)
.buttonStyle(.bordered)
.controlSize(.small)
}

Button("Open config file") {
self.descriptor.openConfigFile()
}
.buttonStyle(.link)
.controlSize(.small)
}
}
}
Expand Down
7 changes: 6 additions & 1 deletion Sources/CodexBar/PreferencesProvidersPane+Testing.swift
Original file line number Diff line number Diff line change
Expand Up @@ -166,12 +166,17 @@ enum ProvidersPaneTestHarness {
title: "Accounts",
subtitle: "Accounts subtitle",
placeholder: "Token",
supportsManualEntry: true,
supportsTwoFieldEntry: false,
addActionTitle: nil,
addAction: nil,
importAction: nil,
provider: .codex,
isVisible: { true },
accounts: { [] },
activeIndex: { 0 },
setActiveIndex: { _ in },
addAccount: { _, _ in },
addAccount: { _, _, _ in },
removeAccount: { _ in },
openConfigFile: {},
reloadFromDisk: {})
Expand Down
Loading