diff --git a/apps/loopover-extension/background.js b/apps/loopover-extension/background.js index 6266b1077f..070a794256 100644 --- a/apps/loopover-extension/background.js +++ b/apps/loopover-extension/background.js @@ -1,8 +1,8 @@ import { logoutExtensionSession, requestPullContext } from "./auth.js"; chrome.runtime.onMessage.addListener((message, _sender, sendResponse) => { - if (!message || !["gittensory:pull-context", "gittensory:logout"].includes(message.type)) return false; - const task = message.type === "gittensory:logout" ? logoutExtensionSession() : requestPullContext(message); + if (!message || !["loopover:pull-context", "loopover:logout"].includes(message.type)) return false; + const task = message.type === "loopover:logout" ? logoutExtensionSession() : requestPullContext(message); void task.then((payload) => sendResponse({ ok: true, payload })).catch((error) => sendResponse({ ok: false, error: error instanceof Error ? error.message : String(error) })); return true; }); diff --git a/apps/loopover-extension/content.js b/apps/loopover-extension/content.js index 001418500f..5cef4120a7 100644 --- a/apps/loopover-extension/content.js +++ b/apps/loopover-extension/content.js @@ -19,26 +19,26 @@ function matchPullRequestTarget(pathname) { } function mountOverlay(target) { - if (document.querySelector("[data-gittensory-pr-context]")) return; + if (document.querySelector("[data-loopover-pr-context]")) return; const container = document.createElement("aside"); const host = findPullRequestSidebar(); - container.className = `gittensory-overlay ${host ? "gittensory-overlay--sidebar" : "gittensory-overlay--floating"}`; + container.className = `loopover-overlay ${host ? "loopover-overlay--sidebar" : "loopover-overlay--floating"}`; container.dataset.loopoverPrContext = "true"; container.innerHTML = ` -
${escapeOpportunityHtml(badge.why)}
+${escapeOpportunityHtml(badge.why)}
${ lastSyncedLabel - ? `${escapeOpportunityHtml(lastSyncedLabel)}
` + ? `${escapeOpportunityHtml(lastSyncedLabel)}
` : "" } `; diff --git a/apps/loopover-miner-extension/options.js b/apps/loopover-miner-extension/options.js index 8051fb37c5..b674b36169 100644 --- a/apps/loopover-miner-extension/options.js +++ b/apps/loopover-miner-extension/options.js @@ -43,7 +43,7 @@ async function removeLegacyDiscoveryIndexUrl() { // Mirrors background.js's own literal (#4859) -- these classic (non-ESM-importing) extension scripts share a // message-type "protocol" via matching string literals, the same convention content.js already uses for // ISSUE_CONTEXT_MESSAGE, not a cross-file import. -const SYNC_RANKED_CANDIDATES_MESSAGE = "gittensory-miner:sync-ranked-candidates"; +const SYNC_RANKED_CANDIDATES_MESSAGE = "loopover-miner:sync-ranked-candidates"; const DEFAULT_MINER_UI_URL = "http://localhost:5174"; function normalizeMinerUiUrl(text) { diff --git a/apps/loopover-miner-extension/styles.css b/apps/loopover-miner-extension/styles.css index d5e30515f4..5d34ec6baa 100644 --- a/apps/loopover-miner-extension/styles.css +++ b/apps/loopover-miner-extension/styles.css @@ -1,4 +1,4 @@ -.gittensory-miner-opportunity-badge { +.loopover-miner-opportunity-badge { border: 1px solid rgba(126, 231, 188, 0.35); border-radius: 8px; background: rgba(15, 17, 23, 0.96); @@ -8,7 +8,7 @@ padding: 12px; } -.gittensory-miner-opportunity-badge--floating { +.loopover-miner-opportunity-badge--floating { position: fixed; right: 16px; bottom: 16px; @@ -17,14 +17,14 @@ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.35); } -.gittensory-miner-opportunity-badge__header { +.loopover-miner-opportunity-badge__header { align-items: center; display: flex; gap: 8px; margin-bottom: 8px; } -.gittensory-miner-opportunity-badge__mark { +.loopover-miner-opportunity-badge__mark { align-items: center; background: #7ee7bc; border-radius: 999px; @@ -37,33 +37,33 @@ width: 20px; } -.gittensory-miner-opportunity-badge__read-only { +.loopover-miner-opportunity-badge__read-only { color: rgba(244, 247, 245, 0.55); font-size: 11px; margin-left: auto; } -.gittensory-miner-opportunity-badge__score { +.loopover-miner-opportunity-badge__score { align-items: baseline; display: flex; gap: 8px; margin-bottom: 6px; } -.gittensory-miner-opportunity-badge__score strong { +.loopover-miner-opportunity-badge__score strong { font-size: 15px; } -.gittensory-miner-opportunity-badge__score span { +.loopover-miner-opportunity-badge__score span { color: rgba(244, 247, 245, 0.72); } -.gittensory-miner-opportunity-badge__why { +.loopover-miner-opportunity-badge__why { color: rgba(244, 247, 245, 0.78); margin: 0; } -.gittensory-miner-opportunity-badge__synced { +.loopover-miner-opportunity-badge__synced { color: rgba(244, 247, 245, 0.55); font-size: 11px; margin: 6px 0 0; diff --git a/apps/loopover-miner-extension/test/background.test.ts b/apps/loopover-miner-extension/test/background.test.ts index 1c9d8b00af..c39ba309d6 100644 --- a/apps/loopover-miner-extension/test/background.test.ts +++ b/apps/loopover-miner-extension/test/background.test.ts @@ -253,10 +253,10 @@ describe("background service worker", () => { fetchImpl: jsonFetch(200, { candidates: [] }), }); - expect(mod.alarmCreateCalls[0]?.[0]).toBe("gittensory-miner:sync-ranked-candidates"); + expect(mod.alarmCreateCalls[0]?.[0]).toBe("loopover-miner:sync-ranked-candidates"); mod.dispatchStartup(); mod.dispatchInstalled(); - mod.dispatchAlarm("gittensory-miner:sync-ranked-candidates"); + mod.dispatchAlarm("loopover-miner:sync-ranked-candidates"); mod.dispatchAlarm("other-alarm"); await flush(); expect(mod.localSetCalls.length).toBeGreaterThan(0); diff --git a/apps/loopover-ui/public/openapi.json b/apps/loopover-ui/public/openapi.json index 8d1ffc2e0a..293bb3a837 100644 --- a/apps/loopover-ui/public/openapi.json +++ b/apps/loopover-ui/public/openapi.json @@ -17161,7 +17161,7 @@ "schema": { "type": "string", "minLength": 1, - "example": "gittensory" + "example": "loopover" }, "required": true, "description": "Repository name", diff --git a/apps/loopover-ui/src/lib/analytics-window.ts b/apps/loopover-ui/src/lib/analytics-window.ts index 9b4a275fd4..41176da577 100644 --- a/apps/loopover-ui/src/lib/analytics-window.ts +++ b/apps/loopover-ui/src/lib/analytics-window.ts @@ -1,7 +1,7 @@ export const ANALYTICS_WINDOW_OPTIONS = [7, 30, 90] as const; export type AnalyticsWindowDays = (typeof ANALYTICS_WINDOW_OPTIONS)[number]; export const DEFAULT_ANALYTICS_WINDOW_DAYS: AnalyticsWindowDays = 7; -export const ANALYTICS_WINDOW_STORAGE_KEY = "gittensory.analytics.windowDays"; +export const ANALYTICS_WINDOW_STORAGE_KEY = "loopover.analytics.windowDays"; export function parseAnalyticsWindowDays(value: unknown): AnalyticsWindowDays { const numeric = Number(value); diff --git a/apps/loopover-ui/src/lib/api/session.ts b/apps/loopover-ui/src/lib/api/session.ts index 85452a0fca..9704ec3c16 100644 --- a/apps/loopover-ui/src/lib/api/session.ts +++ b/apps/loopover-ui/src/lib/api/session.ts @@ -45,7 +45,7 @@ type AuthState = type SessionResponse = (AppSession & { status: "authenticated" }) | { status: "signed_out" }; -const SESSION_CHANGED_EVENT = "gittensory.session.changed"; +const SESSION_CHANGED_EVENT = "loopover.session.changed"; async function fetchBrowserSession(): PromiseFor syntax, default roles, PR action verbs, and the gate vs auto-review boundary, see the{" "} - @loopover command reference. + @loopover command reference.