pygpt-net 2.6.64__py3-none-any.whl → 2.6.66__py3-none-any.whl

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 (68) hide show
  1. pygpt_net/CHANGELOG.txt +21 -0
  2. pygpt_net/__init__.py +3 -3
  3. pygpt_net/app.py +5 -1
  4. pygpt_net/controller/chat/chat.py +0 -0
  5. pygpt_net/controller/chat/handler/openai_stream.py +137 -7
  6. pygpt_net/controller/chat/render.py +0 -0
  7. pygpt_net/controller/config/field/checkbox_list.py +34 -1
  8. pygpt_net/controller/files/files.py +71 -2
  9. pygpt_net/controller/media/media.py +20 -1
  10. pygpt_net/controller/presets/editor.py +137 -22
  11. pygpt_net/controller/presets/presets.py +4 -1
  12. pygpt_net/controller/ui/mode.py +14 -10
  13. pygpt_net/controller/ui/ui.py +18 -1
  14. pygpt_net/core/agents/custom/__init__.py +18 -2
  15. pygpt_net/core/agents/custom/runner.py +2 -2
  16. pygpt_net/core/attachments/clipboard.py +146 -0
  17. pygpt_net/core/image/image.py +34 -1
  18. pygpt_net/core/render/web/renderer.py +33 -11
  19. pygpt_net/core/tabs/tabs.py +0 -0
  20. pygpt_net/core/types/image.py +61 -3
  21. pygpt_net/data/config/config.json +4 -3
  22. pygpt_net/data/config/models.json +629 -41
  23. pygpt_net/data/css/style.dark.css +12 -0
  24. pygpt_net/data/css/style.light.css +12 -0
  25. pygpt_net/data/icons/pin2.svg +1 -0
  26. pygpt_net/data/icons/pin3.svg +3 -0
  27. pygpt_net/data/icons/point.svg +1 -0
  28. pygpt_net/data/icons/target.svg +1 -0
  29. pygpt_net/data/js/app/ui.js +19 -2
  30. pygpt_net/data/js/app/user.js +22 -54
  31. pygpt_net/data/js/app.min.js +7 -9
  32. pygpt_net/data/locale/locale.de.ini +4 -0
  33. pygpt_net/data/locale/locale.en.ini +8 -0
  34. pygpt_net/data/locale/locale.es.ini +4 -0
  35. pygpt_net/data/locale/locale.fr.ini +4 -0
  36. pygpt_net/data/locale/locale.it.ini +4 -0
  37. pygpt_net/data/locale/locale.pl.ini +4 -0
  38. pygpt_net/data/locale/locale.uk.ini +4 -0
  39. pygpt_net/data/locale/locale.zh.ini +4 -0
  40. pygpt_net/icons.qrc +4 -0
  41. pygpt_net/icons_rc.py +274 -137
  42. pygpt_net/item/model.py +15 -19
  43. pygpt_net/js_rc.py +2038 -2075
  44. pygpt_net/provider/agents/openai/agent.py +0 -0
  45. pygpt_net/provider/api/google/__init__.py +20 -9
  46. pygpt_net/provider/api/google/image.py +161 -28
  47. pygpt_net/provider/api/google/video.py +73 -36
  48. pygpt_net/provider/api/openai/__init__.py +21 -11
  49. pygpt_net/provider/api/openai/agents/client.py +0 -0
  50. pygpt_net/provider/api/openai/video.py +562 -0
  51. pygpt_net/provider/core/config/patch.py +15 -0
  52. pygpt_net/provider/core/model/patch.py +29 -3
  53. pygpt_net/provider/vector_stores/qdrant.py +117 -0
  54. pygpt_net/ui/__init__.py +6 -1
  55. pygpt_net/ui/dialog/preset.py +9 -4
  56. pygpt_net/ui/layout/chat/attachments.py +18 -1
  57. pygpt_net/ui/layout/status.py +3 -3
  58. pygpt_net/ui/layout/toolbox/raw.py +7 -1
  59. pygpt_net/ui/widget/element/status.py +55 -0
  60. pygpt_net/ui/widget/filesystem/explorer.py +116 -2
  61. pygpt_net/ui/widget/lists/context.py +26 -16
  62. pygpt_net/ui/widget/option/checkbox_list.py +14 -2
  63. pygpt_net/ui/widget/textarea/input.py +71 -17
  64. {pygpt_net-2.6.64.dist-info → pygpt_net-2.6.66.dist-info}/METADATA +76 -25
  65. {pygpt_net-2.6.64.dist-info → pygpt_net-2.6.66.dist-info}/RECORD +63 -55
  66. {pygpt_net-2.6.64.dist-info → pygpt_net-2.6.66.dist-info}/LICENSE +0 -0
  67. {pygpt_net-2.6.64.dist-info → pygpt_net-2.6.66.dist-info}/WHEEL +0 -0
  68. {pygpt_net-2.6.64.dist-info → pygpt_net-2.6.66.dist-info}/entry_points.txt +0 -0
@@ -29,6 +29,13 @@ QListView::item {{
29
29
  padding: 4px;
30
30
  min-height: 20px;
31
31
  }}
32
+
33
+ /* Subtle hover for list/tree items (non-selected) */
34
+ QListView::item:hover:!selected,
35
+ QTreeView::item:hover:!selected {{
36
+ background-color: rgba(255, 255, 255, 5);
37
+ }}
38
+
32
39
  QListView::item:selected,
33
40
  QTreeView::item:selected {{
34
41
  color: #ffffff;
@@ -162,4 +169,9 @@ NodeEditor {{
162
169
 
163
170
  qproperty-edgeColor: #c0c0c0;
164
171
  qproperty-edgeSelectedColor: #ff8a5c;
172
+ }}
173
+
174
+ /* Status Bar */
175
+ #StatusBarTimer {{
176
+ color: #999 !important;
165
177
  }}
@@ -82,6 +82,13 @@ QListView::item {{
82
82
  padding: 4px;
83
83
  min-height: 20px;
84
84
  }}
85
+
86
+ /* Subtle hover for list/tree items (non-selected) */
87
+ QListView::item:hover:!selected,
88
+ QTreeView::item:hover:!selected {{
89
+ background-color: #f6f8fb;
90
+ }}
91
+
85
92
  QCalendarWidget QWidget {{
86
93
  background: #fff;
87
94
  }}
@@ -278,4 +285,9 @@ NodeEditor {{
278
285
 
279
286
  qproperty-edgeColor: #c0c0c0;
280
287
  qproperty-edgeSelectedColor: #ff8a5c;
288
+ }}
289
+
290
+ /* Status Bar */
291
+ #StatusBarTimer {{
292
+ color: #5d5d5d !important;
281
293
  }}
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#686868"><path d="m640-480 80 80v80H520v240l-40 40-40-40v-240H240v-80l80-80v-280h-40v-80h400v80h-40v280Zm-286 80h252l-46-46v-314H400v314l-46 46Zm126 0Z"/></svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24px" height="24px" fill="#686868" version="1.1" viewBox="0 -960 960 960" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="m621.42-355.15v113.14l-56.569 56.569-141.42-141.42-169.71 169.71h-56.569v-56.569l169.71-169.71-141.42-141.42 56.569-56.569h113.14l197.99-197.99-28.284-28.284 56.569-56.569 282.84 282.84-56.569 56.569-28.284-28.284zm-258.8-145.66 178.19 178.19v-65.054l222.03-222.03-113.14-113.14-222.03 222.03z"/>
3
+ </svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#686868"><path d="M480-400q-33 0-56.5-23.5T400-480q0-33 23.5-56.5T480-560q33 0 56.5 23.5T560-480q0 33-23.5 56.5T480-400Zm-40-240v-200h80v200h-80Zm0 520v-200h80v200h-80Zm200-320v-80h200v80H640Zm-520 0v-80h200v80H120Z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#686868"><path d="M480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-80q-100 0-170-70t-70-170q0-100 70-170t170-70q100 0 170 70t70 170q0 100-70 170t-170 70Zm0-80q66 0 113-47t47-113q0-66-47-113t-113-47q-66 0-113 47t-47 113q0 66 47 113t113 47Zm0-80q-33 0-56.5-23.5T400-480q0-33 23.5-56.5T480-560q33 0 56.5 23.5T560-480q0 33-23.5 56.5T480-400Z"/></svg>
@@ -1,3 +1,5 @@
1
+ // app/ui.js
2
+
1
3
  // ==========================================================================
2
4
  // UI manager
3
5
  // ==========================================================================
@@ -30,10 +32,25 @@ class UIManager {
30
32
  '#_loader_.hidden { display: none !important; visibility: hidden !important; }',
31
33
  '#_loader_.visible { display: block; visibility: visible; }',
32
34
 
33
- /* User message collapse (uc-*) */
35
+ /* User message collapse (uc-*)
36
+ Collapsed content now fades out towards the bottom using a CSS mask.
37
+ This removes the need for an inline "..." overlay and works in light/dark themes. */
34
38
  '.msg-box.msg-user .msg { position: relative; }',
35
39
  '.msg-box.msg-user .msg > .uc-content { display: block; overflow: visible; }',
36
- '.msg-box.msg-user .msg > .uc-content.uc-collapsed { max-height: 1000px; overflow: hidden; }',
40
+ '.msg-box.msg-user .msg > .uc-content.uc-collapsed {',
41
+ ' max-height: var(--user-msg-collapse-max-h, 1000px);',
42
+ ' overflow: hidden;',
43
+ ' -webkit-mask-image: linear-gradient(to bottom, rgba(0,0,0,1) calc(100% - var(--uc-fade-height, 64px)), rgba(0,0,0,0) 100%);',
44
+ ' mask-image: linear-gradient(to bottom, rgba(0,0,0,1) calc(100% - var(--uc-fade-height, 64px)), rgba(0,0,0,0) 100%);',
45
+ ' -webkit-mask-size: 100% 100%;',
46
+ ' mask-size: 100% 100%;',
47
+ ' -webkit-mask-repeat: no-repeat;',
48
+ ' mask-repeat: no-repeat;',
49
+ '}',
50
+ '.msg-box.msg-user .msg > .uc-content.uc-expanded {',
51
+ ' -webkit-mask-image: none;',
52
+ ' mask-image: none;',
53
+ '}',
37
54
  '.msg-box.msg-user .msg > .uc-toggle { display: none; margin-top: 8px; text-align: center; cursor: pointer; user-select: none; }',
38
55
  '.msg-box.msg-user .msg > .uc-toggle.visible { display: block; }',
39
56
 
@@ -1,3 +1,5 @@
1
+ // app/user.js
2
+
1
3
  // ==========================================================================
2
4
  // User collapse manager
3
5
  // ==========================================================================
@@ -12,8 +14,7 @@ class UserCollapseManager {
12
14
  // Track processed .msg elements to allow cheap remeasure on resize if needed.
13
15
  this._processed = new Set();
14
16
 
15
- // Visual indicator attached while collapsed (does not modify original text).
16
- this.ellipsisText = ' [...]';
17
+ // Visual indicator is now purely CSS-based (mask fade) no inline "..." text injected anymore.
17
18
  }
18
19
 
19
20
  // Icon paths for the collapse/expand buttons.
@@ -158,60 +159,27 @@ class UserCollapseManager {
158
159
  };
159
160
  }
160
161
 
161
- // Create or update the ellipsis indicator inside content (absolute in the bottom-right corner).
162
+ // Previously created an inline "..." indicator; now acts as a no-op and cleans legacy nodes if present.
162
163
  _ensureEllipsisEl(msg, contentEl) {
163
164
  const content = contentEl || (msg && msg.querySelector('.uc-content'));
164
165
  if (!content) return null;
165
-
166
- // Ensure the content becomes a positioning context only when needed.
167
- if (getComputedStyle(content).position === 'static') {
168
- content.style.position = 'relative';
169
- }
170
-
171
- let dot = content.querySelector('.uc-ellipsis');
172
- if (!dot) {
173
- dot = document.createElement('span');
174
- dot.className = 'uc-ellipsis';
175
- dot.textContent = this.ellipsisText;
176
- // Inline, theme-agnostic styles; kept minimal and non-interactive.
177
- dot.style.position = 'absolute';
178
- dot.style.right = '0';
179
- dot.style.bottom = '0';
180
- dot.style.paddingLeft = '6px';
181
- dot.style.pointerEvents = 'none';
182
- dot.style.zIndex = '1';
183
- dot.style.fontWeight = '500';
184
- dot.style.opacity = '0.75';
185
- // Do not include in copy-to-clipboard.
186
- dot.setAttribute('aria-hidden', 'true');
187
- dot.setAttribute('data-copy-ignore', '1');
188
-
189
- content.appendChild(dot);
190
- }
191
- return dot;
166
+ try {
167
+ const legacy = content.querySelector('.uc-ellipsis');
168
+ if (legacy && legacy.parentNode) {
169
+ legacy.parentNode.removeChild(legacy);
170
+ }
171
+ } catch (_) {}
172
+ return null;
192
173
  }
193
174
 
194
- // Show ellipsis only when there is hidden overflow (collapsed).
175
+ // No visual node is needed anymore; fade is applied via CSS on .uc-collapsed.
195
176
  _showEllipsis(msg, contentEl) {
196
- const dot = this._ensureEllipsisEl(msg, contentEl);
197
- if (dot) dot.style.display = 'inline';
177
+ this._ensureEllipsisEl(msg, contentEl);
198
178
  }
199
-
200
- // Hide and clean ellipsis when not needed (expanded or short content).
179
+
180
+ // No visual node is needed anymore; keep DOM lean and clean any legacy nodes.
201
181
  _hideEllipsis(msg) {
202
- const content = msg && msg.querySelector('.uc-content');
203
- if (!content) return;
204
- const dot = content.querySelector('.uc-ellipsis');
205
- if (dot && dot.parentNode) {
206
- // Remove the indicator to avoid accidental copy/select and keep DOM lean.
207
- dot.parentNode.removeChild(dot);
208
- }
209
- // Drop positioning context when no indicator is present (keep styles minimal).
210
- try {
211
- if (content && content.style && content.querySelector('.uc-ellipsis') == null) {
212
- content.style.position = '';
213
- }
214
- } catch (_) {}
182
+ this._ensureEllipsisEl(msg, null);
215
183
  }
216
184
 
217
185
  // Apply collapse to all user messages under root.
@@ -247,7 +215,7 @@ class UserCollapseManager {
247
215
  c.classList.remove('uc-expanded'); // No class => fully expanded by default CSS.
248
216
  msg.dataset.ucState = 'expanded';
249
217
 
250
- // Hide ellipsis in disabled mode.
218
+ // Hide ellipsis in disabled mode (no-op, CSS fade not applied without .uc-collapsed).
251
219
  this._hideEllipsis(msg);
252
220
 
253
221
  // Hide toggle in disabled mode to avoid user interaction.
@@ -279,10 +247,10 @@ class UserCollapseManager {
279
247
 
280
248
  if (expand) {
281
249
  c.classList.add('uc-expanded');
282
- this._hideEllipsis(msg); // Expanded => no ellipsis
250
+ this._hideEllipsis(msg); // Expanded => nothing to show (CSS fade applies only to .uc-collapsed)
283
251
  } else {
284
252
  c.classList.add('uc-collapsed');
285
- this._showEllipsis(msg, c); // Collapsed => show ellipsis overlay
253
+ this._showEllipsis(msg, c); // Collapsed => CSS fade handled by stylesheet
286
254
  }
287
255
 
288
256
  if (t) {
@@ -300,7 +268,7 @@ class UserCollapseManager {
300
268
  t.title = expand ? labels.collapse : labels.expand;
301
269
  }
302
270
  } else {
303
- // Short content – ensure fully expanded and hide toggle + ellipsis.
271
+ // Short content – ensure fully expanded and hide toggle + (legacy) ellipsis cleanup.
304
272
  c.classList.remove('uc-collapsed');
305
273
  c.classList.remove('uc-expanded');
306
274
  msg.dataset.ucState = 'expanded';
@@ -331,7 +299,7 @@ class UserCollapseManager {
331
299
 
332
300
  const isCollapsed = c.classList.contains('uc-collapsed');
333
301
  if (isCollapsed) {
334
- // Expand – leave scroll as-is; remove ellipsis.
302
+ // Expand – leave scroll as-is.
335
303
  c.classList.remove('uc-collapsed');
336
304
  c.classList.add('uc-expanded');
337
305
  msg.dataset.ucState = 'expanded';
@@ -346,7 +314,7 @@ class UserCollapseManager {
346
314
  }
347
315
  }
348
316
  } else {
349
- // Collapse – apply classes, show ellipsis, then bring toggle into view (scroll up if needed).
317
+ // Collapse – apply classes, then bring toggle into view (scroll up if needed).
350
318
  c.classList.remove('uc-expanded');
351
319
  c.classList.add('uc-collapsed');
352
320
  msg.dataset.ucState = 'collapsed';
@@ -1,4 +1,4 @@
1
- /* app.min.js — generated on 2025-09-27 18:00:57 by bin/minify_js.py using rjsmin */
1
+ /* app.min.js — generated on 2025-09-28 09:12:33 by bin/minify_js.py using rjsmin */
2
2
 
3
3
  /* data/js/app/async.js */
4
4
  class AsyncRunner{constructor(cfg,raf){this.cfg=cfg||{};this.raf=raf||null;const A=this.cfg.ASYNC||{};this.SLICE_MS=Utils.g('ASYNC_SLICE_MS',A.SLICE_MS??12);this.SLICE_HIDDEN_MS=Utils.g('ASYNC_SLICE_HIDDEN_MS',A.SLICE_HIDDEN_MS??Math.min(this.SLICE_MS,6));this.MIN_YIELD_MS=Utils.g('ASYNC_MIN_YIELD_MS',A.MIN_YIELD_MS??0);this._opGen=new Map();}
@@ -804,7 +804,7 @@ toggle(id){const el=document.getElementById('msg-bot-'+id);if(!el)return;const o
804
804
  /* data/js/app/ui.js */
805
805
  class UIManager{updateCSS(styles){let style=document.getElementById('app-style');if(!style){style=document.createElement('style');style.id='app-style';document.head.appendChild(style);}
806
806
  style.textContent=styles;}
807
- ensureStickyHeaderStyle(){let style=document.getElementById('code-sticky-style');if(style)return;style=document.createElement('style');style.id='code-sticky-style';style.textContent=['.code-wrapper { position: relative; }','.code-wrapper .code-header-wrapper { position: sticky; top: var(--code-header-sticky-top, -2px); z-index: 2; box-shadow: 0 1px 0 rgba(0,0,0,.06); }','.code-wrapper pre { overflow: visible; margin-top: 0; }','.code-wrapper pre code { display: block; white-space: pre; max-height: 100dvh; overflow: auto;',' overscroll-behavior: contain; -webkit-overflow-scrolling: touch; overflow-anchor: none; scrollbar-gutter: stable both-edges; scroll-behavior: auto; }','#_loader_.hidden { display: none !important; visibility: hidden !important; }','#_loader_.visible { display: block; visibility: visible; }','.msg-box.msg-user .msg { position: relative; }','.msg-box.msg-user .msg > .uc-content { display: block; overflow: visible; }','.msg-box.msg-user .msg > .uc-content.uc-collapsed { max-height: 1000px; overflow: hidden; }','.msg-box.msg-user .msg > .uc-toggle { display: none; margin-top: 8px; text-align: center; cursor: pointer; user-select: none; }','.msg-box.msg-user .msg > .uc-toggle.visible { display: block; }','.msg-box.msg-user .msg > .uc-toggle img { width: var(--uc-toggle-icon-size, 26px); height: var(--uc-toggle-icon-size, 26px); opacity: .8; }','.msg-box.msg-user .msg > .uc-toggle:hover img { opacity: 1; }','.msg-box.msg-user .msg .msg-copy-btn { position: absolute; top: 2px; right: 0px; z-index: 3;',' opacity: 0; pointer-events: none; transition: opacity .15s ease, transform .15s ease, background-color .15s ease, border-color .15s ease;',' border-radius: 6px; padding: 4px; line-height: 0; border: 1px solid transparent; background: transparent; }','.msg-box.msg-user .msg:hover .msg-copy-btn, .msg-box.msg-user .msg:focus-within .msg-copy-btn { opacity: 1; pointer-events: auto; }','.msg-box.msg-user .msg .msg-copy-btn:hover { transform: scale(1.06); background: var(--copy-btn-bg-hover, rgba(0,0,0,.86)); border-color: var(--copy-btn-border, rgba(0,0,0,.08)); }','.msg-box.msg-user .msg .msg-copy-btn.copied { background: var(--copy-btn-bg-copied, rgba(150,150,150,.12)); border-color: var(--copy-btn-border-copied, rgba(150,150,150,.35)); animation: msg-copy-pop .25s ease; }','.msg-box.msg-user .msg .msg-copy-btn img { display: block; width: 18px; height: 18px; }','.code-wrapper .code-header-action.code-header-copy,','.code-wrapper .code-header-action.code-header-collapse { display: inline-flex; align-items: center; border-radius: 6px; padding: 2px; line-height: 0; border: 1px solid transparent; transition: transform .15s ease, background-color .15s ease, border-color .15s ease; }','.code-wrapper .code-header-action.code-header-copy:hover,','.code-wrapper .code-header-action.code-header-collapse:hover { transform: scale(1.06); background: var(--copy-btn-bg-hover, rgba(0,0,0,.76)); border-color: var(--copy-btn-border, rgba(0,0,0,.08)); }','.code-wrapper .code-header-action.copied { background: var(--copy-btn-bg-copied, rgba(150,150,150,.12)); border-color: var(--copy-btn-border-copied, rgba(150,150,150,.35)); animation: msg-copy-pop .25s ease; }','@keyframes msg-copy-pop { 0%{ transform: scale(1); } 60%{ transform: scale(1.1); } 100%{ transform: scale(1); } }'].join('\n');document.head.appendChild(style);}
807
+ ensureStickyHeaderStyle(){let style=document.getElementById('code-sticky-style');if(style)return;style=document.createElement('style');style.id='code-sticky-style';style.textContent=['.code-wrapper { position: relative; }','.code-wrapper .code-header-wrapper { position: sticky; top: var(--code-header-sticky-top, -2px); z-index: 2; box-shadow: 0 1px 0 rgba(0,0,0,.06); }','.code-wrapper pre { overflow: visible; margin-top: 0; }','.code-wrapper pre code { display: block; white-space: pre; max-height: 100dvh; overflow: auto;',' overscroll-behavior: contain; -webkit-overflow-scrolling: touch; overflow-anchor: none; scrollbar-gutter: stable both-edges; scroll-behavior: auto; }','#_loader_.hidden { display: none !important; visibility: hidden !important; }','#_loader_.visible { display: block; visibility: visible; }','.msg-box.msg-user .msg { position: relative; }','.msg-box.msg-user .msg > .uc-content { display: block; overflow: visible; }','.msg-box.msg-user .msg > .uc-content.uc-collapsed {',' max-height: var(--user-msg-collapse-max-h, 1000px);',' overflow: hidden;',' -webkit-mask-image: linear-gradient(to bottom, rgba(0,0,0,1) calc(100% - var(--uc-fade-height, 64px)), rgba(0,0,0,0) 100%);',' mask-image: linear-gradient(to bottom, rgba(0,0,0,1) calc(100% - var(--uc-fade-height, 64px)), rgba(0,0,0,0) 100%);',' -webkit-mask-size: 100% 100%;',' mask-size: 100% 100%;',' -webkit-mask-repeat: no-repeat;',' mask-repeat: no-repeat;','}','.msg-box.msg-user .msg > .uc-content.uc-expanded {',' -webkit-mask-image: none;',' mask-image: none;','}','.msg-box.msg-user .msg > .uc-toggle { display: none; margin-top: 8px; text-align: center; cursor: pointer; user-select: none; }','.msg-box.msg-user .msg > .uc-toggle.visible { display: block; }','.msg-box.msg-user .msg > .uc-toggle img { width: var(--uc-toggle-icon-size, 26px); height: var(--uc-toggle-icon-size, 26px); opacity: .8; }','.msg-box.msg-user .msg > .uc-toggle:hover img { opacity: 1; }','.msg-box.msg-user .msg .msg-copy-btn { position: absolute; top: 2px; right: 0px; z-index: 3;',' opacity: 0; pointer-events: none; transition: opacity .15s ease, transform .15s ease, background-color .15s ease, border-color .15s ease;',' border-radius: 6px; padding: 4px; line-height: 0; border: 1px solid transparent; background: transparent; }','.msg-box.msg-user .msg:hover .msg-copy-btn, .msg-box.msg-user .msg:focus-within .msg-copy-btn { opacity: 1; pointer-events: auto; }','.msg-box.msg-user .msg .msg-copy-btn:hover { transform: scale(1.06); background: var(--copy-btn-bg-hover, rgba(0,0,0,.86)); border-color: var(--copy-btn-border, rgba(0,0,0,.08)); }','.msg-box.msg-user .msg .msg-copy-btn.copied { background: var(--copy-btn-bg-copied, rgba(150,150,150,.12)); border-color: var(--copy-btn-border-copied, rgba(150,150,150,.35)); animation: msg-copy-pop .25s ease; }','.msg-box.msg-user .msg .msg-copy-btn img { display: block; width: 18px; height: 18px; }','.code-wrapper .code-header-action.code-header-copy,','.code-wrapper .code-header-action.code-header-collapse { display: inline-flex; align-items: center; border-radius: 6px; padding: 2px; line-height: 0; border: 1px solid transparent; transition: transform .15s ease, background-color .15s ease, border-color .15s ease; }','.code-wrapper .code-header-action.code-header-copy:hover,','.code-wrapper .code-header-action.code-header-collapse:hover { transform: scale(1.06); background: var(--copy-btn-bg-hover, rgba(0,0,0,.76)); border-color: var(--copy-btn-border, rgba(0,0,0,.08)); }','.code-wrapper .code-header-action.copied { background: var(--copy-btn-bg-copied, rgba(150,150,150,.12)); border-color: var(--copy-btn-border-copied, rgba(150,150,150,.35)); animation: msg-copy-pop .25s ease; }','@keyframes msg-copy-pop { 0%{ transform: scale(1); } 60%{ transform: scale(1.1); } 100%{ transform: scale(1); } }'].join('\n');document.head.appendChild(style);}
808
808
  enableEditIcons(){document.body&&document.body.classList.add('display-edit-icons');}
809
809
  disableEditIcons(){document.body&&document.body.classList.remove('display-edit-icons');}
810
810
  enableTimestamp(){document.body&&document.body.classList.add('display-timestamp');}
@@ -813,7 +813,7 @@ enableBlocks(){document.body&&document.body.classList.add('display-blocks');}
813
813
  disableBlocks(){document.body&&document.body.classList.remove('display-blocks');}};
814
814
 
815
815
  /* data/js/app/user.js */
816
- class UserCollapseManager{constructor(cfg){this.cfg=cfg||{};this.threshold=Utils.g('USER_MSG_COLLAPSE_HEIGHT_PX',1000);this._processed=new Set();this.ellipsisText=' [...]';}
816
+ class UserCollapseManager{constructor(cfg){this.cfg=cfg||{};this.threshold=Utils.g('USER_MSG_COLLAPSE_HEIGHT_PX',1000);this._processed=new Set();}
817
817
  _icons(){const I=(this.cfg&&this.cfg.ICONS)||{};return{expand:I.EXPAND||'',collapse:I.COLLAPSE||''};}
818
818
  _labels(){const L=(this.cfg&&this.cfg.LOCALE)||{};return{expand:L.EXPAND||'Expand',collapse:L.COLLAPSE||'Collapse'};}
819
819
  _afterLayout(fn){try{if(typeof runtime!=='undefined'&&runtime.raf&&typeof runtime.raf.schedule==='function'){const key={t:'UC:afterLayout',i:Math.random()};runtime.raf.schedule(key,()=>{try{fn&&fn();}catch(_){}},'UserCollapse',0);return;}}catch(_){}
@@ -823,12 +823,10 @@ this._afterLayout(()=>{try{if(toggleEl.scrollIntoView){try{toggleEl.scrollIntoVi
823
823
  _ensureStructure(msg){if(!msg||!msg.isConnected)return null;let content=msg.querySelector('.uc-content');if(!content){content=document.createElement('div');content.className='uc-content';const frag=document.createDocumentFragment();while(msg.firstChild)frag.appendChild(msg.firstChild);content.appendChild(frag);msg.appendChild(content);}
824
824
  let toggle=msg.querySelector('.uc-toggle');if(!toggle){const icons=this._icons();const labels=this._labels();toggle=document.createElement('div');toggle.className='uc-toggle';toggle.tabIndex=0;toggle.setAttribute('role','button');toggle.setAttribute('aria-expanded','false');toggle.title=labels.expand;const img=document.createElement('img');img.className='uc-toggle-icon';img.alt=labels.expand;img.src=icons.expand;img.width=26;img.height=26;toggle.appendChild(img);toggle.addEventListener('click',(ev)=>{ev.preventDefault();ev.stopPropagation();this.toggleFromToggle(toggle);});toggle.addEventListener('keydown',(ev)=>{if(ev.key==='Enter'||ev.key===' '){ev.preventDefault();ev.stopPropagation();this.toggleFromToggle(toggle);}},{passive:false});msg.appendChild(toggle);}
825
825
  this._processed.add(msg);msg.dataset.ucInit='1';return{content,toggle};}
826
- _ensureEllipsisEl(msg,contentEl){const content=contentEl||(msg&&msg.querySelector('.uc-content'));if(!content)return null;if(getComputedStyle(content).position==='static'){content.style.position='relative';}
827
- let dot=content.querySelector('.uc-ellipsis');if(!dot){dot=document.createElement('span');dot.className='uc-ellipsis';dot.textContent=this.ellipsisText;dot.style.position='absolute';dot.style.right='0';dot.style.bottom='0';dot.style.paddingLeft='6px';dot.style.pointerEvents='none';dot.style.zIndex='1';dot.style.fontWeight='500';dot.style.opacity='0.75';dot.setAttribute('aria-hidden','true');dot.setAttribute('data-copy-ignore','1');content.appendChild(dot);}
828
- return dot;}
829
- _showEllipsis(msg,contentEl){const dot=this._ensureEllipsisEl(msg,contentEl);if(dot)dot.style.display='inline';}
830
- _hideEllipsis(msg){const content=msg&&msg.querySelector('.uc-content');if(!content)return;const dot=content.querySelector('.uc-ellipsis');if(dot&&dot.parentNode){dot.parentNode.removeChild(dot);}
831
- try{if(content&&content.style&&content.querySelector('.uc-ellipsis')==null){content.style.position='';}}catch(_){}}
826
+ _ensureEllipsisEl(msg,contentEl){const content=contentEl||(msg&&msg.querySelector('.uc-content'));if(!content)return null;try{const legacy=content.querySelector('.uc-ellipsis');if(legacy&&legacy.parentNode){legacy.parentNode.removeChild(legacy);}}catch(_){}
827
+ return null;}
828
+ _showEllipsis(msg,contentEl){this._ensureEllipsisEl(msg,contentEl);}
829
+ _hideEllipsis(msg){this._ensureEllipsisEl(msg,null);}
832
830
  apply(root){const scope=root||document;let list;if(scope.nodeType===1)list=scope.querySelectorAll('.msg-box.msg-user .msg');else list=document.querySelectorAll('.msg-box.msg-user .msg');if(!list||!list.length)return;for(let i=0;i<list.length;i++){const msg=list[i];const st=this._ensureStructure(msg);if(!st)continue;this._update(msg,st.content,st.toggle);}}
833
831
  _update(msg,contentEl,toggleEl){const c=contentEl||(msg&&msg.querySelector('.uc-content'));if(!msg||!c)return;if(this.threshold===0||this.threshold==='0'){const t=toggleEl||msg.querySelector('.uc-toggle');const labels=this._labels();c.classList.remove('uc-collapsed');c.classList.remove('uc-expanded');msg.dataset.ucState='expanded';this._hideEllipsis(msg);if(t){t.classList.remove('visible');t.setAttribute('aria-expanded','false');t.title=labels.expand;const img=t.querySelector('img');if(img){img.alt=labels.expand;}}
834
832
  return;}
@@ -51,6 +51,7 @@ action.save = Speichern
51
51
  action.save_as = Speichern unter...
52
52
  action.save_selection_as = Auswahl speichern unter...
53
53
  action.select_all = Alle auswählen
54
+ action.select_unselect_all = Alle auswählen/abwählen
54
55
  action.tab.add.chat: Neuen Chat hinzufügen
55
56
  action.tab.add.chat.tooltip: Neuen Chat hinzufügen (RMT für mehr Optionen...)
56
57
  action.tab.add.notepad = Neuen Notizblock hinzufügen
@@ -902,7 +903,10 @@ mode.computer.tooltip = Computerbenutzung (Maus, Tastatur, Navigation)
902
903
  mode.expert = Experten (Kooperation)
903
904
  mode.expert.tooltip = Experten zum Hintergrund rufen
904
905
  mode.img = Bild und Video
906
+ mode.img.image = Bild
907
+ mode.img.music = Musik
905
908
  mode.img.tooltip = Bildgenerierung mit DALL-E
909
+ mode.img.video = Video
906
910
  mode.langchain = Langchain
907
911
  mode.langchain.tooltip = Chat mit Modellen von Langchain
908
912
  model.ctx = Kontext-Token
@@ -51,6 +51,7 @@ action.save = Save
51
51
  action.save_as = Save as...
52
52
  action.save_selection_as = Save selection as...
53
53
  action.select_all = Select all
54
+ action.select_unselect_all = Select/Unselect All
54
55
  action.tab.add.chat = Add a new chat
55
56
  action.tab.add.chat.tooltip = Add a new chat (RMB click to more options...)
56
57
  action.tab.add.notepad = Add a new notepad
@@ -95,6 +96,8 @@ agent.evolve.winner = Winner: agent
95
96
  agent.infinity.confirm.content = WARNING: You are attempting to run an infinite loop! This may cause heavy token usage. Are you sure you want to continue?
96
97
  agent.name.supervisor = Supervisor
97
98
  agent.name.worker = Worker
99
+ agent.option.debug.trace_id = Trace ID
100
+ agent.option.debug.trace_id.desc = Optional Trace ID for tracing in OpenAI panel: https://platform.openai.com/logs?api=traces (OpenAI agents only)
98
101
  agent.option.model = Model
99
102
  agent.option.name = Name
100
103
  agent.option.prompt = Prompt
@@ -112,6 +115,7 @@ agent.option.prompt.worker.desc = Prompt for Worker
112
115
  agent.option.refine.after_each = After each step
113
116
  agent.option.refine.after_each.desc = Refine plan after each step
114
117
  agent.option.role = Short description of the agent's operation for instructing the model (optional)
118
+ agent.option.role.label = Role
115
119
  agent.option.section.base = Base agent
116
120
  agent.option.section.chooser = Chooser
117
121
  agent.option.section.feedback = Feedback
@@ -159,6 +163,7 @@ agent.planner.ui.subtask_finished = Finished Sub Task {index}/{total}: {name}
159
163
  agent.planner.ui.subtask_header.one = **===== Sub Task {index}: {name} =====**
160
164
  agent.planner.ui.subtask_header.progress = **===== Sub Task {index}/{total}: {name} =====**
161
165
  agent.planner.ui.updated_remaining_plan = Updated remaining plan:
166
+ agent.tab.debug = Debug
162
167
  alert.preset.empty_id = Name is required.
163
168
  alert.preset.no_chat_completion = At least one of: chat, completion, img or vision option is required!
164
169
  alert.snap.file_manager = Snap detected. Please open the directory manually in your file manager:
@@ -913,7 +918,10 @@ mode.computer.tooltip = Computer use (mouse, keyboard, navigation)
913
918
  mode.expert = Experts (Co-op)
914
919
  mode.expert.tooltip = Experts to call in the background
915
920
  mode.img = Image and video
921
+ mode.img.image = Image
922
+ mode.img.music = Music
916
923
  mode.img.tooltip = Image generation
924
+ mode.img.video = Video
917
925
  mode.langchain = Langchain
918
926
  mode.langchain.tooltip = Chat with models provided by Langchain
919
927
  model.ctx = Context tokens
@@ -51,6 +51,7 @@ action.save = Guardar
51
51
  action.save_as = Guardar como...
52
52
  action.save_selection_as = Guardar selección como...
53
53
  action.select_all = Seleccionar todo
54
+ action.select_unselect_all = Seleccionar/Deseleccionar todo
54
55
  action.tab.add.chat: Añadir un nuevo chat
55
56
  action.tab.add.chat.tooltip: Añadir un nuevo chat (clic derecho para más opciones...)
56
57
  action.tab.add.notepad = Agregar un nuevo bloc de notas
@@ -903,7 +904,10 @@ mode.computer.tooltip = Uso de la computadora (ratón, teclado, navegación)
903
904
  mode.expert = Expertos (cooperación)
904
905
  mode.expert.tooltip = Llamar a expertos en segundo plano
905
906
  mode.img = Imagen y video
907
+ mode.img.image = Imagen
908
+ mode.img.music = Música
906
909
  mode.img.tooltip = Generar imagen usando DALL-E
910
+ mode.img.video = Vídeo
907
911
  mode.langchain = Langchain
908
912
  mode.langchain.tooltip = Chatear con modelos proporcionados por Langchain
909
913
  model.ctx = Tokens de contexto
@@ -51,6 +51,7 @@ action.save = Enregistrer
51
51
  action.save_as = Enregistrer sous...
52
52
  action.save_selection_as = Enregistrer la sélection sous...
53
53
  action.select_all = Sélectionner tout
54
+ action.select_unselect_all = Sélectionner/Désélectionner tout
54
55
  action.tab.add.chat: Ajouter une nouvelle discussion
55
56
  action.tab.add.chat.tooltip: Ajouter une nouvelle discussion (Clic Droit pour plus d'options...)
56
57
  action.tab.add.notepad = Ajouter un nouveau bloc-notes
@@ -902,7 +903,10 @@ mode.computer.tooltip = Utilisation de l'ordinateur (souris, clavier, navigation
902
903
  mode.expert = Experts (co-opération)
903
904
  mode.expert.tooltip = Appeler des experts en arrière-plan
904
905
  mode.img = Image et vidéo
906
+ mode.img.image = Image
907
+ mode.img.music = Musique
905
908
  mode.img.tooltip = Génération d'image avec DALL-E
909
+ mode.img.video = Vidéo
906
910
  mode.langchain = Langchain
907
911
  mode.langchain.tooltip = Discussion avec les modèles fournis par Langchain
908
912
  model.ctx = Jetons de contexte
@@ -51,6 +51,7 @@ action.save = Salva
51
51
  action.save_as = Salva con nome...
52
52
  action.save_selection_as = Salva selezione come...
53
53
  action.select_all = Seleziona tutto
54
+ action.select_unselect_all = Seleziona/Deseleziona tutto
54
55
  action.tab.add.chat: Aggiungi una nuova chat
55
56
  action.tab.add.chat.tooltip: Aggiungi una nuova chat (Clic Destro per maggiori opzioni...)
56
57
  action.tab.add.notepad = Aggiungi un nuovo blocco note
@@ -902,7 +903,10 @@ mode.computer.tooltip = Uso del computer (mouse, tastiera, navigazione)
902
903
  mode.expert = Esperti (cooperazione)
903
904
  mode.expert.tooltip = Chiamare esperti in background
904
905
  mode.img = Immagine e video
906
+ mode.img.image = Immagine
907
+ mode.img.music = Musica
905
908
  mode.img.tooltip = Generazione immagini con DALL-E
909
+ mode.img.video = Video
906
910
  mode.langchain = Langchain
907
911
  mode.langchain.tooltip = Chattare con modelli forniti da Langchain
908
912
  model.ctx = Token di contesto
@@ -51,6 +51,7 @@ action.save = Zapisz
51
51
  action.save_as = Zapisz jako...
52
52
  action.save_selection_as = Zapisz zaznaczenie jako...
53
53
  action.select_all = Wybierz wszystko
54
+ action.select_unselect_all = Zaznacz/Odznacz wszystko
54
55
  action.tab.add.chat: Dodaj nowy czat
55
56
  action.tab.add.chat.tooltip: Dodaj nowy czat (PPM dla więcej opcji...)
56
57
  action.tab.add.notepad = Dodaj nowy notatnik
@@ -903,7 +904,10 @@ mode.computer.tooltip = Kontrola komputera (mysz, klawiatura)
903
904
  mode.expert = Eksperci (współpraca)
904
905
  mode.expert.tooltip = Eksperci do wezwania w tle
905
906
  mode.img = Obraz i wideo
907
+ mode.img.image = Obraz
908
+ mode.img.music = Muzyka
906
909
  mode.img.tooltip = Generowanie obrazów przy użyciu DALL-E
910
+ mode.img.video = Wideo
907
911
  mode.langchain = Langchain
908
912
  mode.langchain.tooltip = Czat z modelami dostarczonymi przez Langchain
909
913
  model.ctx = Tokeny kontekstu
@@ -51,6 +51,7 @@ action.save = Зберегти
51
51
  action.save_as = Зберегти як...
52
52
  action.save_selection_as = Зберегти вибір як...
53
53
  action.select_all = Вибрати все
54
+ action.select_unselect_all = Вибрати/Скасувати вибір всіх
54
55
  action.tab.add.chat: Додати новий чат
55
56
  action.tab.add.chat.tooltip: Додати новий чат (ПКМ для більше опцій...)
56
57
  action.tab.add.notepad = Додати новий блокнот
@@ -902,7 +903,10 @@ mode.computer.tooltip = Використання комп'ютера (миша,
902
903
  mode.expert = Експерти (співпраця)
903
904
  mode.expert.tooltip = Виклик експертів на задній план
904
905
  mode.img = Зображення та відео
906
+ mode.img.image = Зображення
907
+ mode.img.music = Музика
905
908
  mode.img.tooltip = Генерація зображень за допомогою DALL-E
909
+ mode.img.video = Відео
906
910
  mode.langchain = Langchain
907
911
  mode.langchain.tooltip = Чат з моделями, наданими Langchain
908
912
  model.ctx = Токени контексту
@@ -51,6 +51,7 @@ action.save = 保存
51
51
  action.save_as = 另存為...
52
52
  action.save_selection_as = 将选择保存为...
53
53
  action.select_all = 选择全部
54
+ action.select_unselect_all = 全选/取消全选
54
55
  action.tab.add.chat: 添加新聊天
55
56
  action.tab.add.chat.tooltip: 添加新聊天(右键单击获取更多选项...)
56
57
  action.tab.add.notepad = 添加新记事本
@@ -902,7 +903,10 @@ mode.computer.tooltip = 使用计算机(鼠标、键盘、导航)
902
903
  mode.expert = 专家 (合作)
903
904
  mode.expert.tooltip = 背景中呼叫专家
904
905
  mode.img = 图像和视频
906
+ mode.img.image = 图片
907
+ mode.img.music = 音乐
905
908
  mode.img.tooltip = 使用DALL-E生成圖像
909
+ mode.img.video = 视频
906
910
  mode.langchain = Langchain模式
907
911
  mode.langchain.tooltip = 使用Langchain提供的模型進行聊天
908
912
  model.ctx = 上下文令牌
pygpt_net/icons.qrc CHANGED
@@ -92,9 +92,12 @@
92
92
  <file alias="pause_circle.svg">data/icons/pause_circle.svg</file>
93
93
  <file alias="photos.svg">data/icons/photos.svg</file>
94
94
  <file alias="pin.svg">data/icons/pin.svg</file>
95
+ <file alias="pin2.svg">data/icons/pin2.svg</file>
96
+ <file alias="pin3.svg">data/icons/pin3.svg</file>
95
97
  <file alias="play.svg">data/icons/play.svg</file>
96
98
  <file alias="play_pause.svg">data/icons/play_pause.svg</file>
97
99
  <file alias="playlist_add.svg">data/icons/playlist_add.svg</file>
100
+ <file alias="point.svg">data/icons/point.svg</file>
98
101
  <file alias="power.svg">data/icons/power.svg</file>
99
102
  <file alias="print.svg">data/icons/print.svg</file>
100
103
  <file alias="public_filled.svg">data/icons/public_filled.svg</file>
@@ -125,6 +128,7 @@
125
128
  <file alias="stt.svg">data/icons/stt.svg</file>
126
129
  <file alias="sync.svg">data/icons/sync.svg</file>
127
130
  <file alias="tag.svg">data/icons/tag.svg</file>
131
+ <file alias="target.svg">data/icons/target.svg</file>
128
132
  <file alias="task.svg">data/icons/task.svg</file>
129
133
  <file alias="terminal.svg">data/icons/terminal.svg</file>
130
134
  <file alias="text.svg">data/icons/text.svg</file>