@ai-ecoverse/slicc-kernel 1.102.5 → 1.103.0

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.
Files changed (180) hide show
  1. package/README.md +10 -2
  2. package/dist/kernel-worker.js +18 -3
  3. package/dist/kernel-worker.js.map +2 -2
  4. package/dist/node-process-worker.js +1 -1
  5. package/dist/node.js +18 -3
  6. package/dist/node.js.map +2 -2
  7. package/dist/process-worker.js +1 -1
  8. package/dist/types/body-idle.d.ts +3 -0
  9. package/dist/types/bytes.d.ts +1 -0
  10. package/dist/types/cdp/facade.d.ts +27 -0
  11. package/dist/types/cdp/hosts.d.ts +14 -0
  12. package/dist/types/cdp/port.d.ts +24 -0
  13. package/dist/types/cdp/types.d.ts +12 -0
  14. package/dist/types/cdp/websocket.d.ts +61 -0
  15. package/dist/types/client/attach.d.ts +132 -0
  16. package/dist/types/client/dial-stream.d.ts +23 -0
  17. package/dist/types/client/loopback-fetch.d.ts +5 -0
  18. package/dist/types/client/protocol.d.ts +153 -0
  19. package/dist/types/client/serve-client.d.ts +18 -0
  20. package/dist/types/clipboard-relay.d.ts +25 -0
  21. package/dist/types/commands.d.ts +38 -0
  22. package/dist/types/cron/clock.d.ts +13 -0
  23. package/dist/types/driver.d.ts +3 -0
  24. package/dist/types/facade/hosts.d.ts +12 -0
  25. package/dist/types/facade/port.d.ts +16 -0
  26. package/dist/types/facade/types.d.ts +23 -0
  27. package/dist/types/fs/access.d.ts +29 -0
  28. package/dist/types/fs/attest.d.ts +41 -0
  29. package/dist/types/fs/changes.d.ts +19 -0
  30. package/dist/types/fs/commands.d.ts +4 -0
  31. package/dist/types/fs/dac.d.ts +64 -0
  32. package/dist/types/fs/dev-removal.d.ts +9 -0
  33. package/dist/types/fs/fresh-modules.d.ts +9 -0
  34. package/dist/types/fs/integrity.d.ts +53 -0
  35. package/dist/types/fs/meta.d.ts +85 -0
  36. package/dist/types/fs/opfs.d.ts +141 -0
  37. package/dist/types/fs/owners.d.ts +17 -0
  38. package/dist/types/fs/pages.d.ts +41 -0
  39. package/dist/types/fs/path-map.d.ts +16 -0
  40. package/dist/types/fs/physical-path.d.ts +14 -0
  41. package/dist/types/fs/protect.d.ts +27 -0
  42. package/dist/types/fs/ranged.d.ts +73 -0
  43. package/dist/types/fs/remote.d.ts +45 -0
  44. package/dist/types/fs/types.d.ts +115 -0
  45. package/dist/types/fs/unlinked.d.ts +75 -0
  46. package/dist/types/fs/view.d.ts +1 -0
  47. package/dist/types/fs/walk.d.ts +12 -0
  48. package/dist/types/fs/watch.d.ts +23 -0
  49. package/dist/types/index.d.ts +159 -0
  50. package/dist/types/integrity-relay.d.ts +18 -0
  51. package/dist/types/kernel/children.d.ts +90 -0
  52. package/dist/types/kernel/clipboard.d.ts +49 -0
  53. package/dist/types/kernel/cpu-clock.d.ts +56 -0
  54. package/dist/types/kernel/cred.d.ts +17 -0
  55. package/dist/types/kernel/dgram.d.ts +56 -0
  56. package/dist/types/kernel/dial.d.ts +20 -0
  57. package/dist/types/kernel/epoll.d.ts +67 -0
  58. package/dist/types/kernel/eventfd.d.ts +19 -0
  59. package/dist/types/kernel/exec-ticket.d.ts +25 -0
  60. package/dist/types/kernel/fd-table.d.ts +107 -0
  61. package/dist/types/kernel/host-ops.d.ts +98 -0
  62. package/dist/types/kernel/host.d.ts +116 -0
  63. package/dist/types/kernel/jobs.d.ts +50 -0
  64. package/dist/types/kernel/locks.d.ts +40 -0
  65. package/dist/types/kernel/net/datagram-wire.d.ts +8 -0
  66. package/dist/types/kernel/net/http-syscalls.d.ts +58 -0
  67. package/dist/types/kernel/net/http1.d.ts +48 -0
  68. package/dist/types/kernel/net/loopback-names.d.ts +14 -0
  69. package/dist/types/kernel/net/loopback-transport.d.ts +13 -0
  70. package/dist/types/kernel/net/network.d.ts +29 -0
  71. package/dist/types/kernel/net/proxy-service.d.ts +70 -0
  72. package/dist/types/kernel/net/realm-ca.d.ts +28 -0
  73. package/dist/types/kernel/net/redirect-hops.d.ts +5 -0
  74. package/dist/types/kernel/net/remote-transport.d.ts +98 -0
  75. package/dist/types/kernel/net/resolver.d.ts +29 -0
  76. package/dist/types/kernel/net/routes.d.ts +15 -0
  77. package/dist/types/kernel/net/tls-engine.d.ts +46 -0
  78. package/dist/types/kernel/net/tls-tunnel.d.ts +35 -0
  79. package/dist/types/kernel/net/transport.d.ts +64 -0
  80. package/dist/types/kernel/net/uplink-socket.d.ts +11 -0
  81. package/dist/types/kernel/net/uplink.d.ts +163 -0
  82. package/dist/types/kernel/net/ws-queue.d.ts +21 -0
  83. package/dist/types/kernel/net/ws-syscalls.d.ts +45 -0
  84. package/dist/types/kernel/net/x509.d.ts +34 -0
  85. package/dist/types/kernel/pipe.d.ts +29 -0
  86. package/dist/types/kernel/proc-info.d.ts +44 -0
  87. package/dist/types/kernel/process.d.ts +525 -0
  88. package/dist/types/kernel/protocol.d.ts +126 -0
  89. package/dist/types/kernel/pty.d.ts +84 -0
  90. package/dist/types/kernel/run-child.d.ts +39 -0
  91. package/dist/types/kernel/scrub-file.d.ts +13 -0
  92. package/dist/types/kernel/sealed.d.ts +74 -0
  93. package/dist/types/kernel/select.d.ts +7 -0
  94. package/dist/types/kernel/sem.d.ts +72 -0
  95. package/dist/types/kernel/settling.d.ts +16 -0
  96. package/dist/types/kernel/signals.d.ts +44 -0
  97. package/dist/types/kernel/socket-syscalls.d.ts +74 -0
  98. package/dist/types/kernel/socket.d.ts +125 -0
  99. package/dist/types/kernel/timer.d.ts +4 -0
  100. package/dist/types/kernel/tty.d.ts +53 -0
  101. package/dist/types/kernel/vfs-file.d.ts +149 -0
  102. package/dist/types/launcher.d.ts +359 -0
  103. package/dist/types/local-proxy-transport.d.ts +39 -0
  104. package/dist/types/meta.d.ts +11 -0
  105. package/dist/types/mount/chunked.d.ts +9 -0
  106. package/dist/types/mount/connection.d.ts +35 -0
  107. package/dist/types/mount/driver.d.ts +50 -0
  108. package/dist/types/mount/fsa.d.ts +26 -0
  109. package/dist/types/mount/fstab.d.ts +17 -0
  110. package/dist/types/mount/host.d.ts +24 -0
  111. package/dist/types/mount/hostfs.d.ts +129 -0
  112. package/dist/types/mount/media.d.ts +8 -0
  113. package/dist/types/mount/medium.d.ts +12 -0
  114. package/dist/types/mount/mount-fs.d.ts +136 -0
  115. package/dist/types/mount/protocol.d.ts +140 -0
  116. package/dist/types/mount/syscall.d.ts +27 -0
  117. package/dist/types/mount/tmpfs.d.ts +2 -0
  118. package/dist/types/node/loopback.d.ts +11 -0
  119. package/dist/types/node/memory-root.d.ts +2 -0
  120. package/dist/types/node/ws-diagnose.d.ts +4 -0
  121. package/dist/types/node.d.ts +85 -0
  122. package/dist/types/process/fd-metadata.d.ts +4 -0
  123. package/dist/types/process/js/async-sab.d.ts +15 -0
  124. package/dist/types/process/js/js-children.d.ts +63 -0
  125. package/dist/types/process/js/js-context.d.ts +133 -0
  126. package/dist/types/process/js/js-dev.d.ts +50 -0
  127. package/dist/types/process/js/js-exit.d.ts +15 -0
  128. package/dist/types/process/js/js-fetch.d.ts +2 -0
  129. package/dist/types/process/js/js-io.d.ts +81 -0
  130. package/dist/types/process/js/js-kernel.d.ts +61 -0
  131. package/dist/types/process/js/js-net.d.ts +42 -0
  132. package/dist/types/process/js/js-proc.d.ts +31 -0
  133. package/dist/types/process/js/js-run.d.ts +35 -0
  134. package/dist/types/process/js/js-sync.d.ts +86 -0
  135. package/dist/types/process/js/js-tty.d.ts +30 -0
  136. package/dist/types/process/js/js-websocket.d.ts +21 -0
  137. package/dist/types/process/kernel-streams.d.ts +196 -0
  138. package/dist/types/process/process-fds.d.ts +95 -0
  139. package/dist/types/process/process-locks.d.ts +29 -0
  140. package/dist/types/process/process-pty.d.ts +20 -0
  141. package/dist/types/process/process-signals.d.ts +33 -0
  142. package/dist/types/process/procfs.d.ts +41 -0
  143. package/dist/types/process/wasi/dylink.d.ts +9 -0
  144. package/dist/types/process/wasi/slicc-lock.d.ts +26 -0
  145. package/dist/types/process/wasi/slicc-sem.d.ts +3 -0
  146. package/dist/types/process/wasi/wasi-abi.d.ts +156 -0
  147. package/dist/types/process/wasi/wasi-fds.d.ts +130 -0
  148. package/dist/types/process/wasi/wasi-files.d.ts +99 -0
  149. package/dist/types/process/wasi/wasi-host.d.ts +104 -0
  150. package/dist/types/process/wasi/wasi-memory.d.ts +16 -0
  151. package/dist/types/process/wasi/wasi-module.d.ts +13 -0
  152. package/dist/types/process/wasi/wasi-poll.d.ts +13 -0
  153. package/dist/types/process/wasi/wasi-procfs.d.ts +36 -0
  154. package/dist/types/process/wasi/wasi-sigmask.d.ts +19 -0
  155. package/dist/types/process/wasi/wasi-signals.d.ts +43 -0
  156. package/dist/types/process/wasi/wasi-termios.d.ts +10 -0
  157. package/dist/types/process/wasi/wasix-fork.d.ts +63 -0
  158. package/dist/types/process/wasi/wasix-linker.d.ts +108 -0
  159. package/dist/types/process/wasi/wasix-sockets.d.ts +9 -0
  160. package/dist/types/process/wasi/wasix-trampoline.d.ts +18 -0
  161. package/dist/types/process/wasi/wasm-functypes.d.ts +25 -0
  162. package/dist/types/process/wasi-errno.d.ts +1 -0
  163. package/dist/types/realm/emscripten-vfs-hook.d.ts +19 -0
  164. package/dist/types/realm/live-vfs-fs.d.ts +186 -0
  165. package/dist/types/realm/sync-fs-dispatch.d.ts +26 -0
  166. package/dist/types/realm/sync-fs-token-registry.d.ts +36 -0
  167. package/dist/types/realm/sync-fs-wire.d.ts +118 -0
  168. package/dist/types/realm/sync-sab-bridge.d.ts +21 -0
  169. package/dist/types/realm/sync-sab-responder.d.ts +16 -0
  170. package/dist/types/realm/sync-sab-wire.d.ts +64 -0
  171. package/dist/types/sealed-relay.d.ts +26 -0
  172. package/dist/types/serve.d.ts +190 -0
  173. package/dist/types/sudo-command.d.ts +4 -0
  174. package/dist/types/sudo.d.ts +105 -0
  175. package/dist/types/testing.d.ts +46 -0
  176. package/dist/types/transport.d.ts +25 -0
  177. package/dist/types/users.d.ts +86 -0
  178. package/dist/types/version.d.ts +3 -0
  179. package/dist/types/websocket-transport.d.ts +12 -0
  180. package/package.json +22 -6
@@ -0,0 +1,64 @@
1
+ import type { WasmSyscall } from '../kernel/process.js';
2
+ import type { SyncFsRequest, SyncFsResult } from './sync-fs-wire.js';
3
+ export declare const SAB_HEADER_I32 = 18;
4
+ export declare const SAB_CLOCK_OFFSET: number;
5
+ export declare const SAB_CLOCK_I64 = 3;
6
+ export declare const SAB_HEADER_BYTES: number;
7
+ export declare const SAB_I_STATE = 0;
8
+ export declare const SAB_I_SEQ = 1;
9
+ export declare const SAB_I_STATUS = 2;
10
+ export declare const SAB_I_TOTAL = 3;
11
+ export declare const SAB_I_CHUNK = 4;
12
+ export declare const SAB_I_OFFSET = 5;
13
+ export declare const SAB_I_REQ = 6;
14
+ export declare const SAB_I_PUB = 7;
15
+ export declare const SAB_I_SIGNALS = 8;
16
+ export declare const SAB_I_TIMERS = 9;
17
+ export declare const SAB_I_MEMORY = 10;
18
+ export declare const SAB_I_TOTAL_HI = 11;
19
+ export declare const SAB_I_OFFSET_HI = 12;
20
+ export declare const SAB_I_KILLED = 13;
21
+ export declare const SAB_I_ASYNC = 14;
22
+ export declare const SAB_I_STOP = 15;
23
+ export declare const SAB_I_BLOCKED = 16;
24
+ export declare const SAB_I_BLOCKED_HI = 17;
25
+ export type BlockedMask = readonly [number, number];
26
+ export declare function loadBlocked(header: Int32Array): BlockedMask;
27
+ export declare function storeBlocked(header: Int32Array, [low, high]: BlockedMask): void;
28
+ export declare const anyBlocked: (mask: BlockedMask | undefined) => boolean;
29
+ export declare function storeU53(header: Int32Array, lo: number, hi: number, value: number): void;
30
+ export declare function loadU53(header: Int32Array, lo: number, hi: number): number;
31
+ export declare function publishMemory(sab: SharedArrayBuffer, bytes: number): void;
32
+ export declare const SAB_STATE_IDLE = 0;
33
+ export declare const SAB_STATE_PENDING = 1;
34
+ export declare const SAB_STATE_READY = 2;
35
+ export declare const SAB_STATUS_BYTES = 1;
36
+ export declare const SAB_STATUS_JSON = 2;
37
+ export declare const SAB_STATUS_VOID = 3;
38
+ export declare const SAB_STATUS_ERRNO = 4;
39
+ export declare const SAB_DEFAULT_WINDOW_BYTES: number;
40
+ export declare const SAB_MIN_BYTES: number;
41
+ export declare const SYNC_SAB_REQ_MSG = "sync-sab-req";
42
+ export declare const SYNC_SAB_NEXT_MSG = "sync-sab-next";
43
+ export type SyncSabRequestBody = Omit<SyncFsRequest, 'token'> | WasmSyscall;
44
+ export interface SyncSabReqMsg {
45
+ type: typeof SYNC_SAB_REQ_MSG;
46
+ id: number;
47
+ req: SyncSabRequestBody;
48
+ }
49
+ export interface SyncSabNextMsg {
50
+ type: typeof SYNC_SAB_NEXT_MSG;
51
+ id: number;
52
+ offset: number;
53
+ }
54
+ export interface SabEncodedResult {
55
+ status: number;
56
+ payload: Uint8Array;
57
+ }
58
+ export declare function encodeSabResult(result: SyncFsResult): SabEncodedResult;
59
+ export declare function decodeSabResult(status: number, payload: Uint8Array): SyncFsResult;
60
+ export interface SabViews {
61
+ header: Int32Array;
62
+ window: Uint8Array;
63
+ }
64
+ export declare function sabViews(sab: SharedArrayBuffer): SabViews;
@@ -0,0 +1,26 @@
1
+ import type { SealedHook, SealedRequest } from './kernel/sealed.js';
2
+ export interface SealedPort {
3
+ postMessage(message: unknown): void;
4
+ }
5
+ export interface SealedAsk {
6
+ id: number;
7
+ req: SealedRequest;
8
+ }
9
+ export interface SealedReply {
10
+ id: number;
11
+ reply?: object;
12
+ error?: string;
13
+ }
14
+ export interface SealedAbort {
15
+ id: number;
16
+ reason: unknown;
17
+ }
18
+ export declare function sealedAsker(port: SealedPort): {
19
+ hook: SealedHook;
20
+ answer(reply: SealedReply): void;
21
+ };
22
+ export interface SealedAnswerer {
23
+ handle(data: unknown): boolean;
24
+ close(): void;
25
+ }
26
+ export declare function sealedAnswerer(port: SealedPort, hook: SealedHook | undefined): SealedAnswerer;
@@ -0,0 +1,190 @@
1
+ import { type LockManagerLike } from './client/protocol.js';
2
+ import { type MetaStore } from './fs/meta.js';
3
+ import { type ProtectInit } from './fs/protect.js';
4
+ import { type UsersMode } from './fs/types.js';
5
+ import type { WasmWorkerLike } from './kernel/host.js';
6
+ import type { RouteTable } from './kernel/net/routes.js';
7
+ import type { RealmTransportTraits } from './kernel/net/transport.js';
8
+ import { type UplinkTraits } from './kernel/net/uplink.js';
9
+ import { type RunOptions, type TerminalOptions } from './launcher.js';
10
+ import type { MediumHandle } from './mount/fsa.js';
11
+ import type { HostfsGrant, HostfsPortGrant } from './mount/hostfs.js';
12
+ import type { MediaStore } from './mount/media.js';
13
+ import type { MountSpec } from './mount/mount-fs.js';
14
+ import type { AddUser, RemoveUser } from './users.js';
15
+ export interface KernelPort {
16
+ postMessage(message: unknown, transfer?: Transferable[]): void;
17
+ addEventListener(type: 'message', handler: (event: MessageEvent) => void): void;
18
+ }
19
+ export interface InitRequest {
20
+ id: number;
21
+ op: 'init';
22
+ root?: FileSystemDirectoryHandle;
23
+ modules?: string;
24
+ commands?: {
25
+ append?: readonly string[];
26
+ };
27
+ env?: Record<string, string>;
28
+ metadata?: string | false;
29
+ media?: string | false;
30
+ ca?: string | false;
31
+ transport?: RealmTransportTraits;
32
+ uplink?: {
33
+ traits: UplinkTraits;
34
+ routes?: RouteTable;
35
+ };
36
+ hostfs?: boolean;
37
+ hostname?: string;
38
+ users?: UsersMode;
39
+ protect?: ProtectInit;
40
+ denials?: boolean;
41
+ sealed?: boolean;
42
+ clipboard?: boolean;
43
+ approve?: boolean;
44
+ processMounts?: boolean | 'ask';
45
+ cdp?: boolean;
46
+ facades?: Record<string, {
47
+ port: number;
48
+ hook?: boolean;
49
+ }>;
50
+ }
51
+ export interface RunRequest {
52
+ id: number;
53
+ op: 'run';
54
+ argv: string[];
55
+ options: Omit<RunOptions, 'onStdout' | 'onStderr'>;
56
+ }
57
+ export interface OpenTerminalRequest {
58
+ id: number;
59
+ op: 'open-terminal';
60
+ argv: string[];
61
+ options: Omit<TerminalOptions, 'onData'>;
62
+ }
63
+ export type TerminalAction = {
64
+ action: 'write';
65
+ bytes: Uint8Array;
66
+ } | {
67
+ action: 'resize';
68
+ cols: number;
69
+ rows: number;
70
+ } | {
71
+ action: 'signal';
72
+ signal: string;
73
+ } | {
74
+ action: 'close';
75
+ };
76
+ export type TerminalRequest = {
77
+ id: number;
78
+ op: 'terminal';
79
+ terminal: number;
80
+ } & TerminalAction;
81
+ export interface ConnectRequest {
82
+ id: number;
83
+ op: 'connect';
84
+ user?: string | number;
85
+ tag?: string;
86
+ }
87
+ export type UsersRequest = {
88
+ id: number;
89
+ op: 'users-add';
90
+ user: AddUser;
91
+ } | {
92
+ id: number;
93
+ op: 'users-remove';
94
+ name: string;
95
+ options?: RemoveUser;
96
+ } | {
97
+ id: number;
98
+ op: 'users-list';
99
+ } | {
100
+ id: number;
101
+ op: 'groups-list';
102
+ } | {
103
+ id: number;
104
+ op: 'groups-add-member' | 'groups-remove-member';
105
+ group: string;
106
+ user: string;
107
+ };
108
+ export interface RoutesRequest {
109
+ id: number;
110
+ op: 'routes';
111
+ routes: RouteTable;
112
+ }
113
+ export interface TraitsRequest {
114
+ id: number;
115
+ op: 'transport-traits';
116
+ traits?: RealmTransportTraits;
117
+ }
118
+ export type MountRequest = {
119
+ id: number;
120
+ op: 'mount';
121
+ spec: MountSpec;
122
+ } | {
123
+ id: number;
124
+ op: 'umount';
125
+ target: string;
126
+ } | {
127
+ id: number;
128
+ op: 'mounts';
129
+ } | {
130
+ id: number;
131
+ op: 'insert';
132
+ target: string;
133
+ source?: string;
134
+ handle: MediumHandle;
135
+ };
136
+ export interface DialRequest {
137
+ id: number;
138
+ op: 'dial';
139
+ port: number;
140
+ host?: string;
141
+ }
142
+ export type AttestRequest = {
143
+ id: number;
144
+ op: 'attest';
145
+ path: string;
146
+ } | {
147
+ id: number;
148
+ op: 'chmod';
149
+ path: string;
150
+ mode: number;
151
+ } | {
152
+ id: number;
153
+ op: 'integrity-revoke';
154
+ path?: string;
155
+ } | {
156
+ id: number;
157
+ op: 'watch-files';
158
+ paths: string[];
159
+ } | {
160
+ id: number;
161
+ op: 'unwatch-files';
162
+ watch: number;
163
+ };
164
+ export interface FileChanged {
165
+ fileChanged: {
166
+ watch: number;
167
+ path: string;
168
+ };
169
+ }
170
+ export type KernelRequest = AttestRequest | InitRequest | RunRequest | OpenTerminalRequest | TerminalRequest | ConnectRequest | UsersRequest | MountRequest | DialRequest | RoutesRequest | TraitsRequest;
171
+ type WithoutId<T> = T extends unknown ? Omit<T, 'id'> : never;
172
+ export type KernelCall = WithoutId<KernelRequest>;
173
+ export declare function inOpfs(deps: ServeDeps, root: FileSystemDirectoryHandle): Promise<boolean>;
174
+ export interface ServeDeps {
175
+ storage: () => Promise<FileSystemDirectoryHandle>;
176
+ syncAccess?: boolean;
177
+ createWorker: () => WasmWorkerLike;
178
+ createDriverWorker?: () => WasmWorkerLike;
179
+ metadata?: (name: string) => Promise<MetaStore>;
180
+ media?: (name: string) => Promise<MediaStore>;
181
+ locks?: LockManagerLike | null;
182
+ }
183
+ export declare function signalNumber(name: string): number;
184
+ export interface GrantReply {
185
+ id: number;
186
+ grant?: HostfsGrant | HostfsPortGrant;
187
+ error?: string;
188
+ }
189
+ export declare function serveKernel(port: KernelPort, deps: ServeDeps): void;
190
+ export {};
@@ -0,0 +1,4 @@
1
+ import type { Command } from './commands.js';
2
+ export declare const SUDO_PATH = "/usr/bin/sudo";
3
+ export declare const SUDO_COMMAND: Command;
4
+ export declare const SUDO_SOURCE: string;
@@ -0,0 +1,105 @@
1
+ import type { KernelFs, UsersMode } from './fs/types.js';
2
+ import type { Cred } from './kernel/cred.js';
3
+ import { type UserDb } from './users.js';
4
+ export declare const SUDOERS = "/etc/sudoers";
5
+ export declare const SUDOERS_D = "/etc/sudoers.d";
6
+ export declare const SECURE_PATH = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin";
7
+ export declare const DEFAULT_SUDOERS = "%sudo Cmnd *\n";
8
+ export declare const SUDO_TIMEOUT_MS = 300000;
9
+ export interface SudoRequest {
10
+ id: string;
11
+ kind: 'sudo';
12
+ user: string;
13
+ uid: number;
14
+ target: string;
15
+ argv: string[];
16
+ path: string;
17
+ cwd: string;
18
+ pid: number;
19
+ tag?: string;
20
+ tty?: string;
21
+ createdAt: number;
22
+ expiresAt: number;
23
+ always: boolean;
24
+ }
25
+ export type SudoAnswer = 'once' | 'always' | 'deny';
26
+ export type ApproveHook = (req: SudoRequest, options: {
27
+ signal: AbortSignal;
28
+ }) => SudoAnswer | Promise<SudoAnswer>;
29
+ export interface SudoCall {
30
+ op: 'proc-sudo';
31
+ args: string[];
32
+ cwd: string;
33
+ term?: string;
34
+ }
35
+ export interface SudoGrant {
36
+ file: string;
37
+ argv: string[];
38
+ env: Record<string, string>;
39
+ cwd: string;
40
+ cred: Cred;
41
+ caller: Cred;
42
+ }
43
+ export type SudoResult = {
44
+ error: string;
45
+ errno: string;
46
+ } | {
47
+ list: string;
48
+ } | {
49
+ run: string[];
50
+ } | {
51
+ grant: SudoGrant;
52
+ };
53
+ export interface SudoCaller {
54
+ cred: Cred;
55
+ pid: number;
56
+ tag?: string | undefined;
57
+ tty?: string | null | undefined;
58
+ }
59
+ interface Rule {
60
+ nopasswd: boolean;
61
+ who: string;
62
+ target: string;
63
+ cwd?: string;
64
+ cmnd: string[] | '*';
65
+ }
66
+ export interface SudoOptions {
67
+ fs: KernelFs;
68
+ users: UserDb;
69
+ mode: UsersMode;
70
+ hostname: string;
71
+ env: () => Record<string, string>;
72
+ pnpmHome: string;
73
+ backing?: (path: string, cwd: string) => Promise<string[] | undefined>;
74
+ approve?: ApproveHook | undefined;
75
+ timeoutMs?: number | undefined;
76
+ warn?: (message: string) => void;
77
+ }
78
+ export declare function splitWords(text: string): string[] | undefined;
79
+ export declare function quoteWord(word: string): string;
80
+ export declare function parseRule(line: string): Rule | null | undefined;
81
+ export declare class Sudo {
82
+ private readonly o;
83
+ private readonly warned;
84
+ private readonly pending;
85
+ private next;
86
+ constructor(options: SudoOptions);
87
+ private warn;
88
+ provision(): Promise<void>;
89
+ trusted(path: string): Promise<boolean>;
90
+ private policyFile;
91
+ private policy;
92
+ private groupIds;
93
+ private applies;
94
+ private lookup;
95
+ private canonical;
96
+ reachable(cred: Cred, cwd: string): Promise<boolean>;
97
+ private untrusted;
98
+ private locate;
99
+ request(caller: SudoCaller, call: SudoCall, signal: AbortSignal): Promise<SudoResult>;
100
+ private listed;
101
+ private ask;
102
+ private remember;
103
+ private grant;
104
+ }
105
+ export {};
@@ -0,0 +1,46 @@
1
+ import type { RouteTable } from './kernel/net/routes.js';
2
+ import { type NetworkUplink, type ResolveAnswer, type ResolveFamily, type UplinkConn, type UplinkDatagram, type UplinkDial, type UplinkMessage, type UplinkUdp, type UplinkUdpOpen, type UplinkUnreachable } from './kernel/net/uplink.js';
3
+ export { type CronClock, type FakeCronClock, fakeCronClock } from './cron/clock.js';
4
+ export type { NetworkUplink, ResolveAnswer, ResolveFamily, RouteTable, UplinkConn, UplinkDatagram, UplinkDial, UplinkMessage, UplinkUdp, UplinkUdpOpen, UplinkUnreachable, };
5
+ export type FakeDatagramPeer = (bytes: Uint8Array) => Uint8Array | readonly Uint8Array[] | {
6
+ error: string;
7
+ } | undefined;
8
+ export interface FakePeerSocket {
9
+ read(): Promise<Uint8Array | null>;
10
+ write(bytes: Uint8Array): void;
11
+ end(): void;
12
+ reset(code?: string): void;
13
+ readonly buffered: number;
14
+ drained(): Promise<void>;
15
+ readonly closed: Promise<void>;
16
+ }
17
+ export type FakePeer = ((socket: FakePeerSocket) => void) | {
18
+ error: string;
19
+ } | {
20
+ hang: true;
21
+ };
22
+ export interface FakeUplinkOptions {
23
+ names?: Readonly<Record<string, string[] | ResolveAnswer>>;
24
+ routes?: RouteTable;
25
+ ipv6?: boolean;
26
+ peers?: Readonly<Record<string, FakePeer>>;
27
+ datagrams?: Readonly<Record<string, FakeDatagramPeer>>;
28
+ address?: string;
29
+ }
30
+ export interface FakeUplink extends NetworkUplink {
31
+ readonly asked: Array<{
32
+ name: string;
33
+ family: ResolveFamily;
34
+ }>;
35
+ readonly dialled: Array<{
36
+ host: string;
37
+ port: number;
38
+ }>;
39
+ readonly sent: Array<{
40
+ host: string;
41
+ port: number;
42
+ bytes: Uint8Array;
43
+ }>;
44
+ udp(req: UplinkUdpOpen): Promise<UplinkUdp>;
45
+ }
46
+ export declare function fakeUplink(options?: FakeUplinkOptions): FakeUplink;
@@ -0,0 +1,25 @@
1
+ import type { TransportCall, TransportReply } from './kernel/net/remote-transport.js';
2
+ import type { HeaderList, RealmRedirectHop, RealmTransport, RealmTransportExit, RealmTransportRequest, RealmTransportResponse, RealmTransportTraits, RealmWebSocket, RealmWebSocketRequest } from './kernel/net/transport.js';
3
+ import { type WebSocketConstructor } from './websocket-transport.js';
4
+ export type { HeaderList, RealmRedirectHop as NetworkRedirectHop, RealmTransport as NetworkTransport, RealmTransportExit as NetworkExit, RealmTransportRequest as NetworkRequest, RealmTransportResponse as NetworkResponse, RealmTransportTraits as NetworkTraits, RealmWebSocket as NetworkWebSocket, RealmWebSocketRequest as NetworkWebSocketRequest, };
5
+ export interface FetchTransportOptions {
6
+ fetch?: typeof globalThis.fetch;
7
+ maxRequestBody?: number;
8
+ hint?: string;
9
+ bodyIdleMs?: number;
10
+ webSocket?: boolean | WebSocketConstructor;
11
+ webSocketHeaders?: boolean;
12
+ redirect?: 'follow' | 'manual';
13
+ }
14
+ export declare const SEND_BUFFER: number;
15
+ export declare function fetchTransport(options?: FetchTransportOptions): RealmTransport;
16
+ export interface TransportPeer {
17
+ postMessage(message: TransportReply, transfer?: Transferable[]): void;
18
+ }
19
+ export interface TransportServer {
20
+ answer(call: TransportCall): void;
21
+ close(): void;
22
+ }
23
+ export declare function serveTransport(peer: TransportPeer, transport: RealmTransport, { closeWaitMs }?: {
24
+ closeWaitMs?: number;
25
+ }): TransportServer;
@@ -0,0 +1,86 @@
1
+ import type { KernelFs } from './fs/types.js';
2
+ import { type Cred } from './kernel/cred.js';
3
+ export declare const PASSWD = "/etc/passwd";
4
+ export declare const GROUP = "/etc/group";
5
+ export declare const DEFAULT_PASSWD = "root:x:0:0:root:/root:/bin/bash\nnobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin\n";
6
+ export declare const DEFAULT_GROUP = "root:x:0:\nsudo:x:27:\nusers:x:100:\nnogroup:x:65534:\n";
7
+ export declare const SYSTEM_PNPM_HOME = "/usr/local/share/pnpm";
8
+ export declare const PNPM_CONFIG = "minimumReleaseAge: 1440\n";
9
+ export interface Account {
10
+ name: string;
11
+ uid: number;
12
+ gid: number;
13
+ home: string;
14
+ shell: string;
15
+ groups: number[];
16
+ umask?: number;
17
+ }
18
+ export interface AddUser {
19
+ name: string;
20
+ home?: string;
21
+ groups?: string[];
22
+ umask?: number;
23
+ homeGroup?: string;
24
+ homeMode?: number;
25
+ }
26
+ export interface Group {
27
+ name: string;
28
+ gid: number;
29
+ members: string[];
30
+ }
31
+ export interface RemoveUser {
32
+ keepHome?: boolean;
33
+ }
34
+ interface PasswdRow {
35
+ name: string;
36
+ uid: number;
37
+ gid: number;
38
+ gecos: string;
39
+ home: string;
40
+ shell: string;
41
+ }
42
+ interface GroupRow {
43
+ name: string;
44
+ gid: number;
45
+ members: string[];
46
+ }
47
+ type Rows<T> = Array<T | string>;
48
+ export declare function parsePasswd(text: string): Rows<PasswdRow>;
49
+ export declare function parseGroup(text: string): Rows<GroupRow>;
50
+ export declare function credOf(account: Account): Cred;
51
+ export declare function pnpmHomeOf(account: Account, system?: string): string;
52
+ export declare function userEnv(account: Account, system?: string): Record<string, string>;
53
+ export declare class UserDb {
54
+ private readonly fs;
55
+ private readonly owners;
56
+ private readonly umasks;
57
+ private writing;
58
+ private stable;
59
+ private commits;
60
+ constructor(fs: KernelFs, owners?: boolean);
61
+ private stampHome;
62
+ private umaskFor;
63
+ private realDir;
64
+ private read;
65
+ private texts;
66
+ private tables;
67
+ private provision;
68
+ private commit;
69
+ private serial;
70
+ ensure(): Promise<void>;
71
+ private account;
72
+ lookup(user: string | number): Promise<Account | undefined>;
73
+ ttyGroup(): Promise<number | undefined>;
74
+ lookupTerminal(user: string | number): Promise<{
75
+ account: Account;
76
+ tty: number | undefined;
77
+ } | undefined>;
78
+ list(): Promise<Account[]>;
79
+ add(options: AddUser): Promise<Account>;
80
+ groups(): Promise<Group[]>;
81
+ addMember(group: string, user: string): Promise<Group>;
82
+ removeMember(group: string, user: string): Promise<Group>;
83
+ private member;
84
+ remove(name: string, options?: RemoveUser): Promise<boolean>;
85
+ }
86
+ export {};
@@ -0,0 +1,3 @@
1
+ export declare const KERNEL_VERSION: string;
2
+ export declare const OS_RELEASE = "6.0.0-slicc";
3
+ export declare function procVersion(): string;
@@ -0,0 +1,12 @@
1
+ import type { RealmWebSocket, RealmWebSocketRequest } from './kernel/net/transport.js';
2
+ export interface WebSocketLike {
3
+ binaryType: string;
4
+ readonly protocol: string;
5
+ readonly bufferedAmount: number;
6
+ send(data: string | ArrayBufferView): void;
7
+ close(code?: number, reason?: string): void;
8
+ addEventListener(type: string, listener: (event: never) => void): void;
9
+ }
10
+ export type WebSocketConstructor = new (url: string, init?: unknown) => WebSocketLike;
11
+ export declare function sendableClose(code?: number): number;
12
+ export declare function openWebSocket(Socket: WebSocketConstructor, request: RealmWebSocketRequest, withHeaders: boolean): Promise<RealmWebSocket>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-ecoverse/slicc-kernel",
3
- "version": "1.102.5",
3
+ "version": "1.103.0",
4
4
  "description": "SLICC's wasm-realm kernel: run Emscripten programs in the browser against OPFS, with fork, spawn, pipes and waitpid",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -21,12 +21,28 @@
21
21
  "access": "public",
22
22
  "provenance": true
23
23
  },
24
+ "types": "./dist/types/index.d.ts",
24
25
  "exports": {
25
- ".": "./dist/index.js",
26
- "./node": "./dist/node.js",
27
- "./driver": "./dist/driver.js",
28
- "./testing": "./dist/testing.js",
29
- "./meta": "./dist/meta.js"
26
+ ".": {
27
+ "types": "./dist/types/index.d.ts",
28
+ "default": "./dist/index.js"
29
+ },
30
+ "./node": {
31
+ "types": "./dist/types/node.d.ts",
32
+ "default": "./dist/node.js"
33
+ },
34
+ "./driver": {
35
+ "types": "./dist/types/driver.d.ts",
36
+ "default": "./dist/driver.js"
37
+ },
38
+ "./testing": {
39
+ "types": "./dist/types/testing.d.ts",
40
+ "default": "./dist/testing.js"
41
+ },
42
+ "./meta": {
43
+ "types": "./dist/types/meta.d.ts",
44
+ "default": "./dist/meta.js"
45
+ }
30
46
  },
31
47
  "files": [
32
48
  "dist"