@ai-ecoverse/slicc-kernel 1.152.0 → 1.152.2

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.
@@ -1,6 +1,6 @@
1
1
  import { type MetaStore } from './meta.js';
2
2
  import { type LockManagerLike, type RemoteListener } from './remote.js';
3
- import { type CopyOptions, type FsStat, type KernelFs, type NewOwner, type OwnerChange, type Peers, type Perm } from './types.js';
3
+ import { type CopyOptions, type FsStat, type KernelFs, type NewOwner, type OwnerChange, type Peers, type Perm, type PwriteOptions } from './types.js';
4
4
  export type OpfsOp = 'lookup' | 'read' | 'write' | 'commit' | 'sidecar';
5
5
  export declare function translate(err: unknown, path: string, op?: OpfsOp, mapped?: boolean): Error;
6
6
  export interface WriteSession {
@@ -84,6 +84,8 @@ export declare class OpfsFs implements KernelFs {
84
84
  private calls;
85
85
  private others;
86
86
  opfsCalls(): number;
87
+ private idWrites;
88
+ fileIdWrites(): number;
87
89
  opfsOps(): number;
88
90
  private io;
89
91
  private fresh;
@@ -141,7 +143,7 @@ export declare class OpfsFs implements KernelFs {
141
143
  }>;
142
144
  version(path: string, cached?: boolean): Promise<string>;
143
145
  pread(path: string, offset: number, length: number): Promise<Uint8Array>;
144
- pwrite(path: string, offset: number, bytes: Uint8Array): Promise<void>;
146
+ pwrite(path: string, offset: number, bytes: Uint8Array, _transfer?: boolean, options?: PwriteOptions): Promise<void>;
145
147
  private keptFor;
146
148
  private writeAt;
147
149
  private readonly fileWrites;
@@ -112,7 +112,7 @@ export interface KernelFs {
112
112
  utimes(path: string, atime: Date, mtime: Date): Promise<void>;
113
113
  lutimes?(path: string, atime: Date, mtime: Date): Promise<void>;
114
114
  pread?(path: string, offset: number, length: number, version?: string): Promise<Uint8Array>;
115
- pwrite?(path: string, offset: number, bytes: Uint8Array, transfer?: boolean): Promise<void>;
115
+ pwrite?(path: string, offset: number, bytes: Uint8Array, transfer?: boolean, options?: PwriteOptions): Promise<void>;
116
116
  truncate?(path: string, size: number): Promise<void>;
117
117
  protect?(prefixes: readonly string[], versions?: boolean): void;
118
118
  unguarded?(): KernelFs;
@@ -133,6 +133,10 @@ export interface KernelFs {
133
133
  ackMs: readonly number[];
134
134
  };
135
135
  opfsOps?(): number;
136
+ fileIdWrites?(): number;
137
+ }
138
+ export interface PwriteOptions {
139
+ create?: false;
136
140
  }
137
141
  export type RangedOps = Required<Pick<KernelFs, 'pread' | 'pwrite' | 'truncate'>>;
138
142
  export declare function rangedOps(fs: Partial<RangedOps>): RangedOps | undefined;
@@ -6,16 +6,19 @@ export interface Replacements {
6
6
  generation(): number;
7
7
  changedSince(path: string, gen: number): boolean;
8
8
  inFlight?(path: string): boolean;
9
+ landed?(path: string): Promise<void>;
9
10
  }
10
11
  export declare class PathMarks {
11
12
  private gen;
12
13
  private floor;
13
14
  private readonly touched;
14
15
  private readonly flying;
16
+ private readonly waiting;
15
17
  generation(): number;
16
18
  touch(target: string): void;
17
19
  changedSince(path: string, gen: number): boolean;
18
20
  around<T>(paths: readonly string[], op: () => Promise<T>): Promise<T>;
21
+ landed(path: string): Promise<void>;
19
22
  inFlight(path: string): boolean;
20
23
  }
21
24
  export interface KeptFile {
@@ -87,6 +90,7 @@ export declare class UnlinkedKeeper {
87
90
  settled(path: string): Promise<void>;
88
91
  generation(): number;
89
92
  changedSince(path: string, gen: number): boolean;
93
+ landed(path: string): Promise<void>;
90
94
  inFlight(path: string): boolean;
91
95
  missed(path: string): boolean;
92
96
  settle(pinned: Pinned, op: () => Promise<void>): Promise<void>;
@@ -93,6 +93,7 @@ export interface SpawnWasmOptions {
93
93
  now: number;
94
94
  renames: Array<[string, string]>;
95
95
  };
96
+ fileId?: (path: string) => Promise<string> | undefined;
96
97
  renameSeq?: (from: string, to: string) => number | undefined;
97
98
  mounts?: () => MountLine[];
98
99
  mount?: WasmProcessOptions['mount'];
@@ -55,6 +55,7 @@ export interface ProcessListing {
55
55
  opfsOps?: number;
56
56
  cwdChecks?: number;
57
57
  staleFds?: number;
58
+ fileIds?: number;
58
59
  renameAcks?: {
59
60
  acks: number;
60
61
  busy: number;
@@ -422,6 +422,7 @@ export declare class Launcher {
422
422
  fsFor(tag: string | undefined): KernelFs;
423
423
  isWriter(tags: readonly string[] | undefined, base?: number): boolean;
424
424
  private stackFor;
425
+ private rootFileId;
425
426
  private flushingPeers;
426
427
  private rewritten;
427
428
  private flushOpen;
@@ -54,6 +54,7 @@ export declare class HeldSet extends Set<HeldPaths> {
54
54
  constructor(idle: (path: string) => void);
55
55
  add(holds: HeldPaths): this;
56
56
  doubt(paths: readonly string[], over?: string): void;
57
+ bindIds(id: (path: string) => Promise<string> | undefined): Promise<void>;
57
58
  delete(holds: HeldPaths): boolean;
58
59
  }
59
60
  export declare function heldUnder(held: Iterable<Map<string, number>>, target: string): boolean;
@@ -80,9 +81,12 @@ export declare class HeldPaths extends Map<string, number> implements UnlinkHold
80
81
  doubt(over: string, exact?: boolean): void;
81
82
  boundIno(handle: number): {
82
83
  ino: number;
84
+ fid?: string;
83
85
  doubt: number;
84
86
  } | undefined;
87
+ bindIds(id: (path: string) => Promise<string> | undefined): Promise<void>;
85
88
  trust(handle: number, doubt: number): void;
89
+ pathOf(handle: number): string | undefined;
86
90
  keptFor(handle: number): KeptFile | undefined;
87
91
  holdsHandle(handle: number): boolean;
88
92
  keeps(hidden: string): boolean;
@@ -90,7 +94,7 @@ export declare class HeldPaths extends Map<string, number> implements UnlinkHold
90
94
  unkeep(path: string, file: KeptFile): void;
91
95
  private letGo;
92
96
  releaseAll(): void;
93
- hold(path: string, on: boolean, open?: boolean, real?: string, handle?: number, ino?: number): number | undefined;
97
+ hold(path: string, on: boolean, open?: boolean, real?: string, handle?: number, ino?: number, fid?: string): number | undefined;
94
98
  private holdOpen;
95
99
  private holdWrite;
96
100
  own<T>(path: string, op: () => Promise<T>): Promise<T>;
@@ -3,7 +3,7 @@ import type { HeldCwd } from '../../kernel/held-cwd.js';
3
3
  import type { WasmSyscall } from '../../kernel/process.js';
4
4
  import { type SyncFsBridgeStat, type SyncFsPosixBridge } from '../../realm/sync-fs-wire.js';
5
5
  import type { ProcessSys } from '../kernel-streams.js';
6
- import { FileBuffer, type WasiEntry } from './wasi-files.js';
6
+ import { FileBuffer, LocalFile, type WasiEntry } from './wasi-files.js';
7
7
  export interface WasiKernel {
8
8
  sys: ProcessSys;
9
9
  call(req: WasmSyscall): unknown;
@@ -109,6 +109,7 @@ export declare class WasiFds {
109
109
  type: 'kernel';
110
110
  }>): boolean;
111
111
  flushAll(): void;
112
+ synced(file: LocalFile): void;
112
113
  flushEarly(): void;
113
114
  reread(fd: number): void;
114
115
  flushPath(path: string): void;
@@ -34,6 +34,9 @@ export declare class FileBuffer {
34
34
  keep(): void;
35
35
  prefetch(): void;
36
36
  load(): Uint8Array;
37
+ private spoiled;
38
+ spoil(): void;
39
+ private live;
37
40
  size(): number;
38
41
  pread(max: number, at: number): Uint8Array;
39
42
  fits(end: number): void;
@@ -10,12 +10,15 @@ export interface SyncFsTokenEntry {
10
10
  quota: number;
11
11
  usage: number;
12
12
  } | undefined>;
13
- hold?: (path: string, held: boolean, open: boolean, real?: string, handle?: number, ino?: number) => number | undefined;
13
+ hold?: (path: string, held: boolean, open: boolean, real?: string, handle?: number, ino?: number, fid?: string) => number | undefined;
14
14
  keptFor?: (handle: number) => KeptFile | undefined;
15
+ heldAt?: (handle: number) => string | undefined;
15
16
  boundIno?: (handle: number) => {
16
17
  ino: number;
18
+ fid?: string;
17
19
  doubt: number;
18
20
  } | undefined;
21
+ fileId?: (path: string) => Promise<string> | undefined;
19
22
  trust?: (handle: number, doubt: number) => void;
20
23
  gate?: <T>(path: string, op: () => Promise<T>) => Promise<T>;
21
24
  unlinked?: (path: string) => KeptFile | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-ecoverse/slicc-kernel",
3
- "version": "1.152.0",
3
+ "version": "1.152.2",
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",
@@ -64,7 +64,7 @@
64
64
  },
65
65
  "devDependencies": {
66
66
  "@ai-ecoverse/py-numpy": "2.5.4-4",
67
- "@ai-ecoverse/slicc-cdp": "1.38.0",
67
+ "@ai-ecoverse/slicc-cdp": "1.39.1",
68
68
  "@ai-ecoverse/slicc-node": "2.5.2",
69
69
  "@ai-ecoverse/slicc-scrub": "1.1.0",
70
70
  "@ai-ecoverse/slicc-shared-web": "2.11.3",