您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Auto-clicks the "Continue" button when GitHub Copilot gets stuck
- // ==UserScript==
- // @name Copilot Continue
- // @namespace https://snomiao.com
- // @match *://*/*
- // @grant none
- // @version 1.2.9
- // @author snomiao
- // @description Auto-clicks the "Continue" button when GitHub Copilot gets stuck
- // @homepage https://github.com/snomiao/copilot-continue.user.js
- // @supportURL https://github.com/snomiao/copilot-continue.user.js/issues
- // @license MIT
- // @compatible chrome
- // @compatible firefox
- // @compatible edge
- // @compatible opera
- // ==/UserScript==
- /*
- * Copilot Continue - A userscript to automatically continue GitHub Copilot
- *
- * This script automatically clicks the "Continue" button when GitHub Copilot
- * shows interruption messages like:
- * - "Copilot has been working on this problem for a while"
- * - "Run command in the terminal"
- * - "Allow task run?"
- *
- * The script runs in VS Code web environments and checks for interruptions every second.
- *
- * Notes for Copilot: dont forget to bump version number in the header when you modify this script.
- */
- const actionMatchers = {
- cilckContinue: [
- /^Copilot has been working on this problem for a while/,
- /^Run command in terminal/,
- /^Run command `.*`\?/,
- /^Run command in background terminal/,
- /^Continue to iterate\?/,
- /^Allow task run\?/,
- /^Allow test run\?/,
- ],
- clickGrant: [
- /^To get more relevant Copilot Chat results, we need permission to read the contents of your repository on GitHub./,
- ],
- clickTryAgain: [
- /^The model unexpectedly did not return a response, which may indicate a service issue. Please report a bug./,
- /^Sorry, your request failed. Please try again./,
- /^Sorry, no response was returned./
- ],
- clickRetryIcon: [/^Language model unavailable/, /^Copilot setup failed/],
- };
- const actions = {
- default: () =>
- console.warn("No action matched. Please check the action matchers."),
- refresh: () => (location.reload()),
- clickRetryIcon: () => $$('a[aria-label="Retry"]').findLast(Boolean)?.click(),
- cilckContinue: () =>
- $$("a.monaco-button").findLast(textContentEq("Continue"))?.click(),
- clickGrant: () =>
- $$("a.monaco-button").findLast(textContentEq("Grant"))?.click(),
- clickTryAgain: (
- (tryAgainCount = 0) =>
- () => {
- if (tryAgainCount >= 3) return (location.reload());
- const btn = $$("a.monaco-button").findLast(textContentEq("Try Again"));
- if (!btn) return;
- btn.click();
- tryAgainCount++;
- }
- )(),
- };
- function textContentEq(content) {
- return (e) => e.textContent === content;
- }
- const enable = !!document.querySelector("meta#vscode-workbench-auth-session");
- // Prevent double execution if loaded both as userscript and extension
- if (enable && !globalThis.copilotContinueLoaded) {
- main();
- globalThis.copilotContinueLoaded = true;
- }
- function main() {
- const clear = useInterval(() => loop(), 1e3);
- return () => clear();
- }
- function loop() {
- const text = $$("div.rendered-markdown")
- .map((e) => e.innerText)
- .flatMap((e) => (e ? [e] : [])) // empty filter
- .map((e) => e.replace(/\s+/g, " "));
- for (const [action, matchers] of Object.entries(actionMatchers)) {
- if (text.some((s) => matchers.some((m) => s.match(m)))) {
- (actions[action] || actions.default)?.();
- return;
- }
- }
- }
- function $$(sel) {
- return [...document.querySelectorAll(sel)];
- }
- function useInterval(...args) {
- const id = setInterval(...args);
- return () => clearInterval(id);
- }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址