@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,73 @@
1
+ import type { ChangeView } from './changes.js';
2
+ type WatchStat = {
3
+ size: number;
4
+ version?: string | undefined;
5
+ ino?: number | undefined;
6
+ mtimeMs?: number | undefined;
7
+ nlink?: number | undefined;
8
+ };
9
+ export interface RangedWatch {
10
+ view: ChangeView;
11
+ ino?: number | undefined;
12
+ seen?: number | undefined;
13
+ stat(path: string): WatchStat;
14
+ real?: () => string | undefined;
15
+ linked?: boolean;
16
+ resolved?: string | null;
17
+ sig?: string;
18
+ }
19
+ export declare const signatureOf: (st: WatchStat) => string;
20
+ export declare function linkedWatch<T extends RangedWatch>(watch: T, st: WatchStat): T;
21
+ export declare function watchedChange(watch: RangedWatch, seen: number, path: string): {
22
+ now: number;
23
+ changed: boolean;
24
+ };
25
+ export interface RangedIo {
26
+ pread(path: string, offset: number, length: number, version?: string): Uint8Array;
27
+ pwrite(path: string, offset: number, bytes: Uint8Array, transfer?: boolean): void;
28
+ truncate(path: string, size: number): void;
29
+ }
30
+ export interface AsyncRangedIo {
31
+ pread(path: string, offset: number, length: number, version?: string): Promise<Uint8Array>;
32
+ pwrite(path: string, offset: number, bytes: Uint8Array, transfer?: boolean): Promise<void>;
33
+ truncate(path: string, size: number): Promise<void>;
34
+ }
35
+ export declare class RangedFile {
36
+ private readonly pages;
37
+ private readonly io;
38
+ private pinned;
39
+ private version;
40
+ private readonly watch;
41
+ private seen;
42
+ path: string;
43
+ constructor(io: RangedIo, path: string, size: number, version?: string, watch?: RangedWatch);
44
+ private fresh;
45
+ get changed(): boolean;
46
+ get pinnedVersion(): string | undefined;
47
+ forget(): void;
48
+ size(): number;
49
+ private fetch;
50
+ read(at: number, length: number): Uint8Array;
51
+ readInto(at: number, out: Uint8Array): number;
52
+ write(at: number, bytes: Uint8Array): void;
53
+ truncate(size: number): void;
54
+ flush(): void;
55
+ pin(): void;
56
+ reset(size: number): void;
57
+ }
58
+ export declare class AsyncRangedFile {
59
+ private readonly pages;
60
+ private readonly io;
61
+ private pinned;
62
+ private version;
63
+ path: string;
64
+ constructor(io: AsyncRangedIo, path: string, size: number, version?: string);
65
+ size(): number;
66
+ private fetch;
67
+ read(at: number, length: number): Promise<Uint8Array>;
68
+ write(at: number, bytes: Uint8Array): Promise<void>;
69
+ truncate(size: number): void;
70
+ flush(): Promise<void>;
71
+ pin(): Promise<void>;
72
+ }
73
+ export {};
@@ -0,0 +1,45 @@
1
+ export interface RemoteChange {
2
+ paths: readonly string[];
3
+ trees: readonly string[];
4
+ }
5
+ export type RemoteListener = (change: RemoteChange) => void;
6
+ export declare const ANNOUNCE_WAIT_MS = 500;
7
+ export declare const PRUNE_EVERY_MS = 30000;
8
+ export interface LockManagerLike {
9
+ request(name: string, callback: () => Promise<void>): Promise<unknown>;
10
+ query(): Promise<{
11
+ held?: Array<{
12
+ name?: string;
13
+ }>;
14
+ }>;
15
+ }
16
+ export declare function lockManager(): LockManagerLike | undefined;
17
+ export declare class RemoteWatch {
18
+ private readonly channel;
19
+ private readonly name;
20
+ private readonly tab;
21
+ private readonly peers;
22
+ private readonly others;
23
+ private readonly union;
24
+ private readonly listeners;
25
+ private readonly waiting;
26
+ private readonly locks;
27
+ private mine;
28
+ private seq;
29
+ private pruned;
30
+ constructor(name: string, options?: {
31
+ locks?: LockManagerLike | null;
32
+ });
33
+ private lockOf;
34
+ private receive;
35
+ private greeted;
36
+ private announced;
37
+ private acked;
38
+ private rebuild;
39
+ prune(): Promise<void>;
40
+ watched(): boolean;
41
+ wrote(path: string): void;
42
+ announce(paths: readonly string[]): Promise<void>;
43
+ emit(change: RemoteChange): void;
44
+ listen(listener: RemoteListener): () => void;
45
+ }
@@ -0,0 +1,115 @@
1
+ export interface FsStat {
2
+ isFile: boolean;
3
+ isDirectory: boolean;
4
+ isSymbolicLink: boolean;
5
+ size: number;
6
+ mode: number;
7
+ mtime: Date;
8
+ atime: Date;
9
+ ctime: Date;
10
+ ino: number;
11
+ nlink?: number;
12
+ dev?: number;
13
+ readonly?: boolean;
14
+ maxFile?: number;
15
+ ranged?: boolean;
16
+ linkable?: boolean;
17
+ version?: string;
18
+ uid?: number;
19
+ gid?: number;
20
+ }
21
+ export type UsersMode = 'off' | 'report' | 'enforce';
22
+ export declare const DEFAULT_USERS: UsersMode;
23
+ export interface Owner {
24
+ uid: number;
25
+ gid: number;
26
+ }
27
+ export interface Perm {
28
+ uid: number;
29
+ gid: number;
30
+ mode?: number;
31
+ link?: string;
32
+ }
33
+ export interface NewOwner extends Owner {
34
+ mode?: number;
35
+ parents?: number;
36
+ }
37
+ export interface OwnerChange {
38
+ uid?: number;
39
+ gid?: number;
40
+ follow?: boolean;
41
+ kind?: 'chown' | 'adopt' | 'new';
42
+ mode?: number;
43
+ }
44
+ export interface HeldEntry {
45
+ writeFile: KernelFs['writeFile'];
46
+ direct: boolean;
47
+ }
48
+ export interface KernelFs {
49
+ resolvePath(base: string, path: string): string;
50
+ exclusive?<T>(path: string, run: (held: HeldEntry) => Promise<T>, follow?: boolean): Promise<T>;
51
+ readFile(path: string): Promise<string>;
52
+ readFileBuffer(path: string): Promise<Uint8Array>;
53
+ writeFile(path: string, content: Uint8Array | string, owner?: NewOwner): Promise<void>;
54
+ exists(path: string): Promise<boolean>;
55
+ stat(path: string): Promise<FsStat>;
56
+ lstat(path: string): Promise<FsStat>;
57
+ readdir(path: string): Promise<string[]>;
58
+ readdirStat(path: string): Promise<Array<[string, FsStat | null]>>;
59
+ mkdir(path: string, options?: {
60
+ recursive?: boolean;
61
+ owner?: NewOwner;
62
+ }): Promise<void>;
63
+ rm(path: string, options?: {
64
+ recursive?: boolean;
65
+ force?: boolean;
66
+ file?: boolean;
67
+ }): Promise<void>;
68
+ rename(from: string, to: string): Promise<void>;
69
+ link(from: string, to: string, follow?: boolean): Promise<void>;
70
+ links?(path: string): boolean;
71
+ symlink(target: string, path: string, owner?: NewOwner): Promise<void>;
72
+ readlink(path: string): Promise<string>;
73
+ realpath?(path: string, follow: boolean): Promise<string>;
74
+ createExclusive?(path: string, owner?: NewOwner): Promise<void>;
75
+ chown?(path: string, change: OwnerChange): Promise<void>;
76
+ trackOwners?(): void;
77
+ crossings?(mounted: (path: string) => boolean): void;
78
+ ancestry?(path: string): Promise<Array<Perm | undefined>>;
79
+ hasOwner?(path: string): Promise<boolean>;
80
+ chmod(path: string, mode: number): Promise<void>;
81
+ append?(path: string, bytes: Uint8Array): Promise<number>;
82
+ utimes(path: string, atime: Date, mtime: Date): Promise<void>;
83
+ lutimes?(path: string, atime: Date, mtime: Date): Promise<void>;
84
+ pread?(path: string, offset: number, length: number, version?: string): Promise<Uint8Array>;
85
+ pwrite?(path: string, offset: number, bytes: Uint8Array, transfer?: boolean): Promise<void>;
86
+ truncate?(path: string, size: number): Promise<void>;
87
+ protect?(prefixes: readonly string[], versions?: boolean): void;
88
+ unguarded?(): KernelFs;
89
+ noLinks?(): KernelFs;
90
+ mayChange?(path: string, follow: boolean, whole?: boolean): Promise<void>;
91
+ readVersioned?(path: string, cached?: boolean): Promise<{
92
+ bytes: Uint8Array;
93
+ version: string;
94
+ }>;
95
+ version?(path: string, cached?: boolean): Promise<string>;
96
+ }
97
+ export type RangedOps = Required<Pick<KernelFs, 'pread' | 'pwrite' | 'truncate'>>;
98
+ export declare function rangedOps(fs: Partial<RangedOps>): RangedOps | undefined;
99
+ export declare function lutimesOf(fs: KernelFs, path: string, atime: Date, mtime: Date): Promise<void>;
100
+ export declare function mayLink(fs: {
101
+ links?(path: string): boolean;
102
+ }, path: string): boolean;
103
+ export declare function modeOption(mode: unknown): number;
104
+ export declare function fsError(code: string, path: string): Error & {
105
+ code: string;
106
+ };
107
+ export declare function normalizePath(path: string): string;
108
+ export declare function resolvePath(base: string, path: string): string;
109
+ export declare function inodeOf(path: string): number;
110
+ export interface Redirect {
111
+ of: string;
112
+ to: string;
113
+ }
114
+ export declare function redirected(of: string, to: string): Error;
115
+ export declare function redirectOf(err: unknown): Redirect | undefined;
@@ -0,0 +1,75 @@
1
+ import { type KernelFs, type NewOwner } from './types.js';
2
+ export declare const UNLINKED_DIR = ".slicc-unlinked";
3
+ export interface KeptFile {
4
+ readonly hidden: string;
5
+ release(): void;
6
+ }
7
+ export interface UnlinkHolder {
8
+ held(): Iterable<string>;
9
+ owns(path: string): boolean;
10
+ isKept(path: string): boolean;
11
+ keep(path: string, file: KeptFile): void;
12
+ unkeep(path: string, file: KeptFile): void;
13
+ }
14
+ export interface UnlinkOwner {
15
+ readonly id: string;
16
+ alive(id: string): boolean;
17
+ }
18
+ export interface UnlinkLocks {
19
+ request(name: string, callback: () => Promise<unknown>): Promise<unknown>;
20
+ query?(): Promise<{
21
+ held?: Array<{
22
+ name?: string;
23
+ }>;
24
+ }>;
25
+ }
26
+ export declare function pidOwner(proc: {
27
+ pid: number;
28
+ kill(pid: number, signal: number): unknown;
29
+ }): UnlinkOwner;
30
+ export declare function webLocks(): UnlinkLocks | undefined;
31
+ export declare class PathGate {
32
+ private readonly tails;
33
+ acquire(path: string): Promise<() => void>;
34
+ run<T>(path: string, op: () => Promise<T>): Promise<T>;
35
+ }
36
+ interface Pinned {
37
+ moved: Set<string>;
38
+ commit(): void;
39
+ rollback(): Promise<void>;
40
+ }
41
+ export declare class UnlinkedKeeper {
42
+ private readonly fs;
43
+ private readonly holders;
44
+ private readonly rootOf;
45
+ private readonly locks;
46
+ private readonly busy;
47
+ private readonly waiting;
48
+ private readonly owner;
49
+ private readonly instance;
50
+ readonly gate: PathGate;
51
+ private queue;
52
+ private count;
53
+ private readonly links;
54
+ private readonly linked;
55
+ private readonly dirOwner;
56
+ constructor(fs: KernelFs, holders: Iterable<UnlinkHolder>, rootOf: (path: string) => string, options?: {
57
+ locks?: UnlinkLocks | undefined;
58
+ busy?: (path: string) => boolean;
59
+ owner?: UnlinkOwner | undefined;
60
+ dirOwner?: NewOwner;
61
+ });
62
+ private serial;
63
+ wrap(fs?: KernelFs): KernelFs;
64
+ settle(pinned: Pinned, op: () => Promise<void>): Promise<void>;
65
+ pin(target: string): Promise<Pinned>;
66
+ private keptFile;
67
+ private hide;
68
+ closed(path: string): void;
69
+ private drop;
70
+ private linkedName;
71
+ private unlinkedName;
72
+ private tidy;
73
+ sweep(root: string): Promise<void>;
74
+ }
75
+ export {};
@@ -0,0 +1 @@
1
+ export declare function view<T extends object>(target: T, overrides: Record<string, unknown>): T;
@@ -0,0 +1,12 @@
1
+ export interface LinkReader {
2
+ readlink?(path: string): Promise<string>;
3
+ lstat?(path: string): Promise<unknown>;
4
+ }
5
+ export declare function parentOf(path: string): string;
6
+ interface Budget {
7
+ hops: number;
8
+ }
9
+ export declare function realDir(fs: LinkReader, dir: string, budget?: Budget): Promise<string>;
10
+ export declare function joinName(dir: string, name: string): string;
11
+ export declare function realTarget(fs: LinkReader, path: string): Promise<string>;
12
+ export {};
@@ -0,0 +1,23 @@
1
+ import { type KernelFs } from './types.js';
2
+ export type WatchChange = {
3
+ paths: string[];
4
+ } | {
5
+ overflow: true;
6
+ };
7
+ export interface WatchOptions {
8
+ recursive?: boolean;
9
+ }
10
+ export declare const WATCH_BATCH_LIMIT = 1000;
11
+ export declare class FsWatchers {
12
+ private readonly watchers;
13
+ private readonly taps;
14
+ private readonly reals;
15
+ private readonly reshapes;
16
+ onReshape(listener: () => void): void;
17
+ reshaped(): void;
18
+ tap(listener: (paths: string[]) => void): void;
19
+ watch(paths: string[], options: WatchOptions, notify: (change: WatchChange) => void): () => void;
20
+ changed(...paths: string[]): void;
21
+ private flush;
22
+ wrap(fs: KernelFs): KernelFs;
23
+ }
@@ -0,0 +1,159 @@
1
+ import type { CdpHook } from './cdp/types.js';
2
+ import { type DialledSocket, type DialOptions } from './client/dial-stream.js';
3
+ import { type LoopbackFetchOptions } from './client/loopback-fetch.js';
4
+ import type { FacadeSpecs } from './facade/types.js';
5
+ import type { Attestation } from './fs/attest.js';
6
+ import type { DenialHook } from './fs/dac.js';
7
+ import { type Protection } from './fs/protect.js';
8
+ import { type UsersMode } from './fs/types.js';
9
+ import type { ClipboardHook } from './kernel/clipboard.js';
10
+ import type { RouteTable } from './kernel/net/routes.js';
11
+ import { type NetworkUplink } from './kernel/net/uplink.js';
12
+ import type { SealedHook } from './kernel/sealed.js';
13
+ import type { HostfsGrantHook } from './mount/hostfs.js';
14
+ import type { MountEntry, MountSpec } from './mount/mount-fs.js';
15
+ import type { ProcessMountPolicy } from './mount/syscall.js';
16
+ import type { ApproveHook } from './sudo.js';
17
+ import { type NetworkTransport } from './transport.js';
18
+ import type { Account, AddUser, Group, RemoveUser } from './users.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 { DialledSocket, DialOptions } from './client/dial-stream.js';
22
+ export type { LoopbackFetchOptions } from './client/loopback-fetch.js';
23
+ export type { FacadeConnection, FacadeHook, FacadeInfo, FacadeSpec, FacadeSpecs, } from './facade/types.js';
24
+ export type { Attestation, AttestedDir } from './fs/attest.js';
25
+ export type { Denial, DenialHook } from './fs/dac.js';
26
+ export type { ClipboardHook, ClipboardStamp } from './kernel/clipboard.js';
27
+ export type { RouteTable } from './kernel/net/routes.js';
28
+ export type { NetworkUplink, ResolveAnswer, ResolveFamily, UplinkTraits, } from './kernel/net/uplink.js';
29
+ export type { SealedAbortReason, SealedCaller, SealedHook, SealedRequest, } from './kernel/sealed.js';
30
+ export type { ConnectorStamp } from './kernel/socket.js';
31
+ export { checkLocalProxy, type LocalProxyCheckOptions, type LocalProxyOptions, type LocalProxyProbe, type LocalProxyStatus, type LocalProxyTransportOptions, localProxyTransport, probeLocalProxy, } from './local-proxy-transport.js';
32
+ export type { HostfsEvent, HostfsGrant, HostfsGrantHook, HostfsPortGrant, HostfsTransport, } from './mount/hostfs.js';
33
+ export { serveHostfsPort } from './mount/hostfs.js';
34
+ export type { MountEntry, MountSpec } from './mount/mount-fs.js';
35
+ export type { ProcessMountPolicy, ProcessMountRequest } from './mount/syscall.js';
36
+ export type { JsChild, JsExited, JsSpawnOptions, JsStdio } from './process/js/js-children.js';
37
+ export type { JsFdStatus, JsFdType, JsFile, JsOpenOptions, JsProgramContext, JsSignal, JsSudoAnswer, } from './process/js/js-context.js';
38
+ export type { JsStatFs } from './process/js/js-io.js';
39
+ export type { JsAddress, JsConnection, JsConnectOptions, JsListener, JsListenOptions, JsNet, } from './process/js/js-net.js';
40
+ export type { JsRunOptions, JsRunResult, JsRunStdio } from './process/js/js-run.js';
41
+ export type { JsCred, JsSyncContext, JsSyncFile } from './process/js/js-sync.js';
42
+ export type { JsTermios, JsTty, JsTtySize } from './process/js/js-tty.js';
43
+ export type { JsWebSocket, JsWebSocketClose, JsWebSocketMessage, JsWebSocketOptions, } from './process/js/js-websocket.js';
44
+ export type { ApproveHook, SudoAnswer, SudoRequest } from './sudo.js';
45
+ export { type FetchTransportOptions, fetchTransport, type HeaderList, type NetworkExit, type NetworkRequest, type NetworkResponse, type NetworkTraits, type NetworkTransport, type NetworkWebSocket, type NetworkWebSocketRequest, } from './transport.js';
46
+ export type { Account, AddUser, Group, RemoveUser } from './users.js';
47
+ export interface NetworkOptions {
48
+ transport?: NetworkTransport;
49
+ uplink?: NetworkUplink;
50
+ }
51
+ export interface KernelOptions {
52
+ root?: FileSystemDirectoryHandle;
53
+ modules?: string;
54
+ commands?: {
55
+ append?: readonly string[];
56
+ };
57
+ env?: Record<string, string>;
58
+ metadata?: string | false;
59
+ media?: string | false;
60
+ ca?: string | false;
61
+ worker?: string | URL;
62
+ network?: NetworkOptions;
63
+ requestDirectory?: () => Promise<FileSystemDirectoryHandle>;
64
+ onMountPending?: (pending: MountPending) => void;
65
+ hostfs?: HostfsGrantHook;
66
+ processMounts?: ProcessMountPolicy;
67
+ cdp?: CdpHook;
68
+ facades?: FacadeSpecs;
69
+ hostname?: string;
70
+ users?: UsersMode;
71
+ onDenial?: DenialHook;
72
+ sealed?: SealedHook;
73
+ clipboard?: ClipboardHook;
74
+ approve?: ApproveHook;
75
+ protect?: Protection;
76
+ }
77
+ export interface MountPending {
78
+ target: string;
79
+ source: string;
80
+ insert(): Promise<void>;
81
+ }
82
+ export interface RunOptions {
83
+ cwd?: string;
84
+ user?: string | number;
85
+ tag?: string;
86
+ env?: Record<string, string>;
87
+ stdin?: string | Uint8Array;
88
+ onStdout?: (text: string) => void;
89
+ onStderr?: (text: string) => void;
90
+ }
91
+ export interface RunResult {
92
+ status: number;
93
+ signal?: string;
94
+ stdout: string;
95
+ stderr: string;
96
+ }
97
+ export interface ConnectOptions {
98
+ user?: string | number;
99
+ tag?: string;
100
+ }
101
+ export interface KernelGroups {
102
+ list(): Promise<Group[]>;
103
+ addMember(group: string, user: string): Promise<Group>;
104
+ removeMember(group: string, user: string): Promise<Group>;
105
+ }
106
+ export interface KernelUsers {
107
+ readonly mode: UsersMode;
108
+ add(user: AddUser): Promise<Account>;
109
+ remove(name: string, options?: RemoveUser): Promise<boolean>;
110
+ list(): Promise<Account[]>;
111
+ }
112
+ export interface KernelIntegrity {
113
+ revoke(path?: string): Promise<void>;
114
+ }
115
+ export interface Kernel {
116
+ run(argv: string[], options?: RunOptions): Promise<RunResult>;
117
+ openTerminal(argv: string[], options?: TerminalOptions): Promise<Terminal>;
118
+ connect(options?: ConnectOptions): Promise<MessagePort>;
119
+ readonly users: KernelUsers;
120
+ readonly groups: KernelGroups;
121
+ setRoutes(routes: RouteTable): Promise<void>;
122
+ chmod(path: string, mode: number): Promise<void>;
123
+ readonly integrity: KernelIntegrity;
124
+ updateTransportTraits(): Promise<boolean>;
125
+ dial(options: DialOptions): Promise<DialledSocket>;
126
+ loopbackFetch(input: RequestInfo | URL, options: LoopbackFetchOptions): Promise<Response>;
127
+ mount(spec: MountSpec): Promise<MountEntry>;
128
+ umount(target: string): Promise<void>;
129
+ mounts(): Promise<MountEntry[]>;
130
+ insert(target: string, handle: FileSystemDirectoryHandle): Promise<void>;
131
+ attest(path: string): Promise<Attestation>;
132
+ watch(paths: string[], onChange: (path: string) => void): Promise<() => void>;
133
+ terminate(): void;
134
+ }
135
+ export interface TerminalOptions {
136
+ cwd?: string;
137
+ user?: string | number;
138
+ tag?: string;
139
+ env?: Record<string, string>;
140
+ cols?: number;
141
+ rows?: number;
142
+ onData?: (bytes: Uint8Array) => void;
143
+ }
144
+ export type TerminalSignal = 'SIGINT' | 'SIGTSTP' | 'SIGQUIT' | 'SIGHUP' | 'SIGTERM' | 'SIGKILL' | 'SIGCONT';
145
+ export interface Ended {
146
+ status: number;
147
+ signal?: string;
148
+ }
149
+ export interface Terminal {
150
+ readonly pid: number;
151
+ readonly exited: Promise<number>;
152
+ readonly ended: Promise<Ended>;
153
+ onData: ((bytes: Uint8Array) => void) | null;
154
+ write(data: string | Uint8Array): void;
155
+ resize(cols: number, rows: number): void;
156
+ signal(name: TerminalSignal): void;
157
+ close(): void;
158
+ }
159
+ export declare function createKernel(options?: KernelOptions): Promise<Kernel>;
@@ -0,0 +1,18 @@
1
+ import type { IntegrityLookup } from './fs/integrity.js';
2
+ export interface IntegrityPort {
3
+ postMessage(message: unknown): void;
4
+ }
5
+ export interface IntegrityAsk {
6
+ id: number;
7
+ path: string;
8
+ }
9
+ export interface IntegrityReply {
10
+ id: number;
11
+ hash?: string;
12
+ error?: string;
13
+ }
14
+ export declare function integrityAsker(port: IntegrityPort): {
15
+ lookup: IntegrityLookup;
16
+ answer(reply: IntegrityReply): void;
17
+ };
18
+ export declare function integrityAnswerer(port: IntegrityPort, lookup: IntegrityLookup | undefined): (data: unknown) => boolean;
@@ -0,0 +1,90 @@
1
+ import type { Cred } from './cred.js';
2
+ import { type DeviceMeta, FdTable, type KernelErrno } from './fd-table.js';
3
+ import type { ForkState } from './protocol.js';
4
+ export type ChildStdio = {
5
+ fd: number;
6
+ } | {
7
+ input: Uint8Array;
8
+ } | {
9
+ capture: true;
10
+ max?: number;
11
+ overflow?: () => void;
12
+ control?: CaptureControl;
13
+ } | {
14
+ sameAs: number;
15
+ } | {
16
+ none: true;
17
+ } | {
18
+ dir: string;
19
+ } | DeviceMeta;
20
+ export interface CaptureControl {
21
+ shut: boolean;
22
+ opened?: boolean;
23
+ ended(): void;
24
+ }
25
+ export type InheritedSlot = {
26
+ fd: number;
27
+ kernel: number;
28
+ flags?: number;
29
+ } | ({
30
+ fd: number;
31
+ } & DeviceMeta);
32
+ export interface ChildSpawnRequest {
33
+ file: string;
34
+ argv: string[];
35
+ argv0?: string;
36
+ env: Record<string, string>;
37
+ cwd: string;
38
+ pgid?: number;
39
+ session?: true;
40
+ exec?: boolean;
41
+ }
42
+ export interface ChildHandle {
43
+ pid: number;
44
+ exited: Promise<number>;
45
+ termsig?: () => number | undefined;
46
+ onState?: (listener: ChildStateListener) => void;
47
+ }
48
+ export type ChildStateListener = (state: 'stopped' | 'continued', sig: number) => void;
49
+ export interface WaitFlags {
50
+ untraced?: boolean;
51
+ continued?: boolean;
52
+ inGroup?: (childPid: number) => boolean;
53
+ }
54
+ export declare class SpawnError extends Error {
55
+ readonly code: KernelErrno;
56
+ constructor(code: KernelErrno);
57
+ }
58
+ export interface SpawnGrant {
59
+ cred: Cred;
60
+ caller: Cred;
61
+ }
62
+ export type ChildSpawner = (req: ChildSpawnRequest, fds: FdTable, grant?: SpawnGrant) => Promise<ChildHandle>;
63
+ export type ChildForker = (state: ForkState, fds: FdTable) => Promise<ChildHandle>;
64
+ export declare function stoppedStatus(sig: number): number;
65
+ export declare const CONTINUED_STATUS = 65535;
66
+ export declare function waitStatus(code: number, termsig?: number): number;
67
+ export declare class ChildTable {
68
+ private readonly children;
69
+ private readonly leftovers;
70
+ onChildState?: () => void;
71
+ onReap?: (pid: number) => void;
72
+ private stateChanged;
73
+ private readonly watchers;
74
+ private readonly parentFds;
75
+ private readonly spawner;
76
+ private readonly forker?;
77
+ constructor(parentFds: FdTable, spawner: ChildSpawner | undefined, forker?: ChildForker);
78
+ fork(state: ForkState): Promise<number>;
79
+ spawn(req: ChildSpawnRequest, stdio: readonly ChildStdio[], inherit?: readonly InheritedSlot[], grant?: SpawnGrant): Promise<number>;
80
+ private track;
81
+ watch(pid: number, listener: ChildStateListener): void;
82
+ private openSlot;
83
+ wait(pid: number, nohang: boolean, signal?: AbortSignal, flags?: WaitFlags): Promise<[number, number]>;
84
+ private candidates;
85
+ private nextChange;
86
+ private stateReport;
87
+ private reap;
88
+ pids(): number[];
89
+ captured(pid: number, slot: number): Uint8Array;
90
+ }
@@ -0,0 +1,49 @@
1
+ import type { UsersMode } from '../fs/types.js';
2
+ import { KernelError, type OpenAccess, OpenFile, type PollState } from './fd-table.js';
3
+ export declare const CLIPBOARD_PATH = "/dev/clipboard";
4
+ export declare const CLIPBOARD_MINOR = 251;
5
+ export declare const CLIPBOARD_MAX_BYTES: number;
6
+ export declare const CLIPBOARD_TIMEOUT_MS = 10000;
7
+ export interface ClipboardStamp {
8
+ pid: number;
9
+ uid: number;
10
+ gid: number;
11
+ users: UsersMode;
12
+ tag?: string;
13
+ }
14
+ export interface ClipboardHook {
15
+ read(stamp: ClipboardStamp): Promise<string>;
16
+ write(text: string, stamp: ClipboardStamp): Promise<void>;
17
+ }
18
+ export declare function clipboardFailure(err: unknown): KernelError;
19
+ declare class ClipboardChannel {
20
+ stamp: ClipboardStamp;
21
+ readonly access: OpenAccess;
22
+ private readonly broker;
23
+ private snapshot;
24
+ private taken;
25
+ private offset;
26
+ private chunks;
27
+ private size;
28
+ private wrote;
29
+ private failed;
30
+ private aborted;
31
+ constructor(broker: ClipboardBroker, access: OpenAccess, stamp: ClipboardStamp);
32
+ get unread(): boolean;
33
+ get settled(): boolean;
34
+ read(max: number, signal?: AbortSignal): Promise<Uint8Array>;
35
+ write(bytes: Uint8Array): number;
36
+ poll(): PollState;
37
+ abort(): void;
38
+ close(): Promise<void>;
39
+ }
40
+ export declare class ClipboardBroker {
41
+ readonly hook: ClipboardHook | undefined;
42
+ readonly users: UsersMode;
43
+ readonly timeoutMs: number;
44
+ readonly tagOf: (pid: number) => string | undefined;
45
+ constructor(hook: ClipboardHook | undefined, users: UsersMode, timeoutMs?: number, tagOf?: (pid: number) => string | undefined);
46
+ ask<T>(work: (hook: ClipboardHook) => Promise<T>): Promise<T>;
47
+ open(access: OpenAccess, stamp: ClipboardStamp): OpenFile;
48
+ }
49
+ export type { ClipboardChannel };