@tradejs/cli 2.0.17 → 2.0.19

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 (42) hide show
  1. package/dist/cli.js +6122 -12724
  2. package/dist/lib/aiExport.js +1 -1607
  3. package/dist/lib/binanceMarketContextBackfill.js +7 -6
  4. package/dist/lib/coinMarketCapContextBackfill.js +19 -18
  5. package/dist/lib/derivativesContextBackfill.js +10 -9
  6. package/dist/lib/hyperliquidWhaleBackfill.js +8 -8
  7. package/dist/lib/hyperliquidWhaleStream.js +4 -4
  8. package/dist/lib/marketContextPrepare.js +83 -1686
  9. package/dist/lib/runEnvironment.js +14 -1666
  10. package/dist/lib/runFormatting.js +1 -1607
  11. package/dist/lib/runtimeDebugEvidence.js +2 -48
  12. package/dist/lib/runtimeEvidenceArtifacts.js +13 -1
  13. package/dist/lib/runtimeRedis.js +6 -57
  14. package/dist/lib/runtimeStrategyBacktest.js +2 -48
  15. package/dist/scripts/aiExport.js +1 -1607
  16. package/dist/scripts/aiPocketSearch.js +1 -1607
  17. package/dist/scripts/aiTrain.js +17 -1623
  18. package/dist/scripts/backtest.js +110 -1759
  19. package/dist/scripts/binanceMarketIngest.js +5 -4
  20. package/dist/scripts/candlesMigrateProvider.js +6 -5186
  21. package/dist/scripts/cleanupMarketContext.js +4 -3
  22. package/dist/scripts/continuity.js +4 -3
  23. package/dist/scripts/derivativesIngest.js +6 -4
  24. package/dist/scripts/derivativesIngestCoinalyzeAll.js +5 -4
  25. package/dist/scripts/doctor.js +2 -5184
  26. package/dist/scripts/hyperliquidWhaleBackfill.js +8 -8
  27. package/dist/scripts/hyperliquidWhaleIngest.js +4 -4
  28. package/dist/scripts/hyperliquidWhalesUpdate.js +1 -1
  29. package/dist/scripts/migration.js +3 -3
  30. package/dist/scripts/mlExport.js +1 -1607
  31. package/dist/scripts/replay.js +291 -1807
  32. package/dist/scripts/replayRunner.js +291 -1807
  33. package/dist/scripts/replayRuntimeEvidence.js +2 -48
  34. package/dist/scripts/researchAuto.js +3 -49
  35. package/dist/scripts/results.js +1 -1607
  36. package/dist/scripts/runtimeEvidence.js +15 -49
  37. package/dist/scripts/runtimeParity.js +121 -1746
  38. package/dist/scripts/signals.js +1057 -2647
  39. package/dist/scripts/signalsDaemon.js +1051 -2608
  40. package/dist/scripts/signalsSummary.js +4 -26
  41. package/dist/workers/testerWorker.js +2 -2
  42. package/package.json +11 -9
@@ -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])
@@ -417,6 +371,17 @@ var RUNTIME_EVIDENCE_PAYLOAD_FILE = "runtime-evidence.json";
417
371
  var RUNTIME_EVIDENCE_COMPLETE_FILE = ".complete";
418
372
  var asRecord = (value) => value && typeof value === "object" && !Array.isArray(value) ? value : null;
419
373
  var sha256 = (value) => (0, import_node_crypto.createHash)("sha256").update(value).digest("hex");
374
+ var runtimeEvidenceIdentitySha256 = (artifact) => {
375
+ const identityArtifact = { ...artifact };
376
+ delete identityArtifact.generatedAt;
377
+ const runtime = asRecord(identityArtifact.runtime);
378
+ if (runtime) {
379
+ const identityRuntime = { ...runtime };
380
+ delete identityRuntime.generatedAt;
381
+ identityArtifact.runtime = identityRuntime;
382
+ }
383
+ return sha256(JSON.stringify(identityArtifact));
384
+ };
420
385
  var isExistingDestinationError = (error) => {
421
386
  const code = error.code;
422
387
  return code === "EEXIST" || code === "ENOTEMPTY";
@@ -487,11 +452,12 @@ var publishRuntimeEvidenceBundle = async ({
487
452
  const payload = `${JSON.stringify(artifact, null, 2)}
488
453
  `;
489
454
  const payloadSha256 = sha256(payload);
455
+ const identitySha256 = runtimeEvidenceIdentitySha256(artifact);
490
456
  const safeDeploymentId = safeSegment(deploymentId, "default");
491
457
  const artifactId = [
492
458
  compactTimestamp(startTime),
493
459
  compactTimestamp(endTime),
494
- payloadSha256.slice(0, 16)
460
+ identitySha256.slice(0, 16)
495
461
  ].join("_");
496
462
  const createdAt = Date.now();
497
463
  const manifest = {