gitextract_4t6jkhck/ ├── .eslintrc.json ├── .gitattributes ├── .github/ │ ├── CONTRIBUTING.md │ ├── ISSUE_TEMPLATE/ │ │ ├── bug-report---问题报告.md │ │ └── feature-request---新功能请求.md │ ├── dependabot.yml │ └── workflows/ │ ├── pr-tests.yml │ ├── pre-release-build.yml │ ├── scripts/ │ │ ├── update-coverage-badge.mjs │ │ └── verify-search-engine-configs.mjs │ ├── tagged-release.yml │ └── verify-configs.yml ├── .gitignore ├── .nvmrc ├── .prettierignore ├── .prettierrc ├── AGENTS.md ├── CURRENT_CHANGE.md ├── LICENSE ├── README.md ├── README_IN.md ├── README_JA.md ├── README_TR.md ├── README_ZH.md ├── badges/ │ └── coverage.json ├── build.mjs ├── package.json ├── safari/ │ ├── appdmg.json │ ├── build.sh │ ├── export-options.plist │ ├── project.patch │ ├── project.pre.patch │ └── project_developer.patch ├── src/ │ ├── _locales/ │ │ ├── de/ │ │ │ └── main.json │ │ ├── en/ │ │ │ └── main.json │ │ ├── es/ │ │ │ └── main.json │ │ ├── fr/ │ │ │ └── main.json │ │ ├── i18n-react.mjs │ │ ├── i18n.mjs │ │ ├── in/ │ │ │ └── main.json │ │ ├── it/ │ │ │ └── main.json │ │ ├── ja/ │ │ │ └── main.json │ │ ├── ko/ │ │ │ └── main.json │ │ ├── pt/ │ │ │ └── main.json │ │ ├── resources.mjs │ │ ├── ru/ │ │ │ └── main.json │ │ ├── tr/ │ │ │ └── main.json │ │ ├── zh-hans/ │ │ │ └── main.json │ │ └── zh-hant/ │ │ └── main.json │ ├── background/ │ │ ├── commands.mjs │ │ ├── index.mjs │ │ ├── menus.mjs │ │ └── redact.mjs │ ├── components/ │ │ ├── ConfirmButton/ │ │ │ └── index.jsx │ │ ├── ConversationCard/ │ │ │ └── index.jsx │ │ ├── ConversationItem/ │ │ │ └── index.jsx │ │ ├── CopyButton/ │ │ │ └── index.jsx │ │ ├── DecisionCard/ │ │ │ └── index.jsx │ │ ├── DeleteButton/ │ │ │ └── index.jsx │ │ ├── FeedbackForChatGPTWeb/ │ │ │ └── index.jsx │ │ ├── FloatingToolbar/ │ │ │ └── index.jsx │ │ ├── InputBox/ │ │ │ └── index.jsx │ │ ├── MarkdownRender/ │ │ │ ├── Hyperlink.jsx │ │ │ ├── Pre.jsx │ │ │ ├── markdown-without-katex.jsx │ │ │ └── markdown.jsx │ │ ├── ReadButton/ │ │ │ └── index.jsx │ │ ├── WebJumpBackNotification/ │ │ │ └── index.jsx │ │ └── index.mjs │ ├── config/ │ │ ├── index.mjs │ │ └── language.mjs │ ├── content-script/ │ │ ├── index.jsx │ │ ├── menu-tools/ │ │ │ └── index.mjs │ │ ├── selection-tools/ │ │ │ └── index.mjs │ │ ├── site-adapters/ │ │ │ ├── arxiv/ │ │ │ │ └── index.mjs │ │ │ ├── baidu/ │ │ │ │ └── index.mjs │ │ │ ├── bilibili/ │ │ │ │ └── index.mjs │ │ │ ├── brave/ │ │ │ │ └── index.mjs │ │ │ ├── duckduckgo/ │ │ │ │ └── index.mjs │ │ │ ├── followin/ │ │ │ │ └── index.mjs │ │ │ ├── github/ │ │ │ │ └── index.mjs │ │ │ ├── gitlab/ │ │ │ │ └── index.mjs │ │ │ ├── index.mjs │ │ │ ├── juejin/ │ │ │ │ └── index.mjs │ │ │ ├── quora/ │ │ │ │ └── index.mjs │ │ │ ├── reddit/ │ │ │ │ └── index.mjs │ │ │ ├── stackoverflow/ │ │ │ │ └── index.mjs │ │ │ ├── weixin/ │ │ │ │ └── index.mjs │ │ │ ├── youtube/ │ │ │ │ └── index.mjs │ │ │ └── zhihu/ │ │ │ └── index.mjs │ │ └── styles.scss │ ├── fonts/ │ │ └── styles.css │ ├── hooks/ │ │ ├── use-clamp-window-size.mjs │ │ ├── use-config.mjs │ │ ├── use-theme.mjs │ │ ├── use-window-size.mjs │ │ └── use-window-theme.mjs │ ├── manifest.json │ ├── manifest.v2.json │ ├── pages/ │ │ ├── IndependentPanel/ │ │ │ ├── App.jsx │ │ │ ├── index.html │ │ │ ├── index.jsx │ │ │ └── styles.scss │ │ └── styles.scss │ ├── popup/ │ │ ├── Popup.jsx │ │ ├── index.html │ │ ├── index.jsx │ │ ├── sections/ │ │ │ ├── AdvancedPart.jsx │ │ │ ├── ApiModes.jsx │ │ │ ├── FeaturePages.jsx │ │ │ ├── GeneralPart.jsx │ │ │ ├── ModulesPart.jsx │ │ │ ├── SelectionTools.jsx │ │ │ ├── SiteAdapters.jsx │ │ │ └── import-data-cleanup.mjs │ │ └── styles.scss │ ├── rules.json │ ├── services/ │ │ ├── apis/ │ │ │ ├── aiml-api.mjs │ │ │ ├── azure-openai-api.mjs │ │ │ ├── bard-web.mjs │ │ │ ├── bing-web.mjs │ │ │ ├── chatglm-api.mjs │ │ │ ├── chatgpt-web.mjs │ │ │ ├── claude-api.mjs │ │ │ ├── claude-web.mjs │ │ │ ├── custom-api.mjs │ │ │ ├── deepseek-api.mjs │ │ │ ├── moonshot-api.mjs │ │ │ ├── moonshot-web.mjs │ │ │ ├── ollama-api.mjs │ │ │ ├── openai-api.mjs │ │ │ ├── openai-token-params.mjs │ │ │ ├── openrouter-api.mjs │ │ │ ├── poe-web.mjs │ │ │ ├── shared.mjs │ │ │ └── waylaidwanderer-api.mjs │ │ ├── clients/ │ │ │ ├── bard/ │ │ │ │ └── index.mjs │ │ │ ├── bing/ │ │ │ │ ├── BingImageCreator.js │ │ │ │ └── index.mjs │ │ │ ├── claude/ │ │ │ │ └── index.mjs │ │ │ └── poe/ │ │ │ ├── graphql/ │ │ │ │ ├── AddHumanMessageMutation.graphql │ │ │ │ ├── AddMessageBreakMutation.graphql │ │ │ │ ├── AutoSubscriptionMutation.graphql │ │ │ │ ├── BioFragment.graphql │ │ │ │ ├── ChatAddedSubscription.graphql │ │ │ │ ├── ChatFragment.graphql │ │ │ │ ├── ChatPaginationQuery.graphql │ │ │ │ ├── ChatViewQuery.graphql │ │ │ │ ├── DeleteHumanMessagesMutation.graphql │ │ │ │ ├── HandleFragment.graphql │ │ │ │ ├── LoginWithVerificationCodeMutation.graphql │ │ │ │ ├── MessageAddedSubscription.graphql │ │ │ │ ├── MessageDeletedSubscription.graphql │ │ │ │ ├── MessageFragment.graphql │ │ │ │ ├── MessageRemoveVoteMutation.graphql │ │ │ │ ├── MessageSetVoteMutation.graphql │ │ │ │ ├── SendVerificationCodeForLoginMutation.graphql │ │ │ │ ├── ShareMessagesMutation.graphql │ │ │ │ ├── SignupWithVerificationCodeMutation.graphql │ │ │ │ ├── StaleChatUpdateMutation.graphql │ │ │ │ ├── SummarizePlainPostQuery.graphql │ │ │ │ ├── SummarizeQuotePostQuery.graphql │ │ │ │ ├── SummarizeSharePostQuery.graphql │ │ │ │ ├── UserSnippetFragment.graphql │ │ │ │ ├── ViewerInfoQuery.graphql │ │ │ │ ├── ViewerStateFragment.graphql │ │ │ │ └── ViewerStateUpdatedSubscription.graphql │ │ │ ├── index.mjs │ │ │ └── websocket.js │ │ ├── init-session.mjs │ │ ├── local-session.mjs │ │ └── wrappers.mjs │ └── utils/ │ ├── change-children-font-size.mjs │ ├── create-element-at-position.mjs │ ├── crop-text.mjs │ ├── ends-with-question-mark.mjs │ ├── eventsource-parser.mjs │ ├── fetch-bg.mjs │ ├── fetch-sse.mjs │ ├── get-client-position.mjs │ ├── get-conversation-pairs.mjs │ ├── get-core-content-text.mjs │ ├── get-possible-element-by-query-selector.mjs │ ├── index.mjs │ ├── is-edge.mjs │ ├── is-firefox.mjs │ ├── is-mobile.mjs │ ├── is-safari.mjs │ ├── jwt-token-generator.mjs │ ├── limited-fetch.mjs │ ├── model-name-convert.mjs │ ├── open-url.mjs │ ├── parse-float-with-clamp.mjs │ ├── parse-int-with-clamp.mjs │ ├── set-element-position-in-viewport.mjs │ ├── update-ref-height.mjs │ └── wait-for-element-to-exist-and-select.mjs └── tests/ ├── setup/ │ ├── browser-shim.mjs │ └── jsx-loader-hooks.mjs └── unit/ ├── background/ │ └── redact.test.mjs ├── config/ │ ├── config-predicates.test.mjs │ └── user-config.test.mjs ├── content-script/ │ └── selection-tools.test.mjs ├── helpers/ │ ├── port.mjs │ └── sse-response.mjs ├── popup/ │ └── import-data-cleanup.test.mjs ├── services/ │ ├── apis/ │ │ ├── azure-openai-api.test.mjs │ │ ├── claude-api.test.mjs │ │ ├── custom-api.test.mjs │ │ ├── openai-api-compat.test.mjs │ │ ├── openai-token-params.test.mjs │ │ ├── shared.test.mjs │ │ └── thin-adapters.test.mjs │ ├── handle-port-error.test.mjs │ ├── init-session.test.mjs │ ├── local-session.test.mjs │ └── wrappers-register.test.mjs ├── setup/ │ └── browser-shim.test.mjs └── utils/ ├── basic-guards.test.mjs ├── browser-detection.test.mjs ├── crop-text.test.mjs ├── eventsource-parser.test.mjs ├── fetch-sse.test.mjs ├── get-client-position.test.mjs ├── jwt-token-generator.test.mjs ├── model-name-convert.test.mjs └── set-element-position-in-viewport.test.mjs