@tradejs/cli 2.0.18 → 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.
Files changed (56) hide show
  1. package/dist/cli.js +14522 -15704
  2. package/dist/lib/aiExport.js +15 -1608
  3. package/dist/lib/aiPocketSearch.js +499 -67
  4. package/dist/lib/aiPocketSearchCli.js +113 -0
  5. package/dist/lib/aiTrainCharts.js +14 -1
  6. package/dist/lib/aiTrainMetrics.js +4 -1
  7. package/dist/lib/aiTrainResearch.js +88 -54
  8. package/dist/lib/binanceMarketContextBackfill.js +7 -6
  9. package/dist/lib/coinMarketCapContextBackfill.js +19 -18
  10. package/dist/lib/coreResearch.js +2738 -0
  11. package/dist/lib/derivativesContextBackfill.js +10 -9
  12. package/dist/lib/executionCalibration.js +6 -3
  13. package/dist/lib/hyperliquidWhaleBackfill.js +8 -8
  14. package/dist/lib/hyperliquidWhaleStream.js +4 -4
  15. package/dist/lib/marketContextPrepare.js +83 -1686
  16. package/dist/lib/runEnvironment.js +14 -1666
  17. package/dist/lib/runFormatting.js +1 -1607
  18. package/dist/lib/runtimeDebugEvidence.js +2 -48
  19. package/dist/lib/runtimeLineage.js +81 -48
  20. package/dist/lib/runtimeRedis.js +6 -57
  21. package/dist/lib/runtimeScorecard.js +153 -10
  22. package/dist/lib/runtimeStrategyBacktest.js +2 -48
  23. package/dist/lib/strategyGateFingerprint.js +80 -0
  24. package/dist/lib/strategyRelease.js +1365 -0
  25. package/dist/scripts/aiExport.js +17 -1610
  26. package/dist/scripts/aiPocketSearch.js +1070 -1770
  27. package/dist/scripts/aiTrain.js +108 -1688
  28. package/dist/scripts/backtest.js +120 -1760
  29. package/dist/scripts/binanceMarketIngest.js +5 -4
  30. package/dist/scripts/candlesMigrateProvider.js +6 -5186
  31. package/dist/scripts/cleanupMarketContext.js +4 -3
  32. package/dist/scripts/continuity.js +4 -3
  33. package/dist/scripts/coreResearch.js +2830 -0
  34. package/dist/scripts/derivativesIngest.js +6 -4
  35. package/dist/scripts/derivativesIngestCoinalyzeAll.js +5 -4
  36. package/dist/scripts/doctor.js +2 -5184
  37. package/dist/scripts/executionCalibration.js +6 -3
  38. package/dist/scripts/hyperliquidWhaleBackfill.js +8 -8
  39. package/dist/scripts/hyperliquidWhaleIngest.js +4 -4
  40. package/dist/scripts/hyperliquidWhalesUpdate.js +1 -1
  41. package/dist/scripts/migration.js +3 -3
  42. package/dist/scripts/mlExport.js +1 -1607
  43. package/dist/scripts/replay.js +239 -1855
  44. package/dist/scripts/replayRunner.js +239 -1855
  45. package/dist/scripts/replayRuntimeEvidence.js +29 -62
  46. package/dist/scripts/researchAuto.js +3 -49
  47. package/dist/scripts/results.js +1 -1607
  48. package/dist/scripts/runtimeEvidence.js +18 -56
  49. package/dist/scripts/runtimeParity.js +121 -1746
  50. package/dist/scripts/runtimeScorecard.js +883 -29
  51. package/dist/scripts/signals.js +1178 -2724
  52. package/dist/scripts/signalsDaemon.js +1183 -2696
  53. package/dist/scripts/signalsSummary.js +4 -26
  54. package/dist/scripts/strategyRelease.js +1469 -0
  55. package/dist/workers/testerWorker.js +2 -2
  56. package/package.json +13 -9
@@ -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
 
@@ -45,17 +45,7 @@ var import_redis3 = require("@tradejs/infra/redis");
45
45
  // src/lib/runtimeRedis.ts
46
46
  var import_redis = require("@tradejs/infra/redis");
47
47
  var import_time = require("@tradejs/core/time");
48
- var RESERVED_STRATEGY_NAMES = /* @__PURE__ */ new Set(["charts"]);
49
- var RESERVED_CONFIG_IDS = /* @__PURE__ */ new Set(["results"]);
50
- var resolveStrategyConfigIdentityByKey = (userName, key) => {
51
- const parts = key.split(":");
52
- if (parts.length !== 5) return null;
53
- const [users, keyUserName, strategiesKey, strategyName, configId] = parts;
54
- if (users !== "users" || keyUserName !== userName || strategiesKey !== "strategies" || !strategyName || !configId || RESERVED_STRATEGY_NAMES.has(strategyName) || RESERVED_CONFIG_IDS.has(configId) || !/^[a-zA-Z0-9_-]+$/.test(configId)) {
55
- return null;
56
- }
57
- return { strategyName, configId };
58
- };
48
+ var import_runtimeStrategyConfigs = require("@tradejs/infra/runtimeStrategyConfigs");
59
49
  var isRuntimeTradeRecord = (value) => {
60
50
  if (!value || typeof value !== "object") {
61
51
  return false;
@@ -63,42 +53,6 @@ var isRuntimeTradeRecord = (value) => {
63
53
  const record = value;
64
54
  return typeof record.orderId === "string" && typeof record.strategy === "string" && typeof record.symbol === "string" && typeof record.entryTimestamp === "number" && typeof record.entryPrice === "number" && typeof record.qty === "number" && (record.direction === "LONG" || record.direction === "SHORT");
65
55
  };
66
- var resolveStrategyNameByConfigKey = (userName, key) => {
67
- return resolveStrategyConfigIdentityByKey(userName, key)?.strategyName ?? null;
68
- };
69
- var getRuntimeStrategyConfigKeys = async (userName) => {
70
- const keys = await (0, import_redis.getKeys)(`${import_redis.redisKeys.strategies(userName)}:`);
71
- return keys.filter((key) => resolveStrategyConfigIdentityByKey(userName, key)).sort((left, right) => left.localeCompare(right));
72
- };
73
- var loadRuntimeStrategyConfigs = async (userName, {
74
- onInvalidConfig
75
- } = {}) => {
76
- const configKeys = await getRuntimeStrategyConfigKeys(userName);
77
- const strategyConfigs = await Promise.all(
78
- configKeys.map(async (key) => {
79
- const strategyName = resolveStrategyNameByConfigKey(userName, key);
80
- const identity = resolveStrategyConfigIdentityByKey(userName, key);
81
- if (!strategyName || !identity) {
82
- return null;
83
- }
84
- const strategyConfig = await (0, import_redis.getData)(
85
- key,
86
- null
87
- );
88
- if (!strategyConfig || typeof strategyConfig !== "object" || Array.isArray(strategyConfig)) {
89
- onInvalidConfig?.(key);
90
- return null;
91
- }
92
- return {
93
- key,
94
- strategyName,
95
- configId: identity.configId,
96
- strategyConfig
97
- };
98
- })
99
- );
100
- return strategyConfigs.filter(Boolean);
101
- };
102
56
  var loadRuntimeTrades = async (userName, {
103
57
  startTime,
104
58
  endTime
@@ -349,7 +303,7 @@ var collectRuntimeDebugEvidence = async ({
349
303
  loadRuntimeSignals(userName, { startTime, endTime }),
350
304
  loadRuntimeSignalEvaluations(userName, { startTime, endTime }),
351
305
  loadRuntimeSignalEvaluationStatsBuckets(userName),
352
- loadRuntimeStrategyConfigs(userName)
306
+ (0, import_runtimeStrategyConfigs.loadRuntimeStrategyConfigs)(userName)
353
307
  ]);
354
308
  const tradesByOrderId = new Map(
355
309
  entryTrades.map((trade) => [trade.orderId, trade])
@@ -605,13 +559,21 @@ var verifyRuntimeEvidenceBundle = async (bundleDir) => {
605
559
 
606
560
  // src/lib/runtimeLineage.ts
607
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
608
569
  var import_node_crypto2 = require("crypto");
609
570
  var import_promises2 = __toESM(require("fs/promises"));
610
571
  var import_node_path2 = __toESM(require("path"));
611
- var import_types = require("@tradejs/types");
612
- var import_strategies = require("@tradejs/node/strategies");
572
+
573
+ // src/lib/runtimeLineage.ts
613
574
  var runtimeLineageKey = (lineage) => [
614
575
  lineage.schemaVersion,
576
+ lineage.compositionId ?? "unbound-composition",
615
577
  lineage.gitSha ?? "unknown",
616
578
  lineage.gitDirty == null ? "unknown" : lineage.gitDirty ? "dirty" : "clean",
617
579
  lineage.gateFingerprint,
@@ -729,13 +691,13 @@ var runtimeEvidence = async () => {
729
691
  strategies,
730
692
  runtime
731
693
  };
732
- const outPath = import_node_path3.default.resolve(projectRoot, String(flags.out));
733
- await import_promises3.default.mkdir(import_node_path3.default.dirname(outPath), { recursive: true });
734
- 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)}
735
697
  `, "utf8");
736
698
  const publishDir = String(flags.publishDir ?? "").trim();
737
699
  const published = publishDir ? await publishRuntimeEvidenceBundle({
738
- publishRoot: import_node_path3.default.resolve(projectRoot, publishDir),
700
+ publishRoot: import_node_path4.default.resolve(projectRoot, publishDir),
739
701
  deploymentId: String(flags.deployment),
740
702
  userName: String(flags.user),
741
703
  startTime,