pinokiod 7.5.7 → 7.5.8
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/shell/index.js +7 -2
- package/kernel/bin/node.js +13 -8
- package/kernel/shell.js +20 -0
- package/kernel/shell_conda_runtime_guard.js +647 -0
- package/kernel/shells.js +7 -1
- package/package.json +1 -1
- package/server/index.js +3 -0
- package/server/public/common.js +11 -4
- package/server/public/logs.js +597 -4
- package/server/public/style.css +203 -42
- package/server/views/app.ejs +39 -31
- package/server/views/editor.ejs +1 -0
- package/server/views/install.ejs +1 -0
- package/server/views/logs.ejs +9 -5
- package/server/views/terminal.ejs +34 -5
- package/test/node-bin.test.js +39 -0
- package/test/shell-api.test.js +99 -9
- package/test/shell-conda-runtime-guard.test.js +558 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const path = require('path')
|
|
2
2
|
const fs = require('fs')
|
|
3
3
|
const os = require('os')
|
|
4
|
+
const CondaRuntimeGuard = require('../../shell_conda_runtime_guard')
|
|
4
5
|
class Shell {
|
|
5
6
|
async applyBluefairyDefault(req = {}, kernel) {
|
|
6
7
|
if (!req.params) {
|
|
@@ -179,9 +180,13 @@ class Shell {
|
|
|
179
180
|
req.params.rows = req.client.rows
|
|
180
181
|
req.params.cols = req.client.cols
|
|
181
182
|
}
|
|
182
|
-
|
|
183
|
+
Object.defineProperty(req.params, CondaRuntimeGuard.SHELL_RUN_GUARD, {
|
|
184
|
+
configurable: true,
|
|
185
|
+
value: true,
|
|
186
|
+
})
|
|
187
|
+
let response = await kernel.shell.run(req.params, options, async (stream, type) => {
|
|
183
188
|
// process.stdout.write(stream.raw)
|
|
184
|
-
ondata(stream)
|
|
189
|
+
ondata(stream, type)
|
|
185
190
|
})
|
|
186
191
|
return response
|
|
187
192
|
}
|
package/kernel/bin/node.js
CHANGED
|
@@ -2,12 +2,18 @@ const fs = require('fs')
|
|
|
2
2
|
const fetch = require('cross-fetch')
|
|
3
3
|
const { rimraf } = require('rimraf')
|
|
4
4
|
const decompress = require('decompress');
|
|
5
|
-
const NODE_VERSION = "
|
|
5
|
+
const NODE_VERSION = "24.18.0"
|
|
6
|
+
const PNPM_VERSION = "11.9.0"
|
|
7
|
+
|
|
8
|
+
const normalizeVersion = (version) => {
|
|
9
|
+
const match = String(version || "").match(/^\d+\.\d+\.\d+/)
|
|
10
|
+
return match ? match[0] : null
|
|
11
|
+
}
|
|
6
12
|
|
|
7
13
|
class Node {
|
|
8
14
|
description = "Installs Node.js and pnpm in the Pinokio environment."
|
|
9
15
|
cmd() {
|
|
10
|
-
return `nodejs=${NODE_VERSION} pnpm`
|
|
16
|
+
return `nodejs=${NODE_VERSION} pnpm=${PNPM_VERSION}`
|
|
11
17
|
}
|
|
12
18
|
async install(req, ondata) {
|
|
13
19
|
await this.kernel.bin.exec({
|
|
@@ -18,13 +24,12 @@ class Node {
|
|
|
18
24
|
}, ondata)
|
|
19
25
|
}
|
|
20
26
|
async installed() {
|
|
21
|
-
if (this.kernel.bin.installed.conda
|
|
22
|
-
|
|
23
|
-
if (version !== NODE_VERSION) {
|
|
24
|
-
return false
|
|
25
|
-
}
|
|
27
|
+
if (!this.kernel.bin.installed.conda.has("nodejs") || !this.kernel.bin.installed.conda.has("pnpm")) {
|
|
28
|
+
return false
|
|
26
29
|
}
|
|
27
|
-
|
|
30
|
+
|
|
31
|
+
const versions = this.kernel.bin.installed.conda_versions || {}
|
|
32
|
+
return normalizeVersion(versions.nodejs) === NODE_VERSION && normalizeVersion(versions.pnpm) === PNPM_VERSION
|
|
28
33
|
}
|
|
29
34
|
env() {
|
|
30
35
|
return {
|
package/kernel/shell.js
CHANGED
|
@@ -22,6 +22,7 @@ const AnsiStreamTracker = require('./ansi_stream_tracker')
|
|
|
22
22
|
const ShellStateSync = require('./shell_state_sync')
|
|
23
23
|
const ShellRunTemplate = require('./api/shell_run_template')
|
|
24
24
|
const { PYTHON_INSTALL_SPEC } = require('./bin/conda-pins')
|
|
25
|
+
const CondaRuntimeGuard = require('./shell_conda_runtime_guard')
|
|
25
26
|
const home = os.homedir()
|
|
26
27
|
|
|
27
28
|
function normalizeComparablePath(filePath, platform) {
|
|
@@ -1349,6 +1350,25 @@ class Shell {
|
|
|
1349
1350
|
venv_activation = []
|
|
1350
1351
|
}
|
|
1351
1352
|
|
|
1353
|
+
const managedBasePrefix = this.kernel.bin && typeof this.kernel.bin.path === "function"
|
|
1354
|
+
? this.kernel.bin.path("miniforge")
|
|
1355
|
+
: this.kernel.path("bin/miniforge")
|
|
1356
|
+
const flowSessionKey = [this.id, this.start_time].filter(Boolean).join(':')
|
|
1357
|
+
if (params[CondaRuntimeGuard.SHELL_RUN_GUARD]) {
|
|
1358
|
+
CondaRuntimeGuard.applyCondaRuntimeGuard(params, {
|
|
1359
|
+
cwd: params.path,
|
|
1360
|
+
managedBasePrefix,
|
|
1361
|
+
ondata: (stream, type) => {
|
|
1362
|
+
if (this.ondata) {
|
|
1363
|
+
this.ondata(stream, type)
|
|
1364
|
+
}
|
|
1365
|
+
},
|
|
1366
|
+
platform: this.platform,
|
|
1367
|
+
sessionKey: flowSessionKey || this.group || (params.$parent && (params.$parent.id || params.$parent.path)) || params.id || params.path,
|
|
1368
|
+
shellName: this.shell,
|
|
1369
|
+
})
|
|
1370
|
+
}
|
|
1371
|
+
|
|
1352
1372
|
// 3. construct params.message
|
|
1353
1373
|
let activation = conda_activation.concat(venv_activation)
|
|
1354
1374
|
if (this.kernel.bin && typeof this.kernel.bin.activationCommands === "function") {
|