@ecmaos/kernel 0.10.2 → 0.10.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/dist/.vite/manifest.json +12 -12
- package/dist/{browser-D_rzdy4k.js → browser-BjnxDyrD.js} +2 -2
- package/dist/{browser-D_rzdy4k.js.map → browser-BjnxDyrD.js.map} +1 -1
- package/dist/{index-Dt0A0I3o.js → index-9M8pZtzV.js} +2 -2
- package/dist/{index-Dt0A0I3o.js.map → index-9M8pZtzV.js.map} +1 -1
- package/dist/initfs.tar.gz +0 -0
- package/dist/{install-CRrPdUs9.js → install-C78wAcrD.js} +2 -2
- package/dist/{install-CRrPdUs9.js.map → install-C78wAcrD.js.map} +1 -1
- package/dist/{kernel-Io5VyIzi.js → kernel-C3PA_-lt.js} +585 -450
- package/dist/{kernel-Io5VyIzi.js.map → kernel-C3PA_-lt.js.map} +1 -1
- package/dist/kernel.css +6 -6
- package/dist/kernel.d.ts +0 -8
- package/dist/kernel.js +1 -1
- package/dist/toasters.png +0 -0
- package/dist/ui.js +4 -2
- package/dist/ui.js.map +1 -1
- package/dist/{uninstall-Bb4xsCq5.js → uninstall-qEkzPbxE.js} +2 -2
- package/dist/{uninstall-Bb4xsCq5.js.map → uninstall-qEkzPbxE.js.map} +1 -1
- package/package.json +9 -8
package/dist/kernel.css
CHANGED
|
@@ -479,29 +479,29 @@ body::before {
|
|
|
479
479
|
#terminal,
|
|
480
480
|
.terminal-container {
|
|
481
481
|
width: 100%;
|
|
482
|
-
height:
|
|
482
|
+
height: 98%;
|
|
483
483
|
overflow: hidden;
|
|
484
484
|
padding-inline: 5px;
|
|
485
485
|
box-sizing: border-box;
|
|
486
486
|
}
|
|
487
487
|
|
|
488
|
-
@supports (height:
|
|
488
|
+
@supports (height: 98dvh) {
|
|
489
489
|
#terminal,
|
|
490
490
|
.terminal-container {
|
|
491
|
-
height:
|
|
491
|
+
height: 98dvh;
|
|
492
492
|
}
|
|
493
493
|
}
|
|
494
494
|
|
|
495
495
|
@media (max-width: 768px) {
|
|
496
496
|
#terminal,
|
|
497
497
|
.terminal-container {
|
|
498
|
-
height:
|
|
498
|
+
height: 98%;
|
|
499
499
|
}
|
|
500
500
|
|
|
501
|
-
@supports (height:
|
|
501
|
+
@supports (height: 98dvh) {
|
|
502
502
|
#terminal,
|
|
503
503
|
.terminal-container {
|
|
504
|
-
height:
|
|
504
|
+
height: 98dvh;
|
|
505
505
|
}
|
|
506
506
|
}
|
|
507
507
|
|
package/dist/kernel.d.ts
CHANGED
|
@@ -20,7 +20,6 @@ import { KernelOptions } from '@ecmaos/types';
|
|
|
20
20
|
import { KernelState } from '@ecmaos/types';
|
|
21
21
|
import { Log } from '#log.ts';
|
|
22
22
|
import { Memory } from '#memory.ts';
|
|
23
|
-
import { Notyf } from 'notyf';
|
|
24
23
|
import { ProcessManager } from '#processes.ts';
|
|
25
24
|
import { Protocol } from '#protocol.ts';
|
|
26
25
|
import { Service } from '#service.ts';
|
|
@@ -116,8 +115,6 @@ export declare class Kernel implements Kernel_2 {
|
|
|
116
115
|
readonly telemetry: Telemetry;
|
|
117
116
|
/** Terminal interface for user interaction */
|
|
118
117
|
readonly terminal: Terminal;
|
|
119
|
-
/** Toast notification service */
|
|
120
|
-
readonly toast: Notyf;
|
|
121
118
|
/** User management service */
|
|
122
119
|
readonly users: Users;
|
|
123
120
|
/** WebAssembly service */
|
|
@@ -323,11 +320,6 @@ export declare class Kernel implements Kernel_2 {
|
|
|
323
320
|
* @param ttyNumber - TTY number to switch to (0-9)
|
|
324
321
|
*/
|
|
325
322
|
switchTty(ttyNumber: number): Promise<void>;
|
|
326
|
-
/**
|
|
327
|
-
* Shows a quick flash indicator for the TTY number in the top-right corner
|
|
328
|
-
* @param ttyNumber - TTY number to display
|
|
329
|
-
*/
|
|
330
|
-
private _showTtyIndicator;
|
|
331
323
|
/**
|
|
332
324
|
* Executes an operation with root (or other) privileges
|
|
333
325
|
* @param {() => Promise<T>} operation - Operation to execute
|
package/dist/kernel.js
CHANGED
|
Binary file
|
package/dist/ui.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
2
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
-
import { K as Kernel } from "./kernel-
|
|
3
|
+
import { K as Kernel } from "./kernel-C3PA_-lt.js";
|
|
4
|
+
const username = "root";
|
|
5
|
+
const password = "root";
|
|
4
6
|
const socket = "ws://localhost:30445/socket";
|
|
5
7
|
const terminalContainer = document.getElementById("terminal");
|
|
6
8
|
if (terminalContainer) {
|
|
@@ -14,7 +16,7 @@ if (terminalContainer) {
|
|
|
14
16
|
}
|
|
15
17
|
}
|
|
16
18
|
const kernel = new Kernel({
|
|
17
|
-
credentials:
|
|
19
|
+
credentials: { username, password },
|
|
18
20
|
dom: { topbar: true },
|
|
19
21
|
log: { name: `ecmaos:${"kernel"}` },
|
|
20
22
|
socket: new WebSocket(socket)
|
package/dist/ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sources":["../src/ui.ts"],"sourcesContent":["import { Kernel } from '#kernel.ts'\nimport './ui.css'\n\nconst username = import.meta.env.ECMAOS_AUTOLOGIN_USERNAME\nconst password = import.meta.env.ECMAOS_AUTOLOGIN_PASSWORD\nconst socket = import.meta.env.ECMAOS_METAL_SOCKET\n\n// Create terminal containers for TTYs 0-9\nconst terminalContainer = document.getElementById('terminal')\nif (terminalContainer) {\n // Rename the existing terminal div to terminal-tty0\n terminalContainer.id = 'terminal-tty0'\n terminalContainer.classList.add('terminal-container', 'active')\n \n // Create containers for TTYs 1-9\n for (let i = 1; i <= 9; i++) {\n const ttyContainer = document.createElement('div')\n ttyContainer.id = `terminal-tty${i}`\n ttyContainer.className = 'terminal-container'\n document.body.appendChild(ttyContainer)\n }\n}\n\nconst kernel = new Kernel({\n credentials: (username && password) ? { username, password } : undefined,\n dom: { topbar: import.meta.env.NODE_ENV !== 'test' },\n log: { name: `ecmaos:${import.meta.env.NODE_ENV || 'kernel'}` },\n socket: socket ? new WebSocket(socket) : undefined\n})\n\nglobalThis.kernels = globalThis.kernels || new Map()\nglobalThis.kernels.set(kernel.id, kernel)\n\nglobalThis.shells = globalThis.shells || new Map()\nglobalThis.shells.set(kernel.shell.id, kernel.shell)\n\nglobalThis.terminals = globalThis.terminals || new Map()\nglobalThis.terminals.set(kernel.terminal.id, kernel.terminal)\n\nconst primaryKernel = globalThis.kernels.values().next().value\nglobalThis.kernel = primaryKernel\n\nkernel.terminal.mount(document.getElementById('terminal-tty0') as HTMLElement)\n\n// Set up global keyboard handler for TTY switching\n// Use capture phase to intercept before xterm.js handles it\nconst ttySwitchHandler = async (event: KeyboardEvent) => {\n if (event.ctrlKey && event.shiftKey) {\n // Use event.code instead of event.key because Shift+number produces symbols\n // e.g., Shift+1 produces key='!' but code='Digit1'\n const codeMatch = event.code.match(/^Digit([0-9])$/)\n if (codeMatch && codeMatch[1]) {\n event.preventDefault()\n event.stopPropagation()\n event.stopImmediatePropagation()\n const ttyNumber = parseInt(codeMatch[1])\n try {\n await kernel.switchTty(ttyNumber)\n } catch (error) {\n console.error('Failed to switch TTY:', error)\n }\n return false\n }\n }\n return true\n}\n\n// Add handler with capture phase to catch events before xterm.js\ndocument.addEventListener('keydown', ttySwitchHandler, true)\n\nkernel.boot({ silent: import.meta.env.NODE_ENV === 'test', figletFontRandom: false })\n"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"ui.js","sources":["../src/ui.ts"],"sourcesContent":["import { Kernel } from '#kernel.ts'\nimport './ui.css'\n\nconst username = import.meta.env.ECMAOS_AUTOLOGIN_USERNAME\nconst password = import.meta.env.ECMAOS_AUTOLOGIN_PASSWORD\nconst socket = import.meta.env.ECMAOS_METAL_SOCKET\n\n// Create terminal containers for TTYs 0-9\nconst terminalContainer = document.getElementById('terminal')\nif (terminalContainer) {\n // Rename the existing terminal div to terminal-tty0\n terminalContainer.id = 'terminal-tty0'\n terminalContainer.classList.add('terminal-container', 'active')\n \n // Create containers for TTYs 1-9\n for (let i = 1; i <= 9; i++) {\n const ttyContainer = document.createElement('div')\n ttyContainer.id = `terminal-tty${i}`\n ttyContainer.className = 'terminal-container'\n document.body.appendChild(ttyContainer)\n }\n}\n\nconst kernel = new Kernel({\n credentials: (username && password) ? { username, password } : undefined,\n dom: { topbar: import.meta.env.NODE_ENV !== 'test' },\n log: { name: `ecmaos:${import.meta.env.NODE_ENV || 'kernel'}` },\n socket: socket ? new WebSocket(socket) : undefined\n})\n\nglobalThis.kernels = globalThis.kernels || new Map()\nglobalThis.kernels.set(kernel.id, kernel)\n\nglobalThis.shells = globalThis.shells || new Map()\nglobalThis.shells.set(kernel.shell.id, kernel.shell)\n\nglobalThis.terminals = globalThis.terminals || new Map()\nglobalThis.terminals.set(kernel.terminal.id, kernel.terminal)\n\nconst primaryKernel = globalThis.kernels.values().next().value\nglobalThis.kernel = primaryKernel\n\nkernel.terminal.mount(document.getElementById('terminal-tty0') as HTMLElement)\n\n// Set up global keyboard handler for TTY switching\n// Use capture phase to intercept before xterm.js handles it\nconst ttySwitchHandler = async (event: KeyboardEvent) => {\n if (event.ctrlKey && event.shiftKey) {\n // Use event.code instead of event.key because Shift+number produces symbols\n // e.g., Shift+1 produces key='!' but code='Digit1'\n const codeMatch = event.code.match(/^Digit([0-9])$/)\n if (codeMatch && codeMatch[1]) {\n event.preventDefault()\n event.stopPropagation()\n event.stopImmediatePropagation()\n const ttyNumber = parseInt(codeMatch[1])\n try {\n await kernel.switchTty(ttyNumber)\n } catch (error) {\n console.error('Failed to switch TTY:', error)\n }\n return false\n }\n }\n return true\n}\n\n// Add handler with capture phase to catch events before xterm.js\ndocument.addEventListener('keydown', ttySwitchHandler, true)\n\nkernel.boot({ silent: import.meta.env.NODE_ENV === 'test', figletFontRandom: false })\n"],"names":[],"mappings":";;;AAGA,MAAM,WAAW;AACjB,MAAM,WAAW;AACjB,MAAM,SAAS;AAGf,MAAM,oBAAoB,SAAS,eAAe,UAAU;AAC5D,IAAI,mBAAmB;AAErB,oBAAkB,KAAK;AACvB,oBAAkB,UAAU,IAAI,sBAAsB,QAAQ;AAG9D,WAAS,IAAI,GAAG,KAAK,GAAG,KAAK;AAC3B,UAAM,eAAe,SAAS,cAAc,KAAK;AACjD,iBAAa,KAAK,eAAe,CAAC;AAClC,iBAAa,YAAY;AACzB,aAAS,KAAK,YAAY,YAAY;AAAA,EACxC;AACF;AAEA,MAAM,SAAS,IAAI,OAAO;AAAA,EACxB,aAAsC,EAAE,UAAU;EAClD,KAAK,EAAE,QAAQ,KAA6B;AAAA,EAC5C,KAAK,EAAE,MAAM,UAAsC,QAAQ,GAAA;AAAA,EAC3D,QAAiB,IAAI,UAAU,MAAM;AACvC,CAAC;AAED,WAAW,UAAU,WAAW,WAAW,oBAAI,IAAA;AAC/C,WAAW,QAAQ,IAAI,OAAO,IAAI,MAAM;AAExC,WAAW,SAAS,WAAW,UAAU,oBAAI,IAAA;AAC7C,WAAW,OAAO,IAAI,OAAO,MAAM,IAAI,OAAO,KAAK;AAEnD,WAAW,YAAY,WAAW,aAAa,oBAAI,IAAA;AACnD,WAAW,UAAU,IAAI,OAAO,SAAS,IAAI,OAAO,QAAQ;AAE5D,MAAM,gBAAgB,WAAW,QAAQ,OAAA,EAAS,OAAO;AACzD,WAAW,SAAS;AAEpB,OAAO,SAAS,MAAM,SAAS,eAAe,eAAe,CAAgB;AAI7E,MAAM,mBAAmB,8BAAO,UAAyB;AACvD,MAAI,MAAM,WAAW,MAAM,UAAU;AAGnC,UAAM,YAAY,MAAM,KAAK,MAAM,gBAAgB;AACnD,QAAI,aAAa,UAAU,CAAC,GAAG;AAC7B,YAAM,eAAA;AACN,YAAM,gBAAA;AACN,YAAM,yBAAA;AACN,YAAM,YAAY,SAAS,UAAU,CAAC,CAAC;AACvC,UAAI;AACF,cAAM,OAAO,UAAU,SAAS;AAAA,MAClC,SAAS,OAAO;AACd,gBAAQ,MAAM,yBAAyB,KAAK;AAAA,MAC9C;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT,GAnByB;AAsBzB,SAAS,iBAAiB,WAAW,kBAAkB,IAAI;AAE3D,OAAO,KAAK,EAAE,QAAQ,OAAqC,kBAAkB,OAAO;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
2
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
-
import { c as chalk, p as path } from "./kernel-
|
|
3
|
+
import { c as chalk, p as path } from "./kernel-C3PA_-lt.js";
|
|
4
4
|
const uninstall = /* @__PURE__ */ __name(async ({ kernel, terminal, args }) => {
|
|
5
5
|
const [packageArg] = args;
|
|
6
6
|
if (!packageArg) {
|
|
@@ -94,4 +94,4 @@ const uninstall = /* @__PURE__ */ __name(async ({ kernel, terminal, args }) => {
|
|
|
94
94
|
export {
|
|
95
95
|
uninstall as default
|
|
96
96
|
};
|
|
97
|
-
//# sourceMappingURL=uninstall-
|
|
97
|
+
//# sourceMappingURL=uninstall-qEkzPbxE.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstall-
|
|
1
|
+
{"version":3,"file":"uninstall-qEkzPbxE.js","sources":["../src/tree/lib/commands/uninstall.ts"],"sourcesContent":["import chalk from 'chalk'\nimport path from 'path'\n\nimport { CommandArgs } from './'\n\nconst uninstall = async ({ kernel, terminal, args }: CommandArgs) => {\n const [packageArg] = args as [string]\n if (!packageArg) {\n terminal.writeln(chalk.red('Usage: uninstall <package-name>[@version]'))\n return 1\n }\n\n const spec = packageArg.match(/(@[^/]+\\/[^@]+|[^@]+)(?:@([^/]+))?/)\n if (!spec) {\n terminal.writeln(chalk.red('Invalid package name format'))\n return 1\n }\n\n const packageName = spec[1]?.replace('vnpm:', '')\n const version = spec[2]\n\n if (!packageName) {\n terminal.writeln(chalk.red('Invalid package name format'))\n return 1\n }\n\n const packageDir = path.join('/usr/lib', packageName)\n \n // Check if package is installed\n if (!await kernel.filesystem.fs.exists(packageDir)) {\n terminal.writeln(chalk.red(`Package ${packageName} is not installed`))\n return 1\n }\n\n try {\n // Get installed versions\n const versions = await kernel.filesystem.fs.readdir(packageDir)\n \n if (versions.length === 0) {\n terminal.writeln(chalk.red(`No versions found for ${packageName}`))\n return 1\n }\n\n // If version is specified, uninstall only that version\n // Otherwise, uninstall all versions\n const versionsToUninstall = version \n ? versions.filter(v => v === version)\n : versions\n\n if (version && versionsToUninstall.length === 0) {\n terminal.writeln(chalk.red(`Version ${version} of ${packageName} is not installed`))\n terminal.writeln(chalk.yellow(`Installed versions: ${versions.join(', ')}`))\n return 1\n }\n\n // Uninstall each version\n for (const versionToUninstall of versionsToUninstall) {\n const versionPath = path.join(packageDir, versionToUninstall)\n const packagePath = path.join(versionPath, 'package.json')\n\n if (!await kernel.filesystem.fs.exists(packagePath)) {\n terminal.writeln(chalk.yellow(`Warning: package.json not found for ${packageName}@${versionToUninstall}, skipping binary unlinking`))\n } else {\n try {\n // Read package.json to find binaries to unlink\n const packageData = await kernel.filesystem.fs.readFile(packagePath, 'utf-8')\n const packageJson = JSON.parse(packageData)\n\n // Unlink binaries\n if (packageJson.bin) {\n if (typeof packageJson.bin === 'string') {\n const binPath = path.join('/usr/bin', packageJson.name)\n try {\n await kernel.filesystem.fs.unlink(binPath)\n terminal.writeln(chalk.blue(`Unlinked ${packageJson.name} from ${binPath}`))\n } catch (error) {\n // Binary might not exist or might not be a symlink, continue anyway\n terminal.writeln(chalk.yellow(`Warning: Could not unlink ${binPath}: ${error instanceof Error ? error.message : 'Unknown error'}`))\n }\n } else if (typeof packageJson.bin === 'object') {\n for (const bin in packageJson.bin) {\n const binPath = path.join('/usr/bin', bin)\n try {\n await kernel.filesystem.fs.unlink(binPath)\n terminal.writeln(chalk.blue(`Unlinked ${bin} from ${binPath}`))\n } catch (error) {\n // Binary might not exist or might not be a symlink, continue anyway\n terminal.writeln(chalk.yellow(`Warning: Could not unlink ${binPath}: ${error instanceof Error ? error.message : 'Unknown error'}`))\n }\n }\n }\n }\n } catch (error) {\n terminal.writeln(chalk.yellow(`Warning: Failed to read package.json for ${packageName}@${versionToUninstall}: ${error instanceof Error ? error.message : 'Unknown error'}`))\n }\n }\n\n // Remove the package version directory\n try {\n await kernel.filesystem.fs.rm(versionPath, { recursive: true, force: true })\n terminal.writeln(chalk.green(`Uninstalled ${packageName}@${versionToUninstall}`))\n } catch (error) {\n terminal.writeln(chalk.red(`Failed to remove ${versionPath}: ${error instanceof Error ? error.message : 'Unknown error'}`))\n return 1\n }\n }\n\n // If all versions were uninstalled, remove the package directory\n const remainingVersions = await kernel.filesystem.fs.readdir(packageDir).catch(() => [])\n if (remainingVersions.length === 0) {\n try {\n await kernel.filesystem.fs.rmdir(packageDir)\n } catch {\n // Directory might not be empty or might have already been removed, that's okay\n terminal.writeln(chalk.yellow(`Warning: Could not remove package directory ${packageDir}`))\n }\n }\n\n return 0\n } catch (error) {\n terminal.writeln(chalk.red(`Failed to uninstall ${packageName}: ${error instanceof Error ? error.message : 'Unknown error'}`))\n return 1\n }\n}\n\nexport default uninstall\n\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ecmaos/kernel",
|
|
3
|
-
"description": "ecmaOS:
|
|
4
|
-
"version": "0.10.
|
|
3
|
+
"description": "ecmaOS: A web-native operating system and framework for web technologies",
|
|
4
|
+
"version": "0.10.3",
|
|
5
5
|
"license": "MIT+Apache-2.0",
|
|
6
6
|
"homepage": "https://ecmaos.sh",
|
|
7
7
|
"repository": "https://github.com/ecmaos/ecmaos",
|
|
@@ -22,15 +22,16 @@
|
|
|
22
22
|
"email": "code@mathis.network"
|
|
23
23
|
},
|
|
24
24
|
"knownIssues": [
|
|
25
|
+
"To disable known issues, type `touch /etc/noissues`",
|
|
25
26
|
"It's best to stick to Chromium-based browsers for the most features",
|
|
26
27
|
"Keyboard is broken on mobile; ecmaOS is not mobile-friendly at this time",
|
|
27
28
|
"Don't expect any sort of POSIX compliance at this stage",
|
|
28
29
|
"Most commands/devices are very basic implementations, not complete reproductions",
|
|
29
|
-
"stdin/stdout/stderr streams and redirection can be wonky and don't work everywhere, but are coming along",
|
|
30
30
|
"CTRL-C will return you to a prompt, but doesn't currently interrupt a process",
|
|
31
31
|
"Lots of unfinished work; watch your step"
|
|
32
32
|
],
|
|
33
33
|
"tips": [
|
|
34
|
+
"To disable tips, type `touch /etc/notips`",
|
|
34
35
|
"ecmaos.sh has no backend server; all data is stored and processed entirely in your browser",
|
|
35
36
|
"If it ever fails to boot, check your logs, try clearing all data, try incognito mode, or try another browser",
|
|
36
37
|
"You can switch between TTYs using CTRL+SHIFT+<0-9>",
|
|
@@ -144,7 +145,7 @@
|
|
|
144
145
|
"vitest": "^2.1.2",
|
|
145
146
|
"vitest-canvas-mock": "^0.3.3",
|
|
146
147
|
"@ecmaos/config-typescript": "^0.2.0",
|
|
147
|
-
"@ecmaos/types": "^0.8.
|
|
148
|
+
"@ecmaos/types": "^0.8.3"
|
|
148
149
|
},
|
|
149
150
|
"dependencies": {
|
|
150
151
|
"@bytecodealliance/jco": "^1.15.4",
|
|
@@ -191,21 +192,21 @@
|
|
|
191
192
|
"wabt": "^1.0.36",
|
|
192
193
|
"winbox": "^0.2.82",
|
|
193
194
|
"@ecmaos-devices/audio": "^0.1.0",
|
|
195
|
+
"@ecmaos-devices/bluetooth": "^0.1.0",
|
|
194
196
|
"@ecmaos-devices/gamepad": "^0.1.0",
|
|
195
197
|
"@ecmaos-devices/battery": "^0.1.0",
|
|
196
|
-
"@ecmaos-devices/bluetooth": "^0.1.0",
|
|
197
198
|
"@ecmaos-devices/geo": "^0.1.0",
|
|
198
199
|
"@ecmaos-devices/gpu": "^0.1.0",
|
|
199
200
|
"@ecmaos-devices/hid": "^0.1.0",
|
|
200
201
|
"@ecmaos-devices/midi": "^0.1.0",
|
|
201
202
|
"@ecmaos-devices/presentation": "^0.1.0",
|
|
202
203
|
"@ecmaos-devices/sensors": "^0.1.0",
|
|
203
|
-
"@ecmaos-devices/tty": "^0.1.1",
|
|
204
204
|
"@ecmaos-devices/serial": "^0.1.0",
|
|
205
|
+
"@ecmaos-devices/tty": "^0.1.1",
|
|
205
206
|
"@ecmaos-devices/usb": "^0.1.0",
|
|
206
|
-
"@ecmaos-devices/webgl": "^0.1.0",
|
|
207
207
|
"@ecmaos/bios": "^0.2.0",
|
|
208
|
-
"@ecmaos/
|
|
208
|
+
"@ecmaos-devices/webgl": "^0.1.0",
|
|
209
|
+
"@ecmaos/coreutils": "^0.6.2"
|
|
209
210
|
},
|
|
210
211
|
"resolutions": {
|
|
211
212
|
"ws": ">=8.17.1"
|