@ai-ecoverse/slicc-kernel 1.132.0 → 1.133.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 +17 -0
- package/dist/kernel-worker.js +12 -2
- package/dist/kernel-worker.js.map +3 -3
- package/dist/node-process-worker.js +3500 -3186
- package/dist/node-process-worker.js.map +4 -4
- package/dist/node.js +12 -2
- package/dist/node.js.map +3 -3
- package/dist/process-worker.js +324 -10
- package/dist/process-worker.js.map +4 -4
- package/dist/types/fs/physical-path.d.ts +1 -0
- package/dist/types/kernel/protocol.d.ts +2 -0
- package/dist/types/process/js/js-context.d.ts +5 -0
- package/dist/types/process/js/js-sync.d.ts +5 -1
- package/dist/types/process/js/js-wasi.d.ts +47 -0
- package/dist/types/process/process-children.d.ts +55 -0
- package/dist/types/process/process-fork.d.ts +10 -0
- package/dist/types/process/process-http.d.ts +19 -0
- package/dist/types/process/process-runtime.d.ts +55 -0
- package/dist/types/process/process-sockets.d.ts +38 -0
- package/dist/types/process/realm-user.d.ts +9 -0
- package/dist/types/process/wasi/wasi-fds.d.ts +2 -0
- package/dist/types/process/wasi/wasi-host.d.ts +1 -0
- package/package.json +5 -4
|
@@ -5,6 +5,7 @@ export interface LinkReader {
|
|
|
5
5
|
readlink(path: string): string;
|
|
6
6
|
}
|
|
7
7
|
export declare function physicalPath(fs: LinkReader, path: string): string;
|
|
8
|
+
export declare function physicalLeaf(fs: LinkReader, path: string): string | undefined;
|
|
8
9
|
export interface AsyncLinkReader {
|
|
9
10
|
lstat(path: string): Promise<{
|
|
10
11
|
isSymbolicLink?: boolean;
|
|
@@ -20,6 +20,7 @@ export declare const JS_MAX_THREADS = 256;
|
|
|
20
20
|
export declare const JS_DEFAULT_THREADS = 16;
|
|
21
21
|
export declare const JS_THREAD_NO_MEMORY = 256;
|
|
22
22
|
export declare const JS_THREAD_CRASHED = 257;
|
|
23
|
+
export declare const JS_THREAD_OWNED_FDS = 1024;
|
|
23
24
|
export interface WasmProgram {
|
|
24
25
|
abi?: 'emscripten' | 'wasi';
|
|
25
26
|
glue: string;
|
|
@@ -117,6 +118,7 @@ export interface JsThreadStart {
|
|
|
117
118
|
tid: number;
|
|
118
119
|
port: MessagePort;
|
|
119
120
|
data: unknown;
|
|
121
|
+
owned?: SharedArrayBuffer;
|
|
120
122
|
}
|
|
121
123
|
export type JsThreadInitMsg = Omit<JsProcessInitMsg, 'type'> & {
|
|
122
124
|
type: typeof JS_THREAD_INIT;
|
|
@@ -147,6 +147,11 @@ export interface ContextOptions {
|
|
|
147
147
|
lane?: SyncCall;
|
|
148
148
|
strays?: JsStrays;
|
|
149
149
|
thread: JsThreadContext;
|
|
150
|
+
fs?: {
|
|
151
|
+
owners: boolean;
|
|
152
|
+
links: boolean;
|
|
153
|
+
};
|
|
154
|
+
owned?: SharedArrayBuffer;
|
|
150
155
|
}
|
|
151
156
|
export interface Identity {
|
|
152
157
|
pid: number;
|
|
@@ -7,6 +7,7 @@ import { type FdInfo, type JsOpenOptions, type JsStatFs, type JsWriteOptions } f
|
|
|
7
7
|
import { type JsKernel } from './js-kernel.js';
|
|
8
8
|
import type { JsRunOptions, JsRunResult } from './js-run.js';
|
|
9
9
|
import type { JsSyncTty } from './js-tty.js';
|
|
10
|
+
import type { JsWasi, JsWasiOptions } from './js-wasi.js';
|
|
10
11
|
import type { JsWatcher, JsWatchListener, JsWatchOptions } from './js-watch.js';
|
|
11
12
|
export type SyncCall = (req: SyncSabRequestBody) => SyncFsResult;
|
|
12
13
|
export interface JsSyncFile {
|
|
@@ -46,6 +47,9 @@ export interface JsSyncContext {
|
|
|
46
47
|
socketpair(): [number, number];
|
|
47
48
|
pipe(): [number, number];
|
|
48
49
|
open(path: string, options?: JsOpenOptions): JsSyncFile;
|
|
50
|
+
wasi: {
|
|
51
|
+
create(options?: JsWasiOptions): JsWasi;
|
|
52
|
+
};
|
|
49
53
|
fs: {
|
|
50
54
|
stat(path: string): SyncFsBridgeStat;
|
|
51
55
|
lstat(path: string): SyncFsBridgeStat;
|
|
@@ -91,6 +95,6 @@ export declare class JsSyncKernel {
|
|
|
91
95
|
bytes(req: SyncSabRequestBody): Uint8Array;
|
|
92
96
|
blocking(req: SyncSabRequestBody): SyncFsResult;
|
|
93
97
|
}
|
|
94
|
-
export declare function syncOps(kernel: JsSyncKernel, shared: SyncShared): Omit<JsSyncContext, 'run' | 'spawn' | 'exit' | 'kill' | 'cred' | 'setcred' | 'kernel' | 'umask' | 'fs' | 'tty'> & {
|
|
98
|
+
export declare function syncOps(kernel: JsSyncKernel, shared: SyncShared): Omit<JsSyncContext, 'run' | 'spawn' | 'exit' | 'kill' | 'cred' | 'setcred' | 'kernel' | 'umask' | 'fs' | 'tty' | 'wasi'> & {
|
|
95
99
|
fs: Omit<JsSyncContext['fs'], 'watch'>;
|
|
96
100
|
};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { type WasiFunction } from '../wasi/wasi-host.js';
|
|
2
|
+
import type { SyncCall } from './js-sync.js';
|
|
3
|
+
export interface JsWasiOptions {
|
|
4
|
+
args?: readonly string[];
|
|
5
|
+
env?: Readonly<Record<string, string>>;
|
|
6
|
+
preopens?: Readonly<Record<string, string>>;
|
|
7
|
+
stdio?: readonly [number, number, number];
|
|
8
|
+
returnOnExit?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface JsWasi {
|
|
11
|
+
readonly imports: {
|
|
12
|
+
wasi_snapshot_preview1: Record<string, WasiFunction>;
|
|
13
|
+
};
|
|
14
|
+
readonly wasiImport: Record<string, WasiFunction>;
|
|
15
|
+
bind(memory: WebAssembly.Memory): void;
|
|
16
|
+
start(instance: WebAssembly.Instance): number;
|
|
17
|
+
initialize(instance: WebAssembly.Instance): void;
|
|
18
|
+
close(): void;
|
|
19
|
+
}
|
|
20
|
+
export declare class JsWasiExit extends Error {
|
|
21
|
+
readonly code: number;
|
|
22
|
+
constructor(code: number);
|
|
23
|
+
}
|
|
24
|
+
export interface JsWasiDeps {
|
|
25
|
+
lane: SyncCall;
|
|
26
|
+
pid: number;
|
|
27
|
+
cwd: string;
|
|
28
|
+
resolve(path: string): string;
|
|
29
|
+
fs: {
|
|
30
|
+
owners: boolean;
|
|
31
|
+
links: boolean;
|
|
32
|
+
} | undefined;
|
|
33
|
+
live: Set<JsWasi>;
|
|
34
|
+
owned: OwnedFds;
|
|
35
|
+
}
|
|
36
|
+
export interface OwnedFds {
|
|
37
|
+
add(fd: number): void;
|
|
38
|
+
remove(fd: number): void;
|
|
39
|
+
}
|
|
40
|
+
export declare function ownedFds(sab: SharedArrayBuffer | undefined): OwnedFds;
|
|
41
|
+
export declare function createJsWasi(deps: JsWasiDeps, o?: JsWasiOptions): JsWasi;
|
|
42
|
+
export declare function wasiFor(o: Omit<JsWasiDeps, 'live' | 'owned'> & {
|
|
43
|
+
owned: SharedArrayBuffer | undefined;
|
|
44
|
+
}): {
|
|
45
|
+
create(options?: JsWasiOptions): JsWasi;
|
|
46
|
+
closeAll(): void;
|
|
47
|
+
};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { InheritedSlot } from '../kernel/children.js';
|
|
2
|
+
import type { Cred, CredChange } from '../kernel/cred.js';
|
|
3
|
+
import type { ForkState, ForkStream } from '../kernel/protocol.js';
|
|
4
|
+
import type { SyncFsResult } from '../realm/sync-fs-wire.js';
|
|
5
|
+
import type { SyncSabTransport } from '../realm/sync-sab-bridge.js';
|
|
6
|
+
import type { ProcessFs, ProcessStream } from './kernel-streams.js';
|
|
7
|
+
import type { HttpKernel } from './process-http.js';
|
|
8
|
+
import type { SocketKernel } from './process-sockets.js';
|
|
9
|
+
import type { Owner } from './realm-user.js';
|
|
10
|
+
export declare function inheritedOf(r: SyncFsResult): number;
|
|
11
|
+
export declare function inheritedSignals(transport: SyncSabTransport): number;
|
|
12
|
+
export interface ProcessKernel {
|
|
13
|
+
spawn(file: string, argv: string[], env: Record<string, string> | null, cwd: string | null, stdio: number[], actions?: ReadonlyArray<readonly [number, number]>): number;
|
|
14
|
+
wait(pid: number, nohang: boolean, options?: number): [number, number] | number;
|
|
15
|
+
fork(state: ForkState): number;
|
|
16
|
+
kill(pid: number, sig: number): number;
|
|
17
|
+
pause(): number;
|
|
18
|
+
sigInherited(): number;
|
|
19
|
+
setpgid(pid: number, pgid: number): number;
|
|
20
|
+
setsid(): number;
|
|
21
|
+
getpgid(pid: number): number;
|
|
22
|
+
getsid(pid: number): number;
|
|
23
|
+
cred(): Cred | number;
|
|
24
|
+
setcred(change: CredChange): Cred | number;
|
|
25
|
+
tcgetpgrp(fd: number): number;
|
|
26
|
+
tcsetpgrp(fd: number, pgrp: number): number;
|
|
27
|
+
execWait(pid: number): number;
|
|
28
|
+
execve(file: string, argv: string[], env: Record<string, string> | null, cwd: string | null): number;
|
|
29
|
+
mount(source: string, target: string, fstype: string, flags: number, data: string): number;
|
|
30
|
+
umount2(target: string, flags: number): number;
|
|
31
|
+
select(read: number[], write: number[], timeoutMs: number): {
|
|
32
|
+
read: number[];
|
|
33
|
+
write: number[];
|
|
34
|
+
} | number;
|
|
35
|
+
net?: SocketKernel;
|
|
36
|
+
hostname?: string;
|
|
37
|
+
http?: HttpKernel;
|
|
38
|
+
}
|
|
39
|
+
export interface ProcessKernelDeps {
|
|
40
|
+
transport: SyncSabTransport;
|
|
41
|
+
owner?: Owner;
|
|
42
|
+
Fs: ProcessFs;
|
|
43
|
+
env: Record<string, string>;
|
|
44
|
+
beforeSpawn(): void;
|
|
45
|
+
afterChild(): void;
|
|
46
|
+
describeFork(): ForkStream[];
|
|
47
|
+
inherit?(actions?: ReadonlyArray<readonly [number, number]>): InheritedSlot[];
|
|
48
|
+
stdioPromoter?(): (stream: ProcessStream) => void;
|
|
49
|
+
pid?: number;
|
|
50
|
+
raise?(sig: number): void;
|
|
51
|
+
restartable?(): boolean;
|
|
52
|
+
memory?(): WebAssembly.Memory | undefined;
|
|
53
|
+
deliveries?(): number;
|
|
54
|
+
}
|
|
55
|
+
export declare function createProcessKernel(deps: ProcessKernelDeps): ProcessKernel;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { InheritedSlot } from '../kernel/children.js';
|
|
2
|
+
import type { DeviceMeta } from '../kernel/fd-table.js';
|
|
3
|
+
import type { ForkStream, KernelStreamEntry } from '../kernel/protocol.js';
|
|
4
|
+
import type { KernelStreams, ProcessFs, ProcessStream, ProcessSys } from './kernel-streams.js';
|
|
5
|
+
export declare function vfsPromoter(Fs: ProcessFs, sys: ProcessSys, streams: KernelStreams, livePath: (stream: ProcessStream) => string): (stream: ProcessStream) => void;
|
|
6
|
+
export declare function describeForFork(Fs: ProcessFs, sys: ProcessSys, streams: KernelStreams, livePath: (stream: ProcessStream) => string): ForkStream[];
|
|
7
|
+
export declare function describeInherited(Fs: ProcessFs, sys: ProcessSys, streams: KernelStreams, livePath: (stream: ProcessStream) => string, actions?: ReadonlyArray<readonly [number, number]>): InheritedSlot[];
|
|
8
|
+
export declare function deviceOfStream(stream: ProcessStream): DeviceMeta | undefined;
|
|
9
|
+
export declare function placeKernelStream(Fs: ProcessFs, streams: KernelStreams, entry: KernelStreamEntry): ProcessStream;
|
|
10
|
+
export declare function restoreForkedStreams(Fs: ProcessFs, streams: KernelStreams, table: readonly ForkStream[]): void;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { HttpHead } from '../kernel/net/http-syscalls.js';
|
|
2
|
+
import type { HeaderList } from '../kernel/net/transport.js';
|
|
3
|
+
import type { SyncSabTransport } from '../realm/sync-sab-bridge.js';
|
|
4
|
+
export interface HttpRequest {
|
|
5
|
+
url: string;
|
|
6
|
+
method?: string;
|
|
7
|
+
headers?: HeaderList;
|
|
8
|
+
body?: Uint8Array;
|
|
9
|
+
}
|
|
10
|
+
export interface HttpKernel {
|
|
11
|
+
request(req: HttpRequest): HttpHead;
|
|
12
|
+
read(handle: number, max: number): Uint8Array;
|
|
13
|
+
close(handle: number): void;
|
|
14
|
+
}
|
|
15
|
+
export declare class HttpError extends Error {
|
|
16
|
+
readonly code: string;
|
|
17
|
+
constructor(code: string, message: string);
|
|
18
|
+
}
|
|
19
|
+
export declare function createHttpKernel(transport: SyncSabTransport): HttpKernel;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { type ForkState, type InheritedFd, type WasmProcessInitMsg } from '../kernel/protocol.js';
|
|
2
|
+
import { type SabPostLike, type SyncSabTransport } from '../realm/sync-sab-bridge.js';
|
|
3
|
+
import { KernelStreams, type ProcessFs, type ProcessPipeFs, type ProcessSys } from './kernel-streams.js';
|
|
4
|
+
import { type ProcessKernel } from './process-children.js';
|
|
5
|
+
import { type GlueSyscalls, type KernelImports } from './process-fds.js';
|
|
6
|
+
import { type LockKernel } from './process-locks.js';
|
|
7
|
+
import type { PtyKernel } from './process-pty.js';
|
|
8
|
+
export { type ProcessFs, type ProcessStream, type ProcessSys, SyscallError, } from './kernel-streams.js';
|
|
9
|
+
export declare function kernelSys(transport: SyncSabTransport): ProcessSys & PtyKernel & LockKernel;
|
|
10
|
+
export declare function wireKernelFd(Fs: ProcessFs, streams: KernelStreams, entry: InheritedFd): void;
|
|
11
|
+
export declare function wireKernelStdio(Fs: ProcessFs, streams: KernelStreams, sys?: ProcessSys): void;
|
|
12
|
+
interface RunningModule {
|
|
13
|
+
FS: ProcessFs;
|
|
14
|
+
callMain(args: string[]): number | undefined;
|
|
15
|
+
sliccRunMain?: (args: string[]) => number | undefined;
|
|
16
|
+
sliccForkChild?: (state: ForkState & {
|
|
17
|
+
pid: number;
|
|
18
|
+
}) => number | undefined;
|
|
19
|
+
PIPEFS?: ProcessPipeFs;
|
|
20
|
+
sliccSigpipe?: () => number;
|
|
21
|
+
sliccSigMask?: (which: number) => number;
|
|
22
|
+
sliccRaise?: (sig: number) => void;
|
|
23
|
+
sliccTimerFire?: (which: number) => boolean;
|
|
24
|
+
sliccKernel?: ProcessKernel;
|
|
25
|
+
sliccSyscalls?: GlueSyscalls;
|
|
26
|
+
}
|
|
27
|
+
export type GlueEvaluator = (glue: string, module: object) => void;
|
|
28
|
+
export declare function glueBody(glue: string): string;
|
|
29
|
+
export declare function ownValue<T>(module: object, name: string): T | undefined;
|
|
30
|
+
export declare const evaluateGlue: GlueEvaluator;
|
|
31
|
+
export declare const EVAL_BLOCKED: string;
|
|
32
|
+
export declare function identify(transport: SyncSabTransport, init: {
|
|
33
|
+
pid: number;
|
|
34
|
+
ppid?: number;
|
|
35
|
+
}): {
|
|
36
|
+
pid: number;
|
|
37
|
+
ppid: number;
|
|
38
|
+
};
|
|
39
|
+
export declare function liveParent(imports: WebAssembly.Imports, parent: () => number, glue?: KernelImports): void;
|
|
40
|
+
export declare function signalMasks(m: Pick<RunningModule, 'sliccSigMask'>): {
|
|
41
|
+
caught: number;
|
|
42
|
+
ignored: number;
|
|
43
|
+
restart: number;
|
|
44
|
+
} | null;
|
|
45
|
+
export declare function reportGrowth(imports: WebAssembly.Imports, publish: () => void, glue?: KernelImports): void;
|
|
46
|
+
export declare function holdWhileStopped(imports: WebAssembly.Imports, header: Int32Array, glue?: KernelImports, poll?: () => void): void;
|
|
47
|
+
export declare function runWasmProcess(init: WasmProcessInitMsg, port: SabPostLike, deps?: {
|
|
48
|
+
evaluate?: GlueEvaluator;
|
|
49
|
+
warn?: (message: string) => void;
|
|
50
|
+
}): Promise<number>;
|
|
51
|
+
interface QuitFs {
|
|
52
|
+
quit?: () => void;
|
|
53
|
+
close: (stream: unknown) => void;
|
|
54
|
+
}
|
|
55
|
+
export declare function quietQuit(Fs: QuitFs, quitting?: (on: boolean) => void): void;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { SockAddr, SocketDomain } from '../kernel/socket.js';
|
|
2
|
+
import type { SyncSabTransport } from '../realm/sync-sab-bridge.js';
|
|
3
|
+
import { type KernelStreams, type ProcessFs, type ProcessSys } from './kernel-streams.js';
|
|
4
|
+
export interface SocketKernel {
|
|
5
|
+
socket(domain: SocketDomain, nonblock: boolean, cloexec?: boolean): number;
|
|
6
|
+
socketpair(domain: SocketDomain, nonblock: boolean, cloexec?: boolean): [number, number] | number;
|
|
7
|
+
bind(fd: number, addr: SockAddr): number;
|
|
8
|
+
listen(fd: number, backlog: number): number;
|
|
9
|
+
accept(fd: number, nonblock: boolean, cloexec?: boolean): {
|
|
10
|
+
fd: number;
|
|
11
|
+
peer: SockAddr;
|
|
12
|
+
} | number;
|
|
13
|
+
connect(fd: number, addr: SockAddr): number;
|
|
14
|
+
shutdown(fd: number, how: number): number;
|
|
15
|
+
name(fd: number, peer: boolean): SockAddr | number;
|
|
16
|
+
getopt(fd: number, level: number, name: number): {
|
|
17
|
+
value: number;
|
|
18
|
+
} | number;
|
|
19
|
+
setopt(fd: number, level: number, name: number, value: number): number;
|
|
20
|
+
resolve(name: string, family?: 0 | 4 | 6): string[] | number;
|
|
21
|
+
send(fd: number, bytes: Uint8Array, flags: {
|
|
22
|
+
dontwait?: boolean;
|
|
23
|
+
nosignal?: boolean;
|
|
24
|
+
}): number;
|
|
25
|
+
recv(fd: number, max: number, flags: {
|
|
26
|
+
dontwait?: boolean;
|
|
27
|
+
peek?: boolean;
|
|
28
|
+
}): Uint8Array | number;
|
|
29
|
+
}
|
|
30
|
+
export interface SocketKernelDeps {
|
|
31
|
+
transport: SyncSabTransport;
|
|
32
|
+
Fs: ProcessFs;
|
|
33
|
+
sys: ProcessSys;
|
|
34
|
+
streams: KernelStreams;
|
|
35
|
+
sigpipe?: () => boolean;
|
|
36
|
+
restartable?: () => boolean;
|
|
37
|
+
}
|
|
38
|
+
export declare function createSocketKernel(deps: SocketKernelDeps): SocketKernel;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Cred } from '../kernel/cred.js';
|
|
2
|
+
import type { ProcessFs } from './kernel-streams.js';
|
|
3
|
+
export interface Owner {
|
|
4
|
+
uid: number;
|
|
5
|
+
gid: number;
|
|
6
|
+
}
|
|
7
|
+
export declare const LEGACY_OWNER: Readonly<Owner>;
|
|
8
|
+
export declare function credAbi(glue: string): boolean;
|
|
9
|
+
export declare function ownByCaller(Fs: ProcessFs, cred?: Readonly<Cred>, abi?: boolean): Owner;
|
|
@@ -43,6 +43,8 @@ export declare class WasiFds {
|
|
|
43
43
|
flags?: number;
|
|
44
44
|
device?: DeviceMeta;
|
|
45
45
|
}>, root?: boolean): void;
|
|
46
|
+
adoptCopy(fd: number): number;
|
|
47
|
+
preopenAt(path: string, name: string): number;
|
|
46
48
|
private preopens;
|
|
47
49
|
find(fd: number): WasiEntry | undefined;
|
|
48
50
|
private shared;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-ecoverse/slicc-kernel",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.133.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",
|
|
@@ -63,16 +63,16 @@
|
|
|
63
63
|
"format": "biome check --write ."
|
|
64
64
|
},
|
|
65
65
|
"devDependencies": {
|
|
66
|
-
"@ai-ecoverse/py-numpy": "2.
|
|
66
|
+
"@ai-ecoverse/py-numpy": "2.5.4-1",
|
|
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.
|
|
69
|
+
"@ai-ecoverse/slicc-shared-web": "1.25.0",
|
|
70
70
|
"@ai-ecoverse/wasi-cargo": "0.99.0-3",
|
|
71
71
|
"@ai-ecoverse/wasi-pnpm": "12.9.1-15",
|
|
72
72
|
"@ai-ecoverse/wasi-ripgrep": "15.2.0-5",
|
|
73
73
|
"@ai-ecoverse/wasi-rustc": "1.98.1-6",
|
|
74
74
|
"@ai-ecoverse/wasi-zig": "0.16.0-17",
|
|
75
|
-
"@ai-ecoverse/wasix-python": "3.
|
|
75
|
+
"@ai-ecoverse/wasix-python": "3.15.0-2",
|
|
76
76
|
"@ai-ecoverse/wasm-bash": "5.3.0-20",
|
|
77
77
|
"@ai-ecoverse/wasm-coreutils": "9.12.0-10",
|
|
78
78
|
"@ai-ecoverse/wasm-curl": "8.22.0-7",
|
|
@@ -90,6 +90,7 @@
|
|
|
90
90
|
"fake-indexeddb": "6.2.5",
|
|
91
91
|
"lefthook": "2.2.1",
|
|
92
92
|
"monocart-coverage-reports": "2.13.2",
|
|
93
|
+
"pg-gateway": "0.3.0-beta.4",
|
|
93
94
|
"playwright-core": "1.64.0",
|
|
94
95
|
"semantic-release": "25.0.9",
|
|
95
96
|
"typescript": "7.0.2",
|