@tradejs/cli 2.0.19 → 2.0.20

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.
@@ -31,7 +31,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
31
31
  var replayRuntimeEvidence_exports = {};
32
32
  __export(replayRuntimeEvidence_exports, {
33
33
  main: () => main,
34
- replayRuntimeEvidence: () => replayRuntimeEvidence
34
+ replayRuntimeEvidence: () => replayRuntimeEvidence,
35
+ summarizeReplayComparison: () => summarizeReplayComparison
35
36
  });
36
37
  module.exports = __toCommonJS(replayRuntimeEvidence_exports);
37
38
  var import_promises = __toESM(require("fs/promises"));
@@ -413,8 +414,6 @@ import_args.default.option(
413
414
  "Output JSON path",
414
415
  "output/replay-runtime-evidence.json"
415
416
  );
416
- var flags = import_args.default.parse(process.argv);
417
- var projectRoot = String(process.env.PROJECT_CWD || process.cwd()).trim() || process.cwd();
418
417
  var toEpochMs = (value) => {
419
418
  if (value == null || value === "") {
420
419
  return null;
@@ -427,7 +426,7 @@ var toEpochMs = (value) => {
427
426
  const parsed = Date.parse(raw);
428
427
  return Number.isFinite(parsed) ? parsed : null;
429
428
  };
430
- var resolveWindow = () => {
429
+ var resolveWindow = (flags) => {
431
430
  const endTime = toEpochMs(flags.endTime) ?? Date.now();
432
431
  const hours = Math.max(
433
432
  1,
@@ -517,9 +516,13 @@ var summarizeReplayComparison = (runtimeComparison, strategies) => {
517
516
  [...matched, ...backtestOnly, ...runtimeOnly].map(resolveItemStrategy).filter((value) => typeof value === "string")
518
517
  )
519
518
  ].sort((left, right) => left.localeCompare(right));
519
+ const comparisonLineage = asRecord(comparison.lineage);
520
+ const replayLineage = asArray(comparisonLineage.replay).filter(
521
+ (entry) => !useFilter || strategySet.has(String(asRecord(entry).strategy ?? ""))
522
+ );
520
523
  return {
521
524
  mode: comparison.mode ?? null,
522
- lineage: comparison.lineage ?? null,
525
+ lineage: comparisonLineage ? { ...comparisonLineage, replay: replayLineage } : null,
523
526
  rows: asArray(comparison.rows).filter(
524
527
  (row) => !useFilter || strategySet.has(String(row.strategyName ?? ""))
525
528
  ),
@@ -625,9 +628,12 @@ var getReplayStrategies = (replayValue) => {
625
628
  var loadRuntimePayload = async ({
626
629
  startTime,
627
630
  endTime,
628
- strategies
631
+ strategies,
632
+ userName,
633
+ runtimeEvidenceFile,
634
+ projectRoot
629
635
  }) => {
630
- const runtimeEvidencePath = typeof flags.runtimeEvidence === "string" && flags.runtimeEvidence.trim() ? import_node_path.default.resolve(projectRoot, flags.runtimeEvidence.trim()) : null;
636
+ const runtimeEvidencePath = typeof runtimeEvidenceFile === "string" && runtimeEvidenceFile.trim() ? import_node_path.default.resolve(projectRoot, runtimeEvidenceFile.trim()) : null;
631
637
  if (runtimeEvidencePath) {
632
638
  const artifact = JSON.parse(
633
639
  await import_promises.default.readFile(runtimeEvidencePath, "utf8")
@@ -639,7 +645,7 @@ var loadRuntimePayload = async ({
639
645
  };
640
646
  }
641
647
  const runtimeEvidence = await collectRuntimeDebugEvidence({
642
- userName: flags.user,
648
+ userName,
643
649
  startTime,
644
650
  endTime,
645
651
  strategies: strategies.length ? strategies : void 0
@@ -648,7 +654,7 @@ var loadRuntimePayload = async ({
648
654
  source: "local-redis",
649
655
  path: null,
650
656
  payload: buildRuntimeEvidenceReportPayload({
651
- userName: flags.user,
657
+ userName,
652
658
  startTime,
653
659
  endTime,
654
660
  signals: runtimeEvidence.signals,
@@ -660,9 +666,12 @@ var loadRuntimePayload = async ({
660
666
  };
661
667
  };
662
668
  var replayRuntimeEvidence = async () => {
663
- const { startTime, endTime, source } = resolveWindow();
669
+ const flags = import_args.default.parse(process.argv);
670
+ const projectRoot = String(process.env.PROJECT_CWD || process.cwd()).trim() || process.cwd();
671
+ const userName = String(flags.user ?? "root");
672
+ const { startTime, endTime, source } = resolveWindow(flags);
664
673
  const replay = await loadReplayResult({
665
- userName: flags.user,
674
+ userName,
666
675
  replayKey: typeof flags.replayKey === "string" && flags.replayKey.trim() ? flags.replayKey.trim() : void 0
667
676
  });
668
677
  const explicitStrategies = parseStrategyFilter(flags.strategy);
@@ -670,13 +679,16 @@ var replayRuntimeEvidence = async () => {
670
679
  const runtime = await loadRuntimePayload({
671
680
  startTime,
672
681
  endTime,
673
- strategies
682
+ strategies,
683
+ userName,
684
+ runtimeEvidenceFile: flags.runtimeEvidence,
685
+ projectRoot
674
686
  });
675
687
  const replayValue = asRecord(replay.value);
676
688
  const artifact = {
677
689
  reportType: "replay-runtime-evidence",
678
690
  generatedAt: Date.now(),
679
- userName: flags.user,
691
+ userName,
680
692
  window: {
681
693
  startTime,
682
694
  endTime,
@@ -728,5 +740,6 @@ var main = replayRuntimeEvidence;
728
740
  // Annotate the CommonJS export names for ESM import in node:
729
741
  0 && (module.exports = {
730
742
  main,
731
- replayRuntimeEvidence
743
+ replayRuntimeEvidence,
744
+ summarizeReplayComparison
732
745
  });
@@ -34,8 +34,8 @@ __export(runtimeEvidence_exports, {
34
34
  runtimeEvidence: () => runtimeEvidence
35
35
  });
36
36
  module.exports = __toCommonJS(runtimeEvidence_exports);
37
- var import_promises3 = __toESM(require("fs/promises"));
38
- var import_node_path3 = __toESM(require("path"));
37
+ var import_promises4 = __toESM(require("fs/promises"));
38
+ var import_node_path4 = __toESM(require("path"));
39
39
  var import_args = __toESM(require("args"));
40
40
  var import_chalk = __toESM(require("chalk"));
41
41
 
@@ -559,13 +559,21 @@ var verifyRuntimeEvidenceBundle = async (bundleDir) => {
559
559
 
560
560
  // src/lib/runtimeLineage.ts
561
561
  var import_node_child_process = require("child_process");
562
+ var import_node_crypto3 = require("crypto");
563
+ var import_promises3 = __toESM(require("fs/promises"));
564
+ var import_node_path3 = __toESM(require("path"));
565
+ var import_types = require("@tradejs/types");
566
+ var import_strategies = require("@tradejs/node/strategies");
567
+
568
+ // src/lib/strategyGateFingerprint.ts
562
569
  var import_node_crypto2 = require("crypto");
563
570
  var import_promises2 = __toESM(require("fs/promises"));
564
571
  var import_node_path2 = __toESM(require("path"));
565
- var import_types = require("@tradejs/types");
566
- var import_strategies = require("@tradejs/node/strategies");
572
+
573
+ // src/lib/runtimeLineage.ts
567
574
  var runtimeLineageKey = (lineage) => [
568
575
  lineage.schemaVersion,
576
+ lineage.compositionId ?? "unbound-composition",
569
577
  lineage.gitSha ?? "unknown",
570
578
  lineage.gitDirty == null ? "unknown" : lineage.gitDirty ? "dirty" : "clean",
571
579
  lineage.gateFingerprint,
@@ -683,13 +691,13 @@ var runtimeEvidence = async () => {
683
691
  strategies,
684
692
  runtime
685
693
  };
686
- const outPath = import_node_path3.default.resolve(projectRoot, String(flags.out));
687
- await import_promises3.default.mkdir(import_node_path3.default.dirname(outPath), { recursive: true });
688
- await import_promises3.default.writeFile(outPath, `${JSON.stringify(artifact, null, 2)}
694
+ const outPath = import_node_path4.default.resolve(projectRoot, String(flags.out));
695
+ await import_promises4.default.mkdir(import_node_path4.default.dirname(outPath), { recursive: true });
696
+ await import_promises4.default.writeFile(outPath, `${JSON.stringify(artifact, null, 2)}
689
697
  `, "utf8");
690
698
  const publishDir = String(flags.publishDir ?? "").trim();
691
699
  const published = publishDir ? await publishRuntimeEvidenceBundle({
692
- publishRoot: import_node_path3.default.resolve(projectRoot, publishDir),
700
+ publishRoot: import_node_path4.default.resolve(projectRoot, publishDir),
693
701
  deploymentId: String(flags.deployment),
694
702
  userName: String(flags.user),
695
703
  startTime,