@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,17 @@
1
+ import type { MountEntry, MountSpec } from './mount-fs.js';
2
+ export declare const FSTAB_PATH = "/etc/fstab";
3
+ export declare const FSTAB_RETRIES: number[];
4
+ export interface FstabLine {
5
+ line: number;
6
+ spec: MountSpec;
7
+ invalid?: Error;
8
+ }
9
+ export interface FstabResult {
10
+ line: number;
11
+ target: string;
12
+ entry?: MountEntry;
13
+ code?: string;
14
+ error?: string;
15
+ }
16
+ export declare function parseFstab(text: string): FstabLine[];
17
+ export declare function mountFstab(lines: readonly FstabLine[], mount: (spec: MountSpec) => Promise<MountEntry>, signal: AbortSignal, retries?: readonly number[], discard?: (entry: MountEntry) => void, settled?: (line: FstabLine, result: FstabResult) => void): Promise<FstabResult[]>;
@@ -0,0 +1,24 @@
1
+ import type { MessagePortLike } from '../client/protocol.js';
2
+ import type { RealmTransportRequest, RealmTransportResponse } from '../kernel/net/transport.js';
3
+ import { type FilesystemHandlers } from './driver.js';
4
+ import { type DriverCapabilities } from './protocol.js';
5
+ export interface DriverStart {
6
+ code: string;
7
+ driver: MessagePortLike;
8
+ client: MessagePortLike;
9
+ }
10
+ export interface DriverEnv {
11
+ fetch(request: Omit<RealmTransportRequest, 'signal'> & {
12
+ signal?: AbortSignal;
13
+ }): Promise<RealmTransportResponse>;
14
+ }
15
+ export type DriverFactory = (env: DriverEnv) => Promise<{
16
+ handlers: FilesystemHandlers;
17
+ capabilities?: DriverCapabilities;
18
+ }> | {
19
+ handlers: FilesystemHandlers;
20
+ capabilities?: DriverCapabilities;
21
+ };
22
+ export declare function hostDriver(start: DriverStart, load: (code: string) => Promise<{
23
+ default?: unknown;
24
+ }>): Promise<void>;
@@ -0,0 +1,129 @@
1
+ import { type MediumHandlers } from './medium.js';
2
+ import type { MountSpec, OpenedDriver } from './mount-fs.js';
3
+ import type { DriverCapabilities } from './protocol.js';
4
+ export interface HostfsGrant {
5
+ url: string;
6
+ token: string;
7
+ readonly?: boolean;
8
+ capabilities?: DriverCapabilities;
9
+ }
10
+ export interface HostfsPortGrant {
11
+ port: MessagePort;
12
+ token?: string;
13
+ capabilities?: DriverCapabilities;
14
+ }
15
+ export type HostfsGrantHook = (source: string, options: {
16
+ readonly: boolean;
17
+ }) => Promise<HostfsGrant | HostfsPortGrant>;
18
+ export type FetchLike = (url: string, init: RequestInit) => Promise<Response>;
19
+ export interface HostfsEvent {
20
+ paths?: string[];
21
+ all?: boolean;
22
+ ping?: number;
23
+ }
24
+ export interface HostfsTransport {
25
+ readonly capabilities: DriverCapabilities;
26
+ readonly token: string;
27
+ readonly maxIo: number;
28
+ readonly gone?: boolean;
29
+ retire?(why: string): void;
30
+ cleanup?(op: string, body: Record<string, unknown>): Promise<unknown>;
31
+ call<T>(op: string, body?: Record<string, unknown>, handle?: boolean): Promise<T>;
32
+ read(fh: number, offset: number, size: number, ifMatch?: string): Promise<Uint8Array>;
33
+ write(fh: number, offset: number, bytes: Uint8Array): Promise<void>;
34
+ watch(signal: AbortSignal, onEvent: (event: HostfsEvent) => void, onOpen?: () => void): Promise<void>;
35
+ }
36
+ export type HostfsConnect = (source: string, options: {
37
+ readonly: boolean;
38
+ }) => Promise<HostfsTransport>;
39
+ export declare const HOSTFS_IO: number;
40
+ export declare const unreachable: (err: unknown) => boolean;
41
+ export declare class HostfsClient implements HostfsTransport {
42
+ private grant;
43
+ private readonly regrant;
44
+ private readonly fetch;
45
+ constructor(grant: HostfsGrant, regrant: () => Promise<HostfsGrant>, fetch: FetchLike);
46
+ get capabilities(): DriverCapabilities;
47
+ get token(): string;
48
+ get maxIo(): number;
49
+ private retired;
50
+ private readonly stop;
51
+ get gone(): boolean;
52
+ retire(why: string): void;
53
+ private send;
54
+ call<T>(op: string, body?: Record<string, unknown>, handle?: boolean): Promise<T>;
55
+ cleanup(op: string, body: Record<string, unknown>): Promise<unknown>;
56
+ read(fh: number, offset: number, size: number, ifMatch?: string): Promise<Uint8Array>;
57
+ write(fh: number, offset: number, bytes: Uint8Array): Promise<void>;
58
+ watch(signal: AbortSignal, onEvent: (event: HostfsEvent) => void, onOpen?: () => void): Promise<void>;
59
+ }
60
+ export declare const RESTORE_AGAIN_MS = 30000;
61
+ export declare function hostfsHandlers(current: () => HostfsTransport, againMs?: number): MediumHandlers;
62
+ export interface WatchLoop {
63
+ connect(): Promise<HostfsTransport>;
64
+ up(client: HostfsTransport): void;
65
+ event(event: HostfsEvent): void;
66
+ down(): void;
67
+ silenceMs?: number;
68
+ backoffMs?: [number, number];
69
+ connectMs?: number;
70
+ }
71
+ export interface Watching {
72
+ ready: Promise<void>;
73
+ kick(): void;
74
+ }
75
+ export declare function keepWatching(loop: WatchLoop, signal: AbortSignal): Watching;
76
+ export declare function invalidation(event: HostfsEvent): string[] | true;
77
+ export interface HostfsTiming {
78
+ silenceMs?: number;
79
+ backoffMs?: [number, number];
80
+ connectMs?: number;
81
+ requestMs?: number;
82
+ callMs?: number;
83
+ beatMs?: number;
84
+ deadMs?: number;
85
+ }
86
+ export declare const PORT_REQUEST_MS = 60000;
87
+ export declare const HOSTFS_CALL_MS = 20000;
88
+ export declare const PORT_BEAT_MS = 1000;
89
+ export declare const PORT_DEAD_MS = 10000;
90
+ export declare const PORT_LINGER_MS = 1000;
91
+ export interface PortLiveness {
92
+ requestMs?: number;
93
+ beatMs?: number;
94
+ deadMs?: number;
95
+ lingerMs?: number;
96
+ }
97
+ export declare function timed(transport: HostfsTransport, ms: number): HostfsTransport;
98
+ export declare class PortTransport implements HostfsTransport {
99
+ readonly capabilities: DriverCapabilities;
100
+ readonly token: string;
101
+ private readonly port;
102
+ private readonly requestMs;
103
+ private readonly waiting;
104
+ private next;
105
+ private dead;
106
+ private readonly beatMs;
107
+ private readonly deadMs;
108
+ private readonly lingerMs;
109
+ private beat;
110
+ private answers;
111
+ private pinged;
112
+ constructor(grant: HostfsPortGrant, liveness?: PortLiveness);
113
+ get maxIo(): number;
114
+ get gone(): boolean;
115
+ retire(why: string): void;
116
+ private ping;
117
+ private watchBeat;
118
+ cleanup(op: string, body: Record<string, unknown>): Promise<void>;
119
+ private closed;
120
+ fail(why: string): void;
121
+ private ask;
122
+ call<T>(op: string, body?: Record<string, unknown>): Promise<T>;
123
+ read(fh: number, offset: number, size: number, ifMatch?: string): Promise<Uint8Array>;
124
+ write(fh: number, offset: number, bytes: Uint8Array): Promise<void>;
125
+ watch(signal: AbortSignal, onEvent: (event: HostfsEvent) => void, onOpen?: () => void): Promise<void>;
126
+ }
127
+ export declare function serveHostfsPort(port: MessagePort, transport: HostfsTransport): () => void;
128
+ export declare function grantConnect(hook: HostfsGrantHook, fetch: FetchLike, liveness?: PortLiveness): HostfsConnect;
129
+ export declare function openHostfs(spec: MountSpec, connect: HostfsConnect, timing?: HostfsTiming): Promise<OpenedDriver>;
@@ -0,0 +1,8 @@
1
+ import type { MediumHandle } from './fsa.js';
2
+ export interface MediaStore {
3
+ get(id: string): Promise<MediumHandle | undefined>;
4
+ put(id: string, handle: MediumHandle): Promise<void>;
5
+ }
6
+ export declare const MEDIA_STORE = "handles";
7
+ export declare function memoryMedia(): MediaStore;
8
+ export declare function openMedia(name: string, factory: IDBFactory): Promise<MediaStore>;
@@ -0,0 +1,12 @@
1
+ import { type FilesystemHandlers } from './driver.js';
2
+ export type MediumHandlers = Required<Omit<FilesystemHandlers, 'mount' | 'statfs' | 'link'>> & Pick<FilesystemHandlers, 'statfs'>;
3
+ export interface MediumSlot<K> {
4
+ readonly handlers: FilesystemHandlers;
5
+ present(): boolean;
6
+ insert(key: K, handlers: MediumHandlers): void;
7
+ eject(): void;
8
+ }
9
+ export declare const absent: () => Error & {
10
+ code: string;
11
+ };
12
+ export declare function mediumSlot<K>(lost: (err: unknown, key: K) => Promise<boolean>, onLost: (key: K) => void): MediumSlot<K>;
@@ -0,0 +1,136 @@
1
+ import { type KernelFs } from '../fs/types.js';
2
+ import type { KeptFile, UnlinkHolder } from '../fs/unlinked.js';
3
+ import { DriverConnection, type DriverPortLike } from './connection.js';
4
+ import type { DriverAttr, DriverCapabilities, DriverEntry } from './protocol.js';
5
+ export interface MountSpec {
6
+ type: string;
7
+ source: string;
8
+ target: string;
9
+ options?: Record<string, string>;
10
+ }
11
+ export interface MountEntry {
12
+ type: string;
13
+ source: string;
14
+ target: string;
15
+ options: Record<string, string>;
16
+ state: 'ok' | 'failed' | 'nomedium' | 'pending';
17
+ error?: string;
18
+ }
19
+ export interface OpenedDriver {
20
+ port: DriverPortLike;
21
+ dispose(): void;
22
+ onCrash?(listener: (error: Error) => void): void;
23
+ present?(): boolean;
24
+ idle?: true;
25
+ }
26
+ export interface MountDeps {
27
+ open(type: string, spec: MountSpec): Promise<OpenedDriver>;
28
+ busy(target: string): boolean;
29
+ changed?(...paths: string[]): void;
30
+ reshaped?(): void;
31
+ timeoutMs?: number;
32
+ owners?: boolean;
33
+ }
34
+ interface Cached<T> {
35
+ value: T;
36
+ expires: number;
37
+ }
38
+ interface Mount extends MountEntry {
39
+ dev: number;
40
+ conn: DriverConnection;
41
+ caps: DriverCapabilities;
42
+ maxFile: number;
43
+ attrs: Map<string, Cached<DriverAttr>>;
44
+ lists: Map<string, Cached<DriverEntry[]>>;
45
+ epoch: number;
46
+ owners: boolean;
47
+ dispose(): void;
48
+ present?(): boolean;
49
+ }
50
+ export declare function parseSize(text: string): number;
51
+ export declare class HeldSet extends Set<HeldPaths> {
52
+ private readonly idle;
53
+ constructor(idle: (path: string) => void);
54
+ add(holds: HeldPaths): this;
55
+ delete(holds: HeldPaths): boolean;
56
+ }
57
+ export declare function heldUnder(held: Iterable<Map<string, number>>, target: string): boolean;
58
+ export declare class HeldPaths extends Map<string, number> implements UnlinkHolder {
59
+ private readonly revoked;
60
+ readonly opens: Map<string, number>;
61
+ readonly unlinked: Map<string, KeptFile>;
62
+ private readonly aliases;
63
+ private readonly handles;
64
+ private readonly keptHandles;
65
+ private readonly uses;
66
+ private lastHandle;
67
+ private owning;
68
+ onIdle?: (path: string) => void;
69
+ keyOf(path: string): string;
70
+ keptAt(path: string): KeptFile | undefined;
71
+ holding(path: string): boolean;
72
+ held(): Iterable<string>;
73
+ isKept(path: string): boolean;
74
+ private handlesAt;
75
+ keptFor(handle: number): KeptFile | undefined;
76
+ keeps(hidden: string): boolean;
77
+ keep(path: string, file: KeptFile): void;
78
+ unkeep(path: string, file: KeptFile): void;
79
+ private letGo;
80
+ releaseAll(): void;
81
+ hold(path: string, on: boolean, open?: boolean, real?: string, handle?: number): number | undefined;
82
+ private holdOpen;
83
+ private holdWrite;
84
+ own<T>(path: string, op: () => Promise<T>): Promise<T>;
85
+ owns(path: string): boolean;
86
+ revoke(prefix: string): void;
87
+ renamed(from: string, to: string): void;
88
+ isRevoked(path: string): boolean;
89
+ }
90
+ interface WriteSession {
91
+ mount: Mount;
92
+ fh: Promise<number>;
93
+ extents: Array<[number, number]>;
94
+ truncated: boolean;
95
+ }
96
+ export declare class MountTable {
97
+ private readonly mounts;
98
+ private readonly sessions;
99
+ private readonly committing;
100
+ private devices;
101
+ private readonly pending;
102
+ private readonly notes;
103
+ private readonly system;
104
+ private readonly deps;
105
+ constructor(deps: MountDeps);
106
+ mounted(target: string): MountEntry | undefined;
107
+ list(): MountEntry[];
108
+ listed(): MountEntry[];
109
+ mountSystem(spec: MountSpec, fs: KernelFs): Promise<void>;
110
+ note(spec: MountSpec, state: 'pending' | 'failed', error?: string): void;
111
+ under(path: string): boolean;
112
+ locate(path: string): {
113
+ mount: Mount;
114
+ rel: string;
115
+ } | undefined;
116
+ mount(spec: MountSpec, fs: KernelFs): Promise<MountEntry>;
117
+ private attach;
118
+ unnote(target: string): void;
119
+ umount(target: string, detach?: boolean): void;
120
+ session(mount: Mount, real: string, rel: string): WriteSession;
121
+ writing(real: string): WriteSession | undefined;
122
+ commit(real: string): Promise<void>;
123
+ commitUnder(prefix: string): Promise<void>;
124
+ commitOverlapping(real: string, offset: number, length: number): Promise<void>;
125
+ private crashed;
126
+ private invalidated;
127
+ forget(mount: Mount, path: string): void;
128
+ getattr(mount: Mount, path: string, rel: string, settled?: boolean): Promise<DriverAttr>;
129
+ readdir(mount: Mount, path: string, rel: string): Promise<DriverEntry[]>;
130
+ statfs(path: string): Promise<{
131
+ quota: number;
132
+ usage: number;
133
+ } | undefined>;
134
+ wrap(base: KernelFs): KernelFs;
135
+ }
136
+ export {};
@@ -0,0 +1,140 @@
1
+ export declare const DRIVER_PROTOCOL: readonly [number, number];
2
+ export interface DriverCapabilities {
3
+ readonly?: boolean;
4
+ symlinks?: boolean;
5
+ links?: boolean;
6
+ chmod?: boolean;
7
+ owners?: boolean;
8
+ linkTimes?: boolean;
9
+ ranges?: boolean;
10
+ sessions?: boolean;
11
+ listingStats?: boolean;
12
+ caseInsensitive?: boolean;
13
+ normalization?: 'none' | 'nfc' | 'nfd-insensitive';
14
+ maxIo?: number;
15
+ maxFile?: number;
16
+ attrTtl?: number;
17
+ entryTtl?: number;
18
+ }
19
+ export interface DriverAttr {
20
+ kind: 'file' | 'directory' | 'symlink';
21
+ size: number;
22
+ mtime: number;
23
+ atime?: number;
24
+ mode?: number;
25
+ ino?: number;
26
+ nlink?: number;
27
+ etag?: string;
28
+ uid?: number;
29
+ gid?: number;
30
+ }
31
+ export interface DriverOwner {
32
+ uid?: number;
33
+ gid?: number;
34
+ mode?: number;
35
+ }
36
+ export interface DriverEntry {
37
+ name: string;
38
+ kind: DriverAttr['kind'];
39
+ attr?: DriverAttr;
40
+ }
41
+ export interface DriverStatfs {
42
+ bsize: number;
43
+ blocks: number;
44
+ bfree: number;
45
+ }
46
+ export interface MountRequestInfo {
47
+ source: string;
48
+ options: Record<string, string>;
49
+ }
50
+ export type DriverCall = {
51
+ op: 'getattr';
52
+ path: string;
53
+ } | {
54
+ op: 'readdir';
55
+ path: string;
56
+ } | ({
57
+ op: 'open';
58
+ path: string;
59
+ write: boolean;
60
+ create: boolean;
61
+ truncate: boolean;
62
+ exclusive: boolean;
63
+ ifMatch?: string;
64
+ } & DriverOwner) | {
65
+ op: 'read';
66
+ fh: number;
67
+ offset: number;
68
+ size: number;
69
+ } | {
70
+ op: 'write';
71
+ fh: number;
72
+ offset: number;
73
+ bytes: Uint8Array;
74
+ } | {
75
+ op: 'release';
76
+ fh: number;
77
+ } | ({
78
+ op: 'mkdir';
79
+ path: string;
80
+ } & DriverOwner) | {
81
+ op: 'rmdir';
82
+ path: string;
83
+ } | {
84
+ op: 'unlink';
85
+ path: string;
86
+ } | {
87
+ op: 'rename';
88
+ from: string;
89
+ to: string;
90
+ } | {
91
+ op: 'link';
92
+ from: string;
93
+ to: string;
94
+ } | ({
95
+ op: 'symlink';
96
+ target: string;
97
+ path: string;
98
+ } & DriverOwner) | {
99
+ op: 'readlink';
100
+ path: string;
101
+ } | {
102
+ op: 'setattr';
103
+ path: string;
104
+ mode?: number;
105
+ mtime?: number;
106
+ atime?: number;
107
+ size?: number;
108
+ uid?: number;
109
+ gid?: number;
110
+ } | {
111
+ op: 'statfs';
112
+ };
113
+ export type DriverRequest = DriverCall & {
114
+ id: number;
115
+ };
116
+ export interface DriverReply {
117
+ id: number;
118
+ result?: unknown;
119
+ errno?: string;
120
+ message?: string;
121
+ }
122
+ export interface KernelDriverHello {
123
+ protocol: readonly [number, number];
124
+ mount: MountRequestInfo;
125
+ }
126
+ export interface DriverHello {
127
+ protocol: readonly [number, number];
128
+ capabilities?: DriverCapabilities;
129
+ error?: string;
130
+ errno?: string;
131
+ }
132
+ export type KernelToDriver = {
133
+ hello: KernelDriverHello;
134
+ } | DriverRequest;
135
+ export type DriverToKernel = {
136
+ hello: DriverHello;
137
+ } | DriverReply | {
138
+ invalidate: string[] | true;
139
+ };
140
+ export declare function driverVersionError(theirs: unknown): string | undefined;
@@ -0,0 +1,27 @@
1
+ import { type MountSpec } from './mount-fs.js';
2
+ export declare const MS_RDONLY = 1;
3
+ export declare const MNT_FORCE = 1;
4
+ export declare const MNT_DETACH = 2;
5
+ export interface MountCall {
6
+ source: string;
7
+ target: string;
8
+ type: string;
9
+ flags: number;
10
+ data: string;
11
+ }
12
+ export interface ProcessMountRequest {
13
+ op: 'mount' | 'umount';
14
+ pid: number;
15
+ target: string;
16
+ type?: string;
17
+ source?: string;
18
+ options?: Record<string, string>;
19
+ }
20
+ export type ProcessMountPolicy = boolean | ((req: ProcessMountRequest) => boolean | Promise<boolean>);
21
+ export declare function parseMountOptions(data: string): Record<string, string>;
22
+ export declare function refusedTarget(target: string): void;
23
+ export declare function mountCall(call: MountCall): MountSpec;
24
+ export declare function umountCall(target: string, flags: number): {
25
+ target: string;
26
+ detach: boolean;
27
+ };
@@ -0,0 +1,2 @@
1
+ import { type FilesystemHandlers } from './driver.js';
2
+ export declare function tmpfs(): FilesystemHandlers;
@@ -0,0 +1,11 @@
1
+ import type { RealmTransport } from '../kernel/net/transport.js';
2
+ export type HostLoopback = boolean | readonly number[];
3
+ export declare const DEVTOOLS_PORTS: readonly number[];
4
+ export type Resolve = (host: string) => Promise<string[]>;
5
+ type Place = 'loopback' | 'link-local';
6
+ export declare const resolveHost: Resolve;
7
+ export declare function placeOf(address: string): Place | undefined;
8
+ export declare function checkDestination(target: string, policy: HostLoopback, resolve?: Resolve): Promise<void>;
9
+ export declare function proxiedConnections(): number;
10
+ export declare function guardedLoopback(transport: RealmTransport, policy: HostLoopback, resolve?: Resolve): RealmTransport;
11
+ export {};
@@ -0,0 +1,2 @@
1
+ export declare function memoryRoot(): FileSystemDirectoryHandle;
2
+ export declare function isMemoryRoot(handle: FileSystemDirectoryHandle): boolean;
@@ -0,0 +1,4 @@
1
+ import type { RealmTransport } from '../kernel/net/transport.js';
2
+ export type Diagnose = (url: string, signal?: AbortSignal) => Promise<string | undefined>;
3
+ export declare function diagnose(url: string, ms?: number, signal?: AbortSignal): Promise<string | undefined>;
4
+ export declare function diagnosing(transport: RealmTransport, check?: Diagnose): RealmTransport;
@@ -0,0 +1,85 @@
1
+ import { type MessagePort } from 'node:worker_threads';
2
+ import type { CdpHook } from './cdp/types.js';
3
+ import type { FacadeSpecs } from './facade/types.js';
4
+ import type { DenialHook } from './fs/dac.js';
5
+ import type { Protection } from './fs/protect.js';
6
+ import { type UsersMode } from './fs/types.js';
7
+ import type { ConnectOptions, KernelGroups, KernelIntegrity, KernelUsers, RunOptions, RunResult, Terminal, TerminalOptions } from './index.js';
8
+ import type { ClipboardHook } from './kernel/clipboard.js';
9
+ import type { RouteTable } from './kernel/net/routes.js';
10
+ import type { NetworkUplink } from './kernel/net/uplink.js';
11
+ import type { SealedHook } from './kernel/sealed.js';
12
+ import type { FetchLike, HostfsGrantHook } from './mount/hostfs.js';
13
+ import type { MountEntry, MountSpec } from './mount/mount-fs.js';
14
+ import type { ProcessMountPolicy } from './mount/syscall.js';
15
+ import { type HostLoopback } from './node/loopback.js';
16
+ import { memoryRoot } from './node/memory-root.js';
17
+ import type { ApproveHook } from './sudo.js';
18
+ import { type NetworkTransport } from './transport.js';
19
+ export type { CdpConnection, CdpHook, CdpRequest } from './cdp/types.js';
20
+ export { type AttachOptions, attachKernel, type ClientEnded, type ClientFetchRequest, type ClientFs, type ClientRunOptions, type ClientRunResult, type ClientTerminal, type ClientTerminalOptions, KernelCallError, type KernelClient, KernelGoneError, type ProcessEntry, type SpawnedProcess, type SpawnOptions, type WatchChange, } from './client/attach.js';
21
+ export type { FacadeConnection, FacadeHook, FacadeInfo, FacadeSpec, FacadeSpecs, } from './facade/types.js';
22
+ export type { Denial, DenialHook } from './fs/dac.js';
23
+ export type { ConnectOptions, Ended, KernelGroups, KernelIntegrity, KernelUsers, NetworkUplink, ResolveAnswer, ResolveFamily, RouteTable, RunOptions, RunResult, Terminal, TerminalOptions, TerminalSignal, } from './index.js';
24
+ export type { ClipboardHook, ClipboardStamp } from './kernel/clipboard.js';
25
+ export type { SealedAbortReason, SealedCaller, SealedHook, SealedRequest, } from './kernel/sealed.js';
26
+ export type { ConnectorStamp } from './kernel/socket.js';
27
+ export type { HostfsEvent, HostfsGrant, HostfsGrantHook, HostfsPortGrant, HostfsTransport, } from './mount/hostfs.js';
28
+ export { serveHostfsPort } from './mount/hostfs.js';
29
+ export type { MountEntry, MountSpec } from './mount/mount-fs.js';
30
+ export type { ApproveHook, SudoAnswer, SudoRequest } from './sudo.js';
31
+ export { fetchTransport, type NetworkTransport } from './transport.js';
32
+ export { memoryRoot };
33
+ export interface NodeKernelOptions {
34
+ root?: FileSystemDirectoryHandle;
35
+ modules?: string;
36
+ commands?: {
37
+ append?: readonly string[];
38
+ };
39
+ env?: Record<string, string>;
40
+ network?: {
41
+ transport?: NetworkTransport;
42
+ uplink?: NetworkUplink;
43
+ };
44
+ worker?: string | URL;
45
+ driverWorker?: string | URL;
46
+ processMounts?: ProcessMountPolicy;
47
+ fstabRetries?: readonly number[];
48
+ hostfs?: HostfsGrantHook;
49
+ hostfsFetch?: FetchLike;
50
+ hostfsOrigin?: string;
51
+ cdp?: CdpHook;
52
+ facades?: FacadeSpecs;
53
+ hostname?: string;
54
+ users?: UsersMode;
55
+ onDenial?: DenialHook;
56
+ sealed?: SealedHook;
57
+ clipboard?: ClipboardHook;
58
+ approve?: ApproveHook;
59
+ protect?: Protection;
60
+ }
61
+ export interface NodeKernel {
62
+ readonly root: FileSystemDirectoryHandle;
63
+ run(argv: string[], options?: RunOptions): Promise<RunResult>;
64
+ openTerminal(argv: string[], options?: TerminalOptions): Promise<Terminal>;
65
+ writeFile(path: string, data: string | Uint8Array, options?: {
66
+ mode?: number;
67
+ }): Promise<void>;
68
+ readFile(path: string): Promise<Uint8Array>;
69
+ chmod(path: string, mode: number): Promise<void>;
70
+ readonly integrity: KernelIntegrity;
71
+ connect(options?: ConnectOptions): Promise<MessagePort>;
72
+ readonly users: KernelUsers;
73
+ readonly groups: KernelGroups;
74
+ setRoutes(routes: RouteTable): Promise<void>;
75
+ updateTransportTraits(): Promise<boolean>;
76
+ mount(spec: MountSpec): Promise<MountEntry>;
77
+ umount(target: string): Promise<void>;
78
+ mounts(): Promise<MountEntry[]>;
79
+ terminate(): void;
80
+ }
81
+ export interface NodeTransportOptions {
82
+ hostLoopback?: HostLoopback;
83
+ }
84
+ export declare function nodeTransport(options?: NodeTransportOptions): NetworkTransport;
85
+ export declare function createNodeKernel(options?: NodeKernelOptions): Promise<NodeKernel>;
@@ -0,0 +1,4 @@
1
+ import type { ProcessFs, ProcessSys } from './kernel-streams.js';
2
+ type Call = <T>(syscall: () => T) => T;
3
+ export declare function useKernelFdMetadata(Fs: ProcessFs, sys: ProcessSys, call: Call): void;
4
+ export {};
@@ -0,0 +1,15 @@
1
+ import type { SyncFsResult } from '../../realm/sync-fs-wire.js';
2
+ import type { SabPostLike } from '../../realm/sync-sab-bridge.js';
3
+ import { type SyncSabRequestBody } from '../../realm/sync-sab-wire.js';
4
+ export type WaitAsyncLike = (typedArray: Int32Array, index: number, value: number) => {
5
+ async: false;
6
+ value: string;
7
+ } | {
8
+ async: true;
9
+ value: Promise<string>;
10
+ };
11
+ export interface AsyncSabTransport {
12
+ call(req: SyncSabRequestBody): Promise<SyncFsResult>;
13
+ }
14
+ export declare function changed(header: Int32Array, index: number, seen: number, waitAsync?: WaitAsyncLike): Promise<void>;
15
+ export declare function createAsyncSabTransport(sab: SharedArrayBuffer, port: SabPostLike, waitAsync?: WaitAsyncLike): AsyncSabTransport;