pinokiod 3.19.4 → 3.19.6

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 CHANGED
@@ -2,16 +2,16 @@ 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 pinokio-cli@latest",
5
+ message: "npm install -g pterm@latest --force",
6
6
  }, ondata)
7
7
  }
8
8
  async installed(req, ondata) {
9
9
  console.log("Check installed")
10
10
  if (this.kernel.which('pinokio')) {
11
11
  let res = await this.kernel.exec({
12
- message: "pinokio version"
12
+ message: "pinokio version terminal"
13
13
  }, ondata)
14
- if (/.*v0\.0\.4.*/.test(res.stdout)) {
14
+ if (/.*pterm@0\.0\.6.*/.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 pinokio-cli",
27
+ message: "npm uninstall -g pterm",
28
28
  }, ondata)
29
29
  }
30
30
  }
@@ -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
- return { success: "/p/" + name }
657
- } catch (e) {
658
- console.log("ERROR", e)
659
- return { error: e.stack }
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
@@ -681,7 +684,6 @@ class Bin {
681
684
  } else {
682
685
  this.client = null
683
686
  }
684
- console.log("Client", this.client)
685
687
  let requirements = JSON.parse(req.params)
686
688
  for(let x=0; x<10; x++) {
687
689
  console.log(`## Install Attempt ${x}`)
@@ -761,6 +763,7 @@ class Bin {
761
763
  async check_installed(r, dependencies) {
762
764
  if (Array.isArray(r.name)) {
763
765
  for(let name of r.name) {
766
+ let d = Date.now()
764
767
  let installed = await this._installed(name, r.type, dependencies)
765
768
  if (!installed) return false
766
769
  }
@@ -773,13 +776,10 @@ class Bin {
773
776
  async _installed(name, type, dependencies) {
774
777
  if (type === "conda") {
775
778
  let conda_installed = this.installed.conda.has(name)
776
- console.log({ dependencies })
777
779
  let dependencies_installed = true
778
780
  for(let d of dependencies) {
779
- console.log("checking dependency", d)
780
781
  if(!this.installed.conda.has(d)) {
781
782
  dependencies_installed = false
782
- console.log("not installed", d)
783
783
  break
784
784
  }
785
785
  }
@@ -793,10 +793,20 @@ class Bin {
793
793
  let filepath = path.resolve(__dirname, "..", "kernel", "bin", name + ".js")
794
794
  let mod = this.mod[name]
795
795
  let installed = false
796
- if (mod.installed) {
797
- installed = await mod.installed()
796
+ if (!this.cached_mod_installed) {
797
+ this.cached_mod_installed = {}
798
+ }
799
+ if (this.cached_mod_installed[name] === true) {
800
+ return true
801
+ } else {
802
+ if (mod.installed) {
803
+ installed = await mod.installed()
804
+ if (installed) {
805
+ this.cached_mod_installed[name] = true
806
+ }
807
+ }
808
+ return installed
798
809
  }
799
- return installed
800
810
  }
801
811
  }
802
812
  preset(mode) {
@@ -979,15 +989,22 @@ class Bin {
979
989
  let install_required = true
980
990
  if (!requirements_pending) {
981
991
  install_required = false
982
- console.log("requirements", requirements)
983
992
  for(let i=0; i<requirements.length; i++) {
984
993
  let r = requirements[i]
985
994
  let fingerprint = JSON.stringify(r)
986
995
  let installed
987
- if (this.requirements_cache[fingerprint]) {
988
- console.log("USE CACHED", fingerprint)
989
- installed = true
990
- requirements[i].installed = true
996
+ if (fingerprint in this.requirements_cache) {
997
+ let relevant = this.relevant(r)
998
+ requirements[i].relevant = relevant
999
+ if (relevant) {
1000
+ let dependencies
1001
+ if (r.name === "conda") {
1002
+ dependencies = config.bin.conda_requirements
1003
+ requirements[i].dependencies = dependencies
1004
+ }
1005
+ installed = this.requirements_cache[fingerprint]
1006
+ requirements[i].installed = this.requirements_cache[fingerprint]
1007
+ }
991
1008
  } else {
992
1009
  //let installed = await this.installed(r)
993
1010
  //requirements[i].installed = installed
@@ -1003,10 +1020,11 @@ class Bin {
1003
1020
  requirements[i].dependencies = dependencies
1004
1021
  }
1005
1022
  installed = await this.check_installed(r, dependencies)
1006
- if (installed) {
1007
- // cache if true
1008
- this.requirements_cache[fingerprint] = true
1009
- }
1023
+ this.requirements_cache[fingerprint] = installed
1024
+ //if (installed) {
1025
+ // // cache if true
1026
+ // this.requirements_cache[fingerprint] = true
1027
+ //}
1010
1028
  requirements[i].installed = installed
1011
1029
  }
1012
1030
  }
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 = await this.network_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
- // this.bin.check()
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,
@@ -924,10 +927,13 @@ class Kernel {
924
927
  }
925
928
  async exec(params, ondata) {
926
929
  // params.path = this.path()
927
- // if (this.client) {
928
- // params.cols = this.client.cols
929
- // params.rows = this.client.rows
930
- // }
930
+ if (this.client) {
931
+ params.cols = this.client.cols
932
+ params.rows = this.client.rows
933
+ } else if (this.bin.client) {
934
+ params.cols = this.bin.client.cols
935
+ params.rows = this.bin.client.rows
936
+ }
931
937
  let response = await this.shell.run(params, null, ondata)
932
938
  return response
933
939
  }
@@ -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/kernel/shells.js CHANGED
@@ -302,6 +302,7 @@ class Shells {
302
302
  }
303
303
  */
304
304
  let session = this.get(params.id)
305
+ console.log({ session })
305
306
  if (session) {
306
307
  session.resize(params.resize)
307
308
  }
package/kernel/util.js CHANGED
@@ -32,10 +32,9 @@ if( __dirname.includes(".asar") ) {
32
32
  }
33
33
  const { getFolderSize, getFolderSizeBin, getFolderSizeWasm, } = g
34
34
  const du = async (folderpath) => {
35
- console.time("disk size calc")
35
+ // console.time("disk size calc")
36
36
  let totalSize = await getFolderSizeBin(folderpath)
37
- console.timeEnd("disk size calc")
38
- console.log("totalSize", totalSize)
37
+ // console.timeEnd("disk size calc")
39
38
  return totalSize;
40
39
  }
41
40
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pinokiod",
3
- "version": "3.19.4",
3
+ "version": "3.19.6",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
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")
@@ -4894,6 +4897,9 @@ class Server {
4894
4897
  await compressing.zip.compressDir(folder, zipPath)
4895
4898
  res.json({ success: true })
4896
4899
  }))
4900
+ this.app.get("/pinokio/version", ex(async (req, res) => {
4901
+ res.json(this.version)
4902
+ }))
4897
4903
  this.app.get("/pinokio/info", ex(async (req, res) => {
4898
4904
  await this.kernel.getInfo(true)
4899
4905
  let info = Object.assign({}, this.kernel.i)
@@ -5221,7 +5227,6 @@ class Server {
5221
5227
  if (this.kernel.peer.active) {
5222
5228
  // if network is active, return success only if the router is up for all of its peers (including itself)
5223
5229
  console.log({ peer_info: this.kernel.peer.info })
5224
- console.time("check_peer")
5225
5230
  let ready = true
5226
5231
  if (this.kernel.peer.info && Object.keys(this.kernel.peer.info).length > 0) {
5227
5232
  for(let host in this.kernel.peer.info) {
@@ -5237,7 +5242,6 @@ class Server {
5237
5242
  ready = false;
5238
5243
  }
5239
5244
  console.log({ info: this.kernel.peer.info, ready })
5240
- console.timeEnd("check_peer")
5241
5245
  if (ready) {
5242
5246
  res.json({ success: true })
5243
5247
  } else {
package/server/socket.js CHANGED
@@ -157,6 +157,7 @@ class Socket {
157
157
  paste: req.paste
158
158
  })
159
159
  } else if (req.resize && req.id) {
160
+ console.log("RESIZE", req)
160
161
  this.parent.kernel.shell.resize({
161
162
  id: req.id,
162
163
  resize: req.resize
@@ -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
  }
@@ -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>
@@ -244,6 +244,7 @@ document.addEventListener("DOMContentLoaded", async () => {
244
244
  });
245
245
  observer.observe(document.body)
246
246
  await new Promise((resolve, reject) => {
247
+ console.log({ cols: term.cols, rows: term.rows })
247
248
  socket.run({
248
249
  id: location.pathname,
249
250
  method: "kernel.bin.install",
@@ -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
+ <% }) %>