@tradejs/node 3.1.28-beta.252 → 3.1.28-beta.254

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.
@@ -35,6 +35,7 @@ __export(runtimeDashboard_exports, {
35
35
  module.exports = __toCommonJS(runtimeDashboard_exports);
36
36
  var import_time4 = require("@tradejs/core/time");
37
37
  var import_logger14 = require("@tradejs/infra/logger");
38
+ var import_runtimeDeploymentEvents = require("@tradejs/infra/runtimeDeploymentEvents");
38
39
  var import_tradingAccounts3 = require("@tradejs/infra/tradingAccounts");
39
40
  var import_redis4 = require("@tradejs/infra/redis");
40
41
 
@@ -8264,22 +8265,34 @@ var loadRuntimeTrades = async (userName, {
8264
8265
  }
8265
8266
  return [...dedupedTrades.values()].filter(filterByWindow).sort((left, right) => left.entryTimestamp - right.entryTimestamp);
8266
8267
  };
8267
- var getTradeStrategyRevision = (trade) => trade.strategyRevision ?? (trade.runtimeLineage?.schemaVersion === 3 ? trade.runtimeLineage.strategyRevision : void 0);
8268
- var buildStrategyRevisionChanges = (trades) => {
8268
+ var buildStrategyRevisionChanges = ({
8269
+ events,
8270
+ strategyName,
8271
+ startTime,
8272
+ endTime
8273
+ }) => {
8269
8274
  const changes = [];
8270
8275
  let previousRevision;
8271
- for (const trade of [...trades].sort(
8272
- (left, right) => left.entryTimestamp - right.entryTimestamp || left.orderId.localeCompare(right.orderId)
8276
+ let wasPresent = false;
8277
+ for (const event of [...events].sort(
8278
+ (left, right) => left.observedAt - right.observedAt || left.eventId.localeCompare(right.eventId)
8273
8279
  )) {
8274
- const strategyRevision = getTradeStrategyRevision(trade);
8275
- if (!strategyRevision) continue;
8276
- if (previousRevision && strategyRevision !== previousRevision) {
8280
+ const strategy = event.strategies.find(
8281
+ (item) => item.strategyName === strategyName
8282
+ );
8283
+ if (!strategy) {
8284
+ previousRevision = void 0;
8285
+ wasPresent = false;
8286
+ continue;
8287
+ }
8288
+ if ((!wasPresent || strategy.strategyRevision !== previousRevision) && event.observedAt >= startTime && event.observedAt <= endTime) {
8277
8289
  changes.push({
8278
- timestamp: trade.entryTimestamp,
8279
- strategyRevision
8290
+ timestamp: event.observedAt,
8291
+ strategyRevision: strategy.strategyRevision
8280
8292
  });
8281
8293
  }
8282
- previousRevision = strategyRevision;
8294
+ previousRevision = strategy.strategyRevision;
8295
+ wasPresent = true;
8283
8296
  }
8284
8297
  return changes;
8285
8298
  };
@@ -8530,8 +8543,8 @@ var loadRuntimeDashboard = async ({
8530
8543
  const accountsById = new Map(
8531
8544
  tradingAccounts.map((account) => [account.id, account])
8532
8545
  );
8533
- const resolvedStrategiesByDeployment = new Map(
8534
- await Promise.all(
8546
+ const [resolvedStrategyEntries, deploymentEventEntries] = await Promise.all([
8547
+ Promise.all(
8535
8548
  runtimeDeployments.map(
8536
8549
  async (deployment) => [
8537
8550
  deployment.id,
@@ -8542,8 +8555,21 @@ var loadRuntimeDashboard = async ({
8542
8555
  })
8543
8556
  ]
8544
8557
  )
8558
+ ),
8559
+ Promise.all(
8560
+ runtimeDeployments.map(
8561
+ async (deployment) => [
8562
+ deployment.id,
8563
+ await (0, import_runtimeDeploymentEvents.loadRuntimeDeploymentCompositionEvents)(
8564
+ userName,
8565
+ deployment.id
8566
+ )
8567
+ ]
8568
+ )
8545
8569
  )
8546
- );
8570
+ ]);
8571
+ const resolvedStrategiesByDeployment = new Map(resolvedStrategyEntries);
8572
+ const deploymentEventsById = new Map(deploymentEventEntries);
8547
8573
  const identityByKey = /* @__PURE__ */ new Map();
8548
8574
  for (const deployment of runtimeDeployments) {
8549
8575
  for (const resolvedStrategy of resolvedStrategiesByDeployment.get(
@@ -8630,7 +8656,12 @@ var loadRuntimeDashboard = async ({
8630
8656
  stat: analytics.stat,
8631
8657
  summary: analytics.summary,
8632
8658
  orderLog: analytics.orderLog,
8633
- revisionChanges: buildStrategyRevisionChanges(strategyTrades),
8659
+ revisionChanges: buildStrategyRevisionChanges({
8660
+ events: deploymentEventsById.get(identity.deploymentId) ?? [],
8661
+ strategyName,
8662
+ startTime,
8663
+ endTime
8664
+ }),
8634
8665
  recentTrades: strategyTrades.slice(0, 8).map((trade) => (0, import_runtimeTrades3.toRuntimeTradeView)(trade, endTime)),
8635
8666
  orders
8636
8667
  };
@@ -17,6 +17,7 @@ import "./chunk-Y6FXYEAI.mjs";
17
17
  // src/runtimeDashboard.ts
18
18
  import { getRuntimeStorageDayKeys } from "@tradejs/core/time";
19
19
  import { logger } from "@tradejs/infra/logger";
20
+ import { loadRuntimeDeploymentCompositionEvents } from "@tradejs/infra/runtimeDeploymentEvents";
20
21
  import {
21
22
  listTradingAccounts,
22
23
  resolveTradingAccount
@@ -367,22 +368,34 @@ var loadRuntimeTrades = async (userName, {
367
368
  }
368
369
  return [...dedupedTrades.values()].filter(filterByWindow).sort((left, right) => left.entryTimestamp - right.entryTimestamp);
369
370
  };
370
- var getTradeStrategyRevision = (trade) => trade.strategyRevision ?? (trade.runtimeLineage?.schemaVersion === 3 ? trade.runtimeLineage.strategyRevision : void 0);
371
- var buildStrategyRevisionChanges = (trades) => {
371
+ var buildStrategyRevisionChanges = ({
372
+ events,
373
+ strategyName,
374
+ startTime,
375
+ endTime
376
+ }) => {
372
377
  const changes = [];
373
378
  let previousRevision;
374
- for (const trade of [...trades].sort(
375
- (left, right) => left.entryTimestamp - right.entryTimestamp || left.orderId.localeCompare(right.orderId)
379
+ let wasPresent = false;
380
+ for (const event of [...events].sort(
381
+ (left, right) => left.observedAt - right.observedAt || left.eventId.localeCompare(right.eventId)
376
382
  )) {
377
- const strategyRevision = getTradeStrategyRevision(trade);
378
- if (!strategyRevision) continue;
379
- if (previousRevision && strategyRevision !== previousRevision) {
383
+ const strategy = event.strategies.find(
384
+ (item) => item.strategyName === strategyName
385
+ );
386
+ if (!strategy) {
387
+ previousRevision = void 0;
388
+ wasPresent = false;
389
+ continue;
390
+ }
391
+ if ((!wasPresent || strategy.strategyRevision !== previousRevision) && event.observedAt >= startTime && event.observedAt <= endTime) {
380
392
  changes.push({
381
- timestamp: trade.entryTimestamp,
382
- strategyRevision
393
+ timestamp: event.observedAt,
394
+ strategyRevision: strategy.strategyRevision
383
395
  });
384
396
  }
385
- previousRevision = strategyRevision;
397
+ previousRevision = strategy.strategyRevision;
398
+ wasPresent = true;
386
399
  }
387
400
  return changes;
388
401
  };
@@ -633,8 +646,8 @@ var loadRuntimeDashboard = async ({
633
646
  const accountsById = new Map(
634
647
  tradingAccounts.map((account) => [account.id, account])
635
648
  );
636
- const resolvedStrategiesByDeployment = new Map(
637
- await Promise.all(
649
+ const [resolvedStrategyEntries, deploymentEventEntries] = await Promise.all([
650
+ Promise.all(
638
651
  runtimeDeployments.map(
639
652
  async (deployment) => [
640
653
  deployment.id,
@@ -645,8 +658,21 @@ var loadRuntimeDashboard = async ({
645
658
  })
646
659
  ]
647
660
  )
661
+ ),
662
+ Promise.all(
663
+ runtimeDeployments.map(
664
+ async (deployment) => [
665
+ deployment.id,
666
+ await loadRuntimeDeploymentCompositionEvents(
667
+ userName,
668
+ deployment.id
669
+ )
670
+ ]
671
+ )
648
672
  )
649
- );
673
+ ]);
674
+ const resolvedStrategiesByDeployment = new Map(resolvedStrategyEntries);
675
+ const deploymentEventsById = new Map(deploymentEventEntries);
650
676
  const identityByKey = /* @__PURE__ */ new Map();
651
677
  for (const deployment of runtimeDeployments) {
652
678
  for (const resolvedStrategy of resolvedStrategiesByDeployment.get(
@@ -733,7 +759,12 @@ var loadRuntimeDashboard = async ({
733
759
  stat: analytics.stat,
734
760
  summary: analytics.summary,
735
761
  orderLog: analytics.orderLog,
736
- revisionChanges: buildStrategyRevisionChanges(strategyTrades),
762
+ revisionChanges: buildStrategyRevisionChanges({
763
+ events: deploymentEventsById.get(identity.deploymentId) ?? [],
764
+ strategyName,
765
+ startTime,
766
+ endTime
767
+ }),
737
768
  recentTrades: strategyTrades.slice(0, 8).map((trade) => toRuntimeTradeView(trade, endTime)),
738
769
  orders
739
770
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tradejs/node",
3
- "version": "3.1.28-beta.252",
3
+ "version": "3.1.28-beta.254",
4
4
  "description": "Node-only runtime for the TradeJS TypeScript framework: strategies, backtests, Pine strategy loading, and plugin registries.",
5
5
  "keywords": [
6
6
  "tradejs",
@@ -89,9 +89,9 @@
89
89
  "dependencies": {
90
90
  "@langchain/core": "^1.2.3",
91
91
  "@langchain/openai": "^1.5.5",
92
- "@tradejs/core": "^3.1.28-beta.252",
93
- "@tradejs/infra": "^3.1.28-beta.252",
94
- "@tradejs/types": "^3.1.28-beta.252",
92
+ "@tradejs/core": "^3.1.28-beta.254",
93
+ "@tradejs/infra": "^3.1.28-beta.254",
94
+ "@tradejs/types": "^3.1.28-beta.254",
95
95
  "@types/node": "^24",
96
96
  "chalk": "4.1.2",
97
97
  "ioredis": "5.11.1",
@@ -104,10 +104,10 @@
104
104
  "typescript": "^5.9"
105
105
  },
106
106
  "devDependencies": {
107
- "@tradejs/indicators": "^3.1.28-beta.252",
107
+ "@tradejs/indicators": "^3.1.28-beta.254",
108
108
  "@tradejs/strategy-adaptive-momentum-ribbon": "3.0.2",
109
109
  "@tradejs/strategy-hyperliquid-consensus": "3.0.2",
110
- "@tradejs/strategy-kit": "3.0.4",
110
+ "@tradejs/strategy-kit": "3.0.5",
111
111
  "@tradejs/strategy-trend-line": "3.0.2",
112
112
  "@tradejs/strategy-volume-divergence": "3.0.2",
113
113
  "tsup": "^8.5.1"