@mnemonik/shared 7.154.3 → 7.156.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/dist/ast/grammars.d.ts +4 -2
- package/dist/ast/grammars.d.ts.map +1 -1
- package/dist/ast/grammars.js +45 -3
- package/dist/ast/grammars.js.map +1 -1
- package/dist/codeScanner.d.ts +26 -329
- package/dist/codeScanner.d.ts.map +1 -1
- package/dist/codeScanner.js +65 -1141
- package/dist/codeScanner.js.map +1 -1
- package/dist/fileSelection.d.ts +451 -0
- package/dist/fileSelection.d.ts.map +1 -0
- package/dist/fileSelection.js +1256 -0
- package/dist/fileSelection.js.map +1 -0
- package/dist/hookTrace.d.ts +40 -0
- package/dist/hookTrace.d.ts.map +1 -1
- package/dist/hookTrace.js +126 -0
- package/dist/hookTrace.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/runtimeAssets.d.ts +12 -0
- package/dist/runtimeAssets.d.ts.map +1 -0
- package/dist/runtimeAssets.js +43 -0
- package/dist/runtimeAssets.js.map +1 -0
- package/dist/sourceRedaction.d.ts +45 -1
- package/dist/sourceRedaction.d.ts.map +1 -1
- package/dist/sourceRedaction.js +62 -22
- package/dist/sourceRedaction.js.map +1 -1
- package/dist/sourceRedactionPool.d.ts +198 -0
- package/dist/sourceRedactionPool.d.ts.map +1 -0
- package/dist/sourceRedactionPool.js +756 -0
- package/dist/sourceRedactionPool.js.map +1 -0
- package/dist/vueSource.d.ts +0 -2
- package/dist/vueSource.d.ts.map +1 -1
- package/dist/vueSource.js +8 -19
- package/dist/vueSource.js.map +1 -1
- package/package.json +5 -1
- package/src/ast/grammars.ts +52 -7
- package/src/codeScanner.ts +121 -1321
- package/src/fileSelection.ts +1440 -0
- package/src/hookTrace.ts +143 -0
- package/src/index.ts +31 -2
- package/src/runtimeAssets.ts +49 -0
- package/src/sourceRedaction.ts +85 -20
- package/src/sourceRedactionPool.ts +877 -0
- package/src/vueSource.ts +8 -23
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { type Worker } from 'node:worker_threads';
|
|
2
|
+
/** At and above this length a file gets a child of its own, sized from it. */
|
|
3
|
+
export declare const LARGE_FILE_BYTES: number;
|
|
4
|
+
/** The shared child's heap: comfortably above any file under LARGE_FILE_BYTES. */
|
|
5
|
+
export declare const SHARED_HEAP_MB = 256;
|
|
6
|
+
export declare const STALL_POLL_MS = 5000;
|
|
7
|
+
/** One minute without any CPU while holding a file. */
|
|
8
|
+
export declare const STALL_POLLS = 12;
|
|
9
|
+
/**
|
|
10
|
+
* CPU a single file may use. Generous: the slowest files measured (26 October
|
|
11
|
+
* 2026, loaded host) were a 3.1 MB Svelte component at 23 s and a 9.9 MB Vue
|
|
12
|
+
* component at 17 s.
|
|
13
|
+
*/
|
|
14
|
+
export declare const CPU_CEILING_SECONDS = 300;
|
|
15
|
+
/**
|
|
16
|
+
* CPU a single file may use in the shared small-file child before it is sent
|
|
17
|
+
* to a child of its own: one tenant's crafted file must not stall small-file
|
|
18
|
+
* redaction for everyone on the task.
|
|
19
|
+
*/
|
|
20
|
+
export declare const SHARED_CPU_CEILING_SECONDS = 30;
|
|
21
|
+
/**
|
|
22
|
+
* Failures that say something about the file itself, which a scanner counts
|
|
23
|
+
* as strikes against that revision: it ran to the CPU ceiling, ran out of
|
|
24
|
+
* memory at twice its heap, or could not be redacted. Not counted: a child
|
|
25
|
+
* that would not fit in memory now, or one that stalled; those are retried.
|
|
26
|
+
*/
|
|
27
|
+
export declare const STRIKE_REASONS: ReadonlySet<string>;
|
|
28
|
+
/** Large children a pool runs at once, memory permitting. */
|
|
29
|
+
export declare const MAX_LARGE_CHILDREN = 2;
|
|
30
|
+
/**
|
|
31
|
+
* A scanner's total memory, itself and its redaction children: the systemd
|
|
32
|
+
* unit's MemoryMax, and the budget used where no control group limits it.
|
|
33
|
+
*/
|
|
34
|
+
export declare const SCANNER_TOTAL_MEMORY_MB = 1536;
|
|
35
|
+
/**
|
|
36
|
+
* The heap a file's child may use: 128 MB plus 16 MB per MB of source (as F2's
|
|
37
|
+
* parse pool), or 110 MB per MB for Vue and Svelte components. Measured 26
|
|
38
|
+
* October 2026 (Liftoff-only): a 9.9 MB Vue component of about 100,000
|
|
39
|
+
* template nodes ran out of memory at 900 MB and completed at 1,228 MB (peak
|
|
40
|
+
* resident 1.13 GB); a 3.1 MB Svelte component completed at 500 MB.
|
|
41
|
+
*/
|
|
42
|
+
export declare function redactionHeapMb(bytes: number, filePath?: string): number;
|
|
43
|
+
/** Resident memory a child uses beyond its heap (code, grammars, buffers). */
|
|
44
|
+
export declare const CHILD_OVERHEAD_MB = 128;
|
|
45
|
+
/** Memory left free for everything else when a large child is admitted. */
|
|
46
|
+
export declare const ADMISSION_RESERVE_MB = 256;
|
|
47
|
+
/** What a memory probe reports, in MB. */
|
|
48
|
+
export interface MemoryReading {
|
|
49
|
+
limitMb: number;
|
|
50
|
+
usedMb: number;
|
|
51
|
+
/** Whether usedMb already includes this pool's running children. */
|
|
52
|
+
includesChildren: boolean;
|
|
53
|
+
source: string;
|
|
54
|
+
}
|
|
55
|
+
export type MemoryProbe = () => MemoryReading | Promise<MemoryReading>;
|
|
56
|
+
export interface CgroupMemory {
|
|
57
|
+
/** null when the group has no limit. */
|
|
58
|
+
limitMb: number | null;
|
|
59
|
+
/** memory.current: everything charged, page cache included. */
|
|
60
|
+
currentMb: number;
|
|
61
|
+
/** memory.current less inactive file cache: what the kernel cannot easily reclaim. */
|
|
62
|
+
workingSetMb: number;
|
|
63
|
+
}
|
|
64
|
+
type ReadText = (path: string) => string;
|
|
65
|
+
/** This process's control group memory (v2, else v1), or null where there is none. */
|
|
66
|
+
export declare function cgroupMemory(read?: ReadText): CgroupMemory | null;
|
|
67
|
+
/**
|
|
68
|
+
* The API server's probe: the task's memory limit (ECS task metadata, else the
|
|
69
|
+
* cgroup, else the host: the caller supplies it) less the container's working
|
|
70
|
+
* set (memory.current less inactive file cache, which the kernel reclaims
|
|
71
|
+
* first). Without a control group, this process's resident memory.
|
|
72
|
+
*/
|
|
73
|
+
export declare function containerMemoryProbe(limitMb: () => number | Promise<number>, read?: ReadText): MemoryProbe;
|
|
74
|
+
/**
|
|
75
|
+
* A scanner's probe. Under a control group limit (Linux, the systemd unit):
|
|
76
|
+
* the limit less the working set, since the scanner's file reads leave page
|
|
77
|
+
* cache the kernel reclaims before it would kill anything. Elsewhere (macOS,
|
|
78
|
+
* Windows, an unlimited group): the scanner's own total budget less its own
|
|
79
|
+
* resident memory, never the machine's free memory, which on macOS counts
|
|
80
|
+
* compressed and cached pages as used and would refuse almost everything.
|
|
81
|
+
*/
|
|
82
|
+
export declare function scannerMemoryProbe(totalBudgetMb?: number, read?: ReadText,
|
|
83
|
+
/** Children are worker threads, so this process's own resident memory includes them. */
|
|
84
|
+
childrenInProcess?: boolean): MemoryProbe;
|
|
85
|
+
export type RedactionPriority = 'interactive' | 'background';
|
|
86
|
+
export interface RedactionInput {
|
|
87
|
+
text: string;
|
|
88
|
+
filePath: string;
|
|
89
|
+
/** An agent waiting on this file (file_push) goes before background ingest. */
|
|
90
|
+
priority?: RedactionPriority;
|
|
91
|
+
}
|
|
92
|
+
declare function parsePsTime(text: string): number | null;
|
|
93
|
+
/** CPU seconds (user + system) a process has used: /proc on Linux, `ps` elsewhere, null on Windows. */
|
|
94
|
+
export declare function processCpuSeconds(pid: number | undefined): Promise<number | null>;
|
|
95
|
+
export { parsePsTime as parsePsTimeForTest };
|
|
96
|
+
/**
|
|
97
|
+
* What the pool needs from a redaction child: a forked process (the server),
|
|
98
|
+
* or a worker thread (the scanner: redactionWorkerThread).
|
|
99
|
+
*/
|
|
100
|
+
export interface RedactionChild {
|
|
101
|
+
readonly pid?: number;
|
|
102
|
+
readonly channel?: {
|
|
103
|
+
ref?(): void;
|
|
104
|
+
unref?(): void;
|
|
105
|
+
} | null;
|
|
106
|
+
send(message: unknown, callback?: (error: Error | null) => void): boolean;
|
|
107
|
+
on(event: string, listener: (...args: any[]) => void): unknown;
|
|
108
|
+
once(event: string, listener: (...args: any[]) => void): unknown;
|
|
109
|
+
kill(signal?: NodeJS.Signals): boolean;
|
|
110
|
+
ref?(): void;
|
|
111
|
+
unref?(): void;
|
|
112
|
+
/** CPU seconds this child has used, where it can say so itself (a worker thread, on any platform). */
|
|
113
|
+
cpuSeconds?(): Promise<number | null>;
|
|
114
|
+
/**
|
|
115
|
+
* Memory this child is using now, in MB, where it can say so itself: a
|
|
116
|
+
* worker thread's heap plus its external memory (WebAssembly and Buffers,
|
|
117
|
+
* which resourceLimits does not bound).
|
|
118
|
+
*/
|
|
119
|
+
memoryMb?(): Promise<number | null>;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* A worker thread as a redaction child. Its heap is the Worker's
|
|
123
|
+
* resourceLimits (sized per file by the caller), and running out of it ends
|
|
124
|
+
* the worker, not the process, reported as out of memory so the pool retries
|
|
125
|
+
* with twice the heap. Its CPU time comes from the Worker itself, on every
|
|
126
|
+
* platform, even while its own thread is busy (review of 26 Oct 2026: on
|
|
127
|
+
* Windows there was no CPU ceiling or stall detection).
|
|
128
|
+
*/
|
|
129
|
+
export declare function redactionWorkerThread(worker: Worker): RedactionChild;
|
|
130
|
+
export interface ProcessTimings {
|
|
131
|
+
pollMs: number;
|
|
132
|
+
stallPolls: number;
|
|
133
|
+
cpuCeilingSeconds: number;
|
|
134
|
+
cpuSeconds: (pid: number | undefined) => Promise<number | null>;
|
|
135
|
+
}
|
|
136
|
+
export interface SourceRedactionPoolOptions {
|
|
137
|
+
/** Start a worker child that runs runSourceRedactionWorker, with this heap. */
|
|
138
|
+
spawn: (heapMb: number) => RedactionChild;
|
|
139
|
+
/** Counted, logged and reported failures: never silent. */
|
|
140
|
+
onFailure: (reason: string, details: {
|
|
141
|
+
bytes: number;
|
|
142
|
+
extension: string;
|
|
143
|
+
}) => void;
|
|
144
|
+
onRetry?: (reason: string, details: {
|
|
145
|
+
bytes: number;
|
|
146
|
+
extension: string;
|
|
147
|
+
}) => void;
|
|
148
|
+
/** Memory a new child is judged against (default: scannerMemoryProbe()). */
|
|
149
|
+
memory?: MemoryProbe;
|
|
150
|
+
/** Memory, in MB, held by admitted work not yet redacted (bodies waiting in this task). */
|
|
151
|
+
heldMb?: () => number;
|
|
152
|
+
maxLargeChildren?: number;
|
|
153
|
+
cpuCeilingSeconds?: number;
|
|
154
|
+
/** CPU a file may use in the shared small-file child before it gets its own. */
|
|
155
|
+
sharedCpuCeilingSeconds?: number;
|
|
156
|
+
pollMs?: number;
|
|
157
|
+
stallPolls?: number;
|
|
158
|
+
cpuSeconds?: (pid: number | undefined) => Promise<number | null>;
|
|
159
|
+
}
|
|
160
|
+
export declare class SourceRedactionPool {
|
|
161
|
+
private readonly options;
|
|
162
|
+
private shared;
|
|
163
|
+
private readonly sharedQueue;
|
|
164
|
+
private readonly largeQueue;
|
|
165
|
+
private readonly running;
|
|
166
|
+
private seq;
|
|
167
|
+
private admitting;
|
|
168
|
+
private admitAgain;
|
|
169
|
+
/** Large children finished so far (admission re-reads memory when this moves during a read). */
|
|
170
|
+
private finished;
|
|
171
|
+
private readonly timings;
|
|
172
|
+
constructor(options: SourceRedactionPoolOptions);
|
|
173
|
+
/** Large children running now (tests and diagnostics). */
|
|
174
|
+
get largeRunning(): number;
|
|
175
|
+
/** Interactive before background; arrival order within each. */
|
|
176
|
+
private enqueue;
|
|
177
|
+
private runShared;
|
|
178
|
+
/**
|
|
179
|
+
* Memory the redaction children use now, in MB, each counted at most up to
|
|
180
|
+
* its budget: what a scanner's own memory ceiling leaves out when its
|
|
181
|
+
* children are worker threads in its process.
|
|
182
|
+
*/
|
|
183
|
+
childrenUsedMb(): number;
|
|
184
|
+
private admitLarge;
|
|
185
|
+
private submit;
|
|
186
|
+
/** Redact one source; throws a counted, logged error for this file when it cannot. */
|
|
187
|
+
redact(input: RedactionInput): Promise<string>;
|
|
188
|
+
private fail;
|
|
189
|
+
/** Tests and shutdown. */
|
|
190
|
+
close(): void;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* The child side: redact each file sent over IPC, in this process, and
|
|
194
|
+
* answer with its id and this process's resident memory (so the parent can
|
|
195
|
+
* recycle a child whose WebAssembly memory has grown).
|
|
196
|
+
*/
|
|
197
|
+
export declare function runSourceRedactionWorker(): void;
|
|
198
|
+
//# sourceMappingURL=sourceRedactionPool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sourceRedactionPool.d.ts","sourceRoot":"","sources":["../src/sourceRedactionPool.ts"],"names":[],"mappings":"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"}
|