@kudoai/chatgpt.js 3.4.0 → 3.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +153 -86
  3. package/chatgpt.js +91 -76
  4. package/dist/chatgpt.min.js +4 -4
  5. package/docs/README.md +153 -86
  6. package/docs/SECURITY.md +16 -18
  7. package/docs/USERGUIDE.md +19 -5
  8. package/package.json +9 -6
  9. package/starters/chrome/LICENSE.md +3 -3
  10. package/starters/chrome/docs/README.md +5 -5
  11. package/starters/chrome/docs/SECURITY.md +3 -5
  12. package/starters/chrome/extension/components/icons.js +4 -5
  13. package/starters/chrome/extension/components/modals.js +98 -65
  14. package/starters/chrome/extension/content.js +41 -47
  15. package/starters/chrome/extension/icons/faded/icon128.png +0 -0
  16. package/starters/chrome/extension/icons/faded/icon16.png +0 -0
  17. package/starters/chrome/extension/icons/faded/icon32.png +0 -0
  18. package/starters/chrome/extension/icons/faded/icon64.png +0 -0
  19. package/starters/chrome/extension/lib/chatgpt.js +91 -76
  20. package/starters/chrome/extension/lib/dom.js +70 -11
  21. package/starters/chrome/extension/lib/settings.js +8 -9
  22. package/starters/chrome/extension/manifest.json +2 -5
  23. package/starters/chrome/extension/popup/controller.js +18 -16
  24. package/starters/chrome/extension/popup/index.html +1 -1
  25. package/starters/chrome/extension/popup/style.css +26 -13
  26. package/starters/chrome/extension/service-worker.js +7 -4
  27. package/starters/chrome/images/icons/question-mark/icon16.png +0 -0
  28. package/starters/chrome/images/icons/question-mark/icon512.png +0 -0
  29. package/starters/docs/LICENSE.md +21 -1
  30. package/starters/docs/README.md +19 -6
  31. package/starters/greasemonkey/LICENSE.md +3 -3
  32. package/starters/greasemonkey/chatgpt.js-greasemonkey-starter.user.js +5 -6
  33. package/starters/greasemonkey/docs/README.md +1 -1
  34. package/starters/greasemonkey/docs/SECURITY.md +3 -5
  35. /package/starters/greasemonkey/{media → assets}/images/icons/robot/icon48.png +0 -0
  36. /package/starters/greasemonkey/{media → assets}/images/icons/robot/icon64.png +0 -0
  37. /package/starters/greasemonkey/{media → assets}/images/screenshots/chatgpt-userscript-on.png +0 -0
@@ -10,7 +10,7 @@
10
10
 
11
11
  // Import APP data
12
12
  const { app } = await chrome.storage.sync.get('app')
13
- icons.dependencies.import({ app }) // for src's using app.urls.assetHost
13
+ icons.imports.import({ app }) // for src's using app.urls.assetHost
14
14
 
15
15
  // Define FUNCTIONS
16
16
 
@@ -25,10 +25,10 @@
25
25
  fade() {
26
26
 
27
27
  // Update toolbar icon
28
- const iconDimensions = [16, 32, 64, 128], iconPaths = {}
29
- iconDimensions.forEach(dimension => iconPaths[dimension] = `../icons/${
30
- config.extensionDisabled ? 'faded/' : '' }icon${dimension}.png` )
31
- chrome.action.setIcon({ path: iconPaths })
28
+ chrome.action.setIcon({ path: Object.fromEntries(
29
+ Object.keys(chrome.runtime.getManifest().icons).map(dimension =>
30
+ [dimension, `../icons/${ config.extensionDisabled ? 'faded/' : '' }icon${dimension}.png`]
31
+ ))})
32
32
 
33
33
  // Update menu contents
34
34
  document.querySelectorAll('div.logo, div.menu-title, div.menu')
@@ -55,7 +55,7 @@
55
55
 
56
56
  // Create CHILD menu entries on chatgpt.com
57
57
  if (env.site == 'chatgpt') {
58
- await settings.load(settings.availKeys)
58
+ await settings.load(Object.keys(settings.controls))
59
59
 
60
60
  // Create/insert child section
61
61
  const togglesDiv = dom.create.elem('div', { class: 'menu' })
@@ -65,9 +65,10 @@
65
65
  Object.keys(settings.controls).forEach(key => {
66
66
 
67
67
  // Init elems
68
- const menuItemDiv = dom.create.elem('div', { class: 'menu-item menu-area' }),
69
- menuLabel = dom.create.elem('label', { class: 'menu-icon' }),
70
- menuLabelSpan = document.createElement('span')
68
+ const menuItemDiv = dom.create.elem('div', {
69
+ class: 'menu-item menu-area', title: settings.controls[key].helptip || '' })
70
+ const menuLabel = dom.create.elem('label', { class: 'menu-icon' })
71
+ const menuLabelSpan = dom.create.elem('span')
71
72
  let menuInput, menuSlider
72
73
  menuLabelSpan.textContent = settings.controls[key].label
73
74
  if (settings.controls[key].type == 'toggle') {
@@ -92,7 +93,8 @@
92
93
  event.stopImmediatePropagation()
93
94
  menuInput.onchange = () => {
94
95
  settings.save(key, !config[key]) ; sync.configToUI({ updatedKey: key })
95
- notify(`${settings.controls[key].label} ${ /disabled|hidden/i.test(key) != config[key] ? 'ON' : 'OFF' }`)
96
+ notify(`${settings.controls[key].label} ${
97
+ /disabled|hidden/i.test(key) != config[key] ? 'ON' : 'OFF' }`)
96
98
  }
97
99
  } else if (settings.controls[key].type == 'prompt') {
98
100
  // custom logic for each prompt based on key name
@@ -103,16 +105,16 @@
103
105
  }
104
106
 
105
107
  // Create/append FOOTER container
106
- const footer = document.createElement('footer')
107
- document.body.append(footer)
108
+ const footer = dom.create.elem('footer') ; document.body.append(footer)
108
109
 
109
110
  // Create/append CHATGPT.JS footer logo
110
111
  const cjsDiv = dom.create.elem('div', { class: 'chatgpt-js' })
111
112
  const cjsLogo = dom.create.elem('img', {
112
113
  title: 'Powered by chatgpt.js',
113
- src: `${app.urls.cjsMediaHost}/images/badges/powered-by-chatgpt.js-faded.png?a439ab6` })
114
+ src: `${app.urls.cjsAssetHost}/images/badges/powered-by-chatgpt.js-faded.png?b2a1975` })
114
115
  cjsLogo.onmouseover = cjsLogo.onmouseout = event => cjsLogo.src = `${
115
- app.urls.cjsMediaHost}/images/badges/powered-by-chatgpt.js${ event.type == 'mouseover' ? '' : '-faded' }.png?a439ab6`
116
+ app.urls.cjsAssetHost}/images/badges/powered-by-chatgpt.js${
117
+ event.type == 'mouseover' ? '' : '-faded' }.png?b2a1975`
116
118
  cjsLogo.onclick = () => chrome.tabs.create({ url: app.urls.chatgptJS })
117
119
  cjsDiv.append(cjsLogo) ; footer.append(cjsDiv)
118
120
 
@@ -132,7 +134,7 @@
132
134
  moreExtensionsSpan.onclick = () => { chrome.tabs.create({ url: app.urls.relatedExtensions }) ; close() }
133
135
  moreExtensionsSpan.append(moreExtensionsIcon) ; footer.append(moreExtensionsSpan)
134
136
 
135
- // Hide loading spinner
136
- document.querySelectorAll('[class^="loading"]').forEach(elem => elem.style.display = 'none')
137
+ // Remove loading spinner
138
+ document.querySelectorAll('[class^=loading]').forEach(elem => elem.remove())
137
139
 
138
140
  })()
@@ -10,7 +10,7 @@
10
10
  </div>
11
11
  <div class="menu-header">
12
12
  <div class="logo">
13
- <img width=26 src="https://cdn.jsdelivr.net/gh/KudoAI/chatgpt.js@f0cdfc9/starters/chrome/extension/icons/icon32.png">
13
+ <img alt="" width=26 src="https://cdn.jsdelivr.net/gh/KudoAI/chatgpt.js@f0cdfc9/starters/chrome/extension/icons/icon32.png">
14
14
  </div>
15
15
  <div class="menu-title">ChatGPT Extension</div>
16
16
  <div class="main-toggle">
@@ -1,23 +1,38 @@
1
1
  /* General size */
2
- html { height: fit-content ; min-height: 50px }
2
+ html { height: fit-content ; min-height: 89px }
3
3
  body { width: max-content ; margin: 0 ; overflow: clip }
4
4
 
5
5
  /* General font */
6
6
  body, button, input, select, textarea {
7
- font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", sans-serif ;
7
+ font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto,
8
+ "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", sans-serif ;
8
9
  font-size: .905rem ; user-select: none
9
10
  }
10
11
  a { color: #999 ; text-decoration: none }
11
12
  a:focus, a:hover { text-decoration: underline ; color: inherit }
12
13
 
13
- /* Loading elems */
14
- .loading-bg { background-color: white ; width: 100% ; height: 100% ; position: absolute ; z-index: 1111; }
14
+ /* Loader */
15
+ .loading-bg {
16
+ background-color: white ; width: 100% ; height: 100% ; position: absolute ; z-index: 1111 ;
17
+ display: inline-grid ; align-content: center ; justify-content: center /* center spinner */
18
+ }
15
19
  .loading-spinner {
16
- border: 8px solid #f3f3f3 ; border-top: 8px solid #3498db ; border-radius: 50% ;
17
- width: 15vh ; height: 15vh ; animation: spin 1s linear infinite ;
18
- position: absolute ; top: calc(50% - 7.5vh - 8px) ; left: calc(50% - 7.5vh)
20
+ width: 19px ; aspect-ratio: 1 ; border-radius: 50% ; border: 3px solid #000 ;
21
+ animation: loader-move-head-tail 0.8s infinite linear alternate, loader-rotate 1.6s infinite linear
22
+ }
23
+ @keyframes loader-move-head-tail {
24
+ 0% { clip-path: polygon(50% 50%, 0 0, 50% 0, 50% 0, 50% 0, 50% 0, 50% 0) }
25
+ 12.5% { clip-path: polygon(50% 50%, 0 0, 50% 0, 100% 0, 100% 0, 100% 0, 100% 0) }
26
+ 25% { clip-path: polygon(50% 50%, 0 0, 50% 0, 100% 0, 100% 100%, 100% 100%, 100% 100%) }
27
+ 50% { clip-path: polygon(50% 50%, 0 0, 50% 0, 100% 0, 100% 100%, 50% 100%, 0 100%) }
28
+ 62.5% { clip-path: polygon(50% 50%, 100% 0, 100% 0%, 100% 0, 100% 100%, 50% 100%, 0 100%) }
29
+ 75% { clip-path: polygon(50% 50%, 100% 100%, 100% 100%, 100% 100%, 100% 100%, 50% 100%, 0 100%) }
30
+ 100% { clip-path: polygon(50% 50%, 50% 100%, 50% 100%, 50% 100%, 50% 100%, 50% 100%, 0 100%) }
19
31
  }
20
- @keyframes spin { 0% { transform: rotate(0deg) } 100% { transform: rotate(360deg) }}
32
+ @keyframes loader-rotate {
33
+ 0% { transform: scaleY(1) rotate(0deg) } 49.99% { transform: scaleY(1) rotate(135deg) }
34
+ 50% { transform: scaleY(-1) rotate(0deg) } 100% { transform: scaleY(-1) rotate(-135deg) }
35
+ }
21
36
 
22
37
  /* Header */
23
38
  .menu-header {
@@ -34,10 +49,8 @@ a:focus, a:hover { text-decoration: underline ; color: inherit }
34
49
  display: flex ; min-height: 2rem ; padding-right: 14px ; white-space: nowrap ; font-size: 91%
35
50
  }
36
51
  .menu-icon { padding: 8px }
37
- .menu-area:focus, .menu-area:hover { /* add hover color/cursor */
38
- color: var(--bg) ; background: rgb(100, 149, 237) ; cursor: pointer }
39
- .menu-item:hover .toggle-switch .slider, .menu-item:hover span { filter: invert(1) } /* invert toggle switch + label */
40
- .menu-item:hover .menu-icon { filter: none } /* ...but not non-toggle icons */
52
+ .menu-area:focus, .menu-area:hover { background: rgb(100,149,237) ; cursor: pointer } /* add hover color/cursor */
53
+ .menu-item:hover span:not(.slider) { filter: invert(1) } /* invert setting labels on hover */
41
54
  .menu-item > label > .slider { transform: scale(0.95) ; top: 1px } /* make child toggles smaller */
42
55
  .menu-prompt { margin-left: 2px } /* align non-toggle items */
43
56
 
@@ -52,7 +65,7 @@ a:focus, a:hover { text-decoration: underline ; color: inherit }
52
65
  border: 1px solid black ; border-radius: 50% ; background-color: white ; content: ""
53
66
  }
54
67
  .toggle-switch input[type="checkbox"]:checked + .slider { background-color: black } /* color active slider */
55
- .toggle-switch input[type="checkbox"]:checked + .slider::before { transform: translateX(9px) } /* move knob right when toggled */
68
+ .toggle-switch input[type="checkbox"]:checked + .slider::before { transform: translateX(9px) } /* toggle knob right */
56
69
 
57
70
  /* Footer */
58
71
  footer { font-size: 12px ; text-align: center ; color: #999 ; background: #f5f5f5 ; height: 40px ; line-height: 40px }
@@ -1,9 +1,12 @@
1
1
  // Init APP data
2
2
  const app = {
3
- symbol: '🤖', version: chrome.runtime.getManifest().version,
3
+ version: chrome.runtime.getManifest().version, symbol: '🤖', cssPrefix: 'chatgpt-extension',
4
+ author: { name: 'KudoAI', url: 'https://kudoai.com' },
4
5
  urls: {
5
6
  assetHost: 'https://cdn.jsdelivr.net/gh/KudoAI/chatgpt.js-chrome-starter',
6
- cjsMediaHost: 'https://media.chatgptjs.org',
7
+ chatgptJS: 'https://chatgptjs.org',
8
+ cjsAssetHost: 'https://assets.chatgptjs.org',
9
+ contributors: 'https://docs.chatgptjs.org/#-contributors',
7
10
  gitHub: 'https://github.com/KudoAI/chatgpt.js-chrome-starter',
8
11
  relatedExtensions: 'https://aiwebextensions.com',
9
12
  support: 'https://github.com/KudoAI/chatgpt.js-chrome-starter/issues'
@@ -11,13 +14,13 @@ const app = {
11
14
  }
12
15
  chrome.storage.sync.set({ app }) // save to Chrome storage
13
16
 
14
- // Launch ChatGPT on install
17
+ // Launch CHATGPT on install
15
18
  chrome.runtime.onInstalled.addListener(details => {
16
19
  if (details.reason == 'install')
17
20
  chrome.tabs.create({ url: 'https://chatgpt.com/' })
18
21
  })
19
22
 
20
- // Sync settings to activated tabs
23
+ // Sync SETTINGS to activated tabs
21
24
  chrome.tabs.onActivated.addListener(activeInfo =>
22
25
  chrome.tabs.sendMessage(activeInfo.tabId, { action: 'syncConfigToUI' }))
23
26
 
@@ -1,5 +1,25 @@
1
1
  <div align="center">
2
- <h6><a href="./"><img height=15 style="margin: 0 3px -2px" src="https://raw.githubusercontent.com/KudoAI/chatgpt.js/6fa1659feadaf70853996dc7d7f6e1ab5a1e6301/media/images/icons/earth-americas.svg"></a> English | <a href="zh-cn/LICENSE.md">简体中文</a> | <a href="zh-tw/LICENSE.md">繁體中文</a> | <a href="ja/LICENSE.md">日本</a> | <a href="ko/LICENSE.md">한국인</a> | <a href="hi/LICENSE.md">हिंदी</a> | <a href="de/LICENSE.md">Deutsch</a> | <a href="es/LICENSE.md">Español</a> | <a href="fr/LICENSE.md">Français</a> | <a href="it/LICENSE.md">Italiano</a> | <a href="nl/LICENSE.md">Nederlands</a> | <a href="pt/LICENSE.md">Português</a> | <a href="vi/LICENSE.md">Việt</a></h6>
2
+ <h6>
3
+ <a href="./">
4
+ <picture>
5
+ <source type="image/svg+xml" media="(prefers-color-scheme: dark)" srcset="https://assets.chatgptjs.org/images/icons/earth/white/icon32.svg?v=e638eac">
6
+ <img height=14 src="https://assets.chatgptjs.org/images/icons/earth/black/icon32.svg?v=e638eac">
7
+ </picture>
8
+ </a>
9
+ English |
10
+ <a href="zh-cn/LICENSE.md">简体中文</a> |
11
+ <a href="zh-tw/LICENSE.md">繁體中文</a> |
12
+ <a href="ja/LICENSE.md">日本</a> |
13
+ <a href="ko/LICENSE.md">한국인</a> |
14
+ <a href="hi/LICENSE.md">हिंदी</a> |
15
+ <a href="de/LICENSE.md">Deutsch</a> |
16
+ <a href="es/LICENSE.md">Español</a> |
17
+ <a href="fr/LICENSE.md">Français</a> |
18
+ <a href="it/LICENSE.md">Italiano</a> |
19
+ <a href="nl/LICENSE.md">Nederlands</a> |
20
+ <a href="pt/LICENSE.md">Português</a> |
21
+ <a href="vi/LICENSE.md">Việt</a>
22
+ </h6>
3
23
  </div>
4
24
 
5
25
  # MIT License
@@ -4,10 +4,23 @@
4
4
  <h6>
5
5
  <a href="https://github.com/KudoAI/chatgpt.js/tree/main/starters/docs">
6
6
  <picture>
7
- <source type="image/svg+xml" media="(prefers-color-scheme: dark)" srcset="https://media.chatgptjs.org/images/icons/earth-americas-white-padded-icon17x15.svg?714b6a1">
8
- <img src="https://media.chatgptjs.org/images/icons/earth-americas-padded-icon17x15.svg?714b6a1">
7
+ <source type="image/svg+xml" media="(prefers-color-scheme: dark)" srcset="https://assets.chatgptjs.org/images/icons/earth/white/icon32.svg?v=e638eac">
8
+ <img height=14 src="https://assets.chatgptjs.org/images/icons/earth/black/icon32.svg?v=e638eac">
9
9
  </picture>
10
- </a> English | <a href="zh-cn#readme">简体中文</a> | <a href="zh-tw#readme">繁體中文</a> | <a href="ja#readme">日本</a> | <a href="ko#readme">한국인</a> | <a href="hi#readme">हिंदी</a> | <a href="de#readme">Deutsch</a> | <a href="es#readme">Español</a> | <a href="fr#readme">Français</a> | <a href="it#readme">Italiano</a> | <a href="nl#readme">Nederlands</a> | <a href="pt#readme">Português</a> | <a href="vi#readme">Việt</a>
10
+ </a>
11
+ English |
12
+ <a href="zh-cn#readme">简体中文</a> |
13
+ <a href="zh-tw#readme">繁體中文</a> |
14
+ <a href="ja#readme">日本</a> |
15
+ <a href="ko#readme">한국인</a> |
16
+ <a href="hi#readme">हिंदी</a> |
17
+ <a href="de#readme">Deutsch</a> |
18
+ <a href="es#readme">Español</a> |
19
+ <a href="fr#readme">Français</a> |
20
+ <a href="it#readme">Italiano</a> |
21
+ <a href="nl#readme">Nederlands</a> |
22
+ <a href="pt#readme">Português</a> |
23
+ <a href="vi#readme">Việt</a>
11
24
  </h6>
12
25
  </div>
13
26
 
@@ -17,15 +30,15 @@
17
30
 
18
31
  <br>
19
32
 
20
- <img src="../chrome/media/images/screenshots/extension-loaded.png">
33
+ <img src="../chrome/images/screenshots/extension-loaded.png">
21
34
 
22
- <h2><a href="../chrome"><img style="margin: 0 2px -1px 0" height=18 src="https://media.chatgptjs.org/images/icons/platforms/chrome/icon32.png?8c852fa5"></a> <a href="../chrome">Chrome starter</a></h2>
35
+ <h2><a href="../chrome"><img style="margin: 0 2px -1px 0" height=18 src="https://assets.chatgptjs.org/images/icons/platforms/chrome/icon32.png?v=e638eac"></a> <a href="../chrome">Chrome starter</a></h2>
23
36
 
24
37
  Template for creating a Chrome extension using chatgpt.js (including pop-up menu + settings management)
25
38
 
26
39
  [Repo](https://github.com/KudoAI/chatgpt.js-chrome-starter) / [Readme](../chrome#readme) / [Get help](https://github.com/KudoAI/chatgpt.js-chrome-starter/issues)
27
40
 
28
- <h2><a href="../greasemonkey"><img style="margin: 0 2px -0.065rem 0" height=19 src="https://media.chatgptjs.org/images/icons/platforms/tampermonkey/icon28.png?a3e53bf7"><img style="margin: 0 2px -0.035rem 1px" height=19.5 src="https://media.chatgptjs.org/images/icons/platforms/violentmonkey/icon25.png?a3e53bf7"></a> <a href="../greasemonkey">Greasemonkey starter</a></h2>
41
+ <h2><a href="../greasemonkey"><img style="margin: 0 2px -0.065rem 0" height=19 src="https://assets.chatgptjs.org/images/icons/platforms/tampermonkey/icon28.png?v=e638eac"><img style="margin: 0 2px -0.035rem 1px" height=19.5 src="https://assets.chatgptjs.org/images/icons/platforms/violentmonkey/icon25.png?v=e638eac"></a> <a href="../greasemonkey">Greasemonkey starter</a></h2>
29
42
 
30
43
  Template for creating a Greasemonkey userscript using chatgpt.js
31
44
 
@@ -1,8 +1,8 @@
1
1
  <div align="center">
2
2
  <h6>
3
3
  <picture>
4
- <source type="image/svg+xml" media="(prefers-color-scheme: dark)" srcset="https://media.chatgptjs.org/images/icons/earth-americas-white-icon32.svg?main">
5
- <img height=14 src="https://media.chatgptjs.org/images/icons/earth-americas-icon32.svg?main">
4
+ <source type="image/svg+xml" media="(prefers-color-scheme: dark)" srcset="https://assets.chatgptjs.org/images/icons/earth/white/icon32.svg?v=e638eac">
5
+ <img height=14 src="https://assets.chatgptjs.org/images/icons/earth/black/icon32.svg?v=e638eac">
6
6
  </picture>
7
7
  &nbsp;English |
8
8
  <a href="docs/zh-cn/LICENSE.md">简体中文</a> |
@@ -22,7 +22,7 @@
22
22
 
23
23
  # 🏛️ MIT License
24
24
 
25
- **Copyright © 2023–2024 [KudoAI](https://github.com/KudoAI) & contributors**
25
+ **Copyright © 2023–2025 [KudoAI](https://github.com/KudoAI) & contributors**
26
26
 
27
27
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
28
28
 
@@ -3,13 +3,12 @@
3
3
  // @description A Greasemonkey template to start using chatgpt.js like a boss
4
4
  // @author chatgpt.js
5
5
  // @namespace https://chatgpt.js.org
6
- // @version 2024.12.20
6
+ // @version 2025.2.1
7
7
  // @license MIT
8
- // @icon https://cdn.jsdelivr.net/gh/KudoAI/chatgpt.js@3.4.0/starters/greasemonkey/media/images/icons/robot/icon48.png
9
- // @icon64 https://cdn.jsdelivr.net/gh/KudoAI/chatgpt.js@3.4.0/starters/greasemonkey/media/images/icons/robot/icon64.png
8
+ // @icon https://cdn.jsdelivr.net/gh/KudoAI/chatgpt.js@1fc50da/starters/greasemonkey/assets/images/icons/robot/icon48.png
9
+ // @icon64 https://cdn.jsdelivr.net/gh/KudoAI/chatgpt.js@1fc50da/starters/greasemonkey/assets/images/icons/robot/icon64.png
10
10
  // @match *://chatgpt.com/*
11
- // @match *://chat.openai.com/*
12
- // @require https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js@3.4.0/dist/chatgpt.min.js
11
+ // @require https://cdn.jsdelivr.net/npm/@kudoai/chatgpt.js@3.6.0/dist/chatgpt.min.js
13
12
  // @grant GM_getValue
14
13
  // @grant GM_setValue
15
14
  // @noframes
@@ -17,7 +16,7 @@
17
16
  // @supportURL https://github.com/KudoAI/chatgpt.js-greasemonkey-starter/issues
18
17
  // ==/UserScript==
19
18
 
20
- // NOTE: This script relies on the powerful chatgpt.js library @ https://chatgpt.js.org © 2023–2024 KudoAI & contributors under the MIT license
19
+ // NOTE: This script relies on the powerful chatgpt.js library @ https://chatgpt.js.org © 2023–2025 KudoAI & contributors under the MIT license
21
20
 
22
21
  (async () => {
23
22
 
@@ -4,6 +4,6 @@
4
4
 
5
5
  <br>
6
6
 
7
- <img src="../media/images/screenshots/chatgpt-userscript-on.png">
7
+ <img src="../assets/images/screenshots/chatgpt-userscript-on.png">
8
8
 
9
9
  _For advanced Greasemonkey API methods, see: https://wiki.greasespot.net/Greasemonkey_Manual:API_
@@ -1,8 +1,8 @@
1
1
  <div align="right">
2
2
  <h6>
3
3
  <picture>
4
- <source type="image/svg+xml" media="(prefers-color-scheme: dark)" srcset="https://media.chatgptjs.org/images/icons/earth-americas-white-icon32.svg?main">
5
- <img height=14 src="https://media.chatgptjs.org/images/icons/earth-americas-icon32.svg?main">
4
+ <source type="image/svg+xml" media="(prefers-color-scheme: dark)" srcset="https://assets.chatgptjs.org/images/icons/earth/white/icon32.svg?v=e638eac">
5
+ <img height=14 src="https://assets.chatgptjs.org/images/icons/earth/black/icon32.svg?v=e638eac">
6
6
  </picture>
7
7
  &nbsp;English |
8
8
  <a href="https://github.com/KudoAI/chatgpt.js-greasemonkey-starter/blob/main/docs/zh-cn/SECURITY.md">简体中文</a> |
@@ -12,6 +12,4 @@
12
12
 
13
13
  # 🛡️ Security Policy
14
14
 
15
- If you find a vulnerability, please open a [draft security advisory](https://github.com/KudoAI/chatgpt.js-greasemonkey-starter/security/advisories/new).
16
-
17
- Pull requests are also welcome, but for safety reasons, send an email to <security@kudoai.com> and wait for a response before making it public.
15
+ If you find a vulnerability, please follow the reporting instructions @ https://tidelift.com/security