diff --git a/.github/workflows/lint-on-push-pr.yml b/.github/workflows/lint-on-push-pr.yml index 21ce1aa9e..1ce50827e 100644 --- a/.github/workflows/lint-on-push-pr.yml +++ b/.github/workflows/lint-on-push-pr.yml @@ -6,19 +6,9 @@ jobs: runs-on: ubuntu-24.04 permissions: contents: read - steps: - - - name: Checkout repository code - uses: actions/checkout@v7.0.0 - - - name: Set up Node.js - uses: actions/setup-node@v6.4.0 + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: 24 - - - name: Install dependencies - run: npm ci - - - name: Run ESLint - run: npm run lint + - run: npm ci && npm run lint diff --git a/.github/workflows/sync-amazongpt-changes-to-repos.yml b/.github/workflows/sync-amazongpt-changes-to-repos.yml index 039695b6d..8dec86a39 100644 --- a/.github/workflows/sync-amazongpt-changes-to-repos.yml +++ b/.github/workflows/sync-amazongpt-changes-to-repos.yml @@ -17,19 +17,19 @@ jobs: steps: - name: Checkout adamlui/userscripts - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: path: adamlui/userscripts - name: Checkout KudoAI/amazongpt - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: token: ${{ secrets.REPO_SYNC_PAT }} repository: KudoAI/amazongpt path: KudoAI/amazongpt - name: Checkout adamlui/ai-web-extensions - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: token: ${{ secrets.REPO_SYNC_PAT }} repository: adamlui/ai-web-extensions diff --git a/.github/workflows/sync-autoclear-chatgpt-history-changes-to-repos.yml b/.github/workflows/sync-autoclear-chatgpt-history-changes-to-repos.yml index 184a9a63a..97f81eec1 100644 --- a/.github/workflows/sync-autoclear-chatgpt-history-changes-to-repos.yml +++ b/.github/workflows/sync-autoclear-chatgpt-history-changes-to-repos.yml @@ -17,19 +17,19 @@ jobs: steps: - name: Checkout adamlui/userscripts - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: path: adamlui/userscripts - name: Checkout adamlui/autoclear-chatgpt-history - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: token: ${{ secrets.REPO_SYNC_PAT }} repository: adamlui/autoclear-chatgpt-history path: adamlui/autoclear-chatgpt-history - name: Checkout adamlui/ai-web-extensions - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: token: ${{ secrets.REPO_SYNC_PAT }} repository: adamlui/ai-web-extensions diff --git a/.github/workflows/sync-bravegpt-changes-to-repos.yml b/.github/workflows/sync-bravegpt-changes-to-repos.yml index 9cdd64783..ca5d25d9d 100644 --- a/.github/workflows/sync-bravegpt-changes-to-repos.yml +++ b/.github/workflows/sync-bravegpt-changes-to-repos.yml @@ -17,19 +17,19 @@ jobs: steps: - name: Checkout adamlui/userscripts - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: path: adamlui/userscripts - name: Checkout KudoAI/bravegpt - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: token: ${{ secrets.REPO_SYNC_PAT }} repository: KudoAI/bravegpt path: KudoAI/bravegpt - name: Checkout adamlui/ai-web-extensions - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: token: ${{ secrets.REPO_SYNC_PAT }} repository: adamlui/ai-web-extensions diff --git a/.github/workflows/sync-bump-script-changes-to-ai-web.yml b/.github/workflows/sync-bump-script-changes-to-ai-web.yml deleted file mode 100644 index e0dd34730..000000000 --- a/.github/workflows/sync-bump-script-changes-to-ai-web.yml +++ /dev/null @@ -1,64 +0,0 @@ -name: Sync utils/bump scripts to adamlui/ai-web-extensions - -on: - push: - branches: [master] - paths: [utils/bump/chatbots.js, utils/bump/resources.js] - -jobs: - sync-bump-scripts: - if: (github.repository == 'adamlui/userscripts') && !contains(github.event.head_commit.message, '[auto-sync') - runs-on: ubuntu-24.04 - permissions: - contents: read - env: - TZ: PST8PDT - - steps: - - - name: Checkout adamlui/userscripts - uses: actions/checkout@v7.0.0 - with: - path: adamlui/userscripts - - - name: Checkout adamlui/ai-web-extensions - uses: actions/checkout@v7.0.0 - with: - token: ${{ secrets.REPO_SYNC_PAT }} - repository: adamlui/ai-web-extensions - path: adamlui/ai-web-extensions - - - name: Sync bump scripts - run: | - for filename in "chatbots.js" "resources.js" ; do - cp -f ${{ github.workspace }}/adamlui/userscripts/utils/bump/${filename} \ - ${{ github.workspace }}/adamlui/ai-web-extensions/utils/bump/${filename} - done - - - name: Escape backticks in commit msg - env: - COMMIT_MSG: ${{ github.event.head_commit.message }} - run: | - DELIM="EOF_$(uuidgen)" - echo "ESCAPED_MSG<<$DELIM" >> "$GITHUB_ENV" - echo "$COMMIT_MSG" | sed 's/`/\`/g' >> "$GITHUB_ENV" - echo "$DELIM" >> "$GITHUB_ENV" - - - name: Config committer - env: - GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} - GPG_PRIVATE_ID: ${{ secrets.GPG_PRIVATE_ID }} - run: | - gpg --batch --import <(echo "$GPG_PRIVATE_KEY") - git config --global commit.gpgsign true - git config --global user.name "kudo-sync-bot" - git config --global user.email "auto-sync@kudoai.com" - git config --global user.signingkey "$GPG_PRIVATE_ID" - - - name: Push changes to adamlui/ai-web-extensions - run: | - cd ${{ github.workspace }}/adamlui/ai-web-extensions - git add utils/bump/chatbots.js utils/bump/resources.js - git commit -n -m "$ESCAPED_MSG ↞ [auto-sync from https://github.com/adamlui/userscripts/tree/master/utils/bump]" || true - git pull --rebase - git push diff --git a/.github/workflows/sync-changes-to-gitlab.yml b/.github/workflows/sync-changes-to-gitlab.yml index b14aba082..84ebc2c2c 100644 --- a/.github/workflows/sync-changes-to-gitlab.yml +++ b/.github/workflows/sync-changes-to-gitlab.yml @@ -16,7 +16,7 @@ jobs: steps: - name: Checkout adamlui/userscripts - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: fetch-depth: 0 diff --git a/.github/workflows/sync-chatgpt-auto-continue-changes-to-repos.yml b/.github/workflows/sync-chatgpt-auto-continue-changes-to-repos.yml index 4c8945302..0a6b701c0 100644 --- a/.github/workflows/sync-chatgpt-auto-continue-changes-to-repos.yml +++ b/.github/workflows/sync-chatgpt-auto-continue-changes-to-repos.yml @@ -17,19 +17,19 @@ jobs: steps: - name: Checkout adamlui/userscripts - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: path: adamlui/userscripts - name: Checkout adamlui/chatgpt-auto-continue - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: token: ${{ secrets.REPO_SYNC_PAT }} repository: adamlui/chatgpt-auto-continue path: adamlui/chatgpt-auto-continue - name: Checkout adamlui/ai-web-extensions - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: token: ${{ secrets.REPO_SYNC_PAT }} repository: adamlui/ai-web-extensions diff --git a/.github/workflows/sync-chatgpt-auto-refresh-changes-to-repos.yml b/.github/workflows/sync-chatgpt-auto-refresh-changes-to-repos.yml index ab56ad7d9..4dec1011d 100644 --- a/.github/workflows/sync-chatgpt-auto-refresh-changes-to-repos.yml +++ b/.github/workflows/sync-chatgpt-auto-refresh-changes-to-repos.yml @@ -17,19 +17,19 @@ jobs: steps: - name: Checkout adamlui/userscripts - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: path: adamlui/userscripts - name: Checkout adamlui/chatgpt-auto-refresh - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: token: ${{ secrets.REPO_SYNC_PAT }} repository: adamlui/chatgpt-auto-refresh path: adamlui/chatgpt-auto-refresh - name: Checkout adamlui/ai-web-extensions - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: token: ${{ secrets.REPO_SYNC_PAT }} repository: adamlui/ai-web-extensions diff --git a/.github/workflows/sync-chatgpt-auto-talk-changes-to-repos.yml b/.github/workflows/sync-chatgpt-auto-talk-changes-to-repos.yml index 346b37910..3f5c23928 100644 --- a/.github/workflows/sync-chatgpt-auto-talk-changes-to-repos.yml +++ b/.github/workflows/sync-chatgpt-auto-talk-changes-to-repos.yml @@ -17,19 +17,19 @@ jobs: steps: - name: Checkout adamlui/userscripts - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: path: adamlui/userscripts - name: Checkout adamlui/chatgpt-auto-talk - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: token: ${{ secrets.REPO_SYNC_PAT }} repository: adamlui/chatgpt-auto-talk path: adamlui/chatgpt-auto-talk - name: Checkout adamlui/ai-web-extensions - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: token: ${{ secrets.REPO_SYNC_PAT }} repository: adamlui/ai-web-extensions diff --git a/.github/workflows/sync-chatgpt-infinity-changes-to-repos.yml b/.github/workflows/sync-chatgpt-infinity-changes-to-repos.yml index ca5fd7575..d5c3238ec 100644 --- a/.github/workflows/sync-chatgpt-infinity-changes-to-repos.yml +++ b/.github/workflows/sync-chatgpt-infinity-changes-to-repos.yml @@ -17,19 +17,19 @@ jobs: steps: - name: Checkout adamlui/userscripts - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: path: adamlui/userscripts - name: Checkout adamlui/chatgpt-infinity - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: token: ${{ secrets.REPO_SYNC_PAT }} repository: adamlui/chatgpt-infinity path: adamlui/chatgpt-infinity - name: Checkout adamlui/ai-web-extensions - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: token: ${{ secrets.REPO_SYNC_PAT }} repository: adamlui/ai-web-extensions diff --git a/.github/workflows/sync-chatgpt-widescreen-changes-to-repos.yml b/.github/workflows/sync-chatgpt-widescreen-changes-to-repos.yml index e02224fd4..17950941d 100644 --- a/.github/workflows/sync-chatgpt-widescreen-changes-to-repos.yml +++ b/.github/workflows/sync-chatgpt-widescreen-changes-to-repos.yml @@ -17,19 +17,19 @@ jobs: steps: - name: Checkout adamlui/userscripts - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: path: adamlui/userscripts - name: Checkout adamlui/chatgpt-widescreen - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: token: ${{ secrets.REPO_SYNC_PAT }} repository: adamlui/chatgpt-widescreen path: adamlui/chatgpt-widescreen - name: Checkout adamlui/ai-web-extensions - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: token: ${{ secrets.REPO_SYNC_PAT }} repository: adamlui/ai-web-extensions diff --git a/.github/workflows/sync-duckduckgpt-changes-to-repos.yml b/.github/workflows/sync-duckduckgpt-changes-to-repos.yml index c9ca81c7c..7be765eb7 100644 --- a/.github/workflows/sync-duckduckgpt-changes-to-repos.yml +++ b/.github/workflows/sync-duckduckgpt-changes-to-repos.yml @@ -17,19 +17,19 @@ jobs: steps: - name: Checkout adamlui/userscripts - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: path: adamlui/userscripts - name: Checkout KudoAI/duckduckgpt - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: token: ${{ secrets.REPO_SYNC_PAT }} repository: KudoAI/duckduckgpt path: KudoAI/duckduckgpt - name: Checkout adamlui/ai-web-extensions - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: token: ${{ secrets.REPO_SYNC_PAT }} repository: adamlui/ai-web-extensions diff --git a/.github/workflows/sync-github-star-history-changes-to-repos.yml b/.github/workflows/sync-github-star-history-changes-to-repos.yml index 8e4b0cdb2..4ee88c31c 100644 --- a/.github/workflows/sync-github-star-history-changes-to-repos.yml +++ b/.github/workflows/sync-github-star-history-changes-to-repos.yml @@ -17,12 +17,12 @@ jobs: steps: - name: Checkout adamlui/userscripts - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: path: adamlui/userscripts - name: Checkout adamlui/github-star-history - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: token: ${{ secrets.REPO_SYNC_PAT }} repository: adamlui/github-star-history diff --git a/.github/workflows/sync-github-widescreen-changes-to-repos.yml b/.github/workflows/sync-github-widescreen-changes-to-repos.yml index f2e75f522..531322b05 100644 --- a/.github/workflows/sync-github-widescreen-changes-to-repos.yml +++ b/.github/workflows/sync-github-widescreen-changes-to-repos.yml @@ -17,12 +17,12 @@ jobs: steps: - name: Checkout adamlui/userscripts - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: path: adamlui/userscripts - name: Checkout adamlui/github-widescreen - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: token: ${{ secrets.REPO_SYNC_PAT }} repository: adamlui/github-widescreen diff --git a/.github/workflows/sync-googlegpt-changes-to-repos.yml b/.github/workflows/sync-googlegpt-changes-to-repos.yml index ac681fe62..8a66c6a64 100644 --- a/.github/workflows/sync-googlegpt-changes-to-repos.yml +++ b/.github/workflows/sync-googlegpt-changes-to-repos.yml @@ -17,19 +17,19 @@ jobs: steps: - name: Checkout adamlui/userscripts - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: path: adamlui/userscripts - name: Checkout KudoAI/googlegpt - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: token: ${{ secrets.REPO_SYNC_PAT }} repository: KudoAI/googlegpt path: KudoAI/googlegpt - name: Checkout adamlui/ai-web-extensions - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: token: ${{ secrets.REPO_SYNC_PAT }} repository: adamlui/ai-web-extensions diff --git a/.github/workflows/sync-youtube-classic-changes-to-repos.yml b/.github/workflows/sync-youtube-classic-changes-to-repos.yml index 12626fd43..f008a3a57 100644 --- a/.github/workflows/sync-youtube-classic-changes-to-repos.yml +++ b/.github/workflows/sync-youtube-classic-changes-to-repos.yml @@ -17,12 +17,12 @@ jobs: steps: - name: Checkout adamlui/userscripts - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: path: adamlui/userscripts - name: Checkout adamlui/youtube-classic - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: token: ${{ secrets.REPO_SYNC_PAT }} repository: adamlui/youtube-classic diff --git a/.github/workflows/update-chatgpt-usercount-jsd-shields-weekly.yml b/.github/workflows/update-chatgpt-usercount-jsd-shields-weekly.yml index a6a068543..7902b52c5 100644 --- a/.github/workflows/update-chatgpt-usercount-jsd-shields-weekly.yml +++ b/.github/workflows/update-chatgpt-usercount-jsd-shields-weekly.yml @@ -15,7 +15,7 @@ jobs: steps: - name: Checkout adamlui/userscripts - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: token: ${{ secrets.REPO_SYNC_PAT }} path: adamlui/userscripts diff --git a/.github/workflows/update-root-usercount-jsd-shields-weekly.yml b/.github/workflows/update-root-usercount-jsd-shields-weekly.yml index ad58db979..014e6d60f 100644 --- a/.github/workflows/update-root-usercount-jsd-shields-weekly.yml +++ b/.github/workflows/update-root-usercount-jsd-shields-weekly.yml @@ -16,7 +16,7 @@ jobs: steps: - name: Checkout adamlui/userscripts - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: token: ${{ secrets.REPO_SYNC_PAT }} path: adamlui/userscripts diff --git a/.github/workflows/validate-links-on-push-pr.yml b/.github/workflows/validate-links-on-push-pr.yml index e8e6ed396..b8fcc25ad 100644 --- a/.github/workflows/validate-links-on-push-pr.yml +++ b/.github/workflows/validate-links-on-push-pr.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: Checkout repository - uses: actions/checkout@v7.0.0 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Restore lychee cache id: restore-cache @@ -22,7 +22,7 @@ jobs: restore-keys: cache-lychee- - name: Validate links - uses: lycheeverse/lychee-action@v2.8.0 + uses: lycheeverse/lychee-action@8646ba30535128ac92d33dfc9133794bfdd9b411 # v2.8.0 with: # Check all files, ignore ok/redir/blocked/rate-limited/anti-botted, exclude commonly down domains args: >- diff --git a/block-quora-poe/block-quora-poe.user.js b/block-quora-poe/block-quora-poe.user.js index 1d2481cec..4b082fc8e 100644 --- a/block-quora-poe/block-quora-poe.user.js +++ b/block-quora-poe/block-quora-poe.user.js @@ -13,13 +13,13 @@ // @description:zh-TW 阻止 AI + Quora 的推廣/贊助答案 // @author Adam Lui // @namespace https://github.com/adamlui -// @version 2026.5.19 +// @version 2026.6.27 // @license MIT // @icon https://cdn.jsdelivr.net/gh/adamlui/userscripts@f3e6bf0/assets/images/icons/sites/quora/icon64.png // @match *://*.quora.com/* // @exclude *://*.quora.com/answer/* // @exclude *://*.quora.com/profile/* -// @require https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@7595cd7/assets/js/lib/dom.js/dist/dom.min.js#sha256-xovdxRnmYD/eCgBiGCu5+Vd3+WWIvLUKVtU/MnRueeU= +// @require https://cdn.jsdelivr.net/gh/adamlui/userscripts@ff2baba/assets/js/lib/dom.js/dist/dom.min.js#sha256-nTc2by3ZAz6AR7B8fOqjloJNETvjAepe15t2qlghMDo= // @resource rpgCSS https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@4a657b1/assets/styles/rising-particles/dist/gray.min.css#sha256-48sEWzNUGUOP04ur52G5VOfGZPSnZQfrF3szUr4VaRs= // @resource rpwCSS https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@4a657b1/assets/styles/rising-particles/dist/white.min.css#sha256-6xBXczm7yM1MZ/v0o1KVFfJGehHk47KJjq8oTktH4KE= // @grant GM_addStyle diff --git a/chatgpt/amazongpt/amazongpt.user.js b/chatgpt/amazongpt/amazongpt.user.js index 9e9f52663..f321628a7 100644 --- a/chatgpt/amazongpt/amazongpt.user.js +++ b/chatgpt/amazongpt/amazongpt.user.js @@ -3,7 +3,7 @@ // @description Add AI chat & product/category summaries to Amazon shopping, powered by the latest LLMs like GPT-4o! // @author KudoAI // @namespace https://kudoai.com -// @version 2026.6.17.1 +// @version 2026.6.27 // @license MIT // @icon https://cdn.jsdelivr.net/gh/KudoAI/amazongpt@8e8ed1c/assets/images/icons/app/black-gold-teal/icon48.png // @icon64 https://cdn.jsdelivr.net/gh/KudoAI/amazongpt@8e8ed1c/assets/images/icons/app/black-gold-teal/icon64.png @@ -73,7 +73,7 @@ // @connect chats.kudoai.com // @connect fanyi.sogou.com // @connect raw.githubusercontent.com -// @require https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js@4.14.2/dist/chatgpt.min.js#sha256-HU+GlQoVScXwWgqL0tYKNSTLQhDsLkH3F6TSucijFWI= +// @require https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js@4.15.0/dist/chatgpt.min.js#sha256-RglS1MscMHGDI7nq1v0OXEHoEw8stDxErRzSuILzCrQ= // @require https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.2.0/crypto-js.min.js#sha256-dppVXeVTurw1ozOPNE3XqhYmDJPOosfbKQcHyQSE58w= // @require https://cdn.jsdelivr.net/npm/json5@2.2.3/dist/index.min.js#sha256-S7ltnVPzgKyAGBlBG4wQhorJqYTehj5WQCrADCKJufE= // @require https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@130fe5e/assets/js/chatbot/components/buttons.js#sha256-1EdgOW0kQxjTTzgMz/4JScPw5i04gPsKVBXPA0xQWDg= @@ -81,7 +81,7 @@ // @require https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@5045b1d/assets/js/chatbot/components/menus.js#sha256-13HZm6QRq/dxVbeR2RmeiYmovD8XP/FTwiercFv4nm8= // @require https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@54d802d/assets/js/chatbot/components/replyBubble.js#sha256-hfm7kB1xZMyMT3pmMzmq6IdM6FWEjl9DSGtzUL1RZlI= // @require https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@54d802d/assets/js/chatbot/components/tooltip.js#sha256-VaSjsJ9RE8pe5fXrRFdy1lBT73KGDAC2DUb4UWpy3T8= -// @require https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@f93a944/assets/js/chatbot/lib/api.js#sha256-PiRrvXkn06TU0GjMXy+ChXlR7ZwFXUDEw3eExyNA0M4= +// @require https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@0bab5a8/assets/js/chatbot/lib/api.js#sha256-lZDUcdki4/4DcKN3++xh67epyfVHUCTzMqukQn4Ff3I= // @require https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@54d802d/assets/js/chatbot/lib/feedback.js#sha256-VB/w0tQj4AeZ+XYgFXendWx9uUroimUgCjl4LHQchx4= // @require https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@beedf43/assets/js/chatbot/lib/log.js#sha256-++SE7OgyoPZhNJ+cLiqSraFJCs59qVUhRm0vr1dCznY= // @require https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@54d802d/assets/js/chatbot/lib/prompts.js#sha256-zQqAHklFJcr4O5DgBoI9fSRm4SDko8ra3vPjYCm2Z4Q= diff --git a/chatgpt/autoclear-chatgpt-history/autoclear-chatgpt-history.user.js b/chatgpt/autoclear-chatgpt-history/autoclear-chatgpt-history.user.js index 2d6ce1384..468224593 100644 --- a/chatgpt/autoclear-chatgpt-history/autoclear-chatgpt-history.user.js +++ b/chatgpt/autoclear-chatgpt-history/autoclear-chatgpt-history.user.js @@ -225,7 +225,7 @@ // @description:zu Ziba itshala lokucabanga okuzoshintshwa ngokuzenzakalelayo uma ukubuka chatgpt.com // @author Adam Lui // @namespace https://github.com/adamlui -// @version 2026.6.17 +// @version 2026.6.27 // @license MIT // @icon data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22180%22%20height=%22180%22%20fill=%22none%22%3E%3Cstyle%3E:root%7B--primary-fill:%23000;--secondary-fill:%23fff;%7D@media%20(prefers-color-scheme:dark)%7B:root%7B--primary-fill:%23fff;--secondary-fill:%23000;%7D%7D%3C/style%3E%3Cg%20clip-path=%22url(%23a)%22%3E%3Crect%20width=%22180%22%20height=%22180%22%20fill=%22var(--primary-fill)%22%20rx=%2290%22/%3E%3Cg%20clip-path=%22url(%23b)%22%3E%3Cpath%20fill=%22var(--secondary-fill)%22%20d=%22M75.91%2073.628V62.232c0-.96.36-1.68%201.199-2.16l22.912-13.194c3.119-1.8%206.838-2.639%2010.676-2.639%2014.394%200%2023.511%2011.157%2023.511%2023.032%200%20.839%200%201.799-.12%202.758l-23.752-13.914c-1.439-.84-2.879-.84-4.318%200L75.91%2073.627Zm53.499%2044.383v-27.23c0-1.68-.72-2.88-2.159-3.719L97.142%2069.55l9.836-5.638c.839-.48%201.559-.48%202.399%200l22.912%2013.195c6.598%203.839%2011.035%2011.995%2011.035%2019.912%200%209.116-5.397%2017.513-13.915%2020.992v.001Zm-60.577-23.99-9.836-5.758c-.84-.48-1.2-1.2-1.2-2.16v-26.39c0-12.834%209.837-22.55%2023.152-22.55%205.039%200%209.716%201.679%2013.676%204.678L70.993%2055.516c-1.44.84-2.16%202.039-2.16%203.719v34.787-.002Zm21.173%2012.234L75.91%2098.339V81.546l14.095-7.917%2014.094%207.917v16.793l-14.094%207.916Zm9.056%2036.467c-5.038%200-9.716-1.68-13.675-4.678l23.631-13.676c1.439-.839%202.159-2.038%202.159-3.718V85.863l9.956%205.757c.84.48%201.2%201.2%201.2%202.16v26.389c0%2012.835-9.957%2022.552-23.27%2022.552v.001Zm-28.43-26.75L47.72%20102.778c-6.599-3.84-11.036-11.996-11.036-19.913%200-9.236%205.518-17.513%2014.034-20.992v27.35c0%201.68.72%202.879%202.16%203.718l29.989%2017.393-9.837%205.638c-.84.48-1.56.48-2.399%200Zm-1.318%2019.673c-13.555%200-23.512-10.196-23.512-22.792%200-.959.12-1.919.24-2.879l23.63%2013.675c1.44.84%202.88.84%204.32%200l30.108-17.392v11.395c0%20.96-.361%201.68-1.2%202.16l-22.912%2013.194c-3.119%201.8-6.837%202.639-10.675%202.639Zm29.748%2014.274c14.515%200%2026.63-10.316%2029.39-23.991%2013.434-3.479%2022.071-16.074%2022.071-28.91%200-8.396-3.598-16.553-10.076-22.43.6-2.52.96-5.039.96-7.557%200-17.153-13.915-29.99-29.989-29.99-3.239%200-6.358.48-9.477%201.56-5.398-5.278-12.835-8.637-20.992-8.637-14.515%200-26.63%2010.316-29.39%2023.991-13.434%203.48-22.07%2016.074-22.07%2028.91%200%208.396%203.598%2016.553%2010.075%2022.431-.6%202.519-.96%205.038-.96%207.556%200%2017.154%2013.915%2029.989%2029.99%2029.989%203.238%200%206.357-.479%209.476-1.559%205.397%205.278%2012.835%208.637%2020.992%208.637Z%22/%3E%3C/g%3E%3C/g%3E%3Cdefs%3E%3CclipPath%20id=%22a%22%3E%3Cpath%20d=%22M0%200h180v180H0z%22/%3E%3C/clipPath%3E%3CclipPath%20id=%22b%22%3E%3Cpath%20d=%22M29.487%2029.964h121.035v119.954H29.487z%22/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E // @icon64 data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22180%22%20height=%22180%22%20fill=%22none%22%3E%3Cstyle%3E:root%7B--primary-fill:%23000;--secondary-fill:%23fff;%7D@media%20(prefers-color-scheme:dark)%7B:root%7B--primary-fill:%23fff;--secondary-fill:%23000;%7D%7D%3C/style%3E%3Cg%20clip-path=%22url(%23a)%22%3E%3Crect%20width=%22180%22%20height=%22180%22%20fill=%22var(--primary-fill)%22%20rx=%2290%22/%3E%3Cg%20clip-path=%22url(%23b)%22%3E%3Cpath%20fill=%22var(--secondary-fill)%22%20d=%22M75.91%2073.628V62.232c0-.96.36-1.68%201.199-2.16l22.912-13.194c3.119-1.8%206.838-2.639%2010.676-2.639%2014.394%200%2023.511%2011.157%2023.511%2023.032%200%20.839%200%201.799-.12%202.758l-23.752-13.914c-1.439-.84-2.879-.84-4.318%200L75.91%2073.627Zm53.499%2044.383v-27.23c0-1.68-.72-2.88-2.159-3.719L97.142%2069.55l9.836-5.638c.839-.48%201.559-.48%202.399%200l22.912%2013.195c6.598%203.839%2011.035%2011.995%2011.035%2019.912%200%209.116-5.397%2017.513-13.915%2020.992v.001Zm-60.577-23.99-9.836-5.758c-.84-.48-1.2-1.2-1.2-2.16v-26.39c0-12.834%209.837-22.55%2023.152-22.55%205.039%200%209.716%201.679%2013.676%204.678L70.993%2055.516c-1.44.84-2.16%202.039-2.16%203.719v34.787-.002Zm21.173%2012.234L75.91%2098.339V81.546l14.095-7.917%2014.094%207.917v16.793l-14.094%207.916Zm9.056%2036.467c-5.038%200-9.716-1.68-13.675-4.678l23.631-13.676c1.439-.839%202.159-2.038%202.159-3.718V85.863l9.956%205.757c.84.48%201.2%201.2%201.2%202.16v26.389c0%2012.835-9.957%2022.552-23.27%2022.552v.001Zm-28.43-26.75L47.72%20102.778c-6.599-3.84-11.036-11.996-11.036-19.913%200-9.236%205.518-17.513%2014.034-20.992v27.35c0%201.68.72%202.879%202.16%203.718l29.989%2017.393-9.837%205.638c-.84.48-1.56.48-2.399%200Zm-1.318%2019.673c-13.555%200-23.512-10.196-23.512-22.792%200-.959.12-1.919.24-2.879l23.63%2013.675c1.44.84%202.88.84%204.32%200l30.108-17.392v11.395c0%20.96-.361%201.68-1.2%202.16l-22.912%2013.194c-3.119%201.8-6.837%202.639-10.675%202.639Zm29.748%2014.274c14.515%200%2026.63-10.316%2029.39-23.991%2013.434-3.479%2022.071-16.074%2022.071-28.91%200-8.396-3.598-16.553-10.076-22.43.6-2.52.96-5.039.96-7.557%200-17.153-13.915-29.99-29.989-29.99-3.239%200-6.358.48-9.477%201.56-5.398-5.278-12.835-8.637-20.992-8.637-14.515%200-26.63%2010.316-29.39%2023.991-13.434%203.48-22.07%2016.074-22.07%2028.91%200%208.396%203.598%2016.553%2010.075%2022.431-.6%202.519-.96%205.038-.96%207.556%200%2017.154%2013.915%2029.989%2029.99%2029.989%203.238%200%206.357-.479%209.476-1.559%205.397%205.278%2012.835%208.637%2020.992%208.637Z%22/%3E%3C/g%3E%3C/g%3E%3Cdefs%3E%3CclipPath%20id=%22a%22%3E%3Cpath%20d=%22M0%200h180v180H0z%22/%3E%3C/clipPath%3E%3CclipPath%20id=%22b%22%3E%3Cpath%20d=%22M29.487%2029.964h121.035v119.954H29.487z%22/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E @@ -241,7 +241,7 @@ // @match *://chatgpt.com/* // @connect cdn.jsdelivr.net // @connect raw.githubusercontent.com -// @require https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js@4.14.2/dist/chatgpt.min.js#sha256-HU+GlQoVScXwWgqL0tYKNSTLQhDsLkH3F6TSucijFWI= +// @require https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js@4.15.0/dist/chatgpt.min.js#sha256-RglS1MscMHGDI7nq1v0OXEHoEw8stDxErRzSuILzCrQ= // @require https://cdn.jsdelivr.net/gh/adamlui/userscripts@ff2baba/assets/js/lib/css.js/dist/css.min.js#sha256-zf9s8C0cZ/i+gnaTIUxa0+RpDYpsJVlyuV5L2q4KUdA= // @require https://cdn.jsdelivr.net/gh/adamlui/userscripts@ff2baba/assets/js/lib/dom.js/dist/dom.min.js#sha256-nTc2by3ZAz6AR7B8fOqjloJNETvjAepe15t2qlghMDo= // @resource rpgCSS https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@727feff/assets/styles/rising-particles/dist/gray.min.css#sha256-48sEWzNUGUOP04ur52G5VOfGZPSnZQfrF3szUr4VaRs= diff --git a/chatgpt/bravegpt/bravegpt.user.js b/chatgpt/bravegpt/bravegpt.user.js index 01196a077..c23d469ba 100644 --- a/chatgpt/bravegpt/bravegpt.user.js +++ b/chatgpt/bravegpt/bravegpt.user.js @@ -148,7 +148,7 @@ // @description:zu Yengeza izimpendulo ze-AI ku-Brave Search (inikwa amandla yi-GPT-4o!) // @author KudoAI // @namespace https://kudoai.com -// @version 2026.6.17.1 +// @version 2026.6.27 // @license MIT // @icon https://cdn.jsdelivr.net/gh/KudoAI/bravegpt@2f21b5f/assets/images/icons/app/icon48.png // @icon64 https://cdn.jsdelivr.net/gh/KudoAI/bravegpt@2f21b5f/assets/images/icons/app/icon64.png @@ -193,7 +193,7 @@ // @connect chatgpt.com // @connect fanyi.sogou.com // @connect raw.githubusercontent.com -// @require https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js@4.14.2/dist/chatgpt.min.js#sha256-HU+GlQoVScXwWgqL0tYKNSTLQhDsLkH3F6TSucijFWI= +// @require https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js@4.15.0/dist/chatgpt.min.js#sha256-RglS1MscMHGDI7nq1v0OXEHoEw8stDxErRzSuILzCrQ= // @require https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.2.0/crypto-js.min.js#sha256-dppVXeVTurw1ozOPNE3XqhYmDJPOosfbKQcHyQSE58w= // @require https://cdn.jsdelivr.net/npm/json5@2.2.3/dist/index.min.js#sha256-S7ltnVPzgKyAGBlBG4wQhorJqYTehj5WQCrADCKJufE= // @require https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@130fe5e/assets/js/chatbot/components/buttons.js#sha256-1EdgOW0kQxjTTzgMz/4JScPw5i04gPsKVBXPA0xQWDg= @@ -201,7 +201,7 @@ // @require https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@5045b1d/assets/js/chatbot/components/menus.js#sha256-13HZm6QRq/dxVbeR2RmeiYmovD8XP/FTwiercFv4nm8= // @require https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@54d802d/assets/js/chatbot/components/replyBubble.js#sha256-hfm7kB1xZMyMT3pmMzmq6IdM6FWEjl9DSGtzUL1RZlI= // @require https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@54d802d/assets/js/chatbot/components/tooltip.js#sha256-VaSjsJ9RE8pe5fXrRFdy1lBT73KGDAC2DUb4UWpy3T8= -// @require https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@f93a944/assets/js/chatbot/lib/api.js#sha256-PiRrvXkn06TU0GjMXy+ChXlR7ZwFXUDEw3eExyNA0M4= +// @require https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@0bab5a8/assets/js/chatbot/lib/api.js#sha256-lZDUcdki4/4DcKN3++xh67epyfVHUCTzMqukQn4Ff3I= // @require https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@54d802d/assets/js/chatbot/lib/feedback.js#sha256-VB/w0tQj4AeZ+XYgFXendWx9uUroimUgCjl4LHQchx4= // @require https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@beedf43/assets/js/chatbot/lib/log.js#sha256-++SE7OgyoPZhNJ+cLiqSraFJCs59qVUhRm0vr1dCznY= // @require https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@54d802d/assets/js/chatbot/lib/prompts.js#sha256-zQqAHklFJcr4O5DgBoI9fSRm4SDko8ra3vPjYCm2Z4Q= diff --git a/chatgpt/chatgpt-auto-continue/chatgpt-auto-continue.user.js b/chatgpt/chatgpt-auto-continue/chatgpt-auto-continue.user.js index d9d639838..0e6b28dbe 100644 --- a/chatgpt/chatgpt-auto-continue/chatgpt-auto-continue.user.js +++ b/chatgpt/chatgpt-auto-continue/chatgpt-auto-continue.user.js @@ -219,14 +219,14 @@ // @description:zu ⚡ Terus menghasilkan imibuzo eminingi ye-ChatGPT ngokwesizulu // @author Adam Lui // @namespace https://github.com/adamlui -// @version 2026.6.17 +// @version 2026.6.27 // @license MIT // @icon data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22180%22%20height=%22180%22%20fill=%22none%22%3E%3Cstyle%3E:root%7B--primary-fill:%23000;--secondary-fill:%23fff;%7D@media%20(prefers-color-scheme:dark)%7B:root%7B--primary-fill:%23fff;--secondary-fill:%23000;%7D%7D%3C/style%3E%3Cg%20clip-path=%22url(%23a)%22%3E%3Crect%20width=%22180%22%20height=%22180%22%20fill=%22var(--primary-fill)%22%20rx=%2290%22/%3E%3Cg%20clip-path=%22url(%23b)%22%3E%3Cpath%20fill=%22var(--secondary-fill)%22%20d=%22M75.91%2073.628V62.232c0-.96.36-1.68%201.199-2.16l22.912-13.194c3.119-1.8%206.838-2.639%2010.676-2.639%2014.394%200%2023.511%2011.157%2023.511%2023.032%200%20.839%200%201.799-.12%202.758l-23.752-13.914c-1.439-.84-2.879-.84-4.318%200L75.91%2073.627Zm53.499%2044.383v-27.23c0-1.68-.72-2.88-2.159-3.719L97.142%2069.55l9.836-5.638c.839-.48%201.559-.48%202.399%200l22.912%2013.195c6.598%203.839%2011.035%2011.995%2011.035%2019.912%200%209.116-5.397%2017.513-13.915%2020.992v.001Zm-60.577-23.99-9.836-5.758c-.84-.48-1.2-1.2-1.2-2.16v-26.39c0-12.834%209.837-22.55%2023.152-22.55%205.039%200%209.716%201.679%2013.676%204.678L70.993%2055.516c-1.44.84-2.16%202.039-2.16%203.719v34.787-.002Zm21.173%2012.234L75.91%2098.339V81.546l14.095-7.917%2014.094%207.917v16.793l-14.094%207.916Zm9.056%2036.467c-5.038%200-9.716-1.68-13.675-4.678l23.631-13.676c1.439-.839%202.159-2.038%202.159-3.718V85.863l9.956%205.757c.84.48%201.2%201.2%201.2%202.16v26.389c0%2012.835-9.957%2022.552-23.27%2022.552v.001Zm-28.43-26.75L47.72%20102.778c-6.599-3.84-11.036-11.996-11.036-19.913%200-9.236%205.518-17.513%2014.034-20.992v27.35c0%201.68.72%202.879%202.16%203.718l29.989%2017.393-9.837%205.638c-.84.48-1.56.48-2.399%200Zm-1.318%2019.673c-13.555%200-23.512-10.196-23.512-22.792%200-.959.12-1.919.24-2.879l23.63%2013.675c1.44.84%202.88.84%204.32%200l30.108-17.392v11.395c0%20.96-.361%201.68-1.2%202.16l-22.912%2013.194c-3.119%201.8-6.837%202.639-10.675%202.639Zm29.748%2014.274c14.515%200%2026.63-10.316%2029.39-23.991%2013.434-3.479%2022.071-16.074%2022.071-28.91%200-8.396-3.598-16.553-10.076-22.43.6-2.52.96-5.039.96-7.557%200-17.153-13.915-29.99-29.989-29.99-3.239%200-6.358.48-9.477%201.56-5.398-5.278-12.835-8.637-20.992-8.637-14.515%200-26.63%2010.316-29.39%2023.991-13.434%203.48-22.07%2016.074-22.07%2028.91%200%208.396%203.598%2016.553%2010.075%2022.431-.6%202.519-.96%205.038-.96%207.556%200%2017.154%2013.915%2029.989%2029.99%2029.989%203.238%200%206.357-.479%209.476-1.559%205.397%205.278%2012.835%208.637%2020.992%208.637Z%22/%3E%3C/g%3E%3C/g%3E%3Cdefs%3E%3CclipPath%20id=%22a%22%3E%3Cpath%20d=%22M0%200h180v180H0z%22/%3E%3C/clipPath%3E%3CclipPath%20id=%22b%22%3E%3Cpath%20d=%22M29.487%2029.964h121.035v119.954H29.487z%22/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E // @icon64 data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22180%22%20height=%22180%22%20fill=%22none%22%3E%3Cstyle%3E:root%7B--primary-fill:%23000;--secondary-fill:%23fff;%7D@media%20(prefers-color-scheme:dark)%7B:root%7B--primary-fill:%23fff;--secondary-fill:%23000;%7D%7D%3C/style%3E%3Cg%20clip-path=%22url(%23a)%22%3E%3Crect%20width=%22180%22%20height=%22180%22%20fill=%22var(--primary-fill)%22%20rx=%2290%22/%3E%3Cg%20clip-path=%22url(%23b)%22%3E%3Cpath%20fill=%22var(--secondary-fill)%22%20d=%22M75.91%2073.628V62.232c0-.96.36-1.68%201.199-2.16l22.912-13.194c3.119-1.8%206.838-2.639%2010.676-2.639%2014.394%200%2023.511%2011.157%2023.511%2023.032%200%20.839%200%201.799-.12%202.758l-23.752-13.914c-1.439-.84-2.879-.84-4.318%200L75.91%2073.627Zm53.499%2044.383v-27.23c0-1.68-.72-2.88-2.159-3.719L97.142%2069.55l9.836-5.638c.839-.48%201.559-.48%202.399%200l22.912%2013.195c6.598%203.839%2011.035%2011.995%2011.035%2019.912%200%209.116-5.397%2017.513-13.915%2020.992v.001Zm-60.577-23.99-9.836-5.758c-.84-.48-1.2-1.2-1.2-2.16v-26.39c0-12.834%209.837-22.55%2023.152-22.55%205.039%200%209.716%201.679%2013.676%204.678L70.993%2055.516c-1.44.84-2.16%202.039-2.16%203.719v34.787-.002Zm21.173%2012.234L75.91%2098.339V81.546l14.095-7.917%2014.094%207.917v16.793l-14.094%207.916Zm9.056%2036.467c-5.038%200-9.716-1.68-13.675-4.678l23.631-13.676c1.439-.839%202.159-2.038%202.159-3.718V85.863l9.956%205.757c.84.48%201.2%201.2%201.2%202.16v26.389c0%2012.835-9.957%2022.552-23.27%2022.552v.001Zm-28.43-26.75L47.72%20102.778c-6.599-3.84-11.036-11.996-11.036-19.913%200-9.236%205.518-17.513%2014.034-20.992v27.35c0%201.68.72%202.879%202.16%203.718l29.989%2017.393-9.837%205.638c-.84.48-1.56.48-2.399%200Zm-1.318%2019.673c-13.555%200-23.512-10.196-23.512-22.792%200-.959.12-1.919.24-2.879l23.63%2013.675c1.44.84%202.88.84%204.32%200l30.108-17.392v11.395c0%20.96-.361%201.68-1.2%202.16l-22.912%2013.194c-3.119%201.8-6.837%202.639-10.675%202.639Zm29.748%2014.274c14.515%200%2026.63-10.316%2029.39-23.991%2013.434-3.479%2022.071-16.074%2022.071-28.91%200-8.396-3.598-16.553-10.076-22.43.6-2.52.96-5.039.96-7.557%200-17.153-13.915-29.99-29.989-29.99-3.239%200-6.358.48-9.477%201.56-5.398-5.278-12.835-8.637-20.992-8.637-14.515%200-26.63%2010.316-29.39%2023.991-13.434%203.48-22.07%2016.074-22.07%2028.91%200%208.396%203.598%2016.553%2010.075%2022.431-.6%202.519-.96%205.038-.96%207.556%200%2017.154%2013.915%2029.989%2029.99%2029.989%203.238%200%206.357-.479%209.476-1.559%205.397%205.278%2012.835%208.637%2020.992%208.637Z%22/%3E%3C/g%3E%3C/g%3E%3Cdefs%3E%3CclipPath%20id=%22a%22%3E%3Cpath%20d=%22M0%200h180v180H0z%22/%3E%3C/clipPath%3E%3CclipPath%20id=%22b%22%3E%3Cpath%20d=%22M29.487%2029.964h121.035v119.954H29.487z%22/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E // @match *://chatgpt.com/* // @connect cdn.jsdelivr.net // @connect raw.githubusercontent.com -// @require https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js@4.14.2/dist/chatgpt.min.js#sha256-HU+GlQoVScXwWgqL0tYKNSTLQhDsLkH3F6TSucijFWI= +// @require https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js@4.15.0/dist/chatgpt.min.js#sha256-RglS1MscMHGDI7nq1v0OXEHoEw8stDxErRzSuILzCrQ= // @require https://cdn.jsdelivr.net/gh/adamlui/userscripts@ff2baba/assets/js/lib/css.js/dist/css.min.js#sha256-zf9s8C0cZ/i+gnaTIUxa0+RpDYpsJVlyuV5L2q4KUdA= // @require https://cdn.jsdelivr.net/gh/adamlui/userscripts@ff2baba/assets/js/lib/dom.js/dist/dom.min.js#sha256-nTc2by3ZAz6AR7B8fOqjloJNETvjAepe15t2qlghMDo= // @require https://cdn.jsdelivr.net/gh/adamlui/chatgpt-auto-continue@008112f/chromium/extension/components/modals.js#sha256-/W73xt+SWplKQhUdEn6NOcBnrGZGlJWSSOT8Rm0K69Y= diff --git a/chatgpt/chatgpt-auto-refresh/chatgpt-auto-refresh.user.js b/chatgpt/chatgpt-auto-refresh/chatgpt-auto-refresh.user.js index 6fe20f704..ffbb58f35 100644 --- a/chatgpt/chatgpt-auto-refresh/chatgpt-auto-refresh.user.js +++ b/chatgpt/chatgpt-auto-refresh/chatgpt-auto-refresh.user.js @@ -220,7 +220,7 @@ // @description:zu *NGOKUPHEPHA* susa ukusetha kabusha ingxoxo yemizuzu eyi-10 + amaphutha enethiwekhi ahlala njalo + Ukuhlolwa kwe-Cloudflare ku-ChatGPT. // @author Adam Lui // @namespace https://github.com/adamlui -// @version 2026.6.17 +// @version 2026.6.27 // @license MIT // @icon data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22180%22%20height=%22180%22%20fill=%22none%22%3E%3Cstyle%3E:root%7B--primary-fill:%23000;--secondary-fill:%23fff;%7D@media%20(prefers-color-scheme:dark)%7B:root%7B--primary-fill:%23fff;--secondary-fill:%23000;%7D%7D%3C/style%3E%3Cg%20clip-path=%22url(%23a)%22%3E%3Crect%20width=%22180%22%20height=%22180%22%20fill=%22var(--primary-fill)%22%20rx=%2290%22/%3E%3Cg%20clip-path=%22url(%23b)%22%3E%3Cpath%20fill=%22var(--secondary-fill)%22%20d=%22M75.91%2073.628V62.232c0-.96.36-1.68%201.199-2.16l22.912-13.194c3.119-1.8%206.838-2.639%2010.676-2.639%2014.394%200%2023.511%2011.157%2023.511%2023.032%200%20.839%200%201.799-.12%202.758l-23.752-13.914c-1.439-.84-2.879-.84-4.318%200L75.91%2073.627Zm53.499%2044.383v-27.23c0-1.68-.72-2.88-2.159-3.719L97.142%2069.55l9.836-5.638c.839-.48%201.559-.48%202.399%200l22.912%2013.195c6.598%203.839%2011.035%2011.995%2011.035%2019.912%200%209.116-5.397%2017.513-13.915%2020.992v.001Zm-60.577-23.99-9.836-5.758c-.84-.48-1.2-1.2-1.2-2.16v-26.39c0-12.834%209.837-22.55%2023.152-22.55%205.039%200%209.716%201.679%2013.676%204.678L70.993%2055.516c-1.44.84-2.16%202.039-2.16%203.719v34.787-.002Zm21.173%2012.234L75.91%2098.339V81.546l14.095-7.917%2014.094%207.917v16.793l-14.094%207.916Zm9.056%2036.467c-5.038%200-9.716-1.68-13.675-4.678l23.631-13.676c1.439-.839%202.159-2.038%202.159-3.718V85.863l9.956%205.757c.84.48%201.2%201.2%201.2%202.16v26.389c0%2012.835-9.957%2022.552-23.27%2022.552v.001Zm-28.43-26.75L47.72%20102.778c-6.599-3.84-11.036-11.996-11.036-19.913%200-9.236%205.518-17.513%2014.034-20.992v27.35c0%201.68.72%202.879%202.16%203.718l29.989%2017.393-9.837%205.638c-.84.48-1.56.48-2.399%200Zm-1.318%2019.673c-13.555%200-23.512-10.196-23.512-22.792%200-.959.12-1.919.24-2.879l23.63%2013.675c1.44.84%202.88.84%204.32%200l30.108-17.392v11.395c0%20.96-.361%201.68-1.2%202.16l-22.912%2013.194c-3.119%201.8-6.837%202.639-10.675%202.639Zm29.748%2014.274c14.515%200%2026.63-10.316%2029.39-23.991%2013.434-3.479%2022.071-16.074%2022.071-28.91%200-8.396-3.598-16.553-10.076-22.43.6-2.52.96-5.039.96-7.557%200-17.153-13.915-29.99-29.989-29.99-3.239%200-6.358.48-9.477%201.56-5.398-5.278-12.835-8.637-20.992-8.637-14.515%200-26.63%2010.316-29.39%2023.991-13.434%203.48-22.07%2016.074-22.07%2028.91%200%208.396%203.598%2016.553%2010.075%2022.431-.6%202.519-.96%205.038-.96%207.556%200%2017.154%2013.915%2029.989%2029.99%2029.989%203.238%200%206.357-.479%209.476-1.559%205.397%205.278%2012.835%208.637%2020.992%208.637Z%22/%3E%3C/g%3E%3C/g%3E%3Cdefs%3E%3CclipPath%20id=%22a%22%3E%3Cpath%20d=%22M0%200h180v180H0z%22/%3E%3C/clipPath%3E%3CclipPath%20id=%22b%22%3E%3Cpath%20d=%22M29.487%2029.964h121.035v119.954H29.487z%22/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E // @icon64 data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22180%22%20height=%22180%22%20fill=%22none%22%3E%3Cstyle%3E:root%7B--primary-fill:%23000;--secondary-fill:%23fff;%7D@media%20(prefers-color-scheme:dark)%7B:root%7B--primary-fill:%23fff;--secondary-fill:%23000;%7D%7D%3C/style%3E%3Cg%20clip-path=%22url(%23a)%22%3E%3Crect%20width=%22180%22%20height=%22180%22%20fill=%22var(--primary-fill)%22%20rx=%2290%22/%3E%3Cg%20clip-path=%22url(%23b)%22%3E%3Cpath%20fill=%22var(--secondary-fill)%22%20d=%22M75.91%2073.628V62.232c0-.96.36-1.68%201.199-2.16l22.912-13.194c3.119-1.8%206.838-2.639%2010.676-2.639%2014.394%200%2023.511%2011.157%2023.511%2023.032%200%20.839%200%201.799-.12%202.758l-23.752-13.914c-1.439-.84-2.879-.84-4.318%200L75.91%2073.627Zm53.499%2044.383v-27.23c0-1.68-.72-2.88-2.159-3.719L97.142%2069.55l9.836-5.638c.839-.48%201.559-.48%202.399%200l22.912%2013.195c6.598%203.839%2011.035%2011.995%2011.035%2019.912%200%209.116-5.397%2017.513-13.915%2020.992v.001Zm-60.577-23.99-9.836-5.758c-.84-.48-1.2-1.2-1.2-2.16v-26.39c0-12.834%209.837-22.55%2023.152-22.55%205.039%200%209.716%201.679%2013.676%204.678L70.993%2055.516c-1.44.84-2.16%202.039-2.16%203.719v34.787-.002Zm21.173%2012.234L75.91%2098.339V81.546l14.095-7.917%2014.094%207.917v16.793l-14.094%207.916Zm9.056%2036.467c-5.038%200-9.716-1.68-13.675-4.678l23.631-13.676c1.439-.839%202.159-2.038%202.159-3.718V85.863l9.956%205.757c.84.48%201.2%201.2%201.2%202.16v26.389c0%2012.835-9.957%2022.552-23.27%2022.552v.001Zm-28.43-26.75L47.72%20102.778c-6.599-3.84-11.036-11.996-11.036-19.913%200-9.236%205.518-17.513%2014.034-20.992v27.35c0%201.68.72%202.879%202.16%203.718l29.989%2017.393-9.837%205.638c-.84.48-1.56.48-2.399%200Zm-1.318%2019.673c-13.555%200-23.512-10.196-23.512-22.792%200-.959.12-1.919.24-2.879l23.63%2013.675c1.44.84%202.88.84%204.32%200l30.108-17.392v11.395c0%20.96-.361%201.68-1.2%202.16l-22.912%2013.194c-3.119%201.8-6.837%202.639-10.675%202.639Zm29.748%2014.274c14.515%200%2026.63-10.316%2029.39-23.991%2013.434-3.479%2022.071-16.074%2022.071-28.91%200-8.396-3.598-16.553-10.076-22.43.6-2.52.96-5.039.96-7.557%200-17.153-13.915-29.99-29.989-29.99-3.239%200-6.358.48-9.477%201.56-5.398-5.278-12.835-8.637-20.992-8.637-14.515%200-26.63%2010.316-29.39%2023.991-13.434%203.48-22.07%2016.074-22.07%2028.91%200%208.396%203.598%2016.553%2010.075%2022.431-.6%202.519-.96%205.038-.96%207.556%200%2017.154%2013.915%2029.989%2029.99%2029.989%203.238%200%206.357-.479%209.476-1.559%205.397%205.278%2012.835%208.637%2020.992%208.637Z%22/%3E%3C/g%3E%3C/g%3E%3Cdefs%3E%3CclipPath%20id=%22a%22%3E%3Cpath%20d=%22M0%200h180v180H0z%22/%3E%3C/clipPath%3E%3CclipPath%20id=%22b%22%3E%3Cpath%20d=%22M29.487%2029.964h121.035v119.954H29.487z%22/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E @@ -237,7 +237,7 @@ // @match *://chatgpt.com/* // @connect cdn.jsdelivr.net // @connect raw.githubusercontent.com -// @require https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js@4.14.2/dist/chatgpt.min.js#sha256-HU+GlQoVScXwWgqL0tYKNSTLQhDsLkH3F6TSucijFWI= +// @require https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js@4.15.0/dist/chatgpt.min.js#sha256-RglS1MscMHGDI7nq1v0OXEHoEw8stDxErRzSuILzCrQ= // @require https://cdn.jsdelivr.net/gh/adamlui/userscripts@ff2baba/assets/js/lib/css.js/dist/css.min.js#sha256-zf9s8C0cZ/i+gnaTIUxa0+RpDYpsJVlyuV5L2q4KUdA= // @require https://cdn.jsdelivr.net/gh/adamlui/userscripts@ff2baba/assets/js/lib/dom.js/dist/dom.min.js#sha256-nTc2by3ZAz6AR7B8fOqjloJNETvjAepe15t2qlghMDo= // @resource rpgCSS https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@727feff/assets/styles/rising-particles/dist/gray.min.css#sha256-48sEWzNUGUOP04ur52G5VOfGZPSnZQfrF3szUr4VaRs= diff --git a/chatgpt/chatgpt-auto-talk/chatgpt-auto-talk.user.js b/chatgpt/chatgpt-auto-talk/chatgpt-auto-talk.user.js index b8440495a..9dcb5c575 100644 --- a/chatgpt/chatgpt-auto-talk/chatgpt-auto-talk.user.js +++ b/chatgpt/chatgpt-auto-talk/chatgpt-auto-talk.user.js @@ -225,14 +225,14 @@ // @description:zu Dlala izimpendulo ze-ChatGPT ngokuzenzakalela // @author Adam Lui // @namespace https://github.com/adamlui -// @version 2026.6.17 +// @version 2026.6.27 // @license MIT // @icon data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22180%22%20height=%22180%22%20fill=%22none%22%3E%3Cstyle%3E:root%7B--primary-fill:%23000;--secondary-fill:%23fff;%7D@media%20(prefers-color-scheme:dark)%7B:root%7B--primary-fill:%23fff;--secondary-fill:%23000;%7D%7D%3C/style%3E%3Cg%20clip-path=%22url(%23a)%22%3E%3Crect%20width=%22180%22%20height=%22180%22%20fill=%22var(--primary-fill)%22%20rx=%2290%22/%3E%3Cg%20clip-path=%22url(%23b)%22%3E%3Cpath%20fill=%22var(--secondary-fill)%22%20d=%22M75.91%2073.628V62.232c0-.96.36-1.68%201.199-2.16l22.912-13.194c3.119-1.8%206.838-2.639%2010.676-2.639%2014.394%200%2023.511%2011.157%2023.511%2023.032%200%20.839%200%201.799-.12%202.758l-23.752-13.914c-1.439-.84-2.879-.84-4.318%200L75.91%2073.627Zm53.499%2044.383v-27.23c0-1.68-.72-2.88-2.159-3.719L97.142%2069.55l9.836-5.638c.839-.48%201.559-.48%202.399%200l22.912%2013.195c6.598%203.839%2011.035%2011.995%2011.035%2019.912%200%209.116-5.397%2017.513-13.915%2020.992v.001Zm-60.577-23.99-9.836-5.758c-.84-.48-1.2-1.2-1.2-2.16v-26.39c0-12.834%209.837-22.55%2023.152-22.55%205.039%200%209.716%201.679%2013.676%204.678L70.993%2055.516c-1.44.84-2.16%202.039-2.16%203.719v34.787-.002Zm21.173%2012.234L75.91%2098.339V81.546l14.095-7.917%2014.094%207.917v16.793l-14.094%207.916Zm9.056%2036.467c-5.038%200-9.716-1.68-13.675-4.678l23.631-13.676c1.439-.839%202.159-2.038%202.159-3.718V85.863l9.956%205.757c.84.48%201.2%201.2%201.2%202.16v26.389c0%2012.835-9.957%2022.552-23.27%2022.552v.001Zm-28.43-26.75L47.72%20102.778c-6.599-3.84-11.036-11.996-11.036-19.913%200-9.236%205.518-17.513%2014.034-20.992v27.35c0%201.68.72%202.879%202.16%203.718l29.989%2017.393-9.837%205.638c-.84.48-1.56.48-2.399%200Zm-1.318%2019.673c-13.555%200-23.512-10.196-23.512-22.792%200-.959.12-1.919.24-2.879l23.63%2013.675c1.44.84%202.88.84%204.32%200l30.108-17.392v11.395c0%20.96-.361%201.68-1.2%202.16l-22.912%2013.194c-3.119%201.8-6.837%202.639-10.675%202.639Zm29.748%2014.274c14.515%200%2026.63-10.316%2029.39-23.991%2013.434-3.479%2022.071-16.074%2022.071-28.91%200-8.396-3.598-16.553-10.076-22.43.6-2.52.96-5.039.96-7.557%200-17.153-13.915-29.99-29.989-29.99-3.239%200-6.358.48-9.477%201.56-5.398-5.278-12.835-8.637-20.992-8.637-14.515%200-26.63%2010.316-29.39%2023.991-13.434%203.48-22.07%2016.074-22.07%2028.91%200%208.396%203.598%2016.553%2010.075%2022.431-.6%202.519-.96%205.038-.96%207.556%200%2017.154%2013.915%2029.989%2029.99%2029.989%203.238%200%206.357-.479%209.476-1.559%205.397%205.278%2012.835%208.637%2020.992%208.637Z%22/%3E%3C/g%3E%3C/g%3E%3Cdefs%3E%3CclipPath%20id=%22a%22%3E%3Cpath%20d=%22M0%200h180v180H0z%22/%3E%3C/clipPath%3E%3CclipPath%20id=%22b%22%3E%3Cpath%20d=%22M29.487%2029.964h121.035v119.954H29.487z%22/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E // @icon64 data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22180%22%20height=%22180%22%20fill=%22none%22%3E%3Cstyle%3E:root%7B--primary-fill:%23000;--secondary-fill:%23fff;%7D@media%20(prefers-color-scheme:dark)%7B:root%7B--primary-fill:%23fff;--secondary-fill:%23000;%7D%7D%3C/style%3E%3Cg%20clip-path=%22url(%23a)%22%3E%3Crect%20width=%22180%22%20height=%22180%22%20fill=%22var(--primary-fill)%22%20rx=%2290%22/%3E%3Cg%20clip-path=%22url(%23b)%22%3E%3Cpath%20fill=%22var(--secondary-fill)%22%20d=%22M75.91%2073.628V62.232c0-.96.36-1.68%201.199-2.16l22.912-13.194c3.119-1.8%206.838-2.639%2010.676-2.639%2014.394%200%2023.511%2011.157%2023.511%2023.032%200%20.839%200%201.799-.12%202.758l-23.752-13.914c-1.439-.84-2.879-.84-4.318%200L75.91%2073.627Zm53.499%2044.383v-27.23c0-1.68-.72-2.88-2.159-3.719L97.142%2069.55l9.836-5.638c.839-.48%201.559-.48%202.399%200l22.912%2013.195c6.598%203.839%2011.035%2011.995%2011.035%2019.912%200%209.116-5.397%2017.513-13.915%2020.992v.001Zm-60.577-23.99-9.836-5.758c-.84-.48-1.2-1.2-1.2-2.16v-26.39c0-12.834%209.837-22.55%2023.152-22.55%205.039%200%209.716%201.679%2013.676%204.678L70.993%2055.516c-1.44.84-2.16%202.039-2.16%203.719v34.787-.002Zm21.173%2012.234L75.91%2098.339V81.546l14.095-7.917%2014.094%207.917v16.793l-14.094%207.916Zm9.056%2036.467c-5.038%200-9.716-1.68-13.675-4.678l23.631-13.676c1.439-.839%202.159-2.038%202.159-3.718V85.863l9.956%205.757c.84.48%201.2%201.2%201.2%202.16v26.389c0%2012.835-9.957%2022.552-23.27%2022.552v.001Zm-28.43-26.75L47.72%20102.778c-6.599-3.84-11.036-11.996-11.036-19.913%200-9.236%205.518-17.513%2014.034-20.992v27.35c0%201.68.72%202.879%202.16%203.718l29.989%2017.393-9.837%205.638c-.84.48-1.56.48-2.399%200Zm-1.318%2019.673c-13.555%200-23.512-10.196-23.512-22.792%200-.959.12-1.919.24-2.879l23.63%2013.675c1.44.84%202.88.84%204.32%200l30.108-17.392v11.395c0%20.96-.361%201.68-1.2%202.16l-22.912%2013.194c-3.119%201.8-6.837%202.639-10.675%202.639Zm29.748%2014.274c14.515%200%2026.63-10.316%2029.39-23.991%2013.434-3.479%2022.071-16.074%2022.071-28.91%200-8.396-3.598-16.553-10.076-22.43.6-2.52.96-5.039.96-7.557%200-17.153-13.915-29.99-29.989-29.99-3.239%200-6.358.48-9.477%201.56-5.398-5.278-12.835-8.637-20.992-8.637-14.515%200-26.63%2010.316-29.39%2023.991-13.434%203.48-22.07%2016.074-22.07%2028.91%200%208.396%203.598%2016.553%2010.075%2022.431-.6%202.519-.96%205.038-.96%207.556%200%2017.154%2013.915%2029.989%2029.99%2029.989%203.238%200%206.357-.479%209.476-1.559%205.397%205.278%2012.835%208.637%2020.992%208.637Z%22/%3E%3C/g%3E%3C/g%3E%3Cdefs%3E%3CclipPath%20id=%22a%22%3E%3Cpath%20d=%22M0%200h180v180H0z%22/%3E%3C/clipPath%3E%3CclipPath%20id=%22b%22%3E%3Cpath%20d=%22M29.487%2029.964h121.035v119.954H29.487z%22/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E // @match *://chatgpt.com/* // @connect cdn.jsdelivr.net // @connect raw.githubusercontent.com -// @require https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js@4.14.2/dist/chatgpt.min.js#sha256-HU+GlQoVScXwWgqL0tYKNSTLQhDsLkH3F6TSucijFWI= +// @require https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js@4.15.0/dist/chatgpt.min.js#sha256-RglS1MscMHGDI7nq1v0OXEHoEw8stDxErRzSuILzCrQ= // @require https://cdn.jsdelivr.net/gh/adamlui/userscripts@ff2baba/assets/js/lib/css.js/dist/css.min.js#sha256-zf9s8C0cZ/i+gnaTIUxa0+RpDYpsJVlyuV5L2q4KUdA= // @require https://cdn.jsdelivr.net/gh/adamlui/userscripts@ff2baba/assets/js/lib/dom.js/dist/dom.min.js#sha256-nTc2by3ZAz6AR7B8fOqjloJNETvjAepe15t2qlghMDo= // @resource rpgCSS https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@727feff/assets/styles/rising-particles/dist/gray.min.css#sha256-48sEWzNUGUOP04ur52G5VOfGZPSnZQfrF3szUr4VaRs= diff --git a/chatgpt/chatgpt-infinity/chatgpt-infinity.user.js b/chatgpt/chatgpt-infinity/chatgpt-infinity.user.js index 6ff40183e..840daa4a9 100644 --- a/chatgpt/chatgpt-infinity/chatgpt-infinity.user.js +++ b/chatgpt/chatgpt-infinity/chatgpt-infinity.user.js @@ -199,7 +199,7 @@ // @description:zh-TW 從無所不知的 ChatGPT 生成無窮無盡的答案 (用任何語言!) // @author Adam Lui // @namespace https://github.com/adamlui -// @version 2026.6.17 +// @version 2026.6.27 // @license MIT // @icon data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22180%22%20height=%22180%22%20fill=%22none%22%3E%3Cstyle%3E:root%7B--primary-fill:%23000;--secondary-fill:%23fff;%7D@media%20(prefers-color-scheme:dark)%7B:root%7B--primary-fill:%23fff;--secondary-fill:%23000;%7D%7D%3C/style%3E%3Cg%20clip-path=%22url(%23a)%22%3E%3Crect%20width=%22180%22%20height=%22180%22%20fill=%22var(--primary-fill)%22%20rx=%2290%22/%3E%3Cg%20clip-path=%22url(%23b)%22%3E%3Cpath%20fill=%22var(--secondary-fill)%22%20d=%22M75.91%2073.628V62.232c0-.96.36-1.68%201.199-2.16l22.912-13.194c3.119-1.8%206.838-2.639%2010.676-2.639%2014.394%200%2023.511%2011.157%2023.511%2023.032%200%20.839%200%201.799-.12%202.758l-23.752-13.914c-1.439-.84-2.879-.84-4.318%200L75.91%2073.627Zm53.499%2044.383v-27.23c0-1.68-.72-2.88-2.159-3.719L97.142%2069.55l9.836-5.638c.839-.48%201.559-.48%202.399%200l22.912%2013.195c6.598%203.839%2011.035%2011.995%2011.035%2019.912%200%209.116-5.397%2017.513-13.915%2020.992v.001Zm-60.577-23.99-9.836-5.758c-.84-.48-1.2-1.2-1.2-2.16v-26.39c0-12.834%209.837-22.55%2023.152-22.55%205.039%200%209.716%201.679%2013.676%204.678L70.993%2055.516c-1.44.84-2.16%202.039-2.16%203.719v34.787-.002Zm21.173%2012.234L75.91%2098.339V81.546l14.095-7.917%2014.094%207.917v16.793l-14.094%207.916Zm9.056%2036.467c-5.038%200-9.716-1.68-13.675-4.678l23.631-13.676c1.439-.839%202.159-2.038%202.159-3.718V85.863l9.956%205.757c.84.48%201.2%201.2%201.2%202.16v26.389c0%2012.835-9.957%2022.552-23.27%2022.552v.001Zm-28.43-26.75L47.72%20102.778c-6.599-3.84-11.036-11.996-11.036-19.913%200-9.236%205.518-17.513%2014.034-20.992v27.35c0%201.68.72%202.879%202.16%203.718l29.989%2017.393-9.837%205.638c-.84.48-1.56.48-2.399%200Zm-1.318%2019.673c-13.555%200-23.512-10.196-23.512-22.792%200-.959.12-1.919.24-2.879l23.63%2013.675c1.44.84%202.88.84%204.32%200l30.108-17.392v11.395c0%20.96-.361%201.68-1.2%202.16l-22.912%2013.194c-3.119%201.8-6.837%202.639-10.675%202.639Zm29.748%2014.274c14.515%200%2026.63-10.316%2029.39-23.991%2013.434-3.479%2022.071-16.074%2022.071-28.91%200-8.396-3.598-16.553-10.076-22.43.6-2.52.96-5.039.96-7.557%200-17.153-13.915-29.99-29.989-29.99-3.239%200-6.358.48-9.477%201.56-5.398-5.278-12.835-8.637-20.992-8.637-14.515%200-26.63%2010.316-29.39%2023.991-13.434%203.48-22.07%2016.074-22.07%2028.91%200%208.396%203.598%2016.553%2010.075%2022.431-.6%202.519-.96%205.038-.96%207.556%200%2017.154%2013.915%2029.989%2029.99%2029.989%203.238%200%206.357-.479%209.476-1.559%205.397%205.278%2012.835%208.637%2020.992%208.637Z%22/%3E%3C/g%3E%3C/g%3E%3Cdefs%3E%3CclipPath%20id=%22a%22%3E%3Cpath%20d=%22M0%200h180v180H0z%22/%3E%3C/clipPath%3E%3CclipPath%20id=%22b%22%3E%3Cpath%20d=%22M29.487%2029.964h121.035v119.954H29.487z%22/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E // @icon64 data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22180%22%20height=%22180%22%20fill=%22none%22%3E%3Cstyle%3E:root%7B--primary-fill:%23000;--secondary-fill:%23fff;%7D@media%20(prefers-color-scheme:dark)%7B:root%7B--primary-fill:%23fff;--secondary-fill:%23000;%7D%7D%3C/style%3E%3Cg%20clip-path=%22url(%23a)%22%3E%3Crect%20width=%22180%22%20height=%22180%22%20fill=%22var(--primary-fill)%22%20rx=%2290%22/%3E%3Cg%20clip-path=%22url(%23b)%22%3E%3Cpath%20fill=%22var(--secondary-fill)%22%20d=%22M75.91%2073.628V62.232c0-.96.36-1.68%201.199-2.16l22.912-13.194c3.119-1.8%206.838-2.639%2010.676-2.639%2014.394%200%2023.511%2011.157%2023.511%2023.032%200%20.839%200%201.799-.12%202.758l-23.752-13.914c-1.439-.84-2.879-.84-4.318%200L75.91%2073.627Zm53.499%2044.383v-27.23c0-1.68-.72-2.88-2.159-3.719L97.142%2069.55l9.836-5.638c.839-.48%201.559-.48%202.399%200l22.912%2013.195c6.598%203.839%2011.035%2011.995%2011.035%2019.912%200%209.116-5.397%2017.513-13.915%2020.992v.001Zm-60.577-23.99-9.836-5.758c-.84-.48-1.2-1.2-1.2-2.16v-26.39c0-12.834%209.837-22.55%2023.152-22.55%205.039%200%209.716%201.679%2013.676%204.678L70.993%2055.516c-1.44.84-2.16%202.039-2.16%203.719v34.787-.002Zm21.173%2012.234L75.91%2098.339V81.546l14.095-7.917%2014.094%207.917v16.793l-14.094%207.916Zm9.056%2036.467c-5.038%200-9.716-1.68-13.675-4.678l23.631-13.676c1.439-.839%202.159-2.038%202.159-3.718V85.863l9.956%205.757c.84.48%201.2%201.2%201.2%202.16v26.389c0%2012.835-9.957%2022.552-23.27%2022.552v.001Zm-28.43-26.75L47.72%20102.778c-6.599-3.84-11.036-11.996-11.036-19.913%200-9.236%205.518-17.513%2014.034-20.992v27.35c0%201.68.72%202.879%202.16%203.718l29.989%2017.393-9.837%205.638c-.84.48-1.56.48-2.399%200Zm-1.318%2019.673c-13.555%200-23.512-10.196-23.512-22.792%200-.959.12-1.919.24-2.879l23.63%2013.675c1.44.84%202.88.84%204.32%200l30.108-17.392v11.395c0%20.96-.361%201.68-1.2%202.16l-22.912%2013.194c-3.119%201.8-6.837%202.639-10.675%202.639Zm29.748%2014.274c14.515%200%2026.63-10.316%2029.39-23.991%2013.434-3.479%2022.071-16.074%2022.071-28.91%200-8.396-3.598-16.553-10.076-22.43.6-2.52.96-5.039.96-7.557%200-17.153-13.915-29.99-29.989-29.99-3.239%200-6.358.48-9.477%201.56-5.398-5.278-12.835-8.637-20.992-8.637-14.515%200-26.63%2010.316-29.39%2023.991-13.434%203.48-22.07%2016.074-22.07%2028.91%200%208.396%203.598%2016.553%2010.075%2022.431-.6%202.519-.96%205.038-.96%207.556%200%2017.154%2013.915%2029.989%2029.99%2029.989%203.238%200%206.357-.479%209.476-1.559%205.397%205.278%2012.835%208.637%2020.992%208.637Z%22/%3E%3C/g%3E%3C/g%3E%3Cdefs%3E%3CclipPath%20id=%22a%22%3E%3Cpath%20d=%22M0%200h180v180H0z%22/%3E%3C/clipPath%3E%3CclipPath%20id=%22b%22%3E%3Cpath%20d=%22M29.487%2029.964h121.035v119.954H29.487z%22/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E// @compatible chrome @@ -216,7 +216,7 @@ // @match *://chatgpt.com/* // @connect cdn.jsdelivr.net // @connect raw.githubusercontent.com -// @require https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js@4.14.2/dist/chatgpt.min.js#sha256-HU+GlQoVScXwWgqL0tYKNSTLQhDsLkH3F6TSucijFWI= +// @require https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js@4.15.0/dist/chatgpt.min.js#sha256-RglS1MscMHGDI7nq1v0OXEHoEw8stDxErRzSuILzCrQ= // @require https://cdn.jsdelivr.net/gh/adamlui/userscripts@ff2baba/assets/js/lib/css.js/dist/css.min.js#sha256-zf9s8C0cZ/i+gnaTIUxa0+RpDYpsJVlyuV5L2q4KUdA= // @require https://cdn.jsdelivr.net/gh/adamlui/userscripts@ff2baba/assets/js/lib/dom.js/dist/dom.min.js#sha256-nTc2by3ZAz6AR7B8fOqjloJNETvjAepe15t2qlghMDo= // @require https://cdn.jsdelivr.net/gh/adamlui/chatgpt-infinity@9b871bc/chromium/extension/components/modals.js#sha256-z8OOmEiJhGr1iYVUmBidviqfidTws4qmWkuQGPvTQeA= diff --git a/chatgpt/chatgpt-widescreen/chatgpt-widescreen.user.js b/chatgpt/chatgpt-widescreen/chatgpt-widescreen.user.js index 3eb490776..8e0370911 100644 --- a/chatgpt/chatgpt-widescreen/chatgpt-widescreen.user.js +++ b/chatgpt/chatgpt-widescreen/chatgpt-widescreen.user.js @@ -235,7 +235,7 @@ // @description:zu Thuthukisa iChatGPT ngemodi zesikrini ezibanzi/egcwele/ephezulu + imodi yokuvimbela i-spam. Futhi isebenza ku-poe.com! // @author Adam Lui // @namespace https://github.com/adamlui -// @version 2026.6.17.1 +// @version 2026.6.27 // @license MIT // @icon https://cdn.jsdelivr.net/gh/adamlui/chatgpt-widescreen@73594ea/assets/images/icons/widescreen-robot-emoji/icon48.png // @icon64 https://cdn.jsdelivr.net/gh/adamlui/chatgpt-widescreen@73594ea/assets/images/icons/widescreen-robot-emoji/icon64.png @@ -254,7 +254,7 @@ // @match *://poe.com/* // @connect cdn.jsdelivr.net // @connect scriptcat.org -// @require https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js@4.14.2/dist/chatgpt.min.js#sha256-HU+GlQoVScXwWgqL0tYKNSTLQhDsLkH3F6TSucijFWI= +// @require https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js@4.15.0/dist/chatgpt.min.js#sha256-RglS1MscMHGDI7nq1v0OXEHoEw8stDxErRzSuILzCrQ= // @require https://cdn.jsdelivr.net/gh/adamlui/userscripts@ff2baba/assets/js/lib/css.js/dist/css.min.js#sha256-zf9s8C0cZ/i+gnaTIUxa0+RpDYpsJVlyuV5L2q4KUdA= // @require https://cdn.jsdelivr.net/gh/adamlui/userscripts@ff2baba/assets/js/lib/dom.js/dist/dom.min.js#sha256-nTc2by3ZAz6AR7B8fOqjloJNETvjAepe15t2qlghMDo= // @require https://cdn.jsdelivr.net/npm/json5@2.2.3/dist/index.min.js#sha256-S7ltnVPzgKyAGBlBG4wQhorJqYTehj5WQCrADCKJufE= diff --git a/chatgpt/duckduckgpt/docs/README.md b/chatgpt/duckduckgpt/docs/README.md index fb30c17eb..c9cda2ced 100644 --- a/chatgpt/duckduckgpt/docs/README.md +++ b/chatgpt/duckduckgpt/docs/README.md @@ -527,7 +527,6 @@ When disabled, a ChatGPT account is required to fetch responses. If OpenAI API i ## 📣 Social links -[![](https://img.shields.io/mastodon/follow/111075576869014999?domain=https%3A%2F%2Ftechnodon.org&style=social "Follow @kudoai on Mastodon (technodon.org)")](https://technodon.org/@kudoai?utm_source=duckduckgpt&utm_content=github_shield) [![](https://img.shields.io/badge/Follow%20company%2fkudo--ai-151-blue?logo=linkedin&style=social "Follow company/kudo-ai on LinkedIn")](https://linkedin.com/company/kudo-ai) [![](https://img.shields.io/github/followers/kudoai?label=Follow%20%40kudoai&style=social "Follow @kudoai on GitHub")](https://github.com/KudoAI) [![](https://img.shields.io/youtube/channel/subscribers/UCdwQlbPJW3RbkLcHh_DGb0g?label=Follow%20%40kudoailabs&style=social "Follow @kudoailabs on YouTube")](https://www.youtube.com/@kudoailabs?sub_confirmation=1) diff --git a/chatgpt/duckduckgpt/duckduckgpt.user.js b/chatgpt/duckduckgpt/duckduckgpt.user.js index e30621596..ced50f490 100644 --- a/chatgpt/duckduckgpt/duckduckgpt.user.js +++ b/chatgpt/duckduckgpt/duckduckgpt.user.js @@ -148,7 +148,7 @@ // @description:zu Yengeza izimpendulo ze-AI ku-DuckDuckGo (inikwa amandla yi-GPT-4o!) // @author KudoAI // @namespace https://kudoai.com -// @version 2026.6.17.1 +// @version 2026.6.27 // @license MIT // @icon https://cdn.jsdelivr.net/gh/KudoAI/duckduckgpt@e73859f/assets/images/icons/app/icon48.png // @icon64 https://cdn.jsdelivr.net/gh/KudoAI/duckduckgpt@e73859f/assets/images/icons/app/icon64.png @@ -194,7 +194,7 @@ // @connect duckduckgpt.com // @connect fanyi.sogou.com // @connect raw.githubusercontent.com -// @require https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js@4.14.2/dist/chatgpt.min.js#sha256-HU+GlQoVScXwWgqL0tYKNSTLQhDsLkH3F6TSucijFWI= +// @require https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js@4.15.0/dist/chatgpt.min.js#sha256-RglS1MscMHGDI7nq1v0OXEHoEw8stDxErRzSuILzCrQ= // @require https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.2.0/crypto-js.min.js#sha256-dppVXeVTurw1ozOPNE3XqhYmDJPOosfbKQcHyQSE58w= // @require https://cdn.jsdelivr.net/npm/json5@2.2.3/dist/index.min.js#sha256-S7ltnVPzgKyAGBlBG4wQhorJqYTehj5WQCrADCKJufE= // @require https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@130fe5e/assets/js/chatbot/components/buttons.js#sha256-1EdgOW0kQxjTTzgMz/4JScPw5i04gPsKVBXPA0xQWDg= diff --git a/chatgpt/googlegpt/googlegpt.user.js b/chatgpt/googlegpt/googlegpt.user.js index c64b4eddb..71b499a38 100644 --- a/chatgpt/googlegpt/googlegpt.user.js +++ b/chatgpt/googlegpt/googlegpt.user.js @@ -149,7 +149,7 @@ // @description:zu Yengeza izimpendulo ze-AI ku-Google Search (inikwa amandla yi-Google Gemma + GPT-4o!) // @author KudoAI // @namespace https://kudoai.com -// @version 2026.6.17.1 +// @version 2026.6.27 // @license MIT // @icon data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22170.667%22%20height=%22170.667%22%3E%3Cstyle%3E:root%7B--fill:%23000%7D@media%20(prefers-color-scheme:dark)%7B:root%7B--fill:%23fff%7D%7D%3C/style%3E%3Cpath%20fill=%22var(--fill)%22%20d=%22M82.346%20159.79c-18.113-1.815-31.78-9.013-45.921-24.184C23.197%20121.416%2017.333%20106.18%2017.333%2086c0-21.982%205.984-36.245%2021.87-52.131C55.33%2017.74%2069.27%2011.867%2091.416%2011.867c17.574%200%2029.679%203.924%2044.309%2014.363l8.57%206.116-8.705%208.705-8.704%208.704-4.288-3.608c-13.91-11.704-35.932-14.167-53.085-5.939-3.4%201.631-9.833%206.601-14.297%2011.045C44.669%2061.753%2040.95%2070.811%2040.95%2086c0%2014.342%203.594%2023.555%2013.26%2033.995%2019.088%2020.618%2048.46%2022.539%2070.457%204.608l5.333-4.348%2011.333%203.844c6.234%202.114%2011.54%203.857%2011.791%203.873.252.015-2.037%203.008-5.087%206.65-6.343%207.577-20.148%2017.217-30.493%2021.295-8.764%203.454-23.358%205.06-35.198%203.873zM92%2086.333V74.667h60.648l-11.41%2011.41-11.411%2011.41-18.914.257L92%2098z%22/%3E%3C/svg%3E // @icon64 data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22170.667%22%20height=%22170.667%22%3E%3Cstyle%3E:root%7B--fill:%23000%7D@media%20(prefers-color-scheme:dark)%7B:root%7B--fill:%23fff%7D%7D%3C/style%3E%3Cpath%20fill=%22var(--fill)%22%20d=%22M82.346%20159.79c-18.113-1.815-31.78-9.013-45.921-24.184C23.197%20121.416%2017.333%20106.18%2017.333%2086c0-21.982%205.984-36.245%2021.87-52.131C55.33%2017.74%2069.27%2011.867%2091.416%2011.867c17.574%200%2029.679%203.924%2044.309%2014.363l8.57%206.116-8.705%208.705-8.704%208.704-4.288-3.608c-13.91-11.704-35.932-14.167-53.085-5.939-3.4%201.631-9.833%206.601-14.297%2011.045C44.669%2061.753%2040.95%2070.811%2040.95%2086c0%2014.342%203.594%2023.555%2013.26%2033.995%2019.088%2020.618%2048.46%2022.539%2070.457%204.608l5.333-4.348%2011.333%203.844c6.234%202.114%2011.54%203.857%2011.791%203.873.252.015-2.037%203.008-5.087%206.65-6.343%207.577-20.148%2017.217-30.493%2021.295-8.764%203.454-23.358%205.06-35.198%203.873zM92%2086.333V74.667h60.648l-11.41%2011.41-11.411%2011.41-18.914.257L92%2098z%22/%3E%3C/svg%3E// @compatible brave @@ -382,7 +382,7 @@ // @connect fanyi.sogou.com // @connect raw.githubusercontent.com // @connect scriptcat.org -// @require https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js@4.14.2/dist/chatgpt.min.js#sha256-HU+GlQoVScXwWgqL0tYKNSTLQhDsLkH3F6TSucijFWI= +// @require https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js@4.15.0/dist/chatgpt.min.js#sha256-RglS1MscMHGDI7nq1v0OXEHoEw8stDxErRzSuILzCrQ= // @require https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.2.0/crypto-js.min.js#sha256-dppVXeVTurw1ozOPNE3XqhYmDJPOosfbKQcHyQSE58w= // @require https://cdn.jsdelivr.net/npm/json5@2.2.3/dist/index.min.js#sha256-S7ltnVPzgKyAGBlBG4wQhorJqYTehj5WQCrADCKJufE= // @require https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@130fe5e/assets/js/chatbot/components/buttons.js#sha256-1EdgOW0kQxjTTzgMz/4JScPw5i04gPsKVBXPA0xQWDg= @@ -390,7 +390,7 @@ // @require https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@5045b1d/assets/js/chatbot/components/menus.js#sha256-13HZm6QRq/dxVbeR2RmeiYmovD8XP/FTwiercFv4nm8= // @require https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@54d802d/assets/js/chatbot/components/replyBubble.js#sha256-hfm7kB1xZMyMT3pmMzmq6IdM6FWEjl9DSGtzUL1RZlI= // @require https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@54d802d/assets/js/chatbot/components/tooltip.js#sha256-VaSjsJ9RE8pe5fXrRFdy1lBT73KGDAC2DUb4UWpy3T8= -// @require https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@f93a944/assets/js/chatbot/lib/api.js#sha256-PiRrvXkn06TU0GjMXy+ChXlR7ZwFXUDEw3eExyNA0M4= +// @require https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@0bab5a8/assets/js/chatbot/lib/api.js#sha256-lZDUcdki4/4DcKN3++xh67epyfVHUCTzMqukQn4Ff3I= // @require https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@54d802d/assets/js/chatbot/lib/feedback.js#sha256-VB/w0tQj4AeZ+XYgFXendWx9uUroimUgCjl4LHQchx4= // @require https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@beedf43/assets/js/chatbot/lib/log.js#sha256-++SE7OgyoPZhNJ+cLiqSraFJCs59qVUhRm0vr1dCznY= // @require https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@54d802d/assets/js/chatbot/lib/prompts.js#sha256-zQqAHklFJcr4O5DgBoI9fSRm4SDko8ra3vPjYCm2Z4Q= diff --git a/github/github-star-history/github-star-history.user.js b/github/github-star-history/github-star-history.user.js index 05b85632a..db5ab624b 100644 --- a/github/github-star-history/github-star-history.user.js +++ b/github/github-star-history/github-star-history.user.js @@ -13,7 +13,7 @@ // @description:zh-TW 將明星曆史圖表添加到 GitHub 存儲庫的側邊欄 // @author Adam Lui // @namespace https://github.com/adamlui -// @version 2026.4.17 +// @version 2026.6.27 // @license MIT // @icon data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%2248%22%20height=%2248%22%20viewBox=%220%200%2048%2048%22%3E%3Cstyle%3E:root%7B--fill:%23000%7D@media%20(prefers-color-scheme:dark)%7B:root%7B--fill:%23fff%7D%7D%3C/style%3E%3Cpath%20fill=%22var(--fill)%22%20d=%22M24%201.9a21.6%2021.6%200%200%200-6.8%2042.2c1%20.2%201.8-.9%201.8-1.8v-2.9c-6%201.3-7.9-2.9-7.9-2.9a6.5%206.5%200%200%200-2.2-3.2c-2-1.4.1-1.3.1-1.3a4.3%204.3%200%200%201%203.3%202c1.7%202.9%205.5%202.6%206.7%202.1a5.4%205.4%200%200%201%20.5-2.9C12.7%2032%209%2028%209%2022.6a10.7%2010.7%200%200%201%202.9-7.6%206.2%206.2%200%200%201%20.3-6.4%208.9%208.9%200%200%201%206.4%202.9%2015.1%2015.1%200%200%201%205.4-.8%2017.1%2017.1%200%200%201%205.4.7%209%209%200%200%201%206.4-2.8%206.5%206.5%200%200%201%20.4%206.4%2010.7%2010.7%200%200%201%202.8%207.6c0%205.4-3.7%209.4-10.5%2010.6a5.4%205.4%200%200%201%20.5%202.9v6.2a1.8%201.8%200%200%200%201.9%201.8A21.7%2021.7%200%200%200%2024%201.9Z%22/%3E%3C/svg%3E // @icon64 data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%2264%22%20height=%2264%22%20viewBox=%220%200%2048%2048%22%3E%3Cstyle%3E:root%7B--fill:%23000%7D@media%20(prefers-color-scheme:dark)%7B:root%7B--fill:%23fff%7D%7D%3C/style%3E%3Cpath%20fill=%22var(--fill)%22%20d=%22M24%201.9a21.6%2021.6%200%200%200-6.8%2042.2c1%20.2%201.8-.9%201.8-1.8v-2.9c-6%201.3-7.9-2.9-7.9-2.9a6.5%206.5%200%200%200-2.2-3.2c-2-1.4.1-1.3.1-1.3a4.3%204.3%200%200%201%203.3%202c1.7%202.9%205.5%202.6%206.7%202.1a5.4%205.4%200%200%201%20.5-2.9C12.7%2032%209%2028%209%2022.6a10.7%2010.7%200%200%201%202.9-7.6%206.2%206.2%200%200%201%20.3-6.4%208.9%208.9%200%200%201%206.4%202.9%2015.1%2015.1%200%200%201%205.4-.8%2017.1%2017.1%200%200%201%205.4.7%209%209%200%200%201%206.4-2.8%206.5%206.5%200%200%201%20.4%206.4%2010.7%2010.7%200%200%201%202.8%207.6c0%205.4-3.7%209.4-10.5%2010.6a5.4%205.4%200%200%201%20.5%202.9v6.2a1.8%201.8%200%200%200%201.9%201.8A21.7%2021.7%200%200%200%2024%201.9Z%22/%3E%3C/svg%3E @@ -25,7 +25,7 @@ // @connect api.star-history.com // @connect cdn.jsdelivr.net // @connect raw.githubusercontent.com -// @require https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@7595cd7/assets/js/lib/dom.js/dist/dom.min.js#sha256-xovdxRnmYD/eCgBiGCu5+Vd3+WWIvLUKVtU/MnRueeU= +// @require https://cdn.jsdelivr.net/gh/adamlui/userscripts@ff2baba/assets/js/lib/dom.js/dist/dom.min.js#sha256-nTc2by3ZAz6AR7B8fOqjloJNETvjAepe15t2qlghMDo= // @resource rpgCSS https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@727feff/assets/styles/rising-particles/dist/gray.min.css#sha256-48sEWzNUGUOP04ur52G5VOfGZPSnZQfrF3szUr4VaRs= // @resource rpwCSS https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@727feff/assets/styles/rising-particles/dist/white.min.css#sha256-6xBXczm7yM1MZ/v0o1KVFfJGehHk47KJjq8oTktH4KE= // @grant GM_getResourceText diff --git a/github/github-widescreen/github-widescreen.user.js b/github/github-widescreen/github-widescreen.user.js index 952da3c85..f5736936f 100644 --- a/github/github-widescreen/github-widescreen.user.js +++ b/github/github-widescreen/github-widescreen.user.js @@ -13,13 +13,13 @@ // @description:zh-TW 自動隱藏 GitHub 上引人注目的側面板 // @author Adam Lui // @namespace https://github.com/adamlui -// @version 2026.1.28 +// @version 2026.6.27 // @license MIT // @icon data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%2248%22%20height=%2248%22%20viewBox=%220%200%2048%2048%22%3E%3Cstyle%3E:root%7B--fill:%23000%7D@media%20(prefers-color-scheme:dark)%7B:root%7B--fill:%23fff%7D%7D%3C/style%3E%3Cpath%20fill=%22var(--fill)%22%20d=%22M24%201.9a21.6%2021.6%200%200%200-6.8%2042.2c1%20.2%201.8-.9%201.8-1.8v-2.9c-6%201.3-7.9-2.9-7.9-2.9a6.5%206.5%200%200%200-2.2-3.2c-2-1.4.1-1.3.1-1.3a4.3%204.3%200%200%201%203.3%202c1.7%202.9%205.5%202.6%206.7%202.1a5.4%205.4%200%200%201%20.5-2.9C12.7%2032%209%2028%209%2022.6a10.7%2010.7%200%200%201%202.9-7.6%206.2%206.2%200%200%201%20.3-6.4%208.9%208.9%200%200%201%206.4%202.9%2015.1%2015.1%200%200%201%205.4-.8%2017.1%2017.1%200%200%201%205.4.7%209%209%200%200%201%206.4-2.8%206.5%206.5%200%200%201%20.4%206.4%2010.7%2010.7%200%200%201%202.8%207.6c0%205.4-3.7%209.4-10.5%2010.6a5.4%205.4%200%200%201%20.5%202.9v6.2a1.8%201.8%200%200%200%201.9%201.8A21.7%2021.7%200%200%200%2024%201.9Z%22/%3E%3C/svg%3E // @icon64 data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%2264%22%20height=%2264%22%20viewBox=%220%200%2048%2048%22%3E%3Cstyle%3E:root%7B--fill:%23000%7D@media%20(prefers-color-scheme:dark)%7B:root%7B--fill:%23fff%7D%7D%3C/style%3E%3Cpath%20fill=%22var(--fill)%22%20d=%22M24%201.9a21.6%2021.6%200%200%200-6.8%2042.2c1%20.2%201.8-.9%201.8-1.8v-2.9c-6%201.3-7.9-2.9-7.9-2.9a6.5%206.5%200%200%200-2.2-3.2c-2-1.4.1-1.3.1-1.3a4.3%204.3%200%200%201%203.3%202c1.7%202.9%205.5%202.6%206.7%202.1a5.4%205.4%200%200%201%20.5-2.9C12.7%2032%209%2028%209%2022.6a10.7%2010.7%200%200%201%202.9-7.6%206.2%206.2%200%200%201%20.3-6.4%208.9%208.9%200%200%201%206.4%202.9%2015.1%2015.1%200%200%201%205.4-.8%2017.1%2017.1%200%200%201%205.4.7%209%209%200%200%201%206.4-2.8%206.5%206.5%200%200%201%20.4%206.4%2010.7%2010.7%200%200%201%202.8%207.6c0%205.4-3.7%209.4-10.5%2010.6a5.4%205.4%200%200%201%20.5%202.9v6.2a1.8%201.8%200%200%200%201.9%201.8A21.7%2021.7%200%200%200%2024%201.9Z%22/%3E%3C/svg%3E // @match *://github.com/* // @connect raw.githubusercontent.com -// @require https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@7595cd7/assets/js/lib/dom.js/dist/dom.min.js#sha256-xovdxRnmYD/eCgBiGCu5+Vd3+WWIvLUKVtU/MnRueeU= +// @require https://cdn.jsdelivr.net/gh/adamlui/userscripts@ff2baba/assets/js/lib/dom.js/dist/dom.min.js#sha256-nTc2by3ZAz6AR7B8fOqjloJNETvjAepe15t2qlghMDo= // @resource rpgCSS https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@727feff/assets/styles/rising-particles/dist/gray.min.css#sha256-48sEWzNUGUOP04ur52G5VOfGZPSnZQfrF3szUr4VaRs= // @resource rpwCSS https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@727feff/assets/styles/rising-particles/dist/white.min.css#sha256-6xBXczm7yM1MZ/v0o1KVFfJGehHk47KJjq8oTktH4KE= // @grant GM_getResourceText diff --git a/package-lock.json b/package-lock.json index ce2a2384b..c897c7553 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,10 +6,6 @@ "": { "name": "@adamlui/userscripts", "funding": [ - { - "type": "cashapp", - "url": "https://cash.app/$AdamLui" - }, { "type": "github", "url": "http://github.com/sponsors/adamlui" @@ -33,7 +29,7 @@ "cross-spawn": "^7.0.6", "eslint": "^10.3.0", "eslint-plugin-import-x": "^4.17.0", - "eslint-plugin-regexp": "^3.1.0", + "eslint-plugin-regexp": "^3.1.1", "globals": "^17.7.0", "husky": "^9.1.7", "ssri": "^14.0.0" @@ -1155,9 +1151,9 @@ } }, "node_modules/eslint-plugin-regexp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-3.1.0.tgz", - "integrity": "sha512-qGXIC3DIKZHcK1H9A9+Byz9gmndY6TTSRkSMTZpNXdyCw2ObSehRgccJv35n9AdUakEjQp5VFNLas6BMXizCZg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-3.1.1.tgz", + "integrity": "sha512-MxR5nqoQCtVWmJwia0D2+NlXX1xzdpkslsVOZLEYQ4PQWEaL65PCZXURxaBc3lPnkNFpNxzMIRmYVxdl8giXRA==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 6a967df68..faaa23744 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,6 @@ { "name": "@adamlui/userscripts", + "private": true, "description": "Greasemonkey userscripts", "author": { "name": "Adam Lui", @@ -13,10 +14,6 @@ }, "license": "MIT", "funding": [ - { - "type": "cashapp", - "url": "https://cash.app/$AdamLui" - }, { "type": "github", "url": "http://github.com/sponsors/adamlui" @@ -44,9 +41,12 @@ "lint:fix-all": "eslint . --fix", "build:js": "minify-js assets/js dist --relative-output", "bump:chatbots": "node utils/bump/chatbots --cache", - "bump:chatbots-nc": "node utils/bump/chatbots --cache --no-commit", - "bump:chatbots-np": "node utils/bump/chatbots --cache --no-push", - "bump:res": "node utils/bump/resources --cache" + "bump:chatbots-nc": "npm run bump:chatbots --no-commit", + "bump:chatbots-np": "npm run bump:chatbots --no-push", + "bump:chatbot": "npm run bump:chatbots", + "bump:chatbot-nc": "npm run bump:chatbots-nc", + "bump:chatbot-np": "npm run bump:chatbots-np", + "bump:res": "node utils/bump/userscript-requires --cache" }, "devDependencies": { "@adamlui/minify.js": "^2.5.3", @@ -57,7 +57,7 @@ "cross-spawn": "^7.0.6", "eslint": "^10.3.0", "eslint-plugin-import-x": "^4.17.0", - "eslint-plugin-regexp": "^3.1.0", + "eslint-plugin-regexp": "^3.1.1", "globals": "^17.7.0", "husky": "^9.1.7", "ssri": "^14.0.0" diff --git a/utils/bump/chatbots.js b/utils/bump/chatbots.js index 9cebfb1a3..e3bf93d57 100644 --- a/utils/bump/chatbots.js +++ b/utils/bump/chatbots.js @@ -2,74 +2,73 @@ // Bumps @version in chatbot userscripts -// NOTE: Pass --cache to use cachePaths.chatbotPaths for faster init +// NOTE: Pass --cache to use script.cache.paths.chatbotPaths for faster init // NOTE: Pass <--commit-msg|-m> "msg" to commit w/ msg // NOTE: Pass <--no-push|-np> to skip git push -(async () => { - 'use strict' +'use strict' - const chatbots = ['amazongpt', 'bravegpt', 'duckduckgpt', 'googlegpt'] +;(async () => { - // Parse ARGS - const args = process.argv.slice(2) - const config = { - cacheMode: args.some(arg => arg.startsWith('--cache')), - commitMsg: (() => { - const msgIdx = args.findIndex(arg => ['--commit-msg', '-m'].includes(arg)) - return msgIdx != -1 && args[msgIdx +1] ? args[msgIdx +1].replace(/^"|"$/g, '') : null - })(), - noPush: args.some(arg => ['--no-push', '-np'].includes(arg)) - } + const { execSync, spawnSync } = require('child_process'), + fs = require('fs'), + path = require('path') - // Import LIBS - const fs = require('fs'), // to read/write files - path = require('path'), // to manipulate paths - { execSync, spawnSync } = require('child_process') // for git cmds + const args = process.argv.slice(2) - // Init CACHE paths - const cachePaths = { root: '.cache' } - cachePaths.bumpUtils = path.join(__dirname, `${cachePaths.root}/bump.min.mjs`) - cachePaths.chatbotPaths = path.join(__dirname, `${cachePaths.root}/chatbot-paths.json`) + const script = { + cache: { paths: { root: '.cache' }, refs: {} }, + chatbots: ['amazongpt', 'bravegpt', 'duckduckgpt', 'googlegpt'], + config: { + cache: args.some(arg => arg.startsWith('--cache')), + commitMsg: (() => { + const idx = args.findIndex(arg => ['--commit-msg', '-m'].includes(arg)) + return idx != -1 && args[idx +1] ? args[idx +1].replace(/^"|"$/g, '') : null + })(), + noPush: args.some(arg => ['--no-push', '-np'].includes(arg)) + }, + urls: { bumpmjs: 'https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions/utils/bump/lib/bump.min.mjs' } + } + script.cache.paths.bumpmjs = path.join(process.cwd(), `${script.cache.paths.root}/bump.min.mjs`) + script.cache.paths.chatbotPaths = path.join(process.cwd(), `${script.cache.paths.root}/chatbot-paths.json`) + const { cache: { paths: cachePaths }} = script - // Import BUMP UTILS - fs.mkdirSync(path.dirname(cachePaths.bumpUtils), { recursive: true }) - fs.writeFileSync(cachePaths.bumpUtils, (await (await fetch( - 'https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@f63b650/utils/bump/lib/bump.min.mjs')).text())) - const bump = await import(`file://${cachePaths.bumpUtils}`) ; fs.unlinkSync(cachePaths.bumpUtils) + // Import bump.mjs + fs.mkdirSync(path.dirname(cachePaths.bumpmjs), { recursive: true }) + fs.writeFileSync(cachePaths.bumpmjs, (await (await fetch(script.urls.bumpmjs)).text())) + const bump = await import(`file://${cachePaths.bumpmjs}`) + fs.unlinkSync(cachePaths.bumpmjs) - // COLLECT chatbot userscripts - bump.log.working(`\n${ config.cacheMode ? 'Collecting' : 'Searching for' } chatbot userscripts...\n`) + bump.log.working(`\n${ script.config.cache ? 'Collecting' : 'Searching for' } chatbot userscripts...\n`) let chatbotFiles = [] - if (config.cacheMode) + if (script.config.cache) try { // create missing cache file fs.mkdirSync(path.dirname(cachePaths.chatbotPaths), { recursive: true }) const fd = fs.openSync(cachePaths.chatbotPaths, fs.constants.O_CREAT | fs.constants.O_EXCL | fs.constants.O_RDWR) bump.log.info(`Cache file missing. Generating ${cachePaths.chatbotPaths}...\n`) - for (const chatbot of chatbots) + for (const chatbot of script.chatbots) chatbotFiles.push(...(await bump.findFileBySuffix({ suffix: `${chatbot}.user.js` }))) fs.writeFileSync(fd, JSON.stringify(chatbotFiles, undefined, 2), 'utf-8') bump.log.success(`\nCache file created @ ${cachePaths.chatbotPaths}`) } catch (err) { // use existing cache file chatbotFiles = JSON.parse(fs.readFileSync(cachePaths.chatbotPaths, 'utf-8')) - console.log(chatbotFiles) ; console.log('') + console.log(chatbotFiles) + console.log('') } else { // use bump.findFileBySuffix() - for (const chatbot of chatbots) + for (const chatbot of script.chatbots) chatbotFiles.push(...(await bump.findFileBySuffix({ suffix: `${chatbot}.user.js` }))) console.log('') } - // PROCESS each userscript - let filesUpdatedCnt = 0 - const bumpedChatbots = {} + let filesUpdatedCnt = 0 ; const bumpedChatbots = {} for (const chatbotFile of chatbotFiles) { const chatbotName = path.basename(chatbotFile, '.user.js') bump.log.working(`\nProcessing ${chatbotName}...\n`) - const bumpResult = bump.bumpVersion({ format: 'dateVer', filePath: chatbotFile }) - if (bumpResult) { - const { oldVer, newVer } = bumpResult + const result = bump.bumpVersion({ format: 'dateVer', filePath: chatbotFile }) + if (result) { + const { oldVer, newVer } = result bump.log.success(`${chatbotName} version bumped!\n`) filesUpdatedCnt++ bumpedChatbots[chatbotFile] = { oldVer, newVer } @@ -79,39 +78,39 @@ } } - // LOG chatbots bumped const pluralSuffix = filesUpdatedCnt > 1 ? 's' : '' if (filesUpdatedCnt == 0) { - bump.log.info('Completed. No chatbots bumped.') ; process.exit(0) - } else bump.log.success(`${filesUpdatedCnt} chatbot${pluralSuffix} bumped!`) + bump.log.info('Completed. No chatbots bumped.') + process.exit(0) + } else + bump.log.success(`${filesUpdatedCnt} chatbot${pluralSuffix} bumped!`) - // ADD/COMMIT/PUSH bump(s) - if (config.commitMsg) { + if (script.config.commitMsg) { bump.log.working(`\nCommitting bump${pluralSuffix} to Git...\n`) try { execSync('git add ./*.user.js') bump.initKudoSyncBot() - spawnSync('git', ['commit', '-n', '-m', config.commitMsg], { stdio: 'inherit', encoding: 'utf-8' }) - console.log('') // line break - if (!config.noPush) { + spawnSync('git', ['commit', '-n', '-m', script.config.commitMsg], { stdio: 'inherit', encoding: 'utf-8' }) + console.log('') + if (!script.config.noPush) { bump.log.working('\nPulling latest changes from remote to sync local repository...\n') execSync('git pull') bump.log.working(`\nPushing bump${pluralSuffix} to Git...\n`) execSync('git push') } bump.log.success(`Success! ${filesUpdatedCnt} chatbot${pluralSuffix} updated/committed${ - !config.noPush ? '/pushed' : '' } to GitHub`) - } catch (err) { bump.log.error('Git operation failed: ' + err.message) } + !script.config.noPush ? '/pushed' : '' } to GitHub`) + } catch (err) { + bump.log.error(`Git operation failed: ${err.message}`) + } } else { bump.log.working(`\nNo commit message provided. Skipping git operations.`) bump.log.info(`TIP: Use --commit-msg "msg" or -m "msg" to commit changes.`) } - // Final SUMMARY log - console.log('') // line break + console.log('') Object.entries(bumpedChatbots).forEach(([chatbotFile, { oldVer, newVer }]) => console.log(` ± ${path.basename(chatbotFile)} ${ bump.colors.bw}v${oldVer}${bump.colors.nc} → ${bump.colors.bg}v${newVer}${bump.colors.nc}`) ) - })() diff --git a/utils/bump/resources.js b/utils/bump/resources.js deleted file mode 100644 index 573f49da8..000000000 --- a/utils/bump/resources.js +++ /dev/null @@ -1,135 +0,0 @@ -#!/usr/bin/env node - -// Bumps @require'd JS in userscripts - -// NOTE: Doesn't git commit to allow script editing from breaking changes -// NOTE: Pass --cache to use cachePaths.userJSpaths for faster init - -(async () => { - 'use strict' - - // Parse ARGS - const args = process.argv.slice(2), - config = { cacheMode: args.some(arg => arg.startsWith('--cache')) } - - // Import LIBS - const fs = require('fs'), // to read/write files - path = require('path') // to manipulate paths - - // Init CACHE paths - const cachePaths = { root: '.cache' } - cachePaths.bumpUtils = path.join(__dirname, `${cachePaths.root}/bump.min.mjs`) - cachePaths.userJSpaths = path.join(__dirname, `${cachePaths.root}/userscript-paths.json`) - - // Import BUMP UTILS - fs.mkdirSync(path.dirname(cachePaths.bumpUtils), { recursive: true }) - fs.writeFileSync(cachePaths.bumpUtils, (await (await fetch( - 'https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions@f63b650/utils/bump/lib/bump.min.mjs')).text())) - const bump = await import(`file://${cachePaths.bumpUtils}`) ; fs.unlinkSync(cachePaths.bumpUtils) - - // Init REGEX - const regEx = { - hash: { commit: /(@|\?v=)([^/#]+)/, sri: /[^#]+$/ }, - resName: /[^/]+\/(?:dist)?\/?[^/]+\.js(?=[?#]|$)/, - jsURL: /^\/\/ @require\s+(https:\/\/cdn\.jsdelivr\.net\/gh\/.+)$/ - } - - // Collect userscripts - bump.log.working(`\n${ config.cacheMode ? 'Collecting' : 'Searching for' } userscripts...\n`) - let userJSfiles - if (config.cacheMode) { - try { // create missing cache file - fs.mkdirSync(path.dirname(cachePaths.userJSpaths), { recursive: true }) - const fd = fs.openSync(cachePaths.userJSpaths, - fs.constants.O_CREAT | fs.constants.O_EXCL | fs.constants.O_RDWR) - bump.log.info(`Cache file missing. Generating ${cachePaths.userJSpaths}...\n`) - userJSfiles = await bump.findFileBySuffix({ suffix: '.user.js' }) ; console.log('') - fs.writeFileSync(fd, JSON.stringify(userJSfiles, undefined, 2), 'utf-8') - bump.log.success(`\nCache file created @ ${cachePaths.userJSpaths}`) - } catch (err) { // use existing cache file - userJSfiles = JSON.parse(fs.readFileSync(cachePaths.userJSpaths, 'utf-8')) - console.log(userJSfiles) ; console.log('') - } - } else { // use bump.findFileBySuffix() - userJSfiles = await bump.findFileBySuffix({ suffix: '.user.js' }) ; console.log('') } - - // Collect resources - bump.log.working('\nCollecting resources...\n') - const urlMap = {} ; let resCnt = 0 - userJSfiles.forEach(userJSfilePath => { - const userJScontent = fs.readFileSync(userJSfilePath, 'utf-8'), - resURLs = [...userJScontent.matchAll(new RegExp(regEx.jsURL.source, 'gm'))].map(match => match[1]) - if (resURLs?.length) { urlMap[userJSfilePath] = resURLs ; resCnt += resURLs.length } - }) - bump.log.success(`${resCnt} potentially bumpable resource(s) found.`) - - // Fetch latest commit hashes - bump.log.working('\nFetching latest commit hashes...\n') - const latestCommitHashes = { - aiweb: await bump.getLatestCommitHash({ repo: 'adamlui/ai-web-extensions' }), - userscripts: await bump.getLatestCommitHash({ repo: 'adamlui/userscripts' }) - } - - // Process each userscript - let urlsUpdatedCnt = 0 ; let filesUpdatedCnt = 0 - for (const userJSfilePath of Object.keys(urlMap)) { - const repoName = userJSfilePath.split('\\').pop().replace('.user.js', '') - bump.log.working(`\nProcessing ${repoName}...\n`) - - // Fetch latest commit hash for repo/chromium/extension - if (urlMap[userJSfilePath].some(url => url.includes(repoName))) { - console.log('Fetching latest commit hash for Chromium extension...') - latestCommitHashes.chromium = await bump.getLatestCommitHash( - { repo: `adamlui/${repoName}`, path: 'chromium/extension' }) - } - - // Process each resource - let fileUpdated = false - for (const resURL of urlMap[userJSfilePath]) { - if (!await bump.isValidResource({ resURL, verbose: false })) continue // to next resource - const resName = regEx.resName.exec(resURL)?.[0] || 'resource' // dir/filename for logs - - // Compare/update commit hash - let resLatestCommitHash = latestCommitHashes[ - resURL.includes('/ai-web-extensions@') ? 'aiweb' - : resURL.includes('/userscripts@') ? 'userscripts' - : 'chromium' - ] - if (resLatestCommitHash.startsWith( // compare hashes - regEx.hash.commit.exec(resURL)?.[2] || '')) { // commit hash didn't change... - console.log(`${resName} already up-to-date!`) ; bump.log.endedWithLineBreak = false - continue // ...so skip resource - } - resLatestCommitHash = resLatestCommitHash.substring(0, 7) // abbr it - let updatedURL = resURL.replace(regEx.hash.commit, `$1${resLatestCommitHash}`) // update hash - if (!await bump.isValidResource({ resURL: updatedURL, verbose: false })) continue // to next resource - - // Generate/compare/update SRI hash - console.log(`${ !bump.log.endedWithLineBreak ? '\n' : '' }Generating SRI (SHA-256) hash for ${resName}...`) - const newSRIhash = await bump.generateSRIhash({ resURL: updatedURL }) - if (regEx.hash.sri.exec(resURL)?.[0] == newSRIhash) { // SRI hash didn't change - console.log(`${resName} already up-to-date!`) ; bump.log.endedWithLineBreak = false - continue // ...so skip resource - } - updatedURL = updatedURL.replace(regEx.hash.sri, newSRIhash) // update hash - if (!await bump.isValidResource({ resURL: updatedURL, verbose: false })) continue // to next resource - - // Write updated URL to userscript - console.log(`Writing updated URL for ${resName}...`) - const userJScontent = fs.readFileSync(userJSfilePath, 'utf-8') - fs.writeFileSync(userJSfilePath, userJScontent.replace(resURL, updatedURL), 'utf-8') - bump.log.success(`${resName} bumped!\n`) ; urlsUpdatedCnt++ ; fileUpdated = true - } - if (fileUpdated) { - console.log(`${ !bump.log.endedWithLineBreak ? '\n' : '' }Bumping userscript version...`) - bump.bumpVersion({ format: 'dateVer', filePath: userJSfilePath }) ; filesUpdatedCnt++ - } - } - - // Log final summary - bump.log[urlsUpdatedCnt ? 'success' : 'info']( - `\n${ urlsUpdatedCnt ? 'Success! ' : '' }${ - urlsUpdatedCnt} resource(s) bumped across ${filesUpdatedCnt} file(s).` - ) - -})() diff --git a/utils/bump/userscript-requires.js b/utils/bump/userscript-requires.js new file mode 100644 index 000000000..b2f8908b5 --- /dev/null +++ b/utils/bump/userscript-requires.js @@ -0,0 +1,184 @@ +#!/usr/bin/env node + +// Bumps @require'd jsDelivr URLs in userscript + +// NOTE: Doesn't git commit to allow script editing from breaking changes +// NOTE: Pass --cache to use script.cache.paths.userscripts for faster init +// NOTE: Pass --suffix to override file suffix (default: .user.js) + +'use strict' + +;(async () => { + + const fs = require('fs'), + path = require('path') + + const args = process.argv.slice(2) + + const script = { + cache: { paths: { root: '.cache' }, refs: {} }, + modes: { cache: args.some(arg => arg.startsWith('--cache')) }, + regex: { + hash: { commit: { full: /^[a-f\d]{40}$/i, inline: /(@|\?v=)([^/#]+)/ }, sri: /[^#]+$/ }, + resName: /[^/]+\/(?:dist)?\/?[^/]+\.js(?=[?#]|$)/, + urls: { + chatgptjs: /(https:\/\/cdn\.jsdelivr\.net\/npm\/@kudoai\/chatgpt\.js@)([\d.]+)(\/dist\/chatgpt\.min\.js)(#sha256-\S+)?/g, + jsdelivr: /^\/\/ @require\s+(https:\/\/cdn\.jsdelivr\.net\/gh\/.+)$/ + }, + verTag: /^v\d+\.\d+\.\d+$/ + }, + urls: { + apis: { + npm: { chatgptjs: 'https://registry.npmjs.org/@kudoai/chatgpt.js' }, + github: { repos: 'https://api.github.com/repos' } + }, + bumpmjs: 'https://cdn.jsdelivr.net/gh/adamlui/ai-web-extensions/utils/bump/lib/bump.min.mjs' + }, + userscriptName: args.find(arg => arg.startsWith('--suffix='))?.split('=')[1] || '.user.js' + } + script.cache.paths.bumpmjs = path.join(process.cwd(), `${script.cache.paths.root}/bump.min.mjs`) + script.cache.paths.userscripts = path.join(process.cwd(), `${script.cache.paths.root}/userscripts.json`) + const { cache: { paths: cachePaths }, regex: re } = script + + // Import bump.mjs + fs.mkdirSync(path.dirname(cachePaths.bumpmjs), { recursive: true }) + fs.writeFileSync(cachePaths.bumpmjs, (await (await fetch(script.urls.bumpmjs)).text())) + const bump = await import(`file://${cachePaths.bumpmjs}`) + fs.unlinkSync(cachePaths.bumpmjs) + + bump.log.working(`\n${ script.modes.cache ? 'Collecting' : 'Searching for' } userscripts...\n`) + let userscripts + if (script.modes.cache) { + try { // create missing cache file + fs.mkdirSync(path.dirname(cachePaths.userscripts), { recursive: true }) + const fd = fs.openSync(cachePaths.userscripts, + fs.constants.O_CREAT | fs.constants.O_EXCL | fs.constants.O_RDWR) + bump.log.info(`Cache file missing. Generating ${cachePaths.userscripts}...\n`) + userscripts = await bump.findFileBySuffix({ suffix: script.userscriptName }) + console.log('') + fs.writeFileSync(fd, JSON.stringify(userscripts, undefined, 2), 'utf-8') + bump.log.success(`\nCache file created @ ${cachePaths.userscripts}`) + } catch (err) { + userscripts = JSON.parse(fs.readFileSync(cachePaths.userscripts, 'utf-8')) + console.log(userscripts) + console.log('') + } + } else { + userscripts = await bump.findFileBySuffix({ suffix: script.userscriptName }) + console.log('') + } + + bump.log.working('\nCollecting resources...\n') + const urlMap = {} ; let resCnt = 0 + userscripts.forEach(userscript => { + const scriptContent = fs.readFileSync(userscript, 'utf-8'), + resURLs = [...scriptContent.matchAll(new RegExp(re.urls.jsdelivr.source, 'gm'))].map(match => match[1]) + if (resURLs?.length) { urlMap[userscript] = resURLs ; resCnt += resURLs.length } + }) + bump.log.success(`${resCnt} potentially bumpable resource(s) found.`) + + // Process each userscript + let urlsUpdatedCnt = 0, filesUpdatedCnt = 0 + for (const scriptPath of Object.keys(urlMap)) { + const repoName = path.basename(scriptPath).replace(/\.[^.]+$/, '') + bump.log.working(`\nProcessing ${repoName}...\n`) + + // Process each resource + let fileUpdated = false + for (const resURL of urlMap[scriptPath]) { + if (!await bump.isValidResource({ resURL, verbose: false })) continue + const resName = re.resName.exec(resURL)?.[0] || 'resource' // dir/filename for logs + + // Compare/update ref + const repoMatch = resURL.match(/gh\/([^@]+)@/) + if (!repoMatch) { + console.log(`Could not parse repo from ${resName}, skipping.`) ; bump.log.endedWithLineBreak = false + continue + } + const targetRepo = repoMatch[1], + currentCommit = re.hash.commit.inline.exec(resURL)?.[2] || '' + let resLatestRef + if (re.verTag.test(currentCommit)) { // get latest release tag + const apiURL = `${script.urls.apis.github.repos}/${targetRepo}/releases/latest` + resLatestRef = script.cache.refs[targetRepo] ??= (await (await fetch(apiURL, { + headers: { 'User-Agent': 'bump-script' }})).json()).tag_name + } else if (targetRepo.endsWith(repoName) && resURL.includes('firefox/extension/')) { + if (!script.cache.refs.ff) { + console.log('Fetching latest commit hash for firefox/extension...') + script.cache.refs.ff = await bump.getLatestCommitHash({ + repo: targetRepo, path: 'firefox/extension' }) + } + resLatestRef = script.cache.refs.ff + } else if (targetRepo.endsWith(repoName) && resURL.includes('chromium/extension/')) { + if (!script.cache.refs.chromium) { + console.log('Fetching latest commit hash for chromium/extension...') + script.cache.refs.chromium = await bump.getLatestCommitHash({ + repo: targetRepo, path: 'chromium/extension' }) + } + resLatestRef = script.cache.refs.chromium + } else // get latest commit hash + resLatestRef = script.cache.refs[targetRepo] ??= await bump.getLatestCommitHash({ repo: targetRepo }) + if (resLatestRef.startsWith(currentCommit)) { + console.log(`${resName} already up-to-date!`) ; bump.log.endedWithLineBreak = false + continue + } else if (re.hash.commit.full.test(resLatestRef)) + resLatestRef = resLatestRef.substring(0, 7) // truncate it + let updatedURL = resURL.replace(re.hash.commit.inline, `$1${resLatestRef}`) + if (!await bump.isValidResource({ resURL: updatedURL, verbose: false })) continue + + // Generate/compare/update SRI hash + console.log(`${ !bump.log.endedWithLineBreak ? '\n' : '' }Generating SRI (SHA-256) hash for ${resName}...`) + const newSRIhash = await bump.generateSRIhash({ resURL: updatedURL }) + if (re.hash.sri.exec(resURL)?.[0] == newSRIhash && !re.verTag.test(currentCommit)) { + console.log(`${resName} already up-to-date!`) ; bump.log.endedWithLineBreak = false + continue + } + updatedURL = updatedURL.replace(re.hash.sri, newSRIhash) + if (!await bump.isValidResource({ resURL: updatedURL, verbose: false })) continue + + console.log(`Writing updated URL for ${resName}...`) + const scriptContent = fs.readFileSync(scriptPath, 'utf-8') + fs.writeFileSync(scriptPath, scriptContent.replace(resURL, updatedURL), 'utf-8') + bump.log.success(`${resName} bumped!\n`) + urlsUpdatedCnt++ ; fileUpdated = true + } + if (fileUpdated) { + console.log(`${ !bump.log.endedWithLineBreak ? '\n' : '' }Bumping userscript version...`) + bump.bumpVersion({ format: 'dateVer', filePath: scriptPath }) + filesUpdatedCnt++ + } + } + + bump.log.working('\nProcessing @kudoai/chatgpt.js @require URLs...\n') + const latestCJSver = (await (await fetch(`${script.urls.apis.npm.chatgptjs}/latest`)).json()).version + bump.log.info(`Latest @kudoai/chatgpt.js version: ${latestCJSver}\n`) + for (const userJSfilePath of userscripts) { + let fileChanged = false + const content = fs.readFileSync(userJSfilePath, 'utf-8') + for (const match of [...content.matchAll(re.urls.chatgptjs)]) { + const oldFullURL = match[0], oldVer = match[2] + if (oldVer == latestCJSver) { + console.log(`${path.basename(userJSfilePath)} already at v${latestCJSver}`) + continue + } + const baseNewURL = `${match[1]}${latestCJSver}${match[3]}` + bump.log.working(`\nGenerating SRI for v${latestCJSver}...\n`) + const sriHash = await bump.generateSRIhash({ resURL: baseNewURL, verbose: false }), + newFullURL = `${baseNewURL}#${sriHash}`, + freshContent = fs.readFileSync(userJSfilePath, 'utf-8') + fs.writeFileSync(userJSfilePath, freshContent.replace(oldFullURL, newFullURL), 'utf-8') + bump.log.success(`Updated @require in ${path.basename(userJSfilePath)}`) + fileChanged = true ; urlsUpdatedCnt++ + } + if (fileChanged) { + bump.log.working('Bumping userscript version...\n') + bump.bumpVersion({ format: 'dateVer', filePath: userJSfilePath }) + filesUpdatedCnt++ + } + } + + bump.log[urlsUpdatedCnt ? 'success' : 'info']( + `\n${ urlsUpdatedCnt ? 'Success! ' : '' }${ + urlsUpdatedCnt } resource(s) bumped across ${filesUpdatedCnt} file(s).` + ) +})() diff --git a/utils/dev/chatbots.js b/utils/dev/chatbots.js index 3de2ca3d0..223847aef 100644 --- a/utils/dev/chatbots.js +++ b/utils/dev/chatbots.js @@ -2,28 +2,21 @@ // Opens KudoAI chatbots in VS Code -(() => { - 'use strict' +'use strict' - const chatbots = ['amazongpt', 'bravegpt', 'duckduckgpt', 'googlegpt'] - - // Import LIBS - const { resolve, dirname } = require('path'), - spawn = require('cross-spawn') - - // Init UI COLORS - const br = '\x1b[91m', // bright red - nc = '\x1b[0m' // no color - - // Init PATHS +;(() => { + const chatbots = ['amazongpt', 'bravegpt', 'duckduckgpt', 'googlegpt'], + { dirname, resolve } = require('path'), + fs = require('fs'), + spawn = require('cross-spawn') const repoRoot = (dir => { - while (dir != '/' && !require('fs').existsSync(resolve(dir, 'package.json'))) dir = dirname(dir) ; return dir + while (dir != '/' && !fs.existsSync(resolve(dir, 'package.json'))) dir = dirname(dir) + return dir })(__dirname) - const filePaths = chatbots.map( - chatbot => resolve(repoRoot, `chatgpt/${chatbot}/${chatbot}.user.js`) - ).filter(path => require('fs').existsSync(path)) + const filePaths = chatbots + .map(chatbot => resolve(repoRoot, `chatgpt/${chatbot}/${chatbot}.user.js`)) + .filter(path => fs.existsSync(path)) - // OPEN files spawn('code', ['-r', repoRoot, ...filePaths], { stdio: 'inherit' }) - .on('error', err => console.error(`${br}Failed to open VS Code: ${err.message}${nc}`)) + .on('error', err => console.error(`Failed to open VS Code: ${err.message}`)) })()