ppef 1.0.0 → 1.1.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 +172 -0
- package/bin/ppef.mjs +20 -0
- package/dist/__tests__/framework-pipeline.integration.test.d.ts +7 -0
- package/dist/__tests__/framework-pipeline.integration.test.d.ts.map +1 -0
- package/dist/__tests__/framework-pipeline.integration.test.js +415 -0
- package/dist/__tests__/framework-pipeline.integration.test.js.map +1 -0
- package/dist/__tests__/index-exports.unit.test.d.ts +8 -0
- package/dist/__tests__/index-exports.unit.test.d.ts.map +1 -0
- package/dist/__tests__/index-exports.unit.test.js +127 -0
- package/dist/__tests__/index-exports.unit.test.js.map +1 -0
- package/dist/__tests__/registry-executor.integration.test.d.ts +5 -0
- package/dist/__tests__/registry-executor.integration.test.d.ts.map +1 -0
- package/dist/__tests__/registry-executor.integration.test.js +352 -0
- package/dist/__tests__/registry-executor.integration.test.js.map +1 -0
- package/dist/__tests__/test-helpers.d.ts +94 -0
- package/dist/__tests__/test-helpers.d.ts.map +1 -0
- package/dist/__tests__/test-helpers.js +271 -0
- package/dist/__tests__/test-helpers.js.map +1 -0
- package/dist/aggregation/__tests__/aggregators.unit.test.d.ts +7 -0
- package/dist/aggregation/__tests__/aggregators.unit.test.d.ts.map +1 -0
- package/dist/aggregation/__tests__/aggregators.unit.test.js +350 -0
- package/dist/aggregation/__tests__/aggregators.unit.test.js.map +1 -0
- package/dist/aggregation/__tests__/pipeline.unit.test.d.ts +7 -0
- package/dist/aggregation/__tests__/pipeline.unit.test.d.ts.map +1 -0
- package/dist/aggregation/__tests__/pipeline.unit.test.js +213 -0
- package/dist/aggregation/__tests__/pipeline.unit.test.js.map +1 -0
- package/dist/aggregation/aggregators.d.ts +63 -0
- package/dist/aggregation/aggregators.d.ts.map +1 -0
- package/dist/aggregation/aggregators.js +228 -0
- package/dist/aggregation/aggregators.js.map +1 -0
- package/dist/aggregation/index.d.ts +8 -0
- package/dist/aggregation/index.d.ts.map +1 -0
- package/dist/aggregation/index.js +8 -0
- package/dist/aggregation/index.js.map +1 -0
- package/dist/aggregation/pipeline.d.ts +38 -0
- package/dist/aggregation/pipeline.d.ts.map +1 -0
- package/dist/aggregation/pipeline.js +198 -0
- package/dist/aggregation/pipeline.js.map +1 -0
- package/dist/claims/__tests__/evaluator.unit.test.d.ts +12 -0
- package/dist/claims/__tests__/evaluator.unit.test.d.ts.map +1 -0
- package/dist/claims/__tests__/evaluator.unit.test.js +801 -0
- package/dist/claims/__tests__/evaluator.unit.test.js.map +1 -0
- package/dist/claims/evaluator.d.ts +33 -0
- package/dist/claims/evaluator.d.ts.map +1 -0
- package/dist/claims/evaluator.js +174 -0
- package/dist/claims/evaluator.js.map +1 -0
- package/dist/claims/index.d.ts +7 -0
- package/dist/claims/index.d.ts.map +1 -0
- package/dist/claims/index.js +7 -0
- package/dist/claims/index.js.map +1 -0
- package/dist/cli/__tests__/aggregate.command.unit.test.d.ts +7 -0
- package/dist/cli/__tests__/aggregate.command.unit.test.d.ts.map +1 -0
- package/dist/cli/__tests__/aggregate.command.unit.test.js +396 -0
- package/dist/cli/__tests__/aggregate.command.unit.test.js.map +1 -0
- package/dist/cli/__tests__/commands.unit.test.d.ts +10 -0
- package/dist/cli/__tests__/commands.unit.test.d.ts.map +1 -0
- package/dist/cli/__tests__/commands.unit.test.js +217 -0
- package/dist/cli/__tests__/commands.unit.test.js.map +1 -0
- package/dist/cli/__tests__/index.unit.test.d.ts +10 -0
- package/dist/cli/__tests__/index.unit.test.d.ts.map +1 -0
- package/dist/cli/__tests__/index.unit.test.js +65 -0
- package/dist/cli/__tests__/index.unit.test.js.map +1 -0
- package/dist/cli/__tests__/logger.unit.test.d.ts +11 -0
- package/dist/cli/__tests__/logger.unit.test.d.ts.map +1 -0
- package/dist/cli/__tests__/logger.unit.test.js +180 -0
- package/dist/cli/__tests__/logger.unit.test.js.map +1 -0
- package/dist/cli/__tests__/module-loader.unit.test.d.ts +11 -0
- package/dist/cli/__tests__/module-loader.unit.test.d.ts.map +1 -0
- package/dist/cli/__tests__/module-loader.unit.test.js +262 -0
- package/dist/cli/__tests__/module-loader.unit.test.js.map +1 -0
- package/dist/cli/__tests__/output-writer.unit.test.d.ts +10 -0
- package/dist/cli/__tests__/output-writer.unit.test.d.ts.map +1 -0
- package/dist/cli/__tests__/output-writer.unit.test.js +216 -0
- package/dist/cli/__tests__/output-writer.unit.test.js.map +1 -0
- package/dist/cli/__tests__/plan.command.unit.test.d.ts +7 -0
- package/dist/cli/__tests__/plan.command.unit.test.d.ts.map +1 -0
- package/dist/cli/__tests__/plan.command.unit.test.js +289 -0
- package/dist/cli/__tests__/plan.command.unit.test.js.map +1 -0
- package/dist/cli/__tests__/run.command.unit.test.d.ts +7 -0
- package/dist/cli/__tests__/run.command.unit.test.d.ts.map +1 -0
- package/dist/cli/__tests__/run.command.unit.test.js +422 -0
- package/dist/cli/__tests__/run.command.unit.test.js.map +1 -0
- package/dist/cli/__tests__/validate.command.unit.test.d.ts +7 -0
- package/dist/cli/__tests__/validate.command.unit.test.d.ts.map +1 -0
- package/dist/cli/__tests__/validate.command.unit.test.js +226 -0
- package/dist/cli/__tests__/validate.command.unit.test.js.map +1 -0
- package/dist/cli/command-deps.d.ts +125 -0
- package/dist/cli/command-deps.d.ts.map +1 -0
- package/dist/cli/command-deps.js +7 -0
- package/dist/cli/command-deps.js.map +1 -0
- package/dist/cli/commands/aggregate.d.ts +35 -0
- package/dist/cli/commands/aggregate.d.ts.map +1 -0
- package/dist/cli/commands/aggregate.js +121 -0
- package/dist/cli/commands/aggregate.js.map +1 -0
- package/dist/cli/commands/plan.d.ts +36 -0
- package/dist/cli/commands/plan.d.ts.map +1 -0
- package/dist/cli/commands/plan.js +109 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/run.d.ts +33 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +185 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +27 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +88 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/config-loader.d.ts +30 -0
- package/dist/cli/config-loader.d.ts.map +1 -0
- package/dist/cli/config-loader.js +181 -0
- package/dist/cli/config-loader.js.map +1 -0
- package/dist/cli/index.d.ts +26 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +58 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/logger.d.ts +75 -0
- package/dist/cli/logger.d.ts.map +1 -0
- package/dist/cli/logger.js +131 -0
- package/dist/cli/logger.js.map +1 -0
- package/dist/cli/module-loader.d.ts +46 -0
- package/dist/cli/module-loader.d.ts.map +1 -0
- package/dist/cli/module-loader.js +116 -0
- package/dist/cli/module-loader.js.map +1 -0
- package/dist/cli/output-writer.d.ts +51 -0
- package/dist/cli/output-writer.d.ts.map +1 -0
- package/dist/cli/output-writer.js +65 -0
- package/dist/cli/output-writer.js.map +1 -0
- package/dist/cli/types.d.ts +174 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +7 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/collector/__tests__/result-collector.unit.test.d.ts +7 -0
- package/dist/collector/__tests__/result-collector.unit.test.d.ts.map +1 -0
- package/dist/collector/__tests__/result-collector.unit.test.js +1021 -0
- package/dist/collector/__tests__/result-collector.unit.test.js.map +1 -0
- package/dist/collector/__tests__/schema.unit.test.d.ts +7 -0
- package/dist/collector/__tests__/schema.unit.test.d.ts.map +1 -0
- package/dist/collector/__tests__/schema.unit.test.js +360 -0
- package/dist/collector/__tests__/schema.unit.test.js.map +1 -0
- package/dist/collector/index.d.ts +8 -0
- package/dist/collector/index.d.ts.map +1 -0
- package/dist/collector/index.js +8 -0
- package/dist/collector/index.js.map +1 -0
- package/dist/collector/result-collector.d.ts +159 -0
- package/dist/collector/result-collector.d.ts.map +1 -0
- package/dist/collector/result-collector.js +213 -0
- package/dist/collector/result-collector.js.map +1 -0
- package/dist/collector/schema.d.ts +34 -0
- package/dist/collector/schema.d.ts.map +1 -0
- package/dist/collector/schema.js +145 -0
- package/dist/collector/schema.js.map +1 -0
- package/dist/executor/__tests__/checkpoint-hash-bug.diagnostic.test.d.ts +10 -0
- package/dist/executor/__tests__/checkpoint-hash-bug.diagnostic.test.d.ts.map +1 -0
- package/dist/executor/__tests__/checkpoint-hash-bug.diagnostic.test.js +122 -0
- package/dist/executor/__tests__/checkpoint-hash-bug.diagnostic.test.js.map +1 -0
- package/dist/executor/__tests__/checkpoint-manager.integration.test.d.ts +7 -0
- package/dist/executor/__tests__/checkpoint-manager.integration.test.d.ts.map +1 -0
- package/dist/executor/__tests__/checkpoint-manager.integration.test.js +330 -0
- package/dist/executor/__tests__/checkpoint-manager.integration.test.js.map +1 -0
- package/dist/executor/__tests__/checkpoint-manager.unit.test.d.ts +7 -0
- package/dist/executor/__tests__/checkpoint-manager.unit.test.d.ts.map +1 -0
- package/dist/executor/__tests__/checkpoint-manager.unit.test.js +531 -0
- package/dist/executor/__tests__/checkpoint-manager.unit.test.js.map +1 -0
- package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.d.ts +8 -0
- package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.d.ts.map +1 -0
- package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.js +493 -0
- package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.js.map +1 -0
- package/dist/executor/__tests__/checkpoint-merge-bug.unit.test.d.ts +8 -0
- package/dist/executor/__tests__/checkpoint-merge-bug.unit.test.d.ts.map +1 -0
- package/dist/executor/__tests__/checkpoint-merge-bug.unit.test.js +164 -0
- package/dist/executor/__tests__/checkpoint-merge-bug.unit.test.js.map +1 -0
- package/dist/executor/__tests__/checkpoint-storage.unit.test.d.ts +7 -0
- package/dist/executor/__tests__/checkpoint-storage.unit.test.d.ts.map +1 -0
- package/dist/executor/__tests__/checkpoint-storage.unit.test.js +490 -0
- package/dist/executor/__tests__/checkpoint-storage.unit.test.js.map +1 -0
- package/dist/executor/__tests__/executor.unit.test.d.ts +7 -0
- package/dist/executor/__tests__/executor.unit.test.d.ts.map +1 -0
- package/dist/executor/__tests__/executor.unit.test.js +202 -0
- package/dist/executor/__tests__/executor.unit.test.js.map +1 -0
- package/dist/executor/__tests__/memory-monitor.unit.test.d.ts +7 -0
- package/dist/executor/__tests__/memory-monitor.unit.test.d.ts.map +1 -0
- package/dist/executor/__tests__/memory-monitor.unit.test.js +285 -0
- package/dist/executor/__tests__/memory-monitor.unit.test.js.map +1 -0
- package/dist/executor/__tests__/parallel-checkpoint-merge.integration.test.d.ts +12 -0
- package/dist/executor/__tests__/parallel-checkpoint-merge.integration.test.d.ts.map +1 -0
- package/dist/executor/__tests__/parallel-checkpoint-merge.integration.test.js +196 -0
- package/dist/executor/__tests__/parallel-checkpoint-merge.integration.test.js.map +1 -0
- package/dist/executor/__tests__/parallel-executor.integration.test.d.ts +7 -0
- package/dist/executor/__tests__/parallel-executor.integration.test.d.ts.map +1 -0
- package/dist/executor/__tests__/parallel-executor.integration.test.js +249 -0
- package/dist/executor/__tests__/parallel-executor.integration.test.js.map +1 -0
- package/dist/executor/__tests__/parallel-executor.unit.test.d.ts +8 -0
- package/dist/executor/__tests__/parallel-executor.unit.test.d.ts.map +1 -0
- package/dist/executor/__tests__/parallel-executor.unit.test.js +473 -0
- package/dist/executor/__tests__/parallel-executor.unit.test.js.map +1 -0
- package/dist/executor/__tests__/run-id.unit.test.d.ts +8 -0
- package/dist/executor/__tests__/run-id.unit.test.d.ts.map +1 -0
- package/dist/executor/__tests__/run-id.unit.test.js +156 -0
- package/dist/executor/__tests__/run-id.unit.test.js.map +1 -0
- package/dist/executor/__tests__/worker-entry.integration.test.d.ts +24 -0
- package/dist/executor/__tests__/worker-entry.integration.test.d.ts.map +1 -0
- package/dist/executor/__tests__/worker-entry.integration.test.js +82 -0
- package/dist/executor/__tests__/worker-entry.integration.test.js.map +1 -0
- package/dist/executor/__tests__/worker-entry.unit.test.d.ts +7 -0
- package/dist/executor/__tests__/worker-entry.unit.test.d.ts.map +1 -0
- package/dist/executor/__tests__/worker-entry.unit.test.js +364 -0
- package/dist/executor/__tests__/worker-entry.unit.test.js.map +1 -0
- package/dist/executor/checkpoint-manager.d.ts +231 -0
- package/dist/executor/checkpoint-manager.d.ts.map +1 -0
- package/dist/executor/checkpoint-manager.js +395 -0
- package/dist/executor/checkpoint-manager.js.map +1 -0
- package/dist/executor/checkpoint-storage.d.ts +230 -0
- package/dist/executor/checkpoint-storage.d.ts.map +1 -0
- package/dist/executor/checkpoint-storage.js +370 -0
- package/dist/executor/checkpoint-storage.js.map +1 -0
- package/dist/executor/checkpoint-types.d.ts +48 -0
- package/dist/executor/checkpoint-types.d.ts.map +1 -0
- package/dist/executor/checkpoint-types.js +8 -0
- package/dist/executor/checkpoint-types.js.map +1 -0
- package/dist/executor/executor.d.ts +164 -0
- package/dist/executor/executor.d.ts.map +1 -0
- package/dist/executor/executor.js +408 -0
- package/dist/executor/executor.js.map +1 -0
- package/dist/executor/index.d.ts +11 -0
- package/dist/executor/index.d.ts.map +1 -0
- package/dist/executor/index.js +11 -0
- package/dist/executor/index.js.map +1 -0
- package/dist/executor/memory-monitor.d.ts +115 -0
- package/dist/executor/memory-monitor.d.ts.map +1 -0
- package/dist/executor/memory-monitor.js +168 -0
- package/dist/executor/memory-monitor.js.map +1 -0
- package/dist/executor/parallel-executor.d.ts +239 -0
- package/dist/executor/parallel-executor.d.ts.map +1 -0
- package/dist/executor/parallel-executor.js +329 -0
- package/dist/executor/parallel-executor.js.map +1 -0
- package/dist/executor/run-id.d.ts +71 -0
- package/dist/executor/run-id.d.ts.map +1 -0
- package/dist/executor/run-id.js +74 -0
- package/dist/executor/run-id.js.map +1 -0
- package/dist/executor/worker-entry.d.ts +10 -0
- package/dist/executor/worker-entry.d.ts.map +1 -0
- package/dist/executor/worker-entry.js +42 -0
- package/dist/executor/worker-entry.js.map +1 -0
- package/dist/executor/worker-executor.d.ts +156 -0
- package/dist/executor/worker-executor.d.ts.map +1 -0
- package/dist/executor/worker-executor.js +88 -0
- package/dist/executor/worker-executor.js.map +1 -0
- package/dist/index.cjs +11 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/registry/case-registry.d.ts +113 -0
- package/dist/registry/case-registry.d.ts.map +1 -0
- package/dist/registry/case-registry.js +160 -0
- package/dist/registry/case-registry.js.map +1 -0
- package/dist/registry/index.d.ts +8 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +8 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/sut-registry.d.ts +96 -0
- package/dist/registry/sut-registry.d.ts.map +1 -0
- package/dist/registry/sut-registry.js +126 -0
- package/dist/registry/sut-registry.js.map +1 -0
- package/dist/renderers/index.d.ts +10 -0
- package/dist/renderers/index.d.ts.map +1 -0
- package/dist/renderers/index.js +9 -0
- package/dist/renderers/index.js.map +1 -0
- package/dist/renderers/latex-renderer.d.ts +84 -0
- package/dist/renderers/latex-renderer.d.ts.map +1 -0
- package/dist/renderers/latex-renderer.js +208 -0
- package/dist/renderers/latex-renderer.js.map +1 -0
- package/dist/renderers/types.d.ts +106 -0
- package/dist/renderers/types.d.ts.map +1 -0
- package/dist/renderers/types.js +23 -0
- package/dist/renderers/types.js.map +1 -0
- package/dist/robustness/__tests__/analyzer.unit.test.d.ts +11 -0
- package/dist/robustness/__tests__/analyzer.unit.test.d.ts.map +1 -0
- package/dist/robustness/__tests__/analyzer.unit.test.js +455 -0
- package/dist/robustness/__tests__/analyzer.unit.test.js.map +1 -0
- package/dist/robustness/__tests__/perturbations.unit.test.d.ts +11 -0
- package/dist/robustness/__tests__/perturbations.unit.test.d.ts.map +1 -0
- package/dist/robustness/__tests__/perturbations.unit.test.js +284 -0
- package/dist/robustness/__tests__/perturbations.unit.test.js.map +1 -0
- package/dist/robustness/analyzer.d.ts +61 -0
- package/dist/robustness/analyzer.d.ts.map +1 -0
- package/dist/robustness/analyzer.js +191 -0
- package/dist/robustness/analyzer.js.map +1 -0
- package/dist/robustness/index.d.ts +8 -0
- package/dist/robustness/index.d.ts.map +1 -0
- package/dist/robustness/index.js +8 -0
- package/dist/robustness/index.js.map +1 -0
- package/dist/robustness/perturbations.d.ts +46 -0
- package/dist/robustness/perturbations.d.ts.map +1 -0
- package/dist/robustness/perturbations.js +184 -0
- package/dist/robustness/perturbations.js.map +1 -0
- package/dist/statistical/__tests__/mann-whitney-u.unit.test.d.ts +7 -0
- package/dist/statistical/__tests__/mann-whitney-u.unit.test.d.ts.map +1 -0
- package/dist/statistical/__tests__/mann-whitney-u.unit.test.js +185 -0
- package/dist/statistical/__tests__/mann-whitney-u.unit.test.js.map +1 -0
- package/dist/statistical/index.d.ts +8 -0
- package/dist/statistical/index.d.ts.map +1 -0
- package/dist/statistical/index.js +8 -0
- package/dist/statistical/index.js.map +1 -0
- package/dist/statistical/mann-whitney-u.d.ts +62 -0
- package/dist/statistical/mann-whitney-u.d.ts.map +1 -0
- package/dist/statistical/mann-whitney-u.js +127 -0
- package/dist/statistical/mann-whitney-u.js.map +1 -0
- package/dist/types/aggregate.d.ts +124 -0
- package/dist/types/aggregate.d.ts.map +1 -0
- package/dist/types/aggregate.js +9 -0
- package/dist/types/aggregate.js.map +1 -0
- package/dist/types/case.d.ts +105 -0
- package/dist/types/case.d.ts.map +1 -0
- package/dist/types/case.js +10 -0
- package/dist/types/case.js.map +1 -0
- package/dist/types/claims.d.ts +122 -0
- package/dist/types/claims.d.ts.map +1 -0
- package/dist/types/claims.js +14 -0
- package/dist/types/claims.js.map +1 -0
- package/dist/types/index.d.ts +12 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/perturbation.d.ts +105 -0
- package/dist/types/perturbation.d.ts.map +1 -0
- package/dist/types/perturbation.js +9 -0
- package/dist/types/perturbation.js.map +1 -0
- package/dist/types/result.d.ts +150 -0
- package/dist/types/result.d.ts.map +1 -0
- package/dist/types/result.js +12 -0
- package/dist/types/result.js.map +1 -0
- package/dist/types/sut.d.ts +128 -0
- package/dist/types/sut.d.ts.map +1 -0
- package/dist/types/sut.js +12 -0
- package/dist/types/sut.js.map +1 -0
- package/package.json +290 -7
|
@@ -0,0 +1,164 @@
|
|
|
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 type { CaseDefinition } from "../types/case.js";
|
|
8
|
+
import type { EvaluationResult } from "../types/result.js";
|
|
9
|
+
import type { SutDefinition } from "../types/sut.js";
|
|
10
|
+
/**
|
|
11
|
+
* Configuration for experiment execution.
|
|
12
|
+
*/
|
|
13
|
+
export interface ExecutorConfig {
|
|
14
|
+
/** Continue execution if a single run fails */
|
|
15
|
+
continueOnError: boolean;
|
|
16
|
+
/** Number of repetitions per case (for statistical analysis) */
|
|
17
|
+
repetitions: number;
|
|
18
|
+
/** Random seed base (incremented per repetition) */
|
|
19
|
+
seedBase: number;
|
|
20
|
+
/** Timeout per run in milliseconds (0 = no timeout) */
|
|
21
|
+
timeoutMs: number;
|
|
22
|
+
/** Whether to collect provenance information */
|
|
23
|
+
collectProvenance: boolean;
|
|
24
|
+
/** Number of concurrent runs (1 = sequential) */
|
|
25
|
+
concurrency?: number;
|
|
26
|
+
/** Progress callback */
|
|
27
|
+
onProgress?: (progress: ExecutionProgress) => void;
|
|
28
|
+
/** Per-run callback (can be async) */
|
|
29
|
+
onResult?: (result: EvaluationResult) => void | Promise<void>;
|
|
30
|
+
/** Enable memory monitoring (default: true) */
|
|
31
|
+
monitorMemory?: boolean;
|
|
32
|
+
/** Memory warning threshold in MB (default: 1024) */
|
|
33
|
+
memoryWarningThresholdMb?: number;
|
|
34
|
+
/** Memory critical threshold in MB (default: 2048) */
|
|
35
|
+
memoryCriticalThresholdMb?: number;
|
|
36
|
+
/** Abort execution at critical memory level (default: false) */
|
|
37
|
+
abortOnMemoryCritical?: boolean;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Default executor configuration.
|
|
41
|
+
*/
|
|
42
|
+
export declare const DEFAULT_EXECUTOR_CONFIG: ExecutorConfig;
|
|
43
|
+
/**
|
|
44
|
+
* Execution progress report.
|
|
45
|
+
*/
|
|
46
|
+
export interface ExecutionProgress {
|
|
47
|
+
/** Total planned runs */
|
|
48
|
+
total: number;
|
|
49
|
+
/** Completed runs */
|
|
50
|
+
completed: number;
|
|
51
|
+
/** Failed runs */
|
|
52
|
+
failed: number;
|
|
53
|
+
/** Current SUT */
|
|
54
|
+
currentSut?: string;
|
|
55
|
+
/** Current case */
|
|
56
|
+
currentCase?: string;
|
|
57
|
+
/** Current repetition */
|
|
58
|
+
currentRepetition?: number;
|
|
59
|
+
/** Elapsed time in milliseconds */
|
|
60
|
+
elapsedMs: number;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Execution summary returned after completion.
|
|
64
|
+
*/
|
|
65
|
+
export interface ExecutionSummary {
|
|
66
|
+
/** Total runs attempted */
|
|
67
|
+
totalRuns: number;
|
|
68
|
+
/** Successful runs */
|
|
69
|
+
successfulRuns: number;
|
|
70
|
+
/** Failed runs */
|
|
71
|
+
failedRuns: number;
|
|
72
|
+
/** Total elapsed time */
|
|
73
|
+
elapsedMs: number;
|
|
74
|
+
/** Results collected */
|
|
75
|
+
results: EvaluationResult[];
|
|
76
|
+
/** Errors encountered */
|
|
77
|
+
errors: {
|
|
78
|
+
runId: string;
|
|
79
|
+
error: string;
|
|
80
|
+
}[];
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Execution plan for a single run.
|
|
84
|
+
*/
|
|
85
|
+
export interface PlannedRun {
|
|
86
|
+
/** Deterministic run ID */
|
|
87
|
+
runId: string;
|
|
88
|
+
/** SUT to execute */
|
|
89
|
+
sutId: string;
|
|
90
|
+
/** Case to run against */
|
|
91
|
+
caseId: string;
|
|
92
|
+
/** Repetition number */
|
|
93
|
+
repetition: number;
|
|
94
|
+
/** Random seed */
|
|
95
|
+
seed: number;
|
|
96
|
+
/** Configuration overrides */
|
|
97
|
+
config?: Record<string, unknown>;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Experiment executor.
|
|
101
|
+
*
|
|
102
|
+
* @template TInput - The resource type (e.g., Graph, Dataset)
|
|
103
|
+
* @template TInputs - The algorithm inputs type
|
|
104
|
+
* @template TResult - The algorithm result type
|
|
105
|
+
*/
|
|
106
|
+
export declare class Executor<TInput = unknown, TInputs = unknown, TResult = unknown> {
|
|
107
|
+
private readonly config;
|
|
108
|
+
private readonly inputCache;
|
|
109
|
+
private readonly memoryMonitor?;
|
|
110
|
+
constructor(config?: Partial<ExecutorConfig>);
|
|
111
|
+
/**
|
|
112
|
+
* Plan execution runs without executing.
|
|
113
|
+
*
|
|
114
|
+
* @param suts - SUTs to execute
|
|
115
|
+
* @param cases - Cases to run against
|
|
116
|
+
* @returns Array of planned runs
|
|
117
|
+
*/
|
|
118
|
+
plan(suts: SutDefinition<TInputs, TResult>[], cases: CaseDefinition<TInput, TInputs>[]): PlannedRun[];
|
|
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
|
+
execute(suts: SutDefinition<TInputs, TResult>[], cases: CaseDefinition<TInput, TInputs>[], metricsExtractor: (result: TResult) => Record<string, number>, plannedRuns?: PlannedRun[]): Promise<ExecutionSummary>;
|
|
129
|
+
/**
|
|
130
|
+
* Execute runs sequentially (original behavior).
|
|
131
|
+
* @param plannedRuns
|
|
132
|
+
* @param sutMap
|
|
133
|
+
* @param caseMap
|
|
134
|
+
* @param metricsExtractor
|
|
135
|
+
* @param startTime
|
|
136
|
+
* @internal
|
|
137
|
+
*/
|
|
138
|
+
private executeSequential;
|
|
139
|
+
/**
|
|
140
|
+
* Execute runs in parallel with a concurrency limit.
|
|
141
|
+
* @param plannedRuns
|
|
142
|
+
* @param sutMap
|
|
143
|
+
* @param caseMap
|
|
144
|
+
* @param metricsExtractor
|
|
145
|
+
* @param startTime
|
|
146
|
+
* @param concurrency
|
|
147
|
+
* @internal
|
|
148
|
+
*/
|
|
149
|
+
private executeParallel;
|
|
150
|
+
/**
|
|
151
|
+
* Execute a single run.
|
|
152
|
+
* @param run
|
|
153
|
+
* @param sutDef
|
|
154
|
+
* @param caseDef
|
|
155
|
+
* @param metricsExtractor
|
|
156
|
+
*/
|
|
157
|
+
private executeRun;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Create a default executor with standard configuration.
|
|
161
|
+
* @param config
|
|
162
|
+
*/
|
|
163
|
+
export declare const createExecutor: <TInput = unknown, TInputs = unknown, TResult = unknown>(config?: Partial<ExecutorConfig>) => Executor<TInput, TInputs, TResult>;
|
|
164
|
+
//# sourceMappingURL=executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/executor/executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|