fix(github): label Copilot profiles by account identity (#2498)

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
ryanngit
2026-07-10 11:27:11 +07:00
committed by decolua
parent e79f9eddb4
commit 3a7a878f91
3 changed files with 28 additions and 1 deletions

View File

@@ -56,6 +56,17 @@ function upsert(db, c) {
);
}
function deriveConnectionName(data, fallbackName) {
if (data.provider === "github") {
return data.providerSpecificData?.githubLogin
|| data.providerSpecificData?.githubEmail
|| data.email
|| data.providerSpecificData?.githubName
|| fallbackName;
}
return fallbackName;
}
export async function getProviderConnections(filter = {}) {
const db = await getAdapter();
const where = [];
@@ -133,7 +144,7 @@ export async function createProviderConnection(data) {
let connectionName = data.name || null;
if (!connectionName && (data.authType === "oauth" || data.authType === "access_token")) {
connectionName = data.email || `Account ${all.length + 1}`;
connectionName = deriveConnectionName(data, data.email || `Account ${all.length + 1}`);
}
let connectionPriority = data.priority;
if (!connectionPriority) {

View File

@@ -777,6 +777,9 @@ const PROVIDERS = {
accessToken: tokens.access_token,
refreshToken: tokens.refresh_token,
expiresIn: tokens.expires_in,
name: extra?.userInfo?.login || extra?.userInfo?.name,
displayName: extra?.userInfo?.name || extra?.userInfo?.login,
email: extra?.userInfo?.email || null,
providerSpecificData: {
copilotToken: extra?.copilotToken?.token,
copilotTokenExpiresAt: extra?.copilotToken?.expires_at,

View File

@@ -101,6 +101,19 @@ describe("DB SQLite layer — public API parity", () => {
expect(back.providerSpecificData).toEqual({ foo: "bar" });
});
it("providerConnections: GitHub OAuth uses account identity as fallback name", async () => {
const c = await sqliteDb.createProviderConnection({
provider: "github",
authType: "oauth",
accessToken: "tok",
providerSpecificData: { githubLogin: "octocat" },
});
expect(c.name).toBe("octocat");
const back = await sqliteDb.getProviderConnectionById(c.id);
expect(back.name).toBe("octocat");
});
it("providerNodes: CRUD", async () => {
const n = await sqliteDb.createProviderNode({ type: "openai", name: "Test", baseUrl: "https://api.test", apiType: "openai" });
expect(n.id).toBeDefined();