@vtxmacro/cli 2026.9.57 → 2026.9.58

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.57",
19
+ package_version: "2026.9.58",
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.57",
80
+ package_version: "2026.9.58",
81
81
  codex_package_name: "@openai/codex",
82
82
  codex_version: "0.155.0",
83
83
  copilot_sdk_package_name: "@github/copilot-sdk",
@@ -48958,6 +48958,17 @@ var init_hyperliquid_public_read = __esm({
48958
48958
  let outcome = "cancelled";
48959
48959
  let settled;
48960
48960
  let acquiring = false;
48961
+ let observedRateLimit;
48962
+ let pendingPhase = null;
48963
+ const setPendingPhase = (next) => {
48964
+ if (next === pendingPhase) return;
48965
+ const previous = pendingPhase;
48966
+ pendingPhase = next;
48967
+ try {
48968
+ options.reservation?.onPendingPhaseChange?.(previous, next);
48969
+ } catch {
48970
+ }
48971
+ };
48961
48972
  try {
48962
48973
  checkAbort(signal);
48963
48974
  if (ttlMs) {
@@ -48966,6 +48977,7 @@ var init_hyperliquid_public_read = __esm({
48966
48977
  if (existing) return existing;
48967
48978
  const running = pending2.get(key);
48968
48979
  if (!running) break;
48980
+ setPendingPhase("cache");
48969
48981
  await new Promise((resolve13, reject) => {
48970
48982
  const aborted2 = () => {
48971
48983
  signal.removeEventListener("abort", aborted2);
@@ -48985,6 +48997,7 @@ var init_hyperliquid_public_read = __esm({
48985
48997
  }
48986
48998
  if (options.reservation?.closed) throw new DOMException("Hyperliquid account read was cancelled.", "AbortError");
48987
48999
  acquiring = true;
49000
+ setPendingPhase("admission");
48988
49001
  permit = await admit(apiUrl, requestType, signal, void 0, deadline);
48989
49002
  acquiring = false;
48990
49003
  armDeadline(Math.min(deadline, permit?.expiresAt ?? Infinity));
@@ -49001,6 +49014,7 @@ var init_hyperliquid_public_read = __esm({
49001
49014
  signal.addEventListener("abort", transportAborted, { once: true });
49002
49015
  });
49003
49016
  const transport = (async () => {
49017
+ setPendingPhase("transport");
49004
49018
  const received = await fetch(`${apiUrl}/info`, {
49005
49019
  method: "POST",
49006
49020
  headers: { "Content-Type": "application/json" },
@@ -49009,8 +49023,9 @@ var init_hyperliquid_public_read = __esm({
49009
49023
  });
49010
49024
  checkAbort(signal);
49011
49025
  if (received.status === 429) {
49026
+ observedRateLimit = new HyperliquidPublicReadError("public_rate_limited", "Hyperliquid public API returned HTTP 429.", requestType, 429);
49012
49027
  await cooldown(apiUrl, received.headers.get("Retry-After"));
49013
- throw new HyperliquidPublicReadError("public_rate_limited", "Hyperliquid public API returned HTTP 429.", requestType, 429);
49028
+ throw observedRateLimit;
49014
49029
  }
49015
49030
  const receivedPayload = await received.json().catch((error48) => {
49016
49031
  if (error48 instanceof SyntaxError) return {};
@@ -49021,6 +49036,7 @@ var init_hyperliquid_public_read = __esm({
49021
49036
  })();
49022
49037
  ({ response, payload } = await Promise.race([transport, aborted2]));
49023
49038
  } finally {
49039
+ setPendingPhase(null);
49024
49040
  if (transportAborted) signal.removeEventListener("abort", transportAborted);
49025
49041
  }
49026
49042
  if (!response.ok) {
@@ -49038,6 +49054,7 @@ var init_hyperliquid_public_read = __esm({
49038
49054
  }
49039
49055
  return result2;
49040
49056
  } catch (error48) {
49057
+ if (observedRateLimit) throw observedRateLimit;
49041
49058
  if (options.signal?.aborted) {
49042
49059
  outcome = "cancelled";
49043
49060
  throw abortError2(options.signal);
@@ -49048,6 +49065,7 @@ var init_hyperliquid_public_read = __esm({
49048
49065
  if (error48 instanceof Error && (error48.name === "TimeoutError" || error48.name === "AbortError")) throw new HyperliquidPublicReadError("public_timeout", "Hyperliquid public request timed out.", requestType);
49049
49066
  throw error48;
49050
49067
  } finally {
49068
+ setPendingPhase(null);
49051
49069
  clearTimeout(timer);
49052
49070
  options.signal?.removeEventListener("abort", callerAborted);
49053
49071
  controller.abort();
@@ -50155,7 +50173,7 @@ var init_network_debug = __esm({
50155
50173
  });
50156
50174
 
50157
50175
  // lib/runtime/hyperliquid-account-state-adapter.ts
50158
- var unsupportedUserActiveAssetCache, MAX_UNSUPPORTED_USER_ACTIVE_ASSET_CACHE_KEYS, UNSUPPORTED_USER_ACTIVE_ASSET_STORAGE_KEY, USER_FILLS_CACHE_STORAGE_PREFIX, ACCOUNT_STATE_CACHE_STORAGE_PREFIX, browserUserFillsCache, browserUserFillsInFlight, HYPERLIQUID_USER_FILLS_PROVIDER_PAGE_CAP, browserAccountStateCache, browserAccountStateInFlight, UNSUPPORTED_USER_ACTIVE_ASSET_DETAIL_PATTERNS, unsupportedUserActiveAssetCacheHydrated, hydrateUnsupportedUserActiveAssetCache, persistUnsupportedUserActiveAssetCache, toPositiveFinite, toFinite, firstFiniteNumber, parseFundingUsdcFromInfoPosition, buildActiveAssetCacheKey, buildUserFillsCacheKey, buildUserFillsStorageKey, buildAccountStateCacheKey, buildAccountStateStorageKey, hasActiveInfoRateLimitCooldown, requireNonNegativeConfigSeconds, requireAccountStateCacheConfig, requireUserFillsCacheConfig, normalizeFillSymbol, buildSymbolFilter, filterFillsBySymbols, readBrowserUserFillsCache, writeBrowserUserFillsCache, cloneBrowserAccountStateResult, withAccountStateEvidence, readBrowserAccountStateCache, writeBrowserAccountStateCache, isRateLimitError, createAbortError, waitForSharedBrowserRequest, waitForSharedBrowserUserFills, getBrowserActiveAssetTypeCandidates, normalizeHyperliquidErrorDetail, isUnsupportedUserActiveAssetError, rememberUnsupportedUserActiveAssetKey, parseInfoPositions, requireFinitePromptMetric, requirePromptClearinghouseState, requirePromptSpotState, normalizePerpDexName, listConfiguredPerpDexs, listPerpDexsForAccountState, prefixHip3PositionCoins, aggregateClearinghouseResponses, hasCompletePerpDexAccountMetrics, normalizeBrowserFillToTradeHistory, isPerpFill, awaitAccountReads, fetchHyperliquidInfoRead, fetchHyperliquidInfoPayload, requireHyperliquidApiUrl, requireWalletAddress, parseInfoPositionSnapshot, fetchBrowserAccountState, fetchBrowserAccountStateUncached, fetchBrowserUserFills, fetchBrowserPositionSnapshot;
50176
+ var unsupportedUserActiveAssetCache, MAX_UNSUPPORTED_USER_ACTIVE_ASSET_CACHE_KEYS, UNSUPPORTED_USER_ACTIVE_ASSET_STORAGE_KEY, USER_FILLS_CACHE_STORAGE_PREFIX, ACCOUNT_STATE_CACHE_STORAGE_PREFIX, browserUserFillsCache, browserUserFillsInFlight, HYPERLIQUID_USER_FILLS_PROVIDER_PAGE_CAP, browserAccountStateCache, browserAccountStateInFlight, UNSUPPORTED_USER_ACTIVE_ASSET_DETAIL_PATTERNS, unsupportedUserActiveAssetCacheHydrated, hydrateUnsupportedUserActiveAssetCache, persistUnsupportedUserActiveAssetCache, toPositiveFinite, toFinite, firstFiniteNumber, parseFundingUsdcFromInfoPosition, buildActiveAssetCacheKey, buildUserFillsCacheKey, buildUserFillsStorageKey, buildAccountStateCacheKey, buildAccountStateStorageKey, hasActiveInfoRateLimitCooldown, requireNonNegativeConfigSeconds, requireAccountStateCacheConfig, requireUserFillsCacheConfig, normalizeFillSymbol, buildSymbolFilter, filterFillsBySymbols, readBrowserUserFillsCache, writeBrowserUserFillsCache, cloneBrowserAccountStateResult, withAccountStateEvidence, readBrowserAccountStateCache, writeBrowserAccountStateCache, isRateLimitError, createAbortError, waitForSharedBrowserRequest, waitForSharedBrowserUserFills, getBrowserActiveAssetTypeCandidates, normalizeHyperliquidErrorDetail, isUnsupportedUserActiveAssetError, rememberUnsupportedUserActiveAssetKey, parseInfoPositions, requireFinitePromptMetric, requirePromptClearinghouseState, requirePromptSpotState, normalizePerpDexName, listConfiguredPerpDexs, listPerpDexsForAccountState, prefixHip3PositionCoins, aggregateClearinghouseResponses, hasCompletePerpDexAccountMetrics, normalizeBrowserFillToTradeHistory, isPerpFill, settleAccountReads, fetchHyperliquidInfoRead, fetchHyperliquidInfoPayload, requireHyperliquidApiUrl, requireWalletAddress, parseInfoPositionSnapshot, fetchBrowserAccountState, fetchBrowserAccountStateUncached, fetchBrowserUserFills, fetchBrowserPositionSnapshot;
50159
50177
  var init_hyperliquid_account_state_adapter = __esm({
50160
50178
  "lib/runtime/hyperliquid-account-state-adapter.ts"() {
50161
50179
  "use strict";
@@ -50823,15 +50841,14 @@ var init_hyperliquid_account_state_adapter = __esm({
50823
50841
  }
50824
50842
  return true;
50825
50843
  };
50826
- awaitAccountReads = async (reads) => {
50844
+ settleAccountReads = async (reads, controller) => {
50827
50845
  try {
50828
50846
  return await Promise.all(reads);
50829
50847
  } catch (error48) {
50830
- if (error48 instanceof HyperliquidPublicReadError && error48.code === "public_cooldown_active") {
50831
- const settled = await Promise.allSettled(reads);
50832
- for (const result2 of settled) {
50833
- if (result2.status === "rejected" && result2.reason instanceof HyperliquidPublicReadError && result2.reason.code === "public_rate_limited") throw result2.reason;
50834
- }
50848
+ controller.abort(error48);
50849
+ const settled = await Promise.allSettled(reads);
50850
+ for (const result2 of settled) {
50851
+ if (result2.status === "rejected" && result2.reason instanceof HyperliquidPublicReadError && result2.reason.code === "public_rate_limited") throw result2.reason;
50835
50852
  }
50836
50853
  throw error48;
50837
50854
  }
@@ -50990,6 +51007,26 @@ var init_hyperliquid_account_state_adapter = __esm({
50990
51007
  { type: "userDexAbstraction", user: walletAddress }
50991
51008
  ] : []
50992
51009
  ], input.signal, { cacheAccountMode: true, cacheValidUntilMs: input.publicReadDeadlineMs });
51010
+ if (input.onPublicReadPendingChange) {
51011
+ const pending3 = { cache: 0, admission: 0, transport: 0 };
51012
+ const reportPending = input.onPublicReadPendingChange;
51013
+ reservation.onPendingPhaseChange = (previous, next) => {
51014
+ if (previous) pending3[previous] -= 1;
51015
+ if (next) pending3[next] += 1;
51016
+ reportPending({ ...pending3 });
51017
+ };
51018
+ try {
51019
+ reportPending({ ...pending3 });
51020
+ } catch {
51021
+ }
51022
+ }
51023
+ const parentSignal = input.signal;
51024
+ const readController = new AbortController();
51025
+ const cancelReads = () => readController.abort(parentSignal?.reason);
51026
+ parentSignal?.addEventListener("abort", cancelReads, { once: true });
51027
+ if (parentSignal?.aborted) cancelReads();
51028
+ input = { ...input, signal: readController.signal };
51029
+ const awaitAccountReads = (reads) => settleAccountReads(reads, readController);
50993
51030
  try {
50994
51031
  const userFeesPromise = input.includeEffectiveTakerRate === true ? (async () => ({
50995
51032
  ...await readHyperliquidPublicInfo(apiUrl, { type: "userFees", user: walletAddress }, { signal: input.signal, reservation }).catch((error48) => {
@@ -51239,6 +51276,8 @@ var init_hyperliquid_account_state_adapter = __esm({
51239
51276
  }
51240
51277
  };
51241
51278
  } finally {
51279
+ parentSignal?.removeEventListener("abort", cancelReads);
51280
+ readController.abort();
51242
51281
  await releaseHyperliquidPublicReadReservation(reservation);
51243
51282
  }
51244
51283
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vtxmacro/cli",
3
- "version": "2026.9.57",
3
+ "version": "2026.9.58",
4
4
  "description": "VTX Macro CLI, MCP server, and durable external inference host.",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",