@ai-ecoverse/slicc-kernel 1.170.4 → 1.172.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.
@@ -5,7 +5,7 @@ import type { CronClock } from './cron/clock.js';
5
5
  import { CronService } from './cron/service.js';
6
6
  import { FacadeHosts } from './facade/hosts.js';
7
7
  import type { FacadeSpecs } from './facade/types.js';
8
- import { type Attestation } from './fs/attest.js';
8
+ import { type Attestation, type AttestOptions, type AttestTombstone } from './fs/attest.js';
9
9
  import { Dac, type DenialHook } from './fs/dac.js';
10
10
  import { type Protection } from './fs/protect.js';
11
11
  import type { KernelFs, UsersMode } from './fs/types.js';
@@ -24,6 +24,7 @@ import { type WasmWorkerLike } from './kernel/host.js';
24
24
  import type { CaStore } from './kernel/net/realm-ca.js';
25
25
  import { Resolver } from './kernel/net/resolver.js';
26
26
  import { Routes, type RouteTable } from './kernel/net/routes.js';
27
+ import { type SealedFetchHook } from './kernel/net/sealed-fetch.js';
27
28
  import type { RealmTransport } from './kernel/net/transport.js';
28
29
  import type { NetworkUplink } from './kernel/net/uplink.js';
29
30
  import { type ProcessInfo } from './kernel/proc-info.js';
@@ -69,6 +70,7 @@ export interface LauncherOptions {
69
70
  };
70
71
  onDenial?: DenialHook;
71
72
  sealed?: SealedHook;
73
+ sealedFetch?: SealedFetchHook;
72
74
  clipboard?: ClipboardHook;
73
75
  embedder?: EmbedderHook;
74
76
  approve?: ApproveHook;
@@ -255,6 +257,9 @@ export declare class Launcher {
255
257
  readonly usersMode: UsersMode;
256
258
  readonly dac: Dac | undefined;
257
259
  private readonly sealed;
260
+ private fill;
261
+ private readonly fills;
262
+ private placeholders;
258
263
  private readonly scrubs;
259
264
  private readonly clipboard;
260
265
  readonly embedder: EmbedderBroker;
@@ -350,6 +355,8 @@ export declare class Launcher {
350
355
  private packageRoots;
351
356
  private loadedUnder;
352
357
  groupSession(pgid: number): number | undefined;
358
+ private floored;
359
+ private httpFor;
353
360
  private loopbackFor;
354
361
  private sourceCheck;
355
362
  private treeScrubs;
@@ -387,6 +394,9 @@ export declare class Launcher {
387
394
  private childGroup;
388
395
  private undecided;
389
396
  connectorStamp(pid: number): Promise<SealedCaller>;
397
+ liveStamp(pid: number): Promise<SealedCaller | undefined>;
398
+ setPlaceholders(list: readonly string[]): void;
399
+ endFills(): void;
390
400
  private identityOf;
391
401
  private running;
392
402
  private decide;
@@ -416,7 +426,7 @@ export declare class Launcher {
416
426
  private driver;
417
427
  private fsaDriver;
418
428
  revokeIntegrity(path?: string): Promise<void>;
419
- attest(path: string): Promise<Attestation>;
429
+ attest(path: string, options?: AttestOptions): Promise<Attestation | AttestTombstone>;
420
430
  private watchSource;
421
431
  watchFiles(paths: readonly string[], notify: (path: string) => void): Promise<() => void>;
422
432
  mount(spec: MountSpec): Promise<MountEntry>;
@@ -0,0 +1,4 @@
1
+ import type { RealmTransportRequest, RealmTransportResponse } from '../kernel/net/transport.js';
2
+ type Send = (request: RealmTransportRequest) => Promise<RealmTransportResponse>;
3
+ export declare function followRedirects(send: Send, request: RealmTransportRequest): Promise<RealmTransportResponse>;
4
+ export {};
@@ -2,15 +2,16 @@ import { type MessagePort, type Worker } from 'node:worker_threads';
2
2
  import type { CdpHook } from './cdp/types.js';
3
3
  import type { CronClock } from './cron/clock.js';
4
4
  import type { FacadeSpecs } from './facade/types.js';
5
+ import type { Attestation, AttestTombstone } from './fs/attest.js';
5
6
  import type { DenialHook } from './fs/dac.js';
6
7
  import type { Protection } from './fs/protect.js';
7
8
  import { type UsersMode } from './fs/types.js';
8
- import type { ConnectOptions, KernelGroups, KernelIntegrity, KernelUsers, RunOptions, RunResult, Terminal, TerminalOptions } from './index.js';
9
+ import type { ConnectOptions, KernelGroups, KernelIntegrity, KernelSealed, KernelUsers, RunOptions, RunResult, Terminal, TerminalOptions } from './index.js';
9
10
  import type { ClipboardHook } from './kernel/clipboard.js';
10
11
  import { type EmbedderHook } from './kernel/embedder.js';
11
12
  import type { RouteTable } from './kernel/net/routes.js';
13
+ import { type SealedOption } from './kernel/net/sealed-fetch.js';
12
14
  import type { NetworkUplink } from './kernel/net/uplink.js';
13
- import type { SealedHook } from './kernel/sealed.js';
14
15
  import type { FetchLike, HostfsGrantHook } from './mount/hostfs.js';
15
16
  import type { MountEntry, MountSpec } from './mount/mount-fs.js';
16
17
  import type { ProcessMountPolicy } from './mount/syscall.js';
@@ -21,16 +22,19 @@ import { type NetworkTransport } from './transport.js';
21
22
  export type { CdpConnection, CdpHook, CdpRequest } from './cdp/types.js';
22
23
  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';
23
24
  export type { FacadeConnection, FacadeHook, FacadeInfo, FacadeSpec, FacadeSpecs, } from './facade/types.js';
25
+ export type { Attestation, AttestedDir, AttestOptions, AttestTombstone } from './fs/attest.js';
24
26
  export type { Denial, DenialHook } from './fs/dac.js';
25
- export type { ConnectOptions, Ended, KernelGroups, KernelIntegrity, KernelUsers, NetworkUplink, ResolveAnswer, ResolveFamily, RouteTable, RunOptions, RunResult, Terminal, TerminalOptions, TerminalSignal, } from './index.js';
27
+ export type { ConnectOptions, Ended, KernelGroups, KernelIntegrity, KernelSealed, KernelUsers, NetworkUplink, ResolveAnswer, ResolveFamily, RouteTable, RunOptions, RunResult, Terminal, TerminalOptions, TerminalSignal, } from './index.js';
26
28
  export type { ClipboardHook, ClipboardStamp } from './kernel/clipboard.js';
27
29
  export type { EmbedderHook, EmbedderKindPolicy, EmbedderReply, EmbedderRequest, EmbedderStamp, } from './kernel/embedder.js';
30
+ export { SEALED_FETCH_VERSION, type SealedFetchHook, type SealedFetchRequest, type SealedOption, } from './kernel/net/sealed-fetch.js';
28
31
  export type { SealedAbortReason, SealedCaller, SealedHook, SealedRequest, } from './kernel/sealed.js';
29
32
  export type { ConnectorStamp } from './kernel/socket.js';
30
33
  export type { HostfsEvent, HostfsGrant, HostfsGrantHook, HostfsPortGrant, HostfsTransport, } from './mount/hostfs.js';
31
34
  export { serveHostfsPort } from './mount/hostfs.js';
32
35
  export type { MountEntry, MountSpec } from './mount/mount-fs.js';
33
36
  export type { ApproveHook, SudoAnswer, SudoRequest } from './sudo.js';
37
+ export type { NetworkRedirectPolicy } from './transport.js';
34
38
  export { fetchTransport, type NetworkTransport } from './transport.js';
35
39
  export { memoryRoot };
36
40
  export interface NodeKernelOptions {
@@ -57,7 +61,7 @@ export interface NodeKernelOptions {
57
61
  hostname?: string;
58
62
  users?: UsersMode;
59
63
  onDenial?: DenialHook;
60
- sealed?: SealedHook;
64
+ sealed?: SealedOption;
61
65
  clipboard?: ClipboardHook;
62
66
  requests?: EmbedderHook;
63
67
  approve?: ApproveHook;
@@ -83,6 +87,11 @@ export interface NodeKernel {
83
87
  readFile(path: string): Promise<Uint8Array>;
84
88
  chmod(path: string, mode: number): Promise<void>;
85
89
  readonly integrity: KernelIntegrity;
90
+ readonly sealed: KernelSealed;
91
+ attest(path: string): Promise<Attestation>;
92
+ attest(path: string, options: {
93
+ absent: 'allow';
94
+ }): Promise<Attestation | AttestTombstone>;
86
95
  connect(options?: ConnectOptions): Promise<MessagePort>;
87
96
  readonly users: KernelUsers;
88
97
  readonly groups: KernelGroups;
@@ -1,6 +1,7 @@
1
+ import { type SealedFetchHook, type SealedFetchRequest } from './kernel/net/sealed-fetch.js';
1
2
  import type { SealedHook, SealedRequest } from './kernel/sealed.js';
2
3
  export interface SealedPort {
3
- postMessage(message: unknown): void;
4
+ postMessage(message: unknown, transfer?: Transferable[]): void;
4
5
  }
5
6
  export interface SealedAsk {
6
7
  id: number;
@@ -15,12 +16,21 @@ export interface SealedAbort {
15
16
  id: number;
16
17
  reason: unknown;
17
18
  }
19
+ type WireRequest = Omit<SealedFetchRequest, 'bodyStream'> & {
20
+ streamed?: true;
21
+ };
22
+ export interface SealedFetchAsk {
23
+ req: WireRequest;
24
+ port: MessagePort;
25
+ }
18
26
  export declare function sealedAsker(port: SealedPort): {
19
27
  hook: SealedHook;
28
+ fetch: SealedFetchHook;
20
29
  answer(reply: SealedReply): void;
21
30
  };
22
31
  export interface SealedAnswerer {
23
32
  handle(data: unknown): boolean;
24
33
  close(): void;
25
34
  }
26
- export declare function sealedAnswerer(port: SealedPort, hook: SealedHook | undefined): SealedAnswerer;
35
+ export declare function sealedAnswerer(port: SealedPort, hook: SealedHook | undefined, fetchHook?: SealedFetchHook): SealedAnswerer;
36
+ export {};
@@ -1,4 +1,5 @@
1
1
  import { type LockManagerLike } from './client/protocol.js';
2
+ import type { AttestOptions } from './fs/attest.js';
2
3
  import { type MetaStore } from './fs/meta.js';
3
4
  import { type ProtectInit } from './fs/protect.js';
4
5
  import { type UsersMode } from './fs/types.js';
@@ -42,6 +43,7 @@ export interface InitRequest {
42
43
  protect?: ProtectInit;
43
44
  denials?: boolean;
44
45
  sealed?: boolean;
46
+ sealedFetch?: boolean;
45
47
  clipboard?: boolean;
46
48
  requests?: Record<string, EmbedderKindPolicy>;
47
49
  approve?: boolean;
@@ -148,6 +150,7 @@ export type AttestRequest = {
148
150
  id: number;
149
151
  op: 'attest';
150
152
  path: string;
153
+ options?: AttestOptions;
151
154
  } | {
152
155
  id: number;
153
156
  op: 'chmod';
@@ -172,7 +175,11 @@ export interface FileChanged {
172
175
  path: string;
173
176
  };
174
177
  }
175
- export type KernelRequest = AttestRequest | InitRequest | RunRequest | OpenTerminalRequest | TerminalRequest | ConnectRequest | UsersRequest | MountRequest | DialRequest | RoutesRequest | TraitsRequest;
178
+ export type KernelRequest = {
179
+ id: number;
180
+ op: 'sealed-placeholders';
181
+ list: readonly string[];
182
+ } | AttestRequest | InitRequest | RunRequest | OpenTerminalRequest | TerminalRequest | ConnectRequest | UsersRequest | MountRequest | DialRequest | RoutesRequest | TraitsRequest;
176
183
  type WithoutId<T> = T extends unknown ? Omit<T, 'id'> : never;
177
184
  export type KernelCall = WithoutId<KernelRequest>;
178
185
  export declare function inOpfs(deps: ServeDeps, root: FileSystemDirectoryHandle): Promise<boolean>;
@@ -1,7 +1,10 @@
1
1
  import type { RouteTable } from './kernel/net/routes.js';
2
2
  import { type NetworkUplink, type ResolveAnswer, type ResolveFamily, type UplinkConn, type UplinkDatagram, type UplinkDial, type UplinkMessage, type UplinkUdp, type UplinkUdpOpen, type UplinkUnreachable } from './kernel/net/uplink.js';
3
3
  export { type CronClock, type FakeCronClock, fakeCronClock } from './cron/clock.js';
4
+ export { placeholderFloor } from './kernel/net/placeholder-floor.js';
5
+ export { sealedFetcher } from './kernel/net/sealed-fetch.js';
4
6
  export { setTestSyscallHook, type TestSyscall, type TestSyscallHook, } from './kernel/test-hooks.js';
7
+ export { sealedAnswerer, sealedAsker } from './sealed-relay.js';
5
8
  export type { NetworkUplink, ResolveAnswer, ResolveFamily, RouteTable, UplinkConn, UplinkDatagram, UplinkDial, UplinkMessage, UplinkUdp, UplinkUdpOpen, UplinkUnreachable, };
6
9
  export type FakeDatagramPeer = (bytes: Uint8Array) => Uint8Array | readonly Uint8Array[] | {
7
10
  error: string;
@@ -1,7 +1,7 @@
1
1
  import type { TransportCall, TransportReply } from './kernel/net/remote-transport.js';
2
- import type { HeaderList, RealmRedirectHop, RealmTransport, RealmTransportExit, RealmTransportRequest, RealmTransportResponse, RealmTransportTraits, RealmWebSocket, RealmWebSocketRequest } from './kernel/net/transport.js';
2
+ import type { HeaderList, RealmRedirectHop, RealmRedirectPolicy, RealmTransport, RealmTransportExit, RealmTransportRequest, RealmTransportResponse, RealmTransportTraits, RealmWebSocket, RealmWebSocketRequest } from './kernel/net/transport.js';
3
3
  import { type WebSocketConstructor } from './websocket-transport.js';
4
- export type { HeaderList, RealmRedirectHop as NetworkRedirectHop, RealmTransport as NetworkTransport, RealmTransportExit as NetworkExit, RealmTransportRequest as NetworkRequest, RealmTransportResponse as NetworkResponse, RealmTransportTraits as NetworkTraits, RealmWebSocket as NetworkWebSocket, RealmWebSocketRequest as NetworkWebSocketRequest, };
4
+ export type { HeaderList, RealmRedirectHop as NetworkRedirectHop, RealmRedirectPolicy as NetworkRedirectPolicy, RealmTransport as NetworkTransport, RealmTransportExit as NetworkExit, RealmTransportRequest as NetworkRequest, RealmTransportResponse as NetworkResponse, RealmTransportTraits as NetworkTraits, RealmWebSocket as NetworkWebSocket, RealmWebSocketRequest as NetworkWebSocketRequest, };
5
5
  export interface FetchTransportOptions {
6
6
  fetch?: typeof globalThis.fetch;
7
7
  maxRequestBody?: number;
@@ -21,6 +21,7 @@ export interface TransportServer {
21
21
  answer(call: TransportCall): void;
22
22
  close(): void;
23
23
  }
24
- export declare function serveTransport(peer: TransportPeer, transport: RealmTransport, { closeWaitMs }?: {
24
+ export declare function serveTransport(peer: TransportPeer, transport: RealmTransport, { closeWaitMs, attributed, }?: {
25
25
  closeWaitMs?: number;
26
+ attributed?: boolean;
26
27
  }): TransportServer;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-ecoverse/slicc-kernel",
3
- "version": "1.170.4",
3
+ "version": "1.172.0",
4
4
  "description": "SLICC's wasm-realm kernel: run Emscripten programs in the browser against OPFS, with fork, spawn, pipes and waitpid",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",