@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 +2 -2
- package/bin/vtx-service-bootstrap.js +1 -1
- package/bin/vtx.js +129 -41
- package/package.json +1 -1
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.
|
|
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.
|
|
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 =
|
|
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
|
|
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
|
-
|
|
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 &&
|
|
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 (
|
|
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 &&
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
56585
|
-
const bytes3 = getBytes(
|
|
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:
|
|
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 ?
|
|
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:
|
|
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 =
|
|
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 =
|
|
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:
|
|
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 =
|
|
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
|
|
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
|
-
|
|
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:
|
|
95508
|
+
stdout: render2({ status: "logged_in", token_metadata: polled.token_metadata ?? null }, json2),
|
|
95421
95509
|
stderr: ""
|
|
95422
95510
|
};
|
|
95423
95511
|
}
|