@ai-ecoverse/slicc-kernel 1.102.5 → 1.103.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/README.md +10 -2
  2. package/dist/kernel-worker.js +18 -3
  3. package/dist/kernel-worker.js.map +2 -2
  4. package/dist/node-process-worker.js +1 -1
  5. package/dist/node.js +18 -3
  6. package/dist/node.js.map +2 -2
  7. package/dist/process-worker.js +1 -1
  8. package/dist/types/body-idle.d.ts +3 -0
  9. package/dist/types/bytes.d.ts +1 -0
  10. package/dist/types/cdp/facade.d.ts +27 -0
  11. package/dist/types/cdp/hosts.d.ts +14 -0
  12. package/dist/types/cdp/port.d.ts +24 -0
  13. package/dist/types/cdp/types.d.ts +12 -0
  14. package/dist/types/cdp/websocket.d.ts +61 -0
  15. package/dist/types/client/attach.d.ts +132 -0
  16. package/dist/types/client/dial-stream.d.ts +23 -0
  17. package/dist/types/client/loopback-fetch.d.ts +5 -0
  18. package/dist/types/client/protocol.d.ts +153 -0
  19. package/dist/types/client/serve-client.d.ts +18 -0
  20. package/dist/types/clipboard-relay.d.ts +25 -0
  21. package/dist/types/commands.d.ts +38 -0
  22. package/dist/types/cron/clock.d.ts +13 -0
  23. package/dist/types/driver.d.ts +3 -0
  24. package/dist/types/facade/hosts.d.ts +12 -0
  25. package/dist/types/facade/port.d.ts +16 -0
  26. package/dist/types/facade/types.d.ts +23 -0
  27. package/dist/types/fs/access.d.ts +29 -0
  28. package/dist/types/fs/attest.d.ts +41 -0
  29. package/dist/types/fs/changes.d.ts +19 -0
  30. package/dist/types/fs/commands.d.ts +4 -0
  31. package/dist/types/fs/dac.d.ts +64 -0
  32. package/dist/types/fs/dev-removal.d.ts +9 -0
  33. package/dist/types/fs/fresh-modules.d.ts +9 -0
  34. package/dist/types/fs/integrity.d.ts +53 -0
  35. package/dist/types/fs/meta.d.ts +85 -0
  36. package/dist/types/fs/opfs.d.ts +141 -0
  37. package/dist/types/fs/owners.d.ts +17 -0
  38. package/dist/types/fs/pages.d.ts +41 -0
  39. package/dist/types/fs/path-map.d.ts +16 -0
  40. package/dist/types/fs/physical-path.d.ts +14 -0
  41. package/dist/types/fs/protect.d.ts +27 -0
  42. package/dist/types/fs/ranged.d.ts +73 -0
  43. package/dist/types/fs/remote.d.ts +45 -0
  44. package/dist/types/fs/types.d.ts +115 -0
  45. package/dist/types/fs/unlinked.d.ts +75 -0
  46. package/dist/types/fs/view.d.ts +1 -0
  47. package/dist/types/fs/walk.d.ts +12 -0
  48. package/dist/types/fs/watch.d.ts +23 -0
  49. package/dist/types/index.d.ts +159 -0
  50. package/dist/types/integrity-relay.d.ts +18 -0
  51. package/dist/types/kernel/children.d.ts +90 -0
  52. package/dist/types/kernel/clipboard.d.ts +49 -0
  53. package/dist/types/kernel/cpu-clock.d.ts +56 -0
  54. package/dist/types/kernel/cred.d.ts +17 -0
  55. package/dist/types/kernel/dgram.d.ts +56 -0
  56. package/dist/types/kernel/dial.d.ts +20 -0
  57. package/dist/types/kernel/epoll.d.ts +67 -0
  58. package/dist/types/kernel/eventfd.d.ts +19 -0
  59. package/dist/types/kernel/exec-ticket.d.ts +25 -0
  60. package/dist/types/kernel/fd-table.d.ts +107 -0
  61. package/dist/types/kernel/host-ops.d.ts +98 -0
  62. package/dist/types/kernel/host.d.ts +116 -0
  63. package/dist/types/kernel/jobs.d.ts +50 -0
  64. package/dist/types/kernel/locks.d.ts +40 -0
  65. package/dist/types/kernel/net/datagram-wire.d.ts +8 -0
  66. package/dist/types/kernel/net/http-syscalls.d.ts +58 -0
  67. package/dist/types/kernel/net/http1.d.ts +48 -0
  68. package/dist/types/kernel/net/loopback-names.d.ts +14 -0
  69. package/dist/types/kernel/net/loopback-transport.d.ts +13 -0
  70. package/dist/types/kernel/net/network.d.ts +29 -0
  71. package/dist/types/kernel/net/proxy-service.d.ts +70 -0
  72. package/dist/types/kernel/net/realm-ca.d.ts +28 -0
  73. package/dist/types/kernel/net/redirect-hops.d.ts +5 -0
  74. package/dist/types/kernel/net/remote-transport.d.ts +98 -0
  75. package/dist/types/kernel/net/resolver.d.ts +29 -0
  76. package/dist/types/kernel/net/routes.d.ts +15 -0
  77. package/dist/types/kernel/net/tls-engine.d.ts +46 -0
  78. package/dist/types/kernel/net/tls-tunnel.d.ts +35 -0
  79. package/dist/types/kernel/net/transport.d.ts +64 -0
  80. package/dist/types/kernel/net/uplink-socket.d.ts +11 -0
  81. package/dist/types/kernel/net/uplink.d.ts +163 -0
  82. package/dist/types/kernel/net/ws-queue.d.ts +21 -0
  83. package/dist/types/kernel/net/ws-syscalls.d.ts +45 -0
  84. package/dist/types/kernel/net/x509.d.ts +34 -0
  85. package/dist/types/kernel/pipe.d.ts +29 -0
  86. package/dist/types/kernel/proc-info.d.ts +44 -0
  87. package/dist/types/kernel/process.d.ts +525 -0
  88. package/dist/types/kernel/protocol.d.ts +126 -0
  89. package/dist/types/kernel/pty.d.ts +84 -0
  90. package/dist/types/kernel/run-child.d.ts +39 -0
  91. package/dist/types/kernel/scrub-file.d.ts +13 -0
  92. package/dist/types/kernel/sealed.d.ts +74 -0
  93. package/dist/types/kernel/select.d.ts +7 -0
  94. package/dist/types/kernel/sem.d.ts +72 -0
  95. package/dist/types/kernel/settling.d.ts +16 -0
  96. package/dist/types/kernel/signals.d.ts +44 -0
  97. package/dist/types/kernel/socket-syscalls.d.ts +74 -0
  98. package/dist/types/kernel/socket.d.ts +125 -0
  99. package/dist/types/kernel/timer.d.ts +4 -0
  100. package/dist/types/kernel/tty.d.ts +53 -0
  101. package/dist/types/kernel/vfs-file.d.ts +149 -0
  102. package/dist/types/launcher.d.ts +359 -0
  103. package/dist/types/local-proxy-transport.d.ts +39 -0
  104. package/dist/types/meta.d.ts +11 -0
  105. package/dist/types/mount/chunked.d.ts +9 -0
  106. package/dist/types/mount/connection.d.ts +35 -0
  107. package/dist/types/mount/driver.d.ts +50 -0
  108. package/dist/types/mount/fsa.d.ts +26 -0
  109. package/dist/types/mount/fstab.d.ts +17 -0
  110. package/dist/types/mount/host.d.ts +24 -0
  111. package/dist/types/mount/hostfs.d.ts +129 -0
  112. package/dist/types/mount/media.d.ts +8 -0
  113. package/dist/types/mount/medium.d.ts +12 -0
  114. package/dist/types/mount/mount-fs.d.ts +136 -0
  115. package/dist/types/mount/protocol.d.ts +140 -0
  116. package/dist/types/mount/syscall.d.ts +27 -0
  117. package/dist/types/mount/tmpfs.d.ts +2 -0
  118. package/dist/types/node/loopback.d.ts +11 -0
  119. package/dist/types/node/memory-root.d.ts +2 -0
  120. package/dist/types/node/ws-diagnose.d.ts +4 -0
  121. package/dist/types/node.d.ts +85 -0
  122. package/dist/types/process/fd-metadata.d.ts +4 -0
  123. package/dist/types/process/js/async-sab.d.ts +15 -0
  124. package/dist/types/process/js/js-children.d.ts +63 -0
  125. package/dist/types/process/js/js-context.d.ts +133 -0
  126. package/dist/types/process/js/js-dev.d.ts +50 -0
  127. package/dist/types/process/js/js-exit.d.ts +15 -0
  128. package/dist/types/process/js/js-fetch.d.ts +2 -0
  129. package/dist/types/process/js/js-io.d.ts +81 -0
  130. package/dist/types/process/js/js-kernel.d.ts +61 -0
  131. package/dist/types/process/js/js-net.d.ts +42 -0
  132. package/dist/types/process/js/js-proc.d.ts +31 -0
  133. package/dist/types/process/js/js-run.d.ts +35 -0
  134. package/dist/types/process/js/js-sync.d.ts +86 -0
  135. package/dist/types/process/js/js-tty.d.ts +30 -0
  136. package/dist/types/process/js/js-websocket.d.ts +21 -0
  137. package/dist/types/process/kernel-streams.d.ts +196 -0
  138. package/dist/types/process/process-fds.d.ts +95 -0
  139. package/dist/types/process/process-locks.d.ts +29 -0
  140. package/dist/types/process/process-pty.d.ts +20 -0
  141. package/dist/types/process/process-signals.d.ts +33 -0
  142. package/dist/types/process/procfs.d.ts +41 -0
  143. package/dist/types/process/wasi/dylink.d.ts +9 -0
  144. package/dist/types/process/wasi/slicc-lock.d.ts +26 -0
  145. package/dist/types/process/wasi/slicc-sem.d.ts +3 -0
  146. package/dist/types/process/wasi/wasi-abi.d.ts +156 -0
  147. package/dist/types/process/wasi/wasi-fds.d.ts +130 -0
  148. package/dist/types/process/wasi/wasi-files.d.ts +99 -0
  149. package/dist/types/process/wasi/wasi-host.d.ts +104 -0
  150. package/dist/types/process/wasi/wasi-memory.d.ts +16 -0
  151. package/dist/types/process/wasi/wasi-module.d.ts +13 -0
  152. package/dist/types/process/wasi/wasi-poll.d.ts +13 -0
  153. package/dist/types/process/wasi/wasi-procfs.d.ts +36 -0
  154. package/dist/types/process/wasi/wasi-sigmask.d.ts +19 -0
  155. package/dist/types/process/wasi/wasi-signals.d.ts +43 -0
  156. package/dist/types/process/wasi/wasi-termios.d.ts +10 -0
  157. package/dist/types/process/wasi/wasix-fork.d.ts +63 -0
  158. package/dist/types/process/wasi/wasix-linker.d.ts +108 -0
  159. package/dist/types/process/wasi/wasix-sockets.d.ts +9 -0
  160. package/dist/types/process/wasi/wasix-trampoline.d.ts +18 -0
  161. package/dist/types/process/wasi/wasm-functypes.d.ts +25 -0
  162. package/dist/types/process/wasi-errno.d.ts +1 -0
  163. package/dist/types/realm/emscripten-vfs-hook.d.ts +19 -0
  164. package/dist/types/realm/live-vfs-fs.d.ts +186 -0
  165. package/dist/types/realm/sync-fs-dispatch.d.ts +26 -0
  166. package/dist/types/realm/sync-fs-token-registry.d.ts +36 -0
  167. package/dist/types/realm/sync-fs-wire.d.ts +118 -0
  168. package/dist/types/realm/sync-sab-bridge.d.ts +21 -0
  169. package/dist/types/realm/sync-sab-responder.d.ts +16 -0
  170. package/dist/types/realm/sync-sab-wire.d.ts +64 -0
  171. package/dist/types/sealed-relay.d.ts +26 -0
  172. package/dist/types/serve.d.ts +190 -0
  173. package/dist/types/sudo-command.d.ts +4 -0
  174. package/dist/types/sudo.d.ts +105 -0
  175. package/dist/types/testing.d.ts +46 -0
  176. package/dist/types/transport.d.ts +25 -0
  177. package/dist/types/users.d.ts +86 -0
  178. package/dist/types/version.d.ts +3 -0
  179. package/dist/types/websocket-transport.d.ts +12 -0
  180. package/package.json +22 -6
@@ -0,0 +1,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 };
@@ -0,0 +1,56 @@
1
+ export declare const SYS_CAP_US = 20000;
2
+ export declare function epochMicros(): number;
3
+ export declare const rawWait: (typed: Int32Array, index: number, value: number, timeout?: number) => 'ok' | 'not-equal' | 'timed-out';
4
+ export declare function useLocalClock(sab: SharedArrayBuffer | undefined): void;
5
+ export declare function localWait<T>(wait: () => T, blocks?: boolean): T;
6
+ export declare function localCpuNanos(): bigint | undefined;
7
+ export declare function localIdle(sab: SharedArrayBuffer, now: number): {
8
+ idle: number;
9
+ waiting: boolean;
10
+ };
11
+ export interface CpuTimes {
12
+ utime: number;
13
+ stime: number;
14
+ }
15
+ export declare class CpuClock {
16
+ private readonly start;
17
+ private sys;
18
+ private idle;
19
+ private since;
20
+ private kind;
21
+ private stopped;
22
+ private last;
23
+ private readonly sab;
24
+ private readonly now;
25
+ constructor(sab: SharedArrayBuffer, now?: () => number);
26
+ enter(): void;
27
+ block(): void;
28
+ leave(): void;
29
+ stop(stopped: boolean): void;
30
+ private frozen;
31
+ freeze(): void;
32
+ running(): boolean;
33
+ times(): CpuTimes;
34
+ private add;
35
+ }
36
+ export declare class ProcessClocks {
37
+ private readonly main;
38
+ private readonly threads;
39
+ private readonly ended;
40
+ private readonly enabled;
41
+ constructor(sab: SharedArrayBuffer, enabled?: boolean, states?: {
42
+ onState(listener: (state: string) => void): void;
43
+ });
44
+ thread(tid: number, sab: SharedArrayBuffer): CpuClock;
45
+ threadEnded(tid: number): void;
46
+ stop(stopped: boolean): void;
47
+ freeze(): void;
48
+ times(): CpuTimes | undefined;
49
+ running(): number;
50
+ states(): Array<{
51
+ tid: number;
52
+ state: 'R' | 'S';
53
+ }>;
54
+ timed<R, T>(clock: CpuClock | undefined, dispatch: (req: R, block: () => void) => Promise<T>): (req: R) => Promise<T>;
55
+ private all;
56
+ }
@@ -0,0 +1,17 @@
1
+ export interface Cred {
2
+ ruid: number;
3
+ euid: number;
4
+ suid: number;
5
+ rgid: number;
6
+ egid: number;
7
+ sgid: number;
8
+ groups: number[];
9
+ }
10
+ export type CredChange = Partial<Cred>;
11
+ export declare const ROOT: Readonly<Cred>;
12
+ export declare const MAX_GROUPS = 65536;
13
+ export declare function userCred(uid: number, gid: number, groups?: number[]): Cred;
14
+ export declare function copyCred(cred: Readonly<Cred>): Cred;
15
+ export declare function changeCred(cur: Readonly<Cred>, change: CredChange): Cred;
16
+ export declare function maySignal(sender: Readonly<Cred>, target: Readonly<Cred>): boolean;
17
+ export declare function maySee(viewer: Readonly<Cred>, target: Readonly<Cred>): boolean;
@@ -0,0 +1,56 @@
1
+ import { type KernelFile, type PollState } from './fd-table.js';
2
+ import { type LoopbackNet, type SockAddr } from './socket.js';
3
+ export type InetAddr = Extract<SockAddr, {
4
+ family: 'inet';
5
+ }>;
6
+ export interface Datagram {
7
+ bytes: Uint8Array;
8
+ from: InetAddr;
9
+ }
10
+ export interface Received {
11
+ bytes: Uint8Array;
12
+ from: InetAddr;
13
+ truncated: boolean;
14
+ }
15
+ export declare const DGRAM_QUEUE_BYTES: number;
16
+ export declare const DGRAM_QUEUE_COUNT = 512;
17
+ export declare const DGRAM_SEND_ROOM: number;
18
+ export declare const MAX_DATAGRAM_V4 = 65507;
19
+ export declare const MAX_DATAGRAM_V6 = 65527;
20
+ export declare class KernelDgram implements KernelFile {
21
+ local: InetAddr | undefined;
22
+ peer: InetAddr | undefined;
23
+ private readonly net;
24
+ private readonly queue;
25
+ private queued;
26
+ private pending;
27
+ private closed;
28
+ private sending;
29
+ private readonly changes;
30
+ private readonly options;
31
+ private readonly uplinks;
32
+ private readonly stop;
33
+ constructor(net: LoopbackNet);
34
+ bind(addr: SockAddr): void;
35
+ private bound;
36
+ connectTo(addr: SockAddr): void;
37
+ private drain;
38
+ private route;
39
+ private takeError;
40
+ send(bytes: Uint8Array, to?: SockAddr): Promise<number>;
41
+ private sendUp;
42
+ private uplinkSocket;
43
+ private pump;
44
+ private unreachable;
45
+ deliver(datagram: Datagram): boolean;
46
+ receive(max: number, peek: boolean, signal?: AbortSignal): Promise<Received>;
47
+ read(max: number, signal?: AbortSignal): Promise<Uint8Array>;
48
+ peek(max: number, signal?: AbortSignal): Promise<Uint8Array>;
49
+ write(bytes: Uint8Array): Promise<number>;
50
+ poll(): PollState;
51
+ changed(signal?: AbortSignal): Promise<void>;
52
+ shutdown(how: number): void;
53
+ getOption(level: number, name: number): number;
54
+ setOption(level: number, name: number, value: number): void;
55
+ close(): void;
56
+ }