pinokiod 3.181.0 → 3.182.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 (46) hide show
  1. package/kernel/util.js +15 -2
  2. package/package.json +1 -1
  3. package/server/index.js +111 -12
  4. package/server/public/common.js +433 -240
  5. package/server/public/files-app/app.css +64 -0
  6. package/server/public/files-app/app.js +87 -0
  7. package/server/public/install.js +8 -1
  8. package/server/public/layout.js +11 -1
  9. package/server/public/sound/beep.mp3 +0 -0
  10. package/server/public/sound/bell.mp3 +0 -0
  11. package/server/public/sound/bright-ring.mp3 +0 -0
  12. package/server/public/sound/clap.mp3 +0 -0
  13. package/server/public/sound/deep-ring.mp3 +0 -0
  14. package/server/public/sound/gasp.mp3 +0 -0
  15. package/server/public/sound/hehe.mp3 +0 -0
  16. package/server/public/sound/levelup.mp3 +0 -0
  17. package/server/public/sound/light-pop.mp3 +0 -0
  18. package/server/public/sound/light-ring.mp3 +0 -0
  19. package/server/public/sound/meow.mp3 +0 -0
  20. package/server/public/sound/piano.mp3 +0 -0
  21. package/server/public/sound/pop.mp3 +0 -0
  22. package/server/public/sound/uhoh.mp3 +0 -0
  23. package/server/public/sound/whistle.mp3 +0 -0
  24. package/server/public/style.css +173 -2
  25. package/server/public/tab-idle-notifier.js +697 -4
  26. package/server/public/terminal-settings.js +1131 -0
  27. package/server/public/urldropdown.css +28 -1
  28. package/server/views/{terminals.ejs → agents.ejs} +97 -30
  29. package/server/views/app.ejs +112 -65
  30. package/server/views/bootstrap.ejs +8 -0
  31. package/server/views/connect.ejs +1 -1
  32. package/server/views/d.ejs +172 -18
  33. package/server/views/editor.ejs +8 -0
  34. package/server/views/file_browser.ejs +4 -0
  35. package/server/views/index.ejs +1 -1
  36. package/server/views/init/index.ejs +9 -1
  37. package/server/views/install.ejs +8 -0
  38. package/server/views/net.ejs +1 -1
  39. package/server/views/network.ejs +1 -1
  40. package/server/views/pro.ejs +8 -0
  41. package/server/views/prototype/index.ejs +8 -0
  42. package/server/views/screenshots.ejs +1 -2
  43. package/server/views/settings.ejs +1 -2
  44. package/server/views/shell.ejs +8 -0
  45. package/server/views/terminal.ejs +8 -0
  46. package/server/views/tools.ejs +1 -2
@@ -84,6 +84,7 @@ body.dark .tab:focus-visible {
84
84
  margin-left: 10px;
85
85
  }
86
86
  .tab i.img {
87
+ flex-shrink: 0;
87
88
  height: 40px;
88
89
  width: 40px;
89
90
  background: white;
@@ -92,10 +93,10 @@ body.dark .tab:focus-visible {
92
93
  justify-content: center;
93
94
  font-size: 20px;
94
95
  align-items: center;
95
- border-radius: 5px;
96
+ border-radius: 40px;
96
97
  }
97
98
  .tab img {
98
- border-radius: 5px;
99
+ border-radius: 40px;
99
100
  height: 40px;
100
101
  width: 40px;
101
102
  background: white;
@@ -161,6 +162,47 @@ body.dark .menu-container {
161
162
  flex-direction: column;
162
163
  box-sizing: border-box;
163
164
  }
165
+ .column-subtitle {
166
+ font-size: 12px;
167
+ opacity: 0.7;
168
+ padding: 8px 10px 0;
169
+ }
170
+ body.dark .column-subtitle {
171
+ color: rgba(255, 255, 255, 0.75);
172
+ }
173
+ .menu-grid {
174
+ display: grid;
175
+ grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
176
+ }
177
+ .menu-column {
178
+ border: 1px solid rgba(0, 0, 0, 0.05);
179
+ overflow: hidden;
180
+ }
181
+ body.dark .menu-column {
182
+ border-color: rgba(255, 255, 255, 0.08);
183
+ }
184
+ .menu-column .tab-header {
185
+ background: rgba(0, 0, 0, 0.03);
186
+ }
187
+ body.dark .menu-column .tab-header {
188
+ background: rgba(255, 255, 255, 0.06);
189
+ }
190
+ .menu-column .tab-content {
191
+ padding-top: 4px;
192
+ display: flex;
193
+ flex-direction: column;
194
+ flex-wrap: nowrap;
195
+ align-items: stretch;
196
+ gap: 4px;
197
+ }
198
+ .menu-column .tab-content .tab {
199
+ flex: 0 0 auto;
200
+ }
201
+ @media (max-width: 700px) {
202
+ .menu-grid {
203
+ grid-template-columns: 1fr;
204
+ }
205
+ }
164
206
  body.dark .tab-header {
165
207
  background: rgba(255,255,255,0.04);
166
208
  }
@@ -367,28 +409,140 @@ body.dark #update-spec {
367
409
  </div>
368
410
  </div>
369
411
 
370
- <% index = 0 %>
371
- <% dynamic.forEach((item) => { %>
412
+ <%
413
+ let index = 0;
414
+ const userTerminal = dynamic && dynamic.length ? dynamic[0] : null;
415
+ const cliMenu = dynamic.find((item) => item && item.title === "Terminal Agents");
416
+ const ideMenu = dynamic.find((item) => item && item.title === "IDE Agents");
417
+ const handled = new Set();
418
+ if (userTerminal) handled.add(userTerminal);
419
+ if (cliMenu) handled.add(cliMenu);
420
+ if (ideMenu) handled.add(ideMenu);
421
+ const remaining = dynamic.filter((item) => !handled.has(item));
422
+ %>
423
+
424
+ <div class='menu-grid'>
425
+ <% if (userTerminal && userTerminal.menu && userTerminal.menu.length) { %>
426
+ <div class='menu-container menu-column user-terminal'>
427
+ <div class='tab-header'>
428
+ <h3><i class='<%= userTerminal.icon %>'></i> <%= userTerminal.title %></h3>
429
+ </div>
430
+ <% if (userTerminal.subtitle) { %>
431
+ <div class='column-subtitle'><%= userTerminal.subtitle %></div>
432
+ <% } %>
433
+ <div class='tab-content'>
434
+ <% userTerminal.menu.forEach((i) => { %>
435
+ <div class='tab' role="button" tabindex="0" data-index="<%= index++ %>" data-target="@<%= i.href %>" data-href="<%= i.href %>">
436
+ <% if (i.image) { %>
437
+ <img src="<%= i.image %>">
438
+ <% } else if (i.icon) { %>
439
+ <i class="img <%= i.icon %>"></i>
440
+ <% } %>
441
+ <h2><%= i.title %></h2>
442
+ <% if (i.subtitle) { %>
443
+ <div class='subtitle'><%= i.subtitle %></div>
444
+ <% } %>
445
+ <div class='flexible'></div>
446
+ <% if (i.link) { %>
447
+ <div target="_blank" data-href="<%= i.link %>"><i class="fa-solid fa-circle-info"></i></div>
448
+ <% } %>
449
+ <div class='disclosure-indicator' aria-hidden="true">
450
+ <i class="fa-solid fa-chevron-right"></i>
451
+ </div>
452
+ </div>
453
+ <% }) %>
454
+ </div>
455
+ </div>
456
+ <% } %>
457
+
458
+ <% if (cliMenu && cliMenu.menu && cliMenu.menu.length) { %>
459
+ <div class='menu-container menu-column cli-column'>
460
+ <div class='tab-header'>
461
+ <h3><i class='<%= cliMenu.icon %>'></i> Terminal Agents</h3>
462
+ </div>
463
+ <% if (cliMenu.subtitle) { %>
464
+ <div class='column-subtitle'><%= cliMenu.subtitle %></div>
465
+ <% } %>
466
+ <div class='tab-content'>
467
+ <% cliMenu.menu.forEach((i) => { %>
468
+ <div class='tab' role="button" tabindex="0" data-index="<%= index++ %>" data-target="@<%= i.href %>" data-href="<%= i.href %>">
469
+ <% if (i.image) { %>
470
+ <img src="<%= i.image %>">
471
+ <% } else if (i.icon) { %>
472
+ <i class="img <%= i.icon %>"></i>
473
+ <% } %>
474
+ <h2><%= i.title %></h2>
475
+ <% if (i.subtitle) { %>
476
+ <div class='subtitle'><%= i.subtitle %></div>
477
+ <% } %>
478
+ <div class='flexible'></div>
479
+ <% if (i.link) { %>
480
+ <div target="_blank" data-href="<%= i.link %>"><i class="fa-solid fa-circle-info"></i></div>
481
+ <% } %>
482
+ <div class='disclosure-indicator' aria-hidden="true">
483
+ <i class="fa-solid fa-chevron-right"></i>
484
+ </div>
485
+ </div>
486
+ <% }) %>
487
+ </div>
488
+ </div>
489
+ <% } %>
490
+
491
+ <% if (ideMenu && ideMenu.menu && ideMenu.menu.length) { %>
492
+ <div class='menu-container menu-column ide-column'>
493
+ <div class='tab-header'>
494
+ <h3><i class='<%= ideMenu.icon %>'></i> IDE Agents</h3>
495
+ </div>
496
+ <% if (ideMenu.subtitle) { %>
497
+ <div class='column-subtitle'><%= ideMenu.subtitle %></div>
498
+ <% } %>
499
+ <div class='tab-content'>
500
+ <% ideMenu.menu.forEach((i) => { %>
501
+ <div class='tab' role="button" tabindex="0" data-index="<%= index++ %>" data-target="@<%= i.href %>" data-href="<%= i.href %>">
502
+ <% if (i.image) { %>
503
+ <img src="<%= i.image %>">
504
+ <% } else if (i.icon) { %>
505
+ <i class="img <%= i.icon %>"></i>
506
+ <% } %>
507
+ <h2><%= i.title %></h2>
508
+ <% if (i.subtitle) { %>
509
+ <div class='subtitle'><%= i.subtitle %></div>
510
+ <% } %>
511
+ <div class='flexible'></div>
512
+ <% if (i.link) { %>
513
+ <div target="_blank" data-href="<%= i.link %>"><i class="fa-solid fa-circle-info"></i></div>
514
+ <% } %>
515
+ <div class='disclosure-indicator' aria-hidden="true">
516
+ <i class="fa-solid fa-chevron-right"></i>
517
+ </div>
518
+ </div>
519
+ <% }) %>
520
+ </div>
521
+ </div>
522
+ <% } %>
523
+ </div>
524
+
525
+ <% remaining.forEach((item) => { %>
372
526
  <% if (item.menu) { %>
373
527
  <div class='menu-container'>
374
528
  <div class='tab-header'>
375
- <h3><i class='<%=item.icon%>'></i> <%=item.title%></h3>
529
+ <h3><i class='<%= item.icon %>'></i> <%= item.title %></h3>
376
530
  </div>
377
531
  <div class='tab-content'>
378
532
  <% item.menu.forEach((i) => { %>
379
- <div class='tab' role="button" tabindex="0" data-index="<%=index++%>" data-target="@<%=i.href%>" data-href="<%=i.href%>">
533
+ <div class='tab' role="button" tabindex="0" data-index="<%= index++ %>" data-target="@<%= i.href %>" data-href="<%= i.href %>">
380
534
  <% if (i.image) { %>
381
- <img src="<%=i.image%>">
535
+ <img src="<%= i.image %>">
382
536
  <% } else if (i.icon) { %>
383
- <i class="img <%=i.icon%>"></i>
537
+ <i class="img <%= i.icon %>"></i>
384
538
  <% } %>
385
- <h2><%=i.title%></h1>
539
+ <h2><%= i.title %></h2>
386
540
  <% if (i.subtitle) { %>
387
- <div class='subtitle'><%=i.subtitle%></div>
541
+ <div class='subtitle'><%= i.subtitle %></div>
388
542
  <% } %>
389
543
  <div class='flexible'></div>
390
544
  <% if (i.link) { %>
391
- <div target="_blank" data-href="<%=i.link%>"><i class="fa-solid fa-circle-info"></i></div>
545
+ <div target="_blank" data-href="<%= i.link %>"><i class="fa-solid fa-circle-info"></i></div>
392
546
  <% } %>
393
547
  <div class='disclosure-indicator' aria-hidden="true">
394
548
  <i class="fa-solid fa-chevron-right"></i>
@@ -398,22 +552,22 @@ body.dark #update-spec {
398
552
  </div>
399
553
  </div>
400
554
  <% } else { %>
401
- <div class='tab' data-index="<%=index++%>">
555
+ <div class='tab' data-index="<%= index++ %>">
402
556
  <% if (item.image) { %>
403
- <img src="<%=item.image%>">
557
+ <img src="<%= item.image %>">
404
558
  <% } else if (item.icon) { %>
405
- <i class="img <%=item.icon%>"></i>
559
+ <i class="img <%= item.icon %>"></i>
406
560
  <% } %>
407
561
  <div class='col'>
408
- <h2><%=item.title%></h1>
562
+ <h2><%= item.title %></h2>
409
563
  <% if (item.subtitle) { %>
410
- <div class='subtitle'><%=item.subtitle%></div>
564
+ <div class='subtitle'><%= item.subtitle %></div>
411
565
  <% } %>
412
566
  <div class='btns'>
413
567
  <% if (item.link) { %>
414
- <a class='btn' target="_blank" href="<%=item.link%>"><i class="fa-solid fa-circle-info"></i></a>
568
+ <a class='btn' target="_blank" href="<%= item.link %>"><i class="fa-solid fa-circle-info"></i></a>
415
569
  <% } %>
416
- <a class='run-btn btn' href="<%=item.href%>"><i class="fa-solid <%=item.type === "Start" ? 'fa-play' : 'fa-rocket'%>"></i> <%=item.type%></a>
570
+ <a class='run-btn btn' href="<%= item.href %>"><i class="fa-solid <%= item.type === "Start" ? 'fa-play' : 'fa-rocket' %>"></i> <%= item.type %></a>
417
571
  </div>
418
572
  </div>
419
573
  </div>
@@ -13,6 +13,7 @@
13
13
  <script src="/xterm-addon-search-bar.js"></script>
14
14
  <script src="/sweetalert2.js"></script>
15
15
  <script src="/Socket.js"></script>
16
+ <script src="/terminal-settings.js"></script>
16
17
  <script src="/common.js"></script>
17
18
  <script src="/he.js"></script>
18
19
  <script src="/opener.js"></script>
@@ -680,7 +681,14 @@ document.addEventListener("DOMContentLoaded", async () => {
680
681
  if (res && res.config) {
681
682
  config = res.config
682
683
  }
684
+ const baseConfig = Object.assign({}, config)
685
+ if (window.PinokioTerminalSettings && typeof window.PinokioTerminalSettings.applyToConfig === 'function') {
686
+ config = window.PinokioTerminalSettings.applyToConfig(config)
687
+ }
683
688
  const term = new Terminal(config)
689
+ if (window.PinokioTerminalSettings && typeof window.PinokioTerminalSettings.register === 'function') {
690
+ window.PinokioTerminalSettings.register(term, { baseConfig })
691
+ }
684
692
  term.open(document.querySelector("#terminal"))
685
693
 
686
694
 
@@ -52,6 +52,10 @@
52
52
  </div>
53
53
  </aside>
54
54
  <main class="files-app__main">
55
+ <button class="files-app__sidebar-toggle" id="files-app-toggle-sidebar" type="button" aria-controls="files-app-tree" aria-expanded="true">
56
+ <span class="sr-only">Hide files</span>
57
+ <i class="fa-solid fa-chevron-left" aria-hidden="true"></i>
58
+ </button>
55
59
  <div class="files-app__tabs" id="files-app-tabs" role="tablist" aria-label="Open files"></div>
56
60
  <div class="files-app__editor" id="files-app-editor" role="presentation"></div>
57
61
  <div class="files-app__status" id="files-app-status" role="status" aria-live="polite"></div>
@@ -729,7 +729,7 @@ body.dark aside .current.selected {
729
729
  <a id='downloadlogs' download class='hidden btn2' href="/pinokio/logs.zip"><i class="fa-solid fa-download"></i><div class='caption'>Download logs</div></a>
730
730
  <a class='tab' href="/screenshots"><i class="fa-solid fa-camera"></i><div class='caption'>Screenshots</div></a>
731
731
  <a class='tab' href="/tools"><i class="fa-solid fa-toolbox"></i><div class='caption'>Installed Tools</div></a>
732
- <a class='tab' href="/terminals"><i class="fa-solid fa-desktop"></i><div class='caption'>Terminals</div></a>
732
+ <a class='tab' href="/agents"><i class="fa-solid fa-robot"></i><div class='caption'>Agents</div></a>
733
733
  <a class='tab' href="/home?mode=settings"><i class="fa-solid fa-gear"></i><div class='caption'>Settings</div></a>
734
734
  <% if (typeof peer_qr !== 'undefined' && peer_qr) { %>
735
735
  <div class='qr' style='padding:12px 10px; text-align:center;'>
@@ -1497,6 +1497,7 @@ body.dark .ace-editor {
1497
1497
  <script src="/report.js"></script>
1498
1498
  <script src="/normalize.js"></script>
1499
1499
  <script src="/Socket.js"></script>
1500
+ <script src="/terminal-settings.js"></script>
1500
1501
  <script src="/noty.js"></script>
1501
1502
  <script src="/notyq.js"></script>
1502
1503
  <script src="/xterm.js"></script>
@@ -1949,7 +1950,7 @@ body.dark .ace-editor {
1949
1950
  <a id='downloadlogs' download class='hidden btn2' href="/pinokio/logs.zip"><i class="fa-solid fa-download"></i><div class='caption'>Download logs</div></a>
1950
1951
  <a class='tab' href="/screenshots"><i class="fa-solid fa-camera"></i><div class='caption'>Screenshots</div></a>
1951
1952
  <a class='tab' href="/tools"><i class="fa-solid fa-toolbox"></i><div class='caption'>Installed Tools</div></a>
1952
- <a class='tab' href="/terminals"><i class="fa-solid fa-desktop"></i><div class='caption'>Terminals</div></a>
1953
+ <a class='tab' href="/agents"><i class="fa-solid fa-robot"></i><div class='caption'>Agents</div></a>
1953
1954
  <a class='tab' href="/home?mode=settings"><i class="fa-solid fa-gear"></i><div class='caption'>Settings</div></a>
1954
1955
  <% if (typeof peer_qr !== 'undefined' && peer_qr) { %>
1955
1956
  <div class='qr' style='padding:12px 10px; text-align:center;'>
@@ -2656,7 +2657,14 @@ const createTerm = async (_theme) => {
2656
2657
  if (res && res.config) {
2657
2658
  config = res.config
2658
2659
  }
2660
+ const baseConfig = Object.assign({}, config)
2661
+ if (window.PinokioTerminalSettings && typeof window.PinokioTerminalSettings.applyToConfig === 'function') {
2662
+ config = window.PinokioTerminalSettings.applyToConfig(config)
2663
+ }
2659
2664
  const term = new Terminal(config)
2665
+ if (window.PinokioTerminalSettings && typeof window.PinokioTerminalSettings.register === 'function') {
2666
+ window.PinokioTerminalSettings.register(term, { baseConfig })
2667
+ }
2660
2668
  term.open(document.querySelector("#terminal2"))
2661
2669
  document.querySelector("#terminal-container").classList.remove("hidden")
2662
2670
 
@@ -124,6 +124,7 @@ body {
124
124
  <script src="/xterm-addon-web-links.js"></script>
125
125
  <script src="/xterm-theme.js"></script>
126
126
  <script src="/Socket.js"></script>
127
+ <script src="/terminal-settings.js"></script>
127
128
  <!--
128
129
  <script src="/install.js"></script>
129
130
  -->
@@ -169,7 +170,14 @@ const createTerm = async (_theme) => {
169
170
  if (res && res.config) {
170
171
  config = res.config
171
172
  }
173
+ const baseConfig = Object.assign({}, config)
174
+ if (window.PinokioTerminalSettings && typeof window.PinokioTerminalSettings.applyToConfig === 'function') {
175
+ config = window.PinokioTerminalSettings.applyToConfig(config)
176
+ }
172
177
  const term = new Terminal(config)
178
+ if (window.PinokioTerminalSettings && typeof window.PinokioTerminalSettings.register === 'function') {
179
+ window.PinokioTerminalSettings.register(term, { baseConfig })
180
+ }
173
181
  term.open(document.querySelector("#terminal"))
174
182
 
175
183
  term.attachCustomKeyEventHandler(event => {
@@ -821,7 +821,7 @@ document.addEventListener('DOMContentLoaded', function() {
821
821
  <a id='downloadlogs' download class='hidden btn2' href="/pinokio/logs.zip"><i class="fa-solid fa-download"></i><div class='caption'>Download logs</div></a>
822
822
  <a class='tab' href="/screenshots"><i class="fa-solid fa-camera"></i><div class='caption'>Screenshots</div></a>
823
823
  <a class='tab' href="/tools"><i class="fa-solid fa-toolbox"></i><div class='caption'>Installed Tools</div></a>
824
- <a class='tab' href="/terminals"><i class="fa-solid fa-desktop"></i><div class='caption'>Terminals</div></a>
824
+ <a class='tab' href="/agents"><i class="fa-solid fa-robot"></i><div class='caption'>Agents</div></a>
825
825
  <a class='tab' href="/home?mode=settings"><i class="fa-solid fa-gear"></i><div class='caption'>Settings</div></a>
826
826
  <% if (typeof peer_qr !== 'undefined' && peer_qr) { %>
827
827
  <div class='qr' style='padding:12px 10px; text-align:center;'>
@@ -1182,7 +1182,7 @@ document.addEventListener('DOMContentLoaded', function() {
1182
1182
  <a id='downloadlogs' download class='hidden btn2' href="/pinokio/logs.zip"><i class="fa-solid fa-download"></i><div class='caption'>Download logs</div></a>
1183
1183
  <a class='tab' href="/screenshots"><i class="fa-solid fa-camera"></i><div class='caption'>Screenshots</div></a>
1184
1184
  <a class='tab' href="/tools"><i class="fa-solid fa-toolbox"></i><div class='caption'>Installed Tools</div></a>
1185
- <a class='tab' href="/terminals"><i class="fa-solid fa-desktop"></i><div class='caption'>Terminals</div></a>
1185
+ <a class='tab' href="/agents"><i class="fa-solid fa-robot"></i><div class='caption'>Agents</div></a>
1186
1186
  <a class='tab' href="/home?mode=settings"><i class="fa-solid fa-gear"></i><div class='caption'>Settings</div></a>
1187
1187
  <% if (typeof peer_qr !== 'undefined' && peer_qr) { %>
1188
1188
  <div class='qr' style='padding:12px 10px; text-align:center;'>
@@ -13,6 +13,7 @@
13
13
  <script src="/xterm-addon-search-bar.js"></script>
14
14
  <script src="/sweetalert2.js"></script>
15
15
  <script src="/Socket.js"></script>
16
+ <script src="/terminal-settings.js"></script>
16
17
  <script src="/common.js"></script>
17
18
  <script src="/he.js"></script>
18
19
  <script src="/opener.js"></script>
@@ -228,7 +229,14 @@ const createTerm = async (_theme) => {
228
229
  if (res && res.config) {
229
230
  config = res.config
230
231
  }
232
+ const baseConfig = Object.assign({}, config)
233
+ if (window.PinokioTerminalSettings && typeof window.PinokioTerminalSettings.applyToConfig === 'function') {
234
+ config = window.PinokioTerminalSettings.applyToConfig(config)
235
+ }
231
236
  const term = new Terminal(config)
237
+ if (window.PinokioTerminalSettings && typeof window.PinokioTerminalSettings.register === 'function') {
238
+ window.PinokioTerminalSettings.register(term, { baseConfig })
239
+ }
232
240
  term.open(document.querySelector("#terminal"))
233
241
 
234
242
  term.attachCustomKeyEventHandler(event => {
@@ -981,6 +981,7 @@ body.dark .appcanvas {
981
981
  <script src="/report.js"></script>
982
982
  <script src="/normalize.js"></script>
983
983
  <script src="/Socket.js"></script>
984
+ <script src="/terminal-settings.js"></script>
984
985
  <script src="/noty.js"></script>
985
986
  <script src="/notyq.js"></script>
986
987
  <script src="/xterm.js"></script>
@@ -1570,7 +1571,14 @@ async function displayResults(config) {
1570
1571
  term_config = res.config
1571
1572
  }
1572
1573
  let socket = new Socket()
1574
+ const baseConfig = Object.assign({}, term_config)
1575
+ if (window.PinokioTerminalSettings && typeof window.PinokioTerminalSettings.applyToConfig === 'function') {
1576
+ term_config = window.PinokioTerminalSettings.applyToConfig(term_config)
1577
+ }
1573
1578
  const term = new Terminal(term_config)
1579
+ if (window.PinokioTerminalSettings && typeof window.PinokioTerminalSettings.register === 'function') {
1580
+ window.PinokioTerminalSettings.register(term, { baseConfig })
1581
+ }
1574
1582
  term.open(document.querySelector("#terminal"))
1575
1583
  term.attachCustomKeyEventHandler(event => {
1576
1584
  console.log({ event })
@@ -198,7 +198,6 @@ body.dark header .home {
198
198
  */
199
199
  header .home {
200
200
  color: var(--light-color);
201
- padding: 10px;
202
201
  }
203
202
  body.dark hr {
204
203
  background: white;
@@ -774,7 +773,7 @@ document.addEventListener('DOMContentLoaded', function() {
774
773
  <a id='downloadlogs' download class='hidden btn2' href="/pinokio/logs.zip"><i class="fa-solid fa-download"></i><div class='caption'>Download logs</div></a>
775
774
  <a class='tab selected' href="/screenshots"><i class="fa-solid fa-camera"></i><div class='caption'>Screenshots</div></a>
776
775
  <a class='tab' href="/tools"><i class="fa-solid fa-toolbox"></i><div class='caption'>Installed Tools</div></a>
777
- <a class='tab' href="/terminals"><i class="fa-solid fa-desktop"></i><div class='caption'>Terminals</div></a>
776
+ <a class='tab' href="/agents"><i class="fa-solid fa-robot"></i><div class='caption'>Agents</div></a>
778
777
  <a class='tab' href="/home?mode=settings"><i class="fa-solid fa-gear"></i><div class='caption'>Settings</div></a>
779
778
  <% if (typeof peer_qr !== 'undefined' && peer_qr) { %>
780
779
  <div class='qr' style='padding:12px 10px; text-align:center;'>
@@ -198,7 +198,6 @@ body.dark header .home {
198
198
  */
199
199
  header .home {
200
200
  color: var(--light-color);
201
- padding: 10px;
202
201
  }
203
202
  body.dark hr {
204
203
  background: white;
@@ -569,7 +568,7 @@ document.addEventListener('DOMContentLoaded', function() {
569
568
  <a id='downloadlogs' download class='hidden btn2' href="/pinokio/logs.zip"><i class="fa-solid fa-download"></i><div class='caption'>Download logs</div></a>
570
569
  <a class='tab' href="/screenshots"><i class="fa-solid fa-camera"></i><div class='caption'>Screenshots</div></a>
571
570
  <a class='tab' href="/tools"><i class="fa-solid fa-toolbox"></i><div class='caption'>Installed Tools</div></a>
572
- <a class='tab' href="/terminals"><i class="fa-solid fa-desktop"></i><div class='caption'>Terminals</div></a>
571
+ <a class='tab' href="/agents"><i class="fa-solid fa-robot"></i><div class='caption'>Agents</div></a>
573
572
  <a class='tab selected' href="/home?mode=settings"><i class="fa-solid fa-gear"></i><div class='caption'>Settings</div></a>
574
573
  <% if (typeof peer_qr !== 'undefined' && peer_qr) { %>
575
574
  <div class='qr' style='padding:12px 10px; text-align:center;'>
@@ -14,6 +14,7 @@
14
14
  <script src="/sweetalert2.js"></script>
15
15
  <script src="/Socket.js"></script>
16
16
  <script src="/terminal_input_tracker.js"></script>
17
+ <script src="/terminal-settings.js"></script>
17
18
  <script src="/common.js"></script>
18
19
  <script src="/he.js"></script>
19
20
  <script src="/opener.js"></script>
@@ -927,7 +928,14 @@ document.addEventListener("DOMContentLoaded", async () => {
927
928
  if (res && res.config) {
928
929
  config = res.config
929
930
  }
931
+ const baseConfig = Object.assign({}, config)
932
+ if (window.PinokioTerminalSettings && typeof window.PinokioTerminalSettings.applyToConfig === 'function') {
933
+ config = window.PinokioTerminalSettings.applyToConfig(config)
934
+ }
930
935
  const term = new Terminal(config)
936
+ if (window.PinokioTerminalSettings && typeof window.PinokioTerminalSettings.register === 'function') {
937
+ window.PinokioTerminalSettings.register(term, { baseConfig })
938
+ }
931
939
  term.open(document.querySelector("#terminal"))
932
940
  const terminalContainer = document.querySelector("#terminal")
933
941
  const dropOverlay = document.createElement("div")
@@ -14,6 +14,7 @@
14
14
  <script src="/sweetalert2.js"></script>
15
15
  <script src="/Socket.js"></script>
16
16
  <script src="/terminal_input_tracker.js"></script>
17
+ <script src="/terminal-settings.js"></script>
17
18
  <script src="/common.js"></script>
18
19
  <script src="/he.js"></script>
19
20
  <script src="/opener.js"></script>
@@ -1011,7 +1012,14 @@ document.addEventListener("DOMContentLoaded", async () => {
1011
1012
  if (res && res.config) {
1012
1013
  config = res.config
1013
1014
  }
1015
+ const baseConfig = Object.assign({}, config)
1016
+ if (window.PinokioTerminalSettings && typeof window.PinokioTerminalSettings.applyToConfig === 'function') {
1017
+ config = window.PinokioTerminalSettings.applyToConfig(config)
1018
+ }
1014
1019
  const term = new Terminal(config)
1020
+ if (window.PinokioTerminalSettings && typeof window.PinokioTerminalSettings.register === 'function') {
1021
+ window.PinokioTerminalSettings.register(term, { baseConfig })
1022
+ }
1015
1023
  term.open(document.querySelector("#terminal"))
1016
1024
  const terminalContainer = document.querySelector("#terminal")
1017
1025
  const dropOverlay = document.createElement("div")
@@ -198,7 +198,6 @@ body.dark header .home {
198
198
  */
199
199
  header .home {
200
200
  color: var(--light-color);
201
- padding: 10px;
202
201
  }
203
202
  body.dark hr {
204
203
  background: white;
@@ -1273,7 +1272,7 @@ document.addEventListener('DOMContentLoaded', function() {
1273
1272
  <a id='downloadlogs' download class='hidden btn2' href="/pinokio/logs.zip"><i class="fa-solid fa-download"></i><div class='caption'>Download logs</div></a>
1274
1273
  <a class='tab' href="/screenshots"><i class="fa-solid fa-camera"></i><div class='caption'>Screenshots</div></a>
1275
1274
  <a class='tab selected' href="/tools"><i class="fa-solid fa-toolbox"></i><div class='caption'>Installed Tools</div></a>
1276
- <a class='tab' href="/terminals"><i class="fa-solid fa-desktop"></i><div class='caption'>Terminals</div></a>
1275
+ <a class='tab' href="/agents"><i class="fa-solid fa-robot"></i><div class='caption'>Agents</div></a>
1277
1276
  <a class='tab' href="/home?mode=settings"><i class="fa-solid fa-gear"></i><div class='caption'>Settings</div></a>
1278
1277
  <% if (typeof peer_qr !== 'undefined' && peer_qr) { %>
1279
1278
  <div class='qr' style='padding:12px 10px; text-align:center;'>