@vtxmacro/cli 2026.9.63 → 2026.9.64

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.
@@ -16,7 +16,7 @@ import { fileURLToPath } from "node:url";
16
16
  // agent-cli-release.json
17
17
  var agent_cli_release_default = {
18
18
  package_name: "@vtxmacro/cli",
19
- package_version: "2026.9.63",
19
+ package_version: "2026.9.64",
20
20
  codex_package_name: "@openai/codex",
21
21
  codex_version: "0.155.0",
22
22
  copilot_sdk_package_name: "@github/copilot-sdk",
package/bin/vtx.js CHANGED
@@ -77,7 +77,7 @@ var init_agent_cli_release = __esm({
77
77
  "agent-cli-release.json"() {
78
78
  agent_cli_release_default = {
79
79
  package_name: "@vtxmacro/cli",
80
- package_version: "2026.9.63",
80
+ package_version: "2026.9.64",
81
81
  codex_package_name: "@openai/codex",
82
82
  codex_version: "0.155.0",
83
83
  copilot_sdk_package_name: "@github/copilot-sdk",
@@ -51115,10 +51115,11 @@ var init_hyperliquid_account_state_adapter = __esm({
51115
51115
  const markPrice = Number.isFinite(size) && Math.abs(size) > 0 && Number.isFinite(positionValue) && positionValue > 0 ? positionValue / Math.abs(size) : null;
51116
51116
  return {
51117
51117
  size: Number.isFinite(size) ? size : 0,
51118
+ entryPrice: Number.isFinite(Number(position?.entryPx)) && Number(position?.entryPx) > 0 ? Number(position.entryPx) : null,
51118
51119
  markPrice: markPrice != null && Number.isFinite(markPrice) && markPrice > 0 ? markPrice : null
51119
51120
  };
51120
51121
  }
51121
- return { size: 0, markPrice: null };
51122
+ return { size: 0, markPrice: null, entryPrice: null };
51122
51123
  };
51123
51124
  fetchBrowserAccountState = async (input) => {
51124
51125
  configureHyperliquidMarketSymbolCasing(input.config.client_runtime_hyperliquid_case_sensitive_symbols);
@@ -87602,7 +87603,7 @@ var init_browser_trading = __esm({
87602
87603
  });
87603
87604
 
87604
87605
  // lib/runtime/execution-guard-contract.ts
87605
- var unitsFromPosition, signedUnitsFromPosition, classifyExecutionIntent, resolveExecutionTarget;
87606
+ var unitsFromPosition, signedUnitsFromPosition, signedUnitsFromEntryPosition, classifyExecutionIntent, resolveExecutionTarget;
87606
87607
  var init_execution_guard_contract = __esm({
87607
87608
  "lib/runtime/execution-guard-contract.ts"() {
87608
87609
  "use strict";
@@ -87629,6 +87630,17 @@ var init_execution_guard_contract = __esm({
87629
87630
  }
87630
87631
  return sizeValue < 0 ? -units : units;
87631
87632
  };
87633
+ signedUnitsFromEntryPosition = (size, entryPrice, unitSizeUsdc) => {
87634
+ const sizeValue = Number(size);
87635
+ if (!Number.isFinite(sizeValue)) throw new Error("Position size is invalid for execution unit classification.");
87636
+ if (sizeValue === 0) return 0;
87637
+ const entry = Number(entryPrice);
87638
+ const unit = Number(unitSizeUsdc);
87639
+ if (!Number.isFinite(entry) || entry <= 0 || !Number.isFinite(unit) || unit <= 0) {
87640
+ throw new Error("Position entry price and unit size must be positive for execution unit classification.");
87641
+ }
87642
+ return signedUnitsFromPosition(sizeValue, entry, unit);
87643
+ };
87632
87644
  classifyExecutionIntent = (action, requestedUnits, snapshotSignedUnits) => {
87633
87645
  const actionNormalized = String(action ?? "HOLD").trim().toUpperCase();
87634
87646
  const parsedUnits = Number.parseInt(String(Number(requestedUnits ?? 0)), 10);
@@ -87853,7 +87865,7 @@ var init_runtime_execution = __esm({
87853
87865
  const classified = classifyExecutionIntent(
87854
87866
  input.decision,
87855
87867
  input.units,
87856
- signedUnitsFromPosition(context.currentPositionSize, context.lastPrice, context.unitSizeUsdc)
87868
+ signedUnitsFromEntryPosition(context.currentPositionSize, context.currentPositionEntryPrice, context.unitSizeUsdc)
87857
87869
  );
87858
87870
  return classified.reduceOnly ? "trading_reduce" : "trading_execute";
87859
87871
  };
@@ -91659,9 +91671,8 @@ var init_runtime_execution = __esm({
91659
91671
  sessionId: input.sessionId,
91660
91672
  signal: input.signal
91661
91673
  });
91662
- const refreshedPosition = resolvePositionSize(
91663
- refreshed.positions.find((position) => position.symbol === input.executionContext.symbol)
91664
- );
91674
+ const refreshedPositionSnapshot = refreshed.positions.find((position) => position.symbol === input.executionContext.symbol);
91675
+ const refreshedPosition = resolvePositionSize(refreshedPositionSnapshot);
91665
91676
  const refreshedPrice = Number(refreshed.availableToTrade.mark_price);
91666
91677
  appendRuntimeDebugEvent({
91667
91678
  label: "execution_snapshot_refreshed",
@@ -91669,6 +91680,7 @@ var init_runtime_execution = __esm({
91669
91680
  });
91670
91681
  return {
91671
91682
  currentPositionSize: Number.isFinite(refreshedPosition) ? refreshedPosition : snapshotPositionSize,
91683
+ currentPositionEntryPrice: refreshedPositionSnapshot?.entry_price ?? null,
91672
91684
  executionPrice: Number.isFinite(refreshedPrice) && refreshedPrice > 0 ? refreshedPrice : decisionPrice,
91673
91685
  executionSnapshotId: createRuntimeId(),
91674
91686
  executionSnapshotCapturedAt: (/* @__PURE__ */ new Date()).toISOString()
@@ -91691,6 +91703,7 @@ var init_runtime_execution = __esm({
91691
91703
  });
91692
91704
  return {
91693
91705
  currentPositionSize: Number.isFinite(parsedLiveSize) ? parsedLiveSize : snapshotPositionSize,
91706
+ currentPositionEntryPrice: liveBrowserSnapshot.entryPrice,
91694
91707
  executionPrice: decisionPrice,
91695
91708
  executionSnapshotId: createRuntimeId(),
91696
91709
  executionSnapshotCapturedAt: (/* @__PURE__ */ new Date()).toISOString()
@@ -91765,6 +91778,11 @@ var init_runtime_execution = __esm({
91765
91778
  note: `decision=${input.decision} units=${requestedUnits} symbol=${input.executionContext.symbol}`
91766
91779
  });
91767
91780
  const decisionSnapshotPositionSize = Number.isFinite(input.executionContext.currentPositionSize) ? Number(input.executionContext.currentPositionSize) : 0;
91781
+ const decisionSnapshotSignedUnits = signedUnitsFromEntryPosition(
91782
+ decisionSnapshotPositionSize,
91783
+ input.executionContext.currentPositionEntryPrice,
91784
+ input.executionContext.unitSizeUsdc
91785
+ );
91768
91786
  const profileId = String(input.profileId).trim();
91769
91787
  const hasTrackedProtection = readClientProtectiveGroups(
91770
91788
  profileId,
@@ -91786,6 +91804,7 @@ var init_runtime_execution = __esm({
91786
91804
  if (shouldTrail && !reconciliationReports.some((report) => report.status === "failed")) {
91787
91805
  const {
91788
91806
  currentPositionSize: currentPositionSize2,
91807
+ currentPositionEntryPrice: currentPositionEntryPrice2,
91789
91808
  executionPrice: executionPrice2,
91790
91809
  executionSnapshotId: executionSnapshotId2,
91791
91810
  executionSnapshotCapturedAt: executionSnapshotCapturedAt2
@@ -91810,9 +91829,9 @@ var init_runtime_execution = __esm({
91810
91829
  side: null,
91811
91830
  reduceOnly: false,
91812
91831
  requestedUnits,
91813
- targetSignedUnits: signedUnitsFromPosition(
91832
+ targetSignedUnits: signedUnitsFromEntryPosition(
91814
91833
  currentPositionSize2,
91815
- executionPrice2,
91834
+ currentPositionEntryPrice2,
91816
91835
  input.executionContext.unitSizeUsdc
91817
91836
  ),
91818
91837
  executedSizeAsset: 0,
@@ -91828,11 +91847,7 @@ var init_runtime_execution = __esm({
91828
91847
  side: null,
91829
91848
  reduceOnly: false,
91830
91849
  requestedUnits,
91831
- targetSignedUnits: signedUnitsFromPosition(
91832
- decisionSnapshotPositionSize,
91833
- input.executionContext.lastPrice,
91834
- input.executionContext.unitSizeUsdc
91835
- ),
91850
+ targetSignedUnits: decisionSnapshotSignedUnits,
91836
91851
  executedSizeAsset: 0,
91837
91852
  executionReports: reconciliationReports,
91838
91853
  message: reconciliationReports.some((report) => report.status === "executed") ? "Reconciled protective orders" : input.decision === "HOLD" ? "Hold (No Action)" : "Unsupported decision",
@@ -91842,20 +91857,16 @@ var init_runtime_execution = __esm({
91842
91857
  }
91843
91858
  const {
91844
91859
  currentPositionSize,
91860
+ currentPositionEntryPrice,
91845
91861
  executionPrice,
91846
91862
  executionSnapshotId,
91847
91863
  executionSnapshotCapturedAt
91848
91864
  } = await resolveCurrentPositionSize(input);
91849
91865
  throwIfAborted2(input.signal);
91850
91866
  const currentPosition = buildPositionSnapshot(input.executionContext.symbol, currentPositionSize);
91851
- const decisionSnapshotSignedUnits = signedUnitsFromPosition(
91852
- decisionSnapshotPositionSize,
91853
- input.executionContext.lastPrice,
91854
- input.executionContext.unitSizeUsdc
91855
- );
91856
- const liveSignedUnits = signedUnitsFromPosition(
91867
+ const liveSignedUnits = signedUnitsFromEntryPosition(
91857
91868
  currentPositionSize,
91858
- executionPrice,
91869
+ currentPositionEntryPrice,
91859
91870
  input.executionContext.unitSizeUsdc
91860
91871
  );
91861
91872
  const classified = classifyExecutionIntent(
@@ -93989,6 +94000,7 @@ async function fetchLocalHyperliquidSnapshot(input) {
93989
94000
  decisionSnapshotId: input.decisionSnapshotId,
93990
94001
  decisionSnapshotCapturedAt: input.decisionSnapshotCapturedAt,
93991
94002
  currentPositionSize: Number.isFinite(currentPositionSize) ? currentPositionSize : 0,
94003
+ currentPositionEntryPrice: accountState.positions.find((position) => normalizeRuntimeSymbol(position.symbol) === normalizeRuntimeSymbol(input.symbol))?.entry_price ?? null,
93992
94004
  walletAddress,
93993
94005
  lastPrice,
93994
94006
  unitSizeUsdc: requirePositiveNumber2(promptKnobs.trade_size ?? input.llmConfig.default_ai_trade_amount, "trade size"),
@@ -94308,9 +94320,9 @@ function createHeadlessLocalWorker(options) {
94308
94320
  const classifiedIntent = candidateHyperliquidContext ? classifyExecutionIntent(
94309
94321
  providerDecision.decision,
94310
94322
  providerDecision.units,
94311
- signedUnitsFromPosition(
94323
+ signedUnitsFromEntryPosition(
94312
94324
  candidateHyperliquidContext.executionContext.currentPositionSize,
94313
- candidateHyperliquidContext.executionContext.lastPrice,
94325
+ candidateHyperliquidContext.executionContext.currentPositionEntryPrice,
94314
94326
  candidateHyperliquidContext.executionContext.unitSizeUsdc
94315
94327
  )
94316
94328
  ).intent : "hold";
@@ -94350,7 +94362,7 @@ function createHeadlessLocalWorker(options) {
94350
94362
  for (const position of localHyperliquidContext.accountState.positions) {
94351
94363
  if (Number(position.size) === 0) continue;
94352
94364
  const entryPrice = requirePositiveNumber2(position.entry_price, "position entry price");
94353
- const signedUnits = signedUnitsFromPosition(Number(position.size), entryPrice, unitSize);
94365
+ const signedUnits = signedUnitsFromEntryPosition(Number(position.size), entryPrice, unitSize);
94354
94366
  globalUsage += Math.abs(signedUnits);
94355
94367
  if (getHyperliquidMarketDex(position.symbol) === venue) exchangeUsage += Math.abs(signedUnits);
94356
94368
  if (normalizeRuntimeSymbol(position.symbol) === normalizeRuntimeSymbol(symbol2)) currentSignedUnits = signedUnits;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vtxmacro/cli",
3
- "version": "2026.9.63",
3
+ "version": "2026.9.64",
4
4
  "description": "VTX Macro CLI, MCP server, and durable external inference host.",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",