@ecmaos/kernel 0.10.2 → 0.10.4
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/README.md +2 -1
- package/dist/.vite/manifest.json +12 -12
- package/dist/{browser-D_rzdy4k.js → browser-CX2g4OIh.js} +2 -2
- package/dist/{browser-D_rzdy4k.js.map → browser-CX2g4OIh.js.map} +1 -1
- package/dist/{index-Dt0A0I3o.js → index-DXuNSaKe.js} +2 -2
- package/dist/{index-Dt0A0I3o.js.map → index-DXuNSaKe.js.map} +1 -1
- package/dist/initfs.tar.gz +0 -0
- package/dist/{install-CRrPdUs9.js → install-Bs2UAdQv.js} +2 -2
- package/dist/{install-CRrPdUs9.js.map → install-Bs2UAdQv.js.map} +1 -1
- package/dist/{kernel-Io5VyIzi.js → kernel-M80zlY8S.js} +789 -503
- package/dist/{kernel-Io5VyIzi.js.map → kernel-M80zlY8S.js.map} +1 -1
- package/dist/kernel.css +6 -6
- package/dist/kernel.d.ts +9 -9
- 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-_cO2Evrz.js} +2 -2
- package/dist/{uninstall-Bb4xsCq5.js.map → uninstall-_cO2Evrz.js.map} +1 -1
- package/package.json +12 -11
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,11 +20,11 @@ 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';
|
|
27
26
|
import { Shell } from '#shell.ts';
|
|
27
|
+
import { Shell as Shell_2 } from '@ecmaos/types';
|
|
28
28
|
import { Sockets } from '#sockets.ts';
|
|
29
29
|
import { Storage as Storage_2 } from '#storage.ts';
|
|
30
30
|
import { Telemetry } from '#telemetry.ts';
|
|
@@ -116,8 +116,6 @@ export declare class Kernel implements Kernel_2 {
|
|
|
116
116
|
readonly telemetry: Telemetry;
|
|
117
117
|
/** Terminal interface for user interaction */
|
|
118
118
|
readonly terminal: Terminal;
|
|
119
|
-
/** Toast notification service */
|
|
120
|
-
readonly toast: Notyf;
|
|
121
119
|
/** User management service */
|
|
122
120
|
readonly users: Users;
|
|
123
121
|
/** WebAssembly service */
|
|
@@ -206,6 +204,12 @@ export declare class Kernel implements Kernel_2 {
|
|
|
206
204
|
* @returns Exit code of the script
|
|
207
205
|
*/
|
|
208
206
|
executeScript(options: KernelExecuteOptions): Promise<number>;
|
|
207
|
+
/**
|
|
208
|
+
* Executes a JavaScript file
|
|
209
|
+
* @param options - Execution options containing JavaScript file path and shell
|
|
210
|
+
* @returns Exit code of the JavaScript execution
|
|
211
|
+
*/
|
|
212
|
+
executeJavaScript(options: KernelExecuteOptions): Promise<number>;
|
|
209
213
|
/**
|
|
210
214
|
* Shows a system notification if permissions are granted
|
|
211
215
|
* @param {string} title - Notification title
|
|
@@ -230,9 +234,10 @@ export declare class Kernel implements Kernel_2 {
|
|
|
230
234
|
/**
|
|
231
235
|
* Reads and parses a file header to determine its type
|
|
232
236
|
* @param {string} filePath - Path to the file
|
|
237
|
+
* @param {IShell} shell - Optional shell instance to use for filesystem operations
|
|
233
238
|
* @returns {Promise<FileHeader|null>} Parsed header information or null if invalid
|
|
234
239
|
*/
|
|
235
|
-
readFileHeader(filePath: string): Promise<FileHeader | null>;
|
|
240
|
+
readFileHeader(filePath: string, shell?: Shell_2): Promise<FileHeader | null>;
|
|
236
241
|
/**
|
|
237
242
|
* Reboots the kernel by performing a shutdown and page reload
|
|
238
243
|
*/
|
|
@@ -323,11 +328,6 @@ export declare class Kernel implements Kernel_2 {
|
|
|
323
328
|
* @param ttyNumber - TTY number to switch to (0-9)
|
|
324
329
|
*/
|
|
325
330
|
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
331
|
/**
|
|
332
332
|
* Executes an operation with root (or other) privileges
|
|
333
333
|
* @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-M80zlY8S.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-M80zlY8S.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-_cO2Evrz.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstall-
|
|
1
|
+
{"version":3,"file":"uninstall-_cO2Evrz.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.4",
|
|
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>",
|
|
@@ -143,8 +144,8 @@
|
|
|
143
144
|
"vite-tsconfig-paths": "^5.0.1",
|
|
144
145
|
"vitest": "^2.1.2",
|
|
145
146
|
"vitest-canvas-mock": "^0.3.3",
|
|
146
|
-
"@ecmaos/
|
|
147
|
-
"@ecmaos/
|
|
147
|
+
"@ecmaos/types": "^0.8.4",
|
|
148
|
+
"@ecmaos/config-typescript": "^0.2.0"
|
|
148
149
|
},
|
|
149
150
|
"dependencies": {
|
|
150
151
|
"@bytecodealliance/jco": "^1.15.4",
|
|
@@ -192,20 +193,20 @@
|
|
|
192
193
|
"winbox": "^0.2.82",
|
|
193
194
|
"@ecmaos-devices/audio": "^0.1.0",
|
|
194
195
|
"@ecmaos-devices/gamepad": "^0.1.0",
|
|
195
|
-
"@ecmaos-devices/battery": "^0.1.0",
|
|
196
|
-
"@ecmaos-devices/bluetooth": "^0.1.0",
|
|
197
|
-
"@ecmaos-devices/geo": "^0.1.0",
|
|
198
196
|
"@ecmaos-devices/gpu": "^0.1.0",
|
|
197
|
+
"@ecmaos-devices/geo": "^0.1.0",
|
|
198
|
+
"@ecmaos-devices/bluetooth": "^0.1.0",
|
|
199
199
|
"@ecmaos-devices/hid": "^0.1.0",
|
|
200
200
|
"@ecmaos-devices/midi": "^0.1.0",
|
|
201
201
|
"@ecmaos-devices/presentation": "^0.1.0",
|
|
202
202
|
"@ecmaos-devices/sensors": "^0.1.0",
|
|
203
|
-
"@ecmaos-devices/
|
|
203
|
+
"@ecmaos-devices/battery": "^0.1.0",
|
|
204
204
|
"@ecmaos-devices/serial": "^0.1.0",
|
|
205
|
+
"@ecmaos-devices/tty": "^0.1.1",
|
|
205
206
|
"@ecmaos-devices/usb": "^0.1.0",
|
|
206
207
|
"@ecmaos-devices/webgl": "^0.1.0",
|
|
207
|
-
"@ecmaos/
|
|
208
|
-
"@ecmaos/
|
|
208
|
+
"@ecmaos/coreutils": "^0.6.3",
|
|
209
|
+
"@ecmaos/bios": "^0.2.0"
|
|
209
210
|
},
|
|
210
211
|
"resolutions": {
|
|
211
212
|
"ws": ">=8.17.1"
|