@vtxmacro/cli 2026.9.63 → 2026.9.65
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-service-bootstrap.js +5 -1
- package/bin/vtx-service-launcher.js +4 -0
- package/bin/vtx.js +691 -522
- package/package.json +1 -1
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.
|
|
80
|
+
package_version: "2026.9.65",
|
|
81
81
|
codex_package_name: "@openai/codex",
|
|
82
82
|
codex_version: "0.155.0",
|
|
83
83
|
copilot_sdk_package_name: "@github/copilot-sdk",
|
|
@@ -20515,6 +20515,10 @@ var init_runtime_policy_generated = __esm({
|
|
|
20515
20515
|
base_delay_milliseconds: 500,
|
|
20516
20516
|
min_delay_milliseconds: 250,
|
|
20517
20517
|
max_delay_milliseconds: 1e4
|
|
20518
|
+
},
|
|
20519
|
+
deployment_reload_observability: {
|
|
20520
|
+
bootstrap_max_error_events_per_page: 4,
|
|
20521
|
+
bootstrap_max_profiles: 10
|
|
20518
20522
|
}
|
|
20519
20523
|
},
|
|
20520
20524
|
ai_dashboard: {
|
|
@@ -42604,6 +42608,10 @@ var init_runtime_policy_generated2 = __esm({
|
|
|
42604
42608
|
base_delay_milliseconds: 500,
|
|
42605
42609
|
min_delay_milliseconds: 250,
|
|
42606
42610
|
max_delay_milliseconds: 1e4
|
|
42611
|
+
},
|
|
42612
|
+
deployment_reload_observability: {
|
|
42613
|
+
bootstrap_max_error_events_per_page: 4,
|
|
42614
|
+
bootstrap_max_profiles: 10
|
|
42607
42615
|
}
|
|
42608
42616
|
},
|
|
42609
42617
|
ai_dashboard: {
|
|
@@ -48869,6 +48877,520 @@ var init_runtime_redaction = __esm({
|
|
|
48869
48877
|
}
|
|
48870
48878
|
});
|
|
48871
48879
|
|
|
48880
|
+
// lib/runtime/channel-sender.ts
|
|
48881
|
+
var RUNTIME_TAB_ID_STORAGE_KEY, createRuntimeUuid, getOrCreateRuntimeTabSenderId;
|
|
48882
|
+
var init_channel_sender = __esm({
|
|
48883
|
+
"lib/runtime/channel-sender.ts"() {
|
|
48884
|
+
"use strict";
|
|
48885
|
+
init_define_VTX_EXO_POLICY();
|
|
48886
|
+
init_define_VTX_GROK_POLICY();
|
|
48887
|
+
init_define_VTX_PI_MODEL_POLICY();
|
|
48888
|
+
RUNTIME_TAB_ID_STORAGE_KEY = "vtx_client_runtime_tab_id";
|
|
48889
|
+
createRuntimeUuid = () => {
|
|
48890
|
+
if (typeof globalThis.crypto !== "undefined" && typeof globalThis.crypto.randomUUID === "function") {
|
|
48891
|
+
return globalThis.crypto.randomUUID();
|
|
48892
|
+
}
|
|
48893
|
+
return `${Date.now()}-${Math.random().toString(16).slice(2)}`;
|
|
48894
|
+
};
|
|
48895
|
+
getOrCreateRuntimeTabSenderId = () => {
|
|
48896
|
+
if (typeof window === "undefined") {
|
|
48897
|
+
return null;
|
|
48898
|
+
}
|
|
48899
|
+
try {
|
|
48900
|
+
const stored = window.sessionStorage.getItem(RUNTIME_TAB_ID_STORAGE_KEY);
|
|
48901
|
+
if (stored && stored.trim()) {
|
|
48902
|
+
return stored;
|
|
48903
|
+
}
|
|
48904
|
+
const created = createRuntimeUuid();
|
|
48905
|
+
window.sessionStorage.setItem(RUNTIME_TAB_ID_STORAGE_KEY, created);
|
|
48906
|
+
return created;
|
|
48907
|
+
} catch {
|
|
48908
|
+
return null;
|
|
48909
|
+
}
|
|
48910
|
+
};
|
|
48911
|
+
}
|
|
48912
|
+
});
|
|
48913
|
+
|
|
48914
|
+
// lib/runtime/network-debug.ts
|
|
48915
|
+
var MAX_RUNTIME_NETWORK_DEBUG_ENTRIES, MAX_RUNTIME_PROVIDER_FAILURE_DEBUG_ENTRIES, MAX_RUNTIME_MARKET_DATA_FAILURE_DEBUG_ENTRIES, RUNTIME_NETWORK_DEBUG_STORAGE_KEY, RUNTIME_PROVIDER_FAILURE_DEBUG_STORAGE_KEY, RUNTIME_MARKET_DATA_FAILURE_DEBUG_STORAGE_KEY, runtimeNetworkDebugEntries, runtimeProviderFailureDebugEntries, runtimeMarketDataFailureDebugEntries, runtimeNetworkDebugListeners, isRuntimeMarketDataFailureDebugEntry, persistRuntimeNetworkDebugEntries, persistRuntimeProviderFailureDebugEntries, persistRuntimeMarketDataFailureDebugEntries, emitRuntimeNetworkDebugEntries, emitRuntimeProviderFailureDebugEntries, emitRuntimeMarketDataFailureDebugEntries, buildRuntimeNetworkDebugId, normalizeRuntimeNetworkUrl, readRuntimeNetworkBrowserContext, classifyRuntimeNetworkFailure, isLocalProviderFailureProbeCandidate, buildLocalProviderProbeUrls, patchRuntimeProviderFailureDebugEntry, runLocalProviderFailureHealthProbe, compactRuntimePromptString, shouldCompactRuntimeRequestString, sanitizeRuntimeNetworkDebugPayload, getRuntimeNetworkDebugEntries, startRuntimeNetworkDebugTrace, appendRuntimeDebugEvent;
|
|
48916
|
+
var init_network_debug = __esm({
|
|
48917
|
+
"lib/runtime/network-debug.ts"() {
|
|
48918
|
+
"use strict";
|
|
48919
|
+
init_define_VTX_EXO_POLICY();
|
|
48920
|
+
init_define_VTX_GROK_POLICY();
|
|
48921
|
+
init_define_VTX_PI_MODEL_POLICY();
|
|
48922
|
+
init_runtime_redaction();
|
|
48923
|
+
init_channel_sender();
|
|
48924
|
+
MAX_RUNTIME_NETWORK_DEBUG_ENTRIES = 80;
|
|
48925
|
+
MAX_RUNTIME_PROVIDER_FAILURE_DEBUG_ENTRIES = 20;
|
|
48926
|
+
MAX_RUNTIME_MARKET_DATA_FAILURE_DEBUG_ENTRIES = 20;
|
|
48927
|
+
RUNTIME_NETWORK_DEBUG_STORAGE_KEY = "vtx_client_runtime_network_debug_entries_v1";
|
|
48928
|
+
RUNTIME_PROVIDER_FAILURE_DEBUG_STORAGE_KEY = "vtx_client_runtime_provider_failure_debug_entries_v1";
|
|
48929
|
+
RUNTIME_MARKET_DATA_FAILURE_DEBUG_STORAGE_KEY = "vtx_client_runtime_market_data_failure_debug_entries_v1";
|
|
48930
|
+
runtimeNetworkDebugEntries = [];
|
|
48931
|
+
runtimeProviderFailureDebugEntries = [];
|
|
48932
|
+
runtimeMarketDataFailureDebugEntries = [];
|
|
48933
|
+
runtimeNetworkDebugListeners = /* @__PURE__ */ new Set();
|
|
48934
|
+
isRuntimeMarketDataFailureDebugEntry = (entry) => entry.kind === "runtime" && entry.label.startsWith("market_data_api:") && entry.outcome === "error";
|
|
48935
|
+
persistRuntimeNetworkDebugEntries = () => {
|
|
48936
|
+
if (typeof window === "undefined") {
|
|
48937
|
+
return;
|
|
48938
|
+
}
|
|
48939
|
+
try {
|
|
48940
|
+
window.localStorage.setItem(
|
|
48941
|
+
RUNTIME_NETWORK_DEBUG_STORAGE_KEY,
|
|
48942
|
+
JSON.stringify(runtimeNetworkDebugEntries.slice(0, MAX_RUNTIME_NETWORK_DEBUG_ENTRIES))
|
|
48943
|
+
);
|
|
48944
|
+
} catch {
|
|
48945
|
+
}
|
|
48946
|
+
};
|
|
48947
|
+
persistRuntimeProviderFailureDebugEntries = () => {
|
|
48948
|
+
if (typeof window === "undefined") {
|
|
48949
|
+
return;
|
|
48950
|
+
}
|
|
48951
|
+
try {
|
|
48952
|
+
window.localStorage.setItem(
|
|
48953
|
+
RUNTIME_PROVIDER_FAILURE_DEBUG_STORAGE_KEY,
|
|
48954
|
+
JSON.stringify(runtimeProviderFailureDebugEntries.slice(0, MAX_RUNTIME_PROVIDER_FAILURE_DEBUG_ENTRIES))
|
|
48955
|
+
);
|
|
48956
|
+
} catch {
|
|
48957
|
+
}
|
|
48958
|
+
};
|
|
48959
|
+
persistRuntimeMarketDataFailureDebugEntries = () => {
|
|
48960
|
+
if (typeof window === "undefined") {
|
|
48961
|
+
return;
|
|
48962
|
+
}
|
|
48963
|
+
try {
|
|
48964
|
+
window.localStorage.setItem(
|
|
48965
|
+
RUNTIME_MARKET_DATA_FAILURE_DEBUG_STORAGE_KEY,
|
|
48966
|
+
JSON.stringify(runtimeMarketDataFailureDebugEntries.slice(0, MAX_RUNTIME_MARKET_DATA_FAILURE_DEBUG_ENTRIES))
|
|
48967
|
+
);
|
|
48968
|
+
} catch {
|
|
48969
|
+
}
|
|
48970
|
+
};
|
|
48971
|
+
emitRuntimeNetworkDebugEntries = (options = {}) => {
|
|
48972
|
+
if (options.persist !== false) {
|
|
48973
|
+
persistRuntimeNetworkDebugEntries();
|
|
48974
|
+
}
|
|
48975
|
+
const snapshot = getRuntimeNetworkDebugEntries();
|
|
48976
|
+
runtimeNetworkDebugListeners.forEach((listener) => listener(snapshot));
|
|
48977
|
+
};
|
|
48978
|
+
emitRuntimeProviderFailureDebugEntries = (options = {}) => {
|
|
48979
|
+
if (options.persist !== false) {
|
|
48980
|
+
persistRuntimeProviderFailureDebugEntries();
|
|
48981
|
+
}
|
|
48982
|
+
const snapshot = getRuntimeNetworkDebugEntries();
|
|
48983
|
+
runtimeNetworkDebugListeners.forEach((listener) => listener(snapshot));
|
|
48984
|
+
};
|
|
48985
|
+
emitRuntimeMarketDataFailureDebugEntries = (options = {}) => {
|
|
48986
|
+
if (options.persist !== false) {
|
|
48987
|
+
persistRuntimeMarketDataFailureDebugEntries();
|
|
48988
|
+
}
|
|
48989
|
+
const snapshot = getRuntimeNetworkDebugEntries();
|
|
48990
|
+
runtimeNetworkDebugListeners.forEach((listener) => listener(snapshot));
|
|
48991
|
+
};
|
|
48992
|
+
buildRuntimeNetworkDebugId = () => {
|
|
48993
|
+
if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
|
|
48994
|
+
return crypto.randomUUID();
|
|
48995
|
+
}
|
|
48996
|
+
return `runtime-net-${Date.now()}-${Math.random().toString(16).slice(2)}`;
|
|
48997
|
+
};
|
|
48998
|
+
normalizeRuntimeNetworkUrl = (value) => {
|
|
48999
|
+
try {
|
|
49000
|
+
const parsed = new URL(value);
|
|
49001
|
+
return {
|
|
49002
|
+
targetProtocol: parsed.protocol ? parsed.protocol.replace(/:$/, "").toLowerCase() : null,
|
|
49003
|
+
targetHost: parsed.host || "unknown-host",
|
|
49004
|
+
targetPath: sanitizeRuntimeNetworkPath(parsed.pathname || "/")
|
|
49005
|
+
};
|
|
49006
|
+
} catch {
|
|
49007
|
+
return {
|
|
49008
|
+
targetProtocol: null,
|
|
49009
|
+
targetHost: "invalid-url",
|
|
49010
|
+
targetPath: sanitizeRuntimeNetworkPath(value)
|
|
49011
|
+
};
|
|
49012
|
+
}
|
|
49013
|
+
};
|
|
49014
|
+
readRuntimeNetworkBrowserContext = () => {
|
|
49015
|
+
if (typeof window === "undefined") {
|
|
49016
|
+
return {
|
|
49017
|
+
tabId: null,
|
|
49018
|
+
online: null,
|
|
49019
|
+
visibilityState: null,
|
|
49020
|
+
hidden: null,
|
|
49021
|
+
focused: null,
|
|
49022
|
+
pageHost: null,
|
|
49023
|
+
connectionEffectiveType: null,
|
|
49024
|
+
connectionDownlink: null,
|
|
49025
|
+
connectionRtt: null
|
|
49026
|
+
};
|
|
49027
|
+
}
|
|
49028
|
+
const nav = typeof navigator !== "undefined" ? navigator : null;
|
|
49029
|
+
const connection = nav && typeof nav === "object" ? nav.connection : null;
|
|
49030
|
+
let tabId = null;
|
|
49031
|
+
try {
|
|
49032
|
+
tabId = getOrCreateRuntimeTabSenderId() || null;
|
|
49033
|
+
} catch {
|
|
49034
|
+
tabId = null;
|
|
49035
|
+
}
|
|
49036
|
+
return {
|
|
49037
|
+
tabId,
|
|
49038
|
+
online: nav && typeof nav.onLine === "boolean" ? nav.onLine : null,
|
|
49039
|
+
visibilityState: typeof document !== "undefined" && typeof document.visibilityState === "string" ? document.visibilityState : null,
|
|
49040
|
+
hidden: typeof document !== "undefined" && typeof document.hidden === "boolean" ? document.hidden : null,
|
|
49041
|
+
focused: typeof document !== "undefined" && typeof document.hasFocus === "function" ? document.hasFocus() : null,
|
|
49042
|
+
pageHost: window.location?.host || null,
|
|
49043
|
+
connectionEffectiveType: typeof connection?.effectiveType === "string" ? connection.effectiveType : null,
|
|
49044
|
+
connectionDownlink: Number.isFinite(Number(connection?.downlink)) ? Number(connection?.downlink) : null,
|
|
49045
|
+
connectionRtt: Number.isFinite(Number(connection?.rtt)) ? Number(connection?.rtt) : null
|
|
49046
|
+
};
|
|
49047
|
+
};
|
|
49048
|
+
classifyRuntimeNetworkFailure = (error48, status) => {
|
|
49049
|
+
if (status != null) {
|
|
49050
|
+
return `http_${status}`;
|
|
49051
|
+
}
|
|
49052
|
+
if (!error48) {
|
|
49053
|
+
return null;
|
|
49054
|
+
}
|
|
49055
|
+
const normalized = error48.toLowerCase();
|
|
49056
|
+
if (normalized.includes("abort")) {
|
|
49057
|
+
return "abort";
|
|
49058
|
+
}
|
|
49059
|
+
if (normalized.includes("cors")) {
|
|
49060
|
+
return "cors";
|
|
49061
|
+
}
|
|
49062
|
+
if (normalized.includes("failed to fetch") || normalized.includes("networkerror")) {
|
|
49063
|
+
return "fetch_failed";
|
|
49064
|
+
}
|
|
49065
|
+
if (normalized.includes("load failed") || normalized.includes("network request failed")) {
|
|
49066
|
+
return "network_failed";
|
|
49067
|
+
}
|
|
49068
|
+
return "error";
|
|
49069
|
+
};
|
|
49070
|
+
isLocalProviderFailureProbeCandidate = (entry) => {
|
|
49071
|
+
if (entry.kind !== "provider" || entry.label !== "local" || entry.status != null) {
|
|
49072
|
+
return false;
|
|
49073
|
+
}
|
|
49074
|
+
const host = entry.targetHost.toLowerCase();
|
|
49075
|
+
if (host.startsWith("127.0.0.1:") || host === "127.0.0.1" || host.startsWith("localhost:") || host === "localhost" || host.startsWith("[::1]:") || host === "[::1]") {
|
|
49076
|
+
return true;
|
|
49077
|
+
}
|
|
49078
|
+
return false;
|
|
49079
|
+
};
|
|
49080
|
+
buildLocalProviderProbeUrls = (entry) => {
|
|
49081
|
+
const protocol = entry.targetProtocol === "https" ? "https" : "http";
|
|
49082
|
+
const origin = `${protocol}://${entry.targetHost}`;
|
|
49083
|
+
return [
|
|
49084
|
+
{ path: "/api/v0/models", url: `${origin}/api/v0/models` },
|
|
49085
|
+
{ path: "/v1/models", url: `${origin}/v1/models` }
|
|
49086
|
+
];
|
|
49087
|
+
};
|
|
49088
|
+
patchRuntimeProviderFailureDebugEntry = (id2, patcher) => {
|
|
49089
|
+
runtimeProviderFailureDebugEntries = runtimeProviderFailureDebugEntries.map((entry) => entry.id === id2 ? patcher(entry) : entry);
|
|
49090
|
+
emitRuntimeProviderFailureDebugEntries();
|
|
49091
|
+
};
|
|
49092
|
+
runLocalProviderFailureHealthProbe = (entry) => {
|
|
49093
|
+
if (typeof fetch !== "function" || !isLocalProviderFailureProbeCandidate(entry)) {
|
|
49094
|
+
return;
|
|
49095
|
+
}
|
|
49096
|
+
const probeStartedAt = Date.now();
|
|
49097
|
+
const probe = {
|
|
49098
|
+
reason: "local_provider_network_failure",
|
|
49099
|
+
startedAt: probeStartedAt,
|
|
49100
|
+
completedAt: null,
|
|
49101
|
+
attempts: []
|
|
49102
|
+
};
|
|
49103
|
+
patchRuntimeProviderFailureDebugEntry(entry.id, (current) => ({
|
|
49104
|
+
...current,
|
|
49105
|
+
healthProbe: probe
|
|
49106
|
+
}));
|
|
49107
|
+
void (async () => {
|
|
49108
|
+
const attempts = [];
|
|
49109
|
+
for (const candidate of buildLocalProviderProbeUrls(entry)) {
|
|
49110
|
+
const startedAt = Date.now();
|
|
49111
|
+
const attempt = {
|
|
49112
|
+
path: candidate.path,
|
|
49113
|
+
startedAt,
|
|
49114
|
+
completedAt: null,
|
|
49115
|
+
outcome: "pending",
|
|
49116
|
+
status: null,
|
|
49117
|
+
error: null,
|
|
49118
|
+
elapsedMs: null
|
|
49119
|
+
};
|
|
49120
|
+
attempts.push(attempt);
|
|
49121
|
+
patchRuntimeProviderFailureDebugEntry(entry.id, (current) => ({
|
|
49122
|
+
...current,
|
|
49123
|
+
healthProbe: {
|
|
49124
|
+
...current.healthProbe ?? probe,
|
|
49125
|
+
attempts: attempts.slice()
|
|
49126
|
+
}
|
|
49127
|
+
}));
|
|
49128
|
+
const controller = typeof AbortController !== "undefined" ? new AbortController() : null;
|
|
49129
|
+
const timeoutId = controller ? setTimeout(() => controller.abort(), 2e3) : null;
|
|
49130
|
+
try {
|
|
49131
|
+
const response = await fetch(candidate.url, {
|
|
49132
|
+
method: "GET",
|
|
49133
|
+
signal: controller?.signal
|
|
49134
|
+
});
|
|
49135
|
+
const completedAt2 = Date.now();
|
|
49136
|
+
attempt.completedAt = completedAt2;
|
|
49137
|
+
attempt.outcome = response.ok ? "ok" : "error";
|
|
49138
|
+
attempt.status = response.status;
|
|
49139
|
+
attempt.error = response.ok ? null : `HTTP ${response.status}`;
|
|
49140
|
+
attempt.elapsedMs = Math.max(0, completedAt2 - startedAt);
|
|
49141
|
+
} catch (error48) {
|
|
49142
|
+
const completedAt2 = Date.now();
|
|
49143
|
+
attempt.completedAt = completedAt2;
|
|
49144
|
+
attempt.outcome = "error";
|
|
49145
|
+
attempt.error = getSanitizedRuntimeErrorMessage(error48) || "health probe failed";
|
|
49146
|
+
attempt.elapsedMs = Math.max(0, completedAt2 - startedAt);
|
|
49147
|
+
} finally {
|
|
49148
|
+
if (timeoutId) {
|
|
49149
|
+
clearTimeout(timeoutId);
|
|
49150
|
+
}
|
|
49151
|
+
}
|
|
49152
|
+
patchRuntimeProviderFailureDebugEntry(entry.id, (current) => ({
|
|
49153
|
+
...current,
|
|
49154
|
+
healthProbe: {
|
|
49155
|
+
...current.healthProbe ?? probe,
|
|
49156
|
+
attempts: attempts.slice()
|
|
49157
|
+
}
|
|
49158
|
+
}));
|
|
49159
|
+
if (attempt.outcome === "ok") {
|
|
49160
|
+
break;
|
|
49161
|
+
}
|
|
49162
|
+
}
|
|
49163
|
+
const completedAt = Date.now();
|
|
49164
|
+
patchRuntimeProviderFailureDebugEntry(entry.id, (current) => ({
|
|
49165
|
+
...current,
|
|
49166
|
+
healthProbe: {
|
|
49167
|
+
...current.healthProbe ?? probe,
|
|
49168
|
+
completedAt,
|
|
49169
|
+
attempts: attempts.slice()
|
|
49170
|
+
}
|
|
49171
|
+
}));
|
|
49172
|
+
})();
|
|
49173
|
+
};
|
|
49174
|
+
compactRuntimePromptString = (value) => {
|
|
49175
|
+
const normalized = sanitizeRuntimeDiagnosticValue(value);
|
|
49176
|
+
const preview = normalized.replace(/\s+/g, " ").trim().slice(0, 220);
|
|
49177
|
+
return `[OMITTED_PROMPT_TEXT chars=${normalized.length}${preview ? ` preview=${JSON.stringify(preview)}` : ""}]`;
|
|
49178
|
+
};
|
|
49179
|
+
shouldCompactRuntimeRequestString = (key, value) => {
|
|
49180
|
+
if (value.length <= 500) {
|
|
49181
|
+
return false;
|
|
49182
|
+
}
|
|
49183
|
+
const normalizedKey = key.trim().toLowerCase();
|
|
49184
|
+
return normalizedKey === "system" || normalizedKey === "instructions" || normalizedKey === "content" || normalizedKey === "text" || normalizedKey === "input" || normalizedKey === "prompt" || normalizedKey.endsWith("_prompt");
|
|
49185
|
+
};
|
|
49186
|
+
sanitizeRuntimeNetworkDebugPayload = (value, options = {}) => {
|
|
49187
|
+
if (value == null) {
|
|
49188
|
+
return value;
|
|
49189
|
+
}
|
|
49190
|
+
if (typeof value === "string") {
|
|
49191
|
+
if (options.compactPromptText && shouldCompactRuntimeRequestString(options.key || "", value)) {
|
|
49192
|
+
return compactRuntimePromptString(value);
|
|
49193
|
+
}
|
|
49194
|
+
return sanitizeRuntimeDiagnosticValue(value);
|
|
49195
|
+
}
|
|
49196
|
+
if (typeof value === "number" || typeof value === "boolean") {
|
|
49197
|
+
return value;
|
|
49198
|
+
}
|
|
49199
|
+
if (Array.isArray(value)) {
|
|
49200
|
+
return value.map((item) => sanitizeRuntimeNetworkDebugPayload(item, options));
|
|
49201
|
+
}
|
|
49202
|
+
if (typeof value === "object") {
|
|
49203
|
+
const out = {};
|
|
49204
|
+
for (const [key, item] of Object.entries(value)) {
|
|
49205
|
+
const normalizedKey = key.trim().toLowerCase();
|
|
49206
|
+
if (normalizedKey === "authorization" || normalizedKey === "x-api-key" || normalizedKey === "api-key" || normalizedKey === "apikey" || normalizedKey === "signature" || normalizedKey.includes("secret") || normalizedKey.includes("private_key") || normalizedKey.includes("signing_key")) {
|
|
49207
|
+
out[key] = "[REDACTED]";
|
|
49208
|
+
continue;
|
|
49209
|
+
}
|
|
49210
|
+
out[key] = sanitizeRuntimeNetworkDebugPayload(item, {
|
|
49211
|
+
...options,
|
|
49212
|
+
key
|
|
49213
|
+
});
|
|
49214
|
+
}
|
|
49215
|
+
return out;
|
|
49216
|
+
}
|
|
49217
|
+
return sanitizeRuntimeDiagnosticValue(String(value));
|
|
49218
|
+
};
|
|
49219
|
+
getRuntimeNetworkDebugEntries = () => runtimeNetworkDebugEntries.slice();
|
|
49220
|
+
startRuntimeNetworkDebugTrace = (input) => {
|
|
49221
|
+
const { targetProtocol, targetHost, targetPath } = normalizeRuntimeNetworkUrl(input.url);
|
|
49222
|
+
const entry = {
|
|
49223
|
+
id: buildRuntimeNetworkDebugId(),
|
|
49224
|
+
kind: input.kind,
|
|
49225
|
+
label: input.label,
|
|
49226
|
+
transport: "browser",
|
|
49227
|
+
providerTransport: input.kind === "provider" ? input.providerTransport ?? "direct" : null,
|
|
49228
|
+
actualRelayPath: input.kind === "provider" && input.providerTransport === "server_relay" ? "/llm/native-provider-relay" : null,
|
|
49229
|
+
method: (input.method || "POST").toUpperCase(),
|
|
49230
|
+
targetProtocol,
|
|
49231
|
+
targetHost,
|
|
49232
|
+
targetPath,
|
|
49233
|
+
startedAt: Date.now(),
|
|
49234
|
+
completedAt: null,
|
|
49235
|
+
status: null,
|
|
49236
|
+
outcome: "pending",
|
|
49237
|
+
error: null,
|
|
49238
|
+
note: typeof input.note === "string" ? input.note : null,
|
|
49239
|
+
request: null,
|
|
49240
|
+
response: null,
|
|
49241
|
+
browser: {
|
|
49242
|
+
started: readRuntimeNetworkBrowserContext(),
|
|
49243
|
+
completed: null,
|
|
49244
|
+
elapsedMs: null,
|
|
49245
|
+
failureKind: null
|
|
49246
|
+
}
|
|
49247
|
+
};
|
|
49248
|
+
runtimeNetworkDebugEntries = [entry, ...runtimeNetworkDebugEntries].slice(0, MAX_RUNTIME_NETWORK_DEBUG_ENTRIES);
|
|
49249
|
+
emitRuntimeNetworkDebugEntries();
|
|
49250
|
+
let completed = false;
|
|
49251
|
+
const finalize2 = (outcome, status, error48) => {
|
|
49252
|
+
if (completed) {
|
|
49253
|
+
return;
|
|
49254
|
+
}
|
|
49255
|
+
completed = true;
|
|
49256
|
+
const completedAt = Date.now();
|
|
49257
|
+
const completedBrowserContext = readRuntimeNetworkBrowserContext();
|
|
49258
|
+
runtimeNetworkDebugEntries = runtimeNetworkDebugEntries.map((candidate) => candidate.id === entry.id ? {
|
|
49259
|
+
...candidate,
|
|
49260
|
+
completedAt,
|
|
49261
|
+
status,
|
|
49262
|
+
outcome,
|
|
49263
|
+
error: error48,
|
|
49264
|
+
browser: candidate.browser ? {
|
|
49265
|
+
...candidate.browser,
|
|
49266
|
+
completed: completedBrowserContext,
|
|
49267
|
+
elapsedMs: Math.max(0, completedAt - candidate.startedAt),
|
|
49268
|
+
failureKind: outcome === "error" ? classifyRuntimeNetworkFailure(error48, status) : null
|
|
49269
|
+
} : null
|
|
49270
|
+
} : candidate);
|
|
49271
|
+
emitRuntimeNetworkDebugEntries();
|
|
49272
|
+
const failedProviderEntry = runtimeNetworkDebugEntries.find((candidate) => candidate.id === entry.id && candidate.kind === "provider" && candidate.outcome === "error");
|
|
49273
|
+
if (failedProviderEntry) {
|
|
49274
|
+
const providerFailureEntry = {
|
|
49275
|
+
...failedProviderEntry,
|
|
49276
|
+
healthProbe: null
|
|
49277
|
+
};
|
|
49278
|
+
runtimeProviderFailureDebugEntries = [
|
|
49279
|
+
providerFailureEntry,
|
|
49280
|
+
...runtimeProviderFailureDebugEntries.filter((candidate) => candidate.id !== providerFailureEntry.id)
|
|
49281
|
+
].slice(0, MAX_RUNTIME_PROVIDER_FAILURE_DEBUG_ENTRIES);
|
|
49282
|
+
emitRuntimeProviderFailureDebugEntries();
|
|
49283
|
+
runLocalProviderFailureHealthProbe(providerFailureEntry);
|
|
49284
|
+
}
|
|
49285
|
+
const failedMarketDataEntry = runtimeNetworkDebugEntries.find((candidate) => candidate.id === entry.id && isRuntimeMarketDataFailureDebugEntry(candidate));
|
|
49286
|
+
if (failedMarketDataEntry) {
|
|
49287
|
+
runtimeMarketDataFailureDebugEntries = [
|
|
49288
|
+
failedMarketDataEntry,
|
|
49289
|
+
...runtimeMarketDataFailureDebugEntries.filter((candidate) => candidate.id !== failedMarketDataEntry.id)
|
|
49290
|
+
].slice(0, MAX_RUNTIME_MARKET_DATA_FAILURE_DEBUG_ENTRIES);
|
|
49291
|
+
emitRuntimeMarketDataFailureDebugEntries();
|
|
49292
|
+
}
|
|
49293
|
+
};
|
|
49294
|
+
const attachPayload = (field, payload) => {
|
|
49295
|
+
runtimeNetworkDebugEntries = runtimeNetworkDebugEntries.map((candidate) => candidate.id === entry.id ? {
|
|
49296
|
+
...candidate,
|
|
49297
|
+
[field]: sanitizeRuntimeNetworkDebugPayload(payload, {
|
|
49298
|
+
compactPromptText: field === "request"
|
|
49299
|
+
})
|
|
49300
|
+
} : candidate);
|
|
49301
|
+
emitRuntimeNetworkDebugEntries();
|
|
49302
|
+
};
|
|
49303
|
+
return {
|
|
49304
|
+
id: entry.id,
|
|
49305
|
+
attachRequest: (payload) => attachPayload("request", payload),
|
|
49306
|
+
attachResponse: (payload) => attachPayload("response", payload),
|
|
49307
|
+
completeSuccess: (status) => finalize2("ok", typeof status === "number" ? status : null, null),
|
|
49308
|
+
completeError: (error48, status) => {
|
|
49309
|
+
const message = getSanitizedRuntimeErrorMessage(error48);
|
|
49310
|
+
finalize2("error", typeof status === "number" ? status : null, message);
|
|
49311
|
+
}
|
|
49312
|
+
};
|
|
49313
|
+
};
|
|
49314
|
+
appendRuntimeDebugEvent = (input) => {
|
|
49315
|
+
const outcome = input.outcome === "error" ? "error" : "ok";
|
|
49316
|
+
const entry = {
|
|
49317
|
+
id: buildRuntimeNetworkDebugId(),
|
|
49318
|
+
kind: "runtime",
|
|
49319
|
+
label: String(input.label || "runtime_event").trim() || "runtime_event",
|
|
49320
|
+
transport: "browser",
|
|
49321
|
+
method: "TRACE",
|
|
49322
|
+
targetProtocol: null,
|
|
49323
|
+
targetHost: "client-runtime",
|
|
49324
|
+
targetPath: "/runtime",
|
|
49325
|
+
startedAt: Date.now(),
|
|
49326
|
+
completedAt: Date.now(),
|
|
49327
|
+
status: null,
|
|
49328
|
+
outcome,
|
|
49329
|
+
error: null,
|
|
49330
|
+
note: typeof input.note === "string" && input.note.trim().length > 0 ? input.note.trim() : null,
|
|
49331
|
+
request: null,
|
|
49332
|
+
response: null,
|
|
49333
|
+
browser: {
|
|
49334
|
+
started: readRuntimeNetworkBrowserContext(),
|
|
49335
|
+
completed: readRuntimeNetworkBrowserContext(),
|
|
49336
|
+
elapsedMs: 0,
|
|
49337
|
+
failureKind: null
|
|
49338
|
+
}
|
|
49339
|
+
};
|
|
49340
|
+
runtimeNetworkDebugEntries = [entry, ...runtimeNetworkDebugEntries].slice(0, MAX_RUNTIME_NETWORK_DEBUG_ENTRIES);
|
|
49341
|
+
emitRuntimeNetworkDebugEntries({ persist: outcome === "error" });
|
|
49342
|
+
};
|
|
49343
|
+
}
|
|
49344
|
+
});
|
|
49345
|
+
|
|
49346
|
+
// lib/runtime/sl-tp-execution-settings.ts
|
|
49347
|
+
var resolveBooleanSetting, resolvePositiveNumberSetting, resolveRiskModeSetting, resolveStopLossTypeSetting, buildRuntimeSlTpExecutionSettings;
|
|
49348
|
+
var init_sl_tp_execution_settings = __esm({
|
|
49349
|
+
"lib/runtime/sl-tp-execution-settings.ts"() {
|
|
49350
|
+
"use strict";
|
|
49351
|
+
init_define_VTX_EXO_POLICY();
|
|
49352
|
+
init_define_VTX_GROK_POLICY();
|
|
49353
|
+
init_define_VTX_PI_MODEL_POLICY();
|
|
49354
|
+
resolveBooleanSetting = (settings, key, fallback) => {
|
|
49355
|
+
if (Object.prototype.hasOwnProperty.call(settings, key)) {
|
|
49356
|
+
return settings[key] === true;
|
|
49357
|
+
}
|
|
49358
|
+
return fallback === true;
|
|
49359
|
+
};
|
|
49360
|
+
resolvePositiveNumberSetting = (settings, key, fallback) => {
|
|
49361
|
+
const raw = Object.prototype.hasOwnProperty.call(settings, key) ? settings[key] : fallback;
|
|
49362
|
+
const parsed = Number(raw);
|
|
49363
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : 0;
|
|
49364
|
+
};
|
|
49365
|
+
resolveRiskModeSetting = (settings, key, fallback) => {
|
|
49366
|
+
const normalized = String(Object.prototype.hasOwnProperty.call(settings, key) ? settings[key] : fallback).trim().toLowerCase();
|
|
49367
|
+
return normalized === "usdc" ? "usdc" : "percent";
|
|
49368
|
+
};
|
|
49369
|
+
resolveStopLossTypeSetting = (settings, fallback) => {
|
|
49370
|
+
const normalized = String(
|
|
49371
|
+
Object.prototype.hasOwnProperty.call(settings, "stop_loss_type") ? settings.stop_loss_type : fallback
|
|
49372
|
+
).trim().toLowerCase();
|
|
49373
|
+
return normalized === "trailing" ? "trailing" : "fixed";
|
|
49374
|
+
};
|
|
49375
|
+
buildRuntimeSlTpExecutionSettings = (settings, config2) => ({
|
|
49376
|
+
tpSlEnabled: resolveBooleanSetting(
|
|
49377
|
+
settings,
|
|
49378
|
+
"tp_sl_enabled",
|
|
49379
|
+
config2.default_ai_tp_sl_enabled ?? config2.default_tp_sl_enabled
|
|
49380
|
+
),
|
|
49381
|
+
stopLossEnabled: resolveBooleanSetting(settings, "sl_enabled", config2.default_sl_enabled),
|
|
49382
|
+
stopLossType: resolveStopLossTypeSetting(settings, config2.default_stop_loss_type),
|
|
49383
|
+
stopLossMode: resolveRiskModeSetting(settings, "stop_loss_mode", config2.default_stop_loss_mode),
|
|
49384
|
+
stopLossPct: resolvePositiveNumberSetting(settings, "stop_loss_pct", config2.default_stop_loss_pct),
|
|
49385
|
+
stopLossUsdc: resolvePositiveNumberSetting(settings, "stop_loss_usdc", config2.default_stop_loss_usdc),
|
|
49386
|
+
takeProfitEnabled: resolveBooleanSetting(settings, "tp_enabled", config2.default_tp_enabled),
|
|
49387
|
+
takeProfitMode: resolveRiskModeSetting(settings, "take_profit_mode", config2.default_take_profit_mode),
|
|
49388
|
+
takeProfitPct: resolvePositiveNumberSetting(settings, "take_profit_pct", config2.default_take_profit_pct),
|
|
49389
|
+
takeProfitUsdc: resolvePositiveNumberSetting(settings, "take_profit_usdc", config2.default_take_profit_usdc)
|
|
49390
|
+
});
|
|
49391
|
+
}
|
|
49392
|
+
});
|
|
49393
|
+
|
|
48872
49394
|
// lib/runtime/hyperliquid-public-read.ts
|
|
48873
49395
|
var policy, weights, recoveryPolicy, budgets, unpersistedBudgets, cache, pending2, PREFIX, priorityRank, createHyperliquidPublicPriorityScope, promoteHyperliquidPublicPriority, abortError2, checkAbort, wait, storage, loadBudget, saveBudget, withBudgetLock, HyperliquidPublicReadError, getHyperliquidPublicReadBudget, cooldownError, recoveryWaitError, fallbackDelayMs, admit, cooldown, finishHyperliquidRecoveryRequest, assertHyperliquidRecoveryDispatch, cacheTtlMs, eligibleCache, reserveHyperliquidPublicReads, releaseHyperliquidPublicReadReservation, admitHyperliquidExchangeRequest, recordHyperliquidExchangeResponse, readHyperliquidPublicInfo;
|
|
48874
49396
|
var init_hyperliquid_public_read = __esm({
|
|
@@ -49930,472 +50452,6 @@ var init_hyperliquid_fee_contract = __esm({
|
|
|
49930
50452
|
}
|
|
49931
50453
|
});
|
|
49932
50454
|
|
|
49933
|
-
// lib/runtime/channel-sender.ts
|
|
49934
|
-
var RUNTIME_TAB_ID_STORAGE_KEY, createRuntimeUuid, getOrCreateRuntimeTabSenderId;
|
|
49935
|
-
var init_channel_sender = __esm({
|
|
49936
|
-
"lib/runtime/channel-sender.ts"() {
|
|
49937
|
-
"use strict";
|
|
49938
|
-
init_define_VTX_EXO_POLICY();
|
|
49939
|
-
init_define_VTX_GROK_POLICY();
|
|
49940
|
-
init_define_VTX_PI_MODEL_POLICY();
|
|
49941
|
-
RUNTIME_TAB_ID_STORAGE_KEY = "vtx_client_runtime_tab_id";
|
|
49942
|
-
createRuntimeUuid = () => {
|
|
49943
|
-
if (typeof globalThis.crypto !== "undefined" && typeof globalThis.crypto.randomUUID === "function") {
|
|
49944
|
-
return globalThis.crypto.randomUUID();
|
|
49945
|
-
}
|
|
49946
|
-
return `${Date.now()}-${Math.random().toString(16).slice(2)}`;
|
|
49947
|
-
};
|
|
49948
|
-
getOrCreateRuntimeTabSenderId = () => {
|
|
49949
|
-
if (typeof window === "undefined") {
|
|
49950
|
-
return null;
|
|
49951
|
-
}
|
|
49952
|
-
try {
|
|
49953
|
-
const stored = window.sessionStorage.getItem(RUNTIME_TAB_ID_STORAGE_KEY);
|
|
49954
|
-
if (stored && stored.trim()) {
|
|
49955
|
-
return stored;
|
|
49956
|
-
}
|
|
49957
|
-
const created = createRuntimeUuid();
|
|
49958
|
-
window.sessionStorage.setItem(RUNTIME_TAB_ID_STORAGE_KEY, created);
|
|
49959
|
-
return created;
|
|
49960
|
-
} catch {
|
|
49961
|
-
return null;
|
|
49962
|
-
}
|
|
49963
|
-
};
|
|
49964
|
-
}
|
|
49965
|
-
});
|
|
49966
|
-
|
|
49967
|
-
// lib/runtime/network-debug.ts
|
|
49968
|
-
var MAX_RUNTIME_NETWORK_DEBUG_ENTRIES, MAX_RUNTIME_PROVIDER_FAILURE_DEBUG_ENTRIES, MAX_RUNTIME_MARKET_DATA_FAILURE_DEBUG_ENTRIES, RUNTIME_NETWORK_DEBUG_STORAGE_KEY, RUNTIME_PROVIDER_FAILURE_DEBUG_STORAGE_KEY, RUNTIME_MARKET_DATA_FAILURE_DEBUG_STORAGE_KEY, runtimeNetworkDebugEntries, runtimeProviderFailureDebugEntries, runtimeMarketDataFailureDebugEntries, runtimeNetworkDebugListeners, isRuntimeMarketDataFailureDebugEntry, persistRuntimeNetworkDebugEntries, persistRuntimeProviderFailureDebugEntries, persistRuntimeMarketDataFailureDebugEntries, emitRuntimeNetworkDebugEntries, emitRuntimeProviderFailureDebugEntries, emitRuntimeMarketDataFailureDebugEntries, buildRuntimeNetworkDebugId, normalizeRuntimeNetworkUrl, readRuntimeNetworkBrowserContext, classifyRuntimeNetworkFailure, isLocalProviderFailureProbeCandidate, buildLocalProviderProbeUrls, patchRuntimeProviderFailureDebugEntry, runLocalProviderFailureHealthProbe, compactRuntimePromptString, shouldCompactRuntimeRequestString, sanitizeRuntimeNetworkDebugPayload, getRuntimeNetworkDebugEntries, startRuntimeNetworkDebugTrace, appendRuntimeDebugEvent;
|
|
49969
|
-
var init_network_debug = __esm({
|
|
49970
|
-
"lib/runtime/network-debug.ts"() {
|
|
49971
|
-
"use strict";
|
|
49972
|
-
init_define_VTX_EXO_POLICY();
|
|
49973
|
-
init_define_VTX_GROK_POLICY();
|
|
49974
|
-
init_define_VTX_PI_MODEL_POLICY();
|
|
49975
|
-
init_runtime_redaction();
|
|
49976
|
-
init_channel_sender();
|
|
49977
|
-
MAX_RUNTIME_NETWORK_DEBUG_ENTRIES = 80;
|
|
49978
|
-
MAX_RUNTIME_PROVIDER_FAILURE_DEBUG_ENTRIES = 20;
|
|
49979
|
-
MAX_RUNTIME_MARKET_DATA_FAILURE_DEBUG_ENTRIES = 20;
|
|
49980
|
-
RUNTIME_NETWORK_DEBUG_STORAGE_KEY = "vtx_client_runtime_network_debug_entries_v1";
|
|
49981
|
-
RUNTIME_PROVIDER_FAILURE_DEBUG_STORAGE_KEY = "vtx_client_runtime_provider_failure_debug_entries_v1";
|
|
49982
|
-
RUNTIME_MARKET_DATA_FAILURE_DEBUG_STORAGE_KEY = "vtx_client_runtime_market_data_failure_debug_entries_v1";
|
|
49983
|
-
runtimeNetworkDebugEntries = [];
|
|
49984
|
-
runtimeProviderFailureDebugEntries = [];
|
|
49985
|
-
runtimeMarketDataFailureDebugEntries = [];
|
|
49986
|
-
runtimeNetworkDebugListeners = /* @__PURE__ */ new Set();
|
|
49987
|
-
isRuntimeMarketDataFailureDebugEntry = (entry) => entry.kind === "runtime" && entry.label.startsWith("market_data_api:") && entry.outcome === "error";
|
|
49988
|
-
persistRuntimeNetworkDebugEntries = () => {
|
|
49989
|
-
if (typeof window === "undefined") {
|
|
49990
|
-
return;
|
|
49991
|
-
}
|
|
49992
|
-
try {
|
|
49993
|
-
window.localStorage.setItem(
|
|
49994
|
-
RUNTIME_NETWORK_DEBUG_STORAGE_KEY,
|
|
49995
|
-
JSON.stringify(runtimeNetworkDebugEntries.slice(0, MAX_RUNTIME_NETWORK_DEBUG_ENTRIES))
|
|
49996
|
-
);
|
|
49997
|
-
} catch {
|
|
49998
|
-
}
|
|
49999
|
-
};
|
|
50000
|
-
persistRuntimeProviderFailureDebugEntries = () => {
|
|
50001
|
-
if (typeof window === "undefined") {
|
|
50002
|
-
return;
|
|
50003
|
-
}
|
|
50004
|
-
try {
|
|
50005
|
-
window.localStorage.setItem(
|
|
50006
|
-
RUNTIME_PROVIDER_FAILURE_DEBUG_STORAGE_KEY,
|
|
50007
|
-
JSON.stringify(runtimeProviderFailureDebugEntries.slice(0, MAX_RUNTIME_PROVIDER_FAILURE_DEBUG_ENTRIES))
|
|
50008
|
-
);
|
|
50009
|
-
} catch {
|
|
50010
|
-
}
|
|
50011
|
-
};
|
|
50012
|
-
persistRuntimeMarketDataFailureDebugEntries = () => {
|
|
50013
|
-
if (typeof window === "undefined") {
|
|
50014
|
-
return;
|
|
50015
|
-
}
|
|
50016
|
-
try {
|
|
50017
|
-
window.localStorage.setItem(
|
|
50018
|
-
RUNTIME_MARKET_DATA_FAILURE_DEBUG_STORAGE_KEY,
|
|
50019
|
-
JSON.stringify(runtimeMarketDataFailureDebugEntries.slice(0, MAX_RUNTIME_MARKET_DATA_FAILURE_DEBUG_ENTRIES))
|
|
50020
|
-
);
|
|
50021
|
-
} catch {
|
|
50022
|
-
}
|
|
50023
|
-
};
|
|
50024
|
-
emitRuntimeNetworkDebugEntries = (options = {}) => {
|
|
50025
|
-
if (options.persist !== false) {
|
|
50026
|
-
persistRuntimeNetworkDebugEntries();
|
|
50027
|
-
}
|
|
50028
|
-
const snapshot = getRuntimeNetworkDebugEntries();
|
|
50029
|
-
runtimeNetworkDebugListeners.forEach((listener) => listener(snapshot));
|
|
50030
|
-
};
|
|
50031
|
-
emitRuntimeProviderFailureDebugEntries = (options = {}) => {
|
|
50032
|
-
if (options.persist !== false) {
|
|
50033
|
-
persistRuntimeProviderFailureDebugEntries();
|
|
50034
|
-
}
|
|
50035
|
-
const snapshot = getRuntimeNetworkDebugEntries();
|
|
50036
|
-
runtimeNetworkDebugListeners.forEach((listener) => listener(snapshot));
|
|
50037
|
-
};
|
|
50038
|
-
emitRuntimeMarketDataFailureDebugEntries = (options = {}) => {
|
|
50039
|
-
if (options.persist !== false) {
|
|
50040
|
-
persistRuntimeMarketDataFailureDebugEntries();
|
|
50041
|
-
}
|
|
50042
|
-
const snapshot = getRuntimeNetworkDebugEntries();
|
|
50043
|
-
runtimeNetworkDebugListeners.forEach((listener) => listener(snapshot));
|
|
50044
|
-
};
|
|
50045
|
-
buildRuntimeNetworkDebugId = () => {
|
|
50046
|
-
if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
|
|
50047
|
-
return crypto.randomUUID();
|
|
50048
|
-
}
|
|
50049
|
-
return `runtime-net-${Date.now()}-${Math.random().toString(16).slice(2)}`;
|
|
50050
|
-
};
|
|
50051
|
-
normalizeRuntimeNetworkUrl = (value) => {
|
|
50052
|
-
try {
|
|
50053
|
-
const parsed = new URL(value);
|
|
50054
|
-
return {
|
|
50055
|
-
targetProtocol: parsed.protocol ? parsed.protocol.replace(/:$/, "").toLowerCase() : null,
|
|
50056
|
-
targetHost: parsed.host || "unknown-host",
|
|
50057
|
-
targetPath: sanitizeRuntimeNetworkPath(parsed.pathname || "/")
|
|
50058
|
-
};
|
|
50059
|
-
} catch {
|
|
50060
|
-
return {
|
|
50061
|
-
targetProtocol: null,
|
|
50062
|
-
targetHost: "invalid-url",
|
|
50063
|
-
targetPath: sanitizeRuntimeNetworkPath(value)
|
|
50064
|
-
};
|
|
50065
|
-
}
|
|
50066
|
-
};
|
|
50067
|
-
readRuntimeNetworkBrowserContext = () => {
|
|
50068
|
-
if (typeof window === "undefined") {
|
|
50069
|
-
return {
|
|
50070
|
-
tabId: null,
|
|
50071
|
-
online: null,
|
|
50072
|
-
visibilityState: null,
|
|
50073
|
-
hidden: null,
|
|
50074
|
-
focused: null,
|
|
50075
|
-
pageHost: null,
|
|
50076
|
-
connectionEffectiveType: null,
|
|
50077
|
-
connectionDownlink: null,
|
|
50078
|
-
connectionRtt: null
|
|
50079
|
-
};
|
|
50080
|
-
}
|
|
50081
|
-
const nav = typeof navigator !== "undefined" ? navigator : null;
|
|
50082
|
-
const connection = nav && typeof nav === "object" ? nav.connection : null;
|
|
50083
|
-
let tabId = null;
|
|
50084
|
-
try {
|
|
50085
|
-
tabId = getOrCreateRuntimeTabSenderId() || null;
|
|
50086
|
-
} catch {
|
|
50087
|
-
tabId = null;
|
|
50088
|
-
}
|
|
50089
|
-
return {
|
|
50090
|
-
tabId,
|
|
50091
|
-
online: nav && typeof nav.onLine === "boolean" ? nav.onLine : null,
|
|
50092
|
-
visibilityState: typeof document !== "undefined" && typeof document.visibilityState === "string" ? document.visibilityState : null,
|
|
50093
|
-
hidden: typeof document !== "undefined" && typeof document.hidden === "boolean" ? document.hidden : null,
|
|
50094
|
-
focused: typeof document !== "undefined" && typeof document.hasFocus === "function" ? document.hasFocus() : null,
|
|
50095
|
-
pageHost: window.location?.host || null,
|
|
50096
|
-
connectionEffectiveType: typeof connection?.effectiveType === "string" ? connection.effectiveType : null,
|
|
50097
|
-
connectionDownlink: Number.isFinite(Number(connection?.downlink)) ? Number(connection?.downlink) : null,
|
|
50098
|
-
connectionRtt: Number.isFinite(Number(connection?.rtt)) ? Number(connection?.rtt) : null
|
|
50099
|
-
};
|
|
50100
|
-
};
|
|
50101
|
-
classifyRuntimeNetworkFailure = (error48, status) => {
|
|
50102
|
-
if (status != null) {
|
|
50103
|
-
return `http_${status}`;
|
|
50104
|
-
}
|
|
50105
|
-
if (!error48) {
|
|
50106
|
-
return null;
|
|
50107
|
-
}
|
|
50108
|
-
const normalized = error48.toLowerCase();
|
|
50109
|
-
if (normalized.includes("abort")) {
|
|
50110
|
-
return "abort";
|
|
50111
|
-
}
|
|
50112
|
-
if (normalized.includes("cors")) {
|
|
50113
|
-
return "cors";
|
|
50114
|
-
}
|
|
50115
|
-
if (normalized.includes("failed to fetch") || normalized.includes("networkerror")) {
|
|
50116
|
-
return "fetch_failed";
|
|
50117
|
-
}
|
|
50118
|
-
if (normalized.includes("load failed") || normalized.includes("network request failed")) {
|
|
50119
|
-
return "network_failed";
|
|
50120
|
-
}
|
|
50121
|
-
return "error";
|
|
50122
|
-
};
|
|
50123
|
-
isLocalProviderFailureProbeCandidate = (entry) => {
|
|
50124
|
-
if (entry.kind !== "provider" || entry.label !== "local" || entry.status != null) {
|
|
50125
|
-
return false;
|
|
50126
|
-
}
|
|
50127
|
-
const host = entry.targetHost.toLowerCase();
|
|
50128
|
-
if (host.startsWith("127.0.0.1:") || host === "127.0.0.1" || host.startsWith("localhost:") || host === "localhost" || host.startsWith("[::1]:") || host === "[::1]") {
|
|
50129
|
-
return true;
|
|
50130
|
-
}
|
|
50131
|
-
return false;
|
|
50132
|
-
};
|
|
50133
|
-
buildLocalProviderProbeUrls = (entry) => {
|
|
50134
|
-
const protocol = entry.targetProtocol === "https" ? "https" : "http";
|
|
50135
|
-
const origin = `${protocol}://${entry.targetHost}`;
|
|
50136
|
-
return [
|
|
50137
|
-
{ path: "/api/v0/models", url: `${origin}/api/v0/models` },
|
|
50138
|
-
{ path: "/v1/models", url: `${origin}/v1/models` }
|
|
50139
|
-
];
|
|
50140
|
-
};
|
|
50141
|
-
patchRuntimeProviderFailureDebugEntry = (id2, patcher) => {
|
|
50142
|
-
runtimeProviderFailureDebugEntries = runtimeProviderFailureDebugEntries.map((entry) => entry.id === id2 ? patcher(entry) : entry);
|
|
50143
|
-
emitRuntimeProviderFailureDebugEntries();
|
|
50144
|
-
};
|
|
50145
|
-
runLocalProviderFailureHealthProbe = (entry) => {
|
|
50146
|
-
if (typeof fetch !== "function" || !isLocalProviderFailureProbeCandidate(entry)) {
|
|
50147
|
-
return;
|
|
50148
|
-
}
|
|
50149
|
-
const probeStartedAt = Date.now();
|
|
50150
|
-
const probe = {
|
|
50151
|
-
reason: "local_provider_network_failure",
|
|
50152
|
-
startedAt: probeStartedAt,
|
|
50153
|
-
completedAt: null,
|
|
50154
|
-
attempts: []
|
|
50155
|
-
};
|
|
50156
|
-
patchRuntimeProviderFailureDebugEntry(entry.id, (current) => ({
|
|
50157
|
-
...current,
|
|
50158
|
-
healthProbe: probe
|
|
50159
|
-
}));
|
|
50160
|
-
void (async () => {
|
|
50161
|
-
const attempts = [];
|
|
50162
|
-
for (const candidate of buildLocalProviderProbeUrls(entry)) {
|
|
50163
|
-
const startedAt = Date.now();
|
|
50164
|
-
const attempt = {
|
|
50165
|
-
path: candidate.path,
|
|
50166
|
-
startedAt,
|
|
50167
|
-
completedAt: null,
|
|
50168
|
-
outcome: "pending",
|
|
50169
|
-
status: null,
|
|
50170
|
-
error: null,
|
|
50171
|
-
elapsedMs: null
|
|
50172
|
-
};
|
|
50173
|
-
attempts.push(attempt);
|
|
50174
|
-
patchRuntimeProviderFailureDebugEntry(entry.id, (current) => ({
|
|
50175
|
-
...current,
|
|
50176
|
-
healthProbe: {
|
|
50177
|
-
...current.healthProbe ?? probe,
|
|
50178
|
-
attempts: attempts.slice()
|
|
50179
|
-
}
|
|
50180
|
-
}));
|
|
50181
|
-
const controller = typeof AbortController !== "undefined" ? new AbortController() : null;
|
|
50182
|
-
const timeoutId = controller ? setTimeout(() => controller.abort(), 2e3) : null;
|
|
50183
|
-
try {
|
|
50184
|
-
const response = await fetch(candidate.url, {
|
|
50185
|
-
method: "GET",
|
|
50186
|
-
signal: controller?.signal
|
|
50187
|
-
});
|
|
50188
|
-
const completedAt2 = Date.now();
|
|
50189
|
-
attempt.completedAt = completedAt2;
|
|
50190
|
-
attempt.outcome = response.ok ? "ok" : "error";
|
|
50191
|
-
attempt.status = response.status;
|
|
50192
|
-
attempt.error = response.ok ? null : `HTTP ${response.status}`;
|
|
50193
|
-
attempt.elapsedMs = Math.max(0, completedAt2 - startedAt);
|
|
50194
|
-
} catch (error48) {
|
|
50195
|
-
const completedAt2 = Date.now();
|
|
50196
|
-
attempt.completedAt = completedAt2;
|
|
50197
|
-
attempt.outcome = "error";
|
|
50198
|
-
attempt.error = getSanitizedRuntimeErrorMessage(error48) || "health probe failed";
|
|
50199
|
-
attempt.elapsedMs = Math.max(0, completedAt2 - startedAt);
|
|
50200
|
-
} finally {
|
|
50201
|
-
if (timeoutId) {
|
|
50202
|
-
clearTimeout(timeoutId);
|
|
50203
|
-
}
|
|
50204
|
-
}
|
|
50205
|
-
patchRuntimeProviderFailureDebugEntry(entry.id, (current) => ({
|
|
50206
|
-
...current,
|
|
50207
|
-
healthProbe: {
|
|
50208
|
-
...current.healthProbe ?? probe,
|
|
50209
|
-
attempts: attempts.slice()
|
|
50210
|
-
}
|
|
50211
|
-
}));
|
|
50212
|
-
if (attempt.outcome === "ok") {
|
|
50213
|
-
break;
|
|
50214
|
-
}
|
|
50215
|
-
}
|
|
50216
|
-
const completedAt = Date.now();
|
|
50217
|
-
patchRuntimeProviderFailureDebugEntry(entry.id, (current) => ({
|
|
50218
|
-
...current,
|
|
50219
|
-
healthProbe: {
|
|
50220
|
-
...current.healthProbe ?? probe,
|
|
50221
|
-
completedAt,
|
|
50222
|
-
attempts: attempts.slice()
|
|
50223
|
-
}
|
|
50224
|
-
}));
|
|
50225
|
-
})();
|
|
50226
|
-
};
|
|
50227
|
-
compactRuntimePromptString = (value) => {
|
|
50228
|
-
const normalized = sanitizeRuntimeDiagnosticValue(value);
|
|
50229
|
-
const preview = normalized.replace(/\s+/g, " ").trim().slice(0, 220);
|
|
50230
|
-
return `[OMITTED_PROMPT_TEXT chars=${normalized.length}${preview ? ` preview=${JSON.stringify(preview)}` : ""}]`;
|
|
50231
|
-
};
|
|
50232
|
-
shouldCompactRuntimeRequestString = (key, value) => {
|
|
50233
|
-
if (value.length <= 500) {
|
|
50234
|
-
return false;
|
|
50235
|
-
}
|
|
50236
|
-
const normalizedKey = key.trim().toLowerCase();
|
|
50237
|
-
return normalizedKey === "system" || normalizedKey === "instructions" || normalizedKey === "content" || normalizedKey === "text" || normalizedKey === "input" || normalizedKey === "prompt" || normalizedKey.endsWith("_prompt");
|
|
50238
|
-
};
|
|
50239
|
-
sanitizeRuntimeNetworkDebugPayload = (value, options = {}) => {
|
|
50240
|
-
if (value == null) {
|
|
50241
|
-
return value;
|
|
50242
|
-
}
|
|
50243
|
-
if (typeof value === "string") {
|
|
50244
|
-
if (options.compactPromptText && shouldCompactRuntimeRequestString(options.key || "", value)) {
|
|
50245
|
-
return compactRuntimePromptString(value);
|
|
50246
|
-
}
|
|
50247
|
-
return sanitizeRuntimeDiagnosticValue(value);
|
|
50248
|
-
}
|
|
50249
|
-
if (typeof value === "number" || typeof value === "boolean") {
|
|
50250
|
-
return value;
|
|
50251
|
-
}
|
|
50252
|
-
if (Array.isArray(value)) {
|
|
50253
|
-
return value.map((item) => sanitizeRuntimeNetworkDebugPayload(item, options));
|
|
50254
|
-
}
|
|
50255
|
-
if (typeof value === "object") {
|
|
50256
|
-
const out = {};
|
|
50257
|
-
for (const [key, item] of Object.entries(value)) {
|
|
50258
|
-
const normalizedKey = key.trim().toLowerCase();
|
|
50259
|
-
if (normalizedKey === "authorization" || normalizedKey === "x-api-key" || normalizedKey === "api-key" || normalizedKey === "apikey" || normalizedKey === "signature" || normalizedKey.includes("secret") || normalizedKey.includes("private_key") || normalizedKey.includes("signing_key")) {
|
|
50260
|
-
out[key] = "[REDACTED]";
|
|
50261
|
-
continue;
|
|
50262
|
-
}
|
|
50263
|
-
out[key] = sanitizeRuntimeNetworkDebugPayload(item, {
|
|
50264
|
-
...options,
|
|
50265
|
-
key
|
|
50266
|
-
});
|
|
50267
|
-
}
|
|
50268
|
-
return out;
|
|
50269
|
-
}
|
|
50270
|
-
return sanitizeRuntimeDiagnosticValue(String(value));
|
|
50271
|
-
};
|
|
50272
|
-
getRuntimeNetworkDebugEntries = () => runtimeNetworkDebugEntries.slice();
|
|
50273
|
-
startRuntimeNetworkDebugTrace = (input) => {
|
|
50274
|
-
const { targetProtocol, targetHost, targetPath } = normalizeRuntimeNetworkUrl(input.url);
|
|
50275
|
-
const entry = {
|
|
50276
|
-
id: buildRuntimeNetworkDebugId(),
|
|
50277
|
-
kind: input.kind,
|
|
50278
|
-
label: input.label,
|
|
50279
|
-
transport: "browser",
|
|
50280
|
-
providerTransport: input.kind === "provider" ? input.providerTransport ?? "direct" : null,
|
|
50281
|
-
actualRelayPath: input.kind === "provider" && input.providerTransport === "server_relay" ? "/llm/native-provider-relay" : null,
|
|
50282
|
-
method: (input.method || "POST").toUpperCase(),
|
|
50283
|
-
targetProtocol,
|
|
50284
|
-
targetHost,
|
|
50285
|
-
targetPath,
|
|
50286
|
-
startedAt: Date.now(),
|
|
50287
|
-
completedAt: null,
|
|
50288
|
-
status: null,
|
|
50289
|
-
outcome: "pending",
|
|
50290
|
-
error: null,
|
|
50291
|
-
note: typeof input.note === "string" ? input.note : null,
|
|
50292
|
-
request: null,
|
|
50293
|
-
response: null,
|
|
50294
|
-
browser: {
|
|
50295
|
-
started: readRuntimeNetworkBrowserContext(),
|
|
50296
|
-
completed: null,
|
|
50297
|
-
elapsedMs: null,
|
|
50298
|
-
failureKind: null
|
|
50299
|
-
}
|
|
50300
|
-
};
|
|
50301
|
-
runtimeNetworkDebugEntries = [entry, ...runtimeNetworkDebugEntries].slice(0, MAX_RUNTIME_NETWORK_DEBUG_ENTRIES);
|
|
50302
|
-
emitRuntimeNetworkDebugEntries();
|
|
50303
|
-
let completed = false;
|
|
50304
|
-
const finalize2 = (outcome, status, error48) => {
|
|
50305
|
-
if (completed) {
|
|
50306
|
-
return;
|
|
50307
|
-
}
|
|
50308
|
-
completed = true;
|
|
50309
|
-
const completedAt = Date.now();
|
|
50310
|
-
const completedBrowserContext = readRuntimeNetworkBrowserContext();
|
|
50311
|
-
runtimeNetworkDebugEntries = runtimeNetworkDebugEntries.map((candidate) => candidate.id === entry.id ? {
|
|
50312
|
-
...candidate,
|
|
50313
|
-
completedAt,
|
|
50314
|
-
status,
|
|
50315
|
-
outcome,
|
|
50316
|
-
error: error48,
|
|
50317
|
-
browser: candidate.browser ? {
|
|
50318
|
-
...candidate.browser,
|
|
50319
|
-
completed: completedBrowserContext,
|
|
50320
|
-
elapsedMs: Math.max(0, completedAt - candidate.startedAt),
|
|
50321
|
-
failureKind: outcome === "error" ? classifyRuntimeNetworkFailure(error48, status) : null
|
|
50322
|
-
} : null
|
|
50323
|
-
} : candidate);
|
|
50324
|
-
emitRuntimeNetworkDebugEntries();
|
|
50325
|
-
const failedProviderEntry = runtimeNetworkDebugEntries.find((candidate) => candidate.id === entry.id && candidate.kind === "provider" && candidate.outcome === "error");
|
|
50326
|
-
if (failedProviderEntry) {
|
|
50327
|
-
const providerFailureEntry = {
|
|
50328
|
-
...failedProviderEntry,
|
|
50329
|
-
healthProbe: null
|
|
50330
|
-
};
|
|
50331
|
-
runtimeProviderFailureDebugEntries = [
|
|
50332
|
-
providerFailureEntry,
|
|
50333
|
-
...runtimeProviderFailureDebugEntries.filter((candidate) => candidate.id !== providerFailureEntry.id)
|
|
50334
|
-
].slice(0, MAX_RUNTIME_PROVIDER_FAILURE_DEBUG_ENTRIES);
|
|
50335
|
-
emitRuntimeProviderFailureDebugEntries();
|
|
50336
|
-
runLocalProviderFailureHealthProbe(providerFailureEntry);
|
|
50337
|
-
}
|
|
50338
|
-
const failedMarketDataEntry = runtimeNetworkDebugEntries.find((candidate) => candidate.id === entry.id && isRuntimeMarketDataFailureDebugEntry(candidate));
|
|
50339
|
-
if (failedMarketDataEntry) {
|
|
50340
|
-
runtimeMarketDataFailureDebugEntries = [
|
|
50341
|
-
failedMarketDataEntry,
|
|
50342
|
-
...runtimeMarketDataFailureDebugEntries.filter((candidate) => candidate.id !== failedMarketDataEntry.id)
|
|
50343
|
-
].slice(0, MAX_RUNTIME_MARKET_DATA_FAILURE_DEBUG_ENTRIES);
|
|
50344
|
-
emitRuntimeMarketDataFailureDebugEntries();
|
|
50345
|
-
}
|
|
50346
|
-
};
|
|
50347
|
-
const attachPayload = (field, payload) => {
|
|
50348
|
-
runtimeNetworkDebugEntries = runtimeNetworkDebugEntries.map((candidate) => candidate.id === entry.id ? {
|
|
50349
|
-
...candidate,
|
|
50350
|
-
[field]: sanitizeRuntimeNetworkDebugPayload(payload, {
|
|
50351
|
-
compactPromptText: field === "request"
|
|
50352
|
-
})
|
|
50353
|
-
} : candidate);
|
|
50354
|
-
emitRuntimeNetworkDebugEntries();
|
|
50355
|
-
};
|
|
50356
|
-
return {
|
|
50357
|
-
id: entry.id,
|
|
50358
|
-
attachRequest: (payload) => attachPayload("request", payload),
|
|
50359
|
-
attachResponse: (payload) => attachPayload("response", payload),
|
|
50360
|
-
completeSuccess: (status) => finalize2("ok", typeof status === "number" ? status : null, null),
|
|
50361
|
-
completeError: (error48, status) => {
|
|
50362
|
-
const message = getSanitizedRuntimeErrorMessage(error48);
|
|
50363
|
-
finalize2("error", typeof status === "number" ? status : null, message);
|
|
50364
|
-
}
|
|
50365
|
-
};
|
|
50366
|
-
};
|
|
50367
|
-
appendRuntimeDebugEvent = (input) => {
|
|
50368
|
-
const outcome = input.outcome === "error" ? "error" : "ok";
|
|
50369
|
-
const entry = {
|
|
50370
|
-
id: buildRuntimeNetworkDebugId(),
|
|
50371
|
-
kind: "runtime",
|
|
50372
|
-
label: String(input.label || "runtime_event").trim() || "runtime_event",
|
|
50373
|
-
transport: "browser",
|
|
50374
|
-
method: "TRACE",
|
|
50375
|
-
targetProtocol: null,
|
|
50376
|
-
targetHost: "client-runtime",
|
|
50377
|
-
targetPath: "/runtime",
|
|
50378
|
-
startedAt: Date.now(),
|
|
50379
|
-
completedAt: Date.now(),
|
|
50380
|
-
status: null,
|
|
50381
|
-
outcome,
|
|
50382
|
-
error: null,
|
|
50383
|
-
note: typeof input.note === "string" && input.note.trim().length > 0 ? input.note.trim() : null,
|
|
50384
|
-
request: null,
|
|
50385
|
-
response: null,
|
|
50386
|
-
browser: {
|
|
50387
|
-
started: readRuntimeNetworkBrowserContext(),
|
|
50388
|
-
completed: readRuntimeNetworkBrowserContext(),
|
|
50389
|
-
elapsedMs: 0,
|
|
50390
|
-
failureKind: null
|
|
50391
|
-
}
|
|
50392
|
-
};
|
|
50393
|
-
runtimeNetworkDebugEntries = [entry, ...runtimeNetworkDebugEntries].slice(0, MAX_RUNTIME_NETWORK_DEBUG_ENTRIES);
|
|
50394
|
-
emitRuntimeNetworkDebugEntries({ persist: outcome === "error" });
|
|
50395
|
-
};
|
|
50396
|
-
}
|
|
50397
|
-
});
|
|
50398
|
-
|
|
50399
50455
|
// lib/runtime/hyperliquid-account-state-adapter.ts
|
|
50400
50456
|
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;
|
|
50401
50457
|
var init_hyperliquid_account_state_adapter = __esm({
|
|
@@ -51115,10 +51171,11 @@ var init_hyperliquid_account_state_adapter = __esm({
|
|
|
51115
51171
|
const markPrice = Number.isFinite(size) && Math.abs(size) > 0 && Number.isFinite(positionValue) && positionValue > 0 ? positionValue / Math.abs(size) : null;
|
|
51116
51172
|
return {
|
|
51117
51173
|
size: Number.isFinite(size) ? size : 0,
|
|
51174
|
+
entryPrice: Number.isFinite(Number(position?.entryPx)) && Number(position?.entryPx) > 0 ? Number(position.entryPx) : null,
|
|
51118
51175
|
markPrice: markPrice != null && Number.isFinite(markPrice) && markPrice > 0 ? markPrice : null
|
|
51119
51176
|
};
|
|
51120
51177
|
}
|
|
51121
|
-
return { size: 0, markPrice: null };
|
|
51178
|
+
return { size: 0, markPrice: null, entryPrice: null };
|
|
51122
51179
|
};
|
|
51123
51180
|
fetchBrowserAccountState = async (input) => {
|
|
51124
51181
|
configureHyperliquidMarketSymbolCasing(input.config.client_runtime_hyperliquid_case_sensitive_symbols);
|
|
@@ -52098,6 +52155,26 @@ var init_local_breadcrumbs = __esm({
|
|
|
52098
52155
|
}
|
|
52099
52156
|
});
|
|
52100
52157
|
|
|
52158
|
+
// lib/api/browser-api-url.ts
|
|
52159
|
+
function resolveBrowserApiUrl(hostname3, protocol, publicApiUrl, development) {
|
|
52160
|
+
if (development) {
|
|
52161
|
+
const local = hostname3 === "localhost" || hostname3 === "127.0.0.1" || hostname3.startsWith("192.168.") || hostname3.startsWith("10.") || hostname3.startsWith("172.") && Number(hostname3.split(".")[1]) >= 16 && Number(hostname3.split(".")[1]) <= 31;
|
|
52162
|
+
if (local) return `http://${hostname3}:8000`;
|
|
52163
|
+
}
|
|
52164
|
+
if (publicApiUrl) return publicApiUrl;
|
|
52165
|
+
const baseHost = hostname3.startsWith("www.") ? hostname3.slice(4) : hostname3;
|
|
52166
|
+
const apiHost = baseHost.startsWith("api.") ? baseHost : `api.${baseHost}`;
|
|
52167
|
+
return `${protocol}//${apiHost}`;
|
|
52168
|
+
}
|
|
52169
|
+
var init_browser_api_url = __esm({
|
|
52170
|
+
"lib/api/browser-api-url.ts"() {
|
|
52171
|
+
"use strict";
|
|
52172
|
+
init_define_VTX_EXO_POLICY();
|
|
52173
|
+
init_define_VTX_GROK_POLICY();
|
|
52174
|
+
init_define_VTX_PI_MODEL_POLICY();
|
|
52175
|
+
}
|
|
52176
|
+
});
|
|
52177
|
+
|
|
52101
52178
|
// lib/api/shared.ts
|
|
52102
52179
|
function getProfileHeaders(baseHeaders = {}, explicitProfileId) {
|
|
52103
52180
|
const headers = { ...baseHeaders };
|
|
@@ -52112,34 +52189,19 @@ var init_shared = __esm({
|
|
|
52112
52189
|
init_define_VTX_EXO_POLICY();
|
|
52113
52190
|
init_define_VTX_GROK_POLICY();
|
|
52114
52191
|
init_define_VTX_PI_MODEL_POLICY();
|
|
52192
|
+
init_browser_api_url();
|
|
52115
52193
|
init_runtime_policy_generated();
|
|
52116
52194
|
init_abort();
|
|
52117
52195
|
getApiUrl = () => {
|
|
52118
52196
|
if (typeof window === "undefined") {
|
|
52119
52197
|
return process.env.API_URL_SERVER || process.env.NEXT_PUBLIC_API_URL || "http://api:8000";
|
|
52120
52198
|
}
|
|
52121
|
-
|
|
52122
|
-
|
|
52123
|
-
|
|
52124
|
-
|
|
52125
|
-
|
|
52126
|
-
|
|
52127
|
-
if (hostname3 === "localhost" || hostname3 === "127.0.0.1") {
|
|
52128
|
-
return `http://${hostname3}:8000`;
|
|
52129
|
-
}
|
|
52130
|
-
}
|
|
52131
|
-
if (process.env.NEXT_PUBLIC_API_URL) {
|
|
52132
|
-
return process.env.NEXT_PUBLIC_API_URL;
|
|
52133
|
-
}
|
|
52134
|
-
try {
|
|
52135
|
-
const hostname3 = window.location.hostname;
|
|
52136
|
-
const protocol = window.location.protocol;
|
|
52137
|
-
const baseHost = hostname3.startsWith("www.") ? hostname3.slice(4) : hostname3;
|
|
52138
|
-
const apiHost = baseHost.startsWith("api.") ? baseHost : `api.${baseHost}`;
|
|
52139
|
-
return `${protocol}//${apiHost}`;
|
|
52140
|
-
} catch {
|
|
52141
|
-
return "http://localhost:8000";
|
|
52142
|
-
}
|
|
52199
|
+
return resolveBrowserApiUrl(
|
|
52200
|
+
window.location.hostname,
|
|
52201
|
+
window.location.protocol,
|
|
52202
|
+
process.env.NEXT_PUBLIC_API_URL,
|
|
52203
|
+
process.env.NODE_ENV === "development"
|
|
52204
|
+
);
|
|
52143
52205
|
};
|
|
52144
52206
|
API_URL = getApiUrl();
|
|
52145
52207
|
sleep2 = (ms) => new Promise((resolve13) => setTimeout(resolve13, ms));
|
|
@@ -52205,6 +52267,18 @@ var init_shared = __esm({
|
|
|
52205
52267
|
}
|
|
52206
52268
|
});
|
|
52207
52269
|
|
|
52270
|
+
// lib/api/client-runtime-bootstrap.ts
|
|
52271
|
+
var init_client_runtime_bootstrap = __esm({
|
|
52272
|
+
"lib/api/client-runtime-bootstrap.ts"() {
|
|
52273
|
+
"use strict";
|
|
52274
|
+
init_define_VTX_EXO_POLICY();
|
|
52275
|
+
init_define_VTX_GROK_POLICY();
|
|
52276
|
+
init_define_VTX_PI_MODEL_POLICY();
|
|
52277
|
+
init_local_breadcrumbs();
|
|
52278
|
+
init_browser_api_url();
|
|
52279
|
+
}
|
|
52280
|
+
});
|
|
52281
|
+
|
|
52208
52282
|
// lib/api/billing.ts
|
|
52209
52283
|
var init_billing = __esm({
|
|
52210
52284
|
"lib/api/billing.ts"() {
|
|
@@ -52976,6 +53050,7 @@ var init_api2 = __esm({
|
|
|
52976
53050
|
init_abort();
|
|
52977
53051
|
init_shared();
|
|
52978
53052
|
init_shared();
|
|
53053
|
+
init_client_runtime_bootstrap();
|
|
52979
53054
|
init_billing();
|
|
52980
53055
|
init_market_data();
|
|
52981
53056
|
init_screener();
|
|
@@ -87602,7 +87677,7 @@ var init_browser_trading = __esm({
|
|
|
87602
87677
|
});
|
|
87603
87678
|
|
|
87604
87679
|
// lib/runtime/execution-guard-contract.ts
|
|
87605
|
-
var unitsFromPosition, signedUnitsFromPosition, classifyExecutionIntent, resolveExecutionTarget;
|
|
87680
|
+
var unitsFromPosition, signedUnitsFromPosition, signedUnitsFromEntryPosition, classifyExecutionIntent, resolveExecutionTarget;
|
|
87606
87681
|
var init_execution_guard_contract = __esm({
|
|
87607
87682
|
"lib/runtime/execution-guard-contract.ts"() {
|
|
87608
87683
|
"use strict";
|
|
@@ -87629,6 +87704,17 @@ var init_execution_guard_contract = __esm({
|
|
|
87629
87704
|
}
|
|
87630
87705
|
return sizeValue < 0 ? -units : units;
|
|
87631
87706
|
};
|
|
87707
|
+
signedUnitsFromEntryPosition = (size, entryPrice, unitSizeUsdc) => {
|
|
87708
|
+
const sizeValue = Number(size);
|
|
87709
|
+
if (!Number.isFinite(sizeValue)) throw new Error("Position size is invalid for execution unit classification.");
|
|
87710
|
+
if (sizeValue === 0) return 0;
|
|
87711
|
+
const entry = Number(entryPrice);
|
|
87712
|
+
const unit = Number(unitSizeUsdc);
|
|
87713
|
+
if (!Number.isFinite(entry) || entry <= 0 || !Number.isFinite(unit) || unit <= 0) {
|
|
87714
|
+
throw new Error("Position entry price and unit size must be positive for execution unit classification.");
|
|
87715
|
+
}
|
|
87716
|
+
return signedUnitsFromPosition(sizeValue, entry, unit);
|
|
87717
|
+
};
|
|
87632
87718
|
classifyExecutionIntent = (action, requestedUnits, snapshotSignedUnits) => {
|
|
87633
87719
|
const actionNormalized = String(action ?? "HOLD").trim().toUpperCase();
|
|
87634
87720
|
const parsedUnits = Number.parseInt(String(Number(requestedUnits ?? 0)), 10);
|
|
@@ -87832,7 +87918,7 @@ var init_execution_guard_contract = __esm({
|
|
|
87832
87918
|
});
|
|
87833
87919
|
|
|
87834
87920
|
// lib/runtime/runtime-execution.ts
|
|
87835
|
-
var executionReadPriority, fetchClientRuntimeOpenOrders, createRuntimeId, _extractOrderId, _toExecutionMetadata, _extractClientMutationId, trailingStopMemory, protectiveGroupMemory, protectiveGroupReadFailures, windowHandoffCleanupAttempts, clientRuntimeProtectionStorage, resolveClientRuntimeProtectionStorage, setClientRuntimeProtectionStorage, trailingStopStorageKey, readTrackedTrailingStops, writeTrackedTrailingStops, rememberTrailingStop, protectiveGroupStorageKey, readClientProtectiveGroups, writeClientProtectiveGroups, hasClientProtectiveGroupReadFailure, readFreshClientProtectiveGroups, stableProtectionSnapshot, exactClientProtectiveGroupSnapshot, exactClientProtectiveGroupSetSnapshot, replaceExactClientProtectiveGroup, replaceExactClientProtectiveGroupSet, isClientRuntimeLeaseOwnershipError, hasClientRuntimeProtectionState, clearClientRuntimeVetoedProtectiveIntent, rethrowWindowHandoffAfterProtectiveReplacementVeto, canPersistClientProtectiveGroups, removeTrackedTrailingStop, replaceTrackedTrailingStop, replaceProtectiveLeg, replacementJournalEntryOrderId, buildProtectiveReplacementJournalGroup, isProtectiveReplacementJournalGroup, reserveProtectiveLegReplacement, ensureProtectiveReplacementJournalCompanion, buildVetoedProtectiveReplacementCleanup, assertExactProtectiveReplacementDispatchAuthority, transitionProtectiveReplacementAcknowledgement, transitionTerminalProtectiveReplacement, pendingProtectiveReplacementReport, toPositiveNumber, resolveRiskPct, buildTriggerPrice, isConfiguredProtectionRequested, protectiveAction, isExactClientPositionTpslPair, hasAmbiguousClientPositionTpslAuthority, protectiveStableShapeMatches, protectiveLiveShapeMatches, protectiveTerminalShapeMatches, cancelClientProtectiveLeg, buildPendingProtectivePlan, attachClientProtectivePlan, resolveJournaledAttachmentContinuity, recoverJournaledClientProtectiveAttachments, recoverPendingClientProtectiveGroups, recoverPendingProtectiveReplacements, reconcileClientProtectiveGroups, cancelAllClientProtectiveGroups, tightenClientTrailingStops, throwIfAborted2, sleep3, roundAssetSize, resolvePositionSize, resolveCurrentPositionSize, buildPositionSnapshot, signedRemainingExposureAfterConfirmedReduction, verifyNoLiveClientProtectiveTriggers, executeClientRuntimeDecision;
|
|
87921
|
+
var executionReadPriority, fetchClientRuntimeOpenOrders, createRuntimeId, _extractOrderId, _toExecutionMetadata, _extractClientMutationId, trailingStopMemory, protectiveGroupMemory, protectiveGroupReadFailures, windowHandoffCleanupAttempts, clientRuntimeProtectionStorage, resolveClientRuntimeProtectionStorage, setClientRuntimeProtectionStorage, trailingStopStorageKey, readTrackedTrailingStops, writeTrackedTrailingStops, rememberTrailingStop, protectiveGroupStorageKey, readClientProtectiveGroups, writeClientProtectiveGroups, hasClientProtectiveGroupReadFailure, readFreshClientProtectiveGroups, stableProtectionSnapshot, exactClientProtectiveGroupSnapshot, exactClientProtectiveGroupSetSnapshot, replaceExactClientProtectiveGroup, replaceExactClientProtectiveGroupSet, isClientRuntimeLeaseOwnershipError, hasClientRuntimeProtectionState, clearClientRuntimeVetoedProtectiveIntent, rethrowWindowHandoffAfterProtectiveReplacementVeto, canPersistClientProtectiveGroups, removeTrackedTrailingStop, replaceTrackedTrailingStop, replaceProtectiveLeg, replacementJournalEntryOrderId, buildProtectiveReplacementJournalGroup, isProtectiveReplacementJournalGroup, reserveProtectiveLegReplacement, ensureProtectiveReplacementJournalCompanion, buildVetoedProtectiveReplacementCleanup, assertExactProtectiveReplacementDispatchAuthority, transitionProtectiveReplacementAcknowledgement, transitionTerminalProtectiveReplacement, pendingProtectiveReplacementReport, toPositiveNumber, resolveRiskPct, buildTriggerPrice, isConfiguredProtectionRequested, protectiveAction, isExactClientPositionTpslPair, hasAmbiguousClientPositionTpslAuthority, protectiveStableShapeMatches, protectiveLiveShapeMatches, protectiveTerminalShapeMatches, cancelClientProtectiveLeg, buildPendingProtectivePlan, attachClientProtectivePlan, resolveJournaledAttachmentContinuity, recoverJournaledClientProtectiveAttachments, recoverPendingClientProtectiveGroups, recoverPendingProtectiveReplacements, reconcileClientProtectiveGroups, cancelAllClientProtectiveGroups, tightenClientTrailingStops, throwIfAborted2, sleep3, roundAssetSize, resolvePositionSize, resolveCurrentPositionSize, buildPositionSnapshot, signedRemainingExposureAfterConfirmedReduction, verifyNoLiveClientProtectiveTriggers, clientExecutionMutations, withClientExecutionMutation, executeClientRuntimeDecision, maintainClientRuntimeTrailingStops, executeClientRuntimeDecisionUnlocked;
|
|
87836
87922
|
var init_runtime_execution = __esm({
|
|
87837
87923
|
"lib/runtime/runtime-execution.ts"() {
|
|
87838
87924
|
"use strict";
|
|
@@ -87853,7 +87939,7 @@ var init_runtime_execution = __esm({
|
|
|
87853
87939
|
const classified = classifyExecutionIntent(
|
|
87854
87940
|
input.decision,
|
|
87855
87941
|
input.units,
|
|
87856
|
-
|
|
87942
|
+
signedUnitsFromEntryPosition(context.currentPositionSize, context.currentPositionEntryPrice, context.unitSizeUsdc)
|
|
87857
87943
|
);
|
|
87858
87944
|
return classified.reduceOnly ? "trading_reduce" : "trading_execute";
|
|
87859
87945
|
};
|
|
@@ -91454,6 +91540,9 @@ var init_runtime_execution = __esm({
|
|
|
91454
91540
|
signal: request.signal,
|
|
91455
91541
|
signingKey: request.signingKey,
|
|
91456
91542
|
onExchangeOrderDispatched: () => {
|
|
91543
|
+
if (request.shouldCancelBeforeExchangeOrderDispatch?.()) {
|
|
91544
|
+
throw new Error(CLIENT_RUNTIME_WINDOW_HANDOFF_BEFORE_PLAN_DISPATCH);
|
|
91545
|
+
}
|
|
91457
91546
|
if (!assertExactProtectiveReplacementDispatchAuthority({
|
|
91458
91547
|
profileId,
|
|
91459
91548
|
symbol: symbol2,
|
|
@@ -91659,9 +91748,8 @@ var init_runtime_execution = __esm({
|
|
|
91659
91748
|
sessionId: input.sessionId,
|
|
91660
91749
|
signal: input.signal
|
|
91661
91750
|
});
|
|
91662
|
-
const
|
|
91663
|
-
|
|
91664
|
-
);
|
|
91751
|
+
const refreshedPositionSnapshot = refreshed.positions.find((position) => position.symbol === input.executionContext.symbol);
|
|
91752
|
+
const refreshedPosition = resolvePositionSize(refreshedPositionSnapshot);
|
|
91665
91753
|
const refreshedPrice = Number(refreshed.availableToTrade.mark_price);
|
|
91666
91754
|
appendRuntimeDebugEvent({
|
|
91667
91755
|
label: "execution_snapshot_refreshed",
|
|
@@ -91669,6 +91757,7 @@ var init_runtime_execution = __esm({
|
|
|
91669
91757
|
});
|
|
91670
91758
|
return {
|
|
91671
91759
|
currentPositionSize: Number.isFinite(refreshedPosition) ? refreshedPosition : snapshotPositionSize,
|
|
91760
|
+
currentPositionEntryPrice: refreshedPositionSnapshot?.entry_price ?? null,
|
|
91672
91761
|
executionPrice: Number.isFinite(refreshedPrice) && refreshedPrice > 0 ? refreshedPrice : decisionPrice,
|
|
91673
91762
|
executionSnapshotId: createRuntimeId(),
|
|
91674
91763
|
executionSnapshotCapturedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
@@ -91691,6 +91780,7 @@ var init_runtime_execution = __esm({
|
|
|
91691
91780
|
});
|
|
91692
91781
|
return {
|
|
91693
91782
|
currentPositionSize: Number.isFinite(parsedLiveSize) ? parsedLiveSize : snapshotPositionSize,
|
|
91783
|
+
currentPositionEntryPrice: liveBrowserSnapshot.entryPrice,
|
|
91694
91784
|
executionPrice: decisionPrice,
|
|
91695
91785
|
executionSnapshotId: createRuntimeId(),
|
|
91696
91786
|
executionSnapshotCapturedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
@@ -91757,7 +91847,52 @@ var init_runtime_execution = __esm({
|
|
|
91757
91847
|
return { blocksEntry: false, reports: [] };
|
|
91758
91848
|
}
|
|
91759
91849
|
};
|
|
91760
|
-
|
|
91850
|
+
clientExecutionMutations = /* @__PURE__ */ new Map();
|
|
91851
|
+
withClientExecutionMutation = async (request, work) => {
|
|
91852
|
+
const key = String(request.profileId).trim();
|
|
91853
|
+
const previous = clientExecutionMutations.get(key);
|
|
91854
|
+
const pending3 = (previous ?? Promise.resolve()).catch(() => void 0).then(() => {
|
|
91855
|
+
throwIfAborted2(request.signal);
|
|
91856
|
+
if (request.shouldCancelBeforeExchangeOrderDispatch?.()) {
|
|
91857
|
+
throw new Error(CLIENT_RUNTIME_WINDOW_HANDOFF_BEFORE_PLAN_DISPATCH);
|
|
91858
|
+
}
|
|
91859
|
+
return work();
|
|
91860
|
+
});
|
|
91861
|
+
clientExecutionMutations.set(key, pending3);
|
|
91862
|
+
try {
|
|
91863
|
+
return await pending3;
|
|
91864
|
+
} finally {
|
|
91865
|
+
if (clientExecutionMutations.get(key) === pending3) clientExecutionMutations.delete(key);
|
|
91866
|
+
}
|
|
91867
|
+
};
|
|
91868
|
+
executeClientRuntimeDecision = (input) => withClientExecutionMutation(input, () => executeClientRuntimeDecisionUnlocked(input));
|
|
91869
|
+
maintainClientRuntimeTrailingStops = (request) => withClientExecutionMutation(request, async () => {
|
|
91870
|
+
const context = request.executionContext;
|
|
91871
|
+
const capturedAt = Date.parse(context.decisionSnapshotCapturedAt ?? "");
|
|
91872
|
+
const maxAge = Number(context.executionFreshnessMaxAgeSeconds) * 1e3;
|
|
91873
|
+
const age = Date.now() - capturedAt;
|
|
91874
|
+
if (!context.tpSlEnabled || context.stopLossEnabled === false || context.stopLossType !== "trailing" || !Number.isFinite(age) || age < 0 || !Number.isFinite(maxAge) || maxAge <= 0 || age > maxAge || !Number.isFinite(context.currentPositionSize) || context.currentPositionSize === 0 || !Number.isFinite(context.lastPrice) || context.lastPrice <= 0) return [];
|
|
91875
|
+
const groups = readFreshClientProtectiveGroups(String(request.profileId).trim(), context.symbol);
|
|
91876
|
+
if (hasClientProtectiveGroupReadFailure(String(request.profileId).trim(), context.symbol) || groups.some((group) => group.walletAddress !== String(context.walletAddress ?? "").trim().toLowerCase() || group.pendingEntry || group.attachmentJournal || group.cleanupRequired || group.legs.some((leg) => leg.replacement))) return [];
|
|
91877
|
+
const isLong = context.currentPositionSize > 0;
|
|
91878
|
+
const improves = groups.some((group) => group.isLong === isLong && group.legs.some((leg) => {
|
|
91879
|
+
if (!leg.isTrailing || typeof leg.orderId !== "number") return false;
|
|
91880
|
+
const size = roundAssetSize(Math.min(leg.size, Math.abs(context.currentPositionSize)), context.sizeDecimals);
|
|
91881
|
+
if (!(size > 0)) return false;
|
|
91882
|
+
const risk = resolveRiskPct(context.stopLossMode, context.stopLossPct, context.stopLossUsdc, context.lastPrice * size);
|
|
91883
|
+
const raw = buildTriggerPrice(context.lastPrice, risk, isLong, false);
|
|
91884
|
+
const candidate = raw > 0 ? Number(formatHyperliquidTriggerPriceWire(raw, context.sizeDecimals)) : 0;
|
|
91885
|
+
return candidate > 0 && (isLong ? candidate > leg.triggerPrice : candidate < leg.triggerPrice);
|
|
91886
|
+
}));
|
|
91887
|
+
if (!improves) return [];
|
|
91888
|
+
await request.beforeTrailingMaintenance?.(request.signal);
|
|
91889
|
+
const guardedRequest = { ...request, onExchangeOrderDispatched: (kind) => {
|
|
91890
|
+
if (Date.now() - capturedAt > maxAge) throw new Error("Trailing observation expired before exchange dispatch.");
|
|
91891
|
+
request.onExchangeOrderDispatched?.(kind);
|
|
91892
|
+
} };
|
|
91893
|
+
return tightenClientTrailingStops({ request: guardedRequest, currentPositionSize: context.currentPositionSize, currentPrice: context.lastPrice });
|
|
91894
|
+
});
|
|
91895
|
+
executeClientRuntimeDecisionUnlocked = async (input) => {
|
|
91761
91896
|
throwIfAborted2(input.signal);
|
|
91762
91897
|
const requestedUnits = Math.max(0, Math.trunc(input.units));
|
|
91763
91898
|
appendRuntimeDebugEvent({
|
|
@@ -91765,6 +91900,11 @@ var init_runtime_execution = __esm({
|
|
|
91765
91900
|
note: `decision=${input.decision} units=${requestedUnits} symbol=${input.executionContext.symbol}`
|
|
91766
91901
|
});
|
|
91767
91902
|
const decisionSnapshotPositionSize = Number.isFinite(input.executionContext.currentPositionSize) ? Number(input.executionContext.currentPositionSize) : 0;
|
|
91903
|
+
const decisionSnapshotSignedUnits = signedUnitsFromEntryPosition(
|
|
91904
|
+
decisionSnapshotPositionSize,
|
|
91905
|
+
input.executionContext.currentPositionEntryPrice,
|
|
91906
|
+
input.executionContext.unitSizeUsdc
|
|
91907
|
+
);
|
|
91768
91908
|
const profileId = String(input.profileId).trim();
|
|
91769
91909
|
const hasTrackedProtection = readClientProtectiveGroups(
|
|
91770
91910
|
profileId,
|
|
@@ -91782,10 +91922,11 @@ var init_runtime_execution = __esm({
|
|
|
91782
91922
|
execution_metadata: { reason_code: "protective_lifecycle_storage_invalid" }
|
|
91783
91923
|
}] : hasTrackedProtection ? await reconcileClientProtectiveGroups(input) : [];
|
|
91784
91924
|
if (input.decision === "HOLD" || requestedUnits <= 0) {
|
|
91785
|
-
const shouldTrail = input.executionContext.tpSlEnabled === true && input.executionContext.stopLossEnabled !== false && input.executionContext.stopLossType === "trailing" && decisionSnapshotPositionSize !== 0;
|
|
91925
|
+
const shouldTrail = !input.skipTrailingMaintenance && input.executionContext.tpSlEnabled === true && input.executionContext.stopLossEnabled !== false && input.executionContext.stopLossType === "trailing" && decisionSnapshotPositionSize !== 0;
|
|
91786
91926
|
if (shouldTrail && !reconciliationReports.some((report) => report.status === "failed")) {
|
|
91787
91927
|
const {
|
|
91788
91928
|
currentPositionSize: currentPositionSize2,
|
|
91929
|
+
currentPositionEntryPrice: currentPositionEntryPrice2,
|
|
91789
91930
|
executionPrice: executionPrice2,
|
|
91790
91931
|
executionSnapshotId: executionSnapshotId2,
|
|
91791
91932
|
executionSnapshotCapturedAt: executionSnapshotCapturedAt2
|
|
@@ -91810,9 +91951,9 @@ var init_runtime_execution = __esm({
|
|
|
91810
91951
|
side: null,
|
|
91811
91952
|
reduceOnly: false,
|
|
91812
91953
|
requestedUnits,
|
|
91813
|
-
targetSignedUnits:
|
|
91954
|
+
targetSignedUnits: signedUnitsFromEntryPosition(
|
|
91814
91955
|
currentPositionSize2,
|
|
91815
|
-
|
|
91956
|
+
currentPositionEntryPrice2,
|
|
91816
91957
|
input.executionContext.unitSizeUsdc
|
|
91817
91958
|
),
|
|
91818
91959
|
executedSizeAsset: 0,
|
|
@@ -91828,11 +91969,7 @@ var init_runtime_execution = __esm({
|
|
|
91828
91969
|
side: null,
|
|
91829
91970
|
reduceOnly: false,
|
|
91830
91971
|
requestedUnits,
|
|
91831
|
-
targetSignedUnits:
|
|
91832
|
-
decisionSnapshotPositionSize,
|
|
91833
|
-
input.executionContext.lastPrice,
|
|
91834
|
-
input.executionContext.unitSizeUsdc
|
|
91835
|
-
),
|
|
91972
|
+
targetSignedUnits: decisionSnapshotSignedUnits,
|
|
91836
91973
|
executedSizeAsset: 0,
|
|
91837
91974
|
executionReports: reconciliationReports,
|
|
91838
91975
|
message: reconciliationReports.some((report) => report.status === "executed") ? "Reconciled protective orders" : input.decision === "HOLD" ? "Hold (No Action)" : "Unsupported decision",
|
|
@@ -91842,20 +91979,16 @@ var init_runtime_execution = __esm({
|
|
|
91842
91979
|
}
|
|
91843
91980
|
const {
|
|
91844
91981
|
currentPositionSize,
|
|
91982
|
+
currentPositionEntryPrice,
|
|
91845
91983
|
executionPrice,
|
|
91846
91984
|
executionSnapshotId,
|
|
91847
91985
|
executionSnapshotCapturedAt
|
|
91848
91986
|
} = await resolveCurrentPositionSize(input);
|
|
91849
91987
|
throwIfAborted2(input.signal);
|
|
91850
91988
|
const currentPosition = buildPositionSnapshot(input.executionContext.symbol, currentPositionSize);
|
|
91851
|
-
const
|
|
91852
|
-
decisionSnapshotPositionSize,
|
|
91853
|
-
input.executionContext.lastPrice,
|
|
91854
|
-
input.executionContext.unitSizeUsdc
|
|
91855
|
-
);
|
|
91856
|
-
const liveSignedUnits = signedUnitsFromPosition(
|
|
91989
|
+
const liveSignedUnits = signedUnitsFromEntryPosition(
|
|
91857
91990
|
currentPositionSize,
|
|
91858
|
-
|
|
91991
|
+
currentPositionEntryPrice,
|
|
91859
91992
|
input.executionContext.unitSizeUsdc
|
|
91860
91993
|
);
|
|
91861
91994
|
const classified = classifyExecutionIntent(
|
|
@@ -93987,8 +94120,9 @@ async function fetchLocalHyperliquidSnapshot(input) {
|
|
|
93987
94120
|
symbol: input.symbol,
|
|
93988
94121
|
timeframe: input.timeframe,
|
|
93989
94122
|
decisionSnapshotId: input.decisionSnapshotId,
|
|
93990
|
-
decisionSnapshotCapturedAt: input.decisionSnapshotCapturedAt,
|
|
94123
|
+
decisionSnapshotCapturedAt: new Date(Math.min(Date.parse(input.decisionSnapshotCapturedAt), accountState.evidence?.fetchedAtMs ?? Date.parse(input.decisionSnapshotCapturedAt))).toISOString(),
|
|
93991
94124
|
currentPositionSize: Number.isFinite(currentPositionSize) ? currentPositionSize : 0,
|
|
94125
|
+
currentPositionEntryPrice: accountState.positions.find((position) => normalizeRuntimeSymbol(position.symbol) === normalizeRuntimeSymbol(input.symbol))?.entry_price ?? null,
|
|
93992
94126
|
walletAddress,
|
|
93993
94127
|
lastPrice,
|
|
93994
94128
|
unitSizeUsdc: requirePositiveNumber2(promptKnobs.trade_size ?? input.llmConfig.default_ai_trade_amount, "trade size"),
|
|
@@ -93997,7 +94131,8 @@ async function fetchLocalHyperliquidSnapshot(input) {
|
|
|
93997
94131
|
marginMode,
|
|
93998
94132
|
closePositionDelaySeconds: requireFiniteNumber(input.llmConfig.client_runtime_close_position_delay_seconds, "close position delay seconds"),
|
|
93999
94133
|
maxSlippageFraction: requireFiniteNumber(input.llmConfig.default_max_slippage, "max slippage") / 100,
|
|
94000
|
-
executionFreshnessMaxAgeSeconds
|
|
94134
|
+
executionFreshnessMaxAgeSeconds,
|
|
94135
|
+
...buildRuntimeSlTpExecutionSettings(promptKnobs, input.llmConfig)
|
|
94001
94136
|
}
|
|
94002
94137
|
};
|
|
94003
94138
|
}
|
|
@@ -94166,6 +94301,40 @@ function createHeadlessLocalWorker(options) {
|
|
|
94166
94301
|
user_prompt: providerInput.userPrompt
|
|
94167
94302
|
})
|
|
94168
94303
|
]);
|
|
94304
|
+
const symbol2 = requireText(prompt.symbol ?? metadata.symbol, "symbol");
|
|
94305
|
+
const timeframe = requireText(prompt.timeframe ?? metadata.timeframe, "timeframe");
|
|
94306
|
+
const secrets = objectOrNull3(input.secrets) ?? {};
|
|
94307
|
+
const protectiveSettings = buildRuntimeSlTpExecutionSettings(objectOrNull3(metadata.prompt_knobs) ?? {}, llmConfig);
|
|
94308
|
+
let preparedHyperliquidContext = null;
|
|
94309
|
+
try {
|
|
94310
|
+
preparedHyperliquidContext = protectiveSettings.tpSlEnabled && protectiveSettings.stopLossEnabled && protectiveSettings.stopLossType === "trailing" && hasClientRuntimeProtectionState(input.profileId, symbol2) ? await fetchLocalHyperliquidSnapshot({
|
|
94311
|
+
client: options.client,
|
|
94312
|
+
profileId: input.profileId,
|
|
94313
|
+
llmConfig,
|
|
94314
|
+
secrets,
|
|
94315
|
+
metadata,
|
|
94316
|
+
symbol: symbol2,
|
|
94317
|
+
timeframe,
|
|
94318
|
+
decisionSnapshotId,
|
|
94319
|
+
decisionSnapshotCapturedAt,
|
|
94320
|
+
fetchAccountState
|
|
94321
|
+
}) : null;
|
|
94322
|
+
if (preparedHyperliquidContext && preparedHyperliquidContext.accountState.evidence?.source !== "stale_if_429") {
|
|
94323
|
+
await maintainClientRuntimeTrailingStops({
|
|
94324
|
+
profileId: String(input.profileId),
|
|
94325
|
+
sessionId: input.runtimeState.runtimeSessionId,
|
|
94326
|
+
runtimeLeaseToken: input.runtimeState.leaseToken,
|
|
94327
|
+
runtimeDeviceId: input.runtimeState.deviceId,
|
|
94328
|
+
signingKey: preparedHyperliquidContext.signingKey,
|
|
94329
|
+
config: buildHeadlessExchangeConfig(llmConfig),
|
|
94330
|
+
decision: "HOLD",
|
|
94331
|
+
units: 0,
|
|
94332
|
+
executionContext: preparedHyperliquidContext.executionContext
|
|
94333
|
+
});
|
|
94334
|
+
}
|
|
94335
|
+
} catch {
|
|
94336
|
+
appendRuntimeDebugEvent({ label: "client_pre_inference_trailing_maintenance", note: "Headless trailing maintenance unavailable; continuing inference.", outcome: "error" });
|
|
94337
|
+
}
|
|
94169
94338
|
let providerResult;
|
|
94170
94339
|
try {
|
|
94171
94340
|
providerResult = options.invokeProvider ? await options.invokeProvider(providerInput) : await invokeOpenAiCompatibleProvider(providerInput, fetchImpl);
|
|
@@ -94215,10 +94384,7 @@ function createHeadlessLocalWorker(options) {
|
|
|
94215
94384
|
}
|
|
94216
94385
|
throw error48;
|
|
94217
94386
|
}
|
|
94218
|
-
const symbol2 = requireText(prompt.symbol ?? metadata.symbol, "symbol");
|
|
94219
|
-
const timeframe = requireText(prompt.timeframe ?? metadata.timeframe, "timeframe");
|
|
94220
94387
|
const providerDecision = extractDecisionPayload(providerResult.content, symbol2);
|
|
94221
|
-
const secrets = objectOrNull3(input.secrets) ?? {};
|
|
94222
94388
|
const normalizedUsage = normalizeRuntimeUsageDetails(providerResult.usage);
|
|
94223
94389
|
const detailedUsage = {
|
|
94224
94390
|
...normalizedUsage,
|
|
@@ -94293,7 +94459,7 @@ function createHeadlessLocalWorker(options) {
|
|
|
94293
94459
|
"Increase Position Tradability minimum"
|
|
94294
94460
|
);
|
|
94295
94461
|
const holdHasProtectiveWork = hasClientRuntimeProtectionState(input.profileId, symbol2);
|
|
94296
|
-
const candidateHyperliquidContext = (providerDecision.decision === "HOLD" || providerDecision.units <= 0) && !holdHasProtectiveWork ? null : await fetchLocalHyperliquidSnapshot({
|
|
94462
|
+
const candidateHyperliquidContext = (providerDecision.decision === "HOLD" || providerDecision.units <= 0) && !holdHasProtectiveWork ? null : preparedHyperliquidContext ?? await fetchLocalHyperliquidSnapshot({
|
|
94297
94463
|
client: options.client,
|
|
94298
94464
|
profileId: input.profileId,
|
|
94299
94465
|
llmConfig,
|
|
@@ -94308,9 +94474,9 @@ function createHeadlessLocalWorker(options) {
|
|
|
94308
94474
|
const classifiedIntent = candidateHyperliquidContext ? classifyExecutionIntent(
|
|
94309
94475
|
providerDecision.decision,
|
|
94310
94476
|
providerDecision.units,
|
|
94311
|
-
|
|
94477
|
+
signedUnitsFromEntryPosition(
|
|
94312
94478
|
candidateHyperliquidContext.executionContext.currentPositionSize,
|
|
94313
|
-
candidateHyperliquidContext.executionContext.
|
|
94479
|
+
candidateHyperliquidContext.executionContext.currentPositionEntryPrice,
|
|
94314
94480
|
candidateHyperliquidContext.executionContext.unitSizeUsdc
|
|
94315
94481
|
)
|
|
94316
94482
|
).intent : "hold";
|
|
@@ -94350,7 +94516,7 @@ function createHeadlessLocalWorker(options) {
|
|
|
94350
94516
|
for (const position of localHyperliquidContext.accountState.positions) {
|
|
94351
94517
|
if (Number(position.size) === 0) continue;
|
|
94352
94518
|
const entryPrice = requirePositiveNumber2(position.entry_price, "position entry price");
|
|
94353
|
-
const signedUnits =
|
|
94519
|
+
const signedUnits = signedUnitsFromEntryPosition(Number(position.size), entryPrice, unitSize);
|
|
94354
94520
|
globalUsage += Math.abs(signedUnits);
|
|
94355
94521
|
if (getHyperliquidMarketDex(position.symbol) === venue) exchangeUsage += Math.abs(signedUnits);
|
|
94356
94522
|
if (normalizeRuntimeSymbol(position.symbol) === normalizeRuntimeSymbol(symbol2)) currentSignedUnits = signedUnits;
|
|
@@ -94439,7 +94605,8 @@ function createHeadlessLocalWorker(options) {
|
|
|
94439
94605
|
config: buildHeadlessExchangeConfig(llmConfig),
|
|
94440
94606
|
decision: accepted.decision,
|
|
94441
94607
|
units: accepted.units,
|
|
94442
|
-
executionContext: localHyperliquidContext.executionContext
|
|
94608
|
+
executionContext: localHyperliquidContext.executionContext,
|
|
94609
|
+
skipTrailingMaintenance: preparedHyperliquidContext !== null
|
|
94443
94610
|
});
|
|
94444
94611
|
return {
|
|
94445
94612
|
...baseTradeSync,
|
|
@@ -94458,6 +94625,8 @@ var init_headless_local_worker = __esm({
|
|
|
94458
94625
|
init_define_VTX_EXO_POLICY();
|
|
94459
94626
|
init_define_VTX_GROK_POLICY();
|
|
94460
94627
|
init_define_VTX_PI_MODEL_POLICY();
|
|
94628
|
+
init_network_debug();
|
|
94629
|
+
init_sl_tp_execution_settings();
|
|
94461
94630
|
init_hyperliquid_account_state_adapter();
|
|
94462
94631
|
init_hyperliquid_market_symbol();
|
|
94463
94632
|
init_runtime_execution();
|