An all-in-one enhancement suite for Google Gemini & AI Studio - timeline navigation, folder management, prompt library, and chat export in one powerful extension. / Google Gemini & AI Studio 全能增强插件:集成时间轴导航、文件夹管理、提示词库及聊天导出等众多功能。
308 matches across 7 categories. Click a row to expand file-level details.
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | public/response-complete-observer.js | 34 | function isGeminiGenerationRequest(url, bodyText) { |
| LOW | src/core/utils/conversationIdentity.ts | 33 | export function extractConversationIdFromUrl(input: string): string | null { |
| LOW | src/core/utils/conversationIdentity.ts | 64 | export function buildRouteConversationIdFromUrl(input: string): string { |
| LOW | src/core/utils/conversationIdentity.ts | 73 | export function buildConversationIdFromUrl(input: string): string { |
| LOW | src/core/utils/conversationIdentity.ts | 82 | export function buildLegacyConversationIdFromUrl(input: string): string { |
| LOW | src/core/utils/updateReminder.ts | 12 | export function shouldShowUpdateReminderForCurrentVersion({ |
| LOW | src/core/utils/browser.ts | 39 | export function shouldShowSafariUpdateReminder(): boolean { |
| LOW | src/core/utils/browser.ts | 100 | export function supportsOptionalHostPermissions(): boolean { |
| LOW | src/core/utils/browser.ts | 112 | export function supportsExtensionNotifications(): boolean { |
| LOW | src/core/utils/selectors.ts | 31 | export function getAssistantTurnSelectors(): string[] { |
| LOW | src/core/utils/selectors.ts | 60 | export function getConversationLinkSelectors(): string[] { |
| LOW | src/core/utils/gemini.ts | 29 | export function hasGeminiEnterpriseDomHints(doc: Document): boolean { |
| LOW | src/core/utils/gemini.ts | 46 | export function isGeminiEnterpriseEnvironment(parts: UrlParts, doc?: Document): boolean { |
| LOW | src/core/utils/extensionContext.ts | 13 | export function isExtensionContextInvalidatedError(error: unknown): boolean { |
| LOW | src/core/services/AccountIsolationService.ts | 63 | export function detectAccountPlatformFromUrl(pageUrl: string | null | undefined): AccountPlatform { |
| LOW | src/core/services/AccountIsolationService.ts | 69 | export function getAccountIsolationStorageKey(platform: AccountPlatform): string { |
| LOW | src/core/services/AccountIsolationService.ts | 141 | export function extractRouteUserIdFromPath(pathname: string): string | null { |
| LOW | src/core/services/AccountIsolationService.ts | 146 | export function extractRouteUserIdFromUrl(url: string): string | null { |
| LOW | src/core/services/AccountIsolationService.ts | 205 | export function detectAccountContextFromDocument(pageUrl: string, doc: Document): AccountContext { |
| LOW | src/core/services/AccountIsolationService.ts | 251 | export function buildScopedFolderStorageKey(accountKey: string): string { |
| LOW | src/core/services/SettingsBackupService.ts | 120 | export function filterBackupableSyncSettings(value: unknown): BackupableSyncSettings { |
| LOW | src/core/services/SettingsBackupService.ts | 134 | export async function loadBackupableSyncSettings( |
| LOW | src/core/services/SettingsBackupService.ts | 142 | export async function exportBackupableSyncSettings( |
| LOW | src/core/services/SettingsBackupService.ts | 153 | export async function restoreBackupableSyncSettings( |
| LOW | …ore/services/__tests__/KeyboardShortcutService.test.ts | 11 | function createCustomSingleLetterConfig(): KeyboardShortcutConfig { |
| LOW | src/features/plugins/manifest/validate.ts | 89 | function normalizeLocalizedSetting(raw: unknown): LocalizedSettingField | undefined { |
| LOW | src/features/plugins/manifest/validate.ts | 102 | function normalizeLocalizedSettings( |
| LOW | src/features/plugins/runtime/siteRegistration.ts | 59 | export async function registerContentScriptsForOrigins( |
| LOW | src/features/export/ui/ExportToast.ts | 11 | function getOrCreateToast(): HTMLDivElement { |
| LOW | src/features/export/ui/ExportErrorMessage.ts | 3 | export function resolveExportErrorMessage( |
| LOW | src/features/export/types/errors.ts | 3 | export function isEventLikeImageRenderError(error: unknown): boolean { |
| LOW | src/features/export/types/export.ts | 56 | export function normalizeImageExportWidth(value: unknown): ImageExportWidth { |
| LOW | src/features/export/services/ImageRenderService.ts | 35 | export function isImageResourceRenderError(error: unknown): boolean { |
| LOW | src/features/export/services/ImageRenderService.ts | 98 | async function renderUsingSanitizedClone(target: HTMLElement, selector: string): Promise<Blob> { |
| LOW | src/pages/background/index.ts | 81 | function normalizeNotificationText(value: unknown, maxLength: number): string { |
| LOW | src/pages/background/index.ts | 88 | async function showResponseCompleteNotification( |
| LOW | src/pages/background/index.ts | 181 | async function resolveAccountScopeForMessage( |
| LOW | src/pages/background/index.ts | 205 | function filterStarredByRouteScope( |
| LOW | src/pages/background/index.ts | 224 | function filterForkNodesByRouteScope( |
| LOW | src/pages/background/index.ts | 298 | async function unregisterResponseCompleteObserver(): Promise<void> { |
| LOW | src/pages/background/index.ts | 310 | async function syncResponseCompleteObserverRegistration(): Promise<void> { |
| LOW | src/pages/background/index.ts | 411 | function extractDomainsFromOrigins(origins?: string[]): string[] { |
| LOW | src/pages/background/index.ts | 528 | async function injectPluginScriptIntoOpenTabs( |
| LOW | src/pages/popup/Popup.tsx | 159 | function formatFolderStructurePrompt( |
| LOW | src/pages/popup/utils/brandTheme.ts | 20 | export function createPopupBrandThemeStyle(brand: string): PopupBrandThemeStyle { |
| LOW | src/pages/popup/utils/latestVersion.ts | 15 | export function extractLatestReleaseVersion(data: unknown): string | null { |
| LOW | src/pages/content/sidebarCollapseNudge.ts | 37 | export function removeSidebarCollapseNudge(): void { |
| LOW | src/pages/content/sidebarCollapseNudge.ts | 41 | function mountSidebarCollapseNudge(anchor: HTMLElement): void { |
| LOW | src/pages/content/sidebarCollapseNudge.ts | 83 | export async function showSidebarCollapseNudgeOnce(anchor: HTMLElement): Promise<void> { |
| LOW | src/pages/content/fork/featureFlag.ts | 1 | export function isForkFeatureEnabledValue(value: unknown): boolean { |
| LOW | src/pages/content/fork/chatPairs.ts | 109 | function pickAssistantExportElement(assistantHost: HTMLElement): HTMLElement { |
| LOW | src/pages/content/fork/index.ts | 337 | function extractConversationIdFromUrl(): string | null { |
| LOW | src/pages/content/fork/index.ts | 344 | function getNewConversationUrlForCurrentAccount(): string { |
| LOW | src/pages/content/fork/index.ts | 371 | function buildForkMarkdownFilename(title: string): string { |
| LOW | src/pages/content/fork/index.ts | 430 | function extractConversationIdFromHref(href: string): string | null { |
| LOW | src/pages/content/fork/index.ts | 442 | function findSidebarConversationLinkById(conversationId: string): HTMLAnchorElement | null { |
| LOW | src/pages/content/fork/index.ts | 460 | function navigateToForkConversation(node: ForkNode): void { |
| LOW | src/pages/content/fork/index.ts | 477 | function collectSidebarConversationIds(): Set<string> { |
| LOW | src/pages/content/fork/index.ts | 551 | async function pruneDeletedNodesFromGroup( |
| LOW | src/pages/content/fork/index.ts | 576 | function clearInjectedForkIndicators(): void { |
| 187 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | .github/workflows/release.yml | 11 | # ------------------------- |
| MEDIUM | src/pages/popup/Popup.tsx | 1498 | // ── Section reorder helpers ────────────────────────────────── |
| MEDIUM | src/pages/content/folder/manager.ts | 708 | // ─── DOM recovery (resize / print) ───────────────────────────────────── |
| MEDIUM | src/pages/content/folder/manager.ts | 5839 | // ── Overlay ─────────────────────────────────────────────────────────── |
| MEDIUM | src/pages/content/folder/manager.ts | 5850 | // ── Title ───────────────────────────────────────────────────────────── |
| MEDIUM | src/pages/content/folder/manager.ts | 5859 | // ── Instructions textarea ───────────────────────────────────────────── |
| MEDIUM | src/pages/content/folder/manager.ts | 5875 | // ── Actions ────────────────────────────────────────────────────────── |
| MEDIUM | src/pages/content/folder/manager.ts | 5901 | // ── Assembly ────────────────────────────────────────────────────────── |
| MEDIUM | src/pages/content/sidebarAutoHide/index.ts | 110 | // ─── Transition CSS (shared) ─────────────────────────────────────────── |
| MEDIUM | src/pages/content/sidebarAutoHide/index.ts | 137 | // ─── Full-Hide CSS ───────────────────────────────────────────────────── |
| MEDIUM | src/pages/content/sidebarAutoHide/index.ts | 166 | // ─── Edge Trigger (full-hide) ────────────────────────────────────────── |
| MEDIUM | src/pages/content/sidebarAutoHide/index.ts | 226 | // ─── Sidebar State Detection ─────────────────────────────────────────── |
| MEDIUM | src/pages/content/sidebarAutoHide/index.ts | 381 | // ─── Menu Click Handling ─────────────────────────────────────────────── |
| MEDIUM | src/pages/content/sidebarAutoHide/index.ts | 425 | // ─── Sidebar Toggle ──────────────────────────────────────────────────── |
| MEDIUM | src/pages/content/sidebarAutoHide/index.ts | 468 | // ─── Predictive Aiming ──────────────────────────────────────────────── |
| MEDIUM | src/pages/content/sidebarAutoHide/index.ts | 552 | // ─── Mouse Event Handlers ────────────────────────────────────────────── |
| MEDIUM | src/pages/content/sidebarAutoHide/index.ts | 592 | // ─── DOM Management ──────────────────────────────────────────────────── |
| MEDIUM | src/pages/content/sidebarAutoHide/index.ts | 681 | // ─── Shared Infrastructure ───────────────────────────────────────────── |
| MEDIUM | src/pages/content/sidebarAutoHide/index.ts | 733 | // ─── Auto-Hide Feature ──────────────────────────────────────────────── |
| MEDIUM | src/pages/content/sidebarAutoHide/index.ts | 792 | // ─── Full-Hide Feature ───────────────────────────────────────────────── |
| MEDIUM | src/pages/content/sidebarAutoHide/index.ts | 854 | // ─── Entry Point ─────────────────────────────────────────────────────── |
| MEDIUM | src/pages/content/export/index.ts | 2359 | // ─── DOM recovery (resize / print) ───────────────────────────────────── |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | public/fetchInterceptor.js | 219 | // Step 2: Processing |
| LOW | scripts/build-safari.sh | 10 | # Step 1: Build the extension using Vite |
| LOW | scripts/build-safari.sh | 14 | # Step 2: Check if dist_safari exists |
| LOW | scripts/build-safari.sh | 22 | # Step 3: Convert to Safari App Extension (requires macOS) |
| LOW | src/pages/content/folder/aistudio.ts | 2476 | // Step 1: Try to restore from localStorage backups (primary, emergency, beforeUnload) |
| LOW | src/pages/content/folder/aistudio.ts | 2487 | // Step 2: Keep existing in-memory data if it exists and is valid |
| LOW | src/pages/content/folder/aistudio.ts | 2494 | // Step 3: Last resort - initialize empty data and notify user |
| LOW | src/pages/content/folder/manager.ts | 4320 | // Step 1: Find the conversation element in the sidebar. |
| LOW | src/pages/content/folder/manager.ts | 6979 | // Step 1: Try to restore from localStorage backups (primary, emergency, beforeUnload) |
| LOW | src/pages/content/folder/manager.ts | 6991 | // Step 2: If current this.data already has valid structure, keep it |
| LOW | src/pages/content/folder/manager.ts | 6998 | // Step 3: Last resort - initialize empty data and log critical error |
| LOW | src/pages/content/watermarkRemover/index.ts | 627 | // Step 1: Downloading original image |
| LOW | src/pages/content/watermarkRemover/index.ts | 660 | // Step 2: Processing watermark |
| LOW | src/pages/content/watermarkRemover/index.ts | 674 | // Step 3: Done, auto-dismiss after 2s |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | docs/pt/guide/nanobanana.md | 11 | Images generated by Gemini™ come with a visible watermark by default. While this is intended for safety, there are creat |
| HIGH | docs/ar/guide/nanobanana.md | 11 | Images generated by Gemini™ come with a visible watermark by default. While this is intended for safety, there are creat |
| HIGH | docs/en/guide/nanobanana.md | 11 | Images generated by Gemini™ come with a visible watermark by default. While this is intended for safety, there are creat |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | public/fetchInterceptor.js | 141 | // Store original fetch |
| LOW | safari/App/SafariWebExtensionHandler.swift | 1 | // |
| LOW | safari/Models/SafariMessage.swift | 1 | // |
| LOW | .github/workflows/release.yml | 1 | name: Release |
| LOW | .github/workflows/release.yml | 21 | # 4. Creates git tag "vX.Y.Z". |
| LOW | src/core/types/common.ts | 141 | FOLDERS_HIDDEN: 'gvFoldersHidden', |
| LOW | src/core/types/common.ts | 201 | // Popup section order |
| LOW | src/pages/content/index.tsx | 501 | |
| LOW | src/pages/content/folder/manager.ts | 1161 | this.changeFolderColor(folderId, color); |
| LOW | src/pages/content/sidebarAutoHide/index.ts | 21 | // `findToggleButton` because the 2026 layout keeps an invisible 0×0 sibling |
| LOW | src/pages/content/export/responseActionImageButton.ts | 141 | // this, clicks on the SVG's painted area (the icon glyph) hit the SVG/icon |
| LOW | src/pages/content/sidebarWidth/index.ts | 321 | // applyWidth(currentWidthValue); |
| LOW | src/pages/content/quoteReply/index.ts | 361 | focusChatInput(input); |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | …ore/services/__tests__/AccountIsolationService.test.ts | 89 | email: 'user@example.com', |
| LOW | …ore/services/__tests__/AccountIsolationService.test.ts | 118 | email: 'user@example.com', |
| LOW | …atures/backup/services/__tests__/BackupService.test.ts | 26 | [getTimelineHierarchyStorageKey(`email:${hashString('user@example.com')}`)]: { |
| LOW | …/popup/components/__tests__/CloudSyncSettings.test.tsx | 441 | email: 'user@example.com', |
| LOW | …/popup/components/__tests__/CloudSyncSettings.test.tsx | 451 | accountKey: `email:${hashString('user@example.com')}`, |
| LOW | …/popup/components/__tests__/CloudSyncSettings.test.tsx | 482 | `email:${hashString('user@example.com')}`, |
| LOW | src/pages/content/prompt/__tests__/localBackup.test.ts | 53 | email: 'user@example.com', |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | src/pages/content/folder/manager.ts | 5924 | // observer. This mirrors the proven, robust export-button observer: it |
| MEDIUM | src/pages/content/timeline/manager.ts | 1744 | // Use index lookup if available for robust handling of duplicate content |