@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.
- package/dist/cli.js +8787 -3214
- package/dist/lib/aiExport.js +14 -1
- package/dist/lib/aiPocketSearch.js +499 -67
- package/dist/lib/aiPocketSearchCli.js +113 -0
- package/dist/lib/aiTrainCharts.js +14 -1
- package/dist/lib/aiTrainMetrics.js +4 -1
- package/dist/lib/aiTrainResearch.js +88 -54
- package/dist/lib/coreResearch.js +2738 -0
- package/dist/lib/executionCalibration.js +6 -3
- package/dist/lib/runtimeLineage.js +81 -48
- package/dist/lib/runtimeScorecard.js +153 -10
- package/dist/lib/strategyGateFingerprint.js +80 -0
- package/dist/lib/strategyRelease.js +1365 -0
- package/dist/scripts/aiExport.js +16 -3
- package/dist/scripts/aiPocketSearch.js +1069 -163
- package/dist/scripts/aiTrain.js +91 -65
- package/dist/scripts/backtest.js +10 -1
- package/dist/scripts/coreResearch.js +2830 -0
- package/dist/scripts/executionCalibration.js +6 -3
- package/dist/scripts/replay.js +106 -73
- package/dist/scripts/replayRunner.js +106 -73
- package/dist/scripts/replayRuntimeEvidence.js +27 -14
- package/dist/scripts/runtimeEvidence.js +16 -8
- package/dist/scripts/runtimeScorecard.js +883 -29
- package/dist/scripts/signals.js +133 -89
- package/dist/scripts/signalsDaemon.js +133 -89
- package/dist/scripts/strategyRelease.js +1469 -0
- package/package.json +11 -9
|
@@ -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:
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
38
|
-
var
|
|
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
|
-
|
|
566
|
-
|
|
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 =
|
|
687
|
-
await
|
|
688
|
-
await
|
|
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:
|
|
700
|
+
publishRoot: import_node_path4.default.resolve(projectRoot, publishDir),
|
|
693
701
|
deploymentId: String(flags.deployment),
|
|
694
702
|
userName: String(flags.user),
|
|
695
703
|
startTime,
|