@vtxmacro/cli 2026.10.1 → 2026.10.3

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.
package/bin/vtx-mcp.js CHANGED
@@ -142,10 +142,10 @@ var VtxAgentClient = class _VtxAgentClient {
142
142
  body: payload
143
143
  });
144
144
  }
145
- pollBrowserLogin(loginCode) {
145
+ pollBrowserLogin(loginCode, verifier) {
146
146
  return this.request("/auth/agent-tokens/login/poll", {
147
147
  method: "POST",
148
- body: { login_code: loginCode }
148
+ body: { login_code: loginCode, verifier }
149
149
  });
150
150
  }
151
151
  revokeToken(tokenId, reason = "cli_revoked") {
@@ -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.3",
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.3",
81
81
  codex_package_name: "@openai/codex",
82
82
  codex_version: "0.155.0",
83
83
  copilot_sdk_package_name: "@github/copilot-sdk",
@@ -48455,10 +48455,10 @@ var init_client = __esm({
48455
48455
  body: payload
48456
48456
  });
48457
48457
  }
48458
- pollBrowserLogin(loginCode) {
48458
+ pollBrowserLogin(loginCode, verifier) {
48459
48459
  return this.request("/auth/agent-tokens/login/poll", {
48460
48460
  method: "POST",
48461
- body: { login_code: loginCode }
48461
+ body: { login_code: loginCode, verifier }
48462
48462
  });
48463
48463
  }
48464
48464
  revokeToken(tokenId, reason = "cli_revoked") {
@@ -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
  };
@@ -56581,8 +56604,8 @@ var init_units = __esm({
56581
56604
  });
56582
56605
 
56583
56606
  // node_modules/ethers/lib.esm/utils/uuid.js
56584
- function uuidV4(randomBytes11) {
56585
- const bytes3 = getBytes(randomBytes11, "randomBytes");
56607
+ function uuidV4(randomBytes12) {
56608
+ const bytes3 = getBytes(randomBytes12, "randomBytes");
56586
56609
  bytes3[6] = bytes3[6] & 15 | 64;
56587
56610
  bytes3[8] = bytes3[8] & 63 | 128;
56588
56611
  const value = hexlify(bytes3);
@@ -60000,7 +60023,7 @@ function weierstrass(curveDef) {
60000
60023
  function prepSig(msgHash, privateKey, opts = defaultSigOpts) {
60001
60024
  if (["recovered", "canonical"].some((k) => k in opts))
60002
60025
  throw new Error("sign() legacy options not supported");
60003
- const { hash: hash4, randomBytes: randomBytes11 } = CURVE;
60026
+ const { hash: hash4, randomBytes: randomBytes12 } = CURVE;
60004
60027
  let { lowS, prehash, extraEntropy: ent } = opts;
60005
60028
  if (lowS == null)
60006
60029
  lowS = true;
@@ -60011,7 +60034,7 @@ function weierstrass(curveDef) {
60011
60034
  const d = normPrivateKeyToScalar(privateKey);
60012
60035
  const seedArgs = [int2octets(d), int2octets(h1int)];
60013
60036
  if (ent != null) {
60014
- const e = ent === true ? randomBytes11(Fp2.BYTES) : ent;
60037
+ const e = ent === true ? randomBytes12(Fp2.BYTES) : ent;
60015
60038
  seedArgs.push(ensureBytes("extraEntropy", e));
60016
60039
  }
60017
60040
  const seed = concatBytes2(...seedArgs);
@@ -77456,7 +77479,7 @@ var require_websocket = __commonJS({
77456
77479
  var http2 = __require("http");
77457
77480
  var net = __require("net");
77458
77481
  var tls = __require("tls");
77459
- var { randomBytes: randomBytes11, createHash: createHash14 } = __require("crypto");
77482
+ var { randomBytes: randomBytes12, createHash: createHash15 } = __require("crypto");
77460
77483
  var { Duplex, Readable } = __require("stream");
77461
77484
  var { URL: URL2 } = __require("url");
77462
77485
  var PerMessageDeflate2 = require_permessage_deflate();
@@ -77994,7 +78017,7 @@ var require_websocket = __commonJS({
77994
78017
  }
77995
78018
  }
77996
78019
  const defaultPort = isSecure ? 443 : 80;
77997
- const key = randomBytes11(16).toString("base64");
78020
+ const key = randomBytes12(16).toString("base64");
77998
78021
  const request = isSecure ? https2.request : http2.request;
77999
78022
  const protocolSet = /* @__PURE__ */ new Set();
78000
78023
  let perMessageDeflate;
@@ -78124,7 +78147,7 @@ var require_websocket = __commonJS({
78124
78147
  abortHandshake(websocket, socket, "Invalid Upgrade header");
78125
78148
  return;
78126
78149
  }
78127
- const digest2 = createHash14("sha1").update(key + GUID).digest("base64");
78150
+ const digest2 = createHash15("sha1").update(key + GUID).digest("base64");
78128
78151
  if (res.headers["sec-websocket-accept"] !== digest2) {
78129
78152
  abortHandshake(websocket, socket, "Invalid Sec-WebSocket-Accept header");
78130
78153
  return;
@@ -78502,7 +78525,7 @@ var require_websocket_server = __commonJS({
78502
78525
  var EventEmitter = __require("events");
78503
78526
  var http2 = __require("http");
78504
78527
  var { Duplex } = __require("stream");
78505
- var { createHash: createHash14 } = __require("crypto");
78528
+ var { createHash: createHash15 } = __require("crypto");
78506
78529
  var extension2 = require_extension();
78507
78530
  var PerMessageDeflate2 = require_permessage_deflate();
78508
78531
  var subprotocol2 = require_subprotocol();
@@ -78809,7 +78832,7 @@ var require_websocket_server = __commonJS({
78809
78832
  );
78810
78833
  }
78811
78834
  if (this._state > RUNNING) return abortHandshake(socket, 503);
78812
- const digest2 = createHash14("sha1").update(key + GUID).digest("base64");
78835
+ const digest2 = createHash15("sha1").update(key + GUID).digest("base64");
78813
78836
  const headers = [
78814
78837
  "HTTP/1.1 101 Switching Protocols",
78815
78838
  "Upgrade: websocket",
@@ -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) => {
@@ -89336,7 +89406,9 @@ var init_runtime_execution = __esm({
89336
89406
  execution_metadata: {
89337
89407
  trigger_price: leg.triggerPrice,
89338
89408
  reason_code: reasonCode,
89339
- terminal_order_status: evidence.orderStatus
89409
+ terminal_order_status: evidence.orderStatus,
89410
+ protected_size: leg.size,
89411
+ position_tpsl: leg.positionTpsl === true || evidence.isPositionTpsl === true
89340
89412
  }
89341
89413
  };
89342
89414
  }
@@ -90735,7 +90807,9 @@ var init_runtime_execution = __esm({
90735
90807
  execution_metadata: {
90736
90808
  reason_code: "protective_replacement_terminal_reconciled",
90737
90809
  previous_order_id: replacement.previousOrderId,
90738
- order_status: evidence.orderStatus
90810
+ order_status: evidence.orderStatus,
90811
+ protected_size: replacementLeg.size,
90812
+ position_tpsl: replacementLeg.positionTpsl === true
90739
90813
  }
90740
90814
  });
90741
90815
  continue;
@@ -90791,7 +90865,8 @@ var init_runtime_execution = __esm({
90791
90865
  reason_code: exactLivePositionTpsl ? "protective_replacement_reconciled_for_cleanup" : "protective_replacement_reconciled",
90792
90866
  previous_order_id: replacement.previousOrderId,
90793
90867
  trigger_price: replacement.triggerPrice,
90794
- protected_size: replacement.size
90868
+ protected_size: replacement.size,
90869
+ position_tpsl: recoveredLeg.positionTpsl === true
90795
90870
  }
90796
90871
  });
90797
90872
  continue;
@@ -90836,7 +90911,8 @@ var init_runtime_execution = __esm({
90836
90911
  reason_code: "protective_replacement_fulfilled_reconciled",
90837
90912
  previous_order_id: replacement.previousOrderId,
90838
90913
  trigger_price: replacement.triggerPrice,
90839
- protected_size: replacement.size
90914
+ protected_size: replacement.size,
90915
+ position_tpsl: leg.positionTpsl === true
90840
90916
  }
90841
90917
  });
90842
90918
  continue;
@@ -90939,7 +91015,8 @@ var init_runtime_execution = __esm({
90939
91015
  reason_code: acknowledgement.state === "fulfilled" ? "protective_replacement_fulfilled_reconciled" : "protective_replacement_reconciled",
90940
91016
  previous_order_id: replacement.previousOrderId,
90941
91017
  trigger_price: replacement.triggerPrice,
90942
- protected_size: replacement.size
91018
+ protected_size: replacement.size,
91019
+ position_tpsl: effectiveLeg.positionTpsl === true
90943
91020
  }
90944
91021
  });
90945
91022
  continue;
@@ -90977,7 +91054,8 @@ var init_runtime_execution = __esm({
90977
91054
  reason_code: "protective_replacement_reconciled",
90978
91055
  previous_order_id: replacement.previousOrderId,
90979
91056
  trigger_price: replacement.triggerPrice,
90980
- protected_size: replacement.size
91057
+ protected_size: replacement.size,
91058
+ position_tpsl: canonicalReplacementLeg.positionTpsl === true
90981
91059
  }
90982
91060
  });
90983
91061
  } catch (error48) {
@@ -91053,7 +91131,9 @@ var init_runtime_execution = __esm({
91053
91131
  status: "executed",
91054
91132
  execution_metadata: {
91055
91133
  reason_code: "protective_replacement_terminal_reconciled",
91056
- order_status: evidence.orderStatus
91134
+ order_status: evidence.orderStatus,
91135
+ protected_size: journalLeg.size,
91136
+ position_tpsl: journalLeg.positionTpsl === true || evidence.isPositionTpsl === true
91057
91137
  }
91058
91138
  });
91059
91139
  continue;
@@ -91677,7 +91757,8 @@ var init_runtime_execution = __esm({
91677
91757
  execution_metadata: {
91678
91758
  reason_code: "protective_resized_to_live_exposure",
91679
91759
  previous_order_id: leg.orderId,
91680
- protected_size: allowedSize
91760
+ protected_size: allowedSize,
91761
+ position_tpsl: replacementLeg.positionTpsl === true
91681
91762
  }
91682
91763
  });
91683
91764
  if (fulfilledDuringResize) {
@@ -92140,7 +92221,9 @@ var init_runtime_execution = __esm({
92140
92221
  execution_metadata: {
92141
92222
  trigger_price: replacementTriggerPrice,
92142
92223
  previous_trigger_price: record5.triggerPrice,
92143
- previous_order_id: record5.orderId
92224
+ previous_order_id: record5.orderId,
92225
+ protected_size: effectiveSize,
92226
+ position_tpsl: record5.positionTpsl === true
92144
92227
  }
92145
92228
  });
92146
92229
  } catch (error48) {
@@ -93350,6 +93433,7 @@ var init_runtime_execution = __esm({
93350
93433
  is_take_profit: triggerInput.isTakeProfit,
93351
93434
  entry_filled_size: protectionSize,
93352
93435
  protected_size: legSize,
93436
+ position_tpsl: leg.positionTpsl === true,
93353
93437
  entry_average_price: protectionEntryPrice,
93354
93438
  ..._toExecutionMetadata(triggerResponse)
93355
93439
  }
@@ -95140,7 +95224,7 @@ var vtx_exports = {};
95140
95224
  __export(vtx_exports, {
95141
95225
  runVtxCli: () => runVtxCli
95142
95226
  });
95143
- import { randomUUID as randomUUID16 } from "node:crypto";
95227
+ import { createHash as createHash14, randomBytes as randomBytes11, randomUUID as randomUUID16 } from "node:crypto";
95144
95228
  import { spawn as spawn12 } from "node:child_process";
95145
95229
  function render2(value, json2) {
95146
95230
  if (json2) {
@@ -95394,21 +95478,25 @@ async function runBrowserLogin(args, config2, json2) {
95394
95478
  apiUrl: config2.apiUrl,
95395
95479
  activeProfileId: config2.activeProfileId
95396
95480
  });
95397
- const started = await client.startBrowserLogin({ display_name: displayName, scopes });
95481
+ const verifier = randomBytes11(32).toString("base64url");
95482
+ const verifierHash = createHash14("sha256").update(verifier).digest("hex");
95483
+ const started = await client.startBrowserLogin({ display_name: displayName, scopes, verifier_hash: verifierHash });
95398
95484
  if (!noOpen) {
95399
95485
  try {
95400
95486
  openBrowser(started.verification_uri_complete);
95401
95487
  } catch {
95402
95488
  }
95403
95489
  }
95404
- const intro = json2 ? "" : `Open this URL to approve VTX CLI access:
95490
+ process.stderr.write(
95491
+ `Open this URL to approve VTX CLI access:
95405
95492
  ${started.verification_uri_complete}
95406
95493
 
95407
95494
  Waiting for approval...
95408
- `;
95495
+ `
95496
+ );
95409
95497
  const deadline = Date.now() + timeoutSeconds * 1e3;
95410
95498
  while (Date.now() < deadline) {
95411
- const polled = await client.pollBrowserLogin(started.login_code);
95499
+ const polled = await client.pollBrowserLogin(started.login_code, verifier);
95412
95500
  if (polled.status === "approved") {
95413
95501
  const token = String(polled.token || "").trim();
95414
95502
  if (!token) {
@@ -95417,7 +95505,7 @@ Waiting for approval...
95417
95505
  await writeStoredAgentAuth(config2.tokenPath, { token });
95418
95506
  return {
95419
95507
  exitCode: 0,
95420
- stdout: `${intro}${render2({ status: "logged_in", token_metadata: polled.token_metadata ?? null }, json2)}`,
95508
+ stdout: render2({ status: "logged_in", token_metadata: polled.token_metadata ?? null }, json2),
95421
95509
  stderr: ""
95422
95510
  };
95423
95511
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vtxmacro/cli",
3
- "version": "2026.10.1",
3
+ "version": "2026.10.3",
4
4
  "description": "VTX Macro CLI, MCP server, and durable external inference host.",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",