@vtxmacro/cli 2026.10.1 → 2026.10.2

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.10.1",
19
+ package_version: "2026.10.2",
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.10.1",
80
+ package_version: "2026.10.2",
81
81
  codex_package_name: "@openai/codex",
82
82
  codex_version: "0.155.0",
83
83
  copilot_sdk_package_name: "@github/copilot-sdk",
@@ -50321,7 +50321,7 @@ var init_hyperliquid_account_mode_contract = __esm({
50321
50321
  });
50322
50322
 
50323
50323
  // lib/runtime/hyperliquid-account-contract.ts
50324
- var toNumber, firstNumber, roundTo, normalizeSpotBalancesFromInfoResponse, sumBalanceHoldUsd, sumPositionUnrealizedPnl, resolveTotalUnrealizedPnl, approximatelyEqualAccountValues, buildAccountSummaryFromInfoResponses;
50324
+ var toNumber, firstNumber, roundTo, STABLE_SPOT_SYMBOLS, spotBalanceValueUsd, normalizeSpotBalancesFromInfoResponse, sumBalanceHoldUsd, sumPositionUnrealizedPnl, resolveTotalUnrealizedPnl, approximatelyEqualAccountValues, buildAccountSummaryFromInfoResponses;
50325
50325
  var init_hyperliquid_account_contract = __esm({
50326
50326
  "lib/runtime/hyperliquid-account-contract.ts"() {
50327
50327
  "use strict";
@@ -50346,6 +50346,14 @@ var init_hyperliquid_account_contract = __esm({
50346
50346
  return fallback;
50347
50347
  };
50348
50348
  roundTo = (value, digits = 12) => Number(value.toFixed(digits));
50349
+ STABLE_SPOT_SYMBOLS = /* @__PURE__ */ new Set(["USDC", "USD", "USDT"]);
50350
+ spotBalanceValueUsd = (balance, coin, total) => {
50351
+ const explicit = firstNumber([balance?.value_usd, balance?.usdValue, balance?.usdcValue], Number.NaN);
50352
+ if (Number.isFinite(explicit)) {
50353
+ return explicit;
50354
+ }
50355
+ return STABLE_SPOT_SYMBOLS.has(coin) ? total : 0;
50356
+ };
50349
50357
  normalizeSpotBalancesFromInfoResponse = (spotResponse) => {
50350
50358
  const containers = [];
50351
50359
  if (spotResponse && typeof spotResponse === "object") {
@@ -50364,7 +50372,7 @@ var init_hyperliquid_account_contract = __esm({
50364
50372
  const total = toNumber(balance?.total, 0);
50365
50373
  const hold = toNumber(balance?.hold, 0);
50366
50374
  const available = roundTo(Math.max(0, total - hold));
50367
- const value_usd = toNumber(balance?.value_usd, total);
50375
+ const value_usd = spotBalanceValueUsd(balance, coin, total);
50368
50376
  return {
50369
50377
  coin,
50370
50378
  total,
@@ -50526,7 +50534,7 @@ var init_hyperliquid_active_asset_contract = __esm({
50526
50534
  });
50527
50535
 
50528
50536
  // lib/runtime/server-prompt-rescue-account-contract.ts
50529
- var STABLE_SYMBOLS, toNumber2, firstNumber2, firstTruthy, spotContainers, extractCanonicalSpotMetrics, sumBalanceValueUsd, approximatelyEqual, balancesMirrorUnifiedAccountValue, computeEffectiveAccountValue, equityFormula, buildServerPromptRescueAccountSummary;
50537
+ var toNumber2, firstNumber2, firstTruthy, spotContainers, extractCanonicalSpotMetrics, sumBalanceValueUsd, approximatelyEqual, balancesMirrorUnifiedAccountValue, computeEffectiveAccountValue, equityFormula, buildServerPromptRescueAccountSummary;
50530
50538
  var init_server_prompt_rescue_account_contract = __esm({
50531
50539
  "lib/runtime/server-prompt-rescue-account-contract.ts"() {
50532
50540
  "use strict";
@@ -50534,7 +50542,7 @@ var init_server_prompt_rescue_account_contract = __esm({
50534
50542
  init_define_VTX_GROK_POLICY();
50535
50543
  init_define_VTX_PI_MODEL_POLICY();
50536
50544
  init_hyperliquid_account_mode_contract();
50537
- STABLE_SYMBOLS = /* @__PURE__ */ new Set(["USDC", "USD", "USDT"]);
50545
+ init_hyperliquid_account_contract();
50538
50546
  toNumber2 = (value, fallback = 0) => {
50539
50547
  const numeric2 = Number(value);
50540
50548
  return Number.isFinite(numeric2) ? numeric2 : fallback;
@@ -50605,14 +50613,14 @@ var init_server_prompt_rescue_account_contract = __esm({
50605
50613
  toNumber2(firstTruthy([entry.available, entry.free, total - hold], "0"))
50606
50614
  );
50607
50615
  let valueUsd = toNumber2(firstTruthy([entry.usdValue, entry.usdcValue], "0"));
50608
- if (valueUsd <= 0 && STABLE_SYMBOLS.has(coin)) {
50616
+ if (valueUsd <= 0 && STABLE_SPOT_SYMBOLS.has(coin)) {
50609
50617
  valueUsd = available > 0 ? available : total;
50610
50618
  }
50611
50619
  balances.push({ coin, total, hold, available, value_usd: valueUsd });
50612
50620
  const entryValue = valueUsd > 0 ? valueUsd : total;
50613
50621
  if (entryValue > 0) {
50614
50622
  anyTotal += entryValue;
50615
- if (STABLE_SYMBOLS.has(coin)) stableTotal += entryValue;
50623
+ if (STABLE_SPOT_SYMBOLS.has(coin)) stableTotal += entryValue;
50616
50624
  }
50617
50625
  }
50618
50626
  if (accountValue <= 0) {
@@ -50626,7 +50634,7 @@ var init_server_prompt_rescue_account_contract = __esm({
50626
50634
  };
50627
50635
  sumBalanceValueUsd = (balances) => balances.reduce((total, balance) => {
50628
50636
  let valueUsd = toNumber2(balance.value_usd);
50629
- if (valueUsd <= 0 && STABLE_SYMBOLS.has(String(balance.coin || "").trim().toUpperCase())) {
50637
+ if (valueUsd <= 0 && STABLE_SPOT_SYMBOLS.has(String(balance.coin || "").trim().toUpperCase())) {
50630
50638
  valueUsd = toNumber2(balance.total);
50631
50639
  }
50632
50640
  return total + Math.max(valueUsd, 0);
@@ -51038,7 +51046,13 @@ var init_hyperliquid_account_state_adapter = __esm({
51038
51046
  }
51039
51047
  const parsedProviderRowCount = Number(parsed?.providerRowCount);
51040
51048
  const providerRowCount = Number.isInteger(parsedProviderRowCount) && parsedProviderRowCount >= rawFills.length ? parsedProviderRowCount : rawFills.length;
51041
- const entry = { fetchedAtMs, rawFills, providerRowCount };
51049
+ const parsedOldestFillTimeMs = Number(parsed?.oldestFillTimeMs);
51050
+ const entry = {
51051
+ fetchedAtMs,
51052
+ rawFills,
51053
+ providerRowCount,
51054
+ oldestFillTimeMs: Number.isSafeInteger(parsedOldestFillTimeMs) && parsedOldestFillTimeMs > 0 ? parsedOldestFillTimeMs : null
51055
+ };
51042
51056
  browserUserFillsCache.set(cacheKey, entry);
51043
51057
  return entry;
51044
51058
  } catch {
@@ -51931,6 +51945,7 @@ var init_hyperliquid_account_state_adapter = __esm({
51931
51945
  fetchedAtMs: cached2.fetchedAtMs,
51932
51946
  providerRowCount: cached2.providerRowCount,
51933
51947
  providerPageCap: HYPERLIQUID_USER_FILLS_PROVIDER_PAGE_CAP,
51948
+ oldestFillTimeMs: cached2.oldestFillTimeMs ?? null,
51934
51949
  exactTerminalFillEvidenceComplete: false
51935
51950
  }
51936
51951
  };
@@ -51946,12 +51961,14 @@ var init_hyperliquid_account_state_adapter = __esm({
51946
51961
  fetchedAtMs: cached2.fetchedAtMs,
51947
51962
  providerRowCount: cached2.providerRowCount,
51948
51963
  providerPageCap: HYPERLIQUID_USER_FILLS_PROVIDER_PAGE_CAP,
51964
+ oldestFillTimeMs: cached2.oldestFillTimeMs ?? null,
51949
51965
  exactTerminalFillEvidenceComplete: false
51950
51966
  }
51951
51967
  };
51952
51968
  }
51953
51969
  let rawWalletFills;
51954
51970
  let providerRowCount = 0;
51971
+ let oldestFillTimeMs = null;
51955
51972
  let evidenceSource = "live";
51956
51973
  let fetchedAtMs = now;
51957
51974
  const olderInFlight = browserUserFillsInFlight.get(cacheKey);
@@ -51980,12 +51997,15 @@ var init_hyperliquid_account_state_adapter = __esm({
51980
51997
  ).then((payload) => {
51981
51998
  const providerRowCount2 = Array.isArray(payload) ? payload.length : 0;
51982
51999
  const rawFills2 = Array.isArray(payload) ? payload.filter(isPerpFill).map((fill) => ({ ...fill })) : [];
51983
- writeBrowserUserFillsCache(cacheKey, {
52000
+ const fillTimes = Array.isArray(payload) ? payload.map((fill) => Number(fill?.time)).filter((time3) => Number.isSafeInteger(time3) && time3 > 0) : [];
52001
+ const entry = {
51984
52002
  fetchedAtMs: Date.now(),
51985
52003
  rawFills: rawFills2,
51986
- providerRowCount: providerRowCount2
51987
- });
51988
- return { fetchedAtMs: Date.now(), rawFills: rawFills2, providerRowCount: providerRowCount2 };
52004
+ providerRowCount: providerRowCount2,
52005
+ oldestFillTimeMs: fillTimes.length > 0 ? Math.min(...fillTimes) : null
52006
+ };
52007
+ writeBrowserUserFillsCache(cacheKey, entry);
52008
+ return entry;
51989
52009
  }).finally(() => {
51990
52010
  if (browserUserFillsInFlight.get(cacheKey)?.promise === freshRequest) {
51991
52011
  browserUserFillsInFlight.delete(cacheKey);
@@ -51999,6 +52019,7 @@ var init_hyperliquid_account_state_adapter = __esm({
51999
52019
  rawWalletFills = liveResult.rawFills;
52000
52020
  providerRowCount = liveResult.providerRowCount;
52001
52021
  fetchedAtMs = liveResult.fetchedAtMs;
52022
+ oldestFillTimeMs = liveResult.oldestFillTimeMs ?? null;
52002
52023
  } catch (error48) {
52003
52024
  const staleCache = readBrowserUserFillsCache(cacheKey);
52004
52025
  if (isRateLimitError(error48) && !input.forceRefresh) {
@@ -52006,6 +52027,7 @@ var init_hyperliquid_account_state_adapter = __esm({
52006
52027
  rawWalletFills = staleCache && Date.now() - staleCache.fetchedAtMs <= staleIf429MaxAgeMs ? staleCache.rawFills : [];
52007
52028
  providerRowCount = staleCache?.providerRowCount ?? 0;
52008
52029
  fetchedAtMs = staleCache?.fetchedAtMs ?? Date.now();
52030
+ oldestFillTimeMs = staleCache?.oldestFillTimeMs ?? null;
52009
52031
  } else {
52010
52032
  throw error48;
52011
52033
  }
@@ -52020,6 +52042,7 @@ var init_hyperliquid_account_state_adapter = __esm({
52020
52042
  fetchedAtMs,
52021
52043
  providerRowCount,
52022
52044
  providerPageCap: HYPERLIQUID_USER_FILLS_PROVIDER_PAGE_CAP,
52045
+ oldestFillTimeMs,
52023
52046
  exactTerminalFillEvidenceComplete: evidenceSource === "live" && providerRowCount < HYPERLIQUID_USER_FILLS_PROVIDER_PAGE_CAP
52024
52047
  }
52025
52048
  };
@@ -84669,7 +84692,7 @@ var init_hyperliquid_signer = __esm({
84669
84692
  });
84670
84693
 
84671
84694
  // lib/runtime/hyperliquid-client.ts
84672
- var HyperliquidExchangeRejectionError, durableMutationAuthorityArgs, assertFreshPreparedExecutionContext, HYPERLIQUID_TERMINAL_ORDER_STATUSES, normalizeSymbol, HYPERLIQUID_NONCE_STORAGE_KEY, HYPERLIQUID_NONCE_LOCK_NAME, lastGeneratedNonce, readBrowserStoredHyperliquidNonce, writeBrowserStoredHyperliquidNonce, browserNonceCoordinator, allocateHyperliquidNonce, generateHyperliquidNonce, roundToSigFigs, normalizeDecimalString, toPlainDecimalString, roundDirectionalDecimalString, formatHyperliquidPerpPriceWire, formatHyperliquidTriggerPriceWire, countSignificantDigits, countDecimalPlaces, validateHyperliquidPerpPriceWire, validateHyperliquidSizeWire, formatSizeWire, inferApiUrl, inferIsTestnet, postHyperliquidInfo, toFiniteNumber, OPEN_ORDER_NUMERIC_STRING, OPEN_ORDER_ID_STRING, parseCanonicalOpenOrderId, parseOpenOrderFiniteNumber, parseOpenOrderPositiveNumber, parseOpenOrderPresentationNumber, readOpenOrderField, firstFiniteNumber2, parseFundingUsdcFromInfoPosition2, isExchangeIsolatedOnly, computeHip3AssetId, getPerpDexIndexMap, buildAssetInfosFromMetaResponse, requireWalletAddress2, assertPositiveInteger, assertPositiveNumber, normalizeOrderSide, normalizeHyperliquidClientOrderId, resolveAssets, findResolvedAsset, normalizeExecutionAssetMetadata, resolveHyperliquidAsset, resolveHyperliquidAssetIndex, fetchBrowserAvailableAssets, fetchBrowserAllMids, fetchBrowserSymbolMidPrice, fetchBrowserOpenOrders, parseCanonicalHyperliquidOrderStatusEvidence, fetchBrowserOrderStatusEvidence, fetchBrowserUserRole, fetchBrowserAccountState2, fetchBrowserPosition, buildHyperliquidOrderWire, buildHyperliquidTriggerOrderWire, signHyperliquidPayload, buildHyperliquidCancelPayload, buildHyperliquidUpdateLeveragePayload, buildHyperliquidMarketOrderPayload, buildHyperliquidTriggerOrderPayload, buildHyperliquidOrderBatchPayload, buildHyperliquidModifyOrderPayload, extractHyperliquidExchangeError, isDefinitiveHyperliquidExchangeResponse, extractDefinitiveHyperliquidOrderId, CANONICAL_POSITIVE_DECIMAL_PATTERN, extractCanonicalHyperliquidOrderStateAcknowledgement, extractCanonicalHyperliquidOrderStateAcknowledgements, extractCanonicalHyperliquidFilledOrderAcknowledgement, extractDefinitiveHyperliquidOrderMemberResults, buildHyperliquidOrderDiagnostics, loadClientExecutionReferenceEvidence, sha256Hex, extractSignedPayloadClientOrderId, extractSignedPayloadMutationCorrelation, assertDurableMutationMatchesSignedAction, exchangeRejectionReason, exchangeActionPriority, submitHyperliquidExchangePayload;
84695
+ var HyperliquidExchangeRejectionError, durableMutationAuthorityArgs, assertFreshPreparedExecutionContext, HYPERLIQUID_TERMINAL_ORDER_STATUSES, normalizeSymbol, HYPERLIQUID_NONCE_STORAGE_KEY, HYPERLIQUID_NONCE_LOCK_NAME, lastGeneratedNonce, readBrowserStoredHyperliquidNonce, writeBrowserStoredHyperliquidNonce, browserNonceCoordinator, allocateHyperliquidNonce, generateHyperliquidNonce, roundToSigFigs, normalizeDecimalString, toPlainDecimalString, roundDirectionalDecimalString, formatHyperliquidPerpPriceWire, formatHyperliquidTriggerPriceWire, countSignificantDigits, countDecimalPlaces, validateHyperliquidPerpPriceWire, validateHyperliquidSizeWire, formatSizeWire, inferApiUrl, inferIsTestnet, postHyperliquidInfo, toFiniteNumber, OPEN_ORDER_NUMERIC_STRING, OPEN_ORDER_ID_STRING, parseCanonicalOpenOrderId, parseOpenOrderFiniteNumber, parseOpenOrderPositiveNumber, parseOpenOrderPresentationNumber, readOpenOrderField, firstFiniteNumber2, parseFundingUsdcFromInfoPosition2, isExchangeIsolatedOnly, computeHip3AssetId, getPerpDexIndexMap, buildAssetInfosFromMetaResponse, requireWalletAddress2, assertPositiveInteger, assertPositiveNumber, normalizeOrderSide, normalizeHyperliquidClientOrderId, resolveAssets, findResolvedAsset, normalizeExecutionAssetMetadata, resolveHyperliquidAsset, resolveHyperliquidAssetIndex, fetchBrowserAvailableAssets, fetchBrowserAllMids, fetchBrowserSymbolMidPrice, fetchBrowserOpenOrders, parseCanonicalHyperliquidOrderStatusEvidence, fetchBrowserOrderStatusEvidence, fetchBrowserUserRole, fetchBrowserAccountState2, fetchBrowserPosition, buildHyperliquidOrderWire, buildHyperliquidTriggerOrderWire, signHyperliquidPayload, buildHyperliquidCancelPayload, buildHyperliquidUpdateLeveragePayload, buildHyperliquidMarketOrderPayload, buildHyperliquidTriggerOrderPayload, buildHyperliquidOrderBatchPayload, buildHyperliquidModifyOrderPayload, extractHyperliquidExchangeError, resolveHyperliquidTriggerAcknowledgements, isDefinitiveHyperliquidExchangeResponse, extractDefinitiveHyperliquidOrderId, CANONICAL_POSITIVE_DECIMAL_PATTERN, extractCanonicalHyperliquidOrderStateAcknowledgement, extractCanonicalHyperliquidOrderStateAcknowledgements, extractCanonicalHyperliquidFilledOrderAcknowledgement, extractDefinitiveHyperliquidOrderMemberResults, buildHyperliquidOrderDiagnostics, loadClientExecutionReferenceEvidence, sha256Hex, extractSignedPayloadClientOrderId, extractSignedPayloadMutationCorrelation, assertDurableMutationMatchesSignedAction, exchangeRejectionReason, exchangeActionPriority, submitHyperliquidExchangePayload;
84673
84696
  var init_hyperliquid_client = __esm({
84674
84697
  "lib/runtime/hyperliquid-client.ts"() {
84675
84698
  "use strict";
@@ -85905,6 +85928,40 @@ var init_hyperliquid_client = __esm({
85905
85928
  }
85906
85929
  return null;
85907
85930
  };
85931
+ resolveHyperliquidTriggerAcknowledgements = async (payload, action, lookup) => {
85932
+ if (action.type !== "order" || action.grouping !== "normalTpsl" && action.grouping !== "positionTpsl" || !Array.isArray(action.orders) || payload == null || typeof payload !== "object" || Array.isArray(payload)) {
85933
+ return payload;
85934
+ }
85935
+ const root = payload;
85936
+ const response = root.response;
85937
+ const data4 = response && typeof response === "object" ? response.data : void 0;
85938
+ const statuses = data4 && typeof data4 === "object" && Array.isArray(data4.statuses) ? data4.statuses : null;
85939
+ if (root.status !== "ok" || response?.type !== "order" || statuses == null || statuses.length !== action.orders.length || !statuses.includes("waitingForTrigger")) {
85940
+ return payload;
85941
+ }
85942
+ const resolved = [...statuses];
85943
+ for (let index = 0; index < statuses.length; index += 1) {
85944
+ if (statuses[index] !== "waitingForTrigger") continue;
85945
+ const order = action.orders[index];
85946
+ const trigger = order && typeof order === "object" ? order.t : void 0;
85947
+ const clientOrderId = String(order?.c ?? "").trim().toLowerCase();
85948
+ if (!trigger || typeof trigger !== "object" || !("trigger" in trigger) || !/^0x[0-9a-f]{32}$/.test(clientOrderId)) {
85949
+ return payload;
85950
+ }
85951
+ let evidence;
85952
+ try {
85953
+ evidence = await lookup(clientOrderId);
85954
+ } catch {
85955
+ return payload;
85956
+ }
85957
+ const orderId = Number(evidence.orderId);
85958
+ if (!evidence.responseValid || !evidence.orderMatches || evidence.orderStatus !== "open" || evidence.isTrigger !== true || !Number.isSafeInteger(orderId) || orderId <= 0) {
85959
+ return payload;
85960
+ }
85961
+ resolved[index] = { resting: { oid: orderId, cloid: clientOrderId } };
85962
+ }
85963
+ return { ...root, response: { ...response, data: { ...data4, statuses: resolved } } };
85964
+ };
85908
85965
  isDefinitiveHyperliquidExchangeResponse = (payload, action) => {
85909
85966
  if (!payload || typeof payload !== "object" || Array.isArray(payload)) {
85910
85967
  return false;
@@ -86611,6 +86668,18 @@ var init_hyperliquid_client = __esm({
86611
86668
  "outcome_unknown"
86612
86669
  );
86613
86670
  }
86671
+ const triggerWallet = String(input.triggerAcknowledgementWalletAddress ?? "").trim();
86672
+ if (triggerWallet) {
86673
+ payload = await resolveHyperliquidTriggerAcknowledgements(
86674
+ payload,
86675
+ input.payload.action,
86676
+ (clientOrderId) => fetchBrowserOrderStatusEvidence({
86677
+ ...input,
86678
+ walletAddress: triggerWallet,
86679
+ orderId: clientOrderId
86680
+ })
86681
+ );
86682
+ }
86614
86683
  const exchangeError = extractHyperliquidExchangeError(payload);
86615
86684
  if (exchangeError) {
86616
86685
  await settleDurableMutation(
@@ -87960,7 +88029,8 @@ var init_browser_trading = __esm({
87960
88029
  symbol: input.symbol,
87961
88030
  clientOrderIds: input.members.map((member) => member.clientOrderId),
87962
88031
  onExchangeOrderDispatched: input.onExchangeOrderDispatched
87963
- }
88032
+ },
88033
+ triggerAcknowledgementWalletAddress: input.walletAddress ?? null
87964
88034
  });
87965
88035
  };
87966
88036
  executeClientModifyOrder = async (input) => {
@@ -90735,7 +90805,9 @@ var init_runtime_execution = __esm({
90735
90805
  execution_metadata: {
90736
90806
  reason_code: "protective_replacement_terminal_reconciled",
90737
90807
  previous_order_id: replacement.previousOrderId,
90738
- order_status: evidence.orderStatus
90808
+ order_status: evidence.orderStatus,
90809
+ protected_size: replacementLeg.size,
90810
+ position_tpsl: replacementLeg.positionTpsl === true
90739
90811
  }
90740
90812
  });
90741
90813
  continue;
@@ -90791,7 +90863,8 @@ var init_runtime_execution = __esm({
90791
90863
  reason_code: exactLivePositionTpsl ? "protective_replacement_reconciled_for_cleanup" : "protective_replacement_reconciled",
90792
90864
  previous_order_id: replacement.previousOrderId,
90793
90865
  trigger_price: replacement.triggerPrice,
90794
- protected_size: replacement.size
90866
+ protected_size: replacement.size,
90867
+ position_tpsl: recoveredLeg.positionTpsl === true
90795
90868
  }
90796
90869
  });
90797
90870
  continue;
@@ -90836,7 +90909,8 @@ var init_runtime_execution = __esm({
90836
90909
  reason_code: "protective_replacement_fulfilled_reconciled",
90837
90910
  previous_order_id: replacement.previousOrderId,
90838
90911
  trigger_price: replacement.triggerPrice,
90839
- protected_size: replacement.size
90912
+ protected_size: replacement.size,
90913
+ position_tpsl: leg.positionTpsl === true
90840
90914
  }
90841
90915
  });
90842
90916
  continue;
@@ -90939,7 +91013,8 @@ var init_runtime_execution = __esm({
90939
91013
  reason_code: acknowledgement.state === "fulfilled" ? "protective_replacement_fulfilled_reconciled" : "protective_replacement_reconciled",
90940
91014
  previous_order_id: replacement.previousOrderId,
90941
91015
  trigger_price: replacement.triggerPrice,
90942
- protected_size: replacement.size
91016
+ protected_size: replacement.size,
91017
+ position_tpsl: effectiveLeg.positionTpsl === true
90943
91018
  }
90944
91019
  });
90945
91020
  continue;
@@ -90977,7 +91052,8 @@ var init_runtime_execution = __esm({
90977
91052
  reason_code: "protective_replacement_reconciled",
90978
91053
  previous_order_id: replacement.previousOrderId,
90979
91054
  trigger_price: replacement.triggerPrice,
90980
- protected_size: replacement.size
91055
+ protected_size: replacement.size,
91056
+ position_tpsl: canonicalReplacementLeg.positionTpsl === true
90981
91057
  }
90982
91058
  });
90983
91059
  } catch (error48) {
@@ -91053,7 +91129,9 @@ var init_runtime_execution = __esm({
91053
91129
  status: "executed",
91054
91130
  execution_metadata: {
91055
91131
  reason_code: "protective_replacement_terminal_reconciled",
91056
- order_status: evidence.orderStatus
91132
+ order_status: evidence.orderStatus,
91133
+ protected_size: journalLeg.size,
91134
+ position_tpsl: journalLeg.positionTpsl === true || evidence.isPositionTpsl === true
91057
91135
  }
91058
91136
  });
91059
91137
  continue;
@@ -91677,7 +91755,8 @@ var init_runtime_execution = __esm({
91677
91755
  execution_metadata: {
91678
91756
  reason_code: "protective_resized_to_live_exposure",
91679
91757
  previous_order_id: leg.orderId,
91680
- protected_size: allowedSize
91758
+ protected_size: allowedSize,
91759
+ position_tpsl: replacementLeg.positionTpsl === true
91681
91760
  }
91682
91761
  });
91683
91762
  if (fulfilledDuringResize) {
@@ -92140,7 +92219,9 @@ var init_runtime_execution = __esm({
92140
92219
  execution_metadata: {
92141
92220
  trigger_price: replacementTriggerPrice,
92142
92221
  previous_trigger_price: record5.triggerPrice,
92143
- previous_order_id: record5.orderId
92222
+ previous_order_id: record5.orderId,
92223
+ protected_size: effectiveSize,
92224
+ position_tpsl: record5.positionTpsl === true
92144
92225
  }
92145
92226
  });
92146
92227
  } catch (error48) {
@@ -93350,6 +93431,7 @@ var init_runtime_execution = __esm({
93350
93431
  is_take_profit: triggerInput.isTakeProfit,
93351
93432
  entry_filled_size: protectionSize,
93352
93433
  protected_size: legSize,
93434
+ position_tpsl: leg.positionTpsl === true,
93353
93435
  entry_average_price: protectionEntryPrice,
93354
93436
  ..._toExecutionMetadata(triggerResponse)
93355
93437
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vtxmacro/cli",
3
- "version": "2026.10.1",
3
+ "version": "2026.10.2",
4
4
  "description": "VTX Macro CLI, MCP server, and durable external inference host.",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",