Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 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
7b1218d
Merge branch 'steipete:main' into feat/antigravity-oauth-extras
validatedev Feb 7, 2026
8de6d44
fix: resolve merge conflict with upstream main
validatedev Feb 13, 2026
2cbb67f
fix: keep manual token entry visible for Antigravity when Keychain is…
validatedev Feb 13, 2026
dd88857
fix: wire Antigravity credentials refresh callback in normal app refr…
validatedev Feb 13, 2026
9d72eaf
fix: route Full Disk Access errors to FDA alert during Antigravity im…
validatedev Feb 13, 2026
d93b0b7
fix: use strict form encoding for Antigravity OAuth token bodies
validatedev Feb 13, 2026
de1edc6
feat: bootstrap project ID and add retrieveUserQuota fallback for Ant…
validatedev Feb 13, 2026
bbd64d6
style: fix SwiftFormat lint violations across Antigravity OAuth files
validatedev Feb 13, 2026
3a4a74b
Merge branch 'steipete:main' into feat/antigravity-oauth-extras
validatedev Feb 13, 2026
8fdd6ce
fix: resolve merge conflicts with upstream/main (Ollama + OpenRouter …
validatedev Feb 18, 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
23 changes: 14 additions & 9 deletions Sources/CodexBar/PreferencesDebugPane.swift
Original file line number Diff line number Diff line change
Expand Up @@ -100,16 +100,21 @@ 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)
Text("Ollama").tag(UsageProvider.ollama)
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)
Text("Ollama").tag(UsageProvider.ollama)
}
.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 @@ -205,6 +205,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 @@ -245,39 +246,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
Loading