From 8ffb47639c81ef096014872e4e64b2e577951a5a Mon Sep 17 00:00:00 2001 From: Hanson Wen <57138830+Hilo-Hilo@users.noreply.github.com> Date: Fri, 13 Feb 2026 10:36:34 -0800 Subject: [PATCH] Add Perplexity Comet browser support for cookie imports Comet is a Chromium-based browser by Perplexity AI. This adds it to all browser cookie import lists, keychain decryption handling, and local storage scanning (MiniMax, Factory, Augment providers). Requires steipete/SweetCookieKit#6 for the Browser.comet enum case. Co-authored-by: Cursor --- Package.resolved | 8 +++---- Package.swift | 2 +- .../BrowserCookieImportOrder.swift | 3 ++- .../Augment/AugmentProviderDescriptor.swift | 1 + .../Factory/FactoryLocalStorageImporter.swift | 1 + .../MiniMax/MiniMaxLocalStorageImporter.swift | 3 +++ .../CodexBarTests/BrowserDetectionTests.swift | 22 +++++++++++++++++++ 7 files changed, 34 insertions(+), 6 deletions(-) diff --git a/Package.resolved b/Package.resolved index f84c0c217..a7ba0baa0 100644 --- a/Package.resolved +++ b/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "74bd6f3ab6e0b0cb0c2cddb00f2167c2ab0a1c00cd54ffc1a2899c7ef8c56367", + "originHash" : "66b529b6903a4fe22f46995c23619a9167071a16b5e66c4ee2fffc1dd364f421", "pins" : [ { "identity" : "commander", @@ -31,10 +31,10 @@ { "identity" : "sweetcookiekit", "kind" : "remoteSourceControl", - "location" : "https://github.com/steipete/SweetCookieKit", + "location" : "https://github.com/Hilo-Hilo/SweetCookieKit", "state" : { - "revision" : "4d5b71ffbb296937dc5ee8472f64721bca771cf0", - "version" : "0.4.0" + "branch" : "feature/add-comet-browser", + "revision" : "209d26b82355f4250a072d89e0ccc7f476ea48c5" } }, { diff --git a/Package.swift b/Package.swift index 83cbfca65..bd12dd821 100644 --- a/Package.swift +++ b/Package.swift @@ -9,7 +9,7 @@ let useLocalSweetCookieKit = let sweetCookieKitDependency: Package.Dependency = useLocalSweetCookieKit && FileManager.default.fileExists(atPath: sweetCookieKitPath) ? .package(path: sweetCookieKitPath) - : .package(url: "https://github.com/steipete/SweetCookieKit", from: "0.4.0") + : .package(url: "https://github.com/Hilo-Hilo/SweetCookieKit", branch: "feature/add-comet-browser") let package = Package( name: "CodexBar", diff --git a/Sources/CodexBarCore/BrowserCookieImportOrder.swift b/Sources/CodexBarCore/BrowserCookieImportOrder.swift index 32549a13b..2557c4569 100644 --- a/Sources/CodexBarCore/BrowserCookieImportOrder.swift +++ b/Sources/CodexBarCore/BrowserCookieImportOrder.swift @@ -44,7 +44,8 @@ extension Browser { .edge, .edgeBeta, .edgeCanary, .helium, .vivaldi, - .dia: + .dia, + .comet: return true @unknown default: return true diff --git a/Sources/CodexBarCore/Providers/Augment/AugmentProviderDescriptor.swift b/Sources/CodexBarCore/Providers/Augment/AugmentProviderDescriptor.swift index 4ccb0987f..7e882d802 100644 --- a/Sources/CodexBarCore/Providers/Augment/AugmentProviderDescriptor.swift +++ b/Sources/CodexBarCore/Providers/Augment/AugmentProviderDescriptor.swift @@ -22,6 +22,7 @@ public enum AugmentProviderDescriptor { .brave, .arc, .dia, + .comet, .arcBeta, .firefox, ] diff --git a/Sources/CodexBarCore/Providers/Factory/FactoryLocalStorageImporter.swift b/Sources/CodexBarCore/Providers/Factory/FactoryLocalStorageImporter.swift index b245c6981..711b02b5c 100644 --- a/Sources/CodexBarCore/Providers/Factory/FactoryLocalStorageImporter.swift +++ b/Sources/CodexBarCore/Providers/Factory/FactoryLocalStorageImporter.swift @@ -84,6 +84,7 @@ enum FactoryLocalStorageImporter { .arcBeta, .arcCanary, .dia, + .comet, .chatgptAtlas, .chromium, .helium, diff --git a/Sources/CodexBarCore/Providers/MiniMax/MiniMaxLocalStorageImporter.swift b/Sources/CodexBarCore/Providers/MiniMax/MiniMaxLocalStorageImporter.swift index fcd1ebcce..896ddd4fa 100644 --- a/Sources/CodexBarCore/Providers/MiniMax/MiniMaxLocalStorageImporter.swift +++ b/Sources/CodexBarCore/Providers/MiniMax/MiniMaxLocalStorageImporter.swift @@ -141,6 +141,7 @@ enum MiniMaxLocalStorageImporter { .arcBeta, .arcCanary, .dia, + .comet, .chatgptAtlas, .chromium, .helium, @@ -203,6 +204,7 @@ enum MiniMaxLocalStorageImporter { .arcBeta, .arcCanary, .dia, + .comet, .chatgptAtlas, .chromium, .helium, @@ -264,6 +266,7 @@ enum MiniMaxLocalStorageImporter { .arcBeta, .arcCanary, .dia, + .comet, .chatgptAtlas, .chromium, .helium, diff --git a/Tests/CodexBarTests/BrowserDetectionTests.swift b/Tests/CodexBarTests/BrowserDetectionTests.swift index 9d0e18824..b792c42cf 100644 --- a/Tests/CodexBarTests/BrowserDetectionTests.swift +++ b/Tests/CodexBarTests/BrowserDetectionTests.swift @@ -91,6 +91,28 @@ struct BrowserDetectionTests { #expect(detection.isCookieSourceAvailable(.dia) == true) } + @Test + func cometRequiresProfileData() throws { + let temp = FileManager.default.temporaryDirectory.appendingPathComponent(UUID().uuidString) + try FileManager.default.createDirectory(at: temp, withIntermediateDirectories: true) + defer { try? FileManager.default.removeItem(at: temp) } + + let detection = BrowserDetection(homeDirectory: temp.path, cacheTTL: 0) + #expect(detection.isCookieSourceAvailable(.comet) == false) + + let profile = temp + .appendingPathComponent("Library") + .appendingPathComponent("Application Support") + .appendingPathComponent("Comet") + .appendingPathComponent("Default") + try FileManager.default.createDirectory(at: profile, withIntermediateDirectories: true) + let cookiesDir = profile.appendingPathComponent("Network") + try FileManager.default.createDirectory(at: cookiesDir, withIntermediateDirectories: true) + FileManager.default.createFile(atPath: cookiesDir.appendingPathComponent("Cookies").path, contents: Data()) + + #expect(detection.isCookieSourceAvailable(.comet) == true) + } + @Test func firefoxRequiresDefaultProfileDir() throws { let temp = FileManager.default.temporaryDirectory.appendingPathComponent(UUID().uuidString)