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.
- package/:w +1247 -0
- package/kernel/api/filepicker/index.js +59 -0
- package/kernel/api/fs/index.js +6 -4
- package/kernel/api/index.js +123 -37
- package/kernel/api/input/index.js +2 -0
- package/kernel/api/web/index.js +6 -0
- package/kernel/bin/caddy.js +127 -0
- package/kernel/bin/cloudflared.js +1 -0
- package/kernel/bin/conda.js +10 -2
- package/kernel/bin/cuda.js +0 -16
- package/kernel/bin/ffmpeg.js +4 -6
- package/kernel/bin/git.js +55 -29
- package/kernel/bin/gxx.js +8 -6
- package/kernel/bin/huggingface.js +4 -5
- package/kernel/bin/index.js +347 -88
- package/kernel/bin/node.js +13 -6
- package/kernel/bin/py.js +1 -1
- package/kernel/bin/setup.js +146 -0
- package/kernel/bin/uv.js +4 -5
- package/kernel/bin/zip.js +7 -8
- package/kernel/connect/index.js +25 -0
- package/kernel/connect/providers/github/README.md +11 -0
- package/kernel/connect/providers/x/README.md +96 -0
- package/kernel/connect/providers/x/index.js +152 -0
- package/kernel/environment.js +50 -1
- package/kernel/index.js +152 -32
- package/kernel/info.js +4 -2
- package/kernel/kv.js +38 -0
- package/kernel/loader.js +13 -3
- package/kernel/peer.js +161 -0
- package/kernel/procs.js +116 -0
- package/kernel/prototype.js +62 -0
- package/kernel/router/common.js +42 -0
- package/kernel/router/connector.js +81 -0
- package/kernel/router/index.js +235 -0
- package/kernel/router/localhost_home_router.js +84 -0
- package/kernel/router/localhost_port_router.js +15 -0
- package/kernel/router/localhost_variable_router.js +37 -0
- package/kernel/router/peer_home_router.js +15 -0
- package/kernel/router/peer_peer_router.js +26 -0
- package/kernel/router/peer_port_router.js +45 -0
- package/kernel/router/peer_variable_router.js +46 -0
- package/kernel/router/processor.js +31 -0
- package/kernel/shell.js +141 -60
- package/kernel/shells.js +32 -17
- package/kernel/store.js +58 -0
- package/kernel/sysinfo.js +0 -1
- package/kernel/util.js +143 -36
- package/package.json +4 -1
- package/pipe/index.js +0 -2
- package/script/index.js +12 -0
- package/server/index.js +1473 -553
- package/server/public/Socket.js +5 -1
- package/server/public/SourceCodePro-Regular.ttf +0 -0
- package/server/public/SpaceMono-Bold.ttf +0 -0
- package/server/public/SpaceMono-BoldItalic.ttf +0 -0
- package/server/public/SpaceMono-Italic.ttf +0 -0
- package/server/public/SpaceMono-Regular.ttf +0 -0
- package/server/public/commander.js +40 -0
- package/server/public/common.js +60 -0
- package/server/public/dropzone-min.js +2 -0
- package/server/public/dropzone.css +1 -0
- package/server/public/filepond-plugin-file-validate-type.min.js +9 -0
- package/server/public/filepond-plugin-image-crop.min.js +9 -0
- package/server/public/filepond-plugin-image-edit.min.css +8 -0
- package/server/public/filepond-plugin-image-edit.min.js +9 -0
- package/server/public/filepond-plugin-image-exif-orientation.min.js +9 -0
- package/server/public/filepond-plugin-image-preview.min.css +8 -0
- package/server/public/filepond-plugin-image-preview.min.js +9 -0
- package/server/public/filepond-plugin-image-resize.min.js +9 -0
- package/server/public/filepond-plugin-image-transform.min.js +9 -0
- package/server/public/filepond.min.css +8 -0
- package/server/public/filepond.min.js +9 -0
- package/server/public/fscreator.js +174 -0
- package/server/public/fseditor.js +212 -0
- package/server/public/github.png +0 -0
- package/server/public/highlight-js.js +81 -0
- package/server/public/highlight.css +9 -0
- package/server/public/highlight.js +1244 -0
- package/server/public/install.js +17 -20
- package/server/public/modalinput.js +105 -9
- package/server/public/opener.js +3 -1
- package/server/public/pinokio-black.png +0 -0
- package/server/public/pinokio-black2.png +0 -0
- package/server/public/redoc.standalone.js +1832 -0
- package/server/public/style.css +215 -17
- package/server/public/swagger-ui-bundle.js +2 -0
- package/server/public/swagger-ui.css +3 -0
- package/server/public/x.js +63 -0
- package/server/socket.js +136 -39
- package/server/views/404.ejs +0 -1
- package/server/views/app.ejs +368 -98
- package/server/views/bootstrap.ejs +22 -19
- package/server/views/connect/x.ejs +324 -0
- package/server/views/connect.ejs +197 -0
- package/server/views/download.ejs +7 -1
- package/server/views/editor.ejs +68 -9
- package/server/views/explore.ejs +13 -10
- package/server/views/file_explorer.ejs +10 -37
- package/server/views/github.ejs +218 -0
- package/server/views/help.ejs +4 -3
- package/server/views/index.ejs +275 -121
- package/server/views/install.ejs +56 -29
- package/server/views/keys.ejs +276 -0
- package/server/views/network.ejs +889 -0
- package/server/views/partials/dynamic.ejs +9 -0
- package/server/views/partials/menu.ejs +7 -1
- package/server/views/prototype/index.ejs +311 -0
- package/server/views/prototype/show.ejs +383 -0
- package/server/views/redoc.ejs +18 -0
- package/server/views/required_env_editor.ejs +11 -2
- package/server/views/settings.ejs +38 -10
- package/server/views/setup.ejs +254 -0
- package/server/views/setup_home.ejs +192 -0
- package/server/views/shell.ejs +781 -0
- package/server/views/swaggerui.ejs +19 -0
- package/server/views/terminal.ejs +174 -42
- package/LICENSE +0 -7
- 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
|
-
|
|
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
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
-
|
|
66
|
-
|
|
67
|
-
this.
|
|
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
|
}
|
package/server/views/404.ejs
CHANGED
|
@@ -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">
|