@ai-ecoverse/slicc-kernel 1.113.0 → 1.114.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.
- package/README.md +23 -1
- package/dist/driver-worker.js +7 -0
- package/dist/driver-worker.js.map +2 -2
- package/dist/index.js +7 -0
- package/dist/index.js.map +2 -2
- package/dist/kernel-worker.js +80 -21
- package/dist/kernel-worker.js.map +2 -2
- package/dist/node-driver-worker.js +7 -0
- package/dist/node-driver-worker.js.map +2 -2
- package/dist/node-process-worker.js +45 -4
- package/dist/node-process-worker.js.map +2 -2
- package/dist/node.js +80 -21
- package/dist/node.js.map +2 -2
- package/dist/process-worker.js +45 -4
- package/dist/process-worker.js.map +2 -2
- package/dist/types/kernel/children.d.ts +9 -1
- package/dist/types/kernel/host.d.ts +3 -2
- package/dist/types/kernel/jobs.d.ts +4 -3
- package/dist/types/kernel/process.d.ts +14 -4
- package/dist/types/kernel/signals.d.ts +21 -0
- package/dist/types/launcher.d.ts +3 -1
- package/dist/types/process/wasi/wasi-host.d.ts +1 -0
- package/package.json +4 -4
|
@@ -45,6 +45,14 @@ export interface ChildHandle {
|
|
|
45
45
|
exited: Promise<number>;
|
|
46
46
|
termsig?: () => number | undefined;
|
|
47
47
|
onState?: (listener: ChildStateListener) => void;
|
|
48
|
+
uid?: () => number | undefined;
|
|
49
|
+
}
|
|
50
|
+
export interface ChildEvent {
|
|
51
|
+
pid: number;
|
|
52
|
+
state: 'exited' | 'stopped' | 'continued';
|
|
53
|
+
status: number;
|
|
54
|
+
termsig?: number | undefined;
|
|
55
|
+
uid?: number | undefined;
|
|
48
56
|
}
|
|
49
57
|
export type ChildStateListener = (state: 'stopped' | 'continued', sig: number) => void;
|
|
50
58
|
export interface WaitFlags {
|
|
@@ -68,7 +76,7 @@ export declare function waitStatus(code: number, termsig?: number): number;
|
|
|
68
76
|
export declare class ChildTable {
|
|
69
77
|
private readonly children;
|
|
70
78
|
private readonly leftovers;
|
|
71
|
-
onChildState?: () => void;
|
|
79
|
+
onChildState?: (child?: ChildEvent) => void;
|
|
72
80
|
onReap?: (pid: number) => void;
|
|
73
81
|
autoReap?: () => boolean;
|
|
74
82
|
private readonly kept;
|
|
@@ -18,6 +18,7 @@ import { type ForkState, type InheritedFd, type Program } from './protocol.js';
|
|
|
18
18
|
import type { PtyTable } from './pty.js';
|
|
19
19
|
import type { SealedBroker } from './sealed.js';
|
|
20
20
|
import type { SemTable } from './sem.js';
|
|
21
|
+
import { type SigInfo } from './signals.js';
|
|
21
22
|
import { type LoopbackNet } from './socket.js';
|
|
22
23
|
import type { VfsNodes } from './vfs-file.js';
|
|
23
24
|
export interface WasmWorkerLike {
|
|
@@ -63,7 +64,7 @@ export interface SpawnWasmOptions {
|
|
|
63
64
|
fork?: ForkState;
|
|
64
65
|
ppid?: number;
|
|
65
66
|
shownPid?: number;
|
|
66
|
-
kill?: (pid: number, sig: number) => boolean | Promise<boolean>;
|
|
67
|
+
kill?: (pid: number, sig: number, info?: SigInfo) => boolean | Promise<boolean>;
|
|
67
68
|
writesBack?: (pid: number) => boolean;
|
|
68
69
|
processes?: () => ProcessListing;
|
|
69
70
|
sudo?: WasmProcessOptions['sudo'];
|
|
@@ -92,7 +93,7 @@ export interface WasmProcessHandle {
|
|
|
92
93
|
pid: number;
|
|
93
94
|
exited: Promise<number>;
|
|
94
95
|
kill(code?: number): void;
|
|
95
|
-
signal(sig: number): void;
|
|
96
|
+
signal(sig: number, info?: SigInfo): void;
|
|
96
97
|
termsig(): number | undefined;
|
|
97
98
|
onState(listener: StateListener): void;
|
|
98
99
|
memory(): number;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import type { SigInfo } from './signals.js';
|
|
1
2
|
import type { KernelTty } from './tty.js';
|
|
2
3
|
export interface JobMember {
|
|
3
4
|
pid: number;
|
|
4
5
|
pgid: number;
|
|
5
6
|
sid: number;
|
|
6
|
-
signal(sig: number): void;
|
|
7
|
+
signal(sig: number, info?: SigInfo): void;
|
|
7
8
|
execParent?: number;
|
|
8
9
|
ppid?: number;
|
|
9
10
|
execed?: boolean;
|
|
@@ -15,7 +16,7 @@ export declare class JobTable {
|
|
|
15
16
|
private readonly foreground;
|
|
16
17
|
private readonly terminals;
|
|
17
18
|
keyboard: boolean;
|
|
18
|
-
add(pid: number, parentPid: number | undefined, signal: (sig: number) => void, terminal?: KernelTty): JobMember;
|
|
19
|
+
add(pid: number, parentPid: number | undefined, signal: (sig: number, info?: SigInfo) => void, terminal?: KernelTty): JobMember;
|
|
19
20
|
list(): JobMember[];
|
|
20
21
|
remove(pid: number): void;
|
|
21
22
|
private prune;
|
|
@@ -40,7 +41,7 @@ export declare class JobTable {
|
|
|
40
41
|
private knownTerminals;
|
|
41
42
|
controllingTerminal(pid: number): KernelTty | null | undefined;
|
|
42
43
|
acquireTerminal(pid: number, tty: KernelTty): boolean;
|
|
43
|
-
killGroup(pgid: number, sig: number, may?: (pid: number) => boolean): boolean;
|
|
44
|
+
killGroup(pgid: number, sig: number, may?: (pid: number) => boolean, info?: SigInfo): boolean;
|
|
44
45
|
tcgetpgrp(tty: KernelTty, fallback: number): number;
|
|
45
46
|
tcsetpgrp(caller: number, tty: KernelTty, pgid: number, settling?: boolean): void;
|
|
46
47
|
private reclaimed;
|
|
@@ -22,7 +22,7 @@ import { type PtySyscall, type PtyTable } from './pty.js';
|
|
|
22
22
|
import { type RunRequest } from './run-child.js';
|
|
23
23
|
import type { SealedBroker, SealedCaller } from './sealed.js';
|
|
24
24
|
import { type SemSyscall, type SemTable } from './sem.js';
|
|
25
|
-
import { type DefaultAction } from './signals.js';
|
|
25
|
+
import { type DefaultAction, type SigInfo } from './signals.js';
|
|
26
26
|
import { LoopbackNet } from './socket.js';
|
|
27
27
|
import { type SocketSyscall } from './socket-syscalls.js';
|
|
28
28
|
import type { Termios } from './tty.js';
|
|
@@ -323,6 +323,10 @@ export type WasmSyscall = {
|
|
|
323
323
|
op: 'sig-waiting';
|
|
324
324
|
tid: number;
|
|
325
325
|
set: number;
|
|
326
|
+
} | {
|
|
327
|
+
op: 'sig-info';
|
|
328
|
+
sig: number;
|
|
329
|
+
tid?: number;
|
|
326
330
|
} | {
|
|
327
331
|
op: 'sig-pause';
|
|
328
332
|
} | SocketSyscall | EpollSyscall | SemSyscall | HttpSyscall | PtySyscall | HostSyscall;
|
|
@@ -365,7 +369,7 @@ export interface WasmProcessOptions {
|
|
|
365
369
|
spawner?: ChildSpawner;
|
|
366
370
|
forker?: ChildForker;
|
|
367
371
|
fs: VfsFileFs;
|
|
368
|
-
kill?: (pid: number, sig: number) => boolean | Promise<boolean>;
|
|
372
|
+
kill?: (pid: number, sig: number, info?: SigInfo) => boolean | Promise<boolean>;
|
|
369
373
|
writesBack?: (pid: number) => boolean;
|
|
370
374
|
processes?: () => ProcessListing;
|
|
371
375
|
sudo?: (call: SudoCall, signal: AbortSignal) => Promise<SudoResult>;
|
|
@@ -385,7 +389,7 @@ export interface WasmProcessOptions {
|
|
|
385
389
|
pendingBits?: () => number;
|
|
386
390
|
blockedBits?: () => number;
|
|
387
391
|
dl?: DlState;
|
|
388
|
-
raise?: (sig: number) => void;
|
|
392
|
+
raise?: (sig: number, info?: SigInfo) => void;
|
|
389
393
|
exitNow?: (status: number) => void;
|
|
390
394
|
exitSignal?: (sig: number) => void;
|
|
391
395
|
onReap?: (pid: number) => void;
|
|
@@ -434,7 +438,13 @@ export declare class WasmProcess {
|
|
|
434
438
|
caught: number;
|
|
435
439
|
};
|
|
436
440
|
inheritable(fork?: boolean): number;
|
|
437
|
-
|
|
441
|
+
private readonly sigInfos;
|
|
442
|
+
signal(sig: number, info?: SigInfo): SignalOutcome;
|
|
443
|
+
private threadKill;
|
|
444
|
+
private threadSender;
|
|
445
|
+
private childInfo;
|
|
446
|
+
private takeSigInfo;
|
|
447
|
+
private signalOutcome;
|
|
438
448
|
private routeBlocked;
|
|
439
449
|
private spawn;
|
|
440
450
|
private onDeath;
|
|
@@ -42,3 +42,24 @@ export declare function signalField(sig: number | undefined): {
|
|
|
42
42
|
signal?: string;
|
|
43
43
|
};
|
|
44
44
|
export declare const SIGNAL_BY_NAME: Readonly<Record<'SIGINT' | 'SIGTERM' | 'SIGKILL' | 'SIGSTOP' | 'SIGCONT', number>>;
|
|
45
|
+
export interface SigInfo {
|
|
46
|
+
code: number;
|
|
47
|
+
pid: number;
|
|
48
|
+
uid: number;
|
|
49
|
+
status: number;
|
|
50
|
+
}
|
|
51
|
+
export declare const SI: {
|
|
52
|
+
readonly USER: 0;
|
|
53
|
+
readonly QUEUE: -1;
|
|
54
|
+
readonly TIMER: -2;
|
|
55
|
+
readonly TKILL: -6;
|
|
56
|
+
readonly KERNEL: 128;
|
|
57
|
+
};
|
|
58
|
+
export declare const CLD: {
|
|
59
|
+
readonly EXITED: 1;
|
|
60
|
+
readonly KILLED: 2;
|
|
61
|
+
readonly DUMPED: 3;
|
|
62
|
+
readonly STOPPED: 5;
|
|
63
|
+
readonly CONTINUED: 6;
|
|
64
|
+
};
|
|
65
|
+
export declare const KERNEL_SIGINFO: Readonly<SigInfo>;
|
package/dist/types/launcher.d.ts
CHANGED
|
@@ -22,6 +22,7 @@ import type { RealmTransport } from './kernel/net/transport.js';
|
|
|
22
22
|
import type { NetworkUplink } from './kernel/net/uplink.js';
|
|
23
23
|
import type { ProcessInfo } from './kernel/proc-info.js';
|
|
24
24
|
import { type SealedCaller, type SealedHook } from './kernel/sealed.js';
|
|
25
|
+
import { type SigInfo } from './kernel/signals.js';
|
|
25
26
|
import { LoopbackNet } from './kernel/socket.js';
|
|
26
27
|
import { type MediumHandle } from './mount/fsa.js';
|
|
27
28
|
import { type FstabResult } from './mount/fstab.js';
|
|
@@ -345,7 +346,8 @@ export declare class Launcher {
|
|
|
345
346
|
private controlsJobs;
|
|
346
347
|
private blockedBy;
|
|
347
348
|
private ignoredBy;
|
|
348
|
-
kill(pid: number, sig: number, sender?: Readonly<Cred>, from?: number): boolean;
|
|
349
|
+
kill(pid: number, sig: number, sender?: Readonly<Cred>, from?: number, forwarded?: SigInfo): boolean;
|
|
350
|
+
private senderInfo;
|
|
349
351
|
private killAll;
|
|
350
352
|
private driver;
|
|
351
353
|
private fsaDriver;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-ecoverse/slicc-kernel",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.114.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",
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"@ai-ecoverse/py-numpy": "2.3.2-10",
|
|
67
67
|
"@ai-ecoverse/slicc-node": "2.5.1",
|
|
68
68
|
"@ai-ecoverse/slicc-scrub": "1.0.0",
|
|
69
|
-
"@ai-ecoverse/slicc-shared-web": "1.23.
|
|
69
|
+
"@ai-ecoverse/slicc-shared-web": "1.23.1",
|
|
70
70
|
"@ai-ecoverse/wasi-cargo": "0.99.0-2",
|
|
71
71
|
"@ai-ecoverse/wasi-pnpm": "12.9.1-9",
|
|
72
72
|
"@ai-ecoverse/wasi-ripgrep": "15.2.0-5",
|
|
@@ -78,10 +78,10 @@
|
|
|
78
78
|
"@ai-ecoverse/wasm-curl": "8.22.0-5",
|
|
79
79
|
"@ai-ecoverse/wasm-git": "2.55.0-15",
|
|
80
80
|
"@ai-ecoverse/wasm-procps": "4.0.7-3",
|
|
81
|
-
"@ai-ecoverse/wasm-sqlite3": "3.54.0-
|
|
81
|
+
"@ai-ecoverse/wasm-sqlite3": "3.54.0-5",
|
|
82
82
|
"@ai-ecoverse/wasm-tar": "1.35.0-7",
|
|
83
83
|
"@ai-ecoverse/wasm-tls-engine": "4.2.0-1",
|
|
84
|
-
"@ai-ecoverse/wasm-tree": "2.3.2-
|
|
84
|
+
"@ai-ecoverse/wasm-tree": "2.3.2-4",
|
|
85
85
|
"@ai-ecoverse/wasm-util-linux": "2.42.4-3",
|
|
86
86
|
"@biomejs/biome": "2.5.15",
|
|
87
87
|
"@types/node": "24.19.2",
|