@ai-ecoverse/slicc-kernel 1.102.6 → 1.103.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.
Files changed (185) hide show
  1. package/README.md +3 -3
  2. package/dist/index.js.map +2 -2
  3. package/dist/kernel-worker.js +118 -29
  4. package/dist/kernel-worker.js.map +4 -4
  5. package/dist/meta.js.map +2 -2
  6. package/dist/node-process-worker.js +29 -44
  7. package/dist/node-process-worker.js.map +3 -3
  8. package/dist/node.js +123 -34
  9. package/dist/node.js.map +4 -4
  10. package/dist/process-worker.js +44 -59
  11. package/dist/process-worker.js.map +3 -3
  12. package/dist/types/body-idle.d.ts +3 -0
  13. package/dist/types/bytes.d.ts +1 -0
  14. package/dist/types/cdp/facade.d.ts +27 -0
  15. package/dist/types/cdp/hosts.d.ts +14 -0
  16. package/dist/types/cdp/port.d.ts +24 -0
  17. package/dist/types/cdp/types.d.ts +12 -0
  18. package/dist/types/cdp/websocket.d.ts +61 -0
  19. package/dist/types/client/attach.d.ts +132 -0
  20. package/dist/types/client/dial-stream.d.ts +23 -0
  21. package/dist/types/client/loopback-fetch.d.ts +5 -0
  22. package/dist/types/client/protocol.d.ts +153 -0
  23. package/dist/types/client/serve-client.d.ts +18 -0
  24. package/dist/types/clipboard-relay.d.ts +25 -0
  25. package/dist/types/commands.d.ts +38 -0
  26. package/dist/types/cron/clock.d.ts +13 -0
  27. package/dist/types/driver.d.ts +3 -0
  28. package/dist/types/facade/hosts.d.ts +12 -0
  29. package/dist/types/facade/port.d.ts +16 -0
  30. package/dist/types/facade/types.d.ts +23 -0
  31. package/dist/types/fs/access.d.ts +29 -0
  32. package/dist/types/fs/attest.d.ts +41 -0
  33. package/dist/types/fs/changes.d.ts +19 -0
  34. package/dist/types/fs/commands.d.ts +4 -0
  35. package/dist/types/fs/dac.d.ts +64 -0
  36. package/dist/types/fs/dev-removal.d.ts +9 -0
  37. package/dist/types/fs/fresh-modules.d.ts +9 -0
  38. package/dist/types/fs/integrity.d.ts +53 -0
  39. package/dist/types/fs/meta.d.ts +86 -0
  40. package/dist/types/fs/opfs.d.ts +141 -0
  41. package/dist/types/fs/owners.d.ts +17 -0
  42. package/dist/types/fs/pages.d.ts +41 -0
  43. package/dist/types/fs/path-map.d.ts +16 -0
  44. package/dist/types/fs/physical-path.d.ts +14 -0
  45. package/dist/types/fs/protect.d.ts +27 -0
  46. package/dist/types/fs/ranged.d.ts +73 -0
  47. package/dist/types/fs/remote.d.ts +45 -0
  48. package/dist/types/fs/types.d.ts +117 -0
  49. package/dist/types/fs/unlinked.d.ts +75 -0
  50. package/dist/types/fs/view.d.ts +1 -0
  51. package/dist/types/fs/walk.d.ts +12 -0
  52. package/dist/types/fs/watch.d.ts +23 -0
  53. package/dist/types/index.d.ts +159 -0
  54. package/dist/types/integrity-relay.d.ts +18 -0
  55. package/dist/types/kernel/children.d.ts +90 -0
  56. package/dist/types/kernel/clipboard.d.ts +49 -0
  57. package/dist/types/kernel/cpu-clock.d.ts +56 -0
  58. package/dist/types/kernel/cred.d.ts +17 -0
  59. package/dist/types/kernel/dgram.d.ts +56 -0
  60. package/dist/types/kernel/dial.d.ts +20 -0
  61. package/dist/types/kernel/epoll.d.ts +67 -0
  62. package/dist/types/kernel/eventfd.d.ts +19 -0
  63. package/dist/types/kernel/exec-ticket.d.ts +25 -0
  64. package/dist/types/kernel/fd-table.d.ts +107 -0
  65. package/dist/types/kernel/host-ops.d.ts +98 -0
  66. package/dist/types/kernel/host.d.ts +116 -0
  67. package/dist/types/kernel/jobs.d.ts +50 -0
  68. package/dist/types/kernel/locks.d.ts +40 -0
  69. package/dist/types/kernel/net/datagram-wire.d.ts +8 -0
  70. package/dist/types/kernel/net/http-syscalls.d.ts +58 -0
  71. package/dist/types/kernel/net/http1.d.ts +48 -0
  72. package/dist/types/kernel/net/loopback-names.d.ts +14 -0
  73. package/dist/types/kernel/net/loopback-transport.d.ts +13 -0
  74. package/dist/types/kernel/net/network.d.ts +29 -0
  75. package/dist/types/kernel/net/proxy-service.d.ts +70 -0
  76. package/dist/types/kernel/net/realm-ca.d.ts +28 -0
  77. package/dist/types/kernel/net/redirect-hops.d.ts +5 -0
  78. package/dist/types/kernel/net/remote-transport.d.ts +98 -0
  79. package/dist/types/kernel/net/resolver.d.ts +29 -0
  80. package/dist/types/kernel/net/routes.d.ts +15 -0
  81. package/dist/types/kernel/net/tls-engine.d.ts +46 -0
  82. package/dist/types/kernel/net/tls-tunnel.d.ts +35 -0
  83. package/dist/types/kernel/net/transport.d.ts +64 -0
  84. package/dist/types/kernel/net/uplink-socket.d.ts +11 -0
  85. package/dist/types/kernel/net/uplink.d.ts +163 -0
  86. package/dist/types/kernel/net/ws-queue.d.ts +21 -0
  87. package/dist/types/kernel/net/ws-syscalls.d.ts +45 -0
  88. package/dist/types/kernel/net/x509.d.ts +34 -0
  89. package/dist/types/kernel/pipe.d.ts +29 -0
  90. package/dist/types/kernel/proc-info.d.ts +44 -0
  91. package/dist/types/kernel/process.d.ts +525 -0
  92. package/dist/types/kernel/protocol.d.ts +126 -0
  93. package/dist/types/kernel/pty.d.ts +84 -0
  94. package/dist/types/kernel/run-child.d.ts +39 -0
  95. package/dist/types/kernel/scrub-file.d.ts +13 -0
  96. package/dist/types/kernel/sealed.d.ts +74 -0
  97. package/dist/types/kernel/select.d.ts +7 -0
  98. package/dist/types/kernel/sem.d.ts +72 -0
  99. package/dist/types/kernel/settling.d.ts +16 -0
  100. package/dist/types/kernel/signals.d.ts +44 -0
  101. package/dist/types/kernel/socket-nodes.d.ts +20 -0
  102. package/dist/types/kernel/socket-syscalls.d.ts +76 -0
  103. package/dist/types/kernel/socket.d.ts +131 -0
  104. package/dist/types/kernel/timer.d.ts +4 -0
  105. package/dist/types/kernel/tty.d.ts +53 -0
  106. package/dist/types/kernel/vfs-file.d.ts +149 -0
  107. package/dist/types/launcher.d.ts +359 -0
  108. package/dist/types/local-proxy-transport.d.ts +39 -0
  109. package/dist/types/meta.d.ts +11 -0
  110. package/dist/types/mount/chunked.d.ts +9 -0
  111. package/dist/types/mount/connection.d.ts +35 -0
  112. package/dist/types/mount/driver.d.ts +50 -0
  113. package/dist/types/mount/fsa.d.ts +26 -0
  114. package/dist/types/mount/fstab.d.ts +17 -0
  115. package/dist/types/mount/host.d.ts +24 -0
  116. package/dist/types/mount/hostfs.d.ts +129 -0
  117. package/dist/types/mount/media.d.ts +8 -0
  118. package/dist/types/mount/medium.d.ts +12 -0
  119. package/dist/types/mount/mount-fs.d.ts +136 -0
  120. package/dist/types/mount/protocol.d.ts +140 -0
  121. package/dist/types/mount/syscall.d.ts +27 -0
  122. package/dist/types/mount/tmpfs.d.ts +2 -0
  123. package/dist/types/node/loopback.d.ts +11 -0
  124. package/dist/types/node/memory-root.d.ts +2 -0
  125. package/dist/types/node/ws-diagnose.d.ts +4 -0
  126. package/dist/types/node.d.ts +85 -0
  127. package/dist/types/process/fd-metadata.d.ts +4 -0
  128. package/dist/types/process/js/async-sab.d.ts +15 -0
  129. package/dist/types/process/js/js-children.d.ts +63 -0
  130. package/dist/types/process/js/js-context.d.ts +133 -0
  131. package/dist/types/process/js/js-dev.d.ts +50 -0
  132. package/dist/types/process/js/js-exit.d.ts +15 -0
  133. package/dist/types/process/js/js-fetch.d.ts +2 -0
  134. package/dist/types/process/js/js-io.d.ts +81 -0
  135. package/dist/types/process/js/js-kernel.d.ts +61 -0
  136. package/dist/types/process/js/js-net.d.ts +42 -0
  137. package/dist/types/process/js/js-proc.d.ts +31 -0
  138. package/dist/types/process/js/js-run.d.ts +35 -0
  139. package/dist/types/process/js/js-sync.d.ts +86 -0
  140. package/dist/types/process/js/js-tty.d.ts +30 -0
  141. package/dist/types/process/js/js-websocket.d.ts +21 -0
  142. package/dist/types/process/kernel-streams.d.ts +196 -0
  143. package/dist/types/process/process-fds.d.ts +95 -0
  144. package/dist/types/process/process-locks.d.ts +29 -0
  145. package/dist/types/process/process-pty.d.ts +20 -0
  146. package/dist/types/process/process-signals.d.ts +33 -0
  147. package/dist/types/process/procfs.d.ts +41 -0
  148. package/dist/types/process/wasi/dylink.d.ts +9 -0
  149. package/dist/types/process/wasi/slicc-lock.d.ts +26 -0
  150. package/dist/types/process/wasi/slicc-sem.d.ts +3 -0
  151. package/dist/types/process/wasi/wasi-abi.d.ts +156 -0
  152. package/dist/types/process/wasi/wasi-fds.d.ts +130 -0
  153. package/dist/types/process/wasi/wasi-files.d.ts +99 -0
  154. package/dist/types/process/wasi/wasi-host.d.ts +104 -0
  155. package/dist/types/process/wasi/wasi-memory.d.ts +16 -0
  156. package/dist/types/process/wasi/wasi-module.d.ts +13 -0
  157. package/dist/types/process/wasi/wasi-poll.d.ts +13 -0
  158. package/dist/types/process/wasi/wasi-procfs.d.ts +36 -0
  159. package/dist/types/process/wasi/wasi-sigmask.d.ts +19 -0
  160. package/dist/types/process/wasi/wasi-signals.d.ts +43 -0
  161. package/dist/types/process/wasi/wasi-termios.d.ts +10 -0
  162. package/dist/types/process/wasi/wasix-fork.d.ts +63 -0
  163. package/dist/types/process/wasi/wasix-linker.d.ts +108 -0
  164. package/dist/types/process/wasi/wasix-sockets.d.ts +9 -0
  165. package/dist/types/process/wasi/wasix-trampoline.d.ts +18 -0
  166. package/dist/types/process/wasi/wasm-functypes.d.ts +25 -0
  167. package/dist/types/process/wasi-errno.d.ts +1 -0
  168. package/dist/types/realm/emscripten-vfs-hook.d.ts +19 -0
  169. package/dist/types/realm/live-vfs-fs.d.ts +186 -0
  170. package/dist/types/realm/sync-fs-dispatch.d.ts +27 -0
  171. package/dist/types/realm/sync-fs-token-registry.d.ts +36 -0
  172. package/dist/types/realm/sync-fs-wire.d.ts +119 -0
  173. package/dist/types/realm/sync-sab-bridge.d.ts +21 -0
  174. package/dist/types/realm/sync-sab-responder.d.ts +16 -0
  175. package/dist/types/realm/sync-sab-wire.d.ts +64 -0
  176. package/dist/types/sealed-relay.d.ts +26 -0
  177. package/dist/types/serve.d.ts +190 -0
  178. package/dist/types/sudo-command.d.ts +4 -0
  179. package/dist/types/sudo.d.ts +105 -0
  180. package/dist/types/testing.d.ts +46 -0
  181. package/dist/types/transport.d.ts +25 -0
  182. package/dist/types/users.d.ts +86 -0
  183. package/dist/types/version.d.ts +3 -0
  184. package/dist/types/websocket-transport.d.ts +12 -0
  185. package/package.json +24 -8
@@ -0,0 +1,126 @@
1
+ import type { ForeignResults, ImportedMemory } from '../process/wasi/wasi-module.js';
2
+ import type { WasiForkState } from '../process/wasi/wasix-fork.js';
3
+ import type { LinkRecord } from '../process/wasi/wasix-linker.js';
4
+ import type { BlockedMask } from '../realm/sync-sab-wire.js';
5
+ import type { Cred } from './cred.js';
6
+ import type { DeviceMeta, KernelFdKind } from './fd-table.js';
7
+ export declare const WASM_PROCESS_INIT = "wasm-process-init";
8
+ export declare const WASM_PROCESS_EXIT = "wasm-process-exit";
9
+ export declare const WASM_PROCESS_ERROR = "wasm-process-error";
10
+ export declare const WASM_THREAD_SPAWN = "wasm-thread-spawn";
11
+ export declare const WASM_THREAD_INIT = "wasm-thread-init";
12
+ export declare const WASM_THREAD_EXIT = "wasm-thread-exit";
13
+ export declare const WASM_MAX_THREADS = 256;
14
+ export declare const WASM_DEFAULT_THREADS = 64;
15
+ export interface WasmProgram {
16
+ abi?: 'emscripten' | 'wasi';
17
+ glue: string;
18
+ module: WebAssembly.Module;
19
+ memory?: ImportedMemory;
20
+ foreign?: ForeignResults | undefined;
21
+ path?: string;
22
+ names?: string;
23
+ imports?: string;
24
+ preopenRoot?: boolean;
25
+ }
26
+ export interface JsProgram {
27
+ abi: 'js';
28
+ glue: string;
29
+ path: string;
30
+ }
31
+ export type Program = WasmProgram | JsProgram;
32
+ export interface ForkState {
33
+ memory: Uint8Array;
34
+ currData: number;
35
+ forkSp: number;
36
+ callStackNames: Array<[number, string]>;
37
+ ppid: number;
38
+ streams?: ForkStream[];
39
+ cwd?: string;
40
+ wasi?: WasiForkState;
41
+ dl?: DlState;
42
+ }
43
+ export interface DlState {
44
+ log: LinkRecord[];
45
+ next: number;
46
+ handle: number;
47
+ free: number[];
48
+ live: number[];
49
+ }
50
+ export interface KernelStreamEntry {
51
+ fd: number;
52
+ kernel: number;
53
+ kind: KernelFdKind;
54
+ flags?: number;
55
+ cloexec?: boolean;
56
+ desc?: number;
57
+ }
58
+ export type ForkStream = KernelStreamEntry | {
59
+ fd: number;
60
+ path: string;
61
+ flags: number;
62
+ };
63
+ export interface InheritedFd {
64
+ fd: number;
65
+ kind: KernelFdKind;
66
+ device?: DeviceMeta;
67
+ flags?: number;
68
+ cloexec?: boolean;
69
+ desc?: number;
70
+ }
71
+ export interface WasmProcessInitMsg {
72
+ type: typeof WASM_PROCESS_INIT;
73
+ pid: number;
74
+ program: WasmProgram;
75
+ argv0: string;
76
+ args: string[];
77
+ env: Record<string, string>;
78
+ cwd: string;
79
+ sab: SharedArrayBuffer;
80
+ changes?: SharedArrayBuffer;
81
+ ppid?: number;
82
+ umask?: number;
83
+ cred?: Cred;
84
+ owners?: boolean;
85
+ links?: boolean;
86
+ fork?: ForkState;
87
+ fds?: InheritedFd[];
88
+ }
89
+ export interface JsLane {
90
+ sab: SharedArrayBuffer;
91
+ port: MessagePort;
92
+ }
93
+ export type JsProcessInitMsg = Omit<WasmProcessInitMsg, 'program' | 'fork'> & {
94
+ program: JsProgram;
95
+ lane?: JsLane;
96
+ };
97
+ export type ProcessInitMsg = WasmProcessInitMsg | JsProcessInitMsg;
98
+ export interface WasmProcessExitMsg {
99
+ type: typeof WASM_PROCESS_EXIT;
100
+ code: number;
101
+ }
102
+ export interface WasmProcessErrorMsg {
103
+ type: typeof WASM_PROCESS_ERROR;
104
+ message: string;
105
+ code?: number;
106
+ }
107
+ export interface WasmThread {
108
+ tid: number;
109
+ arg: number;
110
+ memory: WebAssembly.Memory;
111
+ ids: SharedArrayBuffer;
112
+ modules?: Record<string, WebAssembly.Module>;
113
+ blocked?: BlockedMask;
114
+ }
115
+ export interface WasmThreadSpawnMsg {
116
+ type: typeof WASM_THREAD_SPAWN;
117
+ thread: WasmThread;
118
+ }
119
+ export interface WasmThreadInitMsg extends Omit<WasmProcessInitMsg, 'type' | 'fork' | 'fds'> {
120
+ type: typeof WASM_THREAD_INIT;
121
+ thread: WasmThread;
122
+ signals?: SharedArrayBuffer;
123
+ }
124
+ export interface WasmThreadExitMsg {
125
+ type: typeof WASM_THREAD_EXIT;
126
+ }
@@ -0,0 +1,84 @@
1
+ import { type Guard } from '../fs/dac.js';
2
+ import type { Perm } from '../fs/types.js';
3
+ import type { SyncFsResult } from '../realm/sync-fs-wire.js';
4
+ import { type FdTable, OpenFile } from './fd-table.js';
5
+ import type { JobTable } from './jobs.js';
6
+ import { KernelTty } from './tty.js';
7
+ export type PtySignal = (tty: KernelTty, sig: number) => void;
8
+ export declare class PtyPair {
9
+ readonly slave: KernelTty;
10
+ locked: boolean;
11
+ packet: boolean;
12
+ private queue;
13
+ private waiters;
14
+ private masterOpen;
15
+ private slaveRefs;
16
+ private slaveSeen;
17
+ readonly index: number;
18
+ private readonly onFree;
19
+ constructor(index: number, signal: PtySignal, onFree: (pair: PtyPair) => void, onRead?: (tty: KernelTty) => void);
20
+ master(): OpenFile;
21
+ openSlave(): OpenFile;
22
+ private get slaveGone();
23
+ private fromSlave;
24
+ private readMaster;
25
+ private closeMaster;
26
+ private closeSlave;
27
+ private freeIfUnused;
28
+ private changed;
29
+ private wake;
30
+ }
31
+ export declare class PtyTable {
32
+ private readonly pairs;
33
+ private readonly signal;
34
+ private readonly onRead;
35
+ constructor(signal: PtySignal, onRead?: (tty: KernelTty) => void);
36
+ open(owner?: Perm): {
37
+ pair: PtyPair;
38
+ master: OpenFile;
39
+ };
40
+ get(index: number): PtyPair;
41
+ numbers(): number[];
42
+ }
43
+ export declare function ptsNumber(path: string): number | undefined;
44
+ export type PtySyscall = {
45
+ op: 'pty-open';
46
+ } | {
47
+ op: 'pty-slave-open';
48
+ n: number;
49
+ noctty: boolean;
50
+ } | {
51
+ op: 'pty-number';
52
+ fd: number;
53
+ } | {
54
+ op: 'pty-lock';
55
+ fd: number;
56
+ lock: boolean;
57
+ } | {
58
+ op: 'pty-ctty';
59
+ fd: number;
60
+ } | {
61
+ op: 'pty-packet';
62
+ fd: number;
63
+ on: boolean;
64
+ } | {
65
+ op: 'pty-list';
66
+ } | {
67
+ op: 'pty-winsz-set';
68
+ fd: number;
69
+ rows: number;
70
+ cols: number;
71
+ };
72
+ export declare const PTY_OPS: readonly PtySyscall['op'][];
73
+ export interface PtyContext {
74
+ pid: number;
75
+ fds: FdTable;
76
+ ptys?: PtyTable;
77
+ jobs?: JobTable;
78
+ guard?: Guard;
79
+ owner?: Perm;
80
+ outputFilter?: (file: OpenFile) => OpenFile;
81
+ sizesRead?: WeakMap<KernelTty, string>;
82
+ }
83
+ export declare function sizeKey(rows: number, cols: number): string;
84
+ export declare function ptySyscall(req: PtySyscall, ctx: PtyContext): SyncFsResult;
@@ -0,0 +1,39 @@
1
+ import { type ChildTable } from './children.js';
2
+ export type RunStdio = 'pipe' | 'ignore' | 'inherit' | number;
3
+ export type RunStderr = RunStdio | 'stdout';
4
+ export interface RunRequest {
5
+ op: 'proc-run';
6
+ file: string;
7
+ argv: string[];
8
+ argv0?: string;
9
+ env: Record<string, string>;
10
+ cwd: string;
11
+ pgid?: number;
12
+ session?: true;
13
+ stdin: RunStdio;
14
+ input?: Uint8Array;
15
+ stdout: RunStdio;
16
+ stderr: RunStderr;
17
+ maxBuffer?: number;
18
+ timeoutMs?: number;
19
+ killSignal: number;
20
+ }
21
+ export interface RunOutcome {
22
+ pid: number;
23
+ status: number | null;
24
+ signal?: number;
25
+ error?: {
26
+ code: string;
27
+ };
28
+ out: number;
29
+ err: number;
30
+ }
31
+ export declare const RUN_CAPTURE_CAP: number;
32
+ export declare const RUN_MAX_BUFFER: number;
33
+ export interface RunDeps {
34
+ children: ChildTable;
35
+ kill(pid: number, sig: number): Promise<unknown> | unknown;
36
+ interrupt(): AbortSignal;
37
+ dying(): boolean;
38
+ }
39
+ export declare function runChild(req: RunRequest, deps: RunDeps): Promise<Uint8Array>;
@@ -0,0 +1,13 @@
1
+ import { type Scrubber } from '@ai-ecoverse/slicc-scrub';
2
+ import { type FdTable, OpenFile } from './fd-table.js';
3
+ export declare const SCRUB_IDLE_MS = 50;
4
+ export declare const SCRUB_NONBLOCK_MAX: number;
5
+ export interface ScrubSecret {
6
+ name: string;
7
+ value: string;
8
+ placeholder: string;
9
+ }
10
+ export declare function scrubberOf(secrets: ScrubSecret[]): Scrubber | undefined;
11
+ export declare function scrubbed(inner: OpenFile, scrubber: Scrubber, idleMs?: number): OpenFile;
12
+ export declare function scrubbedAll(file: OpenFile, scrubbers: readonly Scrubber[]): OpenFile;
13
+ export declare function scrubStdio(fds: FdTable, scrubber: Scrubber): void;
@@ -0,0 +1,74 @@
1
+ import type { UsersMode } from '../fs/types.js';
2
+ import type { Cred } from './cred.js';
3
+ import { TicketBook } from './exec-ticket.js';
4
+ import { type OpenAccess, OpenFile, type PollState } from './fd-table.js';
5
+ export declare const SEALED_PATH = "/dev/sealed";
6
+ export declare const SEALED_MAX_BYTES: number;
7
+ export declare const SEALED_TIMEOUT_MS = 10000;
8
+ export declare const SEALED_OPS: ReadonlySet<string>;
9
+ export interface SealedCaller {
10
+ pid: number;
11
+ ppid: number;
12
+ uid: number;
13
+ gid: number;
14
+ user?: string;
15
+ groups: number[];
16
+ users: UsersMode;
17
+ tag?: string;
18
+ }
19
+ export type SealedRequest = {
20
+ v: 1;
21
+ op: string;
22
+ caller: SealedCaller;
23
+ } & Record<string, unknown>;
24
+ export type SealedHook = (req: SealedRequest, options: {
25
+ signal: AbortSignal;
26
+ }) => Promise<object>;
27
+ export type SealedAbortReason = 'replaced' | 'timeout' | 'withdrawn';
28
+ export declare function parseSealed(bytes: Uint8Array): Record<string, unknown>;
29
+ declare class SealedChannel {
30
+ private reply;
31
+ private offset;
32
+ private inflight;
33
+ private readonly broker;
34
+ readonly access: OpenAccess;
35
+ constructor(broker: SealedBroker, access: OpenAccess);
36
+ send(bytes: Uint8Array, caller: SealedCaller, gone: AbortSignal): number;
37
+ private answer;
38
+ private drop;
39
+ read(max: number, signal?: AbortSignal): Promise<Uint8Array>;
40
+ private until;
41
+ poll(): PollState;
42
+ changed(signal?: AbortSignal): Promise<void>;
43
+ close(): void;
44
+ }
45
+ export interface ConsumeFields {
46
+ ticket: string;
47
+ stamp: SealedCaller;
48
+ path: string;
49
+ resolved: string;
50
+ argv: string[];
51
+ cwd: string;
52
+ interpreters: string[];
53
+ trusted: boolean;
54
+ }
55
+ export interface Swap {
56
+ values: Record<string, string>;
57
+ placeholders: Record<string, string>;
58
+ }
59
+ export declare class SealedBroker {
60
+ readonly hook: SealedHook | undefined;
61
+ readonly users: UsersMode;
62
+ readonly timeoutMs: number;
63
+ readonly tagOf: (pid: number) => string | undefined;
64
+ readonly tickets: TicketBook;
65
+ userOf: (uid: number) => Promise<string | undefined>;
66
+ constructor(hook: SealedHook | undefined, users: UsersMode, timeoutMs?: number, tagOf?: (pid: number) => string | undefined);
67
+ stamp(ids: {
68
+ pid: number;
69
+ ppid: number;
70
+ }, cred: Readonly<Cred>, tag: string | undefined): Promise<SealedCaller>;
71
+ consume(fields: ConsumeFields): Promise<Swap | undefined>;
72
+ open(access?: OpenAccess): OpenFile;
73
+ }
74
+ export type { SealedChannel };
@@ -0,0 +1,7 @@
1
+ import { type FdTable } from './fd-table.js';
2
+ export interface SelectResult {
3
+ read: number[];
4
+ write: number[];
5
+ hangup?: number[];
6
+ }
7
+ export declare function selectFds(fds: FdTable, read: readonly number[], write: readonly number[], timeoutMs: number, interrupt: AbortSignal): Promise<SelectResult>;
@@ -0,0 +1,72 @@
1
+ import type { SyncFsResult } from '../realm/sync-fs-wire.js';
2
+ import type { Cred } from './cred.js';
3
+ import { type ForkedHandles } from './fd-table.js';
4
+ export declare const SEM_VALUE_MAX = 2147483647;
5
+ export declare const SEM_NAMES_MAX = 65536;
6
+ export declare const SEM_HANDLES_MAX = 65536;
7
+ export type SemWaitHow = 'block' | 'try' | 'timed';
8
+ export type SemSyscall = {
9
+ op: 'sem-open';
10
+ name: string;
11
+ create: boolean;
12
+ exclusive: boolean;
13
+ mode: number;
14
+ value: number;
15
+ } | {
16
+ op: 'sem-close';
17
+ handle: number;
18
+ } | {
19
+ op: 'sem-unlink';
20
+ name: string;
21
+ } | {
22
+ op: 'sem-post';
23
+ handle: number;
24
+ } | {
25
+ op: 'sem-wait';
26
+ handle: number;
27
+ how: SemWaitHow;
28
+ timeoutMs: number;
29
+ } | {
30
+ op: 'sem-getvalue';
31
+ handle: number;
32
+ };
33
+ export declare const SEM_OPS: readonly SemSyscall['op'][];
34
+ export declare class Semaphore {
35
+ value: number;
36
+ readonly uid: number;
37
+ readonly gid: number;
38
+ readonly mode: number;
39
+ private readonly waiters;
40
+ constructor(value: number, uid: number, gid: number, mode: number);
41
+ post(): void;
42
+ take(): boolean;
43
+ wait(signal: AbortSignal, timeoutMs: number): Promise<boolean>;
44
+ }
45
+ export declare class SemTable {
46
+ private readonly names;
47
+ private readonly limit;
48
+ constructor(limit?: number);
49
+ open(name: string, create: boolean, exclusive: boolean, make: () => Semaphore, check: (s: Semaphore) => void, adopt: (s: Semaphore) => number): number;
50
+ unlink(name: string, check: (s: Semaphore) => void): void;
51
+ }
52
+ export declare class SemHandles implements ForkedHandles {
53
+ private readonly byHandle;
54
+ private next;
55
+ private readonly limit;
56
+ constructor(limit?: number);
57
+ add(sem: Semaphore): number;
58
+ get(handle: number): Semaphore;
59
+ close(handle: number): void;
60
+ fork(): SemHandles;
61
+ clear(): void;
62
+ }
63
+ export declare function semName(raw: string): string;
64
+ export interface SemProcess {
65
+ table: SemTable | undefined;
66
+ handles: SemHandles;
67
+ cred: Readonly<Cred>;
68
+ denied: ((op: string, path: string) => void) | undefined;
69
+ umask: number;
70
+ blocking(): AbortSignal;
71
+ }
72
+ export declare function semSyscall(req: SemSyscall, proc: SemProcess): Promise<SyncFsResult>;
@@ -0,0 +1,16 @@
1
+ export declare const SETTLE_MS = 2000;
2
+ export declare class SettlingChildren {
3
+ private readonly children;
4
+ private held;
5
+ private parked;
6
+ private readonly pgidOf;
7
+ private readonly settleMs;
8
+ constructor(pgidOf: (pid: number) => number | undefined, settleMs?: number);
9
+ started(pid: number, ppid: number): void;
10
+ reading(pgid: number): void;
11
+ isSettling(pid: number): boolean;
12
+ syscall(pid: number, op: string): void;
13
+ settled(pid: number): void;
14
+ deliver(sig: number, pgid: number, send: () => void, foreground?: () => number): void;
15
+ private blocking;
16
+ }
@@ -0,0 +1,44 @@
1
+ export declare const SIG: {
2
+ readonly HUP: 1;
3
+ readonly INT: 2;
4
+ readonly QUIT: 3;
5
+ readonly ILL: 4;
6
+ readonly TRAP: 5;
7
+ readonly ABRT: 6;
8
+ readonly BUS: 7;
9
+ readonly FPE: 8;
10
+ readonly KILL: 9;
11
+ readonly USR1: 10;
12
+ readonly SEGV: 11;
13
+ readonly USR2: 12;
14
+ readonly PIPE: 13;
15
+ readonly ALRM: 14;
16
+ readonly TERM: 15;
17
+ readonly STKFLT: 16;
18
+ readonly CHLD: 17;
19
+ readonly CONT: 18;
20
+ readonly STOP: 19;
21
+ readonly TSTP: 20;
22
+ readonly TTIN: 21;
23
+ readonly TTOU: 22;
24
+ readonly URG: 23;
25
+ readonly XCPU: 24;
26
+ readonly XFSZ: 25;
27
+ readonly VTALRM: 26;
28
+ readonly PROF: 27;
29
+ readonly WINCH: 28;
30
+ readonly POLL: 29;
31
+ readonly PWR: 30;
32
+ readonly SYS: 31;
33
+ };
34
+ export type DefaultAction = 'terminate' | 'ignore' | 'stop' | 'continue';
35
+ export declare function defaultAction(sig: number): DefaultAction;
36
+ export declare function isSignal(sig: number): boolean;
37
+ export declare function sigbit(sig: number): number;
38
+ export declare function signalsIn(mask: number): number[];
39
+ export declare function signalName(sig: number | undefined): string | undefined;
40
+ export declare function quiet<T>(p: Promise<T>): Promise<T>;
41
+ export declare function signalField(sig: number | undefined): {
42
+ signal?: string;
43
+ };
44
+ export declare const SIGNAL_BY_NAME: Readonly<Record<'SIGINT' | 'SIGTERM' | 'SIGKILL' | 'SIGSTOP' | 'SIGCONT', number>>;
@@ -0,0 +1,20 @@
1
+ import { type Guard } from '../fs/dac.js';
2
+ import { type KernelFs, type NewOwner } from '../fs/types.js';
3
+ import type { SockAddr, SocketName } from './socket.js';
4
+ export interface BoundName extends SocketName {
5
+ remove(): Promise<void>;
6
+ }
7
+ export interface SocketNames {
8
+ make(path: string): Promise<BoundName>;
9
+ find(path: string): Promise<SocketName>;
10
+ }
11
+ export type SocketNameFs = Pick<KernelFs, 'stat' | 'lstat' | 'chmod' | 'rm'>;
12
+ export interface SocketNameDeps {
13
+ fs: SocketNameFs;
14
+ guard(): Guard | undefined;
15
+ create(path: string, owner: NewOwner): Promise<void>;
16
+ owner(): NewOwner;
17
+ owners: boolean;
18
+ }
19
+ export declare function filePath(addr: SockAddr): string | undefined;
20
+ export declare function socketNames(deps: SocketNameDeps): SocketNames;
@@ -0,0 +1,76 @@
1
+ import type { SyncFsResult } from '../realm/sync-fs-wire.js';
2
+ import { type FdTable } from './fd-table.js';
3
+ import type { ResolveFamily } from './net/uplink.js';
4
+ import { type ConnectorStamp, type LoopbackNet, type PeerCred, type SockAddr, type SocketDomain } from './socket.js';
5
+ import { type SocketNames } from './socket-nodes.js';
6
+ export type SocketSyscall = {
7
+ op: 'sock-open';
8
+ domain: SocketDomain;
9
+ type?: 'stream' | 'dgram';
10
+ } | {
11
+ op: 'sock-pair';
12
+ domain: SocketDomain;
13
+ } | {
14
+ op: 'sock-bind';
15
+ fd: number;
16
+ addr: SockAddr;
17
+ } | {
18
+ op: 'sock-listen';
19
+ fd: number;
20
+ backlog: number;
21
+ } | {
22
+ op: 'sock-accept';
23
+ fd: number;
24
+ nonblock: boolean;
25
+ } | {
26
+ op: 'sock-connect';
27
+ fd: number;
28
+ addr: SockAddr;
29
+ nonblock: boolean;
30
+ } | {
31
+ op: 'sock-shutdown';
32
+ fd: number;
33
+ how: number;
34
+ } | {
35
+ op: 'sock-name';
36
+ fd: number;
37
+ peer: boolean;
38
+ } | {
39
+ op: 'sock-getopt';
40
+ fd: number;
41
+ level: number;
42
+ name: number;
43
+ } | {
44
+ op: 'sock-setopt';
45
+ fd: number;
46
+ level: number;
47
+ name: number;
48
+ value: number;
49
+ } | {
50
+ op: 'sock-resolve';
51
+ name: string;
52
+ family: ResolveFamily;
53
+ } | {
54
+ op: 'sock-sendto';
55
+ fd: number;
56
+ body: Uint8Array;
57
+ addr?: SockAddr;
58
+ nonblock: boolean;
59
+ } | {
60
+ op: 'sock-recvfrom';
61
+ fd: number;
62
+ max: number;
63
+ peek: boolean;
64
+ nonblock: boolean;
65
+ };
66
+ export declare const SOCKET_OPS: readonly SocketSyscall['op'][];
67
+ export interface SocketProcess {
68
+ fds: FdTable;
69
+ net: LoopbackNet;
70
+ blocking(): AbortSignal;
71
+ resolve(name: string, family: ResolveFamily, blocking: () => AbortSignal): Promise<string[]>;
72
+ cred?(): PeerCred;
73
+ stamp?(): Promise<ConnectorStamp>;
74
+ names?: SocketNames;
75
+ }
76
+ export declare function socketSyscall(req: SocketSyscall, proc: SocketProcess): Promise<SyncFsResult>;