pinokiod 3.9.0 → 3.9.3

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 (119) hide show
  1. package/:w +1247 -0
  2. package/kernel/api/filepicker/index.js +59 -0
  3. package/kernel/api/fs/index.js +6 -4
  4. package/kernel/api/index.js +123 -37
  5. package/kernel/api/input/index.js +2 -0
  6. package/kernel/api/web/index.js +6 -0
  7. package/kernel/bin/caddy.js +127 -0
  8. package/kernel/bin/cloudflared.js +1 -0
  9. package/kernel/bin/conda.js +10 -2
  10. package/kernel/bin/cuda.js +0 -16
  11. package/kernel/bin/ffmpeg.js +4 -6
  12. package/kernel/bin/git.js +55 -29
  13. package/kernel/bin/gxx.js +8 -6
  14. package/kernel/bin/huggingface.js +4 -5
  15. package/kernel/bin/index.js +347 -88
  16. package/kernel/bin/node.js +13 -6
  17. package/kernel/bin/py.js +1 -1
  18. package/kernel/bin/setup.js +146 -0
  19. package/kernel/bin/uv.js +4 -5
  20. package/kernel/bin/zip.js +7 -8
  21. package/kernel/connect/index.js +25 -0
  22. package/kernel/connect/providers/github/README.md +11 -0
  23. package/kernel/connect/providers/x/README.md +96 -0
  24. package/kernel/connect/providers/x/index.js +152 -0
  25. package/kernel/environment.js +50 -1
  26. package/kernel/index.js +152 -32
  27. package/kernel/info.js +4 -2
  28. package/kernel/kv.js +38 -0
  29. package/kernel/loader.js +13 -3
  30. package/kernel/peer.js +161 -0
  31. package/kernel/procs.js +116 -0
  32. package/kernel/prototype.js +62 -0
  33. package/kernel/router/common.js +42 -0
  34. package/kernel/router/connector.js +81 -0
  35. package/kernel/router/index.js +235 -0
  36. package/kernel/router/localhost_home_router.js +84 -0
  37. package/kernel/router/localhost_port_router.js +15 -0
  38. package/kernel/router/localhost_variable_router.js +37 -0
  39. package/kernel/router/peer_home_router.js +15 -0
  40. package/kernel/router/peer_peer_router.js +26 -0
  41. package/kernel/router/peer_port_router.js +45 -0
  42. package/kernel/router/peer_variable_router.js +46 -0
  43. package/kernel/router/processor.js +31 -0
  44. package/kernel/shell.js +141 -60
  45. package/kernel/shells.js +32 -17
  46. package/kernel/store.js +58 -0
  47. package/kernel/sysinfo.js +0 -1
  48. package/kernel/util.js +143 -36
  49. package/package.json +4 -1
  50. package/pipe/index.js +0 -2
  51. package/script/index.js +12 -0
  52. package/server/index.js +1473 -553
  53. package/server/public/Socket.js +5 -1
  54. package/server/public/SourceCodePro-Regular.ttf +0 -0
  55. package/server/public/SpaceMono-Bold.ttf +0 -0
  56. package/server/public/SpaceMono-BoldItalic.ttf +0 -0
  57. package/server/public/SpaceMono-Italic.ttf +0 -0
  58. package/server/public/SpaceMono-Regular.ttf +0 -0
  59. package/server/public/commander.js +40 -0
  60. package/server/public/common.js +60 -0
  61. package/server/public/dropzone-min.js +2 -0
  62. package/server/public/dropzone.css +1 -0
  63. package/server/public/filepond-plugin-file-validate-type.min.js +9 -0
  64. package/server/public/filepond-plugin-image-crop.min.js +9 -0
  65. package/server/public/filepond-plugin-image-edit.min.css +8 -0
  66. package/server/public/filepond-plugin-image-edit.min.js +9 -0
  67. package/server/public/filepond-plugin-image-exif-orientation.min.js +9 -0
  68. package/server/public/filepond-plugin-image-preview.min.css +8 -0
  69. package/server/public/filepond-plugin-image-preview.min.js +9 -0
  70. package/server/public/filepond-plugin-image-resize.min.js +9 -0
  71. package/server/public/filepond-plugin-image-transform.min.js +9 -0
  72. package/server/public/filepond.min.css +8 -0
  73. package/server/public/filepond.min.js +9 -0
  74. package/server/public/fscreator.js +174 -0
  75. package/server/public/fseditor.js +212 -0
  76. package/server/public/github.png +0 -0
  77. package/server/public/highlight-js.js +81 -0
  78. package/server/public/highlight.css +9 -0
  79. package/server/public/highlight.js +1244 -0
  80. package/server/public/install.js +17 -20
  81. package/server/public/modalinput.js +105 -9
  82. package/server/public/opener.js +3 -1
  83. package/server/public/pinokio-black.png +0 -0
  84. package/server/public/pinokio-black2.png +0 -0
  85. package/server/public/redoc.standalone.js +1832 -0
  86. package/server/public/style.css +215 -17
  87. package/server/public/swagger-ui-bundle.js +2 -0
  88. package/server/public/swagger-ui.css +3 -0
  89. package/server/public/x.js +63 -0
  90. package/server/socket.js +136 -39
  91. package/server/views/404.ejs +0 -1
  92. package/server/views/app.ejs +368 -98
  93. package/server/views/bootstrap.ejs +22 -19
  94. package/server/views/connect/x.ejs +324 -0
  95. package/server/views/connect.ejs +197 -0
  96. package/server/views/download.ejs +7 -1
  97. package/server/views/editor.ejs +68 -9
  98. package/server/views/explore.ejs +13 -10
  99. package/server/views/file_explorer.ejs +10 -37
  100. package/server/views/github.ejs +218 -0
  101. package/server/views/help.ejs +4 -3
  102. package/server/views/index.ejs +275 -121
  103. package/server/views/install.ejs +56 -29
  104. package/server/views/keys.ejs +276 -0
  105. package/server/views/network.ejs +889 -0
  106. package/server/views/partials/dynamic.ejs +9 -0
  107. package/server/views/partials/menu.ejs +7 -1
  108. package/server/views/prototype/index.ejs +311 -0
  109. package/server/views/prototype/show.ejs +383 -0
  110. package/server/views/redoc.ejs +18 -0
  111. package/server/views/required_env_editor.ejs +11 -2
  112. package/server/views/settings.ejs +38 -10
  113. package/server/views/setup.ejs +254 -0
  114. package/server/views/setup_home.ejs +192 -0
  115. package/server/views/shell.ejs +781 -0
  116. package/server/views/swaggerui.ejs +19 -0
  117. package/server/views/terminal.ejs +174 -42
  118. package/LICENSE +0 -7
  119. package/server/views/proxy.ejs +0 -405
package/server/socket.js CHANGED
@@ -1,8 +1,10 @@
1
1
  const WebSocket = require('ws');
2
+ const Util = require("../kernel/util")
2
3
  class Socket {
3
4
  constructor(parent) {
4
5
  this.buffer = {}
5
6
  this.connected = {}
7
+ this.active_shell = {}
6
8
  this.parent = parent
7
9
  this.server = parent.server
8
10
  // this.kernel = parent.kernel
@@ -15,8 +17,35 @@ class Socket {
15
17
  set.delete(ws);
16
18
  });
17
19
  });
18
- ws.on('message', async (message) => {
19
- const req = JSON.parse(message);
20
+ ws.on('message', async (message, isBinary) => {
21
+
22
+ let req
23
+ if (isBinary) {
24
+ const buffer = Buffer.from(message);
25
+ const sepIndex = buffer.indexOf(0);
26
+ if (sepIndex === -1) throw new Error("Missing metadata separator");
27
+ const metaStr = buffer.slice(0, sepIndex).toString('utf-8');
28
+ const meta = JSON.parse(metaStr);
29
+ const bufferKeys = meta.buffer_keys;
30
+ const resultBuffers = {};
31
+ let offset = sepIndex + 1;
32
+ for (const key of bufferKeys) {
33
+ if (offset + 4 > buffer.length) throw new Error("Unexpected EOF while reading buffer length");
34
+ const len = buffer.readUInt32BE(offset);
35
+ offset += 4;
36
+ if (offset + len > buffer.length) throw new Error("Unexpected EOF while reading buffer data");
37
+ const fileBuf = buffer.slice(offset, offset + len);
38
+ resultBuffers[key] = fileBuf;
39
+ offset += len;
40
+ }
41
+ // Now you can save files
42
+ for (const [key, buf] of Object.entries(resultBuffers)) {
43
+ meta.response[key] = buf
44
+ }
45
+ req = meta
46
+ } else {
47
+ req = JSON.parse(message)
48
+ }
20
49
  if (req.response) {
21
50
  this.parent.kernel.api.respond(req)
22
51
  } else {
@@ -25,49 +54,94 @@ class Socket {
25
54
  // look for repos that match
26
55
 
27
56
  if (req.uri) {
28
- /******************************************************************
29
- *
30
- * req.uri is ALWAYS either of the two:
31
- * 1. ~/...
32
- * 2. https://github.com/...
33
- *
34
- * Need to turn it into absolute file path before subscribing
35
- *
36
- ******************************************************************/
37
-
38
- // req.uri is always http or absolute path
39
- let id = this.parent.kernel.api.filePath(req.uri)
40
-
41
- if (req.status) {
42
- ws.send(JSON.stringify({
43
- data: this.parent.kernel.api.running[id] ? true : false
44
- }))
45
- } else if (req.stop) {
46
- this.parent.kernel.api.stop({ params: req })
57
+ if (req.mode === "open") {
58
+ // get the default script and respond
59
+ let id = this.parent.kernel.api.filePath(req.uri)
60
+ try {
61
+ let default_url = await this.parent.kernel.api.get_default(id)
62
+ ws.send(JSON.stringify({
63
+ data: {
64
+ uri: default_url
65
+ }
66
+ }))
67
+ } catch (e) {
68
+ console.log(e)
69
+ }
47
70
  } else {
48
- this.subscribe(ws, id)
49
-
50
- if (req.mode !== "listen") {
51
- // Run only if currently not running
52
- if (!this.parent.kernel.api.running[id]) {
53
-
54
- // clear the log first
55
-
56
- await this.parent.kernel.clearLog(id)
57
-
58
-
59
- this.parent.kernel.api.process(req)
71
+ if (req.uri.startsWith("http")) {
72
+ // open
73
+ Util.openfs(req.uri, { mode: "open" })
74
+ } else {
75
+ /******************************************************************
76
+ *
77
+ * req.uri is ALWAYS either of the two:
78
+ * 1. ~/...
79
+ * 2. https://github.com/...
80
+ *
81
+ * Need to turn it into absolute file path before subscribing
82
+ *
83
+ ******************************************************************/
84
+
85
+ // req.uri is always http or absolute path
86
+ let id = this.parent.kernel.api.filePath(req.uri)
87
+
88
+ if (req.status) {
89
+ ws.send(JSON.stringify({
90
+ data: this.parent.kernel.api.running[id] ? true : false
91
+ }))
92
+ } else if (req.stop) {
93
+ this.parent.kernel.api.stop({ params: req })
94
+ } else {
95
+ let buf = this.buffer[id]
96
+ let sh = this.active_shell[id]
97
+ this.subscribe(ws, id, buf, sh)
98
+ if (req.mode !== "listen") {
99
+ // Run only if currently not running
100
+ if (!this.parent.kernel.api.running[id]) {
101
+
102
+ // clear the log first
103
+
104
+ await this.parent.kernel.clearLog(id)
105
+
106
+
107
+ this.parent.kernel.api.process(req)
108
+ }
109
+ }
60
110
  }
61
111
  }
62
- }
63
112
 
113
+ }
64
114
  } else if (req.method) {
65
- this.subscribe(ws, req.method)
66
- if (req.mode !== "listen") {
67
- this.parent.kernel.api.process(req)
115
+ if (req.id) {
116
+ let buf = this.buffer[req.id]
117
+ let sh = this.active_shell[req.id]
118
+ this.subscribe(ws, req.id, buf, sh)
119
+ if (sh) {
120
+ // if the active shell exists, check if it's killed
121
+ // if the shell is running, don't do anything
122
+ // if the shell is not running, run the request
123
+ let shell = this.parent.kernel.shell.get(sh)
124
+ console.log("get shell for", sh, shell)
125
+ if (!shell) {
126
+ this.parent.kernel.api.process(req)
127
+ }
128
+ // if it's not killed, don't do anything
129
+ } else {
130
+ this.parent.kernel.api.process(req)
131
+ }
132
+ } else {
133
+ this.subscribe(ws, req.method)
134
+ if (req.mode !== "listen") {
135
+ this.parent.kernel.api.process(req)
136
+ }
68
137
  }
69
138
  } else if (req.emit) {
70
139
  this.parent.kernel.shell.emit(req)
140
+ } else if (req.key && req.id) {
141
+ this.parent.kernel.shell.emit({
142
+ id: req.id,
143
+ emit: req.key
144
+ })
71
145
  }
72
146
  }
73
147
 
@@ -78,11 +152,16 @@ class Socket {
78
152
  headers.push('Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept');
79
153
  });
80
154
  }
81
- subscribe(ws, id) {
155
+ subscribe(ws, id, buf, sh) {
82
156
 
83
157
  if (this.parent.kernel.api.running[id]) {
84
158
  ws.send(JSON.stringify({
85
- type: "connect"
159
+ type: "connect",
160
+ data: {
161
+ id,
162
+ state: buf,
163
+ shell: sh
164
+ }
86
165
  }))
87
166
  }
88
167
 
@@ -120,6 +199,15 @@ class Socket {
120
199
  });
121
200
  }
122
201
 
202
+ if (!this.buffer[id]) {
203
+ this.buffer[id] = ""
204
+ }
205
+ if (e.data && e.data.raw) this.buffer[id] += e.data.raw
206
+
207
+ if (e.data && e.data.shell_id) {
208
+ this.active_shell[id] = e.data.shell_id
209
+ }
210
+
123
211
  // send to caller session
124
212
  if (e.caller) {
125
213
  let caller
@@ -148,6 +236,15 @@ class Socket {
148
236
  }
149
237
  });
150
238
  }
239
+
240
+ if (!this.buffer[caller]) {
241
+ this.buffer[caller] = ""
242
+ }
243
+ if (e.data.raw) this.buffer[caller] += e.data.raw
244
+
245
+ if (e.data && e.data.shell_id) {
246
+ this.active_shell[caller] = e.data.shell_id
247
+ }
151
248
  }
152
249
  }
153
250
  }
@@ -2,7 +2,6 @@
2
2
  <head>
3
3
  <meta charset="UTF-8">
4
4
  <meta name="viewport" content="width=device-width, initial-scale=1" />
5
- <link href="/xterm.min.css" rel="stylesheet" />
6
5
  <link href="/css/fontawesome.min.css" rel="stylesheet">
7
6
  <link href="/css/solid.min.css" rel="stylesheet">
8
7
  <link href="/css/regular.min.css" rel="stylesheet">