@ecmaos/kernel 0.1.3 → 0.2.1

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 CHANGED
@@ -2,7 +2,11 @@
2
2
 
3
3
  [![Launch ecmaOS.sh](https://img.shields.io/badge/launch-ecmaos.sh-blue?style=for-the-badge)](https://ecmaos.sh)
4
4
 
5
- [ecmaOS](https://ecmaos.sh) is a [browser-based operating system kernel](https://global.discourse-cdn.com/spiceworks/original/4X/8/7/b/87b7be8e7e2cd932affe5449dba69dc16e30d721.gif) and suite of applications written in TypeScript. It's the successor of [web3os](https://github.com/web3os-org/kernel).
5
+ > Made with ❤️ by [Jay Mathis](https://jaymath.is)
6
+ >
7
+ > [![Stars](https://img.shields.io/github/stars/mathiscode?style=flat&logo=github&label=⭐️)](https://github.com/mathiscode) [![Followers](https://img.shields.io/github/followers/mathiscode?style=flat&logo=github&label=follow)](https://github.com/mathiscode)
8
+
9
+ [ecmaOS](https://ecmaos.sh) is a [browser-based operating system kernel](https://global.discourse-cdn.com/spiceworks/original/4X/8/7/b/87b7be8e7e2cd932affe5449dba69dc16e30d721.gif) and suite of applications written primarily in TypeScript, AssemblyScript, and C++. It's the successor of [web3os](https://github.com/web3os-org/kernel).
6
10
 
7
11
  The goal is to create a kernel and supporting apps that tie together modern web technologies and utilities to form an "operating system" that can run on modern browsers, not just to create a "desktop experience". Its main use case is to provide a consistent environment for running web apps, but it has features that allow for more powerful custom scenarios. The kernel could also be repurposed as a platform for custom applications, games, and more.
8
12
 
@@ -10,7 +14,7 @@ The goal is to create a kernel and supporting apps that tie together modern web
10
14
  > — Hal Finney
11
15
 
12
16
  [![API Reference](https://img.shields.io/badge/API-Reference-success)](https://docs.ecmaos.sh)
13
- [![Version](https://img.shields.io/github/package-json/v/ecmaos/ecmaos?color=success)](https://ecmaos.sh)
17
+ [![Version](https://img.shields.io/github/package-json/v/ecmaos/ecmaos?color=success)](https://www.npmjs.com/package/@ecmaos/kernel)
14
18
  [![Site Status](https://img.shields.io/website?url=https%3A%2F%2Fecmaos.sh)](https://ecmaos.sh)
15
19
  [![Created](https://img.shields.io/github/created-at/ecmaos/ecmaos?style=flat&label=created&color=success)](https://github.com/ecmaos/ecmaos/pulse)
16
20
  [![Last Commit](https://img.shields.io/github/last-commit/ecmaos/ecmaos.svg)](https://github.com/ecmaos/ecmaos/commit/main)
@@ -30,13 +34,9 @@ The goal is to create a kernel and supporting apps that tie together modern web
30
34
  [![Bluesky](https://img.shields.io/badge/follow-on%20Bluesky-blue?logo=bluesky&logoColor=white)](https://ecmaos.bsky.social)
31
35
  [![Reddit](https://img.shields.io/reddit/subreddit-subscribers/ecmaos?style=flat&logo=reddit&logoColor=white&label=r/ecmaos)](https://www.reddit.com/r/ecmaos)
32
36
 
33
- > Made with ❤️ by [Jay Mathis](https://jaymath.is)
34
- >
35
- > [![Stars](https://img.shields.io/github/stars/mathiscode?style=flat&logo=github&label=⭐️)](https://github.com/mathiscode) [![Followers](https://img.shields.io/github/followers/mathiscode?style=flat&logo=github&label=follow)](https://github.com/mathiscode)
36
-
37
37
  ## Features
38
38
 
39
- - TypeScript, WebAssembly
39
+ - TypeScript, WebAssembly, AssemblyScript, C++
40
40
  - Filesystem supporting multiple backends powered by [zenfs](https://github.com/zen-fs/core)
41
41
  - Terminal interface powered by [xterm.js](https://xtermjs.org)
42
42
  - Pseudo-streams, allowing redirection and piping
@@ -50,11 +50,42 @@ The goal is to create a kernel and supporting apps that tie together modern web
50
50
  - Storage manager for managing Storage API capabilities: IndexedDB, localStorage, etc.
51
51
  - Internationalization framework for translating text powered by [i18next](https://www.i18next.com)
52
52
  - Window manager powered by [WinBox](https://github.com/nextapps-de/winbox)
53
- - `SWAPI`: An API server running completely inside a service worker using [Hono](https://hono.dev)
53
+ - `BIOS`: A C++ module compiled to WebAssembly with [Emscripten](https://emscripten.org) providing performance-critical functionality
54
54
  - `Metal`: An API server for allowing connections to physical systems from ecmaOS using [Hono](https://hono.dev)
55
+ - `SWAPI`: An API server running completely inside a service worker using [Hono](https://hono.dev)
55
56
 
56
57
  ## Basic Overview
57
58
 
59
+ - `Apps`
60
+ - These are full applications that are developed specifically to work with ecmaOS
61
+ - An app is an npm package, in which the bin file has a shebang line of `#!ecmaos:bin:app:myappname`
62
+ - Its default export (or exported `main` function) will be called with the `ProcessEntryParams` object
63
+ - They can be installed from the terminal using the `install` command, e.g. `# install @ecmaos-apps/boilerplate`
64
+ - Run the installed app: `# /usr/bin/boilerplate arg1 arg2` *(absolute path not required)*
65
+ - During development, it can be useful to run a [Verdaccio](https://github.com/verdaccio/verdaccio) server to test local packages: `# install @myscope/mypackage --registry http://localhost:4873`
66
+ - To publish to Verdaccio, run `# npm publish --registry http://localhost:4873` in your app's development environment
67
+ - Then to install from your local registry, run `# install @myscope/mypackage --registry http://localhost:4873`
68
+
69
+ - `BIOS`
70
+ - The BIOS is a C++ module compiled to WebAssembly with [Emscripten](https://emscripten.org) providing performance-critical functionality
71
+ - The BIOS has its own filesystem, located at `/bios` — this allows data to be copied in and out of the BIOS for custom code and utilities
72
+ - The main idea is that data and custom code can be loaded into it from the OS for WASM-native performance, as well as providing various utilities
73
+ - Confusingly, the Kernel loads the BIOS — not the other way around
74
+
75
+ - `Core`
76
+ - Core modules provide the system's essential functionality; this includes the kernel itself
77
+ - Other core modules include Metal, SWAPI, BIOS, as well as the main `@ecmaos/types` package
78
+
79
+ - `Commands`
80
+ - Commands are small utilities that aren't quite full Apps, provided by the shell
81
+ - Some builtin commands that exist now will be moved into separate apps over time
82
+
83
+ - `Devices`
84
+ - Devices get loaded on boot, e.g. /dev/bluetooth, /dev/random, /dev/battery, etc.
85
+ - A device can support being "run" by a user, e.g. `# /dev/battery status`
86
+ - Devices may also be directly read/written, and will behave accordingly (or have no effect)
87
+ - An individual device module can provide multiple device drivers, e.g. `/dev/usb` provides `/dev/usb-mydevice-0001-0002`
88
+
58
89
  - `Kernel`
59
90
  - Authentication (WebAuthn)
60
91
  - Components (Web Components/Custom Elements)
@@ -77,34 +108,36 @@ The goal is to create a kernel and supporting apps that tie together modern web
77
108
  - Window Manager (WinBox)
78
109
  - Workers (Web Workers)
79
110
 
80
- - `BIOS`
81
- - The BIOS is a C++ module compiled to WebAssembly with [Emscripten](https://emscripten.org) providing performance-critical functionality
82
- - The BIOS has its own filesystem, located at `/bios`
83
- - The main idea is that data and custom code can be loaded into it from the OS for WASM-native performance, as well as providing various utilities
84
- - Confusingly, the Kernel loads the BIOS - not the other way around
85
-
86
- - `Apps`
87
- - These are full applications that are developed to work with ecmaOS
88
-
89
- - `Core`
90
- - Core modules provide the system's essential functionality; this includes the kernel itself
91
-
92
- - `Commands`
93
- - Commands are small utilities that aren't quite full Apps, provided by the shell
94
-
95
- - `Devices`
96
- - Devices get loaded on boot, e.g. /dev/bluetooth, /dev/random, /dev/battery, etc.
97
- - A device can support being "run" by a user, e.g. `# /dev/battery status`
98
- - Devices may also be directly read/written, and will behave accordingly
99
- - An individual device module can provide multiple device drivers, e.g. `/dev/usb` provides `/dev/usb-mydevice-0001-0002`
111
+ - `Metal`
112
+ - Metal is an API server for allowing connections to physical systems from ecmaOS using [Hono](https://hono.dev)
113
+ - Authenticated and encrypted connections with JWK/JWE/JOSE
114
+
115
+ - `Modules`
116
+ - Modules are dynamically loaded into the kernel at boot and can be enabled or disabled
117
+ - They can provide additional functionality, devices, commands, etc.
118
+ - They offer a [common interface](./core/types/modules.ts) for interacting with the kernel
119
+ - Generally they should be written in [AssemblyScript](https://www.assemblyscript.org), but this isn't required
120
+
121
+ - `Packages`
122
+ - Packages are [npm packages](https://www.npmjs.com) that are installed into the ecmaOS environment
123
+ - They can be installed from the terminal using the `install` command, e.g. `# install jquery`
124
+ - NPM version specifiers are supported, e.g.:
125
+ - `# install jquery@3.7.1`
126
+ - `# install jquery@^3.7.1`
127
+ - `# install jquery@latest`
128
+ - [JSR](https://jsr.io) support is coming soon
129
+
130
+ - `SWAPI`
131
+ - The SWAPI is an API server running completely inside a service worker using [Hono](https://hono.dev)
132
+ - e.g., `# fetch /swapi/fake/person/fullName`
100
133
 
101
134
  - `Utils`
102
- - Utilities used during development
135
+ - Utilities and configuration used during development
103
136
 
104
137
  ## Command Examples
105
138
 
106
139
  ```sh
107
- ai "Despite all my rage" # use env OPENAI_API_KEY --set sk-
140
+ ai "Despite all my rage" # use `env OPENAI_API_KEY --set sk-`
108
141
  cat /var/log/kernel.log
109
142
  cd /tmp
110
143
  echo "Hello, world!" > hello.txt
@@ -116,6 +149,8 @@ download hello.txt
116
149
  edit hello.txt
117
150
  env hello --set world ; env
118
151
  fetch https://ipecho.net/plain > /tmp/myip.txt
152
+ fetch /xkcd-os.sixel # xterm.js includes sixel support
153
+ fetch /swapi/fake/person/fullName # fetch a random person from the SWAPI
119
154
  install jquery
120
155
  ls /dev
121
156
  mkdir /tmp/zip ; cd /tmp/zip
@@ -0,0 +1,65 @@
1
+ {
2
+ "_browser-Bg2k_w8R.js": {
3
+ "file": "browser-Bg2k_w8R.js",
4
+ "name": "browser",
5
+ "isDynamicEntry": true,
6
+ "imports": [
7
+ "_empty-DV8na5Rc.js"
8
+ ]
9
+ },
10
+ "_empty-DV8na5Rc.js": {
11
+ "file": "empty-DV8na5Rc.js",
12
+ "name": "empty",
13
+ "dynamicImports": [
14
+ "_topbar.min-cv6_CM7b.js",
15
+ "_browser-Bg2k_w8R.js",
16
+ "src/tree/lib/commands/install.ts",
17
+ "node_modules/.pnpm/figlet@1.8.0/node_modules/figlet/importable-fonts/Poison.js"
18
+ ]
19
+ },
20
+ "_kernel.css": {
21
+ "file": "kernel.css",
22
+ "src": "_kernel.css"
23
+ },
24
+ "_topbar.min-cv6_CM7b.js": {
25
+ "file": "topbar.min-cv6_CM7b.js",
26
+ "name": "topbar.min",
27
+ "isDynamicEntry": true,
28
+ "imports": [
29
+ "_empty-DV8na5Rc.js"
30
+ ]
31
+ },
32
+ "node_modules/.pnpm/figlet@1.8.0/node_modules/figlet/importable-fonts/Poison.js": {
33
+ "file": "Poison-ChSGZazu.js",
34
+ "name": "Poison",
35
+ "src": "node_modules/.pnpm/figlet@1.8.0/node_modules/figlet/importable-fonts/Poison.js",
36
+ "isDynamicEntry": true
37
+ },
38
+ "src/tree/kernel.ts": {
39
+ "file": "kernel.js",
40
+ "name": "kernel",
41
+ "src": "src/tree/kernel.ts",
42
+ "isEntry": true,
43
+ "imports": [
44
+ "_empty-DV8na5Rc.js"
45
+ ]
46
+ },
47
+ "src/tree/lib/commands/install.ts": {
48
+ "file": "install-BIXZ5bsq.js",
49
+ "name": "install",
50
+ "src": "src/tree/lib/commands/install.ts",
51
+ "isDynamicEntry": true,
52
+ "imports": [
53
+ "_empty-DV8na5Rc.js"
54
+ ]
55
+ },
56
+ "src/ui.ts": {
57
+ "file": "ui.js",
58
+ "name": "ui",
59
+ "src": "src/ui.ts",
60
+ "isEntry": true,
61
+ "imports": [
62
+ "_empty-DV8na5Rc.js"
63
+ ]
64
+ }
65
+ }