@ai-ecoverse/slicc-kernel 1.102.6 → 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 (178) hide show
  1. package/README.md +1 -1
  2. package/dist/kernel-worker.js +1 -1
  3. package/dist/node-process-worker.js +1 -1
  4. package/dist/node.js +1 -1
  5. package/dist/process-worker.js +1 -1
  6. package/dist/types/body-idle.d.ts +3 -0
  7. package/dist/types/bytes.d.ts +1 -0
  8. package/dist/types/cdp/facade.d.ts +27 -0
  9. package/dist/types/cdp/hosts.d.ts +14 -0
  10. package/dist/types/cdp/port.d.ts +24 -0
  11. package/dist/types/cdp/types.d.ts +12 -0
  12. package/dist/types/cdp/websocket.d.ts +61 -0
  13. package/dist/types/client/attach.d.ts +132 -0
  14. package/dist/types/client/dial-stream.d.ts +23 -0
  15. package/dist/types/client/loopback-fetch.d.ts +5 -0
  16. package/dist/types/client/protocol.d.ts +153 -0
  17. package/dist/types/client/serve-client.d.ts +18 -0
  18. package/dist/types/clipboard-relay.d.ts +25 -0
  19. package/dist/types/commands.d.ts +38 -0
  20. package/dist/types/cron/clock.d.ts +13 -0
  21. package/dist/types/driver.d.ts +3 -0
  22. package/dist/types/facade/hosts.d.ts +12 -0
  23. package/dist/types/facade/port.d.ts +16 -0
  24. package/dist/types/facade/types.d.ts +23 -0
  25. package/dist/types/fs/access.d.ts +29 -0
  26. package/dist/types/fs/attest.d.ts +41 -0
  27. package/dist/types/fs/changes.d.ts +19 -0
  28. package/dist/types/fs/commands.d.ts +4 -0
  29. package/dist/types/fs/dac.d.ts +64 -0
  30. package/dist/types/fs/dev-removal.d.ts +9 -0
  31. package/dist/types/fs/fresh-modules.d.ts +9 -0
  32. package/dist/types/fs/integrity.d.ts +53 -0
  33. package/dist/types/fs/meta.d.ts +85 -0
  34. package/dist/types/fs/opfs.d.ts +141 -0
  35. package/dist/types/fs/owners.d.ts +17 -0
  36. package/dist/types/fs/pages.d.ts +41 -0
  37. package/dist/types/fs/path-map.d.ts +16 -0
  38. package/dist/types/fs/physical-path.d.ts +14 -0
  39. package/dist/types/fs/protect.d.ts +27 -0
  40. package/dist/types/fs/ranged.d.ts +73 -0
  41. package/dist/types/fs/remote.d.ts +45 -0
  42. package/dist/types/fs/types.d.ts +115 -0
  43. package/dist/types/fs/unlinked.d.ts +75 -0
  44. package/dist/types/fs/view.d.ts +1 -0
  45. package/dist/types/fs/walk.d.ts +12 -0
  46. package/dist/types/fs/watch.d.ts +23 -0
  47. package/dist/types/index.d.ts +159 -0
  48. package/dist/types/integrity-relay.d.ts +18 -0
  49. package/dist/types/kernel/children.d.ts +90 -0
  50. package/dist/types/kernel/clipboard.d.ts +49 -0
  51. package/dist/types/kernel/cpu-clock.d.ts +56 -0
  52. package/dist/types/kernel/cred.d.ts +17 -0
  53. package/dist/types/kernel/dgram.d.ts +56 -0
  54. package/dist/types/kernel/dial.d.ts +20 -0
  55. package/dist/types/kernel/epoll.d.ts +67 -0
  56. package/dist/types/kernel/eventfd.d.ts +19 -0
  57. package/dist/types/kernel/exec-ticket.d.ts +25 -0
  58. package/dist/types/kernel/fd-table.d.ts +107 -0
  59. package/dist/types/kernel/host-ops.d.ts +98 -0
  60. package/dist/types/kernel/host.d.ts +116 -0
  61. package/dist/types/kernel/jobs.d.ts +50 -0
  62. package/dist/types/kernel/locks.d.ts +40 -0
  63. package/dist/types/kernel/net/datagram-wire.d.ts +8 -0
  64. package/dist/types/kernel/net/http-syscalls.d.ts +58 -0
  65. package/dist/types/kernel/net/http1.d.ts +48 -0
  66. package/dist/types/kernel/net/loopback-names.d.ts +14 -0
  67. package/dist/types/kernel/net/loopback-transport.d.ts +13 -0
  68. package/dist/types/kernel/net/network.d.ts +29 -0
  69. package/dist/types/kernel/net/proxy-service.d.ts +70 -0
  70. package/dist/types/kernel/net/realm-ca.d.ts +28 -0
  71. package/dist/types/kernel/net/redirect-hops.d.ts +5 -0
  72. package/dist/types/kernel/net/remote-transport.d.ts +98 -0
  73. package/dist/types/kernel/net/resolver.d.ts +29 -0
  74. package/dist/types/kernel/net/routes.d.ts +15 -0
  75. package/dist/types/kernel/net/tls-engine.d.ts +46 -0
  76. package/dist/types/kernel/net/tls-tunnel.d.ts +35 -0
  77. package/dist/types/kernel/net/transport.d.ts +64 -0
  78. package/dist/types/kernel/net/uplink-socket.d.ts +11 -0
  79. package/dist/types/kernel/net/uplink.d.ts +163 -0
  80. package/dist/types/kernel/net/ws-queue.d.ts +21 -0
  81. package/dist/types/kernel/net/ws-syscalls.d.ts +45 -0
  82. package/dist/types/kernel/net/x509.d.ts +34 -0
  83. package/dist/types/kernel/pipe.d.ts +29 -0
  84. package/dist/types/kernel/proc-info.d.ts +44 -0
  85. package/dist/types/kernel/process.d.ts +525 -0
  86. package/dist/types/kernel/protocol.d.ts +126 -0
  87. package/dist/types/kernel/pty.d.ts +84 -0
  88. package/dist/types/kernel/run-child.d.ts +39 -0
  89. package/dist/types/kernel/scrub-file.d.ts +13 -0
  90. package/dist/types/kernel/sealed.d.ts +74 -0
  91. package/dist/types/kernel/select.d.ts +7 -0
  92. package/dist/types/kernel/sem.d.ts +72 -0
  93. package/dist/types/kernel/settling.d.ts +16 -0
  94. package/dist/types/kernel/signals.d.ts +44 -0
  95. package/dist/types/kernel/socket-syscalls.d.ts +74 -0
  96. package/dist/types/kernel/socket.d.ts +125 -0
  97. package/dist/types/kernel/timer.d.ts +4 -0
  98. package/dist/types/kernel/tty.d.ts +53 -0
  99. package/dist/types/kernel/vfs-file.d.ts +149 -0
  100. package/dist/types/launcher.d.ts +359 -0
  101. package/dist/types/local-proxy-transport.d.ts +39 -0
  102. package/dist/types/meta.d.ts +11 -0
  103. package/dist/types/mount/chunked.d.ts +9 -0
  104. package/dist/types/mount/connection.d.ts +35 -0
  105. package/dist/types/mount/driver.d.ts +50 -0
  106. package/dist/types/mount/fsa.d.ts +26 -0
  107. package/dist/types/mount/fstab.d.ts +17 -0
  108. package/dist/types/mount/host.d.ts +24 -0
  109. package/dist/types/mount/hostfs.d.ts +129 -0
  110. package/dist/types/mount/media.d.ts +8 -0
  111. package/dist/types/mount/medium.d.ts +12 -0
  112. package/dist/types/mount/mount-fs.d.ts +136 -0
  113. package/dist/types/mount/protocol.d.ts +140 -0
  114. package/dist/types/mount/syscall.d.ts +27 -0
  115. package/dist/types/mount/tmpfs.d.ts +2 -0
  116. package/dist/types/node/loopback.d.ts +11 -0
  117. package/dist/types/node/memory-root.d.ts +2 -0
  118. package/dist/types/node/ws-diagnose.d.ts +4 -0
  119. package/dist/types/node.d.ts +85 -0
  120. package/dist/types/process/fd-metadata.d.ts +4 -0
  121. package/dist/types/process/js/async-sab.d.ts +15 -0
  122. package/dist/types/process/js/js-children.d.ts +63 -0
  123. package/dist/types/process/js/js-context.d.ts +133 -0
  124. package/dist/types/process/js/js-dev.d.ts +50 -0
  125. package/dist/types/process/js/js-exit.d.ts +15 -0
  126. package/dist/types/process/js/js-fetch.d.ts +2 -0
  127. package/dist/types/process/js/js-io.d.ts +81 -0
  128. package/dist/types/process/js/js-kernel.d.ts +61 -0
  129. package/dist/types/process/js/js-net.d.ts +42 -0
  130. package/dist/types/process/js/js-proc.d.ts +31 -0
  131. package/dist/types/process/js/js-run.d.ts +35 -0
  132. package/dist/types/process/js/js-sync.d.ts +86 -0
  133. package/dist/types/process/js/js-tty.d.ts +30 -0
  134. package/dist/types/process/js/js-websocket.d.ts +21 -0
  135. package/dist/types/process/kernel-streams.d.ts +196 -0
  136. package/dist/types/process/process-fds.d.ts +95 -0
  137. package/dist/types/process/process-locks.d.ts +29 -0
  138. package/dist/types/process/process-pty.d.ts +20 -0
  139. package/dist/types/process/process-signals.d.ts +33 -0
  140. package/dist/types/process/procfs.d.ts +41 -0
  141. package/dist/types/process/wasi/dylink.d.ts +9 -0
  142. package/dist/types/process/wasi/slicc-lock.d.ts +26 -0
  143. package/dist/types/process/wasi/slicc-sem.d.ts +3 -0
  144. package/dist/types/process/wasi/wasi-abi.d.ts +156 -0
  145. package/dist/types/process/wasi/wasi-fds.d.ts +130 -0
  146. package/dist/types/process/wasi/wasi-files.d.ts +99 -0
  147. package/dist/types/process/wasi/wasi-host.d.ts +104 -0
  148. package/dist/types/process/wasi/wasi-memory.d.ts +16 -0
  149. package/dist/types/process/wasi/wasi-module.d.ts +13 -0
  150. package/dist/types/process/wasi/wasi-poll.d.ts +13 -0
  151. package/dist/types/process/wasi/wasi-procfs.d.ts +36 -0
  152. package/dist/types/process/wasi/wasi-sigmask.d.ts +19 -0
  153. package/dist/types/process/wasi/wasi-signals.d.ts +43 -0
  154. package/dist/types/process/wasi/wasi-termios.d.ts +10 -0
  155. package/dist/types/process/wasi/wasix-fork.d.ts +63 -0
  156. package/dist/types/process/wasi/wasix-linker.d.ts +108 -0
  157. package/dist/types/process/wasi/wasix-sockets.d.ts +9 -0
  158. package/dist/types/process/wasi/wasix-trampoline.d.ts +18 -0
  159. package/dist/types/process/wasi/wasm-functypes.d.ts +25 -0
  160. package/dist/types/process/wasi-errno.d.ts +1 -0
  161. package/dist/types/realm/emscripten-vfs-hook.d.ts +19 -0
  162. package/dist/types/realm/live-vfs-fs.d.ts +186 -0
  163. package/dist/types/realm/sync-fs-dispatch.d.ts +26 -0
  164. package/dist/types/realm/sync-fs-token-registry.d.ts +36 -0
  165. package/dist/types/realm/sync-fs-wire.d.ts +118 -0
  166. package/dist/types/realm/sync-sab-bridge.d.ts +21 -0
  167. package/dist/types/realm/sync-sab-responder.d.ts +16 -0
  168. package/dist/types/realm/sync-sab-wire.d.ts +64 -0
  169. package/dist/types/sealed-relay.d.ts +26 -0
  170. package/dist/types/serve.d.ts +190 -0
  171. package/dist/types/sudo-command.d.ts +4 -0
  172. package/dist/types/sudo.d.ts +105 -0
  173. package/dist/types/testing.d.ts +46 -0
  174. package/dist/types/transport.d.ts +25 -0
  175. package/dist/types/users.d.ts +86 -0
  176. package/dist/types/version.d.ts +3 -0
  177. package/dist/types/websocket-transport.d.ts +12 -0
  178. package/package.json +22 -6
@@ -0,0 +1,63 @@
1
+ import type { SyncFsResult } from '../../realm/sync-fs-wire.js';
2
+ import type { SyncSabRequestBody } from '../../realm/sync-sab-wire.js';
3
+ import { type JsKernel } from './js-kernel.js';
4
+ export interface SyncSpawnKernel {
5
+ json(req: SyncSabRequestBody): unknown;
6
+ raw(req: SyncSabRequestBody): SyncFsResult;
7
+ }
8
+ export type JsStdio = 'inherit' | 'pipe' | 'null' | number;
9
+ export interface JsSpawnOptions {
10
+ argv: readonly string[];
11
+ argv0?: string;
12
+ env?: Readonly<Record<string, string>>;
13
+ cwd?: string;
14
+ pgid?: number;
15
+ session?: boolean;
16
+ parentDeathSignal?: number | `SIG${string}`;
17
+ stdin?: JsStdio;
18
+ stdout?: JsStdio;
19
+ stderr?: JsStdio;
20
+ }
21
+ export interface JsExited {
22
+ status: number;
23
+ signal?: number;
24
+ stopped?: true;
25
+ }
26
+ export interface JsWaitOptions {
27
+ untraced?: boolean;
28
+ }
29
+ export interface JsChild {
30
+ readonly pid: number;
31
+ readonly stdin?: WritableStream<Uint8Array>;
32
+ readonly stdout?: ReadableStream<Uint8Array>;
33
+ readonly stderr?: ReadableStream<Uint8Array>;
34
+ wait(options?: JsWaitOptions): Promise<JsExited>;
35
+ kill(signal?: number | `SIG${string}`): Promise<void>;
36
+ }
37
+ export interface ChildIo {
38
+ read(fd: number, max: number | undefined, signal: AbortSignal): Promise<Uint8Array>;
39
+ send(fd: number, data: Uint8Array, signal: AbortSignal): Promise<void>;
40
+ close(fd: number): Promise<void>;
41
+ }
42
+ export interface ChildDefaults {
43
+ env: Readonly<Record<string, string>>;
44
+ cwd: string;
45
+ signal(name: number | `SIG${string}`): number;
46
+ }
47
+ export declare function exitedOf(status: number): JsExited;
48
+ export declare function childOps(kernel: JsKernel, io: ChildIo, defaults: ChildDefaults, sync: SyncSpawnKernel): {
49
+ spawn: (o: JsSpawnOptions) => Promise<JsChild>;
50
+ wait: (pid: number, options?: JsWaitOptions) => Promise<JsExited>;
51
+ kill: (pid: number, signal?: number | `SIG${string}`) => Promise<void>;
52
+ spawnSync: (o: JsSpawnOptions) => JsChild;
53
+ };
54
+ export declare function groupOf(o: {
55
+ pgid?: number;
56
+ session?: boolean;
57
+ }, call: string): {
58
+ pgid?: number;
59
+ session?: true;
60
+ };
61
+ export declare function argv0Of(argv0: unknown, call: string): {
62
+ argv0?: string;
63
+ };
@@ -0,0 +1,133 @@
1
+ import { type SyncFsBridgeStat } from '../../realm/sync-fs-wire.js';
2
+ import { type JsChild, type JsExited, type JsSpawnOptions, type JsWaitOptions } from './js-children.js';
3
+ import { type JsFdType, type JsOpenOptions, type JsStatFs } from './js-io.js';
4
+ import { type JsKernel } from './js-kernel.js';
5
+ import { type JsNet } from './js-net.js';
6
+ import { type JsSyncContext, type SyncCall } from './js-sync.js';
7
+ import { type JsTty } from './js-tty.js';
8
+ import { type JsWebSocket, type JsWebSocketOptions } from './js-websocket.js';
9
+ export type { JsFdType, JsOpenOptions } from './js-io.js';
10
+ export interface JsFile {
11
+ readonly fd: number;
12
+ readonly path: string;
13
+ size(): Promise<number>;
14
+ read(position: number, length: number): Promise<Uint8Array>;
15
+ write(position: number, data: Uint8Array): Promise<number>;
16
+ truncate(size: number): Promise<void>;
17
+ sync(): Promise<void>;
18
+ close(): Promise<void>;
19
+ }
20
+ export interface JsFdStatus {
21
+ type: JsFdType;
22
+ tty: boolean;
23
+ seekable: boolean;
24
+ }
25
+ export type JsSignal = number | `SIG${string}`;
26
+ export interface JsKernelInfo {
27
+ readonly version: string;
28
+ }
29
+ export declare const KERNEL_INFO: JsKernelInfo;
30
+ export interface JsProgramContext {
31
+ readonly kernel: JsKernelInfo;
32
+ readonly argv: readonly string[];
33
+ readonly env: Readonly<Record<string, string>>;
34
+ readonly pid: number;
35
+ ppid(): Promise<number>;
36
+ readonly cwd: string;
37
+ readonly stdin: ReadableStream<Uint8Array>;
38
+ readonly stdout: WritableStream<Uint8Array>;
39
+ readonly stderr: WritableStream<Uint8Array>;
40
+ read(fd: number, max?: number): Promise<Uint8Array>;
41
+ write(fd: number, data: Uint8Array | string): Promise<void>;
42
+ close(fd: number): Promise<void>;
43
+ fdStatus(fd: number): Promise<JsFdStatus>;
44
+ isatty(fd: number): Promise<boolean>;
45
+ open(path: string, options?: JsOpenOptions): Promise<JsFile>;
46
+ resolve(path: string): string;
47
+ fs: {
48
+ stat(path: string): Promise<SyncFsBridgeStat>;
49
+ lstat(path: string): Promise<SyncFsBridgeStat>;
50
+ exists(path: string): Promise<boolean>;
51
+ readdir(path: string): Promise<string[]>;
52
+ mkdir(path: string, options?: {
53
+ recursive?: boolean;
54
+ mode?: number;
55
+ }): Promise<void>;
56
+ rm(path: string): Promise<void>;
57
+ unlink(path: string): Promise<void>;
58
+ rename(from: string, to: string): Promise<void>;
59
+ chmod(path: string, mode: number): Promise<void>;
60
+ link(from: string, to: string): Promise<void>;
61
+ symlink(target: string, path: string): Promise<void>;
62
+ readlink(path: string): Promise<string>;
63
+ statfs(path: string): Promise<JsStatFs>;
64
+ readFile(path: string): Promise<Uint8Array>;
65
+ writeFile(path: string, data: Uint8Array | string, options?: {
66
+ mode?: number;
67
+ }): Promise<void>;
68
+ };
69
+ signals: {
70
+ on(signal: JsSignal, handler: (signal: number) => void): Promise<void>;
71
+ ignore(signal: JsSignal): Promise<void>;
72
+ reset(signal: JsSignal): Promise<void>;
73
+ };
74
+ sync: JsSyncContext;
75
+ spawn(options: JsSpawnOptions): Promise<JsChild>;
76
+ wait(pid: number, options?: JsWaitOptions): Promise<JsExited>;
77
+ kill(pid: number, signal?: JsSignal): Promise<void>;
78
+ sudo(args: readonly string[]): Promise<JsSudoAnswer>;
79
+ umask(mask?: number): Promise<number>;
80
+ net: JsNet;
81
+ websocket(url: string | URL, options?: JsWebSocketOptions): Promise<JsWebSocket>;
82
+ tty: JsTty;
83
+ fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;
84
+ exit(code?: number): never;
85
+ onUncaught(listener: JsStrayListener): () => void;
86
+ onUnhandledRejection(listener: JsStrayListener): () => void;
87
+ }
88
+ export type JsSudoAnswer = {
89
+ error: string;
90
+ errno: string;
91
+ } | {
92
+ list: string;
93
+ } | {
94
+ run: string[];
95
+ } | {
96
+ pid: number;
97
+ };
98
+ export type JsStrayListener = (error: unknown, promise?: Promise<unknown>) => void;
99
+ export interface JsStrays {
100
+ exception: Set<JsStrayListener>;
101
+ rejection: Set<JsStrayListener>;
102
+ }
103
+ export declare class JsExit extends Error {
104
+ readonly status: number;
105
+ constructor(status: number);
106
+ }
107
+ export interface ContextOptions {
108
+ kernel: JsKernel;
109
+ argv: readonly string[];
110
+ env: Readonly<Record<string, string>>;
111
+ pid: number;
112
+ ppid: number;
113
+ cwd: string;
114
+ exit(status: number): void;
115
+ random?: (bytes: Uint8Array) => void;
116
+ lane?: SyncCall;
117
+ strays?: JsStrays;
118
+ }
119
+ export interface Identity {
120
+ pid: number;
121
+ ppid: number;
122
+ }
123
+ export declare function identityOf(answer: unknown, fallback: {
124
+ pid: number;
125
+ ppid?: number;
126
+ }): Identity;
127
+ export declare function signalNumber(signal: JsSignal): number;
128
+ export declare function resolvePath(cwd: string, path: string): string;
129
+ export interface CreatedContext {
130
+ ctx: JsProgramContext;
131
+ drain(): Promise<unknown>;
132
+ }
133
+ export declare function createContext(o: ContextOptions): CreatedContext;
@@ -0,0 +1,50 @@
1
+ import { type SyncFsBridgeStat } from '../../realm/sync-fs-wire.js';
2
+ import type { SyncSabRequestBody } from '../../realm/sync-sab-wire.js';
3
+ import type { JsFile } from './js-context.js';
4
+ import { type JsOpenOptions } from './js-io.js';
5
+ import type { JsSyncFile } from './js-sync.js';
6
+ export type DevStep<T> = Generator<SyncSabRequestBody, T, unknown>;
7
+ export declare const DEV_READ_MAX: number;
8
+ export declare function inDev(abs: string): boolean;
9
+ export declare function devStat(abs: string, follow: boolean): DevStep<SyncFsBridgeStat>;
10
+ export declare function devExists(abs: string): DevStep<boolean>;
11
+ export declare function devReadlink(abs: string): DevStep<string>;
12
+ export declare function devResolveTarget(abs: string): DevStep<string | undefined>;
13
+ export declare function devReaddir(abs: string): DevStep<string[]>;
14
+ export interface DevOpened {
15
+ fd: number;
16
+ file: boolean;
17
+ read: boolean;
18
+ write: boolean;
19
+ }
20
+ export declare function devOpen(abs: string, o: JsOpenOptions): DevStep<DevOpened>;
21
+ export declare function devAsync<T>(kernel: {
22
+ json(req: SyncSabRequestBody): Promise<unknown>;
23
+ }, step: DevStep<T>): Promise<T>;
24
+ export declare function devSync<T>(kernel: {
25
+ json(req: SyncSabRequestBody): unknown;
26
+ }, step: DevStep<T>): T;
27
+ export interface StreamIo {
28
+ read(fd: number, max: number): Promise<Uint8Array>;
29
+ write(fd: number, data: Uint8Array): Promise<void>;
30
+ close(fd: number): Promise<void>;
31
+ }
32
+ export interface StreamSyncIo {
33
+ read(fd: number, max: number): Uint8Array;
34
+ write(fd: number, data: Uint8Array): void;
35
+ close(fd: number): void;
36
+ }
37
+ export interface StreamAccess {
38
+ read: boolean;
39
+ write: boolean;
40
+ }
41
+ export declare function streamFile(fd: number, path: string, io: StreamIo, access: StreamAccess): {
42
+ file: JsFile;
43
+ invalidate: () => void;
44
+ };
45
+ export declare function streamSyncFile(fd: number, path: string, io: StreamSyncIo, access: StreamAccess): {
46
+ file: JsSyncFile;
47
+ invalidate: () => void;
48
+ };
49
+ export declare function readWhole(file: JsFile): Promise<Uint8Array>;
50
+ export declare function readWholeSync(file: JsSyncFile): Uint8Array;
@@ -0,0 +1,15 @@
1
+ import type { SyncSabRequestBody } from '../../realm/sync-sab-wire.js';
2
+ import type { SyncCall } from './js-sync.js';
3
+ export interface PendingWrite {
4
+ fd: number;
5
+ data: Uint8Array;
6
+ at: number;
7
+ len: number;
8
+ op?: number;
9
+ }
10
+ export interface SavedMode {
11
+ terminal: string;
12
+ fd: number;
13
+ termios: unknown;
14
+ }
15
+ export declare function exitAtOnce(lane: SyncCall, writes: readonly PendingWrite[], modes: readonly SavedMode[], status: number, last?: SyncSabRequestBody): never;
@@ -0,0 +1,2 @@
1
+ import { type JsKernel } from './js-kernel.js';
2
+ export declare function fetchOp(kernel: JsKernel): (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;
@@ -0,0 +1,81 @@
1
+ import type { DeviceMeta, KernelFdKind } from '../../kernel/fd-table.js';
2
+ import { type SyncFsBridgeStat, type SyncFsResult } from '../../realm/sync-fs-wire.js';
3
+ export interface JsOpenOptions {
4
+ read?: boolean;
5
+ write?: boolean;
6
+ append?: boolean;
7
+ create?: boolean;
8
+ exclusive?: boolean;
9
+ truncate?: boolean;
10
+ mode?: number;
11
+ }
12
+ export type JsFdType = 'file' | 'pipe' | 'tty' | 'socket' | 'device' | 'directory';
13
+ export interface FdInfo {
14
+ tty?: boolean;
15
+ kind?: KernelFdKind;
16
+ meta?: DeviceMeta | {
17
+ dir: string;
18
+ };
19
+ terminal?: string;
20
+ access?: 'read' | 'write';
21
+ }
22
+ export declare const CHUNK: number;
23
+ export declare const MAX_IO: number;
24
+ export declare function typeOf(info: FdInfo): JsFdType;
25
+ export declare function readDevice(info: FdInfo, max: number, random: (bytes: Uint8Array) => void): Uint8Array | undefined;
26
+ export declare function writeDevice(info: FdInfo): boolean;
27
+ export declare function brokenPipe(err: unknown, info: FdInfo): boolean;
28
+ export declare function written(r: SyncFsResult, fallback: number): number;
29
+ export interface JsStatFs {
30
+ type: number;
31
+ bsize: number;
32
+ blocks: number;
33
+ bfree: number;
34
+ bavail: number;
35
+ files: number;
36
+ ffree: number;
37
+ quota: number;
38
+ usage: number;
39
+ }
40
+ export declare function statFsOf(json: unknown): JsStatFs;
41
+ export declare function joined(parts: Uint8Array[], length: number): Uint8Array;
42
+ export declare function fileWrite(fd: number, append: boolean, offset: number, body: Uint8Array): {
43
+ op: 'fd-write';
44
+ fd: number;
45
+ body: Uint8Array<ArrayBufferLike>;
46
+ offset?: undefined;
47
+ } | {
48
+ op: 'fd-pwrite';
49
+ fd: number;
50
+ offset: number;
51
+ body: Uint8Array<ArrayBufferLike>;
52
+ };
53
+ export declare function isExclusive(o: JsOpenOptions): boolean;
54
+ export declare function absent(err: unknown): undefined;
55
+ export declare function checkOpen(abs: string, o: JsOpenOptions, existing?: SyncFsBridgeStat): void;
56
+ export declare function openRequest(abs: string, o: JsOpenOptions): {
57
+ op: 'fd-open-vfs';
58
+ path: string;
59
+ flags: number;
60
+ position: number;
61
+ exclusive: boolean;
62
+ truncate?: boolean | undefined;
63
+ mode?: number | undefined;
64
+ } | {
65
+ op: 'fd-open-vfs';
66
+ path: string;
67
+ flags: number;
68
+ position: number;
69
+ create: boolean;
70
+ truncate?: boolean | undefined;
71
+ mode?: number | undefined;
72
+ } | {
73
+ op: 'fd-open-vfs';
74
+ path: string;
75
+ flags: number;
76
+ position: number;
77
+ existing: boolean;
78
+ truncate?: boolean | undefined;
79
+ mode?: number | undefined;
80
+ };
81
+ export declare function index(n: number, what: string): void;
@@ -0,0 +1,61 @@
1
+ import type { WasmSyscall } from '../../kernel/process.js';
2
+ import { type DefaultAction } from '../../kernel/signals.js';
3
+ import type { SyncFsResult } from '../../realm/sync-fs-wire.js';
4
+ import { type SyncSabRequestBody } from '../../realm/sync-sab-wire.js';
5
+ import { type AsyncSabTransport, type WaitAsyncLike } from './async-sab.js';
6
+ export declare class JsCallError extends Error {
7
+ readonly code: string;
8
+ constructor(code: string, what: string);
9
+ }
10
+ export declare function umaskRequest(mask: unknown): {
11
+ op: 'proc-umask';
12
+ mask?: number;
13
+ };
14
+ export declare function modeOf(mode: unknown): number;
15
+ export declare function callError(result: {
16
+ errno: string;
17
+ message: string;
18
+ }, op: string): JsCallError;
19
+ export type SignalHandler = (signal: number) => unknown;
20
+ export interface JsKernelOptions {
21
+ sab: SharedArrayBuffer;
22
+ transport: AsyncSabTransport;
23
+ waitAsync: WaitAsyncLike | undefined;
24
+ onError: (err: unknown) => void;
25
+ }
26
+ export declare class JsKernel {
27
+ private readonly header;
28
+ private readonly transport;
29
+ private readonly waitAsync;
30
+ private readonly onError;
31
+ private handlers;
32
+ private ignored;
33
+ private changing;
34
+ pid: number;
35
+ private reported;
36
+ private watching;
37
+ faulted: boolean;
38
+ syncLane: ((req: SyncSabRequestBody) => SyncFsResult) | undefined;
39
+ constructor(o: JsKernelOptions);
40
+ raw(req: SyncSabRequestBody): Promise<SyncFsResult>;
41
+ call(req: SyncSabRequestBody): Promise<SyncFsResult>;
42
+ json(req: SyncSabRequestBody): Promise<unknown>;
43
+ bytes(req: SyncSabRequestBody): Promise<Uint8Array>;
44
+ blocking(req: WasmSyscall, signal?: AbortSignal, track?: (id: number) => void): Promise<SyncFsResult>;
45
+ private acks;
46
+ ack(id: number): void;
47
+ private submit;
48
+ private settled;
49
+ deliver(): void;
50
+ private fault;
51
+ watch(): Promise<void>;
52
+ watchStops(): Promise<void>;
53
+ freeze(): void;
54
+ disposition(sig: number): 'caught' | 'ignored' | DefaultAction;
55
+ setHandler(sig: number, handler: SignalHandler | 'ignore' | 'default'): Promise<void>;
56
+ private changeNow;
57
+ private disposed;
58
+ private change;
59
+ private raise;
60
+ private report;
61
+ }
@@ -0,0 +1,42 @@
1
+ import { type JsKernel } from './js-kernel.js';
2
+ export interface JsAddress {
3
+ host: string;
4
+ port: number;
5
+ }
6
+ export interface JsConnection {
7
+ readonly fd: number;
8
+ readonly local: JsAddress;
9
+ readonly remote: JsAddress;
10
+ readonly readable: ReadableStream<Uint8Array>;
11
+ readonly writable: WritableStream<Uint8Array>;
12
+ close(): Promise<void>;
13
+ }
14
+ export interface JsListener extends AsyncIterable<JsConnection> {
15
+ readonly fd: number;
16
+ readonly host: string;
17
+ readonly port: number;
18
+ accept(options?: {
19
+ signal?: AbortSignal;
20
+ }): Promise<JsConnection>;
21
+ close(): Promise<void>;
22
+ }
23
+ export interface JsListenOptions {
24
+ port?: number;
25
+ host?: string;
26
+ backlog?: number;
27
+ }
28
+ export interface JsConnectOptions {
29
+ host?: string;
30
+ port: number;
31
+ signal?: AbortSignal;
32
+ }
33
+ export interface JsNet {
34
+ listen(options?: JsListenOptions): Promise<JsListener>;
35
+ connect(options: JsConnectOptions): Promise<JsConnection>;
36
+ }
37
+ export interface NetIo {
38
+ read(fd: number, max: number | undefined, signal: AbortSignal): Promise<Uint8Array>;
39
+ send(fd: number, data: Uint8Array, signal: AbortSignal): Promise<void>;
40
+ close(fd: number): Promise<void>;
41
+ }
42
+ export declare function netOps(kernel: JsKernel, io: NetIo): JsNet;
@@ -0,0 +1,31 @@
1
+ import type { SyncSabRequestBody } from '../../realm/sync-sab-wire.js';
2
+ import { inProc, ProcTree } from '../wasi/wasi-procfs.js';
3
+ import { type DevStep } from './js-dev.js';
4
+ export { inProc };
5
+ export declare function procStep<T>(abs: string, pid: number, run: (tree: ProcTree) => T): DevStep<T>;
6
+ export declare function readOnly(path: string): never;
7
+ export interface ProcOpenOptions {
8
+ write?: boolean;
9
+ append?: boolean;
10
+ create?: boolean;
11
+ truncate?: boolean;
12
+ exclusive?: boolean;
13
+ }
14
+ export declare function procWrites(options: ProcOpenOptions | undefined): boolean;
15
+ type ProcRun = <T>(step: DevStep<T>) => T | Promise<T>;
16
+ interface ProcPaths {
17
+ resolve: (path: string) => string;
18
+ pid: number;
19
+ }
20
+ export declare function withProc<F extends Record<string, unknown>>(fs: F, paths: ProcPaths, run: ProcRun): F;
21
+ export declare function procOpen<O, R>(open: (path: string, options?: O) => R, paths: ProcPaths, run: ProcRun, async?: boolean): (path: string, options?: O) => R;
22
+ type Lane = {
23
+ json(req: SyncSabRequestBody): unknown;
24
+ };
25
+ type AsyncLane = {
26
+ json(req: SyncSabRequestBody): Promise<unknown>;
27
+ };
28
+ export declare function procFsAsync<F extends object>(fs: F, kernel: AsyncLane, paths: ProcPaths): F;
29
+ export declare function procFsSync<F extends object>(fs: F, kernel: Lane, paths: ProcPaths): F;
30
+ export declare function procOpenAsync<O, R>(open: (path: string, options?: O) => R, kernel: AsyncLane, paths: ProcPaths): (path: string, options?: O | undefined) => R;
31
+ export declare function procOpenSync<O, R>(open: (path: string, options?: O) => R, kernel: Lane, paths: ProcPaths): (path: string, options?: O | undefined) => R;
@@ -0,0 +1,35 @@
1
+ import type { JsSyncKernel } from './js-sync.js';
2
+ export type JsRunStdio = 'pipe' | 'ignore' | 'inherit' | number;
3
+ export interface JsRunOptions {
4
+ argv: readonly string[];
5
+ argv0?: string;
6
+ env?: Readonly<Record<string, string>>;
7
+ cwd?: string;
8
+ pgid?: number;
9
+ session?: boolean;
10
+ input?: Uint8Array | string;
11
+ stdin?: JsRunStdio;
12
+ stdout?: JsRunStdio;
13
+ stderr?: JsRunStdio | 'stdout';
14
+ maxBuffer?: number;
15
+ timeout?: number;
16
+ killSignal?: number | `SIG${string}`;
17
+ }
18
+ export interface JsRunResult {
19
+ pid: number;
20
+ status: number | null;
21
+ signal?: number;
22
+ stdout?: Uint8Array;
23
+ stderr?: Uint8Array;
24
+ error?: {
25
+ code: string;
26
+ };
27
+ }
28
+ export interface RunDefaults {
29
+ env: Readonly<Record<string, string>>;
30
+ cwd: string;
31
+ resolve(path: string): string;
32
+ signal(name: number | `SIG${string}`): number;
33
+ }
34
+ export declare function decodeRun(bytes: Uint8Array, stdout: JsRunStdio, stderr: JsRunStdio | 'stdout'): JsRunResult;
35
+ export declare function runSync(kernel: JsSyncKernel, d: RunDefaults, o: JsRunOptions): JsRunResult;
@@ -0,0 +1,86 @@
1
+ import type { JsLane } from '../../kernel/protocol.js';
2
+ import { type SyncFsBridgeStat, type SyncFsResult } from '../../realm/sync-fs-wire.js';
3
+ import type { SyncSabRequestBody } from '../../realm/sync-sab-wire.js';
4
+ import type { JsChild, JsSpawnOptions } from './js-children.js';
5
+ import { type FdInfo, type JsOpenOptions, type JsStatFs } from './js-io.js';
6
+ import { type JsKernel } from './js-kernel.js';
7
+ import type { JsRunOptions, JsRunResult } from './js-run.js';
8
+ export type SyncCall = (req: SyncSabRequestBody) => SyncFsResult;
9
+ export interface JsSyncFile {
10
+ readonly fd: number;
11
+ readonly path: string;
12
+ size(): number;
13
+ read(position: number, length: number): Uint8Array;
14
+ write(position: number, data: Uint8Array): number;
15
+ truncate(size: number): void;
16
+ sync(): void;
17
+ close(): void;
18
+ }
19
+ export interface JsCred {
20
+ ruid: number;
21
+ euid: number;
22
+ suid: number;
23
+ rgid: number;
24
+ egid: number;
25
+ sgid: number;
26
+ groups: number[];
27
+ }
28
+ export interface JsSyncContext {
29
+ readonly kernel: {
30
+ readonly version: string;
31
+ };
32
+ run(options: JsRunOptions): JsRunResult;
33
+ spawn(options: JsSpawnOptions): JsChild;
34
+ exit(status?: number): never;
35
+ kill(pid: number, signal?: number | `SIG${string}`): void;
36
+ cred(): JsCred;
37
+ umask(mask?: number): number;
38
+ setcred(change: Partial<JsCred>): JsCred;
39
+ read(fd: number, max?: number): Uint8Array;
40
+ write(fd: number, data: Uint8Array | string): void;
41
+ close(fd: number): void;
42
+ open(path: string, options?: JsOpenOptions): JsSyncFile;
43
+ fs: {
44
+ stat(path: string): SyncFsBridgeStat;
45
+ lstat(path: string): SyncFsBridgeStat;
46
+ exists(path: string): boolean;
47
+ readdir(path: string): string[];
48
+ mkdir(path: string, options?: {
49
+ recursive?: boolean;
50
+ mode?: number;
51
+ }): void;
52
+ rm(path: string): void;
53
+ unlink(path: string): void;
54
+ rename(from: string, to: string): void;
55
+ chmod(path: string, mode: number): void;
56
+ link(from: string, to: string): void;
57
+ symlink(target: string, path: string): void;
58
+ readlink(path: string): string;
59
+ statfs(path: string): JsStatFs;
60
+ readFile(path: string): Uint8Array;
61
+ writeFile(path: string, data: Uint8Array | string, options?: {
62
+ mode?: number;
63
+ }): void;
64
+ };
65
+ }
66
+ export interface SyncShared {
67
+ pid: number;
68
+ resolve(path: string): string;
69
+ random(bytes: Uint8Array): void;
70
+ infos: Map<number, FdInfo>;
71
+ handles: Map<number, () => void>;
72
+ }
73
+ export declare const noLane: SyncCall;
74
+ export declare function laneOf(lane: JsLane | undefined): SyncCall;
75
+ export declare class JsSyncKernel {
76
+ private readonly lane;
77
+ private readonly kernel;
78
+ private readonly unwind;
79
+ constructor(lane: SyncCall, kernel: Pick<JsKernel, 'deliver'>, unwind?: () => void);
80
+ raw(req: SyncSabRequestBody): SyncFsResult;
81
+ call(req: SyncSabRequestBody): SyncFsResult;
82
+ json(req: SyncSabRequestBody): unknown;
83
+ bytes(req: SyncSabRequestBody): Uint8Array;
84
+ blocking(req: SyncSabRequestBody): SyncFsResult;
85
+ }
86
+ export declare function syncOps(kernel: JsSyncKernel, shared: SyncShared): Omit<JsSyncContext, 'run' | 'spawn' | 'exit' | 'kill' | 'cred' | 'setcred' | 'kernel' | 'umask'>;
@@ -0,0 +1,30 @@
1
+ import type { JsKernel } from './js-kernel.js';
2
+ export interface JsTermios {
3
+ c_iflag: number;
4
+ c_oflag: number;
5
+ c_cflag: number;
6
+ c_lflag: number;
7
+ c_cc: number[];
8
+ }
9
+ export interface JsTtySize {
10
+ columns: number;
11
+ rows: number;
12
+ }
13
+ export interface JsTty {
14
+ getAttr(fd: number): Promise<JsTermios>;
15
+ setAttr(fd: number, termios: JsTermios): Promise<void>;
16
+ setRaw(fd: number, raw: boolean): Promise<void>;
17
+ size(fd: number): Promise<JsTtySize>;
18
+ foreground(fd: number): Promise<number>;
19
+ setForeground(fd: number, pgrp: number): Promise<void>;
20
+ }
21
+ export declare function rawOf(termios: JsTermios): JsTermios;
22
+ export declare function ttyOps(kernel: JsKernel): {
23
+ tty: JsTty;
24
+ restore(): Promise<void>;
25
+ modes(): Array<{
26
+ terminal: string;
27
+ fd: number;
28
+ termios: JsTermios;
29
+ }>;
30
+ };
@@ -0,0 +1,21 @@
1
+ import { type JsKernel } from './js-kernel.js';
2
+ export type JsWebSocketMessage = string | Uint8Array;
3
+ export interface JsWebSocketClose {
4
+ code: number;
5
+ reason: string;
6
+ wasClean: boolean;
7
+ }
8
+ export interface JsWebSocketOptions {
9
+ protocols?: string | string[];
10
+ headers?: HeadersInit;
11
+ signal?: AbortSignal;
12
+ }
13
+ export interface JsWebSocket {
14
+ readonly url: string;
15
+ readonly protocol: string;
16
+ readonly readable: ReadableStream<JsWebSocketMessage>;
17
+ readonly writable: WritableStream<JsWebSocketMessage>;
18
+ readonly closed: Promise<JsWebSocketClose>;
19
+ close(close?: Partial<JsWebSocketClose>): void;
20
+ }
21
+ export declare function websocketOp(kernel: JsKernel): (input: string | URL, options?: JsWebSocketOptions) => Promise<JsWebSocket>;