ppef 1.0.0 → 1.0.1

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.
Files changed (199) hide show
  1. package/README.md +172 -0
  2. package/dist/__tests__/framework-pipeline.integration.test.d.ts +7 -0
  3. package/dist/__tests__/framework-pipeline.integration.test.d.ts.map +1 -0
  4. package/dist/__tests__/framework-pipeline.integration.test.js +413 -0
  5. package/dist/__tests__/framework-pipeline.integration.test.js.map +1 -0
  6. package/dist/__tests__/registry-executor.integration.test.d.ts +5 -0
  7. package/dist/__tests__/registry-executor.integration.test.d.ts.map +1 -0
  8. package/dist/__tests__/registry-executor.integration.test.js +349 -0
  9. package/dist/__tests__/registry-executor.integration.test.js.map +1 -0
  10. package/dist/__tests__/test-helpers.d.ts +94 -0
  11. package/dist/__tests__/test-helpers.d.ts.map +1 -0
  12. package/dist/__tests__/test-helpers.js +271 -0
  13. package/dist/__tests__/test-helpers.js.map +1 -0
  14. package/dist/aggregation/aggregators.d.ts +54 -0
  15. package/dist/aggregation/aggregators.d.ts.map +1 -0
  16. package/dist/aggregation/aggregators.js +228 -0
  17. package/dist/aggregation/aggregators.js.map +1 -0
  18. package/dist/aggregation/index.d.ts +8 -0
  19. package/dist/aggregation/index.d.ts.map +1 -0
  20. package/dist/aggregation/index.js +8 -0
  21. package/dist/aggregation/index.js.map +1 -0
  22. package/dist/aggregation/pipeline.d.ts +38 -0
  23. package/dist/aggregation/pipeline.d.ts.map +1 -0
  24. package/dist/aggregation/pipeline.js +198 -0
  25. package/dist/aggregation/pipeline.js.map +1 -0
  26. package/dist/claims/evaluator.d.ts +33 -0
  27. package/dist/claims/evaluator.d.ts.map +1 -0
  28. package/dist/claims/evaluator.js +174 -0
  29. package/dist/claims/evaluator.js.map +1 -0
  30. package/dist/claims/index.d.ts +7 -0
  31. package/dist/claims/index.d.ts.map +1 -0
  32. package/dist/claims/index.js +7 -0
  33. package/dist/claims/index.js.map +1 -0
  34. package/dist/collector/index.d.ts +8 -0
  35. package/dist/collector/index.d.ts.map +1 -0
  36. package/dist/collector/index.js +8 -0
  37. package/dist/collector/index.js.map +1 -0
  38. package/dist/collector/result-collector.d.ts +159 -0
  39. package/dist/collector/result-collector.d.ts.map +1 -0
  40. package/dist/collector/result-collector.js +213 -0
  41. package/dist/collector/result-collector.js.map +1 -0
  42. package/dist/collector/schema.d.ts +34 -0
  43. package/dist/collector/schema.d.ts.map +1 -0
  44. package/dist/collector/schema.js +145 -0
  45. package/dist/collector/schema.js.map +1 -0
  46. package/dist/executor/__tests__/checkpoint-hash-bug.diagnostic.test.d.ts +10 -0
  47. package/dist/executor/__tests__/checkpoint-hash-bug.diagnostic.test.d.ts.map +1 -0
  48. package/dist/executor/__tests__/checkpoint-hash-bug.diagnostic.test.js +122 -0
  49. package/dist/executor/__tests__/checkpoint-hash-bug.diagnostic.test.js.map +1 -0
  50. package/dist/executor/__tests__/checkpoint-manager.integration.test.d.ts +7 -0
  51. package/dist/executor/__tests__/checkpoint-manager.integration.test.d.ts.map +1 -0
  52. package/dist/executor/__tests__/checkpoint-manager.integration.test.js +330 -0
  53. package/dist/executor/__tests__/checkpoint-manager.integration.test.js.map +1 -0
  54. package/dist/executor/__tests__/checkpoint-manager.unit.test.d.ts +7 -0
  55. package/dist/executor/__tests__/checkpoint-manager.unit.test.d.ts.map +1 -0
  56. package/dist/executor/__tests__/checkpoint-manager.unit.test.js +449 -0
  57. package/dist/executor/__tests__/checkpoint-manager.unit.test.js.map +1 -0
  58. package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.d.ts +11 -0
  59. package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.d.ts.map +1 -0
  60. package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.js +224 -0
  61. package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.js.map +1 -0
  62. package/dist/executor/__tests__/checkpoint-merge-bug.unit.test.d.ts +8 -0
  63. package/dist/executor/__tests__/checkpoint-merge-bug.unit.test.d.ts.map +1 -0
  64. package/dist/executor/__tests__/checkpoint-merge-bug.unit.test.js +164 -0
  65. package/dist/executor/__tests__/checkpoint-merge-bug.unit.test.js.map +1 -0
  66. package/dist/executor/__tests__/checkpoint-storage.unit.test.d.ts +7 -0
  67. package/dist/executor/__tests__/checkpoint-storage.unit.test.d.ts.map +1 -0
  68. package/dist/executor/__tests__/checkpoint-storage.unit.test.js +386 -0
  69. package/dist/executor/__tests__/checkpoint-storage.unit.test.js.map +1 -0
  70. package/dist/executor/__tests__/executor.unit.test.d.ts +7 -0
  71. package/dist/executor/__tests__/executor.unit.test.d.ts.map +1 -0
  72. package/dist/executor/__tests__/executor.unit.test.js +134 -0
  73. package/dist/executor/__tests__/executor.unit.test.js.map +1 -0
  74. package/dist/executor/__tests__/parallel-checkpoint-merge.integration.test.d.ts +12 -0
  75. package/dist/executor/__tests__/parallel-checkpoint-merge.integration.test.d.ts.map +1 -0
  76. package/dist/executor/__tests__/parallel-checkpoint-merge.integration.test.js +196 -0
  77. package/dist/executor/__tests__/parallel-checkpoint-merge.integration.test.js.map +1 -0
  78. package/dist/executor/__tests__/parallel-executor.integration.test.d.ts +7 -0
  79. package/dist/executor/__tests__/parallel-executor.integration.test.d.ts.map +1 -0
  80. package/dist/executor/__tests__/parallel-executor.integration.test.js +249 -0
  81. package/dist/executor/__tests__/parallel-executor.integration.test.js.map +1 -0
  82. package/dist/executor/__tests__/parallel-executor.unit.test.d.ts +7 -0
  83. package/dist/executor/__tests__/parallel-executor.unit.test.d.ts.map +1 -0
  84. package/dist/executor/__tests__/parallel-executor.unit.test.js +203 -0
  85. package/dist/executor/__tests__/parallel-executor.unit.test.js.map +1 -0
  86. package/dist/executor/checkpoint-manager.d.ts +231 -0
  87. package/dist/executor/checkpoint-manager.d.ts.map +1 -0
  88. package/dist/executor/checkpoint-manager.js +395 -0
  89. package/dist/executor/checkpoint-manager.js.map +1 -0
  90. package/dist/executor/checkpoint-storage.d.ts +230 -0
  91. package/dist/executor/checkpoint-storage.d.ts.map +1 -0
  92. package/dist/executor/checkpoint-storage.js +370 -0
  93. package/dist/executor/checkpoint-storage.js.map +1 -0
  94. package/dist/executor/checkpoint-types.d.ts +48 -0
  95. package/dist/executor/checkpoint-types.d.ts.map +1 -0
  96. package/dist/executor/checkpoint-types.js +8 -0
  97. package/dist/executor/checkpoint-types.js.map +1 -0
  98. package/dist/executor/executor.d.ts +164 -0
  99. package/dist/executor/executor.d.ts.map +1 -0
  100. package/dist/executor/executor.js +408 -0
  101. package/dist/executor/executor.js.map +1 -0
  102. package/dist/executor/index.d.ts +11 -0
  103. package/dist/executor/index.d.ts.map +1 -0
  104. package/dist/executor/index.js +11 -0
  105. package/dist/executor/index.js.map +1 -0
  106. package/dist/executor/memory-monitor.d.ts +115 -0
  107. package/dist/executor/memory-monitor.d.ts.map +1 -0
  108. package/dist/executor/memory-monitor.js +168 -0
  109. package/dist/executor/memory-monitor.js.map +1 -0
  110. package/dist/executor/parallel-executor.d.ts +53 -0
  111. package/dist/executor/parallel-executor.d.ts.map +1 -0
  112. package/dist/executor/parallel-executor.js +194 -0
  113. package/dist/executor/parallel-executor.js.map +1 -0
  114. package/dist/executor/run-id.d.ts +71 -0
  115. package/dist/executor/run-id.d.ts.map +1 -0
  116. package/dist/executor/run-id.js +67 -0
  117. package/dist/executor/run-id.js.map +1 -0
  118. package/dist/executor/worker-entry.d.ts +8 -0
  119. package/dist/executor/worker-entry.d.ts.map +1 -0
  120. package/dist/executor/worker-entry.js +67 -0
  121. package/dist/executor/worker-entry.js.map +1 -0
  122. package/dist/index.cjs +11 -0
  123. package/dist/index.d.ts +15 -0
  124. package/dist/index.d.ts.map +1 -0
  125. package/dist/index.js +24 -0
  126. package/dist/index.js.map +1 -0
  127. package/dist/registry/case-registry.d.ts +113 -0
  128. package/dist/registry/case-registry.d.ts.map +1 -0
  129. package/dist/registry/case-registry.js +160 -0
  130. package/dist/registry/case-registry.js.map +1 -0
  131. package/dist/registry/index.d.ts +8 -0
  132. package/dist/registry/index.d.ts.map +1 -0
  133. package/dist/registry/index.js +8 -0
  134. package/dist/registry/index.js.map +1 -0
  135. package/dist/registry/sut-registry.d.ts +96 -0
  136. package/dist/registry/sut-registry.d.ts.map +1 -0
  137. package/dist/registry/sut-registry.js +126 -0
  138. package/dist/registry/sut-registry.js.map +1 -0
  139. package/dist/renderers/index.d.ts +10 -0
  140. package/dist/renderers/index.d.ts.map +1 -0
  141. package/dist/renderers/index.js +9 -0
  142. package/dist/renderers/index.js.map +1 -0
  143. package/dist/renderers/latex-renderer.d.ts +84 -0
  144. package/dist/renderers/latex-renderer.d.ts.map +1 -0
  145. package/dist/renderers/latex-renderer.js +208 -0
  146. package/dist/renderers/latex-renderer.js.map +1 -0
  147. package/dist/renderers/types.d.ts +106 -0
  148. package/dist/renderers/types.d.ts.map +1 -0
  149. package/dist/renderers/types.js +23 -0
  150. package/dist/renderers/types.js.map +1 -0
  151. package/dist/robustness/analyzer.d.ts +61 -0
  152. package/dist/robustness/analyzer.d.ts.map +1 -0
  153. package/dist/robustness/analyzer.js +191 -0
  154. package/dist/robustness/analyzer.js.map +1 -0
  155. package/dist/robustness/index.d.ts +8 -0
  156. package/dist/robustness/index.d.ts.map +1 -0
  157. package/dist/robustness/index.js +8 -0
  158. package/dist/robustness/index.js.map +1 -0
  159. package/dist/robustness/perturbations.d.ts +46 -0
  160. package/dist/robustness/perturbations.d.ts.map +1 -0
  161. package/dist/robustness/perturbations.js +184 -0
  162. package/dist/robustness/perturbations.js.map +1 -0
  163. package/dist/statistical/index.d.ts +8 -0
  164. package/dist/statistical/index.d.ts.map +1 -0
  165. package/dist/statistical/index.js +8 -0
  166. package/dist/statistical/index.js.map +1 -0
  167. package/dist/statistical/mann-whitney-u.d.ts +62 -0
  168. package/dist/statistical/mann-whitney-u.d.ts.map +1 -0
  169. package/dist/statistical/mann-whitney-u.js +127 -0
  170. package/dist/statistical/mann-whitney-u.js.map +1 -0
  171. package/dist/types/aggregate.d.ts +124 -0
  172. package/dist/types/aggregate.d.ts.map +1 -0
  173. package/dist/types/aggregate.js +9 -0
  174. package/dist/types/aggregate.js.map +1 -0
  175. package/dist/types/case.d.ts +105 -0
  176. package/dist/types/case.d.ts.map +1 -0
  177. package/dist/types/case.js +10 -0
  178. package/dist/types/case.js.map +1 -0
  179. package/dist/types/claims.d.ts +122 -0
  180. package/dist/types/claims.d.ts.map +1 -0
  181. package/dist/types/claims.js +14 -0
  182. package/dist/types/claims.js.map +1 -0
  183. package/dist/types/index.d.ts +12 -0
  184. package/dist/types/index.d.ts.map +1 -0
  185. package/dist/types/index.js +7 -0
  186. package/dist/types/index.js.map +1 -0
  187. package/dist/types/perturbation.d.ts +105 -0
  188. package/dist/types/perturbation.d.ts.map +1 -0
  189. package/dist/types/perturbation.js +9 -0
  190. package/dist/types/perturbation.js.map +1 -0
  191. package/dist/types/result.d.ts +150 -0
  192. package/dist/types/result.d.ts.map +1 -0
  193. package/dist/types/result.js +12 -0
  194. package/dist/types/result.js.map +1 -0
  195. package/dist/types/sut.d.ts +128 -0
  196. package/dist/types/sut.d.ts.map +1 -0
  197. package/dist/types/sut.js +12 -0
  198. package/dist/types/sut.js.map +1 -0
  199. package/package.json +283 -7
@@ -0,0 +1,408 @@
1
+ /**
2
+ * Experiment Executor
3
+ *
4
+ * Orchestrates experiment execution across SUTs and cases.
5
+ * Handles error isolation, progress reporting, and result collection.
6
+ */
7
+ import { execSync } from "node:child_process";
8
+ import { arch, platform, version as nodeVersion } from "node:process";
9
+ import { MemoryMonitor, MemoryWarningLevel } from "./memory-monitor.js";
10
+ import { generateRunId } from "./run-id.js";
11
+ /**
12
+ * Default executor configuration.
13
+ */
14
+ export const DEFAULT_EXECUTOR_CONFIG = {
15
+ continueOnError: true,
16
+ repetitions: 1,
17
+ seedBase: 42,
18
+ timeoutMs: 0,
19
+ collectProvenance: true,
20
+ };
21
+ /**
22
+ * Get provenance information for reproducibility.
23
+ * @param collectProvenance
24
+ */
25
+ const getProvenance = (collectProvenance) => {
26
+ if (!collectProvenance) {
27
+ return {
28
+ runtime: {
29
+ platform: platform,
30
+ arch: arch,
31
+ nodeVersion: nodeVersion,
32
+ },
33
+ };
34
+ }
35
+ let gitCommit;
36
+ let dirty = false;
37
+ try {
38
+ gitCommit = execSync("git rev-parse HEAD", { encoding: "utf-8", env: undefined }).trim();
39
+ const status = execSync("git status --porcelain", { encoding: "utf-8", env: undefined });
40
+ dirty = status.length > 0;
41
+ }
42
+ catch {
43
+ // Git not available or not a git repo
44
+ }
45
+ return {
46
+ runtime: {
47
+ platform: platform,
48
+ arch: arch,
49
+ nodeVersion: nodeVersion,
50
+ },
51
+ gitCommit,
52
+ dirty,
53
+ timestamp: new Date().toISOString(),
54
+ };
55
+ };
56
+ /**
57
+ * Experiment executor.
58
+ *
59
+ * @template TInput - The resource type (e.g., Graph, Dataset)
60
+ * @template TInputs - The algorithm inputs type
61
+ * @template TResult - The algorithm result type
62
+ */
63
+ export class Executor {
64
+ config;
65
+ inputCache;
66
+ memoryMonitor;
67
+ constructor(config = {}) {
68
+ this.config = {
69
+ ...DEFAULT_EXECUTOR_CONFIG,
70
+ monitorMemory: true,
71
+ ...config,
72
+ };
73
+ this.inputCache = new Map();
74
+ // Initialize memory monitor if enabled
75
+ if (this.config.monitorMemory) {
76
+ this.memoryMonitor = new MemoryMonitor({
77
+ warningThresholdMb: this.config.memoryWarningThresholdMb,
78
+ criticalThresholdMb: this.config.memoryCriticalThresholdMb,
79
+ verbose: true,
80
+ onWarningLevelChange: (level, stats) => {
81
+ if (level === MemoryWarningLevel.CRITICAL && this.config.abortOnMemoryCritical) {
82
+ throw new Error(`Memory critical threshold exceeded (${stats.rssMb.toFixed(1)}MB). Aborting execution.`);
83
+ }
84
+ },
85
+ });
86
+ }
87
+ }
88
+ /**
89
+ * Plan execution runs without executing.
90
+ *
91
+ * @param suts - SUTs to execute
92
+ * @param cases - Cases to run against
93
+ * @returns Array of planned runs
94
+ */
95
+ plan(suts, cases) {
96
+ const runs = [];
97
+ for (const sutDef of suts) {
98
+ for (const caseDef of cases) {
99
+ for (let rep = 0; rep < this.config.repetitions; rep++) {
100
+ const seed = this.config.seedBase + rep;
101
+ const runId = generateRunId({
102
+ sutId: sutDef.registration.id,
103
+ caseId: caseDef.case.caseId,
104
+ seed,
105
+ repetition: rep,
106
+ });
107
+ runs.push({
108
+ runId,
109
+ sutId: sutDef.registration.id,
110
+ caseId: caseDef.case.caseId,
111
+ repetition: rep,
112
+ seed,
113
+ });
114
+ }
115
+ }
116
+ }
117
+ return runs;
118
+ }
119
+ /**
120
+ * Execute all planned runs.
121
+ *
122
+ * @param suts - SUTs to execute
123
+ * @param cases - Cases to run against
124
+ * @param metricsExtractor - Function to extract metrics from result
125
+ * @param plannedRuns - Optional pre-filtered planned runs (for parallel workers)
126
+ * @returns Execution summary with all results
127
+ */
128
+ async execute(suts, cases, metricsExtractor, plannedRuns) {
129
+ const startTime = performance.now();
130
+ const effectivePlannedRuns = plannedRuns ?? this.plan(suts, cases);
131
+ const sutMap = new Map(suts.map((s) => [s.registration.id, s]));
132
+ const caseMap = new Map(cases.map((c) => [c.case.caseId, c]));
133
+ // Use concurrency limit if specified, otherwise sequential
134
+ const concurrency = this.config.concurrency ?? 1;
135
+ if (concurrency <= 1) {
136
+ // Sequential execution (original behavior)
137
+ return this.executeSequential(effectivePlannedRuns, sutMap, caseMap, metricsExtractor, startTime);
138
+ }
139
+ // Parallel execution with concurrency limit
140
+ return this.executeParallel(effectivePlannedRuns, sutMap, caseMap, metricsExtractor, startTime, concurrency);
141
+ }
142
+ /**
143
+ * Execute runs sequentially (original behavior).
144
+ * @param plannedRuns
145
+ * @param sutMap
146
+ * @param caseMap
147
+ * @param metricsExtractor
148
+ * @param startTime
149
+ * @internal
150
+ */
151
+ async executeSequential(plannedRuns, sutMap, caseMap, metricsExtractor, startTime) {
152
+ const results = [];
153
+ const errors = [];
154
+ let completed = 0;
155
+ let failed = 0;
156
+ for (const run of plannedRuns) {
157
+ const sutDef = sutMap.get(run.sutId);
158
+ const caseDef = caseMap.get(run.caseId);
159
+ if (!sutDef || !caseDef) {
160
+ errors.push({ runId: run.runId, error: "SUT or case not found" });
161
+ failed++;
162
+ continue;
163
+ }
164
+ // Report progress
165
+ if (this.config.onProgress) {
166
+ this.config.onProgress({
167
+ total: plannedRuns.length,
168
+ completed,
169
+ failed,
170
+ currentSut: run.sutId,
171
+ currentCase: run.caseId,
172
+ currentRepetition: run.repetition,
173
+ elapsedMs: performance.now() - startTime,
174
+ });
175
+ }
176
+ try {
177
+ const result = await this.executeRun(run, sutDef, caseDef, metricsExtractor);
178
+ results.push(result);
179
+ // Call onResult callback and await if it returns a promise
180
+ if (this.config.onResult) {
181
+ const callbackResult = this.config.onResult(result);
182
+ if (callbackResult instanceof Promise) {
183
+ await callbackResult;
184
+ }
185
+ }
186
+ completed++;
187
+ }
188
+ catch (error) {
189
+ const errorMessage = error instanceof Error ? error.message : String(error);
190
+ errors.push({ runId: run.runId, error: errorMessage });
191
+ failed++;
192
+ if (!this.config.continueOnError) {
193
+ throw error;
194
+ }
195
+ }
196
+ }
197
+ return {
198
+ totalRuns: plannedRuns.length,
199
+ successfulRuns: completed,
200
+ failedRuns: failed,
201
+ elapsedMs: performance.now() - startTime,
202
+ results,
203
+ errors,
204
+ };
205
+ }
206
+ /**
207
+ * Execute runs in parallel with a concurrency limit.
208
+ * @param plannedRuns
209
+ * @param sutMap
210
+ * @param caseMap
211
+ * @param metricsExtractor
212
+ * @param startTime
213
+ * @param concurrency
214
+ * @internal
215
+ */
216
+ async executeParallel(plannedRuns, sutMap, caseMap, metricsExtractor, startTime, concurrency) {
217
+ const results = [];
218
+ const errors = [];
219
+ // Thread-safe counters
220
+ let completed = 0;
221
+ let failed = 0;
222
+ const mutex = { locked: false };
223
+ const lockQueue = [];
224
+ const acquireLock = () => {
225
+ return new Promise((resolve) => {
226
+ if (mutex.locked) {
227
+ lockQueue.push(resolve);
228
+ }
229
+ else {
230
+ mutex.locked = true;
231
+ resolve();
232
+ }
233
+ });
234
+ };
235
+ const releaseLock = () => {
236
+ const next = lockQueue.shift();
237
+ if (next) {
238
+ next();
239
+ }
240
+ else {
241
+ mutex.locked = false;
242
+ }
243
+ };
244
+ // Process a single run
245
+ const processRun = async (run) => {
246
+ const sutDef = sutMap.get(run.sutId);
247
+ const caseDef = caseMap.get(run.caseId);
248
+ if (!sutDef || !caseDef) {
249
+ await acquireLock();
250
+ errors.push({ runId: run.runId, error: "SUT or case not found" });
251
+ failed++;
252
+ releaseLock();
253
+ return;
254
+ }
255
+ try {
256
+ const result = await this.executeRun(run, sutDef, caseDef, metricsExtractor);
257
+ await acquireLock();
258
+ results.push(result);
259
+ completed++;
260
+ // Call onResult callback (checkpoint save)
261
+ if (this.config.onResult) {
262
+ await this.config.onResult(result);
263
+ }
264
+ // Report progress
265
+ if (this.config.onProgress) {
266
+ this.config.onProgress({
267
+ total: plannedRuns.length,
268
+ completed,
269
+ failed,
270
+ currentSut: run.sutId,
271
+ currentCase: run.caseId,
272
+ currentRepetition: run.repetition,
273
+ elapsedMs: performance.now() - startTime,
274
+ });
275
+ }
276
+ releaseLock();
277
+ }
278
+ catch (error) {
279
+ await acquireLock();
280
+ const errorMessage = error instanceof Error ? error.message : String(error);
281
+ errors.push({ runId: run.runId, error: errorMessage });
282
+ failed++;
283
+ releaseLock();
284
+ if (!this.config.continueOnError) {
285
+ throw error;
286
+ }
287
+ }
288
+ };
289
+ // Worker pool: process runs in batches
290
+ for (let index = 0; index < plannedRuns.length; index += concurrency) {
291
+ const batch = plannedRuns.slice(index, index + concurrency);
292
+ await Promise.all(batch.map(processRun));
293
+ }
294
+ return {
295
+ totalRuns: plannedRuns.length,
296
+ successfulRuns: completed,
297
+ failedRuns: failed,
298
+ elapsedMs: performance.now() - startTime,
299
+ results,
300
+ errors,
301
+ };
302
+ }
303
+ /**
304
+ * Execute a single run.
305
+ * @param run
306
+ * @param sutDef
307
+ * @param caseDef
308
+ * @param metricsExtractor
309
+ */
310
+ async executeRun(run, sutDef, caseDef, metricsExtractor) {
311
+ const runStartTime = performance.now();
312
+ let peakMemoryBytes = 0;
313
+ // Check memory before execution
314
+ if (this.memoryMonitor) {
315
+ const initialLevel = this.memoryMonitor.check();
316
+ if (initialLevel === MemoryWarningLevel.EMERGENCY) {
317
+ throw new Error("Memory at emergency level before execution. Aborting.");
318
+ }
319
+ }
320
+ // Load or reuse input resource for this case (cached to avoid reloading)
321
+ const cacheKey = caseDef.case.caseId;
322
+ let input = this.inputCache.get(cacheKey);
323
+ if (!input) {
324
+ // Apply timeout to resource loading (large graphs can hang during loading)
325
+ input = await (this.config.timeoutMs > 0
326
+ ? Promise.race([
327
+ caseDef.getInput(),
328
+ new Promise((_, reject) => setTimeout(() => {
329
+ reject(new Error(`Resource loading timeout after ${this.config.timeoutMs}ms`));
330
+ }, this.config.timeoutMs)),
331
+ ])
332
+ : caseDef.getInput());
333
+ this.inputCache.set(cacheKey, input);
334
+ // Check memory after resource loading
335
+ if (this.memoryMonitor) {
336
+ const stats = this.memoryMonitor.getStats();
337
+ peakMemoryBytes = Math.max(peakMemoryBytes, stats.rssBytes);
338
+ }
339
+ }
340
+ // Get algorithm inputs for this case
341
+ const inputs = caseDef.getInputs();
342
+ // Create SUT instance (factory now takes only config)
343
+ const sut = sutDef.factory(run.config);
344
+ // Execute with timeout if configured
345
+ const sutResult = await (this.config.timeoutMs > 0
346
+ ? Promise.race([
347
+ sut.run({ ...inputs, input }),
348
+ new Promise((_, reject) => setTimeout(() => {
349
+ reject(new Error(`Timeout after ${this.config.timeoutMs}ms`));
350
+ }, this.config.timeoutMs)),
351
+ ])
352
+ : sut.run({ ...inputs, input }));
353
+ const executionTimeMs = performance.now() - runStartTime;
354
+ // Check memory after execution
355
+ let finalMemoryBytes = 0;
356
+ if (this.memoryMonitor) {
357
+ const stats = this.memoryMonitor.getStats();
358
+ peakMemoryBytes = Math.max(peakMemoryBytes, stats.rssBytes);
359
+ finalMemoryBytes = stats.rssBytes;
360
+ }
361
+ // Extract metrics
362
+ const metrics = metricsExtractor(sutResult);
363
+ // Build correctness result (basic - can be extended)
364
+ const correctness = {
365
+ expectedExists: caseDef.case.expectedOutput !== undefined,
366
+ producedOutput: true,
367
+ valid: true, // Assume valid if no exception
368
+ matchesExpected: null, // Would need comparison logic
369
+ };
370
+ // Build provenance
371
+ const provenance = getProvenance(this.config.collectProvenance);
372
+ provenance.executionTimeMs = executionTimeMs;
373
+ // Add memory stats if monitoring is enabled
374
+ if (this.memoryMonitor && this.config.collectProvenance) {
375
+ provenance.peakMemoryBytes = peakMemoryBytes;
376
+ provenance.finalMemoryBytes = finalMemoryBytes;
377
+ }
378
+ return {
379
+ run: {
380
+ runId: run.runId,
381
+ sut: run.sutId,
382
+ sutRole: sutDef.registration.role,
383
+ sutVersion: sutDef.registration.version,
384
+ caseId: run.caseId,
385
+ caseClass: caseDef.case.caseClass,
386
+ config: run.config,
387
+ seed: run.seed,
388
+ repetition: run.repetition,
389
+ },
390
+ correctness,
391
+ outputs: {
392
+ summary: {
393
+ // Could extract from sutResult
394
+ },
395
+ },
396
+ metrics: {
397
+ numeric: metrics,
398
+ },
399
+ provenance,
400
+ };
401
+ }
402
+ }
403
+ /**
404
+ * Create a default executor with standard configuration.
405
+ * @param config
406
+ */
407
+ export const createExecutor = (config) => new Executor(config);
408
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/executor/executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Executor Module
3
+ *
4
+ * Re-exports executor components.
5
+ */
6
+ export { type CheckpointData, CheckpointManager, type CheckpointManagerOptions, type CheckpointMode, createFileCheckpointManager, getGitCommit, } from "./checkpoint-manager.js";
7
+ export { type CheckpointStorage, createCheckpointStorage, FileStorage, type FileSystem, getGitNamespace, GitStorage, InMemoryLock, type Lock, NodeFileSystem, } from "./checkpoint-storage.js";
8
+ export { createExecutor, DEFAULT_EXECUTOR_CONFIG, type ExecutionProgress, type ExecutionSummary, Executor, type ExecutorConfig, type PlannedRun, } from "./executor.js";
9
+ export { executeParallel, type ParallelExecutorOptions, shardPath } from "./parallel-executor.js";
10
+ export { generateConfigHash, generateRunId, parseRunId, type RunIdInputs, validateRunId, } from "./run-id.js";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACN,KAAK,cAAc,EACnB,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,KAAK,cAAc,EACnB,2BAA2B,EAC3B,YAAY,GACZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,KAAK,iBAAiB,EACtB,uBAAuB,EACvB,WAAW,EACX,KAAK,UAAU,EACf,eAAe,EACf,UAAU,EACV,YAAY,EACZ,KAAK,IAAI,EACT,cAAc,GACd,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,cAAc,EACd,uBAAuB,EACvB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,QAAQ,EACR,KAAK,cAAc,EACnB,KAAK,UAAU,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,KAAK,uBAAuB,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAClG,OAAO,EACN,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,KAAK,WAAW,EAChB,aAAa,GACb,MAAM,aAAa,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Executor Module
3
+ *
4
+ * Re-exports executor components.
5
+ */
6
+ export { CheckpointManager, createFileCheckpointManager, getGitCommit, } from "./checkpoint-manager.js";
7
+ export { createCheckpointStorage, FileStorage, getGitNamespace, GitStorage, InMemoryLock, NodeFileSystem, } from "./checkpoint-storage.js";
8
+ export { createExecutor, DEFAULT_EXECUTOR_CONFIG, Executor, } from "./executor.js";
9
+ export { executeParallel, shardPath } from "./parallel-executor.js";
10
+ export { generateConfigHash, generateRunId, parseRunId, validateRunId, } from "./run-id.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAEN,iBAAiB,EAGjB,2BAA2B,EAC3B,YAAY,GACZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAEN,uBAAuB,EACvB,WAAW,EAEX,eAAe,EACf,UAAU,EACV,YAAY,EAEZ,cAAc,GACd,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,cAAc,EACd,uBAAuB,EAGvB,QAAQ,GAGR,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAgC,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAClG,OAAO,EACN,kBAAkB,EAClB,aAAa,EACb,UAAU,EAEV,aAAa,GACb,MAAM,aAAa,CAAC"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Memory Monitoring for Experiment Execution
3
+ *
4
+ * Tracks memory usage during experiment execution to:
5
+ * 1. Detect memory leaks and excessive consumption
6
+ * 2. Provide early warning before OOM kills
7
+ * 3. Record memory statistics in provenance data
8
+ * 4. Enable automatic throttling or abort on memory pressure
9
+ */
10
+ /**
11
+ * Memory usage statistics.
12
+ */
13
+ export interface MemoryStats {
14
+ /** Resident set size in bytes (actual physical memory used) */
15
+ rssBytes: number;
16
+ /** Total heap size in bytes (allocated + unused) */
17
+ heapTotalBytes: number;
18
+ /** Heap used in bytes (actually used) */
19
+ heapUsedBytes: number;
20
+ /** External memory in bytes (C++ objects, etc) */
21
+ externalBytes: number;
22
+ /** Array buffers in bytes */
23
+ arrayBuffersBytes: number;
24
+ /** RSS in MB for human readability */
25
+ rssMb: number;
26
+ /** Heap usage percentage */
27
+ heapUsagePercent: number;
28
+ /** Timestamp when stats were collected */
29
+ timestamp: number;
30
+ }
31
+ /**
32
+ * Memory warning levels.
33
+ */
34
+ export declare enum MemoryWarningLevel {
35
+ /** No warning (memory usage is normal) */
36
+ NORMAL = "normal",
37
+ /** Warning (memory usage is elevated) */
38
+ WARNING = "warning",
39
+ /** Critical (memory usage is dangerously high) */
40
+ CRITICAL = "critical",
41
+ /** Emergency (process is near OOM) */
42
+ EMERGENCY = "emergency"
43
+ }
44
+ /**
45
+ * Memory monitoring configuration.
46
+ */
47
+ export interface MemoryMonitorConfig {
48
+ /** Warning threshold (MB) - default: 1GB */
49
+ warningThresholdMb: number;
50
+ /** Critical threshold (MB) - default: 2GB */
51
+ criticalThresholdMb: number;
52
+ /** Emergency threshold (MB) - default: 80% of system memory */
53
+ emergencyThresholdMb: number;
54
+ /** Whether to log memory usage */
55
+ verbose: boolean;
56
+ /** Callback when warning level changes */
57
+ onWarningLevelChange?: (level: MemoryWarningLevel, stats: MemoryStats) => void;
58
+ }
59
+ /**
60
+ * Default memory monitoring configuration.
61
+ */
62
+ export declare const DEFAULT_MEMORY_CONFIG: MemoryMonitorConfig;
63
+ /**
64
+ * Memory monitor for tracking usage during execution.
65
+ */
66
+ export declare class MemoryMonitor {
67
+ private readonly config;
68
+ private currentLevel;
69
+ private startTime;
70
+ constructor(config?: Partial<MemoryMonitorConfig>);
71
+ /**
72
+ * Get current memory usage statistics.
73
+ */
74
+ getStats(): MemoryStats;
75
+ /**
76
+ * Get current warning level based on memory usage.
77
+ * @param stats
78
+ */
79
+ getWarningLevel(stats?: MemoryStats): MemoryWarningLevel;
80
+ /**
81
+ * Check memory usage and trigger warnings if needed.
82
+ *
83
+ * @returns Current warning level
84
+ */
85
+ check(): MemoryWarningLevel;
86
+ /**
87
+ * Log memory warning with details.
88
+ * @param level
89
+ * @param stats
90
+ */
91
+ private logWarning;
92
+ /**
93
+ * Create a memory snapshot for provenance tracking.
94
+ */
95
+ snapshot(): MemoryStats;
96
+ /**
97
+ * Format memory stats for logging.
98
+ * @param stats
99
+ */
100
+ format(stats?: MemoryStats): string;
101
+ }
102
+ /**
103
+ * Get or create the global memory monitor.
104
+ * @param config
105
+ */
106
+ export declare const getGlobalMemoryMonitor: (config?: Partial<MemoryMonitorConfig>) => MemoryMonitor;
107
+ /**
108
+ * Check memory usage using the global monitor.
109
+ */
110
+ export declare const checkMemoryUsage: () => MemoryWarningLevel;
111
+ /**
112
+ * Get current memory stats using the global monitor.
113
+ */
114
+ export declare const getMemoryStats: () => MemoryStats;
115
+ //# sourceMappingURL=memory-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-monitor.d.ts","sourceRoot":"","sources":["../../src/executor/memory-monitor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAC;IAEjB,oDAAoD;IACpD,cAAc,EAAE,MAAM,CAAC;IAEvB,yCAAyC;IACzC,aAAa,EAAE,MAAM,CAAC;IAEtB,kDAAkD;IAClD,aAAa,EAAE,MAAM,CAAC;IAEtB,6BAA6B;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAE1B,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IAEd,4BAA4B;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IAEzB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,oBAAY,kBAAkB;IAC7B,0CAA0C;IAC1C,MAAM,WAAW;IAEjB,yCAAyC;IACzC,OAAO,YAAY;IAEnB,kDAAkD;IAClD,QAAQ,aAAa;IAErB,sCAAsC;IACtC,SAAS,cAAc;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,4CAA4C;IAC5C,kBAAkB,EAAE,MAAM,CAAC;IAE3B,6CAA6C;IAC7C,mBAAmB,EAAE,MAAM,CAAC;IAE5B,+DAA+D;IAC/D,oBAAoB,EAAE,MAAM,CAAC;IAE7B,kCAAkC;IAClC,OAAO,EAAE,OAAO,CAAC;IAEjB,0CAA0C;IAC1C,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;CAC/E;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,mBAKnC,CAAC;AAEF;;GAEG;AACH,qBAAa,aAAa;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,YAAY,CAAiD;IACrE,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC;IAKjD;;OAEG;IACH,QAAQ,IAAI,WAAW;IA0BvB;;;OAGG;IACH,eAAe,CAAC,KAAK,CAAC,EAAE,WAAW,GAAG,kBAAkB;IAexD;;;;OAIG;IACH,KAAK,IAAI,kBAAkB;IAoB3B;;;;OAIG;IACH,OAAO,CAAC,UAAU;IAkBlB;;OAEG;IACH,QAAQ,IAAI,WAAW;IAIvB;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,GAAG,MAAM;CAInC;AAOD;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GAAI,SAAS,OAAO,CAAC,mBAAmB,CAAC,KAAG,aAG9E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,QAAO,kBAGnC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,QAAO,WAGjC,CAAC"}