@ecmaos/kernel 0.2.6 → 0.2.7

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
@@ -59,103 +59,137 @@ The goal is to create a kernel and supporting apps that tie together modern web
59
59
  - `Metal`: An API server for allowing connections to physical systems from ecmaOS using [Hono](https://hono.dev)
60
60
  - `SWAPI`: An API server running completely inside a service worker using [Hono](https://hono.dev)
61
61
 
62
- ## Basic Overview
63
-
64
- - `Apps`
65
- - These are full applications that are developed specifically to work with ecmaOS
66
- - Refer to the full list of [official published apps on npm](https://www.npmjs.com/org/ecmaos-apps)
67
- - See the [./APPS.md](./APPS.md) file for a list of community apps; submit a PR to add your app!
68
- - An app is an npm package, in which the bin file has a shebang line of `#!ecmaos:bin:app:myappname`
69
- - Its default export (or exported `main` function) will be called with the `ProcessEntryParams` object
70
- - They can be installed from the terminal using the `install` command, e.g. `# install @ecmaos-apps/code`
71
- - Run the installed app (bins are linked to `/usr/bin`): `# code /root/hello.js`
72
- - During development, it can be useful to run a [Verdaccio](https://github.com/verdaccio/verdaccio) server to test local packages
73
- - To publish to Verdaccio, run `# npm publish --registry http://localhost:4873` in your app's development environment
74
- - Then to install from your local registry, run `# install @myscope/mypackage --registry http://localhost:4873`
75
-
76
- - `BIOS`
77
- - The BIOS is a C++ module compiled to WebAssembly with [Emscripten](https://emscripten.org) providing performance-critical functionality
78
- - 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
79
- - 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
80
- - Confusingly, the Kernel loads the BIOS — not the other way around
81
-
82
- - `Commands`
83
- - Commands are small utilities that aren't quite full Apps, provided by the shell
84
- - Some builtin commands that exist now will be moved into separate apps over time
85
-
86
- - `Devices`
87
- - Refer to the full list of [official devices on npm](https://www.npmjs.com/org/ecmaos-devices)
88
- - See the [./DEVICES.md](./DEVICES.md) file for a list of community devices; submit a PR to add your device!
89
- - Devices get loaded on boot, e.g. `/dev/bluetooth`, `/dev/random`, `/dev/battery`, etc.
90
- - A device can support being "run" by a user, e.g. `# /dev/battery status`
91
- - Devices may also be directly read/written using `fs` methods, and will behave accordingly (or have no effect if not supported)
92
- - An individual device module can provide multiple device drivers, e.g. `/dev/usb` provides `/dev/usb-mydevice-0001-0002`
93
-
94
- - `Generators`
95
- - Generators are used to scaffold new apps, devices, modules, etc.
96
- - They are located in the `turbo/generators` directory of the repository
97
- - They are used by the `turbo gen` command, e.g. `turbo gen app`, `turbo gen device`, `turbo gen module`, etc.
98
-
99
- - `Jaffa`
100
- - Jaffa is a [Tauri](https://tauri.app) wrapper for the ecmaOS kernel
101
- - It's used to tie the kernel into a desktop or mobile environment, allowing for native functionality
102
-
103
- - `Kernel`
104
- - The kernel ties together the various components of the system into a cohesive whole
105
- - Authentication (WebAuthn)
106
- - Components (Web Components/Custom Elements)
107
- - Devices
108
- - DOM
109
- - Events (CustomEvents)
110
- - Filesystem (ZenFS)
111
- - Internationalization (i18next)
112
- - Interval Manager (setInterval)
113
- - Log Manager (tslog)
114
- - Memory Manager (Abstractions)
115
- - Process Manager
116
- - Protocol Handlers (web+ecmaos://...)
117
- - Service Worker Manager
118
- - Shell
119
- - Storage (IndexedDB, localStorage, sessionStorage, etc.)
120
- - Terminal (xterm.js)
121
- - User Manager
122
- - WASM Loader
123
- - Window Manager (WinBox)
124
- - Workers (Web Workers)
125
-
126
- - `Metal`
127
- - Metal is an API server for allowing connections to physical systems from ecmaOS using [Hono](https://hono.dev)
128
- - Authenticated and encrypted connections with JWK/JWE/JOSE
129
-
130
- - `Modules`
131
- - Refer to the full list of [official modules on npm](https://www.npmjs.com/org/ecmaos-modules)
132
- - See the [./MODULES.md](./MODULES.md) file for a list of community modules; submit a PR to add your module!
133
- - Modules are dynamically loaded into the kernel at boot and can be enabled or disabled
134
- - They are specified during build via the `VITE_KERNEL_MODULES` environment variable
135
- - e.g. `VITE_KERNEL_MODULES=@ecmaos-modules/boilerplate@0.1.0,@your/package@1.2.3`
136
- - Versions must be pinned and are mandatory - you cannot use NPM version specifiers
137
- - They can provide additional functionality, devices, commands, etc.
138
- - They offer a [common interface](./core/types/modules.ts) for interacting with the kernel
139
- - Generally they should be written in [AssemblyScript](https://www.assemblyscript.org), but this isn't required
140
-
141
- - `Packages`
142
- - Packages are [NPM packages](https://www.npmjs.com) that are installed into the ecmaOS environment
143
- - They can be installed from the terminal using the `install` command, e.g. `# install jquery`
144
- - NPM version specifiers are supported, e.g.:
145
- - `# install jquery@3.7.1`
146
- - `# install jquery@^3.7.1`
147
- - `# install jquery@latest`
148
- - [JSR](https://jsr.io) may be used with the [NPM compatibility layer](https://jsr.io/docs/npm-compatibility):
149
- - `# install @jsr/defaude__hello-jsr --registry https://npm.jsr.io`
150
-
151
- - `SWAPI`
152
- - The SWAPI is an API server running completely inside a service worker using [Hono](https://hono.dev)
153
- - It allows for various operations including the `fs` route to fetch files via URL
154
- - e.g., `# fetch /swapi/fs/home/user/hello.txt`
155
- - e.g., `# fetch /swapi/fake/person/fullName`
156
-
157
- - `Utils`
158
- - Utilities and configuration used during development
62
+ ## Basic Concepts
63
+
64
+ ### Apps
65
+
66
+ > [/apps](/apps)
67
+
68
+ - These are full applications that are developed specifically to work with ecmaOS
69
+ - Refer to the full list of [official published apps on npm](https://www.npmjs.com/org/ecmaos-apps)
70
+ - See the [APPS.md](/APPS.md) file for a list of community apps; submit a PR to add your app!
71
+ - An app is an npm package, in which the bin file has a shebang line of `#!ecmaos:bin:app:myappname`
72
+ - Its default export (or exported `main` function) will be called with the `ProcessEntryParams` object
73
+ - They can be installed from the terminal using the `install` command, e.g. `# install @ecmaos-apps/code`
74
+ - Run the installed app (bins are linked to `/usr/bin`): `# code /root/hello.js`
75
+ - During development, it can be useful to run a [Verdaccio](https://github.com/verdaccio/verdaccio) server to test local packages
76
+ - To publish to Verdaccio, run `# npm publish --registry http://localhost:4873` in your app's development environment
77
+ - Then to install from your local registry, run `# install @myscope/mypackage --registry http://localhost:4873`
78
+
79
+ ### BIOS
80
+
81
+ > [/core/bios](/core/bios)
82
+
83
+ - The BIOS is a C++ module compiled to WebAssembly with [Emscripten](https://emscripten.org) providing performance-critical functionality
84
+ - 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
85
+ - 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
86
+ - Confusingly, the Kernel loads the BIOS — not the other way around
87
+
88
+ ### Commands
89
+
90
+ > [/core/kernel/src/tree/lib/commands](/core/kernel/src/tree/lib/commands)
91
+
92
+ - Commands are small utilities that aren't quite full Apps, provided by the shell
93
+ - Some builtin commands that exist now will be moved into separate apps over time
94
+
95
+ ### Devices
96
+
97
+ > [/devices](/devices)
98
+
99
+ - Refer to the full list of [official devices on npm](https://www.npmjs.com/org/ecmaos-devices)
100
+ - See the [DEVICES.md](/DEVICES.md) file for a list of community devices; submit a PR to add your device!
101
+ - Devices get loaded on boot, e.g. `/dev/bluetooth`, `/dev/random`, `/dev/battery`, etc.
102
+ - A device can support being "run" by a user, e.g. `# /dev/battery status`
103
+ - Devices may also be directly read/written using `fs` methods, and will behave accordingly (or have no effect if not supported)
104
+ - An individual device module can provide multiple device drivers, e.g. `/dev/usb` provides `/dev/usb-mydevice-0001-0002`
105
+
106
+ ### Generators
107
+
108
+ > [/turbo/generators](/turbo/generators)
109
+
110
+ - Generators are used to scaffold new apps, devices, modules, etc.
111
+ - They are located in the `turbo/generators` directory of the repository
112
+ - They are used by the `turbo gen` command, e.g. `turbo gen app`, `turbo gen device`, `turbo gen module`, etc.
113
+
114
+ ### Jaffa
115
+
116
+ > [/core/jaffa](/core/jaffa)
117
+
118
+ - Jaffa is a [Tauri](https://tauri.app) wrapper for the ecmaOS kernel
119
+ - It's used to tie the kernel into a desktop or mobile environment, allowing for native functionality
120
+
121
+ ### Kernel
122
+
123
+ > [/core/kernel](/core/kernel)
124
+
125
+ - The kernel ties together the various components of the system into a cohesive whole
126
+ - Authentication (WebAuthn)
127
+ - Components (Web Components/Custom Elements)
128
+ - Devices
129
+ - DOM
130
+ - Events (CustomEvents)
131
+ - Filesystem (ZenFS)
132
+ - Internationalization (i18next)
133
+ - Interval Manager (setInterval)
134
+ - Log Manager (tslog)
135
+ - Memory Manager (Abstractions)
136
+ - Process Manager
137
+ - Protocol Handlers (web+ecmaos://...)
138
+ - Service Worker Manager
139
+ - Shell
140
+ - Storage (IndexedDB, localStorage, sessionStorage, etc.)
141
+ - Terminal (xterm.js)
142
+ - User Manager
143
+ - WASM Loader
144
+ - Window Manager (WinBox)
145
+ - Workers (Web Workers)
146
+
147
+ ### Metal
148
+
149
+ > [/core/metal](/core/metal)
150
+
151
+ - Metal is an API server for allowing connections to physical systems from ecmaOS using [Hono](https://hono.dev)
152
+ - Authenticated and encrypted connections with JWK/JWE/JOSE
153
+
154
+ ### Modules
155
+
156
+ > [/modules](/modules)
157
+
158
+ - Refer to the full list of [official modules on npm](https://www.npmjs.com/org/ecmaos-modules)
159
+ - See the [MODULES.md](/MODULES.md) file for a list of community modules; submit a PR to add your module!
160
+ - Modules are dynamically loaded into the kernel at boot and can be enabled or disabled
161
+ - They are specified during build via the `VITE_KERNEL_MODULES` environment variable
162
+ - e.g. `VITE_KERNEL_MODULES=@ecmaos-modules/boilerplate@0.1.0,@your/package@1.2.3`
163
+ - Versions must be pinned and are mandatory - you cannot use NPM version specifiers
164
+ - They can provide additional functionality, devices, commands, etc.
165
+ - They offer a [common interface](./core/types/modules.ts) for interacting with the kernel
166
+ - Generally they should be written in [AssemblyScript](https://www.assemblyscript.org), but this isn't required
167
+
168
+ ### Packages
169
+
170
+ - Packages are [NPM packages](https://www.npmjs.com) that are installed into the ecmaOS environment
171
+ - They can be installed from the terminal using the `install` command, e.g. `# install jquery`
172
+ - NPM version specifiers are supported, e.g.:
173
+ - `# install jquery@3.7.1`
174
+ - `# install jquery@^3.7.1`
175
+ - `# install jquery@latest`
176
+ - [JSR](https://jsr.io) may be used with the [NPM compatibility layer](https://jsr.io/docs/npm-compatibility):
177
+ - `# install @jsr/defaude__hello-jsr --registry https://npm.jsr.io`
178
+
179
+ ### SWAPI
180
+
181
+ > [/core/swapi](/core/swapi)
182
+
183
+ - The SWAPI is an API server running completely inside a service worker using [Hono](https://hono.dev)
184
+ - It allows for various operations including the `fs` route to fetch files via URL
185
+ - e.g., `# fetch /swapi/fs/home/user/hello.txt`
186
+ - e.g., `# fetch /swapi/fake/person/fullName`
187
+
188
+ ### Utils
189
+
190
+ > [/utils](/utils)
191
+
192
+ - Utilities and configuration used during development
159
193
 
160
194
  ## Important Files and Directories
161
195
 
@@ -253,6 +287,15 @@ The `apps` directory in the repository contains a number of examples of how to d
253
287
 
254
288
  Basically, your app's [bin](https://docs.npmjs.com/cli/v10/configuring-npm/package-json#bin) file has a `main` (or default) function export that is passed the kernel reference and can use it to interact with the system as needed. A shebang line of `#!ecmaos:bin:app:myappname` is required at the top of the bin file to identify it as an app.
255
289
 
290
+ ## Kernel Interface Example
291
+
292
+ ```ts
293
+ export default async function main({ kernel }: ProcessEntryParams) {
294
+ kernel.log.info("Hello, world!");
295
+ kernel.terminal.writeln("Hello, world!");
296
+ }
297
+ ```
298
+
256
299
  ## Early Days
257
300
 
258
301
  The kernel is currently in active development. It is not considered stable and the structure and API are very likely to change in unexpected and possibly unannounced ways until version 1.0.0. Use cautiously and at your own risk.
@@ -301,7 +344,7 @@ turbo gen device # generate a new device template
301
344
  turbo gen module # generate a new module template
302
345
  ```
303
346
 
304
- Also see [turbo.json](./turbo.json) and [CONTRIBUTING.md](./CONTRIBUTING.md) for more information.
347
+ Also see [turbo.json](./turbo.json) and [CONTRIBUTING.md](/CONTRIBUTING.md) for more information.
305
348
 
306
349
  ## Security Vulnerabilities
307
350
 
@@ -1,18 +1,18 @@
1
1
  {
2
- "_browser-C0q0NWWv.js": {
3
- "file": "browser-C0q0NWWv.js",
2
+ "_browser-D_CtuxSB.js": {
3
+ "file": "browser-D_CtuxSB.js",
4
4
  "name": "browser",
5
5
  "isDynamicEntry": true,
6
6
  "imports": [
7
- "_empty-BMkCc_7L.js"
7
+ "_empty--zdtkf0T.js"
8
8
  ]
9
9
  },
10
- "_empty-BMkCc_7L.js": {
11
- "file": "empty-BMkCc_7L.js",
10
+ "_empty--zdtkf0T.js": {
11
+ "file": "empty--zdtkf0T.js",
12
12
  "name": "empty",
13
13
  "dynamicImports": [
14
- "_topbar.min-xBbuiIjv.js",
15
- "_browser-C0q0NWWv.js",
14
+ "_topbar.min-CDkSVOxV.js",
15
+ "_browser-D_CtuxSB.js",
16
16
  "src/tree/lib/commands/install.ts",
17
17
  "node_modules/.pnpm/figlet@1.8.0/node_modules/figlet/importable-fonts/Poison.js"
18
18
  ]
@@ -21,12 +21,12 @@
21
21
  "file": "kernel.css",
22
22
  "src": "_kernel.css"
23
23
  },
24
- "_topbar.min-xBbuiIjv.js": {
25
- "file": "topbar.min-xBbuiIjv.js",
24
+ "_topbar.min-CDkSVOxV.js": {
25
+ "file": "topbar.min-CDkSVOxV.js",
26
26
  "name": "topbar.min",
27
27
  "isDynamicEntry": true,
28
28
  "imports": [
29
- "_empty-BMkCc_7L.js"
29
+ "_empty--zdtkf0T.js"
30
30
  ]
31
31
  },
32
32
  "node_modules/.pnpm/figlet@1.8.0/node_modules/figlet/importable-fonts/Poison.js": {
@@ -41,16 +41,16 @@
41
41
  "src": "src/tree/kernel.ts",
42
42
  "isEntry": true,
43
43
  "imports": [
44
- "_empty-BMkCc_7L.js"
44
+ "_empty--zdtkf0T.js"
45
45
  ]
46
46
  },
47
47
  "src/tree/lib/commands/install.ts": {
48
- "file": "install-C64fBUI2.js",
48
+ "file": "install-Ds1oWgTf.js",
49
49
  "name": "install",
50
50
  "src": "src/tree/lib/commands/install.ts",
51
51
  "isDynamicEntry": true,
52
52
  "imports": [
53
- "_empty-BMkCc_7L.js"
53
+ "_empty--zdtkf0T.js"
54
54
  ]
55
55
  },
56
56
  "src/ui.ts": {
@@ -59,7 +59,7 @@
59
59
  "src": "src/ui.ts",
60
60
  "isEntry": true,
61
61
  "imports": [
62
- "_empty-BMkCc_7L.js"
62
+ "_empty--zdtkf0T.js"
63
63
  ]
64
64
  }
65
65
  }
@@ -1,4 +1,4 @@
1
- import { g as getDefaultExportFromCjs } from "./empty-BMkCc_7L.js";
1
+ import { g as getDefaultExportFromCjs } from "./empty--zdtkf0T.js";
2
2
  var browser$2;
3
3
  var hasRequiredBrowser;
4
4
  function requireBrowser() {
@@ -20,4 +20,4 @@ const browser$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePro
20
20
  export {
21
21
  browser$1 as b
22
22
  };
23
- //# sourceMappingURL=browser-C0q0NWWv.js.map
23
+ //# sourceMappingURL=browser-D_CtuxSB.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser-C0q0NWWv.js","sources":["../node_modules/.pnpm/ws@8.18.0/node_modules/ws/browser.js"],"sourcesContent":["'use strict';\n\nmodule.exports = function () {\n throw new Error(\n 'ws does not work in the browser. Browser clients must use the native ' +\n 'WebSocket object'\n );\n};\n"],"names":["browser"],"mappings":";;;;;;AAEAA,cAAiB,WAAY;AAC3B,UAAM,IAAI;AAAA,MACR;AAAA,IAED;AAAA,EACF;;;;;;;;;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"browser-D_CtuxSB.js","sources":["../node_modules/.pnpm/ws@8.18.0/node_modules/ws/browser.js"],"sourcesContent":["'use strict';\n\nmodule.exports = function () {\n throw new Error(\n 'ws does not work in the browser. Browser clients must use the native ' +\n 'WebSocket object'\n );\n};\n"],"names":["browser"],"mappings":";;;;;;AAEAA,cAAiB,WAAY;AAC3B,UAAM,IAAI;AAAA,MACR;AAAA,IAED;AAAA,EACF;;;;;;;;;","x_google_ignoreList":[0]}