pinokiod 3.19.4 → 3.19.5
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/bin/cli.js +3 -3
- package/kernel/bin/index.js +46 -37
- package/kernel/index.js +5 -2
- package/kernel/prototype.js +18 -0
- package/package.json +1 -1
- package/server/index.js +15 -14
- package/server/views/app.ejs +17 -6
- package/server/views/git.ejs +2 -1
- package/server/views/partials/repos.ejs +5 -0
package/kernel/bin/cli.js
CHANGED
|
@@ -2,7 +2,7 @@ const path = require('path')
|
|
|
2
2
|
class CLI {
|
|
3
3
|
async install(req, ondata) {
|
|
4
4
|
await this.kernel.exec({
|
|
5
|
-
message: "npm install -g
|
|
5
|
+
message: "npm install -g pterm@latest --force",
|
|
6
6
|
}, ondata)
|
|
7
7
|
}
|
|
8
8
|
async installed(req, ondata) {
|
|
@@ -11,7 +11,7 @@ class CLI {
|
|
|
11
11
|
let res = await this.kernel.exec({
|
|
12
12
|
message: "pinokio version"
|
|
13
13
|
}, ondata)
|
|
14
|
-
if (/.*v0\.0\.
|
|
14
|
+
if (/.*v0\.0\.5.*/.test(res.stdout)) {
|
|
15
15
|
console.log("Installed")
|
|
16
16
|
return true
|
|
17
17
|
} else {
|
|
@@ -24,7 +24,7 @@ class CLI {
|
|
|
24
24
|
}
|
|
25
25
|
async uninstall(req, ondata) {
|
|
26
26
|
await this.kernel.exec({
|
|
27
|
-
message: "npm uninstall -g
|
|
27
|
+
message: "npm uninstall -g pterm",
|
|
28
28
|
}, ondata)
|
|
29
29
|
}
|
|
30
30
|
}
|
package/kernel/bin/index.js
CHANGED
|
@@ -630,35 +630,38 @@ class Bin {
|
|
|
630
630
|
return res
|
|
631
631
|
}
|
|
632
632
|
}
|
|
633
|
-
async init_launcher(req, ondata) {
|
|
634
|
-
console.log("init_launcher", req)
|
|
635
|
-
try {
|
|
636
|
-
let projectType = req.params.projectType
|
|
637
|
-
let startType = req.params.cliType || req.params.startType
|
|
638
|
-
console.log({ projectType, startType })
|
|
639
|
-
|
|
640
|
-
let cwd = req.cwd
|
|
641
|
-
let name = req.name
|
|
642
|
-
let payload = {}
|
|
643
|
-
payload.cwd = path.resolve(cwd, name)
|
|
644
|
-
payload.input = req.params
|
|
645
|
-
|
|
646
|
-
let mod_path = path.resolve(__dirname, "../proto", projectType, startType)
|
|
647
|
-
let mod = await this.kernel.require(mod_path)
|
|
648
|
-
|
|
649
|
-
await mod(payload, ondata, this.kernel)
|
|
650
|
-
|
|
651
|
-
// copy readme
|
|
652
|
-
let readme_path = path.resolve(__dirname, "../proto/PINOKIO.md")
|
|
653
|
-
console.log("copy to", readme_path, path.resolve(cwd, name, "PINOKIO.md"))
|
|
654
|
-
await fs.promises.cp(readme_path, path.resolve(cwd, name, "PINOKIO.md"))
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
return {
|
|
660
|
-
}
|
|
661
|
-
|
|
633
|
+
// async init_launcher(req, ondata) {
|
|
634
|
+
// console.log("init_launcher", req)
|
|
635
|
+
// try {
|
|
636
|
+
// let projectType = req.params.projectType
|
|
637
|
+
// let startType = req.params.cliType || req.params.startType
|
|
638
|
+
// console.log({ projectType, startType })
|
|
639
|
+
//
|
|
640
|
+
// let cwd = req.cwd
|
|
641
|
+
// let name = req.name
|
|
642
|
+
// let payload = {}
|
|
643
|
+
// payload.cwd = path.resolve(cwd, name)
|
|
644
|
+
// payload.input = req.params
|
|
645
|
+
//
|
|
646
|
+
// let mod_path = path.resolve(__dirname, "../proto", projectType, startType)
|
|
647
|
+
// let mod = await this.kernel.require(mod_path)
|
|
648
|
+
//
|
|
649
|
+
// await mod(payload, ondata, this.kernel)
|
|
650
|
+
//
|
|
651
|
+
// // copy readme
|
|
652
|
+
// let readme_path = path.resolve(__dirname, "../proto/PINOKIO.md")
|
|
653
|
+
// console.log("copy to", readme_path, path.resolve(cwd, name, "PINOKIO.md"))
|
|
654
|
+
// await fs.promises.cp(readme_path, path.resolve(cwd, name, "PINOKIO.md"))
|
|
655
|
+
//
|
|
656
|
+
// // copy CLI.md
|
|
657
|
+
// let cli_readme_path =
|
|
658
|
+
//
|
|
659
|
+
// return { success: "/p/" + name }
|
|
660
|
+
// } catch (e) {
|
|
661
|
+
// console.log("ERROR", e)
|
|
662
|
+
// return { error: e.stack }
|
|
663
|
+
// }
|
|
664
|
+
// }
|
|
662
665
|
async filepicker(req, ondata) {
|
|
663
666
|
let res = await Util.filepicker(req, ondata, this.kernel)
|
|
664
667
|
return res
|
|
@@ -761,6 +764,7 @@ class Bin {
|
|
|
761
764
|
async check_installed(r, dependencies) {
|
|
762
765
|
if (Array.isArray(r.name)) {
|
|
763
766
|
for(let name of r.name) {
|
|
767
|
+
let d = Date.now()
|
|
764
768
|
let installed = await this._installed(name, r.type, dependencies)
|
|
765
769
|
if (!installed) return false
|
|
766
770
|
}
|
|
@@ -773,13 +777,10 @@ class Bin {
|
|
|
773
777
|
async _installed(name, type, dependencies) {
|
|
774
778
|
if (type === "conda") {
|
|
775
779
|
let conda_installed = this.installed.conda.has(name)
|
|
776
|
-
console.log({ dependencies })
|
|
777
780
|
let dependencies_installed = true
|
|
778
781
|
for(let d of dependencies) {
|
|
779
|
-
console.log("checking dependency", d)
|
|
780
782
|
if(!this.installed.conda.has(d)) {
|
|
781
783
|
dependencies_installed = false
|
|
782
|
-
console.log("not installed", d)
|
|
783
784
|
break
|
|
784
785
|
}
|
|
785
786
|
}
|
|
@@ -793,10 +794,20 @@ class Bin {
|
|
|
793
794
|
let filepath = path.resolve(__dirname, "..", "kernel", "bin", name + ".js")
|
|
794
795
|
let mod = this.mod[name]
|
|
795
796
|
let installed = false
|
|
796
|
-
if (
|
|
797
|
-
|
|
797
|
+
if (!this.cached_mod_installed) {
|
|
798
|
+
this.cached_mod_installed = {}
|
|
799
|
+
}
|
|
800
|
+
if (this.cached_mod_installed[name] === true) {
|
|
801
|
+
return true
|
|
802
|
+
} else {
|
|
803
|
+
if (mod.installed) {
|
|
804
|
+
installed = await mod.installed()
|
|
805
|
+
if (installed) {
|
|
806
|
+
this.cached_mod_installed[name] = true
|
|
807
|
+
}
|
|
808
|
+
}
|
|
809
|
+
return installed
|
|
798
810
|
}
|
|
799
|
-
return installed
|
|
800
811
|
}
|
|
801
812
|
}
|
|
802
813
|
preset(mode) {
|
|
@@ -979,13 +990,11 @@ class Bin {
|
|
|
979
990
|
let install_required = true
|
|
980
991
|
if (!requirements_pending) {
|
|
981
992
|
install_required = false
|
|
982
|
-
console.log("requirements", requirements)
|
|
983
993
|
for(let i=0; i<requirements.length; i++) {
|
|
984
994
|
let r = requirements[i]
|
|
985
995
|
let fingerprint = JSON.stringify(r)
|
|
986
996
|
let installed
|
|
987
997
|
if (this.requirements_cache[fingerprint]) {
|
|
988
|
-
console.log("USE CACHED", fingerprint)
|
|
989
998
|
installed = true
|
|
990
999
|
requirements[i].installed = true
|
|
991
1000
|
} else {
|
package/kernel/index.js
CHANGED
|
@@ -277,7 +277,8 @@ class Kernel {
|
|
|
277
277
|
return installed
|
|
278
278
|
}
|
|
279
279
|
async network_running() {
|
|
280
|
-
let installed =
|
|
280
|
+
let installed = true
|
|
281
|
+
// let installed = await this.network_installed()
|
|
281
282
|
if (installed) {
|
|
282
283
|
try {
|
|
283
284
|
await axios.get(`http://127.0.0.1:2019/config/`, { timeout: 1000 });
|
|
@@ -782,7 +783,9 @@ class Kernel {
|
|
|
782
783
|
this.bin.init().then(() => {
|
|
783
784
|
if (this.homedir) {
|
|
784
785
|
this.shell.init().then(async () => {
|
|
785
|
-
|
|
786
|
+
this.bin.check({
|
|
787
|
+
bin: this.bin.preset("ai"),
|
|
788
|
+
})
|
|
786
789
|
if (this.envs) {
|
|
787
790
|
this.template.update({
|
|
788
791
|
env: this.envs,
|
package/kernel/prototype.js
CHANGED
|
@@ -24,6 +24,9 @@ class Proto {
|
|
|
24
24
|
}, (e) => {
|
|
25
25
|
process.stdout.write(e.raw)
|
|
26
26
|
})
|
|
27
|
+
}
|
|
28
|
+
let exists2 = await this.kernel.exists("prototype/PINOKIO.md")
|
|
29
|
+
if (!exists2) {
|
|
27
30
|
await this.kernel.download({
|
|
28
31
|
uri: "https://raw.githubusercontent.com/pinokiocomputer/home/refs/heads/main/docs/README.md",
|
|
29
32
|
path: this.kernel.path("prototype"),
|
|
@@ -32,6 +35,16 @@ class Proto {
|
|
|
32
35
|
process.stdout.write(e.raw)
|
|
33
36
|
})
|
|
34
37
|
}
|
|
38
|
+
let exists3 = await this.kernel.exists("prototype/CLI.md")
|
|
39
|
+
if (!exists3) {
|
|
40
|
+
await this.kernel.download({
|
|
41
|
+
uri: "https://raw.githubusercontent.com/pinokiocomputer/pterm/refs/heads/main/README.md",
|
|
42
|
+
path: this.kernel.path("prototype"),
|
|
43
|
+
filename: "CLI.md"
|
|
44
|
+
}, (e) => {
|
|
45
|
+
process.stdout.write(e.raw)
|
|
46
|
+
})
|
|
47
|
+
}
|
|
35
48
|
}
|
|
36
49
|
}
|
|
37
50
|
async reset() {
|
|
@@ -59,6 +72,11 @@ class Proto {
|
|
|
59
72
|
let readme_path = this.kernel.path("prototype/PINOKIO.md")
|
|
60
73
|
await fs.promises.cp(readme_path, path.resolve(cwd, name, "PINOKIO.md"))
|
|
61
74
|
|
|
75
|
+
// copy cli.md
|
|
76
|
+
let cli_readme_path = this.kernel.path("prototype/CLI.md")
|
|
77
|
+
await fs.promises.cp(cli_readme_path, path.resolve(cwd, name, "CLI.md"))
|
|
78
|
+
|
|
79
|
+
|
|
62
80
|
return { success: "/p/" + name }
|
|
63
81
|
} catch (e) {
|
|
64
82
|
console.log("ERROR", e)
|
package/package.json
CHANGED
package/server/index.js
CHANGED
|
@@ -366,10 +366,6 @@ class Server {
|
|
|
366
366
|
}
|
|
367
367
|
|
|
368
368
|
async chrome(req, res, type) {
|
|
369
|
-
let d = "Request " + Date.now()
|
|
370
|
-
console.time(d)
|
|
371
|
-
|
|
372
|
-
console.time("bin check " + d)
|
|
373
369
|
let { requirements, install_required, requirements_pending, error } = await this.kernel.bin.check({
|
|
374
370
|
bin: this.kernel.bin.preset("dev"),
|
|
375
371
|
})
|
|
@@ -377,7 +373,6 @@ class Server {
|
|
|
377
373
|
res.redirect(`/setup/dev?callback=${req.originalUrl}`)
|
|
378
374
|
return
|
|
379
375
|
}
|
|
380
|
-
console.timeEnd("bin check " + d)
|
|
381
376
|
|
|
382
377
|
let name = req.params.name
|
|
383
378
|
let config = await this.kernel.api.meta(name)
|
|
@@ -530,7 +525,6 @@ class Server {
|
|
|
530
525
|
|
|
531
526
|
let c = this.kernel.path("api", name)
|
|
532
527
|
|
|
533
|
-
let repos = await this.kernel.git.repos(c)
|
|
534
528
|
await this.kernel.plugin.init()
|
|
535
529
|
let plugin = await this.getPlugin(name)
|
|
536
530
|
let plugin_menu = null
|
|
@@ -543,7 +537,7 @@ class Server {
|
|
|
543
537
|
let current_urls = await this.current_urls(req.originalUrl.slice(1))
|
|
544
538
|
|
|
545
539
|
const result = {
|
|
546
|
-
repos,
|
|
540
|
+
// repos,
|
|
547
541
|
current_urls,
|
|
548
542
|
path: this.kernel.path("api", name),
|
|
549
543
|
plugin_menu,
|
|
@@ -559,6 +553,7 @@ class Server {
|
|
|
559
553
|
running:this.kernel.api.running,
|
|
560
554
|
memory: this.kernel.memory,
|
|
561
555
|
sidebar: "/pinokio/sidebar/" + name,
|
|
556
|
+
repos: "/pinokio/repos/" + name,
|
|
562
557
|
dynamic: "/pinokio/dynamic/" + name,
|
|
563
558
|
// dynamic: "/pinokio/dynamic/" + name,
|
|
564
559
|
dynamic_content: null,
|
|
@@ -579,7 +574,6 @@ class Server {
|
|
|
579
574
|
if (!this.kernel.proto.config) {
|
|
580
575
|
await this.kernel.proto.init()
|
|
581
576
|
}
|
|
582
|
-
console.timeEnd(d)
|
|
583
577
|
res.render("app", result)
|
|
584
578
|
}
|
|
585
579
|
getVariationUrls(req) {
|
|
@@ -2468,7 +2462,6 @@ class Server {
|
|
|
2468
2462
|
}
|
|
2469
2463
|
}
|
|
2470
2464
|
async getPlugin(name) {
|
|
2471
|
-
console.log("getPlugin", name)
|
|
2472
2465
|
if (this.kernel.plugin.config) {
|
|
2473
2466
|
try {
|
|
2474
2467
|
let info = new Info(this.kernel)
|
|
@@ -2494,7 +2487,6 @@ class Server {
|
|
|
2494
2487
|
}
|
|
2495
2488
|
}
|
|
2496
2489
|
async check_router_up() {
|
|
2497
|
-
console.log("/check_router_up")
|
|
2498
2490
|
// check if caddy is runnign properly
|
|
2499
2491
|
// try https://pinokio.localhost
|
|
2500
2492
|
// if it works, proceed
|
|
@@ -2509,9 +2501,9 @@ class Server {
|
|
|
2509
2501
|
https_running = true
|
|
2510
2502
|
}
|
|
2511
2503
|
} catch (e) {
|
|
2512
|
-
console.log(e)
|
|
2504
|
+
// console.log(e)
|
|
2513
2505
|
}
|
|
2514
|
-
console.log({ https_running })
|
|
2506
|
+
// console.log({ https_running })
|
|
2515
2507
|
if (!https_running) {
|
|
2516
2508
|
return { error: "pinokio.host not yet available" }
|
|
2517
2509
|
}
|
|
@@ -4608,6 +4600,17 @@ class Server {
|
|
|
4608
4600
|
}
|
|
4609
4601
|
res.send(html)
|
|
4610
4602
|
}))
|
|
4603
|
+
this.app.get("/pinokio/repos/:name", ex(async (req, res) => {
|
|
4604
|
+
// await this.kernel.plugin.init()
|
|
4605
|
+
let c = this.kernel.path("api", req.params.name)
|
|
4606
|
+
let repos = await this.kernel.git.repos(c)
|
|
4607
|
+
let html = await new Promise((resolve, reject) => {
|
|
4608
|
+
ejs.renderFile(path.resolve(__dirname, "views/partials/repos.ejs"), { repos }, (err, html) => {
|
|
4609
|
+
resolve(html)
|
|
4610
|
+
})
|
|
4611
|
+
})
|
|
4612
|
+
res.send(html)
|
|
4613
|
+
}))
|
|
4611
4614
|
this.app.get("/pinokio/sidebar/:name", ex(async (req, res) => {
|
|
4612
4615
|
let name = req.params.name
|
|
4613
4616
|
let app_path = this.kernel.path("api", name, "pinokio.js")
|
|
@@ -5221,7 +5224,6 @@ class Server {
|
|
|
5221
5224
|
if (this.kernel.peer.active) {
|
|
5222
5225
|
// if network is active, return success only if the router is up for all of its peers (including itself)
|
|
5223
5226
|
console.log({ peer_info: this.kernel.peer.info })
|
|
5224
|
-
console.time("check_peer")
|
|
5225
5227
|
let ready = true
|
|
5226
5228
|
if (this.kernel.peer.info && Object.keys(this.kernel.peer.info).length > 0) {
|
|
5227
5229
|
for(let host in this.kernel.peer.info) {
|
|
@@ -5237,7 +5239,6 @@ class Server {
|
|
|
5237
5239
|
ready = false;
|
|
5238
5240
|
}
|
|
5239
5241
|
console.log({ info: this.kernel.peer.info, ready })
|
|
5240
|
-
console.timeEnd("check_peer")
|
|
5241
5242
|
if (ready) {
|
|
5242
5243
|
res.json({ success: true })
|
|
5243
5244
|
} else {
|
package/server/views/app.ejs
CHANGED
|
@@ -873,12 +873,7 @@ body.dark .appcanvas {
|
|
|
873
873
|
<div class='tab'><i class="fa-solid fa-cloud"></i> Git</div>
|
|
874
874
|
<div class='loader'><i class="fa-solid fa-angle-down"></i><i class="fa-solid fa-angle-up hidden"></i></div>
|
|
875
875
|
</div>
|
|
876
|
-
<div class='submenu'>
|
|
877
|
-
<% repos.forEach((git, index) => { %>
|
|
878
|
-
<a target="/git/<%=git.gitParentRelPath%>" href="/git/<%=git.gitParentRelPath%>" class='btn header-item frame-link' data-index="<%=index%>" data-mode="refresh">
|
|
879
|
-
<div class='tab'><i class="fa-regular fa-folder-open"></i> <%=git.gitRelPath%></div>
|
|
880
|
-
</a>
|
|
881
|
-
<% }) %>
|
|
876
|
+
<div class='submenu' id='git-repos'>
|
|
882
877
|
</div>
|
|
883
878
|
</div>
|
|
884
879
|
<% } %>
|
|
@@ -1933,6 +1928,14 @@ body.dark .appcanvas {
|
|
|
1933
1928
|
document.querySelector(".dynamic").innerHTML = dynamic
|
|
1934
1929
|
}
|
|
1935
1930
|
|
|
1931
|
+
|
|
1932
|
+
const repos = await fetch("<%=repos%>").then((res) => {
|
|
1933
|
+
return res.text()
|
|
1934
|
+
})
|
|
1935
|
+
if (document.querySelector("#git-repos")) {
|
|
1936
|
+
document.querySelector("#git-repos").innerHTML = repos
|
|
1937
|
+
}
|
|
1938
|
+
|
|
1936
1939
|
location.hash = ""
|
|
1937
1940
|
|
|
1938
1941
|
// render the selected frame only if not silent
|
|
@@ -2042,6 +2045,14 @@ body.dark .appcanvas {
|
|
|
2042
2045
|
});
|
|
2043
2046
|
refresh_du()
|
|
2044
2047
|
<% if (type !== 'run') { %>
|
|
2048
|
+
debugger
|
|
2049
|
+
fetch("<%=repos%>").then((res) => {
|
|
2050
|
+
return res.text()
|
|
2051
|
+
}).then((repos) => {
|
|
2052
|
+
if (document.querySelector("#git-repos")) {
|
|
2053
|
+
document.querySelector("#git-repos").innerHTML = repos
|
|
2054
|
+
}
|
|
2055
|
+
})
|
|
2045
2056
|
if (document.querySelector(".dynamic .reveal")) {
|
|
2046
2057
|
document.querySelector(".dynamic .reveal").click()
|
|
2047
2058
|
}
|
package/server/views/git.ejs
CHANGED
|
@@ -115,11 +115,12 @@ main h3 {
|
|
|
115
115
|
<nav>
|
|
116
116
|
<% if (remote) { %>
|
|
117
117
|
<a href="/run/scripts/git/push.json?cwd=<%=encodeURIComponent(dir)%>" class='btn'><i class="fa-brands fa-github"></i> Publish to GitHub</a>
|
|
118
|
+
<a href="/run/scripts/git/commit.json?cwd=<%=encodeURIComponent(dir)%>" class='btn'><i class="fa-solid fa-floppy-disk"></i> Commit (Save the current version)</a>
|
|
118
119
|
<a href="<%=remote%>" target="_blank"><%=remote%></a>
|
|
119
120
|
<% } else { %>
|
|
120
121
|
<a href="/run/scripts/git/create.json?cwd=<%=encodeURIComponent(dir)%>" class='btn'><i class="fa-brands fa-github"></i> Create on GitHub</a>
|
|
122
|
+
<a href="/run/scripts/git/commit.json?cwd=<%=encodeURIComponent(dir)%>" class='btn'><i class="fa-solid fa-floppy-disk"></i> Commit (Save the current version)</a>
|
|
121
123
|
<% } %>
|
|
122
|
-
<a href="/run/scripts/git/commit.json?cwd=<%=encodeURIComponent(dir)%>" class='btn'><i class="fa-solid fa-floppy-disk"></i> Commit (Save the current version)</a>
|
|
123
124
|
</nav>
|
|
124
125
|
<main>
|
|
125
126
|
<h2>Changed Files</h2>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<% repos.forEach((git, index) => { %>
|
|
2
|
+
<a target="/git/<%=git.gitParentRelPath%>" href="/git/<%=git.gitParentRelPath%>" class='btn header-item frame-link' data-index="<%=index%>" data-mode="refresh">
|
|
3
|
+
<div class='tab'><i class="fa-regular fa-folder-open"></i> <%=git.gitRelPath%></div>
|
|
4
|
+
</a>
|
|
5
|
+
<% }) %>
|