pinokiod 2.15.7 → 2.15.9
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.
- package/kernel/api/index.js +21 -10
- package/kernel/bin/index.js +0 -7
- package/kernel/index.js +1 -1
- package/kernel/lproxy.js +76 -0
- package/kernel/shell.js +8 -5
- package/kernel/shells.js +125 -24
- package/kernel/sysinfo.js +5 -8
- package/kernel/util.js +27 -1
- package/package.json +2 -3
- package/server/index.js +84 -5
- package/server/public/mark.min.js +7 -0
- package/server/public/ollama.webp +0 -0
- package/server/public/style.css +45 -0
- package/server/views/browser-experimental.ejs +5 -7
- package/server/views/editor.ejs +29 -3
- package/server/views/fullscreen_editor.ejs +36 -5
- package/server/views/index.ejs +34 -21
- package/server/views/proxy.ejs +357 -0
package/server/public/style.css
CHANGED
|
@@ -1593,3 +1593,48 @@ footer.status {
|
|
|
1593
1593
|
.btn.red {
|
|
1594
1594
|
background: brown !important;
|
|
1595
1595
|
}
|
|
1596
|
+
|
|
1597
|
+
#error-screen {
|
|
1598
|
+
position: absolute;
|
|
1599
|
+
top: 0;
|
|
1600
|
+
left: 0;
|
|
1601
|
+
bottom: 0;
|
|
1602
|
+
right: 0;
|
|
1603
|
+
z-index: 100000000;
|
|
1604
|
+
display: flex;
|
|
1605
|
+
flex-direction: column;
|
|
1606
|
+
}
|
|
1607
|
+
#error-screen pre {
|
|
1608
|
+
padding: 20px;
|
|
1609
|
+
box-sizing: border-box;
|
|
1610
|
+
width: 100%;
|
|
1611
|
+
/*
|
|
1612
|
+
height: 100%;
|
|
1613
|
+
*/
|
|
1614
|
+
margin: 0;
|
|
1615
|
+
background: royalblue;
|
|
1616
|
+
color: white;
|
|
1617
|
+
overflow: auto;
|
|
1618
|
+
flex-grow: 1;
|
|
1619
|
+
}
|
|
1620
|
+
#error-screen-footer {
|
|
1621
|
+
padding: 10px;
|
|
1622
|
+
box-sizing: border-box;
|
|
1623
|
+
text-align: center;
|
|
1624
|
+
background: royalblue;
|
|
1625
|
+
}
|
|
1626
|
+
#error-screen-close {
|
|
1627
|
+
background: rgba(0, 0, 0, 0.6);
|
|
1628
|
+
font-size: 16px;
|
|
1629
|
+
padding: 10px 20px;
|
|
1630
|
+
font-weight: bold;
|
|
1631
|
+
width: 100%;
|
|
1632
|
+
}
|
|
1633
|
+
|
|
1634
|
+
mark{
|
|
1635
|
+
background: red;
|
|
1636
|
+
color: white;
|
|
1637
|
+
padding: 5px;
|
|
1638
|
+
display: inline-block;
|
|
1639
|
+
margin: 5px 0;
|
|
1640
|
+
}
|
|
@@ -676,9 +676,6 @@ const subUrlOf = (s, f) => {
|
|
|
676
676
|
if (!fullParsed.searchParams.has(key)) {
|
|
677
677
|
return false
|
|
678
678
|
}
|
|
679
|
-
console.log("key", key)
|
|
680
|
-
console.log("f", fullParsed.searchParams.get(key))
|
|
681
|
-
console.log("s", val)
|
|
682
679
|
if (fullParsed.searchParams.get(key) !== val) {
|
|
683
680
|
return false
|
|
684
681
|
}
|
|
@@ -691,7 +688,6 @@ const renderCursor = () => {
|
|
|
691
688
|
el.classList.remove("cursor")
|
|
692
689
|
})
|
|
693
690
|
const target = document.querySelector(".selectable[data-index='" + cursorIndex + "']")
|
|
694
|
-
console.log({ cursorIndex, target })
|
|
695
691
|
target.classList.add("cursor")
|
|
696
692
|
}
|
|
697
693
|
const nav = (type) => {
|
|
@@ -794,7 +790,6 @@ const renderSelection = (e, force) => {
|
|
|
794
790
|
//
|
|
795
791
|
// => select that tab and frame
|
|
796
792
|
|
|
797
|
-
console.log("target", target)
|
|
798
793
|
if (target) {
|
|
799
794
|
|
|
800
795
|
// display the menu button at the top
|
|
@@ -809,12 +804,10 @@ const renderSelection = (e, force) => {
|
|
|
809
804
|
}
|
|
810
805
|
|
|
811
806
|
if (target) {
|
|
812
|
-
console.log("# 3")
|
|
813
807
|
|
|
814
808
|
|
|
815
809
|
// Instantiate a frame with the selected target's href
|
|
816
810
|
let url = target.href
|
|
817
|
-
console.log("> url", url)
|
|
818
811
|
document.querySelector("#open-browser").href = url
|
|
819
812
|
document.querySelector("#clone-tab").setAttribute("data-href", url)
|
|
820
813
|
document.querySelector("#location").value = url
|
|
@@ -1409,6 +1402,11 @@ const refresh = async (silent) => {
|
|
|
1409
1402
|
// render the selected frame only if not silent
|
|
1410
1403
|
if (silent) {
|
|
1411
1404
|
} else {
|
|
1405
|
+
await new Promise((resolve, reject) => {
|
|
1406
|
+
setTimeout(() => {
|
|
1407
|
+
resolve()
|
|
1408
|
+
}, 1000)
|
|
1409
|
+
})
|
|
1412
1410
|
renderSelection()
|
|
1413
1411
|
}
|
|
1414
1412
|
}
|
package/server/views/editor.ejs
CHANGED
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
<script src="/waitmodal.js"></script>
|
|
24
24
|
<script src="/notifyinput.js"></script>
|
|
25
25
|
<script src="/report.js"></script>
|
|
26
|
+
<script src="/mark.min.js"></script>
|
|
26
27
|
<link href="/xterm.min.css" rel="stylesheet" />
|
|
27
28
|
<link href="/css/fontawesome.min.css" rel="stylesheet">
|
|
28
29
|
<link href="/css/solid.min.css" rel="stylesheet">
|
|
@@ -307,6 +308,7 @@ document.addEventListener("DOMContentLoaded", async () => {
|
|
|
307
308
|
this.socket.close()
|
|
308
309
|
document.querySelector(".run .play").classList.remove("hidden")
|
|
309
310
|
document.querySelector(".run .stop").classList.add("hidden")
|
|
311
|
+
|
|
310
312
|
} else if (packet.type === 'connect') {
|
|
311
313
|
// document.querySelector(".terminal-container").classList.remove("hidden")
|
|
312
314
|
const message = "..........Connected!\r\n"
|
|
@@ -464,13 +466,14 @@ document.addEventListener("DOMContentLoaded", async () => {
|
|
|
464
466
|
text: `${packet.data}`,
|
|
465
467
|
})
|
|
466
468
|
} else if (packet.type === "error") {
|
|
469
|
+
debugger
|
|
467
470
|
// n.Noty({
|
|
468
471
|
// text: `${packet.data}`,
|
|
469
472
|
// type: "error"
|
|
470
473
|
// })
|
|
471
|
-
this.socket.close()
|
|
472
|
-
|
|
473
|
-
reloadMemory()
|
|
474
|
+
// this.socket.close()
|
|
475
|
+
//// refreshParent(packet)
|
|
476
|
+
// reloadMemory()
|
|
474
477
|
//document.querySelector("footer").innerHTML = `<b><i class="fa-solid fa-triangle-exclamation"></i> ERROR</b><pre>${packet.data}</pre>`
|
|
475
478
|
document.querySelector("footer .content").innerHTML = document.querySelector("footer .content").innerHTML + `<pre class='error'>${packet.data}</pre>`
|
|
476
479
|
// document.querySelector("footer .toggle-expand i").className = "fa-solid fa-circle-chevron-down"
|
|
@@ -481,6 +484,23 @@ document.addEventListener("DOMContentLoaded", async () => {
|
|
|
481
484
|
document.querySelector(".run .starting").classList.add("hidden")
|
|
482
485
|
document.querySelector(".run .stop").classList.add("hidden")
|
|
483
486
|
|
|
487
|
+
document.querySelector("#error-screen").classList.remove("hidden")
|
|
488
|
+
document.querySelector("#error-screen pre").textContent = packet.data
|
|
489
|
+
let instance = new Mark(document.querySelector("#error-screen pre"), {
|
|
490
|
+
separateWordSearch: false,
|
|
491
|
+
accuracy: "exactly"
|
|
492
|
+
})
|
|
493
|
+
/*
|
|
494
|
+
document.querySelector("#error-screen").addEventListener("click", (e) => {
|
|
495
|
+
document.querySelector("#error-screen").classList.add("hidden")
|
|
496
|
+
})
|
|
497
|
+
*/
|
|
498
|
+
console.log("instance", instance)
|
|
499
|
+
console.log("EVENT", packet.event)
|
|
500
|
+
instance.mark(packet.event)
|
|
501
|
+
let element = document.querySelector("mark")
|
|
502
|
+
element.scrollIntoView({ behavior: "smooth", block: "center" });
|
|
503
|
+
|
|
484
504
|
} else if (packet.type === "event") {
|
|
485
505
|
if (packet.data === "stop") {
|
|
486
506
|
document.querySelector("footer").innerHTML = "<b>Ready</b>"
|
|
@@ -865,5 +885,11 @@ const reloadMemory = async () => {
|
|
|
865
885
|
<footer><b>Ready</b></footer>
|
|
866
886
|
<% } %>
|
|
867
887
|
<% } %>
|
|
888
|
+
<div id='error-screen' class='hidden'>
|
|
889
|
+
<pre></pre>
|
|
890
|
+
<div id='error-screen-footer'>
|
|
891
|
+
<button id='error-screen-close' class='btn'>Close</button>
|
|
892
|
+
</div>
|
|
893
|
+
</div>
|
|
868
894
|
</body>
|
|
869
895
|
</html>
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
<script src="/waitmodal.js"></script>
|
|
26
26
|
<script src="/notifyinput.js"></script>
|
|
27
27
|
<script src="/report.js"></script>
|
|
28
|
+
<script src="/mark.min.js"></script>
|
|
28
29
|
<link href="/xterm.min.css" rel="stylesheet" />
|
|
29
30
|
<link href="/css/fontawesome.min.css" rel="stylesheet">
|
|
30
31
|
<link href="/css/solid.min.css" rel="stylesheet">
|
|
@@ -41,7 +42,6 @@ html {
|
|
|
41
42
|
height: 100%;
|
|
42
43
|
overflow: hidden;
|
|
43
44
|
}
|
|
44
|
-
|
|
45
45
|
body {
|
|
46
46
|
height: 100%;
|
|
47
47
|
overflow: hidden;
|
|
@@ -192,6 +192,7 @@ document.addEventListener("DOMContentLoaded", async () => {
|
|
|
192
192
|
rows: this.term.rows,
|
|
193
193
|
}
|
|
194
194
|
}, async (packet) => {
|
|
195
|
+
console.log({ packet })
|
|
195
196
|
if (packet.type === 'start') {
|
|
196
197
|
refreshParent(packet)
|
|
197
198
|
reloadMemory()
|
|
@@ -425,9 +426,12 @@ document.addEventListener("DOMContentLoaded", async () => {
|
|
|
425
426
|
// text: `${packet.data}`,
|
|
426
427
|
// type: "error"
|
|
427
428
|
// })
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
429
|
+
|
|
430
|
+
// this.socket.close()
|
|
431
|
+
// refreshParent(packet)
|
|
432
|
+
// reloadMemory()
|
|
433
|
+
|
|
434
|
+
|
|
431
435
|
|
|
432
436
|
document.querySelector("footer .content").innerHTML = document.querySelector("footer .content").innerHTML + `<pre class='error'>${packet.data}</pre>`
|
|
433
437
|
// document.querySelector("footer .toggle-expand i").className = "fa-solid fa-circle-chevron-down"
|
|
@@ -438,6 +442,27 @@ document.addEventListener("DOMContentLoaded", async () => {
|
|
|
438
442
|
document.querySelector(".run .starting").classList.add("hidden")
|
|
439
443
|
document.querySelector(".run .stop").classList.add("hidden")
|
|
440
444
|
|
|
445
|
+
|
|
446
|
+
document.querySelector("#error-screen").classList.remove("hidden")
|
|
447
|
+
document.querySelector("#error-screen pre").textContent = packet.data
|
|
448
|
+
let instance = new Mark(document.querySelector("#error-screen pre"), {
|
|
449
|
+
separateWordSearch: false,
|
|
450
|
+
accuracy: "exactly"
|
|
451
|
+
})
|
|
452
|
+
/*
|
|
453
|
+
document.querySelector("#error-screen").addEventListener("click", (e) => {
|
|
454
|
+
document.querySelector("#error-screen").classList.add("hidden")
|
|
455
|
+
})
|
|
456
|
+
*/
|
|
457
|
+
console.log("instance", instance)
|
|
458
|
+
console.log("EVENT", packet.event)
|
|
459
|
+
instance.mark(packet.event)
|
|
460
|
+
let element = document.querySelector("mark")
|
|
461
|
+
element.scrollIntoView({ behavior: "smooth", block: "center" });
|
|
462
|
+
|
|
463
|
+
|
|
464
|
+
|
|
465
|
+
|
|
441
466
|
} else if (packet.type === "event") {
|
|
442
467
|
if (packet.data === "stop") {
|
|
443
468
|
document.querySelector("footer").innerHTML = "<b>Ready</b>"
|
|
@@ -480,7 +505,7 @@ document.addEventListener("DOMContentLoaded", async () => {
|
|
|
480
505
|
document.querySelector(".run .starting").classList.add("hidden")
|
|
481
506
|
document.querySelector(".run .stop").classList.add("hidden")
|
|
482
507
|
}, 0)
|
|
483
|
-
this.socket.close()
|
|
508
|
+
//this.socket.close()
|
|
484
509
|
}
|
|
485
510
|
}
|
|
486
511
|
|
|
@@ -798,5 +823,11 @@ const reloadMemory = async () => {
|
|
|
798
823
|
<footer><b>Ready</b></footer>
|
|
799
824
|
<% } %>
|
|
800
825
|
<% } %>
|
|
826
|
+
<div id='error-screen' class='hidden'>
|
|
827
|
+
<pre></pre>
|
|
828
|
+
<div id='error-screen-footer' class='hidden'>
|
|
829
|
+
<button id='error-screen-close' class='btn'>Close</button>
|
|
830
|
+
</div>
|
|
831
|
+
</div>
|
|
801
832
|
</body>
|
|
802
833
|
</html>
|
package/server/views/index.ejs
CHANGED
|
@@ -182,6 +182,7 @@ body.dark .browser-options-row {
|
|
|
182
182
|
</form>
|
|
183
183
|
<% if (ishome) { %>
|
|
184
184
|
<div class='nav-btns'>
|
|
185
|
+
<a class='btn2' href='/proxy'><div><i class="fa-solid fa-wifi"></i></div><div>Share</div></a>
|
|
185
186
|
<a class='btn2' id='explore'><div><i class="fa-solid fa-globe"></i></div><div>Discover</div></a>
|
|
186
187
|
<a class='btn2' href="https://portal.pinokio.computer/" target="_blank"><div><i class="fa-solid fa-face-smile-beam"></i></div><div>Community</div></a>
|
|
187
188
|
<% if (agent === "electron") { %>
|
|
@@ -235,24 +236,32 @@ body.dark .browser-options-row {
|
|
|
235
236
|
</div>
|
|
236
237
|
</div>
|
|
237
238
|
<% } %>
|
|
239
|
+
<!--
|
|
238
240
|
<div class='browser-options-row'>
|
|
239
|
-
|
|
240
|
-
<
|
|
241
|
-
<div
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
<a id='wifi-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
241
|
+
<a href="/proxy" class='flexible'>
|
|
242
|
+
<h3><i class="fa-solid fa-wifi"></i> Local Share</h3>
|
|
243
|
+
<div>Access Pinokio, Ollama, and other 3rd party apps from any device on the same network. By default it's off.</div>
|
|
244
|
+
</a>
|
|
245
|
+
<% if (false) { %>
|
|
246
|
+
<% if (proxy) { %>
|
|
247
|
+
<a id='wifi-stop' data-proxy="<%=proxy.proxy%>" class='btn'><div><i class="fa-solid fa-stop"></i> Stop</div></a>
|
|
248
|
+
<div class='flexible'>
|
|
249
|
+
<h3><i class="fa-solid fa-wifi"></i> Local Share</h3>
|
|
250
|
+
<div>Access Pinokio from any device on the same network. By default it's off.</div>
|
|
251
|
+
<span class='badge'><i class="fa-solid fa-circle-notch fa-spin"></i> Running at <a href="<%=proxy.proxy%>" target="_blank" features="browser"><%=proxy.proxy%></a></span>
|
|
252
|
+
<a id='wifi-qr' class='badge'><i class="fa-solid fa-qrcode"></i> Scan QR Code</a>
|
|
253
|
+
</div>
|
|
254
|
+
<% } else { %>
|
|
255
|
+
<a id='wifi' class='btn'><div><i class="fa-solid fa-play"></i> Start</div></a>
|
|
256
|
+
<a id='wifi-starting' class='btn disabled hidden'><div><i class="fa-solid fa-circle-notch fa-spin"></i> Starting</div></a>
|
|
257
|
+
<div class='flexible'>
|
|
258
|
+
<h3><i class="fa-solid fa-wifi"></i> Local Share</h3>
|
|
259
|
+
<div>Access Pinokio from any device on the same network. By default it's off.</div>
|
|
260
|
+
</div>
|
|
261
|
+
<% } %>
|
|
254
262
|
<% } %>
|
|
255
263
|
</div>
|
|
264
|
+
-->
|
|
256
265
|
<div class='browser-options-row hidden'>
|
|
257
266
|
<% if (cloudflare_pub) { %>
|
|
258
267
|
<a id='cloudflare-stop' class='btn'><div><i class="fa-solid fa-stop"></i> Stop</div></a>
|
|
@@ -1006,12 +1015,16 @@ if (document.querySelector("#cloudflare")) {
|
|
|
1006
1015
|
})
|
|
1007
1016
|
}
|
|
1008
1017
|
<% } %>
|
|
1009
|
-
document.querySelector("#back")
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1018
|
+
if (document.querySelector("#back")) {
|
|
1019
|
+
document.querySelector("#back").addEventListener("click", (e) => {
|
|
1020
|
+
history.back()
|
|
1021
|
+
})
|
|
1022
|
+
}
|
|
1023
|
+
if (document.querySelector("#forward")) {
|
|
1024
|
+
document.querySelector("#forward").addEventListener("click", (e) => {
|
|
1025
|
+
history.forward()
|
|
1026
|
+
})
|
|
1027
|
+
}
|
|
1015
1028
|
document.querySelector("#genlog").addEventListener("click", (e) => {
|
|
1016
1029
|
e.preventDefault()
|
|
1017
1030
|
e.stopPropagation()
|